n8n/packages/@n8n/instance-ai/src/workflow-loop/workflow-task-service.ts
oleg 629826ca1d
Some checks are pending
Build: Benchmark Image / build (push) Waiting to run
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.x) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.14.1) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (25.x) (push) Waiting to run
CI: Master (Build, Test, Lint) / Lint (push) Waiting to run
CI: Master (Build, Test, Lint) / Performance (push) Waiting to run
CI: Master (Build, Test, Lint) / Notify Slack on failure (push) Blocked by required conditions
Util: Sync API Docs / sync-public-api (push) Waiting to run
feat: Instance AI and local gateway modules (no-changelog) (#27206)
Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
Co-authored-by: Albert Alises <albert.alises@gmail.com>
Co-authored-by: Jaakko Husso <jaakko@n8n.io>
Co-authored-by: Dimitri Lavrenük <20122620+dlavrenuek@users.noreply.github.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Tuukka Kantola <Tuukkaa@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com>
Co-authored-by: Raúl Gómez Morales <raul00gm@gmail.com>
Co-authored-by: Elias Meire <elias@meire.dev>
Co-authored-by: Dimitri Lavrenük <dimitri.lavrenuek@n8n.io>
Co-authored-by: Tomi Turtiainen <10324676+tomi@users.noreply.github.com>
Co-authored-by: Mutasem Aldmour <mutasem@n8n.io>
2026-04-01 21:33:38 +03:00

46 lines
1.4 KiB
TypeScript

import type { WorkflowTaskService } from '../types';
import { WorkflowLoopRuntime } from './runtime';
import type {
VerificationResult,
WorkflowBuildOutcome,
WorkflowLoopAction,
} from './workflow-loop-state';
import type { WorkflowLoopStorage } from '../storage/workflow-loop-storage';
export class WorkflowTaskCoordinator implements WorkflowTaskService {
private readonly runtime: WorkflowLoopRuntime;
constructor(
private readonly threadId: string,
private readonly storage: WorkflowLoopStorage,
) {
this.runtime = new WorkflowLoopRuntime(storage);
}
async reportBuildOutcome(outcome: WorkflowBuildOutcome): Promise<WorkflowLoopAction> {
return await this.runtime.applyBuildOutcome(this.threadId, outcome);
}
async reportVerificationVerdict(verdict: VerificationResult): Promise<WorkflowLoopAction> {
return await this.runtime.applyVerificationVerdict(this.threadId, verdict);
}
async getBuildOutcome(workItemId: string): Promise<WorkflowBuildOutcome | undefined> {
const item = await this.storage.getWorkItem(this.threadId, workItemId);
return item?.lastBuildOutcome ?? undefined;
}
async updateBuildOutcome(
workItemId: string,
update: Partial<WorkflowBuildOutcome>,
): Promise<void> {
const item = await this.storage.getWorkItem(this.threadId, workItemId);
if (!item?.lastBuildOutcome) return;
await this.storage.saveWorkItem(this.threadId, item.state, item.attempts, {
...item.lastBuildOutcome,
...update,
});
}
}