centaurus-cli 2.9.3 → 2.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/cli-adapter.d.ts +74 -10
  2. package/dist/cli-adapter.d.ts.map +1 -1
  3. package/dist/cli-adapter.js +898 -244
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/commands/CommandParser.d.ts +1 -1
  6. package/dist/commands/CommandParser.d.ts.map +1 -1
  7. package/dist/commands/CommandParser.js +113 -0
  8. package/dist/commands/CommandParser.js.map +1 -1
  9. package/dist/config/slash-commands.d.ts +2 -0
  10. package/dist/config/slash-commands.d.ts.map +1 -1
  11. package/dist/config/slash-commands.js +28 -0
  12. package/dist/config/slash-commands.js.map +1 -1
  13. package/dist/context/context-manager.d.ts +7 -1
  14. package/dist/context/context-manager.d.ts.map +1 -1
  15. package/dist/context/context-manager.js +14 -1
  16. package/dist/context/context-manager.js.map +1 -1
  17. package/dist/context/handlers/docker-handler.d.ts +11 -0
  18. package/dist/context/handlers/docker-handler.d.ts.map +1 -1
  19. package/dist/context/handlers/docker-handler.js +159 -14
  20. package/dist/context/handlers/docker-handler.js.map +1 -1
  21. package/dist/context/handlers/ssh-handler.d.ts +20 -0
  22. package/dist/context/handlers/ssh-handler.d.ts.map +1 -1
  23. package/dist/context/handlers/ssh-handler.js +129 -1
  24. package/dist/context/handlers/ssh-handler.js.map +1 -1
  25. package/dist/context/subshell-handler.d.ts +15 -0
  26. package/dist/context/subshell-handler.d.ts.map +1 -1
  27. package/dist/index.js +10 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/services/ai-service-client.d.ts.map +1 -1
  30. package/dist/services/ai-service-client.js +33 -11
  31. package/dist/services/ai-service-client.js.map +1 -1
  32. package/dist/services/api-client.js +1 -1
  33. package/dist/services/api-client.js.map +1 -1
  34. package/dist/services/local-chat-storage.d.ts +3 -1
  35. package/dist/services/local-chat-storage.d.ts.map +1 -1
  36. package/dist/services/local-chat-storage.js +8 -3
  37. package/dist/services/local-chat-storage.js.map +1 -1
  38. package/dist/services/warpify-detector.d.ts +43 -0
  39. package/dist/services/warpify-detector.d.ts.map +1 -0
  40. package/dist/services/warpify-detector.js +203 -0
  41. package/dist/services/warpify-detector.js.map +1 -0
  42. package/dist/services/workflow-storage.d.ts +72 -0
  43. package/dist/services/workflow-storage.d.ts.map +1 -0
  44. package/dist/services/workflow-storage.js +239 -0
  45. package/dist/services/workflow-storage.js.map +1 -0
  46. package/dist/tools/command.d.ts.map +1 -1
  47. package/dist/tools/command.js +106 -38
  48. package/dist/tools/command.js.map +1 -1
  49. package/dist/tools/enter-remote-session.d.ts +13 -0
  50. package/dist/tools/enter-remote-session.d.ts.map +1 -0
  51. package/dist/tools/enter-remote-session.js +226 -0
  52. package/dist/tools/enter-remote-session.js.map +1 -0
  53. package/dist/tools/find-files.d.ts.map +1 -1
  54. package/dist/tools/find-files.js +9 -2
  55. package/dist/tools/find-files.js.map +1 -1
  56. package/dist/tools/grep-search.d.ts +104 -31
  57. package/dist/tools/grep-search.d.ts.map +1 -1
  58. package/dist/tools/grep-search.js +779 -431
  59. package/dist/tools/grep-search.js.map +1 -1
  60. package/dist/tools/workflow-tool.d.ts +11 -0
  61. package/dist/tools/workflow-tool.d.ts.map +1 -0
  62. package/dist/tools/workflow-tool.js +87 -0
  63. package/dist/tools/workflow-tool.js.map +1 -0
  64. package/dist/types/workflow.d.ts +110 -0
  65. package/dist/types/workflow.d.ts.map +1 -0
  66. package/dist/types/workflow.js +8 -0
  67. package/dist/types/workflow.js.map +1 -0
  68. package/dist/ui/components/App.d.ts +10 -1
  69. package/dist/ui/components/App.d.ts.map +1 -1
  70. package/dist/ui/components/App.js +135 -8
  71. package/dist/ui/components/App.js.map +1 -1
  72. package/dist/ui/components/Breadcrumbs.d.ts +4 -3
  73. package/dist/ui/components/Breadcrumbs.d.ts.map +1 -1
  74. package/dist/ui/components/Breadcrumbs.js +80 -54
  75. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  76. package/dist/ui/components/ConnectionStatusMessage.js +2 -2
  77. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  78. package/dist/ui/components/InputBox.d.ts +1 -0
  79. package/dist/ui/components/InputBox.d.ts.map +1 -1
  80. package/dist/ui/components/InputBox.js +226 -19
  81. package/dist/ui/components/InputBox.js.map +1 -1
  82. package/dist/ui/components/InteractiveShell.d.ts +4 -0
  83. package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
  84. package/dist/ui/components/InteractiveShell.js +52 -15
  85. package/dist/ui/components/InteractiveShell.js.map +1 -1
  86. package/dist/ui/components/KeyboardHelp.d.ts.map +1 -1
  87. package/dist/ui/components/KeyboardHelp.js +14 -6
  88. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  89. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  90. package/dist/ui/components/ToolExecutionMessage.js +165 -27
  91. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  92. package/dist/ui/components/WorkflowCreatorScreen.d.ts +25 -0
  93. package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +1 -0
  94. package/dist/ui/components/WorkflowCreatorScreen.js +164 -0
  95. package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -0
  96. package/dist/utils/ansi-encoder.d.ts.map +1 -1
  97. package/dist/utils/ansi-encoder.js +7 -0
  98. package/dist/utils/ansi-encoder.js.map +1 -1
  99. package/dist/utils/editor-utils.d.ts +9 -0
  100. package/dist/utils/editor-utils.d.ts.map +1 -1
  101. package/dist/utils/editor-utils.js +105 -0
  102. package/dist/utils/editor-utils.js.map +1 -1
  103. package/dist/utils/input-classifier.d.ts.map +1 -1
  104. package/dist/utils/input-classifier.js +2 -1
  105. package/dist/utils/input-classifier.js.map +1 -1
  106. package/dist/utils/terminal-output.d.ts +3 -1
  107. package/dist/utils/terminal-output.d.ts.map +1 -1
  108. package/dist/utils/terminal-output.js +138 -157
  109. package/dist/utils/terminal-output.js.map +1 -1
  110. package/package.json +1 -1
