feat(tools): added hunter.io tools/block, added default values of first option in dropdowns to avoid operation selector issue, added descriptions & param validation & updated docs (#825)

* feat(tools): added hunter.io tools/block, added default values of first option in dropdowns to avoid operation selector issue

* fix

* added description for all outputs, fixed param validation for tools

* cleanup

* add dual validation, once during serialization and once during execution

* improvement(docs): add base exec charge info to docs (#826)

* improvement(doc-tags-subblock): use table for doc tags subblock in create_document tool for KB (#827)

* improvement(doc-tags-subblock): use table for doc tags create doc tool in KB block

* enforce max tags

* remove red warning text

* fix(bugs): fixed rb2b csp, fixed overly-verbose logs, fixed x URLs (#828)

Co-authored-by: waleedlatif <waleedlatif@waleedlatifs-MacBook-Pro.local>

* fixed serialization errors to appear like execution errors, also fixed contrast on cmdk modal

* fixed required for tools, added tag dropdown for kb tags

* fix remaining tools with required fields

* update utils

* update docs

* fix kb tags

* fix types for exa

* lint

* updated contributing guide + pr template

* Test pre-commit hook with linting

* Test pre-commit hook again

* remove test files

* fixed wealthbox tool

* update telemetry endpoints

---------

Co-authored-by: waleedlatif <waleedlatif@waleedlatifs-MacBook-Pro.local>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
This commit is contained in:
Waleed Latif
2025-07-30 23:36:44 -07:00
committed by GitHub
parent 03607bbc8b
commit b253454723
180 changed files with 4924 additions and 3653 deletions

View File

@@ -301,8 +301,8 @@ In addition, you will need to update the registries:
```typescript:/apps/sim/blocks/blocks/pinecone.ts
import { PineconeIcon } from '@/components/icons'
import { PineconeResponse } from '@/tools/pinecone/types'
import { BlockConfig } from '../types'
import type { BlockConfig } from '@/blocks/types'
import type { PineconeResponse } from '@/tools/pinecone/types'
export const PineconeBlock: BlockConfig<PineconeResponse> = {
type: 'pinecone',
@@ -313,13 +313,58 @@ In addition, you will need to update the registries:
bgColor: '#123456',
icon: PineconeIcon,
// If this block requires OAuth authentication
provider: 'pinecone',
// Define subBlocks for the UI configuration
subBlocks: [
// Block configuration options
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
layout: 'full',
required: true,
options: [
{ label: 'Generate Embeddings', id: 'generate' },
{ label: 'Search Text', id: 'search_text' },
],
value: () => 'generate',
},
{
id: 'apiKey',
title: 'API Key',
type: 'short-input',
layout: 'full',
placeholder: 'Your Pinecone API key',
password: true,
required: true,
},
],
tools: {
access: ['pinecone_generate_embeddings', 'pinecone_search_text'],
config: {
tool: (params: Record<string, any>) => {
switch (params.operation) {
case 'generate':
return 'pinecone_generate_embeddings'
case 'search_text':
return 'pinecone_search_text'
default:
throw new Error('Invalid operation selected')
}
},
},
},
inputs: {
operation: { type: 'string', description: 'Operation to perform' },
apiKey: { type: 'string', description: 'Pinecone API key' },
searchQuery: { type: 'string', description: 'Search query text' },
topK: { type: 'string', description: 'Number of results to return' },
},
outputs: {
matches: { type: 'any', description: 'Search results or generated embeddings' },
data: { type: 'any', description: 'Response data from Pinecone' },
usage: { type: 'any', description: 'API usage statistics' },
},
}
```

View File

@@ -1,42 +1,25 @@
## Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.
## Summary
Brief description of what this PR does and why.
Fixes #(issue)
## Type of change
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation
- [ ] Other: ___________
Please delete options that are not relevant.
## Testing
How has this been tested? What should reviewers focus on?
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Security enhancement
- [ ] Performance improvement
- [ ] Code refactoring (no functional changes)
## How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration.
## Checklist:
- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] All tests pass locally and in CI (`bun run test`)
- [ ] My changes generate no new warnings
- [ ] Any dependent changes have been merged and published in downstream modules
- [ ] I have updated version numbers as needed (if needed)
## Checklist
- [ ] Code follows project style guidelines
- [ ] Self-reviewed my changes
- [ ] Tests added/updated and passing
- [ ] No new warnings introduced
- [ ] I confirm that I have read and agree to the terms outlined in the [Contributor License Agreement (CLA)](./CONTRIBUTING.md#contributor-license-agreement-cla)
## Security Considerations:
- [ ] My changes do not introduce any new security vulnerabilities
- [ ] I have considered the security implications of my changes
## Additional Information:
Any additional information, configuration or data that might be necessary to reproduce the issue or use the feature.
## Screenshots/Videos
<!-- If applicable, add screenshots or videos to help explain your changes -->
<!-- For UI changes, before/after screenshots are especially helpful -->

View File

@@ -79,11 +79,11 @@ Read records from an Airtable table
#### Output
| Parameter | Type |
| --------- | ---- |
| `records` | string |
| `metadata` | string |
| `totalRecords` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | json | Retrieved record data |
| `record` | json | Single record data |
| `metadata` | json | Operation metadata |
### `airtable_get_record`
@@ -100,10 +100,11 @@ Retrieve a single record from an Airtable table by its ID
#### Output
| Parameter | Type |
| --------- | ---- |
| `record` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | json | Retrieved record data |
| `record` | json | Single record data |
| `metadata` | json | Operation metadata |
### `airtable_create_records`
@@ -119,10 +120,11 @@ Write new records to an Airtable table
#### Output
| Parameter | Type |
| --------- | ---- |
| `records` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | json | Retrieved record data |
| `record` | json | Single record data |
| `metadata` | json | Operation metadata |
### `airtable_update_record`
@@ -140,11 +142,11 @@ Update an existing record in an Airtable table by ID
#### Output
| Parameter | Type |
| --------- | ---- |
| `record` | string |
| `metadata` | string |
| `updatedFields` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | json | Retrieved record data |
| `record` | json | Single record data |
| `metadata` | json | Operation metadata |
### `airtable_update_multiple_records`
@@ -160,33 +162,14 @@ Update multiple existing records in an Airtable table
#### Output
| Parameter | Type |
| --------- | ---- |
| `records` | string |
| `metadata` | string |
| `updatedRecordIds` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | json | Retrieved record data |
| `record` | json | Single record data |
| `metadata` | json | Operation metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `records` | json | records output from the block |
| `record` | json | record output from the block |
| `metadata` | json | metadata output from the block |
## Notes
- Category: `tools`

View File

@@ -61,7 +61,7 @@ Search for academic papers on ArXiv by keywords, authors, titles, or other field
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | The search query to execute |
| `searchQuery` | string | Yes | The search query to execute |
| `searchField` | string | No | Field to search in: all, ti \(title\), au \(author\), abs \(abstract\), co \(comment\), jr \(journal\), cat \(category\), rn \(report number\) |
| `maxResults` | number | No | Maximum number of results to return \(default: 10, max: 2000\) |
| `sortBy` | string | No | Sort by: relevance, lastUpdatedDate, submittedDate \(default: relevance\) |
@@ -69,11 +69,12 @@ Search for academic papers on ArXiv by keywords, authors, titles, or other field
#### Output
| Parameter | Type |
| --------- | ---- |
| `query` | string |
| `papers` | string |
| `totalResults` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `papers` | json | Found papers data |
| `totalResults` | number | Total results count |
| `paper` | json | Paper details |
| `authorPapers` | json | Author papers list |
### `arxiv_get_paper`
@@ -87,9 +88,12 @@ Get detailed information about a specific ArXiv paper by its ID.
#### Output
| Parameter | Type |
| --------- | ---- |
| `paper` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `papers` | json | Found papers data |
| `totalResults` | number | Total results count |
| `paper` | json | Paper details |
| `authorPapers` | json | Author papers list |
### `arxiv_get_author_papers`
@@ -104,34 +108,15 @@ Search for papers by a specific author on ArXiv.
#### Output
| Parameter | Type |
| --------- | ---- |
| `authorPapers` | string |
| `authorName` | string |
| `totalResults` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `papers` | json | Found papers data |
| `totalResults` | number | Total results count |
| `paper` | json | Paper details |
| `authorPapers` | json | Author papers list |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `papers` | json | papers output from the block |
| `totalResults` | number | totalResults output from the block |
| `paper` | json | paper output from the block |
| `authorPapers` | json | authorPapers output from the block |
## Notes
- Category: `tools`

View File

@@ -79,35 +79,15 @@ Runs a browser automation task using BrowserUse
#### Output
| Parameter | Type |
| --------- | ---- |
| `id` | string |
| `success` | string |
| `output` | string |
| `steps` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `id` | string | Task execution identifier |
| `success` | boolean | Task completion status |
| `output` | any | Task output data |
| `steps` | json | Execution steps taken |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `task` | string | Yes | Task - Describe what the browser agent should do... |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `id` | string | id output from the block |
| `success` | boolean | success output from the block |
| `output` | any | output output from the block |
| `steps` | json | steps output from the block |
## Notes
- Category: `tools`

View File

@@ -218,29 +218,12 @@ Populate Clay with data from a JSON file. Enables direct communication and notif
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | any | Response data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `authToken` | string | Yes | Auth Token - Enter your Clay Auth token |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `data` | any | data output from the block |
## Notes
- Category: `tools`

View File

@@ -64,12 +64,13 @@ Retrieve content from Confluence pages using the Confluence API.
#### Output
| Parameter | Type |
| --------- | ---- |
| `ts` | string |
| `pageId` | string |
| `content` | string |
| `title` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Timestamp |
| `pageId` | string | Page identifier |
| `content` | string | Page content |
| `title` | string | Page title |
| `success` | boolean | Operation success status |
### `confluence_update`
@@ -89,37 +90,16 @@ Update a Confluence page using the Confluence API.
#### Output
| Parameter | Type |
| --------- | ---- |
| `ts` | string |
| `pageId` | string |
| `title` | string |
| `body` | string |
| `success` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Timestamp |
| `pageId` | string | Page identifier |
| `content` | string | Page content |
| `title` | string | Page title |
| `success` | boolean | Operation success status |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `ts` | string | ts output from the block |
| `pageId` | string | pageId output from the block |
| `content` | string | content output from the block |
| `title` | string | title output from the block |
| `success` | boolean | success output from the block |
## Notes
- Category: `tools`

View File

@@ -78,9 +78,10 @@ Send a message to a Discord channel
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Message content |
| `data` | any | Response data |
### `discord_get_messages`
@@ -96,9 +97,10 @@ Retrieve messages from a Discord channel
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Message content |
| `data` | any | Response data |
### `discord_get_server`
@@ -113,9 +115,10 @@ Retrieve information about a Discord server (guild)
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Message content |
| `data` | any | Response data |
### `discord_get_user`
@@ -130,30 +133,13 @@ Retrieve information about a Discord user
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Message content |
| `data` | any | Response data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `message` | string | message output from the block |
| `data` | any | data output from the block |
## Notes
- Category: `tools`

View File

@@ -60,29 +60,12 @@ Convert TTS using ElevenLabs voices
#### Output
| Parameter | Type |
| --------- | ---- |
| `audioUrl` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `audioUrl` | string | Generated audio URL |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `text` | string | Yes | Text - Enter the text to convert to speech |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `audioUrl` | string | audioUrl output from the block |
## Notes
- Category: `tools`

View File

@@ -61,22 +61,18 @@ Search the web using Exa AI. Returns relevant search results with titles, URLs,
| `query` | string | Yes | The search query to execute |
| `numResults` | number | No | Number of results to return \(default: 10, max: 25\) |
| `useAutoprompt` | boolean | No | Whether to use autoprompt to improve the query \(default: false\) |
| `type` | string | No | Search type: neural, keyword, auto or magic \(default: auto\) |
| `type` | string | No | Search type: neural, keyword, auto or fast \(default: auto\) |
| `apiKey` | string | Yes | Exa AI API Key |
#### Output
| Parameter | Type |
| --------- | ---- |
| `results` | string |
| `url` | string |
| `publishedDate` | string |
| `author` | string |
| `summary` | string |
| `favicon` | string |
| `image` | string |
| `text` | string |
| `score` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `similarLinks` | json | Similar links found |
| `answer` | string | Generated answer |
| `citations` | json | Answer citations |
| `research` | json | Research findings |
### `exa_get_contents`
@@ -93,12 +89,13 @@ Retrieve the contents of webpages using Exa AI. Returns the title, text content,
#### Output
| Parameter | Type |
| --------- | ---- |
| `results` | string |
| `title` | string |
| `text` | string |
| `summary` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `similarLinks` | json | Similar links found |
| `answer` | string | Generated answer |
| `citations` | json | Answer citations |
| `research` | json | Research findings |
### `exa_find_similar_links`
@@ -115,12 +112,13 @@ Find webpages similar to a given URL using Exa AI. Returns a list of similar lin
#### Output
| Parameter | Type |
| --------- | ---- |
| `similarLinks` | string |
| `url` | string |
| `text` | string |
| `score` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `similarLinks` | json | Similar links found |
| `answer` | string | Generated answer |
| `citations` | json | Answer citations |
| `research` | json | Research findings |
### `exa_answer`
@@ -136,13 +134,13 @@ Get an AI-generated answer to a question with citations from the web using Exa A
#### Output
| Parameter | Type |
| --------- | ---- |
| `query` | string |
| `answer` | string |
| `citations` | string |
| `url` | string |
| `text` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `similarLinks` | json | Similar links found |
| `answer` | string | Generated answer |
| `citations` | json | Answer citations |
| `research` | json | Research findings |
### `exa_research`
@@ -158,34 +156,16 @@ Perform comprehensive research using AI to generate detailed reports with citati
#### Output
| Parameter | Type |
| --------- | ---- |
| `taskId` | string |
| `research` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `similarLinks` | json | Similar links found |
| `answer` | string | Generated answer |
| `citations` | json | Answer citations |
| `research` | json | Research findings |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `results` | json | results output from the block |
| `similarLinks` | json | similarLinks output from the block |
| `answer` | string | answer output from the block |
| `citations` | json | citations output from the block |
| `research` | json | research output from the block |
## Notes
- Category: `tools`

View File

@@ -69,28 +69,13 @@ Parse one or more uploaded files or files from URLs (text, PDF, CSV, images, etc
#### Output
This tool does not produce any outputs.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `files` | json | Parsed file data |
| `combinedContent` | string | Combined file content |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `inputMethod` | string | No | |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `files` | json | files output from the block |
| `combinedContent` | string | combinedContent output from the block |
## Notes
- Category: `tools`

View File

@@ -79,11 +79,16 @@ Extract structured content from web pages with comprehensive metadata support. C
#### Output
| Parameter | Type |
| --------- | ---- |
| `markdown` | string |
| `html` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `markdown` | string | Page content markdown |
| `html` | any | Raw HTML content |
| `metadata` | json | Page metadata |
| `data` | json | Search results data |
| `warning` | any | Warning messages |
| `pages` | json | Crawled pages data |
| `total` | number | Total pages found |
| `creditsUsed` | number | Credits consumed |
### `firecrawl_search`
@@ -98,10 +103,16 @@ Search for information on the web using Firecrawl
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| `warning` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `markdown` | string | Page content markdown |
| `html` | any | Raw HTML content |
| `metadata` | json | Page metadata |
| `data` | json | Search results data |
| `warning` | any | Warning messages |
| `pages` | json | Crawled pages data |
| `total` | number | Total pages found |
| `creditsUsed` | number | Credits consumed |
### `firecrawl_crawl`
@@ -118,39 +129,19 @@ Crawl entire websites and extract structured content from all accessible pages
#### Output
| Parameter | Type |
| --------- | ---- |
| `jobId` | string |
| `pages` | string |
| `total` | string |
| `creditsUsed` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `markdown` | string | Page content markdown |
| `html` | any | Raw HTML content |
| `metadata` | json | Page metadata |
| `data` | json | Search results data |
| `warning` | any | Warning messages |
| `pages` | json | Crawled pages data |
| `total` | number | Total pages found |
| `creditsUsed` | number | Credits consumed |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `markdown` | string | markdown output from the block |
| `html` | any | html output from the block |
| `metadata` | json | metadata output from the block |
| `data` | json | data output from the block |
| `warning` | any | warning output from the block |
| `pages` | json | pages output from the block |
| `total` | number | total output from the block |
| `creditsUsed` | number | creditsUsed output from the block |
## Notes
- Category: `tools`

View File

@@ -56,24 +56,10 @@ Fetch PR details including diff and files changed
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `title` | string |
| `state` | string |
| `html_url` | string |
| `diff_url` | string |
| `created_at` | string |
| `updated_at` | string |
| `files` | string |
| `additions` | string |
| `deletions` | string |
| `changes` | string |
| `patch` | string |
| `blob_url` | string |
| `raw_url` | string |
| `status` | string |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Response content |
| `metadata` | json | Response metadata |
### `github_comment`
@@ -97,17 +83,10 @@ Create comments on GitHub PRs
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `html_url` | string |
| `created_at` | string |
| `updated_at` | string |
| `path` | string |
| `line` | string |
| `side` | string |
| `commit_id` | string |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Response content |
| `metadata` | json | Response metadata |
### `github_repo_info`
@@ -123,15 +102,10 @@ Retrieve comprehensive GitHub repository metadata including stars, forks, issues
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `description` | string |
| `stars` | string |
| `forks` | string |
| `openIssues` | string |
| `language` | string |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Response content |
| `metadata` | json | Response metadata |
### `github_latest_commit`
@@ -148,36 +122,13 @@ Retrieve the latest commit from a GitHub repository
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `html_url` | string |
| `commit_message` | string |
| `author` | string |
| `login` | string |
| `avatar_url` | string |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Response content |
| `metadata` | json | Response metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `metadata` | json | metadata output from the block |
## Notes
- Category: `tools`

View File

@@ -72,12 +72,10 @@ Send emails using Gmail
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| `threadId` | string |
| `labelIds` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Response content |
| `metadata` | json | Email metadata |
### `gmail_draft`
@@ -94,13 +92,10 @@ Draft emails using Gmail
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| `message` | string |
| `threadId` | string |
| `labelIds` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Response content |
| `metadata` | json | Email metadata |
### `gmail_read`
@@ -118,10 +113,10 @@ Read emails from Gmail
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Response content |
| `metadata` | json | Email metadata |
### `gmail_search`
@@ -137,31 +132,13 @@ Search emails in Gmail
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Response content |
| `metadata` | json | Email metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `metadata` | json | metadata output from the block |
## Notes
- Category: `tools`

View File

@@ -117,9 +117,10 @@ Create a new event in Google Calendar
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Operation response content |
| `metadata` | json | Event metadata |
### `google_calendar_list`
@@ -138,9 +139,10 @@ List events from Google Calendar
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Operation response content |
| `metadata` | json | Event metadata |
### `google_calendar_get`
@@ -156,9 +158,10 @@ Get a specific event from Google Calendar
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Operation response content |
| `metadata` | json | Event metadata |
### `google_calendar_quick_add`
@@ -176,9 +179,10 @@ Create events from natural language text
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Operation response content |
| `metadata` | json | Event metadata |
### `google_calendar_invite`
@@ -197,41 +201,13 @@ Invite attendees to an existing Google Calendar event
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `htmlLink` | string |
| `status` | string |
| `summary` | string |
| `description` | string |
| `location` | string |
| `start` | string |
| `end` | string |
| `attendees` | string |
| `creator` | string |
| `organizer` | string |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Operation response content |
| `metadata` | json | Event metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `metadata` | json | metadata output from the block |
## Notes
- Category: `tools`

View File

@@ -100,10 +100,11 @@ Read content from a Google Docs document
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Document content |
| `metadata` | json | Document metadata |
| `updatedContent` | boolean | Content update status |
### `google_docs_write`
@@ -119,10 +120,11 @@ Write or update content in a Google Docs document
#### Output
| Parameter | Type |
| --------- | ---- |
| `updatedContent` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Document content |
| `metadata` | json | Document metadata |
| `updatedContent` | boolean | Content update status |
### `google_docs_create`
@@ -140,31 +142,14 @@ Create a new Google Docs document
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Document content |
| `metadata` | json | Document metadata |
| `updatedContent` | boolean | Content update status |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `metadata` | json | metadata output from the block |
| `updatedContent` | boolean | updatedContent output from the block |
## Notes
- Category: `tools`

View File

@@ -96,17 +96,10 @@ Upload a file to Google Drive
#### Output
| Parameter | Type |
| --------- | ---- |
| `file` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| `webContentLink` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | json | File data |
| `files` | json | Files list |
### `google_drive_create_folder`
@@ -123,17 +116,10 @@ Create a new folder in Google Drive
#### Output
| Parameter | Type |
| --------- | ---- |
| `file` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| `webContentLink` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | json | File data |
| `files` | json | Files list |
### `google_drive_list`
@@ -152,38 +138,13 @@ List files and folders in Google Drive
#### Output
| Parameter | Type |
| --------- | ---- |
| `files` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| `webContentLink` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | json | File data |
| `files` | json | Files list |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `file` | json | file output from the block |
| `files` | json | files output from the block |
## Notes
- Category: `tools`

View File

@@ -79,34 +79,13 @@ Search the web with the Custom Search API
#### Output
| Parameter | Type |
| --------- | ---- |
| `items` | string |
| `searchInformation` | string |
| `searchTime` | string |
| `formattedSearchTime` | string |
| `formattedTotalResults` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | json | Search result items |
| `searchInformation` | json | Search metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | Search Query - Enter your search query |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `items` | json | items output from the block |
| `searchInformation` | json | searchInformation output from the block |
## Notes
- Category: `tools`

View File

@@ -116,9 +116,15 @@ Read data from a Google Sheets spreadsheet
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Sheet data |
| `metadata` | json | Operation metadata |
| `updatedRange` | string | Updated range |
| `updatedRows` | number | Updated rows count |
| `updatedColumns` | number | Updated columns count |
| `updatedCells` | number | Updated cells count |
| `tableRange` | string | Table range |
### `google_sheets_write`
@@ -137,15 +143,15 @@ Write data to a Google Sheets spreadsheet
#### Output
| Parameter | Type |
| --------- | ---- |
| `updatedRange` | string |
| `updatedRows` | string |
| `updatedColumns` | string |
| `updatedCells` | string |
| `metadata` | string |
| `spreadsheetId` | string |
| `spreadsheetUrl` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Sheet data |
| `metadata` | json | Operation metadata |
| `updatedRange` | string | Updated range |
| `updatedRows` | number | Updated rows count |
| `updatedColumns` | number | Updated columns count |
| `updatedCells` | number | Updated cells count |
| `tableRange` | string | Table range |
### `google_sheets_update`
@@ -164,15 +170,15 @@ Update data in a Google Sheets spreadsheet
#### Output
| Parameter | Type |
| --------- | ---- |
| `updatedRange` | string |
| `updatedRows` | string |
| `updatedColumns` | string |
| `updatedCells` | string |
| `metadata` | string |
| `spreadsheetId` | string |
| `spreadsheetUrl` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Sheet data |
| `metadata` | json | Operation metadata |
| `updatedRange` | string | Updated range |
| `updatedRows` | number | Updated rows count |
| `updatedColumns` | number | Updated columns count |
| `updatedCells` | number | Updated cells count |
| `tableRange` | string | Table range |
### `google_sheets_append`
@@ -192,35 +198,18 @@ Append data to the end of a Google Sheets spreadsheet
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Sheet data |
| `metadata` | json | Operation metadata |
| `updatedRange` | string | Updated range |
| `updatedRows` | number | Updated rows count |
| `updatedColumns` | number | Updated columns count |
| `updatedCells` | number | Updated cells count |
| `tableRange` | string | Table range |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `data` | json | data output from the block |
| `metadata` | json | metadata output from the block |
| `updatedRange` | string | updatedRange output from the block |
| `updatedRows` | number | updatedRows output from the block |
| `updatedColumns` | number | updatedColumns output from the block |
| `updatedCells` | number | updatedCells output from the block |
| `tableRange` | string | tableRange output from the block |
## Notes
- Category: `tools`

View File

@@ -90,35 +90,14 @@ Generate completions using Hugging Face Inference API
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `model` | string |
| `usage` | string |
| `completion_tokens` | string |
| `total_tokens` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Generated response |
| `model` | string | Model used |
| `usage` | json | Token usage stats |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `systemPrompt` | string | No | System Prompt - Enter system prompt to guide the model behavior... |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `model` | string | model output from the block |
| `usage` | json | usage output from the block |
## Notes
- Category: `tools`

View File

@@ -0,0 +1,204 @@
---
title: Hunter io
description: Find and verify professional email addresses
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="hunter"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
viewBox='0 0 20 19'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
d='M12.0671 8.43455C11.6625 8.55094 11.2164 8.55288 10.7992 8.53525C10.3141 8.51472 9.80024 8.45339 9.35223 8.25426C8.98359 8.09047 8.68787 7.79493 8.84262 7.36805C8.95175 7.06699 9.19361 6.79803 9.47319 6.64644C9.78751 6.4759 10.1329 6.50361 10.4474 6.65774C10.8005 6.83082 11.0942 7.11235 11.3604 7.3964C11.5 7.54536 11.6332 7.70002 11.7646 7.85617C11.8252 7.92801 12.2364 8.33865 12.0671 8.43455ZM18.7923 8.58131C18.17 8.43655 17.4348 8.4884 16.811 8.38867C15.8284 8.23146 14.3648 7.08576 13.5714 5.92122C13.0201 5.11202 12.757 4.28785 12.3356 3.28356C12.0415 2.58257 11.4001 0.365389 10.5032 1.40318C10.1339 1.83057 9.7204 3.23752 9.41837 3.2177C9.19467 3.26971 9.15818 2.83371 9.08739 2.64738C8.95886 2.30903 8.89071 1.9176 8.7185 1.59854C8.58086 1.34353 8.40014 1.03806 8.12337 0.91412C7.63027 0.660572 7.03575 1.42476 6.74072 2.33095C6.61457 2.81687 5.76653 3.75879 5.39721 3.9866C3.71684 5.02352 0.344233 6.11595 0.000262184 9.75358C-0.00114142 9.76867 0.000262182 9.81455 0.0573714 9.77323C0.459591 9.48197 5.02183 6.19605 2.09392 12.5476C0.300195 16.439 8.96062 18.917 9.40582 18.9271C9.46582 18.9284 9.46144 18.9011 9.46347 18.8832C10.1546 12.6724 16.9819 13.3262 18.5718 11.8387C20.1474 10.3649 20.1796 8.93816 18.7923 8.58131Z'
fill='#FA5320'
/>
</svg>`}
/>
## Usage Instructions
Search for email addresses, verify their deliverability, discover companies, and enrich contact data using Hunter.io's powerful email finding capabilities.
## Tools
### `hunter_discover`
Returns companies matching a set of criteria using Hunter.io AI-powered search.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | No | Natural language search query for companies |
| `domain` | string | No | Company domain names to filter by |
| `headcount` | string | No | Company size filter \(e.g., |
| `company_type` | string | No | Type of organization |
| `technology` | string | No | Technology used by companies |
| `apiKey` | string | Yes | Hunter.io API Key |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `emails` | json | Email addresses found |
| `email` | string | Found email address |
| `score` | number | Confidence score |
| `result` | string | Verification result |
| `status` | string | Status message |
| `total` | number | Total results count |
| `personal_emails` | number | Personal emails count |
| `generic_emails` | number | Generic emails count |
### `hunter_domain_search`
Returns all the email addresses found using one given domain name, with sources.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Yes | Domain name to search for email addresses |
| `limit` | number | No | Maximum email addresses to return \(default: 10\) |
| `offset` | number | No | Number of email addresses to skip |
| `type` | string | No | Filter for personal or generic emails |
| `seniority` | string | No | Filter by seniority level: junior, senior, or executive |
| `department` | string | No | Filter by specific departments \(e.g., sales, marketing\) |
| `apiKey` | string | Yes | Hunter.io API Key |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `emails` | json | Email addresses found |
| `email` | string | Found email address |
| `score` | number | Confidence score |
| `result` | string | Verification result |
| `status` | string | Status message |
| `total` | number | Total results count |
| `personal_emails` | number | Personal emails count |
| `generic_emails` | number | Generic emails count |
### `hunter_email_finder`
Finds the most likely email address for a person given their name and company domain.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Yes | Company domain name |
| `first_name` | string | Yes | Person |
| `last_name` | string | Yes | Person |
| `company` | string | No | Company name |
| `apiKey` | string | Yes | Hunter.io API Key |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `emails` | json | Email addresses found |
| `email` | string | Found email address |
| `score` | number | Confidence score |
| `result` | string | Verification result |
| `status` | string | Status message |
| `total` | number | Total results count |
| `personal_emails` | number | Personal emails count |
| `generic_emails` | number | Generic emails count |
### `hunter_email_verifier`
Verifies the deliverability of an email address and provides detailed verification status.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `email` | string | Yes | The email address to verify |
| `apiKey` | string | Yes | Hunter.io API Key |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `emails` | json | Email addresses found |
| `email` | string | Found email address |
| `score` | number | Confidence score |
| `result` | string | Verification result |
| `status` | string | Status message |
| `total` | number | Total results count |
| `personal_emails` | number | Personal emails count |
| `generic_emails` | number | Generic emails count |
### `hunter_companies_find`
Enriches company data using domain name.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Yes | Domain to find company data for |
| `apiKey` | string | Yes | Hunter.io API Key |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `emails` | json | Email addresses found |
| `email` | string | Found email address |
| `score` | number | Confidence score |
| `result` | string | Verification result |
| `status` | string | Status message |
| `total` | number | Total results count |
| `personal_emails` | number | Personal emails count |
| `generic_emails` | number | Generic emails count |
### `hunter_email_count`
Returns the total number of email addresses found for a domain or company.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `domain` | string | No | Domain to count emails for \(required if company not provided\) |
| `company` | string | No | Company name to count emails for \(required if domain not provided\) |
| `type` | string | No | Filter for personal or generic emails only |
| `apiKey` | string | Yes | Hunter.io API Key |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `emails` | json | Email addresses found |
| `email` | string | Found email address |
| `score` | number | Confidence score |
| `result` | string | Verification result |
| `status` | string | Status message |
| `total` | number | Total results count |
| `personal_emails` | number | Personal emails count |
| `generic_emails` | number | Generic emails count |
## Notes
- Category: `tools`
- Type: `hunter`

View File

@@ -71,33 +71,14 @@ Generate images using OpenAI
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `image` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Generation response |
| `image` | string | Generated image URL |
| `metadata` | json | Generation metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `prompt` | string | Yes | |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `image` | string | image output from the block |
| `metadata` | json | metadata output from the block |
## Notes
- Category: `tools`

View File

@@ -85,29 +85,12 @@ Extract and process web content into clean, LLM-friendly text using Jina AI Read
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Extracted content |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `url` | string | Yes | URL - Enter URL to extract content from |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
## Notes
- Category: `tools`

View File

@@ -65,14 +65,16 @@ Retrieve detailed information about a specific Jira issue
#### Output
| Parameter | Type |
| --------- | ---- |
| `ts` | string |
| `issueKey` | string |
| `summary` | string |
| `description` | string |
| `created` | string |
| `updated` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Timestamp |
| `issueKey` | string | Issue key |
| `summary` | string | Issue summary |
| `description` | string | Issue description |
| `created` | string | Creation date |
| `updated` | string | Update date |
| `success` | boolean | Operation success |
| `url` | string | Issue URL |
### `jira_update`
@@ -95,12 +97,16 @@ Update a Jira issue
#### Output
| Parameter | Type |
| --------- | ---- |
| `ts` | string |
| `issueKey` | string |
| `summary` | string |
| `success` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Timestamp |
| `issueKey` | string | Issue key |
| `summary` | string | Issue summary |
| `description` | string | Issue description |
| `created` | string | Creation date |
| `updated` | string | Update date |
| `success` | boolean | Operation success |
| `url` | string | Issue URL |
### `jira_write`
@@ -118,17 +124,20 @@ Write a Jira issue
| `priority` | string | No | Priority for the issue |
| `assignee` | string | No | Assignee for the issue |
| `cloudId` | string | No | Jira Cloud ID for the instance. If not provided, it will be fetched using the domain. |
| `issueType` | string | Yes | Type of issue to create \(e.g., Task, Story, Bug, Sub-task\) |
| `issueType` | string | Yes | Type of issue to create \(e.g., Task, Story\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| `ts` | string |
| `issueKey` | string |
| `summary` | string |
| `success` | string |
| `url` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Timestamp |
| `issueKey` | string | Issue key |
| `summary` | string | Issue summary |
| `description` | string | Issue description |
| `created` | string | Creation date |
| `updated` | string | Update date |
| `success` | boolean | Operation success |
| `url` | string | Issue URL |
### `jira_bulk_read`
@@ -145,36 +154,19 @@ Retrieve multiple Jira issues in bulk
#### Output
| Parameter | Type |
| --------- | ---- |
| `issues` | array |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Timestamp |
| `issueKey` | string | Issue key |
| `summary` | string | Issue summary |
| `description` | string | Issue description |
| `created` | string | Creation date |
| `updated` | string | Update date |
| `success` | boolean | Operation success |
| `url` | string | Issue URL |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `ts` | string | ts output from the block |
| `issueKey` | string | issueKey output from the block |
| `summary` | string | summary output from the block |
| `description` | string | description output from the block |
| `created` | string | created output from the block |
| `updated` | string | updated output from the block |
| `success` | boolean | success output from the block |
| `url` | string | url output from the block |
## Notes
- Category: `tools`

View File

@@ -57,31 +57,24 @@ Perform semantic vector search across knowledge bases, upload individual chunks
### `knowledge_search`
Search for similar content in one or more knowledge bases using vector similarity
Search for similar content in a knowledge base using vector similarity
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `knowledgeBaseIds` | string | Yes | ID of the knowledge base to search in, or comma-separated IDs for multiple knowledge bases |
| `knowledgeBaseId` | string | Yes | ID of the knowledge base to search in |
| `query` | string | Yes | Search query text |
| `topK` | number | No | Number of most similar results to return \(1-100\) |
| `tag1` | string | No | Filter by tag 1 value |
| `tag2` | string | No | Filter by tag 2 value |
| `tag3` | string | No | Filter by tag 3 value |
| `tag4` | string | No | Filter by tag 4 value |
| `tag5` | string | No | Filter by tag 5 value |
| `tag6` | string | No | Filter by tag 6 value |
| `tag7` | string | No | Filter by tag 7 value |
| `tagFilters` | any | No | Array of tag filters with tagName and tagValue properties |
#### Output
| Parameter | Type |
| --------- | ---- |
| `results` | string |
| `query` | string |
| `totalResults` | string |
| `cost` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `query` | string | Query used |
| `totalResults` | number | Total results count |
### `knowledge_upload_chunk`
@@ -97,16 +90,11 @@ Upload a new chunk to a document in a knowledge base
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| `chunkIndex` | string |
| `content` | string |
| `contentLength` | string |
| `tokenCount` | string |
| `enabled` | string |
| `createdAt` | string |
| `updatedAt` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `query` | string | Query used |
| `totalResults` | number | Total results count |
### `knowledge_create_document`
@@ -126,35 +114,18 @@ Create a new document in a knowledge base
| `tag5` | string | No | Tag 5 value for the document |
| `tag6` | string | No | Tag 6 value for the document |
| `tag7` | string | No | Tag 7 value for the document |
| `documentTagsData` | array | No | Structured tag data with names, types, and values |
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| `name` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results |
| `query` | string | Query used |
| `totalResults` | number | Total results count |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `results` | json | results output from the block |
| `query` | string | query output from the block |
| `totalResults` | number | totalResults output from the block |
## Notes
- Category: `blocks`

View File

@@ -61,9 +61,10 @@ Fetch and filter issues from Linear
#### Output
| Parameter | Type |
| --------- | ---- |
| `issues` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issues` | json | Issues list |
| `issue` | json | Single issue data |
### `linear_create_issue`
@@ -80,35 +81,13 @@ Create a new issue in Linear
#### Output
| Parameter | Type |
| --------- | ---- |
| `issue` | string |
| `title` | string |
| `description` | string |
| `state` | string |
| `teamId` | string |
| `projectId` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issues` | json | Issues list |
| `issue` | json | Single issue data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `issues` | json | issues output from the block |
| `issue` | json | issue output from the block |
## Notes
- Category: `tools`

View File

@@ -64,31 +64,13 @@ Search the web for information using Linkup
#### Output
| Parameter | Type |
| --------- | ---- |
| `answer` | string |
| `sources` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `answer` | string | Generated answer |
| `sources` | json | Source references |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `q` | string | Yes | Search Query - Enter your search query |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `answer` | string | answer output from the block |
| `sources` | json | sources output from the block |
## Notes
- Category: `tools`

View File

@@ -64,9 +64,11 @@ Add memories to Mem0 for persistent storage and retrieval
#### Output
| Parameter | Type |
| --------- | ---- |
| `memories` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ids` | any | Memory identifiers |
| `memories` | any | Memory data |
| `searchResults` | any | Search results |
### `mem0_search_memories`
@@ -83,10 +85,11 @@ Search for memories in Mem0 using semantic search
#### Output
| Parameter | Type |
| --------- | ---- |
| `searchResults` | string |
| `ids` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ids` | any | Memory identifiers |
| `memories` | any | Memory data |
| `searchResults` | any | Search results |
### `mem0_get_memories`
@@ -105,32 +108,14 @@ Retrieve memories from Mem0 by ID or filter criteria
#### Output
| Parameter | Type |
| --------- | ---- |
| `memories` | string |
| `ids` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ids` | any | Memory identifiers |
| `memories` | any | Memory data |
| `searchResults` | any | Search results |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `ids` | any | ids output from the block |
| `memories` | any | memories output from the block |
| `searchResults` | any | searchResults output from the block |
## Notes
- Category: `tools`

View File

@@ -55,9 +55,10 @@ Add a new memory to the database or append to existing memory with the same ID.
#### Output
| Parameter | Type |
| --------- | ---- |
| `memories` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `memories` | any | Memory data |
| `id` | string | Memory identifier |
### `memory_get`
@@ -71,10 +72,10 @@ Retrieve a specific memory by its ID
#### Output
| Parameter | Type |
| --------- | ---- |
| `memories` | string |
| `message` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `memories` | any | Memory data |
| `id` | string | Memory identifier |
### `memory_get_all`
@@ -87,10 +88,10 @@ Retrieve all memories from the database
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| `memories` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `memories` | any | Memory data |
| `id` | string | Memory identifier |
### `memory_delete`
@@ -104,30 +105,13 @@ Delete a specific memory by its ID
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `memories` | any | Memory data |
| `id` | string | Memory identifier |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `memories` | any | memories output from the block |
| `id` | string | id output from the block |
## Notes
- Category: `blocks`

View File

@@ -19,6 +19,7 @@
"google_search",
"google_sheets",
"huggingface",
"hunter",
"image_generator",
"jina",
"jira",

View File

@@ -114,9 +114,16 @@ Read data from a Microsoft Excel spreadsheet
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Sheet data |
| `metadata` | json | Operation metadata |
| `updatedRange` | string | Updated range |
| `updatedRows` | number | Updated rows count |
| `updatedColumns` | number | Updated columns count |
| `updatedCells` | number | Updated cells count |
| `index` | number | Row index |
| `values` | json | Table values |
### `microsoft_excel_write`
@@ -135,15 +142,16 @@ Write data to a Microsoft Excel spreadsheet
#### Output
| Parameter | Type |
| --------- | ---- |
| `updatedRange` | string |
| `updatedRows` | string |
| `updatedColumns` | string |
| `updatedCells` | string |
| `metadata` | string |
| `spreadsheetId` | string |
| `spreadsheetUrl` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Sheet data |
| `metadata` | json | Operation metadata |
| `updatedRange` | string | Updated range |
| `updatedRows` | number | Updated rows count |
| `updatedColumns` | number | Updated columns count |
| `updatedCells` | number | Updated cells count |
| `index` | number | Row index |
| `values` | json | Table values |
### `microsoft_excel_table_add`
@@ -160,36 +168,19 @@ Add new rows to a Microsoft Excel table
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Sheet data |
| `metadata` | json | Operation metadata |
| `updatedRange` | string | Updated range |
| `updatedRows` | number | Updated rows count |
| `updatedColumns` | number | Updated columns count |
| `updatedCells` | number | Updated cells count |
| `index` | number | Row index |
| `values` | json | Table values |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `data` | json | data output from the block |
| `metadata` | json | metadata output from the block |
| `updatedRange` | string | updatedRange output from the block |
| `updatedRows` | number | updatedRows output from the block |
| `updatedColumns` | number | updatedColumns output from the block |
| `updatedCells` | number | updatedCells output from the block |
| `index` | number | index output from the block |
| `values` | json | values output from the block |
## Notes
- Category: `tools`

View File

@@ -117,14 +117,11 @@ Read content from a Microsoft Teams chat
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| `messageCount` | string |
| `messages` | string |
| `totalAttachments` | string |
| `attachmentTypes` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Message content |
| `metadata` | json | Message metadata |
| `updatedContent` | boolean | Content update status |
### `microsoft_teams_write_chat`
@@ -140,10 +137,11 @@ Write or update content in a Microsoft Teams chat
#### Output
| Parameter | Type |
| --------- | ---- |
| `updatedContent` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Message content |
| `metadata` | json | Message metadata |
| `updatedContent` | boolean | Content update status |
### `microsoft_teams_read_channel`
@@ -159,15 +157,11 @@ Read content from a Microsoft Teams channel
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| `channelId` | string |
| `messageCount` | string |
| `messages` | string |
| `totalAttachments` | string |
| `attachmentTypes` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Message content |
| `metadata` | json | Message metadata |
| `updatedContent` | boolean | Content update status |
### `microsoft_teams_write_channel`
@@ -184,32 +178,14 @@ Write or send a message to a Microsoft Teams channel
#### Output
| Parameter | Type |
| --------- | ---- |
| `updatedContent` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Message content |
| `metadata` | json | Message metadata |
| `updatedContent` | boolean | Content update status |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `metadata` | json | metadata output from the block |
| `updatedContent` | boolean | updatedContent output from the block |
## Notes
- Category: `tools`

View File

@@ -104,28 +104,13 @@ Parse PDF documents using Mistral OCR API
#### Output
This tool does not produce any outputs.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Extracted content |
| `metadata` | json | Processing metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `inputMethod` | string | No | |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `metadata` | json | metadata output from the block |
## Notes
- Category: `tools`

View File

@@ -64,13 +64,10 @@ Read content from a Notion page
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| `lastEditedTime` | string |
| `createdTime` | string |
| `url` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Page content |
| `metadata` | any | Page metadata |
### `notion_read_database`
@@ -85,16 +82,10 @@ Read database information and structure from Notion
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `url` | string |
| `id` | string |
| `createdTime` | string |
| `lastEditedTime` | string |
| `properties` | string |
| `content` | string |
| `title` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Page content |
| `metadata` | any | Page metadata |
### `notion_write`
@@ -110,9 +101,10 @@ Append content to a Notion page
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Page content |
| `metadata` | any | Page metadata |
### `notion_create_page`
@@ -129,9 +121,10 @@ Create a new page in Notion
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Page content |
| `metadata` | any | Page metadata |
### `notion_query_database`
@@ -149,13 +142,10 @@ Query and filter Notion database entries with advanced filtering
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| `hasMore` | string |
| `nextCursor` | string |
| `results` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Page content |
| `metadata` | any | Page metadata |
### `notion_search`
@@ -172,13 +162,10 @@ Search across all pages and databases in Notion workspace
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| `hasMore` | string |
| `nextCursor` | string |
| `results` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Page content |
| `metadata` | any | Page metadata |
### `notion_create_database`
@@ -195,35 +182,13 @@ Create a new database in Notion with custom properties
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `url` | string |
| `createdTime` | string |
| `properties` | string |
| `content` | string |
| `title` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Page content |
| `metadata` | any | Page metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `metadata` | any | metadata output from the block |
## Notes
- Category: `tools`

View File

@@ -64,34 +64,14 @@ Generate embeddings from text using OpenAI
#### Output
| Parameter | Type |
| --------- | ---- |
| `embeddings` | string |
| `model` | string |
| `usage` | string |
| `total_tokens` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `embeddings` | json | Generated embeddings |
| `model` | string | Model used |
| `usage` | json | Token usage |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `input` | string | Yes | Input Text - Enter text to generate embeddings for |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `embeddings` | json | embeddings output from the block |
| `model` | string | model output from the block |
| `usage` | json | usage output from the block |
## Notes
- Category: `tools`

View File

@@ -161,11 +161,10 @@ Send emails using Outlook
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| `results` | string |
| `timestamp` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Response message |
| `results` | json | Email results |
### `outlook_draft`
@@ -182,13 +181,10 @@ Draft emails using Outlook
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| `results` | string |
| `subject` | string |
| `status` | string |
| `timestamp` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Response message |
| `results` | json | Email results |
### `outlook_read`
@@ -204,31 +200,13 @@ Read emails from Outlook
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| `results` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Response message |
| `results` | json | Email results |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `message` | string | message output from the block |
| `results` | json | results output from the block |
## Notes
- Category: `tools`

View File

@@ -60,35 +60,14 @@ Generate completions using Perplexity AI chat models
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `model` | string |
| `usage` | string |
| `completion_tokens` | string |
| `total_tokens` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Generated response |
| `model` | string | Model used |
| `usage` | json | Token usage |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `content` | string | Yes | User Prompt - Enter your prompt here... |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `model` | string | model output from the block |
| `usage` | json | usage output from the block |
## Notes
- Category: `tools`

View File

@@ -65,12 +65,14 @@ Generate embeddings from text using Pinecone
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| `model` | string |
| `vector_type` | string |
| `usage` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | any | Search matches |
| `upsertedCount` | any | Upserted count |
| `data` | any | Response data |
| `model` | any | Model information |
| `vector_type` | any | Vector type |
| `usage` | any | Usage statistics |
### `pinecone_upsert_text`
@@ -87,9 +89,14 @@ Insert or update text records in a Pinecone index
#### Output
| Parameter | Type |
| --------- | ---- |
| `statusText` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | any | Search matches |
| `upsertedCount` | any | Upserted count |
| `data` | any | Response data |
| `model` | any | Model information |
| `vector_type` | any | Vector type |
| `usage` | any | Usage statistics |
### `pinecone_search_text`
@@ -110,11 +117,14 @@ Search for similar text in a Pinecone index
#### Output
| Parameter | Type |
| --------- | ---- |
| `matches` | string |
| `score` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | any | Search matches |
| `upsertedCount` | any | Upserted count |
| `data` | any | Response data |
| `model` | any | Model information |
| `vector_type` | any | Vector type |
| `usage` | any | Usage statistics |
### `pinecone_search_vector`
@@ -135,12 +145,14 @@ Search for similar vectors in a Pinecone index
#### Output
| Parameter | Type |
| --------- | ---- |
| `matches` | string |
| `score` | string |
| `values` | string |
| `metadata` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | any | Search matches |
| `upsertedCount` | any | Upserted count |
| `data` | any | Response data |
| `model` | any | Model information |
| `vector_type` | any | Vector type |
| `usage` | any | Usage statistics |
### `pinecone_fetch`
@@ -157,38 +169,17 @@ Fetch vectors by ID from a Pinecone index
#### Output
| Parameter | Type |
| --------- | ---- |
| `matches` | string |
| `values` | string |
| `metadata` | string |
| `score` | string |
| `id` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | any | Search matches |
| `upsertedCount` | any | Upserted count |
| `data` | any | Response data |
| `model` | any | Model information |
| `vector_type` | any | Vector type |
| `usage` | any | Usage statistics |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `matches` | any | matches output from the block |
| `upsertedCount` | any | upsertedCount output from the block |
| `data` | any | data output from the block |
| `model` | any | model output from the block |
| `vector_type` | any | vector_type output from the block |
| `usage` | any | usage output from the block |
## Notes
- Category: `tools`

View File

@@ -124,10 +124,12 @@ Insert or update points in a Qdrant collection
#### Output
| Parameter | Type |
| --------- | ---- |
| `status` | string |
| `data` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | any | Search matches |
| `upsertedCount` | any | Upserted count |
| `data` | any | Response data |
| `status` | any | Operation status |
### `qdrant_search_vector`
@@ -148,10 +150,12 @@ Search for similar vectors in a Qdrant collection
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| `status` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | any | Search matches |
| `upsertedCount` | any | Upserted count |
| `data` | any | Response data |
| `status` | any | Operation status |
### `qdrant_fetch_points`
@@ -170,33 +174,15 @@ Fetch points by ID from a Qdrant collection
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| `status` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | any | Search matches |
| `upsertedCount` | any | Upserted count |
| `data` | any | Response data |
| `status` | any | Operation status |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `matches` | any | matches output from the block |
| `upsertedCount` | any | upsertedCount output from the block |
| `data` | any | data output from the block |
| `status` | any | status output from the block |
## Notes
- Category: `tools`

View File

@@ -61,10 +61,12 @@ Fetch posts from a subreddit with different sorting options
#### Output
| Parameter | Type |
| --------- | ---- |
| `subreddit` | string |
| `posts` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `subreddit` | string | Subreddit name |
| `posts` | json | Posts data |
| `post` | json | Single post data |
| `comments` | json | Comments data |
### `reddit_get_comments`
@@ -82,38 +84,15 @@ Fetch comments from a specific Reddit post
#### Output
| Parameter | Type |
| --------- | ---- |
| `post` | string |
| `title` | string |
| `author` | string |
| `selftext` | string |
| `created_utc` | string |
| `score` | string |
| `permalink` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `subreddit` | string | Subreddit name |
| `posts` | json | Posts data |
| `post` | json | Single post data |
| `comments` | json | Comments data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `subreddit` | string | subreddit output from the block |
| `posts` | json | posts output from the block |
| `post` | json | post output from the block |
| `comments` | json | comments output from the block |
## Notes
- Category: `tools`

View File

@@ -78,38 +78,17 @@ Retrieve an object from an AWS S3 bucket
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Yes | Your AWS Access Key ID |
| `secretAccessKey` | string | Yes | Your AWS Secret Access Key |
| `s3Uri` | string | Yes | S3 Object URL \(e.g., https://bucket-name.s3.region.amazonaws.com/path/to/file\) |
| `s3Uri` | string | Yes | S3 Object URL |
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `size` | string |
| `name` | string |
| `lastModified` | string |
| `url` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `url` | string | Presigned URL |
| `metadata` | json | Object metadata |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Yes | Access Key ID - Enter your AWS Access Key ID |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `url` | string | url output from the block |
| `metadata` | json | metadata output from the block |
## Notes
- Category: `tools`

View File

@@ -36,21 +36,6 @@ Configure automated workflow execution with flexible timing options. Set up recu
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `scheduleConfig` | schedule-config | Yes | Schedule Status |
| `scheduleType` | dropdown | Yes | Frequency |
### Outputs
This block does not produce any outputs.
## Notes
- Category: `triggers`

View File

@@ -101,29 +101,12 @@ A powerful web search tool that provides access to Google search results through
#### Output
| Parameter | Type |
| --------- | ---- |
| `searchResults` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `searchResults` | json | Search results data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | Search Query - Enter your search query... |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `searchResults` | json | searchResults output from the block |
## Notes
- Category: `tools`

View File

@@ -86,10 +86,13 @@ Send messages to Slack channels or users through the Slack API. Supports Slack m
#### Output
| Parameter | Type |
| --------- | ---- |
| `ts` | string |
| `channel` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Message timestamp |
| `channel` | string | Channel identifier |
| `canvas_id` | string | Canvas identifier |
| `title` | string | Canvas title |
| `messages` | json | Message data |
### `slack_canvas`
@@ -109,11 +112,13 @@ Create and share Slack canvases in channels. Canvases are collaborative document
#### Output
| Parameter | Type |
| --------- | ---- |
| `canvas_id` | string |
| `channel` | string |
| `title` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Message timestamp |
| `channel` | string | Channel identifier |
| `canvas_id` | string | Canvas identifier |
| `title` | string | Canvas title |
| `messages` | json | Message data |
### `slack_message_reader`
@@ -133,33 +138,16 @@ Read the latest messages from Slack channels. Retrieve conversation history with
#### Output
| Parameter | Type |
| --------- | ---- |
| `messages` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Message timestamp |
| `channel` | string | Channel identifier |
| `canvas_id` | string | Canvas identifier |
| `title` | string | Canvas title |
| `messages` | json | Message data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `ts` | string | ts output from the block |
| `channel` | string | channel output from the block |
| `canvas_id` | string | canvas_id output from the block |
| `title` | string | title output from the block |
| `messages` | json | messages output from the block |
## Notes
- Category: `tools`

View File

@@ -212,29 +212,12 @@ Extract structured data from a webpage using Stagehand
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | json | Extracted data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `url` | string | Yes | URL - Enter the URL of the website to extract data from |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `data` | json | data output from the block |
## Notes
- Category: `tools`

View File

@@ -217,33 +217,13 @@ Run an autonomous web agent to complete tasks and extract structured data
#### Output
| Parameter | Type |
| --------- | ---- |
| `agentResult` | string |
| `completed` | string |
| `message` | string |
| `actions` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `agentResult` | json | Agent execution result |
| `structuredOutput` | any | Structured output data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `startUrl` | string | Yes | Starting URL - Enter the starting URL for the agent |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `agentResult` | json | agentResult output from the block |
| `structuredOutput` | any | structuredOutput output from the block |
## Notes
- Category: `tools`

View File

@@ -99,10 +99,10 @@ Query data from a Supabase table
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| `results` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation message |
| `results` | json | Query results |
### `supabase_insert`
@@ -119,10 +119,10 @@ Insert data into a Supabase table
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| `results` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation message |
| `results` | json | Query results |
### `supabase_get_row`
@@ -139,10 +139,10 @@ Get a single row from a Supabase table based on filter criteria
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| `results` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation message |
| `results` | json | Query results |
### `supabase_update`
@@ -160,9 +160,10 @@ Update rows in a Supabase table based on filter criteria
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation message |
| `results` | json | Query results |
### `supabase_delete`
@@ -179,30 +180,13 @@ Delete rows from a Supabase table based on filter criteria
#### Output
| Parameter | Type |
| --------- | ---- |
| `message` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation message |
| `results` | json | Query results |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `message` | string | message output from the block |
| `results` | json | results output from the block |
## Notes
- Category: `tools`

View File

@@ -78,13 +78,14 @@ Perform AI-powered web searches using Tavily
#### Output
| Parameter | Type |
| --------- | ---- |
| `query` | string |
| `results` | string |
| `url` | string |
| `snippet` | string |
| `raw_content` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results data |
| `answer` | any | Search answer |
| `query` | string | Query used |
| `content` | string | Extracted content |
| `title` | string | Page title |
| `url` | string | Source URL |
### `tavily_extract`
@@ -100,35 +101,17 @@ Extract raw content from multiple web pages simultaneously using Tavily
#### Output
| Parameter | Type |
| --------- | ---- |
| `results` | string |
| `failed_results` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | json | Search results data |
| `answer` | any | Search answer |
| `query` | string | Query used |
| `content` | string | Extracted content |
| `title` | string | Page title |
| `url` | string | Source URL |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `results` | json | results output from the block |
| `answer` | any | answer output from the block |
| `query` | string | query output from the block |
| `content` | string | content output from the block |
| `title` | string | title output from the block |
| `url` | string | url output from the block |
## Notes
- Category: `tools`

View File

@@ -87,31 +87,13 @@ Send messages to Telegram channels or users through the Telegram Bot API. Enable
#### Output
| Parameter | Type |
| --------- | ---- |
| `ok` | string |
| `date` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ok` | boolean | Success status |
| `result` | json | Message result |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Yes | Bot Token - Enter your Telegram Bot Token |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `ok` | boolean | ok output from the block |
| `result` | json | result output from the block |
## Notes
- Category: `tools`

View File

@@ -67,29 +67,12 @@ Processes a provided thought/instruction, making it available for subsequent ste
#### Output
| Parameter | Type |
| --------- | ---- |
| `acknowledgedThought` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `acknowledgedThought` | string | Acknowledged thought process |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `thought` | string | Yes | Thought Process / Instruction - Describe the step-by-step thinking process here... |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `acknowledgedThought` | string | acknowledgedThought output from the block |
## Notes
- Category: `tools`

View File

@@ -63,7 +63,11 @@ Convert text between languages while preserving meaning, nuance, and formatting.
#### Output
This tool does not produce any outputs.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Translated text |
| `model` | string | Model used |
| `tokens` | any | Token usage |
### `anthropic_chat`
@@ -77,29 +81,14 @@ This tool does not produce any outputs.
#### Output
This tool does not produce any outputs.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Translated text |
| `model` | string | Model used |
| `tokens` | any | Token usage |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `context` | string | Yes | Text to Translate - Enter the text you want to translate |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `model` | string | model output from the block |
| `tokens` | any | tokens output from the block |
## Notes
- Category: `tools`

View File

@@ -56,34 +56,15 @@ Send text messages to single or multiple recipients using the Twilio API.
#### Output
| Parameter | Type |
| --------- | ---- |
| `success` | string |
| `messageId` | string |
| `status` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Send success status |
| `messageId` | any | Message identifier |
| `status` | any | Delivery status |
| `error` | any | Error information |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `phoneNumbers` | string | Yes | Recipient Phone Numbers - Enter phone numbers with country code \(one per line, e.g., +1234567890\) |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `success` | boolean | success output from the block |
| `messageId` | any | messageId output from the block |
| `status` | any | status output from the block |
| `error` | any | error output from the block |
## Notes
- Category: `tools`

View File

@@ -70,14 +70,11 @@ Retrieve form responses from Typeform
#### Output
| Parameter | Type |
| --------- | ---- |
| `total_items` | string |
| `answers` | string |
| `type` | string |
| `hidden` | string |
| `calculated` | string |
| `variables` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `total_items` | number | Total response count |
| `page_count` | number | Total page count |
| `items` | json | Response items |
### `typeform_files`
@@ -96,11 +93,11 @@ Download files uploaded in Typeform responses
#### Output
| Parameter | Type |
| --------- | ---- |
| `fileUrl` | string |
| `contentType` | string |
| `filename` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `total_items` | number | Total response count |
| `page_count` | number | Total page count |
| `items` | json | Response items |
### `typeform_insights`
@@ -115,29 +112,14 @@ Retrieve insights and analytics for Typeform forms
#### Output
This tool does not produce any outputs.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `total_items` | number | Total response count |
| `page_count` | number | Total page count |
| `items` | json | Response items |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `total_items` | number | total_items output from the block |
| `page_count` | number | page_count output from the block |
| `items` | json | items output from the block |
## Notes
- Category: `tools`

View File

@@ -68,33 +68,14 @@ Process and analyze images using advanced vision models. Capable of understandin
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `model` | string |
| `tokens` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Analysis result |
| `model` | any | Model used |
| `tokens` | any | Token usage |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `content` | string | content output from the block |
| `model` | any | model output from the block |
| `tokens` | any | tokens output from the block |
## Notes
- Category: `tools`

View File

@@ -61,12 +61,16 @@ Read content from a Wealthbox note
#### Output
| Parameter | Type |
| --------- | ---- |
| `note` | string |
| `metadata` | string |
| `noteId` | string |
| `itemType` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `note` | any | Note data |
| `notes` | any | Notes list |
| `contact` | any | Contact data |
| `contacts` | any | Contacts list |
| `task` | any | Task data |
| `tasks` | any | Tasks list |
| `metadata` | json | Operation metadata |
| `success` | any | Success status |
### `wealthbox_write_note`
@@ -82,9 +86,16 @@ Create or update a Wealthbox note
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `note` | any | Note data |
| `notes` | any | Notes list |
| `contact` | any | Contact data |
| `contacts` | any | Contacts list |
| `task` | any | Task data |
| `tasks` | any | Tasks list |
| `metadata` | json | Operation metadata |
| `success` | any | Success status |
### `wealthbox_read_contact`
@@ -99,12 +110,16 @@ Read content from a Wealthbox contact
#### Output
| Parameter | Type |
| --------- | ---- |
| `contact` | string |
| `metadata` | string |
| `contactId` | string |
| `itemType` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `note` | any | Note data |
| `notes` | any | Notes list |
| `contact` | any | Contact data |
| `contacts` | any | Contacts list |
| `task` | any | Task data |
| `tasks` | any | Tasks list |
| `metadata` | json | Operation metadata |
| `success` | any | Success status |
### `wealthbox_write_contact`
@@ -122,11 +137,16 @@ Create a new Wealthbox contact
#### Output
| Parameter | Type |
| --------- | ---- |
| `contact` | string |
| `metadata` | string |
| `itemType` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `note` | any | Note data |
| `notes` | any | Notes list |
| `contact` | any | Contact data |
| `contacts` | any | Contacts list |
| `task` | any | Task data |
| `tasks` | any | Tasks list |
| `metadata` | json | Operation metadata |
| `success` | any | Success status |
### `wealthbox_read_task`
@@ -141,12 +161,16 @@ Read content from a Wealthbox task
#### Output
| Parameter | Type |
| --------- | ---- |
| `task` | string |
| `metadata` | string |
| `taskId` | string |
| `itemType` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `note` | any | Note data |
| `notes` | any | Notes list |
| `contact` | any | Contact data |
| `contacts` | any | Contacts list |
| `task` | any | Task data |
| `tasks` | any | Tasks list |
| `metadata` | json | Operation metadata |
| `success` | any | Success status |
### `wealthbox_write_task`
@@ -164,36 +188,19 @@ Create or update a Wealthbox task
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `note` | any | Note data |
| `notes` | any | Notes list |
| `contact` | any | Contact data |
| `contacts` | any | Contacts list |
| `task` | any | Task data |
| `tasks` | any | Tasks list |
| `metadata` | json | Operation metadata |
| `success` | any | Success status |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `note` | any | note output from the block |
| `notes` | any | notes output from the block |
| `contact` | any | contact output from the block |
| `contacts` | any | contacts output from the block |
| `task` | any | task output from the block |
| `tasks` | any | tasks output from the block |
| `metadata` | json | metadata output from the block |
| `success` | any | success output from the block |
## Notes
- Category: `tools`

View File

@@ -26,20 +26,6 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `webhookProvider` | dropdown | Yes | Webhook Provider |
### Outputs
This block does not produce any outputs.
## Notes
- Category: `triggers`

View File

@@ -58,32 +58,14 @@ Send WhatsApp messages
#### Output
| Parameter | Type |
| --------- | ---- |
| `success` | string |
| `messageId` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Send success status |
| `messageId` | any | Message identifier |
| `error` | any | Error information |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `phoneNumber` | string | Yes | Recipient Phone Number - Enter phone number with country code \(e.g., +1234567890\) |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `success` | boolean | success output from the block |
| `messageId` | any | messageId output from the block |
| `error` | any | error output from the block |
## Notes
- Category: `tools`

View File

@@ -72,20 +72,13 @@ Get a summary and metadata for a specific Wikipedia page.
#### Output
| Parameter | Type |
| --------- | ---- |
| `summary` | string |
| `title` | string |
| `displaytitle` | string |
| `description` | string |
| `extract` | string |
| `extract_html` | string |
| `thumbnail` | string |
| `originalimage` | string |
| `content_urls` | string |
| `revisions` | string |
| `edit` | string |
| `talk` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `summary` | json | Page summary data |
| `searchResults` | json | Search results data |
| `totalHits` | number | Total search hits |
| `content` | json | Page content data |
| `randomPage` | json | Random page data |
### `wikipedia_search`
@@ -100,11 +93,13 @@ Search for Wikipedia pages by title or content.
#### Output
| Parameter | Type |
| --------- | ---- |
| `totalHits` | string |
| `query` | string |
| `searchResults` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `summary` | json | Page summary data |
| `searchResults` | json | Search results data |
| `totalHits` | number | Total search hits |
| `content` | json | Page content data |
| `randomPage` | json | Random page data |
### `wikipedia_content`
@@ -118,16 +113,13 @@ Get the full HTML content of a Wikipedia page.
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `pageid` | string |
| `html` | string |
| `revision` | string |
| `tid` | string |
| `timestamp` | string |
| `content_model` | string |
| `content_format` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `summary` | json | Page summary data |
| `searchResults` | json | Search results data |
| `totalHits` | number | Total search hits |
| `content` | json | Page content data |
| `randomPage` | json | Random page data |
### `wikipedia_random`
@@ -140,39 +132,16 @@ Get a random Wikipedia page.
#### Output
| Parameter | Type |
| --------- | ---- |
| `randomPage` | string |
| `title` | string |
| `displaytitle` | string |
| `description` | string |
| `extract` | string |
| `thumbnail` | string |
| `content_urls` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `summary` | json | Page summary data |
| `searchResults` | json | Search results data |
| `totalHits` | number | Total search hits |
| `content` | json | Page content data |
| `randomPage` | json | Random page data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `summary` | json | summary output from the block |
| `searchResults` | json | searchResults output from the block |
| `totalHits` | number | totalHits output from the block |
| `content` | json | content output from the block |
| `randomPage` | json | randomPage output from the block |
## Notes
- Category: `tools`

View File

@@ -58,16 +58,16 @@ Post new tweets, reply to tweets, or create polls on X (Twitter)
#### Output
| Parameter | Type |
| --------- | ---- |
| `tweet` | string |
| `text` | string |
| `createdAt` | string |
| `authorId` | string |
| `conversationId` | string |
| `inReplyToUserId` | string |
| `attachments` | string |
| `pollId` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tweet` | json | Tweet data |
| `replies` | any | Tweet replies |
| `context` | any | Tweet context |
| `tweets` | json | Tweets data |
| `includes` | any | Additional data |
| `meta` | json | Response metadata |
| `user` | json | User profile data |
| `recentTweets` | any | Recent tweets data |
### `x_read`
@@ -83,10 +83,16 @@ Read tweet details, including replies and conversation context
#### Output
| Parameter | Type |
| --------- | ---- |
| `tweet` | string |
| `context` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tweet` | json | Tweet data |
| `replies` | any | Tweet replies |
| `context` | any | Tweet context |
| `tweets` | json | Tweets data |
| `includes` | any | Additional data |
| `meta` | json | Response metadata |
| `user` | json | User profile data |
| `recentTweets` | any | Recent tweets data |
### `x_search`
@@ -105,12 +111,16 @@ Search for tweets using keywords, hashtags, or advanced queries
#### Output
| Parameter | Type |
| --------- | ---- |
| `tweets` | string |
| `includes` | string |
| `media` | string |
| `polls` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tweet` | json | Tweet data |
| `replies` | any | Tweet replies |
| `context` | any | Tweet context |
| `tweets` | json | Tweets data |
| `includes` | any | Additional data |
| `meta` | json | Response metadata |
| `user` | json | User profile data |
| `recentTweets` | any | Recent tweets data |
### `x_user`
@@ -125,36 +135,19 @@ Get user profile information
#### Output
| Parameter | Type |
| --------- | ---- |
| `user` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tweet` | json | Tweet data |
| `replies` | any | Tweet replies |
| `context` | any | Tweet context |
| `tweets` | json | Tweets data |
| `includes` | any | Additional data |
| `meta` | json | Response metadata |
| `user` | json | User profile data |
| `recentTweets` | any | Recent tweets data |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `tweet` | json | tweet output from the block |
| `replies` | any | replies output from the block |
| `context` | any | context output from the block |
| `tweets` | json | tweets output from the block |
| `includes` | any | includes output from the block |
| `meta` | json | meta output from the block |
| `user` | json | user output from the block |
| `recentTweets` | any | recentTweets output from the block |
## Notes
- Category: `tools`

View File

@@ -60,32 +60,13 @@ Search for videos on YouTube using the YouTube Data API.
#### Output
| Parameter | Type |
| --------- | ---- |
| `totalResults` | string |
| `nextPageToken` | string |
| `items` | string |
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | json | The items returned by the YouTube search |
| `totalResults` | number | The total number of results returned by the YouTube search |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | YouTube API Key - Enter YouTube API Key |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `items` | json | items output from the block |
| `totalResults` | number | totalResults output from the block |
## Notes
- Category: `tools`

View File

@@ -470,7 +470,8 @@ export async function executeWorkflowForChat(
mergedStates,
edges,
loops,
parallels
parallels,
true // Enable validation during execution
)
// Decrypt environment variables

View File

@@ -2,7 +2,7 @@ import { NextResponse } from 'next/server'
import { isDev } from '@/lib/environment'
import { createLogger } from '@/lib/logs/console/logger'
import { executeTool } from '@/tools'
import { getTool, validateToolRequest } from '@/tools/utils'
import { getTool, validateRequiredParametersAfterMerge } from '@/tools/utils'
const logger = createLogger('ProxyAPI')
@@ -196,7 +196,7 @@ export async function POST(request: Request) {
// Validate the tool and its parameters
try {
validateToolRequest(toolId, tool, params)
validateRequiredParametersAfterMerge(toolId, tool, params)
} catch (validationError) {
logger.warn(`[${requestId}] Tool validation failed for ${toolId}`, {
error: validationError instanceof Error ? validationError.message : String(validationError),

View File

@@ -376,7 +376,8 @@ export async function GET() {
mergedStates,
edges,
loops,
parallels
parallels,
true // Enable validation during execution
)
const input = {

View File

@@ -281,7 +281,8 @@ async function executeWorkflow(workflow: any, requestId: string, input?: any): P
mergedStates,
edges,
loops,
parallels
parallels,
true // Enable validation during execution
)
const executor = new Executor(

View File

@@ -58,7 +58,7 @@
--muted-foreground: 0 0% 46.9%;
/* Accent Colors */
--accent: 0 0% 96.1%;
--accent: 0 0% 92.5%;
--accent-foreground: 0 0% 11.2%;
/* Destructive Colors */

View File

@@ -187,6 +187,10 @@ export function UploadModal({
disabled={isUploading}
knowledgeBaseId={knowledgeBaseId}
documentId={null} // No specific document for upload
onSave={async () => {
// For upload modal, tags are saved when document is uploaded
// This is a placeholder as tags will be applied during upload
}}
/>
{/* File Upload Section */}

View File

@@ -1,29 +1,23 @@
'use client'
import { useEffect, useRef, useState } from 'react'
import { useState } from 'react'
import { ChevronDown, Plus, X } from 'lucide-react'
import { Button } from '@/components/ui/button'
import {
Button,
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu'
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
formatDisplayText,
Input,
Label,
} from '@/components/ui'
import { MAX_TAG_SLOTS, TAG_SLOTS, type TagSlot } from '@/lib/constants/knowledge'
import { useKnowledgeBaseTagDefinitions } from '@/hooks/use-knowledge-base-tag-definitions'
import { type TagDefinitionInput, useTagDefinitions } from '@/hooks/use-tag-definitions'
export interface DocumentTag {
slot: TagSlot
slot: string
displayName: string
fieldType: string
value: string
@@ -31,21 +25,19 @@ export interface DocumentTag {
interface DocumentTagEntryProps {
tags: DocumentTag[]
onTagsChange: (tags: DocumentTag[]) => void
onTagsChange: (newTags: DocumentTag[]) => void
disabled?: boolean
knowledgeBaseId?: string | null
documentId?: string | null
onSave?: (tags: DocumentTag[]) => Promise<void>
knowledgeBaseId: string
documentId: string | null
onSave: (tagsToSave: DocumentTag[]) => Promise<void>
}
// TAG_SLOTS is now imported from constants
export function DocumentTagEntry({
tags,
onTagsChange,
disabled = false,
knowledgeBaseId = null,
documentId = null,
knowledgeBaseId,
documentId,
onSave,
}: DocumentTagEntryProps) {
const { saveTagDefinitions } = useTagDefinitions(knowledgeBaseId, documentId)
@@ -66,389 +58,232 @@ export function DocumentTagEntry({
return slot
}
}
return 'tag1' // fallback
return TAG_SLOTS[0] // Fallback to first slot if all are used
}
const handleSaveDefinitions = async (tagsToSave?: DocumentTag[]) => {
if (!knowledgeBaseId || !documentId) return
const currentTags = tagsToSave || tags
// Create definitions for tags that have display names
const definitions: TagDefinitionInput[] = currentTags
.filter((tag) => tag?.displayName?.trim())
.map((tag) => ({
tagSlot: tag.slot as TagSlot,
displayName: tag.displayName.trim(),
fieldType: tag.fieldType || 'text',
}))
// Only save if we have valid definitions
if (definitions.length > 0) {
await saveTagDefinitions(definitions)
}
}
const handleCleanupUnusedTags = async () => {
if (!knowledgeBaseId || !documentId) return
try {
const response = await fetch(
`/api/knowledge/${knowledgeBaseId}/documents/${documentId}/tag-definitions?action=cleanup`,
{
method: 'DELETE',
}
)
if (!response.ok) {
throw new Error(`Cleanup failed: ${response.statusText}`)
}
const result = await response.json()
console.log('Cleanup result:', result)
} catch (error) {
console.error('Failed to cleanup unused tags:', error)
}
}
// Get available tag names that aren't already used in this document
const availableTagNames = kbTagDefinitions
.map((tag) => tag.displayName)
.filter((tagName) => !tags.some((tag) => tag.displayName === tagName))
// Check if we can add more tags (KB has less than MAX_TAG_SLOTS tag definitions)
const canAddMoreTags = kbTagDefinitions.length < MAX_TAG_SLOTS
const handleSuggestionClick = (tagName: string) => {
setEditingTag({ index: -1, value: '', tagName, isNew: false })
}
const handleCreateNewTag = async (tagName: string, value: string, fieldType = 'text') => {
if (!tagName.trim() || !value.trim()) return
// Check if tag name already exists in current document
const tagNameLower = tagName.trim().toLowerCase()
const existingTag = tags.find((tag) => tag.displayName.toLowerCase() === tagNameLower)
if (existingTag) {
alert(`Tag "${tagName}" already exists. Please choose a different name.`)
return
}
const handleAddTag = () => {
if (tags.length >= MAX_TAG_SLOTS) return
const newTag: DocumentTag = {
slot: getNextAvailableSlot(),
displayName: tagName.trim(),
fieldType: fieldType,
value: value.trim(),
displayName: '',
fieldType: 'text',
value: '',
}
const updatedTags = [...tags, newTag]
// SIMPLE ATOMIC OPERATION - NO CLEANUP
try {
// 1. Save tag definition first
await handleSaveDefinitions(updatedTags)
// 2. Save document values
if (onSave) {
await onSave(updatedTags)
}
// 3. Update UI
onTagsChange(updatedTags)
} catch (error) {
console.error('Failed to save tag:', error)
alert(`Failed to save tag "${tagName}". Please try again.`)
}
// Set editing state for the new tag
setEditingTag({
index: updatedTags.length - 1,
value: '',
tagName: '',
isNew: true,
})
}
const handleUpdateTag = async (index: number, newValue: string) => {
if (!newValue.trim()) return
const handleRemoveTag = (index: number) => {
const updatedTags = tags.filter((_, i) => i !== index)
onTagsChange(updatedTags)
}
const updatedTags = tags.map((tag, i) =>
i === index ? { ...tag, value: newValue.trim() } : tag
const handleTagUpdate = (index: number, field: keyof DocumentTag, value: string) => {
const updatedTags = [...tags]
updatedTags[index] = { ...updatedTags[index], [field]: value }
onTagsChange(updatedTags)
}
const handleSaveTag = async (index: number, tagName: string) => {
if (!tagName.trim()) return
// Check if this is creating a new tag definition
const existingDefinition = kbTagDefinitions.find(
(def) => def.displayName.toLowerCase() === tagName.toLowerCase()
)
// SIMPLE ATOMIC OPERATION - NO CLEANUP
if (!existingDefinition) {
// Create new tag definition
const newDefinition: TagDefinitionInput = {
displayName: tagName,
fieldType: 'text',
tagSlot: tags[index].slot as TagSlot,
}
try {
// 1. Save document values
if (onSave) {
await onSave(updatedTags)
}
// 2. Save tag definitions
await handleSaveDefinitions(updatedTags)
// 3. Update UI
onTagsChange(updatedTags)
} catch (error) {
console.error('Failed to update tag:', error)
}
}
const handleRemoveTag = async (index: number) => {
const updatedTags = tags.filter((_, i) => i !== index)
console.log('Removing tag, updated tags:', updatedTags)
// FULLY SYNCHRONOUS - DO NOT UPDATE UI UNTIL ALL OPERATIONS COMPLETE
try {
// 1. Save the document tag values
console.log('Saving document values after tag removal...')
if (onSave) {
await onSave(updatedTags)
}
// 2. Save the tag definitions
console.log('Saving tag definitions after tag removal...')
await handleSaveDefinitions(updatedTags)
// 3. Run cleanup to remove unused tag definitions
console.log('Running cleanup to remove unused tag definitions...')
await handleCleanupUnusedTags()
// 4. ONLY NOW update the UI
onTagsChange(updatedTags)
// 5. Refresh tag definitions for dropdown
await saveTagDefinitions([newDefinition])
await refreshTagDefinitions()
} catch (error) {
console.error('Failed to remove tag:', error)
console.error('Failed to save tag definition:', error)
return
}
}
// Update the tag
handleTagUpdate(index, 'displayName', tagName)
setEditingTag(null)
}
const handleCancelEdit = () => {
if (editingTag?.isNew) {
// Remove the new tag if editing was cancelled
handleRemoveTag(editingTag.index)
}
setEditingTag(null)
}
const handleSaveAll = async () => {
try {
await onSave(tags)
} catch (error) {
console.error('Failed to save tags:', error)
}
}
// Filter available tag definitions (exclude already used ones)
const availableDefinitions = kbTagDefinitions.filter(
(def) => !tags.some((tag) => tag.displayName.toLowerCase() === def.displayName.toLowerCase())
)
return (
<div className='space-y-3'>
{/* Existing Tags as Chips */}
<div className='flex flex-wrap gap-2'>
<div className='space-y-4'>
<div className='flex items-center justify-between'>
<h3 className='font-medium text-sm'>Document Tags</h3>
<div className='flex items-center gap-2'>
<Button
variant='outline'
size='sm'
onClick={handleAddTag}
disabled={disabled || tags.length >= MAX_TAG_SLOTS}
>
<Plus className='mr-1 h-3 w-3' />
Add Tag
</Button>
<Button variant='default' size='sm' onClick={handleSaveAll} disabled={disabled}>
Save Tags
</Button>
</div>
</div>
{tags.length === 0 ? (
<div className='rounded-md border border-dashed p-4 text-center'>
<p className='text-muted-foreground text-sm'>No tags added yet</p>
</div>
) : (
<div className='space-y-2'>
{tags.map((tag, index) => (
<div
key={`${tag.slot}-${index}`}
className='inline-flex cursor-pointer items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm transition-colors hover:bg-gray-200'
<div key={index} className='flex items-center gap-2 rounded-md border p-3'>
<div className='flex-1'>
{editingTag?.index === index ? (
<div className='space-y-2'>
<div className='flex items-center gap-2'>
<Input
value={editingTag.tagName}
onChange={(e) => setEditingTag({ ...editingTag, tagName: e.target.value })}
placeholder='Tag name'
className='flex-1'
autoFocus
/>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant='outline' size='sm'>
Select Existing <ChevronDown className='ml-1 h-3 w-3' />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
{availableDefinitions.map((def) => (
<DropdownMenuItem
key={def.id}
onClick={() =>
setEditingTag({ index, value: tag.value, tagName: tag.displayName, isNew: false })
setEditingTag({ ...editingTag, tagName: def.displayName })
}
>
<span className='font-medium'>{tag.displayName}:</span>
<span className='text-muted-foreground'>{tag.value}</span>
{def.displayName}
</DropdownMenuItem>
))}
{availableDefinitions.length === 0 && (
<DropdownMenuItem disabled>No available tags</DropdownMenuItem>
)}
</DropdownMenuContent>
</DropdownMenu>
</div>
<div className='flex items-center gap-2'>
<Button
size='sm'
onClick={() => handleSaveTag(index, editingTag.tagName)}
disabled={!editingTag.tagName.trim()}
>
Save
</Button>
<Button variant='outline' size='sm' onClick={handleCancelEdit}>
Cancel
</Button>
</div>
</div>
) : (
<div className='space-y-2'>
<div className='flex items-center justify-between'>
<div>
<div className='font-medium text-sm'>
{tag.displayName || 'Unnamed Tag'}
</div>
<div className='text-muted-foreground text-xs'>
Slot: {tag.slot} Type: {tag.fieldType}
</div>
</div>
<Button
type='button'
variant='ghost'
size='sm'
onClick={(e) => {
e.stopPropagation()
handleRemoveTag(index)
}}
onClick={() =>
setEditingTag({
index,
value: tag.value,
tagName: tag.displayName,
isNew: false,
})
}
disabled={disabled}
className='ml-1 h-4 w-4 p-0 text-muted-foreground hover:text-red-600'
>
<X className='h-3 w-3' />
Edit Name
</Button>
</div>
<div className='flex items-center gap-2'>
<Label htmlFor={`tag-value-${index}`} className='text-xs'>
Value:
</Label>
<div className='relative flex-1'>
<Input
id={`tag-value-${index}`}
value={tag.value}
onChange={(e) => handleTagUpdate(index, 'value', e.target.value)}
placeholder='Enter tag value'
disabled={disabled}
className='w-full text-transparent caret-foreground'
/>
<div className='pointer-events-none absolute inset-0 flex items-center overflow-hidden bg-transparent px-3 text-sm'>
<div className='whitespace-pre'>{formatDisplayText(tag.value)}</div>
</div>
</div>
</div>
</div>
)}
</div>
<Button
variant='ghost'
size='sm'
onClick={() => handleRemoveTag(index)}
disabled={disabled}
className='text-red-600 hover:text-red-800'
>
<X className='h-4 w-4' />
</Button>
</div>
))}
</div>
{/* Add Tag Dropdown Selector */}
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
type='button'
variant='outline'
size='sm'
disabled={disabled || (!canAddMoreTags && availableTagNames.length === 0)}
className='gap-1 text-muted-foreground hover:text-foreground'
>
<Plus className='h-4 w-4' />
<span>Add Tag</span>
<ChevronDown className='h-3 w-3' />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align='start' className='w-48'>
{/* Existing tag names */}
{availableTagNames.length > 0 && (
<>
{availableTagNames.map((tagName) => {
const tagDefinition = kbTagDefinitions.find((def) => def.displayName === tagName)
return (
<DropdownMenuItem
key={tagName}
onClick={() => handleSuggestionClick(tagName)}
className='flex items-center justify-between'
>
<span>{tagName}</span>
<span className='text-muted-foreground text-xs'>
{tagDefinition?.fieldType || 'text'}
</span>
</DropdownMenuItem>
)
})}
<div className='my-1 h-px bg-border' />
</>
)}
{/* Create new tag option or disabled message */}
{canAddMoreTags ? (
<DropdownMenuItem
onClick={() => {
setEditingTag({ index: -1, value: '', tagName: '', isNew: true })
}}
className='flex items-center gap-2 text-blue-600'
>
<Plus className='h-4 w-4' />
<span>Create new tag</span>
</DropdownMenuItem>
) : (
<div className='px-2 py-1.5 text-muted-foreground text-sm'>
All {MAX_TAG_SLOTS} tag slots used in this knowledge base
</div>
)}
</DropdownMenuContent>
</DropdownMenu>
{/* Edit Tag Value Modal */}
{editingTag !== null && (
<EditTagModal
tagName={editingTag.tagName}
initialValue={editingTag.value}
isNew={editingTag.isNew}
existingType={
editingTag.isNew
? undefined
: kbTagDefinitions.find((t) => t.displayName === editingTag.tagName)?.fieldType
}
onSave={(value, type, newTagName) => {
if (editingTag.index === -1) {
// Creating new tag - use newTagName if provided, otherwise fall back to editingTag.tagName
const tagName = newTagName || editingTag.tagName
handleCreateNewTag(tagName, value, type)
} else {
// Updating existing tag
handleUpdateTag(editingTag.index, value)
}
setEditingTag(null)
}}
onCancel={() => {
setEditingTag(null)
}}
/>
)}
{/* Tag count display */}
{kbTagDefinitions.length > 0 && (
<div className='text-muted-foreground text-xs'>
{kbTagDefinitions.length} of {MAX_TAG_SLOTS} tag slots used in this knowledge base
</div>
)}
</div>
)
}
// Simple modal for editing tag values
interface EditTagModalProps {
tagName: string
initialValue: string
isNew: boolean
existingType?: string
onSave: (value: string, type?: string, newTagName?: string) => void
onCancel: () => void
}
function EditTagModal({
tagName,
initialValue,
isNew,
existingType,
onSave,
onCancel,
}: EditTagModalProps) {
const [value, setValue] = useState(initialValue)
const [fieldType, setFieldType] = useState(existingType || 'text')
const [newTagName, setNewTagName] = useState(tagName)
const inputRef = useRef<HTMLInputElement>(null)
useEffect(() => {
inputRef.current?.focus()
}, [])
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault()
if (value.trim() && (isNew ? newTagName.trim() : true)) {
onSave(value.trim(), fieldType, isNew ? newTagName.trim() : undefined)
}
}
const handleKeyDown = (e: React.KeyboardEvent) => {
if (e.key === 'Escape') {
onCancel()
}
}
return (
<div className='fixed inset-0 z-50 flex items-center justify-center bg-black/50'>
<div className='mx-4 w-96 max-w-sm rounded-lg bg-white p-4'>
<div className='mb-3 flex items-start justify-between'>
<h3 className='font-medium text-sm'>
{isNew ? 'Create new tag' : `Edit "${tagName}" value`}
</h3>
{/* Type Badge in Top Right */}
{!isNew && existingType && (
<span className='rounded bg-gray-100 px-2 py-1 font-medium text-gray-500 text-xs'>
{existingType.toUpperCase()}
</span>
)}
</div>
<form onSubmit={handleSubmit} className='space-y-3'>
{/* Tag Name Input for New Tags */}
{isNew && (
<div>
<Label className='font-medium text-muted-foreground text-xs'>Tag Name</Label>
<Input
value={newTagName}
onChange={(e) => setNewTagName(e.target.value)}
placeholder='Enter tag name'
className='mt-1 text-sm'
/>
</div>
)}
{/* Type Selection for New Tags */}
{isNew && (
<div>
<Label className='font-medium text-muted-foreground text-xs'>Type</Label>
<Select value={fieldType} onValueChange={setFieldType}>
<SelectTrigger className='mt-1 text-sm'>
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value='text'>Text</SelectItem>
</SelectContent>
</Select>
</div>
)}
{/* Value Input */}
<div>
<Label className='font-medium text-muted-foreground text-xs'>Value</Label>
<Input
ref={inputRef}
value={value}
onChange={(e) => setValue(e.target.value)}
onKeyDown={handleKeyDown}
placeholder='Enter tag value'
className='mt-1 text-sm'
/>
</div>
<div className='flex justify-end gap-2'>
<Button type='button' variant='outline' size='sm' onClick={onCancel}>
Cancel
</Button>
<Button
type='submit'
size='sm'
disabled={!value.trim() || (isNew && !newTagName.trim())}
>
{isNew ? 'Create' : 'Save'}
</Button>
</div>
</form>
{tags.length} of {MAX_TAG_SLOTS} tag slots used
</div>
</div>
)

View File

@@ -3,6 +3,7 @@
import { useMemo, useState } from 'react'
import { Plus, Trash2 } from 'lucide-react'
import { Button } from '@/components/ui/button'
import { formatDisplayText } from '@/components/ui/formatted-text'
import { Input } from '@/components/ui/input'
import {
Select,
@@ -11,11 +12,19 @@ import {
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown'
import { MAX_TAG_SLOTS } from '@/lib/constants/knowledge'
import { cn } from '@/lib/utils'
import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value'
import type { SubBlockConfig } from '@/blocks/types'
import { useKnowledgeBaseTagDefinitions } from '@/hooks/use-knowledge-base-tag-definitions'
import { useSubBlockValue } from '../../hooks/use-sub-block-value'
export interface DocumentTag {
slot: string
displayName: string
fieldType: string
value: string
}
interface DocumentTagRow {
id: string
@@ -55,6 +64,15 @@ export function DocumentTagEntry({
// State for dropdown visibility - one for each row
const [dropdownStates, setDropdownStates] = useState<Record<number, boolean>>({})
// State for managing tag dropdown
const [activeTagDropdown, setActiveTagDropdown] = useState<{
rowIndex: number
showTags: boolean
cursorPosition: number
activeSourceBlockId: string | null
element?: HTMLElement | null
} | null>(null)
// Use preview value when in preview mode, otherwise use store value
const currentValue = isPreview ? previewValue : storeValue
@@ -305,8 +323,6 @@ export function DocumentTagEntry({
</SelectTrigger>
<SelectContent>
<SelectItem value='text'>Text</SelectItem>
<SelectItem value='number'>Number</SelectItem>
<SelectItem value='date'>Date</SelectItem>
</SelectContent>
</Select>
</td>
@@ -318,11 +334,52 @@ export function DocumentTagEntry({
return (
<td className='p-1'>
<div className='relative w-full'>
<Input
value={cellValue}
onChange={(e) => handleCellChange(rowIndex, 'value', e.target.value)}
onChange={(e) => {
const newValue = e.target.value
const cursorPosition = e.target.selectionStart ?? 0
handleCellChange(rowIndex, 'value', newValue)
// Check for tag trigger
const tagTrigger = checkTagTrigger(newValue, cursorPosition)
setActiveTagDropdown({
rowIndex,
showTags: tagTrigger.show,
cursorPosition,
activeSourceBlockId: null,
element: e.target,
})
}}
onFocus={(e) => {
if (!disabled && !isConnecting) {
setActiveTagDropdown({
rowIndex,
showTags: false,
cursorPosition: 0,
activeSourceBlockId: null,
element: e.target,
})
}
}}
onBlur={() => {
setTimeout(() => setActiveTagDropdown(null), 200)
}}
onKeyDown={(e) => {
if (e.key === 'Escape') {
setActiveTagDropdown(null)
}
}}
disabled={disabled || isConnecting}
className='w-full border-0 text-transparent caret-foreground placeholder:text-muted-foreground/50 focus-visible:ring-0 focus-visible:ring-offset-0'
/>
<div className='pointer-events-none absolute inset-0 flex items-center overflow-hidden bg-transparent px-3 text-sm'>
<div className='whitespace-pre'>{formatDisplayText(cellValue)}</div>
</div>
</div>
</td>
)
}
@@ -379,16 +436,35 @@ export function DocumentTagEntry({
</table>
</div>
{/* Add Row Button */}
{/* Tag Dropdown */}
{activeTagDropdown?.element && (
<TagDropdown
visible={activeTagDropdown.showTags}
onSelect={(newValue) => {
handleCellChange(activeTagDropdown.rowIndex, 'value', newValue)
setActiveTagDropdown(null)
}}
blockId={blockId}
activeSourceBlockId={activeTagDropdown.activeSourceBlockId}
inputValue={rows[activeTagDropdown.rowIndex]?.cells.value || ''}
cursorPosition={activeTagDropdown.cursorPosition}
onClose={() => {
setActiveTagDropdown((prev) => (prev ? { ...prev, showTags: false } : null))
}}
className='absolute z-[9999] mt-0'
/>
)}
{/* Add Row Button and Tag slots usage indicator */}
{!isPreview && !disabled && (
<div className='mt-3 flex flex-col items-center gap-2'>
<div className='mt-3 flex items-center justify-between'>
<Button variant='outline' size='sm' onClick={handleAddRow} disabled={!canAddMoreTags}>
<Plus className='mr-1 h-3 w-3' />
Add Tag
</Button>
{/* Tag slots usage indicator */}
<div className='text-center text-muted-foreground text-xs'>
<div className='text-muted-foreground text-xs'>
{tagDefinitions.length + newTagsBeingCreated} of {MAX_TAG_SLOTS} tag slots used
</div>
</div>

View File

@@ -416,7 +416,9 @@ export function ToolInput({
const provider = model ? getProviderFromModel(model) : ''
const supportsToolControl = provider ? supportsToolUsageControl(provider) : false
const toolBlocks = getAllBlocks().filter((block) => block.category === 'tools')
const toolBlocks = getAllBlocks().filter(
(block) => block.category === 'tools' && block.type !== 'evaluator'
)
// Use preview value when in preview mode, otherwise use store value
const value = isPreview ? previewValue : storeValue
@@ -719,7 +721,21 @@ export function ToolInput({
// Initialize parameters for the new operation
const initialParams = initializeToolParams(newToolId, toolParams.userInputParameters, blockId)
// Clear fields when operation changes for Jira
// Preserve ALL existing parameters that also exist in the new tool configuration
// This mimics how regular blocks work - each field maintains its state independently
const oldToolParams = getToolParametersConfig(tool.toolId, tool.type)
const oldParamIds = new Set(oldToolParams?.userInputParameters.map((p) => p.id) || [])
const newParamIds = new Set(toolParams.userInputParameters.map((p) => p.id))
// Preserve any parameter that exists in both configurations and has a value
const preservedParams: Record<string, string> = {}
Object.entries(tool.params).forEach(([paramId, value]) => {
if (newParamIds.has(paramId) && value) {
preservedParams[paramId] = value
}
})
// Clear fields when operation changes for Jira (special case)
if (tool.type === 'jira') {
const subBlockStore = useSubBlockStore.getState()
// Clear all fields that might be shared between operations
@@ -737,7 +753,7 @@ export function ToolInput({
...tool,
toolId: newToolId,
operation,
params: initialParams, // Reset params when operation changes
params: { ...initialParams, ...preservedParams }, // Preserve all compatible existing values
}
: tool
)

View File

@@ -29,9 +29,7 @@ import {
ToolInput,
WebhookConfig,
} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components'
import { getBlock } from '@/blocks/index'
import type { SubBlockConfig } from '@/blocks/types'
import { useWorkflowStore } from '@/stores/workflows/workflow/store'
import { DocumentTagEntry } from './components/document-tag-entry/document-tag-entry'
import { KnowledgeTagFilter } from './components/knowledge-tag-filter/knowledge-tag-filter'
import { KnowledgeTagFilters } from './components/knowledge-tag-filters/knowledge-tag-filters'
@@ -64,13 +62,7 @@ export function SubBlock({
}
const isFieldRequired = () => {
const blockType = useWorkflowStore.getState().blocks[blockId]?.type
if (!blockType) return false
const blockConfig = getBlock(blockType)
if (!blockConfig) return false
return blockConfig.inputs[config.id]?.required === true
return config.required === true
}
// Get preview value for this specific sub-block

View File

@@ -705,9 +705,13 @@ export function WorkflowBlock({ id, data }: NodeProps<WorkflowBlockProps>) {
{Object.entries(config.outputs).map(([key, value]) => (
<div key={key} className='mb-1'>
<span className='text-muted-foreground'>{key}</span>{' '}
{typeof value === 'object' ? (
{typeof value === 'object' && value !== null && 'type' in value ? (
// New format: { type: 'string', description: '...' }
<span className='text-green-500'>{value.type}</span>
) : typeof value === 'object' && value !== null ? (
// Legacy complex object format
<div className='mt-1 pl-3'>
{Object.entries(value.type).map(([typeKey, typeValue]) => (
{Object.entries(value).map(([typeKey, typeValue]) => (
<div key={typeKey} className='flex items-start'>
<span className='font-medium text-blue-500'>
{typeKey}:
@@ -719,6 +723,7 @@ export function WorkflowBlock({ id, data }: NodeProps<WorkflowBlockProps>) {
))}
</div>
) : (
// Old format: just a string
<span className='text-green-500'>{value as string}</span>
)}
</div>

View File

@@ -500,7 +500,8 @@ export function useWorkflowExecution() {
filteredStates,
filteredEdges,
loops,
parallels
parallels,
true // Enable validation during execution
)
// Determine if this is a chat execution
@@ -587,6 +588,54 @@ export function useWorkflowExecution() {
setIsDebugging(false)
setActiveBlocks(new Set())
// Add the error to the console so users can see what went wrong
// This ensures serialization errors appear in the console just like execution errors
if (activeWorkflowId) {
const consoleStore = useConsoleStore.getState()
// Try to extract block information from the error message
// Serialization errors typically have format: "BlockName is missing required fields: FieldName"
let blockName = 'Workflow Execution'
let blockId = 'workflow-error'
let blockType = 'workflow'
const blockErrorMatch = errorMessage.match(/^(.+?)\s+is missing required fields/)
if (blockErrorMatch) {
const failedBlockName = blockErrorMatch[1]
blockName = failedBlockName
// Try to find the actual block in the current workflow to get its ID and type
const allBlocks = Object.values(blocks)
const failedBlock = allBlocks.find((block) => block.name === failedBlockName)
if (failedBlock) {
blockId = failedBlock.id
blockType = failedBlock.type
} else {
// Fallback: use the block name as ID if we can't find the actual block
blockId = failedBlockName.toLowerCase().replace(/\s+/g, '-')
blockType = 'unknown'
}
}
consoleStore.addConsole({
workflowId: activeWorkflowId,
blockId: blockId,
blockName: blockName,
blockType: blockType,
success: false,
error: errorMessage,
output: {},
startedAt: new Date().toISOString(),
endedAt: new Date().toISOString(),
durationMs: 0,
})
// Auto-open the console so users can see the error (only if it's not already open)
if (!consoleStore.isOpen) {
toggleConsole()
}
}
let notificationMessage = 'Workflow execution failed'
if (error?.request?.url) {
if (error.request.url && error.request.url.trim() !== '') {

View File

@@ -128,6 +128,7 @@ Write naturally and comprehensively based on what the user actually asks for.`,
type: 'combobox',
layout: 'half',
placeholder: 'Type or select a model...',
required: true,
options: () => {
const ollamaModels = useOllamaStore.getState().models
const baseModels = Object.keys(getBaseModelProviders())
@@ -191,6 +192,7 @@ Write naturally and comprehensively based on what the user actually asks for.`,
placeholder: 'Enter your API key',
password: true,
connectionDroppable: false,
required: true,
// Hide API key for all hosted models when running on hosted version
condition: isHosted
? {
@@ -401,18 +403,16 @@ Example 3 (Array Input):
},
},
inputs: {
systemPrompt: { type: 'string', required: false },
userPrompt: { type: 'string', required: false },
memories: { type: 'json', required: false },
model: { type: 'string', required: true },
apiKey: { type: 'string', required: true },
azureEndpoint: { type: 'string', required: false },
azureApiVersion: { type: 'string', required: false },
systemPrompt: { type: 'string', description: 'Initial system instructions' },
userPrompt: { type: 'string', description: 'User message or context' },
memories: { type: 'json', description: 'Agent memory data' },
model: { type: 'string', description: 'AI model to use' },
apiKey: { type: 'string', description: 'Provider API key' },
azureEndpoint: { type: 'string', description: 'Azure OpenAI endpoint URL' },
azureApiVersion: { type: 'string', description: 'Azure API version' },
responseFormat: {
type: 'json',
required: false,
description:
'Define the expected response format using JSON Schema. If not provided, returns plain text content.',
description: 'JSON response format schema',
schema: {
type: 'object',
properties: {
@@ -454,13 +454,13 @@ Example 3 (Array Input):
required: ['schema'],
},
},
temperature: { type: 'number', required: false },
tools: { type: 'json', required: false },
temperature: { type: 'number', description: 'Response randomness level' },
tools: { type: 'json', description: 'Available tools configuration' },
},
outputs: {
content: 'string',
model: 'string',
tokens: 'any',
toolCalls: 'any',
content: { type: 'string', description: 'Generated response content' },
model: { type: 'string', description: 'Model used for generation' },
tokens: { type: 'any', description: 'Token usage statistics' },
toolCalls: { type: 'any', description: 'Tool calls made' },
},
}

View File

@@ -26,6 +26,7 @@ export const AirtableBlock: BlockConfig<AirtableResponse> = {
{ label: 'Create Records', id: 'create' },
{ label: 'Update Record', id: 'update' },
],
value: () => 'list',
},
{
id: 'credential',
@@ -36,6 +37,7 @@ export const AirtableBlock: BlockConfig<AirtableResponse> = {
serviceId: 'airtable',
requiredScopes: ['data.records:read', 'data.records:write'], // Keep both scopes
placeholder: 'Select Airtable account',
required: true,
},
{
id: 'baseId',
@@ -43,6 +45,7 @@ export const AirtableBlock: BlockConfig<AirtableResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter your base ID (e.g., appXXXXXXXXXXXXXX)',
required: true,
},
{
id: 'tableId',
@@ -50,6 +53,7 @@ export const AirtableBlock: BlockConfig<AirtableResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter table ID (e.g., tblXXXXXXXXXXXXXX)',
required: true,
},
{
id: 'recordId',
@@ -58,6 +62,7 @@ export const AirtableBlock: BlockConfig<AirtableResponse> = {
layout: 'full',
placeholder: 'ID of the record (e.g., recXXXXXXXXXXXXXX)',
condition: { field: 'operation', value: ['get', 'update'] },
required: true,
},
{
id: 'maxRecords',
@@ -82,6 +87,7 @@ export const AirtableBlock: BlockConfig<AirtableResponse> = {
layout: 'full',
placeholder: 'For Create: `[{ "fields": { ... } }]`\n',
condition: { field: 'operation', value: ['create', 'updateMultiple'] },
required: true,
},
{
id: 'fields',
@@ -90,6 +96,7 @@ export const AirtableBlock: BlockConfig<AirtableResponse> = {
layout: 'full',
placeholder: 'Fields to update: `{ "Field Name": "New Value" }`',
condition: { field: 'operation', value: 'update' },
required: true,
},
],
tools: {
@@ -153,21 +160,21 @@ export const AirtableBlock: BlockConfig<AirtableResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
credential: { type: 'string', required: true },
baseId: { type: 'string', required: true },
tableId: { type: 'string', required: true },
operation: { type: 'string', description: 'Operation to perform' },
credential: { type: 'string', description: 'Airtable access token' },
baseId: { type: 'string', description: 'Airtable base identifier' },
tableId: { type: 'string', description: 'Airtable table identifier' },
// Conditional inputs
recordId: { type: 'string', required: true }, // Required for get/update
maxRecords: { type: 'number', required: false }, // Optional for list
filterFormula: { type: 'string', required: false }, // Optional for list
records: { type: 'json', required: false }, // Required for create/updateMultiple
fields: { type: 'json', required: false }, // Required for update single
recordId: { type: 'string', description: 'Record identifier' }, // Required for get/update
maxRecords: { type: 'number', description: 'Maximum records to return' }, // Optional for list
filterFormula: { type: 'string', description: 'Filter formula expression' }, // Optional for list
records: { type: 'json', description: 'Record data array' }, // Required for create/updateMultiple
fields: { type: 'json', description: 'Field data object' }, // Required for update single
},
// Output structure depends on the operation, covered by AirtableResponse union type
outputs: {
records: 'json', // Optional: for list, create, updateMultiple
record: 'json', // Optional: for get, update single
metadata: 'json', // Required: present in all responses
records: { type: 'json', description: 'Retrieved record data' }, // Optional: for list, create, updateMultiple
record: { type: 'json', description: 'Single record data' }, // Optional: for get, update single
metadata: { type: 'json', description: 'Operation metadata' }, // Required: present in all responses
},
}

View File

@@ -19,12 +19,14 @@ export const ApiBlock: BlockConfig<RequestResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter URL',
required: true,
},
{
id: 'method',
title: 'Method',
type: 'dropdown',
layout: 'half',
required: true,
options: [
{ label: 'GET', id: 'GET' },
{ label: 'POST', id: 'POST' },
@@ -85,15 +87,15 @@ Example:
access: ['http_request'],
},
inputs: {
url: { type: 'string', required: true },
method: { type: 'string', required: true },
headers: { type: 'json', required: false },
body: { type: 'json', required: false },
params: { type: 'json', required: false },
url: { type: 'string', description: 'Request URL' },
method: { type: 'string', description: 'HTTP method' },
headers: { type: 'json', description: 'Request headers' },
body: { type: 'json', description: 'Request body data' },
params: { type: 'json', description: 'URL query parameters' },
},
outputs: {
data: 'any',
status: 'number',
headers: 'json',
data: { type: 'any', description: 'Response data' },
status: { type: 'number', description: 'HTTP status code' },
headers: { type: 'json', description: 'Response headers' },
},
}

View File

@@ -27,12 +27,13 @@ export const ArxivBlock: BlockConfig<ArxivResponse> = {
},
// Search operation inputs
{
id: 'query',
id: 'searchQuery',
title: 'Search Query',
type: 'long-input',
layout: 'full',
placeholder: 'Enter search terms (e.g., "machine learning", "quantum physics")...',
condition: { field: 'operation', value: 'arxiv_search' },
required: true,
},
{
id: 'searchField',
@@ -93,6 +94,7 @@ export const ArxivBlock: BlockConfig<ArxivResponse> = {
layout: 'full',
placeholder: 'Enter ArXiv paper ID (e.g., 1706.03762, cs.AI/0001001)',
condition: { field: 'operation', value: 'arxiv_get_paper' },
required: true,
},
// Get Author Papers operation inputs
{
@@ -102,6 +104,7 @@ export const ArxivBlock: BlockConfig<ArxivResponse> = {
layout: 'full',
placeholder: 'Enter author name (e.g., "John Smith")...',
condition: { field: 'operation', value: 'arxiv_get_author_papers' },
required: true,
},
{
id: 'maxResults',
@@ -135,25 +138,25 @@ export const ArxivBlock: BlockConfig<ArxivResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
operation: { type: 'string', description: 'Operation to perform' },
// Search operation
query: { type: 'string', required: false },
searchField: { type: 'string', required: false },
maxResults: { type: 'number', required: false },
sortBy: { type: 'string', required: false },
sortOrder: { type: 'string', required: false },
searchQuery: { type: 'string', description: 'Search terms' },
searchField: { type: 'string', description: 'Field to search in' },
maxResults: { type: 'number', description: 'Maximum results to return' },
sortBy: { type: 'string', description: 'Sort results by' },
sortOrder: { type: 'string', description: 'Sort order direction' },
// Get Paper Details operation
paperId: { type: 'string', required: false },
paperId: { type: 'string', description: 'ArXiv paper identifier' },
// Get Author Papers operation
authorName: { type: 'string', required: false },
authorName: { type: 'string', description: 'Author name' },
},
outputs: {
// Search output
papers: 'json',
totalResults: 'number',
papers: { type: 'json', description: 'Found papers data' },
totalResults: { type: 'number', description: 'Total results count' },
// Get Paper Details output
paper: 'json',
paper: { type: 'json', description: 'Paper details' },
// Get Author Papers output
authorPapers: 'json',
authorPapers: { type: 'json', description: 'Author papers list' },
},
}

View File

@@ -19,6 +19,7 @@ export const BrowserUseBlock: BlockConfig<BrowserUseResponse> = {
type: 'long-input',
layout: 'full',
placeholder: 'Describe what the browser agent should do...',
required: true,
},
{
id: 'variables',
@@ -54,22 +55,23 @@ export const BrowserUseBlock: BlockConfig<BrowserUseResponse> = {
layout: 'full',
password: true,
placeholder: 'Enter your BrowserUse API key',
required: true,
},
],
tools: {
access: ['browser_use_run_task'],
},
inputs: {
task: { type: 'string', required: true },
apiKey: { type: 'string', required: true },
variables: { type: 'json', required: false },
model: { type: 'string', required: false },
save_browser_data: { type: 'boolean', required: false },
task: { type: 'string', description: 'Browser automation task' },
apiKey: { type: 'string', description: 'BrowserUse API key' },
variables: { type: 'json', description: 'Task variables' },
model: { type: 'string', description: 'AI model to use' },
save_browser_data: { type: 'boolean', description: 'Save browser data' },
},
outputs: {
id: 'string',
success: 'boolean',
output: 'any',
steps: 'json',
id: { type: 'string', description: 'Task execution identifier' },
success: { type: 'boolean', description: 'Task completion status' },
output: { type: 'any', description: 'Task output data' },
steps: { type: 'json', description: 'Execution steps taken' },
},
}

View File

@@ -19,6 +19,7 @@ export const ClayBlock: BlockConfig<ClayPopulateResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter Clay webhook URL',
required: true,
},
{
id: 'data',
@@ -26,6 +27,7 @@ export const ClayBlock: BlockConfig<ClayPopulateResponse> = {
type: 'long-input',
layout: 'full',
placeholder: 'Enter your JSON data to populate your Clay table',
required: true,
description: `JSON vs. Plain Text:
JSON: Best for populating multiple columns.
Plain Text: Best for populating a table in free-form style.
@@ -39,17 +41,18 @@ Plain Text: Best for populating a table in free-form style.
placeholder: 'Enter your Clay Auth token',
password: true,
connectionDroppable: false,
required: true,
},
],
tools: {
access: ['clay_populate'],
},
inputs: {
authToken: { type: 'string', required: true },
webhookURL: { type: 'string', required: true },
data: { type: 'json', required: true },
authToken: { type: 'string', description: 'Clay authentication token' },
webhookURL: { type: 'string', description: 'Clay webhook URL' },
data: { type: 'json', description: 'Data to populate' },
},
outputs: {
data: 'any',
data: { type: 'any', description: 'Response data' },
},
}

View File

@@ -37,9 +37,9 @@ export const ConditionBlock: BlockConfig<ConditionBlockOutput> = {
},
inputs: {},
outputs: {
content: 'string',
conditionResult: 'boolean',
selectedPath: 'json',
selectedConditionId: 'string',
content: { type: 'string', description: 'Condition evaluation content' },
conditionResult: { type: 'boolean', description: 'Condition result' },
selectedPath: { type: 'json', description: 'Selected execution path' },
selectedConditionId: { type: 'string', description: 'Selected condition identifier' },
},
}

View File

@@ -23,6 +23,7 @@ export const ConfluenceBlock: BlockConfig<ConfluenceResponse> = {
{ label: 'Read Page', id: 'read' },
{ label: 'Update Page', id: 'update' },
],
value: () => 'read',
},
{
id: 'domain',
@@ -30,6 +31,7 @@ export const ConfluenceBlock: BlockConfig<ConfluenceResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter Confluence domain (e.g., simstudio.atlassian.net)',
required: true,
},
{
id: 'credential',
@@ -45,6 +47,7 @@ export const ConfluenceBlock: BlockConfig<ConfluenceResponse> = {
'offline_access',
],
placeholder: 'Select Confluence account',
required: true,
},
// Page selector (basic mode)
{
@@ -116,20 +119,20 @@ export const ConfluenceBlock: BlockConfig<ConfluenceResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
domain: { type: 'string', required: true },
credential: { type: 'string', required: true },
pageId: { type: 'string', required: false },
manualPageId: { type: 'string', required: false },
operation: { type: 'string', description: 'Operation to perform' },
domain: { type: 'string', description: 'Confluence domain' },
credential: { type: 'string', description: 'Confluence access token' },
pageId: { type: 'string', description: 'Page identifier' },
manualPageId: { type: 'string', description: 'Manual page identifier' },
// Update operation inputs
title: { type: 'string', required: false },
content: { type: 'string', required: false },
title: { type: 'string', description: 'New page title' },
content: { type: 'string', description: 'New page content' },
},
outputs: {
ts: 'string',
pageId: 'string',
content: 'string',
title: 'string',
success: 'boolean',
ts: { type: 'string', description: 'Timestamp' },
pageId: { type: 'string', description: 'Page identifier' },
content: { type: 'string', description: 'Page content' },
title: { type: 'string', description: 'Page title' },
success: { type: 'boolean', description: 'Operation success status' },
},
}

View File

@@ -23,6 +23,7 @@ export const DiscordBlock: BlockConfig<DiscordResponse> = {
{ label: 'Get Server Information', id: 'discord_get_server' },
{ label: 'Get User Information', id: 'discord_get_user' },
],
value: () => 'discord_send_message',
},
{
id: 'botToken',
@@ -31,6 +32,7 @@ export const DiscordBlock: BlockConfig<DiscordResponse> = {
layout: 'full',
placeholder: 'Enter Discord bot token',
password: true,
required: true,
},
// Server selector (basic mode)
{
@@ -198,18 +200,18 @@ export const DiscordBlock: BlockConfig<DiscordResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
botToken: { type: 'string', required: true },
serverId: { type: 'string', required: false },
manualServerId: { type: 'string', required: false },
channelId: { type: 'string', required: false },
manualChannelId: { type: 'string', required: false },
content: { type: 'string', required: false },
limit: { type: 'number', required: false },
userId: { type: 'string', required: false },
operation: { type: 'string', description: 'Operation to perform' },
botToken: { type: 'string', description: 'Discord bot token' },
serverId: { type: 'string', description: 'Discord server identifier' },
manualServerId: { type: 'string', description: 'Manual server identifier' },
channelId: { type: 'string', description: 'Discord channel identifier' },
manualChannelId: { type: 'string', description: 'Manual channel identifier' },
content: { type: 'string', description: 'Message content' },
limit: { type: 'number', description: 'Message limit' },
userId: { type: 'string', description: 'Discord user identifier' },
},
outputs: {
message: 'string',
data: 'any',
message: { type: 'string', description: 'Message content' },
data: { type: 'any', description: 'Response data' },
},
}

