v0-sdk 0.5.2 → 0.6.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/dist/index.cjs CHANGED
@@ -2,6 +2,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
2
2
 
3
3
  function createFetcher(config = {}) {
4
4
  const baseUrl = config.baseUrl || 'https://api.v0.dev/v1';
5
+ let sessionToken = null;
5
6
  return async function fetcher(url, method, params = {}) {
6
7
  const apiKey = config.apiKey || process.env.V0_API_KEY;
7
8
  if (!apiKey) {
@@ -12,9 +13,12 @@ function createFetcher(config = {}) {
12
13
  const hasBody = method !== 'GET' && params.body;
13
14
  const headers = {
14
15
  Authorization: `Bearer ${apiKey}`,
15
- 'x-session-cache': '1',
16
16
  ...params.headers
17
17
  };
18
+ // Include session token in headers if available
19
+ if (sessionToken) {
20
+ headers['x-session-token'] = sessionToken;
21
+ }
18
22
  if (hasBody) {
19
23
  headers['Content-Type'] = 'application/json';
20
24
  }
@@ -23,6 +27,11 @@ function createFetcher(config = {}) {
23
27
  headers,
24
28
  body: hasBody ? JSON.stringify(params.body) : undefined
25
29
  });
30
+ // Check for session token in response headers
31
+ const newSessionToken = res.headers.get('x-session-token');
32
+ if (newSessionToken) {
33
+ sessionToken = newSessionToken;
34
+ }
26
35
  if (!res.ok) {
27
36
  const text = await res.text();
28
37
  throw new Error(`HTTP ${res.status}: ${text}`);
@@ -121,6 +130,22 @@ function createClient(config = {}) {
121
130
  body
122
131
  });
123
132
  },
133
+ async findMessages (params) {
134
+ const pathParams = {
135
+ chatId: params.chatId
136
+ };
137
+ const query = Object.fromEntries(Object.entries({
138
+ limit: params.limit,
139
+ cursor: params.cursor
140
+ }).filter(([_, value])=>value !== undefined));
141
+ const hasQuery = Object.keys(query).length > 0;
142
+ return fetcher(`/chats/${pathParams.chatId}/messages`, 'GET', {
143
+ pathParams,
144
+ ...hasQuery ? {
145
+ query
146
+ } : {}
147
+ });
148
+ },
124
149
  async sendMessage (params) {
125
150
  const pathParams = {
126
151
  chatId: params.chatId
@@ -136,6 +161,53 @@ function createClient(config = {}) {
136
161
  body
137
162
  });
138
163
  },
164
+ async getMessage (params) {
165
+ const pathParams = {
166
+ chatId: params.chatId,
167
+ messageId: params.messageId
168
+ };
169
+ return fetcher(`/chats/${pathParams.chatId}/messages/${pathParams.messageId}`, 'GET', {
170
+ pathParams
171
+ });
172
+ },
173
+ async findVersions (params) {
174
+ const pathParams = {
175
+ chatId: params.chatId
176
+ };
177
+ const query = Object.fromEntries(Object.entries({
178
+ limit: params.limit,
179
+ cursor: params.cursor
180
+ }).filter(([_, value])=>value !== undefined));
181
+ const hasQuery = Object.keys(query).length > 0;
182
+ return fetcher(`/chats/${pathParams.chatId}/versions`, 'GET', {
183
+ pathParams,
184
+ ...hasQuery ? {
185
+ query
186
+ } : {}
187
+ });
188
+ },
189
+ async getVersion (params) {
190
+ const pathParams = {
191
+ chatId: params.chatId,
192
+ versionId: params.versionId
193
+ };
194
+ return fetcher(`/chats/${pathParams.chatId}/versions/${pathParams.versionId}`, 'GET', {
195
+ pathParams
196
+ });
197
+ },
198
+ async updateVersion (params) {
199
+ const pathParams = {
200
+ chatId: params.chatId,
201
+ versionId: params.versionId
202
+ };
203
+ const body = {
204
+ files: params.files
205
+ };
206
+ return fetcher(`/chats/${pathParams.chatId}/versions/${pathParams.versionId}`, 'PATCH', {
207
+ pathParams,
208
+ body
209
+ });
210
+ },
139
211
  async resume (params) {
140
212
  const pathParams = {
141
213
  chatId: params.chatId,
@@ -178,6 +250,20 @@ function createClient(config = {}) {
178
250
  pathParams
179
251
  });
180
252
  },
253
+ async update (params) {
254
+ const pathParams = {
255
+ projectId: params.projectId
256
+ };
257
+ const body = {
258
+ name: params.name,
259
+ description: params.description,
260
+ instructions: params.instructions
261
+ };
262
+ return fetcher(`/projects/${pathParams.projectId}`, 'PATCH', {
263
+ pathParams,
264
+ body
265
+ });
266
+ },
181
267
  async assign (params) {
182
268
  const pathParams = {
183
269
  projectId: params.projectId
package/dist/index.d.ts CHANGED
@@ -6,29 +6,38 @@ type ChatDetail = {
6
6
  name?: string;
7
7
  /** @deprecated */
8
8
  title?: string;
9
+ createdAt: string;
9
10
  updatedAt?: string;
10
11
  favorite: boolean;
11
12
  authorId: string;
12
13
  projectId?: string;
14
+ webUrl: string;
15
+ apiUrl: string;
13
16
  latestVersion?: {
14
17
  id: string;
15
18
  object: 'version';
16
19
  status: 'pending' | 'completed' | 'failed';
17
20
  demoUrl?: string;
21
+ createdAt: string;
22
+ updatedAt?: string;
18
23
  files: {
19
24
  object: 'file';
20
25
  name: string;
21
26
  content: string;
27
+ locked: boolean;
22
28
  }[];
23
29
  };
30
+ /** @deprecated */
24
31
  url: string;
25
32
  messages: Array<{
26
33
  id: string;
27
34
  object: 'message';
28
35
  content: string;
29
36
  createdAt: string;
37
+ updatedAt?: string;
30
38
  type: 'message' | 'forked-block' | 'forked-chat' | 'open-in-v0' | 'refinement' | 'added-environment-variables' | 'added-integration' | 'deleted-file' | 'moved-file' | 'renamed-file' | 'edited-file' | 'replace-src' | 'reverted-block' | 'fix-with-v0' | 'auto-fix-with-v0' | 'sync-git';
31
39
  role: 'user' | 'assistant';
40
+ apiUrl: string;
32
41
  }>;
33
42
  files?: {
34
43
  lang: string;
@@ -52,15 +61,20 @@ type ChatSummary = {
52
61
  name?: string;
53
62
  /** @deprecated */
54
63
  title?: string;
64
+ createdAt: string;
55
65
  updatedAt?: string;
56
66
  favorite: boolean;
57
67
  authorId: string;
58
68
  projectId?: string;
69
+ webUrl: string;
70
+ apiUrl: string;
59
71
  latestVersion?: {
60
72
  id: string;
61
73
  object: 'version';
62
74
  status: 'pending' | 'completed' | 'failed';
63
75
  demoUrl?: string;
76
+ createdAt: string;
77
+ updatedAt?: string;
64
78
  };
65
79
  };
66
80
  interface DeploymentDetail {
@@ -77,6 +91,7 @@ interface FileDetail {
77
91
  object: 'file';
78
92
  name: string;
79
93
  content: string;
94
+ locked: boolean;
80
95
  }
81
96
  type HookDetail = {
82
97
  id: string;
@@ -95,27 +110,23 @@ interface HookSummary {
95
110
  type MessageDetail = {
96
111
  id: string;
97
112
  object: 'message';
113
+ content: string;
114
+ createdAt: string;
115
+ updatedAt?: string;
116
+ type: 'message' | 'forked-block' | 'forked-chat' | 'open-in-v0' | 'refinement' | 'added-environment-variables' | 'added-integration' | 'deleted-file' | 'moved-file' | 'renamed-file' | 'edited-file' | 'replace-src' | 'reverted-block' | 'fix-with-v0' | 'auto-fix-with-v0' | 'sync-git';
117
+ role: 'user' | 'assistant';
118
+ apiUrl: string;
98
119
  chatId: string;
99
- url: string;
100
- files: {
101
- object: 'file';
102
- name: string;
103
- }[];
104
- demo?: string;
105
- text: string;
106
- modelConfiguration: {
107
- modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg';
108
- imageGenerations?: boolean;
109
- thinking?: boolean;
110
- };
111
120
  };
112
121
  type MessageSummary = {
113
122
  id: string;
114
123
  object: 'message';
115
124
  content: string;
116
125
  createdAt: string;
126
+ updatedAt?: string;
117
127
  type: 'message' | 'forked-block' | 'forked-chat' | 'open-in-v0' | 'refinement' | 'added-environment-variables' | 'added-integration' | 'deleted-file' | 'moved-file' | 'renamed-file' | 'edited-file' | 'replace-src' | 'reverted-block' | 'fix-with-v0' | 'auto-fix-with-v0' | 'sync-git';
118
128
  role: 'user' | 'assistant';
129
+ apiUrl: string;
119
130
  };
120
131
  type ProjectDetail = {
121
132
  id: string;
@@ -126,6 +137,8 @@ type ProjectDetail = {
126
137
  updatedAt?: string;
127
138
  apiUrl: string;
128
139
  webUrl: string;
140
+ description?: string;
141
+ instructions?: string;
129
142
  chats: Array<{
130
143
  id: string;
131
144
  object: 'chat';
@@ -134,15 +147,20 @@ type ProjectDetail = {
134
147
  name?: string;
135
148
  /** @deprecated */
136
149
  title?: string;
150
+ createdAt: string;
137
151
  updatedAt?: string;
138
152
  favorite: boolean;
139
153
  authorId: string;
140
154
  projectId?: string;
155
+ webUrl: string;
156
+ apiUrl: string;
141
157
  latestVersion?: {
142
158
  id: string;
143
159
  object: 'version';
144
160
  status: 'pending' | 'completed' | 'failed';
145
161
  demoUrl?: string;
162
+ createdAt: string;
163
+ updatedAt?: string;
146
164
  };
147
165
  }>;
148
166
  };
@@ -173,6 +191,28 @@ interface VercelProjectDetail {
173
191
  object: 'vercel_project';
174
192
  name: string;
175
193
  }
194
+ type VersionDetail = {
195
+ id: string;
196
+ object: 'version';
197
+ status: 'pending' | 'completed' | 'failed';
198
+ demoUrl?: string;
199
+ createdAt: string;
200
+ updatedAt?: string;
201
+ files: {
202
+ object: 'file';
203
+ name: string;
204
+ content: string;
205
+ locked: boolean;
206
+ }[];
207
+ };
208
+ type VersionSummary = {
209
+ id: string;
210
+ object: 'version';
211
+ status: 'pending' | 'completed' | 'failed';
212
+ demoUrl?: string;
213
+ createdAt: string;
214
+ updatedAt?: string;
215
+ };
176
216
  interface ChatsCreateRequest {
177
217
  message: string;
178
218
  attachments?: {
@@ -202,13 +242,16 @@ type ChatsInitRequest = {
202
242
  files: Array<{
203
243
  name: string;
204
244
  url: string;
245
+ locked?: boolean;
205
246
  content?: never;
206
247
  } | {
207
248
  name: string;
208
249
  content: string;
250
+ locked?: boolean;
209
251
  url?: never;
210
252
  }>;
211
253
  repo?: never;
254
+ lockAllFiles?: never;
212
255
  registry?: never;
213
256
  zip?: never;
214
257
  } | {
@@ -217,6 +260,7 @@ type ChatsInitRequest = {
217
260
  url: string;
218
261
  branch?: string;
219
262
  };
263
+ lockAllFiles?: boolean;
220
264
  files?: never;
221
265
  registry?: never;
222
266
  zip?: never;
@@ -225,6 +269,7 @@ type ChatsInitRequest = {
225
269
  registry: {
226
270
  url: string;
227
271
  };
272
+ lockAllFiles?: boolean;
228
273
  files?: never;
229
274
  repo?: never;
230
275
  zip?: never;
@@ -233,6 +278,7 @@ type ChatsInitRequest = {
233
278
  zip: {
234
279
  url: string;
235
280
  };
281
+ lockAllFiles?: boolean;
236
282
  files?: never;
237
283
  repo?: never;
238
284
  registry?: never;
@@ -245,17 +291,23 @@ type ChatsInitResponse = {
245
291
  name?: string;
246
292
  /** @deprecated */
247
293
  title?: string;
294
+ createdAt: string;
248
295
  updatedAt?: string;
249
296
  favorite: boolean;
250
297
  authorId: string;
251
298
  projectId?: string;
299
+ webUrl: string;
300
+ apiUrl: string;
252
301
  latestVersion?: {
253
302
  id: string;
254
303
  object: 'version';
255
304
  status: 'pending' | 'completed' | 'failed';
256
305
  demoUrl?: string;
306
+ createdAt: string;
307
+ updatedAt?: string;
257
308
  files: FileDetail[];
258
309
  };
310
+ /** @deprecated */
259
311
  url: string;
260
312
  messages: MessageSummary[];
261
313
  files?: {
@@ -280,17 +332,23 @@ type ChatsGetByIdResponse = {
280
332
  name?: string;
281
333
  /** @deprecated */
282
334
  title?: string;
335
+ createdAt: string;
283
336
  updatedAt?: string;
284
337
  favorite: boolean;
285
338
  authorId: string;
286
339
  projectId?: string;
340
+ webUrl: string;
341
+ apiUrl: string;
287
342
  latestVersion?: {
288
343
  id: string;
289
344
  object: 'version';
290
345
  status: 'pending' | 'completed' | 'failed';
291
346
  demoUrl?: string;
347
+ createdAt: string;
348
+ updatedAt?: string;
292
349
  files: FileDetail[];
293
350
  };
351
+ /** @deprecated */
294
352
  url: string;
295
353
  messages: MessageSummary[];
296
354
  files?: {
@@ -314,17 +372,23 @@ type ChatsUpdateResponse = {
314
372
  name?: string;
315
373
  /** @deprecated */
316
374
  title?: string;
375
+ createdAt: string;
317
376
  updatedAt?: string;
318
377
  favorite: boolean;
319
378
  authorId: string;
320
379
  projectId?: string;
380
+ webUrl: string;
381
+ apiUrl: string;
321
382
  latestVersion?: {
322
383
  id: string;
323
384
  object: 'version';
324
385
  status: 'pending' | 'completed' | 'failed';
325
386
  demoUrl?: string;
387
+ createdAt: string;
388
+ updatedAt?: string;
326
389
  files: FileDetail[];
327
390
  };
391
+ /** @deprecated */
328
392
  url: string;
329
393
  messages: MessageSummary[];
330
394
  files?: {
@@ -355,17 +419,23 @@ type ChatsForkResponse = {
355
419
  name?: string;
356
420
  /** @deprecated */
357
421
  title?: string;
422
+ createdAt: string;
358
423
  updatedAt?: string;
359
424
  favorite: boolean;
360
425
  authorId: string;
361
426
  projectId?: string;
427
+ webUrl: string;
428
+ apiUrl: string;
362
429
  latestVersion?: {
363
430
  id: string;
364
431
  object: 'version';
365
432
  status: 'pending' | 'completed' | 'failed';
366
433
  demoUrl?: string;
434
+ createdAt: string;
435
+ updatedAt?: string;
367
436
  files: FileDetail[];
368
437
  };
438
+ /** @deprecated */
369
439
  url: string;
370
440
  messages: MessageSummary[];
371
441
  files?: {
@@ -378,6 +448,15 @@ type ChatsForkResponse = {
378
448
  text: string;
379
449
  };
380
450
  type ProjectsGetByChatIdResponse = ProjectDetail;
451
+ interface ChatsFindMessagesResponse {
452
+ object: 'list';
453
+ data: MessageSummary[];
454
+ pagination: {
455
+ hasMore: boolean;
456
+ nextCursor?: string;
457
+ nextUrl?: string;
458
+ };
459
+ }
381
460
  interface ChatsSendMessageRequest {
382
461
  message: string;
383
462
  attachments?: {
@@ -398,17 +477,23 @@ type ChatsSendMessageResponse = {
398
477
  name?: string;
399
478
  /** @deprecated */
400
479
  title?: string;
480
+ createdAt: string;
401
481
  updatedAt?: string;
402
482
  favorite: boolean;
403
483
  authorId: string;
404
484
  projectId?: string;
485
+ webUrl: string;
486
+ apiUrl: string;
405
487
  latestVersion?: {
406
488
  id: string;
407
489
  object: 'version';
408
490
  status: 'pending' | 'completed' | 'failed';
409
491
  demoUrl?: string;
492
+ createdAt: string;
493
+ updatedAt?: string;
410
494
  files: FileDetail[];
411
495
  };
496
+ /** @deprecated */
412
497
  url: string;
413
498
  messages: MessageSummary[];
414
499
  files?: {
@@ -426,6 +511,25 @@ type ChatsSendMessageResponse = {
426
511
  };
427
512
  chatId: string;
428
513
  };
514
+ type ChatsGetMessageResponse = MessageDetail;
515
+ interface ChatsFindVersionsResponse {
516
+ object: 'list';
517
+ data: VersionSummary[];
518
+ pagination: {
519
+ hasMore: boolean;
520
+ nextCursor?: string;
521
+ nextUrl?: string;
522
+ };
523
+ }
524
+ type ChatsGetVersionResponse = VersionDetail;
525
+ interface ChatsUpdateVersionRequest {
526
+ files: {
527
+ name: string;
528
+ content: string;
529
+ locked?: boolean;
530
+ }[];
531
+ }
532
+ type ChatsUpdateVersionResponse = VersionDetail;
429
533
  type ChatsResumeResponse = MessageDetail;
430
534
  interface DeploymentsFindResponse {
431
535
  object: 'list';
@@ -503,6 +607,12 @@ interface ProjectsCreateRequest {
503
607
  }
504
608
  type ProjectsCreateResponse = ProjectDetail;
505
609
  type ProjectsGetByIdResponse = ProjectDetail;
610
+ interface ProjectsUpdateRequest {
611
+ name?: string;
612
+ description?: string;
613
+ instructions?: string;
614
+ }
615
+ type ProjectsUpdateResponse = ProjectDetail;
506
616
  interface ProjectsAssignRequest {
507
617
  chatId: string;
508
618
  }
@@ -593,9 +703,31 @@ declare function createClient(config?: V0ClientConfig): {
593
703
  fork(params: {
594
704
  chatId: string;
595
705
  } & ChatsForkRequest): Promise<ChatsForkResponse>;
706
+ findMessages(params: {
707
+ chatId: string;
708
+ limit?: string;
709
+ cursor?: string;
710
+ }): Promise<ChatsFindMessagesResponse>;
596
711
  sendMessage(params: {
597
712
  chatId: string;
598
713
  } & ChatsSendMessageRequest): Promise<ChatsSendMessageResponse>;
714
+ getMessage(params: {
715
+ chatId: string;
716
+ messageId: string;
717
+ }): Promise<ChatsGetMessageResponse>;
718
+ findVersions(params: {
719
+ chatId: string;
720
+ limit?: string;
721
+ cursor?: string;
722
+ }): Promise<ChatsFindVersionsResponse>;
723
+ getVersion(params: {
724
+ chatId: string;
725
+ versionId: string;
726
+ }): Promise<ChatsGetVersionResponse>;
727
+ updateVersion(params: {
728
+ chatId: string;
729
+ versionId: string;
730
+ } & ChatsUpdateVersionRequest): Promise<ChatsUpdateVersionResponse>;
599
731
  resume(params: {
600
732
  chatId: string;
601
733
  messageId: string;
@@ -610,6 +742,9 @@ declare function createClient(config?: V0ClientConfig): {
610
742
  getById(params: {
611
743
  projectId: string;
612
744
  }): Promise<ProjectsGetByIdResponse>;
745
+ update(params: {
746
+ projectId: string;
747
+ } & ProjectsUpdateRequest): Promise<ProjectsUpdateResponse>;
613
748
  assign(params: {
614
749
  projectId: string;
615
750
  } & ProjectsAssignRequest): Promise<ProjectsAssignResponse>;
@@ -694,9 +829,31 @@ declare const v0: {
694
829
  fork(params: {
695
830
  chatId: string;
696
831
  } & ChatsForkRequest): Promise<ChatsForkResponse>;
832
+ findMessages(params: {
833
+ chatId: string;
834
+ limit?: string;
835
+ cursor?: string;
836
+ }): Promise<ChatsFindMessagesResponse>;
697
837
  sendMessage(params: {
698
838
  chatId: string;
699
839
  } & ChatsSendMessageRequest): Promise<ChatsSendMessageResponse>;
840
+ getMessage(params: {
841
+ chatId: string;
842
+ messageId: string;
843
+ }): Promise<ChatsGetMessageResponse>;
844
+ findVersions(params: {
845
+ chatId: string;
846
+ limit?: string;
847
+ cursor?: string;
848
+ }): Promise<ChatsFindVersionsResponse>;
849
+ getVersion(params: {
850
+ chatId: string;
851
+ versionId: string;
852
+ }): Promise<ChatsGetVersionResponse>;
853
+ updateVersion(params: {
854
+ chatId: string;
855
+ versionId: string;
856
+ } & ChatsUpdateVersionRequest): Promise<ChatsUpdateVersionResponse>;
700
857
  resume(params: {
701
858
  chatId: string;
702
859
  messageId: string;
@@ -711,6 +868,9 @@ declare const v0: {
711
868
  getById(params: {
712
869
  projectId: string;
713
870
  }): Promise<ProjectsGetByIdResponse>;
871
+ update(params: {
872
+ projectId: string;
873
+ } & ProjectsUpdateRequest): Promise<ProjectsUpdateResponse>;
714
874
  assign(params: {
715
875
  projectId: string;
716
876
  } & ProjectsAssignRequest): Promise<ProjectsAssignResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../src/sdk/v0.ts"],"sourcesContent":["import { createFetcher } from './core'\n\nexport type AssistantMessageContentRichPart =\n | {\n createdAt: number\n finishedAt: number | null\n lastPartSentAt: number | null\n taskNameActive?: string | null\n taskNameComplete?: string | null\n error?:\n | {\n type: 'INPUT_SCHEMA_ERROR'\n flattenedError: Record<string, any>\n message?: never\n code?: never\n }\n | {\n type: 'HANDLED_EXECUTION_ERROR'\n message: string\n code: 'GENERIC_ERROR'\n flattenedError?: never\n }\n | {\n type: 'UNHANDLED_EXECUTION_ERROR'\n flattenedError?: never\n message?: never\n code?: never\n }\n id: string\n llmContent?:\n | Array<\n | {\n type: 'text'\n text: string\n url?: never\n }\n | {\n type: 'image'\n url: string\n text?: never\n }\n >\n | any\n type: 'task-thinking-v1'\n parts: Array<\n | {\n type: 'thinking-end'\n duration: number\n thought: string\n }\n | {\n type: 'parse-error'\n duration?: never\n thought?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-start-v1'\n parts: Array<\n | {\n type: 'launch-tasks'\n }\n | {\n type: 'parse-error'\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-stopped-v1'\n parts: Array<\n | {\n type: 'manually-stopped-on-client'\n invocations?: never\n }\n | {\n type: 'orchestrator-invocations-exhausted'\n invocations: number\n }\n | {\n type: 'subagent-invocations-exhausted'\n invocations: number\n }\n | {\n type: 'agent-timeout'\n invocations?: never\n }\n | {\n type: 'orchestrator-error'\n invocations?: never\n }\n | {\n type: 'parse-error'\n invocations?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-diagnostics-v1'\n parts: Array<\n | {\n type: 'diagnostic-invocations-exhausted'\n summaries?: never\n }\n | {\n type: 'fetching-diagnostics'\n summaries?: never\n }\n | {\n type: 'diagnostics-passed'\n summaries?: never\n }\n | {\n type: 'diagnostics-found-issues'\n summaries: string[]\n }\n | {\n type: 'parse-error'\n summaries?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-coding-v1'\n parts: Array<\n | {\n type: 'code-project'\n isVersioned: boolean\n changedFiles: {\n fileName: string\n baseName: string\n isActive: boolean\n isTerminated: boolean\n isDeleted: boolean\n isMoved: boolean\n }[]\n latestDeploymentInfo?: any\n lastDeployedAt?: string\n lastEditedAt?: string\n needsBlockSource: boolean\n blockId: string\n meta: Record<string, any>\n closed: boolean\n lang: string\n source: string\n }\n | {\n type: 'parse-error'\n isVersioned?: never\n changedFiles?: never\n latestDeploymentInfo?: never\n lastDeployedAt?: never\n lastEditedAt?: never\n needsBlockSource?: never\n blockId?: never\n meta?: never\n closed?: never\n lang?: never\n source?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-fetch-from-web-v1'\n parts: Array<\n | {\n type: 'starting-fetch-from-web'\n url: string\n favicon?: never\n image?: never\n title?: never\n publishedDate?: never\n }\n | {\n type: 'finished-fetch-from-web'\n url: string\n favicon: string | null\n image: string | null\n title: string | null\n publishedDate: string | null\n }\n | {\n type: 'parse-error'\n url?: never\n favicon?: never\n image?: never\n title?: never\n publishedDate?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-inspect-site-v1'\n parts: Array<\n | {\n type: 'starting-inspect-site'\n url: string\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n screenshotResults?: never\n }\n | {\n type: 'screenshot'\n screenshotUrl?: string | null\n url: string\n path?: string | null\n pageTitle?: string | null\n logoUrl?: string | null\n screenshotResults?: never\n }\n | {\n type: 'inspect-site-complete'\n screenshotResults: Array<{\n type: 'screenshot'\n screenshotUrl?: string | null\n title?: string | null\n }>\n url?: never\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n }\n | {\n type: 'parse-error'\n url?: never\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n screenshotResults?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-search-web-v1'\n parts: Array<\n | {\n type: 'starting-web-search'\n query: string\n count?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'got-results'\n count: number\n query?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'failed-web-search'\n query?: never\n count?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'finished-web-search'\n answer: string\n citations: Array<{\n url: string\n favicon: string | null\n image: string | null\n title: string | null\n publishedDate: string | null\n }>\n query?: never\n count?: never\n }\n | {\n type: 'parse-error'\n query?: never\n count?: never\n answer?: never\n citations?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-manage-todos-v1'\n parts: Array<\n | {\n type: 'starting-todo-manager'\n updatedList?: never\n plan?: never\n }\n | {\n type: 'updated-todo-list'\n updatedList: Array<{\n status: 'todo' | 'in-progress' | 'done'\n task: string\n }>\n plan?: never\n }\n | {\n type: 'read-todo-list'\n updatedList?: never\n plan?: never\n }\n | {\n type: 'generated-technical-plan'\n plan: string\n updatedList?: never\n }\n | {\n type: 'parse-error'\n updatedList?: never\n plan?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-search-repo-v1'\n parts: Array<\n | {\n type: 'starting-repo-search'\n query: string\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'ls'\n path?: string\n query?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'ls-results'\n numFiles: number\n query?: never\n path?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'grepping-repo'\n pattern: string\n path?: string\n globPattern?: string\n query?: never\n numFiles?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'grep-results'\n numMatches: number\n pattern: string\n query?: never\n path?: never\n numFiles?: never\n globPattern?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'select-files'\n filePaths: string[]\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'reading-file'\n filePath: string\n offset?: number | null\n limit?: number | null\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n result?: never\n }\n | {\n type: 'repo-search-result'\n query: string\n result: string\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n }\n | {\n type: 'parse-error'\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-run-shell-command-v1'\n parts: Array<\n | {\n type: 'starting-shell-command'\n command: string\n directory?: string | null\n description?: string | null\n output?: never\n exitCode?: never\n backgroundPids?: never\n }\n | {\n type: 'finished-shell-command'\n output: string\n exitCode: number\n backgroundPids: number[]\n directory?: string | null\n command: string\n description?: never\n }\n | {\n type: 'parse-error'\n command?: never\n directory?: never\n description?: never\n output?: never\n exitCode?: never\n backgroundPids?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-read-files-v1'\n parts: Array<\n | {\n type: 'starting-read-files'\n filePaths: string[]\n fileContents?: never\n }\n | {\n type: 'finished-read-files'\n fileContents: Record<string, any>\n filePaths?: never\n }\n | {\n type: 'parse-error'\n filePaths?: never\n fileContents?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-generate-design-inspiration-v1'\n parts: Array<\n | {\n type: 'starting-design-inspiration'\n prompt: string\n images?: never\n }\n | {\n type: 'finished-design-inspiration'\n images: Array<{\n url: string\n description: string | null\n uploadedAt: string | null\n score?: number\n }>\n prompt?: never\n }\n | {\n type: 'parse-error'\n prompt?: never\n images?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-request-install-integration-v1'\n parts: Array<\n | {\n type: 'request-install-integration'\n steps: Array<{\n type: 'add-integration' | 'add-env-var'\n stepName: string\n }>\n }\n | {\n type: 'parse-error'\n steps?: never\n }\n >\n }\n\nexport type ChatDetail = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: {\n object: 'file'\n name: string\n content: string\n }[]\n }\n url: string\n messages: Array<{\n id: string\n object: 'message'\n content: string\n createdAt: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n }>\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n}\n\nexport type ChatSummary = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n }\n}\n\nexport interface DeploymentDetail {\n id: string\n object: 'deployment'\n inspectorUrl: string\n chatId: string\n projectId: string\n versionId: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface DeploymentSummary {\n id: string\n object: 'deployment'\n inspectorUrl: string\n chatId: string\n projectId: string\n versionId: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface FileDetail {\n object: 'file'\n name: string\n content: string\n}\n\nexport interface FileSummary {\n object: 'file'\n name: string\n}\n\nexport type HookDetail = {\n id: string\n object: 'hook'\n name: string\n events: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n chatId?: string\n projectId?: string\n url: string\n}\n\nexport type HookEventDetail = {\n id: string\n object: 'hookEvent'\n event:\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n status?: 'pending' | 'success' | 'error'\n createdAt: string\n}\n\nexport interface HookSummary {\n id: string\n object: 'hook'\n name: string\n}\n\nexport type MessageDetail = {\n id: string\n object: 'message'\n chatId: string\n url: string\n files: {\n object: 'file'\n name: string\n }[]\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n}\n\nexport type MessageSummary = {\n id: string\n object: 'message'\n content: string\n createdAt: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n}\n\nexport type ProjectDetail = {\n id: string\n object: 'project'\n name: string\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n chats: Array<{\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n }\n }>\n}\n\nexport interface ProjectSummary {\n id: string\n object: 'project'\n name: string\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface ScopeSummary {\n id: string\n object: 'scope'\n name?: string\n}\n\nexport type SearchResultItem = {\n id: string\n object: 'chat' | 'project'\n name: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface UserDetail {\n id: string\n object: 'user'\n name?: string\n email: string\n avatar: string\n}\n\nexport interface VercelProjectDetail {\n id: string\n object: 'vercel_project'\n name: string\n}\n\nexport interface VercelProjectSummary {\n id: string\n object: 'vercel_project'\n name: string\n}\n\nexport type VersionDetail = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: {\n object: 'file'\n name: string\n content: string\n }[]\n}\n\nexport type VersionSummary = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n}\n\nexport interface ChatsCreateRequest {\n message: string\n attachments?: {\n url: string\n }[]\n system?: string\n chatPrivacy?: 'public' | 'private' | 'team-edit' | 'team' | 'unlisted'\n projectId?: string\n modelConfiguration?: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsCreateResponse = ChatDetail\n\nexport interface ChatsFindResponse {\n object: 'list'\n data: ChatSummary[]\n}\n\nexport type ChatsInitRequest = {\n name?: string\n chatPrivacy?: 'public' | 'private' | 'team-edit' | 'team' | 'unlisted'\n projectId?: string\n} & (\n | {\n type: 'files'\n files: Array<\n | {\n name: string\n url: string\n content?: never\n }\n | {\n name: string\n content: string\n url?: never\n }\n >\n repo?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'repo'\n repo: {\n url: string\n branch?: string\n }\n files?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'registry'\n registry: {\n url: string\n }\n files?: never\n repo?: never\n zip?: never\n }\n | {\n type: 'zip'\n zip: {\n url: string\n }\n files?: never\n repo?: never\n registry?: never\n }\n)\n\nexport type ChatsInitResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsDeleteResponse {\n id: string\n object: 'chat'\n deleted: true\n}\n\nexport type ChatsGetByIdResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsUpdateRequest {\n name?: string\n privacy?: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n}\n\nexport type ChatsUpdateResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsFavoriteRequest {\n isFavorite: boolean\n}\n\nexport interface ChatsFavoriteResponse {\n id: string\n object: 'chat'\n favorited: boolean\n}\n\nexport interface ChatsForkRequest {\n versionId?: string\n}\n\nexport type ChatsForkResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport type ProjectsGetByChatIdResponse = ProjectDetail\n\nexport interface ChatsSendMessageRequest {\n message: string\n attachments?: {\n url: string\n }[]\n modelConfiguration?: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsSendMessageResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n files: FileDetail[]\n }\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n chatId: string\n}\n\nexport type ChatsResumeResponse = MessageDetail\n\nexport interface DeploymentsFindResponse {\n object: 'list'\n data: DeploymentDetail[]\n}\n\nexport interface DeploymentsCreateRequest {\n projectId: string\n chatId: string\n versionId: string\n}\n\nexport type DeploymentsCreateResponse = DeploymentDetail\n\nexport type DeploymentsGetByIdResponse = DeploymentDetail\n\nexport interface DeploymentsDeleteResponse {\n id: string\n object: 'deployment'\n deleted: true\n}\n\nexport interface DeploymentsFindLogsResponse {\n error?: string\n logs: string[]\n nextSince?: number\n}\n\nexport interface DeploymentsFindErrorsResponse {\n error?: string\n fullErrorText?: string\n errorType?: string\n formattedError?: string\n}\n\nexport interface HooksFindResponse {\n object: 'list'\n data: HookSummary[]\n}\n\nexport interface HooksCreateRequest {\n name: string\n events: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n chatId?: string\n projectId?: string\n url: string\n}\n\nexport type HooksCreateResponse = HookDetail\n\nexport type HooksGetByIdResponse = HookDetail\n\nexport interface HooksUpdateRequest {\n name?: string\n events?: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n url?: string\n}\n\nexport type HooksUpdateResponse = HookDetail\n\nexport interface HooksDeleteResponse {\n id: string\n object: 'hook'\n deleted: true\n}\n\nexport interface IntegrationsVercelProjectsFindResponse {\n object: 'list'\n data: VercelProjectDetail[]\n}\n\nexport interface IntegrationsVercelProjectsCreateRequest {\n projectId: string\n name: string\n}\n\nexport type IntegrationsVercelProjectsCreateResponse = VercelProjectDetail\n\nexport interface ProjectsFindResponse {\n object: 'list'\n data: ProjectSummary[]\n}\n\nexport interface ProjectsCreateRequest {\n name: string\n description?: string\n icon?: string\n environmentVariables?: {\n key: string\n value: string\n }[]\n instructions?: string\n}\n\nexport type ProjectsCreateResponse = ProjectDetail\n\nexport type ProjectsGetByIdResponse = ProjectDetail\n\nexport interface ProjectsAssignRequest {\n chatId: string\n}\n\nexport interface ProjectsAssignResponse {\n object: 'project'\n id: string\n assigned: true\n}\n\nexport interface RateLimitsFindResponse {\n remaining?: number\n reset?: number\n limit: number\n}\n\nexport type UserGetResponse = UserDetail\n\nexport type UserGetBillingResponse =\n | {\n billingType: 'token'\n data: {\n plan: string\n billingMode?: 'test'\n role: string\n billingCycle: {\n start: number\n end: number\n }\n balance: {\n remaining: number\n total: number\n }\n onDemand: {\n balance: number\n blocks?: {\n expirationDate?: number\n effectiveDate: number\n originalBalance: number\n currentBalance: number\n }[]\n }\n }\n }\n | {\n billingType: 'legacy'\n data: {\n remaining?: number\n reset?: number\n limit: number\n }\n }\n\nexport interface UserGetPlanResponse {\n object: 'plan'\n plan: string\n billingCycle: {\n start: number\n end: number\n }\n balance: {\n remaining: number\n total: number\n }\n}\n\nexport interface UserGetScopesResponse {\n object: 'list'\n data: ScopeSummary[]\n}\n\nexport interface V0ClientConfig {\n apiKey?: string\n baseUrl?: string\n}\n\nexport function createClient(config: V0ClientConfig = {}) {\n const fetcher = createFetcher(config)\n\n return {\n chats: {\n async create(params: ChatsCreateRequest): Promise<ChatsCreateResponse> {\n const body = {\n message: params.message,\n attachments: params.attachments,\n system: params.system,\n chatPrivacy: params.chatPrivacy,\n projectId: params.projectId,\n modelConfiguration: params.modelConfiguration,\n responseMode: params.responseMode,\n }\n return fetcher(`/chats`, 'POST', { body })\n },\n\n async find(params?: {\n limit?: string\n offset?: string\n isFavorite?: string\n }): Promise<ChatsFindResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n limit: params.limit,\n offset: params.offset,\n isFavorite: params.isFavorite,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats`, 'GET', { ...(hasQuery ? { query } : {}) })\n },\n\n async init(params: ChatsInitRequest): Promise<ChatsInitResponse> {\n const body = params\n return fetcher(`/chats/init`, 'POST', { body })\n },\n\n async delete(params: { chatId: string }): Promise<ChatsDeleteResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}`, 'DELETE', { pathParams })\n },\n\n async getById(params: { chatId: string }): Promise<ChatsGetByIdResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}`, 'GET', { pathParams })\n },\n\n async update(\n params: { chatId: string } & ChatsUpdateRequest,\n ): Promise<ChatsUpdateResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { name: params.name, privacy: params.privacy }\n return fetcher(`/chats/${pathParams.chatId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async favorite(\n params: { chatId: string } & ChatsFavoriteRequest,\n ): Promise<ChatsFavoriteResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { isFavorite: params.isFavorite }\n return fetcher(`/chats/${pathParams.chatId}/favorite`, 'PUT', {\n pathParams,\n body,\n })\n },\n\n async fork(\n params: { chatId: string } & ChatsForkRequest,\n ): Promise<ChatsForkResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { versionId: params.versionId }\n return fetcher(`/chats/${pathParams.chatId}/fork`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async sendMessage(\n params: { chatId: string } & ChatsSendMessageRequest,\n ): Promise<ChatsSendMessageResponse> {\n const pathParams = { chatId: params.chatId }\n const body = {\n message: params.message,\n attachments: params.attachments,\n modelConfiguration: params.modelConfiguration,\n responseMode: params.responseMode,\n }\n return fetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async resume(params: {\n chatId: string\n messageId: string\n }): Promise<ChatsResumeResponse> {\n const pathParams = {\n chatId: params.chatId,\n messageId: params.messageId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/messages/${pathParams.messageId}/resume`,\n 'POST',\n { pathParams },\n )\n },\n },\n\n projects: {\n async getByChatId(params: {\n chatId: string\n }): Promise<ProjectsGetByChatIdResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}/project`, 'GET', {\n pathParams,\n })\n },\n\n async find(): Promise<ProjectsFindResponse> {\n return fetcher(`/projects`, 'GET', {})\n },\n\n async create(\n params: ProjectsCreateRequest,\n ): Promise<ProjectsCreateResponse> {\n const body = {\n name: params.name,\n description: params.description,\n icon: params.icon,\n environmentVariables: params.environmentVariables,\n instructions: params.instructions,\n }\n return fetcher(`/projects`, 'POST', { body })\n },\n\n async getById(params: {\n projectId: string\n }): Promise<ProjectsGetByIdResponse> {\n const pathParams = { projectId: params.projectId }\n return fetcher(`/projects/${pathParams.projectId}`, 'GET', {\n pathParams,\n })\n },\n\n async assign(\n params: { projectId: string } & ProjectsAssignRequest,\n ): Promise<ProjectsAssignResponse> {\n const pathParams = { projectId: params.projectId }\n const body = { chatId: params.chatId }\n return fetcher(`/projects/${pathParams.projectId}/assign`, 'POST', {\n pathParams,\n body,\n })\n },\n },\n\n deployments: {\n async find(params: {\n projectId: string\n chatId: string\n versionId: string\n }): Promise<DeploymentsFindResponse> {\n const query = Object.fromEntries(\n Object.entries({\n projectId: params.projectId,\n chatId: params.chatId,\n versionId: params.versionId,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n return fetcher(`/deployments`, 'GET', { query })\n },\n\n async create(\n params: DeploymentsCreateRequest,\n ): Promise<DeploymentsCreateResponse> {\n const body = {\n projectId: params.projectId,\n chatId: params.chatId,\n versionId: params.versionId,\n }\n return fetcher(`/deployments`, 'POST', { body })\n },\n\n async getById(params: {\n deploymentId: string\n }): Promise<DeploymentsGetByIdResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(`/deployments/${pathParams.deploymentId}`, 'GET', {\n pathParams,\n })\n },\n\n async delete(params: {\n deploymentId: string\n }): Promise<DeploymentsDeleteResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(`/deployments/${pathParams.deploymentId}`, 'DELETE', {\n pathParams,\n })\n },\n\n async findLogs(params: {\n deploymentId: string\n since?: string\n }): Promise<DeploymentsFindLogsResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n const query = Object.fromEntries(\n Object.entries({\n since: params.since,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/deployments/${pathParams.deploymentId}/logs`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async findErrors(params: {\n deploymentId: string\n }): Promise<DeploymentsFindErrorsResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(\n `/deployments/${pathParams.deploymentId}/errors`,\n 'GET',\n { pathParams },\n )\n },\n },\n\n hooks: {\n async find(): Promise<HooksFindResponse> {\n return fetcher(`/hooks`, 'GET', {})\n },\n\n async create(params: HooksCreateRequest): Promise<HooksCreateResponse> {\n const body = {\n name: params.name,\n events: params.events,\n chatId: params.chatId,\n projectId: params.projectId,\n url: params.url,\n }\n return fetcher(`/hooks`, 'POST', { body })\n },\n\n async getById(params: { hookId: string }): Promise<HooksGetByIdResponse> {\n const pathParams = { hookId: params.hookId }\n return fetcher(`/hooks/${pathParams.hookId}`, 'GET', { pathParams })\n },\n\n async update(\n params: { hookId: string } & HooksUpdateRequest,\n ): Promise<HooksUpdateResponse> {\n const pathParams = { hookId: params.hookId }\n const body = {\n name: params.name,\n events: params.events,\n url: params.url,\n }\n return fetcher(`/hooks/${pathParams.hookId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async delete(params: { hookId: string }): Promise<HooksDeleteResponse> {\n const pathParams = { hookId: params.hookId }\n return fetcher(`/hooks/${pathParams.hookId}`, 'DELETE', { pathParams })\n },\n },\n\n integrations: {\n vercel: {\n projects: {\n async find(): Promise<IntegrationsVercelProjectsFindResponse> {\n return fetcher(`/integrations/vercel/projects`, 'GET', {})\n },\n\n async create(\n params: IntegrationsVercelProjectsCreateRequest,\n ): Promise<IntegrationsVercelProjectsCreateResponse> {\n const body = { projectId: params.projectId, name: params.name }\n return fetcher(`/integrations/vercel/projects`, 'POST', { body })\n },\n },\n },\n },\n\n rateLimits: {\n async find(params?: { scope?: string }): Promise<RateLimitsFindResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n scope: params.scope,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/rate-limits`, 'GET', {\n ...(hasQuery ? { query } : {}),\n })\n },\n },\n\n user: {\n async get(): Promise<UserGetResponse> {\n return fetcher(`/user`, 'GET', {})\n },\n\n async getBilling(params?: {\n scope?: string\n }): Promise<UserGetBillingResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n scope: params.scope,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/user/billing`, 'GET', {\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async getPlan(): Promise<UserGetPlanResponse> {\n return fetcher(`/user/plan`, 'GET', {})\n },\n\n async getScopes(): Promise<UserGetScopesResponse> {\n return fetcher(`/user/scopes`, 'GET', {})\n },\n },\n }\n}\n\n// Default client for backward compatibility\nexport const v0 = createClient()\n"],"names":[],"mappings":"AAuiBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWO;AACP;AACA;AACA;AACA;AAKO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AAUO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AAuBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../src/sdk/v0.ts"],"sourcesContent":["import { createFetcher } from './core'\n\nexport type AssistantMessageContentRichPart =\n | {\n createdAt: number\n finishedAt: number | null\n lastPartSentAt: number | null\n taskNameActive?: string | null\n taskNameComplete?: string | null\n error?:\n | {\n type: 'INPUT_SCHEMA_ERROR'\n flattenedError: Record<string, any>\n message?: never\n code?: never\n }\n | {\n type: 'HANDLED_EXECUTION_ERROR'\n message: string\n code: 'GENERIC_ERROR'\n flattenedError?: never\n }\n | {\n type: 'UNHANDLED_EXECUTION_ERROR'\n flattenedError?: never\n message?: never\n code?: never\n }\n id: string\n llmContent?:\n | Array<\n | {\n type: 'text'\n text: string\n url?: never\n }\n | {\n type: 'image'\n url: string\n text?: never\n }\n >\n | any\n type: 'task-thinking-v1'\n parts: Array<\n | {\n type: 'thinking-end'\n duration: number\n thought: string\n }\n | {\n type: 'parse-error'\n duration?: never\n thought?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-start-v1'\n parts: Array<\n | {\n type: 'launch-tasks'\n }\n | {\n type: 'parse-error'\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-stopped-v1'\n parts: Array<\n | {\n type: 'manually-stopped-on-client'\n invocations?: never\n }\n | {\n type: 'orchestrator-invocations-exhausted'\n invocations: number\n }\n | {\n type: 'subagent-invocations-exhausted'\n invocations: number\n }\n | {\n type: 'agent-timeout'\n invocations?: never\n }\n | {\n type: 'orchestrator-error'\n invocations?: never\n }\n | {\n type: 'parse-error'\n invocations?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-diagnostics-v1'\n parts: Array<\n | {\n type: 'diagnostic-invocations-exhausted'\n summaries?: never\n }\n | {\n type: 'fetching-diagnostics'\n summaries?: never\n }\n | {\n type: 'diagnostics-passed'\n summaries?: never\n }\n | {\n type: 'diagnostics-found-issues'\n summaries: string[]\n }\n | {\n type: 'parse-error'\n summaries?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-coding-v1'\n parts: Array<\n | {\n type: 'code-project'\n isVersioned: boolean\n changedFiles: {\n fileName: string\n baseName: string\n isActive: boolean\n isTerminated: boolean\n isDeleted: boolean\n isMoved: boolean\n }[]\n latestDeploymentInfo?: any\n lastDeployedAt?: string\n lastEditedAt?: string\n needsBlockSource: boolean\n blockId: string\n meta: Record<string, any>\n closed: boolean\n lang: string\n source: string\n }\n | {\n type: 'parse-error'\n isVersioned?: never\n changedFiles?: never\n latestDeploymentInfo?: never\n lastDeployedAt?: never\n lastEditedAt?: never\n needsBlockSource?: never\n blockId?: never\n meta?: never\n closed?: never\n lang?: never\n source?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-fetch-from-web-v1'\n parts: Array<\n | {\n type: 'starting-fetch-from-web'\n url: string\n favicon?: never\n image?: never\n title?: never\n publishedDate?: never\n }\n | {\n type: 'finished-fetch-from-web'\n url: string\n favicon: string | null\n image: string | null\n title: string | null\n publishedDate: string | null\n }\n | {\n type: 'parse-error'\n url?: never\n favicon?: never\n image?: never\n title?: never\n publishedDate?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-inspect-site-v1'\n parts: Array<\n | {\n type: 'starting-inspect-site'\n url: string\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n screenshotResults?: never\n }\n | {\n type: 'screenshot'\n screenshotUrl?: string | null\n url: string\n path?: string | null\n pageTitle?: string | null\n logoUrl?: string | null\n screenshotResults?: never\n }\n | {\n type: 'inspect-site-complete'\n screenshotResults: Array<{\n type: 'screenshot'\n screenshotUrl?: string | null\n title?: string | null\n }>\n url?: never\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n }\n | {\n type: 'parse-error'\n url?: never\n screenshotUrl?: never\n path?: never\n pageTitle?: never\n logoUrl?: never\n screenshotResults?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-search-web-v1'\n parts: Array<\n | {\n type: 'starting-web-search'\n query: string\n count?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'got-results'\n count: number\n query?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'failed-web-search'\n query?: never\n count?: never\n answer?: never\n citations?: never\n }\n | {\n type: 'finished-web-search'\n answer: string\n citations: Array<{\n url: string\n favicon: string | null\n image: string | null\n title: string | null\n publishedDate: string | null\n }>\n query?: never\n count?: never\n }\n | {\n type: 'parse-error'\n query?: never\n count?: never\n answer?: never\n citations?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-manage-todos-v1'\n parts: Array<\n | {\n type: 'starting-todo-manager'\n updatedList?: never\n plan?: never\n }\n | {\n type: 'updated-todo-list'\n updatedList: Array<{\n status: 'todo' | 'in-progress' | 'done'\n task: string\n }>\n plan?: never\n }\n | {\n type: 'read-todo-list'\n updatedList?: never\n plan?: never\n }\n | {\n type: 'generated-technical-plan'\n plan: string\n updatedList?: never\n }\n | {\n type: 'parse-error'\n updatedList?: never\n plan?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-read-file-v1'\n parts: Array<\n | {\n type: 'starting-search-in-file'\n query: string\n pattern?: never\n chunks?: never\n numMatches?: never\n filePath?: never\n offset?: never\n limit?: never\n }\n | {\n type: 'grepping-file'\n pattern: string\n query?: never\n chunks?: never\n numMatches?: never\n filePath?: never\n offset?: never\n limit?: never\n }\n | {\n type: 'selected-chunks'\n chunks: {\n filePath: string\n offset: number\n limit: number\n }[]\n query?: never\n pattern?: never\n numMatches?: never\n filePath?: never\n offset?: never\n limit?: never\n }\n | {\n type: 'grep-results'\n numMatches: number\n pattern: string\n query?: never\n chunks?: never\n filePath?: never\n offset?: never\n limit?: never\n }\n | {\n type: 'reading-file'\n filePath: string\n offset?: number | null\n limit?: number | null\n query?: never\n pattern?: never\n chunks?: never\n numMatches?: never\n }\n | {\n type: 'parse-error'\n query?: never\n pattern?: never\n chunks?: never\n numMatches?: never\n filePath?: never\n offset?: never\n limit?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-search-repo-v1'\n parts: Array<\n | {\n type: 'starting-repo-search'\n query: string\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n numFileMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'ls'\n path?: string\n query?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n numFileMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'ls-results'\n numFiles: number\n query?: never\n path?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n numFileMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'grepping-repo'\n pattern: string\n path?: string\n globPattern?: string\n query?: never\n numFiles?: never\n numMatches?: never\n numFileMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'grep-results'\n numMatches: number\n pattern: string\n query?: never\n path?: never\n numFiles?: never\n globPattern?: never\n numFileMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'grep-file-results'\n numFileMatches: number\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'select-files'\n filePaths: string[]\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n numFileMatches?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n | {\n type: 'reading-file'\n filePath: string\n offset?: number | null\n limit?: number | null\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n numFileMatches?: never\n filePaths?: never\n result?: never\n }\n | {\n type: 'repo-search-result'\n query: string\n result: string\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n numFileMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n }\n | {\n type: 'parse-error'\n query?: never\n path?: never\n numFiles?: never\n pattern?: never\n globPattern?: never\n numMatches?: never\n numFileMatches?: never\n filePaths?: never\n filePath?: never\n offset?: never\n limit?: never\n result?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-run-shell-command-v1'\n parts: Array<\n | {\n type: 'starting-shell-command'\n command: string\n directory?: string | null\n description?: string | null\n output?: never\n exitCode?: never\n backgroundPids?: never\n }\n | {\n type: 'finished-shell-command'\n output: string\n exitCode: number\n backgroundPids: number[]\n directory?: string | null\n command: string\n description?: never\n }\n | {\n type: 'parse-error'\n command?: never\n directory?: never\n description?: never\n output?: never\n exitCode?: never\n backgroundPids?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-read-files-v1'\n parts: Array<\n | {\n type: 'starting-read-files'\n filePaths: string[]\n fileContents?: never\n }\n | {\n type: 'finished-read-files'\n fileContents: Record<string, any>\n filePaths?: never\n }\n | {\n type: 'parse-error'\n filePaths?: never\n fileContents?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-generate-design-inspiration-v1'\n parts: Array<\n | {\n type: 'starting-design-inspiration'\n prompt: string\n images?: never\n }\n | {\n type: 'finished-design-inspiration'\n images: Array<{\n url: string\n description: string | null\n uploadedAt: string | null\n score?: number\n }>\n prompt?: never\n }\n | {\n type: 'parse-error'\n prompt?: never\n images?: never\n }\n >\n }\n | {\n createdAt: createdAt\n finishedAt: finishedAt\n lastPartSentAt: lastPartSentAt\n taskNameActive?: taskNameActive\n taskNameComplete?: taskNameComplete\n error?: error\n id: id\n llmContent?: llmContent\n type: 'task-request-install-integration-v1'\n parts: Array<\n | {\n type: 'request-install-integration'\n steps: Array<{\n type: 'add-integration' | 'add-env-var'\n stepName: string\n }>\n }\n | {\n type: 'parse-error'\n steps?: never\n }\n >\n }\n\nexport type ChatDetail = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: {\n object: 'file'\n name: string\n content: string\n locked: boolean\n }[]\n }\n /** @deprecated */\n url: string\n messages: Array<{\n id: string\n object: 'message'\n content: string\n createdAt: string\n updatedAt?: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n apiUrl: string\n }>\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n}\n\nexport type ChatSummary = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n }\n}\n\nexport interface DeploymentDetail {\n id: string\n object: 'deployment'\n inspectorUrl: string\n chatId: string\n projectId: string\n versionId: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface DeploymentSummary {\n id: string\n object: 'deployment'\n inspectorUrl: string\n chatId: string\n projectId: string\n versionId: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface FileDetail {\n object: 'file'\n name: string\n content: string\n locked: boolean\n}\n\nexport interface FileSummary {\n object: 'file'\n name: string\n}\n\nexport type HookDetail = {\n id: string\n object: 'hook'\n name: string\n events: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n chatId?: string\n projectId?: string\n url: string\n}\n\nexport type HookEventDetail = {\n id: string\n object: 'hookEvent'\n event:\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n status?: 'pending' | 'success' | 'error'\n createdAt: string\n}\n\nexport interface HookSummary {\n id: string\n object: 'hook'\n name: string\n}\n\nexport type MessageDetail = {\n id: string\n object: 'message'\n content: string\n createdAt: string\n updatedAt?: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n apiUrl: string\n chatId: string\n}\n\nexport type MessageSummary = {\n id: string\n object: 'message'\n content: string\n createdAt: string\n updatedAt?: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n apiUrl: string\n}\n\nexport type MessageSummaryList = {\n object: 'list'\n data: Array<{\n id: string\n object: 'message'\n content: string\n createdAt: string\n updatedAt?: string\n type:\n | 'message'\n | 'forked-block'\n | 'forked-chat'\n | 'open-in-v0'\n | 'refinement'\n | 'added-environment-variables'\n | 'added-integration'\n | 'deleted-file'\n | 'moved-file'\n | 'renamed-file'\n | 'edited-file'\n | 'replace-src'\n | 'reverted-block'\n | 'fix-with-v0'\n | 'auto-fix-with-v0'\n | 'sync-git'\n role: 'user' | 'assistant'\n apiUrl: string\n }>\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\n\nexport type ProjectDetail = {\n id: string\n object: 'project'\n name: string\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n description?: string\n instructions?: string\n chats: Array<{\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n }\n }>\n}\n\nexport interface ProjectSummary {\n id: string\n object: 'project'\n name: string\n vercelProjectId?: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface ScopeSummary {\n id: string\n object: 'scope'\n name?: string\n}\n\nexport type SearchResultItem = {\n id: string\n object: 'chat' | 'project'\n name: string\n createdAt: string\n updatedAt?: string\n apiUrl: string\n webUrl: string\n}\n\nexport interface UserDetail {\n id: string\n object: 'user'\n name?: string\n email: string\n avatar: string\n}\n\nexport interface VercelProjectDetail {\n id: string\n object: 'vercel_project'\n name: string\n}\n\nexport interface VercelProjectSummary {\n id: string\n object: 'vercel_project'\n name: string\n}\n\nexport type VersionDetail = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: {\n object: 'file'\n name: string\n content: string\n locked: boolean\n }[]\n}\n\nexport type VersionSummary = {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n}\n\nexport type VersionSummaryList = {\n object: 'list'\n data: Array<{\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n }>\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\n\nexport interface ChatsCreateRequest {\n message: string\n attachments?: {\n url: string\n }[]\n system?: string\n chatPrivacy?: 'public' | 'private' | 'team-edit' | 'team' | 'unlisted'\n projectId?: string\n modelConfiguration?: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsCreateResponse = ChatDetail\n\nexport interface ChatsFindResponse {\n object: 'list'\n data: ChatSummary[]\n}\n\nexport type ChatsInitRequest = {\n name?: string\n chatPrivacy?: 'public' | 'private' | 'team-edit' | 'team' | 'unlisted'\n projectId?: string\n} & (\n | {\n type: 'files'\n files: Array<\n | {\n name: string\n url: string\n locked?: boolean\n content?: never\n }\n | {\n name: string\n content: string\n locked?: boolean\n url?: never\n }\n >\n repo?: never\n lockAllFiles?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'repo'\n repo: {\n url: string\n branch?: string\n }\n lockAllFiles?: boolean\n files?: never\n registry?: never\n zip?: never\n }\n | {\n type: 'registry'\n registry: {\n url: string\n }\n lockAllFiles?: boolean\n files?: never\n repo?: never\n zip?: never\n }\n | {\n type: 'zip'\n zip: {\n url: string\n }\n lockAllFiles?: boolean\n files?: never\n repo?: never\n registry?: never\n }\n)\n\nexport type ChatsInitResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: FileDetail[]\n }\n /** @deprecated */\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsDeleteResponse {\n id: string\n object: 'chat'\n deleted: true\n}\n\nexport type ChatsGetByIdResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: FileDetail[]\n }\n /** @deprecated */\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsUpdateRequest {\n name?: string\n privacy?: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n}\n\nexport type ChatsUpdateResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: FileDetail[]\n }\n /** @deprecated */\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport interface ChatsFavoriteRequest {\n isFavorite: boolean\n}\n\nexport interface ChatsFavoriteResponse {\n id: string\n object: 'chat'\n favorited: boolean\n}\n\nexport interface ChatsForkRequest {\n versionId?: string\n}\n\nexport type ChatsForkResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: FileDetail[]\n }\n /** @deprecated */\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n}\n\nexport type ProjectsGetByChatIdResponse = ProjectDetail\n\nexport interface ChatsFindMessagesResponse {\n object: 'list'\n data: MessageSummary[]\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\n\nexport interface ChatsSendMessageRequest {\n message: string\n attachments?: {\n url: string\n }[]\n modelConfiguration?: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n responseMode?: 'sync' | 'async'\n}\n\nexport type ChatsSendMessageResponse = {\n id: string\n object: 'chat'\n shareable: boolean\n privacy: 'public' | 'private' | 'team' | 'team-edit' | 'unlisted'\n name?: string\n /** @deprecated */\n title?: string\n createdAt: string\n updatedAt?: string\n favorite: boolean\n authorId: string\n projectId?: string\n webUrl: string\n apiUrl: string\n latestVersion?: {\n id: string\n object: 'version'\n status: 'pending' | 'completed' | 'failed'\n demoUrl?: string\n createdAt: string\n updatedAt?: string\n files: FileDetail[]\n }\n /** @deprecated */\n url: string\n messages: MessageSummary[]\n files?: {\n lang: string\n meta: Record<string, any>\n source: string\n }[]\n /** @deprecated */\n demo?: string\n text: string\n modelConfiguration: {\n modelId: 'v0-1.5-sm' | 'v0-1.5-md' | 'v0-1.5-lg'\n imageGenerations?: boolean\n thinking?: boolean\n }\n chatId: string\n}\n\nexport type ChatsGetMessageResponse = MessageDetail\n\nexport interface ChatsFindVersionsResponse {\n object: 'list'\n data: VersionSummary[]\n pagination: {\n hasMore: boolean\n nextCursor?: string\n nextUrl?: string\n }\n}\n\nexport type ChatsGetVersionResponse = VersionDetail\n\nexport interface ChatsUpdateVersionRequest {\n files: {\n name: string\n content: string\n locked?: boolean\n }[]\n}\n\nexport type ChatsUpdateVersionResponse = VersionDetail\n\nexport type ChatsResumeResponse = MessageDetail\n\nexport interface DeploymentsFindResponse {\n object: 'list'\n data: DeploymentDetail[]\n}\n\nexport interface DeploymentsCreateRequest {\n projectId: string\n chatId: string\n versionId: string\n}\n\nexport type DeploymentsCreateResponse = DeploymentDetail\n\nexport type DeploymentsGetByIdResponse = DeploymentDetail\n\nexport interface DeploymentsDeleteResponse {\n id: string\n object: 'deployment'\n deleted: true\n}\n\nexport interface DeploymentsFindLogsResponse {\n error?: string\n logs: string[]\n nextSince?: number\n}\n\nexport interface DeploymentsFindErrorsResponse {\n error?: string\n fullErrorText?: string\n errorType?: string\n formattedError?: string\n}\n\nexport interface HooksFindResponse {\n object: 'list'\n data: HookSummary[]\n}\n\nexport interface HooksCreateRequest {\n name: string\n events: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n chatId?: string\n projectId?: string\n url: string\n}\n\nexport type HooksCreateResponse = HookDetail\n\nexport type HooksGetByIdResponse = HookDetail\n\nexport interface HooksUpdateRequest {\n name?: string\n events?: Array<\n | 'chat.created'\n | 'chat.updated'\n | 'chat.deleted'\n | 'message.created'\n | 'message.updated'\n | 'message.deleted'\n | 'project.created'\n | 'project.updated'\n | 'project.deleted'\n >\n url?: string\n}\n\nexport type HooksUpdateResponse = HookDetail\n\nexport interface HooksDeleteResponse {\n id: string\n object: 'hook'\n deleted: true\n}\n\nexport interface IntegrationsVercelProjectsFindResponse {\n object: 'list'\n data: VercelProjectDetail[]\n}\n\nexport interface IntegrationsVercelProjectsCreateRequest {\n projectId: string\n name: string\n}\n\nexport type IntegrationsVercelProjectsCreateResponse = VercelProjectDetail\n\nexport interface ProjectsFindResponse {\n object: 'list'\n data: ProjectSummary[]\n}\n\nexport interface ProjectsCreateRequest {\n name: string\n description?: string\n icon?: string\n environmentVariables?: {\n key: string\n value: string\n }[]\n instructions?: string\n}\n\nexport type ProjectsCreateResponse = ProjectDetail\n\nexport type ProjectsGetByIdResponse = ProjectDetail\n\nexport interface ProjectsUpdateRequest {\n name?: string\n description?: string\n instructions?: string\n}\n\nexport type ProjectsUpdateResponse = ProjectDetail\n\nexport interface ProjectsAssignRequest {\n chatId: string\n}\n\nexport interface ProjectsAssignResponse {\n object: 'project'\n id: string\n assigned: true\n}\n\nexport interface RateLimitsFindResponse {\n remaining?: number\n reset?: number\n limit: number\n}\n\nexport type UserGetResponse = UserDetail\n\nexport type UserGetBillingResponse =\n | {\n billingType: 'token'\n data: {\n plan: string\n billingMode?: 'test'\n role: string\n billingCycle: {\n start: number\n end: number\n }\n balance: {\n remaining: number\n total: number\n }\n onDemand: {\n balance: number\n blocks?: {\n expirationDate?: number\n effectiveDate: number\n originalBalance: number\n currentBalance: number\n }[]\n }\n }\n }\n | {\n billingType: 'legacy'\n data: {\n remaining?: number\n reset?: number\n limit: number\n }\n }\n\nexport interface UserGetPlanResponse {\n object: 'plan'\n plan: string\n billingCycle: {\n start: number\n end: number\n }\n balance: {\n remaining: number\n total: number\n }\n}\n\nexport interface UserGetScopesResponse {\n object: 'list'\n data: ScopeSummary[]\n}\n\nexport interface V0ClientConfig {\n apiKey?: string\n baseUrl?: string\n}\n\nexport function createClient(config: V0ClientConfig = {}) {\n const fetcher = createFetcher(config)\n\n return {\n chats: {\n async create(params: ChatsCreateRequest): Promise<ChatsCreateResponse> {\n const body = {\n message: params.message,\n attachments: params.attachments,\n system: params.system,\n chatPrivacy: params.chatPrivacy,\n projectId: params.projectId,\n modelConfiguration: params.modelConfiguration,\n responseMode: params.responseMode,\n }\n return fetcher(`/chats`, 'POST', { body })\n },\n\n async find(params?: {\n limit?: string\n offset?: string\n isFavorite?: string\n }): Promise<ChatsFindResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n limit: params.limit,\n offset: params.offset,\n isFavorite: params.isFavorite,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats`, 'GET', { ...(hasQuery ? { query } : {}) })\n },\n\n async init(params: ChatsInitRequest): Promise<ChatsInitResponse> {\n const body = params\n return fetcher(`/chats/init`, 'POST', { body })\n },\n\n async delete(params: { chatId: string }): Promise<ChatsDeleteResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}`, 'DELETE', { pathParams })\n },\n\n async getById(params: { chatId: string }): Promise<ChatsGetByIdResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}`, 'GET', { pathParams })\n },\n\n async update(\n params: { chatId: string } & ChatsUpdateRequest,\n ): Promise<ChatsUpdateResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { name: params.name, privacy: params.privacy }\n return fetcher(`/chats/${pathParams.chatId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async favorite(\n params: { chatId: string } & ChatsFavoriteRequest,\n ): Promise<ChatsFavoriteResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { isFavorite: params.isFavorite }\n return fetcher(`/chats/${pathParams.chatId}/favorite`, 'PUT', {\n pathParams,\n body,\n })\n },\n\n async fork(\n params: { chatId: string } & ChatsForkRequest,\n ): Promise<ChatsForkResponse> {\n const pathParams = { chatId: params.chatId }\n const body = { versionId: params.versionId }\n return fetcher(`/chats/${pathParams.chatId}/fork`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async findMessages(params: {\n chatId: string\n limit?: string\n cursor?: string\n }): Promise<ChatsFindMessagesResponse> {\n const pathParams = { chatId: params.chatId }\n const query = Object.fromEntries(\n Object.entries({\n limit: params.limit,\n cursor: params.cursor,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats/${pathParams.chatId}/messages`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async sendMessage(\n params: { chatId: string } & ChatsSendMessageRequest,\n ): Promise<ChatsSendMessageResponse> {\n const pathParams = { chatId: params.chatId }\n const body = {\n message: params.message,\n attachments: params.attachments,\n modelConfiguration: params.modelConfiguration,\n responseMode: params.responseMode,\n }\n return fetcher(`/chats/${pathParams.chatId}/messages`, 'POST', {\n pathParams,\n body,\n })\n },\n\n async getMessage(params: {\n chatId: string\n messageId: string\n }): Promise<ChatsGetMessageResponse> {\n const pathParams = {\n chatId: params.chatId,\n messageId: params.messageId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/messages/${pathParams.messageId}`,\n 'GET',\n { pathParams },\n )\n },\n\n async findVersions(params: {\n chatId: string\n limit?: string\n cursor?: string\n }): Promise<ChatsFindVersionsResponse> {\n const pathParams = { chatId: params.chatId }\n const query = Object.fromEntries(\n Object.entries({\n limit: params.limit,\n cursor: params.cursor,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/chats/${pathParams.chatId}/versions`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async getVersion(params: {\n chatId: string\n versionId: string\n }): Promise<ChatsGetVersionResponse> {\n const pathParams = {\n chatId: params.chatId,\n versionId: params.versionId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/versions/${pathParams.versionId}`,\n 'GET',\n { pathParams },\n )\n },\n\n async updateVersion(\n params: {\n chatId: string\n versionId: string\n } & ChatsUpdateVersionRequest,\n ): Promise<ChatsUpdateVersionResponse> {\n const pathParams = {\n chatId: params.chatId,\n versionId: params.versionId,\n }\n const body = { files: params.files }\n return fetcher(\n `/chats/${pathParams.chatId}/versions/${pathParams.versionId}`,\n 'PATCH',\n { pathParams, body },\n )\n },\n\n async resume(params: {\n chatId: string\n messageId: string\n }): Promise<ChatsResumeResponse> {\n const pathParams = {\n chatId: params.chatId,\n messageId: params.messageId,\n }\n return fetcher(\n `/chats/${pathParams.chatId}/messages/${pathParams.messageId}/resume`,\n 'POST',\n { pathParams },\n )\n },\n },\n\n projects: {\n async getByChatId(params: {\n chatId: string\n }): Promise<ProjectsGetByChatIdResponse> {\n const pathParams = { chatId: params.chatId }\n return fetcher(`/chats/${pathParams.chatId}/project`, 'GET', {\n pathParams,\n })\n },\n\n async find(): Promise<ProjectsFindResponse> {\n return fetcher(`/projects`, 'GET', {})\n },\n\n async create(\n params: ProjectsCreateRequest,\n ): Promise<ProjectsCreateResponse> {\n const body = {\n name: params.name,\n description: params.description,\n icon: params.icon,\n environmentVariables: params.environmentVariables,\n instructions: params.instructions,\n }\n return fetcher(`/projects`, 'POST', { body })\n },\n\n async getById(params: {\n projectId: string\n }): Promise<ProjectsGetByIdResponse> {\n const pathParams = { projectId: params.projectId }\n return fetcher(`/projects/${pathParams.projectId}`, 'GET', {\n pathParams,\n })\n },\n\n async update(\n params: { projectId: string } & ProjectsUpdateRequest,\n ): Promise<ProjectsUpdateResponse> {\n const pathParams = { projectId: params.projectId }\n const body = {\n name: params.name,\n description: params.description,\n instructions: params.instructions,\n }\n return fetcher(`/projects/${pathParams.projectId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async assign(\n params: { projectId: string } & ProjectsAssignRequest,\n ): Promise<ProjectsAssignResponse> {\n const pathParams = { projectId: params.projectId }\n const body = { chatId: params.chatId }\n return fetcher(`/projects/${pathParams.projectId}/assign`, 'POST', {\n pathParams,\n body,\n })\n },\n },\n\n deployments: {\n async find(params: {\n projectId: string\n chatId: string\n versionId: string\n }): Promise<DeploymentsFindResponse> {\n const query = Object.fromEntries(\n Object.entries({\n projectId: params.projectId,\n chatId: params.chatId,\n versionId: params.versionId,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n return fetcher(`/deployments`, 'GET', { query })\n },\n\n async create(\n params: DeploymentsCreateRequest,\n ): Promise<DeploymentsCreateResponse> {\n const body = {\n projectId: params.projectId,\n chatId: params.chatId,\n versionId: params.versionId,\n }\n return fetcher(`/deployments`, 'POST', { body })\n },\n\n async getById(params: {\n deploymentId: string\n }): Promise<DeploymentsGetByIdResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(`/deployments/${pathParams.deploymentId}`, 'GET', {\n pathParams,\n })\n },\n\n async delete(params: {\n deploymentId: string\n }): Promise<DeploymentsDeleteResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(`/deployments/${pathParams.deploymentId}`, 'DELETE', {\n pathParams,\n })\n },\n\n async findLogs(params: {\n deploymentId: string\n since?: string\n }): Promise<DeploymentsFindLogsResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n const query = Object.fromEntries(\n Object.entries({\n since: params.since,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/deployments/${pathParams.deploymentId}/logs`, 'GET', {\n pathParams,\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async findErrors(params: {\n deploymentId: string\n }): Promise<DeploymentsFindErrorsResponse> {\n const pathParams = { deploymentId: params.deploymentId }\n return fetcher(\n `/deployments/${pathParams.deploymentId}/errors`,\n 'GET',\n { pathParams },\n )\n },\n },\n\n hooks: {\n async find(): Promise<HooksFindResponse> {\n return fetcher(`/hooks`, 'GET', {})\n },\n\n async create(params: HooksCreateRequest): Promise<HooksCreateResponse> {\n const body = {\n name: params.name,\n events: params.events,\n chatId: params.chatId,\n projectId: params.projectId,\n url: params.url,\n }\n return fetcher(`/hooks`, 'POST', { body })\n },\n\n async getById(params: { hookId: string }): Promise<HooksGetByIdResponse> {\n const pathParams = { hookId: params.hookId }\n return fetcher(`/hooks/${pathParams.hookId}`, 'GET', { pathParams })\n },\n\n async update(\n params: { hookId: string } & HooksUpdateRequest,\n ): Promise<HooksUpdateResponse> {\n const pathParams = { hookId: params.hookId }\n const body = {\n name: params.name,\n events: params.events,\n url: params.url,\n }\n return fetcher(`/hooks/${pathParams.hookId}`, 'PATCH', {\n pathParams,\n body,\n })\n },\n\n async delete(params: { hookId: string }): Promise<HooksDeleteResponse> {\n const pathParams = { hookId: params.hookId }\n return fetcher(`/hooks/${pathParams.hookId}`, 'DELETE', { pathParams })\n },\n },\n\n integrations: {\n vercel: {\n projects: {\n async find(): Promise<IntegrationsVercelProjectsFindResponse> {\n return fetcher(`/integrations/vercel/projects`, 'GET', {})\n },\n\n async create(\n params: IntegrationsVercelProjectsCreateRequest,\n ): Promise<IntegrationsVercelProjectsCreateResponse> {\n const body = { projectId: params.projectId, name: params.name }\n return fetcher(`/integrations/vercel/projects`, 'POST', { body })\n },\n },\n },\n },\n\n rateLimits: {\n async find(params?: { scope?: string }): Promise<RateLimitsFindResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n scope: params.scope,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/rate-limits`, 'GET', {\n ...(hasQuery ? { query } : {}),\n })\n },\n },\n\n user: {\n async get(): Promise<UserGetResponse> {\n return fetcher(`/user`, 'GET', {})\n },\n\n async getBilling(params?: {\n scope?: string\n }): Promise<UserGetBillingResponse> {\n const query = params\n ? (Object.fromEntries(\n Object.entries({\n scope: params.scope,\n }).filter(([_, value]) => value !== undefined),\n ) as Record<string, string>)\n : {}\n const hasQuery = Object.keys(query).length > 0\n return fetcher(`/user/billing`, 'GET', {\n ...(hasQuery ? { query } : {}),\n })\n },\n\n async getPlan(): Promise<UserGetPlanResponse> {\n return fetcher(`/user/plan`, 'GET', {})\n },\n\n async getScopes(): Promise<UserGetScopesResponse> {\n return fetcher(`/user/scopes`, 'GET', {})\n },\n },\n }\n}\n\n// Default client for backward compatibility\nexport const v0 = createClient()\n"],"names":[],"mappings":"AAmoBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWO;AACP;AACA;AACA;AACA;AACA;AAKO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AAUO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AAMO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AAiBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  function createFetcher(config = {}) {
2
2
  const baseUrl = config.baseUrl || 'https://api.v0.dev/v1';
3
+ let sessionToken = null;
3
4
  return async function fetcher(url, method, params = {}) {
4
5
  const apiKey = config.apiKey || process.env.V0_API_KEY;
5
6
  if (!apiKey) {
@@ -10,9 +11,12 @@ function createFetcher(config = {}) {
10
11
  const hasBody = method !== 'GET' && params.body;
11
12
  const headers = {
12
13
  Authorization: `Bearer ${apiKey}`,
13
- 'x-session-cache': '1',
14
14
  ...params.headers
15
15
  };
16
+ // Include session token in headers if available
17
+ if (sessionToken) {
18
+ headers['x-session-token'] = sessionToken;
19
+ }
16
20
  if (hasBody) {
17
21
  headers['Content-Type'] = 'application/json';
18
22
  }
@@ -21,6 +25,11 @@ function createFetcher(config = {}) {
21
25
  headers,
22
26
  body: hasBody ? JSON.stringify(params.body) : undefined
23
27
  });
28
+ // Check for session token in response headers
29
+ const newSessionToken = res.headers.get('x-session-token');
30
+ if (newSessionToken) {
31
+ sessionToken = newSessionToken;
32
+ }
24
33
  if (!res.ok) {
25
34
  const text = await res.text();
26
35
  throw new Error(`HTTP ${res.status}: ${text}`);
@@ -119,6 +128,22 @@ function createClient(config = {}) {
119
128
  body
120
129
  });
121
130
  },
131
+ async findMessages (params) {
132
+ const pathParams = {
133
+ chatId: params.chatId
134
+ };
135
+ const query = Object.fromEntries(Object.entries({
136
+ limit: params.limit,
137
+ cursor: params.cursor
138
+ }).filter(([_, value])=>value !== undefined));
139
+ const hasQuery = Object.keys(query).length > 0;
140
+ return fetcher(`/chats/${pathParams.chatId}/messages`, 'GET', {
141
+ pathParams,
142
+ ...hasQuery ? {
143
+ query
144
+ } : {}
145
+ });
146
+ },
122
147
  async sendMessage (params) {
123
148
  const pathParams = {
124
149
  chatId: params.chatId
@@ -134,6 +159,53 @@ function createClient(config = {}) {
134
159
  body
135
160
  });
136
161
  },
162
+ async getMessage (params) {
163
+ const pathParams = {
164
+ chatId: params.chatId,
165
+ messageId: params.messageId
166
+ };
167
+ return fetcher(`/chats/${pathParams.chatId}/messages/${pathParams.messageId}`, 'GET', {
168
+ pathParams
169
+ });
170
+ },
171
+ async findVersions (params) {
172
+ const pathParams = {
173
+ chatId: params.chatId
174
+ };
175
+ const query = Object.fromEntries(Object.entries({
176
+ limit: params.limit,
177
+ cursor: params.cursor
178
+ }).filter(([_, value])=>value !== undefined));
179
+ const hasQuery = Object.keys(query).length > 0;
180
+ return fetcher(`/chats/${pathParams.chatId}/versions`, 'GET', {
181
+ pathParams,
182
+ ...hasQuery ? {
183
+ query
184
+ } : {}
185
+ });
186
+ },
187
+ async getVersion (params) {
188
+ const pathParams = {
189
+ chatId: params.chatId,
190
+ versionId: params.versionId
191
+ };
192
+ return fetcher(`/chats/${pathParams.chatId}/versions/${pathParams.versionId}`, 'GET', {
193
+ pathParams
194
+ });
195
+ },
196
+ async updateVersion (params) {
197
+ const pathParams = {
198
+ chatId: params.chatId,
199
+ versionId: params.versionId
200
+ };
201
+ const body = {
202
+ files: params.files
203
+ };
204
+ return fetcher(`/chats/${pathParams.chatId}/versions/${pathParams.versionId}`, 'PATCH', {
205
+ pathParams,
206
+ body
207
+ });
208
+ },
137
209
  async resume (params) {
138
210
  const pathParams = {
139
211
  chatId: params.chatId,
@@ -176,6 +248,20 @@ function createClient(config = {}) {
176
248
  pathParams
177
249
  });
178
250
  },
251
+ async update (params) {
252
+ const pathParams = {
253
+ projectId: params.projectId
254
+ };
255
+ const body = {
256
+ name: params.name,
257
+ description: params.description,
258
+ instructions: params.instructions
259
+ };
260
+ return fetcher(`/projects/${pathParams.projectId}`, 'PATCH', {
261
+ pathParams,
262
+ body
263
+ });
264
+ },
179
265
  async assign (params) {
180
266
  const pathParams = {
181
267
  projectId: params.projectId
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "v0-sdk",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "TypeScript SDK for the v0 Platform API",
5
5
  "homepage": "https://v0.dev/docs/api",
6
6
  "repository": {