import type { ProviderHeaders } from "@bastani/pi-ai"; import type { Api, AssistantMessage, ImageContent, Message, Model, TextContent, ToolResultMessage } from "@bastani/pi-ai/compat"; import type { Agent, AgentEvent, AgentMessage, AgentState, AgentTool, ThinkingLevel } from "@earendil-works/pi-agent-core"; import type { PendingPostToolCompactionGuard } from "./agent-session-post-tool-compaction.ts"; import type { RecordedToolLoadout } from "./agent-session-state.ts"; import type { AgentSessionEvent, AgentSessionEventListener, AgentSessionReloadOptions, ClearQueueOptions, DrainedAgentQueues, ExtensionBindings, InterruptQueueHold, ModelCycleResult, ModelMutationOptions, PromptDisposition, PromptOptions, QueuedInputDisposition, SessionRecoveryReport, SessionStats, ToolDefinitionEntry } from "./agent-session-types.js"; import type { BashResult } from "./bash-executor.ts"; import type { CompactionUrgency, PlannerAuth, VerbatimCompactionParameters, VerbatimCompactionResult } from "./compaction/index.ts"; import type { AgentActivityOutcome, BoundaryContextPreview, ContextUsage, ExtensionCommandContextActions, ExtensionErrorListener, ExtensionMode, ExtensionRunner, ExtensionUIContext, OrchestrationContext, ReplacedSessionContext, SendMessageOptions, SendMessagesOptions, SessionBoundaryDraft, SessionRecoveryReason, SessionStartEvent, ToolDefinition, ToolInfo } from "./extensions/index.js"; import type { SessionWorkflows } from "./extensions/workflow-run-control.js"; import type { SessionWorkflowsHandle } from "./extensions/workflow-run-control-hub.js"; import type { BashExecutionMessage, CustomMessage } from "./messages.ts"; import type { ExtensionProviderTransaction, ModelRuntime } from "./model-runtime.js"; import type { PathMetadata } from "./package-manager.ts"; import type { PromptTemplate } from "./prompt-templates.ts"; import type { ResourceLoader } from "./resource-loader.ts"; import type { BranchSummaryEntry, SessionEntry, SessionManager, SessionSummaryEntry } from "./session-manager.ts"; import type { SettingsManager } from "./settings-manager.ts"; import type { NormalizedBuildSystemPromptOptions } from "./system-prompt.ts"; import type { ToolStatusReport } from "./tool-status.js"; import type { BashOperations } from "./tools/bash.js"; import type { ToolExecutionScheduler } from "./tools/tool-concurrency.ts"; export interface SessionCompactOptions extends Partial { /** Exact `provider/model` ID for this run only; overrides the `compactionModel` setting without saving it. */ compactionModel?: string; } export interface VerbatimCompactionApplyOptions { /** Per-model planner credentials; a borrowed fallback uses its own, never the session model's. */ resolvePlannerAuth: (model: Model) => Promise; abortController: AbortController; backupLabel: string; compression_ratio?: number; preserve_recent?: number; query?: string; compactionModel?: string; reason: "manual" | "threshold" | "overflow"; /** Reports when a session_before_compact override becomes the active compaction source. */ onCompactionSource?: (fromExtension: boolean) => void; /** Only `load_bearing` may reach the context-destroying fresh rung. */ urgency: CompactionUrgency; /** * Admit a compactable region below the planner minimum. * * Narrow on purpose. Overflow recovery sets it because a real provider * overflow is already known, and the post-tool preflight sets it only when its * projected context is genuinely over the provider hard input limit. A * threshold crossing that still fits must not clear context: the follow-up * request can be sent as-is. */ allowSmallRegion?: boolean; } /** Outcome of an automatic compaction admission and persistence attempt. */ export type AutoCompactionRunOutcome = "compacted" | "not_compactable" | "deferred" | "failed"; export interface ExtensionResourcePathEntry { path: string; extensionPath: string; } export interface ExtensionResourcePathResult { path: string; metadata: PathMetadata; } export interface RuntimeBuildOptions { activeToolNames?: string[]; flagValues?: Map; includeAllExtensionTools?: boolean; preserveRunner?: boolean; } export interface AgentSessionQueuePauseControl { readonly queuedMessagesPaused: boolean; pauseQueuedMessages(): void; /** Release the hold without starting a turn; true means raw queued work was released. */ resumeQueuedMessages(beforeRelease?: () => void): Promise; } export interface AgentSessionMethodSurface extends AgentSessionQueuePauseControl { readonly orchestrationContext: import("./extensions/index.js").OrchestrationContext | undefined; readonly modelRuntime: ModelRuntime; readonly state: AgentState; readonly model: Model | undefined; readonly thinkingLevel: ThinkingLevel; readonly isStreaming: boolean; readonly systemPrompt: string; readonly retryAttempt: number; readonly isCompacting: boolean; readonly compactionReason?: import("./agent-session-types.js").CompactionReason; readonly messages: AgentMessage[]; readonly steeringMode: "all" | "one-at-a-time"; readonly followUpMode: "all" | "one-at-a-time"; readonly sessionFile: string | undefined; readonly sessionId: string; readonly sessionName: string | undefined; readonly sessionSummary: SessionSummaryEntry | undefined; readonly scopedModels: ReadonlyArray<{ model: Model; thinkingLevel?: ThinkingLevel; }>; readonly promptTemplates: ReadonlyArray; readonly pendingMessageCount: number; readonly resourceLoader: ResourceLoader; readonly autoCompactionEnabled: boolean; readonly isRetrying: boolean; readonly autoRetryEnabled: boolean; readonly isBashRunning: boolean; readonly hasPendingBashMessages: boolean; readonly extensionRunner: ExtensionRunner; /** Typed management of the workflow runs this session owns. */ readonly workflows: SessionWorkflows; _handleAgentEvent(event: AgentEvent): Promise | void; _getRequiredRequestAuth(model: Model, signal?: AbortSignal): Promise<{ apiKey?: string; headers?: ProviderHeaders; baseUrl?: string; }>; _installAgentToolHooks(): void; _installAgentNextTurnRefresh(): void; _installAgentRequestProjection(): void; _installAgentBoundaryHooks(): void; _refreshFinalizedContext(): void; _projectFinalizedMessages(): AgentMessage[]; refreshContext(): void; _dispatchTurnEndBoundary(message: AssistantMessage, toolResults: ToolResultMessage[], awaitPersistence?: boolean): Promise; _applyBoundaryDrafts(manager: SessionManager, drafts: SessionBoundaryDraft[]): Promise; _createBoundaryPreviewManager(drafts: SessionBoundaryDraft[]): Promise; _getPendingBoundaryMessages(): AgentMessage[]; _buildBoundaryContext(drafts: SessionBoundaryDraft[], boundary: "turn_end" | "agent_before_settle"): Promise; _commitBoundaryDrafts(drafts: SessionBoundaryDraft[]): Promise; _reportInvalidBoundaryContinuation(event: "turn_end" | "agent_before_settle"): void; _findPersistedMessageEntryId(message: AgentMessage): string | undefined; _omitRecoveryAttempt(message: AssistantMessage, toolResults?: AgentMessage[]): Promise; _omitTrailingAssistantAttempt(accept?: (message: AssistantMessage) => boolean): Promise; _runBeforeSettleBoundary(): Promise; _emit(event: AgentSessionEvent): void; _emitQueueUpdate(): void; _createRetryPromiseForAgentEnd(event: AgentEvent): void; _findLastAssistantInMessages(messages: AgentMessage[]): AssistantMessage | undefined; _processAgentEvent(event: AgentEvent): Promise; _applyInterruptAbortMessage(event: AgentEvent): void; _applyProviderErrorGuidance(event: AgentEvent): void; _resolveRetry(): void; _getUserMessageText(message: Message): string; _findLastAssistantMessage(): AssistantMessage | undefined; _replaceMessageInPlace(target: AgentMessage, replacement: AgentMessage): void; _emitExtensionEvent(event: AgentEvent): Promise; subscribe(listener: AgentSessionEventListener): () => void; _disconnectFromAgent(): void; dispose(): Promise; getAgentTaskHost(): import("./tasks/agent-adapter.js").AgentTaskHost; _getCommandTaskOwner(): import("./tools/bash-pty-native.js").SupervisedCommandOwner | undefined; closeSessionTasks(): Promise; /** Internal workflow pause: cancel owned execution without closing message admission. */ pauseTasks(): Promise; resumeTasks(): void; getActiveToolNames(): string[]; getCallableToolNames(): string[]; getAllTools(): ToolInfo[]; getToolDefinition(name: string): ToolDefinition | undefined; /** Explain which tools are active, which are not (and why), and which selected names nothing registered. */ getToolStatus(): ToolStatusReport; setActiveToolsByName(toolNames: string[]): void; _setActiveTools(toolNames: string[]): void; setScopedModels(scopedModels: Array<{ model: Model; thinkingLevel?: ThinkingLevel; }>): void; _normalizePromptSnippet(text: string | undefined): string | undefined; _normalizePromptGuidelines(guidelines: string[] | undefined): string[]; _rebuildSystemPrompt(toolNames: string[]): void; _preparePromptAndToolLoadout(options: NormalizedBuildSystemPromptOptions, messages?: AgentMessage[]): import("@bastani/pi-ai").SystemMessage | undefined; _restoreToolsFromTranscript(options?: { startup?: boolean; }): void; _refreshBaseSystemPromptFromActiveTools(): void; prompt(text: string, options?: PromptOptions): Promise; _runAgentPrompt(messages: AgentMessage | AgentMessage[], promptStarted?: () => void, reportDispatch?: (disposition: PromptDisposition) => void, prepared?: boolean, customStarter?: CustomMessage): Promise; _runAgentContinue(): Promise; _continueQueuedAgentMessages(): Promise; _tryExecuteExtensionCommand(text: string): Promise; _expandSkillCommand(text: string): string; steer(text: string, images?: ImageContent[], options?: Pick): Promise; followUp(text: string, images?: ImageContent[], options?: Pick): Promise; sendUserMessage(content: string | (TextContent | ImageContent)[], options?: { deliverAs?: "steer" | "followUp"; expandPromptTemplates?: boolean; }): Promise; _queueSteer(text: string, images?: ImageContent[]): Promise; _queueFollowUp(text: string, images?: ImageContent[]): Promise; _throwIfExtensionCommand(text: string): void; sendCustomMessage(message: Pick, "customType" | "content" | "display" | "details">, options?: SendMessageOptions): Promise; sendCustomMessages(messages: Array, "customType" | "content" | "display" | "details">>, options?: SendMessagesOptions): Promise; _commitAdmittedCustomMessage(message: CustomMessage, options?: SendMessageOptions): Promise; _commitAdmittedCustomMessages(messages: CustomMessage[], options?: SendMessagesOptions): Promise; _appendCustomMessage(message: CustomMessage): Promise; _flushPendingCustomMessages(): Promise; _enqueueInterruptCustomMessage(message: CustomMessage, options?: SendMessageOptions): Promise; _sendInterruptCustomMessageNow(message: CustomMessage, options?: SendMessageOptions): Promise; _ensureActiveInterruptQueueHold(): InterruptQueueHold; _restoreAndClearActiveInterruptQueueHold(): void; _queueAgentMessage(message: AgentMessage, delivery: "steer" | "followUp" | "interrupt"): void; _drainQueuedAgentMessages(): DrainedAgentQueues; _restoreQueuedAgentMessages(queues: DrainedAgentQueues): void; clearQueue(options?: ClearQueueOptions): { steering: string[]; followUp: string[]; }; getSteeringMessages(): readonly string[]; getFollowUpMessages(): readonly string[]; abort(): Promise; setSteeringMode(mode: "all" | "one-at-a-time"): void; setFollowUpMode(mode: "all" | "one-at-a-time"): void; _emitModelChanged(nextModel: Model, previousModel: Model | undefined, source: "set" | "cycle" | "restore" | "fallback"): void; _emitModelSelect(nextModel: Model, previousModel: Model | undefined, source: "set" | "cycle" | "restore" | "fallback"): Promise; setModel(model: Model, options?: ModelMutationOptions): Promise; cycleModel(direction?: "forward" | "backward", options?: ModelMutationOptions): Promise; _cycleScopedModel(direction: "forward" | "backward", options: ModelMutationOptions): Promise; _cycleAvailableModel(direction: "forward" | "backward", options: ModelMutationOptions): Promise; setThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): Promise; cycleThinkingLevel(options?: ModelMutationOptions): Promise; getAvailableThinkingLevels(): ThinkingLevel[]; supportsThinking(): boolean; _getThinkingLevelForModelSwitch(targetModel?: Model, explicitLevel?: ThinkingLevel): ThinkingLevel; _clampThinkingLevel(level: ThinkingLevel, availableLevels: ThinkingLevel[]): ThinkingLevel; _applyVerbatimCompaction(options: VerbatimCompactionApplyOptions): Promise; compact(options?: SessionCompactOptions): Promise; abortCompaction(): void; abortBranchSummary(): void; abortSessionSummary(): void; _maybeGenerateSessionSummary(): Promise; _checkCompaction(assistantMessage: AssistantMessage, skipAbortedCheck?: boolean): Promise; _dropTrailingAutoCompactionRetryAssistantIfPresent(): void; _schedulePostAutoCompactionContinuationProbe(reason: "overflow" | "threshold", willRetry: boolean): void; _awaitPendingPostCompactionContinuation(): Promise; _resumeAfterAutoCompaction(): Promise; _resumeAfterLengthTruncation(): void; _runAutoCompaction(reason: "overflow" | "threshold", willRetry: boolean, urgency?: CompactionUrgency): Promise; _preflightPostToolContext(messages: AgentMessage[], signal?: AbortSignal): Promise; _finishPostToolCompactionPreflight(messages: AgentMessage[]): AgentMessage[]; setAutoCompactionEnabled(enabled: boolean): void; bindExtensions(bindings: ExtensionBindings): Promise; startPendingRecovery(reason?: SessionRecoveryReason): Promise; _waitForExtensionStart(): Promise; extendResourcesFromExtensions(reason: "startup" | "reload"): Promise; buildExtensionResourcePaths(entries: ExtensionResourcePathEntry[]): ExtensionResourcePathResult[]; getExtensionSourceLabel(extensionPath: string): string; _applyExtensionBindings(runner: ExtensionRunner): void; _refreshCurrentModelFromRegistry(): Promise; refreshCurrentModelFromRegistry(): Promise; _bindExtensionCore(runner: ExtensionRunner, publication?: { resourceLoader: ResourceLoader; providerTransaction: ExtensionProviderTransaction; providerIds: Set; defer(effect: () => void | Promise): void; }, startupToolNames?: readonly string[], startupLoadout?: RecordedToolLoadout): void; _refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean; }): void; _buildRuntime(options: RuntimeBuildOptions): void; reload(options?: AgentSessionReloadOptions): Promise; completeStartupResources(resourceLoader: ResourceLoader): Promise; _isRetryableError(message: AssistantMessage): boolean; _isFallbackableError(message: AssistantMessage): boolean; _isEmptyCompletion(message: AssistantMessage): boolean; _isSafetyRefusal(message: AssistantMessage): boolean; _handleRetryableError(message: AssistantMessage): Promise; _trySwitchToFallbackModel(message: AssistantMessage): Promise; _beginFallbackModelScope(): void; _clearFallbackModelScope(): void; _settleFallbackModelScope(): Promise; abortRetry(): void; waitForRetry(): Promise; setAutoRetryEnabled(enabled: boolean): void; executeBash(command: string, onChunk?: (chunk: string, channel: "stdout" | "stderr") => void, options?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations; pty?: boolean; emitEvent?: boolean; recordResult?: boolean; }): Promise; recordBashResult(command: string, result: BashResult, options?: { excludeFromContext?: boolean; persist?: boolean; defer?: boolean; }): Promise; abortBash(id?: string): void; _flushPendingBashMessages(): Promise; setSessionName(name: string): Promise; navigateTree(targetId: string, options?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string; }): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry; }>; getUserMessagesForForking(): Array<{ entryId: string; text: string; }>; _extractUserMessageText(content: string | Array<{ type: string; text?: string; }>): string; getSessionStats(): SessionStats; getContextUsage(): ContextUsage | undefined; exportToHtml(outputPath?: string, options?: { themeName?: string; }): Promise; exportToJsonl(outputPath?: string, options?: { includeShareContext?: boolean; }): string; getLastAssistantText(): string | undefined; createReplacedSessionContext(): ReplacedSessionContext; sealWorkflowStageGeneration(): void; closeWorkflowStageGeneration(): Promise; transferWorkflowStageDeliveriesTo(target: object): void; hasExtensionHandlers(eventType: string): boolean; } export interface AgentSessionPublicSurface extends Pick { readonly agent: Agent; readonly sessionManager: SessionManager; readonly settingsManager: SettingsManager; } export interface AgentSessionInternalSurface extends AgentSessionMethodSurface, AgentSessionPublicSurface { _scopedModels: Array<{ model: Model; thinkingLevel?: ThinkingLevel; }>; _fallbackModels: string[]; _isFallbackModelAllowed?: (model: Model, effort: string | undefined) => boolean; _fallbackAttemptedKeys: Set; _fallbackBlockedModels: Array>; _fallbackOriginModel: Model | undefined; _fallbackOriginThinkingLevel: ThinkingLevel | undefined; _fallbackScopeGeneration: number; _fallbackOriginGeneration: number | undefined; _fallbackRestoreError: string | undefined; _unsubscribeAgent?: () => void; _eventListeners: AgentSessionEventListener[]; _agentEventQueue: Promise; _steeringMessages: string[]; _followUpMessages: string[]; _interruptDeliveryQueue: Promise; _pendingPostCompactionContinuation: Promise | undefined; _postCompactionContinuationToken: number; _lengthContinuationAttempts: number; _outputBudgetErrorContinuationAttempts: number; _postToolCompactionPreflightError: string | undefined; _pendingPostToolCompactionGuard: PendingPostToolCompactionGuard | undefined; _terminatingToolCallIds: Set; _stopAfterTurnBlockedContinuation: boolean; _pendingInterruptDeliveries: number; _priorityInterruptPending: boolean; _activePromptCount: number; _isPreparingRun: false | "user" | "custom"; _agentRunAbortRequested: boolean; _cacheWarmer?: import("./cache-warmer.ts").CacheWarmer; _activeInterruptQueueHold: InterruptQueueHold | undefined; _queuedMessagesPaused: boolean; _queuedMessagesPauseAbortBoundary: Promise | undefined; _admittedQueuedMessageAwaitingReply: string | undefined; _admittedRecoveryTurn: Promise | undefined; _workflowStageDeliveryForwardTarget: AgentSessionInternalSurface | undefined; _activeInterruptAbortMessage: string | undefined; _pendingNextTurnMessages: CustomMessage[]; _pendingCustomMessages: CustomMessage[]; _protectedStreamingCustomMessages: Array<{ message: CustomMessage; delivery: "steer" | "followUp"; phase: "queued" | "consumed-unpersisted" | "persistence-failed"; }>; _compactionAbortController: AbortController | undefined; _manualCompactionPromise: Promise | undefined; _autoCompactionAbortController: AbortController | undefined; _autoCompactionCompletion: Promise | undefined; _compactionReason: import("./agent-session-types.js").CompactionReason | undefined; _overflowRecoveryAttempted: boolean; _recoverableLengthRecoveryAttempted: boolean; _contextOverflowUnresolved: boolean; _branchSummaryAbortController: AbortController | undefined; _branchSummaryCompletion: Promise | undefined; _retryAbortController: AbortController | undefined; _retryAttempt: number; _retryPromise: Promise | undefined; _retryResolve: (() => void) | undefined; _bashAbortControllers: Map>; _pendingBashMessages: BashExecutionMessage[]; _extensionRunner: ExtensionRunner; _workflows?: SessionWorkflowsHandle; _turnIndex: number; readonly _entryIdsByMessage: WeakMap; readonly _boundaryDispatchedMessages: WeakSet; readonly _messagesAwaitingPersistence: WeakSet; _lastAssistantToolResults: AgentMessage[]; _lastActivityOutcome: AgentActivityOutcome; _isBeforeSettle: boolean; _abortDuringBeforeSettle: boolean; _isEmittingAgentSettled: boolean; readonly _deferredSettledActions: Array<() => Promise>; _callerReplacedNextRequestContext: boolean; _resourceLoader: ResourceLoader; _customTools: ToolDefinition[]; _baseToolDefinitions: Map; _cwd: string; _extensionRunnerRef?: { current?: ExtensionRunner; }; _initialActiveToolNames?: string[]; _pendingToolNames: Set; _usesDefaultTools: boolean; _defaultToolModifiers: string[]; _appliedDefaultTools: Set; _allowedToolNames?: Set; _excludedToolNames?: Set; _allowedTools?: (name: string) => boolean; _excludedTools?: (name: string) => boolean; _childSessionOptions?: import("./child-session-options.ts").ChildSessionOptionsResolver; _workflowJournal?: import("./storage/provider.js").RunJournalOption; _storageAgentDir?: string; _baseToolsOverride?: Record; _sessionStartEvent: SessionStartEvent; _orchestrationContext?: OrchestrationContext; _subagentPolicy?: import("./extensions/index.js").SubagentChildPolicy; _subagentMessageAdmission?: import("./workflow-stage-admission.ts").WorkflowStageAdmissionBoundary; _extensionUIContext?: ExtensionUIContext; _extensionHumanInput?: import("./extensions/host-input.js").HostInput | null; _extensionDiagnosticListener?: (diagnostic: import("./extensions/host-input.js").HostDiagnostic) => void; _extensionMode: ExtensionMode; _disposed: boolean; _close(event: import("./extensions/types.ts").SessionShutdownEvent, beforeInvalidate?: () => void): Promise; _sessionSummaryAbortController: AbortController | undefined; _sessionSummaryToken: number; _sessionSummaryRun: import("./agent-session-summary.ts").SessionSummaryRun | undefined; _lastSummarizedMessageId: string | undefined; _extensionCommandContextActions?: ExtensionCommandContextActions; _extensionShutdownHandler?: () => void; _extensionErrorListener?: ExtensionErrorListener; _extensionErrorUnsubscriber?: () => void; _modelRuntime: ModelRuntime; _extensionProviderIds: Set; _toolRegistry: Map; _toolExecutionScheduler: ToolExecutionScheduler; _toolDefinitions: Map; _toolPromptSnippets: Map; _toolPromptGuidelines: Map; _baseSystemPromptOptions: NormalizedBuildSystemPromptOptions; _systemPromptTransform?: (prompt: string) => string; _contextProjectionTransform?: (messages: AgentMessage[]) => AgentMessage[]; _runSystemPromptOptions?: NormalizedBuildSystemPromptOptions; _lastAssistantMessage: AssistantMessage | undefined; _tempStorageLease: import("./tools/session-temp-dir.ts").ProtectedPathLease | undefined; _workflowStageAdmission: import("./workflow-stage-admission.ts").WorkflowStageAdmissionBoundary | undefined; _agentTaskHost: import("./tasks/agent-adapter.js").AgentTaskHost | undefined; _parentCommandTaskOwner: import("./tasks/child-command-owner.js").ChildCommandTaskOwner | undefined; _resourceAdmission: import("./sdk-types.ts").ResourceAdmission | undefined; _childTaskWaits: import("./tasks/child-command-owner.js").ChildTaskWaits; _taskCompletionOutbox: import("./tasks/completion.js").TaskCompletionOutbox | undefined; _taskAdmission: import("./workflow-stage-admission.ts").WorkflowStageAdmissionBoundary | undefined; } //# sourceMappingURL=agent-session-methods.d.ts.map