@@ -20,19 +20,21 @@ import { PasswordPrompt } from './PasswordPrompt.js';
20
20
  import { VersionUpdatePrompt } from './VersionUpdatePrompt.js';
21
21
  import { InteractiveShell } from './InteractiveShell.js';
22
22
  import { checkForUpdates } from '../../utils/version-checker.js';
23
- import { runInteractiveEditor, runWSLEditor, runDockerEditor, runSSHEditor } from '../../utils/editor-utils.js';
23
+ import { runInteractiveEditor, runWSLEditor, runDockerEditor, runSSHEditor, runNestedDockerSSHEditor } from '../../utils/editor-utils.js';
24
24
  import { DetailedPlanReviewScreen } from './DetailedPlanReviewScreen.js';
25
25
  import { TaskCompletedMessage } from './TaskCompletedMessage.js';
26
26
  import { PlanAcceptedMessage } from './PlanAcceptedMessage.js';
27
27
  import { MCPAddScreen } from './MCPAddScreen.js';
28
28
  import { MCPServerListScreen } from './MCPServerListScreen.js';
29
29
  import { MCPListScreen } from './MCPListScreen.js';
30
+ import { WorkflowCreatorScreen } from './WorkflowCreatorScreen.js';
30
31
  import { processTerminalOutput } from '../../utils/terminal-output.js';
