Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions electron/main/ipc-handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -820,7 +820,7 @@ export function setupIpcHandlers(pythonBridge: PythonBridge, getWindow: WindowGe
})

// Run a process extension in an isolated worker thread
ipcMain.handle('extensions:runProcess', async (_, extensionId: string, input: { filePath?: string; text?: string }, params: Record<string, unknown>) => {
ipcMain.handle('extensions:runProcess', async (_, extensionId: string, nodeId: string, input: { filePath?: string; text?: string }, params: Record<string, unknown>) => {
const userData = app.getPath('userData')
const { extensionsDir, workspaceDir } = getSettings(userData)

Expand Down Expand Up @@ -848,7 +848,7 @@ export function setupIpcHandlers(pythonBridge: PythonBridge, getWindow: WindowGe
runner = getProcessRunner(extensionId, extDir, entry, workspaceDir, app.getPath('temp'))
}

const result = await runner.run(input, params)
const result = await runner.run(input, params, nodeId)
return { success: true, result }
} catch (err) {
return { success: false, error: String(err) }
Expand Down
7 changes: 6 additions & 1 deletion electron/main/process-runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ parentPort.on('message', async (msg) => {
const context = {
workspaceDir: workerData.workspaceDir,
tempDir: workerData.tempDir,
nodeId: msg.nodeId ?? '',
log: (m) => parentPort.postMessage({ type: 'log', message: String(m) }),
progress: (pct, label) => parentPort.postMessage({ type: 'progress', percent: pct, label }),
}
Expand Down Expand Up @@ -59,6 +60,7 @@ export interface IProcessRunner {
run(
input: ProcessInput,
params: Record<string, unknown>,
nodeId?: string,
onProgress?: (percent: number, label: string) => void,
onLog?: (message: string) => void,
): Promise<ProcessResult>
Expand Down Expand Up @@ -116,6 +118,7 @@ export class ProcessRunner implements IProcessRunner {
async run(
input: ProcessInput,
params: Record<string, unknown>,
nodeId?: string,
onProgress?: (percent: number, label: string) => void,
onLog?: (message: string) => void,
): Promise<ProcessResult> {
Expand All @@ -138,7 +141,7 @@ export class ProcessRunner implements IProcessRunner {
}

worker.on('message', handler)
worker.postMessage({ action: 'run', input, params })
worker.postMessage({ action: 'run', input, params, nodeId: nodeId ?? '' })
})
}

Expand Down Expand Up @@ -170,6 +173,7 @@ export class PythonProcessRunner implements IProcessRunner {
async run(
input: ProcessInput,
params: Record<string, unknown>,
nodeId?: string,
onProgress?: (percent: number, label: string) => void,
onLog?: (message: string) => void,
): Promise<ProcessResult> {
Expand All @@ -182,6 +186,7 @@ export class PythonProcessRunner implements IProcessRunner {
proc.stdin.write(JSON.stringify({
input,
params,
nodeId: nodeId ?? '',
workspaceDir: this.workspaceDir,
tempDir: this.tempDir,
}) + '\n')
Expand Down
3 changes: 2 additions & 1 deletion electron/preload/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,11 @@ contextBridge.exposeInMainWorld('electron', {

runProcess: (
extensionId: string,
nodeId: string,
input: { filePath?: string; text?: string },
params: Record<string, unknown>,
): Promise<{ success: boolean; result?: { filePath?: string; text?: string }; error?: string }> =>
ipcRenderer.invoke('extensions:runProcess', extensionId, input, params),
ipcRenderer.invoke('extensions:runProcess', extensionId, nodeId, input, params),

onInstallProgress: (cb: (data: {
step: 'downloading' | 'extracting' | 'validating' | 'setting_up' | 'done' | 'error'
Expand Down
5 changes: 4 additions & 1 deletion src/areas/workflows/useWorkflowRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,12 @@ export function useWorkflowRunner(allExtensions: WorkflowExtension[]) {

} else {
// ── Process extension ────────────────────────────────────────────────
const extId = (node.data.extensionId ?? '').split('/')[0]
const parts = (node.data.extensionId ?? '').split('/')
const extId = parts[0]
const nodeId = parts[1] ?? ''
const result = await window.electron.extensions.runProcess(
extId,
nodeId,
{ filePath: nodeInputPath, text: nodeInputText },
node.data.params as Record<string, unknown>,
)
Expand Down
5 changes: 4 additions & 1 deletion src/areas/workflows/workflowRunStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,12 @@ export const useWorkflowRunStore = create<WorkflowRunStore>((set) => ({
}

} else {
const extId = (node.data.extensionId ?? '').split('/')[0]
const parts = (node.data.extensionId ?? '').split('/')
const extId = parts[0]
const nodeId = parts[1] ?? ''
const result = await window.electron.extensions.runProcess(
extId,
nodeId,
{ filePath: nodeInputPath, text: nodeInputText },
node.data.params as Record<string, unknown>,
)
Expand Down
2 changes: 1 addition & 1 deletion src/shared/types/electron.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ declare global {
uninstall: (extensionId: string) => Promise<{ success: boolean; error?: string }>
repair: (extensionId: string) => Promise<{ success: boolean; error?: string }>
reload: () => Promise<{ success: boolean; error?: string; errors?: Record<string, string> }>
runProcess: (extensionId: string, input: ProcessInput, params: Record<string, unknown>) => Promise<{ success: boolean; result?: ProcessResult; error?: string }>
runProcess: (extensionId: string, nodeId: string, input: ProcessInput, params: Record<string, unknown>) => Promise<{ success: boolean; result?: ProcessResult; error?: string }>
onInstallProgress: (cb: (data: {
step: 'downloading' | 'extracting' | 'validating' | 'setting_up' | 'done' | 'error'
percent?: number
Expand Down