import type { AgentEndEvent, ExtensionAPI, ExtensionContext, ExtensionFactory, TurnEndEvent } from '@earendil-works/pi-coding-agent'; import type { WaggleConfig, WaggleTurn } from '@openwaggle/waggle-core'; export type PiWaggleModel = NonNullable>; export type PiWaggleCustomMessage = Parameters[0]; export type PiWaggleSendMessageOptions = NonNullable[1]>; export interface PiWaggleTurnMetadataInput { readonly turnNumber: number; readonly agentIndex: number; } export interface PiWaggleTurnCompleteInput { readonly turn: WaggleTurn; readonly meta: TMeta; readonly messages: AgentEndEvent['messages']; } export interface PiWaggleTurnDecision { readonly continue: boolean; } export interface PiWaggleTurnMessageInput { readonly model: PiWaggleModel; readonly turn: WaggleTurn; readonly meta: TMeta; } export interface PiWaggleStartNextTurnInput extends PiWaggleTurnMessageInput { readonly message: PiWaggleCustomMessage; } export interface PiWaggleResolveTurnModelInput { readonly ctx: PiWaggleExtensionContext; readonly turn: WaggleTurn; readonly meta: TMeta; } export interface PiWaggleExtensionInput { readonly config: WaggleConfig; readonly createTurnMetadata: (input: PiWaggleTurnMetadataInput) => TMeta; readonly onTurnComplete: (input: PiWaggleTurnCompleteInput) => PiWaggleTurnDecision | Promise; readonly buildTurnMessage: (input: PiWaggleTurnMessageInput) => PiWaggleCustomMessage; readonly resolveTurnModel?: (input: PiWaggleResolveTurnModelInput) => PiWaggleModel | Promise; readonly startNextTurn?: (input: PiWaggleStartNextTurnInput) => void | Promise; readonly canStartNextTurn?: () => boolean; readonly onActiveTurnChange?: (meta: TMeta) => void; readonly onTurnStart?: (meta: TMeta) => void; } export interface PiWaggleLoopInput extends PiWaggleExtensionInput { readonly onComplete: () => void; readonly onError: (error: unknown) => void; } export type PiWaggleAgentEndHandler = (event: AgentEndEvent, ctx: PiWaggleExtensionContext) => Promise | void; export type PiWaggleTurnEndHandler = (event: TurnEndEvent, ctx: PiWaggleExtensionContext) => Promise | void; export interface PiWaggleExtensionContext { readonly modelRegistry: Pick; } export interface PiWaggleLoopApi { readonly sendMessage: ExtensionAPI['sendMessage']; readonly setModel: ExtensionAPI['setModel']; } export interface PiWaggleExtensionApi extends PiWaggleLoopApi { readonly onAgentEnd: (handler: PiWaggleAgentEndHandler) => void; } export interface PiWaggleExtensionController { readonly factory: ExtensionFactory; readonly done: Promise; } export declare function createPiWaggleLoopHandler(input: PiWaggleLoopInput, api: PiWaggleLoopApi): PiWaggleAgentEndHandler; export interface PiWaggleTurnCompletionHandlers { readonly onTurnEnd: PiWaggleTurnEndHandler; readonly onAgentEnd: PiWaggleAgentEndHandler; } export declare function createPiWaggleTurnCompletionHandlers(input: PiWaggleLoopInput, api: PiWaggleLoopApi): PiWaggleTurnCompletionHandlers; export declare function createPiWaggleTurnEndHandler(input: PiWaggleLoopInput, api: PiWaggleLoopApi): PiWaggleTurnEndHandler; export declare function registerPiWaggleLoop(input: PiWaggleLoopInput, api: PiWaggleExtensionApi): void; export declare function createPiWaggleExtension(input: PiWaggleExtensionInput): PiWaggleExtensionController;