@mindstudio-ai/agent 0.1.125 → 0.1.126

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/llms.txt CHANGED
@@ -297,7 +297,9 @@ Check whether the current user has a specific app role and branch accordingly.
297
297
 
298
298
  #### convertPdfToImages
299
299
  Convert each page of a PDF document into a PNG image.
300
- - Each page is converted to a separate PNG and re-hosted on the CDN.
300
+ - Each page is converted to a separate PNG.
301
+ - The page images go to the public CDN by default, or into one of the app's own file stores when the call passes `store` — a private store keeps them private.
302
+ - The source PDF is never published: one of the app's own files is read where it sits, and any other URL is staged privately for the renderer and discarded afterwards.
301
303
  - Returns an array of image URLs, one per page.
302
304
  - Input: `{ pdfUrl: string }`
303
305
  - Output: `{ imageUrls: string[] }`
@@ -352,37 +354,6 @@ Scan text for personally identifiable information using Microsoft Presidio.
352
354
  - Input: `{ input: string, language: string, entities: string[], detectedStepId?: string, notDetectedStepId?: string, outputLogVariable?: string | null }`
353
355
  - Output: `{ detected: boolean, detections: { entity_type: string, start: number, end: number, score: number }[] }`
354
356
 
355
- #### discordEditMessage
356
- Edit a previously sent Discord channel message. Use with the message ID returned by Send Discord Message.
357
- - Only messages sent by the bot can be edited.
358
- - The messageId is returned by the Send Discord Message step.
359
- - Optionally attach a file by providing a URL to attachmentUrl. The file is downloaded and uploaded to Discord.
360
- - When editing with an attachment, the new attachment replaces any previous attachments on the message.
361
- - URLs in the text are automatically embedded by Discord (link previews for images, videos, etc.).
362
- - Input: `{ botToken: string, channelId: string, messageId: string, text: string, attachmentUrl?: string }`
363
- - Output: `unknown`
364
-
365
- #### discordSendFollowUp
366
- Send a follow-up message to a Discord slash command interaction.
367
- - Requires the applicationId and interactionToken from the Discord trigger variables.
368
- - Follow-up messages appear as new messages in the channel after the initial response.
369
- - Returns the sent message ID.
370
- - Interaction tokens expire after 15 minutes.
371
- - Optionally attach a file by providing a URL to attachmentUrl. The file is downloaded and uploaded to Discord.
372
- - URLs in the text are automatically embedded by Discord (link previews for images, videos, etc.).
373
- - Input: `{ applicationId: string, interactionToken: string, text: string, attachmentUrl?: string }`
374
- - Output: `{ messageId: string }`
375
-
376
- #### discordSendMessage
377
- Send a message to Discord — either edit the loading message or send a new channel message.
378
- - mode "edit" replaces the loading message (interaction response) with the final result. Uses applicationId and interactionToken from trigger variables. No bot permissions required.
379
- - mode "send" sends a new message to a channel. Uses botToken and channelId from trigger variables. Returns a messageId that can be used with Edit Discord Message.
380
- - Optionally attach a file by providing a URL to attachmentUrl. The file is downloaded and uploaded to Discord.
381
- - URLs in the text are automatically embedded by Discord (link previews for images, videos, etc.).
382
- - Interaction tokens expire after 15 minutes.
383
- - Input: `{ mode: "edit" | "send", text: string, applicationId?: string, interactionToken?: string, botToken?: string, channelId?: string, attachmentUrl?: string }`
384
- - Output: `{ messageId?: string }`
385
-
386
357
  #### downloadVideo
387
358
  Download a video file
388
359
  - Works with YouTube, TikTok, etc., by using ytdlp behind the scenes
