mirror of
https://github.com/simstudioai/sim.git
synced 2026-02-07 21:25:38 -05:00
* feat(canvas): added the ability to lock blocks * unlock duplicates of locked blocks * fix(duplicate): place duplicate outside locked container When duplicating a block that's inside a locked loop/parallel, the duplicate is now placed outside the container since nothing should be added to a locked container. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(duplicate): unlock all blocks when duplicating workflow - Server-side workflow duplication now sets locked: false for all blocks - regenerateWorkflowStateIds also unlocks blocks for templates - Client-side regenerateBlockIds already handled this (for paste/import) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix code block disabled state, allow unlock from editor * fix(lock): address code review feedback - Fix toggle enabled using first toggleable block, not first block - Delete button now checks isParentLocked - Lock button now has disabled state - Editor lock icon distinguishes block vs parent lock state Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(lock): prevent unlocking blocks inside locked containers - Editor: can't unlock block if parent container is locked - Action bar: can't unlock block if parent container is locked - Shows "Parent container is locked" tooltip in both cases Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(lock): ensure consistent behavior across all UIs Block Menu, Editor, Action Bar now all have identical behavior: - Enable/Disable: disabled when locked OR parent locked - Flip Handles: disabled when locked OR parent locked - Delete: disabled when locked OR parent locked - Remove from Subflow: disabled when locked OR parent locked - Lock: always available for admins - Unlock: disabled when parent is locked (unlock parent first) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(enable): consistent behavior - can't enable if parent disabled Same pattern as lock: must enable parent container first before enabling children inside it. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs(quick-reference): add lock block action Added documentation for the lock/unlock block feature (admin only). Note: Image placeholder added, pending actual screenshot. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * remove prefix square brackets in error notif * add lock block image * fix(block-menu): paste should not be disabled for locked selection Paste creates new blocks, doesn't modify selected ones. Changed from disableEdit (includes lock state) to !userCanEdit (permission only), matching the Duplicate action behavior. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor(workflow): extract block deletion protection into shared utility Extract duplicated block protection logic from workflow.tsx into a reusable filterProtectedBlocks helper in utils/block-protection-utils.ts. This ensures consistent behavior between context menu delete and keyboard delete operations. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor(workflow): extend block protection utilities for edge protection Add isEdgeProtected, filterUnprotectedEdges, and hasProtectedBlocks utilities. Refactor workflow.tsx to use these helpers for: - onEdgesChange edge removal filtering - onConnect connection prevention - onNodeDragStart drag prevention - Keyboard edge deletion - Block menu disableEdit calculation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(lock): address review comments for lock feature 1. Store batchToggleEnabled now uses continue to skip locked blocks entirely, matching database operation behavior 2. Copilot add operation now checks if parent container is locked before adding nested nodes (defensive check for consistency) 3. Remove unused filterUnprotectedEdges function Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(copilot): add lock checks for insert and extract operations - insert_into_subflow: Check if existing block being moved is locked - extract_from_subflow: Check if block or parent subflow is locked These operations now match the UI behavior where locked blocks cannot be moved into/out of containers. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(lock): prevent duplicates inside locked containers via regenerateBlockIds 1. regenerateBlockIds now checks if existing parent is locked before keeping the block inside it. If parent is locked, the duplicate is placed outside (parentId cleared) instead of creating an inconsistent state. 2. Remove unnecessary effectivePermissions.canAdmin and potentialParentId from onNodeDragStart dependency array. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(lock): fix toggle locked target state and draggable check 1. BATCH_TOGGLE_LOCKED now uses first block from blocksToToggle set instead of blockIds[0], matching BATCH_TOGGLE_ENABLED pattern. Also added early exit if blocksToToggle is empty. 2. Blocks inside locked containers are now properly non-draggable. Changed draggable check from !block.locked to use isBlockProtected() which checks both block lock and parent container lock. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(copilot): check parent lock in edit and delete operations Both edit and delete operations now check if the block's parent container is locked, not just if the block itself is locked. This ensures consistent behavior with the UI which uses isBlockProtected utility that checks both direct lock and parent lock. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(socket): add server-side lock validation and admin-only permissions 1. BATCH_TOGGLE_LOCKED now requires admin role - non-admin users with write role can no longer bypass UI restriction via direct socket messages 2. BATCH_REMOVE_BLOCKS now validates lock status server-side - filters out protected blocks (locked or inside locked parent) before deletion 3. Remove duplicate/outdated comment in regenerateBlockIds Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(socket): update permission test for admin-only lock toggle batch-toggle-locked is now admin-only, so write role should be denied. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(undo-redo): use consistent target state for toggle redo The redo logic for BATCH_TOGGLE_ENABLED and BATCH_TOGGLE_LOCKED was incorrectly computing each block's new state as !previousStates[blockId]. However, the store's batchToggleEnabled/batchToggleLocked set ALL blocks to the SAME target state based on the first block's previous state. Now redo computes targetState = !previousStates[firstBlockId] and applies it to all blocks, matching the store's behavior. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(socket): add comprehensive lock validation across operations Based on audit findings, adds lock validation to multiple operations: 1. BATCH_TOGGLE_HANDLES - now skips locked/protected blocks at: - Store layer (batchToggleHandles) - Collaborative hook (collaborativeBatchToggleBlockHandles) - Server socket handler 2. BATCH_ADD_BLOCKS - server now filters blocks being added to locked parent containers 3. BATCH_UPDATE_PARENT - server now: - Skips protected blocks (locked or inside locked container) - Prevents moving blocks into locked containers All validations use consistent isProtected() helper that checks both direct lock and parent container lock. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor(workflow): use pre-computed lock state from contextMenuBlocks contextMenuBlocks already has locked and isParentLocked properties computed in use-canvas-context-menu.ts, so there's no need to look up blocks again via hasProtectedBlocks. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(lock): add lock validation to block rename operations Defense-in-depth: although the UI disables rename for locked blocks, the collaborative layer and server now also validate locks. - collaborativeUpdateBlockName: checks if block is locked or inside locked container before attempting rename - UPDATE_NAME server handler: checks lock status and parent lock before performing database update Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * added defense in depth for renaming locked blocks * fix(socket): add server-side lock validation for edges and subblocks Defense-in-depth: adds lock checks to server-side handlers that were previously relying only on client-side validation. Edge operations (ADD, REMOVE, BATCH_ADD, BATCH_REMOVE): - Check if source or target blocks are protected before modifying edges Subblock updates: - Check if parent block is protected before updating subblock values Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(lock): fetch parent blocks for edge protection checks and consistent tooltip - Fixed edge operations to fetch parent blocks before checking lock status - Previously, isBlockProtected checked if parent was locked, but the parent wasn't in blocksById because only source/target blocks were fetched - Now fetches parent blocks for all four edge operations: ADD, REMOVE, BATCH_ADD_EDGES, BATCH_REMOVE_EDGES - Fixed tooltip inconsistency: changed "Run previous blocks first" to "Run upstream blocks first" in action-bar to match workflow.tsx Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * updated tooltip text for run from block * fix(lock): add lock check to duplicate button and clean up drag handler - Added lock check to duplicate button in action bar to prevent duplicating locked blocks (consistent with other edit operations) - Removed ineffective early return in onNodeDragStart since the `draggable` property on nodes already prevents dragging protected blocks - the early return was misleading as it couldn't actually stop a drag operation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(lock): use disableEdit for duplicate in block menu Changed duplicate menu item to use disableEdit (which includes lock check) instead of !userCanEdit for consistency with action bar and other edit operations. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
396 lines
13 KiB
Plaintext
396 lines
13 KiB
Plaintext
---
|
|
title: Quick Reference
|
|
description: Essential actions for navigating and using the Sim workflow editor
|
|
---
|
|
|
|
import { Callout } from 'fumadocs-ui/components/callout'
|
|
import { ActionImage, ActionVideo } from '@/components/ui/action-media'
|
|
|
|
A quick lookup for everyday actions in the Sim workflow editor. For keyboard shortcuts, see [Keyboard Shortcuts](/keyboard-shortcuts).
|
|
|
|
<Callout type="info">
|
|
**Mod** refers to `Cmd` on macOS and `Ctrl` on Windows/Linux.
|
|
</Callout>
|
|
|
|
## Workspaces
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Action</th><th>How</th><th>Preview</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Create a workspace</td>
|
|
<td>Click workspace dropdown → **New Workspace**</td>
|
|
<td><ActionVideo src="quick-reference/create-workspace.mp4" alt="Create workspace" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Switch workspaces</td>
|
|
<td>Click workspace dropdown → Select workspace</td>
|
|
<td><ActionVideo src="quick-reference/switch-workspace.mp4" alt="Switch workspaces" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Invite team members</td>
|
|
<td>Sidebar → **Invite**</td>
|
|
<td><ActionVideo src="quick-reference/invite.mp4" alt="Invite team members" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Rename a workspace</td>
|
|
<td>Right-click workspace → **Rename**</td>
|
|
<td rowSpan={4}><ActionImage src="/static/quick-reference/workspace-context-menu.png" alt="Workspace context menu" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Duplicate a workspace</td>
|
|
<td>Right-click workspace → **Duplicate**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Export a workspace</td>
|
|
<td>Right-click workspace → **Export**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Delete a workspace</td>
|
|
<td>Right-click workspace → **Delete**</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
## Workflows
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Action</th><th>How</th><th>Preview</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Create a workflow</td>
|
|
<td>Click **+** button in sidebar</td>
|
|
<td><ActionImage src="/static/quick-reference/create-workflow.png" alt="Create workflow" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Reorder / move workflows</td>
|
|
<td>Drag workflow up/down or onto a folder</td>
|
|
<td><ActionVideo src="quick-reference/reordering.mp4" alt="Reorder workflows" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Import a workflow</td>
|
|
<td>Click import button in sidebar → Select file</td>
|
|
<td><ActionImage src="/static/quick-reference/import-workflow.png" alt="Import workflow" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Multi-select workflows</td>
|
|
<td>`Mod+Click` or `Shift+Click` workflows in sidebar</td>
|
|
<td><ActionVideo src="quick-reference/multiselect.mp4" alt="Multi-select workflows" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Open in new tab</td>
|
|
<td>Right-click workflow → **Open in New Tab**</td>
|
|
<td rowSpan={6}><ActionImage src="/static/quick-reference/workflow-context-menu.png" alt="Workflow context menu" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Rename a workflow</td>
|
|
<td>Right-click workflow → **Rename**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Assign workflow color</td>
|
|
<td>Right-click workflow → **Change Color**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Duplicate a workflow</td>
|
|
<td>Right-click workflow → **Duplicate**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Export a workflow</td>
|
|
<td>Right-click workflow → **Export**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Delete a workflow</td>
|
|
<td>Right-click workflow → **Delete**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Rename a folder</td>
|
|
<td>Right-click folder → **Rename**</td>
|
|
<td rowSpan={6}><ActionImage src="/static/quick-reference/folder-context-menu.png" alt="Folder context menu" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Create workflow in folder</td>
|
|
<td>Right-click folder → **Create workflow**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Create folder in folder</td>
|
|
<td>Right-click folder → **Create folder**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Duplicate a folder</td>
|
|
<td>Right-click folder → **Duplicate**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Export a folder</td>
|
|
<td>Right-click folder → **Export**</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Delete a folder</td>
|
|
<td>Right-click folder → **Delete**</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
## Blocks
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Action</th><th>How</th><th>Preview</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Add a block</td>
|
|
<td>Drag from Toolbar panel, or right-click canvas → **Add Block**</td>
|
|
<td><ActionVideo src="quick-reference/add-block.mp4" alt="Add a block" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Multi-select blocks</td>
|
|
<td>`Mod+Click` additional blocks, or shift-drag to draw selection box</td>
|
|
<td><ActionVideo src="quick-reference/multiselect-blocks.mp4" alt="Multi-select blocks" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Copy blocks</td>
|
|
<td>`Mod+C` with blocks selected</td>
|
|
<td rowSpan={2}><ActionVideo src="quick-reference/copy-paste.mp4" alt="Copy and paste blocks" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Paste blocks</td>
|
|
<td>`Mod+V` to paste copied blocks</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Duplicate blocks</td>
|
|
<td>Right-click → **Duplicate**</td>
|
|
<td><ActionVideo src="quick-reference/duplicate-block.mp4" alt="Duplicate blocks" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Delete blocks</td>
|
|
<td>`Delete` or `Backspace` key, or right-click → **Delete**</td>
|
|
<td><ActionImage src="/static/quick-reference/delete-block.png" alt="Delete block" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Rename a block</td>
|
|
<td>Click block name in header, or edit in the Editor panel</td>
|
|
<td><ActionVideo src="quick-reference/rename-block.mp4" alt="Rename a block" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Enable/Disable a block</td>
|
|
<td>Right-click → **Enable/Disable**</td>
|
|
<td><ActionImage src="/static/quick-reference/disable-block.png" alt="Disable block" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Lock/Unlock a block</td>
|
|
<td>Hover block → Click lock icon (Admin only)</td>
|
|
<td><ActionImage src="/static/quick-reference/lock-block.png" alt="Lock block" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Toggle handle orientation</td>
|
|
<td>Right-click → **Toggle Handles**</td>
|
|
<td><ActionVideo src="quick-reference/toggle-handles.mp4" alt="Toggle handle orientation" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Configure a block</td>
|
|
<td>Select block → use Editor panel on right</td>
|
|
<td><ActionVideo src="quick-reference/configure-block.mp4" alt="Configure a block" /></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
## Connections
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Action</th><th>How</th><th>Preview</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Create a connection</td>
|
|
<td>Drag from output handle to input handle</td>
|
|
<td><ActionVideo src="quick-reference/connect-blocks.mp4" alt="Connect blocks" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Delete a connection</td>
|
|
<td>Click edge to select → `Delete` key</td>
|
|
<td><ActionVideo src="quick-reference/delete-connection.mp4" alt="Delete connection" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Use output in another block</td>
|
|
<td>Drag connection tag into input field</td>
|
|
<td><ActionVideo src="quick-reference/connection-tag.mp4" alt="Use connection tag" /></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
## Panels & Views
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Action</th><th>How</th><th>Preview</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Search toolbar</td>
|
|
<td>`Mod+F`</td>
|
|
<td><ActionVideo src="quick-reference/search-toolbar.mp4" alt="Search toolbar" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Search everything</td>
|
|
<td>`Mod+K`</td>
|
|
<td><ActionImage src="/static/quick-reference/search-everything.png" alt="Search everything" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Toggle manual mode</td>
|
|
<td>Click toggle button to switch between manual and selector</td>
|
|
<td><ActionImage src="/static/quick-reference/toggle-manual-mode.png" alt="Toggle manual mode" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Collapse/expand sidebar</td>
|
|
<td>Click collapse button on sidebar</td>
|
|
<td><ActionVideo src="quick-reference/collapse-sidebar.mp4" alt="Collapse sidebar" /></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
## Running & Testing
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Action</th><th>How</th><th>Preview</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Run workflow</td>
|
|
<td>Click Run Workflow button or `Mod+Enter`</td>
|
|
<td><ActionImage src="/static/quick-reference/run-workflow.png" alt="Run workflow" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Stop workflow</td>
|
|
<td>Click Stop button or `Mod+Enter` while running</td>
|
|
<td><ActionImage src="/static/quick-reference/stop-workflow.png" alt="Stop workflow" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Test with chat</td>
|
|
<td>Use Chat panel on the right side</td>
|
|
<td><ActionImage src="/static/quick-reference/test-chat.png" alt="Test with chat" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Select output to view</td>
|
|
<td>Click dropdown in Chat panel → Select block output</td>
|
|
<td><ActionImage src="/static/quick-reference/output-select.png" alt="Select output to view" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Clear chat history</td>
|
|
<td>Click clear button in Chat panel</td>
|
|
<td><ActionImage src="/static/quick-reference/clear-chat.png" alt="Clear chat history" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Run from block</td>
|
|
<td>Hover block → Click play button, or right-click → **Run from block**</td>
|
|
<td><ActionImage src="/static/quick-reference/run-from-block.png" alt="Run from block" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Run until block</td>
|
|
<td>Right-click block → **Run until block**</td>
|
|
<td><ActionImage src="/static/quick-reference/run-until-block.png" alt="Run until block" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>View execution logs</td>
|
|
<td>Open terminal panel at bottom, or `Mod+L`</td>
|
|
<td><ActionImage src="/static/quick-reference/terminal.png" alt="Execution logs terminal" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Filter logs</td>
|
|
<td>Click filter icon in terminal → Filter by block or status</td>
|
|
<td><ActionImage src="/static/quick-reference/filter-block.png" alt="Filter logs by block" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Search logs</td>
|
|
<td>Use search field in terminal or right-click log entry → **Search**</td>
|
|
<td><ActionImage src="/static/quick-reference/terminal-search.png" alt="Search logs" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Copy log entry</td>
|
|
<td>Clipboard Icon or Right-click log entry → **Copy**</td>
|
|
<td><ActionImage src="/static/quick-reference/copy-log.png" alt="Copy log entry" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Clear terminal</td>
|
|
<td>Trash icon or `Mod+D`</td>
|
|
<td><ActionImage src="/static/quick-reference/clear-terminal.png" alt="Clear terminal" /></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
## Deployment
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Action</th><th>How</th><th>Preview</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Deploy a workflow</td>
|
|
<td>Click **Deploy** button in panel</td>
|
|
<td><ActionImage src="/static/quick-reference/deploy.png" alt="Deploy workflow" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Update deployment</td>
|
|
<td>Click **Update** when changes are detected</td>
|
|
<td><ActionImage src="/static/quick-reference/update-deployment.png" alt="Update deployment" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>View deployment status</td>
|
|
<td>Check status indicator (Live/Update/Deploy) in Deploy tab</td>
|
|
<td><ActionImage src="/static/quick-reference/view-deployment.png" alt="View deployment status" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Revert deployment</td>
|
|
<td>Access previous versions in Deploy tab → **Promote to live**</td>
|
|
<td><ActionImage src="/static/quick-reference/promote-deployment.png" alt="Promote deployment to live" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Add version description</td>
|
|
<td>Deploy tab → Click description icon → Add or generate description</td>
|
|
<td><ActionVideo src="quick-reference/deployment-description.mp4" alt="Add deployment version description" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Copy API endpoint</td>
|
|
<td>Deploy tab → API → Copy API cURL</td>
|
|
<td><ActionImage src="/static/quick-reference/copy-api.png" alt="Copy API endpoint" /></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
## Variables
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Action</th><th>How</th><th>Preview</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Add / Edit / Delete workflow variable</td>
|
|
<td>Panel -> Variables -> **Add Variable**, click to edit, or delete icon</td>
|
|
<td><ActionImage src="/static/quick-reference/variables.png" alt="Variables panel" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Add environment variable</td>
|
|
<td>Settings → **Environment Variables** → **Add**</td>
|
|
<td><ActionImage src="/static/quick-reference/add-env-variable.png" alt="Add environment variable" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Reference a workflow variable</td>
|
|
<td>Use `<blockName.itemName>` syntax in block inputs</td>
|
|
<td><ActionImage src="/static/quick-reference/variable-reference.png" alt="Reference workflow variable" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Reference an environment variable</td>
|
|
<td>Use `{{ENV_VAR}}` syntax in block inputs</td>
|
|
<td><ActionImage src="/static/quick-reference/env-variable-reference.png" alt="Reference environment variable" /></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|