import type { OpenClawConfig } from "../../config/config.js"; import type { SessionAcpIdentity, AcpSessionRuntimeOptions, SessionAcpMeta, SessionEntry, } from "../../config/sessions/types.js"; import type { AcpRuntimeError } from "../runtime/errors.js"; import { requireAcpRuntimeBackend } from "../runtime/registry.js"; import { listAcpSessionEntries, readAcpSessionEntry, upsertAcpSessionMeta, } from "../runtime/session-meta.js"; import type { AcpRuntime, AcpRuntimeCapabilities, AcpRuntimeEvent, AcpRuntimeHandle, AcpRuntimePromptMode, AcpRuntimeSessionMode, AcpRuntimeStatus, } from "../runtime/types.js"; export type AcpSessionResolution = | { kind: "none"; sessionKey: string; } | { kind: "stale"; sessionKey: string; error: AcpRuntimeError; } | { kind: "ready"; sessionKey: string; meta: SessionAcpMeta; }; export type AcpInitializeSessionInput = { cfg: OpenClawConfig; sessionKey: string; agent: string; mode: AcpRuntimeSessionMode; resumeSessionId?: string; cwd?: string; backendId?: string; }; export type AcpTurnAttachment = { mediaType: string; data: string; }; export type AcpRunTurnInput = { cfg: OpenClawConfig; sessionKey: string; text: string; attachments?: AcpTurnAttachment[]; mode: AcpRuntimePromptMode; requestId: string; signal?: AbortSignal; onEvent?: (event: AcpRuntimeEvent) => Promise | void; }; export type AcpCloseSessionInput = { cfg: OpenClawConfig; sessionKey: string; reason: string; clearMeta?: boolean; allowBackendUnavailable?: boolean; requireAcpSession?: boolean; }; export type AcpCloseSessionResult = { runtimeClosed: boolean; runtimeNotice?: string; metaCleared: boolean; }; export type AcpSessionStatus = { sessionKey: string; backend: string; agent: string; identity?: SessionAcpIdentity; state: SessionAcpMeta["state"]; mode: AcpRuntimeSessionMode; runtimeOptions: AcpSessionRuntimeOptions; capabilities: AcpRuntimeCapabilities; runtimeStatus?: AcpRuntimeStatus; lastActivityAt: number; lastError?: string; }; export type AcpManagerObservabilitySnapshot = { runtimeCache: { activeSessions: number; idleTtlMs: number; evictedTotal: number; lastEvictedAt?: number; }; turns: { active: number; queueDepth: number; completed: number; failed: number; averageLatencyMs: number; maxLatencyMs: number; }; errorsByCode: Record; }; export type AcpStartupIdentityReconcileResult = { checked: number; resolved: number; failed: number; }; export type ActiveTurnState = { runtime: AcpRuntime; handle: AcpRuntimeHandle; abortController: AbortController; cancelPromise?: Promise; }; export type TurnLatencyStats = { completed: number; failed: number; totalMs: number; maxMs: number; }; export type AcpSessionManagerDeps = { listAcpSessions: typeof listAcpSessionEntries; readSessionEntry: typeof readAcpSessionEntry; upsertSessionMeta: typeof upsertAcpSessionMeta; requireRuntimeBackend: typeof requireAcpRuntimeBackend; }; export const DEFAULT_DEPS: AcpSessionManagerDeps = { listAcpSessions: listAcpSessionEntries, readSessionEntry: readAcpSessionEntry, upsertSessionMeta: upsertAcpSessionMeta, requireRuntimeBackend: requireAcpRuntimeBackend, }; export type { AcpSessionRuntimeOptions, SessionAcpMeta, SessionEntry };