@bubblelab/shared-schemas 0.1.8 → 0.1.9

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.
Files changed (47) hide show
  1. package/dist/ai-models.d.ts +4 -0
  2. package/dist/ai-models.d.ts.map +1 -0
  3. package/dist/ai-models.js +20 -0
  4. package/dist/ai-models.js.map +1 -0
  5. package/dist/bubble-definition-schema.d.ts +127 -19
  6. package/dist/bubble-definition-schema.d.ts.map +1 -1
  7. package/dist/bubble-definition-schema.js +7 -0
  8. package/dist/bubble-definition-schema.js.map +1 -1
  9. package/dist/bubbleflow-execution-schema.d.ts +99 -47
  10. package/dist/bubbleflow-execution-schema.d.ts.map +1 -1
  11. package/dist/bubbleflow-schema.d.ts +388 -119
  12. package/dist/bubbleflow-schema.d.ts.map +1 -1
  13. package/dist/bubbleflow-schema.js +19 -0
  14. package/dist/bubbleflow-schema.js.map +1 -1
  15. package/dist/credential-schema.d.ts +46 -46
  16. package/dist/credential-schema.d.ts.map +1 -1
  17. package/dist/credential-schema.js +7 -0
  18. package/dist/credential-schema.js.map +1 -1
  19. package/dist/cron-utils.d.ts +47 -0
  20. package/dist/cron-utils.d.ts.map +1 -0
  21. package/dist/cron-utils.js +228 -0
  22. package/dist/cron-utils.js.map +1 -0
  23. package/dist/general-chat.d.ts +81 -0
  24. package/dist/general-chat.d.ts.map +1 -0
  25. package/dist/general-chat.js +58 -0
  26. package/dist/general-chat.js.map +1 -0
  27. package/dist/generate-bubbleflow-schema.d.ts +106 -54
  28. package/dist/generate-bubbleflow-schema.d.ts.map +1 -1
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/milk-tea.d.ts +108 -0
  34. package/dist/milk-tea.d.ts.map +1 -0
  35. package/dist/milk-tea.js +74 -0
  36. package/dist/milk-tea.js.map +1 -0
  37. package/dist/pearl.d.ts +276 -0
  38. package/dist/pearl.d.ts.map +1 -0
  39. package/dist/pearl.js +75 -0
  40. package/dist/pearl.js.map +1 -0
  41. package/dist/streaming-events.d.ts +70 -0
  42. package/dist/streaming-events.d.ts.map +1 -1
  43. package/dist/types.d.ts +2 -1
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/types.js +2 -0
  46. package/dist/types.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Utility functions for parsing and working with cron expressions
