import type { CompressionTimingState } from "../compress/timing" import { Message, Part } from "@opencode-ai/sdk/v2" export interface WithParts { info: Message parts: Part[] } export type ToolStatus = "pending" | "running" | "completed" | "error" export interface ToolParameterEntry { tool: string parameters: any status?: ToolStatus error?: string turn: number tokenCount?: number } export interface SessionStats { pruneTokenCounter: number totalPruneTokens: number } export interface PrunedMessageEntry { tokenCount: number allBlockIds: number[] activeBlockIds: number[] } export type CompressionMode = "range" | "message" export interface CompressionBlock { blockId: number runId: number active: boolean deactivatedByUser: boolean compressedTokens: number summaryTokens: number durationMs: number mode?: CompressionMode topic: string batchTopic?: string startId: string endId: string anchorMessageId: string compressMessageId: string compressCallId?: string includedBlockIds: number[] consumedBlockIds: number[] parentBlockIds: number[] directMessageIds: string[] directToolIds: string[] effectiveMessageIds: string[] effectiveToolIds: string[] createdAt: number deactivatedAt?: number deactivatedByBlockId?: number summary: string } export interface PruneMessagesState { byMessageId: Map blocksById: Map activeBlockIds: Set activeByAnchorMessageId: Map nextBlockId: number nextRunId: number } export interface Prune { tools: Map messages: PruneMessagesState } export interface PendingManualTrigger { sessionId: string prompt: string } export interface MessageIdState { byRawId: Map byRef: Map nextRef: number } export interface Nudges { contextLimitAnchors: Set turnNudgeAnchors: Set iterationNudgeAnchors: Set } export interface SessionState { sessionId: string | null isSubAgent: boolean manualMode: false | "active" | "compress-pending" compressPermission: "ask" | "allow" | "deny" | undefined pendingManualTrigger: PendingManualTrigger | null prune: Prune nudges: Nudges stats: SessionStats compressionTiming: CompressionTimingState toolParameters: Map subAgentResultCache: Map toolIdList: string[] messageIds: MessageIdState lastCompaction: number currentTurn: number modelContextLimit: number | undefined systemPromptTokens: number | undefined }