@lovable.dev/sdk 0.1.4 → 0.1.7

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/README.md CHANGED
@@ -79,28 +79,6 @@ await client.chat(projectId, { message: "Add dark mode" });
79
79
  const response = await client.waitForResponse(projectId);
80
80
  ```
81
81
 
82
- ### Remixing with agent state
83
-
84
- Enable `includeAgentState` to carry over the agent's continuation state to the remixed project, allowing prompt cache reuse on the first follow-up message.
85
-
86
- ```typescript
87
- const jobId = await client.remixProject("source-project-id", {
88
- workspaceId: "target-workspace-id",
89
- messageId: "message-id-to-snapshot-at",
90
- includeHistory: true,
91
- includeCustomKnowledge: true,
92
- includeAgentState: true,
93
- });
94
- const { projectId } = await client.waitForRemix("source-project-id", jobId);
95
-
96
- await client.chat(projectId, {
97
- message: "Add dark mode",
98
- continuation: "allow_expired_cache",
99
- });
100
- ```
101
-
102
- Requires `includeHistory`, `includeCustomKnowledge`, and API-key auth.
103
-
104
82
  ### Continuation override
105
83
 
106
84
  The `continuation` option on `chat()` overrides prompt cache reuse behavior. API-key auth only.
@@ -310,7 +288,6 @@ Options:
310
288
  - `remixMode` (optional): `"before"` (default) captures state before the message; `"including"` captures state after the message and its AI response
311
289
  - `includeHistory` (optional, default: `false`): Whether to preserve chat history
312
290
  - `includeCustomKnowledge` (optional, default: `false`): Whether to copy custom instructions/knowledge
313
- - `includeAgentState` (optional, default: `false`): Copy agent continuation state so the prompt cache can be reused after remix. Requires `includeHistory: true`, `includeCustomKnowledge: true`, and API-key auth. See [Remixing with agent state](#remixing-with-agent-state-prompt-cache-continuation)
314
291
  - `initialMessage` (optional): Initial chat message to send after remix completes
315
292
  - `skipInitialRemixMessage` (optional, default: `false`): When true, suppresses the default "I've successfully remixed this project" message
316
293
  - `skipIntegrations` (optional, default: `false`): When true, skips copying integrations to the remixed project
package/dist/index.d.ts CHANGED
@@ -93,6 +93,8 @@ interface ProjectResponse {
93
93
  visibility?: ProjectVisibility;
94
94
  publish_visibility?: "private" | "public";
95
95
  is_published?: boolean;
96
+ /** Present in create project response when initial_message was provided */
97
+ message_id?: string;
96
98
  is_starred?: boolean;
97
99
  is_template?: boolean;
98
100
  is_github?: boolean;
@@ -182,6 +184,10 @@ interface CreateProjectBody {
182
184
  visibility?: ProjectVisibility;
183
185
  template_project_id?: string;
184
186
  initial_message?: string;
187
+ files?: UnscopedFile[];
188
+ selected_libraries?: {
189
+ project_id: string;
190
+ }[];
185
191
  category?: string;
186
192
  project_type?: string;
187
193
  prompt_name?: string;
@@ -199,7 +205,14 @@ interface CreateProjectOptions {
199
205
  visibility?: ProjectVisibility;
200
206
  templateProjectId?: string;
201
207
  initialMessage?: string;
208
+ /** Files to upload and attach to the initial message. The SDK handles uploading. */
202
209
  files?: (File | FileInput)[];
210
+ /** Pre-uploaded file references to attach to the initial message. Skips upload. */
211
+ uploadedFiles?: UnscopedFile[];
212
+ /** Design system library projects to connect to the new project. */
213
+ selectedLibraries?: {
214
+ project_id: string;
215
+ }[];
203
216
  }
204
217
  interface InviteCollaboratorOptions {
205
218
  email: string;
@@ -217,8 +230,12 @@ interface InviteCollaboratorOptions {
217
230
  type ContinuationOverride = "force" | "fresh_build" | "allow_expired_cache";
218
231
  interface ChatMessageOptions {
219
232
  message: string;
233
+ /** Files to upload and attach. The SDK handles uploading them first. */
220
234
  files?: (File | FileInput)[];
221
- chatOnly?: boolean;
235
+ /** Pre-uploaded file references (already uploaded via getFileUploadUrl). Skips upload. */
236
+ uploadedFiles?: UnscopedFile[];
237
+ /** Enable plan mode: the agent discusses and plans without editing code. */
238
+ planMode?: boolean;
222
239
  customModel?: CustomModelConfig;
223
240
  /**
224
241
  * When true, the server may skip staggered inference racing for that request if your
@@ -233,8 +250,13 @@ interface ChatMessageOptions {
233
250
  continuation?: ContinuationOverride;
234
251
  }
235
252
  interface LovableClientOptions {
236
- apiKey: string;
253
+ /** API key for authentication (mutually exclusive with bearerToken) */
254
+ apiKey?: string;
255
+ /** Bearer token for OAuth authentication (mutually exclusive with apiKey) */
256
+ bearerToken?: string;
237
257
  baseUrl?: string;
258
+ /** Additional headers to include on every request */
259
+ headers?: Record<string, string>;
238
260
  }
239
261
  interface LovableError extends Error {
240
262
  status: number;
@@ -334,7 +356,7 @@ interface ReplayReviewsResponse {
334
356
  results: BatchReplayReviewsOutcome;
335
357
  }
336
358
  type RemixJobStatus = "unknown" | "preparing" | "running" | "completed" | "error";
337
- type RemixJobStep = "starting" | "creating_new_project" | "remixing_integration" | "finalizing" | "completed";
359
+ type RemixJobStep = "starting" | "creating_new_project" | "restoring_supabase" | "copying_history" | "preparing_repository" | "remixing_integration" | "pushing_repository" | "finalizing" | "completed";
338
360
  interface RemixJobStepInfo {
339
361
  step: RemixJobStep;
340
362
  integration_name?: string;
@@ -348,10 +370,9 @@ interface RemixProjectOptions {
348
370
  includeHistory?: boolean;
349
371
  includeCustomKnowledge?: boolean;
350
372
  initialMessage?: string;
373
+ projectName?: string;
351
374
  skipInitialRemixMessage?: boolean;
352
375
  skipIntegrations?: boolean;
353
- /** Copy agent continuation state so prompt cache can be reused after remix. Requires includeHistory. API-key auth only. */
354
- includeAgentState?: boolean;
355
376
  }
356
377
  interface RemixResult {
357
378
  projectId: string;
@@ -381,12 +402,260 @@ interface DatabaseConnectionInfo {
381
402
  connection_string: string;
382
403
  api_url: string;
383
404
  }
405
+ declare class ApiError extends Error {
406
+ readonly status: number;
407
+ readonly type?: string;
408
+ readonly detail?: string;
409
+ readonly props?: Record<string, unknown>;
410
+ constructor(status: number, message: string, type?: string, detail?: string, props?: Record<string, unknown>);
411
+ }
412
+ interface SendMessageResponse {
413
+ message_id: string;
414
+ status: string;
415
+ }
416
+ interface GetMessageResponse {
417
+ message_id: string;
418
+ role: string;
419
+ content: string;
420
+ status: string;
421
+ created_at: string;
422
+ edit_id?: string;
423
+ commit_sha?: string;
424
+ summary?: string;
425
+ cost_credits?: number;
426
+ response?: {
427
+ message_id: string;
428
+ status: string;
429
+ content: string;
430
+ edit_id?: string;
431
+ commit_sha?: string;
432
+ summary?: string;
433
+ cost_credits?: number;
434
+ };
435
+ queue_position?: number;
436
+ queue_paused?: boolean;
437
+ queue_pause_reason?: string;
438
+ }
439
+ interface MessageCompletionResult {
440
+ status: "completed" | "timeout" | "error";
441
+ message_id: string;
442
+ content: string;
443
+ edit_id?: string;
444
+ commit_sha?: string;
445
+ summary?: string;
446
+ cost_credits?: number;
447
+ error?: string;
448
+ }
449
+ interface MessageCompletionOptions {
450
+ /** Time between polls in ms (default: 3000) */
451
+ pollInterval?: number;
452
+ /** Maximum time to wait in ms (default: 600000 = 10 minutes) */
453
+ timeout?: number;
454
+ }
455
+ interface KnowledgeResponse {
456
+ content: string;
457
+ }
458
+ interface FileUploadUrlResponse {
459
+ url: string;
460
+ file_id: string;
461
+ }
462
+ interface DiffLine {
463
+ type: string;
464
+ content: string;
465
+ }
466
+ interface DiffHunk {
467
+ oldStart: number;
468
+ oldCount: number;
469
+ newStart: number;
470
+ newCount: number;
471
+ lines: DiffLine[];
472
+ }
473
+ interface DiffEntry {
474
+ action: string;
475
+ file_path: string;
476
+ original_file_path?: string;
477
+ file_type?: string;
478
+ is_image: boolean;
479
+ is_incomplete?: boolean;
480
+ hunks?: DiffHunk[];
481
+ }
482
+ interface GitDiffResponse {
483
+ diffs: DiffEntry[];
484
+ error?: string;
485
+ }
486
+ interface GitFileEntry {
487
+ path: string;
488
+ size: number;
489
+ binary: boolean;
490
+ }
491
+ interface GitFilesResponse {
492
+ files: GitFileEntry[];
493
+ ref: string;
494
+ }
495
+ interface EditSummary {
496
+ id: string;
497
+ type: string;
498
+ commit_sha?: string;
499
+ commit_message?: string;
500
+ status: string;
501
+ created_at: string;
502
+ }
503
+ interface EditsResponse {
504
+ edits: EditSummary[];
505
+ has_more: boolean;
506
+ }
507
+ interface ListProjectItem extends ProjectResponse {
508
+ user_id?: string;
509
+ is_template?: boolean;
510
+ is_starred?: boolean;
511
+ created_at?: string;
512
+ updated_at?: string;
513
+ last_edited_at?: string;
514
+ last_viewed_at?: string;
515
+ edit_count?: number;
516
+ remix_count?: number;
517
+ }
518
+ interface ListProjectsResponse {
519
+ projects: ListProjectItem[];
520
+ total: number;
521
+ has_more: boolean;
522
+ }
523
+ interface ListProjectsOptions {
524
+ query?: string;
525
+ visibility?: string;
526
+ publish_status?: string;
527
+ folder_id?: string;
528
+ user_id?: string;
529
+ sort_by?: string;
530
+ sort_order?: string;
531
+ viewed_by_me?: boolean;
532
+ limit?: number;
533
+ offset?: number;
534
+ cursor?: string;
535
+ }
536
+ interface LibraryProjectResponse {
537
+ id: string;
538
+ name: string | null;
539
+ description: string;
540
+ updated_at: string;
541
+ }
542
+ interface TemplateProjectResponse {
543
+ id: string;
544
+ name: string | null;
545
+ description: string;
546
+ updated_at: string;
547
+ }
548
+ interface ConnectorResponse {
549
+ id: string;
550
+ name: string;
551
+ url?: string;
552
+ auth_type: string;
553
+ connector_id?: string;
554
+ is_connected: boolean;
555
+ }
556
+ interface AvailableConnectorEntry {
557
+ id: string;
558
+ display_name: string;
559
+ summary: string;
560
+ category: string;
561
+ requires_custom_url?: boolean;
562
+ documentation_url?: string;
563
+ }
564
+ interface AddConnectorBody {
565
+ name: string;
566
+ url: string;
567
+ auth_type: "none" | "bearer_token";
568
+ connector_id?: string;
569
+ token?: string;
570
+ }
571
+ interface StandardConnectorItem {
572
+ id: string;
573
+ display_name: string;
574
+ short_description: string;
575
+ categories: string[];
576
+ is_enabled_for_workspace: boolean;
577
+ auth_type: string;
578
+ logo_id?: string;
579
+ documentation_url?: string;
580
+ connection_scope?: string;
581
+ }
582
+ interface SeamlessConnectorItem {
583
+ id: string;
584
+ display_name: string;
585
+ short_description: string;
586
+ categories: string[];
587
+ is_enabled_for_workspace: boolean;
588
+ logo_id?: string;
589
+ documentation_url?: string;
590
+ }
591
+ interface MCPConnectorItem {
592
+ id: string;
593
+ display_name: string;
594
+ summary: string;
595
+ status: string;
596
+ is_enabled_for_workspace: boolean;
597
+ is_connected: boolean;
598
+ connector_id?: string;
599
+ documentation_url?: string;
600
+ }
601
+ interface ConnectionItem {
602
+ id: string;
603
+ connector_id: string;
604
+ display_name: string;
605
+ is_managed: boolean;
606
+ status: string;
607
+ created_at: string;
608
+ updated_at: string;
609
+ }
610
+ interface TimeSeriesDataPoint {
611
+ date: string;
612
+ value: number;
613
+ }
614
+ interface TimeSeriesData {
615
+ total: number;
616
+ label: string;
617
+ data: TimeSeriesDataPoint[];
618
+ }
619
+ interface ListDataPoint {
620
+ label: string;
621
+ value: number;
622
+ }
623
+ interface ListData {
624
+ label: string;
625
+ data: ListDataPoint[];
626
+ }
627
+ interface ProjectAnalyticsResponse {
628
+ timeSeries: {
629
+ visitors: TimeSeriesData;
630
+ pageviews: TimeSeriesData;
631
+ pageviewsPerVisit: TimeSeriesData;
632
+ sessionDuration: TimeSeriesData;
633
+ bounceRate: TimeSeriesData;
634
+ };
635
+ lists: {
636
+ page: ListData;
637
+ source: ListData;
638
+ device: ListData;
639
+ country: ListData;
640
+ };
641
+ }
642
+ interface TrendDataPoint {
643
+ time: string;
644
+ visits: number;
645
+ }
646
+ interface ProjectAnalyticsTrendResponse {
647
+ data: TrendDataPoint[];
648
+ currentVisitors: number;
649
+ }
384
650
 
385
651
  declare class LovableClient {
386
- private readonly apiKey;
652
+ private readonly authHeaders;
387
653
  private readonly baseUrl;
654
+ private readonly extraHeaders;
388
655
  constructor(options: LovableClientOptions);
656
+ private rawRequest;
389
657
  private request;
658
+ private requestText;
390
659
  /**
391
660
  * Get the current authenticated user and their workspaces.
392
661
  * Useful for validating an API key and discovering workspace IDs.
@@ -401,24 +670,23 @@ declare class LovableClient {
401
670
  */
402
671
  getWorkspace(workspaceId: string): Promise<WorkspaceWithMembership>;
403
672
  /**
404
- * List projects in a workspace
673
+ * List projects in a workspace.
674
+ * Supports full-text search, filtering by visibility/publish status/folder/creator,
675
+ * and pagination via offset or cursor.
405
676
  */
406
- listProjects(workspaceId: string, options?: {
407
- limit?: number;
408
- cursor?: string;
409
- visibility?: "all" | "draft" | "personal" | "private" | "public" | "workspace";
410
- }): Promise<ProjectResponse[]>;
677
+ listProjects(workspaceId: string, options?: ListProjectsOptions): Promise<ListProjectsResponse>;
411
678
  /**
412
679
  * Create a new project in a workspace
413
680
  */
414
681
  createProject(workspaceId: string, options: CreateProjectOptions): Promise<ProjectResponse>;
415
682
  /**
416
- * Send a chat message to a project
683
+ * Send a chat message to a project.
417
684
  *
418
- * Note: This sends a message to the project's AI agent. The response is
419
- * asynchronous - the API accepts the message and processes it in the background.
685
+ * The API accepts the message and processes it in the background.
686
+ * Returns the message ID and status. Use `waitForMessageCompletion()`
687
+ * to poll for the AI response, or `waitForResponse()` for SSE streaming.
420
688
  */
421
- chat(projectId: string, options: ChatMessageOptions): Promise<void>;
689
+ chat(projectId: string, options: ChatMessageOptions): Promise<SendMessageResponse>;
422
690
  /**
423
691
  * Invite a user to a workspace as a collaborator
424
692
  */
@@ -493,6 +761,108 @@ declare class LovableClient {
493
761
  * @returns Database connection details
494
762
  */
495
763
  getDatabaseConnectionInfo(projectId: string): Promise<DatabaseConnectionInfo>;
764
+ /**
765
+ * Get a message by ID. Returns the message content, status, and (for user messages)
766
+ * the AI response if available. Use to poll for completion after `chat()`.
767
+ */
768
+ getMessage(projectId: string, messageId: string): Promise<GetMessageResponse>;
769
+ /**
770
+ * Poll for message completion. Waits until the AI response reaches a terminal
771
+ * status (completed, stopped) or the timeout expires.
772
+ *
773
+ * Handles edge cases: 404 grace period for race conditions between queue
774
+ * dequeue and event creation, and queue pause detection.
775
+ */
776
+ waitForMessageCompletion(projectId: string, messageId: string, options?: MessageCompletionOptions): Promise<MessageCompletionResult>;
777
+ /** Get workspace knowledge (custom instructions for the AI agent). */
778
+ getWorkspaceKnowledge(workspaceId: string): Promise<KnowledgeResponse>;
779
+ /** Set workspace knowledge. Max 10,000 characters. */
780
+ setWorkspaceKnowledge(workspaceId: string, content: string): Promise<KnowledgeResponse>;
781
+ /** Get project knowledge (custom instructions for the AI agent). */
782
+ getProjectKnowledge(projectId: string): Promise<KnowledgeResponse>;
783
+ /** Set project knowledge. Max 10,000 characters. */
784
+ setProjectKnowledge(projectId: string, content: string): Promise<KnowledgeResponse>;
785
+ /**
786
+ * Get the structured diff for a message or commit.
787
+ * Pass `messageId` to get the diff for a specific AI message,
788
+ * or `sha` for a specific commit.
789
+ */
790
+ getDiff(projectId: string, params: {
791
+ messageId?: string;
792
+ sha?: string;
793
+ baseSha?: string;
794
+ }): Promise<GitDiffResponse>;
795
+ /** List all files in a project at a specific git ref. */
796
+ listFiles(projectId: string, ref: string): Promise<GitFilesResponse>;
797
+ /** Read the raw content of a single file at a specific git ref. Returns text. */
798
+ readFile(projectId: string, path: string, ref: string): Promise<string>;
799
+ /** List the edit history of a project. */
800
+ listEdits(projectId: string, params?: {
801
+ limit?: number;
802
+ before?: string;
803
+ }): Promise<EditsResponse>;
804
+ /** Get a presigned URL for uploading a file. Returns the upload URL and file ID. */
805
+ getFileUploadUrl(params: {
806
+ file_name: string;
807
+ content_type?: string;
808
+ }): Promise<FileUploadUrlResponse>;
809
+ /** Set a project's visibility (draft, private, or public). */
810
+ setProjectVisibility(projectId: string, visibility: string): Promise<{
811
+ visibility: string;
812
+ }>;
813
+ /** Set a folder's visibility (personal or workspace). */
814
+ setFolderVisibility(workspaceId: string, folderId: string, visibility: string): Promise<{
815
+ visibility: string;
816
+ }>;
817
+ /** List available design system library projects in a workspace. */
818
+ listLibraryProjects(workspaceId: string): Promise<{
819
+ libraries: LibraryProjectResponse[];
820
+ }>;
821
+ /** List available template projects in a workspace. */
822
+ listTemplateProjects(workspaceId: string): Promise<{
823
+ templates: TemplateProjectResponse[];
824
+ }>;
825
+ /** List all connectors in a workspace. */
826
+ listConnectors(workspaceId: string): Promise<{
827
+ connectors: ConnectorResponse[];
828
+ }>;
829
+ /** Add a connector to a workspace. The server URL is tested before saving. */
830
+ addConnector(workspaceId: string, body: AddConnectorBody): Promise<ConnectorResponse>;
831
+ /** Remove a connector from a workspace. */
832
+ removeConnector(workspaceId: string, connectorId: string): Promise<{
833
+ success: boolean;
834
+ }>;
835
+ /** Browse available connector templates. */
836
+ listAvailableConnectors(workspaceId: string): Promise<{
837
+ catalog: AvailableConnectorEntry[];
838
+ }>;
839
+ /** List standard (OAuth-based) connectors in a workspace. */
840
+ listStandardConnectors(workspaceId: string): Promise<{
841
+ connectors: StandardConnectorItem[];
842
+ }>;
843
+ /** List seamless (zero-config) connectors in a workspace. */
844
+ listSeamlessConnectors(workspaceId: string): Promise<{
845
+ connectors: SeamlessConnectorItem[];
846
+ }>;
847
+ /** List MCP connectors in a workspace. */
848
+ listMCPConnectors(workspaceId: string): Promise<{
849
+ connectors: MCPConnectorItem[];
850
+ custom_enabled: boolean;
851
+ }>;
852
+ /** List authenticated connections (accounts) in a workspace. */
853
+ listConnections(workspaceId: string, params?: {
854
+ connector_id?: string;
855
+ }): Promise<{
856
+ connections: ConnectionItem[];
857
+ }>;
858
+ /** Get historical analytics for a published project. */
859
+ getProjectAnalytics(projectId: string, params: {
860
+ startDate: string;
861
+ endDate: string;
862
+ granularity?: string;
863
+ }): Promise<ProjectAnalyticsResponse>;
864
+ /** Get real-time visitor trend for a published project. */
865
+ getProjectAnalyticsTrend(projectId: string): Promise<ProjectAnalyticsTrendResponse>;
496
866
  /**
497
867
  * Publish a project.
498
868
  *
@@ -628,4 +998,4 @@ declare class LovableClient {
628
998
  waitForProjectPublished(projectId: string, options?: WaitOptions): Promise<ProjectResponse>;
629
999
  }
630
1000
 
631
- export { type AddUserToWorkspaceInputBody, type BatchItemOutcome, type BatchReplayReviewsOutcome, type BatchTracesResult, type ChatMessageOptions, type ChatRequest, type ChatResponse, type ChatResponseOptions, type ContinuationOverride, type CreateProjectBody, type CreateProjectOptions, type CustomModelConfig, type DatabaseConnectionInfo, type DatabaseQueryResult, type DatabaseStatus, type DeploymentResponse, type EnableDatabaseResult, type FileInput, type GetMessageTracesOptions, type InviteCollaboratorOptions, LovableClient, type LovableClientOptions, type LovableError, type MeResponse, type MeWorkspace, type MemberRole, type MessageTracesResponse, type ProjectResponse, type ProjectStatus, type ProjectVisibility, type RemixJobStatus, type RemixJobStep, type RemixJobStepInfo, type RemixMode, type RemixProjectOptions, type RemixResult, type RemixWaitOptions, type ReplayOutcome, type ReplayReviewsItemInput, type ReplayReviewsRequestBody, type ReplayReviewsResponse, type ReviewerRunResult, type TracePurpose, type TraceQuery, type TraceSpan, type UnscopedFile, type WaitOptions, type WorkspaceMembership, type WorkspaceMembershipResponse, type WorkspaceWithMembership };
1001
+ export { type AddConnectorBody, type AddUserToWorkspaceInputBody, ApiError, type AvailableConnectorEntry, type BatchItemOutcome, type BatchReplayReviewsOutcome, type BatchTracesResult, type ChatMessageOptions, type ChatRequest, type ChatResponse, type ChatResponseOptions, type ConnectionItem, type ConnectorResponse, type ContinuationOverride, type CreateProjectBody, type CreateProjectOptions, type CustomModelConfig, type DatabaseConnectionInfo, type DatabaseQueryResult, type DatabaseStatus, type DeploymentResponse, type DiffEntry, type DiffHunk, type DiffLine, type EditSummary, type EditsResponse, type EnableDatabaseResult, type FileInput, type FileUploadUrlResponse, type GetMessageResponse, type GetMessageTracesOptions, type GitDiffResponse, type GitFileEntry, type GitFilesResponse, type InviteCollaboratorOptions, type KnowledgeResponse, type LibraryProjectResponse, type ListData, type ListDataPoint, type ListProjectItem, type ListProjectsOptions, type ListProjectsResponse, LovableClient, type LovableClientOptions, type LovableError, type MCPConnectorItem, type MeResponse, type MeWorkspace, type MemberRole, type MessageCompletionOptions, type MessageCompletionResult, type MessageTracesResponse, type ProjectAnalyticsResponse, type ProjectAnalyticsTrendResponse, type ProjectResponse, type ProjectStatus, type ProjectVisibility, type RemixJobStatus, type RemixJobStep, type RemixJobStepInfo, type RemixMode, type RemixProjectOptions, type RemixResult, type RemixWaitOptions, type ReplayOutcome, type ReplayReviewsItemInput, type ReplayReviewsRequestBody, type ReplayReviewsResponse, type ReviewerRunResult, type SeamlessConnectorItem, type SendMessageResponse, type StandardConnectorItem, type TemplateProjectResponse, type TimeSeriesData, type TimeSeriesDataPoint, type TracePurpose, type TraceQuery, type TraceSpan, type TrendDataPoint, type UnscopedFile, type WaitOptions, type WorkspaceMembership, type WorkspaceMembershipResponse, type WorkspaceWithMembership };