@@ -416,7 +387,7 @@ Download a file from a URL and extract its text content. Supports PDFs (includin
416
387
  - Best suited for PDFs and raw text/document files. For web pages, use the scrapeUrl step instead.
417
388
  - Handles both text-layer PDFs and image-based/scanned PDFs (e.g. Figma/Canva exports, scanned documents). Image-based PDFs are processed with OCR automatically — there is no need to convert PDF pages to images first.
418
389
  - Accepts a single URL, a comma-separated list of URLs, or a JSON array of URLs.
419
- - Files are rehosted on the MindStudio CDN before extraction.
390
+ - Nothing is published. One of the app's own files — including a private one, or a share link — is read where it sits; any other URL is downloaded and staged privately for the extraction model, then discarded when extraction finishes.
420
391
  - Optionally set `model` to a specific document-extraction model (`mistral-ocr-latest`, `llamaparse`, `google-document-ai`); omit to use the platform default.
421
392
  - Maximum file size is 50MB per URL.
422
393
  - Input: `{ url: string | string[], model?: string }`
@@ -454,17 +425,10 @@ Generate an HTML asset and export it as a webpage, PDF, or image
454
425
  - Input: `{ source: string, sourceType: "html" | "markdown" | "spa" | "raw" | "dynamic" | "customInterface", outputFormat: "pdf" | "png" | "html" | "mp4" | "openGraph", pageSize: "full" | "letter" | "A4" | "custom", testData: object, options?: { pageWidthPx?: number, pageHeightPx?: number, pageOrientation?: "portrait" | "landscape", rehostMedia?: boolean, videoDurationSeconds?: number }, spaSource?: { source?: string, lastCompiledSource?: string, files?: object, paths: string[], root: string, zipUrl: string }, rawSource?: string, dynamicPrompt?: string, dynamicSourceModelOverride?: { model: string, temperature: number, maxResponseTokens: number, ignorePreamble?: boolean, userMessagePreprocessor?: { dataSource?: string, messageTemplate?: string, maxResults?: number, enabled?: boolean, shouldInherit?: boolean }, preamble?: string, multiModelEnabled?: boolean, editResponseEnabled?: boolean, config?: object }, transitionControl?: "default" | "native", shareControl?: "default" | "hidden", shareImageUrl?: string, intermediateAsset?: boolean }`
455
426
  - Output: `{ url: string }`
456
427
 
457
- #### generateChart
458
- Create a chart image using QuickChart (Chart.js) and return the URL.
459
- - The data field must be a Chart.js-compatible JSON object serialized as a string.
460
- - Supported chart types: bar, line, pie.
461
- - Input: `{ chart: { chartType: "bar" | "line" | "pie", data: string, options: { width: string, height: string } } }`
462
- - Output: `{ chartUrl: string }`
463
-
464
428
  #### generateImage
465
429
  Generate an image from a text prompt using an AI model.
466
430
  - Prompts should be descriptive but concise (roughly 3–6 sentences).
467
- - Images are automatically hosted on a CDN.
431
+ - Images are hosted on the public CDN by default, or in one of the app's own file stores when the call passes `store` — a private store keeps the image private.
468
432
  - In foreground mode, the image is displayed to the user. In background mode, the URL is saved to a variable.
469
433
  - When generateVariants is true with numVariants > 1, multiple images are generated in parallel.
470
434
  - In direct execution, foreground mode behaves as background, and userSelect variant behavior behaves as saveAll.
@@ -484,6 +448,13 @@ Generate an audio file from provided instructions (text) using a music model.
484
448
  - Input: `{ text: string, intermediateAsset?: boolean, musicModelOverride?: { model: string, config?: object } }`
485
449
  - Output: `unknown`
486
450
 
451
+ #### generateSound
452
+ Generate a sound effect from a text description using a sound model.
453
+ - The text field contains the description of the sound effect to generate.
454
+ - In foreground mode, the audio is displayed to the user. In background mode, the URL is saved to a variable.
455
+ - Input: `{ text: string, intermediateAsset?: boolean, soundModelOverride?: { model: string, config?: object } }`
456
+ - Output: `{ audioUrl: string }`
457
+
487
458
  #### generateStaticVideoFromImage
488
459
  Convert a static image to an MP4
489
460
  - Can use to create slides/intertitles/slates for video composition
@@ -510,7 +481,7 @@ the server-side plumbing.
510
481
  #### generateVideo
511
482
  Generate a video from a text prompt using an AI model.
512
483
  - Prompts should be descriptive but concise (roughly 3–6 sentences).
513
- - Videos are automatically hosted on a CDN.
484
+ - Videos are hosted on the public CDN by default, or in one of the app's own file stores when the call passes `store` — a private store keeps the video private, with no public copy left behind.
514
485
  - In foreground mode, the video is displayed to the user. In background mode, the URL is saved to a variable.
515
486
  - When generateVariants is true with numVariants > 1, multiple videos are generated in parallel.
516
487
  - In direct execution, foreground mode behaves as background, and userSelect variant behavior behaves as saveAll.
@@ -518,9 +489,9 @@ Generate a video from a text prompt using an AI model.
518
489
  - Output: `{ videoUrl: string | string[] }`
519
490
 
520
491
  #### getGmailAttachments
521
- Download attachments from a Gmail email and re-host them on CDN.
492
+ Download attachments from a Gmail email and store them on the app's own storage.
522
493
  - Requires a Google OAuth connection with Gmail readonly scope.
523
- - Attachments are uploaded to CDN and returned as URLs.
494
+ - Attachments are stored and returned as URLs — on the public CDN by default, or in one of the app's own file stores when the call passes `store`. Use a private store for anything confidential; a public CDN URL is readable by anyone who has it.
524
495
  - Attachments larger than 25MB are skipped.
525
496
  - Use the message ID from Search Gmail Emails, List Recent Gmail Emails, or Get Gmail Email steps.
526
497
  - Input: `{ messageId: string, connectionId?: string }`
@@ -542,13 +513,13 @@ Get info about a media file
542
513
  #### imageFaceSwap
543
514
  Replace a face in an image with a face from another image using AI.
544
515
  - Requires both a target image and a face source image.
545
- - Output is re-hosted on the CDN as a PNG.
516
+ - Output is a PNG on the public CDN, or in one of the app's own file stores when the call passes `store` — a private store keeps it private.
546
517
  - Input: `{ imageUrl: string, faceImageUrl: string, engine: string }`
547
518
  - Output: `{ imageUrl: string }`
548
519
 
549
520
  #### imageRemoveWatermark
550
521
  Remove watermarks from an image using AI.
551
- - Output is re-hosted on the CDN as a PNG.
522
+ - Output is a PNG on the public CDN, or in one of the app's own file stores when the call passes `store` — a private store keeps it private.
552
523
  - Input: `{ imageUrl: string, engine: string, intermediateAsset?: boolean }`
553
524
  - Output: `{ imageUrl: string }`
554
525
 
@@ -668,7 +639,7 @@ Replace personally identifiable information in text with placeholders using Micr
668
639
  Remove the background from an image using AI, producing a transparent PNG.
669
640
  - Uses the Bria background removal model via fal.ai by default.
670
641
  - Uses WaveSpeed's Ideogram background removal model when type is "advanced".
671
- - Output is re-hosted on the CDN as a PNG with transparency.
642
+ - Output is a PNG with transparency on the public CDN, or in one of the app's own file stores when the call passes `store` — a private store keeps it private, `autoCrop` included.
672
643
  - Input: `{ type?: "standard" | "advanced", imageUrl: string, autoCrop?: boolean }`
673
644
  - Output: `{ imageUrl: string }`
674
645
 
@@ -687,14 +658,6 @@ Run a raw API connector to a third-party service
687
658
  - Input: `{ actionId: string, displayName: string, icon: string, configurationValues: object, __connectionId?: string }`
688
659
  - Output: `{ data: object }`
689
660
 
690
- #### runPackagedWorkflow
691
- Run a packaged workflow ("custom block")
692
- - From the user's perspective, packaged workflows are just ordinary blocks. Behind the scenes, they operate like packages/libraries in a programming language, letting the user execute custom functionality.
693
- - Some of these packaged workflows are available as part of MindStudio's "Standard Library" and available to every user.
694
- - Available packaged workflows are documented here as individual blocks, but the runPackagedWorkflow block is how they need to be wrapped in order to be executed correctly.
695
- - Input: `{ appId: string, workflowId: string, inputVariables: object, outputVariables: object, name: string }`
696
- - Output: `{ data: unknown }`
697
-
698
661
  #### scrapeLinkedInCompany
699
662
  Scrape public company data from a LinkedIn company page.
700
663
  - Requires a LinkedIn company URL (e.g. https://www.linkedin.com/company/mindstudioai).
@@ -713,7 +676,7 @@ Scrape public profile data from a LinkedIn profile page.
713
676
  Extract text, HTML, or structured content from one or more web pages.
714
677
  - Accepts a single URL or multiple URLs (as a JSON array, comma-separated, or newline-separated).
715
678
  - Output format controls the result shape: "text" returns markdown, "html" returns raw HTML, "json" returns structured scraper data, "summary" returns a model-written summary and requires the "firecrawl" service.
716
- - Can optionally capture a screenshot of each page.
679
+ - Can optionally capture a screenshot of each page. Screenshots go to the public CDN by default, or into one of the app's own file stores when the call passes `store`.
717
680
  - Handles bot protection automatically; no proxy or rendering configuration is needed.
718
681
  - Input: `{ url: string, service?: "default" | "firecrawl", autoEnhance?: boolean, outputFormat?: "text" | "json" | "html" | "summary", pageOptions?: { onlyMainContent: boolean, screenshot: boolean, waitFor: number, replaceAllPathsWithAbsolutePaths: boolean, headers: object, removeTags: string[], mobile: boolean } }`
719
682
  - Output: `{ content: string | string[] | { text: string, html: string, json?: object, screenshotUrl?: string, metadata?: { title: string, description: string, url: string, image: string }, error?: { code: string, message: string }, costUnits?: number } | { text: string, html: string, json?: object, screenshotUrl?: string, metadata?: { title: string, description: string, url: string, image: string }, error?: { code: string, message: string }, costUnits?: number }[], screenshot?: string | string[] }`
@@ -735,7 +698,7 @@ Scrape public profile data from an X (Twitter) account by URL.
735
698
  #### screenshotUrl
736
699
  Capture a screenshot of a web page as a PNG image.
737
700
  - Takes a viewport or full-page screenshot of the given URL.
738
- - Returns a CDN-hosted PNG image URL.
701
+ - Returns a PNG image URL: on the public CDN by default, or in one of the app's own file stores when the call passes `store` — a private store keeps the screenshot private.
739
702
  - Viewport mode captures only the visible area; fullPage captures the entire scrollable page, scrolling it first so lazy-loaded content is included.
740
703
  - Works on sites behind bot protection (Cloudflare and similar).
741
704
  - Cookie-consent banners and similar overlays are suppressed automatically.
@@ -874,57 +837,6 @@ Explicitly set a variable to a given value.
874
837
  - Input: `{ value: string | string[] }`
875
838
  - Output: `object`
876
839
 
877
- #### telegramEditMessage
878
- Edit a previously sent Telegram message. Use with the message ID returned by Send Telegram Message.
879
- - Only text messages sent by the bot can be edited.
880
- - The messageId is returned by the Send Telegram Message step.
881
- - Common pattern: send a "Processing..." message, do work, then edit it with the result.
882
- - Input: `{ botToken: string, chatId: string, messageId: string, text: string }`
883
- - Output: `unknown`
884
-
885
- #### telegramReplyToMessage
886
- Send a reply to a specific Telegram message. The reply will be visually threaded in the chat.
887
- - Use the rawMessage.message_id from the incoming trigger variables to reply to the user's message.
888
- - Especially useful in group chats where replies provide context.
889
- - Returns the sent message ID, which can be used with Edit Telegram Message.
890
- - Input: `{ botToken: string, chatId: string, replyToMessageId: string, text: string }`
891
- - Output: `{ messageId: number }`
892
-
893
- #### telegramSendAudio
894
- Send an audio file to a Telegram chat as music or a voice note via a bot.
895
- - "audio" mode sends as a standard audio file. "voice" mode sends as a voice message (re-uploads the file for large file support).
896
- - Input: `{ botToken: string, chatId: string, audioUrl: string, mode: "audio" | "voice", caption?: string }`
897
- - Output: `unknown`
898
-
899
- #### telegramSendFile
900
- Send a document/file to a Telegram chat via a bot.
901
- - Input: `{ botToken: string, chatId: string, fileUrl: string, caption?: string }`
902
- - Output: `unknown`
903
-
904
- #### telegramSendImage
905
- Send an image to a Telegram chat via a bot.
906
- - Input: `{ botToken: string, chatId: string, imageUrl: string, caption?: string }`
907
- - Output: `unknown`
908
-
909
- #### telegramSendMessage
910
- Send a text message to a Telegram chat via a bot.
911
- - Messages are sent using MarkdownV2 formatting. Special characters are auto-escaped.
912
- - botToken format is "botId:token" — both parts are required.
913
- - Returns the sent message ID, which can be used with Edit Telegram Message to update the message later.
914
- - Input: `{ botToken: string, chatId: string, text: string }`
915
- - Output: `{ messageId: number }`
916
-
917
- #### telegramSendVideo
918
- Send a video to a Telegram chat via a bot.
919
- - Input: `{ botToken: string, chatId: string, videoUrl: string, caption?: string }`
920
- - Output: `unknown`
921
-
922
- #### telegramSetTyping
923
- Show the "typing..." indicator in a Telegram chat via a bot.
924
- - The typing indicator automatically expires after a few seconds. Use this right before sending a message for a natural feel.
925
- - Input: `{ botToken: string, chatId: string }`
926
- - Output: `unknown`
927
-
928
840
  #### textToSpeech
929
841
  Generate an audio file from provided text using a speech model.
930
842
  - The text field contains the exact words to be spoken (not instructions).
@@ -969,7 +881,7 @@ Legacy v1 data sources. v2 apps should use `dataSources.defineDataSource()` from
969
881
 
970
882
  #### upscaleImage
971
883
  Increase the resolution of an image using AI upscaling.
972
- - Output is re-hosted on the CDN as a PNG.
884
+ - Output is a PNG on the public CDN, or in one of the app's own file stores when the call passes `store` — a private store keeps it private.
973
885
  - Input: `{ imageUrl: string, targetResolution: "2k" | "4k" | "8k", engine: "standard" | "pro" }`
974
886
  - Output: `{ imageUrl: string }`
975
887
 
@@ -1264,7 +1176,7 @@ Download a file from Google Drive and rehost it on the CDN. Returns a public CDN
1264
1176
  - Requires a Google OAuth connection with Drive scope.
1265
1177
  - Google-native files (Docs, Sheets, Slides) cannot be downloaded — use dedicated steps instead.
1266
1178
  - Maximum file size: 200MB.
1267
- - The file is downloaded and re-uploaded to the CDN; the returned URL is publicly accessible.
1179
+ - The file is downloaded and stored on the public CDN, where the returned URL is publicly accessible — pass `store` to put it in one of the app's own file stores instead, which for a private store means the URL only loads for an authorized session.
1268
1180
  - Input: `{ fileId: string, connectionId?: string }`
1269
1181
  - Output: `{ url: string, name: string, mimeType: string, size: number }`
1270
1182
 
@@ -1444,61 +1356,16 @@ Update the content of an existing Notion page.
1444
1356
  - Input: `{ pageId: string, content: string, mode: "append" | "overwrite", connectionId?: string }`
1445
1357
  - Output: `{ pageId: string, pageUrl: string }`
1446
1358
 
1447
- ### Particle Podcasts
1448
-
1449
- #### particlePodcastsFindMentions
1450
- Find every dialogue line mentioning a specific entity or company across all podcasts.
1451
- - Provide `entityId` (for people, products, places) OR `companyId` (for organizations). At least one is required.
1452
- - Use `contextLines` to include surrounding dialogue with each mention (default behavior is set by Particle).
1453
- - Resolve a name to an `entityId` / `companyId` first via Search Companies (or by inspecting a Search Dialogue response).
1454
- - Cursor-paginated; expect potentially large result sets for popular entities.
1455
- - Input: `{ entityId?: string, companyId?: string, contextLines?: number, limit?: number, cursor?: string }`
1456
- - Output: `unknown`
1359
+ ### QuickBooks
1457
1360
 
1458
- #### particlePodcastsGetEpisode
1459
- Fetch full metadata for a single episode: details, speakers, entities, clips, and ads — merged into one response.
1460
- - Pass an episode ID or slug as `id`.
1461
- - Returns five sub-resources merged: `episode` (metadata), `speakers` (diarized speaker list), `entities` (knowledge-graph mentions), `clips` (AI-extracted highlights), `ads` (detected ad spots).
1462
- - Use Get Episode Transcript separately when you need the full transcript text — it isn't bundled here because the payload is large and has its own format/range options.
1463
- - Bills as 5 units against the get-episode event type (one per sub-call).
1464
- - Input: `{ id: string }`
1465
- - Output: `unknown`
1466
-
1467
- #### particlePodcastsGetEpisodeTranscript
1468
- Fetch the diarized transcript for an episode in dialogue, plain text, or SRT subtitle format.
1469
- - Pass an episode ID or slug as `id`.
1470
- - Use `format` = "dialogue" (default, with speaker turns), "text" (plain), or "srt" (subtitle).
1471
- - Filter to a single speaker with `speaker`, or to a time range with `start` / `end` (seconds).
1472
- - Transcripts are large — prefer time-range filtering when you only need a snippet.
1473
- - Input: `{ id: string, format?: "dialogue" | "text" | "srt", speaker?: string, start?: number, end?: number }`
1474
- - Output: `unknown`
1475
-
1476
- #### particlePodcastsSearchCompanies
1477
- Search the Particle knowledge graph for companies by name, ticker, domain, CIK, or QID.
1478
- - Provide one or more identifiers: `q` (free-text name), `ticker` (e.g. "TSLA"), `domain` (e.g. "tesla.com"), `cik` (SEC), or `qid` (Wikidata).
1479
- - Use this to resolve a company name to a canonical `companyId` for use with Find Mentions or Search Dialogue.
1480
- - Returned company objects include slugs, domains, and IDs — any of these can be passed to downstream blocks.
1481
- - Input: `{ q?: string, ticker?: string, domain?: string, cik?: string, qid?: string, entityId?: string, updatedAfter?: string, limit?: number, cursor?: string }`
1482
- - Output: `unknown`
1483
-
1484
- #### particlePodcastsSearchDialogue
1485
- Search across podcast dialogue using semantic or keyword search. Returns matched lines grouped by episode.
1486
- - Provide `semanticSearch` for meaning-based discovery ("find moments where someone talks about market timing") or `keywordSearch` for exact phrase/proper-noun matching. At least one must be provided.
1487
- - Filter to a specific entity or company by passing `entityId` / `companyId`.
1488
- - Each returned dialogue line carries the source episode + speaker so you can chain to Get Episode or Get Episode Transcript for context.
1489
- - Cursor-paginated.
1490
- - Input: `{ semanticSearch?: string, keywordSearch?: string, entityId?: string, companyId?: string, limit?: number, cursor?: string }`
1491
- - Output: `unknown`
1492
-
1493
- #### particlePodcastsSearchPodcasts
1494
- Search and list podcasts in the Particle catalog by keyword, topic, or language.
1495
- - Use `q` for free-text keyword search across podcast titles and descriptions.
1496
- - Use `topic` to filter to a Particle taxonomy topic.
1497
- - Use `language` (BCP 47, e.g. "en") to restrict to a language.
1498
- - Returns podcast objects with canonical IDs and slugs. Pass either to other Particle Podcasts blocks.
1499
- - Cursor-paginated; pass the returned `cursor` back to `cursor` for the next page.
1500
- - Input: `{ q?: string, topic?: string, language?: string, suitabilityTier?: string, limit?: number, cursor?: string }`
1501
- - Output: `unknown`
1361
+ #### quickbooksApiRequest
1362
+ Call any QuickBooks Online Accounting API route using a connected company.
1363
+ - Requires a QuickBooks OAuth connection (connectionId).
1364
+ - Route is relative to /v3/company/{realmId}/, e.g. "account", "account/93", "query", "invoice".
1365
+ - Use queryParams for query-string values such as query=select * from Account.
1366
+ - Body is JSON for POST, PUT, and PATCH.
1367
+ - Input: `{ connectionId?: string, method: string, route: string, queryParams: object, body: string }`
1368
+ - Output: `{ ok: boolean, status: number, body: unknown }`
1502
1369
 
1503
1370
  ### X
1504
1371
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindstudio-ai/agent",
3
- "version": "0.1.125",
3
+ "version": "0.1.126",
4
4
  "description": "TypeScript SDK for MindStudio direct step execution",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",