import type { ImageContent } from "@bastani/pi-ai/compat"; import type { AgentMessage } from "@earendil-works/pi-agent-core"; import { type BuildSystemPromptOptions, type NormalizedBuildSystemPromptOptions } from "../system-prompt.ts"; import type { AgentBeforeSettleEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderRequestEvent, BoundaryContextPreview, ContextEvent, ContextWithSystemEvent, Extension, ExtensionContext, ExtensionError, ExtensionEvent, InputEvent, InputEventResult, InputSource, MessageEndEvent, ProjectTrustEvent, ResourcesDiscoverEvent, SessionBeforeCompactResult, SessionBeforeForkResult, SessionBeforeSwitchResult, SessionBeforeTreeResult, SessionBoundaryDraft, SessionRecoveryReplayEvent, SessionRecoveryRestoreEvent, ToolCallEvent, ToolCallEventResult, ToolResultEvent, ToolResultEventResult, TurnEndEvent, UserBashEvent, UserBashEventResult } from "./types.ts"; /** Combined result from all before_agent_start handlers. */ export interface BeforeAgentStartCombinedResult { messages: NonNullable[]; systemPromptOptions: NormalizedBuildSystemPromptOptions; } export interface ResourcesDiscoverCombinedResult { skillPaths: Array<{ path: string; extensionPath: string; }>; promptPaths: Array<{ path: string; extensionPath: string; }>; themePaths: Array<{ path: string; extensionPath: string; }>; } /** Events handled by the generic emit() method. */ export type RunnerEmitEvent = Exclude; export interface SessionRecoveryCombinedResult { notices: string[]; dropped: Set; /** Cards left pending without a turn; a later recovery is offered them again. */ deferred: Set; } export type BoundaryBaseEvent = Omit | Omit; export interface BoundaryDispatchResult { entries: SessionBoundaryDraft[]; continue: boolean; context: BoundaryContextPreview; valid: boolean; } export type RunnerEmitResult = TEvent extends { type: "session_before_switch"; } ? SessionBeforeSwitchResult | undefined : TEvent extends { type: "session_before_fork"; } ? SessionBeforeForkResult | undefined : TEvent extends { type: "session_before_compact"; } ? SessionBeforeCompactResult | undefined : TEvent extends { type: "session_before_tree"; } ? SessionBeforeTreeResult | undefined : undefined; type EmitExtensionError = (error: ExtensionError) => void; export declare function snapshotEventHandlers(extensions: Extension[], event: ExtensionEvent["type"]): { ext: Extension; handlers: ((...args: unknown[]) => Promise)[]; }[]; export declare function runGenericHandlers(extensions: Extension[], ctx: ExtensionContext, event: TEvent, emitError: EmitExtensionError, isCurrent?: () => boolean): Promise>; export declare function runMessageEndHandlers(extensions: Extension[], ctx: ExtensionContext, event: MessageEndEvent, emitError: EmitExtensionError): Promise; export declare function runToolResultHandlers(extensions: Extension[], ctx: ExtensionContext, event: ToolResultEvent, emitError: EmitExtensionError): Promise; export declare function runToolCallHandlers(extensions: Extension[], ctx: ExtensionContext, event: ToolCallEvent): Promise; export declare function runUserBashHandlers(extensions: Extension[], ctx: ExtensionContext, event: UserBashEvent, emitError: EmitExtensionError): Promise; /** * Run the request-time transforms in two phases. `context` handlers see the conversation * only and Atomic restores the prompt and tool state after each; `context_with_system` * handlers then see the full transcript and their output is used as returned. */ export declare function runContextHandlers(extensions: Extension[], ctx: ExtensionContext, messages: AgentMessage[], emitError: EmitExtensionError): Promise; /** Dispatch an actionable boundary event, revalidating the context preview after every handler. */ export declare function runBoundaryHandlers(extensions: Extension[], ctx: ExtensionContext, baseEvent: BoundaryBaseEvent, buildContext: (entries: SessionBoundaryDraft[]) => BoundaryContextPreview | Promise, emitError: EmitExtensionError): Promise; export declare function runBeforeProviderRequestHandlers(extensions: Extension[], ctx: ExtensionContext, payload: unknown, emitError: EmitExtensionError): Promise; export declare function runBeforeAgentStartHandlers(extensions: Extension[], baseCtx: ExtensionContext, assertActive: () => void, prompt: string, images: ImageContent[] | undefined, baseOptions: BuildSystemPromptOptions, emitError: EmitExtensionError, customMessage?: import("../messages.ts").CustomMessage): Promise; export declare function runResourcesDiscoverHandlers(extensions: Extension[], ctx: ExtensionContext, cwd: string, reason: ResourcesDiscoverEvent["reason"], emitError: EmitExtensionError): Promise; export declare function runSessionRecoveryHandlers(extensions: Extension[], ctx: ExtensionContext, event: SessionRecoveryRestoreEvent | SessionRecoveryReplayEvent, emitError: EmitExtensionError): Promise; export declare function runInputHandlers(extensions: Extension[], ctx: ExtensionContext, text: string, images: ImageContent[] | undefined, source: InputSource, streamingBehavior: "steer" | "followUp" | undefined, emitError: EmitExtensionError): Promise; export {}; //# sourceMappingURL=runner-events.d.ts.map