@bubblelab/bubble-core 0.1.10 → 0.1.11
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 +759 -350
- package/dist/bubble-factory.d.ts.map +1 -1
- package/dist/bubble-factory.js +125 -35
- package/dist/bubble-factory.js.map +1 -1
- package/dist/bubble-flow/bubble-flow-class.d.ts +5 -0
- package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -1
- package/dist/bubble-flow/bubble-flow-class.js +20 -0
- package/dist/bubble-flow/bubble-flow-class.js.map +1 -1
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts.map +1 -1
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.js +6 -3
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.js.map +1 -1
- package/dist/bubbles/service-bubble/agi-inc.d.ts +1121 -0
- package/dist/bubbles/service-bubble/agi-inc.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/agi-inc.js +730 -0
- package/dist/bubbles/service-bubble/agi-inc.js.map +1 -0
- package/dist/bubbles/service-bubble/ai-agent.d.ts +277 -65
- package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/ai-agent.js +533 -399
- package/dist/bubbles/service-bubble/ai-agent.js.map +1 -1
- package/dist/bubbles/service-bubble/airtable.d.ts +1753 -0
- package/dist/bubbles/service-bubble/airtable.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/airtable.js +1173 -0
- package/dist/bubbles/service-bubble/airtable.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.d.ts +240 -0
- package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.js +119 -0
- package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +4 -4
- package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +14 -14
- package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.d.ts +137 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.js +81 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +6 -6
- package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +32 -32
- package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts +488 -0
- package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.js +463 -0
- package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts +262 -0
- package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.js +291 -0
- package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.js.map +1 -0
- package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +12 -12
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +1301 -170
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js +32 -0
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.js.map +1 -1
- package/dist/bubbles/service-bubble/apify/apify.d.ts +162 -17
- package/dist/bubbles/service-bubble/apify/apify.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/apify/apify.js +205 -32
- package/dist/bubbles/service-bubble/apify/apify.js.map +1 -1
- package/dist/bubbles/service-bubble/eleven-labs.d.ts +421 -0
- package/dist/bubbles/service-bubble/eleven-labs.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/eleven-labs.js +479 -0
- package/dist/bubbles/service-bubble/eleven-labs.js.map +1 -0
- package/dist/bubbles/service-bubble/firecrawl.d.ts +37748 -0
- package/dist/bubbles/service-bubble/firecrawl.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/firecrawl.js +1489 -0
- package/dist/bubbles/service-bubble/firecrawl.js.map +1 -0
- package/dist/bubbles/service-bubble/followupboss.d.ts +6822 -0
- package/dist/bubbles/service-bubble/followupboss.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/followupboss.js +1394 -0
- package/dist/bubbles/service-bubble/followupboss.js.map +1 -0
- package/dist/bubbles/service-bubble/github.d.ts +2399 -0
- package/dist/bubbles/service-bubble/github.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/github.js +1052 -0
- package/dist/bubbles/service-bubble/github.js.map +1 -0
- package/dist/bubbles/service-bubble/gmail.d.ts +180 -180
- package/dist/bubbles/service-bubble/google-calendar.d.ts +60 -60
- package/dist/bubbles/service-bubble/google-drive.d.ts +37 -36
- package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/google-drive.js +35 -3
- package/dist/bubbles/service-bubble/google-drive.js.map +1 -1
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts +943 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts +31 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js +184 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.js +401 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.js.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts +1024 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/{google-sheets.js → google-sheets/google-sheets.schema.js} +45 -409
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.js.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.utils.d.ts +38 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.utils.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.utils.js +183 -0
- package/dist/bubbles/service-bubble/google-sheets/google-sheets.utils.js.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets/index.d.ts +4 -0
- package/dist/bubbles/service-bubble/google-sheets/index.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets/index.js +4 -0
- package/dist/bubbles/service-bubble/google-sheets/index.js.map +1 -0
- package/dist/bubbles/service-bubble/hello-world.d.ts +4 -4
- package/dist/bubbles/service-bubble/http.d.ts +4 -4
- package/dist/bubbles/service-bubble/http.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/http.js +7 -1
- package/dist/bubbles/service-bubble/http.js.map +1 -1
- package/dist/bubbles/service-bubble/insforge-db.d.ts +140 -0
- package/dist/bubbles/service-bubble/insforge-db.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/insforge-db.js +260 -0
- package/dist/bubbles/service-bubble/insforge-db.js.map +1 -0
- package/dist/bubbles/service-bubble/notion/index.d.ts +3 -0
- package/dist/bubbles/service-bubble/notion/index.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/notion/index.js +3 -0
- package/dist/bubbles/service-bubble/notion/index.js.map +1 -0
- package/dist/bubbles/service-bubble/notion/notion.d.ts +35405 -0
- package/dist/bubbles/service-bubble/notion/notion.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/notion/notion.js +1492 -0
- package/dist/bubbles/service-bubble/notion/notion.js.map +1 -0
- package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +1148 -0
- package/dist/bubbles/service-bubble/notion/property-schemas.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/notion/property-schemas.js +341 -0
- package/dist/bubbles/service-bubble/notion/property-schemas.js.map +1 -0
- package/dist/bubbles/service-bubble/postgresql.d.ts +12 -12
- package/dist/bubbles/service-bubble/resend.d.ts +34 -13
- package/dist/bubbles/service-bubble/resend.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/resend.js +133 -2
- package/dist/bubbles/service-bubble/resend.js.map +1 -1
- package/dist/bubbles/service-bubble/slack.d.ts +241 -241
- package/dist/bubbles/service-bubble/slack.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/slack.js +2 -2
- package/dist/bubbles/service-bubble/slack.js.map +1 -1
- package/dist/bubbles/service-bubble/storage.d.ts +25 -21
- package/dist/bubbles/service-bubble/storage.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/storage.js +43 -2
- package/dist/bubbles/service-bubble/storage.js.map +1 -1
- package/dist/bubbles/service-bubble/telegram.d.ts +7742 -0
- package/dist/bubbles/service-bubble/telegram.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/telegram.js +1132 -0
- package/dist/bubbles/service-bubble/telegram.js.map +1 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +76 -20
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js +12 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +14 -14
- package/dist/bubbles/tool-bubble/code-edit-tool.d.ts +188 -0
- package/dist/bubbles/tool-bubble/code-edit-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/code-edit-tool.js +321 -0
- package/dist/bubbles/tool-bubble/code-edit-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +8 -4
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +115 -10
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/google-maps-tool.d.ts +455 -0
- package/dist/bubbles/tool-bubble/google-maps-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/google-maps-tool.js +205 -0
- package/dist/bubbles/tool-bubble/google-maps-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/instagram-tool.d.ts +36 -36
- package/dist/bubbles/tool-bubble/instagram-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/instagram-tool.js +2 -2
- package/dist/bubbles/tool-bubble/instagram-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +824 -447
- package/dist/bubbles/tool-bubble/linkedin-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/linkedin-tool.js +232 -12
- package/dist/bubbles/tool-bubble/linkedin-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts +4 -4
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +66 -66
- package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +17 -16
- package/dist/bubbles/tool-bubble/research-agent-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/research-agent-tool.js +26 -16
- package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +8 -8
- package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +485 -0
- package/dist/bubbles/tool-bubble/tiktok-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/tiktok-tool.js +226 -0
- package/dist/bubbles/tool-bubble/tiktok-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/tool-template.d.ts +8 -8
- package/dist/bubbles/tool-bubble/twitter-tool.d.ts +947 -0
- package/dist/bubbles/tool-bubble/twitter-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/twitter-tool.js +494 -0
- package/dist/bubbles/tool-bubble/twitter-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +22 -16
- package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/web-crawl-tool.js +58 -59
- package/dist/bubbles/tool-bubble/web-crawl-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +8 -8
- package/dist/bubbles/tool-bubble/web-extract-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/web-extract-tool.js +17 -17
- package/dist/bubbles/tool-bubble/web-extract-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +15 -107
- package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/web-scrape-tool.js +51 -72
- package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/web-search-tool.d.ts +20 -9
- package/dist/bubbles/tool-bubble/web-search-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/web-search-tool.js +45 -35
- package/dist/bubbles/tool-bubble/web-search-tool.js.map +1 -1
- package/dist/bubbles/tool-bubble/youtube-tool.d.ts +25 -25
- package/dist/bubbles/tool-bubble/youtube-tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/youtube-tool.js +5 -5
- package/dist/bubbles/tool-bubble/youtube-tool.js.map +1 -1
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts +4 -4
- package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +30 -30
- package/dist/bubbles/workflow-bubble/generate-document.workflow.js +1 -1
- package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +22 -22
- package/dist/bubbles/workflow-bubble/parse-document.workflow.js +1 -1
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +54 -54
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts.map +1 -1
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js +4 -4
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js.map +1 -1
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +36 -36
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js +1 -1
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +14 -14
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js +6 -6
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +26 -26
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.js +24 -4
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.js.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +19 -19
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts.map +1 -1
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js +8 -8
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js.map +1 -1
- package/dist/bubbles.json +220 -72
- package/dist/index.d.ts +23 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/logging/BubbleLogger.d.ts +45 -16
- package/dist/logging/BubbleLogger.d.ts.map +1 -1
- package/dist/logging/BubbleLogger.js +178 -77
- package/dist/logging/BubbleLogger.js.map +1 -1
- package/dist/logging/StreamingBubbleLogger.d.ts +13 -1
- package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -1
- package/dist/logging/StreamingBubbleLogger.js +51 -8
- package/dist/logging/StreamingBubbleLogger.js.map +1 -1
- package/dist/logging/WebhookStreamLogger.d.ts +66 -0
- package/dist/logging/WebhookStreamLogger.d.ts.map +1 -0
- package/dist/logging/WebhookStreamLogger.js +291 -0
- package/dist/logging/WebhookStreamLogger.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 +1 -0
- package/dist/types/available-tools.js.map +1 -1
- package/dist/types/base-bubble-class.d.ts +6 -4
- package/dist/types/base-bubble-class.d.ts.map +1 -1
- package/dist/types/base-bubble-class.js +35 -20
- package/dist/types/base-bubble-class.js.map +1 -1
- package/dist/types/bubble.d.ts +2 -0
- package/dist/types/bubble.d.ts.map +1 -1
- package/dist/types/service-bubble-class.d.ts +1 -1
- package/dist/types/service-bubble-class.d.ts.map +1 -1
- package/dist/types/service-bubble-class.js +2 -2
- 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 +2 -2
- 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/types/workflow-bubble-class.js +2 -2
- package/dist/types/workflow-bubble-class.js.map +1 -1
- package/dist/utils/agent-formatter.d.ts +14 -2
- package/dist/utils/agent-formatter.d.ts.map +1 -1
- package/dist/utils/agent-formatter.js +174 -26
- package/dist/utils/agent-formatter.js.map +1 -1
- package/dist/utils/bubbleflow-validation.d.ts +7 -0
- package/dist/utils/bubbleflow-validation.d.ts.map +1 -1
- package/dist/utils/bubbleflow-validation.js +171 -6
- package/dist/utils/bubbleflow-validation.js.map +1 -1
- package/dist/utils/json-parsing.d.ts.map +1 -1
- package/dist/utils/json-parsing.js +146 -0
- package/dist/utils/json-parsing.js.map +1 -1
- package/dist/utils/safe-gemini-chat.d.ts +31 -0
- package/dist/utils/safe-gemini-chat.d.ts.map +1 -0
- package/dist/utils/safe-gemini-chat.js +93 -0
- package/dist/utils/safe-gemini-chat.js.map +1 -0
- package/dist/utils/schema-comparison.d.ts +92 -0
- package/dist/utils/schema-comparison.d.ts.map +1 -0
- package/dist/utils/schema-comparison.js +716 -0
- package/dist/utils/schema-comparison.js.map +1 -0
- package/dist/utils/zod-schema.d.ts +24 -0
- package/dist/utils/zod-schema.d.ts.map +1 -0
- package/dist/utils/zod-schema.js +56 -0
- package/dist/utils/zod-schema.js.map +1 -0
- package/package.json +5 -4
- package/dist/bubbles/service-bubble/google-sheets.d.ts +0 -1811
- package/dist/bubbles/service-bubble/google-sheets.d.ts.map +0 -1
- package/dist/bubbles/service-bubble/google-sheets.js.map +0 -1
- package/dist/bubbles/service-bubble/x-twitter.d.ts +0 -814
- package/dist/bubbles/service-bubble/x-twitter.d.ts.map +0 -1
- package/dist/bubbles/service-bubble/x-twitter.js +0 -445
- package/dist/bubbles/service-bubble/x-twitter.js.map +0 -1
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts +0 -125
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts.map +0 -1
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js +0 -808
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js.map +0 -1
- package/dist/test-gm.d.ts +0 -10
- package/dist/test-gm.d.ts.map +0 -1
- package/dist/test-gm.js +0 -95
- package/dist/test-gm.js.map +0 -1
- package/dist/utils/param-helper.d.ts +0 -2
- package/dist/utils/param-helper.d.ts.map +0 -1
- package/dist/utils/param-helper.js +0 -5
- package/dist/utils/param-helper.js.map +0 -1
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { ToolBubble } from '../../types/tool-bubble-class.js';
|
|
3
|
-
import
|
|
3
|
+
import { FirecrawlBubble } from '../service-bubble/firecrawl.js';
|
|
4
4
|
import { CredentialType } from '@bubblelab/shared-schemas';
|
|
5
5
|
import { AIAgentBubble } from '../service-bubble/ai-agent.js';
|
|
6
6
|
// Action types for browser automation (Gemini-compatible: avoid const/anyOf)
|
|
7
|
-
const ActionSchema = z.object({
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
});
|
|
7
|
+
// const ActionSchema = z.object({
|
|
8
|
+
// type: z
|
|
9
|
+
// .enum(['wait', 'click', 'write', 'press', 'scroll', 'executeJavascript'])
|
|
10
|
+
// .describe('Action type to perform'),
|
|
11
|
+
// milliseconds: z
|
|
12
|
+
// .number()
|
|
13
|
+
// .optional()
|
|
14
|
+
// .describe('Time to wait in milliseconds (for wait)'),
|
|
15
|
+
// selector: z
|
|
16
|
+
// .string()
|
|
17
|
+
// .optional()
|
|
18
|
+
// .describe('CSS selector to interact with (wait/click/write/scroll)'),
|
|
19
|
+
// text: z.string().optional().describe('Text to write (for write)'),
|
|
20
|
+
// key: z
|
|
21
|
+
// .string()
|
|
22
|
+
// .optional()
|
|
23
|
+
// .describe('Key to press (e.g., "Enter") (for press)'),
|
|
24
|
+
// direction: z
|
|
25
|
+
// .enum(['up', 'down'])
|
|
26
|
+
// .optional()
|
|
27
|
+
// .describe('Scroll direction (for scroll)'),
|
|
28
|
+
// script: z
|
|
29
|
+
// .string()
|
|
30
|
+
// .optional()
|
|
31
|
+
// .describe('JavaScript code (for executeJavascript)'),
|
|
32
|
+
// });
|
|
33
33
|
// Simple, focused parameters with optional advanced features
|
|
34
34
|
const WebScrapeToolParamsSchema = z.object({
|
|
35
35
|
url: z
|
|
@@ -44,20 +44,6 @@ const WebScrapeToolParamsSchema = z.object({
|
|
|
44
44
|
.boolean()
|
|
45
45
|
.default(true)
|
|
46
46
|
.describe('Extract only main content, filtering out navigation/footers'),
|
|
47
|
-
actions: z
|
|
48
|
-
.array(ActionSchema)
|
|
49
|
-
.optional()
|
|
50
|
-
.describe('Optional browser actions for authentication/navigation (e.g., login flows)'),
|
|
51
|
-
headers: z
|
|
52
|
-
.record(z.string())
|
|
53
|
-
.optional()
|
|
54
|
-
.describe('Optional HTTP headers (e.g., for session cookies)'),
|
|
55
|
-
waitFor: z
|
|
56
|
-
.number()
|
|
57
|
-
.min(0)
|
|
58
|
-
.max(30000)
|
|
59
|
-
.default(3000)
|
|
60
|
-
.describe('Time to wait for dynamic content in milliseconds (default: 3000)'),
|
|
61
47
|
credentials: z
|
|
62
48
|
.record(z.nativeEnum(CredentialType), z.string())
|
|
63
49
|
.optional()
|
|
@@ -71,6 +57,7 @@ const WebScrapeToolResultSchema = z.object({
|
|
|
71
57
|
format: z.string().describe('Format of the returned content'),
|
|
72
58
|
success: z.boolean().describe('Whether the scraping was successful'),
|
|
73
59
|
error: z.string().describe('Error message if scraping failed'),
|
|
60
|
+
creditsUsed: z.number().describe('Number of credits used'),
|
|
74
61
|
metadata: z
|
|
75
62
|
.object({
|
|
76
63
|
statusCode: z.number().optional(),
|
|
@@ -84,7 +71,7 @@ export class WebScrapeTool extends ToolBubble {
|
|
|
84
71
|
static bubbleName = 'web-scrape-tool';
|
|
85
72
|
static schema = WebScrapeToolParamsSchema;
|
|
86
73
|
static resultSchema = WebScrapeToolResultSchema;
|
|
87
|
-
static shortDescription =
|
|
74
|
+
static shortDescription = "Scrapes content from a single web page. Useful after web-search-tool to get the full content of a page. Also useful if you need to understand a site's structure or content.";
|
|
88
75
|
static longDescription = `
|
|
89
76
|
A simple and powerful web scraping tool that extracts content from any web page.
|
|
90
77
|
|
|
@@ -115,41 +102,28 @@ export class WebScrapeTool extends ToolBubble {
|
|
|
115
102
|
super(params, context);
|
|
116
103
|
}
|
|
117
104
|
async performAction() {
|
|
118
|
-
const { url, format,
|
|
105
|
+
const { url, format, credentials } = this.params;
|
|
119
106
|
const startTime = Date.now();
|
|
120
107
|
try {
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
// Initialize Firecrawl client
|
|
127
|
-
const firecrawl = new FirecrawlApp({ apiKey });
|
|
128
|
-
console.log('[WebScrapeTool] Scraping URL:', url, 'with format:', format);
|
|
129
|
-
// Configure scraping options
|
|
130
|
-
const scrapeOptions = {
|
|
108
|
+
console.debug('[WebScrapeTool] Scraping URL:', url, 'with format:', format);
|
|
109
|
+
const firecrawl = new FirecrawlBubble({
|
|
110
|
+
operation: 'scrape',
|
|
111
|
+
credentials,
|
|
112
|
+
url,
|
|
131
113
|
formats: [format],
|
|
132
|
-
|
|
114
|
+
// Wait for 2 seconds to ensure the page is loaded
|
|
115
|
+
waitFor: 2000,
|
|
133
116
|
// Sensible defaults for most use cases
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
};
|
|
137
|
-
// Add optional parameters if provided
|
|
138
|
-
if (actions && actions.length > 0) {
|
|
139
|
-
console.log('[WebScrapeTool] Using browser actions:', actions.length, 'steps');
|
|
140
|
-
scrapeOptions.actions = actions;
|
|
141
|
-
}
|
|
142
|
-
if (headers) {
|
|
143
|
-
console.log('[WebScrapeTool] Using custom headers');
|
|
144
|
-
scrapeOptions.headers = headers;
|
|
145
|
-
}
|
|
117
|
+
maxAge: 172800000,
|
|
118
|
+
parsers: ['pdf'],
|
|
119
|
+
}, this.context, 'web_scrape_tool_firecrawl');
|
|
146
120
|
// Execute scrape
|
|
147
|
-
const response = await firecrawl.
|
|
121
|
+
const response = await firecrawl.action();
|
|
148
122
|
// Extract content based on format
|
|
149
123
|
let content;
|
|
150
124
|
let title = '';
|
|
151
|
-
if (format === 'markdown' && response.markdown) {
|
|
152
|
-
content = response.markdown;
|
|
125
|
+
if (format === 'markdown' && response.data.markdown) {
|
|
126
|
+
content = response.data.markdown;
|
|
153
127
|
}
|
|
154
128
|
else {
|
|
155
129
|
throw new Error(`No content available in ${format} format`);
|
|
@@ -161,6 +135,7 @@ export class WebScrapeTool extends ToolBubble {
|
|
|
161
135
|
message: `Summarize the scraped content to condense all information and remove any non-essential information, include all links, contact information, companies, don't omit any information. Content: ${content}`,
|
|
162
136
|
model: {
|
|
163
137
|
model: 'google/gemini-2.5-flash-lite',
|
|
138
|
+
maxTokens: 80000,
|
|
164
139
|
},
|
|
165
140
|
name: 'Scrape Content Summarizer Agent',
|
|
166
141
|
credentials: this.params.credentials,
|
|
@@ -177,19 +152,22 @@ export class WebScrapeTool extends ToolBubble {
|
|
|
177
152
|
}
|
|
178
153
|
}
|
|
179
154
|
// Extract title from metadata
|
|
180
|
-
if (response.metadata?.title) {
|
|
181
|
-
title = response.metadata.title;
|
|
155
|
+
if (response.data.metadata?.title) {
|
|
156
|
+
title = response.data.metadata.title;
|
|
182
157
|
}
|
|
183
158
|
const loadTime = Date.now() - startTime;
|
|
159
|
+
// Token usage tracking is now centralized in FirecrawlBubble
|
|
184
160
|
return {
|
|
185
161
|
content: content.trim(),
|
|
186
162
|
title,
|
|
187
163
|
url,
|
|
164
|
+
// Per page 1 credit
|
|
165
|
+
creditsUsed: 1,
|
|
188
166
|
format,
|
|
189
167
|
success: true,
|
|
190
168
|
error: '',
|
|
191
169
|
metadata: {
|
|
192
|
-
statusCode: response.metadata?.statusCode,
|
|
170
|
+
statusCode: response.data.metadata?.statusCode,
|
|
193
171
|
loadTime,
|
|
194
172
|
},
|
|
195
173
|
};
|
|
@@ -204,6 +182,7 @@ export class WebScrapeTool extends ToolBubble {
|
|
|
204
182
|
format,
|
|
205
183
|
success: false,
|
|
206
184
|
error: errorMessage,
|
|
185
|
+
creditsUsed: 0,
|
|
207
186
|
metadata: {
|
|
208
187
|
loadTime: Date.now() - startTime,
|
|
209
188
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-scrape-tool.js","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/web-scrape-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,
|
|
1
|
+
{"version":3,"file":"web-scrape-tool.js","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/web-scrape-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,18 +5,21 @@ import { CredentialType, type BubbleName } from '@bubblelab/shared-schemas';
|
|
|
5
5
|
declare const WebSearchToolParamsSchema: z.ZodObject<{
|
|
6
6
|
query: z.ZodString;
|
|
7
7
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
categories: z.ZodDefault<z.ZodArray<z.ZodEnum<["research", "pdf", "github"]>, "many">>;
|
|
8
9
|
location: z.ZodOptional<z.ZodString>;
|
|
9
10
|
credentials: z.ZodOptional<z.ZodRecord<z.ZodNativeEnum<typeof CredentialType>, z.ZodString>>;
|
|
10
11
|
}, "strip", z.ZodTypeAny, {
|
|
11
|
-
limit: number;
|
|
12
12
|
query: string;
|
|
13
|
+
limit: number;
|
|
14
|
+
categories: ("github" | "pdf" | "research")[];
|
|
13
15
|
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
14
16
|
location?: string | undefined;
|
|
15
17
|
}, {
|
|
16
18
|
query: string;
|
|
17
|
-
limit?: number | undefined;
|
|
18
19
|
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
20
|
+
limit?: number | undefined;
|
|
19
21
|
location?: string | undefined;
|
|
22
|
+
categories?: ("github" | "pdf" | "research")[] | undefined;
|
|
20
23
|
}>;
|
|
21
24
|
declare const WebSearchToolResultSchema: z.ZodObject<{
|
|
22
25
|
results: z.ZodArray<z.ZodObject<{
|
|
@@ -35,28 +38,31 @@ declare const WebSearchToolResultSchema: z.ZodObject<{
|
|
|
35
38
|
query: z.ZodString;
|
|
36
39
|
totalResults: z.ZodNumber;
|
|
37
40
|
searchEngine: z.ZodString;
|
|
41
|
+
creditsUsed: z.ZodNumber;
|
|
38
42
|
success: z.ZodBoolean;
|
|
39
43
|
error: z.ZodString;
|
|
40
44
|
}, "strip", z.ZodTypeAny, {
|
|
41
|
-
success: boolean;
|
|
42
45
|
error: string;
|
|
46
|
+
success: boolean;
|
|
43
47
|
query: string;
|
|
44
48
|
results: {
|
|
45
49
|
title: string;
|
|
46
50
|
content: string;
|
|
47
51
|
url: string;
|
|
48
52
|
}[];
|
|
53
|
+
creditsUsed: number;
|
|
49
54
|
totalResults: number;
|
|
50
55
|
searchEngine: string;
|
|
51
56
|
}, {
|
|
52
|
-
success: boolean;
|
|
53
57
|
error: string;
|
|
58
|
+
success: boolean;
|
|
54
59
|
query: string;
|
|
55
60
|
results: {
|
|
56
61
|
title: string;
|
|
57
62
|
content: string;
|
|
58
63
|
url: string;
|
|
59
64
|
}[];
|
|
65
|
+
creditsUsed: number;
|
|
60
66
|
totalResults: number;
|
|
61
67
|
searchEngine: string;
|
|
62
68
|
}>;
|
|
@@ -64,23 +70,25 @@ type WebSearchToolParams = z.output<typeof WebSearchToolParamsSchema>;
|
|
|
64
70
|
type WebSearchToolResult = z.output<typeof WebSearchToolResultSchema>;
|
|
65
71
|
type WebSearchToolParamsInput = z.input<typeof WebSearchToolParamsSchema>;
|
|
66
72
|
export declare class WebSearchTool extends ToolBubble<WebSearchToolParams, WebSearchToolResult> {
|
|
67
|
-
private static readonly SEARCH_DELAY;
|
|
68
73
|
static readonly bubbleName: BubbleName;
|
|
69
74
|
static readonly schema: z.ZodObject<{
|
|
70
75
|
query: z.ZodString;
|
|
71
76
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
77
|
+
categories: z.ZodDefault<z.ZodArray<z.ZodEnum<["research", "pdf", "github"]>, "many">>;
|
|
72
78
|
location: z.ZodOptional<z.ZodString>;
|
|
73
79
|
credentials: z.ZodOptional<z.ZodRecord<z.ZodNativeEnum<typeof CredentialType>, z.ZodString>>;
|
|
74
80
|
}, "strip", z.ZodTypeAny, {
|
|
75
|
-
limit: number;
|
|
76
81
|
query: string;
|
|
82
|
+
limit: number;
|
|
83
|
+
categories: ("github" | "pdf" | "research")[];
|
|
77
84
|
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
78
85
|
location?: string | undefined;
|
|
79
86
|
}, {
|
|
80
87
|
query: string;
|
|
81
|
-
limit?: number | undefined;
|
|
82
88
|
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
89
|
+
limit?: number | undefined;
|
|
83
90
|
location?: string | undefined;
|
|
91
|
+
categories?: ("github" | "pdf" | "research")[] | undefined;
|
|
84
92
|
}>;
|
|
85
93
|
static readonly resultSchema: z.ZodObject<{
|
|
86
94
|
results: z.ZodArray<z.ZodObject<{
|
|
@@ -99,28 +107,31 @@ export declare class WebSearchTool extends ToolBubble<WebSearchToolParams, WebSe
|
|
|
99
107
|
query: z.ZodString;
|
|
100
108
|
totalResults: z.ZodNumber;
|
|
101
109
|
searchEngine: z.ZodString;
|
|
110
|
+
creditsUsed: z.ZodNumber;
|
|
102
111
|
success: z.ZodBoolean;
|
|
103
112
|
error: z.ZodString;
|
|
104
113
|
}, "strip", z.ZodTypeAny, {
|
|
105
|
-
success: boolean;
|
|
106
114
|
error: string;
|
|
115
|
+
success: boolean;
|
|
107
116
|
query: string;
|
|
108
117
|
results: {
|
|
109
118
|
title: string;
|
|
110
119
|
content: string;
|
|
111
120
|
url: string;
|
|
112
121
|
}[];
|
|
122
|
+
creditsUsed: number;
|
|
113
123
|
totalResults: number;
|
|
114
124
|
searchEngine: string;
|
|
115
125
|
}, {
|
|
116
|
-
success: boolean;
|
|
117
126
|
error: string;
|
|
127
|
+
success: boolean;
|
|
118
128
|
query: string;
|
|
119
129
|
results: {
|
|
120
130
|
title: string;
|
|
121
131
|
content: string;
|
|
122
132
|
url: string;
|
|
123
133
|
}[];
|
|
134
|
+
creditsUsed: number;
|
|
124
135
|
totalResults: number;
|
|
125
136
|
searchEngine: string;
|
|
126
137
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search-tool.d.ts","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/web-search-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"web-search-tool.d.ts","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/web-search-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAM5E,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;EAyB7B,CAAC;AAGH,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB7B,CAAC;AAGH,KAAK,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACtE,KAAK,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACtE,KAAK,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE1E,qBAAa,aAAc,SAAQ,UAAU,CAC3C,mBAAmB,EACnB,mBAAmB,CACpB;IAIC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAqB;IAC3D,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;;;;OAA6B;IACnD,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAA6B;IACzD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,oFACmD;IACnF,MAAM,CAAC,QAAQ,CAAC,eAAe,ssBAiB7B;IACF,MAAM,CAAC,QAAQ,CAAC,KAAK,eAAe;IACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;gBAG5B,MAAM,GAAE,wBAAwC,EAChD,OAAO,CAAC,EAAE,aAAa;IAKnB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA+G3E"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { ToolBubble } from '../../types/tool-bubble-class.js';
|
|
3
|
-
import
|
|
3
|
+
import { FirecrawlBubble } from '../service-bubble/firecrawl.js';
|
|
4
4
|
import { CredentialType } from '@bubblelab/shared-schemas';
|
|
5
|
+
// Firecrawl charges 2 credits per 10 search results
|
|
6
|
+
const CREDITS_PER_10_RESULTS = 2;
|
|
5
7
|
// Define the parameters schema - simplified like the MCP server
|
|
6
8
|
const WebSearchToolParamsSchema = z.object({
|
|
7
9
|
query: z
|
|
@@ -10,10 +12,13 @@ const WebSearchToolParamsSchema = z.object({
|
|
|
10
12
|
.describe('The search query to execute'),
|
|
11
13
|
limit: z
|
|
12
14
|
.number()
|
|
13
|
-
.
|
|
14
|
-
.
|
|
15
|
-
.default(3)
|
|
15
|
+
.max(50, 'Maximum number of search results to return is 20')
|
|
16
|
+
.default(10)
|
|
16
17
|
.describe('Maximum number of search results to return'),
|
|
18
|
+
categories: z
|
|
19
|
+
.array(z.enum(['research', 'pdf', 'github']))
|
|
20
|
+
.default([])
|
|
21
|
+
.describe('Categories to find most relevant search results (research, pdf, github)'),
|
|
17
22
|
location: z
|
|
18
23
|
.string()
|
|
19
24
|
.optional()
|
|
@@ -35,12 +40,12 @@ const WebSearchToolResultSchema = z.object({
|
|
|
35
40
|
query: z.string().describe('The original search query'),
|
|
36
41
|
totalResults: z.number().describe('Number of results returned'),
|
|
37
42
|
searchEngine: z.string().describe('Search engine used (Firecrawl)'),
|
|
43
|
+
creditsUsed: z.number().describe('Number of credits used'),
|
|
38
44
|
success: z.boolean().describe('Whether the search was successful'),
|
|
39
45
|
error: z.string().describe('Error message if search failed'),
|
|
40
46
|
});
|
|
41
47
|
export class WebSearchTool extends ToolBubble {
|
|
42
48
|
// Delay between searches in milliseconds
|
|
43
|
-
static SEARCH_DELAY = 2000;
|
|
44
49
|
// Required static metadata
|
|
45
50
|
static bubbleName = 'web-search-tool';
|
|
46
51
|
static schema = WebSearchToolParamsSchema;
|
|
@@ -71,29 +76,16 @@ export class WebSearchTool extends ToolBubble {
|
|
|
71
76
|
}
|
|
72
77
|
async performAction(context) {
|
|
73
78
|
void context; // Context available but not currently used
|
|
74
|
-
|
|
75
|
-
await new Promise((resolve) => setTimeout(resolve, WebSearchTool.SEARCH_DELAY));
|
|
76
|
-
const { query, limit, location } = this.params;
|
|
79
|
+
const { query, limit, location, credentials } = this.params;
|
|
77
80
|
try {
|
|
78
|
-
//
|
|
79
|
-
const limitedResults = Math.
|
|
80
|
-
// Get Firecrawl API key from credentials
|
|
81
|
-
const apiKey = this.params.credentials?.FIRECRAWL_API_KEY;
|
|
82
|
-
if (!apiKey) {
|
|
83
|
-
throw new Error('FIRECRAWL_API_KEY is required but not provided in credentials');
|
|
84
|
-
}
|
|
85
|
-
// Initialize Firecrawl client
|
|
86
|
-
const firecrawl = new FirecrawlApp({ apiKey });
|
|
81
|
+
// Limit should be multiple of 10
|
|
82
|
+
const limitedResults = Math.ceil(limit / 10) * 10;
|
|
87
83
|
// Build search parameters according to Firecrawl API with defaults
|
|
88
84
|
const searchOptions = {
|
|
89
85
|
limit: limitedResults,
|
|
90
86
|
// Default sources to web search
|
|
91
87
|
sources: ['web'],
|
|
92
|
-
|
|
93
|
-
scrapeOptions: {
|
|
94
|
-
formats: ['markdown'],
|
|
95
|
-
onlyMainContent: true,
|
|
96
|
-
},
|
|
88
|
+
timeout: 30000,
|
|
97
89
|
};
|
|
98
90
|
// Add optional parameters if provided
|
|
99
91
|
if (location) {
|
|
@@ -103,25 +95,38 @@ export class WebSearchTool extends ToolBubble {
|
|
|
103
95
|
query,
|
|
104
96
|
...searchOptions,
|
|
105
97
|
});
|
|
98
|
+
// Initialize Firecrawl bubble
|
|
99
|
+
const firecrawlParams = {
|
|
100
|
+
operation: 'search',
|
|
101
|
+
credentials,
|
|
102
|
+
query,
|
|
103
|
+
...searchOptions,
|
|
104
|
+
};
|
|
105
|
+
const firecrawl = new FirecrawlBubble(firecrawlParams, this.context, 'web_search_tool_firecrawl');
|
|
106
106
|
// Execute search using Firecrawl
|
|
107
|
-
const
|
|
107
|
+
const response = await firecrawl.action();
|
|
108
108
|
// Handle the response based on Firecrawl's actual API structure
|
|
109
109
|
// The search API might return different structures, so handle both cases
|
|
110
110
|
let resultsArray = [];
|
|
111
|
-
if (
|
|
112
|
-
|
|
111
|
+
if (!response.success) {
|
|
112
|
+
return {
|
|
113
|
+
results: [],
|
|
114
|
+
query,
|
|
115
|
+
creditsUsed: 0,
|
|
116
|
+
totalResults: 0,
|
|
117
|
+
searchEngine: 'Firecrawl',
|
|
118
|
+
success: false,
|
|
119
|
+
error: response.error || 'Search failed',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
else if (response.data.web) {
|
|
123
|
+
resultsArray = response.data.web;
|
|
124
|
+
}
|
|
125
|
+
else if (response.data.other) {
|
|
126
|
+
resultsArray = response.data.other;
|
|
113
127
|
}
|
|
114
128
|
else {
|
|
115
|
-
|
|
116
|
-
if (response?.data && Array.isArray(response.data)) {
|
|
117
|
-
resultsArray = response.data;
|
|
118
|
-
}
|
|
119
|
-
else if (response?.web && Array.isArray(response.web)) {
|
|
120
|
-
resultsArray = response.web;
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
throw new Error('No search results returned or unexpected response format');
|
|
124
|
-
}
|
|
129
|
+
throw new Error('No search results returned or unexpected response format');
|
|
125
130
|
}
|
|
126
131
|
// Transform Firecrawl results to our format
|
|
127
132
|
const results = resultsArray.map((item) => ({
|
|
@@ -133,11 +138,15 @@ export class WebSearchTool extends ToolBubble {
|
|
|
133
138
|
item.markdown ||
|
|
134
139
|
'No content available',
|
|
135
140
|
}));
|
|
141
|
+
// Calculate credits: Firecrawl charges 2 credits per 10 results (rounded up)
|
|
142
|
+
// Token usage tracking is now centralized in FirecrawlBubble
|
|
143
|
+
const creditsUsed = Math.ceil(results.length / 10) * CREDITS_PER_10_RESULTS;
|
|
136
144
|
return {
|
|
137
145
|
results,
|
|
138
146
|
query,
|
|
139
147
|
totalResults: results.length,
|
|
140
148
|
searchEngine: 'Firecrawl',
|
|
149
|
+
creditsUsed,
|
|
141
150
|
success: true,
|
|
142
151
|
error: '',
|
|
143
152
|
};
|
|
@@ -148,6 +157,7 @@ export class WebSearchTool extends ToolBubble {
|
|
|
148
157
|
return {
|
|
149
158
|
results: [],
|
|
150
159
|
query,
|
|
160
|
+
creditsUsed: 0,
|
|
151
161
|
totalResults: 0,
|
|
152
162
|
searchEngine: 'Firecrawl',
|
|
153
163
|
success: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search-tool.js","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/web-search-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,
|
|
1
|
+
{"version":3,"file":"web-search-tool.js","sourceRoot":"","sources":["../../../src/bubbles/tool-bubble/web-search-tool.ts"],"names":[],"mappings":"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"}
|