Dashboard › opencode › Distillation
926293c7-9ce9-46eb-976c-45df68dcdb3a["lore_tm_v1_1cxFn9yxFaSTkNFqgFVdcKaUKHxOGeNnoLfisJRT7vU","lore_tm_v1_jI9gE3a6ZtxGs_XMbm6zl2m8cflh74Z5aFVcTIrFCPM"]
Date: Sep 16, 2026
specs/v2/session.md as the canonical location for tracking V1 runtime-context parity.SessionCompaction.make(...), obtains session context through store.context(sessionID), and defines internal turn transitions including { readonly _tag: "ContinueAfterCompaction"; readonly step: number }, constructed by continueAfterCompaction(step).{ openai: { promptCacheKey } }.publisher.failUnsettledTools("Tools are disabled after the maximum agent steps").Tool execution outcome unknown after interruption.sessionID, executionID, and ownerID; runTurn(input.sessionID, input.executionID, promotion, step, input.ownerID) performs a turn after failInterruptedTools(input.sessionID, claim).ToolRegistry.node, supporting the core-owned registry used for recorded local calls.safe(value: number | undefined) as Math.max(0, Number.isFinite(value) ? (value ?? 0) : 0), clamping undefined, non-finite, and negative values to 0.JSON.stringify(value) ?? String(value).Map, lazily creates and retains an assistantMessageID, and exposes currentAssistantMessageID() for associating emitted events with the active assistant message.start(id) and end(id) behavior; cleanup iterates chunks.keys() and ends every remaining chunk.SessionRunner.flush flushes accumulated publication state and marks assistantActive = false.SessionRunner.publishLLMEvent handles provider stream event types including reasoning-delta, reasoning-end, tool-result, tool-error, and step-finish.Tool input name changed for ${event.id}: ${tool.name} -> ${event.name} when an input event changes a tool’s recorded name.Tool call name changed for ${event.id}: ${tool.name} -> ${event.name} when a call event changes a tool’s recorded name.callID, tool-associated assistantMessageID, and provider metadata; provider error handling sets providerFailed = true.