import type { WorkflowAgentCallCancellation, WorkflowManager } from "@automatalabs/workflows"; import type { ProjectContext, WorkflowProjectRegistry } from "../project-registry.js"; import type { WorkflowSetupResponseToolInput } from "../workflow-tool-input.js"; import { WorkflowPermissionBroker, type WorkflowPendingPermission, type WorkflowPermissionDecisionResponse, type WorkflowPermissionResponseAcknowledgement } from "../workflow-permissions.js"; export interface RunControlOwnerView { pid: number; instanceId?: string; version?: string; lameDuck?: boolean; activeRuns?: number; controlProtocol?: 1; } export type RoutedRunControlResult = { kind: "whole"; state: "settled"; stopped: boolean; alreadyTerminal: boolean; } | { kind: "whole"; state: "pending"; operationId: string; requestedAt: string; owner?: RunControlOwnerView; } | { kind: "agent"; cancellation: WorkflowAgentCallCancellation; }; export interface WorkflowRunControlRouter { control(manager: WorkflowManager, input: { runId: string; callIndex?: number; forceOwner?: boolean; }): Promise; listPermissions(manager: WorkflowManager, runId: string): Promise; respondPermission(manager: WorkflowManager, input: { runId: string; permissionId: string; response: WorkflowPermissionDecisionResponse; }): Promise; respondSetup(manager: WorkflowManager, input: WorkflowSetupResponseToolInput): Promise; /** Deliver a pause request to the run's live execution owner. Returns false when the owner no longer runs it. */ pause(manager: WorkflowManager, runId: string): Promise; } export type InternalRunControlRequest = { operationId: string; runId: string; action: "stop"; } | { operationId: string; runId: string; action: "cancel-agent"; callIndex: number; } | { operationId: string; runId: string; action: "pause"; } | { operationId: string; runId: string; action: "list-permissions"; } | { operationId: string; runId: string; action: "respond-permission"; permissionId: string; response: WorkflowPermissionDecisionResponse; } | { operationId: string; runId: string; action: "respond-setup"; setupId: string; response: WorkflowSetupResponseToolInput["response"]; }; export type InternalRunControlResponse = { ok: true; outcome: "stopped" | "already-terminal"; } | { ok: true; outcome: "agent-cancelled"; cancellation: WorkflowAgentCallCancellation; } | { ok: true; outcome: "pause-requested"; requested: boolean; } | { ok: true; outcome: "permissions-listed"; permissions: WorkflowPendingPermission[]; } | { ok: true; outcome: "permission-responded"; acknowledgement: WorkflowPermissionResponseAcknowledgement; } | { ok: true; outcome: "setup-responded"; } | { ok: false; code: "UNKNOWN_RUN" | "NOT_OWNER" | "INVALID_OPERATION" | "INTERNAL_ERROR"; message: string; }; export interface DaemonRunControlOptions { projects: WorkflowProjectRegistry; ownPid: number; ownInstanceId: string; key: Uint8Array; permissionBroker?: WorkflowPermissionBroker; respondSetup?: (context: ProjectContext, input: WorkflowSetupResponseToolInput) => void | Promise; log?: (line: string) => void; fetch?: typeof fetch; kill?: (pid: number, signal: NodeJS.Signals) => void; isPidAlive?: (pid: number) => boolean; } export declare class DaemonRunControl implements WorkflowRunControlRouter { private readonly options; private readonly log; private readonly fetchImpl; private readonly killProcess; private readonly isPidAlive; private readonly permissionBroker; private processingPending; constructor(options: DaemonRunControlOptions); private resolveOwner; private controlCapable; private post; private settledWhole; private applyWholeIntent; applyLocal(request: InternalRunControlRequest): Promise; processPendingIntents(): Promise; private forceOwner; pause(manager: WorkflowManager, runId: string): Promise; listPermissions(manager: WorkflowManager, runId: string): Promise; respondPermission(manager: WorkflowManager, input: { runId: string; permissionId: string; response: WorkflowPermissionDecisionResponse; }): Promise; private respondSetupLocally; respondSetup(manager: WorkflowManager, input: WorkflowSetupResponseToolInput): Promise; control(manager: WorkflowManager, input: { runId: string; callIndex?: number; forceOwner?: boolean; }): Promise; } //# sourceMappingURL=run-control.d.ts.map