Compare commits

..

171 Commits

Author SHA1 Message Date
Siddharth Ganesan
6d46b44e51 Stash 2025-11-10 19:46:27 -08:00
Siddharth Ganesan
ff99d75055 Run from block v1 2025-11-10 19:09:43 -08:00
Waleed
0ed0a26b3b feat(workflow-block): added redeploy action to workflow header for workflow block (#1875) 2025-11-10 15:59:33 -08:00
Adam Gough
0d4d953169 fixed payload error (#1873) 2025-11-10 12:19:45 -08:00
Waleed
81a12e721e improvement(performance): added revalidation caches on ollama and openrouter models (#1872)
* improvement(performance): added revalidation caches on ollama and openrouter models

* ack PR comments
2025-11-10 12:19:22 -08:00
Waleed
b03f9702d2 feat(permissions): extend hook to detect missing scopes to return those scopes for upgrade, update credential selector subblock (#1869) 2025-11-10 11:40:15 -08:00
Vikhyath Mondreti
997c4639ed fix build 2025-11-10 10:00:51 -08:00
Emir Karabeg
1e8b4769aa feat: toolbar, terminal, tool-input, emcn updates, chat, deploy (#1864)
* feat: toolbar resizing and searching; refactor: copilot folders

* feat(terminal): clear, timestamp, run ID, input, height

* feat: tool inpul, emcn search

* feat: sidebar context menu, delete workflow hook

* feat: chat; improvement: input and dropdown/combobox padding

* feat(panel): deploy logic

* improvement(chat): streaming output
2025-11-10 03:08:13 -08:00
Waleed
28b416078c improvement(subblocks): fixed trigger save, schedule save, time inp, text subblocks and schedule/workflow badges, can now deploy from the badge itself (#1868) 2025-11-10 01:31:37 -08:00
Waleed
d0720b85bc feat(i18n): update translations (#1865) 2025-11-08 20:55:59 -08:00
Vikhyath Mondreti
75ce8882c8 improvement(execution): trigger manual execution using mock payloads (#1863)
* fix(err-message): manual run message

* make external triggers start workflow manually too

* improvement(execution): trigger manual execution using mock payloads

* remove redundant code and update generate mock value func

* cleanup code, add to docs

* fix multi trigger injection

* address greptile comments
2025-11-08 20:34:53 -08:00
Siddharth Ganesan
142d3aadb8 feat(helm): add copilot (#1833)
* Add helm for copilot

* Remove otel and log level

* Change repo name

* improvement(helm): enhance copilot chart with HA support and validation

* refactor(helm): consolidate copilot secrets and fix postgres volume mount
2025-11-08 17:36:48 -08:00
Waleed
7c6e6d1603 improvement(code): add wand config and system prompt for python code generation, strip \n from stdout in JS/Python (#1862) 2025-11-08 16:44:16 -08:00
Waleed
e186ea630a improvement(ux): optimistic updates for envvars, custom tools, folder operations, workflow deletions. shared hook for connection tags & tag dropdown, fix for triggers not re-rendering on trigger selected (#1861) 2025-11-08 15:45:29 -08:00
Waleed
b3490e9127 fix(build): remove mdx from transpilation (#1860) 2025-11-08 14:33:26 -08:00
Emir Karabeg
eed2072723 feat/platform-v3 (#1698)
* feat(fonts): season replacing geist

* feat(emcnn): created emcn

* feat(sidebar): created new sidebar with header and workflow list

* improvement(sidebar): expanded workflow/folder item text sizing and adjusted button padding

* feat(sidebar): added search UI, updated workflows styling

* improvement: globals styling with antialiased in dark mode only

* feat(sidebar): blocks and triggers ui/ux updated

* refactor(sidebar): moved logic into hooks

* feat(sidebar): improved workflow/folder dragging UI/UX; refactored logic into hooks

* improvement(sidebar): adjusted triggers/blocks padding for header

* improvement(sidebar): dragging hover handler; closed folders by default minus active path

* improvement(sidebar): panel resize logic

* improvement(sidebar): blocks and triggers expanded indicator

* feat(tooltips): new emcn component emerged

* feat(sidebar): workflow list handling updated

* refactor: added cursorrules

* feat(panel): new panel layout

* improvement(workspaces): firname's workspace instead of fn ln's workspace

* feat(platform): panel header, new emcn icons, more button variants, refactor sidebar components

* improvement(emcn): added button variants

* feat(panel): tab system

* feat(copilot): refactor, adjusted welcome and user-input UI/UX

* feat(copilot): baseline user-input ui/ux improvement

* feat(emcn): badge outline variant

* fix: build errors

* feat(copilot): base UI copilot

* refactor(workflow-block): added hooks, components

* feat(design): created design panel and removed isWide

* refactor(subblock): edited components, styling

* feat: emcn, editor

* feat(panel): toolbar, editor

* feat(workflow-block): refactor, adjust base styling

* feat(workflow-block): new block, edge

* feat: workflow-block, connections, action-bar, copilot

* feat: panel, workflow, emcn, workflow block, subblocks; clean copilot

* sim-326: remove remote code execution toggle, hide dropdown for language if E2B is not enabled

* feat: sidebar navigation, tag coloring; refactor: rebased to staging

* fix: build errors

* improvement: subblock styles

* feat: workspaces, terminal, emcn, controls

* feat: delete workflow

* fix: rebased

* fix build errors

---------

Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
2025-11-08 10:58:31 -08:00
Waleed
945405c461 feat(blogs): added blogs scaffolding (#1857) 2025-11-08 00:04:20 -08:00
Vikhyath Mondreti
c397f5acee fix(triggers): update filtering logic for edges (#1856) 2025-11-07 19:59:51 -08:00
Siddharth Ganesan
3f435ce55e fix(hitl): rename uiurl to url (#1855) 2025-11-07 19:51:27 -08:00
Vikhyath Mondreti
7a8d47a72e fix(schedules): locking schedules to prevent double runs (#1854)
* fix(schedules): locking schedules to prevent double runs

* add migration file

* fix
2025-11-07 19:45:25 -08:00
Waleed
e91a8af7cd fix(files): fix json uploads, disable storage metering when billing is disabled, exclude kb uploads from storage metering, simplify serve path route (#1850)
* fix(files): fix local kb files storage to have parity with cloud storage providers

* fix(files): fix json uploads, disable storage metering when billing is disabled, exclude kb uploads from storage metering, simplify serve path route

* cleanup
2025-11-07 18:41:44 -08:00
Siddharth Ganesan
d17c627064 fix(deployed-chat): fix duplication and file uploads (#1853) 2025-11-07 18:41:03 -08:00
Vikhyath Mondreti
c8ea08e130 fix(file-upload): workspace/chat context not being passed in some forms (#1852) 2025-11-07 18:23:13 -08:00
Siddharth Ganesan
f62568efc7 fix(variables, webhook): fix variable tag dropdown for escaped < and allow empty webhook payload (#1851)
* Fix << tags

* Allow empty webhook body

* Variable highlighting in loop conditions
2025-11-07 18:03:36 -08:00
Vikhyath Mondreti
a73e2aaa8b improvement(templates): make it top-level route and change management/editing process (#1834)
* fix(billing): should allow restoring subscription (#1728)

* fix(already-cancelled-sub): UI should allow restoring subscription

* restore functionality fixed

* fix

* make templates root level url and make it part of deployment system

* separate updating template and deployment versions

* add tags

* add credentials extraction logic + use should import with workflow variables

* fix credential extraction

* add trigger mode indicator

* add starred tracking

* last updated field

* progress on creator profiles

* revert creator profile context type

* progress fix image uploads

* render templates details with creator details

* fix collab rules for workflow edit button

* creator profile perm check improvements

* restore accidental changes

* fix accessibility issues for non logged in users

* remove unused code

* fix type errors

---------

Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com>
2025-11-07 17:57:53 -08:00
Siddharth Ganesan
6cdee5351c feat(scopes): add scopes warning hook (#1842)
* fix(billing): should allow restoring subscription (#1728)

* fix(already-cancelled-sub): UI should allow restoring subscription

* restore functionality fixed

* fix

* Server side logic to check auth scopes

* Fix scopes code

* Remove frontend changes

* Fix tests

* Lint

* Remove log for lint

* Fix scopes check

* Fix conflict

---------

Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
2025-11-07 16:31:25 -08:00
Waleed
d3e81e97d5 fix(deploy-modal): remove deleted blocks from example curl (#1849) 2025-11-07 15:27:04 -08:00
Waleed
bb7016a99f improvement(routes): type all untyped routes (#1848)
* improvement(routes): type all untyped routes

* fix routes, remove unused workspace members route

* fix obfuscation of errors behind zod errors

* remove extraneous comments
2025-11-07 15:24:30 -08:00
Waleed
c4278266ef feat(i18n): update translations (#1844)
* feat(i18n): update translations

* fix(streaming-api): fix streaming api (#1846)

* fix(billing): should allow restoring subscription (#1728)

* fix(already-cancelled-sub): UI should allow restoring subscription

* restore functionality fixed

* fix

* Fix streaming api

* Fix uuid stuff

* Lint

* Stripe docs fix

* Fix docs build error

* Fix uuid check

* Fix deployed chat streaming for non agent blocks

* Fix lint
2025-11-07 15:06:25 -08:00
Siddharth Ganesan
b6c2c7456e fix(variables): fix variable resolution error and start block outputs (#1847)
* Fix var resolution if block is not upstream

* Filter convo id from start block outputs if not set

* Lint

* Start block outputs
2025-11-07 15:03:43 -08:00
Siddharth Ganesan
9fd2156e9e fix(streaming-api): fix streaming api (#1846)
* fix(billing): should allow restoring subscription (#1728)

* fix(already-cancelled-sub): UI should allow restoring subscription

* restore functionality fixed

* fix

* Fix streaming api

* Fix uuid stuff

* Lint

* Stripe docs fix

* Fix docs build error

* Fix uuid check

* Fix deployed chat streaming for non agent blocks

* Fix lint

---------

Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
2025-11-07 14:38:15 -08:00
Waleed
c9a8c7e392 feat(tools): added 200+ new tools across confluence, discord, exa, firecrawl, jina, jira, linear, linkup, MS suite, parallel, reddit, supabase, & tavily (#1824)
* feat(tools): added 150+ new tools across confluence, discord, exa, firecrawl, jina, jira, linear, linkup, MS suite, parallel, reddit, supabase, & tavily

* feat(tools): added 150+ new tools across confluence, discord, exa, firecrawl, jina, jira, linear, linkup, MS suite, parallel, reddit, supabase, & tavily

* replace console.log and console.error with loggers instead

* cleanup

* update message change

* removed layout from all blocks with new operations

* cleanup

* fixed create row

* fixed full text search

* fixed firecrawl, fixed supabase download

* fix subblock name

* teams update

* finish supabase

* tested & updated parallel AI

* removed dates from Exa, fixed research

* fix jina

* more jina updates

* fixed tavily + tool-inp for empty dropdown items

* updated microsoft tools

* edited reddit

* added html/text options for gmail outlook resend tools, added linear and jira triggers

* reddit tool fix

* another reddit fix

* remove unused github utils, fix linear triggers

* added onedrive delete, fixed jira tools

* fixed confluence

* fix some linear operations, fixed jira triggers

* fix some linear tools

* fix build

* fix jira payloads

* fixe jira payload

* fix conflicts

* added sample payload

* fix stripe icon

* run lint
2025-11-07 13:03:57 -08:00
Waleed
eb459d0ab9 feat(i18n): update translations (#1843) 2025-11-07 13:03:05 -08:00
Siddharth Ganesan
a31dc733cf fix(copilot): fix image auth (#1841)
* Fix copilot image auth

* Lint

* Remove extra loggign

* Update apps/sim/app/api/copilot/chat/route.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-11-07 11:40:13 -08:00
Waleed
c3436e998f feat(tools): added 50+ stripe tools and trigger and docs (#1816)
* feat(tools): added 150+ new tools across confluence, discord, exa, firecrawl, jina, jira, linear, linkup, MS suite, parallel, reddit, supabase, & tavily

* feat(tools): added 40+ stripe tools and trigger

* added stripe tools to registry

* added number validation, tested all stripe tools

* update stripe payload, tested webhooks
2025-11-07 10:59:19 -08:00
Siddharth Ganesan
742d59f54d feat(hitl): add human in the loop block (#1832)
* fix(billing): should allow restoring subscription (#1728)

* fix(already-cancelled-sub): UI should allow restoring subscription

* restore functionality fixed

* fix

* Add pause resume block

* Add db schema

* Initial test passes

* Tests pass

* Execution pauses

* Snapshot serializer

* Ui checkpoint

* Works 1

* Pause resume simple v1

* Hitl block works in parallel branches without timing overlap

* Pending status to logs

* Pause resume ui link

* Big context consolidation

* HITL works in loops

* Fix parallels

* Reference blocks properly

* Fix tag dropdown and start block resolution

* Filter console logs for hitl block

* Fix notifs

* Fix logs page

* Fix logs page again

* Fix

* Checkpoint

* Cleanup v1

* Refactor v2

* Refactor v3

* Refactor v4

* Refactor v5

* Resume page

* Fix variables in loops

* Fix var res bugs

* Ui changes

* Approval block

* Hitl works e2e v1

* Fix tets

* Row level lock

---------

Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
2025-11-06 15:59:28 -08:00
Waleed
f9ce65eddf feat(i18n): update translations (#1831) 2025-11-06 12:23:34 -08:00
Waleed
8c9ed34d99 feat(tools): added 48 new github tools, 12 triggers (#1821)
* feat(tools): added 10 new github triggers

* feat(tools): added 48 new github tools, 12 triggers

* fix(logging): make logging safe start an upsert to prevent insertions of duplicate execution id records, remove layout from github block
2025-11-06 11:11:45 -08:00
Waleed
541bdd3772 feat(i18n): update translations (#1820) 2025-11-05 18:22:50 -08:00
Waleed
60d53ba14a feat(tools): added typeform form submission trigger, added 4 new tools to complete CRUD typeform tools (#1818)
* feat(tools): added typeform form submission trigger, added 4 new tools to complete CRUD typeform tools

* resolve envvars in trigger configuration upon save, tested typeform

* updated docs

* ack PR comments
2025-11-05 17:47:43 -08:00
Vikhyath Mondreti
5c611c6d65 improvement(block-outputs): fix chat fields being hidden even if in inputFormat, cleanup code (#1819)
* improvement(block-outputs): fix chat fields being hidden even if in inputFormat, cleanup code"

* fix type error
2025-11-05 16:05:39 -08:00
Waleed
2b78b5ea73 feat(i18n): update translations (#1817) 2025-11-05 15:26:19 -08:00
Waleed
cf023e4d22 feat(tools): added download file tool for onedrive, google drive, and slack; added move email tool for gmail and outlook (#1785)
* feat(tools): added download file tool for onedrive, google drive, and slack

* added gmail & outlook move tools, added missing credentials descriptions to modal

* added slack delete/update message, add reaction; added gmail read/unread/label/unarchive; added outlook copy/delete/read/unread

* added threads to slack operations

* added timestamp for slack webhook trigger since api uses timestamp for updating/reacting/deleting

* cleanup

* added file info to slack read messages

* updated slack desc

* fixed downloading for onedrive, slack, and drive

* fix type check

* fix build failure

* cleanup files, fix triggers with attachments, fix integration blocks with include attachment to parse to user files, remove unused code

* fix move files tools

* fix tests

* fix build errors

* fix type error

* fix tests

* remove redundant code and filter out unecessary user file fields

* fix lint error

* remove fields from tag dropdown

* fix file upload via API

* fix pdf parse issue

---------

Co-authored-by: waleed <waleed>
Co-authored-by: Adam Gough <adamgough@Adams-MacBook-Pro.local>
Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
2025-11-05 13:00:34 -08:00
Waleed
21774de275 feat(i18n): update translations (#1815)
* feat(i18n): update translations

* fix translations
2025-11-05 11:40:56 -08:00
Waleed
2056e8ae5f feat(tools): added additional youtube search params, get channel playlists videos and related videos tools (#1814) 2025-11-05 11:26:45 -08:00
Waleed
11fd1544bb feat(i18n): update translations (#1813) 2025-11-05 11:22:42 -08:00
Waleed
0260dbc3f2 feat(tools): added perplexity search endpoint, updated models list for perplexity block (#1812) 2025-11-05 11:15:15 -08:00
Waleed
68056b72c2 feat(i18n): update translations (#1811) 2025-11-05 05:29:23 -08:00
Adam Gough
fa323e2e51 feat(twilio-voice): added twilio voice webhook + tool (#1776)
* first twilio voice push, no testing

* simplified operations, calling and get recording works

* cleaned up operations

* twilio webhook works

* added docs

* updated logic

* minor change

* reverted change

* files fixed for bun run lint

* fix instructions

* removed unused files

* added slack validation and twilio

* changed twiml instruction

* fixed build

* cleanup

* remove extraneous comments

* fixed missing mcosk

* split out client-side utils

* update docs

* fix tests

* had to add some reverts

* custom tool that was fialing bulid

* reveted changes
2025-11-04 23:56:06 -08:00
Adam Gough
b0fa3e8a26 improvement(reply-gmail): added reply to gmail (#1809)
* added reply to thread/message

* cleanup, extract header helper for threaded replies

* more helpers
2025-11-04 20:23:10 -08:00
Waleed
f65d62ea3d improvement(async): improve error capturing for asynchronous workflow executions (#1808)
* improvement(async): improve error capturing for asynchronous workflow executions

* surface more erros

* added more logs

* fix failing tests

* ack DB comments
2025-11-04 18:16:00 -08:00
Waleed
670e63c108 fix(schedules): restore enabling/disabling of schedules, fix premature cron validation (#1807) 2025-11-04 14:05:29 -08:00
Waleed
e62a635757 feat(i18n): update translations (#1806) 2025-11-04 13:39:10 -08:00
Waleed
a29f9fd55f feat(schedules): move schedule configuration out of modals into subblocks (#1805)
* feat(schedules): move schedule configuration out of modals into subblocks

* added more timezones

* added simple in-memory rate limiting to update schedule, validation on numeric values for date and time, fix update schedule behavior

* fix failing tests, ack PR comments

* surface better errors
2025-11-04 13:36:50 -08:00
Waleed
e9ff94f06f chore(deps): upgrade turbopack (#1803) 2025-11-03 22:48:22 -08:00
Waleed
56f645890a fix(i18n): fix translation pipeline (#1804) 2025-11-03 22:47:55 -08:00
Waleed
1ce834f2fe feat(i18n): update translations (#1794)
* feat(i18n): update translations

* remove all outdated triggers, cleanup yml too
2025-11-03 22:30:50 -08:00
Vikhyath Mondreti
0363f8a33d fix(external-triggers): not passing payload through + incorrect server-side resolver logic (#1801)
* fix integration triggers

* ignore text readonly subblocks

* fix

* fix to ignore readOnly vals

* fix var references

* simplify

* cleanup code
2025-11-03 19:54:42 -08:00
Vikhyath Mondreti
d1fcade5ab fix(conn-status): remove unused connection status inside user avatar stack (#1800) 2025-11-03 15:12:56 -08:00
Waleed
3af7d136c6 feat(mcp): surface better errors for MCP connection failures (#1796) 2025-11-03 14:28:25 -08:00
Vikhyath Mondreti
2eea3caccd feat(import-export): improvements to export workspace, maintain file structure, include workflow variables (#1799)
* feat(import-export): improvements to export workspace, maintain file structure

* fix type'

* import/export variables

* fix var ref id bug
2025-11-03 12:13:57 -08:00
Siddharth Ganesan
fb445b166d fix(legacy-start): fix legacy start block execution in new executor 2025-11-03 10:37:59 -08:00
Siddharth Ganesan
3bf00cbd2a improvement(executor): redesign executor + add start block (#1790)
* fix(billing): should allow restoring subscription (#1728)

* fix(already-cancelled-sub): UI should allow restoring subscription

* restore functionality fixed

* fix

* improvement(start): revert to start block

* make it work with start block

* fix start block persistence

* cleanup triggers

* debounce status checks

* update docs

* improvement(start): revert to start block

* make it work with start block

* fix start block persistence

* cleanup triggers

* debounce status checks

* update docs

* SSE v0.1

* v0.2

* v0.3

* v0.4

* v0.5

* v0.6

* broken checkpoint

* Executor progress - everything preliminarily tested except while loops and triggers

* Executor fixes

* Fix var typing

* Implement while loop execution

* Loop and parallel result agg

* Refactor v1 - loops work

* Fix var resolution in for each loop

* Fix while loop condition and variable resolution

* Fix loop iteration counts

* Fix loop badges

* Clean logs

* Fix variable references from start block

* Fix condition block

* Fix conditional convergence

* Dont execute orphaned nodse

* Code cleanup 1 and error surfacing

* compile time try catch

* Some fixes

* Fix error throwing

* Sentinels v1

* Fix multiple start and end nodes in loop

* Edge restoration

* Fix reachable nodes execution

* Parallel subflows

* Fix loop/parallel sentinel convergence

* Loops and parallels orchestrator

* Split executor

* Variable resolution split

* Dag phase

* Refactor

* Refactor

* Refactor 3

* Lint + refactor

* Lint + cleanup + refactor

* Readability

* Initial logs

* Fix trace spans

* Console pills for iters

* Add input/output pills

* Checkpoint

* remove unused code

* THIS IS THE COMMIT THAT CAN BREAK A LOT OF THINGS

* ANOTHER BIG REFACTOR

* Lint + fix tests

* Fix webhook

* Remove comment

* Merge stash

* Fix triggers?

* Stuff

* Fix error port

* Lint

* Consolidate state

* Clean up some var resolution

* Remove some var resolution logs

* Fix chat

* Fix chat triggers

* Fix chat trigger fully

* Snapshot refactor

* Fix mcp and custom tools

* Lint

* Fix parallel default count and trace span overlay

* Agent purple

* Fix test

* Fix test

---------

Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
2025-11-02 12:21:16 -08:00
Waleed
7d67ae397d fix(evaluator): fix evaluator to handle temperature gracefully like router (#1792)
* fix(evaluator): fix evaluator to handle temperature gracefully like router

* apps/sim

* fix eval-input subblock
2025-11-01 18:52:18 -07:00
Waleed
f9980868a4 improvement(variables): add error context for duplicate variable names, only check for collision when focus is lost (#1791)
* improvement(variables): add error context for duplicate variable names, only check for collision when focus is lost

* disallow empty variable names, performance optimizations

* safety guard against empty variables names
2025-11-01 18:19:34 -07:00
Waleed
e4d21568e3 feat(i18n): update translations (#1788) 2025-11-01 14:44:51 -07:00
Waleed
5479461617 feat(docs): added page nav buttons, static search, TOC footer (#1787)
* feat(docs): added page nav buttons, static search, TOC footer

* back to dynamic search since indexes are too large, added caching hour over hour
2025-11-01 14:38:28 -07:00
Vikhyath Mondreti
86b3570252 fix(trigger-dup): on duplicate trigger should not point at old webhook row (#1784) 2025-10-31 19:39:17 -07:00
Vikhyath Mondreti
44271cd101 fix(triggers-persistence): triggers persistence, deletion, updating configs + state management simplifcation (#1783)
* fix(triggers): configuration persistences issues

* required fields validation staleness issue
2025-10-31 18:06:31 -07:00
Vikhyath Mondreti
f6a5c5c829 improvement(cleanup): remove useWorkflowDiff hook (#1781) 2025-10-31 12:04:25 -07:00
Waleed
e64129c1ad feat(triggers): modify triggers to use existing subblock system, webhook order of operations improvements (#1774)
* feat(triggers): make triggers use existing subblock system, need to still fix webhook URL on multiselect and add script in text subblock for google form

* minimize added subblocks, cleanup code, make triggers first-class subblock users

* remove multi select dropdown and add props to existing dropdown instead

* cleanup dropdown

* add socket op to delete external webhook connections on block delete

* establish external webhook before creating webhook DB record, surface better errors for ones that require external connections

* fix copy button in short-input

* revert environment.ts, cleanup

* add triggers registry, update copilot tool to reflect new trigger setup

* update trigger-save subblock

* clean

* cleanup

* remove unused subblock store op, update search modal to reflect list of triggers

* add init from workflow to subblock store to populate new subblock format from old triggers

* fix mapping of old names to new ones

* added debug logging

* remove all extraneous debug logging and added mapping for triggerConfig field names that were changed

* fix trigger config for triggers w/ multiple triggers

* edge cases for effectiveTriggerId

* cleaned up

* fix dropdown multiselect

* fix multiselect

* updated short-input copy button

* duplicate blocks in trigger mode

* ack PR comments
2025-10-31 11:38:59 -07:00
Waleed
70ff5394a4 improvement(mcp): ditch custom mcp client in favor of mcp sdk (#1780) 2025-10-31 11:21:00 -07:00
Waleed
6cd82f07ed fix(presence): remove presence for a solo user (#1779) 2025-10-30 22:47:37 -07:00
Vikhyath Mondreti
4a3c6d17e3 fix(client-directive): fix build error (#1778) 2025-10-30 20:29:12 -07:00
Vikhyath Mondreti
0b16fa4dd0 fix(triggers): incoming edges should be filtered from execution and UI graph (#1777) 2025-10-30 20:20:32 -07:00
Vikhyath Mondreti
eac358bc7c feat(live-cursor): live cursor during collaboration (#1775)
* feat(live-cursor): collaborative cursor

* fix user avatar url rendering

* simplify presence

* fix env ts

* fix lint

* fix type mismatch
2025-10-30 19:47:11 -07:00
Vikhyath Mondreti
a072e6d1d8 improvement(custom-tools): make them workspace scoped + ux to manage them (#1772)
* improvement(custom-tools): make them workspace scoped

* fix auth check

* remove comments

* add dup check

* fix dup error message display

* fix tests

* fix on app loading of custom tools
2025-10-30 17:40:38 -07:00
Vikhyath Mondreti
3b901b33d1 fix(webhook-notif): modal positioning (#1771) 2025-10-30 16:58:17 -07:00
Vikhyath Mondreti
fe9ebbf81b improvement(api-keys): move to workspace level (#1765)
* fix(billing): should allow restoring subscription (#1728)

* fix(already-cancelled-sub): UI should allow restoring subscription

* restore functionality fixed

* fix

* improvement(api-keys): move to workspace level

* remove migration to prep merge

* remove two more unused cols

* prep staging  merge

* add migration back

---------

Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com>
2025-10-30 11:42:58 -07:00
Waleed
c99bb0aaa2 feat(cost): added hidden cost breakdown component to settings > subscription, start collecting current period copilot cost and last period copilot cost (#1770)
* feat(cost): added hidden cost breakdown component to settings > subscription, start collecting current period copilot cost and last period copilot cost

* don't rerender envvars when switching between workflows in the same workspace
2025-10-30 11:09:47 -07:00
Waleed
61725c2d15 feat(envvars): use cache for envvar dropdown key names, prevent autofill & suggestions in the settings (#1769)
* feat(envvars): use cache for envvar dropdown key names, prevent autofill & suggestions in the settings

* add the same prevention for autocomplete and suggestions to sso and webhook
2025-10-30 00:23:35 -07:00
Waleed
8b0079b834 feat(i18n): update translations (#1768) 2025-10-30 00:03:16 -07:00
Vikhyath Mondreti
fdefb14e6b improvement(ms-teams): resolve mentions accurately (#1762)
* improvement(ms-teams): resolve mentions accurately

* fix for bots

* add utils file

* add logs

* fix perms issue

* fix scopes

* fetch works for bots

* Revert "fetch works for bots"

This reverts commit 0ac702a8f3.

* update docs
2025-10-29 23:49:05 -07:00
Waleed
47913f87de fix(kb): fix mistral parse and kb uploads, include userId in internal auth (#1767)
* fix(kb): fix mistral parse and kb uploads, include userId in internal auth

* update updated_at for kb when adding a new doc via knowledge block

* update tests
2025-10-29 23:18:39 -07:00
Waleed
48f520b3c7 feat(files): added file manager table, enforce permissions for viewing files (#1766)
* feat(files): added file manager table, enforce permissions for viewing files

* rename types

* cleanup

* cleanup

* confirm local file system works with all contexts

* clean

* remove isAsync

* ignore expiresAt

* add relative imports instead of absolute ones

* absl imports

* remove redundant comments
2025-10-29 22:03:27 -07:00
Vikhyath Mondreti
da30c25efa improvement(chat): increase max files to 15 and resolve workflow variables in webhook execution (#1764)
* improvement(chat): increase max files to 15 and resolve workflow variables in webhook execution

* fix workflow vars

* fix for schedules
2025-10-29 15:34:59 -07:00
Siddharth Ganesan
b95ea9148f fix(copilot): consolidate usage limit validation (#1763)
* Use helper for api key validation

* Lint
2025-10-29 13:14:28 -07:00
Waleed
fcf947df22 fix(variables): added the same input vars mapping from workflow block, added type validation to variables block, updated UI (#1761)
* fix(variables): added the same input vars mapping from workflow block, added type validation to variables block, updated UI

* cleanup

* lint
2025-10-29 01:22:10 -07:00
Waleed
7be9941bc9 feat(chat): support local file downloads/uploads for chat for parity with kb (#1751)
* feat(chat): support local file downloads/uploads for chat for parity with kb

* cleanup imports

* feat(files): add storage service and consolidate file utils

* fix failing tests

* cleanup

* cleaned up

* clean

* add context for file uplaods/fetches

* fixed blob

* rm comments

* fix failing test

* fix profile pics

* add workspace dedupe for duplicated files

* update chat to accept only accepted types

* add loading anim to profilepic update

* optimistically update keys, copilot keys, and file uploads to prevent flash

* add defensive check for deleting files
2025-10-28 20:09:51 -07:00
Siddharth Ganesan
807014a5d2 fix(wait, vars, while): var set (#1759)
* Fix env is hosted

* Lint
2025-10-28 17:19:11 -07:00
Waleed
aef1f18c1e feat(i18n): update translations (#1756) 2025-10-28 12:43:33 -07:00
Adam Gough
368576b082 feat(create-excel): onedrive create excel (#1745)
* added onedrive upload excel

* added

* updated docs

* lint

* cleaned

* use lib

---------

Co-authored-by: Adam Gough <adamgough@Adams-MacBook-Pro.local>
2025-10-28 12:26:17 -07:00
Siddharth Ganesan
aace3066aa feat(while, vars, wait): add while subflow, variables block, wait block (#1754)
* Add variables block

* Add wait block

* While loop v1

* While loop v1

* Do while loops

* Copilot user input rerender fix

* Fix while and dowhile

* Vars block dropdown

* While loop docs

* Remove vars block coloring

* Fix lint

* Link docs to wait

* Fix build fail
2025-10-28 11:59:47 -07:00
Waleed
ef5b6999ab fix(migrations): add missing migration for processing columns in documents table (#1749) 2025-10-27 23:23:42 -07:00
Waleed
9df886d1e9 feat(kb): added sort ordering to knowledgebase page, styling update (#1748)
* remove extraneous text from careers app

* feat(kb): added sort order to kb

* updated styles of workspace selector and delete button to match theme of rest of knowledgebase
2025-10-27 21:39:48 -07:00
Waleed
9991796661 fix(docs): added new workflow block image, fixed operator issue on null properties (#1747)
* fix(docs): added new workflow block image, fixed operator issue on null properties

* reverted layout change

* fix navbar color in light mode
2025-10-27 20:56:52 -07:00
Waleed
095a15d7b5 feat(careers): added a careers page (#1746)
* feat(careers): added a careers page

* cleanup

* revert hardcoded environment
2025-10-27 20:25:44 -07:00
Waleed
8620ab255a improvement(docs): added a copy page button to the docs pages (#1743)
* improvement(docs): added a copy page button to the docs pages

* added copy page button & fixed TOC alignment
2025-10-27 15:05:27 -07:00
Waleed
47ddfb639e fix(dropdown): auto-add character to trigger tag dropdown on connection tag drop in agent tools (#1742) 2025-10-27 14:28:29 -07:00
Waleed
5d48c2780c improvement(ui): enhance ring outline for code subblock and mcp tool subblocks in agent (#1741) 2025-10-27 13:59:19 -07:00
Waleed
38614fad79 fix(mcp): resolve variables & block references in mcp subblocks (#1735)
* fix(mcp): resolve variables & block references in mcp subblocks

* cleanup

* ack PR comment

* added variables access to mcp tools when added in agent block

* fix sequential migrations issues
2025-10-27 13:13:11 -07:00
Waleed
6f32aea96b feat(kb): added support for local file storage for knowledgebase (#1738)
* feat(kb): added support for local file storage for knowledgebase

* updated tests

* ack PR comments

* added back env example
2025-10-27 11:28:45 -07:00
Waleed
98e98496e8 Revert "improvement(consts): removed redundant default consts in favor of env…" (#1739)
This reverts commit 659b46fa2f.
2025-10-26 23:06:14 -07:00
Waleed
659b46fa2f improvement(consts): removed redundant default consts in favor of envvar defaults for storage & usage limits (#1737)
* improvement(consts): removed redundant default consts in favor of envvar defaults for storage & usage limits

* remove unnecessary tests
2025-10-26 21:43:00 -07:00
Waleed
fb3d6d4c88 feat(files): added usage indicator for file storage to settings (#1736)
* feat(files): added usage indicator for file storage to settings

* cleanup
2025-10-26 21:36:25 -07:00
Waleed
ec2cc82b72 feat(i18n): update translations (#1734) 2025-10-26 18:35:20 -07:00
Adam Gough
274d5e3afc fix(clay): fixed clay tool (#1725)
* fixed clay tool

* added metadata

* added metadata to types

* fix(clay): remove (optional) from subblock name

* regen docs
2025-10-26 18:30:08 -07:00
Waleed
c552bb9c5f fix(elevenlabs): added internal auth helper for proxy routes (#1732)
* fix(elevenlabs): added internal auth helper for proxy routes

* remove concurrent tests

* build fix
2025-10-25 17:54:27 -07:00
Vikhyath Mondreti
ad7b791242 improvement(deployments): simplify deployments for chat and indicate active version (#1730)
* improvement(deployment-ux): deployment should indicate and make details configurable when activating previous version

* fix activation UI

* remove redundant code

* revert pulsing dot

* fix redeploy bug

* bill workspace owner for deployed chat

* deployed chat

* fix bugs

* fix tests, address greptile

* fix

* ui bug to load api key

* fix qdrant fetch tool
2025-10-25 16:55:34 -07:00
Waleed
ce4893a53c feat(sso-chat-deployment): added sso auth option for chat deployment (#1729)
* feat(sso-chat-deployment): added sso auth option for chat deployment

* ack PR comments
2025-10-25 14:58:25 -07:00
Adam Gough
517f1a91b6 fix(google-scopes): added forms and different drive scope (#1532)
* added google forms scope and google drive scope

* added back file scope

---------

Co-authored-by: Adam Gough <adamgough@Mac.attlocal.net>
Co-authored-by: Adam Gough <adamgough@Mac-530.lan>
2025-10-25 12:08:49 -07:00
Waleed
dba7514350 improvement(schedule): fix UI bug with schedule modal (#1722) 2025-10-23 14:16:59 -07:00
Waleed
e94de1dd26 feat(i18n): update translations (#1721) 2025-10-23 13:15:05 -07:00
Waleed
a4e874b266 feat(tools): added webflow OAuth + tools (#1720)
* feat(tools): added webflow OAuth + tools

* remove itemId from delete item

* remove siteId

* added webhook triggers + oauth scopes + site/collection selector

* update sample payload for webflow triggers

* cleanup

* fix discord color
2025-10-23 13:08:32 -07:00
Waleed
ec034f3fc7 fix(dashboard): add additional context for paginated logs in dashboard, add empty state when selected cell has no data (#1719)
* fix(dashboard): add additional context for paginated logs in dashboard, add empty state when selected cell has no data

* apps/sim

* renaming

* remove relative import
2025-10-22 14:07:52 -07:00
Waleed
e425d064c0 improvement(condition): added variable and envvar highlighting for condition input (#1718) 2025-10-22 13:12:09 -07:00
Waleed
bcd1a2faf6 feat(i18n): update translations (#1709) 2025-10-22 12:55:36 -07:00
Vikhyath Mondreti
989a77261c fix(debug-mode): remove duplicate debug mode flag (#1714) 2025-10-22 00:49:18 -10:00
Vikhyath Mondreti
5ab482127d fix(remove-exec-context): tools handle workflow id check themselves 2025-10-21 16:34:08 -10:00
Vikhyath Mondreti
b8bc632baa fix(workflow-auth): adding workflowId param to only internal urls (#1710) 2025-10-21 16:30:22 -10:00
Waleed
4d7ebd8bcb feat(supabase): added vector search tool and updated docs (#1707)
* feat(supabase): added vector search tool and updated docs

* exclude generic webhook from docs gen

* change items to pages in meta.json for tools directory in the docs
2025-10-21 18:48:18 -07:00
Vikhyath Mondreti
ca1156a6c2 fix(base-url): use getBaseUrl helper in copilot revert state endpoint (#1706)
* revert base url

* fix tests"
;
2025-10-21 15:44:05 -10:00
Vikhyath Mondreti
89eb1849d0 fix(external-route): handleInternalRequest should still check if request internal 2025-10-21 15:00:33 -10:00
Vikhyath Mondreti
1d4833f485 fix case sensitive header (#1705) 2025-10-21 14:51:13 -10:00
Waleed
d5902e91da fix(kb): added internal auth for mistral OCR tool via KB (#1704) 2025-10-21 16:56:53 -07:00
Vikhyath Mondreti
e6ba323de4 Merge pull request #1700 from simstudioai/fix/internal-req
fix(internal-req): add internal token to server side
2025-10-21 12:07:54 -07:00
Waleed
859711991f fix(docs): made sidebar directories scrollable, stylistic changes (#1702) 2025-10-21 12:04:19 -07:00
Waleed
c178a90f02 improvement(helm): added additional envvars to helm charts (#1695)
* improvement(helm): added additional envvars to helm charts

* updated docs
2025-10-21 12:02:51 -07:00
Waleed
eb8995ee7c fix(kb): add base URL for kb fetches (#1701) 2025-10-21 12:02:18 -07:00
Vikhyath Mondreti
b269447539 fix(internal-req): add internal token to server side 2025-10-21 08:36:15 -10:00
Vikhyath Mondreti
ce660e2df9 fix(plan-config): align buttons above divider (#1696)
* fix alignment of buttons on landing page

* revert environment.ts

* revert other change
2025-10-19 16:00:43 -07:00
Vikhyath Mondreti
063bd610b1 fix(jira): issue selector inf render (#1693)
* improvement(copilot): version update, edit previous messages, revert logic, model selector, observability, add haiku 4.5 (#1688)

* Add exa to search online tool

* Larger font size

* Copilot UI improvements

* Fix models options

* Add haiku 4.5 to copilot

* Model ui for haiku

* Fix lint

* Revert

* Only allow one revert to message

* Clear diff on revert

* Fix welcome screen flash

* Add focus onto the user input box when clicked

* Fix grayout of new stream on old edit message

* Lint

* Make edit message submit smoother

* Allow message sent while streaming

* Revert popup improvements: gray out stuff below, show cursor on revert

* Fix lint

* Improve chat history dropdown

* Improve get block metadata tool

* Update update cost route

* Fix env

* Context usage endpoint

* Make chat history scrollable

* Fix lint

* Copilot revert popup updates

* Fix lint

* Fix tests and lint

* Add summary tool

* fix(jira): issue selector inf render

* fix

* fixed

* fix endpoints

* fix

* more detailed error

* fix endpoint

* revert environment.ts file

---------

Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com>
2025-10-19 15:20:08 -07:00
Waleed
9132cd224d fix(mcp): add workflow id to agent-handler for mcp tools (#1694) 2025-10-19 10:40:58 -07:00
Waleed
c70c32a3bd fix(settings-ui): fix settings ui, add upload status (#1691) 2025-10-18 15:37:12 -07:00
Siddharth Ganesan
cc0ace7de6 improvement(copilot): version update (#1689)
* Add exa to search online tool

* Larger font size

* Copilot UI improvements

* Fix models options

* Add haiku 4.5 to copilot

* Model ui for haiku

* Fix lint

* Revert

* Only allow one revert to message

* Clear diff on revert

* Fix welcome screen flash

* Add focus onto the user input box when clicked

* Fix grayout of new stream on old edit message

* Lint

* Make edit message submit smoother

* Allow message sent while streaming

* Revert popup improvements: gray out stuff below, show cursor on revert

* Fix lint

* Improve chat history dropdown

* Improve get block metadata tool

* Update update cost route

* Fix env

* Context usage endpoint

* Make chat history scrollable

* Fix lint

* Copilot revert popup updates

* Fix lint

* Fix tests and lint

* Add summary tool

* Fix env.ts
2025-10-18 12:59:48 -07:00
Vikhyath Mondreti
de1ac9a704 improvement(models): system to blacklist models (#1687)
* improvment(models): system to blacklist models

* move base models endpoint to right place

* remove tngtech models too
2025-10-18 12:09:18 -07:00
Vikhyath Mondreti
728a4c82c6 add inline defaults for storage limits by plan (#1685) 2025-10-18 10:51:18 -07:00
Waleed
37f293a761 feat(i18n): update translations (#1683) 2025-10-18 09:58:18 -07:00
Waleed
d1c08daaf4 improvement(docs): overhaul docs (#1680)
* improvement(docs): overhaul docs

* lint

* light mode

* more light mode

* added llms.txt and llms-full.txt and sitemap

* fixed mobile styling and position for zoom in out

* finished styling

* improvement(docs): overhaul docs

* lint

* remove dups

* renaming components

* cleanup
2025-10-17 22:29:55 -07:00
Waleed
90c34b2c46 fix(airtable): fix airtable oauth connection (#1682) 2025-10-17 22:15:35 -07:00
Waleed
3a0019bd13 fix(docker): remove prebuild lint check from docker (#1681) 2025-10-17 22:10:25 -07:00
Waleed
a6122f2bbc feat(i18n): update translations (#1673) 2025-10-17 21:59:07 -07:00
Adam Gough
9bf5f6e1fc removed raw paylod for gmail and outlook (#1679)
Co-authored-by: Adam Gough <adamgough@Adams-MacBook-Pro.local>
2025-10-17 18:56:48 -07:00
Vikhyath Mondreti
22b3dde155 fix(env-vars): promotion should never leave a copy in personal vars (#1678)
* fix(env-vars): promotion should never leave a copy in personal vars

* fix lint
2025-10-17 18:34:38 -07:00
Vikhyath Mondreti
c1725c1c4b improvement(error-messages): make error extraction generalized abstraction (#1676)
* make error extraction generalized abstraction

* remove comments

* remove console logs
2025-10-17 17:30:12 -07:00
Vikhyath Mondreti
64eee587cd improvement(gdrive): remove mime type subblock from upload file tool (#1674)
* remove mime type subblock from upload file tool for gdrive

* add UI message to limit every x minutes to <60
2025-10-17 14:58:23 -07:00
Vikhyath Mondreti
35c551984f feat(files): gmail upload attachment, workspace files, file storage limits (#1666)
* feat(gmail): add attachment uploads

* add workspace files

* update landing page

* fix lint

* fix test

* fixed UI

* added additional S3 tools to upload files

* added search filters for gmail trigger

* added files to every block

* works

* fix

* register sharepoint tool

---------

Co-authored-by: waleed <waleed>
2025-10-17 14:44:22 -07:00
Vikhyath Mondreti
d92d9a02cd fix(permissions): cannot create workflow with read perms (#1671) 2025-10-17 13:44:44 -07:00
Adam Gough
64ede7f038 added legit urls to the metadata (#1665)
Co-authored-by: Adam Gough <adamgough@Adams-MacBook-Pro.local>
2025-10-17 13:11:02 -07:00
Vikhyath Mondreti
0fbbbe02c7 fix(execution-counts): execution counts by trigger type recorded accurately (#1670) 2025-10-17 12:18:11 -07:00
Waleed
29c7827d6f fix(deployed-chat): include workspace id in deployed chat request (#1664) 2025-10-16 16:23:28 -07:00
Waleed
22f9d6e2df improvement(dashboard): improve dashboard performance, enrich charts, consolidate routes (#1662)
* improvement(dashboard): improve dashboard performance, enrich charts, consolidate routes

* cleanup
2025-10-16 15:53:06 -07:00
Waleed
0cb615428d feat(powershell): add gitattributes to prevent lint issues for powershell users (#1661) 2025-10-16 15:50:26 -07:00
Waleed
74576ec921 feat(i18n): update translations (#1660) 2025-10-16 15:31:10 -07:00
Waleed
67e681dd7c feat(webhooks): added optioanl input format to webhooks, added support for file uploads (#1654)
* feat(webhooks): added  optioanl input format to webhooks, added support for file uploads

* feat(webhooks): added input format component to generic webhook trigger, added file support

* consolidated execution files utils, extended presigned URL duration for async tasks
2025-10-16 12:16:12 -07:00
Waleed
4b05da31e0 feat(i18n): update translations (#1659) 2025-10-16 11:49:51 -07:00
Vikhyath Mondreti
82fa4e8bbb fix(input-format): allow value field to be cleared (#1658)
* fix(input-format): allow value field to be cleared

* don't let value field be detected as deployment change

* fix zep icon in docs

* exclude collapsed state
2025-10-16 11:11:27 -07:00
Waleed
4cd790b200 feat(i18n): update translations (#1653) 2025-10-15 23:21:26 -07:00
Waleed
b7e0b42d48 improvement(dashboard): cleanup execution dashboard UI, fix logs trace, and improve performance (#1651)
* improvement(dashboard): cleanup execution dashboard UI, fix logs trace, and improve perforamnce

* cleanup

* cleaned up

* ack PR comments
2025-10-15 23:00:07 -07:00
Waleed
c6ef5785c8 fix(i18n): fix SDK and guardrails translation corruption, restore i18n gh action for docs (#1652)
* fix(i18n): fix SDK and guardrails translation corruption

* re-enable i18n gh action
2025-10-15 22:52:48 -07:00
Waleed
48eab7e744 feat(dashboard): update UI for execution dashboard, fix next-runtime-env issues for SSO (#1649) 2025-10-15 19:29:10 -07:00
Vikhyath Mondreti
701bf2b510 improvement(response-copilot): prefer builder mode + fix builder/editor mode conversions (#1648)
* improvement(response-copilot): make it use builder mode over editor mode to prevent json formatting issues

* change placeholder text

* fix conversion between builder and editor mode
2025-10-15 19:14:56 -07:00
Vikhyath Mondreti
ba8acbba07 fix(connection-tags): drag and drop didn't render tag dropdown with input format fields (#1647) 2025-10-15 16:31:30 -07:00
Vikhyath Mondreti
56d04a9558 feat(zep): add tools from Zep (#1646)
* feat(zep): add tools from Zep

* correct icon

* address greptile comments
2025-10-15 15:49:18 -07:00
Waleed
2ca9044bc6 fix(layout): layout canvas onInit after node sizes are calculated, remove legacy history code and legacy marking of dirty workflows (#1645) 2025-10-15 15:35:32 -07:00
Vikhyath Mondreti
b2009fe467 fix build issue (#1644) 2025-10-15 14:26:06 -07:00
Vikhyath Mondreti
eb4821ff30 fix(chat-subs): always use getBaseUrl helper to fetch base url (#1643)
* fix(chat-subs): always use next public app url env

* use getBaseUrl everywhere

* move remaining uses

* fix test

* change auth.ts and make getBaseUrl() call not top level for emails

* change remaining uses

* revert csp

* cleanup

* fix
2025-10-15 14:13:23 -07:00
Waleed
4cceb22f21 fix(slack): update slack config to support refresh token rotation (#1642) 2025-10-15 11:54:33 -07:00
Vikhyath Mondreti
fd67fd220c improvement(functions): increase function block timeout to 3 min (#1641)
* improvement(functions): increase function block timeout to 3 min

* fix tests

* use shared constant

* remove comment
2025-10-15 11:52:02 -07:00
Vikhyath Mondreti
061c1dff4e fix(schedules): offload next run calculation to croner (#1640)
* fix(schedules): offload next run calculation to croner

* fix localstorage dependent tests

* address greptile comment
2025-10-15 11:37:42 -07:00
Siddharth Ganesan
1a05ef97d6 feat(test-framework): add executions logs for test framework (#1639)
* Starting logs page

* Execution history v0

* Execution dashboard

* Fix scroll

* Add open workflow button

* Lint

* Fix fetchExecutions in dependency array

---------

Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
2025-10-15 10:36:02 -07:00
2232 changed files with 306575 additions and 74951 deletions

19
.cursorrules Normal file
View File

@@ -0,0 +1,19 @@
# Role
You are a professional software engineer. All code you write MUST follow best practices, ensuring accuracy, quality, readability, and cleanliness. You MUST make FOCUSED EDITS that are EFFICIENT and ELEGANT.
## Logs
ENSURE that you use the logger.info and logger.warn and logger.error instead of the console.log whenever you want to display logs.
## Comments
You must use TSDOC for comments. Do not use ==== for comments to separate sections.
## Globals styles
You should not update the global styles unless it is absolutely necessary. Keep all styling local to components and files.
## Bun
Use bun and bunx not npm and npx

34
.gitattributes vendored Normal file
View File

@@ -0,0 +1,34 @@
# Set default behavior to automatically normalize line endings
* text=auto eol=lf
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout
*.ts text eol=lf
*.tsx text eol=lf
*.js text eol=lf
*.jsx text eol=lf
*.json text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.toml text eol=lf
*.css text eol=lf
*.scss text eol=lf
*.sh text eol=lf
*.bash text eol=lf
Dockerfile* text eol=lf
.dockerignore text eol=lf
.gitignore text eol=lf
.gitattributes text eol=lf
# Denote all files that are truly binary and should not be modified
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.woff binary
*.woff2 binary
*.ttf binary
*.eot binary
*.pdf binary

View File

@@ -321,8 +321,7 @@ In addition, you will need to update the registries:
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
layout: 'full',
type: 'dropdown'
required: true,
options: [
{ label: 'Generate Embeddings', id: 'generate' },
@@ -333,8 +332,7 @@ In addition, you will need to update the registries:
{
id: 'apiKey',
title: 'API Key',
type: 'short-input',
layout: 'full',
type: 'short-input'
placeholder: 'Your Pinecone API key',
password: true,
required: true,

View File

@@ -1,13 +1,11 @@
name: 'Auto-translate Documentation'
# Temporarily disabled
on:
workflow_dispatch: # Allow manual triggers only
# push:
# branches: [ staging ]
# paths:
# - 'apps/docs/content/docs/en/**'
# - 'apps/docs/i18n.json'
push:
branches: [ staging ]
paths:
- 'apps/docs/content/docs/en/**'
- 'apps/docs/i18n.json'
permissions:
contents: write

View File

@@ -26,6 +26,9 @@ jobs:
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Lint code
run: bun run lint:check
- name: Run tests with coverage
env:
NODE_OPTIONS: '--no-warnings'

2
.gitignore vendored
View File

@@ -46,7 +46,7 @@ sim-standalone.tar.gz
next-env.d.ts
# cursorrules
.cursorrules
# .cursorrules
# docs
/apps/docs/.source

View File

@@ -4,11 +4,13 @@ import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page
import { ChevronLeft, ChevronRight } from 'lucide-react'
import Link from 'next/link'
import { notFound } from 'next/navigation'
import { PageNavigationArrows } from '@/components/docs-layout/page-navigation-arrows'
import { TOCFooter } from '@/components/docs-layout/toc-footer'
import { StructuredData } from '@/components/structured-data'
import { CodeBlock } from '@/components/ui/code-block'
import { CopyPageButton } from '@/components/ui/copy-page-button'
import { source } from '@/lib/source'
export const dynamic = 'force-dynamic'
export default async function Page(props: { params: Promise<{ slug?: string[]; lang: string }> }) {
const params = await props.params
const page = source.getPage(params.slug, params.lang)
@@ -22,31 +24,143 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
pageTreeRecord[params.lang] ?? pageTreeRecord.en ?? Object.values(pageTreeRecord)[0]
const neighbours = pageTree ? findNeighbour(pageTree, page.url) : null
const CustomFooter = () => (
<div className='mt-12 flex items-center justify-between border-border border-t py-8'>
{neighbours?.previous ? (
<Link
href={neighbours.previous.url}
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
>
<ChevronLeft className='group-hover:-translate-x-1 h-4 w-4 transition-transform' />
<span className='font-medium'>{neighbours.previous.name}</span>
</Link>
) : (
<div />
)}
const generateBreadcrumbs = () => {
const breadcrumbs: Array<{ name: string; url: string }> = [
{
name: 'Home',
url: baseUrl,
},
]
{neighbours?.next ? (
const urlParts = page.url.split('/').filter(Boolean)
let currentPath = ''
urlParts.forEach((part, index) => {
if (index === 0 && ['en', 'es', 'fr', 'de', 'ja', 'zh'].includes(part)) {
currentPath = `/${part}`
return
}
currentPath += `/${part}`
const name = part
.split('-')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
if (index === urlParts.length - 1) {
breadcrumbs.push({
name: page.data.title,
url: `${baseUrl}${page.url}`,
})
} else {
breadcrumbs.push({
name: name,
url: `${baseUrl}${currentPath}`,
})
}
})
return breadcrumbs
}
const breadcrumbs = generateBreadcrumbs()
const CustomFooter = () => (
<div className='mt-12'>
{/* Navigation links */}
<div className='flex items-center justify-between py-8'>
{neighbours?.previous ? (
<Link
href={neighbours.previous.url}
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
>
<ChevronLeft className='group-hover:-translate-x-1 h-4 w-4 transition-transform' />
<span className='font-medium'>{neighbours.previous.name}</span>
</Link>
) : (
<div />
)}
{neighbours?.next ? (
<Link
href={neighbours.next.url}
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
>
<span className='font-medium'>{neighbours.next.name}</span>
<ChevronRight className='h-4 w-4 transition-transform group-hover:translate-x-1' />
</Link>
) : (
<div />
)}
</div>
{/* Divider line */}
<div className='border-border border-t' />
{/* Social icons */}
<div className='flex items-center gap-4 py-6'>
<Link
href={neighbours.next.url}
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
href='https://x.com/simdotai'
target='_blank'
rel='noopener noreferrer'
aria-label='X (Twitter)'
>
<span className='font-medium'>{neighbours.next.name}</span>
<ChevronRight className='h-4 w-4 transition-transform group-hover:translate-x-1' />
<div
className='h-5 w-5 bg-gray-400 transition-colors hover:bg-gray-500 dark:bg-gray-500 dark:hover:bg-gray-400'
style={{
maskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z%22/%3E%3C/svg%3E')",
maskRepeat: 'no-repeat',
maskPosition: 'center center',
WebkitMaskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z%22/%3E%3C/svg%3E')",
WebkitMaskRepeat: 'no-repeat',
WebkitMaskPosition: 'center center',
}}
/>
</Link>
) : (
<div />
)}
<Link
href='https://github.com/simstudioai/sim'
target='_blank'
rel='noopener noreferrer'
aria-label='GitHub'
>
<div
className='h-5 w-5 bg-gray-400 transition-colors hover:bg-gray-500 dark:bg-gray-500 dark:hover:bg-gray-400'
style={{
maskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z%22/%3E%3C/svg%3E')",
maskRepeat: 'no-repeat',
maskPosition: 'center center',
WebkitMaskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z%22/%3E%3C/svg%3E')",
WebkitMaskRepeat: 'no-repeat',
WebkitMaskPosition: 'center center',
}}
/>
</Link>
<Link
href='https://discord.gg/Hr4UWYEcTT'
target='_blank'
rel='noopener noreferrer'
aria-label='Discord'
>
<div
className='h-5 w-5 bg-gray-400 transition-colors hover:bg-gray-500 dark:bg-gray-500 dark:hover:bg-gray-400'
style={{
maskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z%22/%3E%3C/svg%3E')",
maskRepeat: 'no-repeat',
maskPosition: 'center center',
WebkitMaskImage:
"url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22%3E%3Cpath d=%22M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z%22/%3E%3C/svg%3E')",
WebkitMaskRepeat: 'no-repeat',
WebkitMaskPosition: 'center center',
}}
/>
</Link>
</div>
</div>
)
@@ -57,14 +171,19 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
description={page.data.description || ''}
url={`${baseUrl}${page.url}`}
lang={params.lang}
breadcrumb={breadcrumbs}
/>
<DocsPage
toc={page.data.toc}
full={page.data.full}
breadcrumb={{
enabled: false,
}}
tableOfContent={{
style: 'clerk',
enabled: true,
header: <div className='mb-2 font-medium text-sm'>On this page</div>,
footer: <TOCFooter />,
single: false,
}}
article={{
@@ -79,10 +198,27 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l
component: <CustomFooter />,
}}
>
<DocsTitle>{page.data.title}</DocsTitle>
<DocsDescription>{page.data.description}</DocsDescription>
<div className='relative'>
<div className='absolute top-1 right-0 flex items-center gap-2'>
<CopyPageButton
content={`# ${page.data.title}
${page.data.description || ''}
${page.data.content || ''}`}
/>
<PageNavigationArrows previous={neighbours?.previous} next={neighbours?.next} />
</div>
<DocsTitle>{page.data.title}</DocsTitle>
<DocsDescription>{page.data.description}</DocsDescription>
</div>
<DocsBody>
<MDX components={defaultMdxComponents} />
<MDX
components={{
...defaultMdxComponents,
CodeBlock,
}}
/>
</DocsBody>
</DocsPage>
</>
@@ -128,8 +264,10 @@ export async function generateMetadata(props: {
url: fullUrl,
siteName: 'Sim Documentation',
type: 'article',
locale: params.lang,
alternateLocale: ['en', 'fr', 'zh'].filter((lang) => lang !== params.lang),
locale: params.lang === 'en' ? 'en_US' : `${params.lang}_${params.lang.toUpperCase()}`,
alternateLocale: ['en', 'es', 'fr', 'de', 'ja', 'zh']
.filter((lang) => lang !== params.lang)
.map((lang) => (lang === 'en' ? 'en_US' : `${lang}_${lang.toUpperCase()}`)),
},
twitter: {
card: 'summary',
@@ -152,8 +290,12 @@ export async function generateMetadata(props: {
alternates: {
canonical: fullUrl,
languages: {
en: `${baseUrl}/en${page.url.replace(`/${params.lang}`, '')}`,
'x-default': `${baseUrl}${page.url.replace(`/${params.lang}`, '')}`,
en: `${baseUrl}${page.url.replace(`/${params.lang}`, '')}`,
es: `${baseUrl}/es${page.url.replace(`/${params.lang}`, '')}`,
fr: `${baseUrl}/fr${page.url.replace(`/${params.lang}`, '')}`,
de: `${baseUrl}/de${page.url.replace(`/${params.lang}`, '')}`,
ja: `${baseUrl}/ja${page.url.replace(`/${params.lang}`, '')}`,
zh: `${baseUrl}/zh${page.url.replace(`/${params.lang}`, '')}`,
},
},

View File

@@ -2,11 +2,14 @@ import type { ReactNode } from 'react'
import { defineI18nUI } from 'fumadocs-ui/i18n'
import { DocsLayout } from 'fumadocs-ui/layouts/docs'
import { RootProvider } from 'fumadocs-ui/provider/next'
import { ExternalLink, GithubIcon } from 'lucide-react'
import { Inter } from 'next/font/google'
import { Geist_Mono, Inter } from 'next/font/google'
import Image from 'next/image'
import Link from 'next/link'
import { LanguageDropdown } from '@/components/ui/language-dropdown'
import {
SidebarFolder,
SidebarItem,
SidebarSeparator,
} from '@/components/docs-layout/sidebar-components'
import { Navbar } from '@/components/navbar/navbar'
import { i18n } from '@/lib/i18n'
import { source } from '@/lib/source'
import '../global.css'
@@ -14,6 +17,12 @@ import { Analytics } from '@vercel/analytics/next'
const inter = Inter({
subsets: ['latin'],
variable: '--font-geist-sans',
})
const geistMono = Geist_Mono({
subsets: ['latin'],
variable: '--font-geist-mono',
})
const { provider } = defineI18nUI(i18n, {
@@ -27,25 +36,18 @@ const { provider } = defineI18nUI(i18n, {
fr: {
displayName: 'Français',
},
de: {
displayName: 'Deutsch',
},
ja: {
displayName: '日本語',
},
zh: {
displayName: '简体中文',
},
},
})
const GitHubLink = () => (
<div className='fixed right-4 bottom-4 z-50'>
<Link
href='https://github.com/simstudioai/sim'
target='_blank'
rel='noopener noreferrer'
className='flex h-8 w-8 items-center justify-center rounded-full border border-border bg-background transition-colors hover:bg-muted'
>
<GithubIcon className='h-4 w-4' />
</Link>
</div>
)
type LayoutProps = {
children: ReactNode
params: Promise<{ lang: string }>
@@ -54,43 +56,82 @@ type LayoutProps = {
export default async function Layout({ children, params }: LayoutProps) {
const { lang } = await params
const structuredData = {
'@context': 'https://schema.org',
'@type': 'WebSite',
name: 'Sim Documentation',
description:
'Comprehensive documentation for Sim - the visual workflow builder for AI Agent Workflows.',
url: 'https://docs.sim.ai',
publisher: {
'@type': 'Organization',
name: 'Sim',
url: 'https://sim.ai',
logo: {
'@type': 'ImageObject',
url: 'https://docs.sim.ai/static/logo.png',
},
},
inLanguage: lang,
potentialAction: {
'@type': 'SearchAction',
target: {
'@type': 'EntryPoint',
urlTemplate: 'https://docs.sim.ai/api/search?q={search_term_string}',
},
'query-input': 'required name=search_term_string',
},
}
return (
<html lang={lang} className={inter.className} suppressHydrationWarning>
<body className='flex min-h-screen flex-col'>
<html
lang={lang}
className={`${inter.variable} ${geistMono.variable}`}
suppressHydrationWarning
>
<head>
<script
type='application/ld+json'
dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}
/>
</head>
<body className='flex min-h-screen flex-col font-sans'>
<RootProvider i18n={provider(lang)}>
<Navbar />
<DocsLayout
tree={source.pageTree[lang]}
themeSwitch={{
enabled: false,
}}
nav={{
title: (
<div className='flex items-center gap-3'>
<Image
src='/static/logo.png'
alt='Sim'
width={60}
height={24}
className='h-6 w-auto'
/>
<LanguageDropdown />
</div>
<Image
src='/static/logo.png'
alt='Sim'
width={72}
height={28}
className='h-7 w-auto'
priority
/>
),
}}
links={[
{
text: 'Visit Sim',
url: 'https://sim.ai',
icon: <ExternalLink className='h-4 w-4' />,
},
]}
sidebar={{
defaultOpenLevel: 0,
collapsible: true,
collapsible: false,
footer: null,
banner: null,
components: {
Item: SidebarItem,
Folder: SidebarFolder,
Separator: SidebarSeparator,
},
}}
containerProps={{
className: '!pt-10',
}}
>
{children}
</DocsLayout>
<GitHubLink />
<Analytics />
</RootProvider>
</body>

View File

@@ -1,4 +1,16 @@
import { createFromSource } from 'fumadocs-core/search/server'
import { source } from '@/lib/source'
export const { GET } = createFromSource(source)
export const revalidate = 3600 // Revalidate every hour
export const { GET } = createFromSource(source, {
localeMap: {
en: { language: 'english' },
es: { language: 'spanish' },
fr: { language: 'french' },
de: { language: 'german' },
// ja and zh are not supported by the stemmer library, so we'll skip language config for them
ja: {},
zh: {},
},
})

View File

@@ -4,6 +4,19 @@
@theme {
--color-fd-primary: #802fff; /* Purple from control-bar component */
--font-geist-sans: var(--font-geist-sans);
--font-geist-mono: var(--font-geist-mono);
}
/* Font family utilities */
.font-sans {
font-family: var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}
.font-mono {
font-family: var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
"Liberation Mono", "Courier New", monospace;
}
/* Target any potential border classes */
@@ -15,139 +28,446 @@
:root {
--fd-border: transparent !important;
--fd-border-sidebar: transparent !important;
--fd-nav-height: 64px; /* Custom navbar height (h-16 = 4rem = 64px) */
/* Content container width used to center main content */
--spacing-fd-container: 1400px;
/* Edge gutter = leftover space on each side of centered container */
--edge-gutter: max(1rem, calc((100vw - var(--spacing-fd-container)) / 2));
/* Shift the sidebar slightly left from the content edge for extra breathing room */
--sidebar-shift: 90px;
--sidebar-offset: max(0px, calc(var(--edge-gutter) - var(--sidebar-shift)));
/* Shift TOC slightly right to match sidebar spacing for symmetry */
--toc-shift: 90px;
--toc-offset: max(0px, calc(var(--edge-gutter) - var(--toc-shift)));
/* Sidebar and TOC have 20px internal padding - navbar accounts for this directly */
/* Extra gap between sidebar/TOC and the main text content */
--content-gap: 1.75rem;
}
/* Sidebar improvements for cleaner design */
[data-sidebar] {
--fd-sidebar-width: 280px;
background-color: rgb(255 255 255);
padding-top: 16px;
/* Remove custom layout variable overrides to fallback to fumadocs defaults */
/* ============================================
Navbar Light Mode Styling
============================================ */
/* Light mode navbar and search styling */
:root:not(.dark) nav {
background-color: hsla(0, 0%, 96%, 0.85) !important;
}
/* Clean sidebar container */
[data-sidebar] > div {
padding: 0 16px;
:root:not(.dark) nav button[type="button"] {
background-color: hsla(0, 0%, 93%, 0.85) !important;
backdrop-filter: blur(33px) saturate(180%) !important;
-webkit-backdrop-filter: blur(33px) saturate(180%) !important;
color: rgba(0, 0, 0, 0.6) !important;
}
/* Section headers/separators styling */
[data-sidebar] .text-sm.font-medium.text-muted-foreground,
[data-sidebar] [data-separator] {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
margin-top: 20px;
margin-bottom: 6px;
padding-left: 12px;
padding-right: 12px;
color: rgb(115 115 115);
border: none;
background: none;
:root:not(.dark) nav button[type="button"] kbd {
color: rgba(0, 0, 0, 0.6) !important;
}
/* First separator should have less top margin */
[data-sidebar] [data-separator]:first-of-type {
margin-top: 12px;
/* Dark mode navbar and search styling */
:root.dark nav {
background-color: hsla(0, 0%, 7.04%, 0.92) !important;
backdrop-filter: blur(25px) saturate(180%) brightness(0.6) !important;
-webkit-backdrop-filter: blur(25px) saturate(180%) brightness(0.6) !important;
}
/* Clean sidebar item styling */
[data-sidebar] a {
padding: 8px 12px;
margin: 1px 0;
border-radius: 6px;
font-size: 14px;
font-weight: 400;
line-height: 1.4;
transition: all 0.15s ease;
/* ============================================
Custom Sidebar Styling (Turborepo-inspired)
============================================ */
/* Floating sidebar appearance - remove background */
[data-sidebar-container],
#nd-sidebar {
background: transparent !important;
background-color: transparent !important;
border: none !important;
--color-fd-muted: transparent !important;
--color-fd-card: transparent !important;
--color-fd-secondary: transparent !important;
}
aside[data-sidebar],
aside#nd-sidebar {
background: transparent !important;
background-color: transparent !important;
border: none !important;
border-right: none !important;
}
/* Responsive sidebar positioning */
/* Mobile: Fumadocs handles drawer */
@media (min-width: 768px) and (max-width: 1024px) {
aside[data-sidebar],
aside#nd-sidebar {
left: var(--sidebar-offset) !important;
}
}
/* Desktop layout alignment */
@media (min-width: 1025px) {
[data-sidebar-container] {
margin-left: var(--sidebar-offset) !important;
}
aside[data-sidebar],
aside#nd-sidebar {
left: var(--sidebar-offset) !important;
}
/* TOC positioning - target all possible selectors */
[data-toc],
aside[data-toc],
div[data-toc],
.fd-toc,
#nd-toc,
nav[data-toc],
aside:has([role="complementary"]) {
right: var(--toc-offset) !important;
}
/* Alternative TOC container targeting */
[data-docs-page] > aside:last-child,
main ~ aside {
right: var(--toc-offset) !important;
}
}
/* Sidebar spacing - compact like turborepo */
[data-sidebar-viewport] {
padding: 0.5rem 20px 12px;
background: transparent !important;
background-color: transparent !important;
}
/* Override sidebar item styling to match Raindrop */
/* Target Link and button elements in sidebar - override Fumadocs itemVariants */
/* Exclude the small chevron-only toggle buttons */
#nd-sidebar a,
#nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
font-size: 0.9375rem !important; /* 15px to match Raindrop */
line-height: 1.4 !important;
padding: 0.5rem 0.75rem !important; /* More compact like Raindrop */
font-weight: 400 !important;
border-radius: 0.75rem !important; /* More rounded like Raindrop */
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial,
sans-serif !important;
}
/* Dark mode sidebar text */
.dark #nd-sidebar a,
.dark #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
color: rgba(255, 255, 255, 0.6) !important;
}
/* Light mode sidebar text */
:root:not(.dark) #nd-sidebar a,
:root:not(.dark) #nd-sidebar button:not([aria-label*="ollapse"]):not([aria-label*="xpand"]) {
color: rgba(0, 0, 0, 0.6) !important;
}
/* Make sure chevron icons are visible and properly styled */
#nd-sidebar svg {
display: inline-block !important;
opacity: 0.6 !important;
flex-shrink: 0 !important;
width: 0.75rem !important;
height: 0.75rem !important;
}
/* Ensure the small chevron toggle buttons are visible */
#nd-sidebar button[aria-label*="ollapse"],
#nd-sidebar button[aria-label*="xpand"] {
display: flex !important;
opacity: 1 !important;
padding: 0.25rem !important;
}
/* Root-level spacing now handled by [data-sidebar-viewport] > * rule below */
/* Add tiny gap between nested items */
#nd-sidebar ul li {
margin-bottom: 0.0625rem !important;
}
#nd-sidebar ul li:last-child {
margin-bottom: 0 !important;
}
/* Section headers should be slightly larger */
[data-sidebar-viewport] [data-separator] {
font-size: 0.75rem !important;
font-weight: 600 !important;
text-transform: uppercase !important;
letter-spacing: 0.05em !important;
}
/* Override active state (NO PURPLE) */
#nd-sidebar a[data-active="true"],
#nd-sidebar button[data-active="true"],
#nd-sidebar a.bg-fd-primary\/10,
#nd-sidebar a.text-fd-primary,
#nd-sidebar a[class*="bg-fd-primary"],
#nd-sidebar a[class*="text-fd-primary"],
/* Override custom sidebar purple classes */
#nd-sidebar
a.bg-purple-50\/80,
#nd-sidebar a.text-purple-600,
#nd-sidebar a[class*="bg-purple"],
#nd-sidebar a[class*="text-purple"] {
background-image: none !important;
}
/* Dark mode active state */
.dark #nd-sidebar a[data-active="true"],
.dark #nd-sidebar button[data-active="true"],
.dark #nd-sidebar a.bg-fd-primary\/10,
.dark #nd-sidebar a.text-fd-primary,
.dark #nd-sidebar a[class*="bg-fd-primary"],
.dark #nd-sidebar a[class*="text-fd-primary"],
.dark #nd-sidebar a.bg-purple-50\/80,
.dark #nd-sidebar a.text-purple-600,
.dark #nd-sidebar a[class*="bg-purple"],
.dark #nd-sidebar a[class*="text-purple"] {
background-color: rgba(255, 255, 255, 0.15) !important;
color: rgba(255, 255, 255, 1) !important;
}
/* Light mode active state */
:root:not(.dark) #nd-sidebar a[data-active="true"],
:root:not(.dark) #nd-sidebar button[data-active="true"],
:root:not(.dark) #nd-sidebar a.bg-fd-primary\/10,
:root:not(.dark) #nd-sidebar a.text-fd-primary,
:root:not(.dark) #nd-sidebar a[class*="bg-fd-primary"],
:root:not(.dark) #nd-sidebar a[class*="text-fd-primary"],
:root:not(.dark) #nd-sidebar a.bg-purple-50\/80,
:root:not(.dark) #nd-sidebar a.text-purple-600,
:root:not(.dark) #nd-sidebar a[class*="bg-purple"],
:root:not(.dark) #nd-sidebar a[class*="text-purple"] {
background-color: rgba(0, 0, 0, 0.07) !important;
color: rgba(0, 0, 0, 0.9) !important;
}
/* Dark mode hover state */
.dark #nd-sidebar a:hover:not([data-active="true"]),
.dark #nd-sidebar button:hover:not([data-active="true"]) {
background-color: rgba(255, 255, 255, 0.08) !important;
}
/* Light mode hover state */
:root:not(.dark) #nd-sidebar a:hover:not([data-active="true"]),
:root:not(.dark) #nd-sidebar button:hover:not([data-active="true"]) {
background-color: rgba(0, 0, 0, 0.03) !important;
}
/* Dark mode - ensure active/selected items don't change on hover */
.dark #nd-sidebar a.bg-purple-50\/80:hover,
.dark #nd-sidebar a[class*="bg-purple"]:hover,
.dark #nd-sidebar a[data-active="true"]:hover,
.dark #nd-sidebar button[data-active="true"]:hover {
background-color: rgba(255, 255, 255, 0.15) !important;
color: rgba(255, 255, 255, 1) !important;
}
/* Light mode - ensure active/selected items don't change on hover */
:root:not(.dark) #nd-sidebar a.bg-purple-50\/80:hover,
:root:not(.dark) #nd-sidebar a[class*="bg-purple"]:hover,
:root:not(.dark) #nd-sidebar a[data-active="true"]:hover,
:root:not(.dark) #nd-sidebar button[data-active="true"]:hover {
background-color: rgba(0, 0, 0, 0.07) !important;
color: rgba(0, 0, 0, 0.9) !important;
}
/* Hide search, platform, and collapse button from sidebar completely */
[data-sidebar] [data-search],
[data-sidebar] .search-toggle,
#nd-sidebar [data-search],
#nd-sidebar .search-toggle,
[data-sidebar-viewport] [data-search],
[data-sidebar-viewport] button[data-search],
aside[data-sidebar] [role="button"]:has([data-search]),
aside[data-sidebar] > div > button:first-child,
#nd-sidebar > div > button:first-child,
[data-sidebar] a[href*="sim.ai"],
#nd-sidebar a[href*="sim.ai"],
[data-sidebar-viewport] a[href*="sim.ai"],
/* Hide search buttons (but NOT folder chevron buttons) */
aside[data-sidebar] > div:first-child
> button:not([aria-label="Collapse"]):not([aria-label="Expand"]),
#nd-sidebar > div:first-child > button:not([aria-label="Collapse"]):not([aria-label="Expand"]),
/* Hide sidebar collapse button (panel icon) - direct children only */
aside[data-sidebar] > button:first-of-type:not([aria-label="Collapse"]):not([aria-label="Expand"]),
[data-sidebar]
> button[type="button"]:first-of-type:not([aria-label="Collapse"]):not([aria-label="Expand"]),
button[data-collapse]:not([aria-label="Collapse"]):not([aria-label="Expand"]),
[data-sidebar-header] button,
/* Hide theme toggle from sidebar footer */
aside[data-sidebar] [data-theme-toggle],
[data-sidebar-footer],
[data-sidebar] footer,
footer button[aria-label*="heme"],
aside[data-sidebar] > div:last-child:has(button[aria-label*="heme"]),
aside[data-sidebar] button[aria-label*="heme"],
[data-sidebar] button[aria-label*="Theme"],
/* Additional theme toggle selectors */
aside[data-sidebar] > *:last-child
button,
[data-sidebar-viewport] ~ *,
aside[data-sidebar] > div:not([data-sidebar-viewport]),
/* Aggressive theme toggle hiding */
aside[data-sidebar] svg[class*="sun"],
aside[data-sidebar] svg[class*="moon"],
aside[data-sidebar] button[type="button"]:last-child,
aside button:has(svg:only-child),
[data-sidebar] div:has(> button[type="button"]:only-child:last-child),
/* Hide theme toggle and other non-content elements */
aside[data-sidebar] > *:not([data-sidebar-viewport]) {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
height: 0 !important;
max-height: 0 !important;
overflow: hidden !important;
pointer-events: none !important;
position: absolute !important;
left: -9999px !important;
}
/* Desktop only: Hide sidebar toggle buttons and nav title/logo (keep visible on mobile) */
@media (min-width: 1025px) {
[data-sidebar-container] > button,
[data-sidebar-container] [data-toggle],
aside[data-sidebar] [data-sidebar-toggle],
button[data-sidebar-toggle],
nav button[data-sidebar-toggle],
button[aria-label="Toggle Sidebar"],
button[aria-label="Collapse Sidebar"],
/* Hide nav title/logo in sidebar on desktop - target all possible locations */
aside[data-sidebar] a[href="/"],
aside[data-sidebar] a[href="/"] img,
aside[data-sidebar] > a:first-child,
aside[data-sidebar] > div > a:first-child,
aside[data-sidebar] img[alt="Sim"],
[data-sidebar-header],
[data-sidebar] [data-title],
#nd-sidebar > a:first-child,
#nd-sidebar > div:first-child > a:first-child,
#nd-sidebar img[alt="Sim"] {
display: none !important;
visibility: hidden !important;
height: 0 !important;
max-height: 0 !important;
overflow: hidden !important;
}
}
/* Extra aggressive - hide everything after the viewport */
aside[data-sidebar] [data-sidebar-viewport] ~ * {
display: none !important;
}
/* Tighter spacing for sidebar content */
[data-sidebar-viewport] > * {
margin-bottom: 0.0625rem;
}
[data-sidebar-viewport] > *:last-child {
margin-bottom: 0;
}
[data-sidebar-viewport] ul {
margin: 0;
padding: 0;
}
/* Ensure sidebar starts with content immediately */
aside[data-sidebar] > div:first-child {
padding-top: 0;
}
/* Remove all sidebar borders and backgrounds */
[data-sidebar-container],
aside[data-sidebar],
[data-sidebar],
[data-sidebar] *,
#nd-sidebar,
#nd-sidebar * {
border: none !important;
border-right: none !important;
border-left: none !important;
border-top: none !important;
border-bottom: none !important;
}
/* Override fumadocs background colors for sidebar */
.dark #nd-sidebar,
.dark [data-sidebar-container],
.dark aside[data-sidebar] {
--color-fd-muted: transparent !important;
--color-fd-secondary: transparent !important;
background: transparent !important;
background-color: transparent !important;
}
/* Force normal text flow in sidebar */
[data-sidebar],
[data-sidebar] *,
[data-sidebar-viewport],
[data-sidebar-viewport] * {
writing-mode: horizontal-tb !important;
}
/* ============================================
Code Block Styling (Improved)
============================================ */
/* Apply Geist Mono to code elements */
code,
pre,
pre code {
font-family: var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
"Liberation Mono", "Courier New", monospace;
}
/* Inline code */
:not(pre) > code {
padding: 0.2em 0.4em;
border-radius: 0.25rem;
font-size: 0.875em;
font-weight: 500;
}
/* Light mode inline code */
:root:not(.dark) :not(pre) > code {
background-color: rgb(243 244 246);
color: rgb(220 38 38);
border: 1px solid rgb(229 231 235);
}
/* Dark mode inline code */
.dark :not(pre) > code {
background-color: rgb(31 41 55);
color: rgb(248 113 113);
border: 1px solid rgb(55 65 81);
}
/* Code block container improvements */
pre {
font-size: 0.875rem;
line-height: 1.7;
tab-size: 2;
-webkit-overflow-scrolling: touch;
}
pre code {
display: block;
color: rgb(71 85 105);
text-decoration: none;
width: fit-content;
min-width: 100%;
}
[data-sidebar] a[data-active="true"] {
background-color: rgba(128, 47, 255, 0.08);
color: var(--color-fd-primary);
font-weight: 500;
}
[data-sidebar] a:hover:not([data-active="true"]) {
background-color: rgb(248 250 252);
color: rgb(51 65 85);
}
/* Improve spacing between sidebar items */
[data-sidebar] nav > * + * {
margin-top: 2px;
}
/* Section group styling */
[data-sidebar] [data-folder] {
margin-bottom: 4px;
}
[data-sidebar] [data-folder] > div:first-child {
font-weight: 500;
font-size: 13px;
color: rgb(15 23 42);
padding: 6px 12px;
margin-bottom: 4px;
}
/* Clean up folder toggle buttons */
[data-sidebar] button[data-folder-toggle] {
padding: 4px 8px 4px 12px;
border-radius: 6px;
font-size: 13px;
font-weight: 500;
color: rgb(51 65 85);
}
[data-sidebar] button[data-folder-toggle]:hover {
background-color: rgb(248 250 252);
}
/* Nested item indentation */
[data-sidebar] [data-folder] a {
padding-left: 24px;
font-size: 14px;
}
/* Dark mode adjustments */
@media (prefers-color-scheme: dark) {
[data-sidebar] {
background-color: rgb(2 8 23);
}
[data-sidebar] a {
color: rgb(148 163 184);
}
[data-sidebar] a:hover:not([data-active="true"]) {
background-color: rgb(30 41 59);
color: rgb(226 232 240);
}
[data-sidebar] a[data-active="true"] {
background-color: rgba(128, 47, 255, 0.15);
color: var(--color-fd-primary);
}
[data-sidebar] .text-sm.font-medium.text-muted-foreground,
[data-sidebar] [data-separator] {
color: rgb(148 163 184);
}
[data-sidebar] [data-folder] > div:first-child {
color: rgb(226 232 240);
}
[data-sidebar] button[data-folder-toggle] {
color: rgb(148 163 184);
}
[data-sidebar] button[data-folder-toggle]:hover {
background-color: rgb(30 41 59);
}
/* Syntax highlighting adjustments for better readability */
pre code .line {
padding-left: 0;
padding-right: 0;
}
/* Custom text highlighting styles */
@@ -162,15 +482,54 @@
/* Add bottom spacing to prevent abrupt page endings */
[data-content] {
padding-top: 1.5rem !important;
padding-bottom: 4rem;
}
/* Alternative fallback for different Fumadocs versions */
main article,
.docs-page main {
padding-top: 1.5rem !important;
padding-bottom: 4rem;
}
/* ============================================
Center and Constrain Main Content Width
============================================ */
/* Main content area - center and constrain like turborepo/raindrop */
main[data-main] {
max-width: var(--spacing-fd-container, 1400px);
margin-left: auto;
margin-right: auto;
padding-top: 1rem;
padding-left: calc(var(--sidebar-offset) + var(--content-gap));
padding-right: calc(var(--toc-offset) + var(--content-gap));
order: 1 !important;
}
/* Adjust for smaller screens */
@media (max-width: 768px) {
main[data-main] {
padding-left: 1rem;
padding-right: 1rem;
}
}
/* Ensure docs page content is properly constrained */
[data-docs-page] {
max-width: 1400px;
margin-left: auto;
margin-right: auto;
padding-top: 1.5rem !important;
}
/* Override Fumadocs default content padding */
article[data-content],
div[data-content] {
padding-top: 1.5rem !important;
}
/* Remove any unwanted borders/outlines from video elements */
video {
outline: none !important;

View File

@@ -22,9 +22,15 @@ export const metadata = {
'drag and drop workflows',
'AI integrations',
'workflow canvas',
'AI development platform',
'AI Agent Workflow Builder',
'workflow orchestration',
'agent builder',
'AI workflow automation',
'visual programming',
],
authors: [{ name: 'Sim Team', url: 'https://sim.ai' }],
creator: 'Sim',
publisher: 'Sim',
category: 'Developer Tools',
classification: 'Developer Documentation',
manifest: '/favicon/site.webmanifest',
@@ -44,7 +50,7 @@ export const metadata = {
openGraph: {
type: 'website',
locale: 'en_US',
alternateLocale: ['fr_FR', 'zh_CN'],
alternateLocale: ['es_ES', 'fr_FR', 'de_DE', 'ja_JP', 'zh_CN'],
url: 'https://docs.sim.ai',
siteName: 'Sim Documentation',
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
@@ -52,11 +58,13 @@ export const metadata = {
'Comprehensive documentation for Sim - the visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines.',
},
twitter: {
card: 'summary',
card: 'summary_large_image',
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
description:
'Comprehensive documentation for Sim - the visual workflow builder for AI applications.',
creator: '@sim_ai',
creator: '@simdotai',
site: '@simdotai',
images: ['/og-image.png'],
},
robots: {
index: true,
@@ -72,9 +80,13 @@ export const metadata = {
alternates: {
canonical: 'https://docs.sim.ai',
languages: {
en: '/en',
fr: '/fr',
zh: '/zh',
'x-default': 'https://docs.sim.ai',
en: 'https://docs.sim.ai',
es: 'https://docs.sim.ai/es',
fr: 'https://docs.sim.ai/fr',
de: 'https://docs.sim.ai/de',
ja: 'https://docs.sim.ai/ja',
zh: 'https://docs.sim.ai/zh',
},
},
}

View File

@@ -0,0 +1,31 @@
import { getLLMText } from '@/lib/llms'
import { source } from '@/lib/source'
export const revalidate = false
export async function GET() {
try {
const pages = source.getPages().filter((page) => {
if (!page || !page.data || !page.url) return false
const pathParts = page.url.split('/').filter(Boolean)
const hasLangPrefix = pathParts[0] && ['es', 'fr', 'de', 'ja', 'zh'].includes(pathParts[0])
return !hasLangPrefix
})
const scan = pages.map((page) => getLLMText(page))
const scanned = await Promise.all(scan)
const filtered = scanned.filter((text) => text && text.length > 0)
return new Response(filtered.join('\n\n---\n\n'), {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
},
})
} catch (error) {
console.error('Error generating LLM full text:', error)
return new Response('Error generating full documentation text', { status: 500 })
}
}

View File

@@ -1,11 +1,87 @@
import { getLLMText } from '@/lib/llms'
import { source } from '@/lib/source'
export const revalidate = false
export async function GET() {
const scan = source.getPages().map(getLLMText)
const scanned = await Promise.all(scan)
const baseUrl = 'https://docs.sim.ai'
return new Response(scanned.join('\n\n'))
try {
const pages = source.getPages().filter((page) => {
if (!page || !page.data || !page.url) return false
const pathParts = page.url.split('/').filter(Boolean)
const hasLangPrefix = pathParts[0] && ['es', 'fr', 'de', 'ja', 'zh'].includes(pathParts[0])
return !hasLangPrefix
})
const sections: Record<string, Array<{ title: string; url: string; description?: string }>> = {}
pages.forEach((page) => {
const pathParts = page.url.split('/').filter(Boolean)
const section =
pathParts[0] && ['en', 'es', 'fr', 'de', 'ja', 'zh'].includes(pathParts[0])
? pathParts[1] || 'root'
: pathParts[0] || 'root'
if (!sections[section]) {
sections[section] = []
}
sections[section].push({
title: page.data.title || 'Untitled',
url: `${baseUrl}${page.url}`,
description: page.data.description,
})
})
const manifest = `# Sim Documentation
> Visual Workflow Builder for AI Applications
Sim is a visual workflow builder for AI applications that lets you build AI agent workflows visually. Create powerful AI agents, automation workflows, and data processing pipelines by connecting blocks on a canvas—no coding required.
## Documentation Overview
This file provides an overview of our documentation. For full content of all pages, see ${baseUrl}/llms-full.txt
## Main Sections
${Object.entries(sections)
.map(([section, items]) => {
const sectionTitle = section
.split('-')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
return `### ${sectionTitle}\n\n${items.map((item) => `- ${item.title}: ${item.url}${item.description ? `\n ${item.description}` : ''}`).join('\n')}`
})
.join('\n\n')}
## Additional Resources
- Full documentation content: ${baseUrl}/llms-full.txt
- Individual page content: ${baseUrl}/llms.mdx/[page-path]
- API documentation: ${baseUrl}/sdks/
- Tool integrations: ${baseUrl}/tools/
## Statistics
- Total pages: ${pages.length} (English only)
- Other languages available at: ${baseUrl}/[lang]/ (es, fr, de, ja, zh)
---
Generated: ${new Date().toISOString()}
Format: llms.txt v0.1.0
See: https://llmstxt.org for specification`
return new Response(manifest, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
},
})
} catch (error) {
console.error('Error generating LLM manifest:', error)
return new Response('Error generating documentation manifest', { status: 500 })
}
}

View File

@@ -9,14 +9,26 @@ export async function GET() {
User-agent: *
Allow: /
# Allow all well-behaved crawlers
# Search engine crawlers
User-agent: Googlebot
Allow: /
User-agent: Bingbot
Allow: /
# AI and LLM crawlers
User-agent: Slurp
Allow: /
User-agent: DuckDuckBot
Allow: /
User-agent: Baiduspider
Allow: /
User-agent: YandexBot
Allow: /
# AI and LLM crawlers - explicitly allowed for documentation indexing
User-agent: GPTBot
Allow: /
@@ -32,6 +44,21 @@ Allow: /
User-agent: Claude-Web
Allow: /
User-agent: Applebot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Diffbot
Allow: /
User-agent: FacebookBot
Allow: /
User-agent: cohere-ai
Allow: /
# Disallow admin and internal paths (if any exist)
Disallow: /.next/
Disallow: /api/internal/
@@ -41,14 +68,29 @@ Disallow: /admin/
# Allow but don't prioritize these
Allow: /api/search
Allow: /llms.txt
Allow: /llms-full.txt
Allow: /llms.mdx/
# Sitemaps
Sitemap: ${baseUrl}/sitemap.xml
# Crawl delay for aggressive bots (optional)
# Crawl-delay: 1
# Additional resources for AI indexing
# See https://github.com/AnswerDotAI/llms-txt for more info
# LLM-friendly content available at: ${baseUrl}/llms.txt`
# LLM-friendly content:
# Manifest: ${baseUrl}/llms.txt
# Full content: ${baseUrl}/llms-full.txt
# Individual pages: ${baseUrl}/llms.mdx/[page-path]
# Multi-language documentation available at:
# ${baseUrl}/en - English
# ${baseUrl}/es - Español
# ${baseUrl}/fr - Français
# ${baseUrl}/de - Deutsch
# ${baseUrl}/ja - 日本語
# ${baseUrl}/zh - 简体中文`
return new Response(robotsTxt, {
headers: {

View File

@@ -8,6 +8,14 @@ export async function GET() {
const allPages = source.getPages()
const getPriority = (url: string): string => {
if (url === '/introduction' || url === '/') return '1.0'
if (url === '/getting-started') return '0.9'
if (url.match(/^\/[^/]+$/)) return '0.8'
if (url.includes('/sdks/') || url.includes('/tools/')) return '0.7'
return '0.6'
}
const urls = allPages
.flatMap((page) => {
const urlWithoutLang = page.url.replace(/^\/[a-z]{2}\//, '/')
@@ -22,7 +30,7 @@ export async function GET() {
<loc>${url}</loc>
<lastmod>${new Date().toISOString().split('T')[0]}</lastmod>
<changefreq>weekly</changefreq>
<priority>${urlWithoutLang === '/introduction' ? '1.0' : '0.8'}</priority>
<priority>${getPriority(urlWithoutLang)}</priority>
${i18n.languages.length > 1 ? generateAlternateLinks(baseUrl, urlWithoutLang) : ''}
</url>`
})
@@ -37,6 +45,7 @@ ${urls}
return new Response(sitemap, {
headers: {
'Content-Type': 'application/xml',
'Cache-Control': 'public, max-age=3600, s-maxage=3600',
},
})
}

View File

@@ -0,0 +1,42 @@
'use client'
import { ChevronLeft, ChevronRight } from 'lucide-react'
import Link from 'next/link'
interface PageNavigationArrowsProps {
previous?: {
url: string
}
next?: {
url: string
}
}
export function PageNavigationArrows({ previous, next }: PageNavigationArrowsProps) {
if (!previous && !next) return null
return (
<div className='flex items-center gap-2'>
{previous && (
<Link
href={previous.url}
className='inline-flex items-center justify-center gap-1.5 rounded-lg border border-border/40 bg-background px-2.5 py-1.5 text-muted-foreground/60 text-sm transition-all hover:border-border hover:bg-accent/50 hover:text-muted-foreground'
aria-label='Previous page'
title='Previous page'
>
<ChevronLeft className='h-4 w-4' />
</Link>
)}
{next && (
<Link
href={next.url}
className='inline-flex items-center justify-center gap-1.5 rounded-lg border border-border/40 bg-background px-2.5 py-1.5 text-muted-foreground/60 text-sm transition-all hover:border-border hover:bg-accent/50 hover:text-muted-foreground'
aria-label='Next page'
title='Next page'
>
<ChevronRight className='h-4 w-4' />
</Link>
)}
</div>
)
}

View File

@@ -0,0 +1,138 @@
'use client'
import { type ReactNode, useEffect, useState } from 'react'
import type { PageTree } from 'fumadocs-core/server'
import { ChevronRight } from 'lucide-react'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
import { cn } from '@/lib/utils'
function isActive(url: string, pathname: string, nested = true): boolean {
return url === pathname || (nested && pathname.startsWith(`${url}/`))
}
export function SidebarItem({ item }: { item: PageTree.Item }) {
const pathname = usePathname()
const active = isActive(item.url, pathname, false)
return (
<li className='mb-[0.0625rem] list-none'>
<Link
href={item.url}
className={cn(
'block rounded-md px-2.5 py-1.5 font-normal text-[13px] leading-tight transition-colors',
'text-gray-600 dark:text-gray-400',
!active && 'hover:bg-gray-100/60 dark:hover:bg-gray-800/40',
active &&
'bg-purple-50/80 font-medium text-purple-600 dark:bg-purple-900/15 dark:text-purple-400'
)}
>
{item.name}
</Link>
</li>
)
}
export function SidebarFolder({
item,
level,
children,
}: {
item: PageTree.Folder
level: number
children: ReactNode
}) {
const pathname = usePathname()
const hasActiveChild = checkHasActiveChild(item, pathname)
const [open, setOpen] = useState(hasActiveChild)
useEffect(() => {
setOpen(hasActiveChild)
}, [hasActiveChild])
return (
<li className='mb-[0.0625rem] list-none'>
{item.index ? (
<div className='flex items-center gap-0.5'>
<Link
href={item.index.url}
className={cn(
'block flex-1 rounded-md px-2.5 py-1.5 font-medium text-[13px] leading-tight transition-colors',
'text-gray-800 dark:text-gray-200',
!isActive(item.index.url, pathname, false) &&
'hover:bg-gray-100/60 dark:hover:bg-gray-800/40',
isActive(item.index.url, pathname, false) &&
'bg-purple-50/80 text-purple-600 dark:bg-purple-900/15 dark:text-purple-400'
)}
>
{item.name}
</Link>
<button
onClick={() => setOpen(!open)}
className='rounded p-1 transition-colors hover:bg-gray-100/60 dark:hover:bg-gray-800/40'
aria-label={open ? 'Collapse' : 'Expand'}
>
<ChevronRight
className={cn(
'h-3 w-3 text-gray-400 transition-transform duration-200 ease-in-out dark:text-gray-500',
open && 'rotate-90'
)}
/>
</button>
</div>
) : (
<button
onClick={() => setOpen(!open)}
className={cn(
'flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-left font-medium text-[13px] leading-tight transition-colors',
'hover:bg-gray-100/60 dark:hover:bg-gray-800/40',
'text-gray-800 dark:text-gray-200'
)}
>
<span>{item.name}</span>
<ChevronRight
className={cn(
'ml-auto h-3 w-3 flex-shrink-0 text-gray-400 transition-transform duration-200 ease-in-out dark:text-gray-500',
open && 'rotate-90'
)}
/>
</button>
)}
<div
className={cn(
'overflow-hidden transition-all duration-200 ease-in-out',
open ? 'max-h-[10000px] opacity-100' : 'max-h-0 opacity-0'
)}
>
<ul className='mt-0.5 ml-2 space-y-[0.0625rem] border-gray-200/60 border-l pl-2.5 dark:border-gray-700/60'>
{children}
</ul>
</div>
</li>
)
}
export function SidebarSeparator({ item }: { item: PageTree.Separator }) {
return (
<p className='mt-4 mb-1.5 px-2.5 font-semibold text-[10px] text-gray-500/80 uppercase tracking-wide dark:text-gray-500'>
{item.name}
</p>
)
}
function checkHasActiveChild(node: PageTree.Folder, pathname: string): boolean {
if (node.index && isActive(node.index.url, pathname)) {
return true
}
for (const child of node.children) {
if (child.type === 'page' && isActive(child.url, pathname)) {
return true
}
if (child.type === 'folder' && checkHasActiveChild(child, pathname)) {
return true
}
}
return false
}

View File

@@ -0,0 +1,41 @@
'use client'
import { useState } from 'react'
import { ArrowRight, ChevronRight } from 'lucide-react'
import Link from 'next/link'
export function TOCFooter() {
const [isHovered, setIsHovered] = useState(false)
return (
<div className='sticky bottom-0 mt-6'>
<div className='flex flex-col gap-2 rounded-lg border border-border bg-secondary p-6 text-sm'>
<div className='text-balance font-semibold text-base leading-tight'>
Start building today
</div>
<div className='text-muted-foreground'>Trusted by over 60,000 builders.</div>
<div className='text-muted-foreground'>
Build Agentic workflows visually on a drag-and-drop canvas or with natural language.
</div>
<Link
href='https://sim.ai/signup'
target='_blank'
rel='noopener noreferrer'
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
className='group mt-2 inline-flex h-8 w-fit items-center justify-center gap-1 whitespace-nowrap rounded-[10px] border border-[#6F3DFA] bg-gradient-to-b from-[#8357FF] to-[#6F3DFA] px-3 pr-[10px] pl-[12px] font-medium text-sm text-white shadow-[inset_0_2px_4px_0_#9B77FF] outline-none transition-all hover:shadow-lg focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50'
aria-label='Get started with Sim - Sign up for free'
>
<span>Get started</span>
<span className='inline-flex transition-transform duration-200 group-hover:translate-x-0.5'>
{isHovered ? (
<ArrowRight className='h-4 w-4' aria-hidden='true' />
) : (
<ChevronRight className='h-4 w-4' aria-hidden='true' />
)}
</span>
</Link>
</div>
</div>
)
}

View File

@@ -0,0 +1,66 @@
'use client'
import Image from 'next/image'
import Link from 'next/link'
import { LanguageDropdown } from '@/components/ui/language-dropdown'
import { SearchTrigger } from '@/components/ui/search-trigger'
import { ThemeToggle } from '@/components/ui/theme-toggle'
export function Navbar() {
return (
<nav
className='sticky top-0 z-50 border-border/50 border-b'
style={{
backdropFilter: 'blur(25px) saturate(180%)',
WebkitBackdropFilter: 'blur(25px) saturate(180%)',
}}
>
{/* Desktop: Single row layout */}
<div className='hidden h-16 w-full items-center lg:flex'>
<div
className='relative flex w-full items-center justify-between'
style={{
paddingLeft: 'calc(var(--sidebar-offset) + 20px)',
paddingRight: 'calc(var(--toc-offset) + 60px)',
}}
>
{/* Left cluster: logo */}
<div className='flex items-center'>
<Link href='/' className='flex min-w-[100px] items-center'>
<Image
src='/static/logo.png'
alt='Sim'
width={72}
height={28}
className='h-7 w-auto'
/>
</Link>
</div>
{/* Center cluster: search - absolutely positioned to center */}
<div className='-translate-x-1/2 absolute left-1/2 flex items-center justify-center'>
<SearchTrigger />
</div>
{/* Right cluster aligns with TOC edge */}
<div className='flex items-center gap-4'>
<Link
href='https://sim.ai'
target='_blank'
rel='noopener noreferrer'
className='rounded-xl px-3 py-2 font-normal text-[0.9375rem] text-foreground/60 leading-[1.4] transition-colors hover:bg-foreground/8 hover:text-foreground'
style={{
fontFamily:
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
}}
>
Platform
</Link>
<LanguageDropdown />
<ThemeToggle />
</div>
</div>
</div>
</nav>
)
}

View File

@@ -88,7 +88,7 @@ export function StructuredData({
},
'query-input': 'required name=search_term_string',
},
inLanguage: ['en', 'fr', 'zh'],
inLanguage: ['en', 'es', 'fr', 'de', 'ja', 'zh'],
}
const faqStructuredData = title.toLowerCase().includes('faq') && {

View File

@@ -0,0 +1,50 @@
'use client'
import { useState } from 'react'
import { CodeBlock as FumadocsCodeBlock } from 'fumadocs-ui/components/codeblock'
import { Check, Copy } from 'lucide-react'
import { cn } from '@/lib/utils'
export function CodeBlock(props: React.ComponentProps<typeof FumadocsCodeBlock>) {
const [copied, setCopied] = useState(false)
const handleCopy = async (text: string) => {
await navigator.clipboard.writeText(text)
setCopied(true)
setTimeout(() => setCopied(false), 2000)
}
return (
<FumadocsCodeBlock
{...props}
Actions={({ children, className }) => (
<div className={cn('empty:hidden', className)}>
{/* Custom copy button */}
<button
type='button'
aria-label={copied ? 'Copied Text' : 'Copy Text'}
onClick={(e) => {
const pre = (e.currentTarget as HTMLElement)
.closest('.nd-codeblock')
?.querySelector('pre')
if (pre) handleCopy(pre.textContent || '')
}}
className={cn(
'rounded-md p-2 transition-all',
'border border-border bg-background/80 hover:bg-muted',
'backdrop-blur-sm'
)}
>
<span className='flex items-center justify-center'>
{copied ? (
<Check size={16} className='text-green-600 dark:text-green-400' />
) : (
<Copy size={16} className='text-muted-foreground' />
)}
</span>
</button>
</div>
)}
/>
)
}

View File

@@ -0,0 +1,42 @@
'use client'
import { useState } from 'react'
import { Check, Copy } from 'lucide-react'
interface CopyPageButtonProps {
content: string
}
export function CopyPageButton({ content }: CopyPageButtonProps) {
const [copied, setCopied] = useState(false)
const handleCopy = async () => {
try {
await navigator.clipboard.writeText(content)
setCopied(true)
setTimeout(() => setCopied(false), 2000)
} catch (err) {
console.error('Failed to copy:', err)
}
}
return (
<button
onClick={handleCopy}
className='flex items-center gap-1.5 rounded-lg border border-border/40 bg-background px-2.5 py-2 text-muted-foreground/60 text-sm leading-none transition-all hover:border-border hover:bg-accent/50 hover:text-muted-foreground'
aria-label={copied ? 'Copied to clipboard' : 'Copy page content'}
>
{copied ? (
<>
<Check className='h-3.5 w-3.5' />
<span>Copied</span>
</>
) : (
<>
<Copy className='h-3.5 w-3.5' />
<span>Copy page</span>
</>
)}
</button>
)
}

View File

@@ -1,7 +1,7 @@
'use client'
import { useEffect, useState } from 'react'
import { Check, ChevronDown } from 'lucide-react'
import { Check, ChevronRight } from 'lucide-react'
import { useParams, usePathname, useRouter } from 'next/navigation'
const languages = {
@@ -82,15 +82,14 @@ export function LanguageDropdown() {
aria-haspopup='listbox'
aria-expanded={isOpen}
aria-controls='language-menu'
className='flex items-center gap-1.5 rounded-lg border border-border/30 bg-muted/40 px-2.5 py-1.5 text-sm shadow-sm backdrop-blur-sm transition-colors hover:bg-muted focus:outline-none focus-visible:ring-2 focus-visible:ring-ring'
className='flex items-center gap-1.5 rounded-xl px-3 py-2 font-normal text-[0.9375rem] text-foreground/60 leading-[1.4] transition-colors hover:bg-foreground/8 hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring'
style={{
fontFamily:
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
}}
>
<span className='text-sm'>{languages[currentLang as keyof typeof languages]?.flag}</span>
<span className='font-medium text-foreground'>
{languages[currentLang as keyof typeof languages]?.name}
</span>
<ChevronDown
className={`h-3 w-3 text-muted-foreground transition-transform ${isOpen ? 'rotate-180' : ''}`}
/>
<span>{languages[currentLang as keyof typeof languages]?.name}</span>
<ChevronRight className='h-3.5 w-3.5' />
</button>
{isOpen && (
@@ -99,7 +98,7 @@ export function LanguageDropdown() {
<div
id='language-menu'
role='listbox'
className='absolute top-full left-0 z-[1001] mt-1 max-h-[75vh] w-56 overflow-auto rounded-xl border border-border/50 bg-white shadow-2xl md:w-44 md:bg-background/95 md:backdrop-blur-md dark:bg-neutral-950 md:dark:bg-background/95'
className='absolute top-full right-0 z-[1001] mt-1 max-h-[75vh] w-56 overflow-auto rounded-xl border border-border/50 bg-white shadow-2xl md:w-44 md:bg-background/95 md:backdrop-blur-md dark:bg-neutral-950 md:dark:bg-background/95'
>
{Object.entries(languages).map(([code, lang]) => (
<button

View File

@@ -0,0 +1,38 @@
'use client'
import { Search } from 'lucide-react'
export function SearchTrigger() {
const handleClick = () => {
const event = new KeyboardEvent('keydown', {
key: 'k',
metaKey: true,
bubbles: true,
})
document.dispatchEvent(event)
}
return (
<button
type='button'
className='flex h-10 w-[460px] items-center gap-2 rounded-xl border border-border/50 px-3 py-2 text-sm backdrop-blur-xl transition-colors hover:border-border'
style={{
backgroundColor: 'hsla(0, 0%, 5%, 0.85)',
backdropFilter: 'blur(33px) saturate(180%)',
WebkitBackdropFilter: 'blur(33px) saturate(180%)',
color: 'rgba(255, 255, 255, 0.6)',
}}
onClick={handleClick}
>
<Search className='h-4 w-4' />
<span>Search...</span>
<kbd
className='ml-auto flex items-center gap-0.5 font-medium'
style={{ color: 'rgba(255, 255, 255, 0.6)' }}
>
<span style={{ fontSize: '15px', lineHeight: '1' }}></span>
<span style={{ fontSize: '13px', lineHeight: '1' }}>K</span>
</kbd>
</button>
)
}

View File

@@ -0,0 +1,32 @@
'use client'
import { useEffect, useState } from 'react'
import { Moon, Sun } from 'lucide-react'
import { useTheme } from 'next-themes'
export function ThemeToggle() {
const { theme, setTheme } = useTheme()
const [mounted, setMounted] = useState(false)
useEffect(() => {
setMounted(true)
}, [])
if (!mounted) {
return (
<button className='flex items-center justify-center rounded-md p-1 text-muted-foreground'>
<Moon className='h-4 w-4' />
</button>
)
}
return (
<button
onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
className='flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:text-foreground'
aria-label='Toggle theme'
>
{theme === 'dark' ? <Moon className='h-4 w-4' /> : <Sun className='h-4 w-4' />}
</button>
)
}

View File

@@ -8,7 +8,7 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
The Guardrails block validates and protects your AI workflows by checking content against multiple validation types. Ensure data quality, prevent hallucinations, detect PII, and enforce format requirements before content moves through your workflow.
Der Guardrails-Block validiert und schützt Ihre KI-Workflows, indem er Inhalte anhand mehrerer Validierungstypen überprüft. Stellen Sie die Datenqualität sicher, verhindern Sie Halluzinationen, erkennen Sie personenbezogene Daten und erzwingen Sie Formatanforderungen, bevor Inhalte durch Ihren Workflow fließen.
<div className="flex justify-center">
<Image
@@ -20,201 +20,201 @@ The Guardrails block validates and protects your AI workflows by checking conten
/>
</div>
## Overview
## Übersicht
The Guardrails block enables you to:
Mit dem Guardrails-Block können Sie:
<Steps>
<Step>
<strong>Validate JSON Structure</strong>: Ensure LLM outputs are valid JSON before parsing
<strong>JSON-Struktur validieren</strong>: Stellen Sie sicher, dass LLM-Ausgaben gültiges JSON sind, bevor sie geparst werden
</Step>
<Step>
<strong>Match Regex Patterns</strong>: Verify content matches specific formats (emails, phone numbers, URLs, etc.)
<strong>Regex-Muster abgleichen</strong>: Überprüfen Sie, ob Inhalte bestimmten Formaten entsprechen (E-Mails, Telefonnummern, URLs usw.)
</Step>
<Step>
<strong>Detect Hallucinations</strong>: Use RAG + LLM scoring to validate AI outputs against knowledge base content
<strong>Halluzinationen erkennen</strong>: Nutzen Sie RAG + LLM-Scoring, um KI-Ausgaben anhand von Wissensdatenbankinhalten zu validieren
</Step>
<Step>
<strong>Detect PII</strong>: Identify and optionally mask personally identifiable information across 40+ entity types
<strong>PII erkennen</strong>: Identifizieren und optional maskieren Sie personenbezogene Daten über mehr als 40 Entitätstypen hinweg
</Step>
</Steps>
## Validation Types
## Validierungstypen
### JSON Validation
### JSON-Validierung
Validates that content is properly formatted JSON. Perfect for ensuring structured LLM outputs can be safely parsed.
Überprüft, ob Inhalte korrekt formatiertes JSON sind. Perfekt, um sicherzustellen, dass strukturierte LLM-Ausgaben sicher geparst werden können.
**Use Cases:**
- Validate JSON responses from Agent blocks before parsing
- Ensure API payloads are properly formatted
- Check structured data integrity
**Anwendungsfälle:**
- Validieren von JSON-Antworten aus Agent-Blöcken vor dem Parsen
- Sicherstellen, dass API-Payloads korrekt formatiert sind
- Überprüfen der Integrität strukturierter Daten
**Output:**
- `passed`: `true` if valid JSON, `false` otherwise
- `error`: Error message if validation fails (e.g., "Invalid JSON: Unexpected token...")
- `passed`: `true` wenn gültiges JSON, sonst `false`
- `error`: Fehlermeldung bei fehlgeschlagener Validierung (z.B. "Invalid JSON: Unexpected token...")
### Regex Validation
### Regex-Validierung
Checks if content matches a specified regular expression pattern.
Überprüft, ob Inhalte einem bestimmten regulären Ausdrucksmuster entsprechen.
**Use Cases:**
- Validate email addresses
- Check phone number formats
- Verify URLs or custom identifiers
- Enforce specific text patterns
**Anwendungsfälle:**
- Validieren von E-Mail-Adressen
- Überprüfen von Telefonnummernformaten
- Verifizieren von URLs oder benutzerdefinierten Kennungen
- Durchsetzen spezifischer Textmuster
**Configuration:**
- **Regex Pattern**: The regular expression to match against (e.g., `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` for emails)
**Konfiguration:**
- **Regex-Muster**: Der reguläre Ausdruck, der abgeglichen werden soll (z.B. `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` für E-Mails)
**Output:**
- `passed`: `true` if content matches pattern, `false` otherwise
- `error`: Error message if validation fails
- `passed`: `true` wenn der Inhalt dem Muster entspricht, `false` andernfalls
- `error`: Fehlermeldung bei fehlgeschlagener Validierung
### Hallucination Detection
### Halluzinationserkennung
Uses Retrieval-Augmented Generation (RAG) with LLM scoring to detect when AI-generated content contradicts or isn't grounded in your knowledge base.
Verwendet Retrieval-Augmented Generation (RAG) mit LLM-Bewertung, um zu erkennen, wann KI-generierte Inhalte im Widerspruch zu Ihrer Wissensdatenbank stehen oder nicht darin begründet sind.
**How It Works:**
1. Queries your knowledge base for relevant context
2. Sends both the AI output and retrieved context to an LLM
3. LLM assigns a confidence score (0-10 scale)
- **0** = Full hallucination (completely ungrounded)
- **10** = Fully grounded (completely supported by knowledge base)
4. Validation passes if score ≥ threshold (default: 3)
**Funktionsweise:**
1. Durchsucht Ihre Wissensdatenbank nach relevantem Kontext
2. Sendet sowohl die KI-Ausgabe als auch den abgerufenen Kontext an ein LLM
3. LLM weist einen Konfidenzwert zu (Skala 0-10)
- **0** = Vollständige Halluzination (völlig unbegründet)
- **10** = Vollständig fundiert (komplett durch Wissensdatenbank gestützt)
4. Validierung besteht, wenn der Wert ≥ Schwellenwert (Standard: 3)
**Configuration:**
- **Knowledge Base**: Select from your existing knowledge bases
- **Model**: Choose LLM for scoring (requires strong reasoning - GPT-4o, Claude 3.7 Sonnet recommended)
- **API Key**: Authentication for selected LLM provider (auto-hidden for hosted/Ollama models)
- **Confidence Threshold**: Minimum score to pass (0-10, default: 3)
- **Top K** (Advanced): Number of knowledge base chunks to retrieve (default: 10)
**Konfiguration:**
- **Wissensdatenbank**: Auswahl aus Ihren vorhandenen Wissensdatenbanken
- **Modell**: LLM für die Bewertung wählen (erfordert starkes Reasoning - GPT-4o, Claude 3.7 Sonnet empfohlen)
- **API-Schlüssel**: Authentifizierung für den ausgewählten LLM-Anbieter (automatisch ausgeblendet für gehostete/Ollama-Modelle)
- **Konfidenz-Schwellenwert**: Mindestwert zum Bestehen (0-10, Standard: 3)
- **Top K** (Erweitert): Anzahl der abzurufenden Wissensdatenbank-Chunks (Standard: 10)
**Output:**
- `passed`: `true` if confidence score ≥ threshold
- `score`: Confidence score (0-10)
- `reasoning`: LLM's explanation for the score
- `error`: Error message if validation fails
- `passed`: `true` wenn Konfidenzwert ≥ Schwellenwert
- `score`: Konfidenzwert (0-10)
- `reasoning`: Erklärung des LLM für den Wert
- `error`: Fehlermeldung bei fehlgeschlagener Validierung
**Use Cases:**
- Validate Agent responses against documentation
- Ensure customer support answers are factually accurate
- Verify generated content matches source material
- Quality control for RAG applications
**Anwendungsfälle:**
- Validierung von Agent-Antworten anhand der Dokumentation
- Sicherstellen, dass Kundenservice-Antworten sachlich korrekt sind
- Überprüfen, ob generierte Inhalte mit dem Quellmaterial übereinstimmen
- Qualitätskontrolle für RAG-Anwendungen
### PII Detection
### PII-Erkennung
Detects personally identifiable information using Microsoft Presidio. Supports 40+ entity types across multiple countries and languages.
Erkennt personenbezogene Daten mit Microsoft Presidio. Unterstützt über 40 Entitätstypen in mehreren Ländern und Sprachen.
<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
<Video src="guardrails.mp4" width={500} height={350} />
</div>
**How It Works:**
1. Scans content for PII entities using pattern matching and NLP
2. Returns detected entities with locations and confidence scores
3. Optionally masks detected PII in the output
**Funktionsweise:**
1. Scannt Inhalte nach PII-Entitäten mittels Mustererkennung und NLP
2. Gibt erkannte Entitäten mit Positionen und Konfidenzwerten zurück
3. Maskiert optional erkannte PII in der Ausgabe
**Configuration:**
- **PII Types to Detect**: Select from grouped categories via modal selector
- **Common**: Person name, Email, Phone, Credit card, IP address, etc.
- **USA**: SSN, Driver's license, Passport, etc.
- **UK**: NHS number, National insurance number
- **Spain**: NIF, NIE, CIF
- **Italy**: Fiscal code, Driver's license, VAT code
- **Poland**: PESEL, NIP, REGON
- **Singapore**: NRIC/FIN, UEN
- **Australia**: ABN, ACN, TFN, Medicare
- **India**: Aadhaar, PAN, Passport, Voter number
- **Mode**:
- **Detect**: Only identify PII (default)
- **Mask**: Replace detected PII with masked values
- **Language**: Detection language (default: English)
**Konfiguration:**
- **Zu erkennende PII-Typen**: Auswahl aus gruppierten Kategorien über Modal-Selektor
- **Allgemein**: Personenname, E-Mail, Telefon, Kreditkarte, IP-Adresse usw.
- **USA**: SSN, Führerschein, Reisepass usw.
- **UK**: NHS-Nummer, Sozialversicherungsnummer
- **Spanien**: NIF, NIE, CIF
- **Italien**: Steuernummer, Führerschein, Umsatzsteuer-ID
- **Polen**: PESEL, NIP, REGON
- **Singapur**: NRIC/FIN, UEN
- **Australien**: ABN, ACN, TFN, Medicare
- **Indien**: Aadhaar, PAN, Reisepass, Wählernummer
- **Modus**:
- **Erkennen**: Nur PII identifizieren (Standard)
- **Maskieren**: Erkannte PII durch maskierte Werte ersetzen
- **Sprache**: Erkennungssprache (Standard: Englisch)
**Output:**
- `passed`: `false` if any selected PII types are detected
- `detectedEntities`: Array of detected PII with type, location, and confidence
- `maskedText`: Content with PII masked (only if mode = "Mask")
- `error`: Error message if validation fails
**Ausgabe:**
- `passed`: `false` wenn ausgewählte PII-Typen erkannt werden
- `detectedEntities`: Array erkannter PII mit Typ, Position und Konfidenz
- `maskedText`: Inhalt mit maskierter PII (nur wenn Modus = "Mask")
- `error`: Fehlermeldung, wenn die Validierung fehlschlägt
**Use Cases:**
- Block content containing sensitive personal information
- Mask PII before logging or storing data
- Compliance with GDPR, HIPAA, and other privacy regulations
- Sanitize user inputs before processing
**Anwendungsfälle:**
- Blockieren von Inhalten mit sensiblen persönlichen Informationen
- Maskieren von PII vor der Protokollierung oder Speicherung von Daten
- Einhaltung von DSGVO, HIPAA und anderen Datenschutzbestimmungen
- Bereinigung von Benutzereingaben vor der Verarbeitung
## Configuration
## Konfiguration
### Content to Validate
### Zu validierender Inhalt
The input content to validate. This typically comes from:
- Agent block outputs: `<agent.content>`
- Function block results: `<function.output>`
- API responses: `<api.output>`
- Any other block output
Der zu validierende Eingabeinhalt. Dieser stammt typischerweise aus:
- Ausgaben von Agent-Blöcken: `<agent.content>`
- Ergebnisse von Funktionsblöcken: `<function.output>`
- API-Antworten: `<api.output>`
- Jede andere Blockausgabe
### Validation Type
### Validierungstyp
Choose from four validation types:
- **Valid JSON**: Check if content is properly formatted JSON
- **Regex Match**: Verify content matches a regex pattern
- **Hallucination Check**: Validate against knowledge base with LLM scoring
- **PII Detection**: Detect and optionally mask personally identifiable information
Wählen Sie aus vier Validierungstypen:
- **Gültiges JSON**: Prüfen, ob der Inhalt korrekt formatiertes JSON ist
- **Regex-Übereinstimmung**: Überprüfen, ob der Inhalt einem Regex-Muster entspricht
- **Halluzinationsprüfung**: Validierung gegen Wissensdatenbank mit LLM-Bewertung
- **PII-Erkennung**: Erkennung und optional Maskierung personenbezogener Daten
## Outputs
## Ausgaben
All validation types return:
Alle Validierungstypen liefern zurück:
- **`<guardrails.passed>`**: Boolean indicating if validation passed
- **`<guardrails.validationType>`**: The type of validation performed
- **`<guardrails.input>`**: The original input that was validated
- **`<guardrails.error>`**: Error message if validation failed (optional)
- **`<guardrails.passed>`**: Boolean, der angibt, ob die Validierung erfolgreich war
- **`<guardrails.validationType>`**: Die Art der durchgeführten Validierung
- **`<guardrails.input>`**: Die ursprüngliche Eingabe, die validiert wurde
- **`<guardrails.error>`**: Fehlermeldung, wenn die Validierung fehlgeschlagen ist (optional)
Additional outputs by type:
Zusätzliche Ausgaben nach Typ:
**Hallucination Check:**
- **`<guardrails.score>`**: Confidence score (0-10)
- **`<guardrails.reasoning>`**: LLM's explanation
**Halluzinationsprüfung:**
- **`<guardrails.score>`**: Konfidenzwert (0-10)
- **`<guardrails.reasoning>`**: Erklärung des LLM
**PII Detection:**
- **`<guardrails.detectedEntities>`**: Array of detected PII entities
- **`<guardrails.maskedText>`**: Content with PII masked (if mode = "Mask")
**PII-Erkennung:**
- **`<guardrails.detectedEntities>`**: Array erkannter PII-Entitäten
- **`<guardrails.maskedText>`**: Inhalt mit maskierter PII (wenn Modus = "Mask")
## Example Use Cases
## Beispielanwendungsfälle
### Validate JSON Before Parsing
### JSON vor dem Parsen validieren
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Ensure Agent output is valid JSON</h4>
<h4 className="font-medium">Szenario: Sicherstellen, dass die Agent-Ausgabe gültiges JSON ist</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Agent generates structured JSON response</li>
<li>Guardrails validates JSON format</li>
<li>Condition block checks `<guardrails.passed>`</li>
<li>If passed → Parse and use data, If failedRetry or handle error</li>
<li>Agent generiert strukturierte JSON-Antwort</li>
<li>Guardrails validiert das JSON-Format</li>
<li>Bedingungsblock prüft `<guardrails.passed>`</li>
<li>Bei Erfolg → Daten parsen und verwenden, Bei FehlerWiederholen oder Fehler behandeln</li>
</ol>
</div>
### Prevent Hallucinations
### Halluzinationen verhindern
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Validate customer support responses</h4>
<h4 className="font-medium">Szenario: Validierung von Kundendienstantworten</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Agent generates response to customer question</li>
<li>Guardrails checks against support documentation knowledge base</li>
<li>If confidence score ≥ 3 → Send response</li>
<li>If confidence score \< 3 → Flag for human review</li>
<li>Agent generiert Antwort auf Kundenfrage</li>
<li>Guardrails prüft gegen die Wissensdatenbank der Support-Dokumentation</li>
<li>Wenn Konfidenzwert ≥ 3 → Antwort senden</li>
<li>Wenn Konfidenzwert \< 3 → Für manuelle Überprüfung markieren</li>
</ol>
</div>
### Block PII in User Inputs
### PII in Benutzereingaben blockieren
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Sanitize user-submitted content</h4>
<h4 className="font-medium">Szenario: Bereinigung von benutzergenerierten Inhalten</h4>
<ol className="list-decimal pl-5 text-sm">
<li>User submits form with text content</li>
<li>Guardrails detects PII (emails, phone numbers, SSN, etc.)</li>
<li>If PII detected → Reject submission or mask sensitive data</li>
<li>If no PII → Process normally</li>
<li>Benutzer reicht Formular mit Textinhalt ein</li>
<li>Guardrails erkennt PII (E-Mails, Telefonnummern, Sozialversicherungsnummern usw.)</li>
<li>Bei erkannter PII → Einreichung ablehnen oder sensible Daten maskieren</li>
<li>Ohne PII → Normal verarbeiten</li>
</ol>
</div>
@@ -222,30 +222,29 @@ Additional outputs by type:
<Video src="guardrails-example.mp4" width={500} height={350} />
</div>
### Validate Email Format
### E-Mail-Format validieren
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Check email address format</h4>
<h4 className="font-medium">Szenario: E-Mail-Adressformat überprüfen</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Agent extracts email from text</li>
<li>Guardrails validates with regex pattern</li>
<li>If valid → Use email for notification</li>
<li>If invalid → Request correction</li>
<li>Agent extrahiert E-Mail aus Text</li>
<li>Guardrails validiert mit Regex-Muster</li>
<li>Bei Gültigkeit → E-Mail für Benachrichtigung verwenden</li>
<li>Bei Ungültigkeit → Korrektur anfordern</li>
</ol>
</div>
## Best Practices
- **Chain with Condition blocks**: Use `<guardrails.passed>` to branch workflow logic based on validation results
- **Use JSON validation before parsing**: Always validate JSON structure before attempting to parse LLM outputs
- **Choose appropriate PII types**: Only select the PII entity types relevant to your use case for better performance
- **Set reasonable confidence thresholds**: For hallucination detection, adjust threshold based on your accuracy requirements (higher = stricter)
- **Use strong models for hallucination detection**: GPT-4o or Claude 3.7 Sonnet provide more accurate confidence scoring
- **Mask PII for logging**: Use "Mask" mode when you need to log or store content that may contain PII
- **Test regex patterns**: Validate your regex patterns thoroughly before deploying to production
- **Monitor validation failures**: Track `<guardrails.error>` messages to identify common validation issues
- **Verkettung mit Condition-Blöcken**: Verwende `<guardrails.passed>` um Workflow-Logik basierend auf Validierungsergebnissen zu verzweigen
- **JSON-Validierung vor dem Parsen verwenden**: Validiere immer die JSON-Struktur, bevor du versuchst, LLM-Ausgaben zu parsen
- **Passende PII-Typen auswählen**: Wähle nur die PII-Entitätstypen aus, die für deinen Anwendungsfall relevant sind, um bessere Leistung zu erzielen
- **Vernünftige Konfidenz-Schwellenwerte festlegen**: Passe für die Halluzinationserkennung den Schwellenwert basierend auf deinen Genauigkeitsanforderungen an (höher = strenger)
- **Starke Modelle für Halluzinationserkennung verwenden**: GPT-4o oder Claude 3.7 Sonnet bieten genauere Konfidenz-Bewertungen
- **PII für Logging maskieren**: Verwende den "Mask"-Modus, wenn du Inhalte protokollieren oder speichern musst, die PII enthalten könnten
- **Regex-Muster testen**: Validiere deine Regex-Muster gründlich, bevor du sie in der Produktion einsetzt
- **Validierungsfehler überwachen**: Verfolge `<guardrails.error>` Nachrichten, um häufige Validierungsprobleme zu identifizieren
<Callout type="info">
Guardrails validation happens synchronously in your workflow. For hallucination detection, choose faster models (like GPT-4o-mini) if latency is critical.
Guardrails-Validierung erfolgt synchron in deinem Workflow. Für die Halluzinationserkennung solltest du schnellere Modelle (wie GPT-4o-mini) wählen, wenn Latenz kritisch ist.
</Callout>

View File

@@ -1,5 +1,5 @@
---
title: Blöcke
title: Übersicht
description: Die Bausteine deiner KI-Workflows
---
@@ -16,7 +16,7 @@ Blöcke sind die Bausteine, die du miteinander verbindest, um KI-Workflows zu er
## Grundlegende Blocktypen
Sim bietet sieben grundlegende Blocktypen, die die wesentlichen Funktionen von KI-Workflows abdecken:
Sim bietet wesentliche Blocktypen, die die Kernfunktionen von KI-Workflows abdecken:
### Verarbeitungsblöcke
- **[Agent](/blocks/agent)** - Chatte mit KI-Modellen (OpenAI, Anthropic, Google, lokale Modelle)
@@ -28,16 +28,20 @@ Sim bietet sieben grundlegende Blocktypen, die die wesentlichen Funktionen von K
- **[Router](/blocks/router)** - Nutze KI, um Anfragen intelligent auf verschiedene Pfade zu leiten
- **[Evaluator](/blocks/evaluator)** - Bewerte und beurteile die Inhaltsqualität mit KI
### Ablaufsteuerungsblöcke
- **[Variablen](/blocks/variables)** - Workflow-bezogene Variablen setzen und verwalten
- **[Warten](/blocks/wait)** - Workflow-Ausführung für eine bestimmte Zeitverzögerung pausieren
### Ausgabeblöcke
- **[Response](/blocks/response)** - Formatiere und gib endgültige Ergebnisse aus deinem Workflow zurück
- **[Antwort](/blocks/response)** - Formatieren und Zurückgeben der endgültigen Ergebnisse aus Ihrem Workflow
## Wie Blöcke funktionieren
Jeder Block hat drei Hauptkomponenten:
**Eingaben**: Daten, die in den Block von anderen Blöcken oder Benutzereingaben kommen
**Konfiguration**: Einstellungen, die das Verhalten des Blocks steuern
**Ausgaben**: Daten, die der Block für andere Blöcke produziert
**Konfiguration**: Einstellungen, die steuern, wie der Block sich verhält
**Ausgaben**: Daten, die der Block für andere Blöcke zur Verwendung erzeugt
<Steps>
<Step>
@@ -56,7 +60,7 @@ Jeder Block hat drei Hauptkomponenten:
Sie erstellen Workflows, indem Sie Blöcke miteinander verbinden. Die Ausgabe eines Blocks wird zur Eingabe eines anderen:
- **Ziehen zum Verbinden**: Ziehen Sie von einem Ausgabeport zu einem Eingabeport
- **Mehrfachverbindungen**: Eine Ausgabe kann mit mehreren Eingängen verbunden werden
- **Mehrfachverbindungen**: Eine Ausgabe kann mit mehreren Eingaben verbunden werden
- **Verzweigende Pfade**: Einige Blöcke können basierend auf Bedingungen zu verschiedenen Pfaden weiterleiten
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
@@ -73,7 +77,7 @@ User Input → Agent → Function → Response
```
### Bedingte Verzweigung
Verwenden Sie Bedingungsblöcke oder Router-Blöcke, um verschiedene Pfade zu erstellen:
Verwenden Sie Bedingung- oder Router-Blöcke, um verschiedene Pfade zu erstellen:
```
User Input → Router → Agent A (for questions)
@@ -93,37 +97,43 @@ Agent → Evaluator → Condition → Response (if good)
Jeder Blocktyp hat spezifische Konfigurationsoptionen:
**Alle Blöcke**:
- Ein-/Ausgabeverbindungen
- Eingabe-/Ausgabeverbindungen
- Fehlerbehandlungsverhalten
- Zeitüberschreitungseinstellungen für die Ausführung
- Einstellungen für Ausführungs-Timeout
**KI-Blöcke** (Agent, Router, Evaluator):
- Modellauswahl (OpenAI, Anthropic, Google, lokal)
- API-Schlüssel und Authentifizierung
- Temperature und andere Modellparameter
- Temperatur und andere Modellparameter
- Systemaufforderungen und Anweisungen
**Logikblöcke** (Bedingung, Funktion):
**Logik-Blöcke** (Bedingung, Funktion):
- Benutzerdefinierte Ausdrücke oder Code
- Variablenreferenzen
- Einstellungen für die Ausführungsumgebung
- Einstellungen für Ausführungsumgebung
**Integrationsblöcke** (API, Antwort):
**Integrations-Blöcke** (API, Response):
- Endpunktkonfiguration
- Header und Authentifizierung
- Anfrage-/Antwortformatierung
<Cards>
<Card title="Agent Block" href="/blocks/agent">
Verbindung zu KI-Modellen herstellen und intelligente Antworten erzeugen
<Card title="Agent-Block" href="/blocks/agent">
Verbindung zu KI-Modellen herstellen und intelligente Antworten erstellen
</Card>
<Card title="Function Block" href="/blocks/function">
<Card title="Funktions-Block" href="/blocks/function">
Benutzerdefinierten Code ausführen, um Daten zu verarbeiten und zu transformieren
</Card>
<Card title="API Block" href="/blocks/api">
<Card title="API-Block" href="/blocks/api">
Integration mit externen Diensten und APIs
</Card>
<Card title="Condition Block" href="/blocks/condition">
<Card title="Bedingungs-Block" href="/blocks/condition">
Verzweigende Logik basierend auf Datenbewertung erstellen
</Card>
<Card title="Variablen-Block" href="/blocks/variables">
Workflow-bezogene Variablen setzen und verwalten
</Card>
<Card title="Warte-Block" href="/blocks/wait">
Workflow-Ausführung für bestimmte Zeitverzögerungen pausieren
</Card>
</Cards>

View File

@@ -9,7 +9,7 @@ import { Image } from '@/components/ui/image'
Der Loop-Block ist ein Container-Block in Sim, der es ermöglicht, iterative Workflows zu erstellen, indem eine Gruppe von Blöcken wiederholt ausgeführt wird. Loops ermöglichen iterative Verarbeitung in deinen Workflows.
Der Loop-Block unterstützt zwei Arten der Iteration:
Der Schleifenblock unterstützt vier Arten der Iteration:
<Callout type="info">
Loop-Blöcke sind Container-Knoten, die andere Blöcke enthalten können. Die Blöcke innerhalb einer Schleife werden basierend auf deiner Konfiguration mehrfach ausgeführt.
@@ -27,10 +27,10 @@ Der Loop-Block ermöglicht dir:
<strong>Operationen wiederholen</strong>: Blöcke eine festgelegte Anzahl von Malen ausführen
</Step>
<Step>
<strong>Sequentielle Verarbeitung</strong>: Datentransformation in geordneten Iterationen durchführen
<strong>Auf Bedingungen basierte Schleifen</strong>: Ausführung fortsetzen, während oder bis eine Bedingung erfüllt ist
</Step>
<Step>
<strong>Ergebnisse aggregieren</strong>: Ausgaben aus allen Schleifeniterationen sammeln
<strong>Ergebnisse aggregieren</strong>: Ausgaben aus allen Schleifendurchläufen sammeln
</Step>
</Steps>
@@ -47,23 +47,23 @@ Der Loop-Block führt enthaltene Blöcke durch sequentielle Iteration aus:
### Schleifentyp
Wähle zwischen zwei Arten von Schleifen:
Wähle zwischen vier Arten von Schleifen:
<Tabs items={['For Loop', 'ForEach Loop']}>
<Tabs items={['For-Schleife', 'ForEach-Schleife', 'While-Schleife', 'Do-While-Schleife']}>
<Tab>
**For Loop (Iterationen)** - Eine numerische Schleife, die eine feste Anzahl von Malen ausgeführt wird:
**For-Schleife (Iterationen)** - Eine numerische Schleife, die eine festgelegte Anzahl von Malen ausgeführt wird:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-1.png"
alt="For Loop mit Iterationen"
alt="For-Schleife mit Iterationen"
width={500}
height={400}
className="my-6"
/>
</div>
Verwende diese Option, wenn du eine Operation eine bestimmte Anzahl von Malen wiederholen musst.
Verwende diese, wenn du eine Operation eine bestimmte Anzahl von Malen wiederholen musst.
```
@@ -100,6 +100,58 @@ Wähle zwischen zwei Arten von Schleifen:
```
</Tab>
<Tab>
**While-Schleife (Bedingungsbasiert)** - Wird weiter ausgeführt, solange eine Bedingung als wahr ausgewertet wird:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-3.png"
alt="While-Schleife mit Bedingung"
width={500}
height={400}
className="my-6"
/>
</div>
Verwende diese, wenn du eine Schleife benötigst, die läuft, bis eine bestimmte Bedingung erfüllt ist. Die Bedingung wird **vor** jeder Iteration überprüft.
```
Example: While <variable.i> < 10
- Check condition → Execute if true
- Inside loop: Increment <variable.i>
- Inside loop: Variables assigns i = <variable.i> + 1
- Check condition → Execute if true
- Check condition → Exit if false
```
</Tab>
<Tab>
**Do-While-Schleife (Bedingungsbasiert)** - Wird mindestens einmal ausgeführt und dann fortgesetzt, solange eine Bedingung wahr ist:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-3.png"
alt="Do-While-Schleife mit Bedingung"
width={500}
height={400}
className="my-6"
/>
</div>
Verwende diese, wenn du mindestens eine Ausführung benötigst und dann eine Schleife, bis eine Bedingung erfüllt ist. Die Bedingung wird **nach** jeder Iteration überprüft.
```
Example: Do-while <variable.i> < 10
- Execute blocks
- Inside loop: Increment <variable.i>
- Inside loop: Variables assigns i = <variable.i> + 1
- Check condition → Continue if true
- Check condition → Exit if false
```
</Tab>
</Tabs>
## Wie man Schleifen verwendet
@@ -113,9 +165,9 @@ Wähle zwischen zwei Arten von Schleifen:
### Auf Ergebnisse zugreifen
Nach Abschluss einer Schleife kannst du auf aggregierte Ergebnisse zugreifen:
Nach Abschluss einer Schleife können Sie auf die aggregierten Ergebnisse zugreifen:
- **`<loop.results>`**: Array von Ergebnissen aus allen Schleifendurchläufen
- **`<loop.results>`**: Array mit Ergebnissen aus allen Schleifendurchläufen
## Beispielanwendungsfälle
@@ -143,17 +195,30 @@ Nach Abschluss einer Schleife kannst du auf aggregierte Ergebnisse zugreifen:
</ol>
</div>
### Zähler mit While-Schleife
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Elemente mit zählerbasierter Schleife verarbeiten</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Workflow-Variable initialisieren: `i = 0`</li>
<li>While-Schleife mit Bedingung: `<variable.i>` \< 10</li>
<li>Innerhalb der Schleife: Agent verarbeitet Element am Index `<variable.i>`</li>
<li>Innerhalb der Schleife: Variable erhöht `i = <variable.i> + 1`</li>
<li>Schleife wird fortgesetzt, solange i kleiner als 10 ist</li>
</ol>
</div>
## Erweiterte Funktionen
### Einschränkungen
<Callout type="warning">
Container-Blöcke (Schleifen und Parallele) können nicht ineinander verschachtelt werden. Das bedeutet:
- Du kannst keinen Schleifenblock in einen anderen Schleifenblock platzieren
- Du kannst keinen Parallelblock in einen Schleifenblock platzieren
- Du kannst keinen Container-Block in einen anderen Container-Block platzieren
- Sie können keinen Schleifenblock in einem anderen Schleifenblock platzieren
- Sie können keinen Parallelblock in einem Schleifenblock platzieren
- Sie können keinen Container-Block in einem anderen Container-Block platzieren
Wenn du mehrdimensionale Iterationen benötigst, erwäge eine Umstrukturierung deines Workflows, um sequentielle Schleifen zu verwenden oder Daten in Stufen zu verarbeiten.
Wenn Sie mehrdimensionale Iterationen benötigen, sollten Sie Ihren Workflow umstrukturieren, um sequentielle Schleifen zu verwenden oder Daten in Stufen zu verarbeiten.
</Callout>
<Callout type="info">
@@ -162,17 +227,20 @@ Nach Abschluss einer Schleife kannst du auf aggregierte Ergebnisse zugreifen:
## Eingaben und Ausgaben
<Tabs items={['Konfiguration', 'Variablen', 'Ergebnisse']}>
<Tabs items={['Configuration', 'Variables', 'Results']}>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Schleifentyp</strong>: Wählen Sie zwischen 'for' oder 'forEach'
<strong>Schleifentyp</strong>: Wählen Sie zwischen 'for', 'forEach', 'while' oder 'doWhile'
</li>
<li>
<strong>Iterationen</strong>: Anzahl der Ausführungen (für for-Schleifen)
</li>
<li>
<strong>Sammlung</strong>: Array oder Objekt zum Durchlaufen (für forEach-Schleifen)
<strong>Sammlung</strong>: Array oder Objekt, über das iteriert werden soll (forEach-Schleifen)
</li>
<li>
<strong>Bedingung</strong>: Boolescher Ausdruck zur Auswertung (while/do-while-Schleifen)
</li>
</ul>
</Tab>
@@ -204,8 +272,8 @@ Nach Abschluss einer Schleife kannst du auf aggregierte Ergebnisse zugreifen:
</Tab>
</Tabs>
## Best Practices
## Bewährte Praktiken
- **Setzen Sie vernünftige Grenzen**: Halten Sie die Anzahl der Iterationen in einem vernünftigen Rahmen, um lange Ausführungszeiten zu vermeiden
- **Verwenden Sie ForEach für Sammlungen**: Verwenden Sie ForEach statt For-Schleifen, wenn Sie Arrays oder Objekte verarbeiten
- **Behandeln Sie Fehler angemessen**: Erwägen Sie, Fehlerbehandlung innerhalb von Schleifen einzubauen, um robuste Workflows zu gewährleisten
- **Vernünftige Grenzen setzen**: Halten Sie die Anzahl der Iterationen in einem vernünftigen Rahmen, um lange Ausführungszeiten zu vermeiden
- **ForEach für Sammlungen verwenden**: Verwenden Sie ForEach statt For-Schleifen, wenn Sie Arrays oder Objekte verarbeiten
- **Fehler elegant behandeln**: Erwägen Sie, Fehlerbehandlung innerhalb von Schleifen einzubauen, um robuste Workflows zu gewährleisten

View File

@@ -0,0 +1,123 @@
---
title: Variablen
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Image } from '@/components/ui/image'
Der Variablen-Block aktualisiert Workflow-Variablen während der Ausführung. Variablen müssen zuerst im Variablen-Bereich deines Workflows initialisiert werden, dann kannst du diesen Block verwenden, um ihre Werte während der Ausführung deines Workflows zu aktualisieren.
<div className="flex justify-center">
<Image
src="/static/blocks/variables.png"
alt="Variablen-Block"
width={500}
height={350}
className="my-6"
/>
</div>
<Callout>
Greife überall in deinem Workflow auf Variablen zu, indem du die `<variable.variableName>` Syntax verwendest.
</Callout>
## Überblick
Der Variablen-Block ermöglicht dir:
<Steps>
<Step>
<strong>Workflow-Variablen aktualisieren</strong>: Ändere Variablenwerte während der Ausführung
</Step>
<Step>
<strong>Dynamische Daten speichern</strong>: Erfasse Block-Ausgaben in Variablen
</Step>
<Step>
<strong>Zustand beibehalten</strong>: Verfolge Zähler, Flags und Zwischenergebnisse
</Step>
</Steps>
## Wie man Variablen verwendet
### 1. Im Workflow-Variablenbereich initialisieren
Erstelle zunächst deine Variablen im Variablen-Bereich des Workflows (zugänglich über die Workflow-Einstellungen):
```
customerEmail = ""
retryCount = 0
currentStatus = "pending"
```
### 2. Mit dem Variablen-Block aktualisieren
Verwende den Variablen-Block, um diese Werte während der Ausführung zu aktualisieren:
```
customerEmail = <api.email>
retryCount = <variable.retryCount> + 1
currentStatus = "processing"
```
### 3. Überall zugreifen
Referenziere Variablen in jedem Block:
```
Agent prompt: "Send email to <variable.customerEmail>"
Condition: <variable.retryCount> < 5
API body: {"status": "<variable.currentStatus>"}
```
## Beispielanwendungsfälle
### Schleifenzähler und Zustand
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Fortschritt durch Schleifeniterationen verfolgen</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Im Workflow initialisieren: `itemsProcessed = 0`, `lastResult = ""`</li>
<li>Schleife iteriert über Elemente</li>
<li>Innerhalb der Schleife: Agent verarbeitet aktuelles Element</li>
<li>Innerhalb der Schleife: Variablen aktualisieren `itemsProcessed = <variable.itemsProcessed> + 1`</li>
<li>Innerhalb der Schleife: Variablen aktualisieren `lastResult = <agent.content>`</li>
<li>Nächste Iteration: Auf `<variable.lastResult>` zugreifen, um mit aktuellem Ergebnis zu vergleichen</li>
</ol>
</div>
### Wiederholungslogik
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: API-Wiederholungsversuche verfolgen</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Im Workflow initialisieren: `retryCount = 0`</li>
<li>API-Block versucht Anfrage</li>
<li>Bei Fehlschlag erhöht Variablen: `retryCount = <variable.retryCount> + 1`</li>
<li>Bedingung prüft, ob `<variable.retryCount>` \< 3 ist, um zu wiederholen oder abzubrechen</li>
</ol>
</div>
### Dynamische Konfiguration
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Benutzerkontext für Workflow speichern</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Im Workflow initialisieren: `userId = ""`, `userTier = ""`</li>
<li>API ruft Benutzerprofil ab</li>
<li>Variablen speichern: `userId = <api.id>`, `userTier = <api.tier>`</li>
<li>Agent personalisiert Antwort mit `<variable.userTier>`</li>
<li>API verwendet `<variable.userId>` für Logging</li>
</ol>
</div>
## Ausgaben
- **`<variables.assignments>`**: JSON-Objekt mit allen Variablenzuweisungen aus diesem Block
## Bewährte Praktiken
- **Im Workflow-Einstellungen initialisieren**: Erstellen Sie Variablen immer im Workflow-Variablenbereich, bevor Sie sie verwenden
- **Dynamisch aktualisieren**: Verwenden Sie Variablenblöcke, um Werte basierend auf Blockausgaben oder Berechnungen zu aktualisieren
- **In Schleifen verwenden**: Perfekt für die Zustandsverfolgung über Iterationen hinweg
- **Beschreibend benennen**: Verwenden Sie klare Namen wie `currentIndex`, `totalProcessed` oder `lastError`

View File

@@ -0,0 +1,99 @@
---
title: Warten
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Image } from '@/components/ui/image'
Der Warten-Block pausiert deinen Workflow für eine bestimmte Zeit, bevor er mit dem nächsten Block fortfährt. Verwende ihn, um Verzögerungen zwischen Aktionen einzufügen, API-Ratenbegrenzungen einzuhalten oder Operationen zeitlich zu verteilen.
<div className="flex justify-center">
<Image
src="/static/blocks/wait.png"
alt="Warten-Block"
width={500}
height={350}
className="my-6"
/>
</div>
## Übersicht
Mit dem Warten-Block kannst du:
<Steps>
<Step>
<strong>Zeitverzögerungen hinzufügen</strong>: Ausführung zwischen Workflow-Schritten pausieren
</Step>
<Step>
<strong>Ratenbegrenzungen einhalten</strong>: API-Aufrufe zeitlich verteilen, um innerhalb der Limits zu bleiben
</Step>
<Step>
<strong>Sequenzen planen</strong>: Zeitgesteuerte Workflows mit Verzögerungen zwischen Aktionen erstellen
</Step>
</Steps>
## Konfiguration
### Wartezeit
Gib die Dauer der Ausführungspause ein:
- **Eingabe**: Positive Zahl
- **Maximum**: 600 Sekunden (10 Minuten) oder 10 Minuten
### Einheit
Wähle die Zeiteinheit:
- **Sekunden**: Für kurze, präzise Verzögerungen
- **Minuten**: Für längere Pausen
<Callout type="info">
Warten-Blöcke können durch Stoppen des Workflows abgebrochen werden. Die maximale Wartezeit beträgt 10 Minuten.
</Callout>
## Ausgaben
- **`<wait.waitDuration>`**: Die Wartezeit in Millisekunden
- **`<wait.status>`**: Status des Wartens ('waiting', 'completed' oder 'cancelled')
## Beispielanwendungsfälle
### API-Ratenbegrenzung
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Innerhalb der API-Ratenbegrenzungen bleiben</h4>
<ol className="list-decimal pl-5 text-sm">
<li>API-Block macht erste Anfrage</li>
<li>Warten-Block pausiert für 2 Sekunden</li>
<li>API-Block macht zweite Anfrage</li>
<li>Prozess läuft weiter, ohne Ratenbegrenzungen zu überschreiten</li>
</ol>
</div>
### Zeitgesteuerte Benachrichtigungen
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Folgenachrichten senden</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Funktion sendet erste E-Mail</li>
<li>Warten-Block pausiert für 5 Minuten</li>
<li>Funktion sendet Folge-E-Mail</li>
</ol>
</div>
### Verarbeitungsverzögerungen
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Warten auf externes System</h4>
<ol className="list-decimal pl-5 text-sm">
<li>API-Block löst Job im externen System aus</li>
<li>Warte-Block pausiert für 30 Sekunden</li>
<li>API-Block prüft den Abschlussstatus des Jobs</li>
</ol>
</div>
## Bewährte Praktiken
- **Halte Wartezeiten angemessen**: Verwende Warten für Verzögerungen bis zu 10 Minuten. Für längere Verzögerungen solltest du geplante Workflows in Betracht ziehen
- **Überwache die Ausführungszeit**: Denke daran, dass Wartezeiten die Gesamtdauer des Workflows verlängern

View File

@@ -1,5 +1,5 @@
---
title: Verbindungsgrundlagen
title: Grundlagen
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Verbindungsdatenstruktur
title: Datenstruktur
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Verbindungen
title: Übersicht
description: Verbinde deine Blöcke miteinander.
---

View File

@@ -1,5 +1,5 @@
---
title: Verbindungs-Tags
title: Tags
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -535,7 +535,7 @@ app.post('/sim-webhook', (req, res) => {
// Handle error...
} else {
console.log(`Workflow ${workflowId} completed: ${executionId}`);
console.log(`Cost: ${cost.total}`);
console.log(`Cost: $${cost.total}`);
// Process successful execution...
}
break;

View File

@@ -1,5 +1,5 @@
---
title: Ausführungsgrundlagen
title: Grundlagen
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Ausführung
title: Übersicht
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Python SDK
title: Python
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -284,7 +284,6 @@ class AsyncExecutionResult:
class WorkflowStatus:
is_deployed: bool
deployed_at: Optional[str] = None
is_published: bool = False
needs_redeployment: bool = False
```
@@ -748,10 +747,6 @@ Konfiguriere den Client mit Umgebungsvariablen:
</Step>
</Steps>
<Callout type="warning">
Halte deinen API-Schlüssel sicher und committe ihn niemals in die Versionskontrolle. Verwende Umgebungsvariablen oder sicheres Konfigurationsmanagement.
</Callout>
## Anforderungen
- Python 3.8+

View File

@@ -1,5 +1,5 @@
---
title: TypeScript/JavaScript SDK
title: TypeScript
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -81,7 +81,7 @@ new SimStudioClient(config: SimStudioConfig)
##### executeWorkflow()
Führen Sie einen Workflow mit optionalen Eingabedaten aus.
Führt einen Workflow mit optionalen Eingabedaten aus.
```typescript
const result = await client.executeWorkflow('workflow-id', {
@@ -99,7 +99,7 @@ const result = await client.executeWorkflow('workflow-id', {
- `selectedOutputs` (string[]): Block-Ausgaben, die im `blockName.attribute`Format gestreamt werden sollen (z.B. `["agent1.content"]`)
- `async` (boolean): Asynchron ausführen (Standard: false)
**Rückgabe:** `Promise<WorkflowExecutionResult | AsyncExecutionResult>`
**Rückgabewert:** `Promise<WorkflowExecutionResult | AsyncExecutionResult>`
Wenn `async: true`, wird sofort mit einer Task-ID zum Abfragen zurückgegeben. Andernfalls wird auf den Abschluss gewartet.
@@ -115,7 +115,7 @@ console.log('Is deployed:', status.isDeployed);
**Parameter:**
- `workflowId` (string): Die ID des Workflows
**Rückgabe:** `Promise<WorkflowStatus>`
**Rückgabewert:** `Promise<WorkflowStatus>`
##### validateWorkflow()
@@ -131,7 +131,7 @@ if (isReady) {
**Parameter:**
- `workflowId` (string): Die ID des Workflows
**Rückgabe:** `Promise<boolean>`
**Rückgabewert:** `Promise<boolean>`
##### getJobStatus()
@@ -148,7 +148,7 @@ if (status.status === 'completed') {
**Parameter:**
- `taskId` (string): Die Task-ID, die von der asynchronen Ausführung zurückgegeben wurde
**Rückgabe:** `Promise<JobStatus>`
**Rückgabewert:** `Promise<JobStatus>`
**Antwortfelder:**
- `success` (boolean): Ob die Anfrage erfolgreich war
@@ -161,7 +161,7 @@ if (status.status === 'completed') {
##### executeWithRetry()
Führt einen Workflow mit automatischer Wiederholung bei Ratenlimitfehlern unter Verwendung von exponentiellem Backoff aus.
Einen Workflow mit automatischer Wiederholung bei Rate-Limit-Fehlern unter Verwendung von exponentiellem Backoff ausführen.
```typescript
const result = await client.executeWithRetry('workflow-id', {
@@ -184,13 +184,13 @@ const result = await client.executeWithRetry('workflow-id', {
- `maxDelay` (number): Maximale Verzögerung in ms (Standard: 30000)
- `backoffMultiplier` (number): Backoff-Multiplikator (Standard: 2)
**Rückgabewert:** `Promise<WorkflowExecutionResult | AsyncExecutionResult>`
**Rückgabe:** `Promise<WorkflowExecutionResult | AsyncExecutionResult>`
Die Wiederholungslogik verwendet exponentiellen Backoff (1s → 2s → 4s → 8s...) mit ±25% Jitter, um den Thundering-Herd-Effekt zu vermeiden. Wenn die API einen `retry-after`Header bereitstellt, wird dieser stattdessen verwendet.
Die Wiederholungslogik verwendet exponentielles Backoff (1s → 2s → 4s → 8s...) mit ±25% Jitter, um den Thundering-Herd-Effekt zu vermeiden. Wenn die API einen `retry-after` Header bereitstellt, wird dieser stattdessen verwendet.
##### getRateLimitInfo()
Ruft die aktuellen Ratenlimit-Informationen aus der letzten API-Antwort ab.
Ruft die aktuellen Rate-Limit-Informationen aus der letzten API-Antwort ab.
```typescript
const rateLimitInfo = client.getRateLimitInfo();
@@ -201,7 +201,7 @@ if (rateLimitInfo) {
}
```
**Rückgabewert:** `RateLimitInfo | null`
**Rückgabe:** `RateLimitInfo | null`
##### getUsageLimits()
@@ -215,7 +215,7 @@ console.log('Current period cost:', limits.usage.currentPeriodCost);
console.log('Plan:', limits.usage.plan);
```
**Rückgabewert:** `Promise<UsageLimits>`
**Rückgabe:** `Promise<UsageLimits>`
**Antwortstruktur:**
@@ -301,7 +301,6 @@ interface AsyncExecutionResult {
interface WorkflowStatus {
isDeployed: boolean;
deployedAt?: string;
isPublished: boolean;
needsRedeployment: boolean;
}
```
@@ -357,8 +356,8 @@ class SimStudioError extends Error {
**Häufige Fehlercodes:**
- `UNAUTHORIZED`: Ungültiger API-Schlüssel
- `TIMEOUT`: Zeitüberschreitung der Anfrage
- `RATE_LIMIT_EXCEEDED`: Ratengrenze überschritten
- `USAGE_LIMIT_EXCEEDED`: Nutzungsgrenze überschritten
- `RATE_LIMIT_EXCEEDED`: Rate-Limit überschritten
- `USAGE_LIMIT_EXCEEDED`: Nutzungslimit überschritten
- `EXECUTION_ERROR`: Workflow-Ausführung fehlgeschlagen
## Beispiele
@@ -604,26 +603,105 @@ async function executeClientSideWorkflow() {
});
console.log('Workflow result:', result);
// Update UI with result
document.getElementById('result')!.textContent =
document.getElementById('result')!.textContent =
JSON.stringify(result.output, null, 2);
} catch (error) {
console.error('Error:', error);
}
}
// Attach to button click
document.getElementById('executeBtn')?.addEventListener('click', executeClientSideWorkflow);
```
### Datei-Upload
Datei-Objekte werden automatisch erkannt und in das Base64-Format konvertiert. Fügen Sie sie in Ihrem Input unter dem Feldnamen ein, der dem API-Trigger-Inputformat Ihres Workflows entspricht.
Das SDK konvertiert Datei-Objekte in dieses Format:
```typescript
{
type: 'file',
data: 'data:mime/type;base64,base64data',
name: 'filename',
mime: 'mime/type'
}
```
Alternativ können Sie Dateien manuell im URL-Format bereitstellen:
```typescript
{
type: 'url',
data: 'https://example.com/file.pdf',
name: 'file.pdf',
mime: 'application/pdf'
}
```
<Tabs items={['Browser', 'Node.js']}>
<Tab value="Browser">
```typescript
import { SimStudioClient } from 'simstudio-ts-sdk';
const client = new SimStudioClient({
apiKey: process.env.NEXT_PUBLIC_SIM_API_KEY!
});
// From file input
async function handleFileUpload(event: Event) {
const input = event.target as HTMLInputElement;
const files = Array.from(input.files || []);
// Include files under the field name from your API trigger's input format
const result = await client.executeWorkflow('workflow-id', {
input: {
documents: files, // Must match your workflow's "files" field name
instructions: 'Analyze these documents'
}
});
console.log('Result:', result);
}
```
</Tab>
<Tab value="Node.js">
```typescript
import { SimStudioClient } from 'simstudio-ts-sdk';
import fs from 'fs';
const client = new SimStudioClient({
apiKey: process.env.SIM_API_KEY!
});
// Read file and create File object
const fileBuffer = fs.readFileSync('./document.pdf');
const file = new File([fileBuffer], 'document.pdf', {
type: 'application/pdf'
});
// Include files under the field name from your API trigger's input format
const result = await client.executeWorkflow('workflow-id', {
input: {
documents: [file], // Must match your workflow's "files" field name
query: 'Summarize this document'
}
});
```
</Tab>
</Tabs>
<Callout type="warning">
Bei der Verwendung des SDK im Browser sollten Sie darauf achten, keine sensiblen API-Schlüssel offenzulegen. Erwägen Sie die Verwendung eines Backend-Proxys oder öffentlicher API-Schlüssel mit eingeschränkten Berechtigungen.
</Callout>
### React Hook-Beispiel
### React Hook Beispiel
Erstellen eines benutzerdefinierten React-Hooks für die Workflow-Ausführung:
Erstellen Sie einen benutzerdefinierten React-Hook für die Workflow-Ausführung:
```typescript
import { useState, useCallback } from 'react';
@@ -815,11 +893,27 @@ async function checkUsage() {
console.log(' Is limited:', limits.rateLimit.async.isLimited);
console.log('\n=== Usage ===');
console.log('Current period cost:
console.log('Current period cost: $' + limits.usage.currentPeriodCost.toFixed(2));
console.log('Limit: $' + limits.usage.limit.toFixed(2));
console.log('Plan:', limits.usage.plan);
### Streaming Workflow Execution
const percentUsed = (limits.usage.currentPeriodCost / limits.usage.limit) * 100;
console.log('Usage: ' + percentUsed.toFixed(1) + '%');
Execute workflows with real-time streaming responses:
if (percentUsed > 80) {
console.warn('⚠️ Warning: You are approaching your usage limit!');
}
} catch (error) {
console.error('Error checking usage:', error);
}
}
checkUsage();
```
### Streaming-Workflow-Ausführung
Führen Sie Workflows mit Echtzeit-Streaming-Antworten aus:
```typescript
import { SimStudioClient } from 'simstudio-ts-sdk';
@@ -830,33 +924,33 @@ const client = new SimStudioClient({
async function executeWithStreaming() {
try {
// Streaming für bestimmte Block-Ausgaben aktivieren
// Enable streaming for specific block outputs
const result = await client.executeWorkflow('workflow-id', {
input: { message: 'Count to five' },
stream: true,
selectedOutputs: ['agent1.content'] // Format blockName.attribute verwenden
selectedOutputs: ['agent1.content'] // Use blockName.attribute format
});
console.log('Workflow-Ergebnis:', result);
console.log('Workflow result:', result);
} catch (error) {
console.error('Fehler:', error);
console.error('Error:', error);
}
}
```
The streaming response follows the Server-Sent Events (SSE) format:
Die Streaming-Antwort folgt dem Server-Sent Events (SSE) Format:
```
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":"One"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", zwei"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", two"}
data: {"event":"done","success":true,"output":{},"metadata":{"duration":610}}
data: [DONE]
```
**React Streaming Example:**
**React Streaming Beispiel:**
```typescript
import { useState, useEffect } from 'react';
@@ -869,13 +963,13 @@ function StreamingWorkflow() {
setLoading(true);
setOutput('');
// WICHTIG: Führen Sie diesen API-Aufruf von Ihrem Backend-Server aus, nicht vom Browser
// Setzen Sie niemals Ihren API-Schlüssel im Client-seitigen Code frei
// IMPORTANT: Make this API call from your backend server, not the browser
// Never expose your API key in client-side code
const response = await fetch('https://sim.ai/api/workflows/WORKFLOW_ID/execute', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.SIM_API_KEY! // Nur serverseitige Umgebungsvariable
'X-API-Key': process.env.SIM_API_KEY! // Server-side environment variable only
},
body: JSON.stringify({
message: 'Generate a story',
@@ -907,10 +1001,10 @@ function StreamingWorkflow() {
if (parsed.chunk) {
setOutput(prev => prev + parsed.chunk);
} else if (parsed.event === 'done') {
console.log('Ausführung abgeschlossen:', parsed.metadata);
console.log('Execution complete:', parsed.metadata);
}
} catch (e) {
// Ungültiges JSON überspringen
// Skip invalid JSON
}
}
}
@@ -920,7 +1014,7 @@ function StreamingWorkflow() {
return (
<div>
<button onClick={executeStreaming} disabled={loading}>
{loading ? 'Generiere...' : 'Streaming starten'}
{loading ? 'Generating...' : 'Start Streaming'}
</button>
<div style={{ whiteSpace: 'pre-wrap' }}>{output}</div>
</div>
@@ -928,35 +1022,31 @@ function StreamingWorkflow() {
}
```
## Getting Your API Key
## API-Schlüssel erhalten
<Steps>
<Step title="Log in to Sim">
Navigate to [Sim](https://sim.ai) and log in to your account.
<Step title="Bei Sim anmelden">
Navigieren Sie zu [Sim](https://sim.ai) und melden Sie sich bei Ihrem Konto an.
</Step>
<Step title="Open your workflow">
Navigate to the workflow you want to execute programmatically.
<Step title="Öffnen Sie Ihren Workflow">
Navigieren Sie zu dem Workflow, den Sie programmatisch ausführen möchten.
</Step>
<Step title="Deploy your workflow">
Click on "Deploy" to deploy your workflow if it hasn't been deployed yet.
<Step title="Deployen Sie Ihren Workflow">
Klicken Sie auf "Deploy", um Ihren Workflow zu deployen, falls dies noch nicht geschehen ist.
</Step>
<Step title="Create or select an API key">
During the deployment process, select or create an API key.
<Step title="API-Schlüssel erstellen oder auswählen">
Wählen Sie während des Deployment-Prozesses einen API-Schlüssel aus oder erstellen Sie einen neuen.
</Step>
<Step title="Copy the API key">
Copy the API key to use in your TypeScript/JavaScript application.
<Step title="API-Schlüssel kopieren">
Kopieren Sie den API-Schlüssel zur Verwendung in Ihrer TypeScript/JavaScript-Anwendung.
</Step>
</Steps>
<Callout type="warning">
Keep your API key secure and never commit it to version control. Use environment variables or secure configuration management.
</Callout>
## Requirements
## Anforderungen
- Node.js 16+
- TypeScript 5.0+ (for TypeScript projects)
- TypeScript 5.0+ (für TypeScript-Projekte)
## License
## Lizenz
Apache-2.0

View File

@@ -207,18 +207,18 @@ Populate Clay with data from a JSON file. Enables direct communication and notif
#### Input
| Parameter | Type | Required | Description |
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `webhookURL` | string | Yes | The webhook URL to populate |
| `data` | json | Yes | The data to populate |
| `authToken` | string | Yes | Auth token for Clay webhook authentication |
| `webhookURL` | string | Ja | Die Webhook-URL, die befüllt werden soll |
| `data` | json | Ja | Die Daten, die befüllt werden sollen |
| `authToken` | string | Nein | Optionaler Auth-Token für die Clay-Webhook-Authentifizierung \(die meisten Webhooks benötigen dies nicht\) |
#### Output
| Parameter | Type | Description |
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | json | Clay populate operation results including response data from Clay webhook |
| `data` | json | Antwortdaten vom Clay-Webhook |
| `metadata` | object | Webhook-Antwort-Metadaten |
## Notes

View File

@@ -42,7 +42,7 @@ In Sim ermöglicht die Confluence-Integration Ihren Agenten den Zugriff auf die
## Nutzungsanweisungen
Integriert Confluence in den Workflow. Kann Seiten lesen und aktualisieren. Erfordert OAuth.
Integrieren Sie Confluence in den Workflow. Kann Seiten lesen, erstellen, aktualisieren, löschen, Kommentare verwalten, Anhänge hinzufügen, Labels vergeben und Inhalte durchsuchen.
## Tools
@@ -91,6 +91,254 @@ Aktualisiert eine Confluence-Seite über die Confluence-API.
| `title` | string | Aktualisierter Seitentitel |
| `success` | boolean | Erfolgsstatus der Aktualisierungsoperation |
### `confluence_create_page`
Erstellen Sie eine neue Seite in einem Confluence-Space.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `spaceId` | string | Ja | Confluence-Space-ID, in dem die Seite erstellt wird |
| `title` | string | Ja | Titel der neuen Seite |
| `content` | string | Ja | Seiteninhalt im Confluence-Speicherformat (HTML) |
| `parentId` | string | Nein | Übergeordnete Seiten-ID, wenn eine Unterseite erstellt wird |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel der Erstellung |
| `pageId` | string | Erstellte Seiten-ID |
| `title` | string | Seitentitel |
| `url` | string | Seiten-URL |
### `confluence_delete_page`
Löschen einer Confluence-Seite (verschiebt sie in den Papierkorb, wo sie wiederhergestellt werden kann).
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID zum Löschen |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel der Löschung |
| `pageId` | string | Gelöschte Seiten-ID |
| `deleted` | boolean | Löschstatus |
### `confluence_search`
Suche nach Inhalten in Confluence-Seiten, Blog-Beiträgen und anderen Inhalten.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `query` | string | Ja | Suchabfragestring |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse (Standard: 25) |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel der Suche |
| `results` | array | Suchergebnisse |
### `confluence_create_comment`
Einen Kommentar zu einer Confluence-Seite hinzufügen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID, zu der ein Kommentar hinzugefügt werden soll |
| `comment` | string | Ja | Kommentartext im Confluence-Speicherformat |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel der Erstellung |
| `commentId` | string | Erstellte Kommentar-ID |
| `pageId` | string | Seiten-ID |
### `confluence_list_comments`
Listet alle Kommentare auf einer Confluence-Seite auf.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID, von der Kommentare aufgelistet werden sollen |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare (Standard: 25) |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel des Abrufs |
| `comments` | array | Liste der Kommentare |
### `confluence_update_comment`
Aktualisiert einen vorhandenen Kommentar auf einer Confluence-Seite.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `commentId` | string | Ja | Confluence-Kommentar-ID zum Aktualisieren |
| `comment` | string | Ja | Aktualisierter Kommentartext im Confluence-Speicherformat |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel der Aktualisierung |
| `commentId` | string | Aktualisierte Kommentar-ID |
| `updated` | boolean | Aktualisierungsstatus |
### `confluence_delete_comment`
Löscht einen Kommentar von einer Confluence-Seite.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `commentId` | string | Ja | Confluence-Kommentar-ID zum Löschen |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel der Löschung |
| `commentId` | string | Gelöschte Kommentar-ID |
| `deleted` | boolean | Löschstatus |
### `confluence_list_attachments`
Listet alle Anhänge einer Confluence-Seite auf.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID, von der Anhänge aufgelistet werden sollen |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Anhänge (Standard: 25) |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel des Abrufs |
| `attachments` | array | Liste der Anhänge |
### `confluence_delete_attachment`
Löscht einen Anhang von einer Confluence-Seite (wird in den Papierkorb verschoben).
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `attachmentId` | string | Ja | Confluence-Anhangs-ID zum Löschen |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel der Löschung |
| `attachmentId` | string | Gelöschte Anhangs-ID |
| `deleted` | boolean | Löschstatus |
### `confluence_list_labels`
Alle Labels einer Confluence-Seite auflisten.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `pageId` | string | Ja | Confluence-Seiten-ID, von der Labels aufgelistet werden sollen |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel des Abrufs |
| `labels` | array | Liste der Labels |
### `confluence_get_space`
Details zu einem bestimmten Confluence-Space abrufen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `spaceId` | string | Ja | Confluence-Space-ID zum Abrufen |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel des Abrufs |
| `spaceId` | string | Space-ID |
| `name` | string | Space-Name |
| `key` | string | Space-Schlüssel |
| `type` | string | Space-Typ |
| `status` | string | Space-Status |
| `url` | string | Space-URL |
### `confluence_list_spaces`
Alle für den Benutzer zugänglichen Confluence-Spaces auflisten.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Spaces (Standard: 25) |
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `ts` | string | Zeitstempel des Abrufs |
| `spaces` | array | Liste der Spaces |
## Hinweise
- Kategorie: `tools`

View File

@@ -7,7 +7,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="discord"
color="#E0E0E0"
color="#5865F2"
icon={true}
iconSvg={`<svg className="block-icon"
@@ -56,7 +56,7 @@ Discord-Komponenten in Sim verwenden effizientes Lazy Loading und rufen Daten nu
## Nutzungsanleitung
Integriert Discord in den Workflow. Kann Nachrichten senden und empfangen, Server-Informationen abrufen und Benutzerinformationen erhalten. Erfordert einen Bot-API-Schlüssel.
Umfassende Discord-Integration: Nachrichten, Threads, Kanäle, Rollen, Mitglieder, Einladungen und Webhooks.
## Tools
@@ -72,6 +72,7 @@ Eine Nachricht an einen Discord-Kanal senden
| `channelId` | string | Ja | Die Discord-Kanal-ID, an die die Nachricht gesendet werden soll |
| `content` | string | Nein | Der Textinhalt der Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `files` | file[] | Nein | Dateien, die an die Nachricht angehängt werden sollen |
#### Ausgabe
@@ -97,7 +98,7 @@ Nachrichten aus einem Discord-Kanal abrufen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messages` | array | Array von Discord-Nachrichten mit vollständigen Metadaten |
| `data` | object | Container für Nachrichtendaten |
### `discord_get_server`
@@ -135,6 +136,620 @@ Informationen über einen Discord-Benutzer abrufen
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Discord-Benutzerinformationen |
### `discord_edit_message`
Eine bestehende Nachricht in einem Discord-Kanal bearbeiten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu bearbeitenden Nachricht |
| `content` | string | Nein | Der neue Textinhalt für die Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Discord-Nachrichtendaten |
### `discord_delete_message`
Eine Nachricht aus einem Discord-Kanal löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu löschenden Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_add_reaction`
Füge eine Reaktions-Emoji zu einer Discord-Nachricht hinzu
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der Nachricht, auf die reagiert werden soll |
| `emoji` | string | Ja | Das Emoji für die Reaktion \(Unicode-Emoji oder benutzerdefiniertes Emoji im Format name:id\) |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_remove_reaction`
Entferne eine Reaktion von einer Discord-Nachricht
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der Nachricht mit der Reaktion |
| `emoji` | string | Ja | Das zu entfernende Emoji \(Unicode-Emoji oder benutzerdefiniertes Emoji im Format name:id\) |
| `userId` | string | Nein | Die Benutzer-ID, deren Reaktion entfernt werden soll \(weglassen, um die eigene Reaktion des Bots zu entfernen\) |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_pin_message`
Eine Nachricht in einem Discord-Kanal anpinnen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der anzupinnenden Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_unpin_message`
Eine Nachricht in einem Discord-Kanal lösen (Unpin)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu lösenden Nachricht |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_create_thread`
Einen Thread in einem Discord-Kanal erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, in der der Thread erstellt werden soll |
| `name` | string | Ja | Der Name des Threads \(1-100 Zeichen\) |
| `messageId` | string | Nein | Die Nachrichten-ID, aus der ein Thread erstellt werden soll \(falls aus einer bestehenden Nachricht erstellt wird\) |
| `autoArchiveDuration` | number | Nein | Dauer in Minuten bis zur automatischen Archivierung des Threads \(60, 1440, 4320, 10080\) |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Erstellte Thread-Daten |
### `discord_join_thread`
Einem Thread in Discord beitreten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `threadId` | string | Ja | Die Thread-ID, der beigetreten werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_leave_thread`
Einen Thread in Discord verlassen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `threadId` | string | Ja | Die Thread-ID, die verlassen werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_archive_thread`
Einen Thread in Discord archivieren oder dearchivieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `threadId` | string | Ja | Die Thread-ID zum Archivieren/Dearchivieren |
| `archived` | boolean | Ja | Ob der Thread archiviert \(true\) oder dearchiviert \(false\) werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Thread-Daten |
### `discord_create_channel`
Einen neuen Kanal in einem Discord-Server erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `name` | string | Ja | Der Name des Kanals \(1-100 Zeichen\) |
| `type` | number | Nein | Kanaltyp \(0=Text, 2=Sprache, 4=Kategorie, 5=Ankündigung, 13=Bühne\) |
| `topic` | string | Nein | Kanalthema \(0-1024 Zeichen\) |
| `parentId` | string | Nein | Übergeordnete Kategorie-ID für den Kanal |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Daten des erstellten Kanals |
### `discord_update_channel`
Discord-Kanal aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die aktualisiert werden soll |
| `name` | string | Nein | Der neue Name für den Kanal |
| `topic` | string | Nein | Das neue Thema für den Kanal |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Daten des aktualisierten Kanals |
### `discord_delete_channel`
Discord-Kanal löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die gelöscht werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_get_channel`
Informationen über einen Discord-Kanal abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, die abgerufen werden soll |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Kanaldaten |
### `discord_create_role`
Eine neue Rolle in einem Discord-Server erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `name` | string | Ja | Der Name der Rolle |
| `color` | number | Nein | RGB-Farbwert als Ganzzahl \(z.B. 0xFF0000 für rot\) |
| `hoist` | boolean | Nein | Ob Rollenmitglieder getrennt von Online-Mitgliedern angezeigt werden sollen |
| `mentionable` | boolean | Nein | Ob die Rolle erwähnt werden kann |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Daten der erstellten Rolle |
### `discord_update_role`
Eine Rolle in einem Discord-Server aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `roleId` | string | Ja | Die zu aktualisierende Rollen-ID |
| `name` | string | Nein | Der neue Name für die Rolle |
| `color` | number | Nein | RGB-Farbwert als Ganzzahl |
| `hoist` | boolean | Nein | Ob Rollenmitglieder separat angezeigt werden sollen |
| `mentionable` | boolean | Nein | Ob die Rolle erwähnt werden kann |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Rollendaten |
### `discord_delete_role`
Eine Rolle aus einem Discord-Server löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `roleId` | string | Ja | Die zu löschende Rollen-ID |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_assign_role`
Eine Rolle einem Mitglied auf einem Discord-Server zuweisen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID, der die Rolle zugewiesen werden soll |
| `roleId` | string | Ja | Die Rollen-ID, die zugewiesen werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_remove_role`
Eine Rolle von einem Mitglied auf einem Discord-Server entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID, von der die Rolle entfernt werden soll |
| `roleId` | string | Ja | Die Rollen-ID, die entfernt werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_kick_member`
Ein Mitglied von einem Discord-Server entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID des zu entfernenden Benutzers |
| `reason` | string | Nein | Grund für die Entfernung des Mitglieds |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_ban_member`
Ein Mitglied von einem Discord-Server sperren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID, die gesperrt werden soll |
| `reason` | string | Nein | Grund für die Sperrung des Mitglieds |
| `deleteMessageDays` | number | Nein | Anzahl der Tage, für die Nachrichten gelöscht werden sollen \(0-7\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_unban_member`
Die Sperrung eines Mitglieds auf einem Discord-Server aufheben
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die Benutzer-ID, deren Sperrung aufgehoben werden soll |
| `reason` | string | Nein | Grund für die Aufhebung der Sperrung des Mitglieds |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_get_member`
Informationen über ein Mitglied in einem Discord-Server abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die abzurufende Benutzer-ID |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Mitgliedsdaten |
### `discord_update_member`
Ein Mitglied in einem Discord-Server aktualisieren (z.B. Nickname ändern)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
| `userId` | string | Ja | Die zu aktualisierende Benutzer-ID |
| `nick` | string | Nein | Neuer Nickname für das Mitglied \(null zum Entfernen\) |
| `mute` | boolean | Nein | Ob das Mitglied in Sprachkanälen stummgeschaltet werden soll |
| `deaf` | boolean | Nein | Ob das Mitglied in Sprachkanälen taub geschaltet werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Mitgliedsdaten |
### `discord_create_invite`
Einen Einladungslink für einen Discord-Kanal erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, für die eine Einladung erstellt werden soll |
| `maxAge` | number | Nein | Dauer der Einladung in Sekunden \(0 = läuft nie ab, Standard 86400\) |
| `maxUses` | number | Nein | Maximale Anzahl der Verwendungen \(0 = unbegrenzt, Standard 0\) |
| `temporary` | boolean | Nein | Ob die Einladung temporäre Mitgliedschaft gewährt |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Erstellte Einladungsdaten |
### `discord_get_invite`
Informationen über eine Discord-Einladung abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `inviteCode` | string | Ja | Der abzurufende Einladungscode |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Einladungsdaten |
### `discord_delete_invite`
Discord-Einladung löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `inviteCode` | string | Ja | Der zu löschende Einladungscode |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `discord_create_webhook`
Webhook in einem Discord-Kanal erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `channelId` | string | Ja | Die Discord-Kanal-ID, in der der Webhook erstellt werden soll |
| `name` | string | Ja | Name des Webhooks \(1-80 Zeichen\) |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Erstellte Webhook-Daten |
### `discord_execute_webhook`
Discord-Webhook ausführen, um eine Nachricht zu senden
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `webhookId` | string | Ja | Die Webhook-ID |
| `webhookToken` | string | Ja | Der Webhook-Token |
| `content` | string | Ja | Der zu sendende Nachrichteninhalt |
| `username` | string | Nein | Überschreibt den Standardbenutzernamen des Webhooks |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Über Webhook gesendete Nachricht |
### `discord_get_webhook`
Informationen über einen Discord-Webhook abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `webhookId` | string | Ja | Die abzurufende Webhook-ID |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Webhook-Daten |
### `discord_delete_webhook`
Einen Discord-Webhook löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
| `webhookId` | string | Ja | Die zu löschende Webhook-ID |
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
## Hinweise
- Kategorie: `tools`

View File

@@ -60,6 +60,7 @@ TTS mit ElevenLabs-Stimmen konvertieren
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `audioUrl` | string | Die URL der generierten Audiodatei |
| `audioFile` | file | Die generierte Audiodatei |
## Hinweise

View File

@@ -59,6 +59,13 @@ Durchsuchen Sie das Web mit Exa AI. Liefert relevante Suchergebnisse mit Titeln,
| `numResults` | number | Nein | Anzahl der zurückzugebenden Ergebnisse \(Standard: 10, max: 25\) |
| `useAutoprompt` | boolean | Nein | Ob Autoprompt zur Verbesserung der Anfrage verwendet werden soll \(Standard: false\) |
| `type` | string | Nein | Suchtyp: neural, keyword, auto oder fast \(Standard: auto\) |
| `includeDomains` | string | Nein | Kommagetrennte Liste von Domains, die in den Ergebnissen enthalten sein sollen |
| `excludeDomains` | string | Nein | Kommagetrennte Liste von Domains, die aus den Ergebnissen ausgeschlossen werden sollen |
| `category` | string | Nein | Nach Kategorie filtern: company, research_paper, news_article, pdf, github, tweet, movie, song, personal_site |
| `text` | boolean | Nein | Vollständigen Textinhalt in Ergebnissen einschließen \(Standard: false\) |
| `highlights` | boolean | Nein | Hervorgehobene Ausschnitte in Ergebnissen einschließen \(Standard: false\) |
| `summary` | boolean | Nein | KI-generierte Zusammenfassungen in Ergebnissen einschließen \(Standard: false\) |
| `livecrawl` | string | Nein | Live-Crawling-Modus: always, fallback oder never \(Standard: never\) |
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
#### Ausgabe
@@ -78,6 +85,10 @@ Ruft den Inhalt von Webseiten mit Exa AI ab. Gibt den Titel, Textinhalt und opti
| `urls` | string | Ja | Kommagetrennte Liste von URLs, von denen Inhalte abgerufen werden sollen |
| `text` | boolean | Nein | Wenn true, gibt den vollständigen Seitentext mit Standardeinstellungen zurück. Wenn false, deaktiviert die Textrückgabe. |
| `summaryQuery` | string | Nein | Abfrage zur Steuerung der Zusammenfassungserstellung |
| `subpages` | number | Nein | Anzahl der Unterseiten, die von den angegebenen URLs gecrawlt werden sollen |
| `subpageTarget` | string | Nein | Kommagetrennte Schlüsselwörter zur Zielausrichtung auf bestimmte Unterseiten \(z.B. "docs,tutorial,about"\) |
| `highlights` | boolean | Nein | Hervorgehobene Ausschnitte in Ergebnissen einschließen \(Standard: false\) |
| `livecrawl` | string | Nein | Live-Crawling-Modus: always, fallback oder never \(Standard: never\) |
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
#### Ausgabe
@@ -96,7 +107,14 @@ Finde Webseiten, die einer bestimmten URL ähnlich sind, mit Exa AI. Gibt eine L
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die URL, für die ähnliche Links gefunden werden sollen |
| `numResults` | number | Nein | Anzahl der zurückzugebenden ähnlichen Links \(Standard: 10, max: 25\) |
| `text` | boolean | Nein | Ob der vollständige Text der ähnlichen Seiten einbezogen werden soll |
| `text` | boolean | Nein | Ob der vollständige Text der ähnlichen Seiten eingeschlossen werden soll |
| `includeDomains` | string | Nein | Kommagetrennte Liste von Domains, die in den Ergebnissen enthalten sein sollen |
| `excludeDomains` | string | Nein | Kommagetrennte Liste von Domains, die aus den Ergebnissen ausgeschlossen werden sollen |
| `excludeSourceDomain` | boolean | Nein | Quell-Domain aus Ergebnissen ausschließen \(Standard: false\) |
| `category` | string | Nein | Nach Kategorie filtern: company, research_paper, news_article, pdf, github, tweet, movie, song, personal_site |
| `highlights` | boolean | Nein | Hervorgehobene Ausschnitte in Ergebnissen einschließen \(Standard: false\) |
| `summary` | boolean | Nein | KI-generierte Zusammenfassungen in Ergebnissen einschließen \(Standard: false\) |
| `livecrawl` | string | Nein | Live-Crawling-Modus: always, fallback oder never \(Standard: never\) |
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
#### Ausgabe
@@ -133,7 +151,7 @@ Führe umfassende Recherchen mit KI durch, um detaillierte Berichte mit Quellena
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Rechercheabfrage oder Thema |
| `includeText` | boolean | Nein | Vollständigen Textinhalt in Ergebnissen einschließen |
| `model` | string | Nein | Recherchemodell: exa-research-fast, exa-research (Standard) oder exa-research-pro |
| `apiKey` | string | Ja | Exa AI API-Schlüssel |
#### Ausgabe

View File

@@ -1,6 +1,6 @@
---
title: Firecrawl
description: Durchsuche oder durchforste das Web
description: Scrapen, suchen, crawlen, mappen und extrahieren von Webdaten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -58,7 +58,7 @@ Dies ermöglicht Ihren Agenten, Informationen von Websites zu sammeln, strukturi
## Nutzungsanweisungen
Integrieren Sie Firecrawl in den Workflow. Kann Websites durchsuchen, scrapen oder crawlen. Benötigt API-Schlüssel.
Integrieren Sie Firecrawl in den Workflow. Scrapen Sie Seiten, durchsuchen Sie das Web, crawlen Sie ganze Websites, erfassen Sie URL-Strukturen und extrahieren Sie strukturierte Daten mit KI.
## Tools
@@ -70,7 +70,7 @@ Extrahieren Sie strukturierte Inhalte von Webseiten mit umfassender Metadaten-Un
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die URL, von der Inhalte extrahiert werden sollen |
| `url` | string | Ja | Die URL, von der Inhalte gescrapt werden sollen |
| `scrapeOptions` | json | Nein | Optionen für das Content-Scraping |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
@@ -107,7 +107,7 @@ Crawlen Sie ganze Websites und extrahieren Sie strukturierte Inhalte von allen z
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die Website-URL zum Crawlen |
| `url` | string | Ja | Die zu crawlende Website-URL |
| `limit` | number | Nein | Maximale Anzahl der zu crawlenden Seiten \(Standard: 100\) |
| `onlyMainContent` | boolean | Nein | Nur Hauptinhalt von Seiten extrahieren |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
@@ -118,6 +118,58 @@ Crawlen Sie ganze Websites und extrahieren Sie strukturierte Inhalte von allen z
| --------- | ---- | ----------- |
| `pages` | array | Array von gecrawlten Seiten mit ihrem Inhalt und Metadaten |
### `firecrawl_map`
Erhalten Sie schnell und zuverlässig eine vollständige Liste aller URLs einer Website. Nützlich, um alle Seiten einer Website zu entdecken, ohne sie zu crawlen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die Basis-URL, von der Links erfasst und entdeckt werden sollen |
| `search` | string | Nein | Filtert Ergebnisse nach Relevanz zu einem Suchbegriff \(z.B. "blog"\) |
| `sitemap` | string | Nein | Steuert die Sitemap-Nutzung: "skip", "include" \(Standard\) oder "only" |
| `includeSubdomains` | boolean | Nein | Ob URLs von Subdomains einbezogen werden sollen \(Standard: true\) |
| `ignoreQueryParameters` | boolean | Nein | URLs mit Query-Strings ausschließen \(Standard: true\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Links \(max: 100.000, Standard: 5.000\) |
| `timeout` | number | Nein | Timeout der Anfrage in Millisekunden |
| `location` | json | Nein | Geografischer Kontext für Proxying \(Land, Sprachen\) |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Mapping-Vorgang erfolgreich war |
| `links` | array | Array der entdeckten URLs von der Website |
### `firecrawl_extract`
Extrahieren Sie strukturierte Daten aus vollständigen Webseiten mithilfe von natürlichsprachlichen Anweisungen und JSON-Schema. Leistungsstarke Agenten-Funktion für intelligente Datenextraktion.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `urls` | json | Ja | Array von URLs, aus denen Daten extrahiert werden sollen \(unterstützt Glob-Format\) |
| `prompt` | string | Nein | Natürlichsprachliche Anleitung für den Extraktionsprozess |
| `schema` | json | Nein | JSON-Schema, das die Struktur der zu extrahierenden Daten definiert |
| `enableWebSearch` | boolean | Nein | Websuche aktivieren, um ergänzende Informationen zu finden \(Standard: false\) |
| `ignoreSitemap` | boolean | Nein | Sitemap.xml-Dateien beim Scannen ignorieren \(Standard: false\) |
| `includeSubdomains` | boolean | Nein | Scanning auf Subdomains erweitern \(Standard: true\) |
| `showSources` | boolean | Nein | Datenquellen in der Antwort zurückgeben \(Standard: false\) |
| `ignoreInvalidURLs` | boolean | Nein | Ungültige URLs im Array überspringen \(Standard: true\) |
| `scrapeOptions` | json | Nein | Erweiterte Scraping-Konfigurationsoptionen |
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Extraktionsvorgang erfolgreich war |
| `data` | object | Extrahierte strukturierte Daten gemäß dem Schema oder Prompt |
| `sources` | array | Datenquellen \(nur wenn showSources aktiviert ist\) |
## Hinweise
- Kategorie: `tools`

View File

@@ -23,7 +23,210 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
</svg>`}
/>
## Übersicht
Der Generic Webhook-Block ermöglicht es Ihnen, Webhooks von jedem externen Dienst zu empfangen. Dies ist ein flexibler Auslöser, der jede JSON-Nutzlast verarbeiten kann und sich daher ideal für die Integration mit Diensten eignet, die keinen dedizierten Sim-Block haben.
## Grundlegende Verwendung
### Einfacher Durchleitungsmodus
Ohne ein Eingabeformat zu definieren, leitet der Webhook den gesamten Anforderungstext unverändert weiter:
```bash
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "X-Sim-Secret: your-secret" \
-d '{
"message": "Test webhook trigger",
"data": {
"key": "value"
}
}'
```
Greifen Sie in nachgelagerten Blöcken auf die Daten zu mit:
- `<webhook1.message>` → "Test webhook trigger"
- `<webhook1.data.key>` → "value"
### Strukturiertes Eingabeformat (Optional)
Definieren Sie ein Eingabeschema, um typisierte Felder zu erhalten und erweiterte Funktionen wie Datei-Uploads zu aktivieren:
**Konfiguration des Eingabeformats:**
```json
[
{ "name": "message", "type": "string" },
{ "name": "priority", "type": "number" },
{ "name": "documents", "type": "files" }
]
```
**Webhook-Anfrage:**
```bash
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "X-Sim-Secret: your-secret" \
-d '{
"message": "Invoice submission",
"priority": 1,
"documents": [
{
"type": "file",
"data": "data:application/pdf;base64,JVBERi0xLjQK...",
"name": "invoice.pdf",
"mime": "application/pdf"
}
]
}'
```
## Datei-Uploads
### Unterstützte Dateiformate
Der Webhook unterstützt zwei Dateieingabeformate:
#### 1. Base64-kodierte Dateien
Zum direkten Hochladen von Dateiinhalten:
```json
{
"documents": [
{
"type": "file",
"data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...",
"name": "screenshot.png",
"mime": "image/png"
}
]
}
```
- **Maximale Größe**: 20MB pro Datei
- **Format**: Standard-Daten-URL mit Base64-Kodierung
- **Speicherung**: Dateien werden in sicheren Ausführungsspeicher hochgeladen
#### 2. URL-Referenzen
Zum Übergeben vorhandener Datei-URLs:
```json
{
"documents": [
{
"type": "url",
"data": "https://example.com/files/document.pdf",
"name": "document.pdf",
"mime": "application/pdf"
}
]
}
```
### Zugriff auf Dateien in nachgelagerten Blöcken
Dateien werden in `UserFile`Objekte mit folgenden Eigenschaften verarbeitet:
```typescript
{
id: string, // Unique file identifier
name: string, // Original filename
url: string, // Presigned URL (valid for 5 minutes)
size: number, // File size in bytes
type: string, // MIME type
key: string, // Storage key
uploadedAt: string, // ISO timestamp
expiresAt: string // ISO timestamp (5 minutes)
}
```
**Zugriff in Blöcken:**
- `<webhook1.documents[0].url>` → Download-URL
- `<webhook1.documents[0].name>` → "invoice.pdf"
- `<webhook1.documents[0].size>` → 524288
- `<webhook1.documents[0].type>` → "application/pdf"
### Vollständiges Beispiel für Datei-Upload
```bash
# Create a base64-encoded file
echo "Hello World" | base64
# SGVsbG8gV29ybGQK
# Send webhook with file
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "X-Sim-Secret: your-secret" \
-d '{
"subject": "Document for review",
"attachments": [
{
"type": "file",
"data": "data:text/plain;base64,SGVsbG8gV29ybGQK",
"name": "sample.txt",
"mime": "text/plain"
}
]
}'
```
## Authentifizierung
### Authentifizierung konfigurieren (optional)
In der Webhook-Konfiguration:
1. Aktiviere "Authentifizierung erforderlich"
2. Setze einen geheimen Token
3. Wähle den Header-Typ:
- **Benutzerdefinierter Header**: `X-Sim-Secret: your-token`
- **Authorization Bearer**: `Authorization: Bearer your-token`
### Verwendung der Authentifizierung
```bash
# With custom header
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "X-Sim-Secret: your-secret-token" \
-d '{"message": "Authenticated request"}'
# With bearer token
curl -X POST https://sim.ai/api/webhooks/trigger/{webhook-path} \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-secret-token" \
-d '{"message": "Authenticated request"}'
```
## Best Practices
1. **Eingabeformat für Struktur verwenden**: Definiere ein Eingabeformat, wenn du das erwartete Schema kennst. Dies bietet:
- Typvalidierung
- Bessere Autovervollständigung im Editor
- Datei-Upload-Funktionen
2. **Authentifizierung**: Aktiviere immer die Authentifizierung für Produktions-Webhooks, um unbefugten Zugriff zu verhindern.
3. **Dateigrößenbeschränkungen**: Halte Dateien unter 20 MB. Verwende für größere Dateien stattdessen URL-Referenzen.
4. **Dateiablauf**: Heruntergeladene Dateien haben URLs mit einer Gültigkeit von 5 Minuten. Verarbeite sie umgehend oder speichere sie an anderer Stelle, wenn sie länger benötigt werden.
5. **Fehlerbehandlung**: Die Webhook-Verarbeitung erfolgt asynchron. Überprüfe die Ausführungsprotokolle auf Fehler.
6. **Testen**: Verwende die Schaltfläche "Webhook testen" im Editor, um deine Konfiguration vor der Bereitstellung zu validieren.
## Anwendungsfälle
- **Formularübermittlungen**: Empfange Daten von benutzerdefinierten Formularen mit Datei-Uploads
- **Drittanbieter-Integrationen**: Verbinde mit Diensten, die Webhooks senden (Stripe, GitHub usw.)
- **Dokumentenverarbeitung**: Akzeptiere Dokumente von externen Systemen zur Verarbeitung
- **Ereignisbenachrichtigungen**: Empfange Ereignisdaten aus verschiedenen Quellen
- **Benutzerdefinierte APIs**: Erstelle benutzerdefinierte API-Endpunkte für deine Anwendungen
## Hinweise
- Kategorie: `triggers`
- Typ: `generic_webhook`
- **Dateiunterstützung**: Verfügbar über Eingabeformat-Konfiguration
- **Maximale Dateigröße**: 20 MB pro Datei

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,7 @@
---
title: Gmail
description: Gmail senden oder Workflows von Gmail-Ereignissen auslösen
description: Gmail-Nachrichten senden, lesen, suchen und verschieben oder
Workflows durch Gmail-Ereignisse auslösen
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -45,28 +46,40 @@ Mit Gmail können Sie:
- **Von überall zugreifen**: Nutzen Sie Gmail geräteübergreifend mit synchronisierten Inhalten und Einstellungen
- **Mit anderen Diensten integrieren**: Verbinden Sie sich mit Google Kalender, Drive und anderen Produktivitätstools
In Sim ermöglicht die Gmail-Integration Ihren Agenten, E-Mails programmatisch zu senden, zu lesen und zu durchsuchen. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen, die Verarbeitung eingehender Nachrichten, das Extrahieren von Informationen aus E-Mails und das Verwalten von Kommunikationsabläufen. Ihre Agenten können personalisierte E-Mails verfassen und senden, nach bestimmten Nachrichten mit Gmails Abfragesyntax suchen und Inhalte aus E-Mails extrahieren, um sie in anderen Teilen Ihres Workflows zu verwenden. In Kürze werden Agenten auch in der Lage sein, in Echtzeit auf neue E-Mails zu achten, was reaktionsschnelle Workflows ermöglicht, die Aktionen basierend auf eingehenden Nachrichten auslösen können. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und E-Mail-Kommunikationen und ermöglicht eine nahtlose Interaktion mit einer der weltweit am häufigsten genutzten Kommunikationsplattformen.
In Sim ermöglicht die Gmail-Integration Ihren Agenten, E-Mails programmgesteuert mit umfassenden Automatisierungsfunktionen zu verwalten. Dies erlaubt leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen, die Verarbeitung eingehender Nachrichten, das Extrahieren von Informationen aus E-Mails und die Verwaltung von Kommunikationsabläufen im großen Maßstab. Ihre Agenten können:
- **Verfassen und senden**: Personalisierte E-Mails mit Anhängen erstellen und an Empfänger senden
- **Lesen und suchen**: Bestimmte Nachrichten mit Gmails Abfragesyntax finden und Inhalte extrahieren
- **Intelligent organisieren**: Nachrichten als gelesen/ungelesen markieren, E-Mails archivieren oder aus dem Archiv holen und Labels verwalten
- **Posteingang aufräumen**: Nachrichten löschen, E-Mails zwischen Labels verschieben und einen leeren Posteingang pflegen
- **Workflows auslösen**: In Echtzeit auf neue E-Mails hören und reaktionsfähige Workflows ermöglichen, die auf eingehende Nachrichten reagieren
Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und E-Mail-Kommunikationen und ermöglicht eine nahtlose Interaktion mit einer der weltweit am häufigsten genutzten Kommunikationsplattformen. Ob Sie Kundenservice-Antworten automatisieren, Belege verarbeiten, Abonnements verwalten oder Teamkommunikation koordinieren - die Gmail-Integration bietet alle Werkzeuge, die Sie für eine umfassende E-Mail-Automatisierung benötigen.
{/* MANUAL-CONTENT-END */}
## Nutzungsanleitung
Gmail in den Workflow integrieren. Kann E-Mails senden, lesen und durchsuchen. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
Integrieren Sie Gmail in den Workflow. Kann E-Mails senden, lesen, suchen und verschieben. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
## Tools
### `gmail_send`
E-Mails über Gmail versenden
E-Mails mit Gmail senden
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Ja | Betreff der E-Mail |
| `subject` | string | Nein | Betreff der E-Mail |
| `body` | string | Ja | Inhalt der E-Mail |
| `cc` | string | Nein | CC-Empfänger \(durch Komma getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Komma getrennt\) |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text (text oder html) |
| `threadId` | string | Nein | Thread-ID für Antworten (für Threading) |
| `replyToMessageId` | string | Nein | Gmail-Nachrichten-ID für Antworten - verwenden Sie das "id"-Feld aus den Gmail-Leseergebnissen (nicht die RFC "messageId") |
| `cc` | string | Nein | CC-Empfänger (durch Kommas getrennt) |
| `bcc` | string | Nein | BCC-Empfänger (durch Kommas getrennt) |
| `attachments` | file[] | Nein | Dateien, die an die E-Mail angehängt werden sollen |
#### Ausgabe
@@ -84,10 +97,14 @@ E-Mail-Entwürfe in Gmail erstellen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Ja | Betreff der E-Mail |
| `subject` | string | Nein | Betreff der E-Mail |
| `body` | string | Ja | Inhalt der E-Mail |
| `cc` | string | Nein | CC-Empfänger \(durch Komma getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Komma getrennt\) |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text (text oder html) |
| `threadId` | string | Nein | Thread-ID für Antworten (für Threading) |
| `replyToMessageId` | string | Nein | Gmail-Nachrichten-ID für Antworten - verwenden Sie das "id"-Feld aus den Gmail-Leseergebnissen (nicht die RFC "messageId") |
| `cc` | string | Nein | CC-Empfänger (durch Kommas getrennt) |
| `bcc` | string | Nein | BCC-Empfänger (durch Kommas getrennt) |
| `attachments` | file[] | Nein | Dateien, die an den E-Mail-Entwurf angehängt werden sollen |
#### Ausgabe
@@ -98,7 +115,7 @@ E-Mail-Entwürfe in Gmail erstellen
### `gmail_read`
E-Mails von Gmail lesen
E-Mails aus Gmail lesen
#### Eingabe
@@ -127,7 +144,7 @@ E-Mails in Gmail durchsuchen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Suchanfrage für E-Mails |
| `maxResults` | number | Nein | Maximale Anzahl zurückzugebender Ergebnisse |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse |
#### Ausgabe
@@ -136,6 +153,146 @@ E-Mails in Gmail durchsuchen
| `content` | string | Zusammenfassung der Suchergebnisse |
| `metadata` | object | Such-Metadaten |
### `gmail_move`
E-Mails zwischen Gmail-Labels/Ordnern verschieben
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu verschiebenden Nachricht |
| `addLabelIds` | string | Ja | Kommagetrennte Label-IDs zum Hinzufügen \(z.B. INBOX, Label_123\) |
| `removeLabelIds` | string | Nein | Kommagetrennte Label-IDs zum Entfernen \(z.B. INBOX, SPAM\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_mark_read`
Eine Gmail-Nachricht als gelesen markieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der als gelesen zu markierenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_mark_unread`
Eine Gmail-Nachricht als ungelesen markieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, die als ungelesen markiert werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_archive`
Eine Gmail-Nachricht archivieren (aus dem Posteingang entfernen)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu archivierenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_unarchive`
Eine Gmail-Nachricht aus dem Archiv holen (zurück in den Posteingang verschieben)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, die aus dem Archiv geholt werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_delete`
Eine Gmail-Nachricht löschen (in den Papierkorb verschieben)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu löschenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_add_label`
Label(s) zu einer Gmail-Nachricht hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, zu der Labels hinzugefügt werden sollen |
| `labelIds` | string | Ja | Durch Kommas getrennte Label-IDs zum Hinzufügen \(z.B. INBOX, Label_123\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
### `gmail_remove_label`
Label(s) von einer Gmail-Nachricht entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, von der Labels entfernt werden sollen |
| `labelIds` | string | Ja | Durch Kommas getrennte Label-IDs zum Entfernen \(z.B. INBOX, Label_123\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | E-Mail-Metadaten |
## Hinweise
- Kategorie: `tools`

View File

@@ -85,10 +85,11 @@ Eine Datei zu Google Drive hochladen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileName` | string | Ja | Der Name der hochzuladenden Datei |
| `content` | string | Ja | Der Inhalt der hochzuladenden Datei |
| `mimeType` | string | Nein | Der MIME-Typ der hochzuladenden Datei |
| `file` | file | Nein | Binärdatei zum Hochladen (UserFile-Objekt) |
| `content` | string | Nein | Textinhalt zum Hochladen (verwenden Sie entweder diesen ODER file, nicht beides) |
| `mimeType` | string | Nein | Der MIME-Typ der hochzuladenden Datei (wird automatisch aus der Datei erkannt, wenn nicht angegeben) |
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, in den die Datei hochgeladen werden soll |
| `folderId` | string | Nein | Die ID des Ordners, in den die Datei hochgeladen werden soll \(interne Verwendung\) |
| `folderId` | string | Nein | Die ID des Ordners, in den die Datei hochgeladen werden soll (interne Verwendung) |
#### Ausgabe
@@ -114,6 +115,24 @@ Einen neuen Ordner in Google Drive erstellen
| --------- | ---- | ----------- |
| `file` | json | Metadaten des erstellten Ordners einschließlich ID, Name und Informationen zum übergeordneten Ordner |
### `google_drive_download`
Eine Datei von Google Drive herunterladen (exportiert Google Workspace-Dateien automatisch)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileId` | string | Ja | Die ID der herunterzuladenden Datei |
| `mimeType` | string | Nein | Der MIME-Typ, in den Google Workspace-Dateien exportiert werden sollen (optional) |
| `fileName` | string | Nein | Optionale Überschreibung des Dateinamens |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `file` | file | Heruntergeladene Datei, die in den Ausführungsdateien gespeichert ist |
### `google_drive_list`
Dateien und Ordner in Google Drive auflisten
@@ -122,8 +141,8 @@ Dateien und Ordner in Google Drive auflisten
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, aus dem Dateien aufgelistet werden sollen |
| `folderId` | string | Nein | Die ID des Ordners, aus dem Dateien aufgelistet werden sollen \(interne Verwendung\) |
| `folderSelector` | string | Nein | Den Ordner auswählen, aus dem Dateien aufgelistet werden sollen |
| `folderId` | string | Nein | Die ID des Ordners, aus dem Dateien aufgelistet werden sollen (interne Verwendung) |
| `query` | string | Nein | Eine Abfrage zum Filtern der Dateien |
| `pageSize` | number | Nein | Die Anzahl der zurückzugebenden Dateien |
| `pageToken` | string | Nein | Das Seitentoken für die Paginierung |

View File

@@ -1,5 +1,5 @@
---
title: Tools
title: Übersicht
description: Leistungsstarke tools zur verbesserung ihrer agentischen workflows
---

View File

@@ -1,6 +1,6 @@
---
title: Jina
description: Konvertiere Website-Inhalte in Text
description: Durchsuche das Web oder extrahiere Inhalte aus URLs
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -62,7 +62,7 @@ Diese Integration ist besonders wertvoll für die Erstellung von Agenten, die In
## Gebrauchsanweisung
Integrieren Sie Jina in den Workflow. Extrahiert Inhalte von Websites. Erfordert API-Schlüssel.
Integriere Jina AI in den Workflow. Durchsuche das Web und erhalte LLM-freundliche Ergebnisse oder extrahiere saubere Inhalte aus bestimmten URLs mit erweiterten Parsing-Optionen.
## Tools
@@ -72,19 +72,58 @@ Extrahieren und verarbeiten Sie Webinhalte in sauberen, LLM-freundlichen Text mi
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die URL, die gelesen und in Markdown konvertiert werden soll |
| `useReaderLMv2` | boolean | Nein | Ob ReaderLM-v2 für bessere Qualität verwendet werden soll |
| `gatherLinks` | boolean | Nein | Ob alle Links am Ende gesammelt werden sollen |
| `jsonResponse` | boolean | Nein | Ob die Antwort im JSON-Format zurückgegeben werden soll |
| `apiKey` | string | Ja | Ihr Jina AI API-Schlüssel |
| `url` | string | Yes | Die URL, die gelesen und in Markdown konvertiert werden soll |
| `useReaderLMv2` | boolean | No | Ob ReaderLM-v2 für bessere Qualität verwendet werden soll \(3-fache Token-Kosten\) |
| `gatherLinks` | boolean | No | Ob alle Links am Ende gesammelt werden sollen |
| `jsonResponse` | boolean | No | Ob die Antwort im JSON-Format zurückgegeben werden soll |
| `apiKey` | string | Yes | Ihr Jina AI API-Schlüssel |
| `withImagesummary` | boolean | No | Alle Bilder von der Seite mit Metadaten sammeln |
| `retainImages` | string | No | Steuerung der Bildeinbindung: "none" entfernt alle, "all" behält alle bei |
| `returnFormat` | string | No | Ausgabeformat: markdown, html, text, screenshot oder pageshot |
| `withIframe` | boolean | No | Iframe-Inhalte in die Extraktion einbeziehen |
| `withShadowDom` | boolean | No | Shadow-DOM-Inhalte extrahieren |
| `noCache` | boolean | No | Zwischengespeicherte Inhalte umgehen für Echtzeit-Abruf |
| `withGeneratedAlt` | boolean | No | Alt-Text für Bilder mit VLM generieren |
| `robotsTxt` | string | No | Bot User-Agent für robots.txt-Prüfung |
| `dnt` | boolean | No | Do Not Track - verhindert Caching/Tracking |
| `noGfm` | boolean | No | GitHub Flavored Markdown deaktivieren |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Der extrahierte Inhalt von der URL, verarbeitet in sauberen, LLM-freundlichen Text |
| `content` | string | Der extrahierte Inhalt von der URL, verarbeitet zu sauberem, LLM-freundlichem Text |
| `links` | array | Liste der auf der Seite gefundenen Links (wenn gatherLinks oder withLinksummary aktiviert ist) |
| `images` | array | Liste der auf der Seite gefundenen Bilder (wenn withImagesummary aktiviert ist) |
### `jina_search`
Durchsucht das Web und gibt die Top 5 Ergebnisse mit LLM-freundlichem Inhalt zurück. Jedes Ergebnis wird automatisch über die Jina Reader API verarbeitet. Unterstützt geografische Filterung, Website-Einschränkungen und Paginierung.
#### Eingabe
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `q` | string | Yes | Suchanfrage-String |
| `apiKey` | string | Yes | Ihr Jina AI API-Schlüssel |
| `num` | number | No | Maximale Anzahl von Ergebnissen pro Seite \(Standard: 5\) |
| `site` | string | No | Ergebnisse auf bestimmte Domain\(s\) beschränken. Kann durch Kommas getrennt für mehrere Seiten sein \(z.B. "jina.ai,github.com"\) |
| `withFavicon` | boolean | No | Website-Favicons in Ergebnissen einbeziehen |
| `withImagesummary` | boolean | No | Alle Bilder von Ergebnisseiten mit Metadaten sammeln |
| `withLinksummary` | boolean | No | Alle Links von Ergebnisseiten sammeln |
| `retainImages` | string | No | Steuerung der Bildeinbindung: "none" entfernt alle, "all" behält alle bei |
| `noCache` | boolean | No | Zwischengespeicherte Inhalte umgehen für Echtzeit-Abruf |
| `withGeneratedAlt` | boolean | No | Alt-Text für Bilder mit VLM generieren |
| `respondWith` | string | No | Auf "no-content" setzen, um nur Metadaten ohne Seiteninhalt zu erhalten |
| `returnFormat` | string | No | Ausgabeformat: markdown, html, text, screenshot oder pageshot |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `results` | array | Array von Suchergebnissen, die jeweils Titel, Beschreibung, URL und LLM-freundlichen Inhalt enthalten |
## Hinweise

View File

@@ -42,7 +42,7 @@ In Sim ermöglicht die Jira-Integration Ihren Agenten eine nahtlose Interaktion
## Nutzungsanweisungen
Integriert Jira in den Workflow. Kann Issues lesen, schreiben und aktualisieren. Erfordert OAuth.
Integrieren Sie Jira in den Workflow. Kann Issues lesen, schreiben und aktualisieren. Kann auch Workflows basierend auf Jira-Webhook-Ereignissen auslösen.
## Tools
@@ -134,6 +134,376 @@ Mehrere Jira-Issues in Masse abrufen
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | array | Array von Jira-Issues mit Zusammenfassung, Beschreibung, Erstellungs- und Aktualisierungszeitstempeln |
### `jira_delete_issue`
Ein Jira-Issue löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key zum Löschen \(z.B. PROJ-123\) |
| `deleteSubtasks` | boolean | Nein | Ob Unteraufgaben gelöscht werden sollen. Wenn false, können übergeordnete Issues mit Unteraufgaben nicht gelöscht werden. |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Details zum gelöschten Issue mit Zeitstempel, Issue-Key und Erfolgsstatus |
### `jira_assign_issue`
Ein Jira-Issue einem Benutzer zuweisen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key zum Zuweisen \(z.B. PROJ-123\) |
| `accountId` | string | Ja | Account-ID des Benutzers, dem das Issue zugewiesen werden soll. Verwenden Sie "-1" für automatische Zuweisung oder null, um die Zuweisung aufzuheben. |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Zuweisungsdetails mit Zeitstempel, Issue-Key, Bearbeiter-ID und Erfolgsstatus |
### `jira_transition_issue`
Ein Jira-Issue zwischen Workflow-Status verschieben (z.B. To Do -> In Progress)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key für den Übergang \(z.B. PROJ-123\) |
| `transitionId` | string | Ja | ID des auszuführenden Übergangs \(z.B. "11" für "To Do", "21" für "In Progress"\) |
| `comment` | string | Nein | Optionaler Kommentar, der beim Übergang des Issues hinzugefügt werden soll |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Übergangsdetails mit Zeitstempel, Issue-Key, Übergangs-ID und Erfolgsstatus |
### `jira_search_issues`
Nach Jira-Issues mit JQL (Jira Query Language) suchen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `jql` | string | Ja | JQL-Abfragestring zur Suche nach Issues \(z.B. "project = PROJ AND status = Open"\) |
| `startAt` | number | Nein | Der Index des ersten zurückzugebenden Ergebnisses \(für Paginierung\) |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 50\) |
| `fields` | array | Nein | Array von Feldnamen, die zurückgegeben werden sollen \(Standard: \['summary', 'status', 'assignee', 'created', 'updated'\]\) |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Suchergebnisse mit Zeitstempel, Gesamtanzahl, Paginierungsdetails und Array der übereinstimmenden Issues |
### `jira_add_comment`
Einen Kommentar zu einem Jira-Issue hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, zu dem ein Kommentar hinzugefügt werden soll \(z.B. PROJ-123\) |
| `body` | string | Ja | Text des Kommentars |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Kommentardetails mit Zeitstempel, Issue-Key, Kommentar-ID, Inhalt und Erfolgsstatus |
### `jira_get_comments`
Alle Kommentare eines Jira-Issues abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, von dem Kommentare abgerufen werden sollen \(z.B. PROJ-123\) |
| `startAt` | number | Nein | Index des ersten zurückzugebenden Kommentars \(Standard: 0\) |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare \(Standard: 50\) |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Kommentardaten mit Zeitstempel, Issue-Key, Gesamtanzahl und Array von Kommentaren |
### `jira_update_comment`
Einen bestehenden Kommentar zu einem Jira-Issue aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, der den Kommentar enthält \(z.B. PROJ-123\) |
| `commentId` | string | Ja | ID des zu aktualisierenden Kommentars |
| `body` | string | Ja | Aktualisierter Kommentartext |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Aktualisierte Kommentardetails mit Zeitstempel, Issue-Key, Kommentar-ID, Textinhalt und Erfolgsstatus |
### `jira_delete_comment`
Einen Kommentar aus einem Jira-Issue löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, der den Kommentar enthält \(z.B. PROJ-123\) |
| `commentId` | string | Ja | ID des zu löschenden Kommentars |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Löschdetails mit Zeitstempel, Issue-Key, Kommentar-ID und Erfolgsstatus |
### `jira_get_attachments`
Alle Anhänge eines Jira-Issues abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, von dem Anhänge abgerufen werden sollen \(z.B. PROJ-123\) |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Anhangsdaten mit Zeitstempel, Issue-Key und Array von Anhängen |
### `jira_delete_attachment`
Einen Anhang von einem Jira-Issue löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `attachmentId` | string | Ja | ID des zu löschenden Anhangs |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Löschdetails mit Zeitstempel, Anhangs-ID und Erfolgsstatus |
### `jira_add_worklog`
Einen Zeiterfassungseintrag zu einem Jira-Issue hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain (z.B. ihrfirma.atlassian.net) |
| `issueKey` | string | Ja | Jira-Issue-Key, zu dem der Worklog hinzugefügt werden soll (z.B. PROJ-123) |
| `timeSpentSeconds` | number | Ja | Aufgewendete Zeit in Sekunden |
| `comment` | string | Nein | Optionaler Kommentar für den Worklog-Eintrag |
| `started` | string | Nein | Optionale Startzeit im ISO-Format (standardmäßig aktuelle Zeit) |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie anhand der Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Worklog-Details mit Zeitstempel, Issue-Key, Worklog-ID, aufgewendeter Zeit in Sekunden und Erfolgsstatus |
### `jira_get_worklogs`
Alle Worklog-Einträge eines Jira-Issues abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain (z.B. ihrfirma.atlassian.net) |
| `issueKey` | string | Ja | Jira-Issue-Key, von dem Worklogs abgerufen werden sollen (z.B. PROJ-123) |
| `startAt` | number | Nein | Index des ersten zurückzugebenden Worklogs (Standard: 0) |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Worklogs (Standard: 50) |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie anhand der Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Worklog-Daten mit Zeitstempel, Issue-Key, Gesamtanzahl und Array von Worklogs |
### `jira_update_worklog`
Aktualisieren eines vorhandenen Worklog-Eintrags in einem Jira-Issue
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, der den Worklog enthält \(z.B. PROJ-123\) |
| `worklogId` | string | Ja | ID des zu aktualisierenden Worklog-Eintrags |
| `timeSpentSeconds` | number | Nein | Aufgewendete Zeit in Sekunden |
| `comment` | string | Nein | Optionaler Kommentar für den Worklog-Eintrag |
| `started` | string | Nein | Optionale Startzeit im ISO-Format |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Worklog-Aktualisierungsdetails mit Zeitstempel, Issue-Key, Worklog-ID und Erfolgsstatus |
### `jira_delete_worklog`
Löschen eines Worklog-Eintrags aus einem Jira-Issue
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, der den Worklog enthält \(z.B. PROJ-123\) |
| `worklogId` | string | Ja | ID des zu löschenden Worklog-Eintrags |
| `cloudId` | string | Nein | Jira Cloud ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Löschdetails mit Zeitstempel, Issue-Key, Worklog-ID und Erfolgsstatus |
### `jira_create_issue_link`
Eine Verknüpfungsbeziehung zwischen zwei Jira-Issues erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `inwardIssueKey` | string | Ja | Jira-Issue-Key für das eingehende Issue \(z.B. PROJ-123\) |
| `outwardIssueKey` | string | Ja | Jira-Issue-Key für das ausgehende Issue \(z.B. PROJ-456\) |
| `linkType` | string | Ja | Die Art der Verknüpfungsbeziehung \(z.B. "Blocks", "Relates to", "Duplicates"\) |
| `comment` | string | Nein | Optionaler Kommentar zur Issue-Verknüpfung |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie anhand der Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Issue-Verknüpfungsdetails mit Zeitstempel, eingehendem Issue-Key, ausgehendem Issue-Key, Verknüpfungstyp und Erfolgsstatus |
### `jira_delete_issue_link`
Eine Verknüpfung zwischen zwei Jira-Issues löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `linkId` | string | Ja | ID der zu löschenden Issue-Verknüpfung |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie anhand der Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Löschdetails mit Zeitstempel, Link-ID und Erfolgsstatus |
### `jira_add_watcher`
Einen Beobachter zu einem Jira-Issue hinzufügen, um Benachrichtigungen über Aktualisierungen zu erhalten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, zu dem ein Beobachter hinzugefügt werden soll \(z.B. PROJ-123\) |
| `accountId` | string | Ja | Account-ID des Benutzers, der als Beobachter hinzugefügt werden soll |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Beobachterdetails mit Zeitstempel, Issue-Key, Beobachter-Account-ID und Erfolgsstatus |
### `jira_remove_watcher`
Einen Beobachter von einem Jira-Issue entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `domain` | string | Ja | Ihre Jira-Domain \(z.B. ihrfirma.atlassian.net\) |
| `issueKey` | string | Ja | Jira-Issue-Key, von dem ein Beobachter entfernt werden soll \(z.B. PROJ-123\) |
| `accountId` | string | Ja | Account-ID des Benutzers, der als Beobachter entfernt werden soll |
| `cloudId` | string | Nein | Jira Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `output` | object | Entfernungsdetails mit Zeitstempel, Issue-Key, Beobachter-Konto-ID und Erfolgsstatus |
## Hinweise
- Kategorie: `tools`

File diff suppressed because it is too large Load Diff

View File

@@ -56,8 +56,15 @@ Durchsuche das Web nach Informationen mit Linkup
| --------- | ---- | -------- | ----------- |
| `q` | string | Ja | Die Suchanfrage |
| `depth` | string | Ja | Suchtiefe (muss entweder "standard" oder "deep" sein) |
| `outputType` | string | Ja | Art der zurückzugebenden Ausgabe (muss entweder "sourcedAnswer" oder "searchResults" sein) |
| `apiKey` | string | Ja | Gib deinen Linkup API-Schlüssel ein |
| `outputType` | string | Ja | Art der zurückzugebenden Ausgabe (muss "sourcedAnswer" oder "searchResults" sein) |
| `apiKey` | string | Ja | Geben Sie Ihren Linkup API-Schlüssel ein |
| `includeImages` | boolean | Nein | Ob Bilder in Suchergebnissen enthalten sein sollen |
| `fromDate` | string | Nein | Startdatum für die Filterung von Ergebnissen (Format JJJJ-MM-TT) |
| `toDate` | string | Nein | Enddatum für die Filterung von Ergebnissen (Format JJJJ-MM-TT) |
| `excludeDomains` | string | Nein | Kommagetrennte Liste von Domainnamen, die von Suchergebnissen ausgeschlossen werden sollen |
| `includeDomains` | string | Nein | Kommagetrennte Liste von Domainnamen, auf die Suchergebnisse beschränkt werden sollen |
| `includeInlineCitations` | boolean | Nein | Inline-Zitate zu Antworten hinzufügen (gilt nur, wenn outputType "sourcedAnswer" ist) |
| `includeSources` | boolean | Nein | Quellen in die Antwort einbeziehen |
#### Ausgabe

View File

@@ -1,6 +1,6 @@
---
title: Microsoft Planner
description: Aufgaben in Microsoft Planner lesen und erstellen
description: Verwalten von Aufgaben, Plänen und Buckets in Microsoft Planner
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -121,7 +121,7 @@ In Sim ermöglicht die Microsoft Planner-Integration Ihren Agenten, Aufgaben pro
## Gebrauchsanweisungen
Integrieren Sie Microsoft Planner in den Workflow. Kann Aufgaben lesen und erstellen. Erfordert OAuth.
Integrieren Sie Microsoft Planner in den Workflow. Verwalten Sie Aufgaben, Pläne, Buckets und Aufgabendetails einschließlich Checklisten und Referenzen.
## Tools
@@ -167,6 +167,225 @@ Eine neue Aufgabe in Microsoft Planner erstellen
| `task` | object | Das erstellte Aufgabenobjekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich planId, taskId und taskUrl |
### `microsoft_planner_update_task`
Eine Aufgabe in Microsoft Planner aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `taskId` | string | Ja | Die ID der zu aktualisierenden Aufgabe |
| `etag` | string | Ja | Der ETag-Wert der zu aktualisierenden Aufgabe \(If-Match-Header\) |
| `title` | string | Nein | Der neue Titel der Aufgabe |
| `bucketId` | string | Nein | Die Bucket-ID, in die die Aufgabe verschoben werden soll |
| `dueDateTime` | string | Nein | Das Fälligkeitsdatum und die Uhrzeit für die Aufgabe \(ISO 8601-Format\) |
| `startDateTime` | string | Nein | Das Startdatum und die Uhrzeit für die Aufgabe \(ISO 8601-Format\) |
| `percentComplete` | number | Nein | Der Prozentsatz der Aufgabenfertigstellung \(0-100\) |
| `priority` | number | Nein | Die Priorität der Aufgabe \(0-10\) |
| `assigneeUserId` | string | Nein | Die Benutzer-ID, der die Aufgabe zugewiesen werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob die Aufgabe erfolgreich aktualisiert wurde |
| `message` | string | Erfolgsmeldung bei Aktualisierung der Aufgabe |
| `task` | object | Das aktualisierte Aufgabenobjekt mit allen Eigenschaften |
| `taskId` | string | ID der aktualisierten Aufgabe |
| `etag` | string | Neuer ETag nach der Aktualisierung - verwenden Sie diesen für nachfolgende Operationen |
| `metadata` | object | Metadaten einschließlich taskId, planId und taskUrl |
### `microsoft_planner_delete_task`
Eine Aufgabe aus Microsoft Planner löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `taskId` | string | Ja | Die ID der zu löschenden Aufgabe |
| `etag` | string | Ja | Der ETag-Wert der zu löschenden Aufgabe \(If-Match-Header\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob die Aufgabe erfolgreich gelöscht wurde |
| `deleted` | boolean | Bestätigung der Löschung |
| `metadata` | object | Zusätzliche Metadaten |
### `microsoft_planner_list_plans`
Alle Pläne auflisten, die mit dem aktuellen Benutzer geteilt wurden
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob Pläne erfolgreich abgerufen wurden |
| `plans` | array | Array von Planobjekten, die mit dem aktuellen Benutzer geteilt wurden |
| `metadata` | object | Metadaten einschließlich userId und Anzahl |
### `microsoft_planner_read_plan`
Details eines bestimmten Microsoft Planner-Plans abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `planId` | string | Ja | Die ID des abzurufenden Plans |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Plan erfolgreich abgerufen wurde |
| `plan` | object | Das Planobjekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich planId und planUrl |
### `microsoft_planner_list_buckets`
Alle Buckets in einem Microsoft Planner-Plan auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `planId` | string | Ja | Die ID des Plans |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob Buckets erfolgreich abgerufen wurden |
| `buckets` | array | Array von Bucket-Objekten |
| `metadata` | object | Metadaten einschließlich planId und Anzahl |
### `microsoft_planner_read_bucket`
Details eines bestimmten Buckets abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `bucketId` | string | Ja | Die ID des abzurufenden Buckets |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Bucket erfolgreich abgerufen wurde |
| `bucket` | object | Das Bucket-Objekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich bucketId und planId |
### `microsoft_planner_create_bucket`
Einen neuen Bucket in einem Microsoft Planner-Plan erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `planId` | string | Ja | Die ID des Plans, in dem der Bucket erstellt wird |
| `name` | string | Ja | Der Name des Buckets |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Bucket erfolgreich erstellt wurde |
| `bucket` | object | Das erstellte Bucket-Objekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich bucketId und planId |
### `microsoft_planner_update_bucket`
Einen Bucket in Microsoft Planner aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `bucketId` | string | Ja | Die ID des zu aktualisierenden Buckets |
| `name` | string | Nein | Der neue Name des Buckets |
| `etag` | string | Ja | Der ETag-Wert des zu aktualisierenden Buckets \(If-Match-Header\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Bucket erfolgreich aktualisiert wurde |
| `bucket` | object | Das aktualisierte Bucket-Objekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich bucketId und planId |
### `microsoft_planner_delete_bucket`
Einen Bucket aus Microsoft Planner löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `bucketId` | string | Ja | Die ID des zu löschenden Buckets |
| `etag` | string | Ja | Der ETag-Wert des zu löschenden Buckets \(If-Match-Header\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob der Bucket erfolgreich gelöscht wurde |
| `deleted` | boolean | Bestätigung der Löschung |
| `metadata` | object | Zusätzliche Metadaten |
### `microsoft_planner_get_task_details`
Detaillierte Informationen über eine Aufgabe abrufen, einschließlich Checkliste und Referenzen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `taskId` | string | Ja | Die ID der Aufgabe |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob die Aufgabendetails erfolgreich abgerufen wurden |
| `taskDetails` | object | Die Aufgabendetails einschließlich Beschreibung, Checkliste und Referenzen |
| `etag` | string | Der ETag-Wert für diese Aufgabendetails - verwenden Sie diesen für Aktualisierungsoperationen |
| `metadata` | object | Metadaten einschließlich taskId |
### `microsoft_planner_update_task_details`
Aktualisieren von Aufgabendetails einschließlich Beschreibung, Checklistenelementen und Referenzen in Microsoft Planner
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `taskId` | string | Ja | Die ID der Aufgabe |
| `etag` | string | Ja | Der ETag-Wert aus den zu aktualisierenden Aufgabendetails \(If-Match-Header\) |
| `description` | string | Nein | Die Beschreibung der Aufgabe |
| `checklist` | object | Nein | Checklistenelemente als JSON-Objekt |
| `references` | object | Nein | Referenzen als JSON-Objekt |
| `previewType` | string | Nein | Vorschautyp: automatic, noPreview, checklist, description oder reference |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Gibt an, ob die Aufgabendetails erfolgreich aktualisiert wurden |
| `taskDetails` | object | Das aktualisierte Aufgabendetailobjekt mit allen Eigenschaften |
| `metadata` | object | Metadaten einschließlich taskId |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,6 @@
---
title: Microsoft Teams
description: Nachrichten lesen, schreiben und erstellen
description: Nachrichten, Reaktionen und Mitglieder in Teams verwalten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -97,7 +97,7 @@ In Sim ermöglicht die Microsoft Teams-Integration Ihren Agenten, direkt program
## Gebrauchsanweisung
Integrieren Sie Microsoft Teams in den Workflow. Kann Chat-Nachrichten lesen und schreiben sowie Kanal-Nachrichten lesen und schreiben. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine Nachricht an einen Chat oder Kanal gesendet wird.
Microsoft Teams in den Workflow integrieren. Chat- und Kanalnachrichten lesen, schreiben, aktualisieren und löschen. Auf Nachrichten antworten, Reaktionen hinzufügen und Team-/Kanalmitglieder auflisten. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine Nachricht an einen Chat oder Kanal gesendet wird. Um Benutzer in Nachrichten zu erwähnen, umschließen Sie ihren Namen mit `<at>` Tags: `<at>userName</at>`
## Tools
@@ -110,6 +110,7 @@ Inhalte aus einem Microsoft Teams-Chat lesen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `chatId` | string | Ja | Die ID des Chats, aus dem gelesen werden soll |
| `includeAttachments` | boolean | Nein | Nachrichtenanhänge \(gehostete Inhalte\) herunterladen und in den Speicher aufnehmen |
#### Ausgabe
@@ -119,9 +120,10 @@ Inhalte aus einem Microsoft Teams-Chat lesen
| `messageCount` | number | Anzahl der aus dem Chat abgerufenen Nachrichten |
| `chatId` | string | ID des Chats, aus dem gelesen wurde |
| `messages` | array | Array von Chat-Nachrichtenobjekten |
| `attachmentCount` | number | Gesamtzahl der gefundenen Anhänge |
| `attachmentCount` | number | Gesamtanzahl der gefundenen Anhänge |
| `attachmentTypes` | array | Arten der gefundenen Anhänge |
| `content` | string | Formatierter Inhalt der Chat-Nachrichten |
| `attachments` | file[] | Hochgeladene Anhänge zur Vereinfachung \(abgeflacht\) |
### `microsoft_teams_write_chat`
@@ -133,6 +135,7 @@ Inhalte in einem Microsoft Teams-Chat schreiben oder aktualisieren
| --------- | ---- | -------- | ----------- |
| `chatId` | string | Ja | Die ID des Chats, in den geschrieben werden soll |
| `content` | string | Ja | Der Inhalt, der in die Nachricht geschrieben werden soll |
| `files` | file[] | Nein | Dateien, die der Nachricht angehängt werden sollen |
#### Ausgabe
@@ -155,19 +158,21 @@ Inhalte aus einem Microsoft Teams-Kanal lesen
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams, aus dem gelesen werden soll |
| `channelId` | string | Ja | Die ID des Kanals, aus dem gelesen werden soll |
| `includeAttachments` | boolean | Nein | Nachrichtenanhänge \(gehostete Inhalte\) herunterladen und in den Speicher aufnehmen |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus des Lesevorgangs im Teams-Kanal |
| `success` | boolean | Erfolgsstatus des Teams-Kanal-Lesevorgangs |
| `messageCount` | number | Anzahl der aus dem Kanal abgerufenen Nachrichten |
| `teamId` | string | ID des Teams, aus dem gelesen wurde |
| `channelId` | string | ID des Kanals, aus dem gelesen wurde |
| `messages` | array | Array von Kanalnachrichtenobjekten |
| `messages` | array | Array von Kanal-Nachrichtenobjekten |
| `attachmentCount` | number | Gesamtanzahl der gefundenen Anhänge |
| `attachmentTypes` | array | Arten der gefundenen Anhänge |
| `content` | string | Formatierter Inhalt der Kanalnachrichten |
| `content` | string | Formatierter Inhalt der Kanal-Nachrichten |
| `attachments` | file[] | Hochgeladene Anhänge zur Vereinfachung \(abgeflacht\) |
### `microsoft_teams_write_channel`
@@ -177,9 +182,10 @@ Schreiben oder senden einer Nachricht an einen Microsoft Teams-Kanal
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams, an das geschrieben werden soll |
| `channelId` | string | Ja | Die ID des Kanals, an den geschrieben werden soll |
| `content` | string | Ja | Der Inhalt, der an den Kanal gesendet werden soll |
| `teamId` | string | Ja | Die ID des Teams, in das geschrieben werden soll |
| `channelId` | string | Ja | Die ID des Kanals, in den geschrieben werden soll |
| `content` | string | Ja | Der Inhalt, der in den Kanal geschrieben werden soll |
| `files` | file[] | Nein | Dateien, die der Nachricht angehängt werden sollen |
#### Ausgabe
@@ -193,6 +199,209 @@ Schreiben oder senden einer Nachricht an einen Microsoft Teams-Kanal
| `url` | string | Web-URL zur Nachricht |
| `updatedContent` | boolean | Ob der Inhalt erfolgreich aktualisiert wurde |
### `microsoft_teams_update_chat_message`
Eine bestehende Nachricht in einem Microsoft Teams-Chat aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `chatId` | string | Ja | Die ID des Chats, der die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu aktualisierenden Nachricht |
| `content` | string | Ja | Der neue Inhalt für die Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Aktualisierung erfolgreich war |
| `messageId` | string | ID der aktualisierten Nachricht |
| `updatedContent` | boolean | Ob der Inhalt erfolgreich aktualisiert wurde |
### `microsoft_teams_update_channel_message`
Eine bestehende Nachricht in einem Microsoft Teams-Kanal aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
| `channelId` | string | Ja | Die ID des Kanals, der die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu aktualisierenden Nachricht |
| `content` | string | Ja | Der neue Inhalt für die Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Aktualisierung erfolgreich war |
| `messageId` | string | ID der aktualisierten Nachricht |
| `updatedContent` | boolean | Ob der Inhalt erfolgreich aktualisiert wurde |
### `microsoft_teams_delete_chat_message`
Soft-Delete einer Nachricht in einem Microsoft Teams-Chat
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `chatId` | string | Ja | Die ID des Chats, der die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu löschenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob das Löschen erfolgreich war |
| `deleted` | boolean | Bestätigung des Löschvorgangs |
| `messageId` | string | ID der gelöschten Nachricht |
### `microsoft_teams_delete_channel_message`
Soft-Delete einer Nachricht in einem Microsoft Teams-Kanal
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
| `channelId` | string | Ja | Die ID des Kanals, der die Nachricht enthält |
| `messageId` | string | Ja | Die ID der zu löschenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob das Löschen erfolgreich war |
| `deleted` | boolean | Bestätigung des Löschvorgangs |
| `messageId` | string | ID der gelöschten Nachricht |
### `microsoft_teams_reply_to_message`
Auf eine bestehende Nachricht in einem Microsoft Teams-Kanal antworten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
| `channelId` | string | Ja | Die ID des Kanals |
| `messageId` | string | Ja | Die ID der Nachricht, auf die geantwortet werden soll |
| `content` | string | Ja | Der Antwortinhalt |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Antwort erfolgreich war |
| `messageId` | string | ID der Antwortnachricht |
| `updatedContent` | boolean | Ob der Inhalt erfolgreich gesendet wurde |
### `microsoft_teams_get_message`
Eine bestimmte Nachricht aus einem Microsoft Teams-Chat oder -Kanal abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Nein | Die ID des Teams \(für Kanalnachrichten\) |
| `channelId` | string | Nein | Die ID des Kanals \(für Kanalnachrichten\) |
| `chatId` | string | Nein | Die ID des Chats \(für Chatnachrichten\) |
| `messageId` | string | Ja | Die ID der abzurufenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Abruf erfolgreich war |
| `content` | string | Der Nachrichteninhalt |
| `metadata` | object | Nachrichtenmetadaten einschließlich Absender, Zeitstempel usw. |
### `microsoft_teams_set_reaction`
Eine Emoji-Reaktion zu einer Nachricht in Microsoft Teams hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Nein | Die ID des Teams (für Kanalnachrichten) |
| `channelId` | string | Nein | Die ID des Kanals (für Kanalnachrichten) |
| `chatId` | string | Nein | Die ID des Chats (für Chatnachrichten) |
| `messageId` | string | Ja | Die ID der Nachricht, auf die reagiert werden soll |
| `reactionType` | string | Ja | Die Emoji-Reaktion (z.B. ❤️, 👍, 😊) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Reaktion erfolgreich hinzugefügt wurde |
| `reactionType` | string | Das Emoji, das hinzugefügt wurde |
| `messageId` | string | ID der Nachricht |
### `microsoft_teams_unset_reaction`
Eine Emoji-Reaktion von einer Nachricht in Microsoft Teams entfernen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Nein | Die ID des Teams (für Kanalnachrichten) |
| `channelId` | string | Nein | Die ID des Kanals (für Kanalnachrichten) |
| `chatId` | string | Nein | Die ID des Chats (für Chatnachrichten) |
| `messageId` | string | Ja | Die ID der Nachricht |
| `reactionType` | string | Ja | Die zu entfernende Emoji-Reaktion (z.B. ❤️, 👍, 😊) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Reaktion erfolgreich entfernt wurde |
| `reactionType` | string | Das Emoji, das entfernt wurde |
| `messageId` | string | ID der Nachricht |
### `microsoft_teams_list_team_members`
Alle Mitglieder eines Microsoft Teams-Teams auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Auflistung erfolgreich war |
| `members` | array | Array der Teammitglieder |
| `memberCount` | number | Gesamtzahl der Mitglieder |
### `microsoft_teams_list_channel_members`
Alle Mitglieder eines Microsoft Teams-Kanals auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `teamId` | string | Ja | Die ID des Teams |
| `channelId` | string | Ja | Die ID des Kanals |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Auflistung erfolgreich war |
| `members` | array | Array der Kanalmitglieder |
| `memberCount` | number | Gesamtzahl der Mitglieder |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,6 @@
---
title: OneDrive
description: Dateien erstellen, hochladen und auflisten
description: Dateien erstellen, hochladen, herunterladen, auflisten und löschen
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -50,7 +50,7 @@ In Sim ermöglicht die OneDrive-Integration Ihren Agenten die direkte Interaktio
## Nutzungsanweisungen
Integriert OneDrive in den Workflow. Kann Dateien erstellen, hochladen und auflisten. Erfordert OAuth.
Integriert OneDrive in den Workflow. Kann Text- und Excel-Dateien erstellen, Dateien hochladen, Dateien herunterladen, Dateien auflisten und Dateien oder Ordner löschen.
## Tools
@@ -63,8 +63,10 @@ Eine Datei auf OneDrive hochladen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileName` | string | Ja | Der Name der hochzuladenden Datei |
| `content` | string | Ja | Der Inhalt der hochzuladenden Datei |
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, in den die Datei hochgeladen werden soll |
| `file` | file | Nein | Die hochzuladende Datei \(binär\) |
| `content` | string | Nein | Der hochzuladende Textinhalt \(falls keine Datei bereitgestellt wird\) |
| `mimeType` | string | Nein | Der MIME-Typ der zu erstellenden Datei \(z.B. text/plain für .txt, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet für .xlsx\) |
| `folderSelector` | string | Nein | Ordner auswählen, in den die Datei hochgeladen werden soll |
| `manualFolderId` | string | Nein | Manuell eingegebene Ordner-ID \(erweiterter Modus\) |
#### Ausgabe
@@ -93,6 +95,23 @@ Einen neuen Ordner in OneDrive erstellen
| `success` | boolean | Ob der Ordner erfolgreich erstellt wurde |
| `file` | object | Das erstellte Ordnerobjekt mit Metadaten einschließlich ID, Name, webViewLink und Zeitstempeln |
### `onedrive_download`
Eine Datei von OneDrive herunterladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileId` | string | Ja | Die ID der herunterzuladenden Datei |
| `fileName` | string | Nein | Optionale Überschreibung des Dateinamens |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `file` | file | Heruntergeladene Datei, gespeichert in Ausführungsdateien |
### `onedrive_list`
Dateien und Ordner in OneDrive auflisten
@@ -101,7 +120,7 @@ Dateien und Ordner in OneDrive auflisten
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, aus dem Dateien aufgelistet werden sollen |
| `folderSelector` | string | Nein | Ordner auswählen, aus dem Dateien aufgelistet werden sollen |
| `manualFolderId` | string | Nein | Die manuell eingegebene Ordner-ID (erweiterter Modus) |
| `query` | string | Nein | Eine Abfrage zum Filtern der Dateien |
| `pageSize` | number | Nein | Die Anzahl der zurückzugebenden Dateien |
@@ -114,6 +133,24 @@ Dateien und Ordner in OneDrive auflisten
| `files` | array | Array von Datei- und Ordnerobjekten mit Metadaten |
| `nextPageToken` | string | Token zum Abrufen der nächsten Ergebnisseite (optional) |
### `onedrive_delete`
Eine Datei oder einen Ordner von OneDrive löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `fileId` | string | Ja | Die ID der zu löschenden Datei oder des zu löschenden Ordners |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Datei erfolgreich gelöscht wurde |
| `deleted` | boolean | Bestätigung, dass die Datei gelöscht wurde |
| `fileId` | string | Die ID der gelöschten Datei |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,7 @@
---
title: Outlook
description: Zugriff auf Outlook
description: Outlook-E-Mail-Nachrichten senden, lesen, entwerfen, weiterleiten
und verschieben
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -134,18 +135,26 @@ Mit Microsoft Outlook können Sie:
- **Geräteübergreifender Zugriff**: Nutzen Sie Outlook auf Desktop, Web und Mobilgeräten mit Echtzeit-Synchronisation
- **Datenschutz und Sicherheit gewährleisten**: Nutzen Sie Verschlüsselung und Compliance-Kontrollen auf Unternehmensebene
In Sim ermöglicht die Microsoft Outlook-Integration Ihren Agenten, direkt programmatisch mit E-Mail- und Kalenderdaten zu interagieren. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden benutzerdefinierter E-Mail-Updates, das Analysieren eingehender Nachrichten für Workflow-Trigger, das Erstellen von Kalenderereignissen und das Verwalten von Aufgabenerinnerungen. Durch die Verbindung von Sim mit Microsoft Outlook können intelligente Agenten Kommunikation automatisieren, Terminplanung optimieren und die Übersicht über die Organisationskorrespondenz behalten alles innerhalb Ihres Workflow-Ökosystems.
In Sim ermöglicht die Microsoft Outlook-Integration Ihren Agenten, direkt und programmgesteuert mit E-Mail- und Kalenderdaten zu interagieren, mit vollständigen E-Mail-Verwaltungsfunktionen. Dies ermöglicht leistungsstarke Automatisierungsszenarien für Ihren gesamten E-Mail-Workflow. Ihre Agenten können:
- **Senden und entwerfen**: Professionelle E-Mails mit Anhängen verfassen und Entwürfe für später speichern
- **Lesen und weiterleiten**: Auf Posteingang-Nachrichten zugreifen und wichtige Mitteilungen an Teammitglieder weiterleiten
- **Effizient organisieren**: E-Mails als gelesen oder ungelesen markieren, Nachrichten zwischen Ordnern verschieben und E-Mails zur Referenz kopieren
- **Posteingang aufräumen**: Unerwünschte Nachrichten löschen und organisierte Ordnerstrukturen pflegen
- **Workflows auslösen**: In Echtzeit auf neue E-Mails reagieren und reaktionsschnelle Automatisierung basierend auf eingehenden Nachrichten ermöglichen
Durch die Verbindung von Sim mit Microsoft Outlook ermöglichen Sie intelligenten Agenten, Kommunikation zu automatisieren, Terminplanung zu optimieren, Überblick über die Organisationskorrespondenz zu behalten und Posteingänge zu organisieren alles innerhalb Ihres Workflow-Ökosystems. Ob Sie Kundenkommunikation verwalten, Rechnungen bearbeiten, Team-Updates koordinieren oder Nachfassaktionen automatisieren die Outlook-Integration bietet E-Mail-Automatisierungsfunktionen auf Unternehmensniveau.
{/* MANUAL-CONTENT-END */}
## Nutzungsanleitung
## Nutzungsanweisungen
Integrieren Sie Outlook in den Workflow. Kann E-Mail-Nachrichten lesen, entwerfen und senden. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
Integrieren Sie Outlook in den Workflow. Kann E-Mail-Nachrichten lesen, entwerfen, senden, weiterleiten und verschieben. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
## Tools
### `outlook_send`
E-Mails über Outlook versenden
E-Mails mit Outlook senden
#### Eingabe
@@ -154,10 +163,12 @@ E-Mails über Outlook versenden
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Ja | E-Mail-Betreff |
| `body` | string | Ja | E-Mail-Inhalt |
| `replyToMessageId` | string | Nein | Nachrichten-ID für Antworten \(für Threading\) |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text \(text oder html\) |
| `replyToMessageId` | string | Nein | Nachrichten-ID, auf die geantwortet wird \(für Threading\) |
| `conversationId` | string | Nein | Konversations-ID für Threading |
| `cc` | string | Nein | CC-Empfänger \(durch Kommas getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Kommas getrennt\) |
| `attachments` | file[] | Nein | Dateien, die an die E-Mail angehängt werden sollen |
#### Ausgabe
@@ -170,17 +181,19 @@ E-Mails über Outlook versenden
### `outlook_draft`
E-Mails mit Outlook erstellen
E-Mails mit Outlook entwerfen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Ja | Betreff der E-Mail |
| `body` | string | Ja | Inhalt der E-Mail |
| `cc` | string | Nein | CC-Empfänger \(durch Komma getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Komma getrennt\) |
| `subject` | string | Ja | E-Mail-Betreff |
| `body` | string | Ja | E-Mail-Inhalt |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text \(text oder html\) |
| `cc` | string | Nein | CC-Empfänger \(durch Kommas getrennt\) |
| `bcc` | string | Nein | BCC-Empfänger \(durch Kommas getrennt\) |
| `attachments` | file[] | Nein | Dateien, die an den E-Mail-Entwurf angehängt werden sollen |
#### Ausgabe
@@ -203,6 +216,7 @@ E-Mails aus Outlook lesen
| --------- | ---- | -------- | ----------- |
| `folder` | string | Nein | Ordner-ID, aus der E-Mails gelesen werden sollen \(Standard: Posteingang\) |
| `maxResults` | number | Nein | Maximale Anzahl der abzurufenden E-Mails \(Standard: 1, max: 10\) |
| `includeAttachments` | boolean | Nein | E-Mail-Anhänge herunterladen und einbeziehen |
#### Ausgabe
@@ -210,6 +224,7 @@ E-Mails aus Outlook lesen
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Statusmeldung |
| `results` | array | Array von E-Mail-Nachrichtenobjekten |
| `attachments` | file[] | Alle E-Mail-Anhänge aus allen E-Mails zusammengefasst |
### `outlook_forward`
@@ -230,6 +245,104 @@ Eine bestehende Outlook-Nachricht an bestimmte Empfänger weiterleiten
| `message` | string | Erfolgs- oder Fehlermeldung |
| `results` | object | Details zum Zustellungsergebnis |
### `outlook_move`
E-Mails zwischen Outlook-Ordnern verschieben
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu verschiebenden Nachricht |
| `destinationId` | string | Ja | ID des Zielordners |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Status des erfolgreichen E-Mail-Verschiebens |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messageId` | string | ID der verschobenen Nachricht |
| `newFolderId` | string | ID des Zielordners |
### `outlook_mark_read`
Outlook-Nachricht als gelesen markieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, die als gelesen markiert werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messageId` | string | ID der Nachricht |
| `isRead` | boolean | Lesestatus der Nachricht |
### `outlook_mark_unread`
Outlook-Nachricht als ungelesen markieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der Nachricht, die als ungelesen markiert werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messageId` | string | ID der Nachricht |
| `isRead` | boolean | Lesestatus der Nachricht |
### `outlook_delete`
Outlook-Nachricht löschen (in den Ordner "Gelöschte Elemente" verschieben)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu löschenden Nachricht |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Erfolgsstatus der Operation |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `messageId` | string | ID der gelöschten Nachricht |
| `status` | string | Löschstatus |
### `outlook_copy`
Eine Outlook-Nachricht in einen anderen Ordner kopieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `messageId` | string | Ja | ID der zu kopierenden Nachricht |
| `destinationId` | string | Ja | ID des Zielordners |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Status des erfolgreichen Kopierens der E-Mail |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `originalMessageId` | string | ID der ursprünglichen Nachricht |
| `copiedMessageId` | string | ID der kopierten Nachricht |
| `destinationFolderId` | string | ID des Zielordners |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,6 @@
---
title: Parallel AI
description: Suche mit Parallel AI
description: Webrecherche mit Parallel AI
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -70,7 +70,7 @@ In Sim ermöglicht die Parallel AI-Integration Ihren Agenten, Websuchen durchzuf
## Gebrauchsanweisung
Integrieren Sie Parallel AI in den Workflow. Kann im Web suchen. Benötigt API-Schlüssel.
Integrieren Sie Parallel AI in den Workflow. Kann im Web suchen, Informationen aus URLs extrahieren und tiefgehende Recherchen durchführen.
## Tools
@@ -95,6 +95,50 @@ Durchsuchen Sie das Web mit Parallel AI. Bietet umfassende Suchergebnisse mit in
| --------- | ---- | ----------- |
| `results` | array | Suchergebnisse mit Auszügen aus relevanten Seiten |
### `parallel_extract`
Extrahieren Sie gezielte Informationen aus bestimmten URLs mit Parallel AI. Verarbeitet bereitgestellte URLs, um relevante Inhalte basierend auf Ihrem Ziel zu extrahieren.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `urls` | string | Ja | Durch Kommas getrennte Liste von URLs, aus denen Informationen extrahiert werden sollen |
| `objective` | string | Ja | Welche Informationen aus den bereitgestellten URLs extrahiert werden sollen |
| `excerpts` | boolean | Ja | Relevante Auszüge aus dem Inhalt einschließen |
| `full_content` | boolean | Ja | Vollständigen Seiteninhalt einschließen |
| `apiKey` | string | Ja | Parallel AI API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `results` | array | Extrahierte Informationen aus den bereitgestellten URLs |
### `parallel_deep_research`
Führen Sie umfassende tiefgehende Recherchen im Web mit Parallel AI durch. Synthetisiert Informationen aus mehreren Quellen mit Zitaten. Kann bis zu 15 Minuten dauern.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `input` | string | Ja | Rechercheabfrage oder Frage \(bis zu 15.000 Zeichen\) |
| `processor` | string | Nein | Rechenleistungsstufe: base, lite, pro, ultra, ultra2x, ultra4x, ultra8x \(Standard: base\) |
| `include_domains` | string | Nein | Durch Kommas getrennte Liste von Domains, auf die die Recherche beschränkt werden soll \(Quellenrichtlinie\) |
| `exclude_domains` | string | Nein | Durch Kommas getrennte Liste von Domains, die von der Recherche ausgeschlossen werden sollen \(Quellenrichtlinie\) |
| `apiKey` | string | Ja | Parallel AI API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `status` | string | Aufgabenstatus (laufend, abgeschlossen, fehlgeschlagen) |
| `run_id` | string | Eindeutige ID für diese Rechercheaufgabe |
| `message` | string | Statusmeldung (für laufende Aufgaben) |
| `content` | object | Rechercheergebnisse (strukturiert basierend auf output_schema) |
| `basis` | array | Zitate und Quellen mit Auszügen und Vertrauensstufen |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,6 @@
---
title: Perplexity
description: Verwende Perplexity AI-Chatmodelle
description: Nutze Perplexity AI für Chat und Suche
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -36,7 +36,7 @@ In Sim ermöglicht die Perplexity-Integration deinen Agenten, diese leistungssta
## Gebrauchsanweisung
Integrieren Sie Perplexity in den Workflow. Kann Vervollständigungen mit Perplexity AI-Chatmodellen generieren. Erfordert API-Schlüssel.
Integriere Perplexity in den Workflow. Kann Vervollständigungen mit Perplexity AI Chat-Modellen generieren oder Websuchen mit erweiterter Filterung durchführen.
## Tools
@@ -62,6 +62,31 @@ Generieren Sie Vervollständigungen mit Perplexity AI-Chatmodellen
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Ergebnisse der Chat-Vervollständigung |
### `perplexity_search`
Erhalte bewertete Suchergebnisse von Perplexity
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Eine Suchanfrage oder ein Array von Anfragen \(maximal 5 für Multi-Anfrage-Suche\) |
| `max_results` | number | Nein | Maximale Anzahl der zurückzugebenden Suchergebnisse \(1-20, Standard: 10\) |
| `search_domain_filter` | array | Nein | Liste der Domains/URLs, auf die die Suchergebnisse beschränkt werden sollen \(max. 20\) |
| `max_tokens_per_page` | number | Nein | Maximale Anzahl der von jeder Webseite abgerufenen Tokens \(Standard: 1024\) |
| `country` | string | Nein | Ländercode zur Filterung der Suchergebnisse \(z.B. US, GB, DE\) |
| `search_recency_filter` | string | Nein | Filtere Ergebnisse nach Aktualität: Stunde, Tag, Woche, Monat oder Jahr |
| `search_after_date` | string | Nein | Nur Inhalte einbeziehen, die nach diesem Datum veröffentlicht wurden \(Format: MM/TT/JJJJ\) |
| `search_before_date` | string | Nein | Nur Inhalte einbeziehen, die vor diesem Datum veröffentlicht wurden \(Format: MM/TT/JJJJ\) |
| `apiKey` | string | Ja | Perplexity API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Status des Operationserfolgs |
| `output` | object | Suchergebnisse |
## Hinweise
- Kategorie: `tools`

View File

@@ -139,7 +139,8 @@ Suche nach ähnlichen Vektoren in einer Qdrant-Sammlung
| `collection` | string | Ja | Sammlungsname |
| `vector` | array | Ja | Zu suchender Vektor |
| `limit` | number | Nein | Anzahl der zurückzugebenden Ergebnisse |
| `filter` | object | Nein | Filter für die Suche |
| `filter` | object | Nein | Auf die Suche anzuwendender Filter |
| `search_return_data` | string | Nein | Aus der Suche zurückzugebende Daten |
| `with_payload` | boolean | Nein | Payload in Antwort einschließen |
| `with_vector` | boolean | Nein | Vektor in Antwort einschließen |
@@ -161,7 +162,8 @@ Punkte anhand der ID aus einer Qdrant-Sammlung abrufen
| `url` | string | Ja | Qdrant-Basis-URL |
| `apiKey` | string | Nein | Qdrant-API-Schlüssel \(optional\) |
| `collection` | string | Ja | Sammlungsname |
| `ids` | array | Ja | Array von abzurufenden Punkt-IDs |
| `ids` | array | Ja | Array von Punkt-IDs zum Abrufen |
| `fetch_return_data` | string | Nein | Aus dem Abruf zurückzugebende Daten |
| `with_payload` | boolean | Nein | Payload in Antwort einschließen |
| `with_vector` | boolean | Nein | Vektor in Antwort einschließen |

View File

@@ -38,7 +38,7 @@ Diese Operationen ermöglichen es Ihren Agenten, auf Reddit-Inhalte zuzugreifen
## Nutzungsanleitung
Integrieren Sie Reddit in den Workflow. Kann Beiträge und Kommentare aus einem Subreddit abrufen. Erfordert OAuth.
Integriere Reddit in Workflows. Lese Beiträge, Kommentare und durchsuche Inhalte. Veröffentliche Beiträge, stimme ab, antworte, bearbeite und verwalte dein Reddit-Konto.
## Tools
@@ -54,6 +54,11 @@ Beiträge aus einem Subreddit mit verschiedenen Sortieroptionen abrufen
| `sort` | string | Nein | Sortiermethode für Beiträge: "hot", "new", "top" oder "rising" \(Standard: "hot"\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Beiträge \(Standard: 10, max: 100\) |
| `time` | string | Nein | Zeitfilter für nach "top" sortierte Beiträge: "day", "week", "month", "year" oder "all" \(Standard: "day"\) |
| `after` | string | Nein | Vollständiger Name eines Elements, nach dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `before` | string | Nein | Vollständiger Name eines Elements, vor dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `count` | number | Nein | Anzahl der bereits gesehenen Elemente in der Liste \(für Nummerierung verwendet\) |
| `show` | string | Nein | Zeige Elemente an, die normalerweise gefiltert würden \(z.B. "all"\) |
| `sr_detail` | boolean | Nein | Erweitere Subreddit-Details in der Antwort |
#### Ausgabe
@@ -70,10 +75,20 @@ Kommentare von einem bestimmten Reddit-Beitrag abrufen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `postId` | string | Ja | Die ID des Reddit-Beitrags, von dem Kommentare abgerufen werden sollen |
| `subreddit` | string | Ja | Das Subreddit, in dem sich der Beitrag befindet (ohne das r/-Präfix) |
| `sort` | string | Nein | Sortiermethode für Kommentare: "confidence", "top", "new", "controversial", "old", "random", "qa" (Standard: "confidence") |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare (Standard: 50, max: 100) |
| `postId` | string | Ja | Die ID des Reddit-Beitrags, aus dem Kommentare abgerufen werden sollen |
| `subreddit` | string | Ja | Das Subreddit, in dem sich der Beitrag befindet \(ohne das r/ Präfix\) |
| `sort` | string | Nein | Sortiermethode für Kommentare: "confidence", "top", "new", "controversial", "old", "random", "qa" \(Standard: "confidence"\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Kommentare \(Standard: 50, max: 100\) |
| `depth` | number | Nein | Maximale Tiefe von Unterbäumen im Thread \(steuert verschachtelte Kommentarebenen\) |
| `context` | number | Nein | Anzahl der einzubeziehenden übergeordneten Kommentare |
| `showedits` | boolean | Nein | Bearbeitungsinformationen für Kommentare anzeigen |
| `showmore` | boolean | Nein | "Mehr Kommentare laden"-Elemente in die Antwort einbeziehen |
| `showtitle` | boolean | Nein | Beitragstitel in die Antwort einbeziehen |
| `threaded` | boolean | Nein | Kommentare im verschachtelten Format zurückgeben |
| `truncate` | number | Nein | Ganzzahl zur Kürzung der Kommentartiefe |
| `after` | string | Nein | Vollständiger Name eines Elements, nach dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `before` | string | Nein | Vollständiger Name eines Elements, vor dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `count` | number | Nein | Anzahl der bereits gesehenen Elemente in der Liste \(für Nummerierung verwendet\) |
#### Ausgabe
@@ -81,6 +96,205 @@ Kommentare von einem bestimmten Reddit-Beitrag abrufen
| --------- | ---- | ----------- |
| `post` | object | Beitragsinformationen einschließlich ID, Titel, Autor, Inhalt und Metadaten |
### `reddit_get_controversial`
Kontroverse Beiträge aus einem Subreddit abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Ja | Der Name des Subreddits, aus dem Beiträge abgerufen werden sollen \(ohne das r/ Präfix\) |
| `time` | string | Nein | Zeitfilter für kontroverse Beiträge: "hour", "day", "week", "month", "year" oder "all" \(Standard: "all"\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Beiträge \(Standard: 10, max: 100\) |
| `after` | string | Nein | Vollständiger Name eines Elements, nach dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `before` | string | Nein | Vollständiger Name eines Elements, vor dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `count` | number | Nein | Anzahl der bereits gesehenen Elemente in der Liste \(für Nummerierung verwendet\) |
| `show` | string | Nein | Zeigt Elemente an, die normalerweise gefiltert würden \(z.B. "all"\) |
| `sr_detail` | boolean | Nein | Erweitert Subreddit-Details in der Antwort |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `subreddit` | string | Name des Subreddits, aus dem Beiträge abgerufen wurden |
| `posts` | array | Array von kontroversen Beiträgen mit Titel, Autor, URL, Punktzahl, Kommentaranzahl und Metadaten |
### `reddit_search`
Nach Beiträgen innerhalb eines Subreddits suchen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Ja | Der Name des Subreddits, in dem gesucht werden soll \(ohne das r/ Präfix\) |
| `query` | string | Ja | Suchanfragentext |
| `sort` | string | Nein | Sortiermethode für Suchergebnisse: "relevance", "hot", "top", "new" oder "comments" \(Standard: "relevance"\) |
| `time` | string | Nein | Zeitfilter für Suchergebnisse: "hour", "day", "week", "month", "year" oder "all" \(Standard: "all"\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Beiträge \(Standard: 10, max: 100\) |
| `restrict_sr` | boolean | Nein | Suche nur auf das angegebene Subreddit beschränken \(Standard: true\) |
| `after` | string | Nein | Vollständiger Name eines Elements, nach dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `before` | string | Nein | Vollständiger Name eines Elements, vor dem Elemente abgerufen werden sollen \(für Paginierung\) |
| `count` | number | Nein | Anzahl der bereits gesehenen Elemente in der Liste \(für Nummerierung verwendet\) |
| `show` | string | Nein | Zeigt Elemente an, die normalerweise gefiltert würden \(z.B. "all"\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `subreddit` | string | Name des Subreddits, in dem die Suche durchgeführt wurde |
| `posts` | array | Array von Suchergebnisbeiträgen mit Titel, Autor, URL, Punktzahl, Kommentaranzahl und Metadaten |
### `reddit_submit_post`
Einen neuen Beitrag in einem Subreddit einreichen (Text oder Link)
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Ja | Der Name des Subreddits, in dem gepostet werden soll \(ohne das r/ Präfix\) |
| `title` | string | Ja | Titel der Einreichung \(maximal 300 Zeichen\) |
| `text` | string | Nein | Textinhalt für einen Selbstbeitrag \(Markdown wird unterstützt\) |
| `url` | string | Nein | URL für einen Link-Beitrag \(kann nicht zusammen mit Text verwendet werden\) |
| `nsfw` | boolean | Nein | Beitrag als NSFW markieren |
| `spoiler` | boolean | Nein | Beitrag als Spoiler markieren |
| `send_replies` | boolean | Nein | Antwortbenachrichtigungen an den Posteingang senden \(Standard: true\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Beitrag erfolgreich eingereicht wurde |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Beitragsdaten einschließlich ID, Name, URL und Permalink |
### `reddit_vote`
Upvote, Downvote oder Zurücknahme einer Stimme für einen Reddit-Beitrag oder -Kommentar
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `id` | string | Ja | Vollständiger Name des Elements, für das abgestimmt werden soll \(z.B. t3_xxxxx für Beitrag, t1_xxxxx für Kommentar\) |
| `dir` | number | Ja | Abstimmungsrichtung: 1 \(Upvote\), 0 \(Zurücknahme\), oder -1 \(Downvote\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Abstimmung erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `reddit_save`
Einen Reddit-Beitrag oder Kommentar in deinen gespeicherten Elementen speichern
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `id` | string | Ja | Vollständiger Name des zu speichernden Elements \(z.B. t3_xxxxx für Beitrag, t1_xxxxx für Kommentar\) |
| `category` | string | Nein | Kategorie, unter der gespeichert werden soll \(Reddit Gold-Funktion\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob das Speichern erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `reddit_unsave`
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `subreddit` | string | Subreddit-Name |
| `posts` | json | Beitragsdaten |
| `post` | json | Daten eines einzelnen Beitrags |
| `comments` | json | Kommentardaten |
### `reddit_reply`
Einen Kommentar zu einem Reddit-Beitrag oder Kommentar hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `parent_id` | string | Ja | Vollständiger Name des Elements, auf das geantwortet werden soll \(z.B. t3_xxxxx für Beitrag, t1_xxxxx für Kommentar\) |
| `text` | string | Ja | Kommentartext im Markdown-Format |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Antwort erfolgreich gepostet wurde |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Kommentardaten einschließlich ID, Name, Permalink und Inhalt |
### `reddit_edit`
Bearbeite den Text deines eigenen Reddit-Beitrags oder -Kommentars
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `thing_id` | string | Ja | Vollständiger Name des zu bearbeitenden Elements \(z.B. t3_xxxxx für Beiträge, t1_xxxxx für Kommentare\) |
| `text` | string | Ja | Neuer Textinhalt im Markdown-Format |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Bearbeitung erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Aktualisierte Inhaltsdaten |
### `reddit_delete`
Lösche deinen eigenen Reddit-Beitrag oder -Kommentar
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `id` | string | Ja | Vollständiger Name des zu löschenden Elements \(z.B. t3_xxxxx für Beiträge, t1_xxxxx für Kommentare\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Löschung erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
### `reddit_subscribe`
Subreddit abonnieren oder Abonnement kündigen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Ja | Der Name des Subreddits \(ohne das r/ Präfix\) |
| `action` | string | Ja | Auszuführende Aktion: "sub" zum Abonnieren oder "unsub" zum Kündigen des Abonnements |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Abonnementaktion erfolgreich war |
| `message` | string | Erfolgs- oder Fehlermeldung |
## Hinweise
- Kategorie: `tools`

View File

@@ -56,7 +56,8 @@ Senden Sie eine E-Mail mit Ihrem eigenen Resend API-Schlüssel und Absenderadres
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
| `subject` | string | Ja | Betreff der E-Mail |
| `body` | string | Ja | Inhalt der E-Mail |
| `resendApiKey` | string | Ja | Resend API-Schlüssel zum Versenden von E-Mails |
| `contentType` | string | Nein | Inhaltstyp für den E-Mail-Text (text oder html) |
| `resendApiKey` | string | Ja | Resend API-Schlüssel zum Senden von E-Mails |
#### Ausgabe

View File

@@ -1,6 +1,6 @@
---
title: S3
description: S3-Dateien anzeigen
description: S3-Dateien hochladen, herunterladen, auflisten und verwalten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -61,10 +61,35 @@ In Sim ermöglicht die S3-Integration Ihren Agenten das Abrufen und Zugreifen au
## Gebrauchsanweisung
S3 in den Workflow integrieren. Kann vorsignierte URLs für S3-Objekte erhalten. Erfordert Zugriffsschlüssel und geheimen Zugriffsschlüssel.
S3 in den Workflow integrieren. Dateien hochladen, Objekte herunterladen, Bucket-Inhalte auflisten, Objekte löschen und Objekte zwischen Buckets kopieren. Erfordert AWS-Zugriffsschlüssel und geheimen Zugriffsschlüssel.
## Tools
### `s3_put_object`
Eine Datei in einen AWS S3-Bucket hochladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS-Zugriffsschlüssel-ID |
| `secretAccessKey` | string | Ja | Ihr AWS-geheimer Zugriffsschlüssel |
| `region` | string | Ja | AWS-Region (z. B. us-east-1) |
| `bucketName` | string | Ja | S3-Bucket-Name |
| `objectKey` | string | Ja | Objektschlüssel/Pfad in S3 (z. B. ordner/dateiname.ext) |
| `file` | file | Nein | Hochzuladende Datei |
| `content` | string | Nein | Hochzuladender Textinhalt (Alternative zur Datei) |
| `contentType` | string | Nein | Content-Type-Header (wird automatisch aus der Datei erkannt, wenn nicht angegeben) |
| `acl` | string | Nein | Zugriffskontrollliste (z. B. private, public-read) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `url` | string | URL des hochgeladenen S3-Objekts |
| `metadata` | object | Upload-Metadaten einschließlich ETag und Speicherort |
### `s3_get_object`
Ein Objekt aus einem AWS S3-Bucket abrufen
@@ -73,8 +98,8 @@ Ein Objekt aus einem AWS S3-Bucket abrufen
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS Access Key ID |
| `secretAccessKey` | string | Ja | Ihr AWS Secret Access Key |
| `accessKeyId` | string | Ja | Ihre AWS-Zugriffsschlüssel-ID |
| `secretAccessKey` | string | Ja | Ihr AWS-geheimer Zugriffsschlüssel |
| `s3Uri` | string | Ja | S3-Objekt-URL |
#### Ausgabe
@@ -84,6 +109,73 @@ Ein Objekt aus einem AWS S3-Bucket abrufen
| `url` | string | Vorsignierte URL zum Herunterladen des S3-Objekts |
| `metadata` | object | Dateimetadaten einschließlich Typ, Größe, Name und Datum der letzten Änderung |
### `s3_list_objects`
Objekte in einem AWS S3-Bucket auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS Access Key ID |
| `secretAccessKey` | string | Ja | Ihr AWS Secret Access Key |
| `region` | string | Ja | AWS-Region (z.B. us-east-1) |
| `bucketName` | string | Ja | S3-Bucket-Name |
| `prefix` | string | Nein | Präfix zum Filtern von Objekten (z.B. ordner/) |
| `maxKeys` | number | Nein | Maximale Anzahl zurückzugebender Objekte (Standard: 1000) |
| `continuationToken` | string | Nein | Token für Paginierung |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `objects` | array | Liste der S3-Objekte |
### `s3_delete_object`
Ein Objekt aus einem AWS S3-Bucket löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS Access Key ID |
| `secretAccessKey` | string | Ja | Ihr AWS Secret Access Key |
| `region` | string | Ja | AWS-Region (z.B. us-east-1) |
| `bucketName` | string | Ja | S3-Bucket-Name |
| `objectKey` | string | Ja | Objekt-Schlüssel/Pfad zum Löschen |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `deleted` | boolean | Ob das Objekt erfolgreich gelöscht wurde |
| `metadata` | object | Löschmetadaten |
### `s3_copy_object`
Ein Objekt innerhalb von oder zwischen AWS S3-Buckets kopieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accessKeyId` | string | Ja | Ihre AWS Access Key ID |
| `secretAccessKey` | string | Ja | Ihr AWS Secret Access Key |
| `region` | string | Ja | AWS-Region (z.B. us-east-1) |
| `sourceBucket` | string | Ja | Name des Quell-Buckets |
| `sourceKey` | string | Ja | Quell-Objektschlüssel/-pfad |
| `destinationBucket` | string | Ja | Name des Ziel-Buckets |
| `destinationKey` | string | Ja | Ziel-Objektschlüssel/-pfad |
| `acl` | string | Nein | Zugriffskontrollliste für das kopierte Objekt (z.B. private, public-read) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `url` | string | URL des kopierten S3-Objekts |
| `metadata` | object | Metadaten des Kopiervorgangs |
## Hinweise
- Kategorie: `tools`

View File

@@ -199,6 +199,26 @@ Ein neues Element zu einer SharePoint-Liste hinzufügen
| --------- | ---- | ----------- |
| `item` | object | Erstelltes SharePoint-Listenelement |
### `sharepoint_upload_file`
Dateien in eine SharePoint-Dokumentenbibliothek hochladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `siteId` | string | Nein | Die ID der SharePoint-Website |
| `driveId` | string | Nein | Die ID der Dokumentenbibliothek (Laufwerk). Wenn nicht angegeben, wird das Standardlaufwerk verwendet. |
| `folderPath` | string | Nein | Optionaler Ordnerpfad innerhalb der Dokumentenbibliothek (z.B. /Documents/Subfolder) |
| `fileName` | string | Nein | Optional: Überschreiben des hochgeladenen Dateinamens |
| `files` | file[] | Nein | Dateien, die nach SharePoint hochgeladen werden sollen |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `uploadedFiles` | array | Array von hochgeladenen Dateiobjekten |
## Hinweise
- Kategorie: `tools`

View File

@@ -1,6 +1,7 @@
---
title: Slack
description: Sende Nachrichten an Slack oder löse Workflows durch Slack-Ereignisse aus
description: Nachrichten senden, aktualisieren, löschen, Reaktionen in Slack
hinzufügen oder Workflows von Slack-Ereignissen auslösen
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -46,24 +47,29 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
Mit Slack kannst du:
- **Agent-Benachrichtigungen automatisieren**: Sende Echtzeit-Updates von deinen Sim-Agenten an jeden Slack-Kanal
- **Webhook-Endpunkte erstellen**: Konfiguriere Slack-Bots als Webhooks, um Sim-Workflows durch Slack-Aktivitäten auszulösen
- **Agent-Workflows verbessern**: Integriere Slack-Messaging in deine Agenten, um Ergebnisse, Warnungen und Statusupdates zu liefern
- **Slack-Canvases erstellen und teilen**: Erstelle programmatisch kollaborative Dokumente (Canvases) in Slack-Kanälen
- **Nachrichten aus Kanälen lesen**: Rufe aktuelle Nachrichten aus jedem Slack-Kanal ab und verarbeite sie für Monitoring oder Workflow-Auslöser
- **Automatisieren Sie Agenten-Benachrichtigungen**: Senden Sie Echtzeit-Updates von Ihren Sim-Agenten an jeden Slack-Kanal
- **Erstellen Sie Webhook-Endpunkte**: Konfigurieren Sie Slack-Bots als Webhooks, um Sim-Workflows aus Slack-Aktivitäten auszulösen
- **Verbessern Sie Agenten-Workflows**: Integrieren Sie Slack-Messaging in Ihre Agenten, um Ergebnisse, Warnungen und Statusaktualisierungen zu liefern
- **Erstellen und teilen Sie Slack-Canvases**: Erstellen Sie programmatisch kollaborative Dokumente (Canvases) in Slack-Kanälen
- **Lesen Sie Nachrichten aus Kanälen**: Rufen Sie aktuelle Nachrichten aus jedem Slack-Kanal ab und verarbeiten Sie diese für Überwachungs- oder Workflow-Auslöser
- **Verwalten Sie Bot-Nachrichten**: Aktualisieren, löschen und fügen Sie Reaktionen zu Nachrichten hinzu, die von Ihrem Bot gesendet wurden
In Sim ermöglicht die Slack-Integration Ihren Agenten, im Rahmen ihrer Workflows auf verschiedene Weise programmatisch mit Slack zu interagieren:
In Sim ermöglicht die Slack-Integration Ihren Agenten, programmatisch mit Slack zu interagieren, mit vollständigen Nachrichtenverwaltungsfunktionen als Teil ihrer Workflows:
- **Nachrichten senden**: Agenten können formatierte Nachrichten an jeden Slack-Kanal oder Benutzer senden und unterstützen dabei Slacks mrkdwn-Syntax für umfangreiche Formatierung.
- **Canvases erstellen**: Agenten können Slack-Canvases (kollaborative Dokumente) direkt in Kanälen erstellen und teilen, was den Austausch von umfangreicheren Inhalten und Dokumentationen ermöglicht.
- **Nachrichten lesen**: Agenten können aktuelle Nachrichten aus Kanälen lesen, was Überwachung, Berichterstattung oder das Auslösen weiterer Aktionen basierend auf Kanalaktivitäten ermöglicht.
- **Nachrichten senden**: Agenten können formatierte Nachrichten an jeden Slack-Kanal oder Benutzer senden und unterstützen dabei Slacks mrkdwn-Syntax für umfangreiche Formatierung
- **Nachrichten aktualisieren**: Bearbeiten Sie zuvor gesendete Bot-Nachrichten, um Informationen zu korrigieren oder Statusaktualisierungen bereitzustellen
- **Nachrichten löschen**: Entfernen Sie Bot-Nachrichten, wenn sie nicht mehr benötigt werden oder Fehler enthalten
- **Reaktionen hinzufügen**: Drücken Sie Stimmungen oder Bestätigungen aus, indem Sie Emoji-Reaktionen zu jeder Nachricht hinzufügen
- **Canvases erstellen**: Erstellen und teilen Sie Slack-Canvases (kollaborative Dokumente) direkt in Kanälen, um reichhaltigere Inhalte zu teilen und zu dokumentieren
- **Nachrichten lesen**: Lesen Sie aktuelle Nachrichten aus Kanälen, um Überwachung, Berichterstattung oder das Auslösen weiterer Aktionen basierend auf Kanalaktivitäten zu ermöglichen
- **Dateien herunterladen**: Rufen Sie in Slack-Kanälen geteilte Dateien zur Verarbeitung oder Archivierung ab
Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen, Warnungen, Updates und Berichten direkt an die Kommunikationszentrale Ihres Teams, das Teilen strukturierter Dokumente oder die Überwachung von Gesprächen für Workflow-Auslöser. Ihre Agenten können zeitnahe Informationen liefern, Ergebnisse aus abgeschlossenen Prozessen teilen, kollaborative Dokumente erstellen oder Teammitglieder benachrichtigen, wenn Aufmerksamkeit erforderlich ist. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und der Kommunikation Ihres Teams und stellt sicher, dass alle ohne manuelles Eingreifen informiert bleiben. Durch die Verbindung von Sim mit Slack können Sie Agenten erstellen, die Ihr Team automatisch mit relevanten Informationen zur richtigen Zeit auf dem Laufenden halten, die Zusammenarbeit durch automatisches Teilen von Erkenntnissen verbessern und den Bedarf an manuellen Statusaktualisierungen reduzieren alles unter Nutzung Ihres bestehenden Slack-Arbeitsbereichs, in dem Ihr Team bereits kommuniziert.
Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen mit dynamischen Updates, das Verwalten von Gesprächsabläufen mit bearbeitbaren Statusnachrichten, das Bestätigen wichtiger Nachrichten mit Reaktionen und das Sauberhalten von Kanälen durch Entfernen veralteter Bot-Nachrichten. Ihre Agenten können zeitnahe Informationen liefern, Nachrichten aktualisieren, während Workflows fortschreiten, kollaborative Dokumente erstellen oder Teammitglieder benachrichtigen, wenn Aufmerksamkeit benötigt wird. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und der Kommunikation Ihres Teams und stellt sicher, dass jeder mit genauen, aktuellen Informationen auf dem Laufenden bleibt. Durch die Verbindung von Sim mit Slack können Sie Agenten erstellen, die Ihr Team mit relevanten Informationen zur richtigen Zeit auf dem Laufenden halten, die Zusammenarbeit verbessern, indem sie Erkenntnisse automatisch teilen und aktualisieren, und die Notwendigkeit manueller Statusaktualisierungen reduzieren alles während Sie Ihren bestehenden Slack-Workspace nutzen, in dem Ihr Team bereits kommuniziert.
{/* MANUAL-CONTENT-END */}
## Nutzungsanweisungen
Integrieren Sie Slack in den Workflow. Kann Nachrichten senden, Canvases erstellen und Nachrichten lesen. Erfordert OAuth. Kann im Auslösemodus verwendet werden, um einen Workflow zu starten, wenn eine Nachricht an einen Kanal gesendet wird.
Integriert Slack in den Workflow. Kann Nachrichten senden, aktualisieren und löschen, Canvases erstellen, Nachrichten lesen und Reaktionen hinzufügen. Erfordert im erweiterten Modus ein Bot-Token anstelle von OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine Nachricht an einen Kanal gesendet wird.
## Tools
@@ -76,9 +82,11 @@ Senden Sie Nachrichten an Slack-Kanäle oder Benutzer über die Slack-API. Unter
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `botToken` | string | Nein | Bot-Token für Custom Bot |
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
| `channel` | string | Ja | Ziel-Slack-Kanal \(z.B. #general\) |
| `text` | string | Ja | Zu sendender Nachrichtentext \(unterstützt Slack mrkdwn-Formatierung\) |
| `text` | string | Ja | Nachrichtentext zum Senden \(unterstützt Slack mrkdwn-Formatierung\) |
| `thread_ts` | string | Nein | Thread-Zeitstempel für Antworten \(erstellt Thread-Antwort\) |
| `files` | file[] | Nein | Dateien, die an die Nachricht angehängt werden sollen |
#### Ausgabe
@@ -131,6 +139,87 @@ Lesen Sie die neuesten Nachrichten aus Slack-Kanälen. Rufen Sie den Konversatio
| --------- | ---- | ----------- |
| `messages` | array | Array von Nachrichtenobjekten aus dem Kanal |
### `slack_download`
Eine Datei von Slack herunterladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `botToken` | string | Nein | Bot-Token für benutzerdefinierten Bot |
| `fileId` | string | Ja | Die ID der herunterzuladenden Datei |
| `fileName` | string | Nein | Optionale Überschreibung des Dateinamens |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `file` | file | Heruntergeladene Datei, gespeichert in den Ausführungsdateien |
### `slack_update_message`
Eine zuvor vom Bot in Slack gesendete Nachricht aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `botToken` | string | Nein | Bot-Token für Custom Bot |
| `channel` | string | Ja | Kanal-ID, in dem die Nachricht gepostet wurde \(z.B. C1234567890\) |
| `timestamp` | string | Ja | Zeitstempel der zu aktualisierenden Nachricht \(z.B. 1405894322.002768\) |
| `text` | string | Ja | Neuer Nachrichtentext \(unterstützt Slack mrkdwn-Formatierung\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | Metadaten der aktualisierten Nachricht |
### `slack_delete_message`
Eine zuvor vom Bot in Slack gesendete Nachricht löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `botToken` | string | Nein | Bot-Token für Custom Bot |
| `channel` | string | Ja | Kanal-ID, in dem die Nachricht gepostet wurde \(z.B. C1234567890\) |
| `timestamp` | string | Ja | Zeitstempel der zu löschenden Nachricht \(z.B. 1405894322.002768\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | Metadaten der gelöschten Nachricht |
### `slack_add_reaction`
Emoji-Reaktion zu einer Slack-Nachricht hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `authMethod` | string | Nein | Authentifizierungsmethode: oauth oder bot_token |
| `botToken` | string | Nein | Bot-Token für Custom Bot |
| `channel` | string | Ja | Kanal-ID, in dem die Nachricht gepostet wurde \(z.B. C1234567890\) |
| `timestamp` | string | Ja | Zeitstempel der Nachricht, auf die reagiert werden soll \(z.B. 1405894322.002768\) |
| `name` | string | Ja | Name der Emoji-Reaktion \(ohne Doppelpunkte, z.B. thumbsup, heart, eyes\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `content` | string | Erfolgsmeldung |
| `metadata` | object | Reaktions-Metadaten |
## Hinweise
- Kategorie: `tools`

File diff suppressed because it is too large Load Diff

View File

@@ -75,7 +75,7 @@ Ob Sie interne Tools erstellen, Geschäftsprozesse automatisieren oder Produktio
## Gebrauchsanweisung
Integrieren Sie Supabase in den Workflow. Kann viele Zeilen abrufen, eine Zeile abrufen, erstellen, aktualisieren, löschen und upserten.
Integrieren Sie Supabase in den Workflow. Unterstützt Datenbankoperationen (Abfrage, Einfügen, Aktualisieren, Löschen, Upsert), Volltextsuche, RPC-Funktionen, Zeilenzählung, Vektorsuche und komplettes Speichermanagement (Hochladen, Herunterladen, Auflisten, Verschieben, Kopieren, Löschen von Dateien und Buckets).
## Tools
@@ -202,6 +202,324 @@ Daten in eine Supabase-Tabelle einfügen oder aktualisieren (Upsert-Operation)
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array der eingefügten/aktualisierten Datensätze |
### `supabase_count`
Zeilen in einer Supabase-Tabelle zählen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `table` | string | Ja | Der Name der Supabase-Tabelle, deren Zeilen gezählt werden sollen |
| `filter` | string | Nein | PostgREST-Filter \(z.B. "status=eq.active"\) |
| `countType` | string | Nein | Zähltyp: exact, planned oder estimated \(Standard: exact\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `count` | number | Anzahl der Zeilen, die dem Filter entsprechen |
### `supabase_text_search`
Volltextsuche in einer Supabase-Tabelle durchführen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `table` | string | Ja | Der Name der Supabase-Tabelle für die Suche |
| `column` | string | Ja | Die Spalte, in der gesucht werden soll |
| `query` | string | Ja | Die Suchanfrage |
| `searchType` | string | Nein | Suchtyp: plain, phrase oder websearch \(Standard: websearch\) |
| `language` | string | Nein | Sprache für die Textsuchkonfiguration \(Standard: english\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Zeilen |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array von Datensätzen, die der Suchabfrage entsprechen |
### `supabase_vector_search`
Ähnlichkeitssuche mit pgvector in einer Supabase-Tabelle durchführen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `functionName` | string | Ja | Der Name der PostgreSQL-Funktion, die die Vektorsuche durchführt \(z.B. match_documents\) |
| `queryEmbedding` | array | Ja | Der Abfragevektor/Embedding, nach dem ähnliche Elemente gesucht werden sollen |
| `matchThreshold` | number | Nein | Minimaler Ähnlichkeitsschwellenwert \(0-1\), typischerweise 0,7-0,9 |
| `matchCount` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 10\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array von Datensätzen mit Ähnlichkeitswerten aus der Vektorsuche. Jeder Datensatz enthält ein Ähnlichkeitsfeld \(0-1\), das angibt, wie ähnlich er dem Abfragevektor ist. |
### `supabase_rpc`
Eine PostgreSQL-Funktion in Supabase aufrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `functionName` | string | Ja | Der Name der aufzurufenden PostgreSQL-Funktion |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | json | Von der Funktion zurückgegebenes Ergebnis |
### `supabase_storage_upload`
Eine Datei in einen Supabase-Speicher-Bucket hochladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Ja | Der Pfad, unter dem die Datei gespeichert wird \(z.B. "ordner/datei.jpg"\) |
| `fileContent` | string | Ja | Der Dateiinhalt \(base64-kodiert für Binärdateien oder Klartext\) |
| `contentType` | string | Nein | MIME-Typ der Datei \(z.B. "image/jpeg", "text/plain"\) |
| `upsert` | boolean | Nein | Wenn true, überschreibt vorhandene Datei \(Standard: false\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Upload-Ergebnis einschließlich Dateipfad und Metadaten |
### `supabase_storage_download`
Eine Datei aus einem Supabase-Speicher-Bucket herunterladen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Ja | Der Pfad zur herunterzuladenden Datei \(z.B. "ordner/datei.jpg"\) |
| `fileName` | string | Nein | Optionale Überschreibung des Dateinamens |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `file` | file | Heruntergeladene Datei, gespeichert in Ausführungsdateien |
### `supabase_storage_list`
Dateien in einem Supabase-Speicher-Bucket auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Nein | Der Ordnerpfad, aus dem Dateien aufgelistet werden sollen \(Standard: Root\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Dateien \(Standard: 100\) |
| `offset` | number | Nein | Anzahl der zu überspringenden Dateien \(für Paginierung\) |
| `sortBy` | string | Nein | Spalte zum Sortieren: name, created_at, updated_at \(Standard: name\) |
| `sortOrder` | string | Nein | Sortierreihenfolge: asc oder desc \(Standard: asc\) |
| `search` | string | Nein | Suchbegriff zum Filtern von Dateien nach Namen |
| `apiKey` | string | Ja | Ihr Supabase Service-Rolle-Secret-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array von Dateiobjekten mit Metadaten |
### `supabase_storage_delete`
Dateien aus einem Supabase-Speicher-Bucket löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `paths` | array | Ja | Array von Dateipfaden zum Löschen \(z.B. \["ordner/datei1.jpg", "ordner/datei2.jpg"\]\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array der gelöschten Dateiobjekte |
### `supabase_storage_move`
Eine Datei innerhalb eines Supabase-Speicher-Buckets verschieben
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `fromPath` | string | Ja | Der aktuelle Pfad der Datei \(z.B. "ordner/alt.jpg"\) |
| `toPath` | string | Ja | Der neue Pfad für die Datei \(z.B. "neuerordner/neu.jpg"\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Ergebnis der Verschiebeaktion |
### `supabase_storage_copy`
Eine Datei innerhalb eines Supabase-Speicher-Buckets kopieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `fromPath` | string | Ja | Der Pfad der Quelldatei \(z.B. "folder/source.jpg"\) |
| `toPath` | string | Ja | Der Pfad für die kopierte Datei \(z.B. "folder/copy.jpg"\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Ergebnis der Kopieroperation |
### `supabase_storage_create_bucket`
Einen neuen Speicher-Bucket in Supabase erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des zu erstellenden Buckets |
| `isPublic` | boolean | Nein | Ob der Bucket öffentlich zugänglich sein soll \(Standard: false\) |
| `fileSizeLimit` | number | Nein | Maximale Dateigröße in Bytes \(optional\) |
| `allowedMimeTypes` | array | Nein | Array erlaubter MIME-Typen \(z.B. \["image/png", "image/jpeg"\]\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Informationen zum erstellten Bucket |
### `supabase_storage_list_buckets`
Alle Speicher-Buckets in Supabase auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | array | Array von Bucket-Objekten |
### `supabase_storage_delete_bucket`
Einen Speicher-Bucket in Supabase löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des zu löschenden Buckets |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `results` | object | Ergebnis der Löschoperation |
### `supabase_storage_get_public_url`
Die öffentliche URL für eine Datei in einem Supabase-Speicher-Bucket abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Ja | Der Pfad zur Datei \(z.B. "ordner/datei.jpg"\) |
| `download` | boolean | Nein | Wenn true, wird der Download erzwungen anstatt der Inline-Anzeige \(Standard: false\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `publicUrl` | string | Die öffentliche URL für den Zugriff auf die Datei |
### `supabase_storage_create_signed_url`
Erstellt eine temporäre signierte URL für eine Datei in einem Supabase-Speicher-Bucket
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Ja | Ihre Supabase-Projekt-ID \(z.B. jdrkgepadsdopsntdlom\) |
| `bucket` | string | Ja | Der Name des Speicher-Buckets |
| `path` | string | Ja | Der Pfad zur Datei \(z.B. "ordner/datei.jpg"\) |
| `expiresIn` | number | Ja | Anzahl der Sekunden bis zum Ablauf der URL \(z.B. 3600 für 1 Stunde\) |
| `download` | boolean | Nein | Wenn true, wird der Download erzwungen anstatt der Inline-Anzeige \(Standard: false\) |
| `apiKey` | string | Ja | Ihr Supabase Service Role Secret Key |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Statusmeldung der Operation |
| `signedUrl` | string | Die temporäre signierte URL für den Zugriff auf die Datei |
## Hinweise
- Kategorie: `tools`

View File

@@ -71,6 +71,21 @@ KI-gestützte Websuchen mit Tavily durchführen
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Die auszuführende Suchanfrage |
| `max_results` | number | Nein | Maximale Anzahl an Ergebnissen \(1-20\) |
| `topic` | string | Nein | Kategorie-Typ: general, news oder finance \(Standard: general\) |
| `search_depth` | string | Nein | Suchbereich: basic \(1 Kredit\) oder advanced \(2 Kredite\) \(Standard: basic\) |
| `include_answer` | string | Nein | LLM-generierte Antwort: true/basic für schnelle Antwort oder advanced für detaillierte |
| `include_raw_content` | string | Nein | Geparster HTML-Inhalt: true/markdown oder text-Format |
| `include_images` | boolean | Nein | Bildsuchergebnisse einbeziehen |
| `include_image_descriptions` | boolean | Nein | Beschreibenden Text für Bilder hinzufügen |
| `include_favicon` | boolean | Nein | Favicon-URLs einbeziehen |
| `chunks_per_source` | number | Nein | Maximale Anzahl relevanter Abschnitte pro Quelle \(1-3, Standard: 3\) |
| `time_range` | string | Nein | Nach Aktualität filtern: day/d, week/w, month/m, year/y |
| `start_date` | string | Nein | Frühestes Veröffentlichungsdatum \(Format JJJJ-MM-TT\) |
| `end_date` | string | Nein | Spätestes Veröffentlichungsdatum \(Format JJJJ-MM-TT\) |
| `include_domains` | string | Nein | Kommagetrennte Liste von Domains auf der Whitelist \(max. 300\) |
| `exclude_domains` | string | Nein | Kommagetrennte Liste von Domains auf der Blacklist \(max. 150\) |
| `country` | string | Nein | Ergebnisse aus bestimmtem Land bevorzugen \(nur für allgemeine Themen\) |
| `auto_parameters` | boolean | Nein | Automatische Parameterkonfiguration basierend auf der Abfrageabsicht |
| `apiKey` | string | Ja | Tavily API-Schlüssel |
#### Ausgabe
@@ -88,8 +103,11 @@ Extrahieren Sie Rohinhalt von mehreren Webseiten gleichzeitig mit Tavily
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `urls` | string | Ja | URL oder Array von URLs, von denen Inhalte extrahiert werden sollen |
| `extract_depth` | string | Nein | Die Extraktionstiefe \(basic=1 Kredit/5 URLs, advanced=2 Kredite/5 URLs\) |
| `urls` | string | Ja | URL oder Array von URLs, aus denen Inhalte extrahiert werden sollen |
| `extract_depth` | string | Nein | Die Tiefe der Extraktion \(basic=1 Kredit/5 URLs, advanced=2 Kredite/5 URLs\) |
| `format` | string | Nein | Ausgabeformat: markdown oder text \(Standard: markdown\) |
| `include_images` | boolean | Nein | Bilder in die Extraktionsausgabe einbeziehen |
| `include_favicon` | boolean | Nein | Favicon-URL für jedes Ergebnis hinzufügen |
| `apiKey` | string | Ja | Tavily API-Schlüssel |
#### Ausgabe
@@ -98,6 +116,64 @@ Extrahieren Sie Rohinhalt von mehreren Webseiten gleichzeitig mit Tavily
| --------- | ---- | ----------- |
| `results` | array | Die URL, die extrahiert wurde |
### `tavily_crawl`
Systematisches Crawlen und Extrahieren von Inhalten aus Websites mit Tavily
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die Stamm-URL, bei der der Crawl beginnen soll |
| `instructions` | string | Nein | Anweisungen in natürlicher Sprache für den Crawler \(kostet 2 Kredite pro 10 Seiten\) |
| `max_depth` | number | Nein | Wie weit von der Basis-URL aus erkundet werden soll \(1-5, Standard: 1\) |
| `max_breadth` | number | Nein | Links, die pro Seitenebene verfolgt werden \(≥1, Standard: 20\) |
| `limit` | number | Nein | Gesamtzahl der verarbeiteten Links vor dem Stopp \(≥1, Standard: 50\) |
| `select_paths` | string | Nein | Kommagetrennte Regex-Muster, um bestimmte URL-Pfade einzuschließen \(z.B. /docs/.*\) |
| `select_domains` | string | Nein | Kommagetrennte Regex-Muster, um das Crawlen auf bestimmte Domains zu beschränken |
| `exclude_paths` | string | Nein | Kommagetrennte Regex-Muster, um bestimmte URL-Pfade zu überspringen |
| `exclude_domains` | string | Nein | Kommagetrennte Regex-Muster, um bestimmte Domains zu blockieren |
| `allow_external` | boolean | Nein | Links zu externen Domains in die Ergebnisse einbeziehen \(Standard: true\) |
| `include_images` | boolean | Nein | Bilder in die Crawl-Ausgabe einbeziehen |
| `extract_depth` | string | Nein | Extraktionstiefe: basic \(1 Kredit/5 Seiten\) oder advanced \(2 Kredite/5 Seiten\) |
| `format` | string | Nein | Ausgabeformat: markdown oder text \(Standard: markdown\) |
| `include_favicon` | boolean | Nein | Favicon-URL für jedes Ergebnis hinzufügen |
| `apiKey` | string | Ja | Tavily API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `base_url` | string | Die Basis-URL, die durchsucht wurde |
| `results` | array | Die durchsuchte Seiten-URL |
### `tavily_map`
Entdecken und visualisieren der Website-Struktur mit Tavily
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `url` | string | Ja | Die Root-URL, bei der die Kartierung beginnen soll |
| `instructions` | string | Nein | Natürlichsprachliche Anleitung für das Kartierungsverhalten \(kostet 2 Kredite pro 10 Seiten\) |
| `max_depth` | number | Nein | Wie weit von der Basis-URL aus erkundet werden soll \(1-5, Standard: 1\) |
| `max_breadth` | number | Nein | Links, die pro Ebene verfolgt werden sollen \(Standard: 20\) |
| `limit` | number | Nein | Gesamtzahl der zu verarbeitenden Links \(Standard: 50\) |
| `select_paths` | string | Nein | Durch Kommas getrennte Regex-Muster für URL-Pfadfilterung \(z.B. /docs/.*\) |
| `select_domains` | string | Nein | Durch Kommas getrennte Regex-Muster, um die Kartierung auf bestimmte Domains zu beschränken |
| `exclude_paths` | string | Nein | Durch Kommas getrennte Regex-Muster, um bestimmte URL-Pfade auszuschließen |
| `exclude_domains` | string | Nein | Durch Kommas getrennte Regex-Muster, um Domains auszuschließen |
| `allow_external` | boolean | Nein | Externe Domain-Links in Ergebnisse einbeziehen \(Standard: true\) |
| `apiKey` | string | Ja | Tavily API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `base_url` | string | Die Basis-URL, die kartiert wurde |
| `results` | array | Entdeckte URL |
## Hinweise
- Kategorie: `tools`

View File

@@ -190,6 +190,26 @@ Senden Sie Animationen (GIFs) an Telegram-Kanäle oder Benutzer über die Telegr
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Telegram-Nachrichtendaten einschließlich optionaler Medien |
### `telegram_send_document`
Senden Sie Dokumente (PDF, ZIP, DOC, etc.) an Telegram-Kanäle oder -Nutzer über die Telegram Bot API.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Ja | Ihr Telegram Bot API-Token |
| `chatId` | string | Ja | Ziel-Telegram-Chat-ID |
| `files` | file[] | Nein | Zu sendende Dokumentdatei \(PDF, ZIP, DOC, etc.\). Maximale Größe: 50MB |
| `caption` | string | Nein | Dokumentbeschreibung \(optional\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `message` | string | Erfolgs- oder Fehlermeldung |
| `data` | object | Telegram-Nachrichtendaten einschließlich Dokument |
## Hinweise
- Kategorie: `tools`

View File

@@ -0,0 +1,141 @@
---
title: Twilio Voice
description: Telefonate tätigen und verwalten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="twilio_voice"
color="#F22F46"
icon={true}
iconSvg={`<svg className="block-icon" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'>
<path
fill='currentColor'
d='M128 0c70.656 0 128 57.344 128 128s-57.344 128-128 128S0 198.656 0 128 57.344 0 128 0zm0 33.792c-52.224 0-94.208 41.984-94.208 94.208S75.776 222.208 128 222.208s94.208-41.984 94.208-94.208S180.224 33.792 128 33.792zm31.744 99.328c14.704 0 26.624 11.92 26.624 26.624 0 14.704-11.92 26.624-26.624 26.624-14.704 0-26.624-11.92-26.624-26.624 0-14.704 11.92-26.624 26.624-26.624zm-63.488 0c14.704 0 26.624 11.92 26.624 26.624 0 14.704-11.92 26.624-26.624 26.624-14.704 0-26.624-11.92-26.624-26.624 0-14.704 11.92-26.624 26.624-26.624zm63.488-63.488c14.704 0 26.624 11.92 26.624 26.624 0 14.704-11.92 26.624-26.624 26.624-14.704 0-26.624-11.92-26.624-26.624 0-14.704 11.92-26.624 26.624-26.624zm-63.488 0c14.704 0 26.624 11.92 26.624 26.624 0 14.704-11.92 26.624-26.624 26.624-14.704 0-26.624-11.92-26.624-26.624 0-14.704 11.92-26.624 26.624-26.624z'
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Twilio Voice](https://www.twilio.com/en-us/voice) ist eine leistungsstarke Cloud-Kommunikationsplattform, die es Unternehmen ermöglicht, Telefonate programmgesteuert über eine einfache API zu tätigen, zu empfangen und zu verwalten.
Twilio Voice bietet eine robuste API zum Erstellen anspruchsvoller Sprachanwendungen mit globaler Reichweite. Mit Abdeckung in über 100 Ländern, Carrier-Grade-Zuverlässigkeit und einer 99,95% Verfügbarkeits-SLA hat sich Twilio als Branchenführer im Bereich programmierbarer Sprachkommunikation etabliert.
Zu den wichtigsten Funktionen von Twilio Voice gehören:
- **Globales Sprachnetzwerk**: Weltweit Anrufe tätigen und empfangen mit lokalen Telefonnummern in mehreren Ländern
- **Programmierbare Anrufsteuerung**: Verwendung von TwiML zur Steuerung des Anrufablaufs, Aufzeichnung von Gesprächen, Erfassung von DTMF-Eingaben und Implementierung von IVR-Systemen
- **Erweiterte Funktionen**: Spracherkennung, Text-to-Speech, Anrufweiterleitung, Konferenzschaltung und Anrufbeantworter-Erkennung
- **Echtzeit-Analytik**: Überwachung von Anrufqualität, -dauer, -kosten und Optimierung Ihrer Sprachanwendungen
In Sim ermöglicht die Twilio Voice-Integration Ihren Agenten, diese leistungsstarken Sprachfunktionen als Teil ihrer Workflows zu nutzen. Dies schafft Möglichkeiten für anspruchsvolle Kundenbindungsszenarien wie Terminerinnerungen, Verifizierungsanrufe, automatisierte Support-Hotlines und interaktive Sprachdialogsysteme. Die Integration überbrückt die Lücke zwischen Ihren KI-Workflows und Sprachkommunikationskanälen und ermöglicht es Ihren Agenten, zeitnahe, relevante Informationen direkt über Telefonanrufe zu liefern. Durch die Verbindung von Sim mit Twilio Voice können Sie intelligente Agenten erstellen, die Kunden über ihren bevorzugten Kommunikationskanal ansprechen, die Benutzererfahrung verbessern und gleichzeitig routinemäßige Anrufaufgaben automatisieren.
{/* MANUAL-CONTENT-END */}
## Gebrauchsanweisung
Integrieren Sie Twilio Voice in den Workflow. Tätigen Sie ausgehende Anrufe und rufen Sie Anrufaufzeichnungen ab.
## Tools
### `twilio_voice_make_call`
Tätigen Sie einen ausgehenden Anruf mit der Twilio Voice API.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `to` | string | Ja | Anzurufende Telefonnummer \(E.164-Format, z.B. +14155551234\) |
| `from` | string | Ja | Ihre Twilio-Telefonnummer, von der aus angerufen wird \(E.164-Format\) |
| `url` | string | Nein | URL, die TwiML-Anweisungen für den Anruf zurückgibt |
| `twiml` | string | Nein | TwiML-Anweisungen zur Ausführung \(Alternative zur URL\). Verwenden Sie eckige Klammern anstelle von spitzen Klammern, z.B. \[Response\]\[Say\]Hello\[/Say\]\[/Response\] |
| `statusCallback` | string | Nein | Webhook-URL für Anrufstatus-Updates |
| `statusCallbackMethod` | string | Nein | HTTP-Methode für Status-Callback \(GET oder POST\) |
| `accountSid` | string | Ja | Twilio Account SID |
| `authToken` | string | Ja | Twilio Auth Token |
| `record` | boolean | Nein | Ob der Anruf aufgezeichnet werden soll |
| `recordingStatusCallback` | string | Nein | Webhook-URL für Aufzeichnungsstatus-Updates |
| `timeout` | number | Nein | Wartezeit auf Antwort bevor aufgegeben wird \(Sekunden, Standard: 60\) |
| `machineDetection` | string | Nein | Anrufbeantworter-Erkennung: Enable oder DetectMessageEnd |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob der Anruf erfolgreich eingeleitet wurde |
| `callSid` | string | Eindeutige Kennung für den Anruf |
| `status` | string | Anrufstatus \(queued, ringing, in-progress, completed, usw.\) |
| `direction` | string | Anrufrichtung \(outbound-api\) |
| `from` | string | Telefonnummer, von der aus angerufen wird |
| `to` | string | Telefonnummer, die angerufen wird |
| `duration` | number | Anrufdauer in Sekunden |
| `price` | string | Kosten des Anrufs |
| `priceUnit` | string | Währung des Preises |
| `error` | string | Fehlermeldung, wenn der Anruf fehlgeschlagen ist |
### `twilio_voice_list_calls`
Rufen Sie eine Liste der Anrufe ab, die zu und von einem Konto getätigt wurden.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `accountSid` | string | Ja | Twilio Account SID |
| `authToken` | string | Ja | Twilio Auth Token |
| `to` | string | Nein | Nach Anrufen zu dieser Telefonnummer filtern |
| `from` | string | Nein | Nach Anrufen von dieser Telefonnummer filtern |
| `status` | string | Nein | Nach Anrufstatus filtern \(queued, ringing, in-progress, completed, etc.\) |
| `startTimeAfter` | string | Nein | Anrufe filtern, die an oder nach diesem Datum begonnen haben \(JJJJ-MM-TT\) |
| `startTimeBefore` | string | Nein | Anrufe filtern, die an oder vor diesem Datum begonnen haben \(JJJJ-MM-TT\) |
| `pageSize` | number | Nein | Anzahl der zurückzugebenden Datensätze \(max. 1000, Standard 50\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Anrufe erfolgreich abgerufen wurden |
| `calls` | array | Array von Anrufobjekten |
| `total` | number | Gesamtanzahl der zurückgegebenen Anrufe |
| `page` | number | Aktuelle Seitennummer |
| `pageSize` | number | Anzahl der Anrufe pro Seite |
| `error` | string | Fehlermeldung, wenn der Abruf fehlgeschlagen ist |
### `twilio_voice_get_recording`
Rufen Sie Anrufaufzeichnungsinformationen und Transkription ab (falls über TwiML aktiviert).
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `recordingSid` | string | Ja | Abzurufende Recording SID |
| `accountSid` | string | Ja | Twilio Account SID |
| `authToken` | string | Ja | Twilio Auth Token |
#### Output
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Aufnahme erfolgreich abgerufen wurde |
| `recordingSid` | string | Eindeutige Kennung für die Aufnahme |
| `callSid` | string | Call SID, zu der diese Aufnahme gehört |
| `duration` | number | Dauer der Aufnahme in Sekunden |
| `status` | string | Aufnahmestatus \(completed, processing, usw.\) |
| `channels` | number | Anzahl der Kanäle \(1 für Mono, 2 für Dual\) |
| `source` | string | Wie die Aufnahme erstellt wurde |
| `mediaUrl` | string | URL zum Herunterladen der Aufnahmedatei |
| `price` | string | Kosten der Aufnahme |
| `priceUnit` | string | Währung des Preises |
| `uri` | string | Relativer URI der Aufnahmeressource |
| `transcriptionText` | string | Transkribierter Text aus der Aufnahme \(falls verfügbar\) |
| `transcriptionStatus` | string | Transkriptionsstatus \(completed, in-progress, failed\) |
| `transcriptionPrice` | string | Kosten der Transkription |
| `transcriptionPriceUnit` | string | Währung des Transkriptionspreises |
| `error` | string | Fehlermeldung, falls der Abruf fehlgeschlagen ist |
## Hinweise
- Kategorie: `tools`
- Typ: `twilio_voice`

View File

@@ -46,7 +46,7 @@ In Sim ermöglicht die Typeform-Integration Ihren Agenten, programmatisch mit Ih
## Nutzungsanleitung
Integrieren Sie Typeform in den Workflow. Kann Antworten abrufen, Dateien herunterladen und Formulareinblicke gewinnen. API-Schlüssel erforderlich.
Integriert Typeform in den Workflow. Kann Antworten abrufen, Dateien herunterladen und Formularstatistiken erhalten. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn ein Formular abgesendet wird. Erfordert API-Schlüssel.
## Tools
@@ -69,9 +69,25 @@ Formularantworten von Typeform abrufen
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `total_items` | number | Gesamtanzahl der Antworten |
| `page_count` | number | Gesamtanzahl der Seiten |
| `items` | json | Antwortelemente |
| `total_items` | number | Gesamtzahl der Antworten/Formulare |
| `page_count` | number | Gesamtseitenanzahl |
| `items` | json | Array der Antwort-/Formularelemente |
| `id` | string | Eindeutige Formular-ID |
| `title` | string | Formulartitel |
| `type` | string | Formulartyp |
| `created_at` | string | ISO-Zeitstempel der Formularerstellung |
| `last_updated_at` | string | ISO-Zeitstempel der letzten Aktualisierung |
| `settings` | json | Formulareinstellungsobjekt |
| `theme` | json | Theme-Konfigurationsobjekt |
| `workspace` | json | Workspace-Informationen |
| `fields` | json | Array der Formularfelder/Fragen |
| `thankyou_screens` | json | Array der Dankesbildschirme |
| `_links` | json | Links zu verwandten Ressourcen |
| `deleted` | boolean | Ob das Formular erfolgreich gelöscht wurde |
| `message` | string | Löschbestätigungsnachricht |
| `fileUrl` | string | URL der heruntergeladenen Datei |
| `contentType` | string | Datei-Content-Type |
| `filename` | string | Dateiname |
### `typeform_files`
@@ -113,6 +129,129 @@ Einblicke und Analysen für Typeform-Formulare abrufen
| --------- | ---- | ----------- |
| `fields` | array | Anzahl der Benutzer, die bei diesem Feld abgebrochen haben |
### `typeform_list_forms`
Eine Liste aller Formulare in Ihrem Typeform-Konto abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `search` | string | Nein | Suchanfrage zum Filtern von Formularen nach Titel |
| `page` | number | Nein | Seitennummer \(Standard: 1\) |
| `pageSize` | number | Nein | Anzahl der Formulare pro Seite \(Standard: 10, max: 200\) |
| `workspaceId` | string | Nein | Formulare nach Workspace-ID filtern |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `total_items` | number | Gesamtanzahl der Formulare im Konto |
| `page_count` | number | Gesamtanzahl der verfügbaren Seiten |
| `items` | array | Array von Formularobjekten |
### `typeform_get_form`
Vollständige Details und Struktur eines bestimmten Formulars abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `formId` | string | Ja | Eindeutige Formular-ID |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `id` | string | Eindeutige Formular-ID |
| `title` | string | Formulartitel |
| `type` | string | Formulartyp \(form, quiz, etc.\) |
| `created_at` | string | ISO-Zeitstempel der Formularerstellung |
| `last_updated_at` | string | ISO-Zeitstempel der letzten Aktualisierung |
| `settings` | object | Formulareinstellungen einschließlich Sprache, Fortschrittsbalken, etc. |
| `theme` | object | Theme-Konfiguration mit Farben, Schriftarten und Design-Einstellungen |
| `workspace` | object | Workspace-Informationen |
### `typeform_create_form`
Ein neues Formular mit Feldern und Einstellungen erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `title` | string | Ja | Formulartitel |
| `type` | string | Nein | Formulartyp \(Standard: "form"\). Optionen: "form", "quiz" |
| `workspaceId` | string | Nein | Workspace-ID, in der das Formular erstellt werden soll |
| `fields` | json | Nein | Array von Feldobjekten, die die Formularstruktur definieren. Jedes Feld benötigt: Typ, Titel und optionale Eigenschaften/Validierungen |
| `settings` | json | Nein | Formulareinstellungsobjekt \(Sprache, Fortschrittsbalken, etc.\) |
| `themeId` | string | Nein | Theme-ID, die auf das Formular angewendet werden soll |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `id` | string | Eindeutige Kennung des erstellten Formulars |
| `title` | string | Formulartitel |
| `type` | string | Formulartyp |
| `created_at` | string | ISO-Zeitstempel der Formularerstellung |
| `last_updated_at` | string | ISO-Zeitstempel der letzten Aktualisierung |
| `settings` | object | Formulareinstellungen |
| `theme` | object | Angewandte Theme-Konfiguration |
| `workspace` | object | Workspace-Informationen |
| `fields` | array | Array der erstellten Formularfelder |
| `_links` | object | Links zu verwandten Ressourcen |
### `typeform_update_form`
Ein bestehendes Formular mit JSON Patch-Operationen aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `formId` | string | Ja | Eindeutige Kennung des zu aktualisierenden Formulars |
| `operations` | json | Ja | Array von JSON Patch-Operationen \(RFC 6902\). Jede Operation benötigt: op \(add/remove/replace\), path und value \(für add/replace\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `id` | string | Eindeutige Kennung des aktualisierten Formulars |
| `title` | string | Formulartitel |
| `type` | string | Formulartyp |
| `created_at` | string | ISO-Zeitstempel der Formularerstellung |
| `last_updated_at` | string | ISO-Zeitstempel der letzten Aktualisierung |
| `settings` | object | Formulareinstellungen |
| `theme` | object | Theme-Konfiguration |
| `workspace` | object | Workspace-Informationen |
| `fields` | array | Array der Formularfelder |
| `thankyou_screens` | array | Array der Dankesbildschirme |
| `_links` | object | Links zu verwandten Ressourcen |
### `typeform_delete_form`
Ein Formular und alle seine Antworten dauerhaft löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | Typeform persönliches Zugriffstoken |
| `formId` | string | Ja | Eindeutige Kennung des zu löschenden Formulars |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `deleted` | boolean | Ob das Formular erfolgreich gelöscht wurde |
| `message` | string | Löschbestätigungsnachricht |
## Hinweise
- Kategorie: `tools`

View File

@@ -59,8 +59,9 @@ Verarbeiten und analysieren Sie Bilder mit fortschrittlichen Vision-Modellen. F
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Ja | API-Schlüssel für den ausgewählten Modellanbieter |
| `imageUrl` | string | Ja | Öffentlich zugängliche Bild-URL |
| `model` | string | Nein | Zu verwendendes Vision-Modell \(gpt-4o, claude-3-opus-20240229, etc\) |
| `imageUrl` | string | Nein | Öffentlich zugängliche Bild-URL |
| `imageFile` | file | Nein | Zu analysierende Bilddatei |
| `model` | string | Nein | Zu verwendendes Vision-Modell \(gpt-4o, claude-3-opus-20240229, usw.\) |
| `prompt` | string | Nein | Benutzerdefinierte Eingabeaufforderung für die Bildanalyse |
#### Ausgabe

View File

@@ -0,0 +1,145 @@
---
title: Webflow
description: Webflow CMS-Sammlungen verwalten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="webflow"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
viewBox='0 0 1080 674'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M1080 0L735.386 673.684H411.695L555.916 394.481H549.445C430.464 548.934 252.942 650.61 -0.000488281 673.684V398.344C-0.000488281 398.344 161.813 388.787 256.938 288.776H-0.000488281V0.0053214H288.771V237.515L295.252 237.489L413.254 0.0053214H631.644V236.009L638.126 235.999L760.555 0H1080Z'
fill='#146EF5'
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Webflow](https://webflow.com/) ist eine leistungsstarke visuelle Webdesign-Plattform, mit der Sie responsive Websites ohne Programmierung erstellen können. Sie kombiniert eine visuelle Design-Oberfläche mit einem robusten CMS (Content Management System), das es Ihnen ermöglicht, dynamische Inhalte für Ihre Websites zu erstellen, zu verwalten und zu veröffentlichen.
Mit Webflow können Sie:
- **Visuell gestalten**: Erstellen Sie benutzerdefinierte Websites mit einem visuellen Editor, der sauberen, semantischen HTML/CSS-Code generiert
- **Inhalte dynamisch verwalten**: Nutzen Sie das CMS, um Sammlungen strukturierter Inhalte wie Blogbeiträge, Produkte, Teammitglieder oder beliebige benutzerdefinierte Daten zu erstellen
- **Sofort veröffentlichen**: Stellen Sie Ihre Websites auf Webflows Hosting bereit oder exportieren Sie den Code für benutzerdefiniertes Hosting
- **Responsive Designs erstellen**: Bauen Sie Websites, die nahtlos auf Desktop, Tablet und Mobilgeräten funktionieren
- **Sammlungen anpassen**: Definieren Sie benutzerdefinierte Felder und Datenstrukturen für Ihre Inhaltstypen
- **Inhaltsaktualisierungen automatisieren**: Verwalten Sie Ihre CMS-Inhalte programmgesteuert über APIs
In Sim ermöglicht die Webflow-Integration Ihren Agenten, nahtlos mit Ihren Webflow-CMS-Sammlungen über API-Authentifizierung zu interagieren. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das automatische Erstellen von Blogbeiträgen aus KI-generierten Inhalten, das Aktualisieren von Produktinformationen, das Verwalten von Teammitgliederprofilen und das Abrufen von CMS-Elementen für die dynamische Inhaltsgenerierung. Ihre Agenten können vorhandene Elemente auflisten, um Ihre Inhalte zu durchsuchen, bestimmte Elemente nach ID abrufen, neue Einträge erstellen, um frische Inhalte hinzuzufügen, bestehende Elemente aktualisieren, um Informationen aktuell zu halten, und veraltete Inhalte löschen. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und Ihrem Webflow-CMS und ermöglicht automatisierte Inhaltsverwaltung, dynamische Website-Aktualisierungen und optimierte Inhalts-Workflows, die Ihre Websites ohne manuelles Eingreifen frisch und aktuell halten.
{/* MANUAL-CONTENT-END */}
## Gebrauchsanweisung
Integriert Webflow CMS in den Workflow. Kann Elemente in Webflow CMS-Sammlungen erstellen, abrufen, auflisten, aktualisieren oder löschen. Verwalten Sie Ihre Webflow-Inhalte programmatisch. Kann im Trigger-Modus verwendet werden, um Workflows auszulösen, wenn sich Sammlungselemente ändern oder Formulare übermittelt werden.
## Tools
### `webflow_list_items`
Alle Elemente aus einer Webflow CMS-Sammlung auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `collectionId` | string | Ja | ID der Sammlung |
| `offset` | number | Nein | Offset für Paginierung \(optional\) |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Elemente \(optional, Standard: 100\) |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `items` | json | Array von Sammlungselementen |
| `metadata` | json | Metadaten über die Abfrage |
### `webflow_get_item`
Ein einzelnes Element aus einer Webflow CMS-Sammlung abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `collectionId` | string | Ja | ID der Sammlung |
| `itemId` | string | Ja | ID des abzurufenden Elements |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `item` | json | Das abgerufene Elementobjekt |
| `metadata` | json | Metadaten über das abgerufene Element |
### `webflow_create_item`
Ein neues Element in einer Webflow CMS-Sammlung erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `collectionId` | string | Ja | ID der Sammlung |
| `fieldData` | json | Ja | Felddaten für das neue Element als JSON-Objekt. Die Schlüssel sollten mit den Feldnamen der Sammlung übereinstimmen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `item` | json | Das erstellte Element-Objekt |
| `metadata` | json | Metadaten über das erstellte Element |
### `webflow_update_item`
Ein vorhandenes Element in einer Webflow CMS-Sammlung aktualisieren
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `collectionId` | string | Ja | ID der Sammlung |
| `itemId` | string | Ja | ID des zu aktualisierenden Elements |
| `fieldData` | json | Ja | Zu aktualisierende Felddaten als JSON-Objekt. Nur Felder einschließen, die geändert werden sollen. |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `item` | json | Das aktualisierte Element-Objekt |
| `metadata` | json | Metadaten über das aktualisierte Element |
### `webflow_delete_item`
Ein Element aus einer Webflow CMS-Sammlung löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `collectionId` | string | Ja | ID der Sammlung |
| `itemId` | string | Ja | ID des zu löschenden Elements |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `success` | boolean | Ob die Löschung erfolgreich war |
| `metadata` | json | Metadaten über die Löschung |
## Hinweise
- Kategorie: `tools`
- Typ: `webflow`

View File

@@ -39,21 +39,32 @@ In Sim ermöglicht die YouTube-Integration Ihren Agenten, YouTube-Inhalte progra
## Gebrauchsanweisung
Integriere YouTube in den Workflow. Kann nach Videos suchen, Videodetails abrufen, Kanalinformationen abrufen, Playlist-Elemente abrufen und Videokommentare abrufen.
Integrieren Sie YouTube in den Workflow. Kann Videos suchen, Videodetails abrufen, Kanalinformationen abrufen, alle Videos eines Kanals abrufen, Kanal-Playlists abrufen, Playlist-Elemente abrufen, verwandte Videos finden und Videokommentare abrufen.
## Tools
### `youtube_search`
Suche nach Videos auf YouTube mit der YouTube Data API.
Suchen Sie nach Videos auf YouTube mit der YouTube Data API. Unterstützt erweiterte Filterung nach Kanal, Datumsbereich, Dauer, Kategorie, Qualität, Untertiteln und mehr.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `query` | string | Ja | Suchanfrage für YouTube-Videos |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos (1-50) |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
| `channelId` | string | Nein | Filtert Ergebnisse nach einer bestimmten YouTube-Kanal-ID |
| `publishedAfter` | string | Nein | Nur Videos zurückgeben, die nach diesem Datum veröffentlicht wurden (RFC 3339-Format: "2024-01-01T00:00:00Z") |
| `publishedBefore` | string | Nein | Nur Videos zurückgeben, die vor diesem Datum veröffentlicht wurden (RFC 3339-Format: "2024-01-01T00:00:00Z") |
| `videoDuration` | string | Nein | Nach Videolänge filtern: "short" (weniger als 4 Minuten), "medium" (4-20 Minuten), "long" (mehr als 20 Minuten), "any" |
| `order` | string | Nein | Ergebnisse sortieren nach: "date", "rating", "relevance" (Standard), "title", "videoCount", "viewCount" |
| `videoCategoryId` | string | Nein | Nach YouTube-Kategorie-ID filtern (z.B. "10" für Musik, "20" für Gaming) |
| `videoDefinition` | string | Nein | Nach Videoqualität filtern: "high" (HD), "standard", "any" |
| `videoCaption` | string | Nein | Nach Untertitelverfügbarkeit filtern: "closedCaption" (hat Untertitel), "none" (keine Untertitel), "any" |
| `regionCode` | string | Nein | Ergebnisse zurückgeben, die für eine bestimmte Region relevant sind (ISO 3166-1 alpha-2 Ländercode, z.B. "US", "GB") |
| `relevanceLanguage` | string | Nein | Ergebnisse zurückgeben, die für eine Sprache am relevantesten sind (ISO 639-1 Code, z.B. "en", "es") |
| `safeSearch` | string | Nein | Inhaltsfilterungsstufe: "moderate" (Standard), "none", "strict" |
#### Ausgabe
@@ -115,6 +126,45 @@ Erhalte detaillierte Informationen über einen YouTube-Kanal.
| `thumbnail` | string | URL des Kanal-Thumbnails |
| `customUrl` | string | Benutzerdefinierte Kanal-URL |
### `youtube_channel_videos`
Alle Videos von einem bestimmten YouTube-Kanal abrufen, mit Sortieroptionen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `channelId` | string | Ja | YouTube-Kanal-ID, von der Videos abgerufen werden sollen |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos \(1-50\) |
| `order` | string | Nein | Sortierreihenfolge: "date" \(neueste zuerst\), "rating", "relevance", "title", "viewCount" |
| `pageToken` | string | Nein | Seitentoken für Paginierung |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `items` | array | Array von Videos des Kanals |
### `youtube_channel_playlists`
Alle Playlists von einem bestimmten YouTube-Kanal abrufen.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `channelId` | string | Ja | YouTube-Kanal-ID, von der Playlists abgerufen werden sollen |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Playlists \(1-50\) |
| `pageToken` | string | Nein | Seitentoken für Paginierung |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `items` | array | Array von Playlists des Kanals |
### `youtube_playlist_items`
Videos aus einer YouTube-Playlist abrufen.
@@ -125,7 +175,7 @@ Videos aus einer YouTube-Playlist abrufen.
| --------- | ---- | -------- | ----------- |
| `playlistId` | string | Ja | YouTube-Playlist-ID |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Videos |
| `pageToken` | string | Nein | Page-Token für Paginierung |
| `pageToken` | string | Nein | Seitentoken für Paginierung |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
#### Ausgabe
@@ -134,9 +184,28 @@ Videos aus einer YouTube-Playlist abrufen.
| --------- | ---- | ----------- |
| `items` | array | Array von Videos in der Playlist |
### `youtube_related_videos`
Finde Videos, die mit einem bestimmten YouTube-Video verwandt sind.
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `videoId` | string | Ja | YouTube-Video-ID, für die verwandte Videos gefunden werden sollen |
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden verwandten Videos \(1-50\) |
| `pageToken` | string | Nein | Page-Token für Paginierung |
| `apiKey` | string | Ja | YouTube API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `items` | array | Array von verwandten Videos |
### `youtube_comments`
Kommentare von einem YouTube-Video abrufen.
Rufe Kommentare von einem YouTube-Video ab.
#### Eingabe

View File

@@ -0,0 +1,242 @@
---
title: Zep
description: Langzeitgedächtnis für KI-Agenten
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="zep"
color="#E8E8E8"
icon={true}
iconSvg={`<svg className="block-icon"
xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 233 196'
>
<path
d='m231.34,108.7l-1.48-1.55h-10.26l3.59-75.86-14.8-.45-2.77,49.31c-59.6-3.24-119.33-3.24-178.92-.02l-1.73-64.96-14.8.45,2.5,91.53H2.16l-1.41,1.47c-1.55,16.23-.66,32.68,2.26,48.89h10.83l.18,1.27c.67,19.34,16.1,34.68,35.9,34.68s44.86-.92,66.12-.92,46.56.92,65.95.92,35.19-15.29,35.9-34.61l.16-1.34h11.02c2.91-16.19,3.81-32.61,2.26-48.81Zm-158.23,58.01c-17.27,0-30.25-13.78-30.25-29.78s12.99-29.78,30.25-29.78,29.62,13.94,29.62,29.94-12.35,29.62-29.62,29.62Zm86.51,0c-17.27,0-30.25-13.78-30.25-29.78s12.99-29.78,30.25-29.78,29.62,13.94,29.62,29.94-12.35,29.62-29.62,29.62Z'
fill='#FF1493'
/>
<polygon
points='111.77 22.4 93.39 49.97 93.52 50.48 185.88 38.51 190.95 27.68 114.32 36.55 117.7 31.48 117.7 31.47 138.38 .49 138.25 0 47.67 11.6 42.85 22.27 118.34 12.61 111.77 22.4'
fill='#FF1493'
/>
<path
d='m72.97,121.47c-8.67,0-15.73,6.93-15.73,15.46s7.06,15.46,15.73,15.46,15.37-6.75,15.37-15.37-6.75-15.55-15.37-15.55Z'
fill='#FF1493'
/>
<path
d='m159.48,121.47c-8.67,0-15.73,6.93-15.73,15.46s7.06,15.46,15.73,15.46,15.37-6.75,15.37-15.37-6.75-15.55-15.37-15.55Z'
fill='#FF1493'
/>
</svg>`}
/>
## Nutzungsanleitung
Integriere Zep für Langzeitgedächtnisverwaltung. Erstelle Threads, füge Nachrichten hinzu, rufe Kontext mit KI-gestützten Zusammenfassungen und Faktenextraktion ab.
## Tools
### `zep_create_thread`
Starte einen neuen Konversations-Thread in Zep
#### Input
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Eindeutige Kennung für den Thread |
| `userId` | string | Ja | Benutzer-ID, die mit dem Thread verknüpft ist |
| `apiKey` | string | Ja | Dein Zep API-Schlüssel |
#### Output
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `threadId` | string | Die Thread-ID |
| `userId` | string | Die Benutzer-ID |
| `uuid` | string | Interne UUID |
| `createdAt` | string | Erstellungszeitstempel |
| `projectUuid` | string | Projekt-UUID |
### `zep_get_threads`
Liste alle Konversations-Threads auf
#### Input
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `pageSize` | number | Nein | Anzahl der Threads, die pro Seite abgerufen werden sollen |
| `pageNumber` | number | Nein | Seitennummer für Paginierung |
| `orderBy` | string | Nein | Feld, nach dem die Ergebnisse sortiert werden sollen \(created_at, updated_at, user_id, thread_id\) |
| `asc` | boolean | Nein | Sortierrichtung: true für aufsteigend, false für absteigend |
| `apiKey` | string | Ja | Dein Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `threads` | array | Array von Thread-Objekten |
| `responseCount` | number | Anzahl der Threads in dieser Antwort |
| `totalCount` | number | Gesamtanzahl der verfügbaren Threads |
### `zep_delete_thread`
Einen Konversations-Thread aus Zep löschen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Thread-ID zum Löschen |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `deleted` | boolean | Ob der Thread gelöscht wurde |
### `zep_get_context`
Benutzerkontext aus einem Thread mit Zusammenfassungs- oder Basismodus abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Thread-ID, aus der der Kontext abgerufen werden soll |
| `mode` | string | Nein | Kontextmodus: "summary" \(natürliche Sprache\) oder "basic" \(rohe Fakten\) |
| `minRating` | number | Nein | Mindestbewertung, nach der relevante Fakten gefiltert werden |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `context` | string | Der Kontextstring \(Zusammenfassung oder Basis\) |
| `facts` | array | Extrahierte Fakten |
| `entities` | array | Extrahierte Entitäten |
| `summary` | string | Konversationszusammenfassung |
### `zep_get_messages`
Nachrichten aus einem Thread abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Thread-ID, aus der Nachrichten abgerufen werden sollen |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Nachrichten |
| `cursor` | string | Nein | Cursor für Paginierung |
| `lastn` | number | Nein | Anzahl der neuesten Nachrichten, die zurückgegeben werden sollen \(überschreibt Limit und Cursor\) |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `messages` | array | Array von Nachrichtenobjekten |
| `rowCount` | number | Anzahl der Nachrichten in dieser Antwort |
| `totalCount` | number | Gesamtanzahl der Nachrichten im Thread |
### `zep_add_messages`
Nachrichten zu einem bestehenden Thread hinzufügen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `threadId` | string | Ja | Thread-ID, zu der Nachrichten hinzugefügt werden sollen |
| `messages` | json | Ja | Array von Nachrichtenobjekten mit Rolle und Inhalt |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `context` | string | Aktualisierter Kontext nach dem Hinzufügen von Nachrichten |
| `messageIds` | array | Array der hinzugefügten Nachrichten-UUIDs |
| `threadId` | string | Die Thread-ID |
### `zep_add_user`
Einen neuen Benutzer in Zep erstellen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `userId` | string | Ja | Eindeutige Kennung für den Benutzer |
| `email` | string | Nein | E-Mail-Adresse des Benutzers |
| `firstName` | string | Nein | Vorname des Benutzers |
| `lastName` | string | Nein | Nachname des Benutzers |
| `metadata` | json | Nein | Zusätzliche Metadaten als JSON-Objekt |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `userId` | string | Die Benutzer-ID |
| `email` | string | E-Mail des Benutzers |
| `firstName` | string | Vorname des Benutzers |
| `lastName` | string | Nachname des Benutzers |
| `uuid` | string | Interne UUID |
| `createdAt` | string | Erstellungszeitstempel |
| `metadata` | object | Benutzermetadaten |
### `zep_get_user`
Benutzerinformationen von Zep abrufen
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `userId` | string | Ja | Zu abzurufende Benutzer-ID |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `userId` | string | Die Benutzer-ID |
| `email` | string | E-Mail des Benutzers |
| `firstName` | string | Vorname des Benutzers |
| `lastName` | string | Nachname des Benutzers |
| `uuid` | string | Interne UUID |
| `createdAt` | string | Erstellungszeitstempel |
| `updatedAt` | string | Zeitstempel der letzten Aktualisierung |
| `metadata` | object | Benutzermetadaten |
### `zep_get_user_threads`
Alle Konversations-Threads für einen bestimmten Benutzer auflisten
#### Eingabe
| Parameter | Typ | Erforderlich | Beschreibung |
| --------- | ---- | -------- | ----------- |
| `userId` | string | Ja | Benutzer-ID, für die Threads abgerufen werden sollen |
| `limit` | number | Nein | Maximale Anzahl der zurückzugebenden Threads |
| `apiKey` | string | Ja | Ihr Zep API-Schlüssel |
#### Ausgabe
| Parameter | Typ | Beschreibung |
| --------- | ---- | ----------- |
| `threads` | array | Array von Thread-Objekten für diesen Benutzer |
| `userId` | string | Die Benutzer-ID |
## Hinweise
- Kategorie: `tools`
- Typ: `zep`

View File

@@ -1,187 +0,0 @@
---
title: API-Trigger
description: Starten Sie einen Workflow über eine authentifizierte HTTP-Anfrage
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der API-Trigger stellt Ihren Workflow als sicheren HTTP-Endpunkt bereit. Senden Sie JSON-Daten an den Endpunkt und Ihr Workflow verarbeitet diese sofort. API-Aufrufe werden immer gegen Ihre neueste Bereitstellung ausgeführt.
## Eingabeformat konfigurieren
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/api-trigger-light.png'
alt='API-Trigger Eingabeformat'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Fügen Sie für jeden Parameter ein Feld **Eingabeformat** hinzu. Die Ausgabeschlüssel zur Laufzeit spiegeln das Schema wider und sind auch unter `<api.input>` verfügbar.
Manuelle Ausführungen im Editor verwenden die Spalte `value`, damit Sie testen können, ohne eine Anfrage zu senden. Während der Ausführung füllt der Resolver sowohl `<api.userId>` als auch `<api.input.userId>` aus.
## Anfrage-Beispiel
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{"userId":"demo-user","maxTokens":1024}'
```
Erfolgreiche Antworten geben das serialisierte Ausführungsergebnis vom Executor zurück. Fehler zeigen Validierungs-, Authentifizierungs- oder Workflow-Fehler an.
## Streaming-Antworten
Aktivieren Sie Echtzeit-Streaming, um Workflow-Ausgaben zu erhalten, während sie zeichen-für-zeichen generiert werden. Dies ist nützlich, um KI-Antworten progressiv für Benutzer anzuzeigen.
### Anfrageparameter
Fügen Sie diese Parameter hinzu, um Streaming zu aktivieren:
- `stream` - Auf `true` setzen, um Server-Sent Events (SSE) Streaming zu aktivieren
- `selectedOutputs` - Array von Block-Ausgaben zum Streamen (z.B. `["agent1.content"]`)
### Block-Ausgabeformat
Verwenden Sie das `blockName.attribute` Format, um anzugeben, welche Block-Ausgaben gestreamt werden sollen:
- Format: `"blockName.attribute"` (z.B. Wenn Sie den Inhalt des Agent 1-Blocks streamen möchten, würden Sie `"agent1.content"` verwenden)
- Blocknamen sind nicht case-sensitive und Leerzeichen werden ignoriert
### Beispielanfrage
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{
"message": "Count to five",
"stream": true,
"selectedOutputs": ["agent1.content"]
}'
```
### Antwortformat
Streaming-Antworten verwenden das Server-Sent Events (SSE) Format:
```
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":"One"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", two"}
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", three"}
data: {"event":"done","success":true,"output":{},"metadata":{"duration":610}}
data: [DONE]
```
Jedes Ereignis enthält:
- **Streaming-Chunks**: `{"blockId": "...", "chunk": "text"}` - Echtzeit-Text während er generiert wird
- **Abschlussereignis**: `{"event": "done", ...}` - Ausführungsmetadaten und vollständige Ergebnisse
- **Terminator**: `[DONE]` - Signalisiert das Ende des Streams
### Streaming mehrerer Blöcke
Wenn `selectedOutputs` mehrere Blöcke enthält, zeigt jeder Chunk an, welcher Block ihn erzeugt hat:
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{
"message": "Process this request",
"stream": true,
"selectedOutputs": ["agent1.content", "agent2.content"]
}'
```
Das Feld `blockId` in jedem Chunk ermöglicht es Ihnen, die Ausgabe zum richtigen UI-Element zu leiten:
```
data: {"blockId":"agent1-uuid","chunk":"Processing..."}
data: {"blockId":"agent2-uuid","chunk":"Analyzing..."}
data: {"blockId":"agent1-uuid","chunk":" complete"}
```
## Ausgabereferenz
| Referenz | Beschreibung |
|-----------|-------------|
| `<api.field>` | Im Eingabeformat definiertes Feld |
| `<api.input>` | Gesamter strukturierter Anfragekörper |
Wenn kein Eingabeformat definiert ist, stellt der Executor das rohe JSON nur unter `<api.input>` zur Verfügung.
<Callout type="warning">
Ein Workflow kann nur einen API-Trigger enthalten. Veröffentlichen Sie nach Änderungen eine neue Bereitstellung, damit der Endpunkt aktuell bleibt.
</Callout>
### Datei-Upload-Format
Die API akzeptiert Dateien in zwei Formaten:
**1. Base64-kodierte Dateien** (empfohlen für SDKs):
```json
{
"documents": [{
"type": "file",
"data": "data:application/pdf;base64,JVBERi0xLjQK...",
"name": "document.pdf",
"mime": "application/pdf"
}]
}
```
- Maximale Dateigröße: 20MB pro Datei
- Dateien werden in den Cloud-Speicher hochgeladen und in UserFile-Objekte mit allen Eigenschaften umgewandelt
**2. Direkte URL-Referenzen**:
```json
{
"documents": [{
"type": "url",
"data": "https://example.com/document.pdf",
"name": "document.pdf",
"mime": "application/pdf"
}]
}
```
- Die Datei wird nicht hochgeladen, die URL wird direkt weitergegeben
- Nützlich für die Referenzierung bestehender Dateien
### Dateieigenschaften
Für Dateien können alle Eigenschaften abgerufen werden:
| Eigenschaft | Beschreibung | Typ |
|----------|-------------|------|
| `<api.fieldName[0].url>` | Signierte Download-URL | string |
| `<api.fieldName[0].name>` | Ursprünglicher Dateiname | string |
| `<api.fieldName[0].size>` | Dateigröße in Bytes | number |
| `<api.fieldName[0].type>` | MIME-Typ | string |
| `<api.fieldName[0].uploadedAt>` | Upload-Zeitstempel (ISO 8601) | string |
| `<api.fieldName[0].expiresAt>` | URL-Ablaufzeitstempel (ISO 8601) | string |
Für URL-referenzierte Dateien sind dieselben Eigenschaften verfügbar, außer `uploadedAt` und `expiresAt`, da die Datei nicht in unseren Speicher hochgeladen wird.
Wenn kein Eingabeformat definiert ist, stellt der Executor das rohe JSON nur unter `<api.input>` zur Verfügung.
<Callout type="warning">
Ein Workflow kann nur einen API-Trigger enthalten. Veröffentlichen Sie nach Änderungen eine neue Bereitstellung, damit der Endpunkt aktuell bleibt.
</Callout>

View File

@@ -1,51 +0,0 @@
---
title: Chat-Auslöser
description: Starten Sie einen Workflow aus einer Chat-Bereitstellung
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der Chat-Auslöser erstellt eine Konversationsschnittstelle für Ihren Workflow. Stellen Sie Ihren Workflow als Chat bereit, und Benutzer können über eine teilbare URL damit interagieren. Jede Nachricht startet eine neue Workflow-Ausführung mit Ihrer neuesten Bereitstellung.
## Laufzeit-Ausgaben
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/chat-trigger-light.png'
alt='Chat-Bereitstellungskonversation'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Der Auslöser schreibt drei Felder, auf die nachfolgende Blöcke verweisen können:
| Referenz | Beschreibung |
|-----------|-------------|
| `<chat.input>` | Neueste Benutzernachricht |
| `<chat.conversationId>` | Konversations-Thread-ID |
| `<chat.files>` | Optionale hochgeladene Dateien |
Dateien enthalten `name`, `mimeType` und einen signierten Download `url`.
## Nutzungshinweise
1. Fügen Sie einen Chat-Auslöser-Block pro Workflow hinzu.
2. Stellen Sie den Workflow im Chat-Modus bereit.
3. Teilen Sie den Bereitstellungslink jede Antwort verwendet die Konversations-ID wieder, sodass der Workflow den Kontext beibehalten kann.
<Callout type="info">
Der Builder blockiert mehrere Chat-Auslöser-Blöcke im selben Workflow.
</Callout>
1. Fügen Sie einen Chat-Trigger-Block pro Workflow hinzu.
2. Stellen Sie den Workflow im Chat-Modus bereit.
3. Teilen Sie den Bereitstellungslink jede Antwort verwendet die Konversations-ID wieder, damit der Workflow den Kontext beibehalten kann.
<Callout type="info">
Der Builder blockiert mehrere Chat-Trigger-Blöcke im selben Workflow.
</Callout>

View File

@@ -1,52 +1,52 @@
---
title: Auslöser
description: Grundlegende Möglichkeiten, Sim-Workflows zu starten
title: Übersicht
description: Trigger sind die grundlegenden Möglichkeiten, um Sim-Workflows zu starten
---
import { Card, Cards } from 'fumadocs-ui/components/card'
## Kern-Auslöser
Wähle einen Auslöser pro Workflow, um zu definieren, wie er startet:
Verwende den Start-Block für alles, was vom Editor, von Deploy-to-API oder von Deploy-to-Chat-Erfahrungen ausgeht. Andere Trigger bleiben für ereignisgesteuerte Workflows verfügbar:
<Cards>
<Card title="API" href="/triggers/api">
HTTP-Endpunkt, der JSON-Bodies in Workflow-Eingaben umwandelt
</Card>
<Card title="Chat" href="/triggers/chat">
Bereitgestellte Chat-Oberfläche mit Streaming-Antworten
</Card>
<Card title="Eingabeformular" href="/triggers/input-form">
Typisierte manuelle Eingabe für Editor-Ausführungen und Unterworkflows
</Card>
<Card title="Manuell" href="/triggers/manual">
Bedarfsgesteuerte Ausführungen ohne zusätzliche Daten
</Card>
<Card title="Zeitplan" href="/triggers/schedule">
Cron- oder intervallbasierte Ausführung
<Card title="Start" href="/triggers/start">
Einheitlicher Einstiegspunkt, der Editor-Ausführungen, API-Bereitstellungen und Chat-Bereitstellungen unterstützt
</Card>
<Card title="Webhook" href="/triggers/webhook">
Externe Webhook-Payloads empfangen
</Card>
<Card title="Schedule" href="/triggers/schedule">
Cron- oder intervallbasierte Ausführung
</Card>
</Cards>
## Schneller Vergleich
| Auslöser | Startbedingung |
|---------|-----------------|
| **API** | Authentifizierter HTTP POST |
| **Chat** | Chat-Deployment-Nachricht |
| **Eingabeformular** | Bei manueller Übermittlung im Editor oder übergeordneten Workflow |
| **Manuell** | Ausführen-Schaltfläche im Editor |
| **Zeitplan** | Timer, der im Zeitplan-Modal verwaltet wird |
| **Webhook** | Bei eingehendem HTTP-Request |
| **Start** | Editor läuft, Deploy-to-API-Anfragen oder Chat-Nachrichten |
| **Schedule** | Timer, der im Zeitplanblock verwaltet wird |
| **Webhook** | Bei eingehender HTTP-Anfrage |
## Verwendung von Auslösern
> Der Start-Block stellt immer `input`, `conversationId` und `files`Felder bereit. Füge benutzerdefinierte Felder zum Eingabeformat für zusätzliche strukturierte Daten hinzu.
1. Platziere den Auslöser-Block im Startslot.
2. Konfiguriere alle erforderlichen Schemas oder Authentifizierungen.
## Verwendung von Triggern
1. Platziere den Start-Block im Startslot (oder einen alternativen Trigger wie Webhook/Schedule).
2. Konfiguriere alle erforderlichen Schema- oder Authentifizierungseinstellungen.
3. Verbinde den Block mit dem Rest des Workflows.
> Deployments unterstützen jeden Auslöser. Aktualisiere den Workflow, stelle ihn neu bereit, und alle Auslöser-Einstiegspunkte übernehmen den neuen Snapshot. Erfahre mehr unter [Ausführung → Deployment-Snapshots](/execution).
> Bereitstellungen unterstützen jeden Trigger. Aktualisiere den Workflow, stelle ihn erneut bereit, und alle Trigger-Einstiegspunkte übernehmen den neuen Snapshot. Erfahre mehr unter [Ausführung → Bereitstellungs-Snapshots](/execution).
Legacy-Starter-Blöcke bleiben für bestehende Flows erhalten, erscheinen aber nicht mehr in neuen Builds.
## Manuelle Ausführungspriorität
Wenn Sie im Editor auf **Ausführen** klicken, wählt Sim automatisch aus, welcher Auslöser basierend auf der folgenden Prioritätsreihenfolge ausgeführt wird:
1. **Start-Block** (höchste Priorität)
2. **Zeitplan-Auslöser**
3. **Externe Auslöser** (Webhooks, Integrationen wie Slack, Gmail, Airtable usw.)
Wenn Ihr Workflow mehrere Auslöser hat, wird der Auslöser mit der höchsten Priorität ausgeführt. Wenn Sie beispielsweise sowohl einen Start-Block als auch einen Webhook-Auslöser haben, wird durch Klicken auf Ausführen der Start-Block ausgeführt.
**Externe Auslöser mit Mock-Payloads**: Wenn externe Auslöser (Webhooks und Integrationen) manuell ausgeführt werden, generiert Sim automatisch Mock-Payloads basierend auf der erwarteten Datenstruktur des Auslösers. Dies stellt sicher, dass nachgelagerte Blöcke während des Tests Variablen korrekt auflösen können.

View File

@@ -1,52 +0,0 @@
---
title: Eingabeformular-Trigger
description: Manueller Trigger mit einem strukturierten Eingabeschema
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Verwenden Sie einen Eingabeformular-Trigger, wenn ein Workflow vom Editor aus mit typisierten Feldern gestartet werden soll. Das Ausführungspanel zeigt genau die Felder an, die Sie definieren, sodass der Workflow immer saubere Daten erhält.
## Was Sie definieren
Fügen Sie Felder im Eingabeformat-Builder hinzu (Text, Zahl, Boolean, JSON usw.). Für jedes Feld:
- Der Wert erscheint als `<blockName.field>` im Workflow.
- Die vollständige Nutzlast wird zur Vereinfachung unter `<blockName.input>` gespiegelt.
Wenn Sie das Formular leer lassen, hat der Trigger keine Ausgaben.
## Manuelle Ausführungen
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/input-form-panel-light.png'
alt='Eingabeformular-Ausführungspanel'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Wenn Sie im Editor auf Ausführen drücken, rendert das Panel das Formular. Übermittelte Werte fließen direkt in die Trigger-Ausgabe ein, sodass nachgelagerte Blöcke darauf verweisen können, ohne zusätzliches Parsing. Zahlen werden in Zahlentypen umgewandelt, Booleans werden zu true/false, und JSON-Felder werden geparst, bevor der Workflow sie verarbeitet.
## Untergeordnete Workflows
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/workflow-input-mapping-light.png'
alt='Workflow-Eingabezuordnung'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Eingabeformular-Trigger steuern auch den Workflow-Block. Wenn Sie einen untergeordneten Workflow einbetten, zeigt der Zuordnungsschritt die Formularfelder des untergeordneten Workflows an, sodass Sie Variablen aus dem übergeordneten Workflow verbinden können. Was auch immer Sie zuordnen, wird zur Eingabeformular-Übermittlung des untergeordneten Workflows.
<Callout>
Benötigen Sie eine schnelle Ausführungsschaltfläche ohne Felder? Verwenden Sie einen manuellen Trigger. Wählen Sie Eingabeformular, wenn Sie Validierung und eine vorhersehbare Struktur wünschen.
</Callout>

View File

@@ -1,41 +0,0 @@
---
title: Manueller Auslöser
description: Führen Sie einen Workflow auf Anforderung ohne Eingaben aus
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der manuelle Auslöser fügt einen einfachen Ausführen-Button am Anfang Ihres Workflows hinzu. Verwenden Sie ihn, wenn Sie den Workflow sofort ausführen möchten, ohne zusätzliche Daten zu sammeln.
## Funktionsweise
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/manual-run-light.png'
alt='Ausführen-Button für manuellen Auslöser'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
- Startet den Workflow mit dem aktiven Deployment-Snapshot
- Sendet keine Nutzlast nachgelagerte Blöcke sehen nur, was sie bereits konfiguriert haben
- Perfekt für schnelle Plausibilitätsprüfungen, Smoke-Tests oder Abläufe, die nur auf internen Variablen basieren
## Anwendungsfälle
- Starten Sie einen Workflow nach der Veröffentlichung eines neuen Deployments, um zu bestätigen, dass alles noch funktioniert
- Führen Sie Wartungsaufgaben aus, die keine externe Eingabe erfordern
- Lösen Sie untergeordnete Workflows aus, die nur Status- oder Umgebungsvariablen lesen
## Vergleich mit Eingabeformular
Benötigen Sie strukturierte Werte oder Typvalidierung zur Laufzeit? Wechseln Sie stattdessen zu einem Eingabeformular-Auslöser das Ausführungspanel sammelt diese Felder, bevor der Workflow startet.
<Callout>
Manuelle Auslöser-Ausführungen überschreiben nicht Ihren Deployment-Verlauf. Aktualisieren und stellen Sie neu bereit, wenn Canvas-Änderungen live gehen sollen.
</Callout>

View File

@@ -0,0 +1,97 @@
---
title: Start
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
Der Start-Block ist der Standard-Auslöser für Workflows, die in Sim erstellt werden. Er sammelt strukturierte Eingaben und verteilt sie an den Rest deines Graphen für Editor-Tests, API-Bereitstellungen und Chat-Erlebnisse.
<div className="flex justify-center">
<Image
src="/static/start.png"
alt="Start-Block mit Eingabeformat-Feldern"
width={360}
height={380}
className="my-6"
/>
</div>
<Callout type="info">
Der Start-Block befindet sich in der Startposition, wenn du einen Workflow erstellst. Behalte ihn dort, wenn du denselben Einstiegspunkt für Editor-Ausführungen, Deploy-to-API-Anfragen und Chat-Sitzungen verwenden möchtest. Tausche ihn mit Webhook- oder Schedule-Triggern aus, wenn du nur ereignisgesteuerte Ausführung benötigst.
</Callout>
## Von Start bereitgestellte Felder
Der Start-Block gibt je nach Ausführungsumgebung unterschiedliche Daten aus:
- **Eingabeformat-Felder** — Jedes Feld, das du hinzufügst, wird als <code>&lt;start.fieldName&gt;</code> verfügbar. Zum Beispiel erscheint ein `customerId`Feld als <code>&lt;start.customerId&gt;</code> in nachgelagerten Blöcken und Vorlagen.
- **Nur-Chat-Felder** — Wenn der Workflow über das Chat-Seitenfeld oder ein bereitgestelltes Chat-Erlebnis ausgeführt wird, stellt Sim auch <code>&lt;start.input&gt;</code> (neueste Benutzernachricht), <code>&lt;start.conversationId&gt;</code> (aktive Sitzungs-ID) und <code>&lt;start.files&gt;</code> (Chat-Anhänge) bereit.
Halte die Eingabeformat-Felder auf die Namen beschränkt, auf die du später verweisen möchtest diese Werte sind die einzigen strukturierten Felder, die über Editor-, API- und Chat-Ausführungen hinweg geteilt werden.
## Konfiguriere das Eingabeformat
Verwende den Eingabeformat-Unterblock, um das Schema zu definieren, das für alle Ausführungsmodi gilt:
1. Füge ein Feld für jeden Wert hinzu, den du sammeln möchtest.
2. Wähle einen Typ (`string`, `number`, `boolean`, `object`, `array` oder `files`). Dateifelder akzeptieren Uploads von Chat- und API-Aufrufern.
3. Gib Standardwerte an, wenn du möchtest, dass das manuelle Ausführungsmodal automatisch Testdaten einfügt. Diese Standardwerte werden für bereitgestellte Ausführungen ignoriert.
4. Ordne Felder neu an, um zu steuern, wie sie im Editor-Formular erscheinen.
Referenzieren Sie strukturierte Werte nachgelagert mit Ausdrücken wie <code>&lt;start.customerId&gt;</code> abhängig vom Block, den Sie verbinden.
## Wie es sich je nach Einstiegspunkt verhält
<Tabs items={['Editor-Ausführung', 'Bereitstellung als API', 'Bereitstellung für Chat']}>
<Tab>
<div className="space-y-3">
<p>
Wenn Sie im Editor auf <strong>Ausführen</strong> klicken, rendert der Start-Block das Eingabeformat als Formular. Standardwerte erleichtern das erneute Testen ohne erneute Dateneingabe. Durch das Absenden des Formulars wird der Workflow sofort ausgelöst und die Werte werden unter <code>&lt;start.feldName&gt;</code> (zum Beispiel <code>&lt;start.sampleField&gt;</code>) verfügbar.
</p>
<p>
Dateifelder im Formular werden direkt in die entsprechenden{' '}
<code>&lt;start.fieldName&gt;</code> hochgeladen; verwenden Sie diese Werte,
um nachgelagerte Tools oder Speicherschritte zu versorgen.
</p>
</div>
</Tab>
<Tab>
<div className="space-y-3">
<p>
Die Bereitstellung als API verwandelt das Eingabeformat in einen JSON-Vertrag für Clients. Jedes Feld wird Teil des Anforderungskörpers, und Sim erzwingt primitive Typen bei der Aufnahme. Dateifelder erwarten Objekte, die auf hochgeladene Dateien verweisen; verwenden Sie den Ausführungs-Datei-Upload-Endpunkt, bevor Sie den Workflow aufrufen.
</p>
<p>
API-Aufrufer können zusätzliche optionale Eigenschaften einbeziehen. Diese
werden in den <code>&lt;start.fieldName&gt;</code>Ausgaben beibehalten, sodass
Sie experimentieren können, ohne sofort neu bereitzustellen.
</p>
</div>
</Tab>
<Tab>
<div className="space-y-3">
<p>
Bei Chat-Bereitstellungen bindet sich der Start-Block an die aktive Konversation. Die neueste Nachricht füllt <code>&lt;start.input&gt;</code>, die Sitzungskennung ist unter <code>&lt;start.conversationId&gt;</code> verfügbar, und Benutzeranhänge erscheinen unter <code>&lt;start.files&gt;</code>, zusammen mit allen Eingabeformatfeldern, die als <code>&lt;start.fieldName&gt;</code> definiert sind.
</p>
<p>
Wenn Sie den Chat mit zusätzlichem strukturiertem Kontext starten (zum
Beispiel aus einer Einbettung), wird dieser mit den entsprechenden{' '}
<code>&lt;start.fieldName&gt;</code>Ausgaben zusammengeführt, wodurch
nachgelagerte Blöcke konsistent mit API- und manuellen Ausführungen bleiben.
</p>
</div>
</Tab>
</Tabs>
## Referenzierung von Start-Daten in nachgelagerten Komponenten
- Verbinde <code>&lt;start.fieldName&gt;</code> direkt mit Agenten, Tools oder Funktionen, die strukturierte Daten erwarten.
- Verwende Template-Syntax wie <code>&lt;start.sampleField&gt;</code> oder <code>&lt;start.files[0].url&gt;</code> (nur für Chat) in Prompt-Feldern.
- Halte <code>&lt;start.conversationId&gt;</code> bereit, wenn du Ausgaben gruppieren, den Gesprächsverlauf aktualisieren oder die Chat-API erneut aufrufen musst.
## Best Practices
- Behandle den Start-Block als einzigen Einstiegspunkt, wenn du sowohl API- als auch Chat-Aufrufer unterstützen möchtest.
- Bevorzuge benannte Eingabeformat-Felder gegenüber dem Parsen von rohem JSON in nachgelagerten Knoten; Typumwandlung erfolgt automatisch.
- Füge unmittelbar nach dem Start Validierung oder Routing hinzu, wenn bestimmte Felder für den Erfolg deines Workflows erforderlich sind.

View File

@@ -1,67 +0,0 @@
---
title: Starter (Veraltet)
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
<Callout type="warning">
Der Starter-Block ist veraltet und wurde durch spezialisierte Core-Trigger ersetzt. Bitte beachten Sie die [Core-Trigger-Dokumentation](/triggers) für die neuen API-, Chat-, Eingabeformular-, Manuell-, Zeitplan- und Webhook-Trigger.
</Callout>
Der Starter-Block ermöglicht es Ihnen, die Workflow-Ausführung manuell mit Eingabeparametern zu starten und bietet zwei Eingabemodi: strukturierte Parameter oder konversationellen Chat.
<div className="flex justify-center">
<Image
src="/static/starter.png"
alt="Starter-Block mit manuellen und Chat-Modus-Optionen"
width={500}
height={400}
className="my-6"
/>
</div>
## Ausführungsmodi
Wählen Sie Ihre Eingabemethode aus dem Dropdown-Menü:
<Tabs items={['Manueller Modus', 'Chat-Modus']}>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
<li><strong>API-freundliche strukturierte Eingaben</strong>: Definieren Sie spezifische Parameter (Text, Zahl, Boolean, JSON, Datei, Datum)</li>
<li><strong>Testen während der Workflow-Erstellung</strong>: Schnelle Iteration beim Debuggen von Workflows</li>
</ul>
<div className="mx-auto w-full overflow-hidden rounded-lg">
<Video src="input-format.mp4" width={700} height={450} />
</div>
<p className="text-sm text-gray-600">Konfigurieren Sie Eingabeparameter, die beim Bereitstellen als API-Endpunkt verfügbar sein werden.</p>
</div>
</Tab>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
<li><strong>Natürliche Sprache</strong>: Benutzer geben Fragen oder Anfragen ein</li>
<li><strong>Konversationell</strong>: Ideal für KI-gestützte Workflows</li>
</ul>
<div className="mx-auto w-full overflow-hidden rounded-lg">
<Video src="chat-input.mp4" width={700} height={450} />
</div>
<p className="text-sm text-gray-600">Chatten Sie mit Ihrem Workflow und greifen Sie auf Eingabetext, Konversations-ID und hochgeladene Dateien für kontextbezogene Antworten zu.</p>
</div>
</Tab>
</Tabs>
## Verwendung von Chat-Variablen
Im Chat-Modus können Sie über spezielle Variablen auf Benutzereingaben und Konversationskontext zugreifen:
- **`<start.input>`** - Enthält den Nachrichtentext des Benutzers
- **`<start.conversationId>`** - Eindeutige Kennung für den Konversationsverlauf
- **`<start.files>`** - Array von Dateien, die vom Benutzer hochgeladen wurden (falls vorhanden)

View File

@@ -1,357 +0,0 @@
---
title: Loop Block YAML Schema
description: YAML-Konfigurationsreferenz für Loop-Blöcke
---
## Schema-Definition
```yaml
type: object
required:
- type
- name
- connections
properties:
type:
type: string
enum: [loop]
description: Block type identifier
name:
type: string
description: Display name for this loop block
inputs:
type: object
description: Optional. If omitted, defaults will be applied.
properties:
loopType:
type: string
enum: [for, forEach]
description: Type of loop to execute
default: for
iterations:
type: number
description: Number of iterations (for 'for' loops)
default: 5
minimum: 1
maximum: 1000
collection:
type: string
description: Collection to iterate over (for 'forEach' loops)
default: ""
maxConcurrency:
type: number
description: Maximum concurrent executions
default: 1
minimum: 1
maximum: 10
connections:
type: object
properties:
# Nested format (recommended)
loop:
type: object
properties:
start:
type: string
description: Target block ID to execute inside the loop
end:
type: string
description: Target block ID for loop completion (optional)
# Direct handle format (alternative)
loop-start-source:
type: string | string[]
description: Target block ID to execute inside the loop (direct format)
loop-end-source:
type: string | string[]
description: Target block ID for loop completion (direct format, optional)
error:
type: string
description: Target block ID for error handling
note: Use either the nested 'loop' format OR the direct 'loop-start-source' format, not both
```
## Verbindungskonfiguration
Loop-Blöcke unterstützen zwei Verbindungsformate:
### Direktes Handle-Format (Alternative)
```yaml
connections:
loop-start-source: <string> # Target block ID to execute inside the loop
loop-end-source: <string> # Target block ID after loop completion (optional)
error: <string> # Target block ID for error handling (optional)
```
Beide Formate funktionieren identisch. Verwenden Sie das Format, das Ihnen besser gefällt.
## Konfiguration von untergeordneten Blöcken
Blöcke innerhalb einer Schleife müssen ihre `parentId` auf die Loop-Block-ID gesetzt haben. Die Eigenschaft `extent` wird automatisch auf `'parent'` gesetzt und muss nicht angegeben werden:
```yaml
loop-1:
type: loop
name: "Process Items"
inputs:
loopType: forEach
collection: <start.items>
connections:
loop:
start: process-item
end: final-results
# Child block inside the loop
process-item:
type: agent
name: "Process Item"
parentId: loop-1 # References the loop block
inputs:
systemPrompt: "Process this item"
userPrompt: <loop.currentItem>
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
## Beispiele
### For-Schleife (feste Anzahl von Iterationen)
```yaml
countdown-loop:
type: loop
name: "Countdown Loop"
inputs:
loopType: for
iterations: 5
connections:
loop:
start: countdown-agent
end: countdown-complete
countdown-agent:
type: agent
name: "Countdown Agent"
parentId: countdown-loop
inputs:
systemPrompt: "Generate a countdown message"
userPrompt: "Count down from 5. Current number: <loop.index>"
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
### ForEach-Schleife (Verarbeitung von Sammlungen)
```yaml
email-processor-loop:
type: loop
name: "Email Processor Loop"
inputs:
loopType: forEach
collection: <start.emails>
connections:
loop:
start: process-single-email
end: all-emails-processed
process-single-email:
type: agent
name: "Process Single Email"
parentId: email-processor-loop
inputs:
systemPrompt: "Classify and respond to this email"
userPrompt: "Email content: <loop.currentItem>"
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
### Schleife mit mehreren untergeordneten Blöcken
```yaml
data-analysis-loop:
type: loop
name: "Data Analysis Loop"
inputs:
loopType: forEach
collection: <data-fetcher.records>
maxConcurrency: 3
connections:
loop:
start: validate-record
end: generate-report
error: handle-loop-error
validate-record:
type: function
name: "Validate Record"
parentId: data-analysis-loop
inputs:
code: |
const record = <loop.currentItem>;
const index = <loop.index>;
// Validate the record
if (!record.id || !record.data) {
throw new Error(`Invalid record at index ${index}`);
}
return {
valid: true,
recordId: record.id,
processedAt: new Date().toISOString()
};
connections:
success: analyze-record
error: record-error
analyze-record:
type: agent
name: "Analyze Record"
parentId: data-analysis-loop
inputs:
systemPrompt: "Analyze this data record and extract insights"
userPrompt: |
Record ID: <validaterecord.recordId>
Data: <loop.currentItem.data>
Position in collection: <loop.index>
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
connections:
success: store-analysis
store-analysis:
type: function
name: "Store Analysis"
parentId: data-analysis-loop
inputs:
code: |
const analysis = <analyzerecord.content>;
const recordId = <validaterecord.recordId>;
// Store analysis result
return {
recordId,
analysis,
completedAt: new Date().toISOString()
};
```
### Schleife für parallele Verarbeitung
```yaml
parallel-processing-loop:
type: loop
name: "Parallel Processing Loop"
inputs:
loopType: forEach
collection: <start.tasks>
maxConcurrency: 5
connections:
loop:
start: process-task
end: aggregate-results
process-task:
type: api
name: "Process Task"
parentId: parallel-processing-loop
inputs:
url: "https://api.example.com/process"
method: POST
headers:
- key: "Authorization"
value: "Bearer {{API_TOKEN}}"
body: |
{
"taskId": "<loop.currentItem.id>",
"data": "<loop.currentItem.data>"
}
connections:
success: task-completed
```
### Beispiel für direktes Handle-Format
Dieselbe Schleife kann mit dem direkten Handle-Format geschrieben werden:
```yaml
my-loop:
type: loop
name: "Process Items"
inputs:
loopType: forEach
collection: <start.items>
connections:
loop-start-source: process-item # Direct handle format
loop-end-source: final-results # Direct handle format
error: handle-error
process-item:
type: agent
name: "Process Item"
parentId: my-loop
inputs:
systemPrompt: "Process this item"
userPrompt: <loop.currentItem>
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
### Minimales Schleifenbeispiel (mit Standardwerten)
Sie können den Abschnitt `inputs` vollständig weglassen, dann werden Standardwerte angewendet:
```yaml
simple-loop:
type: loop
name: "Simple Loop"
# No inputs section - defaults to loopType: 'for', iterations: 5
connections:
loop-start-source: process-step
loop-end-source: complete
process-step:
type: agent
name: "Process Step"
parentId: simple-loop
inputs:
systemPrompt: "Execute step"
userPrompt: "Step <loop.index>"
model: gpt-4o
apiKey: '{{OPENAI_API_KEY}}'
```
Diese Schleife führt standardmäßig 5 Iterationen aus.
## Schleifenvariablen
Innerhalb von Schleifenunterblöcken sind diese speziellen Variablen verfügbar:
```yaml
# Available in all child blocks of the loop
<loop.index> # Current iteration number (0-based)
<loop.currentItem> # Current item being processed (forEach loops)
<loop.items> # Full collection (forEach loops)
```
## Ausgabereferenzen
Nach Abschluss einer Schleife können Sie auf ihre aggregierten Ergebnisse verweisen:
```yaml
# In blocks after the loop
final-processor:
inputs:
all-results: <loop-name.results> # Array of all iteration results
total-count: <loop-name.count> # Number of iterations completed
```
## Bewährte Praktiken
- Setzen Sie angemessene Iterationsgrenzen, um lange Ausführungszeiten zu vermeiden
- Verwenden Sie forEach für die Verarbeitung von Sammlungen, for-Schleifen für feste Iterationen
- Erwägen Sie die Verwendung von maxConcurrency für I/O-gebundene Operationen
- Integrieren Sie Fehlerbehandlung für eine robuste Schleifenausführung
- Verwenden Sie aussagekräftige Namen für Schleifenunterblöcke
- Testen Sie zuerst mit kleinen Sammlungen
- Überwachen Sie die Ausführungszeit für große Sammlungen

View File

@@ -1,5 +1,5 @@
---
title: Blocks
title: Overview
description: The building components of your AI workflows
---
@@ -16,7 +16,7 @@ Blocks are the building components you connect together to create AI workflows.
## Core Block Types
Sim provides seven core block types that handle the essential functions of AI workflows:
Sim provides essential block types that handle the core functions of AI workflows:
### Processing Blocks
- **[Agent](/blocks/agent)** - Chat with AI models (OpenAI, Anthropic, Google, local models)
@@ -28,6 +28,10 @@ Sim provides seven core block types that handle the essential functions of AI wo
- **[Router](/blocks/router)** - Use AI to intelligently route requests to different paths
- **[Evaluator](/blocks/evaluator)** - Score and assess content quality using AI
### Control Flow Blocks
- **[Variables](/blocks/variables)** - Set and manage workflow-scoped variables
- **[Wait](/blocks/wait)** - Pause workflow execution for a specified time delay
### Output Blocks
- **[Response](/blocks/response)** - Format and return final results from your workflow
@@ -123,4 +127,10 @@ Each block type has specific configuration options:
<Card title="Condition Block" href="/blocks/condition">
Create branching logic based on data evaluation
</Card>
<Card title="Variables Block" href="/blocks/variables">
Set and manage workflow-scoped variables
</Card>
<Card title="Wait Block" href="/blocks/wait">
Pause workflow execution for specified time delays
</Card>
</Cards>

View File

@@ -9,7 +9,7 @@ import { Image } from '@/components/ui/image'
The Loop block is a container block in Sim that allows you to create iterative workflows by executing a group of blocks repeatedly. Loops enable iterative processing in your workflows.
The Loop block supports two types of iteration:
The Loop block supports four types of iteration:
<Callout type="info">
Loop blocks are container nodes that can hold other blocks inside them. The blocks inside a loop will execute multiple times based on your configuration.
@@ -27,7 +27,7 @@ The Loop block enables you to:
<strong>Repeat operations</strong>: Execute blocks a fixed number of times
</Step>
<Step>
<strong>Sequential processing</strong>: Handle data transformation in ordered iterations
<strong>Loop on conditions</strong>: Continue executing while or until a condition is met
</Step>
<Step>
<strong>Aggregate results</strong>: Collect outputs from all loop iterations
@@ -47,9 +47,9 @@ The Loop block executes contained blocks through sequential iteration:
### Loop Type
Choose between two types of loops:
Choose between four types of loops:
<Tabs items={['For Loop', 'ForEach Loop']}>
<Tabs items={['For Loop', 'ForEach Loop', 'While Loop', 'Do-While Loop']}>
<Tab>
**For Loop (Iterations)** - A numeric loop that executes a fixed number of times:
@@ -96,6 +96,54 @@ Choose between two types of loops:
- Iteration 3: Process "orange"
```
</Tab>
<Tab>
**While Loop (Condition-based)** - Continues executing while a condition evaluates to true:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-3.png"
alt="While Loop with condition"
width={500}
height={400}
className="my-6"
/>
</div>
Use this when you need to loop until a specific condition is met. The condition is checked **before** each iteration.
```
Example: While <variable.i> < 10
- Check condition → Execute if true
- Inside loop: Increment <variable.i>
- Inside loop: Variables assigns i = <variable.i> + 1
- Check condition → Execute if true
- Check condition → Exit if false
```
</Tab>
<Tab>
**Do-While Loop (Condition-based)** - Executes at least once, then continues while a condition is true:
<div className="flex justify-center">
<Image
src="/static/blocks/loop-3.png"
alt="Do-While Loop with condition"
width={500}
height={400}
className="my-6"
/>
</div>
Use this when you need to execute at least once, then loop until a condition is met. The condition is checked **after** each iteration.
```
Example: Do-while <variable.i> < 10
- Execute blocks
- Inside loop: Increment <variable.i>
- Inside loop: Variables assigns i = <variable.i> + 1
- Check condition → Continue if true
- Check condition → Exit if false
```
</Tab>
</Tabs>
## How to Use Loops
@@ -139,6 +187,19 @@ After a loop completes, you can access aggregated results:
</ol>
</div>
### Counter with While Loop
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Process items with counter-based loop</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Initialize workflow variable: `i = 0`</li>
<li>While loop with condition: `<variable.i>` \< 10</li>
<li>Inside loop: Agent processes item at index `<variable.i>`</li>
<li>Inside loop: Variables increments `i = <variable.i> + 1`</li>
<li>Loop continues while i is less than 10</li>
</ol>
</div>
## Advanced Features
### Limitations
@@ -162,7 +223,7 @@ After a loop completes, you can access aggregated results:
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Loop Type</strong>: Choose between 'for' or 'forEach'
<strong>Loop Type</strong>: Choose between 'for', 'forEach', 'while', or 'doWhile'
</li>
<li>
<strong>Iterations</strong>: Number of times to execute (for loops)
@@ -170,6 +231,9 @@ After a loop completes, you can access aggregated results:
<li>
<strong>Collection</strong>: Array or object to iterate over (forEach loops)
</li>
<li>
<strong>Condition</strong>: Boolean expression to evaluate (while/do-while loops)
</li>
</ul>
</Tab>
<Tab>

View File

@@ -0,0 +1,18 @@
{
"pages": [
"index",
"agent",
"api",
"condition",
"evaluator",
"function",
"guardrails",
"loop",
"parallel",
"response",
"router",
"variables",
"wait",
"workflow"
]
}

View File

@@ -0,0 +1,123 @@
---
title: Variables
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Image } from '@/components/ui/image'
The Variables block updates workflow variables during execution. Variables must first be initialized in your workflow's Variables section, then you can use this block to update their values as your workflow runs.
<div className="flex justify-center">
<Image
src="/static/blocks/variables.png"
alt="Variables Block"
width={500}
height={350}
className="my-6"
/>
</div>
<Callout>
Access variables anywhere in your workflow using `<variable.variableName>` syntax.
</Callout>
## Overview
The Variables block enables you to:
<Steps>
<Step>
<strong>Update workflow variables</strong>: Change variable values during execution
</Step>
<Step>
<strong>Store dynamic data</strong>: Capture block outputs into variables
</Step>
<Step>
<strong>Maintain state</strong>: Track counters, flags, and intermediate results
</Step>
</Steps>
## How to Use Variables
### 1. Initialize in Workflow Variables
First, create your variables in the workflow's Variables section (accessible from the workflow settings):
```
customerEmail = ""
retryCount = 0
currentStatus = "pending"
```
### 2. Update with Variables Block
Use the Variables block to update these values during execution:
```
customerEmail = <api.email>
retryCount = <variable.retryCount> + 1
currentStatus = "processing"
```
### 3. Access Anywhere
Reference variables in any block:
```
Agent prompt: "Send email to <variable.customerEmail>"
Condition: <variable.retryCount> < 5
API body: {"status": "<variable.currentStatus>"}
```
## Example Use Cases
### Loop Counter and State
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Track progress through loop iterations</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Initialize in workflow: `itemsProcessed = 0`, `lastResult = ""`</li>
<li>Loop iterates over items</li>
<li>Inside loop: Agent processes current item</li>
<li>Inside loop: Variables updates `itemsProcessed = <variable.itemsProcessed> + 1`</li>
<li>Inside loop: Variables updates `lastResult = <agent.content>`</li>
<li>Next iteration: Access `<variable.lastResult>` to compare with current result</li>
</ol>
</div>
### Retry Logic
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Track API retry attempts</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Initialize in workflow: `retryCount = 0`</li>
<li>API block attempts request</li>
<li>If failed, Variables increments: `retryCount = <variable.retryCount> + 1`</li>
<li>Condition checks if `<variable.retryCount>` \< 3 to retry or fail</li>
</ol>
</div>
### Dynamic Configuration
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Store user context for workflow</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Initialize in workflow: `userId = ""`, `userTier = ""`</li>
<li>API fetches user profile</li>
<li>Variables stores: `userId = <api.id>`, `userTier = <api.tier>`</li>
<li>Agent personalizes response using `<variable.userTier>`</li>
<li>API uses `<variable.userId>` for logging</li>
</ol>
</div>
## Outputs
- **`<variables.assignments>`**: JSON object with all variable assignments from this block
## Best Practices
- **Initialize in workflow settings**: Always create variables in the workflow Variables section before using them
- **Update dynamically**: Use Variables blocks to update values based on block outputs or calculations
- **Use in loops**: Perfect for tracking state across iterations
- **Name descriptively**: Use clear names like `currentIndex`, `totalProcessed`, or `lastError`

View File

@@ -0,0 +1,99 @@
---
title: Wait
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Image } from '@/components/ui/image'
The Wait block pauses your workflow for a specified amount of time before continuing to the next block. Use it to add delays between actions, respect API rate limits, or space out operations.
<div className="flex justify-center">
<Image
src="/static/blocks/wait.png"
alt="Wait Block"
width={500}
height={350}
className="my-6"
/>
</div>
## Overview
The Wait block enables you to:
<Steps>
<Step>
<strong>Add time delays</strong>: Pause execution between workflow steps
</Step>
<Step>
<strong>Respect rate limits</strong>: Space out API calls to stay within limits
</Step>
<Step>
<strong>Schedule sequences</strong>: Create timed workflows with delays between actions
</Step>
</Steps>
## Configuration
### Wait Amount
Enter the duration to pause execution:
- **Input**: Positive number
- **Maximum**: 600 seconds (10 minutes) or 10 minutes
### Unit
Choose the time unit:
- **Seconds**: For short, precise delays
- **Minutes**: For longer pauses
<Callout type="info">
Wait blocks can be cancelled by stopping the workflow. The maximum wait time is 10 minutes.
</Callout>
## Outputs
- **`<wait.waitDuration>`**: The wait duration in milliseconds
- **`<wait.status>`**: Status of the wait ('waiting', 'completed', or 'cancelled')
## Example Use Cases
### API Rate Limiting
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Stay within API rate limits</h4>
<ol className="list-decimal pl-5 text-sm">
<li>API block makes first request</li>
<li>Wait block pauses for 2 seconds</li>
<li>API block makes second request</li>
<li>Process continues without hitting rate limits</li>
</ol>
</div>
### Timed Notifications
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Send follow-up messages</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Function sends initial email</li>
<li>Wait block pauses for 5 minutes</li>
<li>Function sends follow-up email</li>
</ol>
</div>
### Processing Delays
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scenario: Wait for external system</h4>
<ol className="list-decimal pl-5 text-sm">
<li>API block triggers job in external system</li>
<li>Wait block pauses for 30 seconds</li>
<li>API block checks job completion status</li>
</ol>
</div>
## Best Practices
- **Keep waits reasonable**: Use Wait for delays up to 10 minutes. For longer delays, consider scheduled workflows
- **Monitor execution time**: Remember that waits extend total workflow duration

View File

@@ -1,5 +1,5 @@
---
title: Connection Basics
title: Basics
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Connection Data Structure
title: Data Structure
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Connections
title: Overview
description: Connect your blocks to one another.
---

View File

@@ -0,0 +1,3 @@
{
"pages": ["index", "basics", "data-structure", "tags"]
}

View File

@@ -1,5 +1,5 @@
---
title: Connection Tags
title: Tags
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Execution Basics
title: Basics
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -1,5 +1,5 @@
---
title: Execution
title: Overview
---
import { Callout } from 'fumadocs-ui/components/callout'

View File

@@ -0,0 +1,3 @@
{
"pages": ["index", "basics", "api", "logging", "costs"]
}

View File

@@ -3,7 +3,6 @@
"pages": [
"./introduction/index",
"./getting-started/index",
"---Building Workflows---",
"triggers",
"blocks",
"tools",
@@ -11,14 +10,9 @@
"mcp",
"copilot",
"knowledgebase",
"---Configuration---",
"variables",
"---Execution---",
"execution",
"---Advanced---",
"permissions",
"yaml",
"---SDKs---",
"sdks"
],
"defaultOpen": false

View File

@@ -0,0 +1,4 @@
{
"title": "SDKs",
"pages": ["python", "typescript"]
}

View File

@@ -1,5 +1,5 @@
---
title: Python SDK
title: Python
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -283,7 +283,6 @@ class AsyncExecutionResult:
class WorkflowStatus:
is_deployed: bool
deployed_at: Optional[str] = None
is_published: bool = False
needs_redeployment: bool = False
```
@@ -752,10 +751,6 @@ Configure the client using environment variables:
</Step>
</Steps>
<Callout type="warning">
Keep your API key secure and never commit it to version control. Use environment variables or secure configuration management.
</Callout>
## Requirements
- Python 3.8+

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