@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.
- package/LICENSE +21 -0
- package/README.md +62 -0
- package/dist/apppacks.d.ts +15652 -0
- package/dist/apppacks.d.ts.map +1 -0
- package/dist/apppacks.js +71 -0
- package/dist/apppacks.js.map +1 -0
- package/dist/blocks.d.ts +2320 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +472 -0
- package/dist/blocks.js.map +1 -0
- package/dist/capabilities.d.ts +35 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +37 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/events.d.ts +4557 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +571 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/namespace.d.ts +56 -0
- package/dist/namespace.d.ts.map +1 -0
- package/dist/namespace.js +60 -0
- package/dist/namespace.js.map +1 -0
- package/dist/plugins.d.ts +131 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +66 -0
- package/dist/plugins.js.map +1 -0
- package/dist/registry.d.ts +67 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +212 -0
- package/dist/registry.js.map +1 -0
- package/dist/surfaces.d.ts +54323 -0
- package/dist/surfaces.d.ts.map +1 -0
- package/dist/surfaces.js +523 -0
- package/dist/surfaces.js.map +1 -0
- package/dist/templates.d.ts +390 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +493 -0
- package/dist/templates.js.map +1 -0
- package/package.json +50 -0
- package/src/apppacks.ts +90 -0
- package/src/blocks.ts +544 -0
- package/src/capabilities.ts +58 -0
- package/src/events.ts +758 -0
- package/src/index.ts +15 -0
- package/src/namespace.ts +64 -0
- package/src/plugins.ts +118 -0
- package/src/registry.ts +261 -0
- package/src/surfaces.ts +610 -0
- package/src/templates.ts +736 -0
package/dist/surfaces.js
ADDED
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface 스키마 — 룸의 "셸 서피스"(컨텍스트 패널·캔버스·헤더 등)를 선언형으로 기술한다.
|
|
3
|
+
*
|
|
4
|
+
* 핵심: 타임라인 인라인 카드(UiCardContent)를 그리던 것과 *같은 블록 어휘*를 재사용해,
|
|
5
|
+
* 셸의 패널/캔버스도 데이터로 기술하고 같은 디자인 토큰으로 렌더한다(docs/extensibility.md §10).
|
|
6
|
+
* 작성자는 의도/데이터만, 클라이언트가 룩을 소유한다(§1)는 원칙을 셸 서피스로 일반화한다.
|
|
7
|
+
*
|
|
8
|
+
* 이 파일은 패널(PanelSpec)·헤더(HeaderSpec)·캔버스(CanvasSpec) 스펙을 정의한다. 사이드바 섹션 스펙은 후속.
|
|
9
|
+
* 데이터 바인딩: 문자열 안의 `{{entity.path}}` 를 resolveBindings 로 룸 엔티티 스냅샷에서 채운다.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { ToneSchema } from "./blocks.js";
|
|
13
|
+
import { AgentPlanContentSchema, AgentStepStatusSchema, SCHEMA_VERSION, UiCardContentSchema, } from "./events.js";
|
|
14
|
+
/** 키-값 묶음 (리드 정보 등). value 는 `{{entity.path}}` 바인딩 가능. */
|
|
15
|
+
export const SurfaceFieldsSchema = z.object({
|
|
16
|
+
kind: z.literal("fields"),
|
|
17
|
+
items: z.object({ label: z.string(), value: z.string() }).array(),
|
|
18
|
+
});
|
|
19
|
+
/** 컬러 태그 묶음. */
|
|
20
|
+
export const SurfaceTagsSchema = z.object({
|
|
21
|
+
kind: z.literal("tags"),
|
|
22
|
+
items: z.object({ label: z.string(), tone: ToneSchema.optional() }).array(),
|
|
23
|
+
});
|
|
24
|
+
/** 단일 선택형 행(상태 등) — 표시용(셀렉트 룩). */
|
|
25
|
+
export const SurfaceSelectSchema = z.object({
|
|
26
|
+
kind: z.literal("select"),
|
|
27
|
+
value: z.string(),
|
|
28
|
+
});
|
|
29
|
+
/** 목록(관련 문서 등). */
|
|
30
|
+
export const SurfaceListSchema = z.object({
|
|
31
|
+
kind: z.literal("list"),
|
|
32
|
+
items: z.object({ primary: z.string(), secondary: z.string().optional() }).array(),
|
|
33
|
+
});
|
|
34
|
+
/** 활동 타임라인. */
|
|
35
|
+
export const SurfaceActivitySchema = z.object({
|
|
36
|
+
kind: z.literal("activity"),
|
|
37
|
+
items: z.object({ who: z.string(), what: z.string(), time: z.string() }).array(),
|
|
38
|
+
});
|
|
39
|
+
/** AI 요약/최근 업데이트 메모. */
|
|
40
|
+
export const SurfaceMemoSchema = z.object({
|
|
41
|
+
kind: z.literal("memo"),
|
|
42
|
+
summary: z.string(),
|
|
43
|
+
updates: z.string().array().optional(),
|
|
44
|
+
});
|
|
45
|
+
/** 인라인 카드 임베드 — 타임라인과 *같은* UiCardContent 를 패널/캔버스에 그대로 렌더(CardRenderer 재사용). */
|
|
46
|
+
export const SurfaceCardSchema = z.object({
|
|
47
|
+
kind: z.literal("card"),
|
|
48
|
+
card: UiCardContentSchema,
|
|
49
|
+
});
|
|
50
|
+
/** 섹션 본문 — 블록 어휘를 패널 레이아웃으로 확장한 판별 유니온. */
|
|
51
|
+
export const SurfaceBodySchema = z.discriminatedUnion("kind", [
|
|
52
|
+
SurfaceFieldsSchema,
|
|
53
|
+
SurfaceTagsSchema,
|
|
54
|
+
SurfaceSelectSchema,
|
|
55
|
+
SurfaceListSchema,
|
|
56
|
+
SurfaceActivitySchema,
|
|
57
|
+
SurfaceMemoSchema,
|
|
58
|
+
SurfaceCardSchema,
|
|
59
|
+
]);
|
|
60
|
+
/** 패널의 한 섹션(카드 박스 1개). */
|
|
61
|
+
export const SurfaceSectionSchema = z.object({
|
|
62
|
+
id: z.string(),
|
|
63
|
+
title: z.string().optional(),
|
|
64
|
+
/** 우상단 보조 액션 라벨(예: "편집", "모두 보기") */
|
|
65
|
+
action: z.string().optional(),
|
|
66
|
+
/** 소속 탭 id(PanelTab.id) — 지정 시 그 탭에서만, 미지정이면 모든 탭에서 표시(P3-6 서브탭 전환). */
|
|
67
|
+
tab: z.string().optional(),
|
|
68
|
+
body: SurfaceBodySchema,
|
|
69
|
+
});
|
|
70
|
+
export const PanelTabSchema = z.object({ id: z.string(), label: z.string() });
|
|
71
|
+
/** 컨텍스트 패널 스펙 — 탭 + 섹션 목록. */
|
|
72
|
+
export const PanelSpecSchema = z.object({
|
|
73
|
+
tabs: PanelTabSchema.array().optional(),
|
|
74
|
+
sections: SurfaceSectionSchema.array(),
|
|
75
|
+
});
|
|
76
|
+
// --- 룸 헤더 스펙 ---
|
|
77
|
+
export const HeaderMetaSchema = z.object({
|
|
78
|
+
label: z.string(),
|
|
79
|
+
value: z.string(),
|
|
80
|
+
/** tabular-nums 강조(금액/건수) */
|
|
81
|
+
num: z.boolean().optional(),
|
|
82
|
+
});
|
|
83
|
+
export const HeaderMemberSchema = z.object({ label: z.string(), color: z.string() });
|
|
84
|
+
export const PipelineStepSchema = z.object({
|
|
85
|
+
label: z.string(),
|
|
86
|
+
state: z.enum(["done", "active", "todo"]),
|
|
87
|
+
});
|
|
88
|
+
/** 룸 헤더 — 제목 + 참여자 + 메타(키-값) + 파이프라인 스테퍼. value 는 `{{entity.path}}` 바인딩 가능. */
|
|
89
|
+
export const HeaderSpecSchema = z.object({
|
|
90
|
+
title: z.string(),
|
|
91
|
+
members: HeaderMemberSchema.array().optional(),
|
|
92
|
+
/** 아바타 스택 뒤 "+N" */
|
|
93
|
+
extra: z.number().optional(),
|
|
94
|
+
meta: HeaderMetaSchema.array().optional(),
|
|
95
|
+
pipeline: PipelineStepSchema.array().optional(),
|
|
96
|
+
});
|
|
97
|
+
// --- 이벤트 캔버스 스펙 ---
|
|
98
|
+
/** 이벤트 캔버스(보드) — 제목 + 탭 + 카드 묶음(UiCardContent, CardRenderer 재사용). */
|
|
99
|
+
export const CanvasSpecSchema = z.object({
|
|
100
|
+
title: z.string(),
|
|
101
|
+
tabs: z.string().array().optional(),
|
|
102
|
+
cards: UiCardContentSchema.array(),
|
|
103
|
+
/** 카드 id → 소속 탭 매핑(P3-6 서브탭 전환). 미지정 카드는 모든 탭에서 표시. 카드는 바라본 UiCardContent 유지. */
|
|
104
|
+
cardTabs: z.record(z.string(), z.string()).optional(),
|
|
105
|
+
});
|
|
106
|
+
// --- 에이전트 런 타임라인 스펙 (AgentPlanSpec) ---
|
|
107
|
+
// 도메인 무관 C층 서피스: "에이전트가 어떤 계획으로 어디까지 진행했나"를 우측 런 타임라인으로 그린다.
|
|
108
|
+
// agent.plan/agent.step 텔레메트리(events.ts)가 데이터 토대 — 이 스펙은 그 데이터를 렌더 지시로
|
|
109
|
+
// 격리한 UI 표면이다(작성자는 의도/데이터, 클라가 룩 — §1). PanelSpec 과 동급의 1급 서피스 스펙.
|
|
110
|
+
/** 런 타임라인의 한 단계 — id + 라벨 + 상태(+ 보조 노트·부분 공정률). */
|
|
111
|
+
export const AgentPlanStepSpecSchema = z.object({
|
|
112
|
+
id: z.string(),
|
|
113
|
+
label: z.string(),
|
|
114
|
+
status: AgentStepStatusSchema,
|
|
115
|
+
note: z.string().optional(),
|
|
116
|
+
/** 이 단계의 부분 공정률 0~100(예: active 단계의 진행 표시). */
|
|
117
|
+
progress: z.number().int().min(0).max(100).optional(),
|
|
118
|
+
});
|
|
119
|
+
/** 에이전트 런 타임라인 — 제목 + 에이전트 + 단계 리스트 + 전체 공정률 %. */
|
|
120
|
+
export const AgentPlanSpecSchema = z.object({
|
|
121
|
+
/** 런의 안정적 ID(AgentPlan.run_id) — 합성/키 용도. */
|
|
122
|
+
run_id: z.string(),
|
|
123
|
+
title: z.string().optional(),
|
|
124
|
+
agent: z.string().optional(),
|
|
125
|
+
steps: AgentPlanStepSpecSchema.array(),
|
|
126
|
+
/** 전체 공정률 0~100(생략 시 렌더러가 done/total 로 산출). */
|
|
127
|
+
progress: z.number().int().min(0).max(100).optional(),
|
|
128
|
+
});
|
|
129
|
+
/**
|
|
130
|
+
* agent.plan content(이벤트 데이터)를 AgentPlanSpec(렌더 지시)으로 변환한다.
|
|
131
|
+
* 와이어 포맷(버전 `v` 등)을 UI 표면에서 격리하는 봉합선 — P2-5 에서 실 텔레메트리를
|
|
132
|
+
* 이 함수로 서피스에 흘린다. 누락 키는 zod 가 떨궈내므로 content 를 그대로 넘겨도 된다.
|
|
133
|
+
*/
|
|
134
|
+
export function agentPlanSpec(content) {
|
|
135
|
+
const plan = AgentPlanContentSchema.parse(content);
|
|
136
|
+
return AgentPlanSpecSchema.parse({
|
|
137
|
+
run_id: plan.run_id,
|
|
138
|
+
title: plan.title,
|
|
139
|
+
agent: plan.agent,
|
|
140
|
+
steps: plan.steps,
|
|
141
|
+
progress: plan.progress,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* agent.step 텔레메트리를 런 타임라인 스펙 위에 누적한다(원본 불변) — 매칭 단계의 상태/노트/부분 공정률만 갱신.
|
|
146
|
+
* summarizeTasks(작업 누적)의 에이전트-런 짝. P2-4 라이브 갱신: 누적된 스펙을 다시 렌더해 m.replace 로 흘린다.
|
|
147
|
+
* 전체 공정률(progress)은 손대지 않는다 — 렌더러가 plan.progress 미지정 시 done/total 로 파생한다.
|
|
148
|
+
*/
|
|
149
|
+
export function applyAgentStep(plan, step) {
|
|
150
|
+
return {
|
|
151
|
+
...plan,
|
|
152
|
+
steps: plan.steps.map((s) => s.id === step.step_id ? { ...s, status: step.status, note: step.note ?? s.note, progress: step.progress } : s),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
// --- 에이전트 도크 스펙 (AgentDockSpec) — M3 셸 확장(P3-1) ---
|
|
156
|
+
// 팩이 "패널 외 셸 영역"까지 선언형으로 소유하는 첫 서피스. 우측 도크 = 두 종류의 항목이 흐른다:
|
|
157
|
+
// (1) run — 라이브 에이전트 런 요약(agent.plan/agent.step 텔레메트리 = M2 C층 데이터). 도메인 무관.
|
|
158
|
+
// (2) service — 팩이 저작하는 도메인 "서비스"/퀵액션(열린 PR·CI 등). value 는 `{{entity.path}}` 바인딩 가능.
|
|
159
|
+
// 즉 도크는 "팩이 기여하는 셸 면"과 "도메인 무관 C층 런 텔레메트리"가 만나는 지점이다(본질 = C층의 셸 면).
|
|
160
|
+
// AgentPlanSpec(인라인 타임라인)과 *같은* 텔레메트리를 agentRunItem 으로 도크 항목으로 파생한다.
|
|
161
|
+
/** 도크 런 항목 — 라이브 에이전트 런 요약(agent.plan 에서 파생). 상태 enum 은 C층 공용(AgentStepStatus). */
|
|
162
|
+
export const DockRunItemSchema = z.object({
|
|
163
|
+
kind: z.literal("run"),
|
|
164
|
+
run_id: z.string(),
|
|
165
|
+
label: z.string(),
|
|
166
|
+
agent: z.string().optional(),
|
|
167
|
+
status: AgentStepStatusSchema,
|
|
168
|
+
/** 전체 공정률 0~100. */
|
|
169
|
+
progress: z.number().int().min(0).max(100).optional(),
|
|
170
|
+
});
|
|
171
|
+
/** 도크 서비스 항목 — 팩이 저작하는 도메인 서비스/퀵액션. detail 은 `{{entity.path}}` 바인딩 가능. */
|
|
172
|
+
export const DockServiceItemSchema = z.object({
|
|
173
|
+
kind: z.literal("service"),
|
|
174
|
+
id: z.string(),
|
|
175
|
+
label: z.string(),
|
|
176
|
+
/** 짧은 상태/값(예: "3 open", "Passing"). 바인딩 가능. */
|
|
177
|
+
detail: z.string().optional(),
|
|
178
|
+
tone: ToneSchema.optional(),
|
|
179
|
+
/** 선택적 퀵액션 라벨(예: "View") — 있으면 버튼으로 렌더. */
|
|
180
|
+
action: z.string().optional(),
|
|
181
|
+
});
|
|
182
|
+
/** 도크 항목 — 닫힌 판별 유니온(run | service). SurfaceBody 와 같은 안전 자세. */
|
|
183
|
+
export const DockItemSchema = z.discriminatedUnion("kind", [DockRunItemSchema, DockServiceItemSchema]);
|
|
184
|
+
/** 도크 그룹 — 라벨 + 항목 묶음(예: "Active runs", "Repository services"). */
|
|
185
|
+
export const DockGroupSchema = z.object({
|
|
186
|
+
id: z.string(),
|
|
187
|
+
label: z.string().optional(),
|
|
188
|
+
items: DockItemSchema.array(),
|
|
189
|
+
});
|
|
190
|
+
/** 에이전트 도크 스펙 — 우측 셸 도크(런 + 도메인 서비스)를 선언형으로 기술. PanelSpec 과 동급의 1급 서피스. */
|
|
191
|
+
export const AgentDockSpecSchema = z.object({
|
|
192
|
+
title: z.string().optional(),
|
|
193
|
+
groups: DockGroupSchema.array(),
|
|
194
|
+
});
|
|
195
|
+
/** 전체 런 상태 — 하나라도 error → error, 단계 0개 아니고 전부 done → done, active 있으면 active, 그 외 queued. */
|
|
196
|
+
export function agentRunStatus(plan) {
|
|
197
|
+
if (plan.steps.some((s) => s.status === "error"))
|
|
198
|
+
return "error";
|
|
199
|
+
if (plan.steps.length > 0 && plan.steps.every((s) => s.status === "done"))
|
|
200
|
+
return "done";
|
|
201
|
+
if (plan.steps.some((s) => s.status === "active"))
|
|
202
|
+
return "active";
|
|
203
|
+
return "queued";
|
|
204
|
+
}
|
|
205
|
+
/** 전체 공정률 0~100 — plan.progress 우선, 없으면 done/total. (AgentPlanRenderer 와 동일 규칙) */
|
|
206
|
+
export function agentRunPercent(plan) {
|
|
207
|
+
const total = plan.steps.length;
|
|
208
|
+
const done = plan.steps.filter((s) => s.status === "done").length;
|
|
209
|
+
return Math.max(0, Math.min(100, Math.round(plan.progress ?? (total ? (done / total) * 100 : 0))));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* AgentPlanSpec(인라인 런 타임라인) → 도크 런 항목으로 파생한다. 이것이 본질 봉합선:
|
|
213
|
+
* M2 의 agent.plan 텔레메트리가 인라인 AgentPlanRenderer 와 *같은 데이터*로 셸 도크도 구동한다.
|
|
214
|
+
*/
|
|
215
|
+
export function agentRunItem(plan) {
|
|
216
|
+
return {
|
|
217
|
+
kind: "run",
|
|
218
|
+
run_id: plan.run_id,
|
|
219
|
+
label: plan.title ?? "Agent run",
|
|
220
|
+
agent: plan.agent,
|
|
221
|
+
status: agentRunStatus(plan),
|
|
222
|
+
progress: agentRunPercent(plan),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
// --- 사이드바 섹션 스펙 (SidebarSectionSpec) — M3 셸 확장(P3-2) ---
|
|
226
|
+
// 팩이 좌측 레일에 도메인 네비게이션(섹션 + 항목)을 선언형으로 기여한다. 도크(우측)와 짝 — 패널 외
|
|
227
|
+
// 셸의 또 다른 면. label/hint/badge.label 은 패널/헤더/도크와 *같은* resolveBindings 봉합선으로 바인딩.
|
|
228
|
+
/** 사이드바 항목 — 네비게이션 엔트리(룸/뷰/필터). label/hint/badge.label 은 `{{entity.path}}` 바인딩 가능. */
|
|
229
|
+
export const SidebarItemSchema = z.object({
|
|
230
|
+
id: z.string(),
|
|
231
|
+
label: z.string(),
|
|
232
|
+
/** 좌측 글리프(짧은 심볼: "#", "◆" 등). 생략 시 렌더러가 기본 점. */
|
|
233
|
+
glyph: z.string().optional(),
|
|
234
|
+
/** 보조 텍스트(우측 흐린 글씨, 예: "3 open"). */
|
|
235
|
+
hint: z.string().optional(),
|
|
236
|
+
/** 카운트/상태 배지. */
|
|
237
|
+
badge: z.object({ label: z.string(), tone: ToneSchema.optional() }).optional(),
|
|
238
|
+
});
|
|
239
|
+
/** 사이드바 섹션 — 라벨 + 항목 묶음(+ 우상단 보조 액션 어포던스). 팩이 여러 섹션을 기여(AppPack.sidebar[]). */
|
|
240
|
+
export const SidebarSectionSpecSchema = z.object({
|
|
241
|
+
id: z.string(),
|
|
242
|
+
label: z.string().optional(),
|
|
243
|
+
/** 우상단 보조 액션 라벨(예: "+", "All") */
|
|
244
|
+
action: z.string().optional(),
|
|
245
|
+
items: SidebarItemSchema.array(),
|
|
246
|
+
});
|
|
247
|
+
// --- 컴포저 스펙 (ComposerSpec) — M3 셸 확장(P3-3) ---
|
|
248
|
+
// 팩이 입력창(컴포저)을 선언형으로 소유: 도메인 슬래시 명령 · 퀵액션 칩 · @엔티티 자동완성 후보.
|
|
249
|
+
// 사이드바(좌)·도크(우)에 이어 컴포저(하단) — 패널 외 셸의 세 번째 면. 임의 실행 없는 닫힌 데이터.
|
|
250
|
+
/** 슬래시 명령 — 작성자가 "/" 로 부르는 도메인 액션. */
|
|
251
|
+
export const ComposerCommandSchema = z.object({
|
|
252
|
+
/** 트리거(예: "/merge", "/review"). "/" 로 시작. */
|
|
253
|
+
trigger: z.string().regex(/^\/\S+$/, "trigger 는 '/word' 형식"),
|
|
254
|
+
label: z.string(),
|
|
255
|
+
hint: z.string().optional(),
|
|
256
|
+
/**
|
|
257
|
+
* 실행할 액션 id — 있으면 이 명령을 전송할 때 평범한 m.text 가 아니라 org.corp.ui.action(action_id)로 발행한다
|
|
258
|
+
* (호스트가 서버 게이트→App 핸들러로 왕복). 없으면(undefined) 트리거는 자동완성 어휘일 뿐, 전송은 일반 채팅.
|
|
259
|
+
*/
|
|
260
|
+
action_id: z.string().optional(),
|
|
261
|
+
/**
|
|
262
|
+
* 인자 값 키 — 있으면 트리거 뒤에 남은 텍스트(선행 "#"·"@" 제거)를 values[arg] 로 담아 액션에 실어 보낸다.
|
|
263
|
+
* (예: arg="pr" 이면 "/merge #42" → values={ pr: "42" }). action_id 가 있을 때만 의미가 있다.
|
|
264
|
+
*/
|
|
265
|
+
arg: z.string().optional(),
|
|
266
|
+
});
|
|
267
|
+
/** 퀵액션 칩 — 컴포저 위 한-탭 도메인 액션. */
|
|
268
|
+
export const ComposerQuickActionSchema = z.object({
|
|
269
|
+
id: z.string(),
|
|
270
|
+
label: z.string(),
|
|
271
|
+
glyph: z.string().optional(),
|
|
272
|
+
tone: ToneSchema.optional(),
|
|
273
|
+
});
|
|
274
|
+
/** @엔티티 자동완성 후보 — 작성자가 "@" 로 부르는 사람/엔티티. */
|
|
275
|
+
export const ComposerMentionSchema = z.object({
|
|
276
|
+
/** 삽입 토큰(예: "@minah", "#42"). */
|
|
277
|
+
id: z.string(),
|
|
278
|
+
label: z.string(),
|
|
279
|
+
/** 종류 태그(예: "Reviewer", "PR"). */
|
|
280
|
+
type: z.string().optional(),
|
|
281
|
+
hint: z.string().optional(),
|
|
282
|
+
});
|
|
283
|
+
/** 컴포저 스펙 — 팩이 기여하는 입력창 어휘(명령·퀵액션·멘션). 전부 선택(부분 기여 가능). */
|
|
284
|
+
export const ComposerSpecSchema = z.object({
|
|
285
|
+
placeholder: z.string().optional(),
|
|
286
|
+
commands: ComposerCommandSchema.array().optional(),
|
|
287
|
+
quickActions: ComposerQuickActionSchema.array().optional(),
|
|
288
|
+
mentions: ComposerMentionSchema.array().optional(),
|
|
289
|
+
});
|
|
290
|
+
// --- 커맨드 팔레트 스펙 (CommandPaletteSpec) — M3 셸 확장(P3-4) ---
|
|
291
|
+
// 팩이 ⌘K 전역 커맨드 팔레트에 도메인 액션을 선언형으로 기여(그룹 + 엔트리). 패널 외 셸의 네 번째 면.
|
|
292
|
+
// 렌더러는 포커스 트랩 모달 오버레이 + 검색 필터 + 키보드 내비. label/hint 는 `{{entity.path}}` 바인딩 가능.
|
|
293
|
+
/** 팔레트 엔트리 — 하나의 실행 가능한 커맨드. */
|
|
294
|
+
export const CommandEntrySchema = z.object({
|
|
295
|
+
id: z.string(),
|
|
296
|
+
label: z.string(),
|
|
297
|
+
hint: z.string().optional(),
|
|
298
|
+
glyph: z.string().optional(),
|
|
299
|
+
/** 검색 매칭 보조 키워드(라벨 외). */
|
|
300
|
+
keywords: z.string().array().optional(),
|
|
301
|
+
});
|
|
302
|
+
/** 팔레트 그룹 — 라벨 + 엔트리 묶음(예: "Pull requests", "CI"). */
|
|
303
|
+
export const CommandGroupSchema = z.object({
|
|
304
|
+
id: z.string(),
|
|
305
|
+
label: z.string().optional(),
|
|
306
|
+
entries: CommandEntrySchema.array(),
|
|
307
|
+
});
|
|
308
|
+
/** 커맨드 팔레트(⌘K) 스펙 — 팩이 기여하는 전역 커맨드 어휘. */
|
|
309
|
+
export const CommandPaletteSpecSchema = z.object({
|
|
310
|
+
placeholder: z.string().optional(),
|
|
311
|
+
groups: CommandGroupSchema.array(),
|
|
312
|
+
});
|
|
313
|
+
// --- 토스트 스펙 (ToastSpec) — M3 셸 확장(P3-4) ---
|
|
314
|
+
// 선언형 알림 1급 프리미티브(다이얼로그·알림 면). 런타임 이벤트/액션이 토스트를 띄운다 — 렌더 지시 격리.
|
|
315
|
+
// (Modal/Sheet 일반형은 CommandPalette 가 확립한 오버레이 셸 위에 후속.)
|
|
316
|
+
/** 토스트 — 톤 + 제목 + 선택 메시지 + 선택 액션 라벨. role=status/aria-live 로 렌더. */
|
|
317
|
+
export const ToastSpecSchema = z.object({
|
|
318
|
+
tone: ToneSchema.optional(),
|
|
319
|
+
title: z.string(),
|
|
320
|
+
message: z.string().optional(),
|
|
321
|
+
/** 선택 액션 버튼 라벨(예: "Undo", "View"). */
|
|
322
|
+
action: z.string().optional(),
|
|
323
|
+
});
|
|
324
|
+
// --- 모달/시트 스펙 (ModalSpec) — 선언형 오버레이(확인 다이얼로그·시트). ToastSpec 의 짝 ---
|
|
325
|
+
// CommandPalette 가 확립한 포커스 트랩 오버레이 셸 위에 올린 일반형(surfaces.ts 가 약속만 하던 후속).
|
|
326
|
+
// 파괴적 셸 액션(배포/롤백/삭제)을 보내기 전 사람에게 확인을 받는 UX 게이트 — 권한의 최종 결정은 서버.
|
|
327
|
+
// 팩이 AppPack.modals[] 로 선언하고, 같은 id 를 가진 커맨드/도크/사이드바 항목이 이 모달을 연다(확인 시 confirm.action_id 발행).
|
|
328
|
+
/** 모달 확인 버튼 — 라벨 + 발행할 action_id(+톤). */
|
|
329
|
+
export const ModalConfirmSchema = z.object({
|
|
330
|
+
label: z.string(),
|
|
331
|
+
/** 확인 시 발행할 액션 id(org.corp.ui.action). */
|
|
332
|
+
action_id: z.string(),
|
|
333
|
+
tone: ToneSchema.optional(),
|
|
334
|
+
});
|
|
335
|
+
/** 모달/시트 스펙 — 제목 + 설명 + 톤 + 확인/취소. title/description 은 `{{entity.path}}` 바인딩 가능. */
|
|
336
|
+
export const ModalSpecSchema = z.object({
|
|
337
|
+
/** 이 모달의 안정적 id — 같은 id 의 셸 액션이 이 모달을 연다. */
|
|
338
|
+
id: z.string(),
|
|
339
|
+
/** dialog=중앙 모달(기본), sheet=하단/측면 시트. */
|
|
340
|
+
variant: z.enum(["dialog", "sheet"]).optional(),
|
|
341
|
+
title: z.string(),
|
|
342
|
+
description: z.string().optional(),
|
|
343
|
+
tone: ToneSchema.optional(),
|
|
344
|
+
/** 확인 버튼(있으면) — 누르면 confirm.action_id 를 발행하고 닫는다. */
|
|
345
|
+
confirm: ModalConfirmSchema.optional(),
|
|
346
|
+
/** 취소/닫기 라벨(기본 "Cancel"). */
|
|
347
|
+
cancelLabel: z.string().optional(),
|
|
348
|
+
});
|
|
349
|
+
// --- 객체 맵 스펙 (ObjectMapSpec) — M3 셸 확장(P3-5) ---
|
|
350
|
+
// 팩이 도메인 엔티티 간 관계(리드↔연락처↔딜 / repo↔pr↔issue↔사람)를 선언형 그래프로 기여.
|
|
351
|
+
// 렌더러는 정적 원형 레이아웃 SVG(무JS 배치) + 스크린리더용 관계 텍스트 대체(차트 블록의 a11y 자세).
|
|
352
|
+
// label/type 은 `{{entity.path}}` 바인딩 가능.
|
|
353
|
+
/** 그래프 노드 — 하나의 엔티티. */
|
|
354
|
+
export const ObjectMapNodeSchema = z.object({
|
|
355
|
+
id: z.string(),
|
|
356
|
+
label: z.string(),
|
|
357
|
+
/** 엔티티 종류 태그(예: "repo", "pr", "issue", "person"). */
|
|
358
|
+
type: z.string().optional(),
|
|
359
|
+
tone: ToneSchema.optional(),
|
|
360
|
+
});
|
|
361
|
+
/** 그래프 엣지 — 노드 간 관계(from→to). */
|
|
362
|
+
export const ObjectMapEdgeSchema = z.object({
|
|
363
|
+
from: z.string(),
|
|
364
|
+
to: z.string(),
|
|
365
|
+
/** 관계 라벨(예: "reviews", "blocks", "assigned"). */
|
|
366
|
+
label: z.string().optional(),
|
|
367
|
+
});
|
|
368
|
+
/** 객체 맵 스펙 — 엔티티 관계 그래프(노드 + 엣지). */
|
|
369
|
+
export const ObjectMapSpecSchema = z.object({
|
|
370
|
+
title: z.string().optional(),
|
|
371
|
+
nodes: ObjectMapNodeSchema.array(),
|
|
372
|
+
edges: ObjectMapEdgeSchema.array(),
|
|
373
|
+
});
|
|
374
|
+
// --- 앱 서피스 와이어 이벤트 (org.corp.app.surface) — "서피스를 데이터로" ---
|
|
375
|
+
// 클라에 팩을 컴파일해 넣는 대신(registerAppPack=클라 평면), 앱(App Service)이 셸 서피스(패널/헤더)를
|
|
376
|
+
// 상태 이벤트로 룸에 실어 보낸다 → "Matrix App Service 만 추가해도" 회사별 UI 가 등록·렌더된다.
|
|
377
|
+
// 닫힌 SurfaceBody + 토큰 오버라이드만 담는다(임의 코드 없음 = 데이터). 클라 SurfaceRenderer 가 그대로 그린다.
|
|
378
|
+
// 카드(메시지)와 짝: 카드=per-message 데이터, 서피스=per-room 상태 데이터. 둘 다 같은 어휘/렌더러/안전 속성.
|
|
379
|
+
export const AppSurfaceContentSchema = z.object({
|
|
380
|
+
// 버전 전방호환(PLAN-2, App SDK 한정): app.surface 는 App SDK 로 *와이어를 타고* 클라로 가므로 버전 skew(새 에이전트↔
|
|
381
|
+
// 옛 클라)가 실재한다 → 인바운드 v 를 *정수면 수용*(미래 마이너/메이저 best-effort)하되, 빌더(buildAppSurface)는 항상
|
|
382
|
+
// 현재 SCHEMA_VERSION 을 주입해 strict(보낼 땐 현재 버전만). 정수 강제 = Matrix canonical JSON(소수 금지) 준수.
|
|
383
|
+
// 코어 17개 이벤트 v 는 z.literal 유지(PLAN-2: v2 도입 전 lenient 는 죽은 평행 코드 → 보류). 여기만 실제 행사됨.
|
|
384
|
+
v: z.number().int().min(1).default(SCHEMA_VERSION),
|
|
385
|
+
/** room.binding 의 app 키와 같은 식별자(작성자/도메인). */
|
|
386
|
+
app: z.string().min(1),
|
|
387
|
+
/** 사람이 읽는 앱 이름(탭 라벨 등 표시용). 없으면 클라가 app 키로 폴백. */
|
|
388
|
+
display_name: z.string().optional(),
|
|
389
|
+
/** 이 서피스가 다루는 엔티티 타입(표시/진단용). */
|
|
390
|
+
entity_type: z.string().optional(),
|
|
391
|
+
/** 우측 컨텍스트 패널(닫힌 SurfaceBody 조합). {{entity.path}} 바인딩은 클라가 resolveBindings 로 해석. */
|
|
392
|
+
panel: PanelSpecSchema,
|
|
393
|
+
/**
|
|
394
|
+
* 메인 영역 서피스(닫힌 SurfaceBody 조합) — 선택. 우측 panel 의 짝으로, 룸 본문(타임라인 대신)에
|
|
395
|
+
* 탭으로 그릴 중앙 콘텐츠를 데이터로 기술한다. 없으면 이 앱은 사이드바 탭만 제공한다.
|
|
396
|
+
*/
|
|
397
|
+
main: PanelSpecSchema.optional(),
|
|
398
|
+
/** 룸 헤더(제목·메타·파이프라인) — 선택. */
|
|
399
|
+
header: HeaderSpecSchema.optional(),
|
|
400
|
+
// --- M3 셸 개방(외부 SDK) — AppPack 이 팩(클라 빌드 평면)으로만 갖던 셸 어휘를 와이어로도 연다. ---
|
|
401
|
+
// 전부 optional + *기존 스펙 스키마 재사용*(새 블록 종류 0) → 이 필드를 모르는 옛 클라는 zod 기본
|
|
402
|
+
// strip 으로 조용히 무시한다(어휘 버전 결정: v + graceful degrade 현행 유지). AppPack.sidebar(좌측 레일)는
|
|
403
|
+
// 워크스페이스-수준 표면이라 방-수준 와이어로 열지 않는다(팩 전용 유지 — AppDef.sidebar=panel 과의 혼동 방지).
|
|
404
|
+
/** 이벤트 캔버스(보드) — 선택(AppPack.canvas 동일 어휘). */
|
|
405
|
+
canvas: CanvasSpecSchema.optional(),
|
|
406
|
+
/** 우측 에이전트 도크 — 선택(AppPack.dock 동일). */
|
|
407
|
+
dock: AgentDockSpecSchema.optional(),
|
|
408
|
+
/** 컴포저(슬래시 명령·퀵액션·@엔티티 자동완성) — 선택(AppPack.composer 동일). */
|
|
409
|
+
composer: ComposerSpecSchema.optional(),
|
|
410
|
+
/** ⌘K 커맨드 팔레트 엔트리 — 선택(AppPack.commandPalette 동일). */
|
|
411
|
+
commandPalette: CommandPaletteSpecSchema.optional(),
|
|
412
|
+
/** 객체 맵(엔티티 관계 그래프) — 선택(AppPack.objectMap 동일). */
|
|
413
|
+
objectMap: ObjectMapSpecSchema.optional(),
|
|
414
|
+
/** 선언형 모달/시트(확인 다이얼로그) — 선택(AppPack.modals 동일). 같은 id 의 셸 액션이 연다. */
|
|
415
|
+
modals: ModalSpecSchema.array().optional(),
|
|
416
|
+
/**
|
|
417
|
+
* 회사별 브랜드 토큰 오버라이드(--cob-color-* → 값). 클라가 룩(디자인 토큰)을 소유하되,
|
|
418
|
+
* 테넌트는 토큰만 갈아끼워 자기 브랜드를 입힌다(임의 CSS 아님 = 닫힌 토큰 키). 클라가 inline CSS 변수로 적용.
|
|
419
|
+
*/
|
|
420
|
+
theme: z.record(z.string()).optional(),
|
|
421
|
+
});
|
|
422
|
+
/** AppSurface content 빌더 — v 주입 + 스키마 검증(앱은 이걸 상태 이벤트로 룸에 게시). 항상 현재 SCHEMA_VERSION(strict). */
|
|
423
|
+
export function buildAppSurface(input) {
|
|
424
|
+
return AppSurfaceContentSchema.parse({ ...input, v: SCHEMA_VERSION });
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* 인바운드 app.surface content 에서 모르는/깨진 섹션을 떨어낸다(전방호환 graceful degrade) — strict 파싱 전 호출.
|
|
428
|
+
* dropUnknownBlocks(카드, events.ts)의 *서피스 짝*: panel/main 의 섹션 body 는 discriminatedUnion 이라 한 섹션만
|
|
429
|
+
* 미지(미래 kind)여도 array 전체가 실패 → 서피스 전체(헤더/테마 포함)가 붕괴한다. 그래서 *클라 렌더 경로에 한해*
|
|
430
|
+
* 각 섹션을 개별 safeParse 해 통과한 것만 남긴다(미지 섹션 드롭, 나머지 섹션 + 헤더/테마 정상 렌더). 빌더는 strict 그대로.
|
|
431
|
+
* 버전 lenient(위)와 짝 — 새 에이전트가 보낸 v2/새 섹션 서피스를 옛 클라가 알아보는 부분만 그린다(실제 행사되는 경로).
|
|
432
|
+
*/
|
|
433
|
+
export function dropUnknownSurfaceSections(raw) {
|
|
434
|
+
if (!raw || typeof raw !== "object")
|
|
435
|
+
return raw;
|
|
436
|
+
const c = raw;
|
|
437
|
+
const keepSections = (panel) => {
|
|
438
|
+
if (!panel || typeof panel !== "object")
|
|
439
|
+
return panel;
|
|
440
|
+
const p = panel;
|
|
441
|
+
if (!Array.isArray(p.sections))
|
|
442
|
+
return panel;
|
|
443
|
+
return { ...p, sections: p.sections.filter((s) => SurfaceSectionSchema.safeParse(s).success) };
|
|
444
|
+
};
|
|
445
|
+
return {
|
|
446
|
+
...c,
|
|
447
|
+
...(c.panel !== undefined ? { panel: keepSections(c.panel) } : {}),
|
|
448
|
+
...(c.main !== undefined ? { main: keepSections(c.main) } : {}),
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
// --- 데이터 바인딩 ---
|
|
452
|
+
function getPath(obj, path) {
|
|
453
|
+
return path.split(".").reduce((acc, key) => {
|
|
454
|
+
if (acc == null || typeof acc !== "object")
|
|
455
|
+
return undefined;
|
|
456
|
+
return acc[key];
|
|
457
|
+
}, obj);
|
|
458
|
+
}
|
|
459
|
+
const BINDING_RE = /\{\{\s*([\w.]+)\s*\}\}/g;
|
|
460
|
+
/**
|
|
461
|
+
* 스펙(또는 임의 값) 안의 모든 문자열에서 `{{path}}` 를 엔티티 스냅샷 값으로 치환한다.
|
|
462
|
+
* 선언형/샌드박스(임의 코드 없음) — UI Blocks 와 같은 안전 자세.
|
|
463
|
+
*
|
|
464
|
+
* 규칙:
|
|
465
|
+
* - **문자열 전용 바인딩.** 문자열 안의 토큰만 치환하므로, zod 가 number 로 받는 필드
|
|
466
|
+
* (예: progress.value)는 `{{path}}` 로 바인딩할 수 없다(스키마 검증에서 거부됨). 숫자/불리언은
|
|
467
|
+
* 작성 시점 리터럴로 둔다.
|
|
468
|
+
* - **미해결 경로**(엔티티에 없음/오타)는 `{{path}}` 토큰을 그대로 남겨 가시화한다(빈 문자열로
|
|
469
|
+
* 조용히 사라지지 않게 — 작성자 footgun 방지).
|
|
470
|
+
* - null → 빈 문자열, 객체/배열 → 빈 문자열("[object Object]"/"a,b" 방지). number/boolean/0/false 는 그대로.
|
|
471
|
+
*/
|
|
472
|
+
export function resolveBindings(spec, entity) {
|
|
473
|
+
const walk = (v) => {
|
|
474
|
+
if (typeof v === "string") {
|
|
475
|
+
return v.replace(BINDING_RE, (match, path) => {
|
|
476
|
+
const resolved = getPath(entity, path);
|
|
477
|
+
if (resolved === undefined)
|
|
478
|
+
return match; // 미해결 → 토큰 유지(가시화)
|
|
479
|
+
if (resolved === null)
|
|
480
|
+
return "";
|
|
481
|
+
if (typeof resolved === "object")
|
|
482
|
+
return ""; // 객체/배열 stringify 방지
|
|
483
|
+
return String(resolved); // string | number | boolean
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
if (Array.isArray(v))
|
|
487
|
+
return v.map(walk);
|
|
488
|
+
if (v && typeof v === "object") {
|
|
489
|
+
const out = {};
|
|
490
|
+
for (const [k, val] of Object.entries(v))
|
|
491
|
+
out[k] = walk(val);
|
|
492
|
+
return out;
|
|
493
|
+
}
|
|
494
|
+
return v;
|
|
495
|
+
};
|
|
496
|
+
return walk(spec);
|
|
497
|
+
}
|
|
498
|
+
// --- 바인딩 진단 (서피스 빌더 — P3-7) ---
|
|
499
|
+
// 작성자 도구가 "이 스펙이 참조하는 모든 {{path}}" 와 "엔티티에서 해결되는지"를 보여주기 위한 헬퍼.
|
|
500
|
+
// resolveBindings 와 같은 규칙(BINDING_RE/getPath)을 재사용 — 미해결 바인딩 footgun 을 가시화한다.
|
|
501
|
+
/** 스펙(임의 값)의 모든 문자열에서 참조된 고유 `{{path}}` 경로를 수집(정렬). */
|
|
502
|
+
export function collectBindingPaths(spec) {
|
|
503
|
+
const paths = new Set();
|
|
504
|
+
const walk = (v) => {
|
|
505
|
+
if (typeof v === "string") {
|
|
506
|
+
for (const m of v.matchAll(BINDING_RE))
|
|
507
|
+
paths.add(m[1]);
|
|
508
|
+
}
|
|
509
|
+
else if (Array.isArray(v)) {
|
|
510
|
+
v.forEach(walk);
|
|
511
|
+
}
|
|
512
|
+
else if (v && typeof v === "object") {
|
|
513
|
+
Object.values(v).forEach(walk);
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
walk(spec);
|
|
517
|
+
return [...paths].sort();
|
|
518
|
+
}
|
|
519
|
+
/** 각 `{{path}}` 가 엔티티에서 해결되는지 보고(빌더의 "미해결 바인딩 리스트"). resolved=false 면 작성자 오타/누락. */
|
|
520
|
+
export function bindingStatus(spec, entity) {
|
|
521
|
+
return collectBindingPaths(spec).map((path) => ({ path, resolved: getPath(entity, path) !== undefined }));
|
|
522
|
+
}
|
|
523
|
+
//# sourceMappingURL=surfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surfaces.js","sourceRoot":"","sources":["../src/surfaces.ts"],"names":[],"mappings":"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"}
|