mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-08 22:48:14 -05:00
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:
59
.github/CONTRIBUTING.md
vendored
59
.github/CONTRIBUTING.md
vendored
@@ -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' },
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
53
.github/PULL_REQUEST_TEMPLATE.md
vendored
53
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -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 -->
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
204
apps/docs/content/docs/tools/hunter.mdx
Normal file
204
apps/docs/content/docs/tools/hunter.mdx
Normal 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`
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
"google_search",
|
||||
"google_sheets",
|
||||
"huggingface",
|
||||
"hunter",
|
||||
"image_generator",
|
||||
"jina",
|
||||
"jira",
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -470,7 +470,8 @@ export async function executeWorkflowForChat(
|
||||
mergedStates,
|
||||
edges,
|
||||
loops,
|
||||
parallels
|
||||
parallels,
|
||||
true // Enable validation during execution
|
||||
)
|
||||
|
||||
// Decrypt environment variables
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -376,7 +376,8 @@ export async function GET() {
|
||||
mergedStates,
|
||||
edges,
|
||||
loops,
|
||||
parallels
|
||||
parallels,
|
||||
true // Enable validation during execution
|
||||
)
|
||||
|
||||
const input = {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */}
|
||||
|
||||
@@ -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>
|
||||
)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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() !== '') {
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
269
apps/sim/blocks/blocks/hunter.ts
Normal file
269
apps/sim/blocks/blocks/hunter.ts
Normal 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' },
|
||||
},
|
||||
}
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user