import { type AgentTool } from "@earendil-works/pi-agent-core"; import { type Api, type Model } from "@earendil-works/pi-ai"; import type { AgentContext, StorageNamespace } from "./context"; import { type ChatMessage, type SessionStats } from "./message-utils"; import { type ProviderConfig } from "./provider-config"; import { type SkillMeta } from "./skills"; import { type ChatSession } from "./storage"; import type { CustomCommandsResult } from "./vfs/custom-commands"; export interface RuntimeAdapter { tools: AgentTool[] | ((ctx: AgentContext) => AgentTool[]); buildSystemPrompt: (skills: SkillMeta[], commandSnippets: string[]) => string; getDocumentId: () => Promise; getDocumentMetadata?: () => Promise<{ metadata: object; nameMap?: Record; } | null>; onToolResult?: (toolCallId: string, result: string, isError: boolean) => void; metadataTag?: string; staticFiles?: Record; customCommands?: (ns: StorageNamespace) => CustomCommandsResult; storageNamespace?: Partial; } export interface UploadedFile { name: string; size: number; } export interface RuntimeState { messages: ChatMessage[]; isStreaming: boolean; error: string | null; providerConfig: ProviderConfig | null; sessionStats: SessionStats; currentSession: ChatSession | null; sessions: ChatSession[]; nameMap: Record; uploads: UploadedFile[]; isUploading: boolean; skills: SkillMeta[]; vfsInvalidatedAt: number; } type StateListener = (state: RuntimeState) => void; export declare class AgentRuntime { readonly context: AgentContext; private agent; private config; private pendingConfig; private streamingMessageId; private isStreaming; private documentId; private currentSessionId; private sessionLoaded; private followMode; private skills; private adapter; private listeners; private state; private get ns(); private get tools(); constructor(adapter: RuntimeAdapter, context: AgentContext); getState(): RuntimeState; subscribe(listener: StateListener): () => void; private emit; private update; private bumpVfs; private updateMessages; setAdapter(adapter: RuntimeAdapter): void; getAvailableProviders(): string[]; getModelsForProvider(provider: string): Model[]; private getActiveApiKey; private handleAgentEvent; applyConfig(config: ProviderConfig): void; setProviderConfig(config: ProviderConfig): void; abort(): void; sendMessage(content: string, attachments?: string[]): Promise; clearMessages(): void; private refreshSessions; newSession(): Promise; switchSession(sessionId: string): Promise; deleteCurrentSession(): Promise; private onStreamingEnd; init(): Promise; uploadFiles(files: { name: string; size: number; data: Uint8Array; }[]): Promise; removeUpload(name: string): Promise; private refreshSkillsAndRebuildAgent; installSkill(inputs: { path: string; data: Uint8Array; }[]): Promise; uninstallSkill(name: string): Promise; toggleFollowMode(): void; toggleExpandToolCalls(): void; getName(id: number): string | undefined; private refreshNameMap; dispose(): void; } export {}; //# sourceMappingURL=runtime.d.ts.map