@drawcall/design 0.9.0 → 0.10.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.
@@ -0,0 +1,90 @@
1
+ import { commentBodySchema, createCommentSchema, designIdSchema, } from "../v1/schemas.js";
2
+ import { result } from "./result.js";
3
+ import { projectInput } from "./schema.js";
4
+ const commentInput = projectInput.extend({ comment: designIdSchema });
5
+ export function registerCommentTools(server, client) {
6
+ server.registerTool("list_design_comments", {
7
+ title: "List Design comments",
8
+ description: "List project comments and replies. Optionally limit the result to one frame.",
9
+ inputSchema: projectInput.extend({ frame: designIdSchema.optional() }),
10
+ annotations: {
11
+ readOnlyHint: true,
12
+ destructiveHint: false,
13
+ openWorldHint: false,
14
+ idempotentHint: true,
15
+ },
16
+ }, async ({ project, frame }) => result({
17
+ comments: await client.comment.list({
18
+ project,
19
+ ...(frame ? { frame } : {}),
20
+ }),
21
+ }));
22
+ server.registerTool("get_design_comment", {
23
+ title: "Get Design comment",
24
+ description: "Get one comment with all of its replies.",
25
+ inputSchema: commentInput,
26
+ annotations: {
27
+ readOnlyHint: true,
28
+ destructiveHint: false,
29
+ openWorldHint: false,
30
+ idempotentHint: true,
31
+ },
32
+ }, async ({ project, comment }) => result({ comment: await client.comment.get({ project, comment }) }));
33
+ server.registerTool("create_design_comment", {
34
+ title: "Create Design comment",
35
+ description: "Create a frame-level comment or a positioned annotation. A position requires expectedContentRevision from the current target frame; omit the position when its coordinates are not authoritative.",
36
+ inputSchema: createCommentSchema,
37
+ annotations: {
38
+ readOnlyHint: false,
39
+ destructiveHint: false,
40
+ openWorldHint: false,
41
+ idempotentHint: false,
42
+ },
43
+ }, async (input) => result({ comment: await client.comment.create(input) }));
44
+ server.registerTool("reply_to_design_comment", {
45
+ title: "Reply to Design comment",
46
+ description: "Add a reply to an unresolved comment.",
47
+ inputSchema: commentInput.extend({ body: commentBodySchema }),
48
+ annotations: {
49
+ readOnlyHint: false,
50
+ destructiveHint: false,
51
+ openWorldHint: false,
52
+ idempotentHint: false,
53
+ },
54
+ }, async ({ project, comment, body }) => result({
55
+ comment: await client.comment.reply({ project, comment, body }),
56
+ }));
57
+ registerResolutionTool(server, client, true);
58
+ registerResolutionTool(server, client, false);
59
+ server.registerTool("delete_design_comment", {
60
+ title: "Delete Design comment",
61
+ description: "Permanently delete a comment thread or one reply. Deleting a thread also deletes its replies.",
62
+ inputSchema: commentInput,
63
+ annotations: {
64
+ readOnlyHint: false,
65
+ destructiveHint: true,
66
+ openWorldHint: false,
67
+ idempotentHint: false,
68
+ },
69
+ }, async ({ project, comment }) => result(await client.comment.delete({ project, comment })));
70
+ }
71
+ function registerResolutionTool(server, client, resolved) {
72
+ const action = resolved ? "resolve" : "reopen";
73
+ server.registerTool(`${action}_design_comment`, {
74
+ title: `${resolved ? "Resolve" : "Reopen"} Design comment`,
75
+ description: `${resolved ? "Resolve" : "Reopen"} a comment thread.`,
76
+ inputSchema: commentInput,
77
+ annotations: {
78
+ readOnlyHint: false,
79
+ destructiveHint: false,
80
+ openWorldHint: false,
81
+ idempotentHint: true,
82
+ },
83
+ }, async ({ project, comment }) => result({
84
+ comment: await client.comment.setResolved({
85
+ project,
86
+ comment,
87
+ resolved,
88
+ }),
89
+ }));
90
+ }
package/dist/mcp/frame.js CHANGED
@@ -15,7 +15,7 @@ export function registerFrameTools(server, client, fetcher) {
15
15
  }, async ({ project }) => result({ frames: await client.frame.list({ project }) }));
