import { proxyActivities } from "@temporalio/workflow"; import type { WorkbenchActivityConfig, WorkbenchTurnInput } from "./contracts.ts"; type WorkbenchActivities = { dispatchWorkbenchTurn(input: WorkbenchTurnInput): Promise>; cancelWorkbenchTurn(input: { actor: WorkbenchTurnInput["actor"]; traceId: string; params: Record }): Promise>; }; 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; 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 }; } function workbenchActivities(activity: WorkbenchActivityConfig) { return proxyActivities({ startToCloseTimeout: `${activity.startToCloseTimeoutMs} milliseconds`, retry: { initialInterval: `${activity.retryInitialIntervalMs} milliseconds`, maximumInterval: `${activity.retryMaximumIntervalMs} milliseconds`, maximumAttempts: activity.retryMaximumAttempts } }); }