31
32
  import { BackgroundTaskManager } from '../../services/background-task-manager.js';
32
33
  import { MonitorModeAIPanel } from './MonitorModeAIPanel.js';
33
34
  import { detectInputRequirement, extractPromptContext, getInputTypeDescription } from '../../services/input-requirement-detector.js';
34
35
  import { ShellInputAgent } from '../../services/shell-input-agent.js';
35
36
  import { InputDetectionAgent } from '../../services/input-detection-agent.js';
37
+ import { detectWarpifySession, getSessionDescription } from '../../services/warpify-detector.js';
36
38
  import { useConnectivity } from '../../hooks/useConnectivity.js';
37
39
  import { apiClient } from '../../services/api-client.js';
38
40
  import { conversationManager } from '../../services/conversation-manager.js';
@@ -147,7 +149,7 @@ const RenameInputScreen = ({ currentTitle, onRename, onCancel }) => {
147
149
  React.createElement(Box, { marginTop: 1 },
148
150
  React.createElement(Text, { dimColor: true }, "Press Enter to save, ESC to cancel"))));
149
151
  };
150
- export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode, onResponseReceived, onDirectMessage, onResponseStream, onClearStreamedResponse, onThoughtStream, onThoughtComplete, onPickerSetup, onPickerSelection, onToolExecutionUpdate, onToolApprovalRequest, onToolStreamingOutput, onPlanModeChange, onPlanApprovalRequest, onPlanCreated, onTaskCompleted, onCommandModeChange, onToggleCommandMode, onBackgroundModeChange, onToggleBackgroundMode, onBackgroundTaskCountChange, onSubAgentCountChange, onSetAutoModeSetup, onCwdChange, onModelChange, onSubshellContextChange, onPasswordRequest, onShellInput, onShellSignal, onKillProcess, onInteractiveEditorMode, onConnectionStatusUpdate, onTokenCountUpdate, onContextLimitReached, onChatPickerSetup, onChatPickerSelection, onChatDeletePickerSetup, onChatDeletePickerSelection, onChatListSetup, onChatRenamePickerSetup, onChatRename, onRestoreMessagesSetup, onUIMessageHistoryUpdate, onBackgroundTaskListSetup, onBackgroundTaskSelection, onBackgroundTaskCancelSetup, onBackgroundTaskCancel, onBackgroundTaskViewSetup, onSessionQuotaUpdate, onMCPAddScreenSetup, onMCPRemoveScreenSetup, onMCPEnableScreenSetup, onMCPDisableScreenSetup, onMCPListScreenSetup, onMCPAddServer, onMCPRemoveServer, onMCPEnableServer, onMCPDisableServer, onMCPValidateConfig, onPromptAnswered, getMainConversation }) => {
152
+ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode, onResponseReceived, onDirectMessage, onResponseStream, onClearStreamedResponse, onThoughtStream, onThoughtComplete, onPickerSetup, onPickerSelection, onToolExecutionUpdate, onToolApprovalRequest, onToolStreamingOutput, onPlanModeChange, onPlanApprovalRequest, onPlanCreated, onTaskCompleted, onCommandModeChange, onToggleCommandMode, onBackgroundModeChange, onToggleBackgroundMode, onBackgroundTaskCountChange, onSubAgentCountChange, onSetAutoModeSetup, onCwdChange, onModelChange, onSubshellContextChange, onPasswordRequest, onShellInput, onShellSignal, onKillProcess, onInteractiveEditorMode, onConnectionStatusUpdate, onTokenCountUpdate, onContextLimitReached, onChatPickerSetup, onChatPickerSelection, onChatDeletePickerSetup, onChatDeletePickerSelection, onChatListSetup, onChatRenamePickerSetup, onChatRename, onRestoreMessagesSetup, onUIMessageHistoryUpdate, onBackgroundTaskListSetup, onBackgroundTaskSelection, onBackgroundTaskCancelSetup, onBackgroundTaskCancel, onBackgroundTaskViewSetup, onSessionQuotaUpdate, onMCPAddScreenSetup, onMCPRemoveScreenSetup, onMCPEnableScreenSetup, onMCPDisableScreenSetup, onMCPListScreenSetup, onMCPAddServer, onMCPRemoveServer, onMCPEnableServer, onMCPDisableServer, onMCPValidateConfig, onPromptAnswered, getMainConversation, onWarpifySession, onWorkflowCreatorSetup, onWorkflowSave }) => {
151
153
  const { exit } = useApp();
152
154
  // Calculate limit for paginated lists (75% of terminal height)
153
155
  const listLimit = Math.max(5, Math.floor((process.stdout.rows || 24) * 0.75));
@@ -206,6 +208,7 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
206
208
  showExitWarning: false,
207
209
  commandHistory: [],
208
210
  subshellContext: undefined,
211
+ subshellContextStack: undefined,
209
212
  versionInfo: undefined,
210
213
  checkingVersion: true,
211
214
  isAiWorking: false,
@@ -1043,6 +1046,18 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1043
1046
  }));
