@agimon-ai/doompi-core 0.0.1-alpha.111 → 0.0.1-alpha.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"directHarnessRuntime.cjs","names":["defineDoc","projectDurableEntries","BACKGROUND_CONTEXT","openSqliteSessionStorage","createRegistry","NodeExecutionEnv","createModels","createAssistantMessageEventStream","awaitWithContext","formatSkillsForSystemPrompt","hook","GenerationTask","LiveDoc","getCurrentSystemPrompt","getCurrentTools","convertToLlm","ToolTask","CompactionTask","Harness","initializeDurableNavigation","AgentDoc","SessionIdentityDoc","randomUUID","SessionMetadataDoc","watchEvents","InboxDoc","UserEntry","contextUsageOf","contextTokensOf","latestAssistantUsage","UsageDoc","getSupportedThinkingLevels","withAbortSignal","navigateDurableConversation","released"],"sources":["../../../src/server/directHarnessRuntime.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { Context, JsonValue } from '@earendil-works/chord';\nimport { BACKGROUND_CONTEXT, awaitWithContext, withAbortSignal } from '@earendil-works/chord/context';\nimport {\n createModels,\n getSupportedThinkingLevels,\n createAssistantMessageEventStream,\n type AssistantMessageEventStream,\n type Models,\n type MutableModels,\n type Api,\n type Model,\n type ImageContent,\n type Message,\n type Provider,\n type AssistantMessage,\n type ToolResultMessage,\n} from '@earendil-works/pi-ai';\nimport { getCurrentSystemPrompt, getCurrentTools } from '@earendil-works/pi-ai/utils/transcript';\nimport { convertToLlm } from '@earendil-works/pi-coding-agent';\nimport {\n Harness,\n createRegistry,\n defineDoc,\n GenerationTask,\n ToolTask,\n CompactionTask,\n hook,\n watchEvents,\n UsageDoc,\n LiveDoc,\n InboxDoc,\n AgentDoc,\n UserEntry,\n type Tx,\n type CompactionResult,\n type TaskId,\n type Conversation,\n type Cursor,\n type EntryRecord,\n type EntryId,\n type SubmissionId,\n type HarnessSettings,\n type ToolRegistration,\n type AgentEventStream,\n} from '@earendil-works/pi-durable';\nimport { NodeExecutionEnv } from '@earendil-works/pi-durable/env/node';\n\nimport { contextTokensOf, contextUsageOf, latestAssistantUsage } from '../services/contextUsage';\nimport { initializeDurableNavigation, navigateDurableConversation } from '../services/durableNavigation';\nimport { formatSkillsForSystemPrompt } from '../services/piExtensionHost';\nimport { openSqliteSessionStorage, SessionIdentityDoc, SessionMetadataDoc } from '../services/sqliteSessionStorage';\nimport { projectDurableEntries } from '../services/transcriptPages';\nimport type {\n DirectHarnessRuntime,\n DirectHarnessRuntimeOptions,\n DirectHarnessFrame,\n DirectHarnessEventListener,\n DirectHarnessLifecycle,\n DirectHarnessQueuedInput,\n Entry,\n AgentHarnessTool,\n AgentMessage,\n HarnessEvent,\n} from '../types/server/directHarnessRuntime';\n\nexport const AGENT_SETTLED_ENTRY_TYPE = 'doompi.agent-settled';\nconst LifecycleDoc = defineDoc({\n kind: 'doompi.server.lifecycle',\n version: 1,\n scope: 'session',\n initial: () => ({ json: '{\"revision\":0,\"paused\":false,\"queue\":[]}' }),\n});\nconst FastModeDoc = defineDoc({\n kind: 'doompi.fast-mode',\n version: 1,\n scope: 'session',\n initial: (): { enabled: boolean } => ({ enabled: false }),\n});\nconst CODEX_API = 'openai-codex-responses';\nconst CODEX_PROVIDER = 'openai-codex';\nconst LabelsDoc = defineDoc({\n kind: 'doompi.labels',\n version: 1,\n scope: 'session',\n initial: () => ({ labels: {} as Record<string, string> }),\n});\ntype Retained = Omit<DirectHarnessQueuedInput, 'disposition'> & {\n disposition: DirectHarnessQueuedInput['disposition'] | 'consumed' | 'removed';\n attempt?: number;\n submissionMode?: 'steer' | 'followUp' | 'reject' | 'write';\n} & { submissionId?: number; conversationId?: number; message?: AgentMessage; operationId?: string };\ntype InternalDeliveryRecord = {\n message: AgentMessage;\n conversationId: number;\n submissionId?: number;\n};\ntype LifecycleRecord = {\n revision: number;\n paused: boolean;\n abortOperationId?: string;\n abortTaskId?: number;\n queue: Retained[];\n internalDeliveries?: Record<string, InternalDeliveryRecord>;\n};\n\nfunction nativeId<T extends number>(id: string): T {\n const value = Number(id);\n if (!Number.isSafeInteger(value) || value < 0 || String(value) !== id)\n throw new Error(`Invalid durable identifier: ${id}`);\n return value as T;\n}\nfunction json(value: unknown): JsonValue {\n return JSON.parse(JSON.stringify(value)) as JsonValue;\n}\nfunction text(message: string | AgentMessage): string {\n if (typeof message === 'string') return message;\n if (!('content' in message))\n return 'summary' in message ? message.summary : 'output' in message ? message.output : '';\n return typeof message.content === 'string'\n ? message.content\n : message.content.map((p) => (p.type === 'text' ? p.text : '')).join('');\n}\n/** Compatibility projection keeps protocol identities strings and retains fork ancestry. */\nexport async function projectDurableConversationEntries(\n conversation: Conversation,\n context: Context,\n): Promise<Entry[]> {\n const records: EntryRecord[] = [];\n let cursor: Cursor | undefined;\n do {\n const page = await conversation.entries({}, 256, cursor, context);\n records.push(...page.items);\n cursor = page.next;\n } while (cursor);\n records.reverse();\n return projectDurableEntries(records);\n}\nexport async function promptForAssistantText(\n runtime: DirectHarnessRuntime,\n prompt: string,\n): Promise<string | undefined> {\n const previous = new Set((await runtime.readEntries()).entries.map((e) => e.id));\n await (\n await runtime.submitInternalMessage(prompt)\n ).settled;\n return (\n (await runtime.readEntries()).entries\n .toReversed()\n .filter((e) => !previous.has(e.id))\n .flatMap((e) => (e.type === 'message' && e.message.role === 'assistant' ? [text(e.message).trim()] : []))[0] ||\n undefined\n );\n}\n\nexport async function createDirectHarnessRuntime<TContext extends object | undefined = object | undefined>(\n options: DirectHarnessRuntimeOptions<TContext>,\n): Promise<DirectHarnessRuntime<TContext>> {\n if (options.initialFastMode !== undefined && typeof options.initialFastMode !== 'boolean')\n throw new Error('Initial Fast mode must be a boolean.');\n const context = options.context ?? BACKGROUND_CONTEXT;\n if (options.storage === 'jsonl' || options.legacySessionPath !== undefined)\n throw new Error('Legacy JSONL direct storage is unsupported; use durable-v1 SQLite');\n if (options.session && !options.durableStorage)\n throw new Error('A durable Session injection requires its raw durableStorage');\n const storage = options.durableStorage\n ? {\n storage: options.durableStorage,\n sessionFile: options.sessionPath,\n historyLease: undefined,\n repository: undefined,\n }\n : await openSqliteSessionStorage(options, context);\n let startupHarness: Harness | undefined;\n try {\n const registry = createRegistry();\n const environment = new NodeExecutionEnv({ cwd: options.cwd });\n let disposed = false;\n let quarantined = false;\n let failure: unknown;\n let preparationFailure: unknown;\n const terminatingCalls = new Set<string>();\n let fastMode = false;\n let resources = options.resources ?? {};\n let tools = options.tools ?? [];\n let activeNames = new Set(options.activeToolNames ?? tools.map((t) => t.name));\n let settings: HarnessSettings = {\n stream: options.streamOptions,\n retry: options.retry,\n compaction: options.compaction,\n toolExecution: options.toolExecution,\n steeringMode: options.steeringMode,\n followUpMode: options.followUpMode,\n };\n const listeners = new Set<(frame: DirectHarnessFrame) => void>();\n const eventListeners = new Set<DirectHarnessEventListener>();\n const emit = (frame: DirectHarnessFrame) => {\n for (const listener of listeners) {\n try {\n listener(frame);\n } catch (error) {\n for (const other of listeners) if (other !== listener) other({ type: 'handler_error', error: String(error) });\n }\n }\n };\n const writable = async <T>(work: () => Promise<T>): Promise<T> => {\n if (disposed || quarantined) throw new Error('Direct harness writes are unavailable', { cause: failure });\n try {\n await storage.historyLease?.assertQuiescent();\n return await work();\n } catch (error) {\n const code = typeof error === 'object' && error !== null && 'code' in error ? error.code : undefined;\n if (\n typeof code === 'string' &&\n ['EACCES', 'EBUSY', 'EIO', 'EMFILE', 'ENFILE', 'ENOSPC', 'EPERM', 'EROFS'].includes(code)\n ) {\n quarantined = true;\n failure = error;\n emit({ type: 'error', code: 'storage_quarantined', error: String(error) });\n }\n throw error;\n }\n };\n let sourceModels: Models | MutableModels;\n if (options.models) sourceModels = options.models;\n else {\n if (!options.providers?.length) throw new Error('Direct harness requires Models or a Provider');\n sourceModels = createModels(options.credentials ? { credentials: options.credentials } : undefined);\n }\n for (const provider of options.providers ?? []) {\n const mutable = sourceModels as Partial<MutableModels> & {\n registerNativeProvider?: (provider: Provider) => void;\n };\n const register = mutable.setProvider?.bind(sourceModels) ?? mutable.registerNativeProvider?.bind(sourceModels);\n if (!register) throw new Error('Models registry cannot register providers');\n register(provider);\n }\n const models = new Proxy(sourceModels, {\n get(target, key) {\n const value: unknown = Reflect.get(target, key, target);\n if (typeof value !== 'function') return value;\n if (\n !['stream', 'complete', 'streamSimple', 'completeSimple', 'streamDeferred', 'fetchDeferred'].includes(\n String(key),\n )\n )\n return value.bind(target);\n return (...args: unknown[]) => {\n if (disposed || quarantined || preparationFailure)\n throw new Error('Model dispatch unavailable', { cause: preparationFailure });\n options.guardModelRequest?.();\n const request = args[1] as { tools?: { name: string }[] };\n if (\n !['complete', 'completeSimple'].includes(String(key)) &&\n request?.tools?.some((t) => !activeNames.has(t.name))\n )\n throw new Error('Model request contains disabled tools');\n const requestOptions = args[2] as Record<string, unknown> | undefined;\n const usePriority =\n fastMode &&\n (args[0] as Model<Api>).api === CODEX_API &&\n (args[0] as Model<Api>).provider === CODEX_PROVIDER;\n const originalOnPayload = requestOptions?.onPayload;\n args[2] = {\n ...requestOptions,\n ...(usePriority ? { serviceTier: 'priority' } : {}),\n onPayload: async (payload: unknown, model: Model<Api>) => {\n options.guardModelRequest?.();\n const original =\n typeof originalOnPayload === 'function' ? await originalOnPayload(payload, model) : undefined;\n const transformed = original === undefined ? payload : original;\n const patch = await options.beforePayload?.({ payload: transformed, model }, context);\n const finalPayload = patch === undefined ? transformed : patch.payload;\n if (!usePriority) return finalPayload;\n if (typeof finalPayload !== 'object' || finalPayload === null || Array.isArray(finalPayload))\n throw new Error('Invalid Codex request payload');\n return { ...finalPayload, service_tier: 'priority' };\n },\n };\n const dispatched: unknown = Reflect.apply(value, target, args);\n if (!['stream', 'streamSimple', 'fetchDeferred'].includes(String(key))) return dispatched;\n const source = dispatched as AssistantMessageEventStream;\n const output = createAssistantMessageEventStream();\n const requestedModel = args[0] as Model<Api>;\n const signal = (args[2] as { signal?: AbortSignal }).signal;\n let ended = false;\n let current: AssistantMessage = {\n role: 'assistant',\n content: [],\n api: requestedModel.api,\n provider: requestedModel.provider,\n model: requestedModel.id,\n timestamp: Date.now(),\n stopReason: 'pending',\n usage: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n },\n };\n const cancel = () => {\n if (ended) return;\n ended = true;\n const cancelled = { ...current, stopReason: 'aborted' as const, errorMessage: 'Agent request aborted' };\n output.push({ type: 'error', reason: 'aborted', error: cancelled });\n output.end();\n };\n signal?.addEventListener('abort', cancel, { once: true });\n if (signal?.aborted) cancel();\n void (async () => {\n try {\n for await (const event of source) {\n if (ended) break;\n if ('partial' in event) current = event.partial;\n output.push(event);\n }\n if (!ended) {\n ended = true;\n output.end(await source.result());\n }\n } catch (error) {\n if (!ended) {\n ended = true;\n const failed = { ...current, stopReason: 'error' as const, errorMessage: String(error) };\n output.push({ type: 'error', reason: 'error', error: failed });\n output.end();\n }\n } finally {\n signal?.removeEventListener('abort', cancel);\n }\n })();\n return output;\n };\n },\n }) as Models;\n const resolveToolContext = async (ctx: Context) =>\n typeof options.toolContext === 'function' ? options.toolContext(ctx) : (options.toolContext as TContext);\n const nativeTool = (tool: AgentHarnessTool<TContext>): ToolRegistration => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n constrainedSampling: tool.constrainedSampling,\n prepareArguments: tool.prepareArguments ? (args) => tool.prepareArguments!(args) : undefined,\n replay: tool.replay ?? 'unsafe',\n executionMode: tool.executionMode,\n async execute(args, api, ctx) {\n if (!activeNames.has(tool.name)) throw new Error(`Tool '${tool.name}' is no longer active`);\n const pending = tool.execute(\n api.callId,\n args,\n (partial) => {\n for (const part of partial.content) if (part.type === 'text') api.output(part.text);\n if (partial.details !== undefined)\n void api\n .details(json(partial.details), ctx)\n .catch((error) => emit({ type: 'error', error: String(error) }));\n },\n await resolveToolContext(ctx),\n {\n invocationId: String(api.taskId),\n operationId: String(api.taskId),\n turnId: String(api.taskId),\n getMemo: (name) => api.memo(name, ctx),\n setMemo: async (name, value) => {\n if (value === undefined) throw new Error('Durable invocation memos cannot be deleted');\n await api.memo(name, value, ctx);\n },\n },\n ctx,\n );\n const result = await awaitWithContext(pending, ctx);\n return {\n content: result.content,\n isError: result.isError,\n ...(result.details === undefined ? {} : { details: json(result.details) }),\n };\n },\n });\n const install = () =>\n registry.install({\n name: 'doompi.host',\n tools: tools.map(nativeTool),\n sections: [\n {\n key: 'doompi',\n tag: false,\n async render(_input, ctx) {\n preparationFailure = undefined;\n try {\n const prompt =\n typeof options.systemPrompt === 'function'\n ? await options.systemPrompt(await resolveToolContext(ctx), ctx)\n : (options.systemPrompt ?? '');\n const skills =\n options.systemPrompt === undefined ? formatSkillsForSystemPrompt(resources.skills ?? []) : '';\n return [prompt, skills].filter(Boolean).join('\\n\\n');\n } catch (error) {\n preparationFailure = error;\n throw error;\n }\n },\n },\n ],\n hooks: [\n hook(GenerationTask, {\n async beforeRequest(request, api, ctx) {\n try {\n const live = await api.snapshot(LiveDoc, api.conversationId, ctx);\n const retained = await api.snapshot(LifecycleDoc, ctx);\n const queue = JSON.parse(retained?.json ?? '{\"queue\":[]}') as LifecycleRecord;\n if (\n live?.run &&\n queue.queue.some(\n (item) =>\n item.operationId !== undefined &&\n item.submissionId !== undefined &&\n live.run!.inputs.includes(item.submissionId as SubmissionId) &&\n item.operationId !== String(live.run!.inputs[0]),\n )\n )\n throw new Error('Steering target changed before model admission');\n const agent = await conversation.agent(ctx);\n const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n await options.beforeModelRequest?.(\n { phase: 'turn', model, prompt: [...request.messages], resources },\n ctx,\n );\n const systemPrompt = getCurrentSystemPrompt(request.messages);\n const contextContributions = new Map<string, AgentMessage[]>();\n if (options.transformContext) {\n const view = await conversation.context(ctx);\n const customByEntry = new Map<number, AgentMessage>();\n for (const raw of view.entries) {\n const entry = projectDurableEntries([raw])[0];\n if (entry?.type !== 'message' || entry.message.role !== 'custom') continue;\n const data =\n raw.data && typeof raw.data === 'object' && !Array.isArray(raw.data) ? raw.data : undefined;\n const receipt =\n typeof data?.inputRequestId === 'string'\n ? await storage.storage.submissionByRequest(conversation.id, data.inputRequestId, ctx)\n : undefined;\n const fallback =\n receipt?.status === 'unanswered' &&\n !('entry' in receipt && receipt.entry !== undefined) &&\n typeof data?.inputRequestId === 'string'\n ? await storage.storage.submissionByRequest(\n conversation.id,\n `${data.inputRequestId}:context`,\n ctx,\n )\n : undefined;\n const placed = fallback ?? receipt;\n const placedEntry =\n placed && 'entry' in placed && placed.entry !== undefined\n ? view.entries.find((candidate) => candidate.id === placed.entry)\n : undefined;\n const target = placedEntry?.edits?.some((edit) => edit.target === raw.id)\n ? raw.id\n : (placedEntry?.id ?? raw.id);\n const contributions =\n view.contributions[view.entries.findIndex((candidate) => candidate.id === target)];\n const original = placedEntry?.edits?.find(\n (edit) => edit.target === raw.id && edit.action === 'replace',\n );\n const model =\n original?.messages ?? view.entries.find((candidate) => candidate.id === target)?.model;\n if (\n model?.length === 1 &&\n contributions?.length === 1 &&\n JSON.stringify(model[0]) === JSON.stringify(contributions[0])\n )\n customByEntry.set(target, entry.message);\n }\n for (const [index, raw] of view.entries.entries()) {\n const custom = customByEntry.get(raw.id);\n for (const native of view.contributions[index] ?? []) {\n const key = JSON.stringify(native);\n const message = custom && view.contributions[index]?.length === 1 ? custom : native;\n const contributions = contextContributions.get(key) ?? [];\n contributions.push(message);\n contextContributions.set(key, contributions);\n }\n }\n }\n // Restore metadata only for unchanged native contributions, preserving context edits and ordering.\n const contextMessages = request.messages\n .filter((m) => m.role !== 'system')\n .map((message) => contextContributions.get(JSON.stringify(message))?.shift() ?? message);\n const patch = await options.transformContext?.({ messages: contextMessages, systemPrompt }, ctx);\n let messages: Message[] = patch\n ? [\n {\n role: 'system',\n content: patch.systemPrompt ?? systemPrompt,\n timestamp: Date.now(),\n toolsAdded: getCurrentTools(request.messages),\n },\n ...convertToLlm(patch.messages ?? request.messages.filter((m) => m.role !== 'system')),\n ]\n : [...request.messages];\n if (options.toProviderMessages) messages = await options.toProviderMessages(messages, ctx);\n await options.beforeModelRequest?.({ phase: 'request', model, resources }, ctx);\n return { messages };\n } catch (error) {\n preparationFailure = error;\n throw error;\n }\n },\n }),\n hook(ToolTask, {\n async beforeTool(call, _api, ctx) {\n const patch = await options.beforeTool?.(\n { toolCallId: call.id, toolName: call.name, args: call.arguments as Record<string, JsonValue> },\n ctx,\n );\n if (patch?.block?.terminate) terminatingCalls.add(call.id);\n return patch ? { arguments: patch.args, block: patch.block?.reason } : undefined;\n },\n async afterTool(call, result, _api, ctx) {\n const patch = await options.afterTool?.(\n {\n toolCallId: call.id,\n toolName: call.name,\n args: call.arguments as Record<string, JsonValue>,\n content: result.content ?? [],\n details: result.details,\n isError: result.isError ?? false,\n usage: result.usage,\n },\n ctx,\n );\n return patch\n ? {\n ...result,\n ...patch,\n control:\n patch.terminate || terminatingCalls.delete(call.id)\n ? { ...result.control, terminate: true }\n : result.control,\n }\n : terminatingCalls.delete(call.id)\n ? { ...result, control: { ...result.control, terminate: true } }\n : undefined;\n },\n }),\n hook(CompactionTask, {\n async beforeCompact(input, _api, ctx) {\n if (!options.beforeCompaction) return;\n const entries = projectDurableEntries(input.entries);\n const patch = await options.beforeCompaction(\n {\n reason: input.reason,\n customInstructions: input.instructions,\n preparation: {\n entries,\n messages: [...input.messages],\n tokensBefore: 0,\n retainedTail: [],\n firstKeptEntryId: String(input.firstKept),\n messagesToSummarize: [...input.messages],\n turnPrefixMessages: [],\n isSplitTurn: false,\n fileOps: { read: new Set(), written: new Set(), edited: new Set() },\n settings: {\n enabled: options.compaction?.enabled ?? true,\n reserveTokens: options.compaction?.reserveTokens ?? 16384,\n keepRecentTokens: options.compaction?.keepRecentTokens ?? 20000,\n },\n },\n },\n ctx,\n );\n if (patch?.decline) return { decline: true };\n if (patch?.compaction) return { summary: patch.compaction.summary };\n return undefined;\n },\n }),\n ],\n });\n install();\n const harness = await Harness.open(\n storage.storage,\n {\n models,\n registry,\n get settings() {\n return settings;\n },\n env: () => environment,\n onReport: (error) => emit({ type: 'handler_error', error: String(error) }),\n },\n context,\n );\n startupHarness = harness;\n const root = await harness.root(context, {\n agent: {\n cwd: options.cwd,\n ...((options.model ?? models.getModels()[0])\n ? {\n model: {\n provider: (options.model ?? models.getModels()[0]!).provider,\n modelId: (options.model ?? models.getModels()[0]!).id,\n },\n }\n : {}),\n ...(options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n },\n });\n const activeId = await initializeDurableNavigation(harness, root.id, context);\n let conversation = (await harness.conversation(activeId, context))!;\n const storedAgent = await harness.snapshot(AgentDoc, conversation.id, context);\n const initialModel = options.model ?? models.getModels()[0];\n await conversation.configure(\n {\n ...(!storedAgent?.model && initialModel\n ? { model: { provider: initialModel.provider, modelId: initialModel.id } }\n : {}),\n ...(!storedAgent?.thinkingLevel && options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n },\n context,\n );\n const storedFastMode = await harness.snapshot(FastModeDoc, context);\n fastMode = storedFastMode?.enabled ?? options.initialFastMode ?? false;\n const identity = await harness.snapshot(SessionIdentityDoc, context);\n const sessionId = identity?.id || options.sessionId || randomUUID();\n await writable(() =>\n harness.commit(async (tx) => {\n const identity = await tx.doc(SessionIdentityDoc);\n if (!identity.id) {\n identity.id = sessionId;\n identity.createdAt = Date.now();\n identity.parentSessionId = options.parentSessionId ?? '';\n }\n if (!storedFastMode) {\n (await tx.doc(FastModeDoc)).enabled = fastMode;\n if (options.initialFastMode !== undefined)\n await tx.appendEntry(conversation.id, {\n kind: 'doompi.fast-mode',\n data: { version: 1, enabled: fastMode, sessionId },\n });\n }\n const metadata = await tx.doc(SessionMetadataDoc);\n metadata.workspaceRoot ||= options.cwd;\n if (options.lane !== undefined) metadata.laneName = options.lane;\n if (options.sessionName !== undefined) metadata.name = options.sessionName;\n }, context),\n );\n const laneName = options.lane ?? 'main';\n let resolveExited!: (code: number) => void;\n const exited = new Promise<number>((resolve) => {\n resolveExited = resolve;\n });\n const readRecord = async (): Promise<LifecycleRecord> =>\n JSON.parse(\n (await harness.snapshot(LifecycleDoc, context))?.json ?? '{\"revision\":0,\"paused\":false,\"queue\":[]}',\n ) as LifecycleRecord;\n const changeRecord = async <T>(change: (record: LifecycleRecord) => T): Promise<T> =>\n writable(() =>\n harness.commit(async (tx) => {\n const doc = await tx.doc(LifecycleDoc);\n const record = JSON.parse(doc.json) as LifecycleRecord;\n const result = change(record);\n record.revision++;\n doc.json = JSON.stringify(record);\n return result;\n }, context),\n );\n let userAdmission = false;\n let userAdmissionSettled: Promise<void> = Promise.resolve();\n let releaseUserAdmission: (() => void) | undefined;\n const guardUserAdmission = () => {\n if (userAdmission) throw new Error('A user interruption is already being admitted');\n };\n let external: string | undefined;\n let externalAbort: AbortController | undefined;\n const execution = async () => {\n const live = await harness.snapshot(LiveDoc, conversation.id, context);\n const inspected = await harness.inspect(context);\n const task = inspected.tasks.find((t) => t.record.conversationId === conversation.id && !t.record.background);\n return live?.run\n ? {\n id: String(live.run.inputs[0]),\n kind: 'run' as const,\n status:\n (await readRecord()).abortOperationId === String(live.run.inputs[0])\n ? ('aborting' as const)\n : ('open' as const),\n }\n : task\n ? {\n id: String(task.record.id),\n kind: 'compaction' as const,\n status: task.record.abortRequested ? ('aborting' as const) : ('open' as const),\n }\n : external\n ? { id: external, kind: 'navigation' as const, status: 'open' as const }\n : settling\n ? { id: 'settling', kind: 'run' as const, status: 'open' as const }\n : null;\n };\n const readLifecycle = async (): Promise<DirectHarnessLifecycle> => {\n const record = await readRecord();\n return {\n revision: record.revision,\n paused: record.paused,\n queue: record.queue\n .filter(\n (item): item is Retained & { disposition: DirectHarnessQueuedInput['disposition'] } =>\n item.disposition !== 'consumed' && item.disposition !== 'removed',\n )\n .map(({ submissionId: _s, conversationId: _c, message: _m, operationId: _o, attempt: _a, ...item }) => item),\n operation: await execution(),\n };\n };\n const publish = async () => emit({ type: 'lifecycle_update', lifecycle: await readLifecycle() });\n let watcher: AgentEventStream;\n let eventsSettled = Promise.resolve();\n let settling = 0;\n const admittingInternal = new Set<string>();\n const reconcilingInternal = new Map<string, Promise<void>>();\n const internalDelivery = new Map<SubmissionId, { done: Promise<void>; resolve: () => void }>();\n const deliveredInputs = new Set<SubmissionId>();\n const nextTurnMessages: AgentMessage[] = [];\n let deferredInternalCount = 0;\n const flushNextTurn = async () => {\n const staged = nextTurnMessages.splice(0);\n for (let index = 0; index < staged.length; index++) {\n const message = staged[index]!;\n try {\n await writable(() =>\n conversation.submit(\n {\n type: 'write',\n requestId: randomUUID(),\n entry: {\n kind: 'doompi.entry',\n data: json({ type: 'message', message }),\n model: convertToLlm([message]),\n },\n },\n context,\n ),\n );\n } catch (error) {\n nextTurnMessages.unshift(...staged.slice(index));\n throw error;\n }\n }\n };\n let logicalLoopActive = false;\n let lastAssistant: AssistantMessage | undefined;\n let partial: AssistantMessage | undefined;\n let toolResults: ToolResultMessage[] = [];\n const deliver = async (event: HarnessEvent, eventContext: Context) => {\n for (const listener of eventListeners)\n try {\n await listener(event, eventContext);\n } catch (error) {\n emit({ type: 'handler_error', error: String(error) });\n }\n };\n const attach = async () => {\n if (watcher) await watcher.stop();\n watcher = await watchEvents(harness, conversation.id, context);\n let predecessor = watcher.snapshot.entries.at(-1)?.id;\n const customSources = new Map<string, AgentMessage>();\n const generatedSources = new Map<EntryId, AgentMessage | undefined>();\n const rememberCustom = (raw: EntryRecord) => {\n const projected = projectDurableEntries([raw])[0];\n const data = raw.data && typeof raw.data === 'object' && !Array.isArray(raw.data) ? raw.data : undefined;\n if (\n projected?.type === 'message' &&\n projected.message.role === 'custom' &&\n typeof data?.inputRequestId === 'string'\n )\n customSources.set(data.inputRequestId, projected.message);\n };\n for (const raw of watcher.snapshot.entries) rememberCustom(raw);\n for (const requestId of customSources.keys()) {\n const receipt = await storage.storage.submissionByRequest(conversation.id, requestId, context);\n if (receipt && receipt.status !== 'queued') customSources.delete(requestId);\n }\n const generatedEntrySource = async (raw: EntryRecord, ctx: Context) => {\n if (generatedSources.has(raw.id)) return generatedSources.get(raw.id);\n let source: AgentMessage | undefined;\n if (raw.model?.[0]?.role === 'user')\n for (const [requestId, custom] of customSources) {\n const receipt = await storage.storage.submissionByRequest(conversation.id, requestId, ctx);\n if (receipt && 'entry' in receipt && receipt.entry === raw.id) {\n source = custom;\n customSources.delete(requestId);\n break;\n }\n }\n generatedSources.set(raw.id, source);\n while (generatedSources.size > 128) generatedSources.delete(generatedSources.keys().next().value!);\n return source;\n };\n lastAssistant = undefined;\n partial = undefined;\n toolResults = [];\n watcher.start(async (events, eventContext) => {\n for (const event of events) {\n let mapped: HarnessEvent | undefined;\n if (event.type === 'turn_start' || event.type === 'run_start') {\n lastAssistant = undefined;\n partial = undefined;\n toolResults = [];\n }\n if (event.type === 'message_end' || event.type === 'entry_appended') {\n rememberCustom(event.entry);\n const entry = projectDurableEntries([event.entry])[0];\n await generatedEntrySource(event.entry, eventContext);\n if (entry) {\n entry.parentId = predecessor === undefined ? null : String(predecessor);\n const added: HarnessEvent = { type: 'entry_added', entry };\n emit({ type: 'entry_appended', entry });\n eventsSettled = eventsSettled.then(() => deliver(added, eventContext));\n }\n predecessor = event.entry.id;\n }\n if (['run_start', 'run_end', 'turn_start', 'compaction_start'].includes(event.type))\n mapped = { type: event.type } as HarnessEvent;\n if (event.type === 'message_start') {\n if (event.message.role === 'assistant') partial = structuredClone(event.message);\n mapped = { type: 'message_start', message: event.message };\n }\n if (event.type === 'message_end' && event.entry.model?.[0]) {\n const projected = projectDurableEntries([event.entry])[0];\n if (projected?.type === 'custom' && projected.customType === 'doompi.internal-context') continue;\n const message =\n (await generatedEntrySource(event.entry, eventContext)) ??\n (projected?.type === 'message' && projected.message.role === 'custom'\n ? projected.message\n : event.entry.model[0]);\n if (message.role === 'assistant') lastAssistant = message;\n if (message.role === 'toolResult') toolResults.push(message);\n mapped = { type: 'message_end', message, entryId: String(event.entry.id), runId: String(conversation.id) };\n }\n\n if (event.type === 'tool_execution_start') mapped = { ...event, type: 'tool_start' };\n if (event.type === 'tool_execution_end') {\n const result = event.entry?.model?.find((m) => m.role === 'toolResult');\n mapped = {\n type: 'tool_end',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: {\n content: result?.content ?? [],\n details: result?.details === undefined ? undefined : json(result.details),\n },\n isError: result?.isError ?? true,\n };\n }\n if (event.type === 'turn_end' && lastAssistant) {\n mapped = { type: 'turn_end', message: lastAssistant, toolResults };\n toolResults = [];\n lastAssistant = undefined;\n partial = undefined;\n }\n if (event.type === 'message_update' && partial) {\n for (const change of event.changes) {\n if (change.type === 'message') {\n partial = structuredClone(change.message);\n } else if ('block' in change) {\n partial.content[change.contentIndex] = structuredClone(change.block);\n }\n const block = 'contentIndex' in change ? partial.content[change.contentIndex] : undefined;\n if (change.type === 'text_delta' && block?.type === 'text') block.text += change.delta;\n if (change.type === 'thinking_delta' && block?.type === 'thinking') block.thinking += change.delta;\n {\n const update: HarnessEvent = {\n type: 'message_update',\n message: structuredClone(partial),\n event:\n 'delta' in change\n ? {\n type: change.type,\n contentIndex: change.contentIndex,\n delta: change.delta,\n partial: structuredClone(partial),\n }\n : { type: 'start', partial: structuredClone(partial) },\n };\n emit({ ...update, assistantMessageEvent: update.event });\n eventsSettled = eventsSettled.then(() => deliver(update, eventContext));\n }\n }\n }\n if (event.type === 'tool_execution_update')\n mapped = {\n type: 'tool_update',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n partialResult: {\n content: [\n {\n type: 'text',\n text: event.output ? ('set' in event.output ? event.output.set : (event.output.append ?? '')) : '',\n },\n ],\n details: event.details,\n },\n };\n if (event.type === 'compaction_end') {\n const receipt = await harness.waitForTask(event.taskId as TaskId<CompactionResult>, eventContext);\n const outcome = receipt.state.outcome;\n const result = outcome.status === 'completed' ? outcome.result : undefined;\n const summary = result?.submissionId\n ? await harness.submission(result.submissionId, eventContext)\n : undefined;\n const status = await summary?.status(eventContext);\n const entryId = result?.entryId ?? (status && 'entry' in status ? status.entry : undefined);\n mapped = {\n type: 'compaction_end',\n status:\n outcome.status === 'completed'\n ? result?.entryId !== undefined || result?.submissionId !== undefined\n ? 'completed'\n : 'aborted'\n : outcome.status === 'aborted'\n ? 'aborted'\n : 'failed',\n reason: event.reason,\n entryId: entryId === undefined ? undefined : String(entryId),\n error:\n outcome.status !== 'completed' && outcome.status !== 'aborted'\n ? new Error(\n 'error' in outcome ? (outcome.error?.message ?? 'Compaction failed') : 'Compaction failed',\n )\n : undefined,\n };\n }\n if (event.type === 'inbox_update')\n mapped = { type: 'queue_update', queues: event.items.map((item) => ({ kind: item.mode })) };\n if (event.type === 'message_end') {\n for (const message of event.entry.model ?? [])\n if (message.role === 'assistant')\n eventsSettled = eventsSettled.then(() =>\n deliver({ type: 'usage', row: { id: String(event.entry.id), usage: message.usage } }, eventContext),\n );\n }\n if (!mapped) continue;\n const publishMapped = (event: HarnessEvent) =>\n emit({\n ...event,\n type:\n event.type === 'tool_start'\n ? 'tool_execution_start'\n : event.type === 'tool_update'\n ? 'tool_execution_update'\n : event.type === 'tool_end'\n ? 'tool_execution_end'\n : event.type === 'entry_added'\n ? 'entry_appended'\n : event.type,\n });\n if (mapped.type === 'run_end') {\n const settledEvent = {\n runId: String(event.type === 'run_end' ? event.inputs[0] : conversation.id),\n timestamp: Date.now(),\n };\n settling++;\n let released = false;\n const release = () => {\n if (!released) {\n settling--;\n released = true;\n }\n };\n eventsSettled = eventsSettled\n .then(async () => {\n await reconcile();\n try {\n await writable(() =>\n harness.commit(\n (tx) =>\n tx.appendEntry(conversation.id, {\n kind: AGENT_SETTLED_ENTRY_TYPE,\n data: settledEvent,\n }),\n eventContext,\n ),\n );\n } catch (error) {\n emit({ type: 'error', code: 'agent_settled', error: String(error) });\n }\n const live = await harness.snapshot(LiveDoc, conversation.id, eventContext);\n const successorActive = !!live?.run && String(live.run.inputs[0]) !== settledEvent.runId;\n mapped = { type: 'run_end', runId: settledEvent.runId, successorActive };\n publishMapped(mapped);\n await deliver(mapped, eventContext);\n release();\n // A settlement hook can admit work after the initial successor check.\n const lifecycle = await readLifecycle();\n emit({ type: 'lifecycle_update', lifecycle });\n if (!lifecycle.operation) {\n logicalLoopActive = false;\n emit({ type: 'agent_end', runId: settledEvent.runId });\n emit({ type: 'agent_settled', ...settledEvent });\n }\n })\n .catch((error) => emit({ type: 'error', code: 'settled_event', error: String(error) }))\n .finally(async () => {\n release();\n if (event.type === 'run_end')\n for (const id of event.inputs) {\n deliveredInputs.add(id);\n internalDelivery.get(id)?.resolve();\n }\n while (deliveredInputs.size > 128) deliveredInputs.delete(deliveredInputs.values().next().value!);\n try {\n await publish();\n } catch (error) {\n emit({ type: 'error', code: 'lifecycle_update', error: String(error) });\n }\n // Do not await drain here: drain waits for this settlement chain.\n void drain().catch((error) => emit({ type: 'error', code: 'drain', error: String(error) }));\n });\n } else {\n // Protocol publication must not wait for extension hooks on earlier events.\n publishMapped(mapped);\n if (mapped.type === 'run_start') {\n if (!logicalLoopActive) emit({ type: 'agent_start' });\n logicalLoopActive = true;\n void publish().catch((error) => emit({ type: 'error', code: 'lifecycle_update', error: String(error) }));\n }\n const delivered = mapped;\n eventsSettled = eventsSettled.then(() => deliver(delivered, eventContext));\n }\n }\n });\n };\n await attach();\n const reconcileInternal = (requestId: string, item: InternalDeliveryRecord): Promise<void> => {\n const existing = reconcilingInternal.get(requestId);\n if (existing) return existing;\n const work = (async () => {\n if (admittingInternal.has(requestId)) return;\n const target =\n item.conversationId === conversation.id\n ? conversation\n : await harness.conversation(item.conversationId as typeof conversation.id, context);\n if (!target) throw new Error('Internal delivery conversation is unavailable');\n let receipt = await storage.storage.submissionByRequest(target.id, requestId, context);\n // A failed native run can strand queued inputs. Never withdraw from a surviving run.\n if (receipt?.status === 'queued' && !(await harness.snapshot(LiveDoc, target.id, context))?.run) {\n await harness.abortSubmission(receipt.id, context);\n receipt = await storage.storage.submissionByRequest(target.id, requestId, context);\n }\n if (receipt?.status === 'queued') return;\n if (!receipt || (receipt.status === 'unanswered' && receipt.entry === undefined)) {\n if ((await harness.snapshot(LiveDoc, target.id, context))?.run) return;\n let envelope =\n item.message.role === 'custom'\n ? await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context)\n : undefined;\n if (item.message.role === 'custom' && !envelope) {\n await (\n await writable(() =>\n target.submit(\n {\n type: 'write',\n requestId: `${requestId}:message`,\n entry: {\n kind: 'doompi.entry',\n data: json({\n type: 'message',\n message: item.message,\n timestamp: item.message.timestamp,\n inputRequestId: requestId,\n }),\n },\n },\n context,\n ),\n )\n ).wait(context);\n envelope = await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context);\n }\n if (envelope?.status === 'queued') {\n // An idle passive write places surviving queued envelope writes, without admitting input.\n await (\n await writable(() =>\n target.submit(\n {\n type: 'write',\n requestId: `${requestId}:message-placement`,\n entry: { kind: 'doompi.internal-delivery' },\n },\n context,\n ),\n )\n ).wait(context);\n envelope = await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context);\n }\n const envelopeId = envelope && 'entry' in envelope ? envelope.entry : undefined;\n const draft: Parameters<Conversation['submit']>[0] = {\n type: 'write',\n requestId: `${requestId}:context`,\n entry: {\n kind: 'doompi.entry',\n data: json(\n item.message.role === 'custom'\n ? { type: 'custom', customType: 'doompi.internal-context', data: { inputRequestId: requestId } }\n : { type: 'message', message: item.message },\n ),\n ...(envelopeId === undefined\n ? { model: convertToLlm([item.message]) }\n : {\n edits: [{ target: envelopeId, action: 'replace' as const, messages: convertToLlm([item.message]) }],\n }),\n },\n };\n let fallback;\n try {\n fallback = await writable(() => target.submit(draft, context));\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(target.id, `${requestId}:context`, context);\n fallback = accepted && (await harness.submission(accepted.id, context));\n if (!fallback) throw error;\n }\n if ((await fallback.wait(context)).status !== 'done') throw new Error('Internal context write failed');\n }\n await changeRecord((r) => {\n delete r.internalDeliveries?.[requestId];\n });\n })().finally(() => {\n reconcilingInternal.delete(requestId);\n });\n reconcilingInternal.set(requestId, work);\n return work;\n };\n const reconcile = async () => {\n const record = await readRecord();\n // Withdraw all stranded internal inputs before any passive write can flush an idle native inbox.\n for (const [requestId, item] of Object.entries(record.internalDeliveries ?? {})) {\n if (admittingInternal.has(requestId)) continue;\n if ((await harness.snapshot(LiveDoc, item.conversationId as typeof conversation.id, context))?.run) continue;\n const receipt = await storage.storage.submissionByRequest(\n item.conversationId as typeof conversation.id,\n requestId,\n context,\n );\n if (receipt?.status === 'queued') await harness.abortSubmission(receipt.id, context);\n }\n for (const [requestId, item] of Object.entries(record.internalDeliveries ?? {}))\n await reconcileInternal(requestId, item);\n for (const item of record.queue) {\n if (item.disposition !== 'handoff' && item.disposition !== 'uncertain') continue;\n const submission = item.submissionId\n ? await harness.submission(item.submissionId as SubmissionId, context)\n : undefined;\n const status = await submission?.status(context);\n if (status?.status === 'done' || status?.status === 'placed' || status?.status === 'unanswered')\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (!q) return;\n if (status.status === 'unanswered' && status.entry === undefined && r.paused) {\n q.disposition = 'pending';\n q.attempt = (q.attempt ?? 0) + 1;\n delete q.submissionId;\n } else {\n q.disposition = 'consumed';\n q.text = '';\n delete q.message;\n delete q.images;\n }\n const receipts = r.queue.filter((q) => q.disposition === 'consumed' || q.disposition === 'removed');\n if (receipts.length > 128) {\n const expired = new Set(receipts.slice(0, receipts.length - 128).map((q) => q.id));\n r.queue = r.queue.filter((q) => !expired.has(q.id));\n }\n });\n else if (!status && !handingOff.has(item.id) && !userClaims.has(item.id))\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (q) q.disposition = 'uncertain';\n });\n }\n };\n const handingOff = new Set<string>();\n const userClaims = new Set<string>();\n let drainPromise: Promise<void> | undefined;\n let drainRequested = false;\n const drain = (): Promise<void> => {\n if (drainPromise) {\n drainRequested = true;\n return drainPromise;\n }\n return (drainPromise ??= (async () => {\n await reconcile();\n while (!disposed) {\n const record = await readRecord();\n if (userAdmission || record.paused || (await execution())) break;\n const item = record.queue.find((q) => q.disposition === 'pending');\n if (!item) break;\n const submission = await handoff(item, 'reject');\n if (!submission) continue;\n await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n }\n })().finally(() => {\n drainPromise = undefined;\n if (drainRequested) {\n drainRequested = false;\n void drain().catch((error) => emit({ type: 'error', code: 'drain', error: String(error) }));\n }\n }));\n };\n const handoff = async (item: Retained, mode: NonNullable<Retained['submissionMode']>, recovering = false) => {\n if (handingOff.has(item.id)) return undefined;\n handingOff.add(item.id);\n try {\n const claimed = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (!q || (r.paused && !recovering)) return undefined;\n if (recovering ? q.disposition !== 'handoff' || q.submissionId !== undefined : q.disposition !== 'pending')\n return undefined;\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = mode;\n if (item.operationId !== undefined) {\n q.delivery = item.delivery;\n q.operationId = item.operationId;\n }\n return q;\n });\n if (!claimed) return undefined;\n const content = input(claimed.message ?? claimed.text, claimed.images);\n const requestId = `${claimed.id}:${claimed.attempt ?? 0}`;\n const submit = () =>\n writable(() =>\n conversation.submit(\n mode === 'write'\n ? {\n type: 'write',\n requestId,\n entry: { kind: 'doompi.message', model: [{ role: 'user', content, timestamp: Date.now() }] },\n }\n : { type: 'input', content, whenBusy: mode, requestId },\n context,\n ),\n );\n let submission;\n try {\n submission = await submit();\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(conversation.id, requestId, context);\n if (!accepted) throw error;\n submission = await harness.submission(accepted.id, context);\n if (!submission) throw error;\n }\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (q) q.submissionId = submission.id;\n });\n await reconcile();\n await publish();\n return submission;\n } finally {\n handingOff.delete(item.id);\n }\n };\n const input = (message: string | AgentMessage, images?: ImageContent[]) => {\n if (typeof message !== 'string') {\n if (message.role !== 'user') throw new Error('Only user messages can admit an agent run');\n return message.content;\n }\n return images?.length ? [{ type: 'text' as const, text: message }, ...images] : message;\n };\n const enqueue = async (\n message: string | AgentMessage,\n images: ImageContent[] | undefined,\n delivery: Retained['delivery'],\n scheduling: Retained['scheduling'],\n ) => {\n const id = randomUUID();\n await changeRecord((r) => {\n r.queue.push({\n id,\n text: text(message),\n ...(images ? { images } : {}),\n ...(typeof message === 'string' ? {} : { message }),\n delivery,\n scheduling,\n disposition: 'pending',\n });\n });\n await publish();\n return { id };\n };\n const queued = async (\n message: string | AgentMessage,\n images: ImageContent[] | undefined,\n delivery: 'followUp' | 'nextRun',\n ) => {\n guardUserAdmission();\n await enqueue(message, images, delivery, 'automatic');\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n };\n const dispatchCommand = async (value: string) => options.dispatchCommand?.(value) ?? false;\n const admit = async (message: string | AgentMessage, images?: ImageContent[], mode?: 'steer' | 'followUp') => {\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n if (typeof message === 'string' && (await dispatchCommand(message)))\n return { settled: Promise.resolve(), handledCommand: true };\n const record = await readRecord();\n if (record.paused) {\n if (record.queue.some((q) => q.disposition !== 'consumed' && q.disposition !== 'removed'))\n throw new Error('The queue is paused');\n await changeRecord((r) => {\n r.paused = false;\n delete r.abortOperationId;\n delete r.abortTaskId;\n });\n }\n await flushNextTurn();\n const { id } = await enqueue(message, images, mode ?? 'nextRun', 'automatic');\n const submission = await handoff(\n (await readRecord()).queue.find((q) => q.id === id)!,\n mode ?? 'reject',\n );\n if (!submission) return { settled: Promise.resolve() };\n let resolveDelivery!: () => void;\n const delivered = new Promise<void>((resolve) => {\n resolveDelivery = resolve;\n });\n internalDelivery.set(submission.id, { done: delivered, resolve: resolveDelivery });\n if (deliveredInputs.has(submission.id)) resolveDelivery();\n const settled = (async () => {\n try {\n const status = await submission.wait(context);\n // A durable receipt can finish before the watcher has queued run_end.\n // Wait for this input's settlement hooks, not the current event tail.\n if (status.status === 'done' || status.entry !== undefined) await delivered;\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await drain();\n } finally {\n internalDelivery.delete(submission.id);\n }\n })();\n void settled.catch((error) => emit({ type: 'error', error: String(error) }));\n return { settled };\n };\n const abort = async (operationId?: string) => {\n const current = await execution();\n if (!current || current.id === 'settling' || (operationId && current.id !== operationId)) return;\n if (current.id === external) {\n externalAbort?.abort();\n return;\n }\n const live = await harness.snapshot(LiveDoc, conversation.id, context);\n const taskId = live?.run?.taskId ?? nativeId(current.id);\n await changeRecord((r) => {\n r.paused = true;\n r.abortOperationId = current.id;\n r.abortTaskId = taskId;\n });\n await publish();\n await writable(async () => {\n if (current.kind === 'run') await conversation.abort(context);\n else await harness.abortTask(taskId, context);\n });\n await reconcile();\n };\n const interrupt = async () => {\n await abort();\n await writable(() => conversation.abort(context));\n await eventsSettled;\n };\n // Host-owned admission uses only public Tx operations. Target validation and both\n // lifecycle/native ownership move on the same Session mutation line.\n const admitSelected = async (selection: { id: string; operationId?: string }, replay = false) =>\n writable(() =>\n harness.commit(async (tx: Tx) => {\n const doc = await tx.doc(LifecycleDoc);\n const record = JSON.parse(doc.json) as LifecycleRecord;\n const q = record.queue.find((q) => q.id === selection.id);\n if (!q) return 'not_found' as const;\n const requestId = `${q.id}:${q.attempt ?? 0}`;\n // An accepted request survives completion/replacement and a lost acknowledgement.\n const accepted = await tx.submissionByRequest(conversation.id, requestId);\n if (accepted && accepted.type !== 'input')\n throw new Error(`Request ${requestId} already identifies a submission of type ${accepted.type}`);\n if (accepted && replay) return accepted.id;\n if (q.disposition === 'removed' || q.disposition === 'consumed') return 'not_found' as const;\n if (accepted || q.disposition !== 'pending') return 'in_flight' as const;\n const live = await tx.doc(LiveDoc, conversation.id);\n const task = live.run ? await tx.task(live.run.taskId) : undefined;\n if (\n (live.run ? String(live.run.inputs[0]) : undefined) !== selection.operationId ||\n task?.abortRequested ||\n (live.run && record.abortOperationId === selection.operationId)\n )\n return 'target_changed' as const;\n if (!live.run) {\n let page = await tx.scanTasks(\n { conversationId: conversation.id, kind: CompactionTask.definition.name, background: false },\n 128,\n );\n while (true) {\n if (page.items.some((task) => task.state.status !== 'terminal')) return 'target_changed' as const;\n if (!page.next) break;\n page = await tx.scanTasks(\n { conversationId: conversation.id, kind: CompactionTask.definition.name, background: false },\n 128,\n page.next,\n );\n }\n }\n const content = input(q.message ?? q.text, q.images);\n const inbox = await tx.doc(InboxDoc, conversation.id);\n // Native final boundaries read the active head before any table writes.\n let head = live.run ? undefined : (await tx.latestHeadMarker(conversation.id))?.head;\n const now = Date.now();\n let id: SubmissionId;\n if (!live.run && inbox.items.length === 0) {\n const entry = await tx.appendEntry(UserEntry, conversation.id, {\n model: [{ role: 'user', content, timestamp: now }],\n });\n id = (\n await tx.createSubmission({\n conversationId: conversation.id,\n requestId,\n type: 'input',\n status: 'placed',\n entry: entry.id,\n })\n ).id;\n live.run = {\n taskId: await tx.createTask(\n GenerationTask,\n {},\n { ownership: { kind: 'conversation' }, conversationId: conversation.id },\n ),\n inputs: [id],\n };\n } else {\n id = (\n await tx.createSubmission({ conversationId: conversation.id, requestId, type: 'input', status: 'queued' })\n ).id;\n inbox.items.push({ id, mode: 'steer', content: json(content) as typeof content });\n if (!live.run) {\n // Preserve native write-first placement, stale heads, queue modes and\n // positional input order rather than restarting just the selected input.\n const writes = inbox.items.flatMap((item, index) => (item.mode === 'write' ? [index] : []));\n const pick = (mode: 'steer' | 'followUp') => {\n const indexes = inbox.items.flatMap((item, index) => (item.mode === mode ? [index] : []));\n const queueMode = mode === 'steer' ? settings.steeringMode : settings.followUpMode;\n return queueMode === 'all' ? indexes : indexes.slice(0, 1);\n };\n const users = [...pick('steer'), ...pick('followUp')].sort((a, b) => a - b);\n for (const index of writes) {\n const item = inbox.items[index]!;\n if (item.mode !== 'write') continue;\n // Public InboxDoc represents native write drafts as JsonObject.\n const draft = item.entry as unknown as Extract<\n Parameters<Conversation['submit']>[0],\n { type: 'write' }\n >['entry'];\n if (typeof draft.head === 'number' && head !== undefined && draft.head < head) {\n tx.settleSubmission(item.id, { status: 'unanswered', reason: 'stale' });\n continue;\n }\n const entry = await tx.appendEntry(conversation.id, draft);\n if (draft.head !== undefined) head = draft.head === 'self' ? entry.id : draft.head;\n tx.placeSubmission(item.id, entry.id);\n }\n const inputs: SubmissionId[] = [];\n for (const index of users) {\n const item = inbox.items[index]!;\n if (item.mode === 'write') continue;\n const entry = await tx.appendEntry(UserEntry, conversation.id, {\n model: [{ role: 'user', content: item.content, timestamp: now }],\n });\n tx.placeSubmission(item.id, entry.id);\n inputs.push(item.id);\n }\n for (const index of [...writes, ...users].sort((a, b) => b - a)) inbox.items.splice(index, 1);\n if (inputs.length)\n live.run = {\n taskId: await tx.createTask(\n GenerationTask,\n {},\n { ownership: { kind: 'conversation' }, conversationId: conversation.id },\n ),\n inputs,\n };\n }\n }\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = 'steer';\n q.submissionId = id;\n record.revision++;\n doc.json = JSON.stringify(record);\n return id;\n }, context),\n );\n const submitUserPrompt = async (\n message: string | Extract<AgentMessage, { role: 'user' }>,\n images?: ImageContent[],\n selection?: { id: string; operationId?: string },\n submissionMode: 'reject' | 'steer' = 'reject',\n ): Promise<{\n settled: Promise<void>;\n handledCommand?: boolean;\n queueOutcome?: 'not_found' | 'in_flight' | 'target_changed';\n }> => {\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n if (!selection && (typeof message === 'string' ? !message && !images?.length : !message.content.length))\n throw new Error('User input must contain text or an image');\n if (!selection && typeof message === 'string' && (await dispatchCommand(message)))\n return { settled: Promise.resolve(), handledCommand: true };\n guardUserAdmission();\n userAdmission = true;\n userAdmissionSettled = new Promise<void>((resolve) => {\n releaseUserAdmission = resolve;\n });\n let claimed: Retained | undefined;\n try {\n if (selection && submissionMode === 'steer') {\n let admitted;\n try {\n admitted = await admitSelected(selection);\n } catch (error) {\n // Re-enter the line to find an accepted request before rechecking its target.\n const accepted = await storage.storage.submissionByRequest(\n conversation.id,\n `${selection.id}:${(await readRecord()).queue.find((q) => q.id === selection.id)?.attempt ?? 0}`,\n context,\n );\n if (!accepted) throw error;\n admitted = await admitSelected(selection, true);\n }\n if (typeof admitted === 'string') return { settled: Promise.resolve(), queueOutcome: admitted };\n const submission = await harness.submission(admitted, context);\n if (!submission) throw new Error('Accepted promotion submission is missing');\n const settled = (async () => {\n const status = await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'user_prompt', error: String(error) }));\n await reconcile();\n await publish();\n return { settled };\n }\n const current = await execution();\n if (selection) {\n const outcome = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === selection.id);\n if (!q || q.disposition === 'removed' || q.disposition === 'consumed') return 'not_found' as const;\n if (q.disposition !== 'pending') return 'in_flight' as const;\n if (current?.id !== selection.operationId || current?.status === 'aborting')\n return 'target_changed' as const;\n if (q.message && q.message.role !== 'user') throw new Error('Only user input can interrupt and respond');\n userClaims.add(q.id);\n if (submissionMode === 'reject') r.paused = true;\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = submissionMode;\n return { ...q };\n });\n if (typeof outcome === 'string') return { settled: Promise.resolve(), queueOutcome: outcome };\n claimed = outcome;\n }\n if (submissionMode === 'reject') {\n if (current) await abort(current.id);\n await conversation.waitForIdle(context);\n await eventsSettled;\n }\n if (!selection) await flushNextTurn();\n if (!claimed) {\n const { id } = await enqueue(\n message,\n images,\n submissionMode === 'steer' ? 'steer' : 'nextRun',\n submissionMode === 'steer' ? 'automatic' : 'held',\n );\n claimed = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === id);\n if (!q || q.disposition !== 'pending') throw new Error('User input was removed before admission');\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = submissionMode;\n return { ...q };\n });\n }\n const submission = await handoff(claimed, submissionMode, true);\n if (!submission) throw new Error('User admission ownership changed');\n const settled = (async () => {\n const status = await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'user_prompt', error: String(error) }));\n await publish();\n return { settled };\n } finally {\n if (claimed) userClaims.delete(claimed.id);\n if (selection) userClaims.delete(selection.id);\n userAdmission = false;\n releaseUserAdmission?.();\n releaseUserAdmission = undefined;\n }\n };\n const recover = async () => {\n const r = await readRecord();\n if (r.abortOperationId) {\n const task =\n r.abortTaskId === undefined\n ? undefined\n : await harness.getTask(r.abortTaskId as Parameters<typeof harness.getTask>[0], context);\n if (task && task.state.status !== 'terminal') await conversation.abort(context);\n }\n for (const item of r.queue.filter((q) => q.disposition === 'handoff' && !q.submissionId)) {\n // requestId deduplicates the crash window between native admission and product receipt.\n if (item.conversationId !== conversation.id) {\n await changeRecord((record) => {\n const q = record.queue.find((q) => q.id === item.id);\n if (q) q.disposition = 'uncertain';\n });\n continue;\n }\n await handoff(item, item.submissionMode ?? (item.delivery === 'steer' ? 'steer' : 'followUp'), true);\n }\n await reconcile();\n await changeRecord(() => undefined);\n };\n const runExternalOperation = async <T>(work: () => Promise<T>): Promise<T> => {\n guardUserAdmission();\n if (await execution()) throw new Error('An operation is already running');\n external = randomUUID();\n externalAbort = new AbortController();\n try {\n await publish();\n return await writable(work);\n } finally {\n external = undefined;\n externalAbort = undefined;\n await publish();\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n }\n };\n const appendEntry = async (entry: Parameters<Conversation['submit']>[0] & { type: 'write' }) => {\n const submission = await writable(() => conversation.submit(entry, context));\n const receipt = await submission.wait(context);\n if (receipt.status !== 'done') throw new Error(`Entry write failed: ${receipt.reason}`);\n return String(receipt.entry);\n };\n const readEntries = async () => {\n const entries = await projectDurableConversationEntries(conversation, context);\n return { entries, leafId: entries.at(-1)?.id ?? null };\n };\n const getSessionStats = async () => {\n const { entries } = await readEntries();\n const messages = entries.flatMap((e) => (e.type === 'message' ? [e.message] : []));\n const agent = await conversation.agent(context);\n const selected = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n const contextUsage = contextUsageOf(contextTokensOf(latestAssistantUsage(entries)), selected?.contextWindow);\n const usage = await harness.usage(context);\n const all = [...Object.values(usage.models), ...Object.values(usage.tools)];\n const tokens = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };\n let cost = 0;\n for (const u of all) {\n tokens.input += u.input;\n tokens.output += u.output;\n tokens.cacheRead += u.cacheRead;\n tokens.cacheWrite += u.cacheWrite;\n tokens.total += u.totalTokens;\n cost += u.cost.total;\n }\n return {\n sessionId,\n sessionFile: storage.sessionFile,\n ...(contextUsage === undefined ? {} : { contextUsage }),\n messageCount: messages.length,\n totalMessages: messages.length,\n userMessages: messages.filter((m) => m.role === 'user').length,\n assistantMessages: messages.filter((m) => m.role === 'assistant').length,\n toolCalls: messages.flatMap((m) =>\n m.role === 'assistant' ? m.content.filter((c) => c.type === 'toolCall') : [],\n ).length,\n toolResults: messages.filter((m) => m.role === 'toolResult').length,\n tokens,\n cost,\n totalCost: cost,\n usage: {\n input: tokens.input,\n output: tokens.output,\n cacheRead: tokens.cacheRead,\n cacheWrite: tokens.cacheWrite,\n totalTokens: tokens.total,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: cost },\n },\n };\n };\n let disposePromise: Promise<void> | undefined;\n const dispose = () =>\n (disposePromise ??= (async () => {\n const failures: unknown[] = [];\n const attempt = async (cleanup: () => Promise<unknown>) => {\n try {\n await cleanup();\n return true;\n } catch (error) {\n failures.push(error);\n return false;\n }\n };\n await attempt(interrupt);\n disposed = true;\n await attempt(() => watcher.stop());\n await attempt(() => eventsSettled);\n const harnessClosed = await attempt(() => harness.close(context));\n const repositoryClosed = harnessClosed && (await attempt(async () => storage.repository?.close(context)));\n await attempt(() => environment.cleanup(context));\n if (harnessClosed && repositoryClosed) await attempt(async () => storage.historyLease?.release());\n resolveExited(failures.length ? 1 : 0);\n if (failures.length) throw new AggregateError(failures, 'Direct harness cleanup failed');\n })());\n const recordUsage: DirectHarnessRuntime<TContext>['recordUsage'] = async (usage, usageOptions) => {\n const entryId = await appendEntry({\n type: 'write',\n entry: { kind: 'doompi.usage', data: json({ usage, ...usageOptions }) },\n });\n await writable(() =>\n harness.commit(async (tx) => {\n const ledger = await tx.doc(UsageDoc, conversation.id);\n const key = 'doompi/auxiliary';\n const previous = ledger.models[key];\n ledger.models[key] = previous\n ? {\n ...usage,\n input: previous.input + usage.input,\n output: previous.output + usage.output,\n cacheRead: previous.cacheRead + usage.cacheRead,\n cacheWrite: previous.cacheWrite + usage.cacheWrite,\n totalTokens: previous.totalTokens + usage.totalTokens,\n cost: {\n input: previous.cost.input + usage.cost.input,\n output: previous.cost.output + usage.cost.output,\n cacheRead: previous.cost.cacheRead + usage.cost.cacheRead,\n cacheWrite: previous.cost.cacheWrite + usage.cost.cacheWrite,\n total: previous.cost.total + usage.cost.total,\n },\n }\n : usage;\n }, context),\n );\n return entryId;\n };\n return {\n sessionId,\n sessionFile: storage.sessionFile,\n laneName,\n harnessId: options.harnessId ?? `${sessionId}:${laneName}`,\n session: harness,\n harness,\n get lane() {\n return conversation;\n },\n exited,\n get storageQuarantined() {\n return quarantined;\n },\n completeModel: models.complete?.bind(models),\n onPresentationFrame(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n onEvent(listener) {\n eventListeners.add(listener);\n return () => eventListeners.delete(listener);\n },\n stop() {\n void dispose().catch((error) => emit({ type: 'error', error: String(error) }));\n },\n readEntries,\n readLifecycle,\n dispatchCommand,\n listCommands: () => [...(options.listCommands?.() ?? [])],\n async readState() {\n const lifecycle = await readLifecycle();\n const agent = await conversation.agent(context);\n const metadata = await harness.snapshot(SessionMetadataDoc, context);\n const stats = await getSessionStats();\n const inbox = await harness.snapshot(InboxDoc, conversation.id, context);\n const retainedSubmissions = new Set((await readRecord()).queue.map((item) => item.submissionId));\n const nativePending =\n inbox?.items.filter((item) => item.mode !== 'write' && !retainedSubmissions.has(item.id)).length ?? 0;\n return json({\n sessionId,\n sessionFile: storage.sessionFile,\n sessionName: metadata?.name,\n model: agent.model ? { provider: agent.model.provider, id: agent.model.modelId } : undefined,\n thinkingLevel: agent.thinkingLevel,\n isStreaming: lifecycle.operation?.kind === 'run',\n isCompacting: lifecycle.operation?.kind === 'compaction',\n operationId: lifecycle.operation?.id,\n executionStatus: lifecycle.operation?.status,\n fastMode,\n queuePaused: lifecycle.paused,\n queueRevision: lifecycle.revision,\n steeringMode: settings.steeringMode ?? 'one-at-a-time',\n followUpMode: settings.followUpMode ?? 'one-at-a-time',\n autoCompactionEnabled: settings.compaction?.enabled ?? true,\n messageCount: stats.messageCount,\n pendingMessageCount: lifecycle.queue.length + nativePending + nextTurnMessages.length + deferredInternalCount,\n }) as Record<string, unknown>;\n },\n enqueueAutomatic: async (value, images) => {\n const result = await enqueue(value, images, 'nextRun', 'automatic');\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n return result;\n },\n async removeQueued(id) {\n const item = (await readRecord()).queue.find((q) => q.id === id);\n if (!item) return 'not_found';\n if (item.disposition === 'consumed') return 'already_consumed';\n if (item.disposition === 'removed') return 'removed';\n if (item.submissionId) {\n const result = await harness.abortSubmission(item.submissionId as SubmissionId, context, conversation.id);\n if (result === 'already_placed') return 'in_flight';\n if (result === 'settled') return 'already_consumed';\n } else if (item.disposition !== 'pending') return 'in_flight';\n const result = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === id);\n if (!q) return 'not_found' as const;\n if (q.disposition === 'consumed') return 'already_consumed' as const;\n if (q.disposition === 'removed') return 'removed' as const;\n if (q.submissionId !== item.submissionId || (item.submissionId === undefined && q.disposition !== 'pending'))\n return 'in_flight' as const;\n q.disposition = 'removed';\n q.text = '';\n delete q.message;\n delete q.images;\n return 'removed' as const;\n });\n await publish();\n return result;\n },\n async promoteQueued(id, operationId) {\n const result = await submitUserPrompt('', undefined, { id, operationId }, 'steer');\n return result.queueOutcome ?? 'promoted';\n },\n async resumeQueue() {\n guardUserAdmission();\n await changeRecord((r) => {\n r.paused = false;\n delete r.abortOperationId;\n delete r.abortTaskId;\n });\n await publish();\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n },\n recover,\n async setFastMode(enabled) {\n if (enabled) {\n const selected = (await conversation.agent(context)).model;\n const model = selected ? models.getModel(selected.provider, selected.modelId) : undefined;\n if (model?.api !== CODEX_API || model.provider !== CODEX_PROVIDER)\n throw new Error('Fast mode requires an OpenAI Codex model');\n }\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(FastModeDoc)).enabled = enabled;\n await tx.appendEntry(conversation.id, {\n kind: 'doompi.fast-mode',\n data: { version: 1, enabled, sessionId },\n });\n }, context),\n );\n fastMode = enabled;\n emit({ type: 'fast_mode_changed', enabled });\n },\n async setModel(model) {\n const previous = (await conversation.agent(context)).model;\n if (!models.getModel(model.provider, model.id))\n throw new Error(`Model not found: ${model.provider}/${model.id}`);\n await writable(() =>\n conversation.configure({ model: { provider: model.provider, modelId: model.id } }, context),\n );\n await deliver(\n {\n type: 'config_update',\n property: 'model',\n value: { provider: model.provider, modelId: model.id },\n previous,\n },\n context,\n );\n emit({ type: 'model_select', model });\n },\n availableModels: () => models.getAvailable(),\n async availableThinkingLevels() {\n const agent = await conversation.agent(context);\n const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n if (!model) throw new Error('No model is selected');\n return getSupportedThinkingLevels(model);\n },\n setThinkingLevel: (level) => writable(() => conversation.configure({ thinkingLevel: level }, context)),\n async setSteeringMode(mode) {\n settings = { ...settings, steeringMode: mode };\n },\n async setFollowUpMode(mode) {\n settings = { ...settings, followUpMode: mode };\n },\n navigateTree: (targetId, navigationOptions) =>\n runExternalOperation(async () => {\n try {\n const expected = conversation.id;\n if (\n targetId !== null &&\n !(await storage.storage.entry(conversation.id, nativeId<EntryId>(targetId), context))\n )\n throw new Error('Navigation target is not in the selected conversation');\n const oldTip = (await readEntries()).leafId;\n await deliver({ type: 'navigation_start' }, context);\n emit({ type: 'navigation_start', targetId });\n let summary = navigationOptions?.summary;\n if (navigationOptions?.summarize === true && summary === undefined) {\n const selected = (await conversation.agent(context)).model;\n const model = selected ? models.getModel(selected.provider, selected.modelId) : undefined;\n if (!model) throw new Error('No model is selected for navigation summary');\n const instructions = navigationOptions.customInstructions;\n if (instructions !== undefined && typeof instructions !== 'string')\n throw new Error('Navigation instructions must be a string');\n const base =\n 'Summarize this conversation for continuing work on another branch. Include decisions, progress, remaining work, and essential context. Return only the summary.';\n const messages: Message[] = [\n {\n role: 'system',\n content:\n navigationOptions.replaceInstructions === true\n ? (instructions ?? base)\n : [base, instructions].filter(Boolean).join('\\n\\n'),\n timestamp: Date.now(),\n },\n {\n role: 'user',\n content: JSON.stringify((await conversation.context(context)).messages),\n timestamp: Date.now(),\n },\n ];\n await options.beforeModelRequest?.({ phase: 'request', model, prompt: messages, resources }, context);\n const summaryContext = withAbortSignal(externalAbort!.signal, context);\n let answer: AssistantMessage;\n try {\n answer = await awaitWithContext(\n models.complete(model, { messages }, { signal: externalAbort!.signal }),\n summaryContext,\n );\n } catch (error) {\n if (externalAbort?.signal.aborted) {\n await deliver(\n { type: 'navigation_end', status: 'aborted', tipId: oldTip, fromTipId: oldTip },\n context,\n );\n emit({ type: 'navigation_end', status: 'aborted' });\n return { cancelled: true, entries: (await readEntries()).entries };\n }\n throw error;\n }\n if (answer.stopReason === 'error' || answer.stopReason === 'aborted')\n throw new Error(answer.errorMessage ?? 'Navigation summary failed');\n summary = text(answer).trim();\n await recordUsage(answer.usage, { details: { purpose: 'branch_summary' } });\n }\n if (externalAbort?.signal.aborted) {\n await deliver({ type: 'navigation_end', status: 'aborted', tipId: oldTip, fromTipId: oldTip }, context);\n emit({ type: 'navigation_end', status: 'aborted' });\n return { cancelled: true, entries: (await readEntries()).entries };\n }\n if (summary !== undefined && typeof summary !== 'string')\n throw new Error('Navigation summary must be a string');\n const id = await navigateDurableConversation(\n harness,\n expected,\n targetId === null ? null : nativeId<EntryId>(targetId),\n context,\n typeof summary === 'string'\n ? {\n summary: {\n kind: 'doompi.entry',\n data: {\n type: 'branch_summary',\n summary,\n fromId: targetId,\n fromHook: navigationOptions?.summarize !== true,\n },\n model: [\n {\n role: 'user',\n content: `<branch_summary>\\n${summary}\\n</branch_summary>`,\n timestamp: Date.now(),\n },\n ],\n },\n }\n : undefined,\n );\n const agent = await conversation.agent(context);\n conversation = (await harness.conversation(id, context))!;\n if (targetId === null)\n await conversation.configure(\n {\n model: agent.model,\n thinkingLevel: agent.thinkingLevel,\n cwd: agent.cwd,\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n instructions: agent.instructions,\n },\n context,\n );\n await attach();\n const result = await readEntries();\n if (typeof navigationOptions?.label === 'string' && targetId !== null)\n await harness.commit(async (tx) => {\n (await tx.doc(LabelsDoc)).labels[targetId] = navigationOptions.label as string;\n }, context);\n for (const entry of result.entries)\n if (entry.type === 'branch_summary') await deliver({ type: 'entry_added', entry }, context);\n const event: HarnessEvent = {\n type: 'navigation_end',\n status: 'completed',\n tipId: result.leafId,\n fromTipId: oldTip,\n };\n await deliver(event, context);\n emit({ ...event });\n return { cancelled: false, entries: result.entries };\n } catch (error) {\n await deliver(\n {\n type: 'navigation_end',\n status: 'failed',\n tipId: null,\n fromTipId: null,\n error: error instanceof Error ? error : new Error(String(error)),\n },\n context,\n );\n emit({ type: 'navigation_end', status: 'failed', error: String(error) });\n throw error;\n }\n }),\n async clearQueue() {\n for (const item of (await readRecord()).queue)\n if (item.submissionId) await harness.abortSubmission(item.submissionId as SubmissionId, context);\n await changeRecord((r) => {\n r.queue = [];\n });\n await publish();\n return { steering: [], followUp: [] };\n },\n setName: (name) =>\n writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(SessionMetadataDoc)).name = name;\n }, context),\n ),\n getSessionStats,\n async replaceTools(replacement) {\n tools = replacement;\n activeNames = new Set(tools.map((t) => t.name));\n install();\n await writable(() => conversation.configure({ tools: tools.map(nativeTool) }, context));\n },\n async replaceResources(replacement) {\n resources = replacement;\n install();\n },\n async readResources() {\n return resources;\n },\n runExternalOperation,\n appendCustomEntry: async (customType, data) =>\n String(\n (\n await writable(() =>\n conversation.commit(\n (tx) =>\n tx.appendEntry(conversation.id, {\n kind: customType,\n ...(data === undefined ? {} : { data: json(data) }),\n ...(options.entryProjectors?.[customType]\n ? {\n model: convertToLlm(\n options.entryProjectors[customType]({\n type: 'custom',\n id: '',\n parentId: null,\n timestamp: Date.now(),\n seq: 0,\n customType,\n ...(data === undefined ? {} : { data: json(data) }),\n }),\n ),\n }\n : {}),\n }),\n context,\n ),\n )\n ).id,\n ),\n appendMessage: (message) =>\n appendEntry({\n type: 'write',\n entry: {\n kind: 'doompi.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp }),\n model: convertToLlm([message]),\n },\n }),\n setLabel: (targetId, label) =>\n writable(() =>\n harness.commit(async (tx) => {\n const labels = (await tx.doc(LabelsDoc)).labels;\n if (label === undefined) delete labels[targetId];\n else labels[targetId] = label;\n }, context),\n ),\n recordUsage,\n submitPrompt: admit,\n submitUserPrompt,\n prompt: async (value, images) => {\n await (\n await admit(value, images)\n ).settled;\n },\n admitMessage: (message) => admit(message),\n submitInternalMessage: async function submitInternalMessage(\n message,\n delivery = 'steer',\n requestId = randomUUID(),\n ) {\n if (typeof message !== 'string' && message.role !== 'user' && message.role !== 'custom')\n throw new Error('Internal input must be user or custom message content');\n if (delivery === 'nextTurn') {\n nextTurnMessages.push(\n typeof message === 'string' ? { role: 'user', content: message, timestamp: Date.now() } : message,\n );\n return { settled: Promise.resolve() };\n }\n const preserved: AgentMessage =\n typeof message === 'string' ? { role: 'user', content: message, timestamp: Date.now() } : message;\n const deliveryRecord: InternalDeliveryRecord = { message: preserved, conversationId: conversation.id };\n if (userAdmission) {\n deferredInternalCount++;\n admittingInternal.add(requestId);\n try {\n await changeRecord((r) => {\n (r.internalDeliveries ??= {})[requestId] = deliveryRecord;\n });\n } catch (error) {\n deferredInternalCount--;\n admittingInternal.delete(requestId);\n throw error;\n }\n const released = userAdmissionSettled;\n const settled = released.then(async () => {\n deferredInternalCount--;\n admittingInternal.delete(requestId);\n await (\n await submitInternalMessage(preserved, delivery, requestId)\n ).settled;\n });\n void settled.catch((error) => emit({ type: 'error', code: 'internal_message', error: String(error) }));\n return { settled };\n }\n if (external) throw new Error('An operation is already running');\n const content = typeof message === 'string' ? message : message.content;\n const submit = async (draft: Parameters<Conversation['submit']>[0] & { requestId: string }) => {\n try {\n return await writable(() => conversation.submit(draft, context));\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(conversation.id, draft.requestId, context);\n const submission = accepted && (await harness.submission(accepted.id, context));\n if (!submission) throw error;\n return submission;\n }\n };\n admittingInternal.add(requestId);\n // Preserve custom presentation metadata without adding its content twice to model context.\n let envelope: Awaited<ReturnType<Conversation['submit']>> | undefined;\n let submission: Awaited<ReturnType<Conversation['submit']>>;\n try {\n await changeRecord((r) => {\n (r.internalDeliveries ??= {})[requestId] = deliveryRecord;\n });\n envelope =\n typeof message !== 'string' && message.role === 'custom'\n ? await submit({\n type: 'write',\n requestId: `${requestId}:message`,\n entry: {\n kind: 'doompi.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp, inputRequestId: requestId }),\n },\n })\n : undefined;\n submission = await submit({ type: 'input', content, whenBusy: delivery, requestId });\n await changeRecord((r) => {\n const item = r.internalDeliveries?.[requestId];\n if (item) item.submissionId = submission.id;\n });\n } finally {\n admittingInternal.delete(requestId);\n }\n let resolveDelivery!: () => void;\n const delivered = new Promise<void>((resolve) => {\n resolveDelivery = resolve;\n });\n internalDelivery.set(submission.id, { done: delivered, resolve: resolveDelivery });\n if (deliveredInputs.has(submission.id)) resolveDelivery();\n const settled = (async () => {\n try {\n const status = await submission.wait(context);\n if (status.status === 'unanswered' && status.entry === undefined) {\n await conversation.waitForIdle(context);\n await reconcileInternal(requestId, deliveryRecord);\n }\n if (envelope && (await envelope.wait(context)).status !== 'done')\n throw new Error('Internal message journal write failed');\n if (status.status === 'done' || status.entry !== undefined) await delivered;\n await eventsSettled;\n await reconcileInternal(requestId, deliveryRecord);\n } finally {\n internalDelivery.delete(submission.id);\n }\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'internal_message', error: String(error) }));\n return { settled };\n },\n steer: async (message, images) => {\n if (typeof message !== 'string' && message.role !== 'user')\n throw new Error('Only user messages can steer an agent run');\n await submitUserPrompt(message, images, undefined, 'steer');\n },\n followUp: (message, images) => queued(message, images, 'followUp'),\n nextRun: (message, images) => queued(message, images, 'nextRun'),\n abort,\n interrupt,\n async compact(instructions) {\n guardUserAdmission();\n if (await execution()) throw new Error('An operation is already running');\n const previous = settings;\n settings = { ...settings, compaction: { ...settings.compaction, keepRecentTokens: 0 } };\n try {\n const task = await writable(() => conversation.compact(instructions, context));\n const receipt = await harness.waitForTask(task, context);\n await eventsSettled;\n if (['failed', 'faulted', 'orphaned'].includes(receipt.state.outcome.status))\n throw new Error('Compaction failed');\n } finally {\n settings = previous;\n }\n },\n async admitResume() {\n await recover();\n const resumed = !!(await execution());\n harness.resume();\n const settled = (async () => {\n await conversation.waitForIdle(context);\n await eventsSettled;\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'resume', error: String(error) }));\n return { resumed, settled };\n },\n async resume() {\n await recover();\n const resumed = !!(await execution());\n harness.resume();\n if (resumed) {\n await conversation.waitForIdle(context);\n await eventsSettled;\n }\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n return resumed;\n },\n dispose,\n };\n } catch (error) {\n const failures: unknown[] = [error];\n try {\n if (startupHarness) await startupHarness.close(context);\n else await storage.storage.close(context);\n } catch (closeError) {\n failures.push(closeError);\n }\n if (failures.length === 1) {\n try {\n await storage.repository?.close(context);\n await storage.historyLease?.release();\n } catch (closeError) {\n failures.push(closeError);\n }\n }\n if (failures.length > 1) throw new AggregateError(failures, 'Direct harness startup and cleanup failed');\n throw error;\n }\n}\nexport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../types/server/directHarnessRuntime';\n"],"mappings":"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"}
1
+ {"version":3,"file":"directHarnessRuntime.cjs","names":["defineDoc","projectDurableEntries","BACKGROUND_CONTEXT","openSqliteSessionStorage","createRegistry","NodeExecutionEnv","createModels","createAssistantMessageEventStream","awaitWithContext","formatSkillsForSystemPrompt","hook","GenerationTask","LiveDoc","getCurrentSystemPrompt","getCurrentTools","convertToLlm","ToolTask","CompactionTask","Harness","initializeDurableNavigation","AgentDoc","SessionIdentityDoc","randomUUID","SessionMetadataDoc","watchEvents","InboxDoc","UserEntry","contextUsageOf","contextTokensOf","latestAssistantUsage","UsageDoc","getSupportedThinkingLevels","withAbortSignal","navigateDurableConversation","released"],"sources":["../../../src/server/directHarnessRuntime.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { Context, JsonValue } from '@earendil-works/chord';\nimport { BACKGROUND_CONTEXT, awaitWithContext, withAbortSignal } from '@earendil-works/chord/context';\nimport {\n createModels,\n getSupportedThinkingLevels,\n createAssistantMessageEventStream,\n type AssistantMessageEventStream,\n type Models,\n type MutableModels,\n type Api,\n type Model,\n type ImageContent,\n type Message,\n type Provider,\n type AssistantMessage,\n type ToolResultMessage,\n} from '@earendil-works/pi-ai';\nimport { getCurrentSystemPrompt, getCurrentTools } from '@earendil-works/pi-ai/utils/transcript';\nimport { convertToLlm } from '@earendil-works/pi-coding-agent';\nimport {\n Harness,\n createRegistry,\n defineDoc,\n GenerationTask,\n ToolTask,\n CompactionTask,\n hook,\n watchEvents,\n UsageDoc,\n LiveDoc,\n InboxDoc,\n AgentDoc,\n UserEntry,\n type Tx,\n type CompactionResult,\n type TaskId,\n type Conversation,\n type Cursor,\n type EntryRecord,\n type EntryId,\n type SubmissionId,\n type HarnessSettings,\n type ToolRegistration,\n type AgentEventStream,\n} from '@earendil-works/pi-durable';\nimport { NodeExecutionEnv } from '@earendil-works/pi-durable/env/node';\n\nimport { contextTokensOf, contextUsageOf, latestAssistantUsage } from '../services/contextUsage';\nimport { initializeDurableNavigation, navigateDurableConversation } from '../services/durableNavigation';\nimport { formatSkillsForSystemPrompt } from '../services/piExtensionHost';\nimport { openSqliteSessionStorage, SessionIdentityDoc, SessionMetadataDoc } from '../services/sqliteSessionStorage';\nimport { projectDurableEntries } from '../services/transcriptPages';\nimport type {\n DirectHarnessRuntime,\n DirectHarnessRuntimeOptions,\n DirectHarnessFrame,\n DirectHarnessEventListener,\n DirectHarnessLifecycle,\n DirectHarnessQueuedInput,\n Entry,\n AgentHarnessTool,\n AgentMessage,\n HarnessEvent,\n} from '../types/server/directHarnessRuntime';\n\nexport const AGENT_SETTLED_ENTRY_TYPE = 'doompi.agent-settled';\nconst LifecycleDoc = defineDoc({\n kind: 'doompi.server.lifecycle',\n version: 1,\n scope: 'session',\n initial: () => ({ json: '{\"revision\":0,\"paused\":false,\"queue\":[]}' }),\n});\nconst FastModeDoc = defineDoc({\n kind: 'doompi.fast-mode',\n version: 1,\n scope: 'session',\n initial: (): { enabled: boolean } => ({ enabled: false }),\n});\nconst CODEX_API = 'openai-codex-responses';\nconst CODEX_PROVIDER = 'openai-codex';\nconst LabelsDoc = defineDoc({\n kind: 'doompi.labels',\n version: 1,\n scope: 'session',\n initial: () => ({ labels: {} as Record<string, string> }),\n});\ntype Retained = Omit<DirectHarnessQueuedInput, 'disposition'> & {\n disposition: DirectHarnessQueuedInput['disposition'] | 'consumed' | 'removed';\n // Older records have unknown provenance and remain retained, not queue-owned.\n explicitQueue?: boolean;\n attempt?: number;\n submissionMode?: 'steer' | 'followUp' | 'reject' | 'write';\n} & { submissionId?: number; conversationId?: number; message?: AgentMessage; operationId?: string };\ntype InternalDeliveryRecord = {\n message: AgentMessage;\n conversationId: number;\n submissionId?: number;\n};\ntype LifecycleRecord = {\n revision: number;\n paused: boolean;\n abortOperationId?: string;\n abortTaskId?: number;\n queue: Retained[];\n internalDeliveries?: Record<string, InternalDeliveryRecord>;\n};\n\nfunction nativeId<T extends number>(id: string): T {\n const value = Number(id);\n if (!Number.isSafeInteger(value) || value < 0 || String(value) !== id)\n throw new Error(`Invalid durable identifier: ${id}`);\n return value as T;\n}\nfunction json(value: unknown): JsonValue {\n return JSON.parse(JSON.stringify(value)) as JsonValue;\n}\nfunction text(message: string | AgentMessage): string {\n if (typeof message === 'string') return message;\n if (!('content' in message))\n return 'summary' in message ? message.summary : 'output' in message ? message.output : '';\n return typeof message.content === 'string'\n ? message.content\n : message.content.map((p) => (p.type === 'text' ? p.text : '')).join('');\n}\n/** Compatibility projection keeps protocol identities strings and retains fork ancestry. */\nexport async function projectDurableConversationEntries(\n conversation: Conversation,\n context: Context,\n): Promise<Entry[]> {\n const records: EntryRecord[] = [];\n let cursor: Cursor | undefined;\n do {\n const page = await conversation.entries({}, 256, cursor, context);\n records.push(...page.items);\n cursor = page.next;\n } while (cursor);\n records.reverse();\n return projectDurableEntries(records);\n}\nexport async function promptForAssistantText(\n runtime: DirectHarnessRuntime,\n prompt: string,\n): Promise<string | undefined> {\n const previous = new Set((await runtime.readEntries()).entries.map((e) => e.id));\n await (\n await runtime.submitInternalMessage(prompt)\n ).settled;\n return (\n (await runtime.readEntries()).entries\n .toReversed()\n .filter((e) => !previous.has(e.id))\n .flatMap((e) => (e.type === 'message' && e.message.role === 'assistant' ? [text(e.message).trim()] : []))[0] ||\n undefined\n );\n}\n\nexport async function createDirectHarnessRuntime<TContext extends object | undefined = object | undefined>(\n options: DirectHarnessRuntimeOptions<TContext>,\n): Promise<DirectHarnessRuntime<TContext>> {\n if (options.initialFastMode !== undefined && typeof options.initialFastMode !== 'boolean')\n throw new Error('Initial Fast mode must be a boolean.');\n const context = options.context ?? BACKGROUND_CONTEXT;\n if (options.storage === 'jsonl' || options.legacySessionPath !== undefined)\n throw new Error('Legacy JSONL direct storage is unsupported; use durable-v1 SQLite');\n if (options.session && !options.durableStorage)\n throw new Error('A durable Session injection requires its raw durableStorage');\n const storage = options.durableStorage\n ? {\n storage: options.durableStorage,\n sessionFile: options.sessionPath,\n historyLease: undefined,\n repository: undefined,\n }\n : await openSqliteSessionStorage(options, context);\n let startupHarness: Harness | undefined;\n try {\n const registry = createRegistry();\n const environment = new NodeExecutionEnv({ cwd: options.cwd });\n let disposed = false;\n let quarantined = false;\n let failure: unknown;\n let preparationFailure: unknown;\n const terminatingCalls = new Set<string>();\n let fastMode = false;\n let resources = options.resources ?? {};\n let tools = options.tools ?? [];\n let activeNames = new Set(options.activeToolNames ?? tools.map((t) => t.name));\n let settings: HarnessSettings = {\n stream: options.streamOptions,\n retry: options.retry,\n compaction: options.compaction,\n toolExecution: options.toolExecution,\n steeringMode: options.steeringMode,\n followUpMode: options.followUpMode,\n };\n const listeners = new Set<(frame: DirectHarnessFrame) => void>();\n const eventListeners = new Set<DirectHarnessEventListener>();\n const emit = (frame: DirectHarnessFrame) => {\n for (const listener of listeners) {\n try {\n listener(frame);\n } catch (error) {\n for (const other of listeners) if (other !== listener) other({ type: 'handler_error', error: String(error) });\n }\n }\n };\n const writable = async <T>(work: () => Promise<T>): Promise<T> => {\n if (disposed || quarantined) throw new Error('Direct harness writes are unavailable', { cause: failure });\n try {\n await storage.historyLease?.assertQuiescent();\n return await work();\n } catch (error) {\n const code = typeof error === 'object' && error !== null && 'code' in error ? error.code : undefined;\n if (\n typeof code === 'string' &&\n ['EACCES', 'EBUSY', 'EIO', 'EMFILE', 'ENFILE', 'ENOSPC', 'EPERM', 'EROFS'].includes(code)\n ) {\n quarantined = true;\n failure = error;\n emit({ type: 'error', code: 'storage_quarantined', error: String(error) });\n }\n throw error;\n }\n };\n let sourceModels: Models | MutableModels;\n if (options.models) sourceModels = options.models;\n else {\n if (!options.providers?.length) throw new Error('Direct harness requires Models or a Provider');\n sourceModels = createModels(options.credentials ? { credentials: options.credentials } : undefined);\n }\n for (const provider of options.providers ?? []) {\n const mutable = sourceModels as Partial<MutableModels> & {\n registerNativeProvider?: (provider: Provider) => void;\n };\n const register = mutable.setProvider?.bind(sourceModels) ?? mutable.registerNativeProvider?.bind(sourceModels);\n if (!register) throw new Error('Models registry cannot register providers');\n register(provider);\n }\n const models = new Proxy(sourceModels, {\n get(target, key) {\n const value: unknown = Reflect.get(target, key, target);\n if (typeof value !== 'function') return value;\n if (\n !['stream', 'complete', 'streamSimple', 'completeSimple', 'streamDeferred', 'fetchDeferred'].includes(\n String(key),\n )\n )\n return value.bind(target);\n return (...args: unknown[]) => {\n if (disposed || quarantined || preparationFailure)\n throw new Error('Model dispatch unavailable', { cause: preparationFailure });\n options.guardModelRequest?.();\n const request = args[1] as { tools?: { name: string }[] };\n if (\n !['complete', 'completeSimple'].includes(String(key)) &&\n request?.tools?.some((t) => !activeNames.has(t.name))\n )\n throw new Error('Model request contains disabled tools');\n const requestOptions = args[2] as Record<string, unknown> | undefined;\n const usePriority =\n fastMode &&\n (args[0] as Model<Api>).api === CODEX_API &&\n (args[0] as Model<Api>).provider === CODEX_PROVIDER;\n const originalOnPayload = requestOptions?.onPayload;\n args[2] = {\n ...requestOptions,\n ...(usePriority ? { serviceTier: 'priority' } : {}),\n onPayload: async (payload: unknown, model: Model<Api>) => {\n options.guardModelRequest?.();\n const original =\n typeof originalOnPayload === 'function' ? await originalOnPayload(payload, model) : undefined;\n const transformed = original === undefined ? payload : original;\n const patch = await options.beforePayload?.({ payload: transformed, model }, context);\n const finalPayload = patch === undefined ? transformed : patch.payload;\n if (!usePriority) return finalPayload;\n if (typeof finalPayload !== 'object' || finalPayload === null || Array.isArray(finalPayload))\n throw new Error('Invalid Codex request payload');\n return { ...finalPayload, service_tier: 'priority' };\n },\n };\n const dispatched: unknown = Reflect.apply(value, target, args);\n if (!['stream', 'streamSimple', 'fetchDeferred'].includes(String(key))) return dispatched;\n const source = dispatched as AssistantMessageEventStream;\n const output = createAssistantMessageEventStream();\n const requestedModel = args[0] as Model<Api>;\n const signal = (args[2] as { signal?: AbortSignal }).signal;\n let ended = false;\n let current: AssistantMessage = {\n role: 'assistant',\n content: [],\n api: requestedModel.api,\n provider: requestedModel.provider,\n model: requestedModel.id,\n timestamp: Date.now(),\n stopReason: 'pending',\n usage: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n },\n };\n const cancel = () => {\n if (ended) return;\n ended = true;\n const cancelled = { ...current, stopReason: 'aborted' as const, errorMessage: 'Agent request aborted' };\n output.push({ type: 'error', reason: 'aborted', error: cancelled });\n output.end();\n };\n signal?.addEventListener('abort', cancel, { once: true });\n if (signal?.aborted) cancel();\n void (async () => {\n try {\n for await (const event of source) {\n if (ended) break;\n if ('partial' in event) current = event.partial;\n output.push(event);\n }\n if (!ended) {\n ended = true;\n output.end(await source.result());\n }\n } catch (error) {\n if (!ended) {\n ended = true;\n const failed = { ...current, stopReason: 'error' as const, errorMessage: String(error) };\n output.push({ type: 'error', reason: 'error', error: failed });\n output.end();\n }\n } finally {\n signal?.removeEventListener('abort', cancel);\n }\n })();\n return output;\n };\n },\n }) as Models;\n const resolveToolContext = async (ctx: Context) =>\n typeof options.toolContext === 'function' ? options.toolContext(ctx) : (options.toolContext as TContext);\n const nativeTool = (tool: AgentHarnessTool<TContext>): ToolRegistration => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n constrainedSampling: tool.constrainedSampling,\n prepareArguments: tool.prepareArguments ? (args) => tool.prepareArguments!(args) : undefined,\n replay: tool.replay ?? 'unsafe',\n executionMode: tool.executionMode,\n async execute(args, api, ctx) {\n if (!activeNames.has(tool.name)) throw new Error(`Tool '${tool.name}' is no longer active`);\n const pending = tool.execute(\n api.callId,\n args,\n (partial) => {\n for (const part of partial.content) if (part.type === 'text') api.output(part.text);\n if (partial.details !== undefined)\n void api\n .details(json(partial.details), ctx)\n .catch((error) => emit({ type: 'error', error: String(error) }));\n },\n await resolveToolContext(ctx),\n {\n invocationId: String(api.taskId),\n operationId: String(api.taskId),\n turnId: String(api.taskId),\n getMemo: (name) => api.memo(name, ctx),\n setMemo: async (name, value) => {\n if (value === undefined) throw new Error('Durable invocation memos cannot be deleted');\n await api.memo(name, value, ctx);\n },\n },\n ctx,\n );\n const result = await awaitWithContext(pending, ctx);\n return {\n content: result.content,\n isError: result.isError,\n ...(result.details === undefined ? {} : { details: json(result.details) }),\n };\n },\n });\n const install = () =>\n registry.install({\n name: 'doompi.host',\n tools: tools.map(nativeTool),\n sections: [\n {\n key: 'doompi',\n tag: false,\n async render(_input, ctx) {\n preparationFailure = undefined;\n try {\n const prompt =\n typeof options.systemPrompt === 'function'\n ? await options.systemPrompt(await resolveToolContext(ctx), ctx)\n : (options.systemPrompt ?? '');\n const skills =\n options.systemPrompt === undefined ? formatSkillsForSystemPrompt(resources.skills ?? []) : '';\n return [prompt, skills].filter(Boolean).join('\\n\\n');\n } catch (error) {\n preparationFailure = error;\n throw error;\n }\n },\n },\n ],\n hooks: [\n hook(GenerationTask, {\n async beforeRequest(request, api, ctx) {\n try {\n const live = await api.snapshot(LiveDoc, api.conversationId, ctx);\n const retained = await api.snapshot(LifecycleDoc, ctx);\n const queue = JSON.parse(retained?.json ?? '{\"queue\":[]}') as LifecycleRecord;\n if (\n live?.run &&\n queue.queue.some(\n (item) =>\n item.operationId !== undefined &&\n item.submissionId !== undefined &&\n live.run!.inputs.includes(item.submissionId as SubmissionId) &&\n item.operationId !== String(live.run!.inputs[0]),\n )\n )\n throw new Error('Steering target changed before model admission');\n const agent = await conversation.agent(ctx);\n const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n await options.beforeModelRequest?.(\n { phase: 'turn', model, prompt: [...request.messages], resources },\n ctx,\n );\n const systemPrompt = getCurrentSystemPrompt(request.messages);\n const contextContributions = new Map<string, AgentMessage[]>();\n if (options.transformContext) {\n const view = await conversation.context(ctx);\n const customByEntry = new Map<number, AgentMessage>();\n for (const raw of view.entries) {\n const entry = projectDurableEntries([raw])[0];\n if (entry?.type !== 'message' || entry.message.role !== 'custom') continue;\n const data =\n raw.data && typeof raw.data === 'object' && !Array.isArray(raw.data) ? raw.data : undefined;\n const receipt =\n typeof data?.inputRequestId === 'string'\n ? await storage.storage.submissionByRequest(conversation.id, data.inputRequestId, ctx)\n : undefined;\n const fallback =\n receipt?.status === 'unanswered' &&\n !('entry' in receipt && receipt.entry !== undefined) &&\n typeof data?.inputRequestId === 'string'\n ? await storage.storage.submissionByRequest(\n conversation.id,\n `${data.inputRequestId}:context`,\n ctx,\n )\n : undefined;\n const placed = fallback ?? receipt;\n const placedEntry =\n placed && 'entry' in placed && placed.entry !== undefined\n ? view.entries.find((candidate) => candidate.id === placed.entry)\n : undefined;\n const target = placedEntry?.edits?.some((edit) => edit.target === raw.id)\n ? raw.id\n : (placedEntry?.id ?? raw.id);\n const contributions =\n view.contributions[view.entries.findIndex((candidate) => candidate.id === target)];\n const original = placedEntry?.edits?.find(\n (edit) => edit.target === raw.id && edit.action === 'replace',\n );\n const model =\n original?.messages ?? view.entries.find((candidate) => candidate.id === target)?.model;\n if (\n model?.length === 1 &&\n contributions?.length === 1 &&\n JSON.stringify(model[0]) === JSON.stringify(contributions[0])\n )\n customByEntry.set(target, entry.message);\n }\n for (const [index, raw] of view.entries.entries()) {\n const custom = customByEntry.get(raw.id);\n for (const native of view.contributions[index] ?? []) {\n const key = JSON.stringify(native);\n const message = custom && view.contributions[index]?.length === 1 ? custom : native;\n const contributions = contextContributions.get(key) ?? [];\n contributions.push(message);\n contextContributions.set(key, contributions);\n }\n }\n }\n // Restore metadata only for unchanged native contributions, preserving context edits and ordering.\n const contextMessages = request.messages\n .filter((m) => m.role !== 'system')\n .map((message) => contextContributions.get(JSON.stringify(message))?.shift() ?? message);\n const patch = await options.transformContext?.({ messages: contextMessages, systemPrompt }, ctx);\n let messages: Message[] = patch\n ? [\n {\n role: 'system',\n content: patch.systemPrompt ?? systemPrompt,\n timestamp: Date.now(),\n toolsAdded: getCurrentTools(request.messages),\n },\n ...convertToLlm(patch.messages ?? request.messages.filter((m) => m.role !== 'system')),\n ]\n : [...request.messages];\n if (options.toProviderMessages) messages = await options.toProviderMessages(messages, ctx);\n await options.beforeModelRequest?.({ phase: 'request', model, resources }, ctx);\n return { messages };\n } catch (error) {\n preparationFailure = error;\n throw error;\n }\n },\n }),\n hook(ToolTask, {\n async beforeTool(call, _api, ctx) {\n const patch = await options.beforeTool?.(\n { toolCallId: call.id, toolName: call.name, args: call.arguments as Record<string, JsonValue> },\n ctx,\n );\n if (patch?.block?.terminate) terminatingCalls.add(call.id);\n return patch ? { arguments: patch.args, block: patch.block?.reason } : undefined;\n },\n async afterTool(call, result, _api, ctx) {\n const patch = await options.afterTool?.(\n {\n toolCallId: call.id,\n toolName: call.name,\n args: call.arguments as Record<string, JsonValue>,\n content: result.content ?? [],\n details: result.details,\n isError: result.isError ?? false,\n usage: result.usage,\n },\n ctx,\n );\n return patch\n ? {\n ...result,\n ...patch,\n control:\n patch.terminate || terminatingCalls.delete(call.id)\n ? { ...result.control, terminate: true }\n : result.control,\n }\n : terminatingCalls.delete(call.id)\n ? { ...result, control: { ...result.control, terminate: true } }\n : undefined;\n },\n }),\n hook(CompactionTask, {\n async beforeCompact(input, _api, ctx) {\n if (!options.beforeCompaction) return;\n const entries = projectDurableEntries(input.entries);\n const patch = await options.beforeCompaction(\n {\n reason: input.reason,\n customInstructions: input.instructions,\n preparation: {\n entries,\n messages: [...input.messages],\n tokensBefore: 0,\n retainedTail: [],\n firstKeptEntryId: String(input.firstKept),\n messagesToSummarize: [...input.messages],\n turnPrefixMessages: [],\n isSplitTurn: false,\n fileOps: { read: new Set(), written: new Set(), edited: new Set() },\n settings: {\n enabled: options.compaction?.enabled ?? true,\n reserveTokens: options.compaction?.reserveTokens ?? 16384,\n keepRecentTokens: options.compaction?.keepRecentTokens ?? 20000,\n },\n },\n },\n ctx,\n );\n if (patch?.decline) return { decline: true };\n if (patch?.compaction) return { summary: patch.compaction.summary };\n return undefined;\n },\n }),\n ],\n });\n install();\n const harness = await Harness.open(\n storage.storage,\n {\n models,\n registry,\n get settings() {\n return settings;\n },\n env: () => environment,\n onReport: (error) => emit({ type: 'handler_error', error: String(error) }),\n },\n context,\n );\n startupHarness = harness;\n const root = await harness.root(context, {\n agent: {\n cwd: options.cwd,\n ...((options.model ?? models.getModels()[0])\n ? {\n model: {\n provider: (options.model ?? models.getModels()[0]!).provider,\n modelId: (options.model ?? models.getModels()[0]!).id,\n },\n }\n : {}),\n ...(options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n },\n });\n const activeId = await initializeDurableNavigation(harness, root.id, context);\n let conversation = (await harness.conversation(activeId, context))!;\n const storedAgent = await harness.snapshot(AgentDoc, conversation.id, context);\n const initialModel = options.model ?? models.getModels()[0];\n await conversation.configure(\n {\n ...(!storedAgent?.model && initialModel\n ? { model: { provider: initialModel.provider, modelId: initialModel.id } }\n : {}),\n ...(!storedAgent?.thinkingLevel && options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n },\n context,\n );\n const storedFastMode = await harness.snapshot(FastModeDoc, context);\n fastMode = storedFastMode?.enabled ?? options.initialFastMode ?? false;\n const storedIdentity = await harness.snapshot(SessionIdentityDoc, context);\n const sessionId = storedIdentity?.id || options.sessionId || randomUUID();\n await writable(() =>\n harness.commit(async (tx) => {\n const identity = await tx.doc(SessionIdentityDoc);\n if (!identity.id) {\n identity.id = sessionId;\n identity.createdAt = Date.now();\n identity.parentSessionId = options.parentSessionId ?? '';\n }\n if (!storedFastMode) {\n (await tx.doc(FastModeDoc)).enabled = fastMode;\n if (options.initialFastMode !== undefined)\n await tx.appendEntry(conversation.id, {\n kind: 'doompi.fast-mode',\n data: { version: 1, enabled: fastMode, sessionId },\n });\n }\n const metadata = await tx.doc(SessionMetadataDoc);\n metadata.workspaceRoot ||= options.cwd;\n if (options.lane !== undefined) metadata.laneName = options.lane;\n if (!storedIdentity?.id && options.sessionName !== undefined) metadata.name = options.sessionName;\n }, context),\n );\n const laneName = options.lane ?? 'main';\n let resolveExited!: (code: number) => void;\n const exited = new Promise<number>((resolve) => {\n resolveExited = resolve;\n });\n const readRecord = async (): Promise<LifecycleRecord> =>\n JSON.parse(\n (await harness.snapshot(LifecycleDoc, context))?.json ?? '{\"revision\":0,\"paused\":false,\"queue\":[]}',\n ) as LifecycleRecord;\n const changeRecord = async <T>(change: (record: LifecycleRecord) => T): Promise<T> =>\n writable(() =>\n harness.commit(async (tx) => {\n const doc = await tx.doc(LifecycleDoc);\n const record = JSON.parse(doc.json) as LifecycleRecord;\n const result = change(record);\n record.revision++;\n doc.json = JSON.stringify(record);\n return result;\n }, context),\n );\n let userAdmission = false;\n let userAdmissionSettled: Promise<void> = Promise.resolve();\n let releaseUserAdmission: (() => void) | undefined;\n const guardUserAdmission = () => {\n if (userAdmission) throw new Error('A user interruption is already being admitted');\n };\n let external: string | undefined;\n let externalAbort: AbortController | undefined;\n const execution = async () => {\n const live = await harness.snapshot(LiveDoc, conversation.id, context);\n const inspected = await harness.inspect(context);\n const task = inspected.tasks.find((t) => t.record.conversationId === conversation.id && !t.record.background);\n return live?.run\n ? {\n id: String(live.run.inputs[0]),\n kind: 'run' as const,\n status:\n (await readRecord()).abortOperationId === String(live.run.inputs[0])\n ? ('aborting' as const)\n : ('open' as const),\n }\n : task\n ? {\n id: String(task.record.id),\n kind: 'compaction' as const,\n status: task.record.abortRequested ? ('aborting' as const) : ('open' as const),\n }\n : external\n ? { id: external, kind: 'navigation' as const, status: 'open' as const }\n : settling\n ? { id: 'settling', kind: 'run' as const, status: 'open' as const }\n : null;\n };\n const readLifecycle = async (): Promise<DirectHarnessLifecycle> => {\n const record = await readRecord();\n return {\n revision: record.revision,\n paused: record.paused,\n queue: record.queue\n .filter(\n (item): item is Retained & { disposition: DirectHarnessQueuedInput['disposition'] } =>\n item.explicitQueue === true && item.disposition !== 'consumed' && item.disposition !== 'removed',\n )\n .map(\n ({\n explicitQueue: _q,\n submissionId: _s,\n conversationId: _c,\n message: _m,\n operationId: _o,\n attempt: _a,\n ...item\n }) => item,\n ),\n operation: await execution(),\n };\n };\n const publish = async () => emit({ type: 'lifecycle_update', lifecycle: await readLifecycle() });\n let watcher: AgentEventStream;\n let eventsSettled = Promise.resolve();\n let settling = 0;\n const admittingInternal = new Set<string>();\n const reconcilingInternal = new Map<string, Promise<void>>();\n const internalDelivery = new Map<SubmissionId, { done: Promise<void>; resolve: () => void }>();\n const deliveredInputs = new Set<SubmissionId>();\n const nextTurnMessages: AgentMessage[] = [];\n let deferredInternalCount = 0;\n const flushNextTurn = async () => {\n const staged = nextTurnMessages.splice(0);\n for (let index = 0; index < staged.length; index++) {\n const message = staged[index]!;\n try {\n await writable(() =>\n conversation.submit(\n {\n type: 'write',\n requestId: randomUUID(),\n entry: {\n kind: 'doompi.entry',\n data: json({ type: 'message', message }),\n model: convertToLlm([message]),\n },\n },\n context,\n ),\n );\n } catch (error) {\n nextTurnMessages.unshift(...staged.slice(index));\n throw error;\n }\n }\n };\n let logicalLoopActive = false;\n let lastAssistant: AssistantMessage | undefined;\n let partial: AssistantMessage | undefined;\n let toolResults: ToolResultMessage[] = [];\n const deliver = async (event: HarnessEvent, eventContext: Context) => {\n for (const listener of eventListeners)\n try {\n await listener(event, eventContext);\n } catch (error) {\n emit({ type: 'handler_error', error: String(error) });\n }\n };\n const attach = async () => {\n if (watcher) await watcher.stop();\n watcher = await watchEvents(harness, conversation.id, context);\n let predecessor = watcher.snapshot.entries.at(-1)?.id;\n const customSources = new Map<string, AgentMessage>();\n const generatedSources = new Map<EntryId, AgentMessage | undefined>();\n const rememberCustom = (raw: EntryRecord) => {\n const projected = projectDurableEntries([raw])[0];\n const data = raw.data && typeof raw.data === 'object' && !Array.isArray(raw.data) ? raw.data : undefined;\n if (\n projected?.type === 'message' &&\n projected.message.role === 'custom' &&\n typeof data?.inputRequestId === 'string'\n )\n customSources.set(data.inputRequestId, projected.message);\n };\n for (const raw of watcher.snapshot.entries) rememberCustom(raw);\n for (const requestId of customSources.keys()) {\n const receipt = await storage.storage.submissionByRequest(conversation.id, requestId, context);\n if (receipt && receipt.status !== 'queued') customSources.delete(requestId);\n }\n const generatedEntrySource = async (raw: EntryRecord, ctx: Context) => {\n if (generatedSources.has(raw.id)) return generatedSources.get(raw.id);\n let source: AgentMessage | undefined;\n if (raw.model?.[0]?.role === 'user')\n for (const [requestId, custom] of customSources) {\n const receipt = await storage.storage.submissionByRequest(conversation.id, requestId, ctx);\n if (receipt && 'entry' in receipt && receipt.entry === raw.id) {\n source = custom;\n customSources.delete(requestId);\n break;\n }\n }\n generatedSources.set(raw.id, source);\n while (generatedSources.size > 128) generatedSources.delete(generatedSources.keys().next().value!);\n return source;\n };\n lastAssistant = undefined;\n partial = undefined;\n toolResults = [];\n watcher.start(async (events, eventContext) => {\n for (const event of events) {\n let mapped: HarnessEvent | undefined;\n if (event.type === 'turn_start' || event.type === 'run_start') {\n lastAssistant = undefined;\n partial = undefined;\n toolResults = [];\n }\n if (event.type === 'message_end' || event.type === 'entry_appended') {\n rememberCustom(event.entry);\n const entry = projectDurableEntries([event.entry])[0];\n await generatedEntrySource(event.entry, eventContext);\n if (entry) {\n entry.parentId = predecessor === undefined ? null : String(predecessor);\n const added: HarnessEvent = { type: 'entry_added', entry };\n emit({ type: 'entry_appended', entry });\n eventsSettled = eventsSettled.then(() => deliver(added, eventContext));\n }\n predecessor = event.entry.id;\n }\n if (['run_start', 'run_end', 'turn_start', 'compaction_start'].includes(event.type))\n mapped = { type: event.type } as HarnessEvent;\n if (event.type === 'message_start') {\n if (event.message.role === 'assistant') partial = structuredClone(event.message);\n mapped = { type: 'message_start', message: event.message };\n }\n if (event.type === 'message_end' && event.entry.model?.[0]) {\n const projected = projectDurableEntries([event.entry])[0];\n if (projected?.type === 'custom' && projected.customType === 'doompi.internal-context') continue;\n const message =\n (await generatedEntrySource(event.entry, eventContext)) ??\n (projected?.type === 'message' && projected.message.role === 'custom'\n ? projected.message\n : event.entry.model[0]);\n if (message.role === 'assistant') lastAssistant = message;\n if (message.role === 'toolResult') toolResults.push(message);\n mapped = { type: 'message_end', message, entryId: String(event.entry.id), runId: String(conversation.id) };\n }\n\n if (event.type === 'tool_execution_start') mapped = { ...event, type: 'tool_start' };\n if (event.type === 'tool_execution_end') {\n const result = event.entry?.model?.find((m) => m.role === 'toolResult');\n mapped = {\n type: 'tool_end',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: {\n content: result?.content ?? [],\n details: result?.details === undefined ? undefined : json(result.details),\n },\n isError: result?.isError ?? true,\n };\n }\n if (event.type === 'turn_end' && lastAssistant) {\n mapped = { type: 'turn_end', message: lastAssistant, toolResults };\n toolResults = [];\n lastAssistant = undefined;\n partial = undefined;\n }\n if (event.type === 'message_update' && partial) {\n for (const change of event.changes) {\n if (change.type === 'message') {\n partial = structuredClone(change.message);\n } else if ('block' in change) {\n partial.content[change.contentIndex] = structuredClone(change.block);\n }\n const block = 'contentIndex' in change ? partial.content[change.contentIndex] : undefined;\n if (change.type === 'text_delta' && block?.type === 'text') block.text += change.delta;\n if (change.type === 'thinking_delta' && block?.type === 'thinking') block.thinking += change.delta;\n {\n const update: HarnessEvent = {\n type: 'message_update',\n message: structuredClone(partial),\n event:\n 'delta' in change\n ? {\n type: change.type,\n contentIndex: change.contentIndex,\n delta: change.delta,\n partial: structuredClone(partial),\n }\n : { type: 'start', partial: structuredClone(partial) },\n };\n emit({ ...update, assistantMessageEvent: update.event });\n eventsSettled = eventsSettled.then(() => deliver(update, eventContext));\n }\n }\n }\n if (event.type === 'tool_execution_update')\n mapped = {\n type: 'tool_update',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n partialResult: {\n content: [\n {\n type: 'text',\n text: event.output ? ('set' in event.output ? event.output.set : (event.output.append ?? '')) : '',\n },\n ],\n details: event.details,\n },\n };\n if (event.type === 'compaction_end') {\n const receipt = await harness.waitForTask(event.taskId as TaskId<CompactionResult>, eventContext);\n const outcome = receipt.state.outcome;\n const result = outcome.status === 'completed' ? outcome.result : undefined;\n const summary = result?.submissionId\n ? await harness.submission(result.submissionId, eventContext)\n : undefined;\n const status = await summary?.status(eventContext);\n const entryId = result?.entryId ?? (status && 'entry' in status ? status.entry : undefined);\n mapped = {\n type: 'compaction_end',\n status:\n outcome.status === 'completed'\n ? result?.entryId !== undefined || result?.submissionId !== undefined\n ? 'completed'\n : 'aborted'\n : outcome.status === 'aborted'\n ? 'aborted'\n : 'failed',\n reason: event.reason,\n entryId: entryId === undefined ? undefined : String(entryId),\n error:\n outcome.status !== 'completed' && outcome.status !== 'aborted'\n ? new Error(\n 'error' in outcome ? (outcome.error?.message ?? 'Compaction failed') : 'Compaction failed',\n )\n : undefined,\n };\n }\n if (event.type === 'inbox_update')\n mapped = { type: 'queue_update', queues: event.items.map((item) => ({ kind: item.mode })) };\n if (event.type === 'message_end') {\n for (const message of event.entry.model ?? [])\n if (message.role === 'assistant')\n eventsSettled = eventsSettled.then(() =>\n deliver({ type: 'usage', row: { id: String(event.entry.id), usage: message.usage } }, eventContext),\n );\n }\n if (!mapped) continue;\n const publishMapped = (event: HarnessEvent) =>\n emit({\n ...event,\n type:\n event.type === 'tool_start'\n ? 'tool_execution_start'\n : event.type === 'tool_update'\n ? 'tool_execution_update'\n : event.type === 'tool_end'\n ? 'tool_execution_end'\n : event.type === 'entry_added'\n ? 'entry_appended'\n : event.type,\n });\n if (mapped.type === 'run_end') {\n const settledEvent = {\n runId: String(event.type === 'run_end' ? event.inputs[0] : conversation.id),\n timestamp: Date.now(),\n };\n settling++;\n let released = false;\n const release = () => {\n if (!released) {\n settling--;\n released = true;\n }\n };\n eventsSettled = eventsSettled\n .then(async () => {\n await reconcile();\n try {\n await writable(() =>\n harness.commit(\n (tx) =>\n tx.appendEntry(conversation.id, {\n kind: AGENT_SETTLED_ENTRY_TYPE,\n data: settledEvent,\n }),\n eventContext,\n ),\n );\n } catch (error) {\n emit({ type: 'error', code: 'agent_settled', error: String(error) });\n }\n const live = await harness.snapshot(LiveDoc, conversation.id, eventContext);\n const successorActive = !!live?.run && String(live.run.inputs[0]) !== settledEvent.runId;\n mapped = { type: 'run_end', runId: settledEvent.runId, successorActive };\n publishMapped(mapped);\n await deliver(mapped, eventContext);\n release();\n // A settlement hook can admit work after the initial successor check.\n const lifecycle = await readLifecycle();\n emit({ type: 'lifecycle_update', lifecycle });\n if (!lifecycle.operation) {\n logicalLoopActive = false;\n emit({ type: 'agent_end', runId: settledEvent.runId });\n emit({ type: 'agent_settled', ...settledEvent });\n }\n })\n .catch((error) => emit({ type: 'error', code: 'settled_event', error: String(error) }))\n .finally(async () => {\n release();\n if (event.type === 'run_end')\n for (const id of event.inputs) {\n deliveredInputs.add(id);\n internalDelivery.get(id)?.resolve();\n }\n while (deliveredInputs.size > 128) deliveredInputs.delete(deliveredInputs.values().next().value!);\n try {\n await publish();\n } catch (error) {\n emit({ type: 'error', code: 'lifecycle_update', error: String(error) });\n }\n // Do not await drain here: drain waits for this settlement chain.\n void drain().catch((error) => emit({ type: 'error', code: 'drain', error: String(error) }));\n });\n } else {\n // Protocol publication must not wait for extension hooks on earlier events.\n publishMapped(mapped);\n if (mapped.type === 'run_start') {\n if (!logicalLoopActive) emit({ type: 'agent_start' });\n logicalLoopActive = true;\n void publish().catch((error) => emit({ type: 'error', code: 'lifecycle_update', error: String(error) }));\n }\n const delivered = mapped;\n eventsSettled = eventsSettled.then(() => deliver(delivered, eventContext));\n }\n }\n });\n };\n await attach();\n const reconcileInternal = (requestId: string, item: InternalDeliveryRecord): Promise<void> => {\n const existing = reconcilingInternal.get(requestId);\n if (existing) return existing;\n const work = (async () => {\n if (admittingInternal.has(requestId)) return;\n const target =\n item.conversationId === conversation.id\n ? conversation\n : await harness.conversation(item.conversationId as typeof conversation.id, context);\n if (!target) throw new Error('Internal delivery conversation is unavailable');\n let receipt = await storage.storage.submissionByRequest(target.id, requestId, context);\n // A failed native run can strand queued inputs. Never withdraw from a surviving run.\n if (receipt?.status === 'queued' && !(await harness.snapshot(LiveDoc, target.id, context))?.run) {\n await harness.abortSubmission(receipt.id, context);\n receipt = await storage.storage.submissionByRequest(target.id, requestId, context);\n }\n if (receipt?.status === 'queued') return;\n if (!receipt || (receipt.status === 'unanswered' && receipt.entry === undefined)) {\n if ((await harness.snapshot(LiveDoc, target.id, context))?.run) return;\n let envelope =\n item.message.role === 'custom'\n ? await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context)\n : undefined;\n if (item.message.role === 'custom' && !envelope) {\n await (\n await writable(() =>\n target.submit(\n {\n type: 'write',\n requestId: `${requestId}:message`,\n entry: {\n kind: 'doompi.entry',\n data: json({\n type: 'message',\n message: item.message,\n timestamp: item.message.timestamp,\n inputRequestId: requestId,\n }),\n },\n },\n context,\n ),\n )\n ).wait(context);\n envelope = await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context);\n }\n if (envelope?.status === 'queued') {\n // An idle passive write places surviving queued envelope writes, without admitting input.\n await (\n await writable(() =>\n target.submit(\n {\n type: 'write',\n requestId: `${requestId}:message-placement`,\n entry: { kind: 'doompi.internal-delivery' },\n },\n context,\n ),\n )\n ).wait(context);\n envelope = await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context);\n }\n const envelopeId = envelope && 'entry' in envelope ? envelope.entry : undefined;\n const draft: Parameters<Conversation['submit']>[0] = {\n type: 'write',\n requestId: `${requestId}:context`,\n entry: {\n kind: 'doompi.entry',\n data: json(\n item.message.role === 'custom'\n ? { type: 'custom', customType: 'doompi.internal-context', data: { inputRequestId: requestId } }\n : { type: 'message', message: item.message },\n ),\n ...(envelopeId === undefined\n ? { model: convertToLlm([item.message]) }\n : {\n edits: [{ target: envelopeId, action: 'replace' as const, messages: convertToLlm([item.message]) }],\n }),\n },\n };\n let fallback;\n try {\n fallback = await writable(() => target.submit(draft, context));\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(target.id, `${requestId}:context`, context);\n fallback = accepted && (await harness.submission(accepted.id, context));\n if (!fallback) throw error;\n }\n if ((await fallback.wait(context)).status !== 'done') throw new Error('Internal context write failed');\n }\n await changeRecord((r) => {\n delete r.internalDeliveries?.[requestId];\n });\n })().finally(() => {\n reconcilingInternal.delete(requestId);\n });\n reconcilingInternal.set(requestId, work);\n return work;\n };\n const reconcile = async () => {\n const record = await readRecord();\n // Withdraw all stranded internal inputs before any passive write can flush an idle native inbox.\n for (const [requestId, item] of Object.entries(record.internalDeliveries ?? {})) {\n if (admittingInternal.has(requestId)) continue;\n if ((await harness.snapshot(LiveDoc, item.conversationId as typeof conversation.id, context))?.run) continue;\n const receipt = await storage.storage.submissionByRequest(\n item.conversationId as typeof conversation.id,\n requestId,\n context,\n );\n if (receipt?.status === 'queued') await harness.abortSubmission(receipt.id, context);\n }\n for (const [requestId, item] of Object.entries(record.internalDeliveries ?? {}))\n await reconcileInternal(requestId, item);\n for (const item of record.queue) {\n if (item.disposition !== 'handoff' && item.disposition !== 'uncertain') continue;\n const submission = item.submissionId\n ? await harness.submission(item.submissionId as SubmissionId, context)\n : undefined;\n const status = await submission?.status(context);\n if (status?.status === 'done' || status?.status === 'placed' || status?.status === 'unanswered')\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (!q) return;\n if (status.status === 'unanswered' && status.entry === undefined && r.paused) {\n q.disposition = 'pending';\n q.attempt = (q.attempt ?? 0) + 1;\n delete q.submissionId;\n } else {\n q.disposition = 'consumed';\n q.text = '';\n delete q.message;\n delete q.images;\n }\n const receipts = r.queue.filter((q) => q.disposition === 'consumed' || q.disposition === 'removed');\n if (receipts.length > 128) {\n const expired = new Set(receipts.slice(0, receipts.length - 128).map((q) => q.id));\n r.queue = r.queue.filter((q) => !expired.has(q.id));\n }\n });\n else if (!status && !handingOff.has(item.id) && !userClaims.has(item.id))\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (q) q.disposition = 'uncertain';\n });\n }\n };\n const handingOff = new Set<string>();\n const userClaims = new Set<string>();\n let drainPromise: Promise<void> | undefined;\n let drainRequested = false;\n const drain = (): Promise<void> => {\n if (drainPromise) {\n drainRequested = true;\n return drainPromise;\n }\n return (drainPromise ??= (async () => {\n await reconcile();\n while (!disposed) {\n const record = await readRecord();\n if (userAdmission || record.paused || (await execution())) break;\n const item = record.queue.find((q) => q.disposition === 'pending');\n if (!item) break;\n const submission = await handoff(item, 'reject');\n if (!submission) continue;\n await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n }\n })().finally(() => {\n drainPromise = undefined;\n if (drainRequested) {\n drainRequested = false;\n void drain().catch((error) => emit({ type: 'error', code: 'drain', error: String(error) }));\n }\n }));\n };\n const handoff = async (\n item: Retained,\n mode: NonNullable<Retained['submissionMode']>,\n recovering = false,\n allowPaused = false,\n ) => {\n if (handingOff.has(item.id)) return undefined;\n handingOff.add(item.id);\n try {\n const claimed = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (!q || (r.paused && !recovering && !allowPaused)) return undefined;\n if (recovering ? q.disposition !== 'handoff' || q.submissionId !== undefined : q.disposition !== 'pending')\n return undefined;\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = mode;\n if (item.operationId !== undefined) {\n q.delivery = item.delivery;\n q.operationId = item.operationId;\n }\n return q;\n });\n if (!claimed) return undefined;\n const content = input(claimed.message ?? claimed.text, claimed.images);\n const requestId = `${claimed.id}:${claimed.attempt ?? 0}`;\n const submit = () =>\n writable(() =>\n conversation.submit(\n mode === 'write'\n ? {\n type: 'write',\n requestId,\n entry: { kind: 'doompi.message', model: [{ role: 'user', content, timestamp: Date.now() }] },\n }\n : { type: 'input', content, whenBusy: mode, requestId },\n context,\n ),\n );\n let submission;\n try {\n submission = await submit();\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(conversation.id, requestId, context);\n if (!accepted) throw error;\n submission = await harness.submission(accepted.id, context);\n if (!submission) throw error;\n }\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (q) q.submissionId = submission.id;\n });\n await reconcile();\n await publish();\n return submission;\n } finally {\n handingOff.delete(item.id);\n }\n };\n const input = (message: string | AgentMessage, images?: ImageContent[]) => {\n if (typeof message !== 'string') {\n if (message.role !== 'user') throw new Error('Only user messages can admit an agent run');\n return message.content;\n }\n return images?.length ? [{ type: 'text' as const, text: message }, ...images] : message;\n };\n const enqueue = async (\n message: string | AgentMessage,\n images: ImageContent[] | undefined,\n delivery: Retained['delivery'],\n scheduling: Retained['scheduling'],\n explicitQueue = false,\n ) => {\n const id = randomUUID();\n await changeRecord((r) => {\n r.queue.push({\n id,\n text: text(message),\n ...(images ? { images } : {}),\n ...(typeof message === 'string' ? {} : { message }),\n delivery,\n scheduling,\n explicitQueue,\n disposition: 'pending',\n });\n });\n await publish();\n return { id };\n };\n const queued = async (\n message: string | AgentMessage,\n images: ImageContent[] | undefined,\n delivery: 'followUp' | 'nextRun',\n ) => {\n guardUserAdmission();\n await enqueue(message, images, delivery, 'automatic');\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n };\n const dispatchCommand = async (value: string) => options.dispatchCommand?.(value) ?? false;\n const admit = async (message: string | AgentMessage, images?: ImageContent[], mode?: 'steer' | 'followUp') => {\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n if (typeof message === 'string' && (await dispatchCommand(message)))\n return { settled: Promise.resolve(), handledCommand: true };\n const record = await readRecord();\n await flushNextTurn();\n const { id } = await enqueue(message, images, mode ?? 'nextRun', 'automatic');\n const submission = await handoff(\n (await readRecord()).queue.find((q) => q.id === id)!,\n mode ?? 'reject',\n false,\n record.paused,\n );\n if (!submission) return { settled: Promise.resolve() };\n let resolveDelivery!: () => void;\n const delivered = new Promise<void>((resolve) => {\n resolveDelivery = resolve;\n });\n internalDelivery.set(submission.id, { done: delivered, resolve: resolveDelivery });\n if (deliveredInputs.has(submission.id)) resolveDelivery();\n const settled = (async () => {\n try {\n const status = await submission.wait(context);\n // A durable receipt can finish before the watcher has queued run_end.\n // Wait for this input's settlement hooks, not the current event tail.\n if (status.status === 'done' || status.entry !== undefined) await delivered;\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await drain();\n } finally {\n internalDelivery.delete(submission.id);\n }\n })();\n void settled.catch((error) => emit({ type: 'error', error: String(error) }));\n return { settled };\n };\n const abort = async (operationId?: string) => {\n const current = await execution();\n if (!current || current.id === 'settling' || (operationId && current.id !== operationId)) return;\n if (current.id === external) {\n externalAbort?.abort();\n return;\n }\n const live = await harness.snapshot(LiveDoc, conversation.id, context);\n const taskId = live?.run?.taskId ?? nativeId(current.id);\n await changeRecord((r) => {\n r.paused = true;\n r.abortOperationId = current.id;\n r.abortTaskId = taskId;\n });\n await publish();\n await writable(async () => {\n if (current.kind === 'run') await conversation.abort(context);\n else await harness.abortTask(taskId, context);\n });\n await reconcile();\n };\n const interrupt = async () => {\n await abort();\n await writable(() => conversation.abort(context));\n await eventsSettled;\n };\n // Host-owned admission uses only public Tx operations. Target validation and both\n // lifecycle/native ownership move on the same Session mutation line.\n const admitSelected = async (selection: { id: string; operationId?: string }, replay = false) =>\n writable(() =>\n harness.commit(async (tx: Tx) => {\n const doc = await tx.doc(LifecycleDoc);\n const record = JSON.parse(doc.json) as LifecycleRecord;\n const q = record.queue.find((q) => q.id === selection.id);\n if (!q || q.explicitQueue !== true) return 'not_found' as const;\n const requestId = `${q.id}:${q.attempt ?? 0}`;\n // An accepted request survives completion/replacement and a lost acknowledgement.\n const accepted = await tx.submissionByRequest(conversation.id, requestId);\n if (accepted && accepted.type !== 'input')\n throw new Error(`Request ${requestId} already identifies a submission of type ${accepted.type}`);\n if (accepted && replay) return accepted.id;\n if (q.disposition === 'removed' || q.disposition === 'consumed') return 'not_found' as const;\n if (accepted || q.disposition !== 'pending') return 'in_flight' as const;\n const live = await tx.doc(LiveDoc, conversation.id);\n const task = live.run ? await tx.task(live.run.taskId) : undefined;\n if (\n (live.run ? String(live.run.inputs[0]) : undefined) !== selection.operationId ||\n task?.abortRequested ||\n (live.run && record.abortOperationId === selection.operationId)\n )\n return 'target_changed' as const;\n if (!live.run) {\n let page = await tx.scanTasks(\n { conversationId: conversation.id, kind: CompactionTask.definition.name, background: false },\n 128,\n );\n while (true) {\n if (page.items.some((task) => task.state.status !== 'terminal')) return 'target_changed' as const;\n if (!page.next) break;\n page = await tx.scanTasks(\n { conversationId: conversation.id, kind: CompactionTask.definition.name, background: false },\n 128,\n page.next,\n );\n }\n }\n const content = input(q.message ?? q.text, q.images);\n const inbox = await tx.doc(InboxDoc, conversation.id);\n // Native final boundaries read the active head before any table writes.\n let head = live.run ? undefined : (await tx.latestHeadMarker(conversation.id))?.head;\n const now = Date.now();\n let id: SubmissionId;\n if (!live.run && inbox.items.length === 0) {\n const entry = await tx.appendEntry(UserEntry, conversation.id, {\n model: [{ role: 'user', content, timestamp: now }],\n });\n id = (\n await tx.createSubmission({\n conversationId: conversation.id,\n requestId,\n type: 'input',\n status: 'placed',\n entry: entry.id,\n })\n ).id;\n live.run = {\n taskId: await tx.createTask(\n GenerationTask,\n {},\n { ownership: { kind: 'conversation' }, conversationId: conversation.id },\n ),\n inputs: [id],\n };\n } else {\n id = (\n await tx.createSubmission({ conversationId: conversation.id, requestId, type: 'input', status: 'queued' })\n ).id;\n inbox.items.push({ id, mode: 'steer', content: json(content) as typeof content });\n if (!live.run) {\n // Preserve native write-first placement, stale heads, queue modes and\n // positional input order rather than restarting just the selected input.\n const writes = inbox.items.flatMap((item, index) => (item.mode === 'write' ? [index] : []));\n const pick = (mode: 'steer' | 'followUp') => {\n const indexes = inbox.items.flatMap((item, index) => (item.mode === mode ? [index] : []));\n const queueMode = mode === 'steer' ? settings.steeringMode : settings.followUpMode;\n return queueMode === 'all' ? indexes : indexes.slice(0, 1);\n };\n const users = [...pick('steer'), ...pick('followUp')].sort((a, b) => a - b);\n for (const index of writes) {\n const item = inbox.items[index]!;\n if (item.mode !== 'write') continue;\n // Public InboxDoc represents native write drafts as JsonObject.\n const draft = item.entry as unknown as Extract<\n Parameters<Conversation['submit']>[0],\n { type: 'write' }\n >['entry'];\n if (typeof draft.head === 'number' && head !== undefined && draft.head < head) {\n tx.settleSubmission(item.id, { status: 'unanswered', reason: 'stale' });\n continue;\n }\n const entry = await tx.appendEntry(conversation.id, draft);\n if (draft.head !== undefined) head = draft.head === 'self' ? entry.id : draft.head;\n tx.placeSubmission(item.id, entry.id);\n }\n const inputs: SubmissionId[] = [];\n for (const index of users) {\n const item = inbox.items[index]!;\n if (item.mode === 'write') continue;\n const entry = await tx.appendEntry(UserEntry, conversation.id, {\n model: [{ role: 'user', content: item.content, timestamp: now }],\n });\n tx.placeSubmission(item.id, entry.id);\n inputs.push(item.id);\n }\n for (const index of [...writes, ...users].sort((a, b) => b - a)) inbox.items.splice(index, 1);\n if (inputs.length)\n live.run = {\n taskId: await tx.createTask(\n GenerationTask,\n {},\n { ownership: { kind: 'conversation' }, conversationId: conversation.id },\n ),\n inputs,\n };\n }\n }\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = 'steer';\n q.submissionId = id;\n record.revision++;\n doc.json = JSON.stringify(record);\n return id;\n }, context),\n );\n const submitUserPrompt = async (\n message: string | Extract<AgentMessage, { role: 'user' }>,\n images?: ImageContent[],\n selection?: { id: string; operationId?: string },\n submissionMode: 'reject' | 'steer' = 'reject',\n ): Promise<{\n settled: Promise<void>;\n handledCommand?: boolean;\n queueOutcome?: 'not_found' | 'in_flight' | 'target_changed';\n }> => {\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n if (!selection && (typeof message === 'string' ? !message && !images?.length : !message.content.length))\n throw new Error('User input must contain text or an image');\n if (!selection && typeof message === 'string' && (await dispatchCommand(message)))\n return { settled: Promise.resolve(), handledCommand: true };\n guardUserAdmission();\n userAdmission = true;\n userAdmissionSettled = new Promise<void>((resolve) => {\n releaseUserAdmission = resolve;\n });\n let claimed: Retained | undefined;\n try {\n if (selection && submissionMode === 'steer') {\n let admitted;\n try {\n admitted = await admitSelected(selection);\n } catch (error) {\n // Re-enter the line to find an accepted request before rechecking its target.\n const accepted = await storage.storage.submissionByRequest(\n conversation.id,\n `${selection.id}:${(await readRecord()).queue.find((q) => q.id === selection.id)?.attempt ?? 0}`,\n context,\n );\n if (!accepted) throw error;\n admitted = await admitSelected(selection, true);\n }\n if (typeof admitted === 'string') return { settled: Promise.resolve(), queueOutcome: admitted };\n const submission = await harness.submission(admitted, context);\n if (!submission) throw new Error('Accepted promotion submission is missing');\n const settled = (async () => {\n const status = await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'user_prompt', error: String(error) }));\n await reconcile();\n await publish();\n return { settled };\n }\n const current = await execution();\n if (selection) {\n const outcome = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === selection.id);\n if (!q || q.explicitQueue !== true || q.disposition === 'removed' || q.disposition === 'consumed')\n return 'not_found' as const;\n if (q.disposition !== 'pending') return 'in_flight' as const;\n if (current?.id !== selection.operationId || current?.status === 'aborting')\n return 'target_changed' as const;\n if (q.message && q.message.role !== 'user') throw new Error('Only user input can interrupt and respond');\n userClaims.add(q.id);\n if (submissionMode === 'reject') r.paused = true;\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = submissionMode;\n return { ...q };\n });\n if (typeof outcome === 'string') return { settled: Promise.resolve(), queueOutcome: outcome };\n claimed = outcome;\n }\n if (submissionMode === 'reject') {\n if (current) await abort(current.id);\n await conversation.waitForIdle(context);\n await eventsSettled;\n }\n if (!selection) await flushNextTurn();\n if (!claimed) {\n const { id } = await enqueue(\n message,\n images,\n submissionMode === 'steer' ? 'steer' : 'nextRun',\n submissionMode === 'steer' ? 'automatic' : 'held',\n );\n claimed = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === id);\n if (!q || q.disposition !== 'pending') throw new Error('User input was removed before admission');\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = submissionMode;\n return { ...q };\n });\n }\n const submission = await handoff(claimed, submissionMode, true);\n if (!submission) throw new Error('User admission ownership changed');\n const settled = (async () => {\n const status = await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'user_prompt', error: String(error) }));\n await publish();\n return { settled };\n } finally {\n if (claimed) userClaims.delete(claimed.id);\n if (selection) userClaims.delete(selection.id);\n userAdmission = false;\n releaseUserAdmission?.();\n releaseUserAdmission = undefined;\n }\n };\n const recover = async () => {\n const r = await readRecord();\n if (r.abortOperationId) {\n const task =\n r.abortTaskId === undefined\n ? undefined\n : await harness.getTask(r.abortTaskId as Parameters<typeof harness.getTask>[0], context);\n if (task && task.state.status !== 'terminal') await conversation.abort(context);\n }\n for (const item of r.queue.filter((q) => q.disposition === 'handoff' && !q.submissionId)) {\n // requestId deduplicates the crash window between native admission and product receipt.\n if (item.conversationId !== conversation.id) {\n await changeRecord((record) => {\n const q = record.queue.find((q) => q.id === item.id);\n if (q) q.disposition = 'uncertain';\n });\n continue;\n }\n await handoff(item, item.submissionMode ?? (item.delivery === 'steer' ? 'steer' : 'followUp'), true);\n }\n await reconcile();\n await changeRecord(() => undefined);\n };\n const runExternalOperation = async <T>(work: () => Promise<T>): Promise<T> => {\n guardUserAdmission();\n if (await execution()) throw new Error('An operation is already running');\n external = randomUUID();\n externalAbort = new AbortController();\n try {\n await publish();\n return await writable(work);\n } finally {\n external = undefined;\n externalAbort = undefined;\n await publish();\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n }\n };\n const appendEntry = async (entry: Parameters<Conversation['submit']>[0] & { type: 'write' }) => {\n const submission = await writable(() => conversation.submit(entry, context));\n const receipt = await submission.wait(context);\n if (receipt.status !== 'done') throw new Error(`Entry write failed: ${receipt.reason}`);\n return String(receipt.entry);\n };\n const readEntries = async () => {\n const entries = await projectDurableConversationEntries(conversation, context);\n return { entries, leafId: entries.at(-1)?.id ?? null };\n };\n const getSessionStats = async () => {\n const { entries } = await readEntries();\n const messages = entries.flatMap((e) => (e.type === 'message' ? [e.message] : []));\n const agent = await conversation.agent(context);\n const selected = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n const contextUsage = contextUsageOf(contextTokensOf(latestAssistantUsage(entries)), selected?.contextWindow);\n const usage = await harness.usage(context);\n const all = [...Object.values(usage.models), ...Object.values(usage.tools)];\n const tokens = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };\n let cost = 0;\n for (const u of all) {\n tokens.input += u.input;\n tokens.output += u.output;\n tokens.cacheRead += u.cacheRead;\n tokens.cacheWrite += u.cacheWrite;\n tokens.total += u.totalTokens;\n cost += u.cost.total;\n }\n return {\n sessionId,\n sessionFile: storage.sessionFile,\n ...(contextUsage === undefined ? {} : { contextUsage }),\n messageCount: messages.length,\n totalMessages: messages.length,\n userMessages: messages.filter((m) => m.role === 'user').length,\n assistantMessages: messages.filter((m) => m.role === 'assistant').length,\n toolCalls: messages.flatMap((m) =>\n m.role === 'assistant' ? m.content.filter((c) => c.type === 'toolCall') : [],\n ).length,\n toolResults: messages.filter((m) => m.role === 'toolResult').length,\n tokens,\n cost,\n totalCost: cost,\n usage: {\n input: tokens.input,\n output: tokens.output,\n cacheRead: tokens.cacheRead,\n cacheWrite: tokens.cacheWrite,\n totalTokens: tokens.total,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: cost },\n },\n };\n };\n let disposePromise: Promise<void> | undefined;\n const dispose = () =>\n (disposePromise ??= (async () => {\n const failures: unknown[] = [];\n const attempt = async (cleanup: () => Promise<unknown>) => {\n try {\n await cleanup();\n return true;\n } catch (error) {\n failures.push(error);\n return false;\n }\n };\n await attempt(interrupt);\n disposed = true;\n await attempt(() => watcher.stop());\n await attempt(() => eventsSettled);\n const harnessClosed = await attempt(() => harness.close(context));\n const repositoryClosed = harnessClosed && (await attempt(async () => storage.repository?.close(context)));\n await attempt(() => environment.cleanup(context));\n if (harnessClosed && repositoryClosed) await attempt(async () => storage.historyLease?.release());\n resolveExited(failures.length ? 1 : 0);\n if (failures.length) throw new AggregateError(failures, 'Direct harness cleanup failed');\n })());\n const recordUsage: DirectHarnessRuntime<TContext>['recordUsage'] = async (usage, usageOptions) => {\n const entryId = await appendEntry({\n type: 'write',\n entry: { kind: 'doompi.usage', data: json({ usage, ...usageOptions }) },\n });\n await writable(() =>\n harness.commit(async (tx) => {\n const ledger = await tx.doc(UsageDoc, conversation.id);\n const key = 'doompi/auxiliary';\n const previous = ledger.models[key];\n ledger.models[key] = previous\n ? {\n ...usage,\n input: previous.input + usage.input,\n output: previous.output + usage.output,\n cacheRead: previous.cacheRead + usage.cacheRead,\n cacheWrite: previous.cacheWrite + usage.cacheWrite,\n totalTokens: previous.totalTokens + usage.totalTokens,\n cost: {\n input: previous.cost.input + usage.cost.input,\n output: previous.cost.output + usage.cost.output,\n cacheRead: previous.cost.cacheRead + usage.cost.cacheRead,\n cacheWrite: previous.cost.cacheWrite + usage.cost.cacheWrite,\n total: previous.cost.total + usage.cost.total,\n },\n }\n : usage;\n }, context),\n );\n return entryId;\n };\n const removeQueued: DirectHarnessRuntime<TContext>['removeQueued'] = async (id) => {\n const item = (await readRecord()).queue.find((q) => q.id === id);\n if (!item || item.explicitQueue !== true) return 'not_found';\n if (item.disposition === 'consumed') return 'already_consumed';\n if (item.disposition === 'removed') return 'removed';\n if (item.submissionId) {\n const result = await harness.abortSubmission(item.submissionId as SubmissionId, context, conversation.id);\n if (result === 'already_placed') return 'in_flight';\n if (result === 'settled') return 'already_consumed';\n } else if (item.disposition !== 'pending') return 'in_flight';\n const result = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === id);\n if (!q || q.explicitQueue !== true) return 'not_found' as const;\n if (q.disposition === 'consumed') return 'already_consumed' as const;\n if (q.disposition === 'removed') return 'removed' as const;\n if (q.submissionId !== item.submissionId || (item.submissionId === undefined && q.disposition !== 'pending'))\n return 'in_flight' as const;\n q.disposition = 'removed';\n q.text = '';\n delete q.message;\n delete q.images;\n return 'removed' as const;\n });\n await publish();\n return result;\n };\n return {\n sessionId,\n sessionFile: storage.sessionFile,\n laneName,\n harnessId: options.harnessId ?? `${sessionId}:${laneName}`,\n session: harness,\n harness,\n get lane() {\n return conversation;\n },\n exited,\n get storageQuarantined() {\n return quarantined;\n },\n completeModel: models.complete?.bind(models),\n onPresentationFrame(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n onEvent(listener) {\n eventListeners.add(listener);\n return () => eventListeners.delete(listener);\n },\n stop() {\n void dispose().catch((error) => emit({ type: 'error', error: String(error) }));\n },\n readEntries,\n readLifecycle,\n dispatchCommand,\n listCommands: () => [...(options.listCommands?.() ?? [])],\n async readState() {\n const lifecycle = await readLifecycle();\n const agent = await conversation.agent(context);\n const metadata = await harness.snapshot(SessionMetadataDoc, context);\n const stats = await getSessionStats();\n const inbox = await harness.snapshot(InboxDoc, conversation.id, context);\n const retained = (await readRecord()).queue;\n const retainedSubmissions = new Set(retained.map((item) => item.submissionId));\n const nativePending =\n inbox?.items.filter((item) => item.mode !== 'write' && !retainedSubmissions.has(item.id)).length ?? 0;\n return json({\n sessionId,\n sessionFile: storage.sessionFile,\n sessionName: metadata?.name,\n model: agent.model ? { provider: agent.model.provider, id: agent.model.modelId } : undefined,\n thinkingLevel: agent.thinkingLevel,\n isStreaming: lifecycle.operation?.kind === 'run',\n isCompacting: lifecycle.operation?.kind === 'compaction',\n operationId: lifecycle.operation?.id,\n executionStatus: lifecycle.operation?.status,\n fastMode,\n queuePaused: lifecycle.paused,\n queueRevision: lifecycle.revision,\n steeringMode: settings.steeringMode ?? 'one-at-a-time',\n followUpMode: settings.followUpMode ?? 'one-at-a-time',\n autoCompactionEnabled: settings.compaction?.enabled ?? true,\n messageCount: stats.messageCount,\n pendingMessageCount:\n retained.filter((item) => item.disposition !== 'consumed' && item.disposition !== 'removed').length +\n nativePending +\n nextTurnMessages.length +\n deferredInternalCount,\n }) as Record<string, unknown>;\n },\n enqueueAutomatic: async (value, images) => {\n const result = await enqueue(value, images, 'nextRun', 'automatic', true);\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n return result;\n },\n removeQueued,\n async promoteQueued(id, operationId) {\n const result = await submitUserPrompt('', undefined, { id, operationId }, 'steer');\n return result.queueOutcome ?? 'promoted';\n },\n async resumeQueue() {\n guardUserAdmission();\n await changeRecord((r) => {\n r.paused = false;\n delete r.abortOperationId;\n delete r.abortTaskId;\n });\n await publish();\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n },\n recover,\n async setFastMode(enabled) {\n if (enabled) {\n const selected = (await conversation.agent(context)).model;\n const model = selected ? models.getModel(selected.provider, selected.modelId) : undefined;\n if (model?.api !== CODEX_API || model.provider !== CODEX_PROVIDER)\n throw new Error('Fast mode requires an OpenAI Codex model');\n }\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(FastModeDoc)).enabled = enabled;\n await tx.appendEntry(conversation.id, {\n kind: 'doompi.fast-mode',\n data: { version: 1, enabled, sessionId },\n });\n }, context),\n );\n fastMode = enabled;\n emit({ type: 'fast_mode_changed', enabled });\n },\n async setModel(model) {\n const previous = (await conversation.agent(context)).model;\n if (!models.getModel(model.provider, model.id))\n throw new Error(`Model not found: ${model.provider}/${model.id}`);\n await writable(() =>\n conversation.configure({ model: { provider: model.provider, modelId: model.id } }, context),\n );\n await deliver(\n {\n type: 'config_update',\n property: 'model',\n value: { provider: model.provider, modelId: model.id },\n previous,\n },\n context,\n );\n emit({ type: 'model_select', model });\n },\n availableModels: () => models.getAvailable(),\n async availableThinkingLevels() {\n const agent = await conversation.agent(context);\n const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n if (!model) throw new Error('No model is selected');\n return getSupportedThinkingLevels(model);\n },\n setThinkingLevel: (level) => writable(() => conversation.configure({ thinkingLevel: level }, context)),\n async setSteeringMode(mode) {\n settings = { ...settings, steeringMode: mode };\n },\n async setFollowUpMode(mode) {\n settings = { ...settings, followUpMode: mode };\n },\n navigateTree: (targetId, navigationOptions) =>\n runExternalOperation(async () => {\n try {\n const expected = conversation.id;\n if (\n targetId !== null &&\n !(await storage.storage.entry(conversation.id, nativeId<EntryId>(targetId), context))\n )\n throw new Error('Navigation target is not in the selected conversation');\n const oldTip = (await readEntries()).leafId;\n await deliver({ type: 'navigation_start' }, context);\n emit({ type: 'navigation_start', targetId });\n let summary = navigationOptions?.summary;\n if (navigationOptions?.summarize === true && summary === undefined) {\n const selected = (await conversation.agent(context)).model;\n const model = selected ? models.getModel(selected.provider, selected.modelId) : undefined;\n if (!model) throw new Error('No model is selected for navigation summary');\n const instructions = navigationOptions.customInstructions;\n if (instructions !== undefined && typeof instructions !== 'string')\n throw new Error('Navigation instructions must be a string');\n const base =\n 'Summarize this conversation for continuing work on another branch. Include decisions, progress, remaining work, and essential context. Return only the summary.';\n const messages: Message[] = [\n {\n role: 'system',\n content:\n navigationOptions.replaceInstructions === true\n ? (instructions ?? base)\n : [base, instructions].filter(Boolean).join('\\n\\n'),\n timestamp: Date.now(),\n },\n {\n role: 'user',\n content: JSON.stringify((await conversation.context(context)).messages),\n timestamp: Date.now(),\n },\n ];\n await options.beforeModelRequest?.({ phase: 'request', model, prompt: messages, resources }, context);\n const summaryContext = withAbortSignal(externalAbort!.signal, context);\n let answer: AssistantMessage;\n try {\n answer = await awaitWithContext(\n models.complete(model, { messages }, { signal: externalAbort!.signal }),\n summaryContext,\n );\n } catch (error) {\n if (externalAbort?.signal.aborted) {\n await deliver(\n { type: 'navigation_end', status: 'aborted', tipId: oldTip, fromTipId: oldTip },\n context,\n );\n emit({ type: 'navigation_end', status: 'aborted' });\n return { cancelled: true, entries: (await readEntries()).entries };\n }\n throw error;\n }\n if (answer.stopReason === 'error' || answer.stopReason === 'aborted')\n throw new Error(answer.errorMessage ?? 'Navigation summary failed');\n summary = text(answer).trim();\n await recordUsage(answer.usage, { details: { purpose: 'branch_summary' } });\n }\n if (externalAbort?.signal.aborted) {\n await deliver({ type: 'navigation_end', status: 'aborted', tipId: oldTip, fromTipId: oldTip }, context);\n emit({ type: 'navigation_end', status: 'aborted' });\n return { cancelled: true, entries: (await readEntries()).entries };\n }\n if (summary !== undefined && typeof summary !== 'string')\n throw new Error('Navigation summary must be a string');\n const id = await navigateDurableConversation(\n harness,\n expected,\n targetId === null ? null : nativeId<EntryId>(targetId),\n context,\n typeof summary === 'string'\n ? {\n summary: {\n kind: 'doompi.entry',\n data: {\n type: 'branch_summary',\n summary,\n fromId: targetId,\n fromHook: navigationOptions?.summarize !== true,\n },\n model: [\n {\n role: 'user',\n content: `<branch_summary>\\n${summary}\\n</branch_summary>`,\n timestamp: Date.now(),\n },\n ],\n },\n }\n : undefined,\n );\n const agent = await conversation.agent(context);\n conversation = (await harness.conversation(id, context))!;\n if (targetId === null)\n await conversation.configure(\n {\n model: agent.model,\n thinkingLevel: agent.thinkingLevel,\n cwd: agent.cwd,\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n instructions: agent.instructions,\n },\n context,\n );\n await attach();\n const result = await readEntries();\n if (typeof navigationOptions?.label === 'string' && targetId !== null)\n await harness.commit(async (tx) => {\n (await tx.doc(LabelsDoc)).labels[targetId] = navigationOptions.label as string;\n }, context);\n for (const entry of result.entries)\n if (entry.type === 'branch_summary') await deliver({ type: 'entry_added', entry }, context);\n const event: HarnessEvent = {\n type: 'navigation_end',\n status: 'completed',\n tipId: result.leafId,\n fromTipId: oldTip,\n };\n await deliver(event, context);\n emit({ ...event });\n return { cancelled: false, entries: result.entries };\n } catch (error) {\n await deliver(\n {\n type: 'navigation_end',\n status: 'failed',\n tipId: null,\n fromTipId: null,\n error: error instanceof Error ? error : new Error(String(error)),\n },\n context,\n );\n emit({ type: 'navigation_end', status: 'failed', error: String(error) });\n throw error;\n }\n }),\n async clearQueue() {\n const selected = (await readRecord()).queue.filter(\n (item) => item.explicitQueue === true && item.disposition !== 'consumed' && item.disposition !== 'removed',\n );\n for (const item of selected) await removeQueued(item.id);\n await publish();\n return { steering: [], followUp: [] };\n },\n async setName(name) {\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(SessionMetadataDoc)).name = name;\n }, context),\n );\n emit({ type: 'session_info_changed', name });\n },\n getSessionStats,\n async replaceTools(replacement) {\n tools = replacement;\n activeNames = new Set(tools.map((t) => t.name));\n install();\n await writable(() => conversation.configure({ tools: tools.map(nativeTool) }, context));\n },\n async replaceResources(replacement) {\n resources = replacement;\n install();\n },\n async readResources() {\n return resources;\n },\n runExternalOperation,\n appendCustomEntry: async (customType, data) =>\n String(\n (\n await writable(() =>\n conversation.commit(\n (tx) =>\n tx.appendEntry(conversation.id, {\n kind: customType,\n ...(data === undefined ? {} : { data: json(data) }),\n ...(options.entryProjectors?.[customType]\n ? {\n model: convertToLlm(\n options.entryProjectors[customType]({\n type: 'custom',\n id: '',\n parentId: null,\n timestamp: Date.now(),\n seq: 0,\n customType,\n ...(data === undefined ? {} : { data: json(data) }),\n }),\n ),\n }\n : {}),\n }),\n context,\n ),\n )\n ).id,\n ),\n appendMessage: (message) =>\n appendEntry({\n type: 'write',\n entry: {\n kind: 'doompi.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp }),\n model: convertToLlm([message]),\n },\n }),\n setLabel: (targetId, label) =>\n writable(() =>\n harness.commit(async (tx) => {\n const labels = (await tx.doc(LabelsDoc)).labels;\n if (label === undefined) delete labels[targetId];\n else labels[targetId] = label;\n }, context),\n ),\n recordUsage,\n submitPrompt: admit,\n submitUserPrompt,\n prompt: async (value, images) => {\n await (\n await admit(value, images)\n ).settled;\n },\n admitMessage: (message) => admit(message),\n submitInternalMessage: async function submitInternalMessage(\n message,\n delivery = 'steer',\n requestId = randomUUID(),\n ) {\n if (typeof message !== 'string' && message.role !== 'user' && message.role !== 'custom')\n throw new Error('Internal input must be user or custom message content');\n if (delivery === 'nextTurn') {\n nextTurnMessages.push(\n typeof message === 'string' ? { role: 'user', content: message, timestamp: Date.now() } : message,\n );\n return { settled: Promise.resolve() };\n }\n const preserved: AgentMessage =\n typeof message === 'string' ? { role: 'user', content: message, timestamp: Date.now() } : message;\n const deliveryRecord: InternalDeliveryRecord = { message: preserved, conversationId: conversation.id };\n if (userAdmission) {\n deferredInternalCount++;\n admittingInternal.add(requestId);\n try {\n await changeRecord((r) => {\n (r.internalDeliveries ??= {})[requestId] = deliveryRecord;\n });\n } catch (error) {\n deferredInternalCount--;\n admittingInternal.delete(requestId);\n throw error;\n }\n const released = userAdmissionSettled;\n const settled = released.then(async () => {\n deferredInternalCount--;\n admittingInternal.delete(requestId);\n await (\n await submitInternalMessage(preserved, delivery, requestId)\n ).settled;\n });\n void settled.catch((error) => emit({ type: 'error', code: 'internal_message', error: String(error) }));\n return { settled };\n }\n if (external) throw new Error('An operation is already running');\n const content = typeof message === 'string' ? message : message.content;\n const submit = async (draft: Parameters<Conversation['submit']>[0] & { requestId: string }) => {\n try {\n return await writable(() => conversation.submit(draft, context));\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(conversation.id, draft.requestId, context);\n const submission = accepted && (await harness.submission(accepted.id, context));\n if (!submission) throw error;\n return submission;\n }\n };\n admittingInternal.add(requestId);\n // Preserve custom presentation metadata without adding its content twice to model context.\n let envelope: Awaited<ReturnType<Conversation['submit']>> | undefined;\n let submission: Awaited<ReturnType<Conversation['submit']>>;\n try {\n await changeRecord((r) => {\n (r.internalDeliveries ??= {})[requestId] = deliveryRecord;\n });\n envelope =\n typeof message !== 'string' && message.role === 'custom'\n ? await submit({\n type: 'write',\n requestId: `${requestId}:message`,\n entry: {\n kind: 'doompi.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp, inputRequestId: requestId }),\n },\n })\n : undefined;\n submission = await submit({ type: 'input', content, whenBusy: delivery, requestId });\n await changeRecord((r) => {\n const item = r.internalDeliveries?.[requestId];\n if (item) item.submissionId = submission.id;\n });\n } finally {\n admittingInternal.delete(requestId);\n }\n let resolveDelivery!: () => void;\n const delivered = new Promise<void>((resolve) => {\n resolveDelivery = resolve;\n });\n internalDelivery.set(submission.id, { done: delivered, resolve: resolveDelivery });\n if (deliveredInputs.has(submission.id)) resolveDelivery();\n const settled = (async () => {\n try {\n const status = await submission.wait(context);\n if (status.status === 'unanswered' && status.entry === undefined) {\n await conversation.waitForIdle(context);\n await reconcileInternal(requestId, deliveryRecord);\n }\n if (envelope && (await envelope.wait(context)).status !== 'done')\n throw new Error('Internal message journal write failed');\n if (status.status === 'done' || status.entry !== undefined) await delivered;\n await eventsSettled;\n await reconcileInternal(requestId, deliveryRecord);\n } finally {\n internalDelivery.delete(submission.id);\n }\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'internal_message', error: String(error) }));\n return { settled };\n },\n steer: async (message, images) => {\n if (typeof message !== 'string' && message.role !== 'user')\n throw new Error('Only user messages can steer an agent run');\n await submitUserPrompt(message, images, undefined, 'steer');\n },\n followUp: (message, images) => queued(message, images, 'followUp'),\n nextRun: (message, images) => queued(message, images, 'nextRun'),\n abort,\n interrupt,\n async compact(instructions) {\n guardUserAdmission();\n if (await execution()) throw new Error('An operation is already running');\n const previous = settings;\n settings = { ...settings, compaction: { ...settings.compaction, keepRecentTokens: 0 } };\n try {\n const task = await writable(() => conversation.compact(instructions, context));\n const receipt = await harness.waitForTask(task, context);\n await eventsSettled;\n if (['failed', 'faulted', 'orphaned'].includes(receipt.state.outcome.status))\n throw new Error('Compaction failed');\n } finally {\n settings = previous;\n }\n },\n async admitResume() {\n await recover();\n const resumed = !!(await execution());\n harness.resume();\n const settled = (async () => {\n await conversation.waitForIdle(context);\n await eventsSettled;\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'resume', error: String(error) }));\n return { resumed, settled };\n },\n async resume() {\n await recover();\n const resumed = !!(await execution());\n harness.resume();\n if (resumed) {\n await conversation.waitForIdle(context);\n await eventsSettled;\n }\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n return resumed;\n },\n dispose,\n };\n } catch (error) {\n const failures: unknown[] = [error];\n try {\n if (startupHarness) await startupHarness.close(context);\n else await storage.storage.close(context);\n } catch (closeError) {\n failures.push(closeError);\n }\n if (failures.length === 1) {\n try {\n await storage.repository?.close(context);\n await storage.historyLease?.release();\n } catch (closeError) {\n failures.push(closeError);\n }\n }\n if (failures.length > 1) throw new AggregateError(failures, 'Direct harness startup and cleanup failed');\n throw error;\n }\n}\nexport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../types/server/directHarnessRuntime';\n"],"mappings":"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"}