16
16
  server.registerTool("create_design_frame", {
17
17
  title: "Create Design frame",
18
- description: "Create a frame in a Drawcall Design project. Use type=glts for reusable 3D objects and scenes, then write its source with write_design_file. Use type=image only for an existing public image URL and type=market only for an exact public Market asset.",
18
+ description: "Create a frame in a Drawcall Design project. Use type=glts for reusable 3D objects and scenes, then write .glts source with write_design_file. Use type=markdown for a document, then write /<frame-id>/index.md. Use type=image only for an existing public image URL and type=market only for an exact public Market asset.",
19
19
  inputSchema: createFrameSchema,
20
20
  annotations: {
21
21
  readOnlyHint: false,
@@ -1,4 +1,5 @@
1
1
  import { registerFileTools } from "./file.js";
2
+ import { registerCommentTools } from "./comment.js";
2
3
  import { registerFrameTools } from "./frame.js";
3
4
  import { registerProjectTools } from "./project.js";
4
5
  import { registerSkillTool } from "./skill.js";
@@ -6,5 +7,6 @@ export function registerDesignTools(server, client, options = {}) {
6
7
  registerSkillTool(server);
7
8
  registerProjectTools(server, client);
8
9
  registerFrameTools(server, client, options.fetch ?? globalThis.fetch);
10
+ registerCommentTools(server, client);
9
11
  registerFileTools(server, client);
10
12
  }
@@ -10,6 +10,7 @@ export declare const createFrameSchema: z.ZodObject<{
10
10
  type: z.ZodEnum<{
11
11
  image: "image";
12
12
  glts: "glts";
13
+ markdown: "markdown";
13
14
  market: "market";
14
15
  }>;
15
16
  width: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
@@ -12,7 +12,7 @@ export const createFrameSchema = z
12
12
  .object({
13
13
  project: projectIdSchema,
14
14
  name: frameNameSchema,
15
- type: z.enum(["glts", "image", "market"]),
15
+ type: z.enum(["glts", "image", "markdown", "market"]),
16
16
  width: sizeSchema.optional(),
17
17
  height: sizeSchema.optional(),
18
18
  image: imageUrlSchema.optional(),
@@ -42,6 +42,7 @@ export const createFrameSchema = z
42
42
  };
43
43
  switch (input.type) {
44
44
  case "glts":
45
+ case "markdown":
45
46
  require("width");
46
47
  require("height");
47
48
  reject("image");
@@ -82,6 +83,18 @@ export function frameCreationInput(input) {
82
83
  height: input.height,
83
84
  ...position,
84
85
  };
86
+ case "markdown":
87
+ if (input.width === undefined || input.height === undefined) {
88
+ throw new Error("Validated Markdown frame input is missing dimensions");
89
+ }
90
+ return {
91
+ project: input.project,
92
+ name: input.name,
93
+ type: input.type,
94
+ width: input.width,
95
+ height: input.height,
96
+ ...position,
97
+ };
85
98
  case "image":
86
99
  if (input.image === undefined) {
87
100
  throw new Error("Validated image frame input is missing an image");
@@ -32,6 +32,20 @@ export declare const projectGltsFrameRecordSchema: z.ZodObject<{
32
32
  }, z.core.$strict>;
33
33
  }, z.core.$strict>>;
34
34
  }, z.core.$strict>;
35
+ export declare const projectMarkdownFrameRecordSchema: z.ZodObject<{
36
+ x: z.ZodNumber;
37
+ y: z.ZodNumber;
38
+ width: z.ZodNumber;
39
+ height: z.ZodNumber;
40
+ id: z.ZodString;
41
+ projectId: z.ZodString;
42
+ name: z.ZodString;
43
+ viewUrl: z.ZodString;
44
+ contentRevision: z.ZodNumber;
45
+ createdAt: z.ZodString;
46
+ updatedAt: z.ZodString;
47
+ type: z.ZodLiteral<"markdown">;
48
+ }, z.core.$strict>;
35
49
  export declare const projectImageFrameRecordSchema: z.ZodObject<{
36
50
  x: z.ZodNumber;
37
51
  y: z.ZodNumber;
@@ -132,6 +146,19 @@ export declare const projectFrameRecordSchema: z.ZodDiscriminatedUnion<[z.ZodObj
132
146
  w: z.ZodNumber;
133
147
  }, z.core.$strict>;
134
148
  }, z.core.$strict>>;
149
+ }, z.core.$strict>, z.ZodObject<{
150
+ x: z.ZodNumber;
151
+ y: z.ZodNumber;
152
+ width: z.ZodNumber;
153
+ height: z.ZodNumber;
154
+ id: z.ZodString;
155
+ projectId: z.ZodString;
156
+ name: z.ZodString;
157
+ viewUrl: z.ZodString;
158
+ contentRevision: z.ZodNumber;
159
+ createdAt: z.ZodString;
160
+ updatedAt: z.ZodString;
161
+ type: z.ZodLiteral<"markdown">;
135
162
  }, z.core.$strict>, z.ZodObject<{
136
163
  x: z.ZodNumber;
137
164
  y: z.ZodNumber;
@@ -201,7 +228,7 @@ export declare const projectFrameRecordSchema: z.ZodDiscriminatedUnion<[z.ZodObj
201
228
  }, z.core.$strict>;
202
229
  }, z.core.$strict>], "type">;
203
230
  export declare const projectStateSchema: z.ZodObject<{
204
- schemaVersion: z.ZodLiteral<1>;
231
+ schemaVersion: z.ZodLiteral<2>;
205
232
  projectId: z.ZodString;
206
233
  revision: z.ZodNumber;
207
234
  frames: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -230,6 +257,19 @@ export declare const projectStateSchema: z.ZodObject<{
230
257
  w: z.ZodNumber;
231
258
  }, z.core.$strict>;
232
259
  }, z.core.$strict>>;
260
+ }, z.core.$strict>, z.ZodObject<{
261
+ x: z.ZodNumber;
262
+ y: z.ZodNumber;
263
+ width: z.ZodNumber;
264
+ height: z.ZodNumber;
265
+ id: z.ZodString;
266
+ projectId: z.ZodString;
267
+ name: z.ZodString;
268
+ viewUrl: z.ZodString;
269
+ contentRevision: z.ZodNumber;
270
+ createdAt: z.ZodString;
271
+ updatedAt: z.ZodString;
272
+ type: z.ZodLiteral<"markdown">;
233
273
  }, z.core.$strict>, z.ZodObject<{
234
274
  x: z.ZodNumber;
235
275
  y: z.ZodNumber;
@@ -322,10 +362,15 @@ export declare const projectPresenceServerMessageSchema: z.ZodObject<{
322
362
  }, z.core.$strict>>;
323
363
  }, z.core.$strict>>;
324
364
  }, z.core.$strict>;
365
+ export declare const projectCommentsChangedServerMessageSchema: z.ZodObject<{
366
+ type: z.ZodLiteral<"comments:changed">;
367
+ }, z.core.$strict>;
325
368
  export type ProjectPresenceClientMessage = z.infer<typeof projectPresenceClientMessageSchema>;
326
369
  export type ProjectPresenceServerMessage = z.infer<typeof projectPresenceServerMessageSchema>;
370
+ export type ProjectCommentsChangedServerMessage = z.infer<typeof projectCommentsChangedServerMessageSchema>;
327
371
  export type ProjectFrameLayout = z.infer<typeof projectFrameLayoutSchema>;
328
372
  export type ProjectGltsFrameRecord = z.infer<typeof projectGltsFrameRecordSchema>;
373
+ export type ProjectMarkdownFrameRecord = z.infer<typeof projectMarkdownFrameRecordSchema>;
329
374
  export type ProjectImageFrameRecord = z.infer<typeof projectImageFrameRecordSchema>;
330
375
  export type ProjectMarketFile = z.infer<typeof projectMarketFileSchema>;
331
376
  export type ProjectMarketFrameRecord = z.infer<typeof projectMarketFrameRecordSchema>;
@@ -36,6 +36,9 @@ export const projectGltsFrameRecordSchema = projectFrameRecordBaseSchema
36
36
  camera: cameraPoseSchema.optional(),
37
37
  })
