@bubblelab/bubble-core 0.1.8 → 0.1.10
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/bubble-bundle.d.ts +333 -1438
- package/dist/bubble-factory.d.ts.map +1 -1
- package/dist/bubble-factory.js +64 -28
- package/dist/bubble-factory.js.map +1 -1
- package/dist/bubble-flow/bubble-flow-class.d.ts +17 -1
- package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -1
- package/dist/bubble-flow/bubble-flow-class.js +16 -0
- package/dist/bubble-flow/bubble-flow-class.js.map +1 -1
- package/dist/bubble-flow/sample/data-analyst-flow.d.ts +1 -1
- package/dist/bubble-flow/sample/data-analyst-flow.d.ts.map +1 -1
- package/dist/bubble-flow/sample/error-ts.d.ts +1 -1
- package/dist/bubble-flow/sample/error-ts.d.ts.map +1 -1
- package/dist/bubble-flow/sample/sanitytest.d.ts +1 -1
- package/dist/bubble-flow/sample/sanitytest.d.ts.map +1 -1
- package/dist/bubble-flow/sample/simple-webhook-2.d.ts +1 -1
- package/dist/bubble-flow/sample/simple-webhook-2.d.ts.map +1 -1
- package/dist/bubble-flow/sample/simple-webhook.d.ts +1 -1
- package/dist/bubble-flow/sample/simple-webhook.d.ts.map +1 -1
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts +1 -1
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts.map +1 -1
- package/dist/bubble-flow/sample/slack-v0.1.d.ts +1 -1
- package/dist/bubble-flow/sample/slack-v0.1.d.ts.map +1 -1
- package/dist/bubble-flow/sample/slackagenttest.d.ts +1 -1
- package/dist/bubble-flow/sample/slackagenttest.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/ai-agent.d.ts +115 -97
- package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/ai-agent.js +276 -96
- package/dist/bubbles/service-bubble/ai-agent.js.map +1 -1
- package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +805 -0
- package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.js +131 -0
- package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +485 -0
- package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.js +176 -0
- package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +302 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.js +138 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +642 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.js +123 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +184 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.js +145 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.d.ts +52 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.js +29 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-transcript-scraper.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +1999 -0
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js +54 -0
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/apify.d.ts +143 -0
- package/dist/bubbles/service-bubble/apify/apify.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/apify.js +276 -0
- package/dist/bubbles/service-bubble/apify/apify.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/index.d.ts +6 -0
- package/dist/bubbles/service-bubble/apify/index.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/index.js +6 -0
- package/dist/bubbles/service-bubble/apify/index.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/types.d.ts +7 -0
- package/dist/bubbles/service-bubble/apify/types.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/types.js +5 -0
- package/dist/bubbles/service-bubble/apify/types.js.map +1 -0
- package/dist/bubbles/service-bubble/gmail.d.ts +626 -132
- package/dist/bubbles/service-bubble/gmail.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/gmail.js +435 -7
- package/dist/bubbles/service-bubble/gmail.js.map +1 -1
- package/dist/bubbles/service-bubble/google-calendar.d.ts +36 -36
- package/dist/bubbles/service-bubble/google-drive.d.ts +233 -4
- package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/google-drive.js +65 -75
- package/dist/bubbles/service-bubble/google-drive.js.map +1 -1
- package/dist/bubbles/service-bubble/google-sheets.d.ts +52 -52
- package/dist/bubbles/service-bubble/hello-world.js +2 -2
- package/dist/bubbles/service-bubble/hello-world.js.map +1 -1
- package/dist/bubbles/service-bubble/http.d.ts +6 -6
- package/dist/bubbles/service-bubble/postgresql.d.ts +4 -4
- package/dist/bubbles/service-bubble/resend.d.ts +5 -5
- package/dist/bubbles/service-bubble/resend.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/resend.js +16 -5
- package/dist/bubbles/service-bubble/resend.js.map +1 -1
- package/dist/bubbles/service-bubble/slack.d.ts +18 -18
- package/dist/bubbles/service-bubble/storage.d.ts +4 -4
- package/dist/bubbles/service-bubble/storage.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/storage.js +16 -5
- package/dist/bubbles/service-bubble/storage.js.map +1 -1
- package/dist/bubbles/service-bubble/x-twitter.d.ts +814 -0
- package/dist/bubbles/service-bubble/x-twitter.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/x-twitter.js +445 -0
- package/dist/bubbles/service-bubble/x-twitter.js.map +1 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +20 -20
- package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +16 -16
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +14 -1
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +101 -47
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/instagram-tool.d.ts +435 -0
- package/dist/bubbles/tool-bubble/instagram-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/instagram-tool.js +474 -0
- package/dist/bubbles/tool-bubble/instagram-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +2136 -0
- package/dist/bubbles/tool-bubble/linkedin-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/linkedin-tool.js +608 -0
- package/dist/bubbles/tool-bubble/linkedin-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +69 -64
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.js +97 -22
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +6 -6
- package/dist/bubbles/tool-bubble/research-agent-tool.js +5 -5
- package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/tool-template.d.ts +8 -8
- package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +14 -14
- package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +4 -4
- package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +28 -28
- package/dist/bubbles/tool-bubble/web-scrape-tool.js +1 -1
- package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/web-search-tool.d.ts +5 -4
- package/dist/bubbles/tool-bubble/web-search-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/web-search-tool.js +6 -2
- package/dist/bubbles/tool-bubble/web-search-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/youtube-tool.d.ts +394 -0
- package/dist/bubbles/tool-bubble/youtube-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/youtube-tool.js +352 -0
- package/dist/bubbles/tool-bubble/youtube-tool.js.map +1 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts +47 -36
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts.map +1 -1
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js +96 -65
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js.map +1 -1
- package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +38 -38
- package/dist/bubbles/workflow-bubble/generate-document.workflow.js +1 -1
- package/dist/bubbles/workflow-bubble/generate-document.workflow.js.map +1 -1
- package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +42 -42
- package/dist/bubbles/workflow-bubble/parse-document.workflow.js +1 -1
- package/dist/bubbles/workflow-bubble/parse-document.workflow.js.map +1 -1
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +22 -22
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts.map +1 -1
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js +1 -4
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js.map +1 -1
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +60 -60
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts.map +1 -1
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js +2 -2
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +20 -20
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js +1 -1
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +66 -66
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.js +1 -1
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.js.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +18 -18
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js +1 -2
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js.map +1 -1
- package/dist/bubbles.json +489 -0
- package/dist/index.d.ts +16 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/logging/BubbleLogger.d.ts +11 -0
- package/dist/logging/BubbleLogger.d.ts.map +1 -1
- package/dist/logging/BubbleLogger.js +87 -33
- package/dist/logging/BubbleLogger.js.map +1 -1
- package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -1
- package/dist/logging/StreamingBubbleLogger.js +23 -16
- package/dist/logging/StreamingBubbleLogger.js.map +1 -1
- package/dist/test-gm.d.ts +10 -0
- package/dist/test-gm.d.ts.map +1 -0
- package/dist/test-gm.js +95 -0
- package/dist/test-gm.js.map +1 -0
- package/dist/types/available-tools.d.ts +1 -1
- package/dist/types/available-tools.d.ts.map +1 -1
- package/dist/types/available-tools.js +2 -0
- package/dist/types/available-tools.js.map +1 -1
- package/dist/types/base-bubble-class.d.ts +6 -1
- package/dist/types/base-bubble-class.d.ts.map +1 -1
- package/dist/types/base-bubble-class.js +47 -24
- package/dist/types/base-bubble-class.js.map +1 -1
- package/dist/types/bubble.d.ts +3 -13
- package/dist/types/bubble.d.ts.map +1 -1
- package/dist/types/bubble.js +1 -1
- package/dist/types/bubble.js.map +1 -1
- package/dist/types/service-bubble-class.d.ts +5 -5
- package/dist/types/service-bubble-class.d.ts.map +1 -1
- package/dist/types/service-bubble-class.js +6 -7
- package/dist/types/service-bubble-class.js.map +1 -1
- package/dist/types/tool-bubble-class.d.ts +1 -1
- package/dist/types/tool-bubble-class.d.ts.map +1 -1
- package/dist/types/tool-bubble-class.js +9 -3
- package/dist/types/tool-bubble-class.js.map +1 -1
- package/dist/types/workflow-bubble-class.d.ts +1 -1
- package/dist/types/workflow-bubble-class.d.ts.map +1 -1
- package/dist/utils/agent-formatter.d.ts +17 -0
- package/dist/utils/agent-formatter.d.ts.map +1 -0
- package/dist/utils/agent-formatter.js +139 -0
- package/dist/utils/agent-formatter.js.map +1 -0
- package/dist/utils/bubbleflow-validation.d.ts.map +1 -1
- package/dist/utils/bubbleflow-validation.js +89 -32
- package/dist/utils/bubbleflow-validation.js.map +1 -1
- package/dist/utils/error-sanitizer.d.ts +12 -0
- package/dist/utils/error-sanitizer.d.ts.map +1 -0
- package/dist/utils/error-sanitizer.js +77 -0
- package/dist/utils/error-sanitizer.js.map +1 -0
- package/dist/utils/json-parsing.d.ts +1 -0
- package/dist/utils/json-parsing.d.ts.map +1 -1
- package/dist/utils/json-parsing.js +205 -32
- package/dist/utils/json-parsing.js.map +1 -1
- package/package.json +6 -5
- package/dist/bubble-trigger/index.d.ts +0 -2
- package/dist/bubble-trigger/index.d.ts.map +0 -1
- package/dist/bubble-trigger/index.js +0 -2
- package/dist/bubble-trigger/index.js.map +0 -1
- package/dist/bubble-trigger/types.d.ts +0 -87
- package/dist/bubble-trigger/types.d.ts.map +0 -1
- package/dist/bubble-trigger/types.js +0 -14
- package/dist/bubble-trigger/types.js.map +0 -1
- package/dist/types/ai-models.d.ts +0 -4
- package/dist/types/ai-models.d.ts.map +0 -1
- package/dist/types/ai-models.js +0 -16
- package/dist/types/ai-models.js.map +0 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { parseJsonWithFallbacks } from './json-parsing';
|
|
2
|
+
/**
|
|
3
|
+
* Extract and stream thinking tokens from different model providers
|
|
4
|
+
*/
|
|
5
|
+
export function extractAndStreamThinkingTokens(output) {
|
|
6
|
+
try {
|
|
7
|
+
// Cast output to any to avoid TypeScript issues
|
|
8
|
+
const outputAny = output;
|
|
9
|
+
// Try multiple paths to find reasoning content
|
|
10
|
+
const possiblePaths = [
|
|
11
|
+
// Path 1: Direct generations
|
|
12
|
+
outputAny.generations?.[0]?.[0]?.message?.additional_kwargs
|
|
13
|
+
?.__raw_response,
|
|
14
|
+
// Path 2: Through kwargs
|
|
15
|
+
outputAny.generations?.[0]?.[0]?.message?.kwargs?.additional_kwargs
|
|
16
|
+
?.__raw_response,
|
|
17
|
+
// Path 3: Direct in message
|
|
18
|
+
outputAny.generations?.[0]?.[0]?.message?.__raw_response,
|
|
19
|
+
// Path 4: Alternative structure
|
|
20
|
+
outputAny.generations?.[0]?.[0]?.additional_kwargs?.__raw_response,
|
|
21
|
+
// Path 5: Deep nested structure
|
|
22
|
+
outputAny.generations?.[0]?.[0]?.message?.additional_kwargs
|
|
23
|
+
?.__raw_response,
|
|
24
|
+
];
|
|
25
|
+
let rawResponse = null;
|
|
26
|
+
for (const path of possiblePaths) {
|
|
27
|
+
if (path) {
|
|
28
|
+
rawResponse = path;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (rawResponse) {
|
|
33
|
+
if (rawResponse.choices && Array.isArray(rawResponse.choices)) {
|
|
34
|
+
for (const choice of rawResponse.choices) {
|
|
35
|
+
if (choice.delta?.reasoning) {
|
|
36
|
+
// Stream thinking tokens for Grok models
|
|
37
|
+
return choice.delta.reasoning;
|
|
38
|
+
}
|
|
39
|
+
// Also check for reasoning in the choice itself (not just delta)
|
|
40
|
+
if (choice.reasoning) {
|
|
41
|
+
return choice.reasoning;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('No choices array found in rawResponse');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log('No rawResponse found in any path');
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.warn('[AIAgent] Error extracting thinking tokens:', error);
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Format final response with special handling for Gemini image models and JSON mode
|
|
61
|
+
*/
|
|
62
|
+
export function formatFinalResponse(response, modelName, jsonMode) {
|
|
63
|
+
let finalResponse = typeof response === 'string' ? response : JSON.stringify(response);
|
|
64
|
+
// If response is an array, look for first parsable JSON in text
|
|
65
|
+
console.log('[AIAgent] Checking if response is an array:', Array.isArray(response));
|
|
66
|
+
console.log('[AIAgent] Response length:', typeof response === 'string' ? response.length : 'N/A (object)');
|
|
67
|
+
if (Array.isArray(response)) {
|
|
68
|
+
for (const item of response) {
|
|
69
|
+
if (item &&
|
|
70
|
+
typeof item === 'object' &&
|
|
71
|
+
'type' in item &&
|
|
72
|
+
item.type === 'text') {
|
|
73
|
+
try {
|
|
74
|
+
const result = parseJsonWithFallbacks(item.text);
|
|
75
|
+
if (result.success) {
|
|
76
|
+
return { response: result.response };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Continue to next item if not valid JSON
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Special handling for Gemini image models that return images in inlineData format
|
|
87
|
+
if (modelName.includes('gemini') && modelName.includes('image')) {
|
|
88
|
+
finalResponse = formatGeminiImageResponse(finalResponse);
|
|
89
|
+
}
|
|
90
|
+
else if (jsonMode && typeof finalResponse === 'string') {
|
|
91
|
+
// Handle JSON mode: use the improved utility function
|
|
92
|
+
const result = parseJsonWithFallbacks(finalResponse);
|
|
93
|
+
if (!result.success) {
|
|
94
|
+
return {
|
|
95
|
+
response: result.response,
|
|
96
|
+
error: `AI Agent failed to generate valid JSON. Post-processing attempted but JSON is still malformed. Original response: ${finalResponse}`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { response: result.response };
|
|
100
|
+
}
|
|
101
|
+
console.log('[AIAgent] Final response length:', typeof finalResponse === 'string' ? finalResponse.length : 'N/A');
|
|
102
|
+
return { response: finalResponse };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Convert Gemini's inlineData format to LangChain-compatible data URI format
|
|
106
|
+
*/
|
|
107
|
+
export function formatGeminiImageResponse(response) {
|
|
108
|
+
if (typeof response !== 'string') {
|
|
109
|
+
return String(response);
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
console.log('[AIAgent] Formatting Gemini image response...');
|
|
113
|
+
// Look for Gemini's inlineData format in the response
|
|
114
|
+
const inlineDataRegex = /\{\s*"inlineData"\s*:\s*\{\s*"mimeType"\s*:\s*"([^"]+)"\s*,\s*"data"\s*:\s*"([^"]+)"\s*\}\s*\}/;
|
|
115
|
+
const match = response.match(inlineDataRegex);
|
|
116
|
+
if (match) {
|
|
117
|
+
const [, mimeType, data] = match;
|
|
118
|
+
const dataUri = `data:${mimeType};base64,${data}`;
|
|
119
|
+
console.log(`[AIAgent] Extracted first data URI from Gemini inlineData: ${mimeType}`);
|
|
120
|
+
return dataUri;
|
|
121
|
+
}
|
|
122
|
+
// Also check for the more complex format with text
|
|
123
|
+
const complexInlineDataRegex = /\{\s*"inlineData"\s*:\s*\{\s*"mimeType"\s*:\s*"([^"]+)"\s*,\s*"data"\s*:\s*"([^"]+)"/;
|
|
124
|
+
const complexMatch = response.match(complexInlineDataRegex);
|
|
125
|
+
if (complexMatch) {
|
|
126
|
+
const [, mimeType, data] = complexMatch;
|
|
127
|
+
const dataUri = `data:${mimeType};base64,${data}`;
|
|
128
|
+
console.log(`[AIAgent] Extracted first data URI from complex Gemini inlineData: ${mimeType}`);
|
|
129
|
+
return dataUri;
|
|
130
|
+
}
|
|
131
|
+
// If no inlineData found, return original response
|
|
132
|
+
return response;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.warn('[AIAgent] Error formatting Gemini image response:', error);
|
|
136
|
+
return response;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=agent-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-formatter.js","sourceRoot":"","sources":["../../src/utils/agent-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bubbleflow-validation.d.ts","sourceRoot":"","sources":["../../src/utils/bubbleflow-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACjD;
|
|
1
|
+
{"version":3,"file":"bubbleflow-validation.d.ts","sourceRoot":"","sources":["../../src/utils/bubbleflow-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACjD;AA+ED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAsF3B"}
|
|
@@ -1,40 +1,88 @@
|
|
|
1
1
|
import * as ts from 'typescript';
|
|
2
2
|
import { parseBubbleFlow } from './bubbleflow-parser.js';
|
|
3
|
+
// Language Service-based validator (persistent across calls for performance)
|
|
4
|
+
let cachedLanguageService = null;
|
|
5
|
+
let cachedCompilerOptions = null;
|
|
6
|
+
const scriptVersions = new Map();
|
|
7
|
+
const scriptSnapshots = new Map();
|
|
8
|
+
function getOrCreateLanguageService() {
|
|
9
|
+
if (cachedLanguageService && cachedCompilerOptions) {
|
|
10
|
+
return cachedLanguageService;
|
|
11
|
+
}
|
|
12
|
+
// Get TypeScript compiler options (similar to bubble-core config)
|
|
13
|
+
// Disable file generation options for runtime validation performance
|
|
14
|
+
const compilerOptions = {
|
|
15
|
+
target: ts.ScriptTarget.ES2022,
|
|
16
|
+
module: ts.ModuleKind.ESNext,
|
|
17
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
18
|
+
esModuleInterop: true,
|
|
19
|
+
allowSyntheticDefaultImports: true,
|
|
20
|
+
strict: true,
|
|
21
|
+
noImplicitAny: false,
|
|
22
|
+
skipLibCheck: true,
|
|
23
|
+
forceConsistentCasingInFileNames: true,
|
|
24
|
+
declaration: false,
|
|
25
|
+
declarationMap: false,
|
|
26
|
+
sourceMap: false,
|
|
27
|
+
incremental: false,
|
|
28
|
+
noUnusedLocals: true,
|
|
29
|
+
noUnusedParameters: true,
|
|
30
|
+
noImplicitReturns: true,
|
|
31
|
+
noFallthroughCasesInSwitch: true,
|
|
32
|
+
resolveJsonModule: true,
|
|
33
|
+
isolatedModules: true,
|
|
34
|
+
};
|
|
35
|
+
// Create Language Service Host with full file system access
|
|
36
|
+
const host = {
|
|
37
|
+
getScriptFileNames: () => Array.from(scriptSnapshots.keys()),
|
|
38
|
+
getScriptVersion: (fileName) => scriptVersions.get(fileName)?.toString() ?? '0',
|
|
39
|
+
getScriptSnapshot: (fileName) => {
|
|
40
|
+
// First check our in-memory snapshots
|
|
41
|
+
const snapshot = scriptSnapshots.get(fileName);
|
|
42
|
+
if (snapshot) {
|
|
43
|
+
return snapshot;
|
|
44
|
+
}
|
|
45
|
+
// Then try to read from file system (for node_modules, etc.)
|
|
46
|
+
if (ts.sys.fileExists(fileName)) {
|
|
47
|
+
const text = ts.sys.readFile(fileName);
|
|
48
|
+
if (text !== undefined) {
|
|
49
|
+
return ts.ScriptSnapshot.fromString(text);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
},
|
|
54
|
+
getCurrentDirectory: () => ts.sys.getCurrentDirectory(),
|
|
55
|
+
getCompilationSettings: () => compilerOptions,
|
|
56
|
+
getDefaultLibFileName: (options) => ts.getDefaultLibFilePath(options),
|
|
57
|
+
fileExists: ts.sys.fileExists,
|
|
58
|
+
readFile: ts.sys.readFile,
|
|
59
|
+
readDirectory: ts.sys.readDirectory,
|
|
60
|
+
directoryExists: ts.sys.directoryExists,
|
|
61
|
+
getDirectories: ts.sys.getDirectories,
|
|
62
|
+
useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames,
|
|
63
|
+
};
|
|
64
|
+
cachedCompilerOptions = compilerOptions;
|
|
65
|
+
cachedLanguageService = ts.createLanguageService(host, ts.createDocumentRegistry());
|
|
66
|
+
return cachedLanguageService;
|
|
67
|
+
}
|
|
3
68
|
export async function validateBubbleFlow(code, bubbleFactory) {
|
|
4
69
|
try {
|
|
5
70
|
// Create a temporary file name for the validation
|
|
6
|
-
const fileName = '
|
|
7
|
-
// Get
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
baseUrl: '.',
|
|
22
|
-
};
|
|
23
|
-
// Create a program with the code
|
|
24
|
-
const sourceFile = ts.createSourceFile(fileName, code, ts.ScriptTarget.ES2022, true);
|
|
25
|
-
// Create program
|
|
26
|
-
const host = ts.createCompilerHost(compilerOptions);
|
|
27
|
-
// Override getSourceFile to return our code
|
|
28
|
-
const originalGetSourceFile = host.getSourceFile;
|
|
29
|
-
host.getSourceFile = (name, languageVersion, onError, shouldCreateNewSourceFile) => {
|
|
30
|
-
if (name === fileName) {
|
|
31
|
-
return sourceFile;
|
|
32
|
-
}
|
|
33
|
-
return originalGetSourceFile.call(host, name, languageVersion, onError, shouldCreateNewSourceFile);
|
|
34
|
-
};
|
|
35
|
-
const program = ts.createProgram([fileName], compilerOptions, host);
|
|
36
|
-
// Get diagnostics
|
|
37
|
-
const diagnostics = ts.getPreEmitDiagnostics(program);
|
|
71
|
+
const fileName = 'virtual-bubble-flow.ts';
|
|
72
|
+
// Get or create the language service
|
|
73
|
+
const languageService = getOrCreateLanguageService();
|
|
74
|
+
// Update script version and snapshot
|
|
75
|
+
const version = (scriptVersions.get(fileName) ?? 0) + 1;
|
|
76
|
+
scriptVersions.set(fileName, version);
|
|
77
|
+
scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(code));
|
|
78
|
+
// Get diagnostics using Language Service
|
|
79
|
+
const syntacticDiagnostics = languageService.getSyntacticDiagnostics(fileName);
|
|
80
|
+
const semanticDiagnostics = languageService.getSemanticDiagnostics(fileName);
|
|
81
|
+
// Filter out TS6133 (unused variables) like the server does
|
|
82
|
+
const diagnostics = [
|
|
83
|
+
...syntacticDiagnostics,
|
|
84
|
+
...semanticDiagnostics,
|
|
85
|
+
].filter((d) => d.code !== 6133);
|
|
38
86
|
if (diagnostics.length > 0) {
|
|
39
87
|
const errors = diagnostics.map((diagnostic) => {
|
|
40
88
|
if (diagnostic.file && diagnostic.start !== undefined) {
|
|
@@ -50,6 +98,15 @@ export async function validateBubbleFlow(code, bubbleFactory) {
|
|
|
50
98
|
};
|
|
51
99
|
}
|
|
52
100
|
// Additional validation: Check if it extends BubbleFlow
|
|
101
|
+
// Get source file from language service for AST analysis
|
|
102
|
+
const program = languageService.getProgram();
|
|
103
|
+
const sourceFile = program?.getSourceFile(fileName);
|
|
104
|
+
if (!sourceFile) {
|
|
105
|
+
return {
|
|
106
|
+
valid: false,
|
|
107
|
+
errors: ['Failed to get source file for validation'],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
53
110
|
const hasValidBubbleFlow = validateBubbleFlowClass(sourceFile);
|
|
54
111
|
if (!hasValidBubbleFlow.valid) {
|
|
55
112
|
return hasValidBubbleFlow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bubbleflow-validation.js","sourceRoot":"","sources":["../../src/utils/bubbleflow-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAUzD,
|
|
1
|
+
{"version":3,"file":"bubbleflow-validation.js","sourceRoot":"","sources":["../../src/utils/bubbleflow-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitizes error messages to remove sensitive credential information
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Sanitizes error stack traces
|
|
6
|
+
*/
|
|
7
|
+
export declare function sanitizeErrorStack(error: Error | undefined): string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Sanitizes error messages
|
|
10
|
+
*/
|
|
11
|
+
export declare function sanitizeErrorMessage(message: string): string;
|
|
12
|
+
//# sourceMappingURL=error-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-sanitizer.d.ts","sourceRoot":"","sources":["../../src/utils/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwFH;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,GAAG,SAAS,GACvB,MAAM,GAAG,SAAS,CAGpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitizes error messages to remove sensitive credential information
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Sanitizes a string to remove credential patterns
|
|
6
|
+
*/
|
|
7
|
+
function sanitizeString(str) {
|
|
8
|
+
if (!str)
|
|
9
|
+
return str;
|
|
10
|
+
let sanitized = str;
|
|
11
|
+
// Common credential field name patterns (case-insensitive)
|
|
12
|
+
const credentialFieldPatterns = [
|
|
13
|
+
'api[_-]?key',
|
|
14
|
+
'access[_-]?key',
|
|
15
|
+
'secret[_-]?key',
|
|
16
|
+
'secret',
|
|
17
|
+
'token',
|
|
18
|
+
'password',
|
|
19
|
+
'passwd',
|
|
20
|
+
'pwd',
|
|
21
|
+
'auth[_-]?token',
|
|
22
|
+
'bearer[_-]?token',
|
|
23
|
+
'account[_-]?id',
|
|
24
|
+
'client[_-]?id',
|
|
25
|
+
'client[_-]?secret',
|
|
26
|
+
'private[_-]?key',
|
|
27
|
+
'public[_-]?key',
|
|
28
|
+
'api[_-]?secret',
|
|
29
|
+
'credential',
|
|
30
|
+
'auth',
|
|
31
|
+
'authentication',
|
|
32
|
+
];
|
|
33
|
+
// Create pattern to match any credential field name
|
|
34
|
+
const credentialPattern = new RegExp(`(${credentialFieldPatterns.join('|')})["\\s]*:["\\s]*(["'])([^"']+)\\2`, 'gi');
|
|
35
|
+
// Replace credential values with [REDACTED]
|
|
36
|
+
sanitized = sanitized.replace(credentialPattern, (match, fieldName, quote, value) => {
|
|
37
|
+
// Only replace if it looks like a credential value (long alphanumeric/hex string)
|
|
38
|
+
if (value.length > 8 && /^[a-zA-Z0-9+/\-=]+$/.test(value)) {
|
|
39
|
+
return `${fieldName}: ${quote}[REDACTED]${quote}`;
|
|
40
|
+
}
|
|
41
|
+
return match;
|
|
42
|
+
});
|
|
43
|
+
// Sanitize entire credentials objects that might be in the error
|
|
44
|
+
// Match: credentials: { ... }
|
|
45
|
+
sanitized = sanitized.replace(/credentials["\s]*:["\s]*\{[^}]*\}/gi, 'credentials: { [REDACTED] }');
|
|
46
|
+
// Sanitize any object literal that contains credential-like keys
|
|
47
|
+
// This catches objects like { CLOUDFLARE_R2_ACCESS_KEY: "...", ... }
|
|
48
|
+
sanitized = sanitized.replace(/\{[^}]*\b(?:API[_-]?KEY|ACCESS[_-]?KEY|SECRET[_-]?KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL)\b[^}]*\}/gi, (match) => {
|
|
49
|
+
// Replace all values in this object that look like credentials
|
|
50
|
+
return match.replace(/([\w_]+)["\s]*:["\s]*(["'])([^"']+)\2/g, (fullMatch, key, quote, value) => {
|
|
51
|
+
// Check if the key looks like a credential field
|
|
52
|
+
const isCredentialKey = credentialFieldPatterns.some((pattern) => new RegExp(pattern, 'i').test(key));
|
|
53
|
+
// Check if the value looks like a credential
|
|
54
|
+
const isCredentialValue = value.length > 8 && /^[a-zA-Z0-9+/\-=]+$/.test(value);
|
|
55
|
+
if (isCredentialKey || isCredentialValue) {
|
|
56
|
+
return `${key}: ${quote}[REDACTED]${quote}`;
|
|
57
|
+
}
|
|
58
|
+
return fullMatch;
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
return sanitized;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Sanitizes error stack traces
|
|
65
|
+
*/
|
|
66
|
+
export function sanitizeErrorStack(error) {
|
|
67
|
+
if (!error || !error.stack)
|
|
68
|
+
return error?.stack;
|
|
69
|
+
return sanitizeString(error.stack);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Sanitizes error messages
|
|
73
|
+
*/
|
|
74
|
+
export function sanitizeErrorMessage(message) {
|
|
75
|
+
return sanitizeString(message);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=error-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-sanitizer.js","sourceRoot":"","sources":["../../src/utils/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IAErB,IAAI,SAAS,GAAG,GAAG,CAAC;IAEpB,2DAA2D;IAC3D,MAAM,uBAAuB,GAAG;QAC9B,aAAa;QACb,gBAAgB;QAChB,gBAAgB;QAChB,QAAQ;QACR,OAAO;QACP,UAAU;QACV,QAAQ;QACR,KAAK;QACL,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;QAChB,eAAe;QACf,mBAAmB;QACnB,iBAAiB;QACjB,gBAAgB;QAChB,gBAAgB;QAChB,YAAY;QACZ,MAAM;QACN,gBAAgB;KACjB,CAAC;IAEF,oDAAoD;IACpD,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAClC,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,EACxE,IAAI,CACL,CAAC;IAEF,4CAA4C;IAC5C,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,iBAAiB,EACjB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACjC,kFAAkF;QAClF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,GAAG,SAAS,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;IAEF,iEAAiE;IACjE,8BAA8B;IAC9B,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,qCAAqC,EACrC,6BAA6B,CAC9B,CAAC;IAEF,iEAAiE;IACjE,qEAAqE;IACrE,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,oGAAoG,EACpG,CAAC,KAAK,EAAE,EAAE;QACR,+DAA+D;QAC/D,OAAO,KAAK,CAAC,OAAO,CAClB,wCAAwC,EACxC,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/B,iDAAiD;YACjD,MAAM,eAAe,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/D,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACnC,CAAC;YAEF,6CAA6C;YAC7C,MAAM,iBAAiB,GACrB,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAExD,IAAI,eAAe,IAAI,iBAAiB,EAAE,CAAC;gBACzC,OAAO,GAAG,GAAG,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;YAC9C,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAwB;IAExB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,KAAK,EAAE,KAAK,CAAC;IAChD,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-parsing.d.ts","sourceRoot":"","sources":["../../src/utils/json-parsing.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"json-parsing.d.ts","sourceRoot":"","sources":["../../src/utils/json-parsing.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6TH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8ChE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA4I1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAsFA"}
|