3
+ * Supports standard 5-field cron format: minute hour day month day-of-week
4
+ */
5
+ /**
6
+ * Parse a cron expression string into its components
7
+ * @param cronString - Cron expression (e.g., "0 0 * * *")
8
+ * @returns Parsed cron expression object
9
+ */
10
+ export function parseCronExpression(cronString) {
11
+ const parts = cronString.trim().split(/\s+/);
12
+ if (parts.length !== 5) {
13
+ throw new Error(`Invalid cron expression: expected 5 fields, got ${parts.length}`);
14
+ }
15
+ const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;
16
+ return {
17
+ minute,
18
+ hour,
19
+ dayOfMonth,
20
+ month,
21
+ dayOfWeek,
22
+ original: cronString,
23
+ };
24
+ }
25
+ /**
26
+ * Validate a cron expression
27
+ * @param cronString - Cron expression to validate
28
+ * @returns Object with validation result
29
+ */
30
+ export function validateCronExpression(cronString) {
31
+ try {
32
+ const expr = parseCronExpression(cronString);
33
+ // Validate each field
34
+ const validations = [
35
+ validateCronField(expr.minute, 0, 59, 'minute'),
36
+ validateCronField(expr.hour, 0, 23, 'hour'),
37
+ validateCronField(expr.dayOfMonth, 1, 31, 'day of month'),
38
+ validateCronField(expr.month, 1, 12, 'month'),
39
+ validateCronField(expr.dayOfWeek, 0, 6, 'day of week'),
40
+ ];
41
+ for (const validation of validations) {
42
+ if (!validation.valid) {
43
+ return validation;
44
+ }
45
+ }
46
+ return { valid: true };
47
+ }
48
+ catch (error) {
49
+ return {
50
+ valid: false,
51
+ error: error instanceof Error ? error.message : 'Invalid cron expression',
52
+ };
53
+ }
54
+ }
55
+ /**
56
+ * Validate a single cron field
57
+ */
58
+ function validateCronField(field, min, max, fieldName) {
59
+ // Wildcard
60
+ if (field === '*')
61
+ return { valid: true };
62
+ // Step values (*/n)
63
+ if (field.startsWith('*/')) {
64
+ const step = parseInt(field.substring(2), 10);
65
+ if (isNaN(step) || step <= 0) {
66
+ return {
67
+ valid: false,
68
+ error: `Invalid step value in ${fieldName}: ${field}`,
69
+ };
70
+ }
71
+ return { valid: true };
72
+ }
73
+ // Ranges (n-m)
74
+ if (field.includes('-')) {
75
+ const [start, end] = field.split('-').map((v) => parseInt(v, 10));
76
+ if (isNaN(start) || isNaN(end) || start < min || end > max || start > end) {
77
+ return {
78
+ valid: false,
79
+ error: `Invalid range in ${fieldName}: ${field} (must be ${min}-${max})`,
80
+ };
81
+ }
82
+ return { valid: true };
83
+ }
84
+ // Lists (n,m,o)
85
+ if (field.includes(',')) {
86
+ const values = field.split(',').map((v) => parseInt(v.trim(), 10));
87
+ for (const val of values) {
88
+ if (isNaN(val) || val < min || val > max) {
89
+ return {
90
+ valid: false,
91
+ error: `Invalid value in ${fieldName} list: ${val} (must be ${min}-${max})`,
92
+ };
93
+ }
94
+ }
95
+ return { valid: true };
96
+ }
97
+ // Single value
98
+ const value = parseInt(field, 10);
99
+ if (isNaN(value) || value < min || value > max) {
100
+ return {
101
+ valid: false,
102
+ error: `Invalid ${fieldName}: ${field} (must be ${min}-${max})`,
103
+ };
104
+ }
105
+ return { valid: true };
106
+ }
107
+ /**
108
+ * Generate a human-readable description of a cron expression
109
+ * @param cronString - Cron expression to describe
110
+ * @returns Human-readable description
111
+ */
112
+ export function describeCronExpression(cronString) {
113
+ try {
114
+ const expr = parseCronExpression(cronString);
115
+ // Common patterns
116
+ if (cronString === '* * * * *')
117
+ return 'Every minute';
118
+ if (cronString === '0 * * * *')
119
+ return 'Every hour';
120
+ if (cronString === '0 0 * * *')
121
+ return 'Daily at midnight';
122
+ if (cronString === '0 0 * * 0')
123
+ return 'Weekly on Sunday at midnight';
124
+ if (cronString === '0 0 1 * *')
125
+ return 'Monthly on the 1st at midnight';
126
+ if (cronString === '0 0 1 1 *')
127
+ return 'Yearly on January 1st at midnight';
128
+ // Step patterns
129
+ if (expr.minute.startsWith('*/')) {
130
+ const step = expr.minute.substring(2);
131
+ return `Every ${step} minute${step === '1' ? '' : 's'}`;
132
+ }
133
+ if (expr.hour.startsWith('*/') && expr.minute === '0') {
134
+ const step = expr.hour.substring(2);
135
+ return `Every ${step} hour${step === '1' ? '' : 's'}`;
136
+ }
137
+ // Weekday patterns
138
+ if (expr.dayOfWeek === '1-5' && expr.hour === '9' && expr.minute === '0') {
139
+ return 'Every weekday at 9:00 AM';
140
+ }
141
+ // Build description from parts
142
+ let description = 'At ';
143
+ // Time
144
+ if (expr.minute !== '*' && expr.hour !== '*') {
145
+ const hour = parseInt(expr.hour, 10);
146
+ const minute = parseInt(expr.minute, 10);
147
+ const ampm = hour >= 12 ? 'PM' : 'AM';
148
+ const hour12 = hour % 12 || 12;
149
+ description += `${hour12}:${minute.toString().padStart(2, '0')} ${ampm}`;
150
+ }
151
+ else if (expr.minute !== '*') {
152
+ description += `minute ${expr.minute}`;
153
+ }
154
+ else if (expr.hour !== '*') {
155
+ description += `hour ${expr.hour}`;
156
+ }
157
+ // Day
158
+ if (expr.dayOfMonth !== '*') {
159
+ description += ` on day ${expr.dayOfMonth}`;
160
+ }
161
+ if (expr.dayOfWeek !== '*') {
162
+ const days = [
163
+ 'Sunday',
164
+ 'Monday',
165
+ 'Tuesday',
166
+ 'Wednesday',
167
+ 'Thursday',
168
+ 'Friday',
169
+ 'Saturday',
170
+ ];
171
+ if (expr.dayOfWeek.includes('-')) {
172
+ const [start, end] = expr.dayOfWeek
173
+ .split('-')
174
+ .map((v) => parseInt(v, 10));
175
+ description += ` on ${days[start]} through ${days[end]}`;
176
+ }
177
+ else {
178
+ const day = parseInt(expr.dayOfWeek, 10);
179
+ description += ` on ${days[day]}`;
180
+ }
181
+ }
182
+ // Month
183
+ if (expr.month !== '*') {
184
+ const months = [
185
+ 'January',
186
+ 'February',
187
+ 'March',
188
+ 'April',
189
+ 'May',
190
+ 'June',
191
+ 'July',
192
+ 'August',
193
+ 'September',
194
+ 'October',
195
+ 'November',
196
+ 'December',
197
+ ];
198
+ const month = parseInt(expr.month, 10);
199
+ description += ` in ${months[month - 1]}`;
200
+ }
201
+ return description;
202
+ }
203
+ catch (error) {
204
+ return 'Invalid cron expression';
205
+ }
206
+ }
207
+ /**
208
+ * Get schedule information for a cron expression
209
+ * @param cronString - Cron expression
210
+ * @returns Schedule information including description and validation status
211
+ */
212
+ export function getCronScheduleInfo(cronString) {
213
+ const validation = validateCronExpression(cronString);
214
+ if (!validation.valid) {
215
+ return {
216
+ expression: parseCronExpression(cronString.split(/\s+/).length === 5 ? cronString : '0 0 * * *'),
217
+ description: 'Invalid cron expression',
218
+ isValid: false,
219
+ error: validation.error,
220
+ };
221
+ }
222
+ return {
223
+ expression: parseCronExpression(cronString),
224
+ description: describeCronExpression(cronString),
225
+ isValid: true,
226
+ };
227
+ }
228
+ //# sourceMappingURL=cron-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-utils.js","sourceRoot":"","sources":["../src/cron-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Request schema for General Chat agent
4
+ * General Chat helps users build complete workflows without requiring specific bubbles
5
+ */
6
+ export declare const GeneralChatRequestSchema: z.ZodObject<{
7
+ userRequest: z.ZodString;
8
+ currentCode: z.ZodOptional<z.ZodString>;
9
+ userName: z.ZodString;
10
+ conversationHistory: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
11
+ role: z.ZodEnum<["user", "assistant"]>;
12
+ content: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ role: "user" | "assistant";
15
+ content: string;
16
+ }, {
17
+ role: "user" | "assistant";
18
+ content: string;
19
+ }>, "many">>>;
20
+ model: z.ZodDefault<z.ZodEnum<["openai/gpt-5", "openai/gpt-5-mini", "openai/gpt-o4-mini", "openai/gpt-4o", "google/gemini-2.5-pro", "google/gemini-2.5-flash", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash-image-preview", "anthropic/claude-sonnet-4-5-20250929", "openrouter/x-ai/grok-code-fast-1", "openrouter/z-ai/glm-4.5-air"]>>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ userRequest: string;
23
+ userName: string;
24
+ conversationHistory: {
25
+ role: "user" | "assistant";
26
+ content: string;
27
+ }[];
28
+ model: "openai/gpt-5" | "openai/gpt-5-mini" | "openai/gpt-o4-mini" | "openai/gpt-4o" | "google/gemini-2.5-pro" | "google/gemini-2.5-flash" | "google/gemini-2.5-flash-lite" | "google/gemini-2.5-flash-image-preview" | "anthropic/claude-sonnet-4-5-20250929" | "openrouter/x-ai/grok-code-fast-1" | "openrouter/z-ai/glm-4.5-air";
29
+ currentCode?: string | undefined;
30
+ }, {
31
+ userRequest: string;
32
+ userName: string;
33
+ currentCode?: string | undefined;
34
+ conversationHistory?: {
35
+ role: "user" | "assistant";
36
+ content: string;
37
+ }[] | undefined;
38
+ model?: "openai/gpt-5" | "openai/gpt-5-mini" | "openai/gpt-o4-mini" | "openai/gpt-4o" | "google/gemini-2.5-pro" | "google/gemini-2.5-flash" | "google/gemini-2.5-flash-lite" | "google/gemini-2.5-flash-image-preview" | "anthropic/claude-sonnet-4-5-20250929" | "openrouter/x-ai/grok-code-fast-1" | "openrouter/z-ai/glm-4.5-air" | undefined;
39
+ }>;
40
+ /**
41
+ * Response schema for General Chat agent
42
+ */
43
+ export declare const GeneralChatResponseSchema: z.ZodObject<{
44
+ type: z.ZodEnum<["code", "question", "reject"]>;
45
+ message: z.ZodString;
46
+ snippet: z.ZodOptional<z.ZodString>;
47
+ success: z.ZodBoolean;
48
+ error: z.ZodOptional<z.ZodString>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ message: string;
51
+ type: "code" | "question" | "reject";
52
+ success: boolean;
53
+ snippet?: string | undefined;
54
+ error?: string | undefined;
55
+ }, {
56
+ message: string;
57
+ type: "code" | "question" | "reject";
58
+ success: boolean;
59
+ snippet?: string | undefined;
60
+ error?: string | undefined;
61
+ }>;
62
+ /**
63
+ * Internal agent response format (JSON mode output from AI)
64
+ */
65
+ export declare const GeneralChatAgentOutputSchema: z.ZodObject<{
66
+ type: z.ZodEnum<["code", "question", "reject"]>;
67
+ message: z.ZodString;
68
+ snippet: z.ZodOptional<z.ZodString>;
69
+ }, "strip", z.ZodTypeAny, {
70
+ message: string;
71
+ type: "code" | "question" | "reject";
72
+ snippet?: string | undefined;
73
+ }, {
74
+ message: string;
75
+ type: "code" | "question" | "reject";
76
+ snippet?: string | undefined;
77
+ }>;
78
+ export type GeneralChatRequest = z.infer<typeof GeneralChatRequestSchema>;
79
+ export type GeneralChatResponse = z.infer<typeof GeneralChatResponseSchema>;
80
+ export type GeneralChatAgentOutput = z.infer<typeof GeneralChatAgentOutputSchema>;
81
+ //# sourceMappingURL=general-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"general-chat.d.ts","sourceRoot":"","sources":["../src/general-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBnC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;EA0BpC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;EAIvC,CAAC;AAGH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC1C,OAAO,4BAA4B,CACpC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ import { AvailableModels } from './ai-models.js';
3
+ // Reuse the ConversationMessageSchema from milk-tea to avoid duplication
4
+ const ConversationMessageSchema = z.object({
5
+ role: z.enum(['user', 'assistant']),
6
+ content: z.string(),
7
+ });
8
+ /**
9
+ * Request schema for General Chat agent
10
+ * General Chat helps users build complete workflows without requiring specific bubbles
11
+ */
12
+ export const GeneralChatRequestSchema = z.object({
13
+ userRequest: z
14
+ .string()
15
+ .min(1, 'User request is required')
16
+ .describe('The user request or question about building a workflow'),
17
+ currentCode: z
18
+ .string()
19
+ .optional()
20
+ .describe('The current workflow code for context and modification'),
21
+ userName: z.string().describe('Name of the user making the request'),
22
+ conversationHistory: z
23
+ .array(ConversationMessageSchema)
24
+ .optional()
25
+ .default([])
26
+ .describe('Previous conversation messages for multi-turn interactions (frontend manages state)'),
27
+ model: AvailableModels.default('google/gemini-2.5-pro').describe('AI model to use for General Chat agent'),
28
+ });
29
+ /**
30
+ * Response schema for General Chat agent
31
+ */
32
+ export const GeneralChatResponseSchema = z.object({
33
+ type: z
34
+ .enum(['code', 'question', 'reject'])
35
+ .describe('Type of response: code (generated workflow), question (needs clarification), reject (infeasible request)'),
36
+ message: z
37
+ .string()
38
+ .describe('Human-readable message: explanation for code, question text, or rejection reason'),
39
+ snippet: z
40
+ .string()
41
+ .optional()
42
+ .describe('Generated TypeScript code for complete workflow (only present when type is "code")'),
43
+ success: z.boolean().describe('Whether the operation completed successfully'),
44
+ error: z
45
+ .string()
46
+ .optional()
47
+ .describe('Error message if the operation failed'),
48
+ });
49
+ /**
50
+ * Internal agent response format (JSON mode output from AI)
51
+ */
52
+ export const GeneralChatAgentOutputSchema = z.object({
53
+ type: z.enum(['code', 'question', 'reject']),
54
+ message: z.string(),
55
+ snippet: z.string().optional(),
56
+ });
57
+ // Note: ConversationMessage type is exported from milk-tea.ts to avoid duplication
58
+ //# sourceMappingURL=general-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"general-chat.js","sourceRoot":"","sources":["../src/general-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,yEAAyE;AACzE,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAClC,QAAQ,CAAC,wDAAwD,CAAC;IAErE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;IAErE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAEpE,mBAAmB,EAAE,CAAC;SACnB,KAAK,CAAC,yBAAyB,CAAC;SAChC,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,qFAAqF,CACtF;IAEH,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAC9D,wCAAwC,CACzC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;SACpC,QAAQ,CACP,0GAA0G,CAC3G;IAEH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CACP,kFAAkF,CACnF;IAEH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,oFAAoF,CACrF;IAEH,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAE7E,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;CACrD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAQH,mFAAmF"}