This commit is contained in:
Siddharth Ganesan
2026-01-30 17:01:15 -08:00
parent f00c710d58
commit c9e182216e
2 changed files with 31 additions and 5 deletions

View File

@@ -202,6 +202,9 @@ export const sseHandlers: Record<string, SSEHandler> = {
// Respond tools are internal to copilot's subagent system - skip execution
// The copilot backend handles these internally to signal subagent completion
if (RESPOND_TOOL_SET.has(toolName)) {
toolCall.status = 'success'
toolCall.endTime = Date.now()
toolCall.result = { success: true, output: 'Internal respond tool - handled by copilot backend' }
return
}
@@ -354,6 +357,9 @@ export const subAgentHandlers: Record<string, SSEHandler> = {
// Respond tools are internal to copilot's subagent system - skip execution
if (RESPOND_TOOL_SET.has(toolName)) {
toolCall.status = 'success'
toolCall.endTime = Date.now()
toolCall.result = { success: true, output: 'Internal respond tool - handled by copilot backend' }
return
}

View File

@@ -8,6 +8,7 @@ import { validateSelectorIds } from '@/lib/copilot/validation/selector-validator
import type { PermissionGroupConfig } from '@/lib/permission-groups/types'
import { getBlockOutputs } from '@/lib/workflows/blocks/block-outputs'
import { extractAndPersistCustomTools } from '@/lib/workflows/persistence/custom-tools-persistence'
import { applyAutoLayout } from '@/lib/workflows/autolayout'
import {
loadWorkflowFromNormalizedTables,
saveWorkflowToNormalizedTables,
@@ -3072,11 +3073,30 @@ export const editWorkflowServerTool: BaseServerTool<EditWorkflowParams, any> = {
// Persist the workflow state to the database
const finalWorkflowState = validation.sanitizedState || modifiedWorkflowState
// Apply autolayout to position blocks properly
const layoutResult = applyAutoLayout(finalWorkflowState.blocks, finalWorkflowState.edges, {
horizontalSpacing: 250,
verticalSpacing: 100,
padding: { x: 100, y: 100 },
})
const layoutedBlocks = layoutResult.success && layoutResult.blocks
? layoutResult.blocks
: finalWorkflowState.blocks
if (!layoutResult.success) {
logger.warn('Autolayout failed, using default positions', {
workflowId,
error: layoutResult.error,
})
}
const workflowStateForDb = {
blocks: finalWorkflowState.blocks,
blocks: layoutedBlocks,
edges: finalWorkflowState.edges,
loops: generateLoopBlocks(finalWorkflowState.blocks as any),
parallels: generateParallelBlocks(finalWorkflowState.blocks as any),
loops: generateLoopBlocks(layoutedBlocks as any),
parallels: generateParallelBlocks(layoutedBlocks as any),
lastSaved: Date.now(),
isDeployed: false,
}
@@ -3101,10 +3121,10 @@ export const editWorkflowServerTool: BaseServerTool<EditWorkflowParams, any> = {
logger.info('Workflow state persisted to database', { workflowId })
// Return the modified workflow state for the client to convert to YAML if needed
// Return the modified workflow state with autolayout applied
return {
success: true,
workflowState: validation.sanitizedState || modifiedWorkflowState,
workflowState: { ...finalWorkflowState, blocks: layoutedBlocks },
// Include input validation errors so the LLM can see what was rejected
...(inputErrors && {
inputValidationErrors: inputErrors,