@underdogai/mesh-event-schemas 0.1.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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -0
  3. package/dist/apppacks.d.ts +15652 -0
  4. package/dist/apppacks.d.ts.map +1 -0
  5. package/dist/apppacks.js +71 -0
  6. package/dist/apppacks.js.map +1 -0
  7. package/dist/blocks.d.ts +2320 -0
  8. package/dist/blocks.d.ts.map +1 -0
  9. package/dist/blocks.js +472 -0
  10. package/dist/blocks.js.map +1 -0
  11. package/dist/capabilities.d.ts +35 -0
  12. package/dist/capabilities.d.ts.map +1 -0
  13. package/dist/capabilities.js +37 -0
  14. package/dist/capabilities.js.map +1 -0
  15. package/dist/events.d.ts +4557 -0
  16. package/dist/events.d.ts.map +1 -0
  17. package/dist/events.js +571 -0
  18. package/dist/events.js.map +1 -0
  19. package/dist/index.d.ts +16 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +16 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/namespace.d.ts +56 -0
  24. package/dist/namespace.d.ts.map +1 -0
  25. package/dist/namespace.js +60 -0
  26. package/dist/namespace.js.map +1 -0
  27. package/dist/plugins.d.ts +131 -0
  28. package/dist/plugins.d.ts.map +1 -0
  29. package/dist/plugins.js +66 -0
  30. package/dist/plugins.js.map +1 -0
  31. package/dist/registry.d.ts +67 -0
  32. package/dist/registry.d.ts.map +1 -0
  33. package/dist/registry.js +212 -0
  34. package/dist/registry.js.map +1 -0
  35. package/dist/surfaces.d.ts +54323 -0
  36. package/dist/surfaces.d.ts.map +1 -0
  37. package/dist/surfaces.js +523 -0
  38. package/dist/surfaces.js.map +1 -0
  39. package/dist/templates.d.ts +390 -0
  40. package/dist/templates.d.ts.map +1 -0
  41. package/dist/templates.js +493 -0
  42. package/dist/templates.js.map +1 -0
  43. package/package.json +50 -0
  44. package/src/apppacks.ts +90 -0
  45. package/src/blocks.ts +544 -0
  46. package/src/capabilities.ts +58 -0
  47. package/src/events.ts +758 -0
  48. package/src/index.ts +15 -0
  49. package/src/namespace.ts +64 -0
  50. package/src/plugins.ts +118 -0
  51. package/src/registry.ts +261 -0
  52. package/src/surfaces.ts +610 -0
  53. package/src/templates.ts +736 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,UAAU,gEAA8D,CAAC;AACtF,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9C,eAAO,MAAM,iBAAiB,6CAA2C,CAAC;AAC1E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,yDAAyD;AACzD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;EAKxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIpD,eAAO,MAAM,eAAe;;;IAG1B,8CAA8C;;;;;;;;;;EAE9C,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;QAMxB,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;EAI9B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;IAE3B,wDAAwD;;;;;;;;;;;;;;EAIxD,CAAC;AAEH,eAAO,MAAM,kBAAkB;;IAE7B,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAItB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAIH,eAAO,MAAM,gBAAgB;;;IAG3B,+EAA+E;;;;;;;;;;;;;;;;;;;;;;EAM/E,CAAC;AAEH,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB;;;;;IAK5B,wDAAwD;;;;;;;;;;;;;;;;;EAGxD,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;IAI5B,gBAAgB;;IAEhB,kBAAkB;;IAElB,mBAAmB;;;IAGnB,6BAA6B;;;;;;;;;;;;;;;;;;;;EAE7B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAIH,eAAO,MAAM,iBAAiB;;IAE5B,2DAA2D;;;;IAI3D,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIlC,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;IAGhC,gDAAgD;;;IAGhD,yBAAyB;;;;;;;;;;;;;;EAEzB,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB;;;;QA3B7B,2DAA2D;;;;QAI3D,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAclC,gDAAgD;;;QAGhD,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASzB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;IAE9B,qCAAqC;;;;;;QAOjC,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB;;IAE9B,sFAAsF;;;;;;;;;;;;;;EAItF,CAAC;AAEH,sDAAsD;AACtD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS3B,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,eAAe;;;;;;;;;;;;EAI1B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;IAE1B,wBAAwB;;IAExB,iFAAiF;;IAEjF,qCAAqC;;;;;;;;;;;;;;;EAGrC,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,eAAe;;IAE1B,eAAe;;IAEf,oCAAoC;;IAEpC,2DAA2D;;IAE3D,sCAAsC;;IAEtC,qCAAqC;;IAErC,iBAAiB;;;;;;;;;;;;;;;;;;EAEjB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;IAI5B,6CAA6C;;IAE7C,uBAAuB;;;;;;;;;;;;;;;;;EAGvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;IAG3B,sEAAsE;;;;;;;;;;;;;;IAKtE,yBAAyB;;IAEzB,mEAAmE;;IAEnE,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;EAEjC,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAa1D,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,8CAA8C;AAC9C,eAAO,MAAM,sBAAsB;;;;QArBjC,gCAAgC;;QAEhC,8CAA8C;;QAE9C,wCAAwC;;;;;;;;;;;;;IAoBxC,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;EAGpC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB;;;IAG3B,sBAAsB;;IAEtB,oBAAoB;;;IAGpB,4BAA4B;;;;;;;;;;;;;;;;;;;EAG5B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB;;;IAG5B,gBAAgB;;;IAGhB,sBAAsB;;;;;;;;;;;;;;EAEtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,mDAAmD;AACnD,eAAO,MAAM,kBAAkB;;;;;IAK7B,0CAA0C;;;;;;;;;;;;;;EAE1C,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,yDAAyD;AACzD,eAAO,MAAM,oBAAoB;;;IAG/B,qDAAqD;;IAErD,8CAA8C;;;;;;;;;;;;;;;EAG9C,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;YAYpB,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS1C,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;IAE/B,iEAAiE;;;;IAIjE,qCAAqC;;;;;;;;;;;;;;EAErC,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;IAEjC,0BAA0B;;IAE1B,wBAAwB;;;IAGxB;;;;OAIG;;;;;;;;;;;;;;EAEH,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CAAC;AAEpH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;IAI5B,6BAA6B;;IAE7B,kEAAkE;;IAElE,gCAAgC;;;;;;;;;;;;;;;;EAEhC,CAAC;AAEH,8CAA8C;AAC9C,eAAO,MAAM,WAAW;;;IA3ctB,8CAA8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoB1C,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQ9B,wDAAwD;;;;;;;;;;;;;;;;IAQxD,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0JtB,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyEtF,6CAA6C;;IAE7C,uBAAuB;;;;;;;;;;;;;;;;;;;;IAavB,sEAAsE;;;;;;;;;;;;;;IAKtE,yBAAyB;;IAEzB,mEAAmE;;IAEnE,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAQjC,gCAAgC;;QAEhC,8CAA8C;;QAE9C,wCAAwC;;;;;;;;;;;;;IAoBxC,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;IAUpC,sBAAsB;;IAEtB,oBAAoB;;;IAGpB,4BAA4B;;;;;;;;;;;;;;;;;;;;;;IAU5B,gBAAgB;;;IAGhB,sBAAsB;;;;;;;;;;;;;;;;;;;IAWtB,0CAA0C;;;;;;;;;;;;;;;;;IAS1C,qDAAqD;;IAErD,8CAA8C;;;;;;;;;;;;;;;;;;;;;;;;;YAuBtC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmB1C,iEAAiE;;;;IAIjE,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAhMrC,wBAAwB;;IAExB,iFAAiF;;IAEjF,qCAAqC;;;;;;;;;;;;;;;;;IAarC,eAAe;;IAEf,oCAAoC;;IAEpC,2DAA2D;;IAE3D,sCAAsC;;IAEtC,qCAAqC;;IAErC,iBAAiB;;;;;;;;;;;;;;;;;;;;IAiLjB,0BAA0B;;IAE1B,wBAAwB;;;IAGxB;;;;OAIG;;;;;;;;;;;;;;;;;;IAcH,6BAA6B;;IAE7B,kEAAkE;;IAElE,gCAAgC;;;;;;;;;;;;;;;;;;;IA3YhC,+EAA+E;;;;;;;;;;;;;;;;;;;;;;;;;;;IAc/E,wDAAwD;;;;;;;;;;;;;;;;;;;;;IAcxD,gBAAgB;;IAEhB,kBAAkB;;IAElB,mBAAmB;;;IAGnB,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmC7B,2DAA2D;;;;IAI3D,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAclC,gDAAgD;;;IAGhD,yBAAyB;;;;;;;;;;;;;;;;;;QArBzB,2DAA2D;;;;QAI3D,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAclC,gDAAgD;;;QAGhD,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkBzB,qCAAqC;;;;;;QAOjC,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgU9B,CAAC;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAEtC,oCAAoC;AACpC,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAI1D,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,UAAU,CAE9D"}
package/dist/blocks.js ADDED
@@ -0,0 +1,472 @@
1
+ /**
2
+ * UI Blocks — 채팅 타임라인에 인라인 렌더되는 선언적 UI 스키마.
3
+ *
4
+ * 설계 원칙 (docs/custom-event-ui.md 참조):
5
+ * - 닫힌(화이트리스트) 컴포넌트 집합. 임의 HTML/코드 실행 없음.
6
+ * - 순수 데이터(JSON). 렌더는 @chatops/ui-blocks(React)가 담당.
7
+ * - 알 수 없는 블록 타입은 클라이언트가 안전한 fallback으로 렌더.
8
+ * - 권한은 절대 클라이언트가 아니라 appservice(서버측)가 재검증한다. 여기 disabled/confirm은 UX일 뿐.
9
+ *
10
+ * A2UI를 쓰지 않는 대신 우리가 통제하는 이 스키마를 쓴다. 향후 A2UI로 교체 시,
11
+ * 이벤트 타입(org.corp.ui.card)은 그대로 두고 payload만 바꿔 렌더러를 갈아끼운다.
12
+ */
13
+ import { z } from "zod";
14
+ export const ToneSchema = z.enum(["neutral", "success", "warning", "danger", "info"]);
15
+ export const ButtonStyleSchema = z.enum(["default", "primary", "danger"]);
16
+ /** 파괴적 액션 전에 클라이언트가 띄우는 확인 다이얼로그. 서버도 별도로 HITL 재검증한다. */
17
+ export const ConfirmSchema = z.object({
18
+ title: z.string(),
19
+ text: z.string(),
20
+ ok: z.string().optional(),
21
+ cancel: z.string().optional(),
22
+ });
23
+ // --- 표시용 블록 (비대화형) ---
24
+ export const TextBlockSchema = z.object({
25
+ type: z.literal("text"),
26
+ text: z.string(),
27
+ /** true면 안전 화이트리스트 마크다운으로 렌더 (raw HTML 금지) */
28
+ markdown: z.boolean().optional(),
29
+ });
30
+ export const HeadingBlockSchema = z.object({
31
+ type: z.literal("heading"),
32
+ text: z.string(),
33
+ level: z.union([z.literal(1), z.literal(2), z.literal(3)]).optional(),
34
+ });
35
+ export const DividerBlockSchema = z.object({
36
+ type: z.literal("divider"),
37
+ });
38
+ export const FieldsBlockSchema = z.object({
39
+ type: z.literal("fields"),
40
+ items: z
41
+ .object({
42
+ label: z.string(),
43
+ value: z.string(),
44
+ /** true면 2열 그리드에 좁게 배치 */
45
+ short: z.boolean().optional(),
46
+ })
47
+ .array(),
48
+ });
49
+ export const ImageBlockSchema = z.object({
50
+ type: z.literal("image"),
51
+ /** https URL 또는 mxc:// (둘 중 하나 권장). 클라이언트가 출처를 검증한다. */
52
+ url: z.string().optional(),
53
+ mxc: z.string().optional(),
54
+ alt: z.string().optional(),
55
+ });
56
+ export const ContextBlockSchema = z.object({
57
+ type: z.literal("context"),
58
+ /** 작은 보조 텍스트/아이콘 줄 */
59
+ elements: z
60
+ .union([z.string(), z.object({ icon: z.string() }), z.object({ mxc: z.string() })])
61
+ .array(),
62
+ });
63
+ export const BadgeBlockSchema = z.object({
64
+ type: z.literal("badge"),
65
+ text: z.string(),
66
+ tone: ToneSchema.optional(),
67
+ });
68
+ export const TableBlockSchema = z.object({
69
+ type: z.literal("table"),
70
+ columns: z.string().array(),
71
+ rows: z.string().array().array(),
72
+ });
73
+ // --- 입력용 블록 (대화형, name으로 폼 값에 수집됨) ---
74
+ export const InputBlockSchema = z.object({
75
+ type: z.literal("input"),
76
+ name: z.string().min(1),
77
+ /** date=날짜, datetime=날짜+시각(네이티브 datetime-local), time=시각만 — 모두 네이티브 피커로 렌더. */
78
+ input: z.enum(["text", "textarea", "number", "date", "datetime", "time"]).optional(),
79
+ label: z.string().optional(),
80
+ placeholder: z.string().optional(),
81
+ required: z.boolean().optional(),
82
+ value: z.string().optional(),
83
+ });
84
+ /** 토글(스위치) — checkbox 와 같은 불리언을 수집하되 on/off 스위치 어포던스로 렌더. */
85
+ export const ToggleBlockSchema = z.object({
86
+ type: z.literal("toggle"),
87
+ name: z.string().min(1),
88
+ label: z.string(),
89
+ checked: z.boolean().optional(),
90
+ /** 켜짐/꺼짐 보조 라벨(선택) — 스위치 옆 상태 텍스트. 색-only 회피용으로도 권장. */
91
+ onText: z.string().optional(),
92
+ offText: z.string().optional(),
93
+ });
94
+ /**
95
+ * 슬라이더(범위 입력) — min~max 사이 정수 한 값을 끌어서 고른다. 값은 name 으로 폼에 number 로 수집.
96
+ * 와이어 canonical JSON 은 소수 금지 → min/max/step/value 모두 정수 강제(정도/임계/배분 등).
97
+ */
98
+ export const SliderBlockSchema = z.object({
99
+ type: z.literal("slider"),
100
+ name: z.string().min(1),
101
+ label: z.string().optional(),
102
+ /** 하한(기본 0). */
103
+ min: z.number().int().optional(),
104
+ /** 상한(기본 100). */
105
+ max: z.number().int().optional(),
106
+ /** 증감 단위(기본 1). */
107
+ step: z.number().int().positive().optional(),
108
+ value: z.number().int().optional(),
109
+ /** 현재값 옆 접미(예: "%", "건"). */
110
+ unit: z.string().optional(),
111
+ });
112
+ /** 단일 선택 라디오 그룹. select 와 달리 옵션이 펼쳐져 보인다. */
113
+ export const RadioBlockSchema = z.object({
114
+ type: z.literal("radio"),
115
+ name: z.string().min(1),
116
+ label: z.string().optional(),
117
+ options: z.object({ value: z.string(), label: z.string() }).array(),
118
+ value: z.string().optional(),
119
+ });
120
+ export const SelectBlockSchema = z.object({
121
+ type: z.literal("select"),
122
+ name: z.string().min(1),
123
+ label: z.string().optional(),
124
+ placeholder: z.string().optional(),
125
+ options: z.object({ value: z.string(), label: z.string() }).array(),
126
+ value: z.string().optional(),
127
+ multi: z.boolean().optional(),
128
+ });
129
+ export const CheckboxBlockSchema = z.object({
130
+ type: z.literal("checkbox"),
131
+ name: z.string().min(1),
132
+ label: z.string(),
133
+ checked: z.boolean().optional(),
134
+ });
135
+ // --- 버튼 / 액션 행 ---
136
+ export const ButtonBlockSchema = z.object({
137
+ type: z.literal("button"),
138
+ /** 어떤 액션인지 식별. 클릭 시 org.corp.ui.action.action_id 로 회신됨. */
139
+ action_id: z.string().min(1),
140
+ text: z.string(),
141
+ style: ButtonStyleSchema.optional(),
142
+ /** 버튼 고유 페이로드 (폼 값과 별개로 함께 전송) */
143
+ value: z.string().optional(),
144
+ confirm: ConfirmSchema.optional(),
145
+ disabled: z.boolean().optional(),
146
+ });
147
+ /**
148
+ * 링크 버튼 — action_id 로 회신하는 button 과 달리, https URL 로 이동만 한다(서버 왕복 없음).
149
+ * "Approve"(button, 액션) 옆에 "View PR"(linkButton, 이동)을 같은 줄에 두는 식. 출처는 클라가 검증.
150
+ */
151
+ export const LinkButtonBlockSchema = z.object({
152
+ type: z.literal("linkButton"),
153
+ text: z.string(),
154
+ /** 이동할 https URL. 클라이언트가 출처를 검증(아니면 비활성 표시). */
155
+ url: z.string(),
156
+ style: ButtonStyleSchema.optional(),
157
+ /** 새 탭으로 열기(기본 true). */
158
+ external: z.boolean().optional(),
159
+ });
160
+ /** 버튼 한 줄 묶음 — 액션 버튼(button)과 링크 버튼(linkButton)을 섞어 배치 가능. */
161
+ export const ActionsBlockSchema = z.object({
162
+ type: z.literal("actions"),
163
+ elements: z.union([ButtonBlockSchema, LinkButtonBlockSchema]).array(),
164
+ });
165
+ /**
166
+ * 오버플로 메뉴 — "⋯" 트리거를 누르면 액션 항목 목록이 팝오버로 열린다(공간 절약형 액션 묶음).
167
+ * 각 항목은 button 과 동일하게 action_id 로 회신하고 confirm(파괴적 액션 확인)도 지원.
168
+ * 권한은 항상 서버가 재검증 — disabled/confirm 은 UX 일 뿐(button 과 동일 자세).
169
+ */
170
+ export const OverflowBlockSchema = z.object({
171
+ type: z.literal("overflow"),
172
+ /** 트리거 접근성 라벨(기본 "More actions"). */
173
+ label: z.string().optional(),
174
+ items: z
175
+ .object({
176
+ action_id: z.string().min(1),
177
+ text: z.string(),
178
+ value: z.string().optional(),
179
+ /** danger 항목 강조(삭제 등). */
180
+ tone: ToneSchema.optional(),
181
+ confirm: ConfirmSchema.optional(),
182
+ disabled: z.boolean().optional(),
183
+ })
184
+ .array()
185
+ .min(1),
186
+ });
187
+ // --- 진행/상태 표시용 블록 (비대화형) ---
188
+ /** 진행률 바 (0~100). 에이전트가 m.replace 편집으로 갱신해 "스트리밍" 진행 표시 가능. */
189
+ export const ProgressBlockSchema = z.object({
190
+ type: z.literal("progress"),
191
+ /** 0~100 백분율(정수). 생략하면 indeterminate(불확정) 표시. 와이어 canonical JSON 은 소수 금지 → int 강제. */
192
+ value: z.number().int().min(0).max(100).optional(),
193
+ label: z.string().optional(),
194
+ tone: ToneSchema.optional(),
195
+ });
196
+ /** 멀티스텝 진행 상태 표시(타임라인). 폼 마법사와 별개로, 작업 단계 시각화에 쓴다. */
197
+ export const StepsBlockSchema = z.object({
198
+ type: z.literal("steps"),
199
+ items: z
200
+ .object({
201
+ label: z.string(),
202
+ status: z.enum(["done", "active", "todo", "error"]).optional(),
203
+ note: z.string().optional(),
204
+ })
205
+ .array(),
206
+ });
207
+ /** 코드/JSON 표시 블록 (읽기 전용, 안전하게 escape 되어 렌더). */
208
+ export const CodeBlockSchema = z.object({
209
+ type: z.literal("code"),
210
+ code: z.string(),
211
+ language: z.string().optional(),
212
+ });
213
+ /**
214
+ * 코드 diff 블록 — unified patch(통합 diff) 텍스트를 줄 단위(추가/삭제/hunk/문맥)로 색칠해 표시.
215
+ * 입력은 SCM API 가 주는 그대로의 patch 문자열이고, 렌더러가 줄 첫 글자로 분류한다(표시 전용, escape,
216
+ * 임의 코드/HTML 없음 — code 블록과 같은 닫힌 자세). PR 리뷰처럼 "무엇이 바뀌었나"를 인라인으로 보여줄 때.
217
+ * 권위 데이터(전체 diff)는 url 로 재조회 — 여기 patch 는 리뷰용 표시 스냅샷이다.
218
+ */
219
+ export const DiffBlockSchema = z.object({
220
+ type: z.literal("diff"),
221
+ /** 파일 경로/제목(헤더에 표시). */
222
+ filename: z.string().optional(),
223
+ /** unified diff(patch) 텍스트. 렌더러가 줄별로 +(add)/-(del)/@@(hunk)/그 외(context)로 분류. */
224
+ patch: z.string(),
225
+ /** 변경 통계(선택) — 헤더에 +N / -M 으로 표시. */
226
+ additions: z.number().int().nonnegative().optional(),
227
+ deletions: z.number().int().nonnegative().optional(),
228
+ });
229
+ /**
230
+ * 파일/첨부 블록 — 단일 첨부(문서·이미지·아카이브)를 이름·크기·종류·다운로드로 표시.
231
+ * image 블록이 "본문에 펼쳐 보이는 그림"이라면, file 은 "다운로드 가능한 첨부 타일"이다(승인/재무/문서 흐름).
232
+ * url(https) 있으면 다운로드 링크, 없으면 정보 타일. mxc 는 인증 미디어(호스트 해석) — 출처는 클라가 검증.
233
+ */
234
+ export const FileBlockSchema = z.object({
235
+ type: z.literal("file"),
236
+ /** 파일명(표시). */
237
+ name: z.string(),
238
+ /** 바이트 크기(선택) — 렌더러가 KB/MB 로 표시. */
239
+ size: z.number().int().nonnegative().optional(),
240
+ /** MIME 또는 확장자 힌트(아이콘/라벨). 예: "application/pdf", "png". */
241
+ mime: z.string().optional(),
242
+ /** 다운로드 https URL(선택). 출처는 클라가 검증. */
243
+ url: z.string().optional(),
244
+ /** mxc:// (선택) — 인증 미디어. 호스트가 해석. */
245
+ mxc: z.string().optional(),
246
+ /** 보조 설명(선택). */
247
+ caption: z.string().optional(),
248
+ });
249
+ /**
250
+ * 단일 지표(KPI) 블록 — 임팩트/공정률을 1급으로 표시.
251
+ * value(현재) + 선택 target(기준/목표)·delta(증감)·tone. "현재 / 목표 + 델타" 형태로 렌더.
252
+ */
253
+ export const MetricBlockSchema = z.object({
254
+ type: z.literal("metric"),
255
+ label: z.string(),
256
+ value: z.string(),
257
+ /** 기준/목표값 (선택) — value 와 함께 "현재 / 목표"로 표시 */
258
+ target: z.string().optional(),
259
+ /** 증감 표시 (예: "+12") */
260
+ delta: z.string().optional(),
261
+ tone: ToneSchema.optional(),
262
+ });
263
+ /**
264
+ * 차트 블록 — 인라인 데이터 시각화(스파크라인/막대/꺾은선/도넛).
265
+ * 정적 SVG 로 렌더(임의 JS·HTML 없음, 닫힌 집합). data[] 는 값 묶음이고 variant 가 모양을 정한다.
266
+ * 무거운/인터랙티브 차트(대시보드·BI)는 여전히 widget 탈출구를 쓴다 — 이건 "가벼운 1급 시각화".
267
+ */
268
+ export const ChartBlockSchema = z.object({
269
+ type: z.literal("chart"),
270
+ variant: z.enum(["sparkline", "bar", "line", "donut"]),
271
+ /** 데이터 포인트. sparkline/line 은 순서대로 잇고, bar/donut 은 각 항목이 막대/조각이 된다. */
272
+ data: z
273
+ .object({ label: z.string().optional(), value: z.number(), tone: ToneSchema.optional() })
274
+ .array()
275
+ .min(1),
276
+ /** 접근성/표시용 캡션(차트 제목). */
277
+ caption: z.string().optional(),
278
+ /** bar/sparkline/line 스케일 상한(생략 시 데이터 최대값). donut 은 합계 기준이라 무시. */
279
+ max: z.number().positive().optional(),
280
+ /** 값 단위(예: "%", "건") — 표시 보조. */
281
+ unit: z.string().optional(),
282
+ });
283
+ /** 아바타 1명의 최소 정보 — avatarGroup 의 people 원소. */
284
+ const AvatarPersonSchema = z.object({
285
+ name: z.string(),
286
+ /** 이니셜(미지정 시 name 에서 자동 생성). */
287
+ initials: z.string().optional(),
288
+ /** 배경색(CSS 색/토큰). 미지정 시 name 해시로 팔레트에서 고름. */
289
+ color: z.string().optional(),
290
+ /** 이미지 URL(https). 있으면 이미지, 없으면 이니셜. */
291
+ src: z.string().optional(),
292
+ });
293
+ /** 단일 아바타 — 얼굴 동그라미(이미지/이니셜) + 이름·보조텍스트 + 상태점. 담당자 표시. */
294
+ export const AvatarBlockSchema = z.object({
295
+ type: z.literal("avatar"),
296
+ name: z.string(),
297
+ initials: z.string().optional(),
298
+ color: z.string().optional(),
299
+ src: z.string().optional(),
300
+ subtitle: z.string().optional(),
301
+ status: z.enum(["online", "away", "busy", "offline"]).optional(),
302
+ });
303
+ /** 아바타 묶음 — 겹쳐 쌓고 max 초과분은 +N. 리뷰어·참여자 표시. */
304
+ export const AvatarGroupBlockSchema = z.object({
305
+ type: z.literal("avatarGroup"),
306
+ people: AvatarPersonSchema.array().min(1),
307
+ /** 앞에서 몇 명까지 보일지(기본 5). 나머지는 +N. */
308
+ max: z.number().int().positive().optional(),
309
+ label: z.string().optional(),
310
+ });
311
+ /** 게이지 — 점수·리스크를 반원 아크로(0~max). 중앙에 값. */
312
+ export const GaugeBlockSchema = z.object({
313
+ type: z.literal("gauge"),
314
+ value: z.number(),
315
+ /** 스케일 상한(기본 100). */
316
+ max: z.number().optional(),
317
+ /** 스케일 하한(기본 0). */
318
+ min: z.number().optional(),
319
+ label: z.string().optional(),
320
+ /** 중앙 값 접미(예: "%", "점"). */
321
+ unit: z.string().optional(),
322
+ tone: ToneSchema.optional(),
323
+ });
324
+ /** 별점 — value/max 를 심볼(★/●)로. 정확값은 숫자로 병기. */
325
+ export const RatingBlockSchema = z.object({
326
+ type: z.literal("rating"),
327
+ value: z.number().min(0),
328
+ /** 만점(기본 5). */
329
+ max: z.number().int().positive().optional(),
330
+ label: z.string().optional(),
331
+ /** 심볼 모양(기본 star). */
332
+ symbol: z.enum(["star", "dot"]).optional(),
333
+ });
334
+ /** 콜아웃 — 톤 강조 박스(정보/경고/위험 등). 선택 제목 + 본문 + 아이콘. */
335
+ export const CalloutBlockSchema = z.object({
336
+ type: z.literal("callout"),
337
+ text: z.string(),
338
+ title: z.string().optional(),
339
+ tone: ToneSchema.optional(),
340
+ /** 아이콘 글리프(이모지/문자). 미지정 시 tone 기본 아이콘. */
341
+ icon: z.string().optional(),
342
+ });
343
+ /** 엔티티 참조 칩 — 엔티티(송장·리드·repo…)로의 라벨/링크 칩. url 있으면 링크. */
344
+ export const EntityRefBlockSchema = z.object({
345
+ type: z.literal("entityRef"),
346
+ label: z.string(),
347
+ /** 엔티티 종류(예: "invoice","lead","repo") — 작은 종류 태그. */
348
+ entity: z.string().optional(),
349
+ /** 클릭 시 이동할 https URL(있으면 링크, 출처는 클라가 검증). */
350
+ url: z.string().optional(),
351
+ tone: ToneSchema.optional(),
352
+ });
353
+ /**
354
+ * 칸반 보드 — 정적 표시 블록(닫힌 유니온). 컬럼(상태/스테이지)별 카드 묶음.
355
+ * 선택/드래그/클릭 액션 없음(표시 전용 — 인터랙션은 후속/위젯). 보드(컬럼+카드)는 템플릿 조합으로
356
+ * 표현 불가 → 코어 블록 프리미티브가 정당(P4-2). 어떤 도메인의 보드든 범용으로 쓴다.
357
+ */
358
+ export const KanbanBlockSchema = z.object({
359
+ type: z.literal("kanban"),
360
+ columns: z
361
+ .object({
362
+ id: z.string(),
363
+ title: z.string(),
364
+ tone: ToneSchema.optional(),
365
+ cards: z
366
+ .object({
367
+ id: z.string(),
368
+ title: z.string(),
369
+ tone: ToneSchema.optional(),
370
+ /** 보조행(라벨/담당 등) — 카드 제목 아래 표시. */
371
+ meta: z.string().array().optional(),
372
+ badge: z.object({ label: z.string(), tone: ToneSchema.optional() }).optional(),
373
+ })
374
+ .array(),
375
+ })
376
+ .array()
377
+ .min(1),
378
+ caption: z.string().optional(),
379
+ });
380
+ /**
381
+ * 카운트다운 — 마감 타임스탬프까지 남은 시간을 라이브로 보여주는 표시 블록(닫힌 유니온).
382
+ * 값(target ISO 타임스탬프)은 정적 데이터지만 렌더러가 매초 남은 시간을 계산·갱신("라이브 틱") →
383
+ * 정적 metric("resolve by HH:MM")으로 표현 불가하므로 블록이 정당(P4-3). SLA/SLO 위반까지 남은 시간 등.
384
+ */
385
+ export const CountdownBlockSchema = z.object({
386
+ type: z.literal("countdown"),
387
+ /** 마감 시각(ISO 8601 타임스탬프 문자열) — 렌더러가 new Date 로 파싱해 남은 시간을 계산. */
388
+ target: z.string().min(1),
389
+ label: z.string().optional(),
390
+ tone: ToneSchema.optional(),
391
+ /** 마감 경과 후 표시할 텍스트(기본 "Overdue"). */
392
+ expiredText: z.string().optional(),
393
+ });
394
+ /**
395
+ * 접기/펼치기(disclosure) — 요약(title)만 보이다가 펼치면 중첩 블록을 드러낸다(native details/summary).
396
+ * 긴 보조 정보(로그·상세 필드·부가 첨부)를 카드 높이를 잡아먹지 않게 접어두는 레이아웃 블록.
397
+ * blocks 는 어떤 블록이든 중첩 가능 — 렌더러가 BlockList 로 재귀 렌더(닫힌 유니온 유지).
398
+ */
399
+ export const CollapsibleBlockSchema = z.object({
400
+ type: z.literal("collapsible"),
401
+ /** 접힌 상태에서도 보이는 요약 헤더. */
402
+ title: z.string(),
403
+ /** 처음부터 펼쳐둘지(기본 접힘). */
404
+ open: z.boolean().optional(),
405
+ tone: ToneSchema.optional(),
406
+ /**
407
+ * 펼치면 보이는 중첩 블록(재귀). 런타임은 z.lazy 로 BlockSchema 를 지연 참조해 재귀 검증하지만,
408
+ * 정적 타입은 z.ZodTypeAny 로 끊는다 — Block 이 z.infer 기반이라 재귀 타입 별칭이 conditional type
409
+ * 순환(TS2456)에 걸리기 때문. 작성자용 정확 타입은 아래 export 한 CollapsibleBlock 을 쓴다.
410
+ */
411
+ blocks: z.array(z.lazy(() => BlockSchema)),
412
+ });
413
+ /**
414
+ * 탈출구(escape hatch): A2UI/UI Blocks로 표현하기 어려운 무거운 UI(차트·대형 그리드·지도)는
415
+ * Matrix Widget으로. 클라이언트가 신뢰 경계 안에서 sandboxed iframe으로 렌더한다.
416
+ * url 은 클라이언트가 허용 출처를 검증해야 한다(RFC §D4 위젯).
417
+ */
418
+ export const WidgetBlockSchema = z.object({
419
+ type: z.literal("widget"),
420
+ url: z.string(),
421
+ name: z.string().optional(),
422
+ /** 위젯 인스턴스 식별자 (브리지 라우팅용) */
423
+ widget_id: z.string().optional(),
424
+ /** 호스트가 이 위젯에 부여하는 capability scope (최소권한). 예: ["action.send"] */
425
+ capabilities: z.string().array().optional(),
426
+ /** 렌더 높이(px). 기본은 클라이언트가 정함. */
427
+ height: z.number().int().positive().optional(),
428
+ });
429
+ /** 모든 블록의 판별 유니온. 새 블록을 추가하면 여기에만 등록하면 된다. */
430
+ export const BlockSchema = z.discriminatedUnion("type", [
431
+ TextBlockSchema,
432
+ HeadingBlockSchema,
433
+ DividerBlockSchema,
434
+ FieldsBlockSchema,
435
+ ImageBlockSchema,
436
+ ContextBlockSchema,
437
+ BadgeBlockSchema,
438
+ TableBlockSchema,
439
+ ProgressBlockSchema,
440
+ StepsBlockSchema,
441
+ MetricBlockSchema,
442
+ ChartBlockSchema,
443
+ AvatarBlockSchema,
444
+ AvatarGroupBlockSchema,
445
+ GaugeBlockSchema,
446
+ RatingBlockSchema,
447
+ CalloutBlockSchema,
448
+ EntityRefBlockSchema,
449
+ KanbanBlockSchema,
450
+ CountdownBlockSchema,
451
+ CodeBlockSchema,
452
+ DiffBlockSchema,
453
+ FileBlockSchema,
454
+ CollapsibleBlockSchema,
455
+ WidgetBlockSchema,
456
+ InputBlockSchema,
457
+ ToggleBlockSchema,
458
+ SliderBlockSchema,
459
+ RadioBlockSchema,
460
+ SelectBlockSchema,
461
+ CheckboxBlockSchema,
462
+ ButtonBlockSchema,
463
+ LinkButtonBlockSchema,
464
+ ActionsBlockSchema,
465
+ OverflowBlockSchema,
466
+ ]);
467
+ const INPUT_BLOCK_TYPES = new Set(["input", "radio", "select", "checkbox", "toggle", "slider"]);
468
+ /** 해당 블록이 사용자 입력을 수집하는(name을 가진) 블록인지 */
469
+ export function isInputBlock(block) {
470
+ return INPUT_BLOCK_TYPES.has(block.type);
471
+ }
472
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 버전 협상 (capability negotiation).
3
+ *
4
+ * 클라이언트는 자신이 지원하는 UI Block 어휘(버전 + 블록 타입 목록)를 광고하고,
5
+ * 에이전트/작성자는 카드를 보내기 전에 미지원 블록을 감지해 graceful degrade 한다.
6
+ * (RFC §9 "렌더러 격리" + docs/custom-event-ui.md §9 렌더러 레지스트리)
7
+ */
8
+ import { type BlockType } from "./blocks.js";
9
+ import type { UiCardContent } from "./events.js";
10
+ /**
11
+ * UI Block 어휘 버전. 새 블록/필드를 추가하면 올린다(semver). 1.3.0 = Phase 1 신규 블록(chart…).
12
+ * 1.4.0 = M4 kanban·countdown(+ diff·file). 1.5.0 = collapsible·linkButton·overflow·toggle·slider + input datetime/time.
13
+ */
14
+ export declare const UI_BLOCKS_VERSION: "1.5.0";
15
+ /** 스키마가 아는 모든 블록 타입 (판별 유니온에서 파생 — 단일 진실 공급원). */
16
+ export declare const BLOCK_TYPES: BlockType[];
17
+ /** 클라이언트가 광고하는 역량 서술자. */
18
+ export interface ClientCapabilities {
19
+ ui_blocks_version: string;
20
+ block_types: string[];
21
+ }
22
+ /** 기본 역량 = 스키마가 아는 전체. 클라이언트가 일부만 구현하면 줄여서 광고한다. */
23
+ export declare function defaultClientCapabilities(): ClientCapabilities;
24
+ export interface SupportResult {
25
+ supported: boolean;
26
+ /** 클라이언트가 렌더하지 못하는(= fallback 처리될) 블록 타입들 */
27
+ unsupportedBlocks: string[];
28
+ }
29
+ /**
30
+ * 카드가 주어진 지원 블록 목록으로 완전히 렌더 가능한지 검사한다.
31
+ * 미지원 블록은 클라이언트가 안전 fallback 으로 처리하지만, 작성자/에이전트는
32
+ * 이 결과로 "이 클라에선 일부가 안 보일 수 있음"을 미리 알 수 있다.
33
+ */
34
+ export declare function checkCardSupport(card: UiCardContent, supported: string[]): SupportResult;
35
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAG,OAAgB,CAAC;AAElD,kDAAkD;AAClD,eAAO,MAAM,WAAW,EAAE,SAAS,EAEnB,CAAC;AAEjB,0BAA0B;AAC1B,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,oDAAoD;AACpD,wBAAgB,yBAAyB,IAAI,kBAAkB,CAE9D;AAMD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,aAAa,CAUxF"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 버전 협상 (capability negotiation).
3
+ *
4
+ * 클라이언트는 자신이 지원하는 UI Block 어휘(버전 + 블록 타입 목록)를 광고하고,
5
+ * 에이전트/작성자는 카드를 보내기 전에 미지원 블록을 감지해 graceful degrade 한다.
6
+ * (RFC §9 "렌더러 격리" + docs/custom-event-ui.md §9 렌더러 레지스트리)
7
+ */
8
+ import { BlockSchema } from "./blocks.js";
9
+ /**
10
+ * UI Block 어휘 버전. 새 블록/필드를 추가하면 올린다(semver). 1.3.0 = Phase 1 신규 블록(chart…).
11
+ * 1.4.0 = M4 kanban·countdown(+ diff·file). 1.5.0 = collapsible·linkButton·overflow·toggle·slider + input datetime/time.
12
+ */
13
+ export const UI_BLOCKS_VERSION = "1.5.0";
14
+ /** 스키마가 아는 모든 블록 타입 (판별 유니온에서 파생 — 단일 진실 공급원). */
15
+ export const BLOCK_TYPES = BlockSchema.options.map((o) => o.shape.type.value);
16
+ /** 기본 역량 = 스키마가 아는 전체. 클라이언트가 일부만 구현하면 줄여서 광고한다. */
17
+ export function defaultClientCapabilities() {
18
+ return { ui_blocks_version: UI_BLOCKS_VERSION, block_types: [...BLOCK_TYPES] };
19
+ }
20
+ function allCardBlocks(card) {
21
+ return [...card.blocks, ...(card.steps?.flatMap((s) => s.blocks) ?? [])];
22
+ }
23
+ /**
24
+ * 카드가 주어진 지원 블록 목록으로 완전히 렌더 가능한지 검사한다.
25
+ * 미지원 블록은 클라이언트가 안전 fallback 으로 처리하지만, 작성자/에이전트는
26
+ * 이 결과로 "이 클라에선 일부가 안 보일 수 있음"을 미리 알 수 있다.
27
+ */
28
+ export function checkCardSupport(card, supported) {
29
+ const set = new Set(supported);
30
+ const unsupported = [
31
+ ...new Set(allCardBlocks(card)
32
+ .map((b) => b.type)
33
+ .filter((t) => !set.has(t))),
34
+ ];
35
+ return { supported: unsupported.length === 0, unsupportedBlocks: unsupported };
36
+ }
37
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAGtE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAgB,CAAC;AAElD,kDAAkD;AAClD,MAAM,CAAC,MAAM,WAAW,GAAgB,WAAW,CAAC,OAAO,CAAC,GAAG,CAC7D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CACX,CAAC;AAQjB,oDAAoD;AACpD,MAAM,UAAU,yBAAyB;IACvC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB;IACxC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmB,EAAE,SAAmB;IACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG;QAClB,GAAG,IAAI,GAAG,CACR,aAAa,CAAC,IAAI,CAAC;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC9B;KACF,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC;AACjF,CAAC"}