1044
1047
  });
1045
1048
  }, []); // Empty dependency array - only register once
1049
+ // Set up callback for Workflow Creator screen
1050
+ React.useEffect(() => {
1051
+ onWorkflowCreatorSetup((initialSteps) => {
1052
+ clearScreen();
1053
+ setState(prev => ({
1054
+ ...prev,
1055
+ screen: 'workflow-creator',
1056
+ isLoading: false,
1057
+ workflowCreatorInitialSteps: initialSteps
1058
+ }));
1059
+ });
1060
+ }, []); // Empty dependency array - only register once
1046
1061
  // Set up callback for MCP Remove screen
1047
1062
  React.useEffect(() => {
1048
1063
  onMCPRemoveScreenSetup((servers) => {
@@ -1690,10 +1705,11 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1690
1705
  }, [onModelChange]);
1691
1706
  // Set up callback to receive subshell context changes
1692
1707
  React.useEffect(() => {
1693
- onSubshellContextChange((context) => {
1708
+ onSubshellContextChange((context, stack) => {
1694
1709
  setState(prev => ({
1695
1710
  ...prev,
1696
- subshellContext: context
1711
+ subshellContext: context,
1712
+ subshellContextStack: stack
1697
1713
  }));
1698
1714
  });
1699
1715
  }, [onSubshellContextChange]);
@@ -1852,7 +1868,7 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1852
1868
  // Ref to hold the current editor process for cleanup
1853
1869
  const editorProcessRef = React.useRef(null);
1854
1870
  React.useEffect(() => {
1855
- onInteractiveEditorMode((active, command, cwd, remoteContext) => {
1871
+ onInteractiveEditorMode((active, command, cwd, remoteContext, parentContext) => {
1856
1872
  if (active && command && cwd) {
1857
1873
  // Enter interactive editor mode
1858
1874
  setState(prev => ({ ...prev, isInteractiveEditorMode: true }));
@@ -1877,9 +1893,23 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1877
1893
  editorProcessRef.current = runWSLEditor(distribution, command, cwd, handleEditorExit);
1878
1894
  }
1879
1895
  else if (remoteContext.type === 'docker') {
1880
- // Docker context: use Docker editor with container ID
1896
+ // Docker context: check if nested inside SSH or local
1881
1897
  const containerId = remoteContext.metadata?.containerId || '';
1882
- editorProcessRef.current = runDockerEditor(containerId, command, cwd, handleEditorExit);
1898
+ if (parentContext && parentContext.type === 'ssh') {
1899
+ // Nested Docker inside SSH: use SSH-tunneled editor
1900
+ const sshClient = parentContext.handler?.client;
1901
+ if (sshClient) {
1902
+ editorProcessRef.current = runNestedDockerSSHEditor(sshClient, containerId, command, cwd, handleEditorExit);
1903
+ }
1904
+ else {
1905
+ logError('SSH client not available for nested Docker editor', new Error('No SSH client'));
1906
+ setState(prev => ({ ...prev, isInteractiveEditorMode: false }));
1907
+ }
1908
+ }
1909
+ else {
1910
+ // Local Docker: use standard interactive editor
1911
+ editorProcessRef.current = runDockerEditor(containerId, command, cwd, handleEditorExit);
1912
+ }
1883
1913
  }
1884
1914
  else if (remoteContext.type === 'ssh') {
1885
1915
  // SSH context: use SSH editor with client
@@ -2456,6 +2486,82 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
2456
2486
  ShellInputAgent.terminateSession(shellId);
2457
2487
  quickLog(`[${new Date().toISOString()}] [AgentControl] Terminated ShellInputAgent session for ${shellId}\n`);
2458
2488
  }
2489
+ }, onWarpifySession: async () => {
2490
+ // Warpify: Detect if there's an active remote session and establish ssh2 connection
2491
+ const shellCommand = state.shellState?.command || '';
2492
+ const currentOutput = state.shellState?.output || '';
2493
+ const session = detectWarpifySession(shellCommand, currentOutput);
2494
+ quickLog(`[${new Date().toISOString()}] [Warpify] Command: "${shellCommand}", Detected: ${JSON.stringify(session)}\n`);
2495
+ if (session.type === 'none') {
2496
+ // No remote session detected - show message briefly
2497
+ setState(prev => ({
2498
+ ...prev,
2499
+ connectionStatus: {
2500
+ type: 'ssh',
2501
+ status: 'error',
2502
+ error: 'No remote session detected. Enter an SSH/WSL/Docker session first.'
2503
+ }
2504
+ }));
2505
+ setTimeout(() => {
2506
+ setState(prev => ({
2507
+ ...prev,
2508
+ connectionStatus: undefined
2509
+ }));
2510
+ }, 3000);
2511
+ return;
2512
+ }
2513
+ // Remote session detected - warpify it!
2514
+ const description = getSessionDescription(session);
2515
+ quickLog(`[${new Date().toISOString()}] [Warpify] Warpifying: ${description}\n`);
2516
+ // Terminate the PTY session (we'll use ssh2 handler instead)
2517
+ onShellSignal('SIGTERM');
2518
+ // Capture history commands
2519
+ const historyMessages = [];
2520
+ // 1. Add the command the user typed (e.g., "ssh user@host")
2521
+ if (shellCommand) {
2522
+ historyMessages.push({
2523
+ id: `warpify-cmd-${Date.now()}`,
2524
+ role: 'user',
2525
+ content: shellCommand,
2526
+ timestamp: new Date(),
2527
+ isCommandMode: false // Treat as a normal chat message for history
2528
+ });
2529
+ }
2530
+ // 2. Add the terminal output (e.g., login banner, password prompt output)
2531
+ if (currentOutput && currentOutput.trim().length > 0) {
2532
+ historyMessages.push({
2533
+ id: `warpify-out-${Date.now()}`,
2534
+ role: 'tool', // Use 'tool' role to mimic command execution output
2535
+ content: '',
2536
+ timestamp: new Date(),
2537
+ toolExecution: {
2538
+ toolName: 'execute_command',
2539
+ status: 'completed',
2540
+ result: currentOutput, // This contains the PTY output including ANSI codes
2541
+ arguments: {
2542
+ command: shellCommand,
2543
+ isPty: true
2544
+ }
2545
+ }
2546
+ });
2547
+ }
2548
+ // Clear the shell state AND append the history messages
2549
+ // Also reset isAiWorking to prevent "Boosting..." spinner from appearing
2550
+ setState(prev => ({
2551
+ ...prev,
2552
+ messageHistory: [...prev.messageHistory, ...historyMessages],
2553
+ shellState: undefined,
2554
+ isAiWorking: false
2555
+ }));
2556
+ // Clear screen
2557
+ clearScreen();
2558
+ // Establish proper ssh2 connection via cli-adapter
2559
+ // This will prompt for password and set up full SSH functionality
2560
+ const success = await onWarpifySession(shellCommand, session.type, session.connectionString);
2561
+ if (!success) {
2562
+ // Connection failed - error already shown by cli.warpifySession
2563
+ quickLog(`[${new Date().toISOString()}] [Warpify] Failed to establish ssh2 connection\n`);
2564
+ }
2459
2565
  } })),
2460
2566
  state.shellState?.isAgentControlled && state.shellState?.isFocused && state.shellState?.isRunning && (React.createElement(MonitorModeAIPanel, { messages: [
2461
2567
  ...(state.shellState.monitoringMessages || []),
@@ -2482,7 +2588,7 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
2482
2588
  // Clear preserved input on submit
2483
2589
  preservedInputTextRef.current = '';
2484
2590
  handleSubmit(value, clipboardImages);
2485
- }, autoAcceptMode: state.autoAcceptMode, model: state.currentModel, planMode: state.planMode, commandMode: state.commandMode, backgroundMode: state.backgroundMode, currentWorkingDirectory: state.currentWorkingDirectory, commandHistory: state.commandHistory, onToggleAutoAccept: handleToggleAutoAccept, onToggleCommandMode: onToggleCommandMode, onToggleBackgroundMode: onToggleBackgroundMode, isActive: true, subshellContext: state.subshellContext, currentTokens: state.currentTokens, maxTokens: state.maxTokens, contextLimitReached: state.contextLimitReached, isShellRunning: state.shellState?.isRunning, backgroundTaskCount: state.backgroundTaskCount, subAgentCount: state.subAgentCount, initialValue: preservedInputTextRef.current, onValueChange: handleInputValueChange, onSetAutoModeSetup: (callback) => {
2591
+ }, autoAcceptMode: state.autoAcceptMode, model: state.currentModel, planMode: state.planMode, commandMode: state.commandMode, backgroundMode: state.backgroundMode, currentWorkingDirectory: state.currentWorkingDirectory, commandHistory: state.commandHistory, onToggleAutoAccept: handleToggleAutoAccept, onToggleCommandMode: onToggleCommandMode, onToggleBackgroundMode: onToggleBackgroundMode, isActive: true, subshellContext: state.subshellContext, subshellContextStack: state.subshellContextStack, currentTokens: state.currentTokens, maxTokens: state.maxTokens, contextLimitReached: state.contextLimitReached, isShellRunning: state.shellState?.isRunning, backgroundTaskCount: state.backgroundTaskCount, subAgentCount: state.subAgentCount, initialValue: preservedInputTextRef.current, onValueChange: handleInputValueChange, onSetAutoModeSetup: (callback) => {
2486
2592
  setAutoModeCallbackRef.current = callback;
2487
2593
  }, sessionQuotaExhausted: state.sessionQuotaExhausted, sessionQuotaTimeRemaining: state.sessionQuotaTimeRemaining, aiAutoSuggestEnabled: state.aiAutoSuggest, sessionCommands: sessionCommands }))),
2488
2594
  state.showExitWarning && (React.createElement(Box, { marginTop: 1 },
@@ -2978,6 +3084,27 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
2978
3084
  screen: 'chat',
2979
3085
  mcpListData: undefined
2980
3086
  }));
3087
+ } })),
3088
+ state.screen === 'workflow-creator' && (React.createElement(WorkflowCreatorScreen, { initialSteps: state.workflowCreatorInitialSteps, onSave: (name, steps, description) => {
3089
+ onWorkflowSave(name, steps, description);
3090
+ const successMessage = {
3091
+ id: `workflow-created-${Date.now()}`,
3092
+ role: 'system',
3093
+ content: `✅ Workflow "${name}" saved successfully with ${steps.length} steps!\n\nRun it with: /workflow run ${name}`,
3094
+ timestamp: new Date()
3095
+ };
3096
+ setState(prev => ({
3097
+ ...prev,
3098
+ screen: 'chat',
3099
+ messageHistory: [...prev.messageHistory, successMessage],
3100
+ workflowCreatorInitialSteps: undefined // Clear initial steps
3101
+ }));
3102
+ }, onCancel: () => {
3103
+ setState(prev => ({
3104
+ ...prev,
3105
+ screen: 'chat',
3106
+ workflowCreatorInitialSteps: undefined // Clear initial steps
3107
+ }));
2981
3108
  } }))));
2982
3109
  };
2983
3110
  //# sourceMappingURL=App.js.map