38
38
  .strict();
39
+ export const projectMarkdownFrameRecordSchema = projectFrameRecordBaseSchema
40
+ .extend({ type: z.literal("markdown") })
41
+ .strict();
39
42
  export const projectImageFrameRecordSchema = projectFrameRecordBaseSchema
40
43
  .extend({
41
44
  type: z.literal("image"),
@@ -70,12 +73,13 @@ export const projectMarketFrameRecordSchema = projectFrameRecordBaseSchema
70
73
  .strict();
71
74
  export const projectFrameRecordSchema = z.discriminatedUnion("type", [
72
75
  projectGltsFrameRecordSchema,
76
+ projectMarkdownFrameRecordSchema,
73
77
  projectImageFrameRecordSchema,
74
78
  projectMarketFrameRecordSchema,
75
79
  ]);
76
80
  export const projectStateSchema = z
77
81
  .object({
78
- schemaVersion: z.literal(1),
82
+ schemaVersion: z.literal(2),
79
83
  projectId: designIdSchema,
80
84
  revision: z.number().int().nonnegative(),
81
85
  frames: z.array(projectFrameRecordSchema),
@@ -110,3 +114,6 @@ export const projectPresenceServerMessageSchema = z
110
114
  collaborators: z.array(projectCollaboratorSchema),
111
115
  })
112
116
  .strict();
117
+ export const projectCommentsChangedServerMessageSchema = z
118
+ .object({ type: z.literal("comments:changed") })
119
+ .strict();
@@ -3,11 +3,58 @@ export declare const inspectionMessageTypes: {
3
3
  readonly applied: "drawcall:inspection:applied";
4
4
  readonly exit: "drawcall:inspection:exit";
5
5
  readonly failed: "drawcall:inspection:failed";
6
- readonly focus: "drawcall:inspection:focus";
7
6
  readonly loading: "drawcall:inspection:loading";
8
7
  readonly ready: "drawcall:inspection:ready";
9
8
  readonly set: "drawcall:inspection:set";
10
9
  };
10
+ export declare const previewMessageTypes: {
11
+ readonly configure: "drawcall:preview:configure";
12
+ readonly failed: "drawcall:preview:failed";
13
+ readonly fatal: "drawcall:preview:fatal";
14
+ readonly load: "drawcall:preview:load";
15
+ readonly loaded: "drawcall:preview:loaded";
16
+ readonly ready: "drawcall:preview:ready";
17
+ };
18
+ export declare const previewPixelRatioMax = 4;
19
+ export declare const previewLoadCommandSchema: z.ZodObject<{
20
+ type: z.ZodLiteral<"drawcall:preview:load">;
21
+ requestId: z.ZodString;
22
+ frameId: z.ZodString;
23
+ camera: z.ZodNullable<z.ZodObject<{
24
+ position: z.ZodObject<{
25
+ x: z.ZodNumber;
26
+ y: z.ZodNumber;
27
+ z: z.ZodNumber;
28
+ }, z.core.$strict>;
29
+ quaternion: z.ZodObject<{
30
+ x: z.ZodNumber;
31
+ y: z.ZodNumber;
32
+ z: z.ZodNumber;
33
+ w: z.ZodNumber;
34
+ }, z.core.$strict>;
35
+ }, z.core.$strict>>;
36
+ pixelRatio: z.ZodNumber;
37
+ }, z.core.$strict>;
38
+ export declare const previewConfigureCommandSchema: z.ZodObject<{
39
+ type: z.ZodLiteral<"drawcall:preview:configure">;
40
+ pixelRatio: z.ZodNumber;
41
+ }, z.core.$strict>;
42
+ export declare const previewLoadResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
43
+ requestId: z.ZodString;
44
+ frameId: z.ZodString;
45
+ type: z.ZodLiteral<"drawcall:preview:loaded">;
46
+ }, z.core.$strict>, z.ZodObject<{
47
+ requestId: z.ZodString;
48
+ frameId: z.ZodString;
49
+ type: z.ZodLiteral<"drawcall:preview:failed">;
50
+ error: z.ZodString;
51
+ }, z.core.$strict>], "type">;
52
+ export declare const previewSessionEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
53
+ type: z.ZodLiteral<"drawcall:preview:ready">;
54
+ }, z.core.$strict>, z.ZodObject<{
55
+ type: z.ZodLiteral<"drawcall:preview:fatal">;
56
+ error: z.ZodString;
57
+ }, z.core.$strict>], "type">;
11
58
  export declare const immersiveMessageTypes: {
12
59
  readonly enter: "drawcall:immersive:enter";
13
60
  readonly error: "drawcall:immersive:error";
@@ -122,6 +169,116 @@ export declare const cameraMessageTypes: {
122
169
  readonly set: "drawcall:camera:set";
123
170
  readonly unavailable: "drawcall:camera:unavailable";
124
171
  };
172
+ export declare const commentRuntimeMessageTypes: {
173
+ readonly action: "drawcall:comment:action";
174
+ readonly actionResult: "drawcall:comment:action-result";
175
+ readonly missed: "drawcall:comment:missed";
176
+ readonly pick: "drawcall:comment:pick";
177
+ readonly picked: "drawcall:comment:picked";
178
+ readonly selected: "drawcall:comment:selected";
179
+ readonly set: "drawcall:comments:set";
180
+ };
181
+ export declare const commentPickCommandSchema: z.ZodObject<{
182
+ type: z.ZodLiteral<"drawcall:comment:pick">;
183
+ requestId: z.ZodString;
184
+ x: z.ZodNumber;
185
+ y: z.ZodNumber;
186
+ }, z.core.$strict>;
187
+ export declare const commentPickResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
188
+ type: z.ZodLiteral<"drawcall:comment:picked">;
189
+ requestId: z.ZodString;
190
+ position: z.ZodObject<{
191
+ x: z.ZodNumber;
192
+ y: z.ZodNumber;
193
+ z: z.ZodNumber;
194
+ }, z.core.$strict>;
195
+ }, z.core.$strict>, z.ZodObject<{
196
+ type: z.ZodLiteral<"drawcall:comment:missed">;
197
+ requestId: z.ZodString;
198
+ }, z.core.$strict>], "type">;
199
+ export declare const commentStateCommandSchema: z.ZodObject<{
200
+ type: z.ZodLiteral<"drawcall:comments:set">;
201
+ activeComment: z.ZodNullable<z.ZodString>;
202
+ focusRequest: z.ZodNullable<z.ZodNumber>;
203
+ comments: z.ZodArray<z.ZodObject<{
204
+ id: z.ZodString;
205
+ projectId: z.ZodString;
206
+ frameId: z.ZodString;
207
+ body: z.ZodString;
208
+ author: z.ZodObject<{
209
+ id: z.ZodString;
210
+ name: z.ZodString;
211
+ image: z.ZodNullable<z.ZodString>;
212
+ }, z.core.$strict>;
213
+ replies: z.ZodArray<z.ZodObject<{
214
+ id: z.ZodString;
215
+ commentId: z.ZodString;
216
+ body: z.ZodString;
217
+ author: z.ZodObject<{
218
+ id: z.ZodString;
219
+ name: z.ZodString;
220
+ image: z.ZodNullable<z.ZodString>;
221
+ }, z.core.$strict>;
222
+ createdAt: z.ZodString;
223
+ updatedAt: z.ZodString;
224
+ }, z.core.$strict>>;
225
+ resolution: z.ZodOptional<z.ZodObject<{
226
+ resolvedAt: z.ZodString;
227
+ resolvedBy: z.ZodObject<{
228
+ id: z.ZodString;
229
+ name: z.ZodString;
230
+ image: z.ZodNullable<z.ZodString>;
231
+ }, z.core.$strict>;
232
+ }, z.core.$strict>>;
233
+ createdAt: z.ZodString;
234
+ updatedAt: z.ZodString;
235
+ position: z.ZodObject<{
236
+ kind: z.ZodLiteral<"3d">;
237
+ x: z.ZodNumber;
238
+ y: z.ZodNumber;
239
+ z: z.ZodNumber;
240
+ frameContentRevision: z.ZodNumber;
241
+ }, z.core.$strict>;
242
+ }, z.core.$strict>>;
243
+ frameContentRevision: z.ZodNumber;
244
+ user: z.ZodObject<{
245
+ id: z.ZodString;
246
+ name: z.ZodString;
247
+ image: z.ZodNullable<z.ZodString>;
248
+ }, z.core.$strict>;
249
+ }, z.core.$strict>;
250
+ export declare const commentActionMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
251
+ type: z.ZodLiteral<"drawcall:comment:action">;
252
+ requestId: z.ZodString;
253
+ action: z.ZodLiteral<"reply">;
254
+ comment: z.ZodString;
255
+ body: z.ZodString;
256
+ }, z.core.$strict>, z.ZodObject<{
257
+ type: z.ZodLiteral<"drawcall:comment:action">;
258
+ requestId: z.ZodString;
259
+ action: z.ZodLiteral<"resolve">;
260
+ comment: z.ZodString;
261
+ resolved: z.ZodBoolean;
262
+ }, z.core.$strict>, z.ZodObject<{
263
+ type: z.ZodLiteral<"drawcall:comment:action">;
264
+ requestId: z.ZodString;
265
+ action: z.ZodLiteral<"delete">;
266
+ target: z.ZodString;
267
+ }, z.core.$strict>], "action">;
268
+ export declare const commentActionResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
269
+ type: z.ZodLiteral<"drawcall:comment:action-result">;
270
+ requestId: z.ZodString;
271
+ ok: z.ZodLiteral<true>;
272
+ }, z.core.$strict>, z.ZodObject<{
273
+ type: z.ZodLiteral<"drawcall:comment:action-result">;
274
+ requestId: z.ZodString;
275
+ ok: z.ZodLiteral<false>;
276
+ error: z.ZodString;
277
+ }, z.core.$strict>], "ok">;
278
+ export declare const commentSelectionMessageSchema: z.ZodObject<{
279
+ type: z.ZodLiteral<"drawcall:comment:selected">;
280
+ comment: z.ZodNullable<z.ZodString>;
281
+ }, z.core.$strict>;
125
282
  export declare const sourceFileMessageTypes: {
126
283
  readonly changed: "drawcall:source-files:changed";
127
284
  readonly reloadResult: "drawcall:source-file:reload-result";
@@ -230,6 +387,12 @@ export declare const posterRenderResultSchema: z.ZodDiscriminatedUnion<[z.ZodObj
230
387
  type: z.ZodLiteral<"drawcall:poster:failed">;
231
388
  error: z.ZodString;
232
389
  }, z.core.$strict>], "type">;
390
+ export declare const frameRenderResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
391
+ status: z.ZodLiteral<"rendered">;
392
+ }, z.core.$strict>, z.ZodObject<{
393
+ status: z.ZodLiteral<"failed">;
394
+ error: z.ZodString;
395
+ }, z.core.$strict>], "status">;
233
396
  export declare const inspectionCommandSchema: z.ZodObject<{
234
397
  type: z.ZodLiteral<"drawcall:inspection:set">;
235
398
  requestId: z.ZodString;
@@ -247,18 +410,25 @@ export declare const inspectionFrameMessageSchema: z.ZodDiscriminatedUnion<[z.Zo
247
410
  enabled: z.ZodBoolean;
248
411
  }, z.core.$strict>, z.ZodObject<{
249
412
  type: z.ZodLiteral<"drawcall:inspection:exit">;
250
- }, z.core.$strict>, z.ZodObject<{
251
- type: z.ZodLiteral<"drawcall:inspection:focus">;
252
413
  }, z.core.$strict>], "type">;
253
414
  export type InspectionCommand = z.infer<typeof inspectionCommandSchema>;
415
+ export type PreviewLoadCommand = z.infer<typeof previewLoadCommandSchema>;
416
+ export type PreviewLoadResult = z.infer<typeof previewLoadResultSchema>;
254
417
  export type PosterRenderCommand = z.infer<typeof posterRenderCommandSchema>;
