@genfeedai/workflow-ui 0.2.5 → 0.2.7

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 (66) hide show
  1. package/dist/canvas.mjs +19 -17
  2. package/dist/canvas.mjs.map +1 -0
  3. package/dist/{chunk-MGLAKMDP.mjs → chunk-2BHILUF7.mjs} +2 -0
  4. package/dist/chunk-2BHILUF7.mjs.map +1 -0
  5. package/dist/{chunk-U4QPE4CY.mjs → chunk-2C2AAXJP.mjs} +2 -0
  6. package/dist/chunk-2C2AAXJP.mjs.map +1 -0
  7. package/dist/{chunk-ZSITTZ4S.mjs → chunk-3GWH2ZOH.mjs} +5 -3
  8. package/dist/chunk-3GWH2ZOH.mjs.map +1 -0
  9. package/dist/{chunk-XRC3O5GK.mjs → chunk-4JOFNZW6.mjs} +2 -0
  10. package/dist/chunk-4JOFNZW6.mjs.map +1 -0
  11. package/dist/{chunk-2FUPL67V.mjs → chunk-55JFUNLR.mjs} +253 -237
  12. package/dist/chunk-55JFUNLR.mjs.map +1 -0
  13. package/dist/{chunk-GPYIIWD5.mjs → chunk-7DJHFOIW.mjs} +3 -1
  14. package/dist/chunk-7DJHFOIW.mjs.map +1 -0
  15. package/dist/{chunk-QQVHGJ2G.mjs → chunk-AZJFDWBF.mjs} +2 -0
  16. package/dist/chunk-AZJFDWBF.mjs.map +1 -0
  17. package/dist/{chunk-C6MQBJFC.mjs → chunk-G3HCTMAZ.mjs} +3 -1
  18. package/dist/chunk-G3HCTMAZ.mjs.map +1 -0
  19. package/dist/{chunk-IYFWAJBB.mjs → chunk-HMTYPFOT.mjs} +3 -1
  20. package/dist/chunk-HMTYPFOT.mjs.map +1 -0
  21. package/dist/{chunk-7LV4UAUS.mjs → chunk-IKR6GVZ4.mjs} +2 -0
  22. package/dist/chunk-IKR6GVZ4.mjs.map +1 -0
  23. package/dist/{chunk-YUIK4AHM.mjs → chunk-JSF4FHBH.mjs} +3 -1
  24. package/dist/chunk-JSF4FHBH.mjs.map +1 -0
  25. package/dist/{chunk-OJWVEEMM.mjs → chunk-R5L7WB7F.mjs} +4 -2
  26. package/dist/chunk-R5L7WB7F.mjs.map +1 -0
  27. package/dist/{chunk-53XDE62A.mjs → chunk-RY6OZJ7A.mjs} +8 -6
  28. package/dist/chunk-RY6OZJ7A.mjs.map +1 -0
  29. package/dist/{chunk-B4EAAKYF.mjs → chunk-SBB2YW3Y.mjs} +2 -0
  30. package/dist/chunk-SBB2YW3Y.mjs.map +1 -0
  31. package/dist/{chunk-FWJIAW2E.mjs → chunk-SHU7JPQY.mjs} +7 -5
  32. package/dist/chunk-SHU7JPQY.mjs.map +1 -0
  33. package/dist/chunk-SRPSHHHV.mjs +3 -0
  34. package/dist/chunk-SRPSHHHV.mjs.map +1 -0
  35. package/dist/{chunk-ESVULCFY.mjs → chunk-TOFB4BTA.mjs} +3 -1
  36. package/dist/chunk-TOFB4BTA.mjs.map +1 -0
  37. package/dist/{chunk-ORVDYXDP.mjs → chunk-VKXTPLM7.mjs} +6 -4
  38. package/dist/chunk-VKXTPLM7.mjs.map +1 -0
  39. package/dist/{chunk-VVQ4CH77.mjs → chunk-X3XNTD4R.mjs} +5 -2
  40. package/dist/chunk-X3XNTD4R.mjs.map +1 -0
  41. package/dist/chunk-YYFM6P4C.mjs +3 -0
  42. package/dist/chunk-YYFM6P4C.mjs.map +1 -0
  43. package/dist/hooks.mjs +13 -11
  44. package/dist/hooks.mjs.map +1 -0
  45. package/dist/index.mjs +27 -25
  46. package/dist/index.mjs.map +1 -0
  47. package/dist/lib.mjs +6 -4
  48. package/dist/lib.mjs.map +1 -0
  49. package/dist/nodes.mjs +15 -13
  50. package/dist/nodes.mjs.map +1 -0
  51. package/dist/panels.mjs +5 -3
  52. package/dist/panels.mjs.map +1 -0
  53. package/dist/provider.mjs +5 -3
  54. package/dist/provider.mjs.map +1 -0
  55. package/dist/stores.mjs +8 -6
  56. package/dist/stores.mjs.map +1 -0
  57. package/dist/toolbar.mjs +7 -5
  58. package/dist/toolbar.mjs.map +1 -0
  59. package/dist/ui.mjs +4 -2
  60. package/dist/ui.mjs.map +1 -0
  61. package/dist/workflowStore-XYPHB6DS.mjs +4 -0
  62. package/dist/workflowStore-XYPHB6DS.mjs.map +1 -0
  63. package/package.json +24 -24
  64. package/dist/chunk-LDN7IX4Y.mjs +0 -1
  65. package/dist/chunk-MLJJBBTB.mjs +0 -1
  66. package/dist/workflowStore-N2F7WIG3.mjs +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/stores/uiStore.ts","../src/stores/settingsStore.ts","../src/stores/execution/helpers/outputHelpers.ts","../src/stores/execution/helpers/sseSubscription.ts","../src/stores/execution/slices/executionSlice.ts","../src/stores/execution/slices/jobSlice.ts","../src/stores/execution/executionStore.ts"],"names":["create","useWorkflowStore","API_BASE_URL","NodeStatusEnum"],"mappings":"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","file":"chunk-R5L7WB7F.mjs","sourcesContent":["import type { HandleType } from '@genfeedai/types';\nimport { create } from 'zustand';\n\nexport type ModalType =\n | 'templates'\n | 'cost'\n | 'welcome'\n | 'settings'\n | 'promptLibrary'\n | 'modelBrowser'\n | 'nodeDetail'\n | 'shortcutHelp'\n | 'nodeSearch'\n | null;\n\nexport type NodeDetailTab = 'preview' | 'history';\n\nexport interface ConnectionDropMenuState {\n position: { x: number; y: number };\n screenPosition: { x: number; y: number };\n sourceNodeId: string;\n sourceHandleId: string;\n sourceHandleType: HandleType;\n}\n\ninterface UIStore {\n // Panel visibility\n showPalette: boolean;\n showMinimap: boolean;\n showAIGenerator: boolean;\n showDebugPanel: boolean;\n\n // Selection\n selectedNodeId: string | null;\n selectedEdgeId: string | null;\n\n // Focus mode (highlight connected nodes)\n highlightedNodeIds: string[];\n\n // Modals\n activeModal: ModalType;\n\n // Connection drop menu\n connectionDropMenu: ConnectionDropMenuState | null;\n\n // Node detail modal\n nodeDetailNodeId: string | null;\n nodeDetailActiveTab: NodeDetailTab;\n nodeDetailStartIndex: number;\n\n // Notifications\n notifications: Notification[];\n\n // Actions\n togglePalette: () => void;\n toggleMinimap: () => void;\n toggleAIGenerator: () => void;\n toggleDebugPanel: () => void;\n setShowDebugPanel: (show: boolean) => void;\n selectNode: (nodeId: string | null) => void;\n selectEdge: (edgeId: string | null) => void;\n setHighlightedNodeIds: (ids: string[]) => void;\n openModal: (modal: ModalType) => void;\n closeModal: () => void;\n openConnectionDropMenu: (params: ConnectionDropMenuState) => void;\n closeConnectionDropMenu: () => void;\n openNodeDetailModal: (\n nodeId: string,\n tab?: NodeDetailTab,\n startIndex?: number,\n ) => void;\n closeNodeDetailModal: () => void;\n setNodeDetailTab: (tab: NodeDetailTab) => void;\n addNotification: (notification: Omit<Notification, 'id'>) => void;\n removeNotification: (id: string) => void;\n}\n\ninterface Notification {\n id: string;\n type: 'success' | 'error' | 'warning' | 'info';\n title: string;\n message?: string;\n duration?: number;\n}\n\nlet notificationId = 0;\n\nexport const useUIStore = create<UIStore>((set) => ({\n activeModal: null,\n\n addNotification: (notification) => {\n const id = `notification-${++notificationId}`;\n set((state) => ({\n notifications: [...state.notifications, { ...notification, id }],\n }));\n\n // Auto-remove after duration\n if (notification.duration !== 0) {\n setTimeout(() => {\n set((state) => ({\n notifications: state.notifications.filter((n) => n.id !== id),\n }));\n }, notification.duration ?? 5000);\n }\n },\n\n closeConnectionDropMenu: () => {\n set({ connectionDropMenu: null });\n },\n\n closeModal: () => {\n set({ activeModal: null });\n },\n\n closeNodeDetailModal: () => {\n set({\n activeModal: null,\n nodeDetailActiveTab: 'preview',\n nodeDetailNodeId: null,\n nodeDetailStartIndex: 0,\n });\n },\n connectionDropMenu: null,\n highlightedNodeIds: [],\n nodeDetailActiveTab: 'preview',\n nodeDetailNodeId: null,\n nodeDetailStartIndex: 0,\n notifications: [],\n\n openConnectionDropMenu: (params) => {\n set({ connectionDropMenu: params });\n },\n\n openModal: (modal) => {\n set({ activeModal: modal });\n },\n\n openNodeDetailModal: (nodeId, tab = 'preview', startIndex = 0) => {\n set({\n activeModal: 'nodeDetail',\n nodeDetailActiveTab: tab,\n nodeDetailNodeId: nodeId,\n nodeDetailStartIndex: startIndex,\n });\n },\n\n removeNotification: (id) => {\n set((state) => ({\n notifications: state.notifications.filter((n) => n.id !== id),\n }));\n },\n\n selectEdge: (edgeId) => {\n set({ selectedEdgeId: edgeId, selectedNodeId: null });\n },\n selectedEdgeId: null,\n selectedNodeId: null,\n\n selectNode: (nodeId) => {\n set({ selectedEdgeId: null, selectedNodeId: nodeId });\n },\n\n setHighlightedNodeIds: (ids) => {\n set({ highlightedNodeIds: ids });\n },\n\n setNodeDetailTab: (tab) => {\n set({ nodeDetailActiveTab: tab });\n },\n\n setShowDebugPanel: (show) => {\n set({ showDebugPanel: show });\n },\n showAIGenerator: false,\n showDebugPanel: false,\n showMinimap: true,\n showPalette: true,\n\n toggleAIGenerator: () => {\n set((state) => ({ showAIGenerator: !state.showAIGenerator }));\n },\n\n toggleDebugPanel: () => {\n set((state) => ({ showDebugPanel: !state.showDebugPanel }));\n },\n\n toggleMinimap: () => {\n set((state) => ({ showMinimap: !state.showMinimap }));\n },\n\n togglePalette: () => {\n set((state) => ({ showPalette: !state.showPalette }));\n },\n}));\n","import type { EdgeStyle, ProviderType } from '@genfeedai/types';\nimport { ProviderTypeEnum } from '@genfeedai/types';\nimport { create } from 'zustand';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type { EdgeStyle, ProviderType };\n\nexport interface ProviderConfig {\n apiKey: string | null;\n enabled: boolean;\n}\n\nexport interface ProviderSettings {\n replicate: ProviderConfig;\n fal: ProviderConfig;\n huggingface: ProviderConfig;\n 'genfeed-ai': ProviderConfig;\n}\n\nexport interface DefaultModelSettings {\n imageModel: string;\n imageProvider: ProviderType;\n videoModel: string;\n videoProvider: ProviderType;\n}\n\nexport interface RecentModel {\n id: string;\n displayName: string;\n provider: ProviderType;\n timestamp: number;\n}\n\ninterface SettingsStore {\n // Provider API Keys\n providers: ProviderSettings;\n\n // Default Models\n defaults: DefaultModelSettings;\n\n // UI Preferences\n edgeStyle: EdgeStyle;\n showMinimap: boolean;\n autoSaveEnabled: boolean;\n\n // Recent models (for model browser)\n recentModels: RecentModel[];\n\n // Onboarding\n hasSeenWelcome: boolean;\n\n // Developer\n debugMode: boolean;\n\n // Actions\n toggleAutoSave: () => void;\n setDebugMode: (enabled: boolean) => void;\n setProviderKey: (provider: ProviderType, key: string | null) => void;\n setProviderEnabled: (provider: ProviderType, enabled: boolean) => void;\n setDefaultModel: (\n type: 'image' | 'video',\n model: string,\n provider: ProviderType,\n ) => void;\n setEdgeStyle: (style: EdgeStyle) => void;\n setShowMinimap: (show: boolean) => void;\n addRecentModel: (model: Omit<RecentModel, 'timestamp'>) => void;\n clearProviderKey: (provider: ProviderType) => void;\n clearAllKeys: () => void;\n setHasSeenWelcome: (seen: boolean) => void;\n\n // Computed\n isProviderConfigured: (provider: ProviderType) => boolean;\n getProviderHeader: (provider: ProviderType) => Record<string, string>;\n\n // API Sync (no-ops in shared package - consuming app overrides these)\n isSyncing: boolean;\n syncFromServer: () => Promise<void>;\n syncToServer: () => Promise<void>;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst STORAGE_KEY = 'genfeed-settings';\nconst MAX_RECENT_MODELS = 8;\n\nconst DEFAULT_SETTINGS = {\n autoSaveEnabled: true,\n debugMode: false,\n defaults: {\n imageModel: 'nano-banana-pro',\n imageProvider: 'replicate' as ProviderType,\n videoModel: 'veo-3.1',\n videoProvider: 'replicate' as ProviderType,\n },\n edgeStyle: 'default' as EdgeStyle,\n hasSeenWelcome: false,\n providers: {\n fal: { apiKey: null, enabled: false },\n 'genfeed-ai': { apiKey: null, enabled: true },\n huggingface: { apiKey: null, enabled: false },\n replicate: { apiKey: null, enabled: true },\n },\n recentModels: [] as RecentModel[],\n showMinimap: true,\n};\n\n// =============================================================================\n// PERSISTENCE\n// =============================================================================\n\nfunction loadFromStorage(): Partial<typeof DEFAULT_SETTINGS> {\n if (typeof window === 'undefined') return {};\n\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n const parsed = JSON.parse(stored);\n return {\n autoSaveEnabled: parsed.autoSaveEnabled ?? true,\n debugMode: parsed.debugMode ?? false,\n defaults: { ...DEFAULT_SETTINGS.defaults, ...parsed.defaults },\n edgeStyle:\n parsed.edgeStyle === 'bezier'\n ? 'default'\n : (parsed.edgeStyle ?? DEFAULT_SETTINGS.edgeStyle),\n hasSeenWelcome: parsed.hasSeenWelcome ?? false,\n providers: { ...DEFAULT_SETTINGS.providers, ...parsed.providers },\n recentModels: parsed.recentModels ?? [],\n showMinimap: parsed.showMinimap ?? DEFAULT_SETTINGS.showMinimap,\n };\n }\n } catch {\n // Invalid JSON or storage error\n }\n return {};\n}\n\nfunction saveToStorage(state: {\n providers: ProviderSettings;\n defaults: DefaultModelSettings;\n edgeStyle: EdgeStyle;\n showMinimap: boolean;\n autoSaveEnabled: boolean;\n recentModels: RecentModel[];\n hasSeenWelcome: boolean;\n debugMode: boolean;\n}) {\n if (typeof window === 'undefined') return;\n\n try {\n // Don't persist API keys in plain text - only enabled status and non-sensitive settings\n const toSave = {\n autoSaveEnabled: state.autoSaveEnabled,\n debugMode: state.debugMode,\n defaults: state.defaults,\n edgeStyle: state.edgeStyle,\n hasSeenWelcome: state.hasSeenWelcome,\n providers: {\n fal: {\n apiKey: state.providers.fal.apiKey,\n enabled: state.providers.fal.enabled,\n },\n huggingface: {\n apiKey: state.providers.huggingface.apiKey,\n enabled: state.providers.huggingface.enabled,\n },\n replicate: {\n apiKey: state.providers.replicate.apiKey,\n enabled: state.providers.replicate.enabled,\n },\n },\n recentModels: state.recentModels.slice(0, MAX_RECENT_MODELS),\n showMinimap: state.showMinimap,\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(toSave));\n } catch {\n // Storage error (quota exceeded, etc.)\n }\n}\n\n// =============================================================================\n// STORE\n// =============================================================================\n\nconst initialState = { ...DEFAULT_SETTINGS, ...loadFromStorage() };\n\nexport const useSettingsStore = create<SettingsStore>((set, get) => {\n // Helper to set state and persist in one call\n const setAndPersist = (\n updater: (state: SettingsStore) => Partial<SettingsStore>,\n ) => {\n set((state) => {\n const newState = updater(state);\n saveToStorage({ ...state, ...newState } as Parameters<\n typeof saveToStorage\n >[0]);\n return newState;\n });\n };\n\n return {\n addRecentModel: (model) => {\n setAndPersist((state) => {\n // Remove existing entry for same model\n const filtered = state.recentModels.filter(\n (m) => !(m.id === model.id && m.provider === model.provider),\n );\n // Add to front with timestamp\n const newRecentModels = [\n { ...model, timestamp: Date.now() },\n ...filtered,\n ].slice(0, MAX_RECENT_MODELS);\n return { recentModels: newRecentModels };\n });\n },\n autoSaveEnabled: initialState.autoSaveEnabled,\n\n clearAllKeys: () => {\n setAndPersist((state) => ({\n providers: {\n fal: { ...state.providers.fal, apiKey: null },\n 'genfeed-ai': { ...state.providers['genfeed-ai'], apiKey: null },\n huggingface: { ...state.providers.huggingface, apiKey: null },\n replicate: { ...state.providers.replicate, apiKey: null },\n },\n }));\n },\n\n clearProviderKey: (provider) => {\n setAndPersist((state) => ({\n providers: {\n ...state.providers,\n [provider]: {\n ...state.providers[provider],\n apiKey: null,\n },\n },\n }));\n },\n debugMode: initialState.debugMode,\n defaults: initialState.defaults,\n edgeStyle: initialState.edgeStyle,\n\n getProviderHeader: (provider) => {\n const state = get();\n const key = state.providers[provider].apiKey;\n if (!key) return {};\n\n const headerMap: Record<ProviderType, string> = {\n [ProviderTypeEnum.REPLICATE]: 'X-Replicate-Key',\n [ProviderTypeEnum.FAL]: 'X-Fal-Key',\n [ProviderTypeEnum.HUGGINGFACE]: 'X-HF-Key',\n [ProviderTypeEnum.GENFEED_AI]: 'X-Genfeed-Key',\n };\n\n return { [headerMap[provider]]: key };\n },\n hasSeenWelcome: initialState.hasSeenWelcome,\n\n isProviderConfigured: (provider) => {\n const state = get();\n return !!state.providers[provider].apiKey;\n },\n\n // API Sync - stubbed as no-ops (consuming app provides real implementations)\n isSyncing: false,\n providers: initialState.providers,\n recentModels: initialState.recentModels,\n\n setDebugMode: (enabled) => {\n setAndPersist(() => ({ debugMode: enabled }));\n },\n\n setDefaultModel: (type, model, provider) => {\n setAndPersist((state) => ({\n defaults: {\n ...state.defaults,\n ...(type === 'image'\n ? { imageModel: model, imageProvider: provider }\n : { videoModel: model, videoProvider: provider }),\n },\n }));\n },\n\n setEdgeStyle: (style) => {\n setAndPersist(() => ({ edgeStyle: style }));\n // Dynamic import to avoid circular dependency\n // Consuming app must provide workflowStore at this path\n import('./workflowStore').then(({ useWorkflowStore }) => {\n useWorkflowStore.getState().setEdgeStyle(style);\n });\n },\n\n setHasSeenWelcome: (seen) => {\n setAndPersist(() => ({ hasSeenWelcome: seen }));\n },\n\n setProviderEnabled: (provider, enabled) => {\n setAndPersist((state) => ({\n providers: {\n ...state.providers,\n [provider]: {\n ...state.providers[provider],\n enabled,\n },\n },\n }));\n },\n\n setProviderKey: (provider, key) => {\n setAndPersist((state) => ({\n providers: {\n ...state.providers,\n [provider]: {\n ...state.providers[provider],\n apiKey: key,\n enabled: key ? true : state.providers[provider].enabled,\n },\n },\n }));\n },\n\n setShowMinimap: (show) => {\n setAndPersist(() => ({ showMinimap: show }));\n },\n showMinimap: initialState.showMinimap,\n\n syncFromServer: async () => {\n // No-op: consuming app should override with real API sync\n },\n\n syncToServer: async () => {\n // No-op: consuming app should override with real API sync\n },\n\n toggleAutoSave: () => {\n setAndPersist((state) => ({ autoSaveEnabled: !state.autoSaveEnabled }));\n },\n };\n});\n\n// =============================================================================\n// PROVIDER DISPLAY INFO\n// =============================================================================\n\nexport const PROVIDER_INFO: Record<\n ProviderType,\n { name: string; description: string; docsUrl: string }\n> = {\n [ProviderTypeEnum.REPLICATE]: {\n description: 'Access thousands of open-source AI models',\n docsUrl: 'https://replicate.com/docs',\n name: 'Replicate',\n },\n [ProviderTypeEnum.FAL]: {\n description: 'Fast inference for image and video generation',\n docsUrl: 'https://fal.ai/docs',\n name: 'fal.ai',\n },\n [ProviderTypeEnum.HUGGINGFACE]: {\n description: 'The AI community platform with 500k+ models',\n docsUrl: 'https://huggingface.co/docs/api-inference',\n name: 'Hugging Face',\n },\n [ProviderTypeEnum.GENFEED_AI]: {\n description: 'Built-in models powered by Genfeed',\n docsUrl: 'https://genfeed.ai/docs',\n name: 'Genfeed AI',\n },\n};\n","import type { useWorkflowStore } from '../../workflow/workflowStore';\n\n/**\n * Extract the actual URL/value from various Replicate output formats\n * Replicate outputs can be:\n * - A string URL directly: \"https://...\"\n * - An array with one URL: [\"https://...\"]\n * - An object with a url field: { url: \"https://...\" }\n * - An object with image/video field: { image: \"https://...\" } or { video: \"https://...\" }\n */\nfunction extractOutputValue(output: unknown): string | null {\n if (!output) return null;\n\n // Direct string URL\n if (typeof output === 'string') {\n return output;\n }\n\n // Array of URLs - take the first one\n if (Array.isArray(output) && output.length > 0) {\n const first = output[0];\n if (typeof first === 'string') return first;\n if (first && typeof first === 'object' && 'url' in first) {\n return String((first as { url: unknown }).url);\n }\n }\n\n // Object with url, image, video, or audio field (backend normalizes to these formats)\n if (typeof output === 'object' && output !== null) {\n const obj = output as Record<string, unknown>;\n if ('url' in obj) return String(obj.url);\n if ('image' in obj) return String(obj.image);\n if ('video' in obj) return String(obj.video);\n if ('audio' in obj) return String(obj.audio);\n }\n\n return null;\n}\n\n/**\n * Extract ALL output URLs from various formats\n * Used for multi-image outputs (e.g., SeedDream 4.5)\n */\nfunction extractAllOutputValues(output: unknown): string[] {\n if (!output) return [];\n\n // Direct string URL\n if (typeof output === 'string') {\n return [output];\n }\n\n // Array of URLs - return all\n if (Array.isArray(output)) {\n return output.filter((item): item is string => typeof item === 'string');\n }\n\n // Object with images array (backend normalizes multi-image outputs to this format)\n if (typeof output === 'object' && output !== null) {\n const obj = output as Record<string, unknown>;\n if ('images' in obj && Array.isArray(obj.images)) {\n return obj.images.filter(\n (item): item is string => typeof item === 'string',\n );\n }\n // Fallback to single image field\n if ('image' in obj && typeof obj.image === 'string') {\n return [obj.image];\n }\n }\n\n return [];\n}\n\n/**\n * Map output to correct node data field based on node type\n */\nexport function getOutputUpdate(\n nodeId: string,\n output: unknown,\n workflowStore: ReturnType<typeof useWorkflowStore.getState>,\n): Record<string, unknown> {\n const node = workflowStore.getNodeById(nodeId);\n if (!node) return {};\n\n const nodeType = node.type;\n const outputValue = extractOutputValue(output);\n\n // Image output nodes - handle multiple images\n if (['imageGen'].includes(nodeType)) {\n const allImages = extractAllOutputValues(output);\n return {\n outputImage: allImages[0] ?? null,\n outputImages: allImages,\n };\n }\n\n // Unified nodes - output type matches input type\n if (['reframe', 'upscale'].includes(nodeType)) {\n const inputType = (node.data as { inputType?: string }).inputType;\n if (inputType === 'video') {\n return { outputVideo: outputValue };\n }\n return { outputImage: outputValue };\n }\n\n // Video output nodes\n if (\n [\n 'videoGen',\n 'animation',\n 'videoStitch',\n 'lipSync',\n 'voiceChange',\n 'motionControl',\n ].includes(nodeType)\n ) {\n return { outputVideo: outputValue };\n }\n\n // Audio output nodes\n if (nodeType === 'textToSpeech') {\n return { outputAudio: outputValue };\n }\n\n // LLM nodes - keep original for text (might be array of strings)\n if (nodeType === 'llm') {\n const textOutput = Array.isArray(output) ? output.join('') : outputValue;\n return { outputText: textOutput };\n }\n\n // Resize nodes\n if (nodeType === 'resize') {\n return { outputMedia: outputValue };\n }\n\n return { output: outputValue };\n}\n","import type { NodeStatus } from '@genfeedai/types';\nimport { NodeStatusEnum } from '@genfeedai/types';\nimport type { StoreApi } from 'zustand';\nimport { useUIStore } from '../../uiStore';\nimport { useWorkflowStore } from '../../workflow/workflowStore';\nimport type {\n DebugPayload,\n ExecutionData,\n ExecutionStore,\n Job,\n} from '../types';\nimport { getOutputUpdate } from './outputHelpers';\n\nconst API_BASE_URL =\n process.env.NEXT_PUBLIC_API_URL || 'http://local.genfeed.ai:3001/api';\n\n/**\n * Status map for converting execution statuses to node statuses\n */\nconst statusMap: Record<string, NodeStatus> = {\n complete: NodeStatusEnum.COMPLETE,\n error: NodeStatusEnum.ERROR,\n pending: NodeStatusEnum.IDLE,\n processing: NodeStatusEnum.PROCESSING,\n succeeded: NodeStatusEnum.COMPLETE,\n};\n\nfunction applyJobUpdates(\n jobs: ExecutionData['jobs'] | undefined,\n workflowStore: ReturnType<typeof useWorkflowStore.getState>,\n debugMode: boolean | undefined,\n set: StoreApi<ExecutionStore>['setState'],\n filterNodeId?: string,\n): void {\n if (!jobs || jobs.length === 0) return;\n\n set((state) => {\n let didChange = false;\n const newJobs = new Map(state.jobs);\n const newDebugPayloads: DebugPayload[] = [];\n\n for (const job of jobs) {\n if (filterNodeId && job.nodeId !== filterNodeId) continue;\n\n const status = job.status as Job['status'];\n const output = job.output ?? null;\n const error = job.error ?? null;\n const existing = state.jobs.get(job.predictionId);\n\n if (!existing) {\n didChange = true;\n newJobs.set(job.predictionId, {\n createdAt: new Date().toISOString(),\n error,\n nodeId: job.nodeId,\n output,\n predictionId: job.predictionId,\n progress: 0,\n status,\n });\n } else if (\n existing.status !== status ||\n existing.output !== output ||\n existing.error !== error\n ) {\n didChange = true;\n newJobs.set(job.predictionId, {\n ...existing,\n error,\n output,\n status,\n });\n }\n\n if (job.result?.debugPayload) {\n const node = workflowStore.getNodeById(job.nodeId);\n newDebugPayloads.push({\n input: job.result.debugPayload.input,\n model: job.result.debugPayload.model,\n nodeId: job.nodeId,\n nodeName: String(node?.data?.label || node?.data?.name || job.nodeId),\n nodeType: node?.type || 'unknown',\n timestamp: job.result.debugPayload.timestamp,\n });\n }\n }\n\n if (!didChange && newDebugPayloads.length === 0) return state;\n\n if (newDebugPayloads.length > 0 && debugMode) {\n useUIStore.getState().setShowDebugPanel(true);\n }\n\n return {\n debugPayloads:\n newDebugPayloads.length > 0\n ? [\n ...state.debugPayloads.filter(\n (existing) =>\n !newDebugPayloads.some(\n (newP) => newP.nodeId === existing.nodeId,\n ),\n ),\n ...newDebugPayloads,\n ]\n : state.debugPayloads,\n jobs: didChange ? newJobs : state.jobs,\n };\n });\n}\n\n/**\n * Fetch the final execution state via REST and reconcile all node statuses.\n * This recovers from missed SSE deltas (e.g. dropped connections, race conditions).\n */\nasync function reconcileNodeStatuses(executionId: string): Promise<void> {\n try {\n const response = await fetch(`${API_BASE_URL}/executions/${executionId}`);\n if (!response.ok) return;\n\n const execution = await response.json();\n const workflowStore = useWorkflowStore.getState();\n\n for (const nodeResult of execution.nodeResults || []) {\n const nodeStatus = statusMap[nodeResult.status] ?? NodeStatusEnum.IDLE;\n const isSuccess =\n nodeResult.status === 'complete' || nodeResult.status === 'succeeded';\n\n workflowStore.updateNodeData(nodeResult.nodeId, {\n error: isSuccess ? undefined : nodeResult.error,\n status: nodeStatus,\n ...(nodeResult.output &&\n getOutputUpdate(nodeResult.nodeId, nodeResult.output, workflowStore)),\n });\n\n if (isSuccess && nodeResult.output) {\n workflowStore.propagateOutputsDownstream(nodeResult.nodeId);\n }\n }\n } catch {\n // Silent fail -- best effort reconciliation\n }\n}\n\n/**\n * Create an SSE subscription for execution updates\n */\nexport function createExecutionSubscription(\n executionId: string,\n set: StoreApi<ExecutionStore>['setState'],\n): EventSource {\n const eventSource = new EventSource(\n `${API_BASE_URL}/executions/${executionId}/stream`,\n );\n\n // Track nodes that have already propagated to prevent duplicate cascades\n const propagatedNodeIds = new Set<string>();\n\n set({ eventSource });\n\n eventSource.onmessage = (event) => {\n void (async () => {\n try {\n const data = JSON.parse(event.data) as ExecutionData;\n const workflowStore = useWorkflowStore.getState();\n\n // Update node statuses from execution data\n const nodeResults = data.nodeResults || [];\n for (const nodeResult of nodeResults) {\n const nodeStatus =\n statusMap[nodeResult.status] ?? NodeStatusEnum.IDLE;\n const isSuccess =\n nodeResult.status === 'complete' ||\n nodeResult.status === 'succeeded';\n\n workflowStore.updateNodeData(nodeResult.nodeId, {\n error: isSuccess ? undefined : nodeResult.error,\n status: nodeStatus,\n ...(nodeResult.output &&\n getOutputUpdate(\n nodeResult.nodeId,\n nodeResult.output,\n workflowStore,\n )),\n });\n\n // Propagate output to downstream nodes when complete\n if (\n (nodeResult.status === 'complete' ||\n nodeResult.status === 'succeeded') &&\n nodeResult.output &&\n !propagatedNodeIds.has(nodeResult.nodeId)\n ) {\n propagatedNodeIds.add(nodeResult.nodeId);\n workflowStore.propagateOutputsDownstream(nodeResult.nodeId);\n }\n\n // Track failed node for resume capability\n if (nodeResult.status === 'error') {\n set({ lastFailedNodeId: nodeResult.nodeId });\n }\n }\n\n applyJobUpdates(data.jobs, workflowStore, data.debugMode, set);\n\n // Check if execution is complete\n const isComplete = [\n 'completed',\n 'failed',\n 'cancelled',\n 'error',\n ].includes(data.status);\n const hasFailedNode = (data.nodeResults || []).some(\n (r) => r.status === 'error',\n );\n const hasPendingNodes = (data.pendingNodes || []).length > 0;\n const hasProcessingNodes = (data.nodeResults || []).some(\n (r) => r.status === 'processing',\n );\n const isDone =\n isComplete ||\n (hasFailedNode && !hasPendingNodes && !hasProcessingNodes);\n\n if (isDone) {\n propagatedNodeIds.clear();\n eventSource.close();\n\n await reconcileNodeStatuses(executionId);\n\n set({\n currentNodeId: null,\n eventSource: null,\n isRunning: false,\n jobs: new Map(),\n });\n\n if (data.status === 'failed' || hasFailedNode) {\n // Execution failed - consuming app can handle error reporting\n }\n }\n } catch {\n // Failed to parse SSE message\n }\n })();\n };\n\n eventSource.onerror = () => {\n eventSource.close();\n void reconcileNodeStatuses(executionId).then(() => {\n set({ eventSource: null, isRunning: false });\n });\n };\n\n return eventSource;\n}\n\n/**\n * Create a node-scoped SSE subscription for independent node execution.\n * Does NOT set global isRunning/eventSource state -- only manages per-node state\n * via the activeNodeExecutions map.\n */\nexport function createNodeExecutionSubscription(\n executionId: string,\n nodeId: string,\n set: StoreApi<ExecutionStore>['setState'],\n _get: StoreApi<ExecutionStore>['getState'],\n): EventSource {\n const eventSource = new EventSource(\n `${API_BASE_URL}/executions/${executionId}/stream`,\n );\n const propagatedNodeIds = new Set<string>();\n\n eventSource.onmessage = (event) => {\n void (async () => {\n try {\n const data = JSON.parse(event.data) as ExecutionData;\n const workflowStore = useWorkflowStore.getState();\n\n const nodeResults = data.nodeResults || [];\n for (const nodeResult of nodeResults) {\n const nodeStatus =\n statusMap[nodeResult.status] ?? NodeStatusEnum.IDLE;\n const isSuccess =\n nodeResult.status === 'complete' ||\n nodeResult.status === 'succeeded';\n\n workflowStore.updateNodeData(nodeResult.nodeId, {\n error: isSuccess ? undefined : nodeResult.error,\n status: nodeStatus,\n ...(nodeResult.output &&\n getOutputUpdate(\n nodeResult.nodeId,\n nodeResult.output,\n workflowStore,\n )),\n });\n\n if (\n (nodeResult.status === 'complete' ||\n nodeResult.status === 'succeeded') &&\n nodeResult.output &&\n !propagatedNodeIds.has(nodeResult.nodeId)\n ) {\n propagatedNodeIds.add(nodeResult.nodeId);\n workflowStore.propagateOutputsDownstream(nodeResult.nodeId);\n }\n\n if (nodeResult.status === 'error') {\n set({ lastFailedNodeId: nodeResult.nodeId });\n }\n }\n\n applyJobUpdates(data.jobs, workflowStore, data.debugMode, set, nodeId);\n\n const isComplete = [\n 'completed',\n 'failed',\n 'cancelled',\n 'error',\n ].includes(data.status);\n const hasFailedNode = (data.nodeResults || []).some(\n (r) => r.status === 'error',\n );\n const hasPendingNodes = (data.pendingNodes || []).length > 0;\n const hasProcessingNodes = (data.nodeResults || []).some(\n (r) => r.status === 'processing',\n );\n const isDone =\n isComplete ||\n (hasFailedNode && !hasPendingNodes && !hasProcessingNodes);\n\n if (isDone) {\n propagatedNodeIds.clear();\n eventSource.close();\n\n await reconcileNodeStatuses(executionId);\n\n // Remove this node execution from the active map\n set((state) => {\n const newMap = new Map(state.activeNodeExecutions);\n newMap.delete(nodeId);\n return { activeNodeExecutions: newMap };\n });\n }\n } catch {\n // Failed to parse SSE message (node execution)\n }\n })();\n };\n\n eventSource.onerror = () => {\n eventSource.close();\n void reconcileNodeStatuses(executionId).then(() => {\n set((state) => {\n const newMap = new Map(state.activeNodeExecutions);\n newMap.delete(nodeId);\n return { activeNodeExecutions: newMap };\n });\n });\n };\n\n return eventSource;\n}\n","import { NodeStatusEnum } from '@genfeedai/types';\nimport type { StateCreator } from 'zustand';\nimport { useSettingsStore } from '../../settingsStore';\nimport { useUIStore } from '../../uiStore';\nimport { useWorkflowStore } from '../../workflow/workflowStore';\nimport {\n createExecutionSubscription,\n createNodeExecutionSubscription,\n} from '../helpers/sseSubscription';\nimport type { ExecutionData, ExecutionStore, NodeExecution } from '../types';\n\nconst API_BASE_URL =\n process.env.NEXT_PUBLIC_API_URL || 'http://local.genfeed.ai:3001/api';\n\n/**\n * Simple fetch-based API client for execution operations.\n * Consuming apps can override by providing their own execution store.\n */\nasync function apiPost<T>(\n path: string,\n body?: Record<string, unknown>,\n): Promise<T> {\n const response = await fetch(`${API_BASE_URL}${path}`, {\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n ...(body && { body: JSON.stringify(body) }),\n });\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(\n (errorData as { message?: string }).message ||\n `API error: ${response.status}`,\n );\n }\n return response.json() as Promise<T>;\n}\n\nexport interface ExecutionSlice {\n executeWorkflow: () => Promise<void>;\n executeSelectedNodes: () => Promise<void>;\n executeNode: (nodeId: string) => Promise<void>;\n resumeFromFailed: () => Promise<void>;\n stopExecution: () => void;\n stopNodeExecution: (nodeId: string) => void;\n isNodeExecuting: (nodeId: string) => boolean;\n clearValidationErrors: () => void;\n resetExecution: () => void;\n canResumeFromFailed: () => boolean;\n setEstimatedCost: (cost: number) => void;\n}\n\nexport const createExecutionSlice: StateCreator<\n ExecutionStore,\n [],\n [],\n ExecutionSlice\n> = (set, get) => ({\n canResumeFromFailed: () => {\n const { executionId, lastFailedNodeId, isRunning } = get();\n return !isRunning && Boolean(executionId) && Boolean(lastFailedNodeId);\n },\n\n clearValidationErrors: () => {\n set({ validationErrors: null });\n },\n\n executeNode: async (nodeId: string) => {\n const workflowStore = useWorkflowStore.getState();\n const debugMode = useSettingsStore.getState().debugMode;\n\n // Save workflow if dirty\n if (workflowStore.isDirty || !workflowStore.workflowId) {\n try {\n await workflowStore.saveWorkflow();\n } catch {\n workflowStore.updateNodeData(nodeId, {\n error: 'Failed to save workflow',\n status: NodeStatusEnum.ERROR,\n });\n return;\n }\n }\n\n const workflowId = workflowStore.workflowId;\n if (!workflowId) {\n workflowStore.updateNodeData(nodeId, {\n error: 'Workflow must be saved first',\n status: NodeStatusEnum.ERROR,\n });\n return;\n }\n\n if (debugMode) {\n useUIStore.getState().setShowDebugPanel(true);\n }\n\n try {\n const execution = await apiPost<ExecutionData>(\n `/workflows/${workflowId}/execute`,\n {\n debugMode,\n selectedNodeIds: [nodeId],\n },\n );\n const executionId = execution._id;\n\n const eventSource = createNodeExecutionSubscription(\n executionId,\n nodeId,\n set,\n get,\n );\n\n const nodeExecution: NodeExecution = {\n eventSource,\n executionId,\n nodeIds: [nodeId],\n };\n\n set((state) => {\n const newMap = new Map(state.activeNodeExecutions);\n newMap.set(nodeId, nodeExecution);\n return { activeNodeExecutions: newMap };\n });\n } catch (error) {\n workflowStore.updateNodeData(nodeId, {\n error: error instanceof Error ? error.message : 'Node execution failed',\n status: NodeStatusEnum.ERROR,\n });\n }\n },\n\n executeSelectedNodes: async () => {\n const { isRunning, resetExecution } = get();\n if (isRunning) return;\n\n const workflowStore = useWorkflowStore.getState();\n const debugMode = useSettingsStore.getState().debugMode;\n const { selectedNodeIds } = workflowStore;\n\n if (selectedNodeIds.length === 0) {\n set({\n validationErrors: {\n errors: [\n { message: 'No nodes selected', nodeId: '', severity: 'error' },\n ],\n isValid: false,\n warnings: [],\n },\n });\n return;\n }\n\n set({ validationErrors: null });\n resetExecution();\n\n if (workflowStore.isDirty || !workflowStore.workflowId) {\n try {\n await workflowStore.saveWorkflow();\n } catch {\n set({\n validationErrors: {\n errors: [\n {\n message: 'Failed to save workflow',\n nodeId: '',\n severity: 'error',\n },\n ],\n isValid: false,\n warnings: [],\n },\n });\n return;\n }\n }\n\n const workflowId = workflowStore.workflowId;\n if (!workflowId) {\n set({\n validationErrors: {\n errors: [\n {\n message: 'Workflow must be saved first',\n nodeId: '',\n severity: 'error',\n },\n ],\n isValid: false,\n warnings: [],\n },\n });\n return;\n }\n\n // Track which nodes are being executed for edge highlighting\n set({ executingNodeIds: selectedNodeIds, isRunning: true });\n\n // Open debug panel if debug mode is active\n if (debugMode) {\n useUIStore.getState().setShowDebugPanel(true);\n }\n\n for (const nodeId of selectedNodeIds) {\n workflowStore.updateNodeData(nodeId, {\n error: undefined,\n progress: undefined,\n status: NodeStatusEnum.IDLE,\n });\n }\n\n try {\n const execution = await apiPost<ExecutionData>(\n `/workflows/${workflowId}/execute`,\n {\n debugMode,\n selectedNodeIds,\n },\n );\n const executionId = execution._id;\n\n set({ executionId });\n\n createExecutionSubscription(executionId, set);\n } catch (error) {\n set({\n isRunning: false,\n validationErrors: {\n errors: [\n {\n message:\n error instanceof Error\n ? error.message\n : 'Partial execution failed',\n nodeId: '',\n severity: 'error',\n },\n ],\n isValid: false,\n warnings: [],\n },\n });\n }\n },\n executeWorkflow: async () => {\n const { isRunning, resetExecution } = get();\n if (isRunning) return;\n\n const workflowStore = useWorkflowStore.getState();\n const debugMode = useSettingsStore.getState().debugMode;\n\n const validation = workflowStore.validateWorkflow();\n if (!validation.isValid) {\n set({ validationErrors: validation });\n return;\n }\n\n set({ validationErrors: null });\n resetExecution();\n\n // Open debug panel if debug mode is active\n if (debugMode) {\n useUIStore.getState().setShowDebugPanel(true);\n }\n\n if (workflowStore.isDirty || !workflowStore.workflowId) {\n try {\n await workflowStore.saveWorkflow();\n } catch {\n set({\n validationErrors: {\n errors: [\n {\n message: 'Failed to save workflow',\n nodeId: '',\n severity: 'error',\n },\n ],\n isValid: false,\n warnings: [],\n },\n });\n return;\n }\n }\n\n const workflowId = workflowStore.workflowId;\n if (!workflowId) {\n set({\n validationErrors: {\n errors: [\n {\n message: 'Workflow must be saved first',\n nodeId: '',\n severity: 'error',\n },\n ],\n isValid: false,\n warnings: [],\n },\n });\n return;\n }\n\n set({ isRunning: true });\n\n for (const node of workflowStore.nodes) {\n workflowStore.updateNodeData(node.id, {\n error: undefined,\n progress: undefined,\n status: NodeStatusEnum.IDLE,\n });\n }\n\n try {\n const execution = await apiPost<ExecutionData>(\n `/workflows/${workflowId}/execute`,\n {\n debugMode,\n },\n );\n const executionId = execution._id;\n\n set({ executionId });\n\n createExecutionSubscription(executionId, set);\n } catch (error) {\n set({\n isRunning: false,\n validationErrors: {\n errors: [\n {\n message:\n error instanceof Error ? error.message : 'Execution failed',\n nodeId: '',\n severity: 'error',\n },\n ],\n isValid: false,\n warnings: [],\n },\n });\n }\n },\n\n isNodeExecuting: (nodeId: string) => {\n const { activeNodeExecutions } = get();\n return activeNodeExecutions.has(nodeId);\n },\n\n resetExecution: () => {\n const { eventSource, activeNodeExecutions } = get();\n\n if (eventSource) {\n eventSource.close();\n }\n\n // Close all active node execution SSE connections\n for (const nodeExecution of activeNodeExecutions.values()) {\n nodeExecution.eventSource.close();\n }\n\n set({\n activeNodeExecutions: new Map(),\n actualCost: 0,\n currentNodeId: null,\n debugPayloads: [],\n eventSource: null,\n executingNodeIds: [],\n executionId: null,\n isRunning: false,\n jobs: new Map(),\n lastFailedNodeId: null,\n });\n\n const workflowStore = useWorkflowStore.getState();\n for (const node of workflowStore.nodes) {\n workflowStore.updateNodeData(node.id, {\n error: undefined,\n progress: undefined,\n status: NodeStatusEnum.IDLE,\n });\n }\n },\n\n resumeFromFailed: async () => {\n const { isRunning, executionId, lastFailedNodeId } = get();\n if (isRunning || !executionId || !lastFailedNodeId) return;\n\n const workflowStore = useWorkflowStore.getState();\n const debugMode = useSettingsStore.getState().debugMode;\n const workflowId = workflowStore.workflowId;\n\n if (!workflowId) {\n set({\n validationErrors: {\n errors: [\n {\n message: 'Workflow must be saved first',\n nodeId: '',\n severity: 'error',\n },\n ],\n isValid: false,\n warnings: [],\n },\n });\n return;\n }\n\n set({ isRunning: true, validationErrors: null });\n\n // Open debug panel if debug mode is active\n if (debugMode) {\n useUIStore.getState().setShowDebugPanel(true);\n }\n\n workflowStore.updateNodeData(lastFailedNodeId, {\n error: undefined,\n progress: undefined,\n status: NodeStatusEnum.IDLE,\n });\n\n try {\n const execution = await apiPost<ExecutionData>(\n `/workflows/${workflowId}/execute`,\n {\n debugMode,\n },\n );\n const newExecutionId = execution._id;\n\n set({ executionId: newExecutionId, lastFailedNodeId: null });\n\n createExecutionSubscription(newExecutionId, set);\n } catch (error) {\n set({\n isRunning: false,\n validationErrors: {\n errors: [\n {\n message: error instanceof Error ? error.message : 'Resume failed',\n nodeId: '',\n severity: 'error',\n },\n ],\n isValid: false,\n warnings: [],\n },\n });\n }\n },\n\n setEstimatedCost: (cost: number) => {\n set({ estimatedCost: cost });\n },\n\n stopExecution: () => {\n const { eventSource, executionId } = get();\n\n if (eventSource) {\n eventSource.close();\n }\n\n if (executionId) {\n apiPost(`/executions/${executionId}/stop`).catch(() => {\n // Failed to stop execution\n });\n }\n\n set({\n currentNodeId: null,\n eventSource: null,\n isRunning: false,\n });\n },\n\n stopNodeExecution: (nodeId: string) => {\n const { activeNodeExecutions } = get();\n const nodeExecution = activeNodeExecutions.get(nodeId);\n\n if (nodeExecution) {\n nodeExecution.eventSource.close();\n\n apiPost(`/executions/${nodeExecution.executionId}/stop`).catch(() => {\n // Failed to stop node execution\n });\n\n set((state) => {\n const newMap = new Map(state.activeNodeExecutions);\n newMap.delete(nodeId);\n return { activeNodeExecutions: newMap };\n });\n }\n\n const workflowStore = useWorkflowStore.getState();\n workflowStore.updateNodeData(nodeId, {\n error: undefined,\n status: NodeStatusEnum.IDLE,\n });\n },\n});\n","import type { StateCreator } from 'zustand';\nimport type { ExecutionStore, Job } from '../types';\n\nexport interface JobSlice {\n addJob: (nodeId: string, predictionId: string) => void;\n updateJob: (predictionId: string, updates: Partial<Job>) => void;\n getJobByNodeId: (nodeId: string) => Job | undefined;\n}\n\nexport const createJobSlice: StateCreator<ExecutionStore, [], [], JobSlice> = (\n set,\n get,\n) => ({\n addJob: (nodeId, predictionId) => {\n set((state) => {\n const newJobs = new Map(state.jobs);\n newJobs.set(predictionId, {\n createdAt: new Date().toISOString(),\n error: null,\n nodeId,\n output: null,\n predictionId,\n progress: 0,\n status: 'pending',\n });\n return { jobs: newJobs };\n });\n },\n\n getJobByNodeId: (nodeId) => {\n const { jobs } = get();\n for (const job of jobs.values()) {\n if (job.nodeId === nodeId) return job;\n }\n return undefined;\n },\n\n updateJob: (predictionId, updates) => {\n set((state) => {\n const newJobs = new Map(state.jobs);\n const job = newJobs.get(predictionId);\n if (job) {\n newJobs.set(predictionId, { ...job, ...updates });\n }\n return { jobs: newJobs };\n });\n },\n});\n","import { create } from 'zustand';\nimport { createExecutionSlice } from './slices/executionSlice';\nimport { createJobSlice } from './slices/jobSlice';\nimport type { DebugPayload, ExecutionStore } from './types';\n\n/**\n * Execution Store\n *\n * Manages workflow execution state including jobs, validation, and SSE subscriptions.\n * Split into slices for maintainability:\n *\n * - executionSlice: Core execution operations (run, stop, resume)\n * - jobSlice: Job tracking and management\n */\nexport const useExecutionStore = create<ExecutionStore>()((...args) => {\n const [set] = args;\n\n return {\n activeNodeExecutions: new Map(),\n actualCost: 0,\n\n // Debug payload actions\n addDebugPayload: (payload: DebugPayload) => {\n set((state) => ({\n debugPayloads: [...state.debugPayloads, payload],\n }));\n },\n\n clearDebugPayloads: () => {\n set({ debugPayloads: [] });\n },\n currentNodeId: null,\n debugPayloads: [],\n estimatedCost: 0,\n eventSource: null,\n executingNodeIds: [],\n executionId: null,\n // Initial state\n isRunning: false,\n jobs: new Map(),\n lastFailedNodeId: null,\n pausedAtNodeId: null,\n validationErrors: null,\n\n // Compose slices\n ...createJobSlice(...args),\n ...createExecutionSlice(...args),\n };\n});\n\n// Re-export types for convenience\nexport type { ExecutionStore, Job } from './types';\n"]}
@@ -1,8 +1,8 @@
1
- import { useContextMenu, useCanvasKeyboardShortcuts, ContextMenu } from './chunk-ORVDYXDP.mjs';
2
- import { calculateWorkflowCost, formatCost } from './chunk-MGLAKMDP.mjs';
3
- import { nodeTypes, NodeDetailModal } from './chunk-2FUPL67V.mjs';
4
- import { useUIStore, useSettingsStore, useExecutionStore } from './chunk-OJWVEEMM.mjs';
5
- import { useWorkflowStore, getHandleType } from './chunk-GPYIIWD5.mjs';
1
+ import { useContextMenu, useCanvasKeyboardShortcuts, ContextMenu } from './chunk-VKXTPLM7.mjs';
2
+ import { calculateWorkflowCost, formatCost } from './chunk-2BHILUF7.mjs';
3
+ import { nodeTypes, NodeDetailModal } from './chunk-55JFUNLR.mjs';
4
+ import { useUIStore, useSettingsStore, useExecutionStore } from './chunk-R5L7WB7F.mjs';
5
+ import { useWorkflowStore, getHandleType } from './chunk-7DJHFOIW.mjs';
6
6
  import { CONNECTION_RULES, getNodesByCategory, NODE_DEFINITIONS } from '@genfeedai/types';
7
7
  import { useReactFlow, getBezierPath, BaseEdge, useNodes, ViewportPortal, useViewport, useStore, ReactFlow, SelectionMode, ConnectionMode, Background, BackgroundVariant, Controls, MiniMap } from '@xyflow/react';
8
8
  import { Plus, Search, Play, Pause, Trash2, AlignHorizontalSpaceAround, AlignVerticalSpaceAround, Grid3X3, Ungroup, Group, Palette, Lock, Unlock, X, Keyboard, PanelLeft, AlertTriangle, CheckCircle, Info, XCircle, Check, Copy, DollarSign } from 'lucide-react';
@@ -2148,7 +2148,7 @@ function supportsImageInput(schema) {
2148
2148
  if (!schema) return true;
2149
2149
  const properties = schema.properties;
2150
2150
  if (!properties) return true;
2151
- return !!(properties.image || properties.image_input || properties.start_image || properties.first_frame_image || properties.reference_images);
2151
+ return !!(properties.image || properties.image_input || properties.image_url || properties.image_urls || properties.start_image || properties.first_frame_image || properties.reference_images);
2152
2152
  }
2153
2153
  function getEdgeDataType(edge, nodeMap) {
2154
2154
  const sourceNode = nodeMap.get(edge.source);
@@ -2670,3 +2670,5 @@ function WorkflowCanvas({
2670
2670
  }
2671
2671
 
2672
2672
  export { ConnectionDropMenu, DEFAULT_GROUP_COLORS, EdgeToolbar, EditableEdge, GROUP_COLORS, GlobalImageHistory, GroupOverlay, HelperLines, NodeSearch, NotificationToast, PauseEdge, ReferenceEdge, ShortcutHelpModal, WorkflowCanvas };
2673
+ //# sourceMappingURL=chunk-RY6OZJ7A.mjs.map
2674
+ //# sourceMappingURL=chunk-RY6OZJ7A.mjs.map