diff --git a/.github/workflows/i18n.yml b/.github/workflows/i18n.yml
index cad647e3df..1096bbaf5a 100644
--- a/.github/workflows/i18n.yml
+++ b/.github/workflows/i18n.yml
@@ -1,12 +1,13 @@
name: 'Auto-translate Documentation'
+# Temporarily disabled
on:
- push:
- branches: [ staging ]
- paths:
- - 'apps/docs/content/docs/en/**'
- - 'apps/docs/i18n.json'
- workflow_dispatch: # Allow manual triggers
+ workflow_dispatch: # Allow manual triggers only
+ # push:
+ # branches: [ staging ]
+ # paths:
+ # - 'apps/docs/content/docs/en/**'
+ # - 'apps/docs/i18n.json'
permissions:
contents: write
diff --git a/apps/docs/content/docs/de/blocks/guardrails.mdx b/apps/docs/content/docs/de/blocks/guardrails.mdx
new file mode 100644
index 0000000000..f2d6a95f8f
--- /dev/null
+++ b/apps/docs/content/docs/de/blocks/guardrails.mdx
@@ -0,0 +1,251 @@
+---
+title: Guardrails
+---
+
+import { Callout } from 'fumadocs-ui/components/callout'
+import { Step, Steps } from 'fumadocs-ui/components/steps'
+import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
+import { Image } from '@/components/ui/image'
+import { Video } from '@/components/ui/video'
+
+The Guardrails block validates and protects your AI workflows by checking content against multiple validation types. Ensure data quality, prevent hallucinations, detect PII, and enforce format requirements before content moves through your workflow.
+
+
+
+
+
+## Overview
+
+The Guardrails block enables you to:
+
+
+
+ Validate JSON Structure : Ensure LLM outputs are valid JSON before parsing
+
+
+ Match Regex Patterns : Verify content matches specific formats (emails, phone numbers, URLs, etc.)
+
+
+ Detect Hallucinations : Use RAG + LLM scoring to validate AI outputs against knowledge base content
+
+
+ Detect PII : Identify and optionally mask personally identifiable information across 40+ entity types
+
+
+
+## Validation Types
+
+### JSON Validation
+
+Validates that content is properly formatted JSON. Perfect for ensuring structured LLM outputs can be safely parsed.
+
+**Use Cases:**
+- Validate JSON responses from Agent blocks before parsing
+- Ensure API payloads are properly formatted
+- Check structured data integrity
+
+**Output:**
+- `passed`: `true` if valid JSON, `false` otherwise
+- `error`: Error message if validation fails (e.g., "Invalid JSON: Unexpected token...")
+
+### Regex Validation
+
+Checks if content matches a specified regular expression pattern.
+
+**Use Cases:**
+- Validate email addresses
+- Check phone number formats
+- Verify URLs or custom identifiers
+- Enforce specific text patterns
+
+**Configuration:**
+- **Regex Pattern**: The regular expression to match against (e.g., `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` for emails)
+
+**Output:**
+- `passed`: `true` if content matches pattern, `false` otherwise
+- `error`: Error message if validation fails
+
+### Hallucination Detection
+
+Uses Retrieval-Augmented Generation (RAG) with LLM scoring to detect when AI-generated content contradicts or isn't grounded in your knowledge base.
+
+**How It Works:**
+1. Queries your knowledge base for relevant context
+2. Sends both the AI output and retrieved context to an LLM
+3. LLM assigns a confidence score (0-10 scale)
+ - **0** = Full hallucination (completely ungrounded)
+ - **10** = Fully grounded (completely supported by knowledge base)
+4. Validation passes if score ≥ threshold (default: 3)
+
+**Configuration:**
+- **Knowledge Base**: Select from your existing knowledge bases
+- **Model**: Choose LLM for scoring (requires strong reasoning - GPT-4o, Claude 3.7 Sonnet recommended)
+- **API Key**: Authentication for selected LLM provider (auto-hidden for hosted/Ollama models)
+- **Confidence Threshold**: Minimum score to pass (0-10, default: 3)
+- **Top K** (Advanced): Number of knowledge base chunks to retrieve (default: 10)
+
+**Output:**
+- `passed`: `true` if confidence score ≥ threshold
+- `score`: Confidence score (0-10)
+- `reasoning`: LLM's explanation for the score
+- `error`: Error message if validation fails
+
+**Use Cases:**
+- Validate Agent responses against documentation
+- Ensure customer support answers are factually accurate
+- Verify generated content matches source material
+- Quality control for RAG applications
+
+### PII Detection
+
+Detects personally identifiable information using Microsoft Presidio. Supports 40+ entity types across multiple countries and languages.
+
+
+
+
+
+**How It Works:**
+1. Scans content for PII entities using pattern matching and NLP
+2. Returns detected entities with locations and confidence scores
+3. Optionally masks detected PII in the output
+
+**Configuration:**
+- **PII Types to Detect**: Select from grouped categories via modal selector
+ - **Common**: Person name, Email, Phone, Credit card, IP address, etc.
+ - **USA**: SSN, Driver's license, Passport, etc.
+ - **UK**: NHS number, National insurance number
+ - **Spain**: NIF, NIE, CIF
+ - **Italy**: Fiscal code, Driver's license, VAT code
+ - **Poland**: PESEL, NIP, REGON
+ - **Singapore**: NRIC/FIN, UEN
+ - **Australia**: ABN, ACN, TFN, Medicare
+ - **India**: Aadhaar, PAN, Passport, Voter number
+- **Mode**:
+ - **Detect**: Only identify PII (default)
+ - **Mask**: Replace detected PII with masked values
+- **Language**: Detection language (default: English)
+
+**Output:**
+- `passed`: `false` if any selected PII types are detected
+- `detectedEntities`: Array of detected PII with type, location, and confidence
+- `maskedText`: Content with PII masked (only if mode = "Mask")
+- `error`: Error message if validation fails
+
+**Use Cases:**
+- Block content containing sensitive personal information
+- Mask PII before logging or storing data
+- Compliance with GDPR, HIPAA, and other privacy regulations
+- Sanitize user inputs before processing
+
+## Configuration
+
+### Content to Validate
+
+The input content to validate. This typically comes from:
+- Agent block outputs: ``
+- Function block results: ``
+- API responses: ``
+- Any other block output
+
+### Validation Type
+
+Choose from four validation types:
+- **Valid JSON**: Check if content is properly formatted JSON
+- **Regex Match**: Verify content matches a regex pattern
+- **Hallucination Check**: Validate against knowledge base with LLM scoring
+- **PII Detection**: Detect and optionally mask personally identifiable information
+
+## Outputs
+
+All validation types return:
+
+- **``**: Boolean indicating if validation passed
+- **``**: The type of validation performed
+- **``**: The original input that was validated
+- **``**: Error message if validation failed (optional)
+
+Additional outputs by type:
+
+**Hallucination Check:**
+- **``**: Confidence score (0-10)
+- **``**: LLM's explanation
+
+**PII Detection:**
+- **``**: Array of detected PII entities
+- **``**: Content with PII masked (if mode = "Mask")
+
+## Example Use Cases
+
+### Validate JSON Before Parsing
+
+
+
Scenario: Ensure Agent output is valid JSON
+
+ Agent generates structured JSON response
+ Guardrails validates JSON format
+ Condition block checks ``
+ If passed → Parse and use data, If failed → Retry or handle error
+
+
+
+### Prevent Hallucinations
+
+
+
Scenario: Validate customer support responses
+
+ Agent generates response to customer question
+ Guardrails checks against support documentation knowledge base
+ If confidence score ≥ 3 → Send response
+ If confidence score \< 3 → Flag for human review
+
+
+
+### Block PII in User Inputs
+
+
+
Scenario: Sanitize user-submitted content
+
+ User submits form with text content
+ Guardrails detects PII (emails, phone numbers, SSN, etc.)
+ If PII detected → Reject submission or mask sensitive data
+ If no PII → Process normally
+
+
+
+
+
+
+
+### Validate Email Format
+
+
+
Scenario: Check email address format
+
+ Agent extracts email from text
+ Guardrails validates with regex pattern
+ If valid → Use email for notification
+ If invalid → Request correction
+
+
+
+## Best Practices
+
+- **Chain with Condition blocks**: Use `` to branch workflow logic based on validation results
+- **Use JSON validation before parsing**: Always validate JSON structure before attempting to parse LLM outputs
+- **Choose appropriate PII types**: Only select the PII entity types relevant to your use case for better performance
+- **Set reasonable confidence thresholds**: For hallucination detection, adjust threshold based on your accuracy requirements (higher = stricter)
+- **Use strong models for hallucination detection**: GPT-4o or Claude 3.7 Sonnet provide more accurate confidence scoring
+- **Mask PII for logging**: Use "Mask" mode when you need to log or store content that may contain PII
+- **Test regex patterns**: Validate your regex patterns thoroughly before deploying to production
+- **Monitor validation failures**: Track `` messages to identify common validation issues
+
+
+ Guardrails validation happens synchronously in your workflow. For hallucination detection, choose faster models (like GPT-4o-mini) if latency is critical.
+
+
diff --git a/apps/docs/content/docs/de/execution/costs.mdx b/apps/docs/content/docs/de/execution/costs.mdx
index 385ebd6699..376ad8aa66 100644
--- a/apps/docs/content/docs/de/execution/costs.mdx
+++ b/apps/docs/content/docs/de/execution/costs.mdx
@@ -183,4 +183,39 @@ Verschiedene Abonnementpläne haben unterschiedliche Nutzungslimits:
- Überprüfen Sie Ihre aktuelle Nutzung unter [Einstellungen → Abonnement](https://sim.ai/settings/subscription)
- Erfahren Sie mehr über [Logging](/execution/logging), um Ausführungsdetails zu verfolgen
- Erkunden Sie die [Externe API](/execution/api) für programmatische Kostenüberwachung
-- Sehen Sie sich [Workflow-Optimierungstechniken](/blocks) an, um Kosten zu reduzieren
\ No newline at end of file
+- Sehen Sie sich [Workflow-Optimierungstechniken](/blocks) an, um Kosten zu reduzieren
+
+**Team-Plan (40 $/Sitz/Monat):**
+- Gemeinsame Nutzung für alle Teammitglieder
+- Überschreitung wird anhand der Gesamtnutzung des Teams berechnet
+- Organisationsinhaber erhält eine Rechnung
+
+**Enterprise-Pläne:**
+- Fester monatlicher Preis, keine Überschreitungen
+- Benutzerdefinierte Nutzungslimits gemäß Vereinbarung
+
+### Schwellenwertabrechnung
+
+Wenn die nicht abgerechnete Überschreitung 50 $ erreicht, berechnet Sim automatisch den gesamten nicht abgerechneten Betrag.
+
+**Beispiel:**
+- Tag 10: 70 $ Überschreitung → Sofortige Abrechnung von 70 $
+- Tag 15: Zusätzliche Nutzung von 35 $ (insgesamt 105 $) → Bereits abgerechnet, keine Aktion
+- Tag 20: Weitere Nutzung von 50 $ (insgesamt 155 $, 85 $ nicht abgerechnet) → Sofortige Abrechnung von 85 $
+
+Dies verteilt hohe Überschreitungsgebühren über den Monat, anstatt eine große Rechnung am Ende des Abrechnungszeitraums zu stellen.
+
+## Best Practices für Kostenmanagement
+
+1. **Regelmäßige Überwachung**: Überprüfen Sie Ihr Nutzungs-Dashboard häufig, um Überraschungen zu vermeiden
+2. **Budgets festlegen**: Nutzen Sie Planlimits als Leitplanken für Ihre Ausgaben
+3. **Workflows optimieren**: Überprüfen Sie kostenintensive Ausführungen und optimieren Sie Prompts oder Modellauswahl
+4. **Geeignete Modelle verwenden**: Passen Sie die Modellkomplexität an die Aufgabenanforderungen an
+5. **Ähnliche Aufgaben bündeln**: Kombinieren Sie wenn möglich mehrere Anfragen, um den Overhead zu reduzieren
+
+## Nächste Schritte
+
+- Überprüfen Sie Ihre aktuelle Nutzung unter [Einstellungen → Abonnement](https://sim.ai/settings/subscription)
+- Erfahren Sie mehr über [Protokollierung](/execution/logging), um Ausführungsdetails zu verfolgen
+- Erkunden Sie die [externe API](/execution/api) für programmatische Kostenüberwachung
+- Sehen Sie sich [Workflow-Optimierungstechniken](/blocks) zur Kostenreduzierung an
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/sdks/typescript.mdx b/apps/docs/content/docs/de/sdks/typescript.mdx
index 55e36ce7e2..6cd1cafbfd 100644
--- a/apps/docs/content/docs/de/sdks/typescript.mdx
+++ b/apps/docs/content/docs/de/sdks/typescript.mdx
@@ -957,34 +957,6 @@ function StreamingWorkflow() {
- Node.js 16+
- TypeScript 5.0+ (for TypeScript projects)
-## TypeScript Support
-
-The SDK is written in TypeScript and provides full type safety:
-
-```typescript
-import {
- SimStudioClient,
- WorkflowExecutionResult,
- WorkflowStatus,
- SimStudioError
-} from 'simstudio-ts-sdk';
-
-// Typsichere Client-Initialisierung
-const client: SimStudioClient = new SimStudioClient({
- apiKey: process.env.SIM_API_KEY!
-});
-
-// Typsichere Workflow-Ausführung
-const result: WorkflowExecutionResult = await client.executeWorkflow('workflow-id', {
- input: {
- message: 'Hello, TypeScript!'
- }
-});
-
-// Typsichere Statusprüfung
-const status: WorkflowStatus = await client.getWorkflowStatus('workflow-id');
-```
-
## License
Apache-2.0
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/tools/clay.mdx b/apps/docs/content/docs/de/tools/clay.mdx
new file mode 100644
index 0000000000..def872aa52
--- /dev/null
+++ b/apps/docs/content/docs/de/tools/clay.mdx
@@ -0,0 +1,226 @@
+---
+title: Clay
+description: Populate Clay workbook
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+
+
+ `}
+/>
+
+{/* MANUAL-CONTENT-START:intro */}
+[Clay](https://www.clay.com/) is a data enrichment and workflow automation platform that helps teams streamline lead generation, research, and data operations through powerful integrations and flexible inputs.
+
+Learn how to use the Clay Tool in Sim to seamlessly insert data into a Clay workbook through webhook triggers. This tutorial walks you through setting up a webhook, configuring data mapping, and automating real-time updates to your Clay workbooks. Perfect for streamlining lead generation and data enrichment directly from your workflow!
+
+VIDEO
+
+With Clay, you can:
+
+- **Enrich agent outputs**: Automatically feed your Sim agent data into Clay tables for structured tracking and analysis
+- **Trigger workflows via webhooks**: Use Clay’s webhook support to initiate Sim agent tasks from within Clay
+- **Leverage data loops**: Seamlessly iterate over enriched data rows with agents that operate across dynamic datasets
+
+In Sim, the Clay integration allows your agents to push structured data into Clay tables via webhooks. This makes it easy to collect, enrich, and manage dynamic outputs such as leads, research summaries, or action items—all in a collaborative, spreadsheet-like interface. Your agents can populate rows in real time, enabling asynchronous workflows where AI-generated insights are captured, reviewed, and used by your team. Whether you're automating research, enriching CRM data, or tracking operational outcomes, Clay becomes a living data layer that interacts intelligently with your agents. By connecting Sim with Clay, you gain a powerful way to operationalize agent results, loop over datasets with precision, and maintain a clean, auditable record of AI-driven work.
+{/* MANUAL-CONTENT-END */}
+
+## Usage Instructions
+
+Integrate Clay into the workflow. Can populate a table with data.
+
+## Tools
+
+### `clay_populate`
+
+Populate Clay with data from a JSON file. Enables direct communication and notifications with timestamp tracking and channel confirmation.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `webhookURL` | string | Yes | The webhook URL to populate |
+| `data` | json | Yes | The data to populate |
+| `authToken` | string | Yes | Auth token for Clay webhook authentication |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `success` | boolean | Operation success status |
+| `output` | json | Clay populate operation results including response data from Clay webhook |
+
+## Notes
+
+- Category: `tools`
+- Type: `clay`
diff --git a/apps/docs/content/docs/de/tools/huggingface.mdx b/apps/docs/content/docs/de/tools/huggingface.mdx
new file mode 100644
index 0000000000..ec1558de05
--- /dev/null
+++ b/apps/docs/content/docs/de/tools/huggingface.mdx
@@ -0,0 +1,98 @@
+---
+title: Hugging Face
+description: Use Hugging Face Inference API
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+
+
+
+
+
+ `}
+/>
+
+{/* MANUAL-CONTENT-START:intro */}
+[HuggingFace](https://huggingface.co/) is a leading AI platform that provides access to thousands of pre-trained machine learning models and powerful inference capabilities. With its extensive model hub and robust API, HuggingFace offers comprehensive tools for both research and production AI applications.
+With HuggingFace, you can:
+
+Access pre-trained models: Utilize models for text generation, translation, image processing, and more
+Generate AI completions: Create content using state-of-the-art language models through the Inference API
+Natural language processing: Process and analyze text with specialized NLP models
+Deploy at scale: Host and serve models for production applications
+Customize models: Fine-tune existing models for specific use cases
+
+In Sim, the HuggingFace integration enables your agents to programmatically generate completions using the HuggingFace Inference API. This allows for powerful automation scenarios such as content generation, text analysis, code completion, and creative writing. Your agents can generate completions with natural language prompts, access specialized models for different tasks, and integrate AI-generated content into workflows. This integration bridges the gap between your AI workflows and machine learning capabilities, enabling seamless AI-powered automation with one of the world's most comprehensive ML platforms.
+{/* MANUAL-CONTENT-END */}
+
+## Usage Instructions
+
+Integrate Hugging Face into the workflow. Can generate completions using the Hugging Face Inference API.
+
+## Tools
+
+### `huggingface_chat`
+
+Generate completions using Hugging Face Inference API
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `systemPrompt` | string | No | System prompt to guide the model behavior |
+| `content` | string | Yes | The user message content to send to the model |
+| `provider` | string | Yes | The provider to use for the API request \(e.g., novita, cerebras, etc.\) |
+| `model` | string | Yes | Model to use for chat completions \(e.g., deepseek/deepseek-v3-0324\) |
+| `maxTokens` | number | No | Maximum number of tokens to generate |
+| `temperature` | number | No | Sampling temperature \(0-2\). Higher values make output more random |
+| `apiKey` | string | Yes | Hugging Face API token |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `success` | boolean | Operation success status |
+| `output` | object | Chat completion results |
+
+## Notes
+
+- Category: `tools`
+- Type: `huggingface`
diff --git a/apps/docs/content/docs/de/tools/knowledge.mdx b/apps/docs/content/docs/de/tools/knowledge.mdx
index 3a9e9b0dd5..2a882953d4 100644
--- a/apps/docs/content/docs/de/tools/knowledge.mdx
+++ b/apps/docs/content/docs/de/tools/knowledge.mdx
@@ -60,10 +60,10 @@ Suche nach ähnlichen Inhalten in einer Wissensdatenbank mittels Vektorähnlichk
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
-| `knowledgeBaseId` | string | Ja | ID der zu durchsuchenden Wissensdatenbank |
+| `knowledgeBaseId` | string | Ja | ID der Wissensdatenbank, in der gesucht werden soll |
| `query` | string | Nein | Suchanfragentext \(optional bei Verwendung von Tag-Filtern\) |
| `topK` | number | Nein | Anzahl der ähnlichsten Ergebnisse, die zurückgegeben werden sollen \(1-100\) |
-| `tagFilters` | any | Nein | Array von Tag-Filtern mit tagName- und tagValue-Eigenschaften |
+| `tagFilters` | array | Nein | Array von Tag-Filtern mit tagName- und tagValue-Eigenschaften |
#### Ausgabe
diff --git a/apps/docs/content/docs/de/tools/stagehand.mdx b/apps/docs/content/docs/de/tools/stagehand.mdx
new file mode 100644
index 0000000000..07684b3069
--- /dev/null
+++ b/apps/docs/content/docs/de/tools/stagehand.mdx
@@ -0,0 +1,219 @@
+---
+title: Stagehand Extract
+description: Extract data from websites
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `}
+/>
+
+{/* MANUAL-CONTENT-START:intro */}
+[Stagehand](https://stagehand.com) is a tool that allows you to extract structured data from webpages using Browserbase and OpenAI.
+
+With Stagehand, you can:
+
+- **Extract structured data**: Extract structured data from webpages using Browserbase and OpenAI
+- **Save data to a database**: Save the extracted data to a database
+- **Automate workflows**: Automate workflows to extract data from webpages
+
+In Sim, the Stagehand integration enables your agents to extract structured data from webpages using Browserbase and OpenAI. This allows for powerful automation scenarios such as data extraction, data analysis, and data integration. Your agents can extract structured data from webpages, save the extracted data to a database, and automate workflows to extract data from webpages. This integration bridges the gap between your AI workflows and your data management system, enabling seamless data extraction and integration. By connecting Sim with Stagehand, you can automate data extraction processes, maintain up-to-date information repositories, generate reports, and organize information intelligently - all through your intelligent agents.
+{/* MANUAL-CONTENT-END */}
+
+## Usage Instructions
+
+Integrate Stagehand into the workflow. Can extract structured data from webpages.
+
+## Tools
+
+### `stagehand_extract`
+
+Extract structured data from a webpage using Stagehand
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `url` | string | Yes | URL of the webpage to extract data from |
+| `instruction` | string | Yes | Instructions for extraction |
+| `apiKey` | string | Yes | OpenAI API key for extraction \(required by Stagehand\) |
+| `schema` | json | Yes | JSON schema defining the structure of the data to extract |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `data` | object | Extracted structured data matching the provided schema |
+
+## Notes
+
+- Category: `tools`
+- Type: `stagehand`
diff --git a/apps/docs/content/docs/de/tools/stagehand_agent.mdx b/apps/docs/content/docs/de/tools/stagehand_agent.mdx
new file mode 100644
index 0000000000..e5f659f819
--- /dev/null
+++ b/apps/docs/content/docs/de/tools/stagehand_agent.mdx
@@ -0,0 +1,225 @@
+---
+title: Stagehand Agent
+description: Autonomous web browsing agent
+---
+
+import { BlockInfoCard } from "@/components/ui/block-info-card"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `}
+/>
+
+{/* MANUAL-CONTENT-START:intro */}
+[Stagehand](https://www.stagehand.dev/) is an autonomous web agent platform that enables AI systems to navigate and interact with websites just like a human would. It provides a powerful solution for automating complex web tasks without requiring custom code or browser automation scripts.
+
+With Stagehand, you can:
+
+- **Automate web navigation**: Enable AI to browse websites, click links, fill forms, and interact with web elements
+- **Extract structured data**: Collect specific information from websites in a structured, usable format
+- **Complete complex workflows**: Perform multi-step tasks across different websites and web applications
+- **Handle authentication**: Navigate login processes and maintain sessions across websites
+- **Process dynamic content**: Interact with JavaScript-heavy sites and single-page applications
+- **Maintain context awareness**: Keep track of the current state and history while navigating
+- **Generate detailed reports**: Receive comprehensive logs of actions taken and data collected
+
+In Sim, the Stagehand integration enables your agents to seamlessly interact with web-based systems as part of their workflows. This allows for sophisticated automation scenarios that bridge the gap between your AI agents and the vast information and functionality available on the web. Your agents can search for information, interact with web applications, extract data from websites, and incorporate these capabilities into their decision-making processes. By connecting Sim with Stagehand, you can create agents that extend beyond API-based integrations to navigate the web just as a human would - filling forms, clicking buttons, reading content, and extracting valuable information to complete their tasks more effectively.
+{/* MANUAL-CONTENT-END */}
+
+## Usage Instructions
+
+Integrate Stagehand Agent into the workflow. Can navigate the web and perform tasks.
+
+## Tools
+
+### `stagehand_agent`
+
+Run an autonomous web agent to complete tasks and extract structured data
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `startUrl` | string | Yes | URL of the webpage to start the agent on |
+| `task` | string | Yes | The task to complete or goal to achieve on the website |
+| `variables` | json | No | Optional variables to substitute in the task \(format: \{key: value\}\). Reference in task using %key% |
+| `format` | string | No | No description |
+| `apiKey` | string | Yes | OpenAI API key for agent execution \(required by Stagehand\) |
+| `outputSchema` | json | No | Optional JSON schema defining the structure of data the agent should return |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `agentResult` | object | Result from the Stagehand agent execution |
+
+## Notes
+
+- Category: `tools`
+- Type: `stagehand_agent`
diff --git a/apps/docs/content/docs/de/tools/supabase.mdx b/apps/docs/content/docs/de/tools/supabase.mdx
index a736a8db62..2ff081e036 100644
--- a/apps/docs/content/docs/de/tools/supabase.mdx
+++ b/apps/docs/content/docs/de/tools/supabase.mdx
@@ -109,10 +109,10 @@ Daten in eine Supabase-Tabelle einfügen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
-| `projectId` | string | Ja | Ihre Supabase-Projekt-ID (z.B. jdrkgepadsdopsntdlom) |
+| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `table` | string | Ja | Der Name der Supabase-Tabelle, in die Daten eingefügt werden sollen |
-| `data` | any | Ja | Die einzufügenden Daten |
-| `apiKey` | string | Ja | Ihr Supabase Service-Role-Secret-Key |
+| `data` | array | Ja | Die einzufügenden Daten \(Array von Objekten oder ein einzelnes Objekt\) |
+| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
@@ -191,8 +191,8 @@ Daten in eine Supabase-Tabelle einfügen oder aktualisieren (Upsert-Operation)
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
-| `table` | string | Ja | Der Name der Supabase-Tabelle, in die Daten eingefügt werden sollen |
-| `data` | any | Ja | Die Daten, die eingefügt oder aktualisiert werden sollen \(Upsert\) |
+| `table` | string | Ja | Der Name der Supabase-Tabelle, in die Daten upsertet werden sollen |
+| `data` | array | Ja | Die zu upsertenden Daten \(einfügen oder aktualisieren\) - Array von Objekten oder ein einzelnes Objekt |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
diff --git a/apps/docs/content/docs/de/tools/telegram.mdx b/apps/docs/content/docs/de/tools/telegram.mdx
index 4a3e7020a2..e57f4c2cc3 100644
--- a/apps/docs/content/docs/de/tools/telegram.mdx
+++ b/apps/docs/content/docs/de/tools/telegram.mdx
@@ -87,12 +87,108 @@ Sendet Nachrichten an Telegram-Kanäle oder Benutzer über die Telegram Bot API.
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
-| `success` | boolean | Erfolgsstatus der Telegram-Nachrichtensendung |
-| `messageId` | number | Eindeutige Telegram-Nachrichtenkennung |
-| `chatId` | string | Ziel-Chat-ID, wohin die Nachricht gesendet wurde |
-| `text` | string | Textinhalt der gesendeten Nachricht |
-| `timestamp` | number | Unix-Zeitstempel, wann die Nachricht gesendet wurde |
-| `from` | object | Informationen über den Bot, der die Nachricht gesendet hat |
+| `message` | string | Erfolgs- oder Fehlermeldung |
+| `data` | object | Telegram-Nachrichtendaten |
+
+## Hinweise
+
+- Kategorie: `tools`
+- Typ: `telegram`
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Ja | Ihr Telegram Bot API-Token |
+| `chatId` | string | Ja | Ziel-Telegram-Chat-ID |
+| `messageId` | string | Ja | Nachrichten-ID zum Löschen |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `message` | string | Erfolgs- oder Fehlermeldung |
+| `data` | object | Ergebnis des Löschvorgangs |
+
+### `telegram_send_photo`
+
+Senden Sie Fotos an Telegram-Kanäle oder Benutzer über die Telegram Bot API.
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Ja | Ihr Telegram Bot API-Token |
+| `chatId` | string | Ja | Ziel-Telegram-Chat-ID |
+| `photo` | string | Ja | Zu sendendes Foto. Übergeben Sie eine file_id oder HTTP-URL |
+| `caption` | string | Nein | Fotobeschreibung (optional) |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `message` | string | Erfolgs- oder Fehlermeldung |
+| `data` | object | Telegram-Nachrichtendaten einschließlich optionaler Foto(s) |
+
+### `telegram_send_video`
+
+Senden Sie Videos an Telegram-Kanäle oder Benutzer über die Telegram Bot API.
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Ja | Ihr Telegram Bot API-Token |
+| `chatId` | string | Ja | Ziel-Telegram-Chat-ID |
+| `video` | string | Ja | Zu sendendes Video. Übergeben Sie eine file_id oder HTTP-URL |
+| `caption` | string | Nein | Videobeschreibung (optional) |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `message` | string | Erfolgs- oder Fehlermeldung |
+| `data` | object | Telegram-Nachrichtendaten einschließlich optionaler Medien |
+
+### `telegram_send_audio`
+
+Senden Sie Audiodateien an Telegram-Kanäle oder Benutzer über die Telegram Bot API.
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Ja | Ihr Telegram Bot API-Token |
+| `chatId` | string | Ja | Ziel-Telegram-Chat-ID |
+| `audio` | string | Ja | Zu sendende Audiodatei. Übergeben Sie eine file_id oder HTTP-URL |
+| `caption` | string | Nein | Audio-Beschriftung \(optional\) |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `message` | string | Erfolgs- oder Fehlermeldung |
+| `data` | object | Telegram-Nachrichtendaten einschließlich Sprach-/Audioinformationen |
+
+### `telegram_send_animation`
+
+Senden Sie Animationen (GIFs) an Telegram-Kanäle oder Benutzer über die Telegram Bot API.
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Ja | Ihr Telegram Bot API-Token |
+| `chatId` | string | Ja | Ziel-Telegram-Chat-ID |
+| `animation` | string | Ja | Zu sendende Animation. Übergeben Sie eine file_id oder HTTP-URL |
+| `caption` | string | Nein | Animations-Beschriftung \(optional\) |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `message` | string | Erfolgs- oder Fehlermeldung |
+| `data` | object | Telegram-Nachrichtendaten einschließlich optionaler Medien |
## Hinweise
diff --git a/apps/docs/content/docs/de/tools/youtube.mdx b/apps/docs/content/docs/de/tools/youtube.mdx
index 9ee05ca3d1..cf7268fe84 100644
--- a/apps/docs/content/docs/de/tools/youtube.mdx
+++ b/apps/docs/content/docs/de/tools/youtube.mdx
@@ -1,6 +1,6 @@
---
title: YouTube
-description: Suche nach Videos auf YouTube
+description: Interagiere mit YouTube-Videos, Kanälen und Playlists
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -39,7 +39,7 @@ In Sim ermöglicht die YouTube-Integration Ihren Agenten, YouTube-Inhalte progra
## Gebrauchsanweisung
-Integriert YouTube in den Workflow. Kann nach Videos suchen. Benötigt API-Schlüssel.
+Integriere YouTube in den Workflow. Kann nach Videos suchen, Videodetails abrufen, Kanalinformationen abrufen, Playlist-Elemente abrufen und Videokommentare abrufen.
## Tools
@@ -61,6 +61,99 @@ Suche nach Videos auf YouTube mit der YouTube Data API.
| --------- | ---- | ----------- |
| `items` | array | Array von YouTube-Videos, die der Suchanfrage entsprechen |
+### `youtube_video_details`
+
+Erhalte detaillierte Informationen über ein bestimmtes YouTube-Video.
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `videoId` | string | Ja | YouTube-Video-ID |
+| `apiKey` | string | Ja | YouTube API-Schlüssel |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `videoId` | string | YouTube-Video-ID |
+| `title` | string | Videotitel |
+| `description` | string | Videobeschreibung |
+| `channelId` | string | Kanal-ID |
+| `channelTitle` | string | Kanalname |
+| `publishedAt` | string | Veröffentlichungsdatum und -uhrzeit |
+| `duration` | string | Videodauer im ISO 8601-Format |
+| `viewCount` | number | Anzahl der Aufrufe |
+| `likeCount` | number | Anzahl der Likes |
+| `commentCount` | number | Anzahl der Kommentare |
+| `thumbnail` | string | Video-Thumbnail-URL |
+| `tags` | array | Video-Tags |
+
+### `youtube_channel_info`
+
+Erhalte detaillierte Informationen über einen YouTube-Kanal.
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `channelId` | string | Nein | YouTube-Kanal-ID \(verwende entweder channelId oder username\) |
+| `username` | string | Nein | YouTube-Kanalbenutzername \(verwende entweder channelId oder username\) |
+| `apiKey` | string | Ja | YouTube API-Schlüssel |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `channelId` | string | YouTube-Kanal-ID |
+| `title` | string | Kanalname |
+| `description` | string | Kanalbeschreibung |
+| `subscriberCount` | number | Anzahl der Abonnenten |
+| `videoCount` | number | Anzahl der Videos |
+| `viewCount` | number | Gesamtaufrufe des Kanals |
+| `publishedAt` | string | Erstellungsdatum des Kanals |
+| `thumbnail` | string | URL des Kanal-Thumbnails |
+| `customUrl` | string | Benutzerdefinierte Kanal-URL |
+
+### `youtube_playlist_items`
+
+Videos aus einer YouTube-Playlist abrufen.
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `playlistId` | string | Ja | YouTube-Playlist-ID |
+| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos |
+| `pageToken` | string | Nein | Page-Token für Paginierung |
+| `apiKey` | string | Ja | YouTube API-Schlüssel |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `items` | array | Array von Videos in der Playlist |
+
+### `youtube_comments`
+
+Kommentare von einem YouTube-Video abrufen.
+
+#### Eingabe
+
+| Parameter | Typ | Erforderlich | Beschreibung |
+| --------- | ---- | -------- | ----------- |
+| `videoId` | string | Ja | YouTube-Video-ID |
+| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare |
+| `order` | string | Nein | Reihenfolge der Kommentare: time oder relevance |
+| `pageToken` | string | Nein | Page-Token für Paginierung |
+| `apiKey` | string | Ja | YouTube API-Schlüssel |
+
+#### Ausgabe
+
+| Parameter | Typ | Beschreibung |
+| --------- | ---- | ----------- |
+| `items` | array | Array von Kommentaren zum Video |
+
## Hinweise
- Kategorie: `tools`
diff --git a/apps/docs/content/docs/de/triggers/api.mdx b/apps/docs/content/docs/de/triggers/api.mdx
index 8dab4cfb38..a8dbb4f486 100644
--- a/apps/docs/content/docs/de/triggers/api.mdx
+++ b/apps/docs/content/docs/de/triggers/api.mdx
@@ -128,3 +128,60 @@ Wenn kein Eingabeformat definiert ist, stellt der Executor das rohe JSON nur unt
Ein Workflow kann nur einen API-Trigger enthalten. Veröffentlichen Sie nach Änderungen eine neue Bereitstellung, damit der Endpunkt aktuell bleibt.
+
+### Datei-Upload-Format
+
+Die API akzeptiert Dateien in zwei Formaten:
+
+**1. Base64-kodierte Dateien** (empfohlen für SDKs):
+
+```json
+{
+ "documents": [{
+ "type": "file",
+ "data": "data:application/pdf;base64,JVBERi0xLjQK...",
+ "name": "document.pdf",
+ "mime": "application/pdf"
+ }]
+}
+```
+
+- Maximale Dateigröße: 20MB pro Datei
+- Dateien werden in den Cloud-Speicher hochgeladen und in UserFile-Objekte mit allen Eigenschaften umgewandelt
+
+**2. Direkte URL-Referenzen**:
+
+```json
+{
+ "documents": [{
+ "type": "url",
+ "data": "https://example.com/document.pdf",
+ "name": "document.pdf",
+ "mime": "application/pdf"
+ }]
+}
+```
+
+- Die Datei wird nicht hochgeladen, die URL wird direkt weitergegeben
+- Nützlich für die Referenzierung bestehender Dateien
+
+### Dateieigenschaften
+
+Für Dateien können alle Eigenschaften abgerufen werden:
+
+| Eigenschaft | Beschreibung | Typ |
+|----------|-------------|------|
+| `` | Signierte Download-URL | string |
+| `` | Ursprünglicher Dateiname | string |
+| `` | Dateigröße in Bytes | number |
+| `` | MIME-Typ | string |
+| `` | Upload-Zeitstempel (ISO 8601) | string |
+| `` | URL-Ablaufzeitstempel (ISO 8601) | string |
+
+Für URL-referenzierte Dateien sind dieselben Eigenschaften verfügbar, außer `uploadedAt` und `expiresAt`, da die Datei nicht in unseren Speicher hochgeladen wird.
+
+Wenn kein Eingabeformat definiert ist, stellt der Executor das rohe JSON nur unter `` zur Verfügung.
+
+
+Ein Workflow kann nur einen API-Trigger enthalten. Veröffentlichen Sie nach Änderungen eine neue Bereitstellung, damit der Endpunkt aktuell bleibt.
+
diff --git a/apps/docs/content/docs/de/triggers/chat.mdx b/apps/docs/content/docs/de/triggers/chat.mdx
index 129054a819..34ddd0c94a 100644
--- a/apps/docs/content/docs/de/triggers/chat.mdx
+++ b/apps/docs/content/docs/de/triggers/chat.mdx
@@ -41,3 +41,11 @@ Dateien enthalten `name`, `mimeType` und einen signierten Download `url`.
Der Builder blockiert mehrere Chat-Auslöser-Blöcke im selben Workflow.
+
+1. Fügen Sie einen Chat-Trigger-Block pro Workflow hinzu.
+2. Stellen Sie den Workflow im Chat-Modus bereit.
+3. Teilen Sie den Bereitstellungslink – jede Antwort verwendet die Konversations-ID wieder, damit der Workflow den Kontext beibehalten kann.
+
+
+Der Builder blockiert mehrere Chat-Trigger-Blöcke im selben Workflow.
+
diff --git a/apps/docs/content/docs/de/yaml/block-reference.mdx b/apps/docs/content/docs/de/yaml/block-reference.mdx
deleted file mode 100644
index 6d0381c91e..0000000000
--- a/apps/docs/content/docs/de/yaml/block-reference.mdx
+++ /dev/null
@@ -1,242 +0,0 @@
----
-title: Block-Referenz-Syntax
-description: Wie man Daten zwischen Blöcken in YAML-Workflows referenziert
----
-
-import { Callout } from 'fumadocs-ui/components/callout'
-import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
-
-Block-Referenzen sind die Grundlage des Datenflusses in Sim-Workflows. Das Verständnis, wie man Ausgaben von einem Block korrekt als Eingaben für einen anderen referenziert, ist essenziell für den Aufbau funktionaler Workflows.
-
-## Grundlegende Referenzregeln
-
-### 1. Verwende Blocknamen, nicht Block-IDs
-
-
-
-
- ```yaml
- # Block definition
- email-sender:
- type: agent
- name: "Email Generator"
- # ... configuration
-
- # Reference the block
- next-block:
- inputs:
- userPrompt: "Process this: "
- ```
-
-
-
-
- ```yaml
- # Block definition
- email-sender:
- type: agent
- name: "Email Generator"
- # ... configuration
-
- # ❌ Don't reference by block ID
- next-block:
- inputs:
- userPrompt: "Process this: "
- ```
-
-
-
-
-### 2. Namen in Referenzformat umwandeln
-
-Um eine Block-Referenz zu erstellen:
-
-1. **Nimm den Blocknamen**: "Email Generator"
-2. **Konvertiere zu Kleinbuchstaben**: "email generator"
-3. **Entferne Leerzeichen und Sonderzeichen**: "emailgenerator"
-4. **Füge Eigenschaft hinzu**: ``
-
-### 3. Verwende die richtigen Eigenschaften
-
-Verschiedene Blocktypen stellen unterschiedliche Eigenschaften bereit:
-
-- **Agent-Blöcke**: `.content` (die KI-Antwort)
-- **Funktionsblöcke**: `.output` (der Rückgabewert)
-- **API-Blöcke**: `.output` (die Antwortdaten)
-- **Tool-Blöcke**: `.output` (das Tool-Ergebnis)
-
-## Referenzbeispiele
-
-### Häufige Block-Referenzen
-
-```yaml
-# Agent block outputs
- # Primary AI response
- # Token usage information
- # Estimated cost
- # Tool execution details
-
-# Function block outputs
- # Function return value
- # Error information (if any)
-
-# API block outputs
- # Response data
- # HTTP status code
- # Response headers
-
-# Tool block outputs
- # Tool execution result
-```
-
-### Blocknamen mit mehreren Wörtern
-
-```yaml
-# Block name: "Data Processor 2"
-
-
-# Block name: "Email Validation Service"
-
-
-# Block name: "Customer Info Agent"
-
-```
-
-## Spezielle Referenzfälle
-
-### Starter-Block
-
-
- Der Starter-Block wird immer als `` referenziert, unabhängig von seinem tatsächlichen Namen.
-
-
-```yaml
-# Starter block definition
-my-custom-start:
- type: starter
- name: "Custom Workflow Start"
- # ... configuration
-
-# Always reference as 'start'
-agent-1:
- inputs:
- userPrompt: # ✅ Correct
- # userPrompt: # ❌ Wrong
-```
-
-### Schleifenvariablen
-
-Innerhalb von Schleifenblöcken sind spezielle Variablen verfügbar:
-
-```yaml
-# Available in loop child blocks
- # Current iteration (0-based)
- # Current item being processed (forEach loops)
- # Full collection (forEach loops)
-```
-
-### Parallele Variablen
-
-Innerhalb von parallelen Blöcken sind spezielle Variablen verfügbar:
-
-```yaml
-# Available in parallel child blocks
- # Instance number (0-based)
- # Item for this instance
- # Full collection
-```
-
-## Komplexe Referenzbeispiele
-
-### Zugriff auf verschachtelte Daten
-
-Bei der Referenzierung komplexer Objekte wird die Punktnotation verwendet:
-
-```yaml
-# If an agent returns structured data
-data-analyzer:
- type: agent
- name: "Data Analyzer"
- inputs:
- responseFormat: |
- {
- "schema": {
- "type": "object",
- "properties": {
- "analysis": {"type": "object"},
- "summary": {"type": "string"},
- "metrics": {"type": "object"}
- }
- }
- }
-
-# Reference nested properties
-next-step:
- inputs:
- userPrompt: |
- Summary:
- Score:
- Full data:
-```
-
-### Mehrere Referenzen im Text
-
-```yaml
-email-composer:
- type: agent
- inputs:
- userPrompt: |
- Create an email with the following information:
-
- Customer:
- Order Details:
- Support Ticket:
-
- Original request:
-```
-
-### Referenzen in Codeblöcken
-
-Bei der Verwendung von Referenzen in Funktionsblöcken werden diese als JavaScript-Werte ersetzt:
-
-```yaml
-data-processor:
- type: function
- inputs:
- code: |
- // References are replaced with actual values
- const customerData = ;
- const orderInfo = ;
- const originalInput = ;
-
- // Process the data
- return {
- customer: customerData.name,
- orderId: orderInfo.id,
- processed: true
- };
-```
-
-## Referenzvalidierung
-
-Sim validiert alle Referenzen beim Importieren von YAML:
-
-### Gültige Referenzen
-- Block existiert im Workflow
-- Eigenschaft ist für den Blocktyp geeignet
-- Keine zirkulären Abhängigkeiten
-- Korrekte Syntaxformatierung
-
-### Häufige Fehler
-- **Block nicht gefunden**: Referenzierter Block existiert nicht
-- **Falsche Eigenschaft**: Verwendung von `.content` in einem Funktionsblock
-- **Tippfehler**: Falsch geschriebene Blocknamen oder Eigenschaften
-- **Zirkuläre Referenzen**: Block referenziert sich direkt oder indirekt selbst
-
-## Best Practices
-
-1. **Verwende beschreibende Blocknamen**: Macht Referenzen lesbarer
-2. **Sei konsistent**: Verwende die gleiche Namenskonvention durchgängig
-3. **Überprüfe Referenzen**: Stelle sicher, dass alle referenzierten Blöcke existieren
-4. **Vermeide tiefe Verschachtelungen**: Halte Referenzketten überschaubar
-5. **Dokumentiere komplexe Abläufe**: Füge Kommentare hinzu, um Referenzbeziehungen zu erklären
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/agent.mdx b/apps/docs/content/docs/de/yaml/blocks/agent.mdx
deleted file mode 100644
index 2c5030d91d..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/agent.mdx
+++ /dev/null
@@ -1,218 +0,0 @@
----
-title: Agent Block YAML Schema
-description: YAML-Konfigurationsreferenz für Agent-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
-properties:
- type:
- type: string
- enum: [agent]
- description: Block type identifier
- name:
- type: string
- description: Display name for this agent block
- inputs:
- type: object
- properties:
- systemPrompt:
- type: string
- description: Instructions that define the agent's role and behavior
- userPrompt:
- type: string
- description: Input content to process (can reference other blocks)
- model:
- type: string
- description: AI model identifier (e.g., gpt-4o, gemini-2.5-pro, deepseek-chat)
- temperature:
- type: number
- minimum: 0
- maximum: 2
- description: Response creativity level (varies by model)
- apiKey:
- type: string
- description: API key for the model provider (use {{ENV_VAR}} format)
- azureEndpoint:
- type: string
- description: Azure OpenAI endpoint URL (required for Azure models)
- azureApiVersion:
- type: string
- description: Azure API version (required for Azure models)
- memories:
- type: string
- description: Memory context from memory blocks
- tools:
- type: array
- description: List of external tools the agent can use
- items:
- type: object
- required: [type, title, toolId, operation, usageControl]
- properties:
- type:
- type: string
- description: Tool type identifier
- title:
- type: string
- description: Human-readable display name
- toolId:
- type: string
- description: Internal tool identifier
- operation:
- type: string
- description: Tool operation/method name
- usageControl:
- type: string
- enum: [auto, required, none]
- description: When AI can use the tool
- params:
- type: object
- description: Tool-specific configuration parameters
- isExpanded:
- type: boolean
- description: UI state
- default: false
- responseFormat:
- type: object
- description: JSON Schema to enforce structured output
- required:
- - model
- - apiKey
- connections:
- type: object
- properties:
- success:
- type: string
- description: Target block ID for successful execution
- error:
- type: string
- description: Target block ID for error handling
-```
-
-## Tool-Konfiguration
-
-Tools werden als Array definiert, wobei jedes Tool diese Struktur hat:
-
-```yaml
-tools:
- - type: # Tool type identifier (exa, gmail, slack, etc.)
- title: # Human-readable display name
- toolId: # Internal tool identifier
- operation: # Tool operation/method name
- usageControl: # When AI can use it (auto | required | none)
- params: # Tool-specific configuration parameters
- isExpanded: # UI state (optional, default: false)
-```
-
-## Verbindungskonfiguration
-
-Verbindungen definieren, wohin der Workflow basierend auf Ausführungsergebnissen geht:
-
-```yaml
-connections:
- success: # Target block ID for successful execution
- error: # Target block ID for error handling (optional)
-```
-
-## Beispiele
-
-### Einfacher Agent
-
-```yaml
-content-agent:
- type: agent
- name: "Content Analyzer 1"
- inputs:
- systemPrompt: "You are a helpful content analyzer. Be concise and clear."
- userPrompt:
- model: gpt-4o
- temperature: 0.3
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: summary-block
-
-summary-block:
- type: agent
- name: "Summary Generator"
- inputs:
- systemPrompt: "Create a brief summary of the analysis."
- userPrompt: "Analyze this: "
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: final-step
-```
-
-### Agent mit Tools
-
-```yaml
-research-agent:
- type: agent
- name: "Research Assistant"
- inputs:
- systemPrompt: "Research the topic and provide detailed information."
- userPrompt:
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
- tools:
- - type: exa
- title: "Web Search"
- toolId: exa_search
- operation: exa_search
- usageControl: auto
- params:
- apiKey: '{{EXA_API_KEY}}'
- connections:
- success: summary-block
-```
-
-### Strukturierte Ausgabe
-
-```yaml
-data-extractor:
- type: agent
- name: "Extract Contact Info"
- inputs:
- systemPrompt: "Extract contact information from the text."
- userPrompt:
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
- responseFormat: |
- {
- "name": "contact_extraction",
- "schema": {
- "type": "object",
- "properties": {
- "name": {"type": "string"},
- "email": {"type": "string"},
- "phone": {"type": "string"}
- },
- "required": ["name"]
- },
- "strict": true
- }
- connections:
- success: save-contact
-```
-
-### Azure OpenAI
-
-```yaml
-azure-agent:
- type: agent
- name: "Azure AI Assistant"
- inputs:
- systemPrompt: "You are a helpful assistant."
- userPrompt:
- model: gpt-4o
- apiKey: '{{AZURE_OPENAI_API_KEY}}'
- azureEndpoint: '{{AZURE_OPENAI_ENDPOINT}}'
- azureApiVersion: "2024-07-01-preview"
- connections:
- success: response-block
-```
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/api.mdx b/apps/docs/content/docs/de/yaml/blocks/api.mdx
deleted file mode 100644
index 1b4be05b00..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/api.mdx
+++ /dev/null
@@ -1,429 +0,0 @@
----
-title: API Block YAML Schema
-description: YAML-Konfigurationsreferenz für API-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
- - inputs
-properties:
- type:
- type: string
- enum: [api]
- description: Block type identifier
- name:
- type: string
- description: Display name for this API block
- inputs:
- type: object
- required:
- - url
- - method
- properties:
- url:
- type: string
- description: The endpoint URL to send the request to
- method:
- type: string
- enum: [GET, POST, PUT, DELETE, PATCH]
- description: HTTP method for the request
- default: GET
- params:
- type: array
- description: Query parameters as table entries
- items:
- type: object
- required:
- - id
- - cells
- properties:
- id:
- type: string
- description: Unique identifier for the parameter entry
- cells:
- type: object
- required:
- - Key
- - Value
- properties:
- Key:
- type: string
- description: Parameter name
- Value:
- type: string
- description: Parameter value
- headers:
- type: array
- description: HTTP headers as table entries
- items:
- type: object
- required:
- - id
- - cells
- properties:
- id:
- type: string
- description: Unique identifier for the header entry
- cells:
- type: object
- required:
- - Key
- - Value
- properties:
- Key:
- type: string
- description: Header name
- Value:
- type: string
- description: Header value
- body:
- type: string
- description: Request body for POST/PUT/PATCH methods
- timeout:
- type: number
- description: Request timeout in milliseconds
- default: 30000
- minimum: 1000
- maximum: 300000
- connections:
- type: object
- properties:
- success:
- type: string
- description: Target block ID for successful requests
- error:
- type: string
- description: Target block ID for error handling
-```
-
-## Verbindungskonfiguration
-
-Verbindungen definieren, wohin der Workflow basierend auf Anfrageergebnissen geht:
-
-```yaml
-connections:
- success: # Target block ID for successful requests
- error: # Target block ID for error handling (optional)
-```
-
-## Beispiele
-
-### Einfache GET-Anfrage
-
-```yaml
-user-api:
- type: api
- name: "Fetch User Data"
- inputs:
- url: "https://api.example.com/users/123"
- method: GET
- headers:
- - id: header-1-uuid-here
- cells:
- Key: "Authorization"
- Value: "Bearer {{API_TOKEN}}"
- - id: header-2-uuid-here
- cells:
- Key: "Content-Type"
- Value: "application/json"
- connections:
- success: process-user-data
- error: handle-api-error
-```
-
-### POST-Anfrage mit Body
-
-```yaml
-create-ticket:
- type: api
- name: "Create Support Ticket"
- inputs:
- url: "https://api.support.com/tickets"
- method: POST
- headers:
- - id: auth-header-uuid
- cells:
- Key: "Authorization"
- Value: "Bearer {{SUPPORT_API_KEY}}"
- - id: content-type-uuid
- cells:
- Key: "Content-Type"
- Value: "application/json"
- body: |
- {
- "title": "",
- "description": "",
- "priority": "high"
- }
- connections:
- success: ticket-created
- error: ticket-error
-```
-
-### Dynamische URL mit Abfrageparametern
-
-```yaml
-search-api:
- type: api
- name: "Search Products"
- inputs:
- url: "https://api.store.com/products"
- method: GET
- params:
- - id: search-param-uuid
- cells:
- Key: "q"
- Value:
- - id: limit-param-uuid
- cells:
- Key: "limit"
- Value: "10"
- - id: category-param-uuid
- cells:
- Key: "category"
- Value:
- headers:
- - id: auth-header-uuid
- cells:
- Key: "Authorization"
- Value: "Bearer {{STORE_API_KEY}}"
- connections:
- success: display-results
-```
-
-## Parameterformat
-
-Header und Parameter (Abfrageparameter) verwenden das Tabellenformat mit folgender Struktur:
-
-```yaml
-headers:
- - id: unique-identifier-here
- cells:
- Key: "Content-Type"
- Value: "application/json"
- - id: another-unique-identifier
- cells:
- Key: "Authorization"
- Value: "Bearer {{API_TOKEN}}"
-
-params:
- - id: param-identifier-here
- cells:
- Key: "limit"
- Value: "10"
-```
-
-**Strukturdetails:**
-- `id`: Eindeutige Kennung zur Verfolgung der Tabellenzeile
-- `cells.Key`: Der Parameter-/Header-Name
-- `cells.Value`: Der Parameter-/Header-Wert
-- Dieses Format ermöglicht eine ordnungsgemäße Tabellenverwaltung und Beibehaltung des UI-Status
-
-## Ausgabereferenzen
-
-Nach der Ausführung eines API-Blocks können Sie auf seine Ausgaben in nachfolgenden Blöcken verweisen. Der API-Block bietet drei Hauptausgaben:
-
-### Verfügbare Ausgaben
-
-| Ausgabe | Typ | Beschreibung |
-|--------|------|-------------|
-| `data` | any | Der Antworttext/die Nutzlast von der API |
-| `status` | number | HTTP-Statuscode (200, 404, 500, usw.) |
-| `headers` | object | Vom Server zurückgegebene Antwort-Header |
-
-### Verwendungsbeispiele
-
-```yaml
-# Reference API response data
-process-data:
- type: function
- name: "Process API Data"
- inputs:
- code: |
- const responseData = ;
- const statusCode = ;
- const responseHeaders = ;
-
- if (statusCode === 200) {
- return {
- success: true,
- user: responseData,
- contentType: responseHeaders['content-type']
- };
- } else {
- return {
- success: false,
- error: `API call failed with status ${statusCode}`
- };
- }
-
-# Use API data in an agent block
-analyze-response:
- type: agent
- name: "Analyze Response"
- inputs:
- userPrompt: |
- Analyze this API response:
-
- Status:
- Data:
-
- Provide insights about the response.
-
-# Conditional logic based on status
-check-status:
- type: condition
- name: "Check API Status"
- inputs:
- condition: === 200
- connections:
- true: success-handler
- false: error-handler
-```
-
-### Praktisches Beispiel
-
-```yaml
-user-api:
- type: api
- name: "Fetch User Data"
- inputs:
- url: "https://api.example.com/users/123"
- method: GET
- connections:
- success: process-response
-
-process-response:
- type: function
- name: "Process Response"
- inputs:
- code: |
- const user = ;
- const status = ;
-
- console.log(`API returned status: ${status}`);
- console.log(`User data:`, user);
-
- return {
- userId: user.id,
- email: user.email,
- isActive: status === 200
- };
-```
-
-### Fehlerbehandlung
-
-```yaml
-api-with-error-handling:
- type: api
- name: "API Call"
- inputs:
- url: "https://api.example.com/data"
- method: GET
- connections:
- success: check-response
- error: handle-error
-
-check-response:
- type: condition
- name: "Check Response Status"
- inputs:
- condition: >= 200 && < 300
- connections:
- true: process-success
- false: handle-api-error
-
-process-success:
- type: function
- name: "Process Success"
- inputs:
- code: |
- return {
- success: true,
- data: ,
- message: "API call successful"
- };
-
-handle-api-error:
- type: function
- name: "Handle API Error"
- inputs:
- code: |
- return {
- success: false,
- status: ,
- error: "API call failed",
- data:
- };
-```
-
-## YAML-String-Escaping
-
-Beim Schreiben von YAML müssen bestimmte Strings in Anführungszeichen gesetzt werden, um korrekt geparst zu werden:
-
-### Strings, die in Anführungszeichen gesetzt werden müssen
-
-```yaml
-# URLs with hyphens, colons, special characters
-url: "https://api.example.com/users/123"
-url: "https://my-api.example.com/data"
-
-# Header values with hyphens or special characters
-headers:
- - id: header-uuid
- cells:
- Key: "User-Agent"
- Value: "My-Application/1.0"
- - id: auth-uuid
- cells:
- Key: "Authorization"
- Value: "Bearer my-token-123"
-
-# Parameter values with hyphens
-params:
- - id: param-uuid
- cells:
- Key: "sort-by"
- Value: "created-at"
-```
-
-### Wann Anführungszeichen verwendet werden sollten
-
-- ✅ **Immer in Anführungszeichen setzen**: URLs, Tokens, Werte mit Bindestrichen, Doppelpunkten oder Sonderzeichen
-- ✅ **Immer in Anführungszeichen setzen**: Werte, die mit Zahlen beginnen, aber Strings sein sollen
-- ✅ **Immer in Anführungszeichen setzen**: Boolean-ähnliche Strings, die als Strings erhalten bleiben sollen
-- ❌ **Nicht in Anführungszeichen setzen**: Einfache alphanumerische Strings ohne Sonderzeichen
-
-### Beispiele
-
-```yaml
-# ✅ Correct
-url: "https://api.stripe.com/v1/charges"
-headers:
- - id: auth-header
- cells:
- Key: "Authorization"
- Value: "Bearer sk-test-123456789"
-
-# ❌ Incorrect (may cause parsing errors)
-url: https://api.stripe.com/v1/charges
-headers:
- - id: auth-header
- cells:
- Key: Authorization
- Value: Bearer sk-test-123456789
-```
-
-## Best Practices
-
-- Umgebungsvariablen für API-Schlüssel verwenden: `{{API_KEY_NAME}}`
-- Fehlerbehandlung mit Fehlerverbindungen einbeziehen
-- Angemessene Timeouts für deinen Anwendungsfall festlegen
-- Statuscode der Antwort in nachfolgenden Blöcken validieren
-- Aussagekräftige Blocknamen für einfachere Referenzierung verwenden
-- **Strings mit Sonderzeichen, URLs und Tokens immer in Anführungszeichen setzen**
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/condition.mdx b/apps/docs/content/docs/de/yaml/blocks/condition.mdx
deleted file mode 100644
index d855d93e26..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/condition.mdx
+++ /dev/null
@@ -1,165 +0,0 @@
----
-title: Bedingungsblock YAML-Schema
-description: YAML-Konfigurationsreferenz für Bedingungsblöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
- - inputs
- - connections
-properties:
- type:
- type: string
- enum: [condition]
- description: Block type identifier
- name:
- type: string
- description: Display name for this condition block
- inputs:
- type: object
- required:
- - conditions
- properties:
- conditions:
- type: object
- description: Conditional expressions and their logic
- properties:
- if:
- type: string
- description: Primary condition expression (boolean)
- else-if:
- type: string
- description: Secondary condition expression (optional)
- else-if-2:
- type: string
- description: Third condition expression (optional)
- else-if-3:
- type: string
- description: Fourth condition expression (optional)
- # Additional else-if-N conditions can be added as needed
- else:
- type: boolean
- description: Default fallback condition (optional)
- default: true
- connections:
- type: object
- required:
- - conditions
- properties:
- conditions:
- type: object
- description: Target blocks for each condition outcome
- properties:
- if:
- type: string
- description: Target block ID when 'if' condition is true
- else-if:
- type: string
- description: Target block ID when 'else-if' condition is true
- else-if-2:
- type: string
- description: Target block ID when 'else-if-2' condition is true
- else-if-3:
- type: string
- description: Target block ID when 'else-if-3' condition is true
- # Additional else-if-N connections can be added as needed
- else:
- type: string
- description: Target block ID when no conditions match
-```
-
-## Verbindungskonfiguration
-
-Im Gegensatz zu anderen Blöcken verwenden Bedingungen verzweigte Verbindungen basierend auf Bedingungsergebnissen:
-
-```yaml
-connections:
- conditions:
- if: # Target block ID when primary condition is true
- else-if: # Target block ID when secondary condition is true (optional)
- else-if-2: # Target block ID when third condition is true (optional)
- else-if-3: # Target block ID when fourth condition is true (optional)
- # Additional else-if-N connections can be added as needed
- else: # Target block ID when no conditions match (optional)
-```
-
-## Beispiele
-
-### Einfaches If-Else
-
-```yaml
-status-check:
- type: condition
- name: "Status Check"
- inputs:
- conditions:
- if: === "approved"
- else: true
- connections:
- conditions:
- if: send-approval-email
- else: send-rejection-email
-```
-
-### Mehrere Bedingungen
-
-```yaml
-user-routing:
- type: condition
- name: "User Type Router"
- inputs:
- conditions:
- if: === "admin"
- else-if: === "premium"
- else-if-2: === "basic"
- else: true
- connections:
- conditions:
- if: admin-dashboard
- else-if: premium-features
- else-if-2: basic-features
- else: registration-flow
-```
-
-### Numerische Vergleiche
-
-```yaml
-score-evaluation:
- type: condition
- name: "Score Evaluation"
- inputs:
- conditions:
- if: >= 90
- else-if: >= 70
- else-if-2: >= 50
- else: true
- connections:
- conditions:
- if: excellent-response
- else-if: good-response
- else-if-2: average-response
- else: poor-response
-```
-
-### Komplexe Logik
-
-```yaml
-eligibility-check:
- type: condition
- name: "Eligibility Check"
- inputs:
- conditions:
- if: >= 18 && === true
- else-if: >= 16 && === true
- else: true
- connections:
- conditions:
- if: full-access
- else-if: limited-access
- else: access-denied
-```
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/evaluator.mdx b/apps/docs/content/docs/de/yaml/blocks/evaluator.mdx
deleted file mode 100644
index 882ba84f34..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/evaluator.mdx
+++ /dev/null
@@ -1,255 +0,0 @@
----
-title: Evaluator Block YAML Schema
-description: YAML-Konfigurationsreferenz für Evaluator-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
- - inputs
-properties:
- type:
- type: string
- enum: [evaluator]
- description: Block type identifier
- name:
- type: string
- description: Display name for this evaluator block
- inputs:
- type: object
- required:
- - content
- - metrics
- - model
- - apiKey
- properties:
- content:
- type: string
- description: Content to evaluate (can reference other blocks)
- metrics:
- type: array
- description: Evaluation criteria and scoring ranges
- items:
- type: object
- properties:
- name:
- type: string
- description: Metric identifier
- description:
- type: string
- description: Detailed explanation of what the metric measures
- range:
- type: object
- properties:
- min:
- type: number
- description: Minimum score value
- max:
- type: number
- description: Maximum score value
- required: [min, max]
- description: Scoring range with numeric bounds
- model:
- type: string
- description: AI model identifier (e.g., gpt-4o, claude-3-5-sonnet-20241022)
- apiKey:
- type: string
- description: API key for the model provider (use {{ENV_VAR}} format)
- temperature:
- type: number
- minimum: 0
- maximum: 2
- description: Model temperature for evaluation
- default: 0.3
- azureEndpoint:
- type: string
- description: Azure OpenAI endpoint URL (required for Azure models)
- azureApiVersion:
- type: string
- description: Azure API version (required for Azure models)
- connections:
- type: object
- properties:
- success:
- type: string
- description: Target block ID for successful evaluation
- error:
- type: string
- description: Target block ID for error handling
-```
-
-## Verbindungskonfiguration
-
-Verbindungen definieren, wohin der Workflow basierend auf den Evaluierungsergebnissen geht:
-
-```yaml
-connections:
- success: # Target block ID for successful evaluation
- error: # Target block ID for error handling (optional)
-```
-
-## Beispiele
-
-### Bewertung der Inhaltsqualität
-
-```yaml
-content-evaluator:
- type: evaluator
- name: "Content Quality Evaluator"
- inputs:
- content:
- metrics:
- - name: "accuracy"
- description: "How factually accurate is the content?"
- range:
- min: 1
- max: 5
- - name: "clarity"
- description: "How clear and understandable is the content?"
- range:
- min: 1
- max: 5
- - name: "relevance"
- description: "How relevant is the content to the original query?"
- range:
- min: 1
- max: 5
- - name: "completeness"
- description: "How complete and comprehensive is the content?"
- range:
- min: 1
- max: 5
- model: gpt-4o
- temperature: 0.2
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: quality-report
- error: evaluation-error
-```
-
-### Bewertung der Kundenantwort
-
-```yaml
-response-evaluator:
- type: evaluator
- name: "Customer Response Evaluator"
- inputs:
- content:
- metrics:
- - name: "helpfulness"
- description: "How helpful is the response in addressing the customer's needs?"
- range:
- min: 1
- max: 10
- - name: "tone"
- description: "How appropriate and professional is the tone?"
- range:
- min: 1
- max: 10
- - name: "completeness"
- description: "Does the response fully address all aspects of the inquiry?"
- range:
- min: 1
- max: 10
- model: claude-3-5-sonnet-20241022
- apiKey: '{{ANTHROPIC_API_KEY}}'
- connections:
- success: response-processor
-```
-
-### A/B-Test-Evaluierung
-
-```yaml
-ab-test-evaluator:
- type: evaluator
- name: "A/B Test Evaluator"
- inputs:
- content: |
- Version A:
- Version B:
-
- Compare these two versions for the following criteria.
- metrics:
- - name: "engagement"
- description: "Which version is more likely to engage users?"
- range: "A, B, or Tie"
- - name: "clarity"
- description: "Which version communicates more clearly?"
- range: "A, B, or Tie"
- - name: "persuasiveness"
- description: "Which version is more persuasive?"
- range: "A, B, or Tie"
- model: gpt-4o
- temperature: 0.1
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: test-results
-```
-
-### Mehrdimensionale Inhaltsbewertung
-
-```yaml
-comprehensive-evaluator:
- type: evaluator
- name: "Comprehensive Content Evaluator"
- inputs:
- content:
- metrics:
- - name: "technical_accuracy"
- description: "How technically accurate and correct is the information?"
- range:
- min: 0
- max: 100
- - name: "readability"
- description: "How easy is the content to read and understand?"
- range:
- min: 0
- max: 100
- - name: "seo_optimization"
- description: "How well optimized is the content for search engines?"
- range:
- min: 0
- max: 100
- - name: "user_engagement"
- description: "How likely is this content to engage and retain readers?"
- range:
- min: 0
- max: 100
- - name: "brand_alignment"
- description: "How well does the content align with brand voice and values?"
- range:
- min: 0
- max: 100
- model: gpt-4o
- temperature: 0.3
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: content-optimization
-```
-
-## Output-Referenzen
-
-Nach der Ausführung eines Evaluator-Blocks können Sie auf seine Ausgaben verweisen:
-
-```yaml
-# In subsequent blocks
-next-block:
- inputs:
- evaluation: # Evaluation summary
- scores: # Individual metric scores
- overall: # Overall assessment
-```
-
-## Best Practices
-
-- Definieren Sie klare, spezifische Bewertungskriterien
-- Verwenden Sie angemessene Bewertungsbereiche für Ihren Anwendungsfall
-- Wählen Sie Modelle mit starken Argumentationsfähigkeiten
-- Verwenden Sie niedrigere Temperaturwerte für konsistente Bewertungen
-- Fügen Sie detaillierte Metrikbeschreibungen hinzu
-- Testen Sie mit verschiedenen Inhaltstypen
-- Erwägen Sie mehrere Evaluatoren für komplexe Bewertungen
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/function.mdx b/apps/docs/content/docs/de/yaml/blocks/function.mdx
deleted file mode 100644
index 496d32f5bf..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/function.mdx
+++ /dev/null
@@ -1,162 +0,0 @@
----
-title: Funktionsblock YAML-Schema
-description: YAML-Konfigurationsreferenz für Funktionsblöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
- - inputs
-properties:
- type:
- type: string
- enum: [function]
- description: Block type identifier
- name:
- type: string
- description: Display name for this function block
- inputs:
- type: object
- required:
- - code
- properties:
- code:
- type: string
- description: JavaScript/TypeScript code to execute (multiline string)
- timeout:
- type: number
- description: Maximum execution time in milliseconds
- default: 30000
- minimum: 1000
- maximum: 300000
- connections:
- type: object
- properties:
- success:
- type: string
- description: Target block ID for successful execution
- error:
- type: string
- description: Target block ID for error handling
-```
-
-## Verbindungskonfiguration
-
-Verbindungen definieren, wohin der Workflow basierend auf den Ausführungsergebnissen geht:
-
-```yaml
-connections:
- success: # Target block ID for successful execution
- error: # Target block ID for error handling (optional)
-```
-
-## Beispiele
-
-### Einfache Validierung
-
-```yaml
-input-validator:
- type: function
- name: "Input Validator"
- inputs:
- code: |-
- // Check if input number is greater than 5
- const inputValue = parseInt(, 10);
-
- if (inputValue > 5) {
- return {
- valid: true,
- value: inputValue,
- message: "Input is valid"
- };
- } else {
- return {
- valid: false,
- value: inputValue,
- message: "Input must be greater than 5"
- };
- }
- connections:
- success: next-step
- error: handle-error
-```
-
-### Datenverarbeitung
-
-```yaml
-data-processor:
- type: function
- name: "Data Transformer"
- inputs:
- code: |
- // Transform the input data
- const rawData = ;
-
- // Process and clean the data
- const processed = rawData
- .filter(item => item.status === 'active')
- .map(item => ({
- id: item.id,
- name: item.name.trim(),
- date: new Date(item.created).toISOString()
- }));
-
- return processed;
- connections:
- success: api-save
- error: error-handler
-```
-
-### API-Integration
-
-```yaml
-api-formatter:
- type: function
- name: "Format API Request"
- inputs:
- code: |
- // Prepare data for API submission
- const userData = ;
-
- const apiPayload = {
- timestamp: new Date().toISOString(),
- data: userData,
- source: "workflow-automation",
- version: "1.0"
- };
-
- return apiPayload;
- connections:
- success: api-call
-```
-
-### Berechnungen
-
-```yaml
-calculator:
- type: function
- name: "Calculate Results"
- inputs:
- code: |
- // Perform calculations on input data
- const numbers = ;
-
- const sum = numbers.reduce((a, b) => a + b, 0);
- const average = sum / numbers.length;
- const max = Math.max(...numbers);
- const min = Math.min(...numbers);
-
- return {
- sum,
- average,
- max,
- min,
- count: numbers.length
- };
- connections:
- success: results-display
-```
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/index.mdx b/apps/docs/content/docs/de/yaml/blocks/index.mdx
deleted file mode 100644
index 7f7eb85d99..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/index.mdx
+++ /dev/null
@@ -1,151 +0,0 @@
----
-title: Block-Schemas
-description: Vollständige YAML-Schema-Referenz für alle Sim-Blöcke
----
-
-import { Card, Cards } from "fumadocs-ui/components/card";
-
-Dieser Abschnitt enthält die vollständigen YAML-Schema-Definitionen für alle verfügbaren Blocktypen in Sim. Jeder Blocktyp hat spezifische Konfigurationsanforderungen und Ausgabeformate.
-
-## Kernblöcke
-
-Dies sind die wesentlichen Bausteine für die Erstellung von Workflows:
-
-
-
- Workflow-Einstiegspunkt mit Unterstützung für manuelle Auslöser, Webhooks und Zeitpläne
-
-
- KI-gestützte Verarbeitung mit LLM-Integration und Tool-Unterstützung
-
-
- Ausführungsumgebung für benutzerdefinierten JavaScript/TypeScript-Code
-
-
- Formatierung und Rückgabe der endgültigen Workflow-Ergebnisse
-
-
-
-## Logik & Kontrollfluss
-
-Blöcke zur Implementierung von bedingter Logik und Kontrollfluss:
-
-
-
- Bedingte Verzweigung basierend auf booleschen Ausdrücken
-
-
- KI-gestützte intelligente Weiterleitung zu mehreren Pfaden
-
-
- Iterative Verarbeitung mit for- und forEach-Schleifen
-
-
- Gleichzeitige Ausführung über mehrere Instanzen
-
-
-
-## Integrationsblöcke
-
-Blöcke zur Verbindung mit externen Diensten und Systemen:
-
-
-
- HTTP-Anfragen an externe REST-APIs
-
-
- Webhook-Auslöser für externe Integrationen
-
-
-
-## Erweiterte Blöcke
-
-Spezialisierte Blöcke für komplexe Workflow-Muster:
-
-
-
- Validierung von Ausgaben anhand definierter Kriterien und Metriken
-
-
- Ausführung anderer Workflows als wiederverwendbare Komponenten
-
-
-
-## Gemeinsame Schema-Elemente
-
-Alle Blöcke teilen diese gemeinsamen Elemente:
-
-### Grundstruktur
-
-```yaml
-block-id:
- type:
- name:
- inputs:
- # Block-specific configuration
- connections:
- # Connection definitions
-```
-
-### Verbindungstypen
-
-- **success**: Zielblock für erfolgreiche Ausführung
-- **error**: Zielblock für Fehlerbehandlung (optional)
-- **conditions**: Mehrere Pfade für bedingte Blöcke
-
-### Umgebungsvariablen
-
-Verwende doppelte geschweifte Klammern für Umgebungsvariablen:
-
-```yaml
-inputs:
- apiKey: '{{API_KEY_NAME}}'
- endpoint: '{{SERVICE_ENDPOINT}}'
-```
-
-### Blockreferenzen
-
-Referenziere andere Blockausgaben mit dem Blocknamen in Kleinbuchstaben:
-
-```yaml
-inputs:
- userPrompt:
- data:
- originalInput:
-```
-
-## Validierungsregeln
-
-Alle YAML-Blöcke werden anhand ihrer Schemas validiert:
-
-1. **Pflichtfelder**: Müssen vorhanden sein
-2. **Typvalidierung**: Werte müssen den erwarteten Typen entsprechen
-3. **Enum-Validierung**: Zeichenkettenwerte müssen aus erlaubten Listen stammen
-4. **Bereichsvalidierung**: Zahlen müssen innerhalb festgelegter Bereiche liegen
-5. **Mustervalidierung**: Zeichenketten müssen Regex-Mustern entsprechen (wo anwendbar)
-
-## Kurzreferenz
-
-### Blocktypen und Eigenschaften
-
-| Blocktyp | Primäre Ausgabe | Häufige Anwendungsfälle |
-|------------|----------------|------------------|
-| starter | `.input` | Workflow-Einstiegspunkt |
-| agent | `.content` | KI-Verarbeitung, Texterstellung |
-| function | `.output` | Datentransformation, Berechnungen |
-| api | `.output` | Integration externer Dienste |
-| condition | N/A (Verzweigung) | Bedingte Logik |
-| router | N/A (Verzweigung) | Intelligentes Routing |
-| response | N/A (Terminal) | Formatierung der Endausgabe |
-| loop | `.results` | Iterative Verarbeitung |
-| parallel | `.results` | Gleichzeitige Verarbeitung |
-| webhook | `.payload` | Externe Auslöser |
-| evaluator | `.score` | Ausgabevalidierung, Qualitätsbewertung |
-| workflow | `.output` | Ausführung von Unterworkflows, Modularität |
-
-### Erforderlich vs. Optional
-
-- **Immer erforderlich**: `type`, `name`
-- **Normalerweise erforderlich**: `inputs`, `connections`
-- **Kontextabhängig**: Spezifische Eingabefelder variieren je nach Blocktyp
-- **Immer optional**: `error`Verbindungen, UI-spezifische Felder
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/parallel.mdx b/apps/docs/content/docs/de/yaml/blocks/parallel.mdx
deleted file mode 100644
index c13c9b4192..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/parallel.mdx
+++ /dev/null
@@ -1,312 +0,0 @@
----
-title: Parallel Block YAML Schema
-description: YAML-Konfigurationsreferenz für Parallel-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
- - inputs
- - connections
-properties:
- type:
- type: string
- enum: [parallel]
- description: Block type identifier
- name:
- type: string
- description: Display name for this parallel block
- inputs:
- type: object
- required:
- - parallelType
- properties:
- parallelType:
- type: string
- enum: [count, collection]
- description: Type of parallel execution
- count:
- type: number
- description: Number of parallel instances (for 'count' type)
- minimum: 1
- maximum: 100
- collection:
- type: string
- description: Collection to distribute across instances (for 'collection' type)
- maxConcurrency:
- type: number
- description: Maximum concurrent executions
- default: 10
- minimum: 1
- maximum: 50
- connections:
- type: object
- required:
- - parallel
- properties:
- parallel:
- type: object
- required:
- - start
- properties:
- start:
- type: string
- description: Target block ID to execute inside each parallel instance
- end:
- type: string
- description: Target block ID after all parallel instances complete (optional)
- error:
- type: string
- description: Target block ID for error handling
-```
-
-## Verbindungskonfiguration
-
-Parallel-Blöcke verwenden ein spezielles Verbindungsformat mit einem `parallel` Abschnitt:
-
-```yaml
-connections:
- parallel:
- start: # Target block ID to execute inside each parallel instance
- end: # Target block ID after all instances complete (optional)
- error: # Target block ID for error handling (optional)
-```
-
-## Konfiguration von untergeordneten Blöcken
-
-Blöcke innerhalb eines Parallel-Blocks müssen ihre `parentId` auf die Parallel-Block-ID setzen:
-
-```yaml
-parallel-1:
- type: parallel
- name: "Process Items"
- inputs:
- parallelType: collection
- collection:
- connections:
- parallel:
- start: process-item
- end: aggregate-results
-
-# Child block inside the parallel
-process-item:
- type: agent
- name: "Process Item"
- parentId: parallel-1 # References the parallel block
- inputs:
- systemPrompt: "Process this item"
- userPrompt:
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
-```
-
-## Beispiele
-
-### Anzahlbasierte Parallelverarbeitung
-
-```yaml
-worker-parallel:
- type: parallel
- name: "Worker Parallel"
- inputs:
- parallelType: count
- count: 5
- maxConcurrency: 3
- connections:
- parallel:
- start: worker-task
- end: collect-worker-results
-
-worker-task:
- type: api
- name: "Worker Task"
- parentId: worker-parallel
- inputs:
- url: "https://api.worker.com/process"
- method: POST
- headers:
- - key: "Authorization"
- value: "Bearer {{WORKER_API_KEY}}"
- body: |
- {
- "instanceId": ,
- "timestamp": "{{new Date().toISOString()}}"
- }
- connections:
- success: worker-complete
-```
-
-### Sammlungsbasierte Parallelverarbeitung
-
-```yaml
-api-parallel:
- type: parallel
- name: "API Parallel"
- inputs:
- parallelType: collection
- collection:
- maxConcurrency: 10
- connections:
- parallel:
- start: call-api
- end: merge-api-results
-
-call-api:
- type: api
- name: "Call API"
- parentId: api-parallel
- inputs:
- url:
- method:
- headers:
- - key: "Authorization"
- value: "Bearer {{API_TOKEN}}"
- connections:
- success: api-complete
-```
-
-### Komplexe parallele Verarbeitungspipeline
-
-```yaml
-data-processing-parallel:
- type: parallel
- name: "Data Processing Parallel"
- inputs:
- parallelType: collection
- collection:
- maxConcurrency: 8
- connections:
- parallel:
- start: validate-data
- end: final-aggregation
- error: parallel-error-handler
-
-validate-data:
- type: function
- name: "Validate Data"
- parentId: data-processing-parallel
- inputs:
- code: |
- const record = ;
- const index = ;
-
- // Validate record structure
- if (!record.id || !record.content) {
- throw new Error(`Invalid record at index ${index}`);
- }
-
- return {
- valid: true,
- recordId: record.id,
- validatedAt: new Date().toISOString()
- };
- connections:
- success: process-data
- error: validation-error
-
-process-data:
- type: agent
- name: "Process Data"
- parentId: data-processing-parallel
- inputs:
- systemPrompt: "Process and analyze this data record"
- userPrompt: |
- Record ID:
- Content:
- Instance:
- model: gpt-4o
- temperature: 0.3
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: store-result
-
-store-result:
- type: function
- name: "Store Result"
- parentId: data-processing-parallel
- inputs:
- code: |
- const processed = ;
- const recordId = ;
-
- return {
- recordId,
- processed,
- completedAt: new Date().toISOString(),
- instanceIndex:
- };
-```
-
-### Gleichzeitige KI-Analyse
-
-```yaml
-multi-model-parallel:
- type: parallel
- name: "Multi-Model Analysis"
- inputs:
- parallelType: collection
- collection: |
- [
- {"model": "gpt-4o", "focus": "technical accuracy"},
- {"model": "claude-3-5-sonnet-20241022", "focus": "creative quality"},
- {"model": "gemini-2.0-flash-exp", "focus": "factual verification"}
- ]
- maxConcurrency: 3
- connections:
- parallel:
- start: analyze-content
- end: combine-analyses
-
-analyze-content:
- type: agent
- name: "Analyze Content"
- parentId: multi-model-parallel
- inputs:
- systemPrompt: |
- You are analyzing content with a focus on .
- Provide detailed analysis from this perspective.
- userPrompt: |
- Content to analyze:
- Analysis focus:
- model:
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: analysis-complete
-```
-
-## Parallele Variablen
-
-Innerhalb von untergeordneten Parallel-Blöcken sind diese speziellen Variablen verfügbar:
-
-```yaml
-# Available in all child blocks of the parallel
- # Instance number (0-based)
- # Item for this instance (collection type)
- # Full collection (collection type)
-```
-
-## Ausgabereferenzen
-
-Nach Abschluss eines Parallel-Blocks können Sie auf seine aggregierten Ergebnisse verweisen:
-
-```yaml
-# In blocks after the parallel
-final-processor:
- inputs:
- all-results: # Array of all instance results
- total-count: # Number of instances completed
-```
-
-## Bewährte Praktiken
-
-- Verwenden Sie angemessene maxConcurrency, um APIs nicht zu überlasten
-- Stellen Sie sicher, dass Operationen unabhängig sind und nicht voneinander abhängen
-- Implementieren Sie Fehlerbehandlung für robuste parallele Ausführung
-- Testen Sie zuerst mit kleinen Sammlungen
-- Überwachen Sie Ratenbegrenzungen für externe APIs
-- Verwenden Sie den Collection-Typ zur Verteilung von Arbeit, den Count-Typ für feste Instanzen
-- Berücksichtigen Sie den Speicherverbrauch bei großen Sammlungen
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/response.mdx b/apps/docs/content/docs/de/yaml/blocks/response.mdx
deleted file mode 100644
index 647260caae..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/response.mdx
+++ /dev/null
@@ -1,239 +0,0 @@
----
-title: Response Block YAML Schema
-description: YAML-Konfigurationsreferenz für Response-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
-properties:
- type:
- type: string
- enum: [response]
- description: Block type identifier
- name:
- type: string
- description: Display name for this response block
- inputs:
- type: object
- properties:
- dataMode:
- type: string
- enum: [structured, json]
- description: Mode for defining response data structure
- default: structured
- builderData:
- type: object
- description: Structured response data (when dataMode is 'structured')
- data:
- type: object
- description: JSON response data (when dataMode is 'json')
- status:
- type: number
- description: HTTP status code
- default: 200
- minimum: 100
- maximum: 599
- headers:
- type: array
- description: Response headers as table entries
- items:
- type: object
- properties:
- id:
- type: string
- description: Unique identifier for the header entry
- key:
- type: string
- description: Header name
- value:
- type: string
- description: Header value
- cells:
- type: object
- description: Cell display values for the table interface
- properties:
- Key:
- type: string
- description: Display value for the key column
- Value:
- type: string
- description: Display value for the value column
-```
-
-## Verbindungskonfiguration
-
-Response-Blöcke sind Endblöcke (keine ausgehenden Verbindungen) und definieren die endgültige Ausgabe:
-
-```yaml
-# No connections object needed - Response blocks are always terminal
-```
-
-## Beispiele
-
-### Einfache Antwort
-
-```yaml
-simple-response:
- type: response
- name: "Simple Response"
- inputs:
- data:
- message: "Hello World"
- timestamp:
- status: 200
-```
-
-### Erfolgreiche Antwort
-
-```yaml
-success-response:
- type: response
- name: "Success Response"
- inputs:
- data:
- success: true
- user:
- id:
- name:
- email:
- created_at:
- status: 201
- headers:
- - key: "Location"
- value: "/api/users/"
- - key: "X-Created-By"
- value: "workflow-engine"
-```
-
-### Antwort mit vollständigem Tabellenkopfformat
-
-Wenn Header über die UI-Tabellenschnittstelle erstellt werden, enthält das YAML zusätzliche Metadaten:
-
-```yaml
-api-response:
- type: response
- name: "API Response"
- inputs:
- data:
- message: "Request processed successfully"
- id:
- status: 200
- headers:
- - id: header-1-uuid-here
- key: "Content-Type"
- value: "application/json"
- cells:
- Key: "Content-Type"
- Value: "application/json"
- - id: header-2-uuid-here
- key: "Cache-Control"
- value: "no-cache"
- cells:
- Key: "Cache-Control"
- Value: "no-cache"
- - id: header-3-uuid-here
- key: "X-API-Version"
- value: "2.1"
- cells:
- Key: "X-API-Version"
- Value: "2.1"
-```
-
-### Fehlerantwort
-
-```yaml
-error-response:
- type: response
- name: "Error Response"
- inputs:
- data:
- error: true
- message:
- code: "VALIDATION_FAILED"
- details:
- status: 400
- headers:
- - key: "X-Error-Code"
- value: "VALIDATION_FAILED"
-```
-
-### Paginierte Antwort
-
-```yaml
-paginated-response:
- type: response
- name: "Paginated Response"
- inputs:
- data:
- data:
- pagination:
- page:
- per_page:
- total:
- total_pages:
- status: 200
- headers:
- - key: "X-Total-Count"
- value:
- - key: "Cache-Control"
- value: "public, max-age=300"
- - key: "Content-Type"
- value: "application/json"
-```
-
-## Tabellenparameterformate
-
-Der Response-Block unterstützt zwei Formate für Header:
-
-### Vereinfachtes Format (manuelles YAML)
-
-Beim manuellen Schreiben von YAML können Sie das vereinfachte Format verwenden:
-
-```yaml
-headers:
- - key: "Content-Type"
- value: "application/json"
- - key: "Cache-Control"
- value: "no-cache"
-```
-
-### Vollständiges Tabellenformat (UI-generiert)
-
-Wenn Header über die UI-Tabellenschnittstelle erstellt werden, enthält das YAML zusätzliche Metadaten:
-
-```yaml
-headers:
- - id: unique-identifier-here
- key: "Content-Type"
- value: "application/json"
- cells:
- Key: "Content-Type"
- Value: "application/json"
-```
-
-**Wesentliche Unterschiede:**
-- `id`: Eindeutiger Identifikator zur Verfolgung der Tabellenzeile
-- `cells`: Anzeigewerte, die von der UI-Tabellenschnittstelle verwendet werden
-- Beide Formate sind für die Workflow-Ausführung funktional gleichwertig
-- Das vollständige Format bewahrt den UI-Status beim Importieren/Exportieren von Workflows
-
-**Wichtig:** Setzen Sie Header-Namen und Werte, die Sonderzeichen enthalten, immer in Anführungszeichen:
-
-```yaml
-headers:
- - id: content-type-uuid
- cells:
- Key: "Content-Type"
- Value: "application/json"
- - id: cache-control-uuid
- cells:
- Key: "Cache-Control"
- Value: "no-cache"
-```
-
-```
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/router.mdx b/apps/docs/content/docs/de/yaml/blocks/router.mdx
deleted file mode 100644
index a808a5fb6f..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/router.mdx
+++ /dev/null
@@ -1,200 +0,0 @@
----
-title: Router Block YAML Schema
-description: YAML-Konfigurationsreferenz für Router-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
- - inputs
-properties:
- type:
- type: string
- enum: [router]
- description: Block type identifier
- name:
- type: string
- description: Display name for this router block
- inputs:
- type: object
- required:
- - prompt
- - model
- - apiKey
- properties:
- prompt:
- type: string
- description: Instructions for routing decisions and criteria
- model:
- type: string
- description: AI model identifier (e.g., gpt-4o, gemini-2.5-pro, deepseek-chat)
- apiKey:
- type: string
- description: API key for the model provider (use {{ENV_VAR}} format)
- temperature:
- type: number
- minimum: 0
- maximum: 2
- description: Model temperature for routing decisions
- default: 0.3
- azureEndpoint:
- type: string
- description: Azure OpenAI endpoint URL (required for Azure models)
- azureApiVersion:
- type: string
- description: Azure API version (required for Azure models)
- connections:
- type: object
- description: Multiple connection paths for different routing outcomes
- properties:
- success:
- type: array
- items:
- type: string
- description: Array of target block IDs for routing destinations
-```
-
-## Verbindungskonfiguration
-
-Router-Blöcke verwenden ein success-Array, das alle möglichen Routing-Ziele enthält:
-
-```yaml
-connections:
- success:
- - # Target block ID option 1
- - # Target block ID option 2
- - # Target block ID option 3
- # Additional target block IDs as needed
-```
-
-## Beispiele
-
-### Content-Type-Router
-
-```yaml
-content-router:
- type: router
- name: "Content Type Router"
- inputs:
- prompt: |
- Route this content based on its type:
- - If it's a question, route to question-handler
- - If it's a complaint, route to complaint-handler
- - If it's feedback, route to feedback-handler
- - If it's a request, route to request-handler
-
- Content:
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success:
- - question-handler
- - complaint-handler
- - feedback-handler
- - request-handler
-```
-
-### Prioritäts-Router
-
-```yaml
-priority-router:
- type: router
- name: "Priority Router"
- inputs:
- prompt: |
- Analyze the urgency and route accordingly:
- - urgent-queue: High priority, needs immediate attention
- - standard-queue: Normal priority, standard processing
- - low-queue: Low priority, can be delayed
-
- Email content:
-
- Route based on urgency indicators, deadlines, and tone.
- model: gpt-4o
- temperature: 0.2
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success:
- - urgent-queue
- - standard-queue
- - low-queue
-```
-
-### Abteilungs-Router
-
-```yaml
-department-router:
- type: router
- name: "Department Router"
- inputs:
- prompt: |
- Route this customer inquiry to the appropriate department:
-
- - sales-team: Sales questions, pricing, demos
- - support-team: Technical issues, bug reports, how-to questions
- - billing-team: Payment issues, subscription changes, invoices
- - general-team: General inquiries, feedback, other topics
-
- Customer message:
- Customer type:
- model: claude-3-5-sonnet-20241022
- apiKey: '{{ANTHROPIC_API_KEY}}'
- connections:
- success:
- - sales-team
- - support-team
- - billing-team
- - general-team
-```
-
-## Erweiterte Konfiguration
-
-### Multi-Modell-Router
-
-```yaml
-model-selector-router:
- type: router
- name: "Model Selection Router"
- inputs:
- prompt: |
- Based on the task complexity, route to the appropriate model:
- - simple-gpt35: Simple questions, basic tasks
- - advanced-gpt4: Complex analysis, detailed reasoning
- - specialized-claude: Creative writing, nuanced analysis
-
- Task:
- Complexity indicators:
- model: gpt-4o-mini
- temperature: 0.1
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success:
- - simple-gpt35
- - advanced-gpt4
- - specialized-claude
-```
-
-## Output-Referenzen
-
-Router-Blöcke erzeugen keine direkten Outputs, sondern steuern den Workflow-Pfad:
-
-```yaml
-# Router decisions affect which subsequent blocks execute
-# Access the routed block's outputs normally:
-final-step:
- inputs:
- routed-result:
-```
-
-## Best Practices
-
-- Klare Routing-Kriterien im Prompt angeben
-- Spezifische, beschreibende Namen für Zielblöcke verwenden
-- Beispiele für Inhalte für jeden Routing-Pfad einschließen
-- Niedrigere Temperaturwerte für konsistentes Routing verwenden
-- Mit verschiedenen Eingabetypen testen, um genaues Routing sicherzustellen
-- Fallback-Pfade für Sonderfälle berücksichtigen
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/starter.mdx b/apps/docs/content/docs/de/yaml/blocks/starter.mdx
deleted file mode 100644
index c44aa25528..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/starter.mdx
+++ /dev/null
@@ -1,183 +0,0 @@
----
-title: YAML-Schema für Starter-Block
-description: YAML-Konfigurationsreferenz für Starter-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
-properties:
- type:
- type: string
- enum: [starter]
- description: Block type identifier
- name:
- type: string
- description: Display name for this starter block
- inputs:
- type: object
- properties:
- startWorkflow:
- type: string
- enum: [manual, webhook, schedule]
- description: How the workflow should be triggered
- default: manual
- inputFormat:
- type: array
- description: Expected input structure for API calls (manual workflows)
- items:
- type: object
- properties:
- name:
- type: string
- description: Field name
- type:
- type: string
- enum: [string, number, boolean, object, array]
- description: Field type
- scheduleType:
- type: string
- enum: [hourly, daily, weekly, monthly]
- description: Schedule frequency (schedule workflows only)
- hourlyMinute:
- type: number
- minimum: 0
- maximum: 59
- description: Minute of the hour to run (hourly schedules)
- dailyTime:
- type: string
- pattern: "^([01]?[0-9]|2[0-3]):[0-5][0-9]$"
- description: Time of day to run in HH:MM format (daily schedules)
- weeklyDay:
- type: string
- enum: [MON, TUE, WED, THU, FRI, SAT, SUN]
- description: Day of week to run (weekly schedules)
- weeklyTime:
- type: string
- pattern: "^([01]?[0-9]|2[0-3]):[0-5][0-9]$"
- description: Time of day to run in HH:MM format (weekly schedules)
- monthlyDay:
- type: number
- minimum: 1
- maximum: 28
- description: Day of month to run (monthly schedules)
- monthlyTime:
- type: string
- pattern: "^([01]?[0-9]|2[0-3]):[0-5][0-9]$"
- description: Time of day to run in HH:MM format (monthly schedules)
- timezone:
- type: string
- description: Timezone for scheduled workflows
- default: UTC
- webhookProvider:
- type: string
- enum: [slack, gmail, airtable, telegram, generic, whatsapp, github, discord, stripe]
- description: Provider for webhook integration (webhook workflows only)
- webhookConfig:
- type: object
- description: Provider-specific webhook configuration
- connections:
- type: object
- properties:
- success:
- type: string
- description: Target block ID to execute when workflow starts
-```
-
-## Verbindungskonfiguration
-
-Der Starter-Block hat nur eine Erfolgsverbindung, da er der Einstiegspunkt ist:
-
-```yaml
-connections:
- success: # Target block ID to execute when workflow starts
-```
-
-## Beispiele
-
-### Manueller Start
-
-```yaml
-start:
- type: starter
- name: Start
- inputs:
- startWorkflow: manual
- connections:
- success: next-block
-```
-
-### Manueller Start mit Eingabeformat
-
-```yaml
-start:
- type: starter
- name: Start
- inputs:
- startWorkflow: manual
- inputFormat:
- - name: query
- type: string
- - name: email
- type: string
- - name: age
- type: number
- - name: isActive
- type: boolean
- - name: preferences
- type: object
- - name: tags
- type: array
- connections:
- success: agent-1
-```
-
-### Täglicher Zeitplan
-
-```yaml
-start:
- type: starter
- name: Start
- inputs:
- startWorkflow: schedule
- scheduleType: daily
- dailyTime: "09:00"
- timezone: "America/New_York"
- connections:
- success: daily-task
-```
-
-### Wöchentlicher Zeitplan
-
-```yaml
-start:
- type: starter
- name: Start
- inputs:
- startWorkflow: schedule
- scheduleType: weekly
- weeklyDay: MON
- weeklyTime: "08:30"
- timezone: UTC
- connections:
- success: weekly-report
-```
-
-### Webhook-Auslöser
-
-```yaml
-start:
- type: starter
- name: Start
- inputs:
- startWorkflow: webhook
- webhookProvider: slack
- webhookConfig:
- # Provider-specific configuration
- connections:
- success: process-webhook
-```
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/webhook.mdx b/apps/docs/content/docs/de/yaml/blocks/webhook.mdx
deleted file mode 100644
index 02523d200f..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/webhook.mdx
+++ /dev/null
@@ -1,403 +0,0 @@
----
-title: Webhook-Block YAML-Schema
-description: YAML-Konfigurationsreferenz für Webhook-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
-properties:
- type:
- type: string
- enum: [webhook]
- description: Block type identifier
- name:
- type: string
- description: Display name for this webhook block
- inputs:
- type: object
- properties:
- webhookConfig:
- type: object
- description: Webhook configuration settings
- properties:
- enabled:
- type: boolean
- description: Whether the webhook is active
- default: true
- secret:
- type: string
- description: Secret key for webhook verification
- headers:
- type: array
- description: Expected headers for validation as table entries
- items:
- type: object
- properties:
- id:
- type: string
- description: Unique identifier for the header entry
- key:
- type: string
- description: Header name
- value:
- type: string
- description: Expected header value
- cells:
- type: object
- description: Cell display values for the table interface
- properties:
- Key:
- type: string
- description: Display value for the key column
- Value:
- type: string
- description: Display value for the value column
- methods:
- type: array
- description: Allowed HTTP methods
- items:
- type: string
- enum: [GET, POST, PUT, DELETE, PATCH]
- default: [POST]
- responseConfig:
- type: object
- description: Response configuration for the webhook
- properties:
- status:
- type: number
- description: HTTP status code to return
- default: 200
- minimum: 100
- maximum: 599
- headers:
- type: array
- description: Response headers as table entries
- items:
- type: object
- properties:
- id:
- type: string
- description: Unique identifier for the header entry
- key:
- type: string
- description: Header name
- value:
- type: string
- description: Header value
- cells:
- type: object
- description: Cell display values for the table interface
- properties:
- Key:
- type: string
- description: Display value for the key column
- Value:
- type: string
- description: Display value for the value column
- body:
- type: string
- description: Response body content
- connections:
- type: object
- properties:
- success:
- type: string
- description: Target block ID for successful webhook processing
- error:
- type: string
- description: Target block ID for error handling
-```
-
-## Verbindungskonfiguration
-
-Verbindungen definieren, wohin der Workflow basierend auf der Webhook-Verarbeitung geht:
-
-```yaml
-connections:
- success: # Target block ID for successful processing
- error: # Target block ID for error handling (optional)
-```
-
-## Beispiele
-
-### Einfacher Webhook-Auslöser
-
-```yaml
-github-webhook:
- type: webhook
- name: "GitHub Webhook"
- inputs:
- webhookConfig:
- enabled: true
- secret: "{{GITHUB_WEBHOOK_SECRET}}"
- methods: [POST]
- headers:
- - key: "X-GitHub-Event"
- value: "push"
- responseConfig:
- status: 200
- body: |
- {
- "message": "Webhook received successfully",
- "timestamp": "{{new Date().toISOString()}}"
- }
- connections:
- success: process-github-event
- error: webhook-error-handler
-```
-
-### Slack-Event-Webhook
-
-```yaml
-slack-events:
- type: webhook
- name: "Slack Events"
- inputs:
- webhookConfig:
- enabled: true
- secret: "{{SLACK_SIGNING_SECRET}}"
- methods: [POST]
- headers:
- - key: "Content-Type"
- value: "application/json"
- responseConfig:
- status: 200
- headers:
- - key: "Content-Type"
- value: "application/json"
- body: |
- {
- "challenge": ""
- }
- connections:
- success: handle-slack-event
-```
-
-### Zahlungs-Webhook (Stripe)
-
-```yaml
-stripe-webhook:
- type: webhook
- name: "Stripe Payment Webhook"
- inputs:
- webhookConfig:
- enabled: true
- secret: "{{STRIPE_WEBHOOK_SECRET}}"
- methods: [POST]
- headers:
- - key: "Stripe-Signature"
- value: "*"
- responseConfig:
- status: 200
- headers:
- - key: "Content-Type"
- value: "application/json"
- body: |
- {
- "received": true
- }
- connections:
- success: process-payment-event
- error: payment-webhook-error
-```
-
-### Webhook mit vollständigem Tabellenkopfformat
-
-Wenn Header über die UI-Tabellenschnittstelle erstellt werden, enthält das YAML zusätzliche Metadaten:
-
-```yaml
-api-webhook-complete:
- type: webhook
- name: "API Webhook with Table Headers"
- inputs:
- webhookConfig:
- enabled: true
- methods: [POST]
- headers:
- - id: header-1-uuid-here
- key: "Authorization"
- value: "Bearer {{WEBHOOK_API_KEY}}"
- cells:
- Key: "Authorization"
- Value: "Bearer {{WEBHOOK_API_KEY}}"
- - id: header-2-uuid-here
- key: "Content-Type"
- value: "application/json"
- cells:
- Key: "Content-Type"
- Value: "application/json"
- responseConfig:
- status: 200
- headers:
- - id: response-header-1-uuid
- key: "Content-Type"
- value: "application/json"
- cells:
- Key: "Content-Type"
- Value: "application/json"
- - id: response-header-2-uuid
- key: "X-Webhook-Response"
- value: "processed"
- cells:
- Key: "X-Webhook-Response"
- Value: "processed"
- body: |
- {
- "status": "received",
- "timestamp": "{{new Date().toISOString()}}"
- }
- connections:
- success: process-webhook-complete
-```
-
-### Generischer API-Webhook
-
-```yaml
-api-webhook:
- type: webhook
- name: "API Webhook"
- inputs:
- webhookConfig:
- enabled: true
- methods: [POST, PUT]
- headers:
- - key: "Authorization"
- value: "Bearer {{WEBHOOK_API_KEY}}"
- - key: "Content-Type"
- value: "application/json"
- responseConfig:
- status: 202
- headers:
- - key: "Content-Type"
- value: "application/json"
- - key: "X-Processed-By"
- value: "Sim"
- body: |
- {
- "status": "accepted",
- "id": "{{Math.random().toString(36).substr(2, 9)}}",
- "received_at": "{{new Date().toISOString()}}"
- }
- connections:
- success: process-webhook-data
-```
-
-### Multi-Methoden-Webhook
-
-```yaml
-crud-webhook:
- type: webhook
- name: "CRUD Webhook"
- inputs:
- webhookConfig:
- enabled: true
- methods: [GET, POST, PUT, DELETE]
- headers:
- - key: "X-API-Key"
- value: "{{CRUD_API_KEY}}"
- responseConfig:
- status: 200
- headers:
- - key: "Content-Type"
- value: "application/json"
- body: |
- {
- "method": "",
- "processed": true,
- "timestamp": "{{new Date().toISOString()}}"
- }
- connections:
- success: route-by-method
-```
-
-## Tabellenparameterformate
-
-Der Webhook-Block unterstützt zwei Formate für Header (sowohl Validierungs-Header als auch Antwort-Header):
-
-### Vereinfachtes Format (manuelles YAML)
-
-Beim manuellen Schreiben von YAML können Sie das vereinfachte Format verwenden:
-
-```yaml
-headers:
- - key: "Authorization"
- value: "Bearer {{API_TOKEN}}"
- - key: "Content-Type"
- value: "application/json"
-```
-
-### Vollständiges Tabellenformat (UI-generiert)
-
-Wenn Header über die UI-Tabellenschnittstelle erstellt werden, enthält das YAML zusätzliche Metadaten:
-
-```yaml
-headers:
- - id: unique-identifier-here
- key: "Authorization"
- value: "Bearer {{API_TOKEN}}"
- cells:
- Key: "Authorization"
- Value: "Bearer {{API_TOKEN}}"
-```
-
-**Wesentliche Unterschiede:**
-- `id`: Eindeutige Kennung zur Verfolgung der Tabellenzeile
-- `cells`: Anzeigewerte, die von der UI-Tabellenschnittstelle verwendet werden
-- Beide Formate sind für die Webhook-Verarbeitung funktional gleichwertig
-- Das vollständige Format bewahrt den UI-Status beim Importieren/Exportieren von Workflows
-
-**Wichtig:** Setzen Sie Headernamen und Werte, die Sonderzeichen enthalten, immer in Anführungszeichen:
-
-```yaml
-headers:
- - id: auth-header-uuid
- cells:
- Key: "Authorization"
- Value: "Bearer {{WEBHOOK_API_KEY}}"
- - id: content-type-uuid
- cells:
- Key: "Content-Type"
- Value: "application/json"
-```
-
-## Webhook-Variablen
-
-In Webhook-ausgelösten Workflows sind diese speziellen Variablen verfügbar:
-
-```yaml
-# Available in blocks after the webhook
- # Full request payload/body
- # Request headers
- # HTTP method used
- # Query parameters
- # Request path
- # Challenge parameter (for verification)
-```
-
-## Ausgabereferenzen
-
-Nachdem ein Webhook eine Anfrage verarbeitet hat, können Sie auf seine Daten verweisen:
-
-```yaml
-# In subsequent blocks
-process-webhook:
- inputs:
- payload: # Request payload
- headers: # Request headers
- method: # HTTP method
-```
-
-## Sicherheits-Best-Practices
-
-- Verwenden Sie immer Webhook-Geheimnisse zur Verifizierung
-- Validieren Sie erwartete Header und Methoden
-- Implementieren Sie angemessene Fehlerbehandlung
-- Verwenden Sie HTTPS-Endpunkte in der Produktion
-- Überwachen Sie Webhook-Aktivitäten und -Fehler
-- Setzen Sie angemessene Antwort-Timeouts
-- Validieren Sie die Payload-Struktur vor der Verarbeitung
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/blocks/workflow.mdx b/apps/docs/content/docs/de/yaml/blocks/workflow.mdx
deleted file mode 100644
index aeed591a4e..0000000000
--- a/apps/docs/content/docs/de/yaml/blocks/workflow.mdx
+++ /dev/null
@@ -1,299 +0,0 @@
----
-title: YAML-Schema für Workflow-Blöcke
-description: YAML-Konfigurationsreferenz für Workflow-Blöcke
----
-
-## Schema-Definition
-
-```yaml
-type: object
-required:
- - type
- - name
- - inputs
-properties:
- type:
- type: string
- enum: [workflow]
- description: Block type identifier
- name:
- type: string
- description: Display name for this workflow block
- inputs:
- type: object
- required:
- - workflowId
- properties:
- workflowId:
- type: string
- description: ID of the workflow to execute
- inputMapping:
- type: object
- description: Map current workflow data to sub-workflow inputs
- additionalProperties:
- type: string
- description: Input value or reference to parent workflow data
- environmentVariables:
- type: object
- description: Environment variables to pass to sub-workflow
- additionalProperties:
- type: string
- description: Environment variable value
- timeout:
- type: number
- description: Maximum execution time in milliseconds
- default: 300000
- minimum: 1000
- maximum: 1800000
- connections:
- type: object
- properties:
- success:
- type: string
- description: Target block ID for successful workflow completion
- error:
- type: string
- description: Target block ID for error handling
-```
-
-## Verbindungskonfiguration
-
-Verbindungen definieren, wohin der Workflow basierend auf den Ergebnissen des Unter-Workflows geht:
-
-```yaml
-connections:
- success: # Target block ID for successful completion
- error: # Target block ID for error handling (optional)
-```
-
-## Beispiele
-
-### Einfache Workflow-Ausführung
-
-```yaml
-data-processor:
- type: workflow
- name: "Data Processing Workflow"
- inputs:
- workflowId: "data-processing-v2"
- inputMapping:
- rawData:
- userId:
- environmentVariables:
- PROCESSING_MODE: "production"
- LOG_LEVEL: "info"
- connections:
- success: process-results
- error: workflow-error-handler
-```
-
-### Content-Generierungs-Pipeline
-
-```yaml
-content-generator:
- type: workflow
- name: "Content Generation Pipeline"
- inputs:
- workflowId: "content-generation-v3"
- inputMapping:
- topic:
- style:
- targetAudience:
- brandGuidelines:
- environmentVariables:
- CONTENT_API_KEY: "{{CONTENT_API_KEY}}"
- QUALITY_THRESHOLD: "high"
- timeout: 120000
- connections:
- success: review-content
- error: content-generation-failed
-```
-
-### Mehrstufiger Analyse-Workflow
-
-```yaml
-analysis-workflow:
- type: workflow
- name: "Analysis Workflow"
- inputs:
- workflowId: "comprehensive-analysis"
- inputMapping:
- document:
- analysisType: "comprehensive"
- includeMetrics: true
- outputFormat: "structured"
- environmentVariables:
- ANALYSIS_MODEL: "gpt-4o"
- OPENAI_API_KEY: "{{OPENAI_API_KEY}}"
- CLAUDE_API_KEY: "{{CLAUDE_API_KEY}}"
- connections:
- success: compile-analysis-report
- error: analysis-workflow-error
-```
-
-### Bedingte Workflow-Ausführung
-
-```yaml
-customer-workflow-router:
- type: condition
- name: "Customer Workflow Router"
- inputs:
- conditions:
- if: === "enterprise"
- else-if: === "premium"
- else: true
- connections:
- conditions:
- if: enterprise-workflow
- else-if: premium-workflow
- else: standard-workflow
-
-enterprise-workflow:
- type: workflow
- name: "Enterprise Customer Workflow"
- inputs:
- workflowId: "enterprise-customer-processing"
- inputMapping:
- customerData:
- accountManager:
- tier: "enterprise"
- environmentVariables:
- PRIORITY_LEVEL: "high"
- SLA_REQUIREMENTS: "strict"
- connections:
- success: enterprise-complete
-
-premium-workflow:
- type: workflow
- name: "Premium Customer Workflow"
- inputs:
- workflowId: "premium-customer-processing"
- inputMapping:
- customerData:
- supportLevel: "premium"
- environmentVariables:
- PRIORITY_LEVEL: "medium"
- connections:
- success: premium-complete
-
-standard-workflow:
- type: workflow
- name: "Standard Customer Workflow"
- inputs:
- workflowId: "standard-customer-processing"
- inputMapping:
- customerData:
- environmentVariables:
- PRIORITY_LEVEL: "standard"
- connections:
- success: standard-complete
-```
-
-### Parallele Workflow-Ausführung
-
-```yaml
-parallel-workflows:
- type: parallel
- name: "Parallel Workflow Processing"
- inputs:
- parallelType: collection
- collection: |
- [
- {"workflowId": "sentiment-analysis", "focus": "sentiment"},
- {"workflowId": "topic-extraction", "focus": "topics"},
- {"workflowId": "entity-recognition", "focus": "entities"}
- ]
- connections:
- success: merge-workflow-results
-
-execute-analysis-workflow:
- type: workflow
- name: "Execute Analysis Workflow"
- parentId: parallel-workflows
- inputs:
- workflowId:
- inputMapping:
- content:
- analysisType:
- environmentVariables:
- ANALYSIS_API_KEY: "{{ANALYSIS_API_KEY}}"
- connections:
- success: workflow-complete
-```
-
-### Workflow zur Fehlerbehandlung
-
-```yaml
-main-workflow:
- type: workflow
- name: "Main Processing Workflow"
- inputs:
- workflowId: "main-processing-v1"
- inputMapping:
- data:
- timeout: 180000
- connections:
- success: main-complete
- error: error-recovery-workflow
-
-error-recovery-workflow:
- type: workflow
- name: "Error Recovery Workflow"
- inputs:
- workflowId: "error-recovery-v1"
- inputMapping:
- originalInput:
- errorDetails:
- failureTimestamp: "{{new Date().toISOString()}}"
- environmentVariables:
- RECOVERY_MODE: "automatic"
- FALLBACK_ENABLED: "true"
- connections:
- success: recovery-complete
- error: manual-intervention-required
-```
-
-## Input-Mapping
-
-Daten vom übergeordneten Workflow zum Unter-Workflow zuordnen:
-
-```yaml
-inputMapping:
- # Static values
- mode: "production"
- version: "1.0"
-
- # References to parent workflow data
- userData:
- settings:
-
- # Complex object mapping
- requestData:
- id:
- timestamp: "{{new Date().toISOString()}}"
- source: "parent-workflow"
-```
-
-## Output-Referenzen
-
-Nach Abschluss eines Workflow-Blocks können Sie auf dessen Ausgaben verweisen:
-
-```yaml
-# In subsequent blocks
-next-block:
- inputs:
- workflowResult: # Sub-workflow output
- executionTime: # Execution duration
- status: # Execution status
-```
-
-## Bewährte Praktiken
-
-- Verwenden Sie aussagekräftige Workflow-IDs für mehr Klarheit
-- Übertragen Sie nur notwendige Daten an Sub-Workflows
-- Setzen Sie angemessene Timeouts entsprechend der Workflow-Komplexität
-- Integrieren Sie Fehlerbehandlung für robuste Ausführung
-- Übergeben Sie Umgebungsvariablen sicher
-- Testen Sie Sub-Workflows zuerst unabhängig voneinander
-- Überwachen Sie die Leistung verschachtelter Workflows
-- Verwenden Sie versionierte Workflow-IDs für Stabilität
\ No newline at end of file
diff --git a/apps/docs/content/docs/de/yaml/examples.mdx b/apps/docs/content/docs/de/yaml/examples.mdx
deleted file mode 100644
index 588691aa84..0000000000
--- a/apps/docs/content/docs/de/yaml/examples.mdx
+++ /dev/null
@@ -1,273 +0,0 @@
----
-title: YAML Workflow Beispiele
-description: Beispiele vollständiger YAML-Workflows
----
-
-import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
-
-## Multi-Agent-Ketten-Workflow
-
-Ein Workflow, bei dem mehrere KI-Agenten Informationen sequentiell verarbeiten:
-
-```yaml
-version: '1.0'
-blocks:
- start:
- type: starter
- name: Start
- inputs:
- startWorkflow: manual
- connections:
- success: agent-1-initiator
-
- agent-1-initiator:
- type: agent
- name: Agent 1 Initiator
- inputs:
- systemPrompt: You are the first agent in a chain. Your role is to analyze the input and create an initial response that will be passed to the next agent.
- userPrompt: |-
- Welcome! I'm the first agent in our chain.
-
- Input to process:
-
- Please create an initial analysis or greeting that the next agent can build upon. Be creative and set a positive tone for the chain!
- model: gpt-4o
- temperature: 0.7
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: agent-2-enhancer
-
- agent-2-enhancer:
- type: agent
- name: Agent 2 Enhancer
- inputs:
- systemPrompt: You are the second agent in a chain. Take the output from Agent 1 and enhance it with additional insights or improvements.
- userPrompt: |-
- I'm the second agent! Here's what Agent 1 provided:
-
-
-
- Now I'll enhance this with additional details, insights, or improvements. Let me build upon their work!
- model: gpt-4o
- temperature: 0.7
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: agent-3-refiner
-
- agent-3-refiner:
- type: agent
- name: Agent 3 Refiner
- inputs:
- systemPrompt: You are the third agent in a chain. Take the enhanced output from Agent 2 and refine it further, adding structure or organization.
- userPrompt: |-
- I'm the third agent in our chain! Here's the enhanced work from Agent 2:
-
-
-
- My job is to refine and organize this content. I'll add structure, clarity, and polish to make it even better!
- model: gpt-4o
- temperature: 0.6
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: agent-4-finalizer
-
- agent-4-finalizer:
- type: agent
- name: Agent 4 Finalizer
- inputs:
- systemPrompt: You are the final agent in a chain of 4. Create a comprehensive summary and conclusion based on all the previous agents' work.
- userPrompt: |-
- I'm the final agent! Here's the refined work from Agent 3:
-
-
-
- As the last agent in our chain, I'll create a final, polished summary that brings together all the work from our team of 4 agents. Let me conclude this beautifully!
- model: gpt-4o
- temperature: 0.5
- apiKey: '{{OPENAI_API_KEY}}'
-```
-
-## Router-basierter bedingter Workflow
-
-Ein Workflow, der Routing-Logik verwendet, um Daten basierend auf Bedingungen an verschiedene Agenten zu senden:
-
-```yaml
-version: '1.0'
-blocks:
- start:
- type: starter
- name: Start
- inputs:
- startWorkflow: manual
- connections:
- success: router-1
-
- router-1:
- type: router
- name: Router 1
- inputs:
- prompt: go to agent 1 if is greater than 5. else agent 2 if greater than 10. else agent 3
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success:
- - agent-1
- - agent-2
- - agent-3
-
- agent-1:
- type: agent
- name: Agent 1
- inputs:
- systemPrompt: say 1
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
-
- agent-2:
- type: agent
- name: Agent 2
- inputs:
- systemPrompt: say 2
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
-
- agent-3:
- type: agent
- name: Agent 3
- inputs:
- systemPrompt: say 3
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
-```
-
-## Websuche mit strukturierter Ausgabe
-
-Ein Workflow, der das Web mit Tools durchsucht und strukturierte Daten zurückgibt:
-
-```yaml
-version: '1.0'
-blocks:
- 59eb07c1-1411-4b28-a274-fa78f55daf72:
- type: starter
- name: Start
- inputs:
- startWorkflow: manual
- connections:
- success: d77c2c98-56c4-432d-9338-9bac54a2d42f
- d77c2c98-56c4-432d-9338-9bac54a2d42f:
- type: agent
- name: Agent 1
- inputs:
- systemPrompt: look up the user input. use structured output
- userPrompt:
- model: claude-sonnet-4-0
- apiKey: '{{ANTHROPIC_API_KEY}}'
- tools:
- - type: exa
- title: Exa
- params:
- type: auto
- apiKey: '{{EXA_API_KEY}}'
- numResults: ''
- toolId: exa_search
- operation: exa_search
- isExpanded: true
- usageControl: auto
- responseFormat: |-
- {
- "name": "output_schema",
- "description": "Defines the structure for an output object.",
- "strict": true,
- "schema": {
- "type": "object",
- "properties": {
- "output": {
- "type": "string",
- "description": "The output value"
- }
- },
- "additionalProperties": false,
- "required": ["output"]
- }
- }
-```
-
-## Schleifenverarbeitung mit Sammlung
-
-Ein Workflow, der jedes Element in einer Sammlung mithilfe einer Schleife verarbeitet:
-
-```yaml
-version: '1.0'
-blocks:
- start:
- type: starter
- name: Start
- inputs:
- startWorkflow: manual
- connections:
- success: food-analysis-loop
- food-analysis-loop:
- type: loop
- name: Food Analysis Loop
- inputs:
- count: 5
- loopType: forEach
- collection: '["apple", "banana", "carrot"]'
- connections:
- loop:
- start: calorie-agent
- calorie-agent:
- type: agent
- name: Calorie Analyzer
- inputs:
- systemPrompt: Return the number of calories in the food
- userPrompt:
- model: claude-sonnet-4-0
- apiKey: '{{ANTHROPIC_API_KEY}}'
- parentId: food-analysis-loop
-```
-
-## E-Mail-Klassifizierung und -Antwort
-
-Ein Workflow, der E-Mails klassifiziert und passende Antworten generiert:
-
-```yaml
-version: '1.0'
-blocks:
- start:
- type: starter
- name: Start
- inputs:
- startWorkflow: manual
- connections:
- success: email-classifier
-
- email-classifier:
- type: agent
- name: Email Classifier
- inputs:
- systemPrompt: Classify emails into categories and extract key information.
- userPrompt: |
- Classify this email:
-
- Categories: support, billing, sales, feedback
- Extract: urgency level, customer sentiment, main request
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
- connections:
- success: response-generator
-
- response-generator:
- type: agent
- name: Response Generator
- inputs:
- systemPrompt: Generate appropriate responses based on email classification.
- userPrompt: |
- Email classification:
- Original email:
-
- Generate a professional, helpful response addressing the customer's needs.
- model: gpt-4o
- temperature: 0.7
- apiKey: '{{OPENAI_API_KEY}}'
-```
diff --git a/apps/docs/content/docs/de/yaml/index.mdx b/apps/docs/content/docs/de/yaml/index.mdx
deleted file mode 100644
index d27e6fc871..0000000000
--- a/apps/docs/content/docs/de/yaml/index.mdx
+++ /dev/null
@@ -1,159 +0,0 @@
----
-title: YAML Workflow Referenz
-description: Vollständiger Leitfaden zum Schreiben von YAML-Workflows in Sim
----
-
-import { Card, Cards } from "fumadocs-ui/components/card";
-import { Step, Steps } from "fumadocs-ui/components/steps";
-import { Tab, Tabs } from "fumadocs-ui/components/tabs";
-
-YAML-Workflows bieten eine leistungsstarke Möglichkeit, Workflow-Konfigurationen in Sim zu definieren, zu versionieren und zu teilen. Dieser Referenzleitfaden behandelt die vollständige YAML-Syntax, Block-Schemas und Best Practices für die Erstellung robuster Workflows.
-
-## Schnellstart
-
-Jeder Sim-Workflow folgt dieser grundlegenden Struktur:
-
-```yaml
-version: '1.0'
-blocks:
- start:
- type: starter
- name: Start
- inputs:
- startWorkflow: manual
- connections:
- success: agent-1
-
- agent-1:
- type: agent
- name: "AI Assistant"
- inputs:
- systemPrompt: "You are a helpful assistant."
- userPrompt: 'Hi'
- model: gpt-4o
- apiKey: '{{OPENAI_API_KEY}}'
-```
-
-## Kernkonzepte
-
-
-
- Versionsdeklaration : Muss genau `version: '1.0'` (mit Anführungszeichen) sein
-
-
- Blockstruktur : Alle Workflow-Blöcke werden unter dem Schlüssel `blocks` definiert
-
-
- Block-Referenzen : Verwenden Sie Blocknamen in Kleinbuchstaben ohne Leerzeichen (z.B. ``)
-
-
- Umgebungsvariablen : Referenzierung mit doppelten geschweiften Klammern `{{VARIABLE_NAME}}`
-
-
-
-## Blocktypen
-
-Sim unterstützt mehrere Kern-Blocktypen, jeder mit spezifischen YAML-Schemas:
-
-
-
- Workflow-Einstiegspunkt mit Unterstützung für manuelle, Webhook- und geplante Trigger
-
-
- KI-gestützte Verarbeitung mit Unterstützung für Tools und strukturierte Ausgabe
-
-
- Ausführung von benutzerdefiniertem JavaScript/TypeScript-Code
-
-
- HTTP-Anfragen an externe Dienste
-
-
- Bedingte Verzweigung basierend auf booleschen Ausdrücken
-
-
- KI-gestützte intelligente Weiterleitung zu mehreren Pfaden
-
-
- Iterative Verarbeitung mit for- und forEach-Schleifen
-
-
- Gleichzeitige Ausführung über mehrere Instanzen
-
-
- Webhook-Trigger für externe Integrationen
-
-
- Validierung von Ausgaben anhand definierter Kriterien und Metriken
-
-
- Ausführung anderer Workflows als wiederverwendbare Komponenten
-
-
- Formatierung der endgültigen Workflow-Ausgabe
-
-
-
-## Block-Referenz-Syntax
-
-Der wichtigste Aspekt von YAML-Workflows ist das Verständnis, wie man Daten zwischen Blöcken referenziert:
-
-### Grundregeln
-
-1. **Verwende den Blocknamen** (nicht die Block-ID), umgewandelt in Kleinbuchstaben ohne Leerzeichen
-2. **Füge die entsprechende Eigenschaft hinzu** (.content für Agenten, .output für Tools)
-3. **Bei Verwendung von Chat, referenziere den Starter-Block** als ``
-
-### Beispiele
-
-```yaml
-# Block definitions
-email-processor:
- type: agent
- name: "Email Agent"
- # ... configuration
-
-data-formatter:
- type: function
- name: "Data Agent"
- # ... configuration
-
-# Referencing their outputs
-next-block:
- type: agent
- name: "Next Step"
- inputs:
- userPrompt: |
- Process this email:
- Use this formatted data:
- Original input:
-```
-
-### Sonderfälle
-
-- **Schleifenvariablen**: ``, ``, ``
-- **Parallele Variablen**: ``, ``
-
-## Umgebungsvariablen
-
-Verwende Umgebungsvariablen für sensible Daten wie API-Schlüssel:
-
-```yaml
-inputs:
- apiKey: '{{OPENAI_API_KEY}}'
- database: '{{DATABASE_URL}}'
- token: '{{SLACK_BOT_TOKEN}}'
-```
-
-## Best Practices
-
-- **Halte Blocknamen benutzerfreundlich**: "Email Processor" für die UI-Anzeige
-- **Referenziere Umgebungsvariablen**: Niemals API-Schlüssel fest codieren
-- **Strukturiere für Lesbarkeit**: Gruppiere zusammengehörige Blöcke logisch
-- **Teste schrittweise**: Baue Workflows Schritt für Schritt auf
-
-## Nächste Schritte
-
-- [Block-Referenz-Syntax](/yaml/block-reference) - Detaillierte Referenzregeln
-- [Vollständige Block-Schemas](/yaml/blocks) - Alle verfügbaren Blocktypen
-- [Workflow-Beispiele](/yaml/examples) - Praxisnahe Workflow-Muster
\ No newline at end of file
diff --git a/apps/docs/content/docs/en/sdks/typescript.mdx b/apps/docs/content/docs/en/sdks/typescript.mdx
index 974e15442d..ad12f06751 100644
--- a/apps/docs/content/docs/en/sdks/typescript.mdx
+++ b/apps/docs/content/docs/en/sdks/typescript.mdx
@@ -1039,34 +1039,6 @@ function StreamingWorkflow() {
- Node.js 16+
- TypeScript 5.0+ (for TypeScript projects)
-## TypeScript Support
-
-The SDK is written in TypeScript and provides full type safety:
-
-```typescript
-import {
- SimStudioClient,
- WorkflowExecutionResult,
- WorkflowStatus,
- SimStudioError
-} from 'simstudio-ts-sdk';
-
-// Type-safe client initialization
-const client: SimStudioClient = new SimStudioClient({
- apiKey: process.env.SIM_API_KEY!
-});
-
-// Type-safe workflow execution
-const result: WorkflowExecutionResult = await client.executeWorkflow('workflow-id', {
- input: {
- message: 'Hello, TypeScript!'
- }
-});
-
-// Type-safe status checking
-const status: WorkflowStatus = await client.getWorkflowStatus('workflow-id');
-```
-
## License
Apache-2.0
diff --git a/apps/docs/content/docs/en/tools/knowledge.mdx b/apps/docs/content/docs/en/tools/knowledge.mdx
index 40e96aef13..bcc1dccf58 100644
--- a/apps/docs/content/docs/en/tools/knowledge.mdx
+++ b/apps/docs/content/docs/en/tools/knowledge.mdx
@@ -66,7 +66,7 @@ Search for similar content in a knowledge base using vector similarity
| `knowledgeBaseId` | string | Yes | ID of the knowledge base to search in |
| `query` | string | No | Search query text \(optional when using tag filters\) |
| `topK` | number | No | Number of most similar results to return \(1-100\) |
-| `tagFilters` | any | No | Array of tag filters with tagName and tagValue properties |
+| `tagFilters` | array | No | Array of tag filters with tagName and tagValue properties |
#### Output
diff --git a/apps/docs/content/docs/en/tools/supabase.mdx b/apps/docs/content/docs/en/tools/supabase.mdx
index 7f0cbe4dbd..9289526743 100644
--- a/apps/docs/content/docs/en/tools/supabase.mdx
+++ b/apps/docs/content/docs/en/tools/supabase.mdx
@@ -114,7 +114,7 @@ Insert data into a Supabase table
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Your Supabase project ID \(e.g., jdrkgepadsdopsntdlom\) |
| `table` | string | Yes | The name of the Supabase table to insert data into |
-| `data` | any | Yes | The data to insert |
+| `data` | array | Yes | The data to insert \(array of objects or a single object\) |
| `apiKey` | string | Yes | Your Supabase service role secret key |
#### Output
@@ -195,7 +195,7 @@ Insert or update data in a Supabase table (upsert operation)
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Yes | Your Supabase project ID \(e.g., jdrkgepadsdopsntdlom\) |
| `table` | string | Yes | The name of the Supabase table to upsert data into |
-| `data` | any | Yes | The data to upsert \(insert or update\) |
+| `data` | array | Yes | The data to upsert \(insert or update\) - array of objects or a single object |
| `apiKey` | string | Yes | Your Supabase service role secret key |
#### Output
diff --git a/apps/docs/content/docs/en/tools/telegram.mdx b/apps/docs/content/docs/en/tools/telegram.mdx
index 34a364230e..97628a0b45 100644
--- a/apps/docs/content/docs/en/tools/telegram.mdx
+++ b/apps/docs/content/docs/en/tools/telegram.mdx
@@ -1,6 +1,6 @@
---
title: Telegram
-description: Send messages through Telegram or trigger workflows from Telegram events
+description: Interact with Telegram
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -67,7 +67,7 @@ In Sim, the Telegram integration enables your agents to leverage these powerful
## Usage Instructions
-Integrate Telegram into the workflow. Can send messages. Can be used in trigger mode to trigger a workflow when a message is sent to a chat.
+Integrate Telegram into the workflow. Can send and delete messages. Can be used in trigger mode to trigger a workflow when a message is sent to a chat.
@@ -89,12 +89,107 @@ Send messages to Telegram channels or users through the Telegram Bot API. Enable
| Parameter | Type | Description |
| --------- | ---- | ----------- |
-| `success` | boolean | Telegram message send success status |
-| `messageId` | number | Unique Telegram message identifier |
-| `chatId` | string | Target chat ID where message was sent |
-| `text` | string | Text content of the sent message |
-| `timestamp` | number | Unix timestamp when message was sent |
-| `from` | object | Information about the bot that sent the message |
+| `message` | string | Success or error message |
+| `data` | object | Telegram message data |
+
+### `telegram_delete_message`
+
+Delete messages in Telegram channels or chats through the Telegram Bot API. Requires the message ID of the message to delete.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Yes | Your Telegram Bot API Token |
+| `chatId` | string | Yes | Target Telegram chat ID |
+| `messageId` | string | Yes | Message ID to delete |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `message` | string | Success or error message |
+| `data` | object | Delete operation result |
+
+### `telegram_send_photo`
+
+Send photos to Telegram channels or users through the Telegram Bot API.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Yes | Your Telegram Bot API Token |
+| `chatId` | string | Yes | Target Telegram chat ID |
+| `photo` | string | Yes | Photo to send. Pass a file_id or HTTP URL |
+| `caption` | string | No | Photo caption \(optional\) |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `message` | string | Success or error message |
+| `data` | object | Telegram message data including optional photo\(s\) |
+
+### `telegram_send_video`
+
+Send videos to Telegram channels or users through the Telegram Bot API.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Yes | Your Telegram Bot API Token |
+| `chatId` | string | Yes | Target Telegram chat ID |
+| `video` | string | Yes | Video to send. Pass a file_id or HTTP URL |
+| `caption` | string | No | Video caption \(optional\) |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `message` | string | Success or error message |
+| `data` | object | Telegram message data including optional media |
+
+### `telegram_send_audio`
+
+Send audio files to Telegram channels or users through the Telegram Bot API.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Yes | Your Telegram Bot API Token |
+| `chatId` | string | Yes | Target Telegram chat ID |
+| `audio` | string | Yes | Audio file to send. Pass a file_id or HTTP URL |
+| `caption` | string | No | Audio caption \(optional\) |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `message` | string | Success or error message |
+| `data` | object | Telegram message data including voice/audio information |
+
+### `telegram_send_animation`
+
+Send animations (GIFs) to Telegram channels or users through the Telegram Bot API.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `botToken` | string | Yes | Your Telegram Bot API Token |
+| `chatId` | string | Yes | Target Telegram chat ID |
+| `animation` | string | Yes | Animation to send. Pass a file_id or HTTP URL |
+| `caption` | string | No | Animation caption \(optional\) |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `message` | string | Success or error message |
+| `data` | object | Telegram message data including optional media |
diff --git a/apps/docs/content/docs/en/tools/youtube.mdx b/apps/docs/content/docs/en/tools/youtube.mdx
index fbeeb0cc54..d2fb678187 100644
--- a/apps/docs/content/docs/en/tools/youtube.mdx
+++ b/apps/docs/content/docs/en/tools/youtube.mdx
@@ -1,6 +1,6 @@
---
title: YouTube
-description: Search for videos on YouTube
+description: Interact with YouTube videos, channels, and playlists
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -40,7 +40,7 @@ In Sim, the YouTube integration enables your agents to programmatically search a
## Usage Instructions
-Integrate YouTube into the workflow. Can search for videos.
+Integrate YouTube into the workflow. Can search for videos, get video details, get channel information, get playlist items, and get video comments.
@@ -64,6 +64,99 @@ Search for videos on YouTube using the YouTube Data API.
| --------- | ---- | ----------- |
| `items` | array | Array of YouTube videos matching the search query |
+### `youtube_video_details`
+
+Get detailed information about a specific YouTube video.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `videoId` | string | Yes | YouTube video ID |
+| `apiKey` | string | Yes | YouTube API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `videoId` | string | YouTube video ID |
+| `title` | string | Video title |
+| `description` | string | Video description |
+| `channelId` | string | Channel ID |
+| `channelTitle` | string | Channel name |
+| `publishedAt` | string | Published date and time |
+| `duration` | string | Video duration in ISO 8601 format |
+| `viewCount` | number | Number of views |
+| `likeCount` | number | Number of likes |
+| `commentCount` | number | Number of comments |
+| `thumbnail` | string | Video thumbnail URL |
+| `tags` | array | Video tags |
+
+### `youtube_channel_info`
+
+Get detailed information about a YouTube channel.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `channelId` | string | No | YouTube channel ID \(use either channelId or username\) |
+| `username` | string | No | YouTube channel username \(use either channelId or username\) |
+| `apiKey` | string | Yes | YouTube API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `channelId` | string | YouTube channel ID |
+| `title` | string | Channel name |
+| `description` | string | Channel description |
+| `subscriberCount` | number | Number of subscribers |
+| `videoCount` | number | Number of videos |
+| `viewCount` | number | Total channel views |
+| `publishedAt` | string | Channel creation date |
+| `thumbnail` | string | Channel thumbnail URL |
+| `customUrl` | string | Channel custom URL |
+
+### `youtube_playlist_items`
+
+Get videos from a YouTube playlist.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `playlistId` | string | Yes | YouTube playlist ID |
+| `maxResults` | number | No | Maximum number of videos to return |
+| `pageToken` | string | No | Page token for pagination |
+| `apiKey` | string | Yes | YouTube API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `items` | array | Array of videos in the playlist |
+
+### `youtube_comments`
+
+Get comments from a YouTube video.
+
+#### Input
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `videoId` | string | Yes | YouTube video ID |
+| `maxResults` | number | No | Maximum number of comments to return |
+| `order` | string | No | Order of comments: time or relevance |
+| `pageToken` | string | No | Page token for pagination |
+| `apiKey` | string | Yes | YouTube API Key |
+
+#### Output
+
+| Parameter | Type | Description |
+| --------- | ---- | ----------- |
+| `items` | array | Array of comments from the video |
+
## Notes
diff --git a/apps/docs/content/docs/es/blocks/guardrails.mdx b/apps/docs/content/docs/es/blocks/guardrails.mdx
new file mode 100644
index 0000000000..f2d6a95f8f
--- /dev/null
+++ b/apps/docs/content/docs/es/blocks/guardrails.mdx
@@ -0,0 +1,251 @@
+---
+title: Guardrails
+---
+
+import { Callout } from 'fumadocs-ui/components/callout'
+import { Step, Steps } from 'fumadocs-ui/components/steps'
+import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
+import { Image } from '@/components/ui/image'
+import { Video } from '@/components/ui/video'
+
+The Guardrails block validates and protects your AI workflows by checking content against multiple validation types. Ensure data quality, prevent hallucinations, detect PII, and enforce format requirements before content moves through your workflow.
+
+
+
+
+
+## Overview
+
+The Guardrails block enables you to:
+
+
+
+ Validate JSON Structure : Ensure LLM outputs are valid JSON before parsing
+
+
+ Match Regex Patterns : Verify content matches specific formats (emails, phone numbers, URLs, etc.)
+
+
+ Detect Hallucinations : Use RAG + LLM scoring to validate AI outputs against knowledge base content
+
+
+ Detect PII : Identify and optionally mask personally identifiable information across 40+ entity types
+
+
+
+## Validation Types
+
+### JSON Validation
+
+Validates that content is properly formatted JSON. Perfect for ensuring structured LLM outputs can be safely parsed.
+
+**Use Cases:**
+- Validate JSON responses from Agent blocks before parsing
+- Ensure API payloads are properly formatted
+- Check structured data integrity
+
+**Output:**
+- `passed`: `true` if valid JSON, `false` otherwise
+- `error`: Error message if validation fails (e.g., "Invalid JSON: Unexpected token...")
+
+### Regex Validation
+
+Checks if content matches a specified regular expression pattern.
+
+**Use Cases:**
+- Validate email addresses
+- Check phone number formats
+- Verify URLs or custom identifiers
+- Enforce specific text patterns
+
+**Configuration:**
+- **Regex Pattern**: The regular expression to match against (e.g., `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` for emails)
+
+**Output:**
+- `passed`: `true` if content matches pattern, `false` otherwise
+- `error`: Error message if validation fails
+
+### Hallucination Detection
+
+Uses Retrieval-Augmented Generation (RAG) with LLM scoring to detect when AI-generated content contradicts or isn't grounded in your knowledge base.
+
+**How It Works:**
+1. Queries your knowledge base for relevant context
+2. Sends both the AI output and retrieved context to an LLM
+3. LLM assigns a confidence score (0-10 scale)
+ - **0** = Full hallucination (completely ungrounded)
+ - **10** = Fully grounded (completely supported by knowledge base)
+4. Validation passes if score ≥ threshold (default: 3)
+
+**Configuration:**
+- **Knowledge Base**: Select from your existing knowledge bases
+- **Model**: Choose LLM for scoring (requires strong reasoning - GPT-4o, Claude 3.7 Sonnet recommended)
+- **API Key**: Authentication for selected LLM provider (auto-hidden for hosted/Ollama models)
+- **Confidence Threshold**: Minimum score to pass (0-10, default: 3)
+- **Top K** (Advanced): Number of knowledge base chunks to retrieve (default: 10)
+
+**Output:**
+- `passed`: `true` if confidence score ≥ threshold
+- `score`: Confidence score (0-10)
+- `reasoning`: LLM's explanation for the score
+- `error`: Error message if validation fails
+
+**Use Cases:**
+- Validate Agent responses against documentation
+- Ensure customer support answers are factually accurate
+- Verify generated content matches source material
+- Quality control for RAG applications
+
+### PII Detection
+
+Detects personally identifiable information using Microsoft Presidio. Supports 40+ entity types across multiple countries and languages.
+
+
+
+
+
+**How It Works:**
+1. Scans content for PII entities using pattern matching and NLP
+2. Returns detected entities with locations and confidence scores
+3. Optionally masks detected PII in the output
+
+**Configuration:**
+- **PII Types to Detect**: Select from grouped categories via modal selector
+ - **Common**: Person name, Email, Phone, Credit card, IP address, etc.
+ - **USA**: SSN, Driver's license, Passport, etc.
+ - **UK**: NHS number, National insurance number
+ - **Spain**: NIF, NIE, CIF
+ - **Italy**: Fiscal code, Driver's license, VAT code
+ - **Poland**: PESEL, NIP, REGON
+ - **Singapore**: NRIC/FIN, UEN
+ - **Australia**: ABN, ACN, TFN, Medicare
+ - **India**: Aadhaar, PAN, Passport, Voter number
+- **Mode**:
+ - **Detect**: Only identify PII (default)
+ - **Mask**: Replace detected PII with masked values
+- **Language**: Detection language (default: English)
+
+**Output:**
+- `passed`: `false` if any selected PII types are detected
+- `detectedEntities`: Array of detected PII with type, location, and confidence
+- `maskedText`: Content with PII masked (only if mode = "Mask")
+- `error`: Error message if validation fails
+
+**Use Cases:**
+- Block content containing sensitive personal information
+- Mask PII before logging or storing data
+- Compliance with GDPR, HIPAA, and other privacy regulations
+- Sanitize user inputs before processing
+
+## Configuration
+
+### Content to Validate
+
+The input content to validate. This typically comes from:
+- Agent block outputs: ``
+- Function block results: ``
+- API responses: ``
+- Any other block output
+
+### Validation Type
+
+Choose from four validation types:
+- **Valid JSON**: Check if content is properly formatted JSON
+- **Regex Match**: Verify content matches a regex pattern
+- **Hallucination Check**: Validate against knowledge base with LLM scoring
+- **PII Detection**: Detect and optionally mask personally identifiable information
+
+## Outputs
+
+All validation types return:
+
+- **``**: Boolean indicating if validation passed
+- **``**: The type of validation performed
+- **``**: The original input that was validated
+- **``**: Error message if validation failed (optional)
+
+Additional outputs by type:
+
+**Hallucination Check:**
+- **``**: Confidence score (0-10)
+- **``**: LLM's explanation
+
+**PII Detection:**
+- **``**: Array of detected PII entities
+- **``**: Content with PII masked (if mode = "Mask")
+
+## Example Use Cases
+
+### Validate JSON Before Parsing
+
+
+
Scenario: Ensure Agent output is valid JSON
+
+ Agent generates structured JSON response
+ Guardrails validates JSON format
+ Condition block checks ``
+ If passed → Parse and use data, If failed → Retry or handle error
+
+
+
+### Prevent Hallucinations
+
+
+
Scenario: Validate customer support responses
+
+ Agent generates response to customer question
+ Guardrails checks against support documentation knowledge base
+ If confidence score ≥ 3 → Send response
+ If confidence score \< 3 → Flag for human review
+
+
+
+### Block PII in User Inputs
+
+
+
Scenario: Sanitize user-submitted content
+
+ User submits form with text content
+ Guardrails detects PII (emails, phone numbers, SSN, etc.)
+ If PII detected → Reject submission or mask sensitive data
+ If no PII → Process normally
+
+
+
+
+
+
+
+### Validate Email Format
+
+
+
Scenario: Check email address format
+
+ Agent extracts email from text
+ Guardrails validates with regex pattern
+ If valid → Use email for notification
+ If invalid → Request correction
+
+
+
+## Best Practices
+
+- **Chain with Condition blocks**: Use `` to branch workflow logic based on validation results
+- **Use JSON validation before parsing**: Always validate JSON structure before attempting to parse LLM outputs
+- **Choose appropriate PII types**: Only select the PII entity types relevant to your use case for better performance
+- **Set reasonable confidence thresholds**: For hallucination detection, adjust threshold based on your accuracy requirements (higher = stricter)
+- **Use strong models for hallucination detection**: GPT-4o or Claude 3.7 Sonnet provide more accurate confidence scoring
+- **Mask PII for logging**: Use "Mask" mode when you need to log or store content that may contain PII
+- **Test regex patterns**: Validate your regex patterns thoroughly before deploying to production
+- **Monitor validation failures**: Track `` messages to identify common validation issues
+
+
+ Guardrails validation happens synchronously in your workflow. For hallucination detection, choose faster models (like GPT-4o-mini) if latency is critical.
+
+
diff --git a/apps/docs/content/docs/es/execution/costs.mdx b/apps/docs/content/docs/es/execution/costs.mdx
index 78daf6600b..1facabc1a1 100644
--- a/apps/docs/content/docs/es/execution/costs.mdx
+++ b/apps/docs/content/docs/es/execution/costs.mdx
@@ -180,6 +180,41 @@ Los diferentes planes de suscripción tienen diferentes límites de uso:
## Próximos pasos
+- Revisa tu uso actual en [Configuración → Suscripción](https://sim.ai/settings/subscription)
+- Aprende sobre [Registro](/execution/logging) para seguir los detalles de ejecución
+- Explora la [API externa](/execution/api) para monitoreo programático de costos
+- Consulta las [técnicas de optimización de flujo de trabajo](/blocks) para reducir costos
+
+**Plan de equipo (40$/asiento/mes):**
+- Uso compartido entre todos los miembros del equipo
+- Exceso calculado del uso total del equipo
+- El propietario de la organización recibe una sola factura
+
+**Planes empresariales:**
+- Precio mensual fijo, sin excesos
+- Límites de uso personalizados según acuerdo
+
+### Facturación por umbral
+
+Cuando el exceso no facturado alcanza los 50$, Sim factura automáticamente el monto total no facturado.
+
+**Ejemplo:**
+- Día 10: 70$ de exceso → Facturar 70$ inmediatamente
+- Día 15: 35$ adicionales de uso (105$ en total) → Ya facturado, sin acción
+- Día 20: Otros 50$ de uso (155$ en total, 85$ sin facturar) → Facturar 85$ inmediatamente
+
+Esto distribuye los cargos grandes por exceso a lo largo del mes en lugar de una factura grande al final del período.
+
+## Mejores prácticas de gestión de costos
+
+1. **Monitorear regularmente**: Revisa tu panel de uso con frecuencia para evitar sorpresas
+2. **Establecer presupuestos**: Usa los límites del plan como guía para tus gastos
+3. **Optimizar flujos de trabajo**: Revisa las ejecuciones de alto costo y optimiza los prompts o la selección de modelos
+4. **Usar modelos apropiados**: Ajusta la complejidad del modelo a los requisitos de la tarea
+5. **Agrupar tareas similares**: Combina múltiples solicitudes cuando sea posible para reducir la sobrecarga
+
+## Próximos pasos
+
- Revisa tu uso actual en [Configuración → Suscripción](https://sim.ai/settings/subscription)
- Aprende sobre [Registro](/execution/logging) para seguir los detalles de ejecución
- Explora la [API externa](/execution/api) para monitoreo programático de costos
diff --git a/apps/docs/content/docs/es/sdks/typescript.mdx b/apps/docs/content/docs/es/sdks/typescript.mdx
index fca8a9805f..ae1d7ea53b 100644
--- a/apps/docs/content/docs/es/sdks/typescript.mdx
+++ b/apps/docs/content/docs/es/sdks/typescript.mdx
@@ -814,12 +814,28 @@ async function checkUsage() {
console.log(' Resets at:', limits.rateLimit.async.resetAt);
console.log(' Is limited:', limits.rateLimit.async.isLimited);
- console.log('\n=== Usage ===');
- console.log('Current period cost:
+ console.log('\n=== Uso ===');
+ console.log('Costo del período actual: $' + limits.usage.currentPeriodCost.toFixed(2));
+ console.log('Límite: $' + limits.usage.limit.toFixed(2));
+ console.log('Plan:', limits.usage.plan);
-### Streaming Workflow Execution
+ const percentUsed = (limits.usage.currentPeriodCost / limits.usage.limit) * 100;
+ console.log('Uso: ' + percentUsed.toFixed(1) + '%');
-Execute workflows with real-time streaming responses:
+ if (percentUsed > 80) {
+ console.warn('⚠️ Advertencia: ¡Estás acercándote a tu límite de uso!');
+ }
+ } catch (error) {
+ console.error('Error al verificar el uso:', error);
+ }
+}
+
+checkUsage();
+```
+
+### Ejecución de flujo de trabajo con streaming
+
+Ejecuta flujos de trabajo con respuestas en streaming en tiempo real:
```typescript
import { SimStudioClient } from 'simstudio-ts-sdk';
@@ -842,11 +858,13 @@ async function executeWithStreaming() {
console.error('Error:', error);
}
}
+
```
The streaming response follows the Server-Sent Events (SSE) format:
```
+
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":"One"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", dos"}
@@ -854,11 +872,14 @@ data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", dos"}
data: {"event":"done","success":true,"output":{},"metadata":{"duration":610}}
data: [DONE]
+
```
**React Streaming Example:**
-```typescript
+```
+
+typescript
import { useState, useEffect } from 'react';
function StreamingWorkflow() {
@@ -926,6 +947,7 @@ function StreamingWorkflow() {
);
}
+
```
## Getting Your API Key
@@ -957,35 +979,6 @@ function StreamingWorkflow() {
- Node.js 16+
- TypeScript 5.0+ (for TypeScript projects)
-## TypeScript Support
-
-The SDK is written in TypeScript and provides full type safety:
-
-```typescript
-import {
- SimStudioClient,
- WorkflowExecutionResult,
- WorkflowStatus,
- SimStudioError
-} from 'simstudio-ts-sdk';
-
-// Type-safe client initialization
-const client: SimStudioClient = new SimStudioClient({
- apiKey: process.env.SIM_API_KEY!
-});
-
-// Type-safe workflow execution
-const result: WorkflowExecutionResult = await client.executeWorkflow('workflow-id', {
- input: {
- message: '¡Hola, TypeScript!'
- }
-});
-
-// Type-safe status checking
-const status: WorkflowStatus = await client.getWorkflowStatus('workflow-id');
-```
-
## License
-
-Apache-2.0
+Apache-2.0
\ No newline at end of file
diff --git a/apps/docs/content/docs/es/tools/knowledge.mdx b/apps/docs/content/docs/es/tools/knowledge.mdx
index 5310b37a8e..fdc82d47b1 100644
--- a/apps/docs/content/docs/es/tools/knowledge.mdx
+++ b/apps/docs/content/docs/es/tools/knowledge.mdx
@@ -59,11 +59,11 @@ Busca contenido similar en una base de conocimiento utilizando similitud vectori
#### Entrada
| Parámetro | Tipo | Obligatorio | Descripción |
-| --------- | ---- | ----------- | ----------- |
+| --------- | ---- | -------- | ----------- |
| `knowledgeBaseId` | string | Sí | ID de la base de conocimiento en la que buscar |
-| `query` | string | No | Texto de consulta de búsqueda \(opcional cuando se usan filtros de etiquetas\) |
+| `query` | string | No | Texto de consulta de búsqueda \(opcional cuando se utilizan filtros de etiquetas\) |
| `topK` | number | No | Número de resultados más similares a devolver \(1-100\) |
-| `tagFilters` | any | No | Array de filtros de etiquetas con propiedades tagName y tagValue |
+| `tagFilters` | array | No | Array de filtros de etiquetas con propiedades tagName y tagValue |
#### Salida
diff --git a/apps/docs/content/docs/es/tools/supabase.mdx b/apps/docs/content/docs/es/tools/supabase.mdx
index a7a1cddb66..61406eb7db 100644
--- a/apps/docs/content/docs/es/tools/supabase.mdx
+++ b/apps/docs/content/docs/es/tools/supabase.mdx
@@ -109,9 +109,9 @@ Insertar datos en una tabla de Supabase
| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
-| `projectId` | string | Sí | ID de tu proyecto de Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
-| `table` | string | Sí | Nombre de la tabla de Supabase donde insertar los datos |
-| `data` | any | Sí | Los datos a insertar |
+| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
+| `table` | string | Sí | Nombre de la tabla Supabase donde insertar datos |
+| `data` | array | Sí | Los datos a insertar \(array de objetos o un solo objeto\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |
#### Salida
@@ -189,10 +189,10 @@ Insertar o actualizar datos en una tabla de Supabase (operación upsert)
#### Entrada
| Parámetro | Tipo | Obligatorio | Descripción |
-| --------- | ---- | ----------- | ----------- |
-| `projectId` | string | Sí | El ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
-| `table` | string | Sí | El nombre de la tabla de Supabase donde insertar o actualizar datos |
-| `data` | any | Sí | Los datos a insertar o actualizar \(upsert\) |
+| --------- | ---- | -------- | ----------- |
+| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
+| `table` | string | Sí | Nombre de la tabla Supabase donde hacer upsert de datos |
+| `data` | array | Sí | Los datos para upsert \(insertar o actualizar\) - array de objetos o un solo objeto |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |
#### Salida
diff --git a/apps/docs/content/docs/es/tools/telegram.mdx b/apps/docs/content/docs/es/tools/telegram.mdx
index 1f8a42d621..4d65a8308c 100644
--- a/apps/docs/content/docs/es/tools/telegram.mdx
+++ b/apps/docs/content/docs/es/tools/telegram.mdx
@@ -87,12 +87,108 @@ Envía mensajes a canales o usuarios de Telegram a través de la API de Bot de T
| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
-| `success` | boolean | Estado de éxito del envío del mensaje de Telegram |
-| `messageId` | number | Identificador único del mensaje de Telegram |
-| `chatId` | string | ID del chat de destino donde se envió el mensaje |
-| `text` | string | Contenido de texto del mensaje enviado |
-| `timestamp` | number | Marca de tiempo Unix cuando se envió el mensaje |
-| `from` | object | Información sobre el bot que envió el mensaje |
+| `message` | string | Mensaje de éxito o error |
+| `data` | object | Datos del mensaje de Telegram |
+
+## Notas
+
+- Categoría: `tools`
+- Tipo: `telegram`
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `botToken` | string | Sí | Tu token de API de Bot de Telegram |
+| `chatId` | string | Sí | ID del chat de Telegram objetivo |
+| `messageId` | string | Sí | ID del mensaje a eliminar |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `message` | string | Mensaje de éxito o error |
+| `data` | object | Resultado de la operación de eliminación |
+
+### `telegram_send_photo`
+
+Envía fotos a canales o usuarios de Telegram a través de la API de Bot de Telegram.
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `botToken` | string | Sí | Tu token de API de Bot de Telegram |
+| `chatId` | string | Sí | ID del chat de Telegram objetivo |
+| `photo` | string | Sí | Foto a enviar. Proporciona un file_id o URL HTTP |
+| `caption` | string | No | Pie de foto (opcional) |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `message` | string | Mensaje de éxito o error |
+| `data` | object | Datos del mensaje de Telegram incluyendo foto(s) opcional(es) |
+
+### `telegram_send_video`
+
+Envía videos a canales o usuarios de Telegram a través de la API de Bot de Telegram.
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `botToken` | string | Sí | Tu token de API de Bot de Telegram |
+| `chatId` | string | Sí | ID del chat de Telegram objetivo |
+| `video` | string | Sí | Video a enviar. Proporciona un file_id o URL HTTP |
+| `caption` | string | No | Pie de video (opcional) |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `message` | string | Mensaje de éxito o error |
+| `data` | object | Datos del mensaje de Telegram incluyendo medios opcionales |
+
+### `telegram_send_audio`
+
+Envía archivos de audio a canales o usuarios de Telegram a través de la API de Bot de Telegram.
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `botToken` | string | Sí | Tu token de API de Bot de Telegram |
+| `chatId` | string | Sí | ID del chat de Telegram objetivo |
+| `audio` | string | Sí | Archivo de audio para enviar. Proporciona un file_id o URL HTTP |
+| `caption` | string | No | Leyenda del audio \(opcional\) |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `message` | string | Mensaje de éxito o error |
+| `data` | object | Datos del mensaje de Telegram incluyendo información de voz/audio |
+
+### `telegram_send_animation`
+
+Envía animaciones (GIFs) a canales o usuarios de Telegram a través de la API de Bot de Telegram.
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `botToken` | string | Sí | Tu token de API de Bot de Telegram |
+| `chatId` | string | Sí | ID del chat de Telegram objetivo |
+| `animation` | string | Sí | Animación para enviar. Proporciona un file_id o URL HTTP |
+| `caption` | string | No | Leyenda de la animación \(opcional\) |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `message` | string | Mensaje de éxito o error |
+| `data` | object | Datos del mensaje de Telegram incluyendo medios opcionales |
## Notas
diff --git a/apps/docs/content/docs/es/tools/youtube.mdx b/apps/docs/content/docs/es/tools/youtube.mdx
index 18d8808881..185de80891 100644
--- a/apps/docs/content/docs/es/tools/youtube.mdx
+++ b/apps/docs/content/docs/es/tools/youtube.mdx
@@ -1,6 +1,6 @@
---
title: YouTube
-description: Buscar videos en YouTube
+description: Interactúa con videos, canales y listas de reproducción de YouTube
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -39,7 +39,7 @@ En Sim, la integración con YouTube permite a tus agentes buscar y analizar prog
## Instrucciones de uso
-Integra YouTube en el flujo de trabajo. Puede buscar videos. Requiere clave API.
+Integra YouTube en el flujo de trabajo. Puede buscar videos, obtener detalles de videos, obtener información de canales, obtener elementos de listas de reproducción y obtener comentarios de videos.
## Herramientas
@@ -61,6 +61,99 @@ Busca videos en YouTube utilizando la API de datos de YouTube.
| --------- | ---- | ----------- |
| `items` | array | Array de videos de YouTube que coinciden con la consulta de búsqueda |
+### `youtube_video_details`
+
+Obtén información detallada sobre un video específico de YouTube.
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `videoId` | string | Sí | ID del video de YouTube |
+| `apiKey` | string | Sí | Clave API de YouTube |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `videoId` | string | ID del video de YouTube |
+| `title` | string | Título del video |
+| `description` | string | Descripción del video |
+| `channelId` | string | ID del canal |
+| `channelTitle` | string | Nombre del canal |
+| `publishedAt` | string | Fecha y hora de publicación |
+| `duration` | string | Duración del video en formato ISO 8601 |
+| `viewCount` | number | Número de visualizaciones |
+| `likeCount` | number | Número de me gusta |
+| `commentCount` | number | Número de comentarios |
+| `thumbnail` | string | URL de la miniatura del video |
+| `tags` | array | Etiquetas del video |
+
+### `youtube_channel_info`
+
+Obtén información detallada sobre un canal de YouTube.
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `channelId` | string | No | ID del canal de YouTube \(usa channelId o username\) |
+| `username` | string | No | Nombre de usuario del canal de YouTube \(usa channelId o username\) |
+| `apiKey` | string | Sí | Clave API de YouTube |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `channelId` | string | ID del canal de YouTube |
+| `title` | string | Nombre del canal |
+| `description` | string | Descripción del canal |
+| `subscriberCount` | number | Número de suscriptores |
+| `videoCount` | number | Número de videos |
+| `viewCount` | number | Vistas totales del canal |
+| `publishedAt` | string | Fecha de creación del canal |
+| `thumbnail` | string | URL de la miniatura del canal |
+| `customUrl` | string | URL personalizada del canal |
+
+### `youtube_playlist_items`
+
+Obtener videos de una lista de reproducción de YouTube.
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `playlistId` | string | Sí | ID de la lista de reproducción de YouTube |
+| `maxResults` | number | No | Número máximo de videos a devolver |
+| `pageToken` | string | No | Token de página para paginación |
+| `apiKey` | string | Sí | Clave API de YouTube |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `items` | array | Array de videos en la lista de reproducción |
+
+### `youtube_comments`
+
+Obtener comentarios de un video de YouTube.
+
+#### Entrada
+
+| Parámetro | Tipo | Obligatorio | Descripción |
+| --------- | ---- | ----------- | ----------- |
+| `videoId` | string | Sí | ID del video de YouTube |
+| `maxResults` | number | No | Número máximo de comentarios a devolver |
+| `order` | string | No | Orden de los comentarios: time (tiempo) o relevance (relevancia) |
+| `pageToken` | string | No | Token de página para paginación |
+| `apiKey` | string | Sí | Clave API de YouTube |
+
+#### Salida
+
+| Parámetro | Tipo | Descripción |
+| --------- | ---- | ----------- |
+| `items` | array | Array de comentarios del video |
+
## Notas
- Categoría: `tools`
diff --git a/apps/docs/content/docs/es/triggers/api.mdx b/apps/docs/content/docs/es/triggers/api.mdx
index 09ecda8971..8644964045 100644
--- a/apps/docs/content/docs/es/triggers/api.mdx
+++ b/apps/docs/content/docs/es/triggers/api.mdx
@@ -128,3 +128,60 @@ Si no se define un formato de entrada, el ejecutor expone el JSON sin procesar s
Un flujo de trabajo puede contener solo un disparador de API. Publica una nueva implementación después de los cambios para que el endpoint se mantenga actualizado.
+
+### Formato de carga de archivos
+
+La API acepta archivos en dos formatos:
+
+**1. Archivos codificados en Base64** (recomendado para SDKs):
+
+```json
+{
+ "documents": [{
+ "type": "file",
+ "data": "data:application/pdf;base64,JVBERi0xLjQK...",
+ "name": "document.pdf",
+ "mime": "application/pdf"
+ }]
+}
+```
+
+- Tamaño máximo de archivo: 20MB por archivo
+- Los archivos se suben al almacenamiento en la nube y se convierten en objetos UserFile con todas las propiedades
+
+**2. Referencias directas de URL**:
+
+```json
+{
+ "documents": [{
+ "type": "url",
+ "data": "https://example.com/document.pdf",
+ "name": "document.pdf",
+ "mime": "application/pdf"
+ }]
+}
+```
+
+- El archivo no se sube, la URL se pasa directamente
+- Útil para referenciar archivos existentes
+
+### Propiedades de archivos
+
+Para archivos, accede a todas las propiedades:
+
+| Propiedad | Descripción | Tipo |
+|----------|-------------|------|
+| `` | URL de descarga firmada | string |
+| `` | Nombre original del archivo | string |
+| `