fix(revert-deployed): correctly revert to deployed state as unit op using separate endpoint#633
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
1 Skipped Deployment
|
There was a problem hiding this comment.
PR Summary
Implements a robust workflow revert system with real-time collaboration support across the socket server and client components.
- Added new API endpoint
apps/sim/app/api/workflows/[id]/revert-to-deployed/route.tsto handle workflow state reversion with proper validation - Enhanced
RoomManagerinapps/sim/socket-server/rooms/manager.tswithhandleWorkflowRevertmethod for real-time client notifications - Refactored
revertToDeployedStateinapps/sim/stores/workflows/workflow/store.tsto handle async operations and API persistence - Added socket event handlers in
apps/sim/contexts/socket-context.tsxandapps/sim/hooks/use-collaborative-workflow.tsto maintain state sync across clients
6 files reviewed, 7 comments
Edit PR Review Bot Settings | Greptile
| let body = '' | ||
| req.on('data', (chunk) => { | ||
| body += chunk.toString() | ||
| }) |
There was a problem hiding this comment.
style: Consider using a stream buffer size limit to prevent memory issues with large payloads
| let body = '' | |
| req.on('data', (chunk) => { | |
| body += chunk.toString() | |
| }) | |
| const chunks: Buffer[] = [] | |
| let totalSize = 0 | |
| const MAX_SIZE = 1024 * 1024 // 1MB limit | |
| req.on('data', (chunk) => { | |
| totalSize += chunk.length | |
| if (totalSize > MAX_SIZE) { | |
| req.destroy() | |
| return | |
| } | |
| chunks.push(Buffer.from(chunk)) | |
| }) |
| timestamp, | ||
| }) | ||
|
|
||
| room.lastModified = timestamp |
There was a problem hiding this comment.
logic: Potential race condition: timestamp should be checked against room.lastModified before updating
| workflowDeleted?: (data: any) => void | ||
| workflowReverted?: (data: any) => void |
There was a problem hiding this comment.
style: Consider adding TypeScript interface for the workflowReverted event data to maintain type safety across the application.
| workflowDeleted?: (data: any) => void | |
| workflowReverted?: (data: any) => void | |
| workflowDeleted?: (data: { workflowId: string }) => void | |
| workflowReverted?: (data: { workflowId: string; version: string }) => void |
| const blockState = block as any | ||
| subblockValues[blockId] = {} | ||
| Object.entries(blockState.subBlocks || {}).forEach(([subblockId, subblock]) => { | ||
| subblockValues[blockId][subblockId] = (subblock as any).value | ||
| }) | ||
| }) |
There was a problem hiding this comment.
style: Type assertion to 'any' should be avoided. Define proper types for block state.
| const saveResult = await saveWorkflowToNormalizedTables(id, { | ||
| blocks: deployedState.blocks, | ||
| edges: deployedState.edges, | ||
| loops: deployedState.loops || {}, | ||
| parallels: deployedState.parallels || {}, | ||
| lastSaved: Date.now(), | ||
| isDeployed: workflowData.isDeployed, | ||
| deployedAt: workflowData.deployedAt, | ||
| deploymentStatuses: deployedState.deploymentStatuses || {}, | ||
| hasActiveSchedule: deployedState.hasActiveSchedule || false, | ||
| hasActiveWebhook: deployedState.hasActiveWebhook || false, | ||
| }) |
There was a problem hiding this comment.
style: Spread operator could simplify this object construction: {...deployedState, lastSaved: Date.now()}
| const deployedState = workflowData.deployedState as WorkflowState | ||
| if (!deployedState.blocks || !deployedState.edges) { |
There was a problem hiding this comment.
logic: Type assertion could be unsafe. Consider runtime type checking or zod schema validation
| // Notify socket server about the revert operation for real-time sync | ||
| try { | ||
| const socketServerUrl = process.env.SOCKET_SERVER_URL || 'http://localhost:3002' | ||
| await fetch(`${socketServerUrl}/api/workflow-reverted`, { | ||
| method: 'POST', | ||
| headers: { | ||
| 'Content-Type': 'application/json', | ||
| }, | ||
| body: JSON.stringify({ | ||
| workflowId: id, | ||
| timestamp: Date.now(), | ||
| }), | ||
| }) | ||
| logger.debug(`[${requestId}] Notified socket server about workflow revert: ${id}`) | ||
| } catch (socketError) { | ||
| // Don't fail the request if socket notification fails | ||
| logger.warn(`[${requestId}] Failed to notify socket server about revert:`, socketError) | ||
| } |
There was a problem hiding this comment.
style: Socket notification logic is complex enough to warrant extraction into separate function
|
✅ No security or compliance issues detected. Reviewed everything up to 0a9f16b. Security Overview
Detected Code Changes
Reply to this PR with |
* fix(sharing): fixed folders not appearing when sharing workflows (#616) * fix(sharing): fixed folders not appearing when sharing workflows * cleanup * fixed error case * fix(deletions): folder deletions were hanging + use cascade deletions throughout (#620) * use cascade deletion * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@vikhyaths-air.lan> * fix(envvars): t3-env standardization (#606) * chore: use t3-env as source of truth * chore: update mock env for failing tests * feat(enhanced logs): integration + log visualizer canvas (#618) * feat(logs): enhanced logging system with cleanup and theme fixes - Implement enhanced logging cleanup with S3 archival and retention policies - Fix error propagation in trace spans for manual executions - Add theme-aware styling for frozen canvas modal - Integrate enhanced logging system across all execution pathways - Add comprehensive trace span processing and iteration navigation - Fix boolean parameter types in enhanced logs API * add warning for old logs * fix lint * added cost for streaming outputs * fix overflow issue * fix lint * fix selection on closing sidebar * tooltips z index increase --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@vikhyaths-air.lan> Co-authored-by: Waleed Latif <walif6@gmail.com> * fix(frozen canvas): don't error if workflow state not available for migrated logs (#624) * fix(frozen canvas): don't error if workflow state not available for old logs * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@vikhyaths-air.lan> * fix(reddit): update to oauth endpoints (#627) * fix(reddit): change tool to use oauth token * fix lint * add contact info * Update apps/sim/tools/reddit/get_comments.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * Update apps/sim/tools/reddit/hot_posts.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * Update apps/sim/tools/reddit/get_posts.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * fix type error --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-MacBook-Air.local> Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * feat(tools): added reordering of tool calls in agent tool input (#629) * added tool re-ordering in agent block * styling * fix(oauth): fix oauth to use correct subblock value setter + remove unused local storage code (#628) * fix(oauth): fixed oauth state not persisting in credential selector * remove unused local storage code for oauth * fix lint * selector clearance issue fix * fix typing issue * fix lint * remove cred id from logs * fix lint * works --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> * fix(mem-deletion): hard deletion of memory (#622) * fix: memory deletion * fix: bun run lint --------- Co-authored-by: Adam Gough <adamgough@Adams-MacBook-Pro.local> * feat(build): added turbopack builds to prod (#630) * added turbopack to prod builds * block access to sourcemaps * revert changes to docs * fix(docs): fixed broken docs links (#632) * fix(resp format): non-json input was crashing (#631) * fix response format non-json input crash bug * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> * fix(revert-deployed): correctly revert to deployed state as unit op using separate endpoint (#633) * fix(revert-deployed): revert deployed functionality with separate endpoint * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> * fix(dropdown): simplify & fix tag dropdown for parallel & loop blocks (#634) * fix(dropdown): simplify & fix tag dropdown for parallel & loop blocks * fixed build * fix(response-format): add response format to tag dropdown, chat panel, and chat client (#637) * add response format structure to tag dropdown * handle response format outputs for chat client and chat panel, implemented the response format handling for streamed responses * cleanup * fix(sockets-server-disconnection): on reconnect force sync store to db (#638) * keep warning until refresh * works * fix sockets server sync on reconnection * infinite reconn attempts * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> * fix(build): fixed build * Revert "fix(sockets-server-disconnection): on reconnect force sync store to d…" (#640) This reverts commit 6dc8b17. * fix(sockets): force user to refresh on disconnect in order to mkae changes, add read-only offline mode (#641) * force user to refresh on disconnect in order to mkae changes, add read-only offline mode * remove unused hook * style * update tooltip msg * remove unnecessary useMemo around log * fix(sockets): added debouncing for sub-block values to prevent overloading socket server, fixed persistence issue during streaming back from LLM response format, removed unused events (#642) * fix(sockets): added debouncing for sub-block values to prevent overloading socket server, fixed persistence issue during streaming back from LLM response format, removed unused events * reuse existing isStreaming state for code block llm-generated response format --------- Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com> Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@vikhyaths-air.lan> Co-authored-by: Aditya Tripathi <aditya@climactic.co> Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-MacBook-Air.local> Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Adam Gough <77861281+aadamgough@users.noreply.github.com> Co-authored-by: Adam Gough <adamgough@Adams-MacBook-Pro.local>
…sing separate endpoint (simstudioai#633) * fix(revert-deployed): revert deployed functionality with separate endpoint * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net>
* fix(sharing): fixed folders not appearing when sharing workflows (simstudioai#616) * fix(sharing): fixed folders not appearing when sharing workflows * cleanup * fixed error case * fix(deletions): folder deletions were hanging + use cascade deletions throughout (simstudioai#620) * use cascade deletion * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@vikhyaths-air.lan> * fix(envvars): t3-env standardization (simstudioai#606) * chore: use t3-env as source of truth * chore: update mock env for failing tests * feat(enhanced logs): integration + log visualizer canvas (simstudioai#618) * feat(logs): enhanced logging system with cleanup and theme fixes - Implement enhanced logging cleanup with S3 archival and retention policies - Fix error propagation in trace spans for manual executions - Add theme-aware styling for frozen canvas modal - Integrate enhanced logging system across all execution pathways - Add comprehensive trace span processing and iteration navigation - Fix boolean parameter types in enhanced logs API * add warning for old logs * fix lint * added cost for streaming outputs * fix overflow issue * fix lint * fix selection on closing sidebar * tooltips z index increase --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@vikhyaths-air.lan> Co-authored-by: Waleed Latif <walif6@gmail.com> * fix(frozen canvas): don't error if workflow state not available for migrated logs (simstudioai#624) * fix(frozen canvas): don't error if workflow state not available for old logs * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@vikhyaths-air.lan> * fix(reddit): update to oauth endpoints (simstudioai#627) * fix(reddit): change tool to use oauth token * fix lint * add contact info * Update apps/sim/tools/reddit/get_comments.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * Update apps/sim/tools/reddit/hot_posts.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * Update apps/sim/tools/reddit/get_posts.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * fix type error --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-MacBook-Air.local> Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * feat(tools): added reordering of tool calls in agent tool input (simstudioai#629) * added tool re-ordering in agent block * styling * fix(oauth): fix oauth to use correct subblock value setter + remove unused local storage code (simstudioai#628) * fix(oauth): fixed oauth state not persisting in credential selector * remove unused local storage code for oauth * fix lint * selector clearance issue fix * fix typing issue * fix lint * remove cred id from logs * fix lint * works --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> * fix(mem-deletion): hard deletion of memory (simstudioai#622) * fix: memory deletion * fix: bun run lint --------- Co-authored-by: Adam Gough <adamgough@Adams-MacBook-Pro.local> * feat(build): added turbopack builds to prod (simstudioai#630) * added turbopack to prod builds * block access to sourcemaps * revert changes to docs * fix(docs): fixed broken docs links (simstudioai#632) * fix(resp format): non-json input was crashing (simstudioai#631) * fix response format non-json input crash bug * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> * fix(revert-deployed): correctly revert to deployed state as unit op using separate endpoint (simstudioai#633) * fix(revert-deployed): revert deployed functionality with separate endpoint * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> * fix(dropdown): simplify & fix tag dropdown for parallel & loop blocks (simstudioai#634) * fix(dropdown): simplify & fix tag dropdown for parallel & loop blocks * fixed build * fix(response-format): add response format to tag dropdown, chat panel, and chat client (simstudioai#637) * add response format structure to tag dropdown * handle response format outputs for chat client and chat panel, implemented the response format handling for streamed responses * cleanup * fix(sockets-server-disconnection): on reconnect force sync store to db (simstudioai#638) * keep warning until refresh * works * fix sockets server sync on reconnection * infinite reconn attempts * fix lint --------- Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> * fix(build): fixed build * Revert "fix(sockets-server-disconnection): on reconnect force sync store to d…" (simstudioai#640) This reverts commit 6dc8b17. * fix(sockets): force user to refresh on disconnect in order to mkae changes, add read-only offline mode (simstudioai#641) * force user to refresh on disconnect in order to mkae changes, add read-only offline mode * remove unused hook * style * update tooltip msg * remove unnecessary useMemo around log * fix(sockets): added debouncing for sub-block values to prevent overloading socket server, fixed persistence issue during streaming back from LLM response format, removed unused events (simstudioai#642) * fix(sockets): added debouncing for sub-block values to prevent overloading socket server, fixed persistence issue during streaming back from LLM response format, removed unused events * reuse existing isStreaming state for code block llm-generated response format --------- Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com> Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@vikhyaths-air.lan> Co-authored-by: Aditya Tripathi <aditya@climactic.co> Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-MacBook-Air.local> Co-authored-by: Vikhyath Mondreti <vikhyathmondreti@Vikhyaths-Air.attlocal.net> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Adam Gough <77861281+aadamgough@users.noreply.github.com> Co-authored-by: Adam Gough <adamgough@Adams-MacBook-Pro.local>
Description
Revert to deployed state was not working correctly, and was not informing the socket server accurately. This PR fixes that.
Type of change
How Has This Been Tested?
Screen.Recording.2025-07-07.at.9.44.12.PM.mov
Checklist:
bun run test)Security Considerations: