Files
openclaw/src/tasks/detached-task-runtime-contract.ts
2026-04-26 01:58:00 -07:00

154 lines
4.2 KiB
TypeScript

import type { OpenClawConfig } from "../config/types.openclaw.js";
import type {
TaskDeliveryState,
TaskDeliveryStatus,
TaskNotifyPolicy,
TaskRecord,
TaskRuntime,
TaskScopeKind,
TaskStatus,
TaskTerminalOutcome,
} from "./task-registry.types.js";
export type DetachedTaskCreateParams = {
runtime: TaskRuntime;
taskKind?: string;
sourceId?: string;
requesterSessionKey?: string;
ownerKey?: string;
scopeKind?: TaskScopeKind;
requesterOrigin?: TaskDeliveryState["requesterOrigin"];
parentFlowId?: string;
childSessionKey?: string;
parentTaskId?: string;
agentId?: string;
runId?: string;
label?: string;
task: string;
preferMetadata?: boolean;
notifyPolicy?: TaskNotifyPolicy;
deliveryStatus?: TaskDeliveryStatus;
};
export type DetachedRunningTaskCreateParams = DetachedTaskCreateParams & {
startedAt?: number;
lastEventAt?: number;
progressSummary?: string | null;
};
export type DetachedTaskStartParams = {
runId: string;
runtime?: TaskRuntime;
sessionKey?: string;
startedAt?: number;
lastEventAt?: number;
progressSummary?: string | null;
eventSummary?: string | null;
};
export type DetachedTaskProgressParams = {
runId: string;
runtime?: TaskRuntime;
sessionKey?: string;
lastEventAt?: number;
progressSummary?: string | null;
eventSummary?: string | null;
};
export type DetachedTaskCompleteParams = {
runId: string;
runtime?: TaskRuntime;
sessionKey?: string;
endedAt: number;
lastEventAt?: number;
progressSummary?: string | null;
terminalSummary?: string | null;
terminalOutcome?: TaskTerminalOutcome | null;
};
export type DetachedTaskFailParams = {
runId: string;
runtime?: TaskRuntime;
sessionKey?: string;
status?: Extract<TaskStatus, "failed" | "timed_out" | "cancelled">;
endedAt: number;
lastEventAt?: number;
error?: string;
progressSummary?: string | null;
terminalSummary?: string | null;
};
export type DetachedTaskFinalizeParams = {
runId: string;
runtime?: TaskRuntime;
sessionKey?: string;
status: Extract<TaskStatus, "succeeded" | "failed" | "timed_out" | "cancelled">;
endedAt: number;
lastEventAt?: number;
error?: string;
progressSummary?: string | null;
terminalSummary?: string | null;
terminalOutcome?: TaskTerminalOutcome | null;
};
export type DetachedTaskDeliveryStatusParams = {
runId: string;
runtime?: TaskRuntime;
sessionKey?: string;
deliveryStatus: TaskDeliveryStatus;
error?: string;
};
export type DetachedTaskCancelParams = {
cfg: OpenClawConfig;
taskId: string;
};
export type DetachedTaskCancelResult = {
found: boolean;
cancelled: boolean;
reason?: string;
task?: TaskRecord;
};
export type DetachedTaskRecoveryAttemptParams = {
taskId: string;
runtime: TaskRuntime;
task: TaskRecord;
now: number;
};
export type DetachedTaskRecoveryAttemptResult = {
recovered: boolean;
};
export type DetachedTaskLifecycleRuntime = {
createQueuedTaskRun: (params: DetachedTaskCreateParams) => TaskRecord;
createRunningTaskRun: (params: DetachedRunningTaskCreateParams) => TaskRecord;
startTaskRunByRunId: (params: DetachedTaskStartParams) => TaskRecord[];
recordTaskRunProgressByRunId: (params: DetachedTaskProgressParams) => TaskRecord[];
finalizeTaskRunByRunId?: (params: DetachedTaskFinalizeParams) => TaskRecord[];
completeTaskRunByRunId: (params: DetachedTaskCompleteParams) => TaskRecord[];
failTaskRunByRunId: (params: DetachedTaskFailParams) => TaskRecord[];
setDetachedTaskDeliveryStatusByRunId: (params: DetachedTaskDeliveryStatusParams) => TaskRecord[];
/**
* Return `found: false` when this runtime does not own the task so core can
* fall back to the legacy detached-task cancel path.
*/
cancelDetachedTaskRunById: (
params: DetachedTaskCancelParams,
) => Promise<DetachedTaskCancelResult>;
/**
* Give a registered detached runtime one last chance to recover a stale task
* before core marks it lost during maintenance.
*/
tryRecoverTaskBeforeMarkLost?: (
params: DetachedTaskRecoveryAttemptParams,
) => DetachedTaskRecoveryAttemptResult | Promise<DetachedTaskRecoveryAttemptResult>;
};
export type DetachedTaskLifecycleRuntimeRegistration = {
pluginId: string;
runtime: DetachedTaskLifecycleRuntime;
};