import { type Ref } from '#imports'; import type { Attachment, PreSeededToolResult, AutoExecuteTool } from '#blokkli/agent/app/types'; import type { SelectedBlock } from '#blokkli/agent/shared/types'; import type { BlokkliApp } from '#blokkli/editor/types/app'; import type { FullBlokkliAdapter } from '#blokkli/editor/adapter'; import type { SocketProvider } from './socketProvider.js'; import type { ConversationProvider } from './conversationProvider.js'; import type { PlanProvider } from './planProvider.js'; import type { ToolsProvider } from './toolsProvider.js'; export type SendPromptOptions = { prompt: string; displayPrompt?: string; selectedBlocks?: SelectedBlock[]; attachments?: Attachment[]; autoLoadTools?: string[]; autoLoadSkills?: string[]; preSeededResults?: PreSeededToolResult[]; autoExecuteTools?: AutoExecuteTool[]; /** * When set, the server truncates Session.messages at the Nth real user * turn (0-based) before processing this prompt. Used by retry/edit. */ rollbackToUserMessageIndex?: number; /** * Id of the prompt definition that triggered this send, if any. Stored on * the user message so retry can re-run `preExecute` against current * (post-rollback) page state. */ promptId?: string; }; export type AgentOrchestrator = { isReady: Ref; hasBeenReady: Ref; isProcessing: Ref; isThinking: Ref; connect: () => void; disconnect: () => void; sendPrompt: (options: SendPromptOptions) => void; retry: (targetItemId?: string) => void; rollbackAndSend: (targetItemId: string, newPrompt?: string) => void; cancel: () => void; newConversation: () => void; getTranscript: () => void; switchConversation: (id: string) => Promise; deleteConversation: (id: string) => Promise; refreshConversationList: () => Promise; }; export default function agentProvider({ app, adapter, agentName, socket, conversation, plan, tools, }: { app: BlokkliApp; adapter: FullBlokkliAdapter; agentName: string; socket: SocketProvider; conversation: ConversationProvider; plan: PlanProvider; tools: ToolsProvider; }): AgentOrchestrator;