Files
pikasTech-HWLAB/internal/workbench/workflows.ts
T

46 lines
2.3 KiB
TypeScript

import { proxyActivities } from "@temporalio/workflow";
import type { WorkbenchActivityConfig, WorkbenchSteerInput, WorkbenchTurnInput } from "./contracts.ts";
type WorkbenchActivities = {
dispatchWorkbenchTurn(input: WorkbenchTurnInput): Promise<Record<string, unknown>>;
steerWorkbenchTurn(input: WorkbenchSteerInput): Promise<Record<string, unknown>>;
cancelWorkbenchTurn(input: { actor: WorkbenchTurnInput["actor"]; traceId: string; params: Record<string, unknown> }): Promise<Record<string, unknown>>;
};
export async function workbenchTurnWorkflow(input: WorkbenchTurnInput & { activity: WorkbenchActivityConfig }) {
const activities = workbenchActivities(input.activity);
const dispatch = await activities.dispatchWorkbenchTurn(input);
return { accepted: true, traceId: input.traceId, dispatch, terminalAuthority: "hwlab.event.v1", resultSynthesized: false };
}
export async function workbenchCancelWorkflow(input: { actor: WorkbenchTurnInput["actor"]; traceId: string; params: Record<string, unknown>; activity: WorkbenchActivityConfig }) {
const activities = workbenchActivities(input.activity);
const cancel = await activities.cancelWorkbenchTurn(input);
return { accepted: true, traceId: input.traceId, cancel, terminalAuthority: "hwlab.event.v1", resultSynthesized: false };
}
export async function workbenchSteerWorkflow(input: WorkbenchSteerInput & { activity: WorkbenchActivityConfig }) {
const activities = workbenchActivities(input.activity);
const steer = await activities.steerWorkbenchTurn(input);
return {
accepted: true,
traceId: typeof steer.traceId === "string" ? steer.traceId : input.steerTraceId,
targetTraceId: input.targetTraceId,
steerTraceId: input.steerTraceId,
requestedDelivery: steer.requestedDelivery ?? "steer",
delivery: steer.delivery ?? null,
agentRun: steer.agentRun ?? null,
steer,
terminalAuthority: "hwlab.event.v1",
resultSynthesized: false
};
}
function workbenchActivities(activity: WorkbenchActivityConfig) {
return proxyActivities<WorkbenchActivities>({
startToCloseTimeout: `${activity.startToCloseTimeoutMs} milliseconds`,
retry: { initialInterval: `${activity.retryInitialIntervalMs} milliseconds`, maximumInterval: `${activity.retryMaximumIntervalMs} milliseconds`, maximumAttempts: activity.retryMaximumAttempts }
});
}