From 802767ed61c2f790eaa3514eeae107ca3c169c97 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Fri, 10 Jul 2026 16:53:17 -0700 Subject: [PATCH 1/3] feat(docs): update favicon, fix icon contrast, add integration intros - replace docs favicon/icon assets with new sim logo - fix light-tile icon contrast in BlockInfoCard so icons like Daytona no longer render invisible (white-on-white); matches sim toolbar's brightness-based contrast logic - add missing MANUAL-CONTENT-START:intro sections to 30 integration docs pages that lacked context/links --- apps/docs/app/favicon.ico | Bin 15086 -> 4414 bytes apps/docs/components/ui/block-info-card.tsx | 34 ++++++++++++++++-- .../docs/en/integrations/brandfetch.mdx | 13 +++++++ .../docs/en/integrations/brightdata.mdx | 14 ++++++++ .../docs/en/integrations/codepipeline.mdx | 13 +++++++ .../docs/en/integrations/context_dev.mdx | 13 +++++++ .../docs/en/integrations/crowdstrike.mdx | 12 +++++++ .../docs/en/integrations/deployments.mdx | 10 ++++++ .../docs/en/integrations/downdetector.mdx | 13 +++++++ .../docs/en/integrations/emailbison.mdx | 13 +++++++ .../docs/en/integrations/enrichment.mdx | 6 ++++ .../content/docs/en/integrations/extend.mdx | 6 ++++ .../content/docs/en/integrations/file.mdx | 14 ++++++++ .../docs/en/integrations/google_contacts.mdx | 12 +++++++ .../content/docs/en/integrations/granola.mdx | 12 +++++++ .../docs/en/integrations/instantly.mdx | 13 +++++++ .../content/docs/en/integrations/jupyter.mdx | 12 +++++++ .../content/docs/en/integrations/logs.mdx | 12 +++++++ .../content/docs/en/integrations/monday.mdx | 14 ++++++++ .../content/docs/en/integrations/mysql.mdx | 13 +++++++ .../docs/en/integrations/postgresql.mdx | 13 +++++++ .../content/docs/en/integrations/rb2b.mdx | 13 +++++++ .../content/docs/en/integrations/sftp.mdx | 14 ++++++++ .../docs/en/integrations/sixtyfour.mdx | 13 +++++++ .../content/docs/en/integrations/smtp.mdx | 12 +++++++ .../docs/en/integrations/sportmonks.mdx | 13 +++++++ .../content/docs/en/integrations/square.mdx | 13 +++++++ .../docs/content/docs/en/integrations/ssh.mdx | 12 +++++++ .../content/docs/en/integrations/thrive.mdx | 14 ++++++++ .../content/docs/en/integrations/twilio.mdx | 12 +++++++ .../docs/en/integrations/uptimerobot.mdx | 14 ++++++++ .../content/docs/en/integrations/workday.mdx | 15 ++++++++ .../public/favicon/android-chrome-192x192.png | Bin 2617 -> 5550 bytes .../public/favicon/android-chrome-512x512.png | Bin 2783 -> 18335 bytes apps/docs/public/favicon/apple-touch-icon.png | Bin 4342 -> 5102 bytes apps/docs/public/favicon/favicon-16x16.png | Bin 425 -> 432 bytes apps/docs/public/favicon/favicon-32x32.png | Bin 814 -> 840 bytes apps/docs/public/favicon/favicon-96x96.png | Bin 2271 -> 2626 bytes .../favicon/web-app-manifest-192x192.png | Bin 4531 -> 5550 bytes .../favicon/web-app-manifest-512x512.png | Bin 12945 -> 18335 bytes apps/docs/public/icon.svg | 2 +- 41 files changed, 406 insertions(+), 3 deletions(-) diff --git a/apps/docs/app/favicon.ico b/apps/docs/app/favicon.ico index 9aa82bcf046763fb94ffcb3235ad88f6c2bb3626..b88d2804414dc49945118eed487f496033f2fabd 100644 GIT binary patch literal 4414 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 O542?u=KHo)N&N>ImdASl diff --git a/apps/docs/components/ui/block-info-card.tsx b/apps/docs/components/ui/block-info-card.tsx index f5085c6da17..39f3c25fbd2 100644 --- a/apps/docs/components/ui/block-info-card.tsx +++ b/apps/docs/components/ui/block-info-card.tsx @@ -9,12 +9,40 @@ interface BlockInfoCardProps { icon?: React.ComponentType<{ className?: string }> } +/** + * Brightness above which a tile background is "clearly light" and a white + * foreground icon would wash out. Mirrors apps/sim's LIGHT_TILE_THRESHOLD + * (blocks/icon-color.ts) so monochrome `currentColor` icons (e.g. Daytona, + * Notion) stay legible on white/pale tiles instead of white-on-white. + */ +const LIGHT_TILE_THRESHOLD = 0.75 + +function isLightTileColor(color: string): boolean { + const hex = color.trim().replace('#', '').toLowerCase() + let r: number + let g: number + let b: number + if (/^[0-9a-f]{3}$/.test(hex)) { + r = Number.parseInt(hex[0] + hex[0], 16) + g = Number.parseInt(hex[1] + hex[1], 16) + b = Number.parseInt(hex[2] + hex[2], 16) + } else if (/^[0-9a-f]{6}$/.test(hex)) { + r = Number.parseInt(hex.slice(0, 2), 16) + g = Number.parseInt(hex.slice(2, 4), 16) + b = Number.parseInt(hex.slice(4, 6), 16) + } else { + return false + } + return (0.299 * r + 0.587 * g + 0.114 * b) / 255 > LIGHT_TILE_THRESHOLD +} + export function BlockInfoCard({ type, color, icon: IconComponent, }: BlockInfoCardProps): React.ReactNode { const ResolvedIcon = IconComponent || blockTypeToIconMap[type] || null + const iconColorClass = isLightTileColor(color) ? 'text-black' : 'text-white' return (
{ResolvedIcon ? ( - + ) : ( -
{type.substring(0, 2)}
+
+ {type.substring(0, 2)} +
)}
) diff --git a/apps/docs/content/docs/en/integrations/brandfetch.mdx b/apps/docs/content/docs/en/integrations/brandfetch.mdx index bd4d7ee6501..71ddf0135a4 100644 --- a/apps/docs/content/docs/en/integrations/brandfetch.mdx +++ b/apps/docs/content/docs/en/integrations/brandfetch.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#000000" /> +{/* MANUAL-CONTENT-START:intro */} +[Brandfetch](https://brandfetch.com/) is a brand data API that provides logos, colors, fonts, and firmographic information for companies, looked up by domain, stock ticker, ISIN, or crypto symbol. + +With Brandfetch, you can: + +- **Retrieve brand assets**: Pull logos, icons, and symbols in multiple formats and themes for a given brand +- **Get brand style data**: Access brand colors and fonts, including type, theme, and origin +- **Look up company info**: Retrieve firmographic data such as employees, location, and industries, along with a data quality score +- **Search for brands**: Find brands by name and get back their domains and icons + +In Sim, the Brandfetch integration allows your agents to look up a brand's logos, colors, fonts, links, and company data by domain, ticker, ISIN, or crypto symbol, or search for a brand by name to find its domain and icon. This lets agents automate tasks like enriching company records with brand assets, verifying brand identity details, or sourcing logos and color palettes for design and reporting workflows. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Brandfetch into your workflow. Retrieve brand logos, colors, fonts, and company data by domain, ticker, or name search. diff --git a/apps/docs/content/docs/en/integrations/brightdata.mdx b/apps/docs/content/docs/en/integrations/brightdata.mdx index 2cbf754f4eb..bbdac221c94 100644 --- a/apps/docs/content/docs/en/integrations/brightdata.mdx +++ b/apps/docs/content/docs/en/integrations/brightdata.mdx @@ -10,6 +10,20 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FFFFFF" /> +{/* MANUAL-CONTENT-START:intro */} +[Bright Data](https://brightdata.com/) is a web data platform that provides tools for scraping, searching, and extracting structured data from websites at scale, bypassing anti-bot protections, CAPTCHAs, and IP blocks along the way. + +With Bright Data, you can: + +- **Scrape any URL**: Fetch page content through Web Unlocker, with automatic anti-bot bypassing and optional Markdown conversion +- **Search the web**: Query Google, Bing, DuckDuckGo, or Yandex through the SERP API and get structured results +- **Discover content by intent**: Run AI-powered searches that rank results by relevance to a stated goal, with optional cleaned page content for RAG +- **Run pre-built scrapers**: Trigger one of 660+ dataset scrapers for platforms like Amazon, LinkedIn, and Instagram, either synchronously for quick jobs or asynchronously via snapshots for larger ones + +In Sim, the Bright Data integration allows your agents to scrape web pages, run search-engine queries, discover and rank content by intent, and trigger structured data extraction jobs against sites like Amazon and LinkedIn. Agents can check the status of async scraping jobs, download completed snapshot results, and cancel jobs still in progress—making it possible to build workflows that gather, monitor, and retrieve web data end to end. +{/* MANUAL-CONTENT-END */} + + ## Usage Instructions Integrate Bright Data into the workflow. Scrape any URL with Web Unlocker, search Google and other engines with SERP API, discover web content ranked by intent, or trigger pre-built scrapers for structured data extraction. diff --git a/apps/docs/content/docs/en/integrations/codepipeline.mdx b/apps/docs/content/docs/en/integrations/codepipeline.mdx index 155de0cb7d6..92e19abcab3 100644 --- a/apps/docs/content/docs/en/integrations/codepipeline.mdx +++ b/apps/docs/content/docs/en/integrations/codepipeline.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="linear-gradient(45deg, #2E27AD 0%, #527FFF 100%)" /> +{/* MANUAL-CONTENT-START:intro */} +[AWS CodePipeline](https://aws.amazon.com/codepipeline/) is a continuous delivery service that automates the build, test, and deploy phases of software release pipelines. It orchestrates pipeline stages and actions, tracking execution status, source revisions, and approval steps across a release process. + +With this integration, you can: + +- **Inspect pipelines**: List pipelines, retrieve a pipeline's stage and action structure, and check its current execution state +- **Track executions**: Get details on a specific execution or list recent executions and action-level history, including status, triggers, and source revisions +- **Control pipeline flow**: Start or stop executions, retry failed stages, and approve or reject pending manual approval actions +- **Manage stage transitions**: Disable or re-enable artifact transitions into or out of a stage to freeze or resume a pipeline + +In Sim, the AWS CodePipeline integration allows your agents to monitor and control release pipelines programmatically — listing pipelines and their structure, checking execution and action status, starting or stopping executions, retrying failed stages, approving or rejecting manual approvals, and enabling or disabling stage transitions. This lets your agents build deployment automation and approval workflows that respond to pipeline state in real time. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate AWS CodePipeline into workflows. Start, stop, and monitor pipeline executions, retry failed stages, and approve or reject manual approval actions. Requires AWS access key and secret access key. diff --git a/apps/docs/content/docs/en/integrations/context_dev.mdx b/apps/docs/content/docs/en/integrations/context_dev.mdx index 3cd1687a0fc..39d5436d221 100644 --- a/apps/docs/content/docs/en/integrations/context_dev.mdx +++ b/apps/docs/content/docs/en/integrations/context_dev.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#ffffff" /> +{/* MANUAL-CONTENT-START:intro */} +[Context.dev](https://context.dev/) is a web data API that scrapes, crawls, searches, and extracts data from the web, and resolves brand and company data from a domain, name, email, ticker, or transaction descriptor. + +With Context.dev, you can: + +- **Scrape and crawl pages**: Convert URLs to clean markdown or HTML, capture screenshots, discover images, crawl entire sites, and map sitemaps +- **Search the web**: Run natural language searches with domain filters and optional markdown scraping of results +- **Extract structured data**: Pull data matching a JSON schema, or detect and extract product details and catalogs from a page or domain +- **Analyze brand and design data**: Extract a domain's fonts and design system, classify a brand into NAICS/SIC industry codes, and resolve brand data (logos, colors, socials, address) from a domain, company name, email, ticker, or transaction descriptor + +In Sim, the Context.dev integration allows your agents to scrape and crawl web pages into markdown or HTML, capture screenshots, search the web, extract structured data and product information, pull a site's fonts and style guide, classify a brand's industry, and look up brand assets and company details by domain, name, email, ticker, or transaction — all through a single set of API calls in your workflow. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Context.dev into the workflow. Scrape pages to markdown or HTML, capture screenshots, list images, crawl entire sites, map sitemaps, search the web, extract structured data and products, pull design systems, classify industries, and retrieve brand assets by domain, name, email, ticker, or transaction — all from one API. diff --git a/apps/docs/content/docs/en/integrations/crowdstrike.mdx b/apps/docs/content/docs/en/integrations/crowdstrike.mdx index 92abd6aa84d..d111b6219af 100644 --- a/apps/docs/content/docs/en/integrations/crowdstrike.mdx +++ b/apps/docs/content/docs/en/integrations/crowdstrike.mdx @@ -10,6 +10,18 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#E01F3D" /> +{/* MANUAL-CONTENT-START:intro */} +[CrowdStrike](https://www.crowdstrike.com/) is a cybersecurity platform providing endpoint protection, threat intelligence, and identity security through its Falcon suite. This integration connects to the Falcon Identity Protection API to query sensor data. + +With this integration, you can: + +- **Search sensors**: Query CrowdStrike identity protection sensors by hostname, IP, or related fields using Falcon Query Language filters +- **Fetch sensor details**: Retrieve documented sensor details, including protection status, policy assignments, and protocol configuration, for one or more device IDs +- **Run sensor aggregates**: Execute documented JSON aggregate queries to summarize sensor data into buckets and metrics + +In Sim, the CrowdStrike integration allows your agents to search identity protection sensors, look up detailed sensor records by device ID, and run aggregate queries against sensor data—all authenticated with a Falcon API client ID and secret against a specified cloud region. This lets agents surface device protection status, policy coverage, and protocol configuration (Kerberos, LDAP, NTLM, RDP, SMB) as part of security monitoring and reporting workflows. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate CrowdStrike Identity Protection into workflows to search sensors, fetch documented sensor details by device ID, and run documented sensor aggregate queries. diff --git a/apps/docs/content/docs/en/integrations/deployments.mdx b/apps/docs/content/docs/en/integrations/deployments.mdx index 17251cc0269..c19eb9e93b9 100644 --- a/apps/docs/content/docs/en/integrations/deployments.mdx +++ b/apps/docs/content/docs/en/integrations/deployments.mdx @@ -10,6 +10,16 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#0C0C0C" /> +{/* MANUAL-CONTENT-START:intro */} +Deployments is Sim's built-in system for taking a workflow's draft state live for API execution and managing its version history. Every deploy creates a new version, and past versions stay available for review or rollback. + +- **Deploy and undeploy**: Push the current draft live as a new version, or take a live workflow offline and remove its triggers, webhooks, and schedules +- **Promote or roll back**: Make any past version the live one without creating a new version, including re-deploying an undeployed workflow at a known-good version +- **Inspect version history**: List every deployment version with its metadata, or fetch the full workflow state snapshot for a specific version + +In Sim, the Deployments block allows your agents to deploy and undeploy workflows, promote a specific version to live for rollbacks, list all deployment versions of a workflow, and retrieve the deployed state snapshot of any past version—all programmatically as part of another workflow. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Deploy, undeploy, and roll back workflows in the current workspace. Promote a previous deployment version to live, list every version, or fetch the deployed workflow state for a specific version. diff --git a/apps/docs/content/docs/en/integrations/downdetector.mdx b/apps/docs/content/docs/en/integrations/downdetector.mdx index 25bf65df90a..64298db46f1 100644 --- a/apps/docs/content/docs/en/integrations/downdetector.mdx +++ b/apps/docs/content/docs/en/integrations/downdetector.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FFFFFF" /> +{/* MANUAL-CONTENT-START:intro */} +[Downdetector](https://downdetector.com/) is an outage-tracking service that aggregates user-submitted reports to detect and visualize real-time service disruptions for thousands of companies. The Downdetector Enterprise API exposes this data programmatically for monitoring and alerting. + +With Downdetector, you can: + +- **Search and identify companies**: Look up monitored companies by name, slug, country, or category to get their ids and status page URLs +- **Check current status and trends**: Read a company's cached status, 24h report statistics, and baseline to judge whether current activity is abnormal +- **Inspect problem indicators**: See which specific issues (e.g. "Login", "App crashing") are being reported and in what proportion +- **Track incidents and events**: Pull incident timelines, published events, and attribution data (internal vs. external cause, user impact) for outages + +In Sim, the Downdetector integration allows your agents to search for monitored companies, check their current status and baseline reports, retrieve near-real-time report counts and problem indicators, and pull incident, event, and attribution data — all programmatically through API calls. This enables your agents to power outage alerts, monitoring dashboards, and automated incident summaries that stay current with service disruptions across the companies and regions Downdetector tracks. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Track real-time service outages with the Downdetector Enterprise API. Search monitored companies, read their current status and report trends, inspect problem indicators, and pull incident timelines to power outage alerts and dashboards. Requires a Downdetector Enterprise API plan. diff --git a/apps/docs/content/docs/en/integrations/emailbison.mdx b/apps/docs/content/docs/en/integrations/emailbison.mdx index 8a3050d5d50..f6455a610b3 100644 --- a/apps/docs/content/docs/en/integrations/emailbison.mdx +++ b/apps/docs/content/docs/en/integrations/emailbison.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FB7A22" /> +{/* MANUAL-CONTENT-START:intro */} +[Email Bison](https://emailbison.com/) is a cold email outreach and deliverability platform for managing leads, sending sequences, and tracking campaign performance. + +With Email Bison, you can: + +- **Manage leads**: Create, update, retrieve, and tag leads, and track their engagement across campaigns +- **Run campaigns**: Create campaigns, attach leads, and pause, resume, or archive them as needed +- **Track replies**: List and filter incoming replies by status, folder, campaign, sender, lead, or tag +- **React to events**: Trigger workflows on first email sent, interested replies, unsubscribes, bounces, opens, and sender account changes + +In Sim, the Email Bison integration allows your agents to create and update leads, list and filter leads/campaigns/replies, attach leads to campaigns, manage campaign status, and organize leads with tags — all programmatically through API calls. Combined with Email Bison triggers, agents can also react in real time to events like a contact being emailed, replying, marking interest, unsubscribing, or an email bouncing, making it possible to automate outbound outreach workflows end to end. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Email Bison into workflows. Create and update leads, manage campaigns, attach leads to campaigns, list replies, and organize leads with tags. diff --git a/apps/docs/content/docs/en/integrations/enrichment.mdx b/apps/docs/content/docs/en/integrations/enrichment.mdx index 702ceb50cf8..201065526a1 100644 --- a/apps/docs/content/docs/en/integrations/enrichment.mdx +++ b/apps/docs/content/docs/en/integrations/enrichment.mdx @@ -10,6 +10,12 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#9333EA" /> +{/* MANUAL-CONTENT-START:intro */} +Data Enrichment is a built-in Sim block that looks up missing data — work email, phone number, company domain, company info, and more — from fields you map in from your workflow. It runs a registered enrichment (like "Work Email" or "Phone Number") against the same provider cascade used by table enrichments, trying multiple providers until one returns a match. + +In Sim, the enrichment block allows your agents to fill in gaps in a record by supplying an enrichment id and a map of input values, then reading back whether a match was found and which provider (e.g. Hunter, People Data Labs) supplied the result. This lets workflows enrich leads or contacts inline — for example, taking a name and company and resolving a work email — without agents needing to call each provider's API directly. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Run a Sim enrichment to look up data — work email, phone number, company domain, company info, and more — from the fields you map in. Uses the same provider cascade as table enrichments. diff --git a/apps/docs/content/docs/en/integrations/extend.mdx b/apps/docs/content/docs/en/integrations/extend.mdx index d0a31696b13..af8a62c32ea 100644 --- a/apps/docs/content/docs/en/integrations/extend.mdx +++ b/apps/docs/content/docs/en/integrations/extend.mdx @@ -10,6 +10,12 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#000000" /> +{/* MANUAL-CONTENT-START:intro */} +[Extend](https://www.extend.ai/) is a document processing platform that uses AI to parse and extract structured content from documents, turning unstructured files into usable data. + +In Sim, the Extend integration allows your agents to submit a document for parsing and receive back the processed content as structured chunks and block-level elements, along with the page count and credits consumed by the run. This enables workflows to pull structured data out of documents—such as PDFs or other file references—for downstream steps to consume, without manually building document-parsing logic. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Extend AI into the workflow. Parse and extract structured content from documents or file references. diff --git a/apps/docs/content/docs/en/integrations/file.mdx b/apps/docs/content/docs/en/integrations/file.mdx index f4c7da583c9..f0710cb9bf3 100644 --- a/apps/docs/content/docs/en/integrations/file.mdx +++ b/apps/docs/content/docs/en/integrations/file.mdx @@ -10,6 +10,20 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#F5F5F5" /> +{/* MANUAL-CONTENT-START:intro */} +The File block is a built-in Sim block for working with files stored in the workspace, or fetched from external URLs. It handles reading, writing, appending, compressing, decompressing, and sharing files as part of a workflow. + +With the File block, you can: + +- **Read and extract content**: Load workspace file objects and extract their text content +- **Fetch from URLs**: Retrieve and parse files from external URLs with custom headers +- **Write and append**: Create new workspace files or append content to existing ones +- **Compress and decompress**: Bundle files into a .zip archive or extract an archive into the workspace +- **Manage sharing**: Enable or disable a public share link for a file, with public, password, email, or SSO access modes + +In Sim, the File block allows your agents to read and extract text from workspace files, fetch and parse files from URLs, write or append content to files, bundle files into or out of .zip archives, and control public sharing access for a file—all programmatically as steps in a workflow. This makes it possible to move file content into and out of a workflow, package outputs for download or transfer, and expose files to external users through a managed share link. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Read workspace file objects, extract the text content of files, fetch and parse files from URLs with optional headers, write new workspace files, append content to existing files, compress files into a .zip archive, extract a .zip archive into the workspace, or manage the public share link for a file. diff --git a/apps/docs/content/docs/en/integrations/google_contacts.mdx b/apps/docs/content/docs/en/integrations/google_contacts.mdx index 3a98b2aea67..46ad1db4dfb 100644 --- a/apps/docs/content/docs/en/integrations/google_contacts.mdx +++ b/apps/docs/content/docs/en/integrations/google_contacts.mdx @@ -10,6 +10,18 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FFFFFF" /> +{/* MANUAL-CONTENT-START:intro */} +[Google Contacts](https://contacts.google.com/) is Google's contact management service, letting people store and organize names, emails, phone numbers, and organization details for everyone they communicate with. + +With this block, you can: + +- **Create and update contacts**: Add new contacts or edit existing ones with names, emails, phone numbers, organization, job title, and notes +- **Retrieve and list contacts**: Fetch a specific contact by resource name or list contacts with pagination and sort order +- **Search and delete contacts**: Find contacts by name, email, phone, or organization, or remove a contact entirely + +In Sim, the Google Contacts integration allows your agents to create, read, update, delete, list, and search contacts programmatically within a workflow. This enables agents to keep a contact directory in sync, look up contact details before sending communications, or search for matching contacts by name, email, phone, or organization as part of a larger automation. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Google Contacts into the workflow. Can create, read, update, delete, list, and search contacts. diff --git a/apps/docs/content/docs/en/integrations/granola.mdx b/apps/docs/content/docs/en/integrations/granola.mdx index e1d96ad531d..bfebcd6725c 100644 --- a/apps/docs/content/docs/en/integrations/granola.mdx +++ b/apps/docs/content/docs/en/integrations/granola.mdx @@ -10,6 +10,18 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#B2C147" /> +{/* MANUAL-CONTENT-START:intro */} +[Granola](https://www.granola.ai/) is an AI notepad for meetings that automatically records and transcribes calls, then generates structured notes and summaries alongside your own typed notes. + +With Granola, you can: + +- **List meeting notes**: Browse notes with date filters, folder scoping, and pagination +- **Retrieve full note details**: Get summaries, attendees, calendar event details, and transcripts for a specific note +- **Organize by folders**: List and filter notes using Granola's folder structure + +In Sim, the Granola integration allows your agents to pull meeting notes, summaries, and transcripts directly into a workflow. Agents can list recent notes with date or folder filters, fetch a specific note's summary text, attendees, and calendar details, retrieve the full transcript with speaker labels when needed, and browse folders to organize retrieval. This makes it possible to build workflows that surface meeting outcomes, route action items, or feed meeting context into downstream agent reasoning. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Granola into your workflow to retrieve meeting notes, summaries, attendees, and transcripts. diff --git a/apps/docs/content/docs/en/integrations/instantly.mdx b/apps/docs/content/docs/en/integrations/instantly.mdx index 2dd0ae4923f..b4255efa658 100644 --- a/apps/docs/content/docs/en/integrations/instantly.mdx +++ b/apps/docs/content/docs/en/integrations/instantly.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FFFFFF" /> +{/* MANUAL-CONTENT-START:intro */} +[Instantly](https://instantly.ai/) is a cold email outreach platform used to send, manage, and scale email campaigns to leads. It provides tools for lead management, campaign scheduling, and reply tracking through its Unibox inbox. + +With Instantly, you can: + +- **Manage leads**: Create, update, search, and delete leads across campaigns and lead lists +- **Run campaigns**: Create, update, activate, pause, and delete email campaigns with custom schedules and sequences +- **Handle replies**: List Unibox emails and reply to leads directly from a connected sending account +- **Organize lead lists**: Create and list lead lists, and track lead interest status + +In Sim, the Instantly integration allows your agents to manage leads and campaigns programmatically — retrieving and creating leads, updating lead interest status, listing and controlling campaigns (create, patch, activate, pause, delete), reading and replying to Unibox emails, and creating or listing lead lists. This lets your agents automate outbound email workflows, such as syncing new leads into campaigns, monitoring campaign status, and responding to replies without leaving the workflow. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Instantly API V2 into workflows. Create, update, and list leads, manage lead interest status, delete leads in bulk, list, create, patch, activate, pause, and delete campaigns, reply to emails, and manage lead lists. diff --git a/apps/docs/content/docs/en/integrations/jupyter.mdx b/apps/docs/content/docs/en/integrations/jupyter.mdx index 81c333a73f2..3d7a72a78be 100644 --- a/apps/docs/content/docs/en/integrations/jupyter.mdx +++ b/apps/docs/content/docs/en/integrations/jupyter.mdx @@ -10,6 +10,18 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FFFFFF" /> +{/* MANUAL-CONTENT-START:intro */} +[Jupyter](https://jupyter.org/) is an open-source platform for interactive computing, best known for the Jupyter Notebook interface that combines live code, visualizations, and narrative text. It runs as a server that exposes files, notebooks, kernels, and sessions over an HTTP API. + +With Jupyter, you can: + +- **Manage files and notebooks**: List, read, create, upload, rename, copy, and delete files, notebooks, and directories +- **Control kernels**: List, start, stop, restart, and interrupt the runtimes that execute notebook code +- **Manage sessions**: List, create, and delete sessions that bind a notebook path to a running kernel + +In Sim, the Jupyter integration allows your agents to connect to a self-hosted Jupyter server and drive it programmatically—browsing and editing files and notebooks, uploading content, and managing kernels and sessions that bind notebooks to running code environments. This lets your agents automate notebook-based workflows, such as provisioning a kernel, writing or updating notebook content, and cleaning up sessions and files as part of a larger pipeline. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate a self-hosted Jupyter server into the workflow. Browse, read, create, upload, rename, copy, and delete files and notebooks; start, stop, restart, and interrupt kernels; and manage sessions that bind notebooks to kernels. diff --git a/apps/docs/content/docs/en/integrations/logs.mdx b/apps/docs/content/docs/en/integrations/logs.mdx index 2295215662c..66335780a35 100644 --- a/apps/docs/content/docs/en/integrations/logs.mdx +++ b/apps/docs/content/docs/en/integrations/logs.mdx @@ -10,6 +10,18 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#EAB308" /> +{/* MANUAL-CONTENT-START:intro */} +The Logs block gives agents programmatic access to workflow run history in the current workspace. It queries the same run data shown on the Logs page and can fetch full execution detail for any individual run. + +With Logs, you can: + +- **Query run history**: Filter runs by workflow, folder, status, trigger type, date range, cost, and duration, with sorting and free-text search +- **Fetch run details**: Retrieve a specific run's status, trigger, timing, cost, and final output by run ID +- **Inspect execution traces**: Pull the full trace spans for a run to see how it executed step by step + +In Sim, the Logs block allows your agents to search and filter workflow run history using the same filters available on the Logs page, then drill into a specific run to retrieve its status, cost, duration, final output, and full trace spans. This lets agents monitor other workflows, audit past executions, and pull execution details programmatically as part of a larger workflow. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Query workflow run logs in the current workspace with the same filters as the Logs page, returning matching run IDs. Fetch full details for a single run, including its trace spans. diff --git a/apps/docs/content/docs/en/integrations/monday.mdx b/apps/docs/content/docs/en/integrations/monday.mdx index 35a2e25eced..4e4941f2c9e 100644 --- a/apps/docs/content/docs/en/integrations/monday.mdx +++ b/apps/docs/content/docs/en/integrations/monday.mdx @@ -10,6 +10,20 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FFFFFF" /> +{/* MANUAL-CONTENT-START:intro */} +[Monday.com](https://monday.com/) is a work operating system that teams use to plan, track, and manage projects through customizable boards, items, and columns. Boards organize work into groups of items, with columns tracking status, dates, people, and other structured data for each item. + +With Monday.com, you can: + +- **Manage boards**: List, retrieve, and create boards along with their groups and columns +- **Manage items**: Fetch, search, create, update, duplicate, archive, and delete items +- **Organize work**: Create subitems, move items between groups, and add updates or comments +- **React to events**: Trigger workflows on column changes, item creation, status changes, and more + +In Sim, the Monday.com integration allows your agents to list and inspect boards, fetch and search items by column values, create and update items and subitems, change column values, move items between groups, post updates, and create new boards, groups, and columns—all programmatically through API calls. Triggers let workflows react automatically to events such as column value changes, item creation or deletion, status changes, items being moved between groups, and updates being posted, making it possible to keep external systems in sync with activity on a Monday.com board. +{/* MANUAL-CONTENT-END */} + + ## Usage Instructions Integrate with Monday.com to list boards, get board details, fetch and search items, create and update items, archive or delete items, create subitems, move items between groups, add updates, and create groups. diff --git a/apps/docs/content/docs/en/integrations/mysql.mdx b/apps/docs/content/docs/en/integrations/mysql.mdx index 35202422f41..3348aa15741 100644 --- a/apps/docs/content/docs/en/integrations/mysql.mdx +++ b/apps/docs/content/docs/en/integrations/mysql.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FFFFFF" /> +{/* MANUAL-CONTENT-START:intro */} +[MySQL](https://www.mysql.com/) is a widely used open-source relational database system. The MySQL block connects your workflow directly to a MySQL database, letting you read and write data without leaving Sim. It handles the connection details—host, port, database, credentials, and SSL mode—so blocks can query, insert, update, delete, and execute raw SQL against your database. + +With the MySQL block, you can: + +- **Query data**: Run SELECT statements and get back rows with a row count +- **Insert, update, and delete records**: Write key-value data to a table or modify existing rows with a WHERE clause +- **Execute raw SQL**: Run arbitrary SQL statements, such as DDL for creating tables +- **Introspect the schema**: Retrieve table structures, columns, keys, indexes, and the list of available databases on the server + +In Sim, the MySQL block allows your agents to read from and write to a MySQL database as part of a workflow—querying records to feed downstream logic, inserting or updating rows based on agent output, cleaning up data with deletes, running custom SQL for one-off operations, and introspecting the schema to understand table structure before generating queries. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate MySQL into the workflow. Can query, insert, update, delete, and execute raw SQL. diff --git a/apps/docs/content/docs/en/integrations/postgresql.mdx b/apps/docs/content/docs/en/integrations/postgresql.mdx index a864f4b4b4f..e64f304c3b2 100644 --- a/apps/docs/content/docs/en/integrations/postgresql.mdx +++ b/apps/docs/content/docs/en/integrations/postgresql.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#336791" /> +{/* MANUAL-CONTENT-START:intro */} +[PostgreSQL](https://www.postgresql.org/) is a widely used open-source relational database system known for reliability, extensibility, and standards compliance. It stores structured data in tables and supports SQL for querying, transactions, and schema management. + +With this integration, you can: + +- **Query data**: Run SELECT statements to retrieve rows from a database +- **Insert, update, and delete data**: Write, modify, and remove rows in a table +- **Execute raw SQL**: Run arbitrary SQL statements directly against the database +- **Introspect schemas**: Retrieve table structures, columns, primary/foreign keys, and indexes + +In Sim, the PostgreSQL integration allows your agents to connect to a PostgreSQL database and query, insert, update, delete, and execute raw SQL against it, as well as introspect the database schema to discover tables, columns, and relationships. This gives your agents the ability to read and write structured data as part of a workflow, and to understand a database's structure before generating or running queries against it. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate PostgreSQL into the workflow. Can query, insert, update, delete, and execute raw SQL. diff --git a/apps/docs/content/docs/en/integrations/rb2b.mdx b/apps/docs/content/docs/en/integrations/rb2b.mdx index 45096416cfc..dae1ac435ef 100644 --- a/apps/docs/content/docs/en/integrations/rb2b.mdx +++ b/apps/docs/content/docs/en/integrations/rb2b.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#51FF00" /> +{/* MANUAL-CONTENT-START:intro */} +[RB2B](https://rb2b.com/) is a website visitor identification and B2B enrichment platform that resolves anonymous website traffic into person-level identity data. It matches IP addresses, hashed emails, and LinkedIn profiles against its data graph to surface who is visiting a site and how to reach them. + +With RB2B, you can: + +- **Resolve IPs into identity signals**: Convert an IP address into hashed emails, mobile advertising IDs, or company domains +- **Enrich emails and LinkedIn profiles**: Turn a hashed email or LinkedIn slug into a full business profile with name, title, company, and contact details +- **Look up contact and activity data**: Retrieve mobile phone numbers, personal emails, and last-active dates for a known contact +- **Search for people**: Find a LinkedIn profile from a first name, last name, and company domain + +In Sim, the RB2B integration allows your agents to identify anonymous website visitors and enrich them into actionable contact records — resolving an IP address to a company or hashed email, expanding a hashed email or LinkedIn profile into a full business profile, and retrieving mobile phone numbers or personal emails for outreach. Agents can also check remaining API credits and confirm when a contact was last active, making the integration useful for lead identification, sales prospecting, and B2B enrichment workflows. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Resolve IP addresses, hashed emails, and LinkedIn profiles into person-level identity and B2B enrichment data using the RB2B API. Convert IPs to hashed emails, MAIDs, and company domains; enrich emails into LinkedIn profiles, business profiles, and mobile IDs; and look up emails or phone numbers from LinkedIn. Requires an RB2B API key. diff --git a/apps/docs/content/docs/en/integrations/sftp.mdx b/apps/docs/content/docs/en/integrations/sftp.mdx index 43fdffe9a9f..b47a06bb15d 100644 --- a/apps/docs/content/docs/en/integrations/sftp.mdx +++ b/apps/docs/content/docs/en/integrations/sftp.mdx @@ -10,6 +10,20 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#2D3748" /> +{/* MANUAL-CONTENT-START:intro */} +SFTP (SSH File Transfer Protocol) is a secure file transfer protocol that runs over an SSH connection, letting you move and manage files on a remote server without exposing credentials or data in plaintext. It supports authentication via password or private key, making it a standard choice for secure file exchange with servers, hosting providers, and legacy systems. + +With this block, you can: + +- **Upload files**: Send files or direct text content to a directory on a remote server +- **Download files**: Retrieve a file from the remote server as text or base64-encoded content +- **List directory contents**: Browse files and folders, optionally with detailed metadata like size and permissions +- **Delete files or directories**: Remove remote files, with optional recursive deletion for directories +- **Create directories**: Make new directories on the remote server, optionally creating parent directories as needed + +In Sim, the SFTP block allows your agents to upload, download, list, delete, and create files and directories on a remote server, all authenticated with a password or private key. This enables workflows that move generated files to a remote destination, pull files from a server for processing, sync directory contents, or manage remote file structures as part of a larger automation. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Upload, download, list, and manage files on remote servers via SFTP. Supports both password and private key authentication for secure file transfers. diff --git a/apps/docs/content/docs/en/integrations/sixtyfour.mdx b/apps/docs/content/docs/en/integrations/sixtyfour.mdx index cec9052552a..1e6aa085817 100644 --- a/apps/docs/content/docs/en/integrations/sixtyfour.mdx +++ b/apps/docs/content/docs/en/integrations/sixtyfour.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#000000" /> +{/* MANUAL-CONTENT-START:intro */} +[Sixtyfour AI](https://sixtyfour.ai/) is an AI-powered research platform that finds contact information and enriches lead and company data by researching the web. It combines automated search with structured data extraction to surface emails, phone numbers, and detailed profile information. + +With Sixtyfour AI, you can: + +- **Find phone numbers**: Locate phone numbers for a lead using their name, company, LinkedIn URL, or other identifying details +- **Find email addresses**: Discover professional or personal email addresses, complete with validation status +- **Enrich leads**: Research a person and return structured data matching custom fields, backed by source references and a confidence score +- **Enrich companies**: Research a company, optionally finding associated people and a full org chart, with results matching custom fields + +In Sim, the Sixtyfour AI integration allows your agents to look up phone numbers and emails for a lead, and enrich lead or company records with structured research data, source references, and confidence scores—all programmatically through API calls. This enables your agents to turn partial contact information into complete, verified profiles, and to build out organizational data such as employee counts and org charts as part of a workflow. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Find emails, phone numbers, and enrich lead or company data with contact information, social profiles, and detailed research using Sixtyfour AI. diff --git a/apps/docs/content/docs/en/integrations/smtp.mdx b/apps/docs/content/docs/en/integrations/smtp.mdx index 0e4bec244ac..3d017becd4e 100644 --- a/apps/docs/content/docs/en/integrations/smtp.mdx +++ b/apps/docs/content/docs/en/integrations/smtp.mdx @@ -10,6 +10,18 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#2D3748" /> +{/* MANUAL-CONTENT-START:intro */} +The SMTP block sends email through any standard SMTP mail server, including Gmail, Outlook, and self-hosted or custom mail servers. It connects directly using the server hostname, port, and credentials you provide rather than a vendor-specific API. + +With the SMTP block, you can: + +- **Connect to any SMTP server**: Configure host, port, and security protocol (TLS, SSL, or none) for the mail server of your choice +- **Control message content and formatting**: Set sender, recipients, subject, and body, with support for either plain text or HTML content +- **Reach multiple recipients and attach files**: Add CC and BCC recipients, set a reply-to address, and attach files to the outgoing email + +In Sim, the SMTP block allows your agents to send emails as part of a workflow by supplying connection details and message content, then confirming delivery through the returned success status and message ID. This makes it possible to notify recipients, deliver generated reports, or trigger email-based alerts directly from a workflow, with the block reporting the message ID on success or an error message if sending fails. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Send emails using any SMTP server (Gmail, Outlook, custom servers, etc.). Configure SMTP connection settings and send emails with full control over content, recipients, and attachments. diff --git a/apps/docs/content/docs/en/integrations/sportmonks.mdx b/apps/docs/content/docs/en/integrations/sportmonks.mdx index f3d3d673742..f741f1fc316 100644 --- a/apps/docs/content/docs/en/integrations/sportmonks.mdx +++ b/apps/docs/content/docs/en/integrations/sportmonks.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#171534" /> +{/* MANUAL-CONTENT-START:intro */} +[Sportmonks](https://www.sportmonks.com/) is a sports data provider offering structured APIs for football, motorsport, odds, and reference data used to power scores, statistics, and betting-related applications. + +With Sportmonks, you can access: + +- **Football data**: fixtures, livescores, leagues, seasons, stages, rounds, teams, squads, players, coaches, referees, venues, standings, topscorers, transfers, schedules, commentaries, TV stations, rivals, expected goals (xG), and predictions +- **Motorsport data**: sessions, drivers, teams, championship standings, laps, and pitstops +- **Odds data**: pre-match and in-play odds, bookmakers, and markets +- **Core reference data**: continents, countries, regions, cities, types, and time zones + +In Sim, the Sportmonks integration allows your agents to query fixtures, player and team statistics, transfer activity, standings, and odds directly within a workflow. Agents can pull expected goals (xG) by player or team, retrieve match commentaries and brackets, look up coaches and their histories, and enrich any of these with related data through the `include` parameter—enabling workflows that build match reports, track transfer rumours, or surface live odds and predictions. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate the Sportmonks sports data APIs into the workflow from a single block. Football: fixtures, livescores, leagues, seasons, stages, rounds, teams, squads, players, coaches, referees, venues, standings, topscorers, transfers, schedules, commentaries, TV stations, rivals, expected goals (xG), and predictions. Motorsport: sessions, drivers, teams, championship standings, laps, and pitstops. Odds: pre-match and in-play odds, bookmakers, and markets. Core: continents, countries, regions, cities, types, and time zones. diff --git a/apps/docs/content/docs/en/integrations/square.mdx b/apps/docs/content/docs/en/integrations/square.mdx index d741dbdb24d..53034fcf6c7 100644 --- a/apps/docs/content/docs/en/integrations/square.mdx +++ b/apps/docs/content/docs/en/integrations/square.mdx @@ -10,6 +10,19 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#000000" /> +{/* MANUAL-CONTENT-START:intro */} +[Square](https://squareup.com/) is a commerce platform that provides payment processing, point-of-sale, and business management tools for businesses of all sizes. It offers APIs for accepting payments, managing customers, and handling orders, invoices, and catalog data across online and in-person sales channels. + +With Square, you can: + +- **Process payments and refunds**: Take, retrieve, list, cancel, complete, and refund payments +- **Manage customers**: Create, retrieve, list, search, update, and delete customer profiles +- **Manage orders and invoices**: Create, retrieve, search, and pay for orders, and create, publish, cancel, and delete invoices +- **Manage catalog and inventory**: Upsert, retrieve, list, and search catalog objects, upload catalog images, and check inventory counts + +In Sim, the Square integration allows your agents to take and refund payments, manage customer profiles, look up business locations, create and track orders and invoices, and manage catalog items and inventory — all programmatically through API calls. This enables agents to handle real commerce operations such as charging a customer, issuing a refund, keeping customer records up to date, sending invoices, and maintaining product catalog and stock data, directly from a workflow. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Square into the workflow. Take and refund payments, manage customers, build catalog items and images, create and search orders, and issue invoices. Authenticate with a Square access token (personal access token). diff --git a/apps/docs/content/docs/en/integrations/ssh.mdx b/apps/docs/content/docs/en/integrations/ssh.mdx index 74a830b9edc..1affab8b0c7 100644 --- a/apps/docs/content/docs/en/integrations/ssh.mdx +++ b/apps/docs/content/docs/en/integrations/ssh.mdx @@ -10,6 +10,18 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#000000" /> +{/* MANUAL-CONTENT-START:intro */} +The SSH block connects to remote servers using the Secure Shell protocol, supporting both password and private key (OpenSSH format) authentication. It provides direct command execution and file system access on any server reachable over SSH. + +With SSH, you can: + +- **Run commands and scripts**: Execute shell commands or upload and run multi-line scripts with a configurable interpreter +- **Manage the file system**: Upload, download, read, write, move, rename, and delete files and directories +- **Inspect the remote environment**: Check whether a command or path exists, list directory contents, and retrieve system information such as OS, architecture, uptime, and disk/memory usage + +In Sim, the SSH block allows your agents to operate remote servers as part of a workflow—running commands and scripts, transferring and manipulating files, and gathering system diagnostics—all through authenticated SSH connections. This makes it possible to automate server administration, deployment steps, and remote data processing directly from an agent's workflow. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Execute commands, transfer files, and manage remote servers via SSH. Supports password and private key authentication for secure server access. diff --git a/apps/docs/content/docs/en/integrations/thrive.mdx b/apps/docs/content/docs/en/integrations/thrive.mdx index d2987593bad..f5a5608f3b5 100644 --- a/apps/docs/content/docs/en/integrations/thrive.mdx +++ b/apps/docs/content/docs/en/integrations/thrive.mdx @@ -10,6 +10,20 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#FFFFFF" /> +{/* MANUAL-CONTENT-START:intro */} +[Thrive Learning](https://thrivelearning.com/) is a learning management and compliance platform that helps organizations manage user onboarding, training assignments, and CPD tracking. It gives HR and L&D teams a central system for organizing learners into audiences, assigning content, and monitoring completion and compliance status. + +With Thrive, you can: + +- **Manage the user lifecycle**: Create, update, suspend, and delete users, and look them up by ID or ref +- **Organize audiences and structures**: Create and manage audiences, move them between parents, and manage their members and managers +- **Assign and track compliance**: Create assignments tied to content and audiences, and list or inspect the resulting enrolments +- **Record learning outcomes**: Create and query completion records, including skills acquired and RPL imports +- **Access content and activity data**: Look up content items and query user activity records + +In Sim, the Thrive Learning integration allows your agents to manage the full user lifecycle, organize audiences and their members and managers, create and track compliance assignments and enrolments, record and query learning completions, and retrieve content and activity records — all programmatically through API calls. This enables agents to automate onboarding, training assignment, and compliance reporting workflows directly against Thrive's tenant. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Thrive Learning into the workflow. Manage user lifecycle, audiences and their members and managers, content assignments and enrolments, learning completions, content and activity records, CPD, tags, and skills. diff --git a/apps/docs/content/docs/en/integrations/twilio.mdx b/apps/docs/content/docs/en/integrations/twilio.mdx index 6de83ac0136..eb72d6f7405 100644 --- a/apps/docs/content/docs/en/integrations/twilio.mdx +++ b/apps/docs/content/docs/en/integrations/twilio.mdx @@ -10,6 +10,18 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#6B7280" /> +{/* MANUAL-CONTENT-START:intro */} +[Twilio](https://www.twilio.com/) is a cloud communications platform that lets developers programmatically send and receive SMS, MMS, and voice calls. It provides a widely used API for building messaging into applications, including delivery status callbacks and inbound message handling. + +With the Twilio triggers, you can: + +- **React to message status changes**: Start a workflow whenever a sent message's status updates (sent, delivered, failed, undelivered) +- **React to inbound messages**: Start a workflow whenever an SMS or MMS is received on a Twilio number +- **Access full message context**: Read sender/recipient details, message body, media attachments, and error codes from the triggering event + +In Sim, the Twilio triggers allow your agents to start workflows directly from Twilio messaging events. The Twilio Message Status trigger fires when a message's delivery status changes, exposing fields like `messageSid`, `smsStatus`, `messageStatus`, and `errorCode` so a workflow can react to delivery failures or confirmations. The Twilio SMS Received trigger fires on inbound SMS/MMS messages, exposing the sender and recipient numbers, message body, and any attached media, so a workflow can process incoming texts, route them, or trigger automated replies. +{/* MANUAL-CONTENT-END */} + ## Triggers A **Trigger** is a block that starts a workflow when an event happens in this service. diff --git a/apps/docs/content/docs/en/integrations/uptimerobot.mdx b/apps/docs/content/docs/en/integrations/uptimerobot.mdx index eb875883b30..3d122ee5138 100644 --- a/apps/docs/content/docs/en/integrations/uptimerobot.mdx +++ b/apps/docs/content/docs/en/integrations/uptimerobot.mdx @@ -10,6 +10,20 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#111921" /> +{/* MANUAL-CONTENT-START:intro */} +[UptimeRobot](https://uptimerobot.com/) is a website and API monitoring service that tracks the availability of servers, endpoints, and heartbeat checks, alerting you when something goes down. It supports HTTP, keyword, ping, port, heartbeat, DNS, API, and UDP monitors, and can publish public status pages to keep users informed during incidents. + +With UptimeRobot, you can: + +- **Monitor uptime**: Create, update, pause, resume, and delete monitors across multiple check types +- **Track incidents**: List and inspect incidents, including root cause details like HTTP response codes +- **Schedule maintenance windows**: Suppress alerts during planned downtime, with one-time or recurring schedules +- **Manage alert contacts**: Create, retrieve, and delete email alert contacts for notifications +- **Publish status pages**: Create and update public status pages, optionally with a custom domain, logo, and icon + +In Sim, the UptimeRobot integration allows your agents to check monitor status, list and investigate incidents, create or update monitors and maintenance windows, manage alert contacts, and publish status pages—all through the UptimeRobot v3 API. This enables workflows that react to downtime, automate incident triage, schedule maintenance around deployments, and keep public status pages current without manual intervention. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate UptimeRobot into your workflow. Create and manage monitors, inspect incidents, schedule maintenance windows, manage alert contacts, and publish public status pages using the UptimeRobot v3 API. diff --git a/apps/docs/content/docs/en/integrations/workday.mdx b/apps/docs/content/docs/en/integrations/workday.mdx index 35652e80e9b..f2d751fee89 100644 --- a/apps/docs/content/docs/en/integrations/workday.mdx +++ b/apps/docs/content/docs/en/integrations/workday.mdx @@ -10,6 +10,21 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" color="#F5F0EB" /> +{/* MANUAL-CONTENT-START:intro */} +[Workday](https://www.workday.com/) is a cloud-based Human Capital Management (HCM) and finance system used by organizations to manage their workforce, from hiring through termination. It centralizes worker records, organizational structure, compensation, and HR business processes. + +With this integration, you can: + +- **Manage worker records**: Retrieve individual worker profiles or list and search workers with pagination +- **Run the hire lifecycle**: Create pre-hire records and convert them into active employees with position and start date +- **Update worker data**: Change fields on existing worker records, such as business title or work email +- **Handle job and org changes**: Process transfers, promotions, demotions, and lateral moves, and retrieve organizations, departments, and cost centers +- **Manage onboarding and compensation**: Assign onboarding plans and retrieve compensation plan details for a worker +- **Process terminations**: Initiate the termination business process with a reason and effective date + +In Sim, the Workday integration allows your agents to look up and update worker profiles, create pre-hires and hire them into positions, assign onboarding plans, process job changes and terminations, and pull organization and compensation data—all through Workday's Integration System User authentication. This lets your agents automate HR operations such as onboarding new employees, keeping worker records current, and managing the employee lifecycle directly from a workflow. +{/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Workday HRIS into your workflow. Create pre-hires, hire employees, manage worker profiles, assign onboarding plans, handle job changes, retrieve compensation data, and process terminations. diff --git a/apps/docs/public/favicon/android-chrome-192x192.png b/apps/docs/public/favicon/android-chrome-192x192.png index 891e730eabf254e38797dab36c7f1208e7bdf09b..01fa63be6f065507a5799dde61c6a9f8cc93c50a 100644 GIT binary patch literal 5550 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 literal 2617 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 K8s(R5!~X*vx~*3L diff --git a/apps/docs/public/favicon/android-chrome-512x512.png b/apps/docs/public/favicon/android-chrome-512x512.png index e22c3b295b0eaa42de9e19a43e80dd848a2cf314..70db080feedd30e90500e02f3b25e6732835834b 100644 GIT binary patch literal 18335 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 Sd`TeSpSp^+a?u^j(EkBP?Pw4H literal 2783 zcmbtVX;c)~60YtU1X&z7K12zd!6hmJ2^wV)MgkI)2v0N+6~VYbG%67UL}41yhe`yZ zAR^nK5e97E{{jt}Da0FL(KNDmIv zvm1vxaZro{9VltXei8P*#;)J6s}VaJP+X7VI(%D;Z>q5ER}@uZ>oaV5icOEP=@B*x zvAzuJe#F`md|8B5e0))WmHAk48!Ns;Ne3zw*x!zVRD6((rC(#w87z#&Gi&kmYK&cl zr#`?KYm9jxPtiwPjsLO5I6I89$FmN2b{(E~!t-p5XX6D|OmxF!FHGHvS3koHKgre3pxkv+<{^nC6QqTaX^hlJ;iN zna~d1ve_GfG&kS8#oH$_NwN4B(@_A8DR-CkTO*nzEwfXNwk`OjT{`P)@{a2#XZ7^g z|EwczS!?O?`G&6y^#A?Z;9pWdy;jeG_p>e=<)-m^2d>>7kjWi|Z|f9JQAoeWFAsocvznGq~L}g^g)m!@_ zXD8>`>Zpp+qofJ18$C0&l!%2HTT4dG1EQIgiPThFXw9?nyMj&JppvdR z>w4tV5mRN%eosmfnfeNP85|6T4pDz3wY#i({`PSjwtB&!w@6-P=4!uO>8fI1sxbG;S_ z#f{bbU|!2W2f^>2;2VQ+ztb|xX>FHy7x3sazo*sq!~D8EU{S2lR-cIi{RmZSJE`68 z09uj*S+CB_Z&ZVO%wSLLeiM)z|LLPbT%$`reH|(F&)F>Czi#ahB>jl!<@0InQ2KiC z7%Phrg+GtB_iZ(0$EzjTOE@=evcgMO5`%hm>zfC={T@d4yqV|SIh2se57*r02L&PJ ztrpwisrrVXa$~W}I`NlLLCGf%a}SUaH$uj1ei-R#-|oU{66w=qGqIG8NaNq)7eDSd zstT|0Q@_x#%(r6y2d3g~o^28Dp1s@nS4&^{r5+7-3fsOeOmIZ0+W!9>6zBrU1`Qz0 zfce+rlUFAS3we#9LC334_H&09uJ!P*=zG7dsEQh2VC_V9x^boDNonUOAC)YWA1f0n zEeX0DIOOuNc{>UQ8!JSMXR^&MiE4g$L+$?a@^snxK0yTXIl}{moMFq~1QDqc|NB<1 zfl*bt9Y+b>8FxDEzL8xXrG7qsblPSrW;tWBzp!d$aUklj4>$KI!h>0)-27>R+pw2~ zeP4s4&S-;UQdK&-+(>vVFY*-c>GW@Qx}6cPIG9~23vpphDJBOXVyeM0v!IFNPdb

)HLv{YsTvChrVOZ_ z@hF~2k7cb?v#rIFQfRT8^x1b;2uGp%*=UB%i4stDlUJOf>Suzk9TDSoAblUL2$NaB zVo-5}@DcE<}MZcwSs<{f-)6|D{-WKy4Oe}7I%*EC$wp&C40&l$(yKM0P4&kD>%7dmllE@mO-}Rr?NdABxD=)#+pZk4aIjB#)dPkA5iXs zA3a$jJ>eKh2d|4kmBQI8Bdn>9c`Hb20dY24tW|bm<1Rh$m>nQZTcUhJhgXL6sPQ_)#n=UaTlTnDd1;92@IQetDfD4aH# zd{+@IG6!-Z$~RFu=_TMtyUeNZCivf8q!d|olAY4uN`F!pYtFwIa&?ot&@r(`XT7k~ z=w-%6@<4V?Tu4wsG3MHF?%PX5OF^VI5$b5FNp61DQ+an$fM;CC!V`TphHjV62_5G= ziJho7=rh{1gtRw(p8okyi^(F-xB2IU7wYX3D)(~7KHK|&*R;{mI7?TSUxjfbpE2E( zqe1qw*!9u6%pXC6X8H;Lu!5q_Nx99(l7S)CZcF%s?p2n*bJ#sec(i3}#UG5utfbq7 zp0yL92v03>A046DMB|F7ic6G{>%I}&6-TxoY|EV3)$ri6YlFVi$tOiV4j28xe!XLU zVnT7ylcWHgTt2uW+?aE`Aare@wRHvx(MVH{k+7!FYQi58+4Uo(N=GImL?YNV6_>{&G z$MS7%0n?e(m(FU+a1+upq;JDS~rncTur6Nbk)OED6ZOMG+2 zz1NV-2SxOckK?=xRGzE=%)COB`an(>Twt`_d_3Lj(G0@H)yMJ=0mZJF@&VoV>`)WP zeVwMPfcit5L%wKv)f5c8n0Kv|<1qi$J*6fvSO4Nq%onXN8k5_V)h8ptedRL1ch1dK O9o5}+vkT8T;MDJncoXCR diff --git a/apps/docs/public/favicon/apple-touch-icon.png b/apps/docs/public/favicon/apple-touch-icon.png index a09d065ec40cd962aaff91a3f3a74573f9d8c249..0a9d90cd8187864e2fc5e4dd619749b80aa4aa6f 100644 GIT binary patch literal 5102 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 VhK4}Q@xQya8`q6=%CzjC{s%21YP0|V literal 4342 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 diff --git a/apps/docs/public/favicon/favicon-16x16.png b/apps/docs/public/favicon/favicon-16x16.png index 4ac7ae4717e4468fe2260043c626ed1c8df835ba..5b907892e13dd307467c7a6c8ebb8aee875bdfc9 100644 GIT binary patch delta 407 zcmZ3JxtO z)=lYZVza8M&se$OG2e;?CN8;7^C&%+u0=1pjtFhC{noShG}q}(G8G4pi0|n6)z2#8 z+Nkkw&x57S9J7{fT(7}Z5?lUk)v8TDR?pl{POHJqWA)E6PQfGEvD)hLpEm!9F z=eKjq9f~HYBucPJv>m*%JvUiG)n$=l%S4Us-3*N;t+P%}{+KzxurKhhrt8h!ACbP0l+XkK7LcSE delta 400 zcmV;B0dM}W1E~X$BYy#KNklaLluCl=PVry3-S?;@3br$pbV%Xe0T$cohf}Pd)S|V zq4kB#Axrb%Gk?oRE2s8_9&l{CWyJ`kUv&p~3&R^3`c?DV{s|cCoU?0&0`UHIM3<7n zquUV&SA{GYqztSj-u4lV4FhV5_f`KI@@EvrwK4RrBz|LB+W3A%6YqJZB>dbt+mF3Q uQ+$XEMkdCx0f;HCoS*N@+U0NM`~`-j!G+rPA#DHv00{s|MNUMnLSTY&*u;PU diff --git a/apps/docs/public/favicon/favicon-32x32.png b/apps/docs/public/favicon/favicon-32x32.png index ee774f542d2d67d8840860c3ae880ef08136a07f..289d9bcb15f7a34097836f00b9b0b8af0b240a71 100644 GIT binary patch delta 818 zcmV-21I_%d2FM1GBYyw^b5ch_0Itp)=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031 z000^Q000001E2u_0{{R30RRC20H6W@1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$ z^8f$>vPnciR9Fe^RnJSZK@c8IE6ehbzaoM>R0lgqe}K@z4u3)ikNyin7okgsg6Izj z5$qHcc#%NtB;vtK*s)s(-YO*oJ*ZG=P46?X;%Dz?1o6cO@4&vhvopK%>@&0bnx3DZ znSN2szZhFW8vqOj3+nwpxTiHQlqxLU1J zFc_p-V84>TdSEjIyt})jVzEdM4-XP#W@d&qHa5uVbkghVtIYL! zJ+VWdoSc-v^?IFJt(NHHKv>2ZkB*M$>gtMIE*I5mH99;zr0wl(vRbV)KR-`~QY_dkN09adF<3gdpJ3BiZkH-ZdK4)iVyt=w7zR(+u zhUnRB7JsTP0Nok@U5ks0LS?(%rrq6L3WY+H$z(p|bZ%~LKrK>Zx7(#IG!~^OQ4`}t zw+2wXPft%0?Be2rG*;;J^i=Y@xw-jAb!!J3?2oZ(m>jkZoJIz^4B!fBxu$S9OzCu* zv~&odg@py0o}MP04x7Kfze`hlVs5n9ppOHh%YOi_RUi2xFo2n1$u*Sp=W08sA$ z{2&01x!KuS(Q$I+i#J72#sa_soB|D-DJoGTY78GWR=!A$66LFW)V%8TVJWNDW8vuH w;VS?`uHW)i>vW4y8UICZ05BLZ7%&+40IK)4mTJ^5S^xk507*qoM6N<$g4>Z}hX4Qo delta 792 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 KV_JnIMEwixo2&)^ delta 2260 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 literal 4531 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 Sd`TeSpSp^+a?u^j(EkBP?Pw4H literal 12945 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 \ No newline at end of file + From 5bf21e5f0ec2e692aa6ae68dfe93bc58b6d3c964 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Fri, 10 Jul 2026 16:59:15 -0700 Subject: [PATCH 2/3] chore(docs): normalize spacing from generate-docs pass Ran the docs generator to verify our new intro sections survive regeneration cleanly. It reformats the blank line before "## Usage Instructions" to match every other manually-annotated page. --- apps/docs/content/docs/en/integrations/brandfetch.mdx | 1 + apps/docs/content/docs/en/integrations/codepipeline.mdx | 1 + apps/docs/content/docs/en/integrations/context_dev.mdx | 1 + apps/docs/content/docs/en/integrations/crowdstrike.mdx | 1 + apps/docs/content/docs/en/integrations/deployments.mdx | 1 + apps/docs/content/docs/en/integrations/downdetector.mdx | 1 + apps/docs/content/docs/en/integrations/emailbison.mdx | 1 + apps/docs/content/docs/en/integrations/enrichment.mdx | 1 + apps/docs/content/docs/en/integrations/extend.mdx | 1 + apps/docs/content/docs/en/integrations/google_contacts.mdx | 1 + apps/docs/content/docs/en/integrations/granola.mdx | 1 + apps/docs/content/docs/en/integrations/instantly.mdx | 1 + apps/docs/content/docs/en/integrations/jupyter.mdx | 1 + apps/docs/content/docs/en/integrations/logs.mdx | 1 + apps/docs/content/docs/en/integrations/mysql.mdx | 1 + apps/docs/content/docs/en/integrations/postgresql.mdx | 1 + apps/docs/content/docs/en/integrations/rb2b.mdx | 1 + apps/docs/content/docs/en/integrations/sftp.mdx | 1 + apps/docs/content/docs/en/integrations/sixtyfour.mdx | 1 + apps/docs/content/docs/en/integrations/smtp.mdx | 1 + apps/docs/content/docs/en/integrations/sportmonks.mdx | 1 + apps/docs/content/docs/en/integrations/square.mdx | 1 + apps/docs/content/docs/en/integrations/ssh.mdx | 1 + apps/docs/content/docs/en/integrations/thrive.mdx | 1 + apps/docs/content/docs/en/integrations/uptimerobot.mdx | 1 + apps/docs/content/docs/en/integrations/workday.mdx | 1 + 26 files changed, 26 insertions(+) diff --git a/apps/docs/content/docs/en/integrations/brandfetch.mdx b/apps/docs/content/docs/en/integrations/brandfetch.mdx index 71ddf0135a4..ef9e2b45a63 100644 --- a/apps/docs/content/docs/en/integrations/brandfetch.mdx +++ b/apps/docs/content/docs/en/integrations/brandfetch.mdx @@ -23,6 +23,7 @@ With Brandfetch, you can: In Sim, the Brandfetch integration allows your agents to look up a brand's logos, colors, fonts, links, and company data by domain, ticker, ISIN, or crypto symbol, or search for a brand by name to find its domain and icon. This lets agents automate tasks like enriching company records with brand assets, verifying brand identity details, or sourcing logos and color palettes for design and reporting workflows. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Brandfetch into your workflow. Retrieve brand logos, colors, fonts, and company data by domain, ticker, or name search. diff --git a/apps/docs/content/docs/en/integrations/codepipeline.mdx b/apps/docs/content/docs/en/integrations/codepipeline.mdx index 92e19abcab3..0fe8d3350e7 100644 --- a/apps/docs/content/docs/en/integrations/codepipeline.mdx +++ b/apps/docs/content/docs/en/integrations/codepipeline.mdx @@ -23,6 +23,7 @@ With this integration, you can: In Sim, the AWS CodePipeline integration allows your agents to monitor and control release pipelines programmatically — listing pipelines and their structure, checking execution and action status, starting or stopping executions, retrying failed stages, approving or rejecting manual approvals, and enabling or disabling stage transitions. This lets your agents build deployment automation and approval workflows that respond to pipeline state in real time. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate AWS CodePipeline into workflows. Start, stop, and monitor pipeline executions, retry failed stages, and approve or reject manual approval actions. Requires AWS access key and secret access key. diff --git a/apps/docs/content/docs/en/integrations/context_dev.mdx b/apps/docs/content/docs/en/integrations/context_dev.mdx index 39d5436d221..2de3b43d30e 100644 --- a/apps/docs/content/docs/en/integrations/context_dev.mdx +++ b/apps/docs/content/docs/en/integrations/context_dev.mdx @@ -23,6 +23,7 @@ With Context.dev, you can: In Sim, the Context.dev integration allows your agents to scrape and crawl web pages into markdown or HTML, capture screenshots, search the web, extract structured data and product information, pull a site's fonts and style guide, classify a brand's industry, and look up brand assets and company details by domain, name, email, ticker, or transaction — all through a single set of API calls in your workflow. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Context.dev into the workflow. Scrape pages to markdown or HTML, capture screenshots, list images, crawl entire sites, map sitemaps, search the web, extract structured data and products, pull design systems, classify industries, and retrieve brand assets by domain, name, email, ticker, or transaction — all from one API. diff --git a/apps/docs/content/docs/en/integrations/crowdstrike.mdx b/apps/docs/content/docs/en/integrations/crowdstrike.mdx index d111b6219af..97b1e939963 100644 --- a/apps/docs/content/docs/en/integrations/crowdstrike.mdx +++ b/apps/docs/content/docs/en/integrations/crowdstrike.mdx @@ -22,6 +22,7 @@ With this integration, you can: In Sim, the CrowdStrike integration allows your agents to search identity protection sensors, look up detailed sensor records by device ID, and run aggregate queries against sensor data—all authenticated with a Falcon API client ID and secret against a specified cloud region. This lets agents surface device protection status, policy coverage, and protocol configuration (Kerberos, LDAP, NTLM, RDP, SMB) as part of security monitoring and reporting workflows. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate CrowdStrike Identity Protection into workflows to search sensors, fetch documented sensor details by device ID, and run documented sensor aggregate queries. diff --git a/apps/docs/content/docs/en/integrations/deployments.mdx b/apps/docs/content/docs/en/integrations/deployments.mdx index c19eb9e93b9..6b13fd2e622 100644 --- a/apps/docs/content/docs/en/integrations/deployments.mdx +++ b/apps/docs/content/docs/en/integrations/deployments.mdx @@ -20,6 +20,7 @@ Deployments is Sim's built-in system for taking a workflow's draft state live fo In Sim, the Deployments block allows your agents to deploy and undeploy workflows, promote a specific version to live for rollbacks, list all deployment versions of a workflow, and retrieve the deployed state snapshot of any past version—all programmatically as part of another workflow. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Deploy, undeploy, and roll back workflows in the current workspace. Promote a previous deployment version to live, list every version, or fetch the deployed workflow state for a specific version. diff --git a/apps/docs/content/docs/en/integrations/downdetector.mdx b/apps/docs/content/docs/en/integrations/downdetector.mdx index 64298db46f1..6aa3768cd64 100644 --- a/apps/docs/content/docs/en/integrations/downdetector.mdx +++ b/apps/docs/content/docs/en/integrations/downdetector.mdx @@ -23,6 +23,7 @@ With Downdetector, you can: In Sim, the Downdetector integration allows your agents to search for monitored companies, check their current status and baseline reports, retrieve near-real-time report counts and problem indicators, and pull incident, event, and attribution data — all programmatically through API calls. This enables your agents to power outage alerts, monitoring dashboards, and automated incident summaries that stay current with service disruptions across the companies and regions Downdetector tracks. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Track real-time service outages with the Downdetector Enterprise API. Search monitored companies, read their current status and report trends, inspect problem indicators, and pull incident timelines to power outage alerts and dashboards. Requires a Downdetector Enterprise API plan. diff --git a/apps/docs/content/docs/en/integrations/emailbison.mdx b/apps/docs/content/docs/en/integrations/emailbison.mdx index f6455a610b3..75b90e492f0 100644 --- a/apps/docs/content/docs/en/integrations/emailbison.mdx +++ b/apps/docs/content/docs/en/integrations/emailbison.mdx @@ -23,6 +23,7 @@ With Email Bison, you can: In Sim, the Email Bison integration allows your agents to create and update leads, list and filter leads/campaigns/replies, attach leads to campaigns, manage campaign status, and organize leads with tags — all programmatically through API calls. Combined with Email Bison triggers, agents can also react in real time to events like a contact being emailed, replying, marking interest, unsubscribing, or an email bouncing, making it possible to automate outbound outreach workflows end to end. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Email Bison into workflows. Create and update leads, manage campaigns, attach leads to campaigns, list replies, and organize leads with tags. diff --git a/apps/docs/content/docs/en/integrations/enrichment.mdx b/apps/docs/content/docs/en/integrations/enrichment.mdx index 201065526a1..664eac18132 100644 --- a/apps/docs/content/docs/en/integrations/enrichment.mdx +++ b/apps/docs/content/docs/en/integrations/enrichment.mdx @@ -16,6 +16,7 @@ Data Enrichment is a built-in Sim block that looks up missing data — work emai In Sim, the enrichment block allows your agents to fill in gaps in a record by supplying an enrichment id and a map of input values, then reading back whether a match was found and which provider (e.g. Hunter, People Data Labs) supplied the result. This lets workflows enrich leads or contacts inline — for example, taking a name and company and resolving a work email — without agents needing to call each provider's API directly. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Run a Sim enrichment to look up data — work email, phone number, company domain, company info, and more — from the fields you map in. Uses the same provider cascade as table enrichments. diff --git a/apps/docs/content/docs/en/integrations/extend.mdx b/apps/docs/content/docs/en/integrations/extend.mdx index af8a62c32ea..234a361a039 100644 --- a/apps/docs/content/docs/en/integrations/extend.mdx +++ b/apps/docs/content/docs/en/integrations/extend.mdx @@ -16,6 +16,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card" In Sim, the Extend integration allows your agents to submit a document for parsing and receive back the processed content as structured chunks and block-level elements, along with the page count and credits consumed by the run. This enables workflows to pull structured data out of documents—such as PDFs or other file references—for downstream steps to consume, without manually building document-parsing logic. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Extend AI into the workflow. Parse and extract structured content from documents or file references. diff --git a/apps/docs/content/docs/en/integrations/google_contacts.mdx b/apps/docs/content/docs/en/integrations/google_contacts.mdx index 46ad1db4dfb..242143a7f7b 100644 --- a/apps/docs/content/docs/en/integrations/google_contacts.mdx +++ b/apps/docs/content/docs/en/integrations/google_contacts.mdx @@ -22,6 +22,7 @@ With this block, you can: In Sim, the Google Contacts integration allows your agents to create, read, update, delete, list, and search contacts programmatically within a workflow. This enables agents to keep a contact directory in sync, look up contact details before sending communications, or search for matching contacts by name, email, phone, or organization as part of a larger automation. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Google Contacts into the workflow. Can create, read, update, delete, list, and search contacts. diff --git a/apps/docs/content/docs/en/integrations/granola.mdx b/apps/docs/content/docs/en/integrations/granola.mdx index bfebcd6725c..9f5371c782b 100644 --- a/apps/docs/content/docs/en/integrations/granola.mdx +++ b/apps/docs/content/docs/en/integrations/granola.mdx @@ -22,6 +22,7 @@ With Granola, you can: In Sim, the Granola integration allows your agents to pull meeting notes, summaries, and transcripts directly into a workflow. Agents can list recent notes with date or folder filters, fetch a specific note's summary text, attendees, and calendar details, retrieve the full transcript with speaker labels when needed, and browse folders to organize retrieval. This makes it possible to build workflows that surface meeting outcomes, route action items, or feed meeting context into downstream agent reasoning. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Granola into your workflow to retrieve meeting notes, summaries, attendees, and transcripts. diff --git a/apps/docs/content/docs/en/integrations/instantly.mdx b/apps/docs/content/docs/en/integrations/instantly.mdx index b4255efa658..538ae932aec 100644 --- a/apps/docs/content/docs/en/integrations/instantly.mdx +++ b/apps/docs/content/docs/en/integrations/instantly.mdx @@ -23,6 +23,7 @@ With Instantly, you can: In Sim, the Instantly integration allows your agents to manage leads and campaigns programmatically — retrieving and creating leads, updating lead interest status, listing and controlling campaigns (create, patch, activate, pause, delete), reading and replying to Unibox emails, and creating or listing lead lists. This lets your agents automate outbound email workflows, such as syncing new leads into campaigns, monitoring campaign status, and responding to replies without leaving the workflow. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Instantly API V2 into workflows. Create, update, and list leads, manage lead interest status, delete leads in bulk, list, create, patch, activate, pause, and delete campaigns, reply to emails, and manage lead lists. diff --git a/apps/docs/content/docs/en/integrations/jupyter.mdx b/apps/docs/content/docs/en/integrations/jupyter.mdx index 3d7a72a78be..e62f270a9e6 100644 --- a/apps/docs/content/docs/en/integrations/jupyter.mdx +++ b/apps/docs/content/docs/en/integrations/jupyter.mdx @@ -22,6 +22,7 @@ With Jupyter, you can: In Sim, the Jupyter integration allows your agents to connect to a self-hosted Jupyter server and drive it programmatically—browsing and editing files and notebooks, uploading content, and managing kernels and sessions that bind notebooks to running code environments. This lets your agents automate notebook-based workflows, such as provisioning a kernel, writing or updating notebook content, and cleaning up sessions and files as part of a larger pipeline. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate a self-hosted Jupyter server into the workflow. Browse, read, create, upload, rename, copy, and delete files and notebooks; start, stop, restart, and interrupt kernels; and manage sessions that bind notebooks to kernels. diff --git a/apps/docs/content/docs/en/integrations/logs.mdx b/apps/docs/content/docs/en/integrations/logs.mdx index 66335780a35..6237f56c9c1 100644 --- a/apps/docs/content/docs/en/integrations/logs.mdx +++ b/apps/docs/content/docs/en/integrations/logs.mdx @@ -22,6 +22,7 @@ With Logs, you can: In Sim, the Logs block allows your agents to search and filter workflow run history using the same filters available on the Logs page, then drill into a specific run to retrieve its status, cost, duration, final output, and full trace spans. This lets agents monitor other workflows, audit past executions, and pull execution details programmatically as part of a larger workflow. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Query workflow run logs in the current workspace with the same filters as the Logs page, returning matching run IDs. Fetch full details for a single run, including its trace spans. diff --git a/apps/docs/content/docs/en/integrations/mysql.mdx b/apps/docs/content/docs/en/integrations/mysql.mdx index 3348aa15741..b9ffd5979c5 100644 --- a/apps/docs/content/docs/en/integrations/mysql.mdx +++ b/apps/docs/content/docs/en/integrations/mysql.mdx @@ -23,6 +23,7 @@ With the MySQL block, you can: In Sim, the MySQL block allows your agents to read from and write to a MySQL database as part of a workflow—querying records to feed downstream logic, inserting or updating rows based on agent output, cleaning up data with deletes, running custom SQL for one-off operations, and introspecting the schema to understand table structure before generating queries. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate MySQL into the workflow. Can query, insert, update, delete, and execute raw SQL. diff --git a/apps/docs/content/docs/en/integrations/postgresql.mdx b/apps/docs/content/docs/en/integrations/postgresql.mdx index e64f304c3b2..ac0e70b4382 100644 --- a/apps/docs/content/docs/en/integrations/postgresql.mdx +++ b/apps/docs/content/docs/en/integrations/postgresql.mdx @@ -23,6 +23,7 @@ With this integration, you can: In Sim, the PostgreSQL integration allows your agents to connect to a PostgreSQL database and query, insert, update, delete, and execute raw SQL against it, as well as introspect the database schema to discover tables, columns, and relationships. This gives your agents the ability to read and write structured data as part of a workflow, and to understand a database's structure before generating or running queries against it. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate PostgreSQL into the workflow. Can query, insert, update, delete, and execute raw SQL. diff --git a/apps/docs/content/docs/en/integrations/rb2b.mdx b/apps/docs/content/docs/en/integrations/rb2b.mdx index dae1ac435ef..35d5234e709 100644 --- a/apps/docs/content/docs/en/integrations/rb2b.mdx +++ b/apps/docs/content/docs/en/integrations/rb2b.mdx @@ -23,6 +23,7 @@ With RB2B, you can: In Sim, the RB2B integration allows your agents to identify anonymous website visitors and enrich them into actionable contact records — resolving an IP address to a company or hashed email, expanding a hashed email or LinkedIn profile into a full business profile, and retrieving mobile phone numbers or personal emails for outreach. Agents can also check remaining API credits and confirm when a contact was last active, making the integration useful for lead identification, sales prospecting, and B2B enrichment workflows. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Resolve IP addresses, hashed emails, and LinkedIn profiles into person-level identity and B2B enrichment data using the RB2B API. Convert IPs to hashed emails, MAIDs, and company domains; enrich emails into LinkedIn profiles, business profiles, and mobile IDs; and look up emails or phone numbers from LinkedIn. Requires an RB2B API key. diff --git a/apps/docs/content/docs/en/integrations/sftp.mdx b/apps/docs/content/docs/en/integrations/sftp.mdx index b47a06bb15d..65a8a68fba6 100644 --- a/apps/docs/content/docs/en/integrations/sftp.mdx +++ b/apps/docs/content/docs/en/integrations/sftp.mdx @@ -24,6 +24,7 @@ With this block, you can: In Sim, the SFTP block allows your agents to upload, download, list, delete, and create files and directories on a remote server, all authenticated with a password or private key. This enables workflows that move generated files to a remote destination, pull files from a server for processing, sync directory contents, or manage remote file structures as part of a larger automation. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Upload, download, list, and manage files on remote servers via SFTP. Supports both password and private key authentication for secure file transfers. diff --git a/apps/docs/content/docs/en/integrations/sixtyfour.mdx b/apps/docs/content/docs/en/integrations/sixtyfour.mdx index 1e6aa085817..6a10ddd42c1 100644 --- a/apps/docs/content/docs/en/integrations/sixtyfour.mdx +++ b/apps/docs/content/docs/en/integrations/sixtyfour.mdx @@ -23,6 +23,7 @@ With Sixtyfour AI, you can: In Sim, the Sixtyfour AI integration allows your agents to look up phone numbers and emails for a lead, and enrich lead or company records with structured research data, source references, and confidence scores—all programmatically through API calls. This enables your agents to turn partial contact information into complete, verified profiles, and to build out organizational data such as employee counts and org charts as part of a workflow. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Find emails, phone numbers, and enrich lead or company data with contact information, social profiles, and detailed research using Sixtyfour AI. diff --git a/apps/docs/content/docs/en/integrations/smtp.mdx b/apps/docs/content/docs/en/integrations/smtp.mdx index 3d017becd4e..1e65fc3c0ce 100644 --- a/apps/docs/content/docs/en/integrations/smtp.mdx +++ b/apps/docs/content/docs/en/integrations/smtp.mdx @@ -22,6 +22,7 @@ With the SMTP block, you can: In Sim, the SMTP block allows your agents to send emails as part of a workflow by supplying connection details and message content, then confirming delivery through the returned success status and message ID. This makes it possible to notify recipients, deliver generated reports, or trigger email-based alerts directly from a workflow, with the block reporting the message ID on success or an error message if sending fails. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Send emails using any SMTP server (Gmail, Outlook, custom servers, etc.). Configure SMTP connection settings and send emails with full control over content, recipients, and attachments. diff --git a/apps/docs/content/docs/en/integrations/sportmonks.mdx b/apps/docs/content/docs/en/integrations/sportmonks.mdx index f741f1fc316..90285fda99e 100644 --- a/apps/docs/content/docs/en/integrations/sportmonks.mdx +++ b/apps/docs/content/docs/en/integrations/sportmonks.mdx @@ -23,6 +23,7 @@ With Sportmonks, you can access: In Sim, the Sportmonks integration allows your agents to query fixtures, player and team statistics, transfer activity, standings, and odds directly within a workflow. Agents can pull expected goals (xG) by player or team, retrieve match commentaries and brackets, look up coaches and their histories, and enrich any of these with related data through the `include` parameter—enabling workflows that build match reports, track transfer rumours, or surface live odds and predictions. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate the Sportmonks sports data APIs into the workflow from a single block. Football: fixtures, livescores, leagues, seasons, stages, rounds, teams, squads, players, coaches, referees, venues, standings, topscorers, transfers, schedules, commentaries, TV stations, rivals, expected goals (xG), and predictions. Motorsport: sessions, drivers, teams, championship standings, laps, and pitstops. Odds: pre-match and in-play odds, bookmakers, and markets. Core: continents, countries, regions, cities, types, and time zones. diff --git a/apps/docs/content/docs/en/integrations/square.mdx b/apps/docs/content/docs/en/integrations/square.mdx index 53034fcf6c7..9508ce539f5 100644 --- a/apps/docs/content/docs/en/integrations/square.mdx +++ b/apps/docs/content/docs/en/integrations/square.mdx @@ -23,6 +23,7 @@ With Square, you can: In Sim, the Square integration allows your agents to take and refund payments, manage customer profiles, look up business locations, create and track orders and invoices, and manage catalog items and inventory — all programmatically through API calls. This enables agents to handle real commerce operations such as charging a customer, issuing a refund, keeping customer records up to date, sending invoices, and maintaining product catalog and stock data, directly from a workflow. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Square into the workflow. Take and refund payments, manage customers, build catalog items and images, create and search orders, and issue invoices. Authenticate with a Square access token (personal access token). diff --git a/apps/docs/content/docs/en/integrations/ssh.mdx b/apps/docs/content/docs/en/integrations/ssh.mdx index 1affab8b0c7..3b059a04bb8 100644 --- a/apps/docs/content/docs/en/integrations/ssh.mdx +++ b/apps/docs/content/docs/en/integrations/ssh.mdx @@ -22,6 +22,7 @@ With SSH, you can: In Sim, the SSH block allows your agents to operate remote servers as part of a workflow—running commands and scripts, transferring and manipulating files, and gathering system diagnostics—all through authenticated SSH connections. This makes it possible to automate server administration, deployment steps, and remote data processing directly from an agent's workflow. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Execute commands, transfer files, and manage remote servers via SSH. Supports password and private key authentication for secure server access. diff --git a/apps/docs/content/docs/en/integrations/thrive.mdx b/apps/docs/content/docs/en/integrations/thrive.mdx index f5a5608f3b5..fa2be184eb7 100644 --- a/apps/docs/content/docs/en/integrations/thrive.mdx +++ b/apps/docs/content/docs/en/integrations/thrive.mdx @@ -24,6 +24,7 @@ With Thrive, you can: In Sim, the Thrive Learning integration allows your agents to manage the full user lifecycle, organize audiences and their members and managers, create and track compliance assignments and enrolments, record and query learning completions, and retrieve content and activity records — all programmatically through API calls. This enables agents to automate onboarding, training assignment, and compliance reporting workflows directly against Thrive's tenant. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Thrive Learning into the workflow. Manage user lifecycle, audiences and their members and managers, content assignments and enrolments, learning completions, content and activity records, CPD, tags, and skills. diff --git a/apps/docs/content/docs/en/integrations/uptimerobot.mdx b/apps/docs/content/docs/en/integrations/uptimerobot.mdx index 3d122ee5138..bb541e6d41e 100644 --- a/apps/docs/content/docs/en/integrations/uptimerobot.mdx +++ b/apps/docs/content/docs/en/integrations/uptimerobot.mdx @@ -24,6 +24,7 @@ With UptimeRobot, you can: In Sim, the UptimeRobot integration allows your agents to check monitor status, list and investigate incidents, create or update monitors and maintenance windows, manage alert contacts, and publish status pages—all through the UptimeRobot v3 API. This enables workflows that react to downtime, automate incident triage, schedule maintenance around deployments, and keep public status pages current without manual intervention. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate UptimeRobot into your workflow. Create and manage monitors, inspect incidents, schedule maintenance windows, manage alert contacts, and publish public status pages using the UptimeRobot v3 API. diff --git a/apps/docs/content/docs/en/integrations/workday.mdx b/apps/docs/content/docs/en/integrations/workday.mdx index f2d751fee89..32e46699600 100644 --- a/apps/docs/content/docs/en/integrations/workday.mdx +++ b/apps/docs/content/docs/en/integrations/workday.mdx @@ -25,6 +25,7 @@ With this integration, you can: In Sim, the Workday integration allows your agents to look up and update worker profiles, create pre-hires and hire them into positions, assign onboarding plans, process job changes and terminations, and pull organization and compensation data—all through Workday's Integration System User authentication. This lets your agents automate HR operations such as onboarding new employees, keeping worker records current, and managing the employee lifecycle directly from a workflow. {/* MANUAL-CONTENT-END */} + ## Usage Instructions Integrate Workday HRIS into your workflow. Create pre-hires, hire employees, manage worker profiles, assign onboarding plans, handle job changes, retrieve compensation data, and process terminations. From 63506fe2a0fdfee42717feaaa6b45795e19e054b Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Fri, 10 Jul 2026 17:06:51 -0700 Subject: [PATCH 3/3] fix(context-dev): remove prefetch and simplified-brand tools - remove context_dev_prefetch_domain, context_dev_prefetch_by_email, and context_dev_get_brand_simplified tools and their block operation entries; these aren't meant for general use - regenerate docs to drop their sections from context_dev.mdx --- .../docs/en/integrations/context_dev.mdx | 65 --------------- apps/sim/blocks/blocks/context_dev.ts | 37 +-------- apps/sim/lib/integrations/integrations.json | 16 +--- .../tools/context_dev/get_brand_simplified.ts | 81 ------------------- apps/sim/tools/context_dev/index.ts | 3 - .../tools/context_dev/prefetch_by_email.ts | 78 ------------------ apps/sim/tools/context_dev/prefetch_domain.ts | 78 ------------------ apps/sim/tools/context_dev/types.ts | 35 -------- apps/sim/tools/registry.ts | 6 -- 9 files changed, 6 insertions(+), 393 deletions(-) delete mode 100644 apps/sim/tools/context_dev/get_brand_simplified.ts delete mode 100644 apps/sim/tools/context_dev/prefetch_by_email.ts delete mode 100644 apps/sim/tools/context_dev/prefetch_domain.ts diff --git a/apps/docs/content/docs/en/integrations/context_dev.mdx b/apps/docs/content/docs/en/integrations/context_dev.mdx index 2de3b43d30e..6f70c82773a 100644 --- a/apps/docs/content/docs/en/integrations/context_dev.mdx +++ b/apps/docs/content/docs/en/integrations/context_dev.mdx @@ -584,31 +584,6 @@ Retrieve brand data for a public company by its stock ticker symbol. | ↳ `links` | json | Key brand links \(careers, privacy, terms, blog, pricing, contact\) | | ↳ `primary_language` | string | Primary language of the brand site | -### `context_dev_get_brand_simplified` - -Retrieve essential brand data for a domain: title, colors, logos, and backdrops. - -#### Input - -| Parameter | Type | Required | Description | -| --------- | ---- | -------- | ----------- | -| `domain` | string | Yes | The domain to retrieve simplified brand data for \(e.g., "airbnb.com"\) | -| `maxAgeMs` | number | No | Cache max age in milliseconds \(86400000-31536000000, default: 7776000000\) | -| `timeoutMS` | number | No | Request timeout in milliseconds \(1000-300000\) | -| `apiKey` | string | Yes | Context.dev API key | - -#### Output - -| Parameter | Type | Description | -| --------- | ---- | ----------- | -| `status` | string | Retrieval status | -| `brand` | object | Simplified brand data \(domain, title, colors, logos, backdrops\) | -| ↳ `domain` | string | Brand domain | -| ↳ `title` | string | Brand title | -| ↳ `colors` | json | Brand colors \(hex and name\) | -| ↳ `logos` | json | Brand logos with mode, colors, resolution, and type | -| ↳ `backdrops` | json | Brand backdrop images | - ### `context_dev_identify_transaction` Identify the brand behind a raw bank/card transaction descriptor and return its brand data. @@ -651,44 +626,4 @@ Identify the brand behind a raw bank/card transaction descriptor and return its | ↳ `links` | json | Key brand links \(careers, privacy, terms, blog, pricing, contact\) | | ↳ `primary_language` | string | Primary language of the brand site | -### `context_dev_prefetch_domain` - -Queue a domain for brand-data prefetching to reduce latency on later requests (subscribers; 0 credits). - -#### Input - -| Parameter | Type | Required | Description | -| --------- | ---- | -------- | ----------- | -| `domain` | string | Yes | The domain to prefetch brand data for \(e.g., "example.com"\) | -| `timeoutMS` | number | No | Request timeout in milliseconds \(1000-300000\) | -| `apiKey` | string | Yes | Context.dev API key | - -#### Output - -| Parameter | Type | Description | -| --------- | ---- | ----------- | -| `status` | string | Prefetch status | -| `message` | string | Human-readable prefetch result message | -| `domain` | string | The domain queued for prefetching | - -### `context_dev_prefetch_by_email` - -Queue an email's domain for brand-data prefetching to reduce later latency (subscribers; 0 credits). Free/disposable emails are rejected. - -#### Input - -| Parameter | Type | Required | Description | -| --------- | ---- | -------- | ----------- | -| `email` | string | Yes | Work email address whose domain should be prefetched \(free providers rejected\) | -| `timeoutMS` | number | No | Request timeout in milliseconds \(1000-300000\) | -| `apiKey` | string | Yes | Context.dev API key | - -#### Output - -| Parameter | Type | Description | -| --------- | ---- | ----------- | -| `status` | string | Prefetch status | -| `message` | string | Human-readable prefetch result message | -| `domain` | string | The domain queued for prefetching | - diff --git a/apps/sim/blocks/blocks/context_dev.ts b/apps/sim/blocks/blocks/context_dev.ts index 07e00d910f2..f06ec1bb53c 100644 --- a/apps/sim/blocks/blocks/context_dev.ts +++ b/apps/sim/blocks/blocks/context_dev.ts @@ -14,15 +14,7 @@ const URL_OPS = [ 'extract_product', ] /** Operations whose primary input is a bare domain. */ -const DOMAIN_OPS = [ - 'map', - 'get_brand', - 'get_brand_simplified', - 'extract_products', - 'scrape_fonts', - 'scrape_styleguide', - 'prefetch_domain', -] +const DOMAIN_OPS = ['map', 'get_brand', 'extract_products', 'scrape_fonts', 'scrape_styleguide'] /** Classification operations keyed on a domain-or-name input. */ const CLASSIFY_OPS = ['classify_naics', 'classify_sic'] /** Brand operations that accept language/speed tuning. */ @@ -49,7 +41,6 @@ const MAX_AGE_OPS = [ 'get_brand_by_name', 'get_brand_by_email', 'get_brand_by_ticker', - 'get_brand_simplified', ] /** Operations that accept a post-load browser wait. */ const WAIT_FOR_OPS = ['scrape_markdown', 'scrape_html', 'scrape_images', 'screenshot', 'crawl'] @@ -118,10 +109,7 @@ export const ContextDevBlock: BlockConfig = { { label: 'Get Brand by Name', id: 'get_brand_by_name' }, { label: 'Get Brand by Email', id: 'get_brand_by_email' }, { label: 'Get Brand by Ticker', id: 'get_brand_by_ticker' }, - { label: 'Get Brand (Simplified)', id: 'get_brand_simplified' }, { label: 'Identify Transaction', id: 'identify_transaction' }, - { label: 'Prefetch Domain', id: 'prefetch_domain' }, - { label: 'Prefetch by Email', id: 'prefetch_by_email' }, ], value: () => 'scrape_markdown', }, @@ -170,8 +158,8 @@ export const ContextDevBlock: BlockConfig = { title: 'Work Email', type: 'short-input', placeholder: 'name@company.com', - condition: { field: 'operation', value: ['get_brand_by_email', 'prefetch_by_email'] }, - required: { field: 'operation', value: ['get_brand_by_email', 'prefetch_by_email'] }, + condition: { field: 'operation', value: 'get_brand_by_email' }, + required: { field: 'operation', value: 'get_brand_by_email' }, }, { id: 'ticker', @@ -563,10 +551,7 @@ Do not include any explanations, markdown formatting, or other text outside the 'context_dev_get_brand_by_name', 'context_dev_get_brand_by_email', 'context_dev_get_brand_by_ticker', - 'context_dev_get_brand_simplified', 'context_dev_identify_transaction', - 'context_dev_prefetch_domain', - 'context_dev_prefetch_by_email', ], config: { tool: (params) => @@ -745,11 +730,6 @@ Do not include any explanations, markdown formatting, or other text outside the setNumber('maxAgeMs') setNumber('timeoutMS') break - case 'get_brand_simplified': - setString('domain') - setNumber('maxAgeMs') - setNumber('timeoutMS') - break case 'identify_transaction': setString('transactionInfo') setString('countryGl') @@ -761,14 +741,6 @@ Do not include any explanations, markdown formatting, or other text outside the setBool('maxSpeed') setNumber('timeoutMS') break - case 'prefetch_domain': - setString('domain') - setNumber('timeoutMS') - break - case 'prefetch_by_email': - setString('email') - setNumber('timeoutMS') - break } return result @@ -783,7 +755,7 @@ Do not include any explanations, markdown formatting, or other text outside the input: { type: 'string', description: 'Domain or company name for classification' }, query: { type: 'string', description: 'Web search query' }, name: { type: 'string', description: 'Company name for brand lookup' }, - email: { type: 'string', description: 'Work email for brand lookup or prefetch' }, + email: { type: 'string', description: 'Work email for brand lookup' }, ticker: { type: 'string', description: 'Stock ticker for brand lookup' }, transactionInfo: { type: 'string', description: 'Transaction descriptor to identify' }, schema: { type: 'json', description: 'JSON schema for structured extraction' }, @@ -850,7 +822,6 @@ Do not include any explanations, markdown formatting, or other text outside the meta: { type: 'json', description: 'Sitemap discovery stats' }, query: { type: 'string', description: 'The query that was searched' }, status: { type: 'string', description: 'Operation status' }, - message: { type: 'string', description: 'Prefetch result message' }, urlsAnalyzed: { type: 'json', description: 'URLs analyzed during extraction' }, data: { type: 'json', description: 'Structured data extracted from the site' }, isProductPage: { type: 'boolean', description: 'Whether the URL is a product page' }, diff --git a/apps/sim/lib/integrations/integrations.json b/apps/sim/lib/integrations/integrations.json index 85d9aaf86b1..98849d6a9a4 100644 --- a/apps/sim/lib/integrations/integrations.json +++ b/apps/sim/lib/integrations/integrations.json @@ -1,5 +1,5 @@ { - "updatedAt": "2026-07-10", + "updatedAt": "2026-07-11", "integrations": [ { "type": "onepassword", @@ -3870,24 +3870,12 @@ "name": "Get Brand by Ticker", "description": "Retrieve brand data for a public company by its stock ticker symbol." }, - { - "name": "Get Brand (Simplified)", - "description": "Retrieve essential brand data for a domain: title, colors, logos, and backdrops." - }, { "name": "Identify Transaction", "description": "Identify the brand behind a raw bank/card transaction descriptor and return its brand data." - }, - { - "name": "Prefetch Domain", - "description": "Queue a domain for brand-data prefetching to reduce latency on later requests (subscribers; 0 credits)." - }, - { - "name": "Prefetch by Email", - "description": "Queue an email's domain for brand-data prefetching to reduce later latency (subscribers; 0 credits). Free/disposable emails are rejected." } ], - "operationCount": 22, + "operationCount": 19, "triggers": [], "triggerCount": 0, "authType": "api-key", diff --git a/apps/sim/tools/context_dev/get_brand_simplified.ts b/apps/sim/tools/context_dev/get_brand_simplified.ts deleted file mode 100644 index 1f01f0aa800..00000000000 --- a/apps/sim/tools/context_dev/get_brand_simplified.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { contextDevHosting } from '@/tools/context_dev/hosting' -import type { - ContextDevGetBrandSimplifiedParams, - ContextDevGetBrandSimplifiedResponse, -} from '@/tools/context_dev/types' -import { SIMPLIFIED_BRAND_OUTPUT_PROPERTIES } from '@/tools/context_dev/types' -import { - appendParam, - CONTEXT_DEV_BASE_URL, - CREDIT_OUTPUTS, - contextDevHeaders, - parseContextDevResponse, - transformBrandResponse, -} from '@/tools/context_dev/utils' -import type { ToolConfig } from '@/tools/types' - -export const contextDevGetBrandSimplifiedTool: ToolConfig< - ContextDevGetBrandSimplifiedParams, - ContextDevGetBrandSimplifiedResponse -> = { - id: 'context_dev_get_brand_simplified', - name: 'Context.dev Get Brand (Simplified)', - description: 'Retrieve essential brand data for a domain: title, colors, logos, and backdrops.', - version: '1.0.0', - - hosting: contextDevHosting(), - - params: { - domain: { - type: 'string', - required: true, - visibility: 'user-or-llm', - description: 'The domain to retrieve simplified brand data for (e.g., "airbnb.com")', - }, - maxAgeMs: { - type: 'number', - required: false, - visibility: 'user-or-llm', - description: 'Cache max age in milliseconds (86400000-31536000000, default: 7776000000)', - }, - timeoutMS: { - type: 'number', - required: false, - visibility: 'user-or-llm', - description: 'Request timeout in milliseconds (1000-300000)', - }, - apiKey: { - type: 'string', - required: true, - visibility: 'user-only', - description: 'Context.dev API key', - }, - }, - - request: { - method: 'GET', - url: (params) => { - const url = new URL(`${CONTEXT_DEV_BASE_URL}/brand/retrieve-simplified`) - appendParam(url.searchParams, 'domain', params.domain) - appendParam(url.searchParams, 'maxAgeMs', params.maxAgeMs) - appendParam(url.searchParams, 'timeoutMS', params.timeoutMS) - return url.toString() - }, - headers: (params) => contextDevHeaders(params.apiKey), - }, - - transformResponse: async (response: Response) => { - const data = await parseContextDevResponse(response) - return { success: true, output: transformBrandResponse(data) } - }, - - outputs: { - status: { type: 'string', description: 'Retrieval status' }, - brand: { - type: 'object', - description: 'Simplified brand data (domain, title, colors, logos, backdrops)', - properties: SIMPLIFIED_BRAND_OUTPUT_PROPERTIES, - }, - ...CREDIT_OUTPUTS, - }, -} diff --git a/apps/sim/tools/context_dev/index.ts b/apps/sim/tools/context_dev/index.ts index 9848723ebf3..093fa5ca81c 100644 --- a/apps/sim/tools/context_dev/index.ts +++ b/apps/sim/tools/context_dev/index.ts @@ -8,11 +8,8 @@ export { contextDevGetBrandTool } from '@/tools/context_dev/get_brand' export { contextDevGetBrandByEmailTool } from '@/tools/context_dev/get_brand_by_email' export { contextDevGetBrandByNameTool } from '@/tools/context_dev/get_brand_by_name' export { contextDevGetBrandByTickerTool } from '@/tools/context_dev/get_brand_by_ticker' -export { contextDevGetBrandSimplifiedTool } from '@/tools/context_dev/get_brand_simplified' export { contextDevIdentifyTransactionTool } from '@/tools/context_dev/identify_transaction' export { contextDevMapTool } from '@/tools/context_dev/map' -export { contextDevPrefetchByEmailTool } from '@/tools/context_dev/prefetch_by_email' -export { contextDevPrefetchDomainTool } from '@/tools/context_dev/prefetch_domain' export { contextDevScrapeFontsTool } from '@/tools/context_dev/scrape_fonts' export { contextDevScrapeHtmlTool } from '@/tools/context_dev/scrape_html' export { contextDevScrapeImagesTool } from '@/tools/context_dev/scrape_images' diff --git a/apps/sim/tools/context_dev/prefetch_by_email.ts b/apps/sim/tools/context_dev/prefetch_by_email.ts deleted file mode 100644 index 5a682df6966..00000000000 --- a/apps/sim/tools/context_dev/prefetch_by_email.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { contextDevHosting } from '@/tools/context_dev/hosting' -import type { - ContextDevPrefetchByEmailParams, - ContextDevPrefetchResponse, -} from '@/tools/context_dev/types' -import { - CONTEXT_DEV_BASE_URL, - CREDIT_OUTPUTS, - contextDevJsonHeaders, - extractCreditMetadata, - parseContextDevResponse, -} from '@/tools/context_dev/utils' -import type { ToolConfig } from '@/tools/types' - -export const contextDevPrefetchByEmailTool: ToolConfig< - ContextDevPrefetchByEmailParams, - ContextDevPrefetchResponse -> = { - id: 'context_dev_prefetch_by_email', - name: 'Context.dev Prefetch by Email', - description: - "Queue an email's domain for brand-data prefetching to reduce later latency (subscribers; 0 credits). Free/disposable emails are rejected.", - version: '1.0.0', - - hosting: contextDevHosting(), - - params: { - email: { - type: 'string', - required: true, - visibility: 'user-or-llm', - description: 'Work email address whose domain should be prefetched (free providers rejected)', - }, - timeoutMS: { - type: 'number', - required: false, - visibility: 'user-or-llm', - description: 'Request timeout in milliseconds (1000-300000)', - }, - apiKey: { - type: 'string', - required: true, - visibility: 'user-only', - description: 'Context.dev API key', - }, - }, - - request: { - method: 'POST', - url: () => `${CONTEXT_DEV_BASE_URL}/brand/prefetch-by-email`, - headers: (params) => contextDevJsonHeaders(params.apiKey), - body: (params) => { - const body: Record = { email: params.email } - if (params.timeoutMS != null) body.timeoutMS = params.timeoutMS - return body - }, - }, - - transformResponse: async (response: Response) => { - const data = await parseContextDevResponse(response) - return { - success: true, - output: { - status: data.status ?? '', - message: data.message ?? '', - domain: data.domain ?? '', - ...extractCreditMetadata(data.key_metadata), - }, - } - }, - - outputs: { - status: { type: 'string', description: 'Prefetch status' }, - message: { type: 'string', description: 'Human-readable prefetch result message' }, - domain: { type: 'string', description: 'The domain queued for prefetching' }, - ...CREDIT_OUTPUTS, - }, -} diff --git a/apps/sim/tools/context_dev/prefetch_domain.ts b/apps/sim/tools/context_dev/prefetch_domain.ts deleted file mode 100644 index 32420195669..00000000000 --- a/apps/sim/tools/context_dev/prefetch_domain.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { contextDevHosting } from '@/tools/context_dev/hosting' -import type { - ContextDevPrefetchDomainParams, - ContextDevPrefetchResponse, -} from '@/tools/context_dev/types' -import { - CONTEXT_DEV_BASE_URL, - CREDIT_OUTPUTS, - contextDevJsonHeaders, - extractCreditMetadata, - parseContextDevResponse, -} from '@/tools/context_dev/utils' -import type { ToolConfig } from '@/tools/types' - -export const contextDevPrefetchDomainTool: ToolConfig< - ContextDevPrefetchDomainParams, - ContextDevPrefetchResponse -> = { - id: 'context_dev_prefetch_domain', - name: 'Context.dev Prefetch Domain', - description: - 'Queue a domain for brand-data prefetching to reduce latency on later requests (subscribers; 0 credits).', - version: '1.0.0', - - hosting: contextDevHosting(), - - params: { - domain: { - type: 'string', - required: true, - visibility: 'user-or-llm', - description: 'The domain to prefetch brand data for (e.g., "example.com")', - }, - timeoutMS: { - type: 'number', - required: false, - visibility: 'user-or-llm', - description: 'Request timeout in milliseconds (1000-300000)', - }, - apiKey: { - type: 'string', - required: true, - visibility: 'user-only', - description: 'Context.dev API key', - }, - }, - - request: { - method: 'POST', - url: () => `${CONTEXT_DEV_BASE_URL}/brand/prefetch`, - headers: (params) => contextDevJsonHeaders(params.apiKey), - body: (params) => { - const body: Record = { domain: params.domain } - if (params.timeoutMS != null) body.timeoutMS = params.timeoutMS - return body - }, - }, - - transformResponse: async (response: Response) => { - const data = await parseContextDevResponse(response) - return { - success: true, - output: { - status: data.status ?? '', - message: data.message ?? '', - domain: data.domain ?? '', - ...extractCreditMetadata(data.key_metadata), - }, - } - }, - - outputs: { - status: { type: 'string', description: 'Prefetch status' }, - message: { type: 'string', description: 'Human-readable prefetch result message' }, - domain: { type: 'string', description: 'The domain queued for prefetching' }, - ...CREDIT_OUTPUTS, - }, -} diff --git a/apps/sim/tools/context_dev/types.ts b/apps/sim/tools/context_dev/types.ts index 564a66b8aba..5bf9b823aa5 100644 --- a/apps/sim/tools/context_dev/types.ts +++ b/apps/sim/tools/context_dev/types.ts @@ -326,41 +326,6 @@ export interface ContextDevIdentifyTransactionParams { timeoutMS?: number } -export interface ContextDevGetBrandSimplifiedParams { - apiKey: string - domain: string - maxAgeMs?: number - timeoutMS?: number -} - -export interface ContextDevGetBrandSimplifiedResponse extends ToolResponse { - output: CreditFields & { - status: string - brand: Record | null - } -} - -export interface ContextDevPrefetchByEmailParams { - apiKey: string - email: string - timeoutMS?: number -} - -export interface ContextDevPrefetchDomainParams { - apiKey: string - domain: string - timeoutMS?: number -} - -/** Shared response shape for the prefetch utility endpoints. */ -export interface ContextDevPrefetchResponse extends ToolResponse { - output: CreditFields & { - status: string - message: string - domain: string - } -} - /** Output schema for a single web search result. */ export const SEARCH_RESULT_OUTPUT_PROPERTIES = { url: { type: 'string', description: 'Result page URL' }, diff --git a/apps/sim/tools/registry.ts b/apps/sim/tools/registry.ts index 7f4a6c48674..e6f33250a0d 100644 --- a/apps/sim/tools/registry.ts +++ b/apps/sim/tools/registry.ts @@ -608,12 +608,9 @@ import { contextDevGetBrandByEmailTool, contextDevGetBrandByNameTool, contextDevGetBrandByTickerTool, - contextDevGetBrandSimplifiedTool, contextDevGetBrandTool, contextDevIdentifyTransactionTool, contextDevMapTool, - contextDevPrefetchByEmailTool, - contextDevPrefetchDomainTool, contextDevScrapeFontsTool, contextDevScrapeHtmlTool, contextDevScrapeImagesTool, @@ -6810,10 +6807,7 @@ export const tools: Record = { context_dev_get_brand_by_name: contextDevGetBrandByNameTool, context_dev_get_brand_by_email: contextDevGetBrandByEmailTool, context_dev_get_brand_by_ticker: contextDevGetBrandByTickerTool, - context_dev_get_brand_simplified: contextDevGetBrandSimplifiedTool, context_dev_identify_transaction: contextDevIdentifyTransactionTool, - context_dev_prefetch_domain: contextDevPrefetchDomainTool, - context_dev_prefetch_by_email: contextDevPrefetchByEmailTool, cursor_list_agents: cursorListAgentsTool, cursor_list_agents_v2: cursorListAgentsV2Tool, cursor_get_agent: cursorGetAgentTool,