255
418
  export type PosterRenderResult = z.infer<typeof posterRenderResultSchema>;
419
+ export type FrameRenderResult = z.infer<typeof frameRenderResultSchema>;
256
420
  export type ImmersiveMode = z.infer<typeof immersiveModeSchema>;
257
421
  export type ImmersiveCommand = z.infer<typeof immersiveCommandSchema>;
258
422
  export type ImmersiveFrameMessage = z.infer<typeof immersiveFrameMessageSchema>;
259
423
  export type CameraCaptureCommand = z.infer<typeof cameraCaptureCommandSchema>;
260
424
  export type CameraSetCommand = z.infer<typeof cameraSetCommandSchema>;
261
425
  export type CameraCaptureResult = z.infer<typeof cameraCaptureResultSchema>;
426
+ export type CommentPickCommand = z.infer<typeof commentPickCommandSchema>;
427
+ export type CommentPickResult = z.infer<typeof commentPickResultSchema>;
428
+ export type CommentStateCommand = z.infer<typeof commentStateCommandSchema>;
429
+ export type CommentActionMessage = z.infer<typeof commentActionMessageSchema>;
430
+ export type CommentActionResult = z.infer<typeof commentActionResultSchema>;
431
+ export type CommentSelectionMessage = z.infer<typeof commentSelectionMessageSchema>;
262
432
  export type SourceFileChange = z.infer<typeof sourceFileChangeSchema>;
263
433
  export type SourceFilesChangedMessage = z.infer<typeof sourceFilesChangedMessageSchema>;
264
434
  export type SourceFileReloadResult = z.infer<typeof sourceFileReloadResultSchema>;
@@ -279,4 +449,7 @@ export type GltsExportFrameMessage = z.infer<typeof gltsExportFrameMessageSchema
279
449
  /** The per-project page that renders frame posters; never a frame ID path. */
280
450
  export declare const posterPagePath = "/poster/";
281
451
  export declare function posterPageUrl(frameViewUrl: string): string;
452
+ /** The per-project page that hosts the reusable live GLTS preview. */
453
+ export declare const previewPagePath = "/preview/";
454
+ export declare function previewPageUrl(frameViewUrl: string): string;
282
455
  export declare function projectSyncUrl(baseUrl: string, project: string): string;