* feat(preview): add workflow context badge for nested navigation
Adds a badge next to the Back button when viewing nested workflows
to help users identify which workflow they are currently viewing.
This is especially helpful when navigating deeply into nested
workflow blocks.
Changes:
- Added workflowName field to WorkflowStackEntry interface
- Capture workflow name from metadata when drilling down
- Display workflow name badge next to Back button
Co-authored-by: emir <emir@simstudio.ai>
* added workflow name and desc to metadata for workflow preview
* added copy and search icon in code in preview editor
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: waleed <walif6@gmail.com>
* feat(timeout): add timeout subblock to the api block
* fix(timeout): honor timeout config for internal routes and fix type coercion
- Add AbortController support for internal routes (/api/*) to honor timeout
- Fix type coercion: convert string timeout from short-input to number
- Handle NaN gracefully by falling back to undefined (default timeout)
Fixes#2786Fixes#2242
* fix: remove redundant clearTimeout in catch block
* fix: validate timeout is positive number
Negative timeout values would cause immediate request abort since
JavaScript treats negative setTimeout delays as 0.
* update docs image, update search modal performance
* removed unused keywords type
* ack comments
* cleanup
* fix: add default timeout for internal routes and validate finite timeout
- Internal routes now use same 5-minute default as external routes
- Added Number.isFinite() check to reject Infinity values
* fix: enforce max timeout and improve error message consistency
- Clamp timeout to max 600000ms (10 minutes) as documented
- External routes now report timeout value in error message
* remove unused code
* fix(child-workflow): must bypass hiddenFromDisplay config
* fix passing of spans to be in block log
* keep fallback for backwards compat
* fix error message formatting
* clean up
* fix(workflow): update container dimensions on keyboard movement
* fix(workflow): avoid duplicate container updates during drag
Add !change.dragging check to only handle keyboard movements in
onNodesChange, since mouse drags are already handled by onNodeDrag.
* fix(workflow): persist keyboard movements to backend
Keyboard arrow key movements now call collaborativeBatchUpdatePositions
to sync position changes to the backend for persistence and real-time
collaboration.
* improvement(cmdk): refactor search modal to use cmdk + fix icon SVG IDs (#3044)
* improvement(cmdk): refactor search modal to use cmdk + fix icon SVG IDs
* chore: remove unrelated workflow.tsx changes
* chore: remove comments
* chore: add devtools middleware to search modal store
* fix: allow search data re-initialization when permissions change
* fix: include keywords in search filter + show service name in tool operations
* fix: correct filterBlocks type signature
* fix: move generic to function parameter position
* fix(mcp): correct event handler type for onInput
* perf: always render command palette for instant opening
* fix: clear search input when modal reopens
* fix(helm): move rotationPolicy under privateKey for cert-manager compatibility (#3046)
* fix(helm): move rotationPolicy under privateKey for cert-manager compatibility
* docs(helm): add reclaimPolicy Retain guidance for production database storage
* fix(helm): prevent empty branding ConfigMap creation
* fix(workflow): avoid duplicate position updates on drag end
Check isInDragOperation before persisting in onNodesChange to prevent
duplicate calls. Drag-end events have dragStartPosition still set,
while keyboard movements don't, allowing proper distinction.
* Fix
* Cleanup
* order of ops for validations
* only reachable subflow nodes should hit validation
---------
Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
* improvement(cmdk): refactor search modal to use cmdk + fix icon SVG IDs
* chore: remove unrelated workflow.tsx changes
* chore: remove comments
* chore: add devtools middleware to search modal store
* fix: allow search data re-initialization when permissions change
* fix: include keywords in search filter + show service name in tool operations
* fix: correct filterBlocks type signature
* fix: move generic to function parameter position
* fix(mcp): correct event handler type for onInput
* perf: always render command palette for instant opening
* fix: clear search input when modal reopens
* fix(security): add authentication to tool API routes
* fix(drive): use checkSessionOrInternalAuth to allow browser access
* fix(selectors): use checkSessionOrInternalAuth for UI-accessible routes
* feat(note-block): expand media embed support with tuned aspect ratios
* fix(note-block): add artist parameter to Bandcamp embed URLs
Include the artist subdomain in Bandcamp track and album embed URLs
to ensure proper embed resolution.
* fix(note-block): add required src attribute to track elements
HTML spec requires track elements to have a src attribute.
* fix(note-block): address embed URL matching issues
- Fix YouTube regex to handle v= anywhere in query params
- Fix Twitch channel match to exclude /clip/ URLs
- Remove Mux support (HLS not supported in most browsers)
- Remove Bandcamp support (requires numeric IDs, not slugs)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix(docs): separate local and blob asset resolution for quick-reference
ActionImage now uses local paths directly for PNGs while ActionVideo
uses blob storage with proper path normalization (strips static/ prefix).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor(docs): simplify asset resolution by using correct paths directly
Remove path normalization logic from action-media component. Instead,
use the appropriate paths in MDX:
- PNGs: /static/quick-reference/... (local)
- MP4s: quick-reference/... (blob via getAssetUrl)
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>