@builder.io/ai-utils 0.3.16 → 0.3.18

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 ADDED
@@ -0,0 +1,3 @@
1
+ # Builder.io AI types and utilities
2
+
3
+ Shared types between AI systems, threads, servers, etc.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builder.io/ai-utils",
3
- "version": "0.3.16",
3
+ "version": "0.3.18",
4
4
  "description": "Builder.io AI utils",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/codegen.ts ADDED
@@ -0,0 +1,687 @@
1
+ import type {
2
+ Attachment,
3
+ ContentMessageItemToolResult,
4
+ UserMessageParam,
5
+ } from "./messages";
6
+
7
+ import type { BuilderContent } from "./completion";
8
+
9
+ import type { Options as PrettierOptions } from "prettier";
10
+ import type { UserContext } from "./mapping";
11
+ import type { AssistantMessageParam } from "./messages";
12
+
13
+ // Define the import type as a union of literal types.
14
+ export type ImportType = "named" | "default";
15
+
16
+ // Define an interface for the import descriptor.
17
+ export interface ESMImport {
18
+ importName: string; // e.g. "Button"
19
+ importPath: string; // e.g. "path"
20
+ importType: ImportType; // Either 'named' or 'default'
21
+ }
22
+
23
+ export interface ProjectFile {
24
+ filePath: string;
25
+ content?: string;
26
+ importance?: number;
27
+ dropReason?: string;
28
+ wasIncluded?: boolean;
29
+ }
30
+
31
+ export interface CustomInstruction {
32
+ id: string;
33
+ name: string;
34
+ content: string;
35
+ type?: "always" | "agent-mode";
36
+ filePath?: string;
37
+ glob?: string;
38
+ description?: string;
39
+ }
40
+
41
+ export type CodeGenFramework =
42
+ | "react"
43
+ | "html"
44
+ | "mitosis"
45
+ | "react-native"
46
+ | "angular"
47
+ | "vue"
48
+ | "svelte"
49
+ | "qwik"
50
+ | "solid"
51
+ | "marko"
52
+ | "swiftui"
53
+ | "jetpack-compose"
54
+ | "flutter";
55
+
56
+ export type CodeGenStyleLibrary =
57
+ | "tailwind"
58
+ | "tailwind-precise"
59
+ | "emotion"
60
+ | "styled-components"
61
+ | "styled-jsx"
62
+ | "react-native"
63
+ | undefined;
64
+
65
+ export type CompletionStopReason =
66
+ | "max_tokens"
67
+ | "stop_sequence"
68
+ | "tool_use"
69
+ | "end_turn"
70
+ | "content_filter"
71
+ | "error"
72
+ | "aborted"
73
+ | "pause_turn"
74
+ | "refusal"
75
+ | null;
76
+
77
+ export interface ViewPathToolInput {
78
+ file_path: string;
79
+ view_range?: [number, number];
80
+ }
81
+
82
+ export interface GlobSearchToolInput {
83
+ pattern: string;
84
+ }
85
+
86
+ export interface GrepSearchToolInput {
87
+ query: string;
88
+ include_glob?: string;
89
+ exclude_glob?: string;
90
+ }
91
+
92
+ export interface GetRuleToolInput {
93
+ name: string;
94
+ }
95
+
96
+ export interface GetStyleInspirationToolInput {
97
+ url: string;
98
+ }
99
+
100
+ export interface GetBuildOutputToolInput {}
101
+ export interface DevServerControlInput {
102
+ restart?: boolean;
103
+ get_logs?: boolean;
104
+ }
105
+
106
+ export interface BashToolInput {
107
+ command?: string;
108
+ restart?: boolean;
109
+ }
110
+
111
+ export interface WebSearchToolInput {
112
+ query: string;
113
+ }
114
+
115
+ export interface WriteFileInput {
116
+ title: string;
117
+ file_path: string;
118
+ content: string;
119
+ }
120
+
121
+ export interface SearchReplaceInput {
122
+ title: string;
123
+ file_path: string;
124
+ old_str: string;
125
+ new_str: string;
126
+ }
127
+
128
+ export interface CodeGenToolMap {
129
+ view_path: ViewPathToolInput;
130
+ glob_search: GlobSearchToolInput;
131
+ grep_search: GrepSearchToolInput;
132
+ get_rule: GetRuleToolInput;
133
+ get_style_inspiration: GetStyleInspirationToolInput;
134
+ get_build_output: GetBuildOutputToolInput;
135
+ dev_server_control: DevServerControlInput;
136
+ bash: BashToolInput;
137
+ web_search: WebSearchToolInput;
138
+ write_file: WriteFileInput;
139
+ search_replace_file: SearchReplaceInput;
140
+ }
141
+
142
+ export type CodeGenTools = keyof CodeGenToolMap;
143
+
144
+ export type AllCodeGenTools = CodeGenTools | "web_search";
145
+
146
+ export type CodeGenMode =
147
+ | "exact" // @deprecated
148
+ | "precise" // tries to match the design as close
149
+ | "precise_vision" // tries to match the design as close, also uses vision to match
150
+ | "creative" // adapts the design to some generic design language
151
+ | "creative_vision" // adapts the design to some generic design language, also uses vision to match
152
+ | "creative_only_vision"; // adapts the design to some generic design language, but only uses vision to match
153
+
154
+ export interface CodeGenInputOptions {
155
+ position: string;
156
+ eventName?: string;
157
+ sessionId: string;
158
+
159
+ codeGenMode?: "fast" | "quality" | "quality-v3";
160
+ url?: string;
161
+ diffActions?: boolean;
162
+ planningPrompt?: boolean;
163
+ customInstructions?: CustomInstruction[];
164
+ userPrompt?: string;
165
+ ephemeralUserPrompt?: string;
166
+ displayUserPrompt?: string;
167
+ files?: ProjectFile[];
168
+ rerankFiles?: number;
169
+ toolResults?: ContentMessageItemToolResult[];
170
+ attachments?: Attachment[];
171
+ beforeCommit?: string;
172
+ workingDirectory?: string;
173
+
174
+ // Code options
175
+ builderContent?: BuilderContent;
176
+ framework?: CodeGenFramework;
177
+ styleLibrary?: CodeGenStyleLibrary;
178
+ typescript?: boolean;
179
+ userContext?: UserContext;
180
+
181
+ enabledTools?: CodeGenTools[];
182
+
183
+ // Options
184
+ maxTokens?: number;
185
+ maxPages?: number;
186
+ autoContinue?: number;
187
+ promptCaching?: boolean;
188
+ llmSuggestions?: boolean;
189
+ conclusionText?: boolean;
190
+ mcpServers?: boolean;
191
+
192
+ searchResponse?: any | null;
193
+
194
+ // Prettier options
195
+ prettierConfig?: PrettierOptions;
196
+
197
+ // Role
198
+ role?: "user" | "agent";
199
+ user?: UserSource;
200
+
201
+ /** @deprecated */
202
+ history?: (UserMessageParam | AssistantMessageParam)[];
203
+ /** @deprecated */
204
+ prevId?: string;
205
+ /** @deprecated */
206
+ vcpId?: string;
207
+ }
208
+
209
+ export type Feature = "component-mapping";
210
+
211
+ export interface CodegenUsage {
212
+ total: number;
213
+ fast: number;
214
+ quality: number;
215
+ features: Feature[];
216
+ limits: {
217
+ aiGeneration: number;
218
+ aiGenerationContextWindow: number;
219
+ };
220
+ }
221
+
222
+ export interface PromptSuggestion {
223
+ type:
224
+ | "missing-imports"
225
+ | "lazy-code"
226
+ | "no-file-for-diff"
227
+ | "syntax-error"
228
+ | "llm-suggested"
229
+ | "diff-apply";
230
+
231
+ filePath?: string;
232
+ line?: number;
233
+ importance: "high" | "medium" | "low";
234
+ column?: number;
235
+ summary: string;
236
+ prompt: string;
237
+ }
238
+
239
+ export interface ActionItem {
240
+ type:
241
+ | "file"
242
+ | "text"
243
+ | "diff"
244
+ | "thinking"
245
+ | "tool"
246
+ | "suggestion"
247
+ | "tool_result"
248
+ | "server_tool_result";
249
+ id?: string;
250
+ content: string;
251
+ filePath?: string;
252
+ artifactTitle?: string;
253
+ actionTitle?: string;
254
+ synthetic?: boolean;
255
+ incomplete?: boolean;
256
+ suggestions?: PromptSuggestion[];
257
+ errors?: string[];
258
+ }
259
+
260
+ export interface RepoInfo {
261
+ remoteUrl: string;
262
+ defaultBranch: string;
263
+ currentBranch: string;
264
+ commit: string;
265
+ }
266
+
267
+ export interface CodebaseSearchOptions {
268
+ repoInfo?: RepoInfo;
269
+ query: string;
270
+ selectedFiles?: string[];
271
+ sessionId: string;
272
+ files?: string[];
273
+ packageJson?: string;
274
+ limit?: number;
275
+ includeContent?: boolean;
276
+ }
277
+
278
+ export interface CodebaseSearchResponse {
279
+ id: string;
280
+ relevantPaths: string[];
281
+ grepQueries: string[];
282
+ streamMeta: any;
283
+ ranked: RankedResult[];
284
+ }
285
+
286
+ export interface RankedResult {
287
+ index: number;
288
+ filePath: string;
289
+ startIndex: number;
290
+ endIndex: number;
291
+ score: number;
292
+ id: string;
293
+ content?: string;
294
+ }
295
+
296
+ export interface GenerateCompletionStepThinking {
297
+ type: "thinking";
298
+ }
299
+
300
+ export interface FileInfo {
301
+ filePath: string;
302
+ size: number;
303
+ isCustomInstruction: boolean;
304
+ }
305
+
306
+ export interface GenerateCompletionStepUserInput {
307
+ type: "user-input";
308
+ prompt: string;
309
+ files: FileInfo[];
310
+ }
311
+
312
+ export interface GenerateCompletionStepToolResult {
313
+ type: "agent-input";
314
+ toolResults: ContentMessageItemToolResult[];
315
+ }
316
+
317
+ export interface GenerateCompletionStepPlanning {
318
+ type: "planning";
319
+ content: string;
320
+ }
321
+
322
+ export interface GenerateCompletionStepUser {
323
+ type: "user";
324
+ displayPrompt: string | undefined;
325
+ attachments?: Array<Attachment>;
326
+ id: string;
327
+ user: UserSource;
328
+ role: "user" | "agent";
329
+ }
330
+
331
+ export interface GenerateCompletionStepFile {
332
+ type: "file";
333
+ filePath: string;
334
+ content: string;
335
+ title: string;
336
+ id: string;
337
+ }
338
+
339
+ export interface GenerateCompletionStepDiff {
340
+ type: "diff";
341
+ filePath: string;
342
+ content: string;
343
+ title: string;
344
+ id: string;
345
+ }
346
+
347
+ export interface GenerateCompletionStepTool {
348
+ type: "tool";
349
+ name: string;
350
+ id: string;
351
+ content: string;
352
+ }
353
+
354
+ export interface GenerateCompletionStepText {
355
+ type: "text";
356
+ content: string;
357
+ }
358
+
359
+ export interface GenerateCompletionStepDone {
360
+ type: "done";
361
+ id: string;
362
+ applyResults: ApplyActionsResult[];
363
+ actions: ActionItem[];
364
+ usage: CodegenUsage | undefined;
365
+ url?: string;
366
+ stopReason: CompletionStopReason;
367
+ hasChanges: boolean;
368
+ }
369
+
370
+ export interface GenerateCompletionStepStart {
371
+ type: "start";
372
+ name: string;
373
+ id: string | undefined;
374
+ title: string;
375
+ content: string;
376
+ filePath?: string;
377
+ }
378
+
379
+ export interface GenerateCompletionStepDelta {
380
+ type: "delta";
381
+ name: string;
382
+ delta: string;
383
+ }
384
+
385
+ export interface GenerateCompletionStepError {
386
+ type: "error";
387
+ id?: string;
388
+ stopReason?: "error" | "limit";
389
+ metadata?: any;
390
+ message: string;
391
+ usage?: CodegenUsage;
392
+ contextPrompt?: string;
393
+ }
394
+
395
+ export interface GenerateCompletionStepContinue {
396
+ type: "continue";
397
+ id: string;
398
+ url: string;
399
+ }
400
+
401
+ export interface CodeGenHealthStatus {
402
+ devServerRunning: boolean;
403
+ devServerResponding: boolean;
404
+ logs: string | undefined;
405
+ lastInstallFailed: boolean;
406
+ checkLogs: string;
407
+ checkPassed: boolean;
408
+ prompt: string;
409
+ message: string;
410
+ }
411
+
412
+ export interface SuggestedActionBase {
413
+ level: "info" | "warning" | "error";
414
+ canAutoApply: boolean;
415
+ actionButtonText: string;
416
+ message: string;
417
+ userMessage: GenerateUserMessage;
418
+ }
419
+
420
+ export interface SuggestedActionBuildError extends SuggestedActionBase {
421
+ type: "build-error";
422
+ healthStatus: CodeGenHealthStatus;
423
+ }
424
+
425
+ export type SuggestedAction = SuggestedActionBuildError;
426
+
427
+ export interface GenerateCompletionStepWaitForInput {
428
+ type: "wait-for-input";
429
+ state: GenerateCompletionState;
430
+ suggestion?: SuggestedAction;
431
+ }
432
+
433
+ export interface GenerateCompletionStepAbort {
434
+ type: "user-abort";
435
+ }
436
+
437
+ export interface GenerateCompletionStepRestore {
438
+ type: "restore";
439
+ location: "before" | "after";
440
+ files: string[];
441
+ lastCompletionId: string | undefined;
442
+ commitHash: string | undefined;
443
+ }
444
+
445
+ export type GenerateCompletionState =
446
+ | "unknown"
447
+ | "initial-with-url"
448
+ | "initial-without-url"
449
+ | "generating"
450
+ | "success"
451
+ | "abort"
452
+ | "error"
453
+ | "close"
454
+ | "replay";
455
+
456
+ export interface GenerateCompletionStepState {
457
+ type: "state";
458
+ previousState: GenerateCompletionState;
459
+ newState: GenerateCompletionState;
460
+ }
461
+
462
+ export interface GenerateCompletionStepGit {
463
+ type: "git";
464
+ isSessionDirty: boolean;
465
+ remoteBranchExists: boolean;
466
+ canPush: boolean;
467
+ canPull: boolean;
468
+ canSync: boolean;
469
+ ahead: number;
470
+ behind: number;
471
+ currentCommit: string;
472
+ currentBranch: string;
473
+ remoteBranch: string;
474
+ }
475
+
476
+ export interface GenerateCompletionStepClose {
477
+ type: "close";
478
+ }
479
+
480
+ export interface GenerateCompletionStepStdio {
481
+ type: "stdio";
482
+ command: string;
483
+ stream: "stdout" | "stderr";
484
+ source: "run-command" | "tool-command";
485
+ content: string;
486
+ }
487
+
488
+ export interface GenerateCompletionStepSession {
489
+ type: "session";
490
+ title: string | undefined;
491
+ beforeCommit: string | undefined;
492
+ createdUnixTime: number;
493
+ updatedUnixTime: number;
494
+ id: string;
495
+ hasChanges: boolean;
496
+ }
497
+
498
+ export interface GenerateCompletionStepServerToolResult {
499
+ type: "server_tool_result";
500
+ content: any;
501
+ title: string;
502
+ id: string;
503
+ }
504
+
505
+ export type GenerateCompletionStep = { timestamp?: number } & (
506
+ | GenerateCompletionStepPlanning
507
+ | GenerateCompletionStepStart
508
+ | GenerateCompletionStepDelta
509
+ | GenerateCompletionStepUser
510
+ | GenerateCompletionStepFile
511
+ | GenerateCompletionStepDiff
512
+ | GenerateCompletionStepTool
513
+ | GenerateCompletionStepError
514
+ | GenerateCompletionStepContinue
515
+ | GenerateCompletionStepWaitForInput
516
+ | GenerateCompletionStepAbort
517
+ | GenerateCompletionStepDone
518
+ | GenerateCompletionStepUserInput
519
+ | GenerateCompletionStepText
520
+ | GenerateCompletionStepRestore
521
+ | GenerateCompletionStepState
522
+ | GenerateCompletionStepStdio
523
+ | GenerateCompletionStepSession
524
+ | GenerateCompletionStepServerToolResult
525
+ | GenerateCompletionStepGit
526
+ | GenerateCompletionStepToolResult
527
+ );
528
+
529
+ export interface ApplyActionsResult {
530
+ filePath: string;
531
+ addedLines: number;
532
+ removedLines: number;
533
+ action: "create" | "update" | "delete";
534
+ content?: string;
535
+ oldContent?: string;
536
+ }
537
+
538
+ export interface UserSourceBuilder {
539
+ source: "builder.io";
540
+ userId?: string;
541
+ userName?: string;
542
+ userEmail?: string;
543
+ role: "user";
544
+ }
545
+
546
+ export interface UserSourceGithub {
547
+ source: "github";
548
+ userName: string;
549
+ link?: string;
550
+ role: "user" | "agent";
551
+ }
552
+
553
+ export interface UserSourceAgent {
554
+ source: "agent";
555
+ role: "agent";
556
+ }
557
+
558
+ export type UserSource = UserSourceBuilder | UserSourceGithub | UserSourceAgent;
559
+
560
+ export interface GenerateUserMessage {
561
+ user?: UserSource;
562
+ userPrompt: string;
563
+ ephemeralUserPrompt?: string;
564
+ displayPrompt?: string;
565
+ files?: string[];
566
+ includeBaseFiles?: boolean;
567
+ skipSearch?: boolean;
568
+ attachments?: Attachment[];
569
+ debugMode?: boolean;
570
+ logsCheckpoint?: boolean;
571
+ dropAbortedPrompt?: boolean;
572
+ }
573
+
574
+ export interface UserInput {
575
+ userMessage: GenerateUserMessage | undefined;
576
+ userPrompt: string;
577
+ attachments: Attachment[];
578
+ files: ProjectFile[];
579
+ searchResponse: CodebaseSearchResponse | null;
580
+ rerankFiles?: number;
581
+ mostRelevantFile: string | null;
582
+ toolResults: ContentMessageItemToolResult[];
583
+ role: "user" | "agent";
584
+ }
585
+
586
+ export interface CodegenTurn {
587
+ state: "running" | "done" | "error" | "aborted" | "reverted";
588
+ unixTime: number;
589
+ completionId: string;
590
+ title: string;
591
+ nextUrl: string | undefined;
592
+ user: UserSource;
593
+ actions: ActionItem[];
594
+ sentiment: "positive" | "negative" | "undo" | undefined;
595
+ applyResults: ApplyActionsResult[];
596
+ userMessage: GenerateUserMessage | undefined;
597
+ beforeCommit: string | undefined;
598
+ afterCommit: string | undefined;
599
+ }
600
+
601
+ export interface GetSessionTurnsResult {
602
+ turns: CodegenTurn[];
603
+ sessionId: string;
604
+ initialUrl: string | undefined;
605
+ beforeCommit: string | undefined;
606
+ title: string | undefined;
607
+ createdUnixTime: number | undefined;
608
+ updatedUnixTime: number | undefined;
609
+ }
610
+
611
+ export interface CodegenFeedback {
612
+ id: string;
613
+ feedbackText?: string;
614
+ feedbackSentiment?: string;
615
+ framework?: string;
616
+ acceptedLines?: number;
617
+ afterCommit?: string;
618
+ }
619
+
620
+ export interface CodegenSetLastCompletion {
621
+ sessionId: string;
622
+ lastCompletionId: string | undefined;
623
+ }
624
+
625
+ export interface GenerateCodeEventDone {
626
+ type: "done";
627
+ unixTime: number;
628
+ stopReason: CompletionStopReason;
629
+ id: string;
630
+ actionTitle: string;
631
+ content?: string;
632
+ needsPagination: boolean;
633
+ actions?: ActionItem[];
634
+ suggestions: PromptSuggestion[];
635
+ usage?: CodegenUsage;
636
+ messageIndex: number;
637
+ sessionUsage: number;
638
+ nextUrl: string;
639
+ }
640
+
641
+ export interface GenerateCodeEventError {
642
+ type: "error";
643
+ stopReason: "error" | "limit";
644
+ id: string;
645
+ message: string;
646
+ usage?: CodegenUsage;
647
+ }
648
+ export interface GenerateCodeEventPagination {
649
+ type: "pagination";
650
+ pop: number;
651
+ page: number;
652
+ id: string;
653
+ }
654
+
655
+ export interface GenerateCodeEventContinue {
656
+ type: "continue";
657
+ id: string;
658
+ nextUrl: string;
659
+ }
660
+
661
+ export interface GenerateCodeEventDelta {
662
+ type: "delta";
663
+ content: string;
664
+ }
665
+
666
+ export interface GenerateCodeEventPing {
667
+ type: "ping";
668
+ }
669
+
670
+ export interface GenerateCodeEventUser {
671
+ type: "user";
672
+ id: string;
673
+ displayPrompt: string | undefined;
674
+ user: UserSource;
675
+ /** @deprecated */
676
+ role: "user" | "agent";
677
+ }
678
+
679
+ export type GenerateCodeEvent =
680
+ | ActionItem
681
+ | GenerateCodeEventDone
682
+ | GenerateCodeEventContinue
683
+ | GenerateCodeEventPagination
684
+ | GenerateCodeEventDelta
685
+ | GenerateCodeEventError
686
+ | GenerateCodeEventPing
687
+ | GenerateCodeEventUser;