import type { ToolCall, Usage } from '@agentclientprotocol/sdk'; import type { AgentKind } from '@lobu/core/contracts/worker/device-automation'; import type { ExecutorResult } from './automation.js'; export type AcpAgentKind = Extract; /** Configuration for one installed or packaged ACP agent entrypoint. */ export interface AutomationAcpAdapter { command: string; args?: string[]; env?: NodeJS.ProcessEnv; /** Mode applied before each prompt (Codex uses `agent`). */ defaultMode?: string; /** ACP config-option id for effort; providers do not use one common id. */ effortConfigId?: string; /** Preserve OpenCode's existing unattended `--auto` permission semantics. */ autoApprovePermissions?: boolean; /** Hide ambient global/project configuration while keeping provider auth data. */ isolateXdgConfig?: boolean; /** Provider extension metadata forwarded on both session/new and session/resume. */ sessionMeta?: Record; /** ACP MCP server name; controls provider-visible tool prefixes. */ mcpServerName?: string; } export type AutomationAcpAdapters = Partial>; export interface AcpTurnOptions { agentKind: AcpAgentKind; adapter: AutomationAcpAdapter; cwd: string; prompt: string; mcp: { url: string; bearer: string; }; resumeSessionId?: string; mode?: string; model?: string; effort?: string; sessionMeta?: Record; timeoutMs: number; abortSignal?: AbortSignal; onSessionReady: (sessionId: string) => Promise; transcript?: AcpTranscript; } export interface AcpTurnResult extends ExecutorResult { sessionId: string; transcriptJsonl: string; } type TranscriptEvent = { kind: 'assistant'; messageId: string; text: string; } | { kind: 'tool'; tool: ToolCall; } | { kind: 'tool-result'; toolCallId: string; failed: boolean; output: unknown; }; /** Builds the existing Lobu session JSONL shape from public ACP updates. */ export declare class AcpTranscript { private readonly cwd; private sessionId; private startedAt; private readonly entries; private parentId; private sequence; constructor(cwd: string); setSession(sessionId: string): void; appendTurn(prompt: string, events: TranscriptEvent[], usage?: Usage | null): void; /** True once a session id is bound, i.e. `toJsonl` can serialize. */ get hasSession(): boolean; /** * Append-only by construction: the header is frozen at session setup so each * finalize round's upload is a byte-exact prefix extension of the previous * one. The server's snapshot upsert rejects any divergent continuation. */ toJsonl(): string; private appendMessage; } /** Run one Automation prompt through a provider's stable ACP v1 entrypoint. */ export declare function runAcpTurn(options: AcpTurnOptions): Promise; export {}; //# sourceMappingURL=automation-acp.d.ts.map