@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.
- package/dist/ai-models.d.ts +4 -0
- package/dist/ai-models.d.ts.map +1 -0
- package/dist/ai-models.js +20 -0
- package/dist/ai-models.js.map +1 -0
- package/dist/bubble-definition-schema.d.ts +127 -19
- package/dist/bubble-definition-schema.d.ts.map +1 -1
- package/dist/bubble-definition-schema.js +7 -0
- package/dist/bubble-definition-schema.js.map +1 -1
- package/dist/bubbleflow-execution-schema.d.ts +99 -47
- package/dist/bubbleflow-execution-schema.d.ts.map +1 -1
- package/dist/bubbleflow-schema.d.ts +388 -119
- package/dist/bubbleflow-schema.d.ts.map +1 -1
- package/dist/bubbleflow-schema.js +19 -0
- package/dist/bubbleflow-schema.js.map +1 -1
- package/dist/credential-schema.d.ts +46 -46
- package/dist/credential-schema.d.ts.map +1 -1
- package/dist/credential-schema.js +7 -0
- package/dist/credential-schema.js.map +1 -1
- package/dist/cron-utils.d.ts +47 -0
- package/dist/cron-utils.d.ts.map +1 -0
- package/dist/cron-utils.js +228 -0
- package/dist/cron-utils.js.map +1 -0
- package/dist/general-chat.d.ts +81 -0
- package/dist/general-chat.d.ts.map +1 -0
- package/dist/general-chat.js +58 -0
- package/dist/general-chat.js.map +1 -0
- package/dist/generate-bubbleflow-schema.d.ts +106 -54
- package/dist/generate-bubbleflow-schema.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/milk-tea.d.ts +108 -0
- package/dist/milk-tea.d.ts.map +1 -0
- package/dist/milk-tea.js +74 -0
- package/dist/milk-tea.js.map +1 -0
- package/dist/pearl.d.ts +276 -0
- package/dist/pearl.d.ts.map +1 -0
- package/dist/pearl.js +75 -0
- package/dist/pearl.js.map +1 -0
- package/dist/streaming-events.d.ts +70 -0
- package/dist/streaming-events.d.ts.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- 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"}
|