View File

@@ -12,30 +12,6 @@ export const ElevenLabsBlock: BlockConfig<ElevenLabsBlockResponse> = {
bgColor: '#181C1E',
icon: ElevenLabsIcon,
tools: {
access: ['elevenlabs_tts'],
config: {
tool: () => 'elevenlabs_tts',
params: (params) => ({
apiKey: params.apiKey,
text: params.text,
voiceId: params.voiceId,
modelId: params.modelId,
}),
},
},
inputs: {
text: { type: 'string', required: true },
voiceId: { type: 'string', required: true },
modelId: { type: 'string', required: false },
apiKey: { type: 'string', required: true },
},
outputs: {
audioUrl: 'string',
},
subBlocks: [
{
id: 'text',
@@ -43,6 +19,7 @@ export const ElevenLabsBlock: BlockConfig<ElevenLabsBlockResponse> = {
type: 'long-input',
layout: 'full',
placeholder: 'Enter the text to convert to speech',
required: true,
},
{
id: 'voiceId',
@@ -50,6 +27,7 @@ export const ElevenLabsBlock: BlockConfig<ElevenLabsBlockResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter the voice ID',
required: true,
},
{
id: 'modelId',
@@ -71,6 +49,31 @@ export const ElevenLabsBlock: BlockConfig<ElevenLabsBlockResponse> = {
layout: 'full',
placeholder: 'Enter your ElevenLabs API key',
password: true,
required: true,
},
],
tools: {
access: ['elevenlabs_tts'],
config: {
tool: () => 'elevenlabs_tts',
params: (params) => ({
apiKey: params.apiKey,
text: params.text,
voiceId: params.voiceId,
modelId: params.modelId,
}),
},
},
inputs: {
text: { type: 'string', description: 'Text to convert' },
voiceId: { type: 'string', description: 'Voice identifier' },
modelId: { type: 'string', description: 'Model identifier' },
apiKey: { type: 'string', description: 'ElevenLabs API key' },
},
outputs: {
audioUrl: { type: 'string', description: 'Generated audio URL' },
},
}

View File

@@ -160,6 +160,7 @@ export const EvaluatorBlock: BlockConfig<EvaluatorResponse> = {
title: 'Evaluation Metrics',
type: 'eval-input',
layout: 'full',
required: true,
},
{
id: 'content',
@@ -167,12 +168,14 @@ export const EvaluatorBlock: BlockConfig<EvaluatorResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter the content to evaluate',
required: true,
},
{
id: 'model',
title: 'Model',
type: 'dropdown',
layout: 'half',
required: true,
options: () => {
const ollamaModels = useOllamaStore.getState().models
const baseModels = Object.keys(getBaseModelProviders())
@@ -190,6 +193,7 @@ export const EvaluatorBlock: BlockConfig<EvaluatorResponse> = {
placeholder: 'Enter your API key',
password: true,
connectionDroppable: false,
required: true,
condition: isHosted
? {
field: 'model',
@@ -270,8 +274,7 @@ export const EvaluatorBlock: BlockConfig<EvaluatorResponse> = {
inputs: {
metrics: {
type: 'json' as ParamType,
required: true,
description: 'Array of metrics to evaluate against',
description: 'Evaluation metrics configuration',
schema: {
type: 'array',
properties: {},
@@ -305,14 +308,14 @@ export const EvaluatorBlock: BlockConfig<EvaluatorResponse> = {
},
},
},
model: { type: 'string' as ParamType, required: true },
apiKey: { type: 'string' as ParamType, required: true },
content: { type: 'string' as ParamType, required: true },
model: { type: 'string' as ParamType, description: 'AI model to use' },
apiKey: { type: 'string' as ParamType, description: 'Provider API key' },
content: { type: 'string' as ParamType, description: 'Content to evaluate' },
},
outputs: {
content: 'string',
model: 'string',
tokens: 'any',
cost: 'any',
content: { type: 'string', description: 'Evaluation results' },
model: { type: 'string', description: 'Model used' },
tokens: { type: 'any', description: 'Token usage' },
cost: { type: 'any', description: 'Cost information' },
} as any,
}

View File

@@ -35,6 +35,7 @@ export const ExaBlock: BlockConfig<ExaResponse> = {
layout: 'full',
placeholder: 'Enter your search query...',
condition: { field: 'operation', value: 'exa_search' },
required: true,
},
{
id: 'numResults',
@@ -60,7 +61,7 @@ export const ExaBlock: BlockConfig<ExaResponse> = {
{ label: 'Auto', id: 'auto' },
{ label: 'Neural', id: 'neural' },
{ label: 'Keyword', id: 'keyword' },
{ label: 'Magic', id: 'magic' },
{ label: 'Fast', id: 'fast' },
],
value: () => 'auto',
condition: { field: 'operation', value: 'exa_search' },
@@ -73,6 +74,7 @@ export const ExaBlock: BlockConfig<ExaResponse> = {
layout: 'full',
placeholder: 'Enter URLs to retrieve content from (comma-separated)...',
condition: { field: 'operation', value: 'exa_get_contents' },
required: true,
},
{
id: 'text',
@@ -97,6 +99,7 @@ export const ExaBlock: BlockConfig<ExaResponse> = {
layout: 'full',
placeholder: 'Enter URL to find similar links for...',
condition: { field: 'operation', value: 'exa_find_similar_links' },
required: true,
},
{
id: 'numResults',
@@ -121,6 +124,7 @@ export const ExaBlock: BlockConfig<ExaResponse> = {
layout: 'full',
placeholder: 'Enter your question...',
condition: { field: 'operation', value: 'exa_answer' },
required: true,
},
{
id: 'text',
@@ -137,6 +141,7 @@ export const ExaBlock: BlockConfig<ExaResponse> = {
layout: 'full',
placeholder: 'Enter your research topic or question...',
condition: { field: 'operation', value: 'exa_research' },
required: true,
},
{
id: 'includeText',
@@ -153,6 +158,7 @@ export const ExaBlock: BlockConfig<ExaResponse> = {
layout: 'full',
placeholder: 'Enter your Exa API key',
password: true,
required: true,
},
],
tools: {
@@ -188,29 +194,29 @@ export const ExaBlock: BlockConfig<ExaResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
apiKey: { type: 'string', required: true },
operation: { type: 'string', description: 'Operation to perform' },
apiKey: { type: 'string', description: 'Exa API key' },
// Search operation
query: { type: 'string', required: false },
numResults: { type: 'number', required: false },
useAutoprompt: { type: 'boolean', required: false },
type: { type: 'string', required: false },
query: { type: 'string', description: 'Search query terms' },
numResults: { type: 'number', description: 'Number of results' },
useAutoprompt: { type: 'boolean', description: 'Use autoprompt feature' },
type: { type: 'string', description: 'Search type' },
// Get Contents operation
urls: { type: 'string', required: false },
text: { type: 'boolean', required: false },
summaryQuery: { type: 'string', required: false },
urls: { type: 'string', description: 'URLs to retrieve' },
text: { type: 'boolean', description: 'Include text content' },
summaryQuery: { type: 'string', description: 'Summary query guidance' },
// Find Similar Links operation
url: { type: 'string', required: false },
url: { type: 'string', description: 'Source URL' },
},
outputs: {
// Search output
results: 'json',
results: { type: 'json', description: 'Search results' },
// Find Similar Links output
similarLinks: 'json',
similarLinks: { type: 'json', description: 'Similar links found' },
// Answer output
answer: 'string',
citations: 'json',
answer: { type: 'string', description: 'Generated answer' },
citations: { type: 'json', description: 'Answer citations' },
// Research output
research: 'json',
research: { type: 'json', description: 'Research findings' },
},
}

View File

@@ -122,16 +122,16 @@ export const FileBlock: BlockConfig<FileParserOutput> = {
// Conditionally require inputMethod and filePath only if URL input is enabled
...(shouldEnableURLInput
? {
inputMethod: { type: 'string', required: false }, // Not strictly required as it defaults
filePath: { type: 'string', required: false }, // Required only if inputMethod is 'url' (validated in params)
inputMethod: { type: 'string', description: 'Input method selection' }, // Not strictly required as it defaults
filePath: { type: 'string', description: 'File URL path' }, // Required only if inputMethod is 'url' (validated in params)
}
: {}),
fileType: { type: 'string', required: false },
fileType: { type: 'string', description: 'File type' },
// File input is always potentially needed, but only required if method is 'upload' (validated in params)
file: { type: 'json', required: false },
file: { type: 'json', description: 'Uploaded file data' },
},
outputs: {
files: 'json',
combinedContent: 'string',
files: { type: 'json', description: 'Parsed file data' },
combinedContent: { type: 'string', description: 'Combined file content' },
},
}

View File

@@ -35,6 +35,7 @@ export const FirecrawlBlock: BlockConfig<FirecrawlResponse> = {
field: 'operation',
value: ['scrape', 'crawl'],
},
required: true,
},
{
id: 'onlyMainContent',
@@ -67,6 +68,7 @@ export const FirecrawlBlock: BlockConfig<FirecrawlResponse> = {
field: 'operation',
value: 'search',
},
required: true,
},
{
id: 'apiKey',
@@ -75,6 +77,7 @@ export const FirecrawlBlock: BlockConfig<FirecrawlResponse> = {
layout: 'full',
placeholder: 'Enter your Firecrawl API key',
password: true,
required: true,
},
],
tools: {
@@ -108,24 +111,24 @@ export const FirecrawlBlock: BlockConfig<FirecrawlResponse> = {
},
},
inputs: {
apiKey: { type: 'string', required: true },
operation: { type: 'string', required: true },
url: { type: 'string', required: false },
limit: { type: 'string', required: false },
query: { type: 'string', required: false },
scrapeOptions: { type: 'json', required: false },
apiKey: { type: 'string', description: 'Firecrawl API key' },
operation: { type: 'string', description: 'Operation to perform' },
url: { type: 'string', description: 'Target website URL' },
limit: { type: 'string', description: 'Page crawl limit' },
query: { type: 'string', description: 'Search query terms' },
scrapeOptions: { type: 'json', description: 'Scraping options' },
},
outputs: {
// Scrape output
markdown: 'string',
html: 'any',
metadata: 'json',
markdown: { type: 'string', description: 'Page content markdown' },
html: { type: 'any', description: 'Raw HTML content' },
metadata: { type: 'json', description: 'Page metadata' },
// Search output
data: 'json',
warning: 'any',
data: { type: 'json', description: 'Search results data' },
warning: { type: 'any', description: 'Warning messages' },
// Crawl output
pages: 'json',
total: 'number',
creditsUsed: 'number',
pages: { type: 'json', description: 'Crawled pages data' },
total: { type: 'number', description: 'Total pages found' },
creditsUsed: { type: 'number', description: 'Credits consumed' },
},
}

View File

@@ -76,11 +76,11 @@ try {
access: ['function_execute'],
},
inputs: {
code: { type: 'string', required: false },
timeout: { type: 'number', required: false },
code: { type: 'string', description: 'JavaScript/TypeScript code to execute' },
timeout: { type: 'number', description: 'Execution timeout' },
},
outputs: {
result: 'any',
stdout: 'string',
result: { type: 'any', description: 'Execution result' },
stdout: { type: 'string', description: 'Console output' },
},
}

View File

@@ -32,6 +32,7 @@ export const GitHubBlock: BlockConfig<GitHubResponse> = {
type: 'short-input',
layout: 'half',
placeholder: 'e.g., microsoft',
required: true,
},
{
id: 'repo',
@@ -39,6 +40,7 @@ export const GitHubBlock: BlockConfig<GitHubResponse> = {
type: 'short-input',
layout: 'half',
placeholder: 'e.g., vscode',
required: true,
},
{
id: 'pullNumber',
@@ -47,6 +49,7 @@ export const GitHubBlock: BlockConfig<GitHubResponse> = {
layout: 'half',
placeholder: 'e.g., 123',
condition: { field: 'operation', value: 'github_pr' },
required: true,
},
{
id: 'body',
@@ -55,6 +58,7 @@ export const GitHubBlock: BlockConfig<GitHubResponse> = {
layout: 'full',
placeholder: 'Enter comment text',
condition: { field: 'operation', value: 'github_comment' },
required: true,
},
{
id: 'pullNumber',
@@ -63,6 +67,7 @@ export const GitHubBlock: BlockConfig<GitHubResponse> = {
layout: 'half',
placeholder: 'e.g., 123',
condition: { field: 'operation', value: 'github_comment' },
required: true,
},
{
id: 'branch',
@@ -79,6 +84,7 @@ export const GitHubBlock: BlockConfig<GitHubResponse> = {
layout: 'full',
placeholder: 'Enter GitHub Token',
password: true,
required: true,
},
{
id: 'commentType',
@@ -142,21 +148,21 @@ export const GitHubBlock: BlockConfig<GitHubResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
owner: { type: 'string', required: true },
repo: { type: 'string', required: true },
pullNumber: { type: 'number', required: false },
body: { type: 'string', required: false },
apiKey: { type: 'string', required: true },
commentType: { type: 'string', required: false },
path: { type: 'string', required: false },
line: { type: 'number', required: false },
side: { type: 'string', required: false },
commitId: { type: 'string', required: false },
branch: { type: 'string', required: false },
operation: { type: 'string', description: 'Operation to perform' },
owner: { type: 'string', description: 'Repository owner' },
repo: { type: 'string', description: 'Repository name' },
pullNumber: { type: 'number', description: 'Pull request number' },
body: { type: 'string', description: 'Comment text' },
apiKey: { type: 'string', description: 'GitHub access token' },
commentType: { type: 'string', description: 'Comment type' },
path: { type: 'string', description: 'File path' },
line: { type: 'number', description: 'Line number' },
side: { type: 'string', description: 'Comment side' },
commitId: { type: 'string', description: 'Commit identifier' },
branch: { type: 'string', description: 'Branch name' },
},
outputs: {
content: 'string',
metadata: 'json',
content: { type: 'string', description: 'Response content' },
metadata: { type: 'json', description: 'Response metadata' },
},
}

View File

@@ -25,6 +25,7 @@ export const GmailBlock: BlockConfig<GmailToolResponse> = {
{ label: 'Draft Email', id: 'draft_gmail' },
{ label: 'Search Email', id: 'search_gmail' },
],
value: () => 'send_gmail',
},
// Gmail Credentials
{
@@ -41,6 +42,7 @@ export const GmailBlock: BlockConfig<GmailToolResponse> = {
'https://www.googleapis.com/auth/gmail.labels',
],
placeholder: 'Select Gmail account',
required: true,
},
// Send Email Fields
{
@@ -50,6 +52,7 @@ export const GmailBlock: BlockConfig<GmailToolResponse> = {
layout: 'full',
placeholder: 'Recipient email address',
condition: { field: 'operation', value: ['send_gmail', 'draft_gmail'] },
required: true,
},
{
id: 'subject',
@@ -58,6 +61,7 @@ export const GmailBlock: BlockConfig<GmailToolResponse> = {
layout: 'full',
placeholder: 'Email subject',
condition: { field: 'operation', value: ['send_gmail', 'draft_gmail'] },
required: true,
},
{
id: 'body',
@@ -66,6 +70,7 @@ export const GmailBlock: BlockConfig<GmailToolResponse> = {
layout: 'full',
placeholder: 'Email content',
condition: { field: 'operation', value: ['send_gmail', 'draft_gmail'] },
required: true,
},
// Label/folder selector (basic mode)
{
@@ -123,6 +128,7 @@ export const GmailBlock: BlockConfig<GmailToolResponse> = {
layout: 'full',
placeholder: 'Enter search terms',
condition: { field: 'operation', value: 'search_gmail' },
required: true,
},
{
id: 'maxResults',
@@ -170,23 +176,23 @@ export const GmailBlock: BlockConfig<GmailToolResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
credential: { type: 'string', required: true },
operation: { type: 'string', description: 'Operation to perform' },
credential: { type: 'string', description: 'Gmail access token' },
// Send operation inputs
to: { type: 'string', required: false },
subject: { type: 'string', required: false },
body: { type: 'string', required: false },
to: { type: 'string', description: 'Recipient email address' },
subject: { type: 'string', description: 'Email subject' },
body: { type: 'string', description: 'Email content' },
// Read operation inputs
folder: { type: 'string', required: false },
manualFolder: { type: 'string', required: false },
messageId: { type: 'string', required: false },
unreadOnly: { type: 'boolean', required: false },
folder: { type: 'string', description: 'Gmail folder' },
manualFolder: { type: 'string', description: 'Manual folder name' },
messageId: { type: 'string', description: 'Message identifier' },
unreadOnly: { type: 'boolean', description: 'Unread messages only' },
// Search operation inputs
query: { type: 'string', required: false },
maxResults: { type: 'number', required: false },
query: { type: 'string', description: 'Search query' },
maxResults: { type: 'number', description: 'Maximum results' },
},
outputs: {
content: 'string',
metadata: 'json',
content: { type: 'string', description: 'Response content' },
metadata: { type: 'json', description: 'Email metadata' },
},
}

View File

@@ -20,6 +20,7 @@ export const GoogleSearchBlock: BlockConfig<GoogleSearchResponse> = {
type: 'long-input',
layout: 'full',
placeholder: 'Enter your search query',
required: true,
},
{
id: 'searchEngineId',
@@ -27,7 +28,7 @@ export const GoogleSearchBlock: BlockConfig<GoogleSearchResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter your Custom Search Engine ID',
description: 'Required Custom Search Engine ID',
required: true,
},
{
id: 'apiKey',
@@ -35,8 +36,8 @@ export const GoogleSearchBlock: BlockConfig<GoogleSearchResponse> = {
type: 'short-input',
layout: 'full',
placeholder: 'Enter your Google API key',
description: 'Required API Key for Google Search',
password: true,
required: true,
},
{
id: 'num',
@@ -44,7 +45,7 @@ export const GoogleSearchBlock: BlockConfig<GoogleSearchResponse> = {
type: 'short-input',
layout: 'half',
placeholder: '10',
description: 'Number of search results to return (max: 10)',
required: true,
},
],
@@ -62,14 +63,14 @@ export const GoogleSearchBlock: BlockConfig<GoogleSearchResponse> = {
},
inputs: {
query: { type: 'string', required: true },
apiKey: { type: 'string', required: true },
searchEngineId: { type: 'string', required: true },
num: { type: 'string', required: false },
query: { type: 'string', description: 'Search query terms' },
apiKey: { type: 'string', description: 'Google API key' },
searchEngineId: { type: 'string', description: 'Custom search engine ID' },
num: { type: 'string', description: 'Number of results' },
},
outputs: {
items: 'json',
searchInformation: 'json',
items: { type: 'json', description: 'Search result items' },
searchInformation: { type: 'json', description: 'Search metadata' },
},
}

View File

@@ -25,12 +25,14 @@ export const GoogleCalendarBlock: BlockConfig<GoogleCalendarResponse> = {
{ label: 'Quick Add (Natural Language)', id: 'quick_add' },
{ label: 'Invite Attendees', id: 'invite' },
],
value: () => 'create',
},
{
id: 'credential',
title: 'Google Calendar Account',
type: 'oauth-input',
layout: 'full',
required: true,
provider: 'google-calendar',
serviceId: 'google-calendar',
requiredScopes: ['https://www.googleapis.com/auth/calendar'],
@@ -66,6 +68,7 @@ export const GoogleCalendarBlock: BlockConfig<GoogleCalendarResponse> = {
layout: 'full',
placeholder: 'Meeting with team',
condition: { field: 'operation', value: 'create' },
required: true,
},
{
id: 'description',
@@ -90,6 +93,7 @@ export const GoogleCalendarBlock: BlockConfig<GoogleCalendarResponse> = {
layout: 'half',
placeholder: '2025-06-03T10:00:00-08:00',
condition: { field: 'operation', value: 'create' },
required: true,
},
{
id: 'endDateTime',
@@ -98,6 +102,7 @@ export const GoogleCalendarBlock: BlockConfig<GoogleCalendarResponse> = {
layout: 'half',
placeholder: '2025-06-03T11:00:00-08:00',
condition: { field: 'operation', value: 'create' },
required: true,
},
{
id: 'attendees',
@@ -134,6 +139,7 @@ export const GoogleCalendarBlock: BlockConfig<GoogleCalendarResponse> = {
layout: 'full',
placeholder: 'Event ID',
condition: { field: 'operation', value: ['get', 'invite'] },
required: true,
},
// Invite Attendees Fields
@@ -165,6 +171,7 @@ export const GoogleCalendarBlock: BlockConfig<GoogleCalendarResponse> = {
layout: 'full',
placeholder: 'Meeting with John tomorrow at 3pm for 1 hour',
condition: { field: 'operation', value: 'quick_add' },
required: true,
},
{
id: 'attendees',
@@ -173,6 +180,7 @@ export const GoogleCalendarBlock: BlockConfig<GoogleCalendarResponse> = {
layout: 'full',
placeholder: 'john@example.com, jane@example.com',
condition: { field: 'operation', value: 'quick_add' },
required: true,
},
// Notification setting (for create, quick_add, invite)
@@ -267,37 +275,37 @@ export const GoogleCalendarBlock: BlockConfig<GoogleCalendarResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
credential: { type: 'string', required: true },
calendarId: { type: 'string', required: false },
manualCalendarId: { type: 'string', required: false },
operation: { type: 'string', description: 'Operation to perform' },
credential: { type: 'string', description: 'Google Calendar access token' },
calendarId: { type: 'string', description: 'Calendar identifier' },
manualCalendarId: { type: 'string', description: 'Manual calendar identifier' },
// Create operation inputs
summary: { type: 'string', required: false },
description: { type: 'string', required: false },
location: { type: 'string', required: false },
startDateTime: { type: 'string', required: false },
endDateTime: { type: 'string', required: false },
attendees: { type: 'string', required: false },
summary: { type: 'string', description: 'Event title' },
description: { type: 'string', description: 'Event description' },
location: { type: 'string', description: 'Event location' },
startDateTime: { type: 'string', description: 'Event start time' },
endDateTime: { type: 'string', description: 'Event end time' },
attendees: { type: 'string', description: 'Attendee email list' },
// List operation inputs
timeMin: { type: 'string', required: false },
timeMax: { type: 'string', required: false },
timeMin: { type: 'string', description: 'Start time filter' },
timeMax: { type: 'string', description: 'End time filter' },
// Get/Invite operation inputs
eventId: { type: 'string', required: false },
eventId: { type: 'string', description: 'Event identifier' },
// Quick add inputs
text: { type: 'string', required: false },
text: { type: 'string', description: 'Natural language event' },
// Invite specific inputs
replaceExisting: { type: 'string', required: false },
replaceExisting: { type: 'string', description: 'Replace existing attendees' },
// Common inputs
sendUpdates: { type: 'string', required: false },
sendUpdates: { type: 'string', description: 'Send email notifications' },
},
outputs: {
content: 'string',
metadata: 'json',
content: { type: 'string', description: 'Operation response content' },
metadata: { type: 'json', description: 'Event metadata' },
},
}

View File

@@ -24,6 +24,7 @@ export const GoogleDocsBlock: BlockConfig<GoogleDocsResponse> = {
{ label: 'Write to Document', id: 'write' },
{ label: 'Create Document', id: 'create' },
],
value: () => 'read',
},
// Google Docs Credentials
{
@@ -31,6 +32,7 @@ export const GoogleDocsBlock: BlockConfig<GoogleDocsResponse> = {
title: 'Google Account',
type: 'oauth-input',
layout: 'full',
required: true,
provider: 'google-docs',
serviceId: 'google-docs',
requiredScopes: ['https://www.googleapis.com/auth/drive.file'],
@@ -68,6 +70,7 @@ export const GoogleDocsBlock: BlockConfig<GoogleDocsResponse> = {
layout: 'full',
placeholder: 'Enter title for the new document',
condition: { field: 'operation', value: 'create' },
required: true,
},
// Folder selector (basic mode)
{
@@ -101,6 +104,7 @@ export const GoogleDocsBlock: BlockConfig<GoogleDocsResponse> = {
layout: 'full',
placeholder: 'Enter document content',
condition: { field: 'operation', value: 'write' },
required: true,
},
// Content Field for create operation
{
@@ -144,18 +148,18 @@ export const GoogleDocsBlock: BlockConfig<GoogleDocsResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
credential: { type: 'string', required: true },
documentId: { type: 'string', required: false },
manualDocumentId: { type: 'string', required: false },
title: { type: 'string', required: false },
folderSelector: { type: 'string', required: false },
folderId: { type: 'string', required: false },
content: { type: 'string', required: false },
operation: { type: 'string', description: 'Operation to perform' },
credential: { type: 'string', description: 'Google Docs access token' },
documentId: { type: 'string', description: 'Document identifier' },
manualDocumentId: { type: 'string', description: 'Manual document identifier' },
title: { type: 'string', description: 'Document title' },
folderSelector: { type: 'string', description: 'Selected folder' },
folderId: { type: 'string', description: 'Folder identifier' },
content: { type: 'string', description: 'Document content' },
},
outputs: {
content: 'string',
metadata: 'json',
updatedContent: 'boolean',
content: { type: 'string', description: 'Document content' },
metadata: { type: 'json', description: 'Document metadata' },
updatedContent: { type: 'boolean', description: 'Content update status' },
},
}

View File

@@ -22,9 +22,9 @@ export const GoogleDriveBlock: BlockConfig<GoogleDriveResponse> = {
options: [
{ label: 'Create Folder', id: 'create_folder' },
{ label: 'Upload File', id: 'upload' },
// { label: 'Get File Content', id: 'get_content' },
{ label: 'List Files', id: 'list' },
],
value: () => 'create_folder',
},
// Google Drive Credentials
{
@@ -32,6 +32,7 @@ export const GoogleDriveBlock: BlockConfig<GoogleDriveResponse> = {
title: 'Google Drive Account',
type: 'oauth-input',
layout: 'full',
required: true,
provider: 'google-drive',
serviceId: 'google-drive',
requiredScopes: ['https://www.googleapis.com/auth/drive.file'],
@@ -45,6 +46,7 @@ export const GoogleDriveBlock: BlockConfig<GoogleDriveResponse> = {
layout: 'full',
placeholder: 'Name of the file',
condition: { field: 'operation', value: 'upload' },
required: true,
},
{
id: 'content',
@@ -53,6 +55,7 @@ export const GoogleDriveBlock: BlockConfig<GoogleDriveResponse> = {
layout: 'full',
placeholder: 'Content to upload to the file',
condition: { field: 'operation', value: 'upload' },
required: true,
},
{
id: 'mimeType',
@@ -139,6 +142,7 @@ export const GoogleDriveBlock: BlockConfig<GoogleDriveResponse> = {
layout: 'full',
placeholder: 'Name for the new folder',
condition: { field: 'operation', value: 'create_folder' },
required: true,
},
{
id: 'folderSelector',
@@ -211,8 +215,6 @@ export const GoogleDriveBlock: BlockConfig<GoogleDriveResponse> = {
switch (params.operation) {
case 'upload':
return 'google_drive_upload'
// case 'get_content':
// return 'google_drive_get_content'
case 'create_folder':
return 'google_drive_create_folder'
case 'list':
@@ -238,22 +240,20 @@ export const GoogleDriveBlock: BlockConfig<GoogleDriveResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
credential: { type: 'string', required: true },
operation: { type: 'string', description: 'Operation to perform' },
credential: { type: 'string', description: 'Google Drive access token' },
// Upload and Create Folder operation inputs
fileName: { type: 'string', required: false },
content: { type: 'string', required: false },
mimeType: { type: 'string', required: false },
// Get Content operation inputs
// fileId: { type: 'string', required: false },
fileName: { type: 'string', description: 'File or folder name' },
content: { type: 'string', description: 'File content' },
mimeType: { type: 'string', description: 'File MIME type' },
// List operation inputs
folderSelector: { type: 'string', required: false },
manualFolderId: { type: 'string', required: false },
query: { type: 'string', required: false },
pageSize: { type: 'number', required: false },
folderSelector: { type: 'string', description: 'Selected folder' },
manualFolderId: { type: 'string', description: 'Manual folder identifier' },
query: { type: 'string', description: 'Search query' },
pageSize: { type: 'number', description: 'Results per page' },
},
outputs: {
file: 'json',
files: 'json',
file: { type: 'json', description: 'File data' },
files: { type: 'json', description: 'Files list' },
},
}

View File

@@ -25,6 +25,7 @@ export const GoogleSheetsBlock: BlockConfig<GoogleSheetsResponse> = {
{ label: 'Update Data', id: 'update' },
{ label: 'Append Data', id: 'append' },
],
value: () => 'read',
},
// Google Sheets Credentials
{
@@ -32,6 +33,7 @@ export const GoogleSheetsBlock: BlockConfig<GoogleSheetsResponse> = {
title: 'Google Account',
type: 'oauth-input',
layout: 'full',
required: true,
provider: 'google-sheets',
serviceId: 'google-sheets',
requiredScopes: ['https://www.googleapis.com/auth/spreadsheets'],
@@ -76,6 +78,7 @@ export const GoogleSheetsBlock: BlockConfig<GoogleSheetsResponse> = {
placeholder:
'Enter values as JSON array of arrays (e.g., [["A1", "B1"], ["A2", "B2"]]) or an array of objects (e.g., [{"name":"John", "age":30}, {"name":"Jane", "age":25}])',
condition: { field: 'operation', value: 'write' },
required: true,
},
{
id: 'valueInputOption',
@@ -97,6 +100,7 @@ export const GoogleSheetsBlock: BlockConfig<GoogleSheetsResponse> = {
placeholder:
'Enter values as JSON array of arrays (e.g., [["A1", "B1"], ["A2", "B2"]]) or an array of objects (e.g., [{"name":"John", "age":30}, {"name":"Jane", "age":25}])',
condition: { field: 'operation', value: 'update' },
required: true,
},
{
id: 'valueInputOption',
@@ -118,6 +122,7 @@ export const GoogleSheetsBlock: BlockConfig<GoogleSheetsResponse> = {
placeholder:
'Enter values as JSON array of arrays (e.g., [["A1", "B1"], ["A2", "B2"]]) or an array of objects (e.g., [{"name":"John", "age":30}, {"name":"Jane", "age":25}])',
condition: { field: 'operation', value: 'append' },
required: true,
},
{
id: 'valueInputOption',
@@ -191,22 +196,22 @@ export const GoogleSheetsBlock: BlockConfig<GoogleSheetsResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
credential: { type: 'string', required: true },
spreadsheetId: { type: 'string', required: false },
manualSpreadsheetId: { type: 'string', required: false },
range: { type: 'string', required: false },
values: { type: 'string', required: false },
valueInputOption: { type: 'string', required: false },
insertDataOption: { type: 'string', required: false },
operation: { type: 'string', description: 'Operation to perform' },
credential: { type: 'string', description: 'Google Sheets access token' },
spreadsheetId: { type: 'string', description: 'Spreadsheet identifier' },
manualSpreadsheetId: { type: 'string', description: 'Manual spreadsheet identifier' },
range: { type: 'string', description: 'Cell range' },
values: { type: 'string', description: 'Cell values data' },
valueInputOption: { type: 'string', description: 'Value input option' },
insertDataOption: { type: 'string', description: 'Data insertion option' },
},
outputs: {
data: 'json',
metadata: 'json',
updatedRange: 'string',
updatedRows: 'number',
updatedColumns: 'number',
updatedCells: 'number',
tableRange: 'string',
data: { type: 'json', description: 'Sheet data' },
metadata: { type: 'json', description: 'Operation metadata' },
updatedRange: { type: 'string', description: 'Updated range' },
updatedRows: { type: 'number', description: 'Updated rows count' },
updatedColumns: { type: 'number', description: 'Updated columns count' },
updatedCells: { type: 'number', description: 'Updated cells count' },
tableRange: { type: 'string', description: 'Table range' },
},
}

View File

@@ -26,6 +26,7 @@ export const HuggingFaceBlock: BlockConfig<HuggingFaceChatResponse> = {
title: 'User Prompt',
type: 'long-input',
layout: 'full',
required: true,
placeholder: 'Enter your message here...',
rows: 3,
},
@@ -34,6 +35,7 @@ export const HuggingFaceBlock: BlockConfig<HuggingFaceChatResponse> = {
title: 'Provider',
type: 'dropdown',
layout: 'half',
required: true,
options: [
{ label: 'Novita', id: 'novita' },
{ label: 'Cerebras', id: 'cerebras' },
@@ -55,6 +57,7 @@ export const HuggingFaceBlock: BlockConfig<HuggingFaceChatResponse> = {
title: 'Model',
type: 'short-input',
layout: 'full',
required: true,
placeholder:
'e.g., deepseek/deepseek-v3-0324, llama3.1-8b, meta-llama/Llama-3.2-3B-Instruct-Turbo',
description: 'The model must be available for the selected provider.',
@@ -80,6 +83,7 @@ export const HuggingFaceBlock: BlockConfig<HuggingFaceChatResponse> = {
title: 'API Token',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter your Hugging Face API token',
password: true,
},
@@ -105,17 +109,17 @@ export const HuggingFaceBlock: BlockConfig<HuggingFaceChatResponse> = {
},
},
inputs: {
systemPrompt: { type: 'string', required: false },
content: { type: 'string', required: true },
provider: { type: 'string', required: true },
model: { type: 'string', required: true },
temperature: { type: 'string', required: false },
maxTokens: { type: 'string', required: false },
apiKey: { type: 'string', required: true },
systemPrompt: { type: 'string', description: 'System instructions' },
content: { type: 'string', description: 'User message content' },
provider: { type: 'string', description: 'Model provider' },
model: { type: 'string', description: 'Model identifier' },
temperature: { type: 'string', description: 'Response randomness' },
maxTokens: { type: 'string', description: 'Maximum output tokens' },
apiKey: { type: 'string', description: 'API access token' },
},
outputs: {
content: 'string',
model: 'string',
usage: 'json',
content: { type: 'string', description: 'Generated response' },
model: { type: 'string', description: 'Model used' },
usage: { type: 'json', description: 'Token usage stats' },
},
}

View File

@@ -0,0 +1,269 @@
import { HunterIOIcon } from '@/components/icons'
import type { BlockConfig } from '@/blocks/types'
import type { HunterResponse } from '@/tools/hunter/types'
export const HunterBlock: BlockConfig<HunterResponse> = {
type: 'hunter',
name: 'Hunter io',
description: 'Find and verify professional email addresses',
longDescription:
"Search for email addresses, verify their deliverability, discover companies, and enrich contact data using Hunter.io's powerful email finding capabilities.",
docsLink: 'https://docs.sim.ai/tools/hunter',
category: 'tools',
bgColor: '#E0E0E0',
icon: HunterIOIcon,
subBlocks: [
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
layout: 'full',
options: [
{ label: 'Domain Search', id: 'hunter_domain_search' },
{ label: 'Email Finder', id: 'hunter_email_finder' },
{ label: 'Email Verifier', id: 'hunter_email_verifier' },
{ label: 'Discover Companies', id: 'hunter_discover' },
{ label: 'Find Company', id: 'hunter_companies_find' },
{ label: 'Email Count', id: 'hunter_email_count' },
],
value: () => 'hunter_domain_search',
},
// Domain Search operation inputs
{
id: 'domain',
title: 'Domain',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter domain name (e.g., stripe.com)',
condition: { field: 'operation', value: 'hunter_domain_search' },
},
{
id: 'limit',
title: 'Number of Results',
type: 'short-input',
layout: 'full',
placeholder: '10',
condition: { field: 'operation', value: 'hunter_domain_search' },
},
{
id: 'type',
title: 'Email Type',
type: 'dropdown',
layout: 'full',
options: [
{ label: 'All', id: 'all' },
{ label: 'Personal', id: 'personal' },
{ label: 'Generic', id: 'generic' },
],
value: () => 'all',
condition: { field: 'operation', value: 'hunter_domain_search' },
},
{
id: 'seniority',
title: 'Seniority Level',
type: 'dropdown',
layout: 'full',
options: [
{ label: 'All', id: 'all' },
{ label: 'Junior', id: 'junior' },
{ label: 'Senior', id: 'senior' },
{ label: 'Executive', id: 'executive' },
],
value: () => 'all',
condition: { field: 'operation', value: 'hunter_domain_search' },
},
{
id: 'department',
title: 'Department',
type: 'short-input',
layout: 'full',
placeholder: 'e.g., sales, marketing, engineering',
condition: { field: 'operation', value: 'hunter_domain_search' },
},
// Email Finder operation inputs
{
id: 'domain',
title: 'Domain',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter domain name (e.g., stripe.com)',
condition: { field: 'operation', value: 'hunter_email_finder' },
},
{
id: 'first_name',
title: 'First Name',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter first name',
condition: { field: 'operation', value: 'hunter_email_finder' },
},
{
id: 'last_name',
title: 'Last Name',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter last name',
condition: { field: 'operation', value: 'hunter_email_finder' },
},
{
id: 'company',
title: 'Company Name',
type: 'short-input',
layout: 'full',
placeholder: 'Enter company name',
condition: { field: 'operation', value: 'hunter_email_finder' },
},
// Email Verifier operation inputs
{
id: 'email',
title: 'Email Address',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter email address to verify',
condition: { field: 'operation', value: 'hunter_email_verifier' },
},
// Discover operation inputs
{
id: 'query',
title: 'Search Query',
type: 'long-input',
layout: 'full',
placeholder: 'Enter search query (e.g., "software companies in San Francisco")',
condition: { field: 'operation', value: 'hunter_discover' },
required: true,
},
{
id: 'domain',
title: 'Domain Filter',
type: 'short-input',
layout: 'full',
placeholder: 'Filter by domain',
condition: { field: 'operation', value: 'hunter_discover' },
},
// Find Company operation inputs
{
id: 'domain',
title: 'Domain',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter company domain',
condition: { field: 'operation', value: 'hunter_companies_find' },
},
// Email Count operation inputs
{
id: 'domain',
title: 'Domain',
type: 'short-input',
layout: 'full',
placeholder: 'Enter domain name',
condition: { field: 'operation', value: 'hunter_email_count' },
required: true,
},
{
id: 'company',
title: 'Company Name',
type: 'short-input',
layout: 'full',
placeholder: 'Enter company name',
condition: { field: 'operation', value: 'hunter_email_count' },
},
{
id: 'type',
title: 'Email Type',
type: 'dropdown',
layout: 'full',
options: [
{ label: 'All', id: 'all' },
{ label: 'Personal', id: 'personal' },
{ label: 'Generic', id: 'generic' },
],
value: () => 'all',
condition: { field: 'operation', value: 'hunter_email_count' },
},
// API Key (common)
{
id: 'apiKey',
title: 'API Key',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter your Hunter.io API key',
password: true,
},
],
tools: {
access: [
'hunter_discover',
'hunter_domain_search',
'hunter_email_finder',
'hunter_email_verifier',
'hunter_companies_find',
'hunter_email_count',
],
config: {
tool: (params) => {
// Convert numeric parameters
if (params.limit) {
params.limit = Number(params.limit)
}
switch (params.operation) {
case 'hunter_discover':
return 'hunter_discover'
case 'hunter_domain_search':
return 'hunter_domain_search'
case 'hunter_email_finder':
return 'hunter_email_finder'
case 'hunter_email_verifier':
return 'hunter_email_verifier'
case 'hunter_companies_find':
return 'hunter_companies_find'
case 'hunter_email_count':
return 'hunter_email_count'
default:
return 'hunter_domain_search'
}
},
},
},
inputs: {
operation: { type: 'string', description: 'Operation to perform' },
apiKey: { type: 'string', description: 'Hunter.io API key' },
// Domain Search & Email Count
domain: { type: 'string', description: 'Company domain name' },
limit: { type: 'number', description: 'Result limit' },
offset: { type: 'number', description: 'Result offset' },
type: { type: 'string', description: 'Email type filter' },
seniority: { type: 'string', description: 'Seniority level filter' },
department: { type: 'string', description: 'Department filter' },
// Email Finder
first_name: { type: 'string', description: 'First name' },
last_name: { type: 'string', description: 'Last name' },
company: { type: 'string', description: 'Company name' },
// Email Verifier & Enrichment
email: { type: 'string', description: 'Email address' },
// Discover
query: { type: 'string', description: 'Search query' },
headcount: { type: 'string', description: 'Company headcount filter' },
company_type: { type: 'string', description: 'Company type filter' },
technology: { type: 'string', description: 'Technology filter' },
},
outputs: {
results: { type: 'json', description: 'Search results' },
emails: { type: 'json', description: 'Email addresses found' },
email: { type: 'string', description: 'Found email address' },
score: { type: 'number', description: 'Confidence score' },
result: { type: 'string', description: 'Verification result' },
status: { type: 'string', description: 'Status message' },
total: { type: 'number', description: 'Total results count' },
personal_emails: { type: 'number', description: 'Personal emails count' },
generic_emails: { type: 'number', description: 'Generic emails count' },
},
}

View File

@@ -29,6 +29,7 @@ export const ImageGeneratorBlock: BlockConfig<DalleResponse> = {
title: 'Prompt',
type: 'long-input',
layout: 'full',
required: true,
placeholder: 'Describe the image you want to generate...',
},
{
@@ -100,6 +101,7 @@ export const ImageGeneratorBlock: BlockConfig<DalleResponse> = {
title: 'API Key',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter your OpenAI API key',
password: true,
connectionDroppable: false,
@@ -144,17 +146,17 @@ export const ImageGeneratorBlock: BlockConfig<DalleResponse> = {
},
},
inputs: {
prompt: { type: 'string', required: true },
model: { type: 'string', required: true },
size: { type: 'string', required: false },
quality: { type: 'string', required: false },
style: { type: 'string', required: false },
background: { type: 'string', required: false },
apiKey: { type: 'string', required: true },
prompt: { type: 'string', description: 'Image description prompt' },
model: { type: 'string', description: 'Image generation model' },
size: { type: 'string', description: 'Image dimensions' },
quality: { type: 'string', description: 'Image quality level' },
style: { type: 'string', description: 'Image style' },
background: { type: 'string', description: 'Background type' },
apiKey: { type: 'string', description: 'OpenAI API key' },
},
outputs: {
content: 'string',
image: 'string',
metadata: 'json',
content: { type: 'string', description: 'Generation response' },
image: { type: 'string', description: 'Generated image URL' },
metadata: { type: 'json', description: 'Generation metadata' },
},
}

View File

@@ -18,6 +18,7 @@ export const JinaBlock: BlockConfig<ReadUrlResponse> = {
title: 'URL',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter URL to extract content from',
},
{
@@ -26,9 +27,9 @@ export const JinaBlock: BlockConfig<ReadUrlResponse> = {
type: 'checkbox-list',
layout: 'full',
options: [
{ id: 'useReaderLMv2', label: 'Use Reader LM v2' },
{ id: 'gatherLinks', label: 'Gather Links' },
{ id: 'jsonResponse', label: 'JSON Response' },
{ label: 'Use Reader LM v2', id: 'useReaderLMv2' },
{ label: 'Gather Links', id: 'gatherLinks' },
{ label: 'JSON Response', id: 'jsonResponse' },
],
},
{
@@ -36,6 +37,7 @@ export const JinaBlock: BlockConfig<ReadUrlResponse> = {
title: 'API Key',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter your Jina API key',
password: true,
},
@@ -44,13 +46,13 @@ export const JinaBlock: BlockConfig<ReadUrlResponse> = {
access: ['jina_read_url'],
},
inputs: {
url: { type: 'string', required: true },
useReaderLMv2: { type: 'boolean', required: false },
gatherLinks: { type: 'boolean', required: false },
jsonResponse: { type: 'boolean', required: false },
apiKey: { type: 'string', required: true },
url: { type: 'string', description: 'URL to extract' },
useReaderLMv2: { type: 'boolean', description: 'Use Reader LM v2' },
gatherLinks: { type: 'boolean', description: 'Gather page links' },
jsonResponse: { type: 'boolean', description: 'JSON response format' },
apiKey: { type: 'string', description: 'Jina API key' },
},
outputs: {
content: 'string',
content: { type: 'string', description: 'Extracted content' },
},
}

View File

@@ -24,12 +24,14 @@ export const JiraBlock: BlockConfig<JiraResponse> = {
{ label: 'Update Issue', id: 'update' },
{ label: 'Write Issue', id: 'write' },
],
value: () => 'read',
},
{
id: 'domain',
title: 'Domain',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter Jira domain (e.g., simstudio.atlassian.net)',
},
{
@@ -37,6 +39,7 @@ export const JiraBlock: BlockConfig<JiraResponse> = {
title: 'Jira Account',
type: 'oauth-input',
layout: 'full',
required: true,
provider: 'jira',
serviceId: 'jira',
requiredScopes: [
@@ -97,6 +100,7 @@ export const JiraBlock: BlockConfig<JiraResponse> = {
title: 'New Summary',
type: 'short-input',
layout: 'full',
required: true,
placeholder: 'Enter new summary for the issue',
condition: { field: 'operation', value: ['update', 'write'] },
},
@@ -222,27 +226,27 @@ export const JiraBlock: BlockConfig<JiraResponse> = {
},
},
inputs: {
operation: { type: 'string', required: true },
domain: { type: 'string', required: true },
credential: { type: 'string', required: true },
issueKey: { type: 'string', required: false },
projectId: { type: 'string', required: false },
manualProjectId: { type: 'string', required: false },
manualIssueKey: { type: 'string', required: false },
operation: { type: 'string', description: 'Operation to perform' },
domain: { type: 'string', description: 'Jira domain' },
credential: { type: 'string', description: 'Jira access token' },
issueKey: { type: 'string', description: 'Issue key identifier' },
projectId: { type: 'string', description: 'Project identifier' },
manualProjectId: { type: 'string', description: 'Manual project identifier' },
manualIssueKey: { type: 'string', description: 'Manual issue key' },
// Update operation inputs
summary: { type: 'string', required: true },
description: { type: 'string', required: false },
summary: { type: 'string', description: 'Issue summary' },
description: { type: 'string', description: 'Issue description' },
// Write operation inputs
issueType: { type: 'string', required: false },
issueType: { type: 'string', description: 'Issue type' },
},
outputs: {
ts: 'string',
issueKey: 'string',
summary: 'string',
description: 'string',
created: 'string',
updated: 'string',
success: 'boolean',
url: 'string',
ts: { type: 'string', description: 'Timestamp' },
issueKey: { type: 'string', description: 'Issue key' },
summary: { type: 'string', description: 'Issue summary' },
description: { type: 'string', description: 'Issue description' },
created: { type: 'string', description: 'Creation date' },
updated: { type: 'string', description: 'Update date' },
success: { type: 'boolean', description: 'Operation success' },
url: { type: 'string', description: 'Issue URL' },
},
}

View File

@@ -11,6 +11,102 @@ export const KnowledgeBlock: BlockConfig = {
icon: PackageSearchIcon,
category: 'blocks',
docsLink: 'https://docs.sim.ai/blocks/knowledge',
subBlocks: [
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
layout: 'full',
options: [
{ label: 'Search', id: 'search' },
{ label: 'Upload Chunk', id: 'upload_chunk' },
{ label: 'Create Document', id: 'create_document' },
],
value: () => 'search',
},
{
id: 'knowledgeBaseId',
title: 'Knowledge Base',
type: 'knowledge-base-selector',
layout: 'full',
placeholder: 'Select knowledge base',
multiSelect: false,
required: true,
condition: { field: 'operation', value: ['search', 'upload_chunk', 'create_document'] },
},
{
id: 'query',
title: 'Search Query',
type: 'short-input',
layout: 'full',
placeholder: 'Enter your search query',
required: true,
condition: { field: 'operation', value: 'search' },
},
{
id: 'topK',
title: 'Number of Results',
type: 'short-input',
layout: 'full',
placeholder: 'Enter number of results (default: 10)',
condition: { field: 'operation', value: 'search' },
},
{
id: 'tagFilters',
title: 'Tag Filters',
type: 'knowledge-tag-filters',
layout: 'full',
placeholder: 'Add tag filters',
condition: { field: 'operation', value: 'search' },
mode: 'advanced',
},
{
id: 'documentId',
title: 'Document',
type: 'document-selector',
layout: 'full',
placeholder: 'Select document',
required: true,
condition: { field: 'operation', value: 'upload_chunk' },
},
{
id: 'content',
title: 'Chunk Content',
type: 'long-input',
layout: 'full',
placeholder: 'Enter the chunk content to upload',
rows: 6,
required: true,
condition: { field: 'operation', value: 'upload_chunk' },
},
{
id: 'name',
title: 'Document Name',
type: 'short-input',
layout: 'full',
placeholder: 'Enter document name',
required: true,
condition: { field: 'operation', value: ['create_document'] },
},
{
id: 'content',
title: 'Document Content',
type: 'long-input',
layout: 'full',
placeholder: 'Enter the document content',
rows: 6,
required: true,
condition: { field: 'operation', value: ['create_document'] },
},
// Dynamic tag entry for Create Document
{
id: 'documentTags',
title: 'Document Tags',
type: 'document-tag-entry',
layout: 'full',
condition: { field: 'operation', value: 'create_document' },
},
],
tools: {
access: ['knowledge_search', 'knowledge_upload_chunk', 'knowledge_create_document'],
config: {
@@ -48,111 +144,21 @@ export const KnowledgeBlock: BlockConfig = {
},
},
inputs: {
operation: { type: 'string', required: true },
knowledgeBaseId: { type: 'string', required: false },
query: { type: 'string', required: false },
topK: { type: 'number', required: false },
documentId: { type: 'string', required: false },
content: { type: 'string', required: false },
name: { type: 'string', required: false },
operation: { type: 'string', description: 'Operation to perform' },
knowledgeBaseId: { type: 'string', description: 'Knowledge base identifier' },
query: { type: 'string', description: 'Search query terms' },
topK: { type: 'number', description: 'Number of results' },
documentId: { type: 'string', description: 'Document identifier' },
content: { type: 'string', description: 'Content data' },
name: { type: 'string', description: 'Document name' },
// Dynamic tag filters for search
tagFilters: { type: 'string', required: false },
tagFilters: { type: 'string', description: 'Tag filter criteria' },
// Document tags for create document (JSON string of tag objects)
documentTags: { type: 'string', required: false },
documentTags: { type: 'string', description: 'Document tags' },
},
outputs: {
results: 'json',
query: 'string',
totalResults: 'number',
results: { type: 'json', description: 'Search results' },
query: { type: 'string', description: 'Query used' },
totalResults: { type: 'number', description: 'Total results count' },
},
subBlocks: [
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
layout: 'full',
options: [
{ label: 'Search', id: 'search' },
{ label: 'Upload Chunk', id: 'upload_chunk' },
{ label: 'Create Document', id: 'create_document' },
],
value: () => 'search',
},
{
id: 'knowledgeBaseId',
title: 'Knowledge Base',
type: 'knowledge-base-selector',
layout: 'full',
placeholder: 'Select knowledge base',
multiSelect: false,
condition: { field: 'operation', value: ['search', 'upload_chunk', 'create_document'] },
},
{
id: 'query',
title: 'Search Query',
type: 'short-input',
layout: 'full',
placeholder: 'Enter your search query',
condition: { field: 'operation', value: 'search' },
},
{
id: 'topK',
title: 'Number of Results',
type: 'short-input',
layout: 'full',
placeholder: 'Enter number of results (default: 10)',
condition: { field: 'operation', value: 'search' },
},
{
id: 'tagFilters',
title: 'Tag Filters',
type: 'knowledge-tag-filters',
layout: 'full',
placeholder: 'Add tag filters',
condition: { field: 'operation', value: 'search' },
mode: 'advanced',
},
{
id: 'documentId',
title: 'Document',
type: 'document-selector',
layout: 'full',
placeholder: 'Select document',
condition: { field: 'operation', value: 'upload_chunk' },
},
{
id: 'content',
title: 'Chunk Content',
type: 'long-input',
layout: 'full',
placeholder: 'Enter the chunk content to upload',
rows: 6,
condition: { field: 'operation', value: 'upload_chunk' },
},
{
id: 'name',
title: 'Document Name',
type: 'short-input',
layout: 'full',
placeholder: 'Enter document name',
condition: { field: 'operation', value: ['create_document'] },
},
{
id: 'content',
title: 'Document Content',
type: 'long-input',
layout: 'full',
placeholder: 'Enter the document content',
rows: 6,
condition: { field: 'operation', value: ['create_document'] },
},
// Dynamic tag entry for Create Document
{
id: 'documentTags',
title: 'Document Tags',
type: 'document-tag-entry',
layout: 'full',
condition: { field: 'operation', value: 'create_document' },
},
],
}

Some files were not shown because too many files have changed in this diff Show More