@averyyy/pi-server 0.82.1-piclient.2 → 0.82.1-piclient.4
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.
- package/CHANGELOG.md +11 -0
- package/README.md +25 -0
- package/bin/update.js +156 -23
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pi-server-protocol.d.ts +16 -0
- package/dist/pi-server-protocol.d.ts.map +1 -1
- package/dist/pi-server-protocol.js +30 -1
- package/dist/pi-server-protocol.js.map +1 -1
- package/dist/receive-upload.d.ts +5 -0
- package/dist/receive-upload.d.ts.map +1 -1
- package/dist/receive-upload.js +88 -6
- package/dist/receive-upload.js.map +1 -1
- package/dist/request-chunks.d.ts +33 -0
- package/dist/request-chunks.d.ts.map +1 -1
- package/dist/request-chunks.js +540 -48
- package/dist/request-chunks.js.map +1 -1
- package/dist/server.d.ts +41 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3088 -366
- package/dist/server.js.map +1 -1
- package/dist/session-persistence.d.ts +39 -1
- package/dist/session-persistence.d.ts.map +1 -1
- package/dist/session-persistence.js +1132 -116
- package/dist/session-persistence.js.map +1 -1
- package/dist/session-store.d.ts +112 -6
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js +695 -120
- package/dist/session-store.js.map +1 -1
- package/dist/stream-run-persistence.d.ts +163 -0
- package/dist/stream-run-persistence.d.ts.map +1 -0
- package/dist/stream-run-persistence.js +1824 -0
- package/dist/stream-run-persistence.js.map +1 -0
- package/package.json +3 -3
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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","sourcesContent":["import { createServer, type Server as HttpServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { createRequire } from \"node:module\";\nimport {\n\ttype CompactionPreparationOptions,\n\ttype CompactionSettings,\n\ttype CompactResult,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\ttype ProxyAssistantMessageEvent,\n\tprepareCompaction,\n\ttype SessionTreeEntry,\n} from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype AssistantMessage,\n\ttype AssistantMessageEvent,\n\ttype Context,\n\tcreateModels,\n\tcreateProvider,\n\ttype Message,\n\ttype Model,\n\ttype SimpleStreamOptions,\n} from \"@earendil-works/pi-ai\";\nimport { streamSimple } from \"@earendil-works/pi-ai/compat\";\nimport type { ServerConfig } from \"./config.ts\";\nimport { loadConfig } from \"./config.ts\";\nimport { encodeErrorEvent, encodeProxyEvent } from \"./event-encoding.ts\";\nimport { ReceiveUploadError, receiveUpload } from \"./receive-upload.ts\";\nimport { CHUNK_ENDPOINT, type RequestChunkBody, receiveRequestChunk } from \"./request-chunks.ts\";\nimport { deletePersistedSession, loadPersistedSessions, savePersistedSession } from \"./session-persistence.ts\";\nimport {\n\tappendCompactionEntry,\n\tappendMessages,\n\tappendSessionEntries,\n\tdeleteSession as deleteSessionFromStore,\n\tdropLastAssistantError,\n\tgetOrCreateSession,\n\tgetSession,\n\tgetSessionBranch,\n\tlistSessions,\n\treplaceMessages,\n\treplaceSessionTree,\n\ttype SessionState,\n\ttype SessionStaticContext,\n\tsetStaticContext,\n\tswitchSessionLeaf,\n} from \"./session-store.ts\";\n\nexport { loadConfig, type ServerConfig } from \"./config.ts\";\n\ninterface PackageMetadata {\n\tversion: string;\n}\n\nconst packageMetadata = createRequire(import.meta.url)(\"../package.json\") as PackageMetadata;\nconst PI_SERVER_VERSION = packageMetadata.version;\n\ninterface SessionInitBody {\n\tsessionId: string;\n\tstaticContext?: SessionStaticContext;\n}\n\ninterface StreamRequestBody {\n\tsessionId: string;\n\trunId?: string;\n\tmodel: Model<any>;\n\toptions?: SimpleStreamOptions;\n\tstaticContext?: SessionStaticContext;\n\tephemeralMessages?: Message[];\n\tcontextOverlay?: Message[];\n}\n\ninterface SessionSyncBody {\n\tsessionId: string;\n\tmessages: Message[];\n\tstaticContext?: SessionStaticContext;\n}\n\ninterface SessionAppendBody {\n\tsessionId: string;\n\tmessages: Message[];\n\tstaticContext?: SessionStaticContext;\n}\n\ninterface SessionTreeSyncBody {\n\tsessionId: string;\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\tstaticContext?: SessionStaticContext;\n}\n\ninterface SessionTreeSwitchBody {\n\tsessionId: string;\n\tleafId: string | null;\n}\n\ninterface SessionCompactBody {\n\tsessionId: string;\n\tmodel: Model<any>;\n\toptions?: SimpleStreamOptions;\n\tsettings?: CompactionSettings;\n\tpreparation?: CompactionPreparationOptions;\n\tcustomInstructions?: string;\n\tbaseTreeHash?: string;\n\tfullResponse?: boolean;\n\tstreamResponse?: boolean;\n}\n\nfunction createRequestModels(model: Model<any>, options: SimpleStreamOptions) {\n\tconst models = createModels();\n\tmodels.setProvider(\n\t\tcreateProvider({\n\t\t\tid: model.provider,\n\t\t\tname: model.provider,\n\t\t\tmodels: [model],\n\t\t\tauth: {\n\t\t\t\tapiKey: {\n\t\t\t\t\tname: \"pi-server request auth\",\n\t\t\t\t\tresolve: async () => ({ auth: { apiKey: options.apiKey, headers: options.headers } }),\n\t\t\t\t},\n\t\t\t},\n\t\t\tapi: {\n\t\t\t\tstream: (requestModel, context, streamOptions) => streamSimple(requestModel, context, streamOptions),\n\t\t\t\tstreamSimple: (requestModel, context, streamOptions) => streamSimple(requestModel, context, streamOptions),\n\t\t\t},\n\t\t}),\n\t);\n\treturn models;\n}\n\ninterface SessionIdBody {\n\tsessionId: string;\n}\n\ninterface StreamRunRecord {\n\tsessionId: string;\n\trunId: string;\n\tstatus: \"running\" | \"completed\" | \"failed\";\n\tevents: ProxyAssistantMessageEvent[];\n\tmessage?: AssistantMessage;\n\terrorMessage?: string;\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\nconst STREAM_HEARTBEAT = \": keep-alive\\n\\n\";\nconst JSON_HEARTBEAT = \" \\n\";\nconst STREAM_HEARTBEAT_INTERVAL_MS = 25_000;\nconst streamRuns = new Map<string, StreamRunRecord>();\n\nfunction readBody(req: IncomingMessage): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst chunks: Buffer[] = [];\n\t\treq.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n\t\treq.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n\t\treq.on(\"error\", reject);\n\t});\n}\n\nfunction sendJson(res: ServerResponse, status: number, body: unknown): void {\n\tconst data = JSON.stringify(body);\n\tres.writeHead(status, { \"Content-Type\": \"application/json\", \"Content-Length\": Buffer.byteLength(data) });\n\tres.end(data);\n}\n\nfunction logRequestError(req: IncomingMessage, error: unknown): void {\n\tconst message = error instanceof Error ? error.stack || error.message : String(error);\n\tconsole.error(`${req.method ?? \"UNKNOWN\"} ${req.url ?? \"/\"} failed: ${message}`);\n}\n\nfunction authenticate(config: ServerConfig, req: IncomingMessage): boolean {\n\tif (!config.authToken) return true;\n\tconst header = req.headers.authorization;\n\tif (!header) return false;\n\tconst token = header.startsWith(\"Bearer \") ? header.slice(7) : header;\n\treturn token === config.authToken;\n}\n\ninterface ResolvedStream {\n\tmodel: Model<any>;\n\toptions: SimpleStreamOptions;\n}\n\nfunction sessionResponseBody(session: SessionState) {\n\treturn {\n\t\tsessionId: session.sessionId,\n\t\tstaticContextHash: session.staticContextHash,\n\t\ttreeHash: session.treeHash,\n\t\tmessageCount: session.messages.length,\n\t\tentryCount: session.entries.length,\n\t\tleafId: session.leafId,\n\t\trevision: session.revision,\n\t};\n}\n\nfunction persistSession(config: ServerConfig, session: SessionState): void {\n\tsavePersistedSession(config.sessionStoreDir, session);\n}\n\nfunction runKey(sessionId: string, runId: string): string {\n\treturn `${sessionId}\\0${runId}`;\n}\n\nfunction getStreamRun(sessionId: string, runId: string): StreamRunRecord | undefined {\n\treturn streamRuns.get(runKey(sessionId, runId));\n}\n\nfunction startStreamRun(sessionId: string, runId: string): StreamRunRecord {\n\tconst existing = getStreamRun(sessionId, runId);\n\tif (existing?.status === \"completed\" || existing?.status === \"failed\") return existing;\n\tconst now = Date.now();\n\tconst run: StreamRunRecord = existing ?? {\n\t\tsessionId,\n\t\trunId,\n\t\tstatus: \"running\",\n\t\tevents: [],\n\t\tcreatedAt: now,\n\t\tupdatedAt: now,\n\t};\n\trun.status = \"running\";\n\trun.updatedAt = now;\n\tstreamRuns.set(runKey(sessionId, runId), run);\n\treturn run;\n}\n\nfunction recordStreamRunEvent(run: StreamRunRecord | undefined, event: ProxyAssistantMessageEvent): void {\n\tif (!run) return;\n\trun.events.push(event);\n\trun.updatedAt = Date.now();\n}\n\nfunction completeStreamRun(run: StreamRunRecord | undefined, message: AssistantMessage): void {\n\tif (!run) return;\n\trun.status = \"completed\";\n\trun.message = message;\n\trun.errorMessage = undefined;\n\trun.updatedAt = Date.now();\n}\n\nfunction failStreamRun(run: StreamRunRecord | undefined, errorMessage: string): void {\n\tif (!run) return;\n\trun.status = \"failed\";\n\trun.errorMessage = errorMessage;\n\trun.updatedAt = Date.now();\n}\n\nfunction sessionHistoryFullResponseBody(session: SessionState, baseMessageCount: number) {\n\treturn {\n\t\tsessionId: session.sessionId,\n\t\tstaticContext: session.staticContext,\n\t\tstaticContextHash: session.staticContextHash,\n\t\ttreeHash: session.treeHash,\n\t\tmessageCount: session.messages.length,\n\t\tentryCount: session.entries.length,\n\t\tleafId: session.leafId,\n\t\trevision: session.revision,\n\t\tentries: session.entries,\n\t\tbaseMessageCount,\n\t\tmessages: session.messages.slice(baseMessageCount),\n\t};\n}\n\nfunction sessionTreePatchResponseBody(\n\tsession: SessionState,\n\tbaseMessageCount: number,\n\tentriesFrom: number,\n\tbaseRevision: number | undefined,\n) {\n\treturn {\n\t\tsessionId: session.sessionId,\n\t\tstaticContext: session.staticContext,\n\t\tstaticContextHash: session.staticContextHash,\n\t\ttreeHash: session.treeHash,\n\t\tmessageCount: session.messages.length,\n\t\tentryCount: session.entries.length,\n\t\tleafId: session.leafId,\n\t\trevision: session.revision,\n\t\tbaseMessageCount,\n\t\tmessages: session.messages.slice(baseMessageCount),\n\t\ttreePatch: {\n\t\t\tentriesFrom,\n\t\t\tbaseRevision,\n\t\t\tentries: session.entries.slice(entriesFrom),\n\t\t\tleafId: session.leafId,\n\t\t\trevision: session.revision,\n\t\t},\n\t};\n}\n\ntype PreparedCompaction = Parameters<typeof compact>[0];\n\ninterface PreparedSessionCompact {\n\tsession: SessionState;\n\tpreparation: PreparedCompaction;\n\toptions: SimpleStreamOptions;\n}\n\ninterface SessionCompactSuccessBody {\n\tsuccess: true;\n\tcompaction: CompactResult;\n\tcompactionEntry: SessionTreeEntry;\n\tsessionId: string;\n\tstaticContextHash: string;\n\ttreeHash: string;\n\tmessageCount: number;\n\tentryCount: number;\n\tleafId: string | null;\n\trevision: number;\n\tstaticContext?: SessionStaticContext;\n\ttreePatch?: {\n\t\tbaseTreeHash: string;\n\t\tentriesFrom: number;\n\t\tentries: SessionTreeEntry[];\n\t\tleafId: string | null;\n\t\trevision: number;\n\t};\n\tentries?: SessionTreeEntry[];\n\tmessages?: Message[];\n}\n\ninterface SessionCompactHttpResponse {\n\tstatus: number;\n\tbody: { error: string } | SessionCompactSuccessBody;\n}\n\nexport function resolveStreamOptions(\n\t_config: ServerConfig,\n\tmodel: Model<any>,\n\tbody: StreamRequestBody,\n): ResolvedStream {\n\treturn { model, options: { ...(body.options ?? {}) } };\n}\n\nfunction handleSessionInit(config: ServerConfig, body: SessionInitBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (body.staticContext) {\n\t\tsetStaticContext(body.sessionId, body.staticContext);\n\t} else {\n\t\tgetOrCreateSession(body.sessionId);\n\t}\n\tconst session = getSession(body.sessionId)!;\n\tpersistSession(config, session);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionUpdate(\n\tconfig: ServerConfig,\n\tbody: SessionInitBody & { staticContext: SessionStaticContext },\n\tres: ServerResponse,\n): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!body.staticContext) {\n\t\tsendJson(res, 400, { error: \"staticContext is required for update\" });\n\t\treturn;\n\t}\n\tsetStaticContext(body.sessionId, body.staticContext);\n\tconst session = getSession(body.sessionId)!;\n\tpersistSession(config, session);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionSync(config: ServerConfig, body: SessionSyncBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!Array.isArray(body.messages)) {\n\t\tsendJson(res, 400, { error: \"messages is required\" });\n\t\treturn;\n\t}\n\tif (body.staticContext) {\n\t\tsetStaticContext(body.sessionId, body.staticContext);\n\t}\n\tconst session = replaceMessages(body.sessionId, body.messages);\n\tpersistSession(config, session);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionAppend(config: ServerConfig, body: SessionAppendBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!Array.isArray(body.messages)) {\n\t\tsendJson(res, 400, { error: \"messages is required\" });\n\t\treturn;\n\t}\n\tif (body.staticContext) {\n\t\tsetStaticContext(body.sessionId, body.staticContext);\n\t}\n\tconst session = appendMessages(body.sessionId, body.messages);\n\tpersistSession(config, session);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionTreeSync(config: ServerConfig, body: SessionTreeSyncBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!Array.isArray(body.entries)) {\n\t\tsendJson(res, 400, { error: \"entries is required\" });\n\t\treturn;\n\t}\n\tif (body.staticContext) {\n\t\tsetStaticContext(body.sessionId, body.staticContext);\n\t}\n\tconst session = replaceSessionTree(body.sessionId, body.entries, body.leafId ?? null);\n\tpersistSession(config, session);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionTreeAppend(config: ServerConfig, body: SessionTreeSyncBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!Array.isArray(body.entries)) {\n\t\tsendJson(res, 400, { error: \"entries is required\" });\n\t\treturn;\n\t}\n\tif (body.staticContext) {\n\t\tsetStaticContext(body.sessionId, body.staticContext);\n\t}\n\tconst session = appendSessionEntries(body.sessionId, body.entries, body.leafId ?? null);\n\tpersistSession(config, session);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionTreeSwitch(config: ServerConfig, body: SessionTreeSwitchBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tconst session = switchSessionLeaf(body.sessionId, body.leafId ?? null);\n\tpersistSession(config, session);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction prepareSessionCompact(body: SessionCompactBody): PreparedSessionCompact | SessionCompactHttpResponse {\n\tif (!body.sessionId) {\n\t\treturn { status: 400, body: { error: \"sessionId is required\" } };\n\t}\n\tif (!body.model) {\n\t\treturn { status: 400, body: { error: \"model is required\" } };\n\t}\n\n\tconst session = getSession(body.sessionId);\n\tif (!session) {\n\t\treturn { status: 404, body: { error: \"session not found\" } };\n\t}\n\n\tconst entries = getSessionBranch(session);\n\tconst preparationResult = prepareCompaction(entries, body.settings ?? DEFAULT_COMPACTION_SETTINGS, body.preparation);\n\tif (!preparationResult.ok) {\n\t\treturn { status: 400, body: { error: preparationResult.error.message } };\n\t}\n\tif (!preparationResult.value) {\n\t\treturn { status: 400, body: { error: \"Nothing to compact\" } };\n\t}\n\n\tconst options = body.options ?? {};\n\treturn {\n\t\tsession,\n\t\tpreparation: preparationResult.value,\n\t\toptions,\n\t};\n}\n\nasync function completeSessionCompact(\n\tconfig: ServerConfig,\n\tbody: SessionCompactBody,\n\tprepared: PreparedSessionCompact,\n): Promise<SessionCompactHttpResponse> {\n\tconst result = await compact(\n\t\tprepared.preparation,\n\t\tcreateRequestModels(body.model, prepared.options),\n\t\tbody.model,\n\t\tbody.customInstructions,\n\t\tundefined,\n\t\tprepared.options.reasoning,\n\t);\n\tif (!result.ok) {\n\t\treturn { status: 500, body: { error: result.error.message } };\n\t}\n\n\tconst baseTreeHash = prepared.session.treeHash;\n\tconst baseEntryCount = prepared.session.entries.length;\n\tconst compaction = result.value;\n\tconst firstKeptEntryId = compaction.firstKeptEntryId;\n\tif (!firstKeptEntryId) {\n\t\treturn { status: 500, body: { error: \"Compaction result is missing firstKeptEntryId\" } };\n\t}\n\tconst normalizedCompaction = { ...compaction, firstKeptEntryId };\n\tconst { session: updatedSession, entry: compactionEntry } = appendCompactionEntry(\n\t\tbody.sessionId,\n\t\tnormalizedCompaction,\n\t);\n\tpersistSession(config, updatedSession);\n\tif (!body.fullResponse && body.baseTreeHash === baseTreeHash) {\n\t\treturn {\n\t\t\tstatus: 200,\n\t\t\tbody: {\n\t\t\t\tsuccess: true,\n\t\t\t\tcompaction: normalizedCompaction satisfies CompactResult,\n\t\t\t\tcompactionEntry,\n\t\t\t\t...sessionResponseBody(updatedSession),\n\t\t\t\tstaticContext: updatedSession.staticContext,\n\t\t\t\ttreePatch: {\n\t\t\t\t\tbaseTreeHash,\n\t\t\t\t\tentriesFrom: baseEntryCount,\n\t\t\t\t\tentries: [compactionEntry],\n\t\t\t\t\tleafId: updatedSession.leafId,\n\t\t\t\t\trevision: updatedSession.revision,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\treturn {\n\t\tstatus: 200,\n\t\tbody: {\n\t\t\tsuccess: true,\n\t\t\tcompaction: normalizedCompaction satisfies CompactResult,\n\t\t\tcompactionEntry,\n\t\t\t...sessionResponseBody(updatedSession),\n\t\t\tstaticContext: updatedSession.staticContext,\n\t\t\tentries: updatedSession.entries,\n\t\t\tmessages: updatedSession.messages,\n\t\t},\n\t};\n}\n\nfunction writeServerSentEvent(res: ServerResponse, event: string, body: unknown): void {\n\tres.write(`event: ${event}\\n`);\n\tres.write(`data: ${JSON.stringify(body)}\\n\\n`);\n}\n\nasync function handleSessionCompactStream(\n\tconfig: ServerConfig,\n\tbody: SessionCompactBody,\n\tprepared: PreparedSessionCompact,\n\tres: ServerResponse,\n): Promise<void> {\n\tres.writeHead(200, {\n\t\t\"Content-Type\": \"text/event-stream\",\n\t\t\"Cache-Control\": \"no-cache\",\n\t\tConnection: \"keep-alive\",\n\t});\n\tres.flushHeaders();\n\tres.write(STREAM_HEARTBEAT);\n\n\tconst heartbeat = setInterval(() => {\n\t\tif (!res.writableEnded) {\n\t\t\tres.write(STREAM_HEARTBEAT);\n\t\t}\n\t}, STREAM_HEARTBEAT_INTERVAL_MS);\n\theartbeat.unref();\n\n\ttry {\n\t\tconst result = await completeSessionCompact(config, body, prepared);\n\t\twriteServerSentEvent(res, result.status >= 400 ? \"error\" : \"result\", result.body);\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\twriteServerSentEvent(res, \"error\", { error: message });\n\t} finally {\n\t\tclearInterval(heartbeat);\n\t\tres.end();\n\t}\n}\n\nasync function handleSessionCompactJsonStream(\n\tconfig: ServerConfig,\n\tbody: SessionCompactBody,\n\tprepared: PreparedSessionCompact,\n\tres: ServerResponse,\n): Promise<void> {\n\tres.writeHead(200, {\n\t\t\"Content-Type\": \"application/json\",\n\t\t\"Cache-Control\": \"no-cache\",\n\t\tConnection: \"keep-alive\",\n\t});\n\tres.flushHeaders();\n\tres.write(JSON_HEARTBEAT);\n\n\tconst heartbeat = setInterval(() => {\n\t\tif (!res.writableEnded) {\n\t\t\tres.write(JSON_HEARTBEAT);\n\t\t}\n\t}, STREAM_HEARTBEAT_INTERVAL_MS);\n\theartbeat.unref();\n\n\ttry {\n\t\tconst result = await completeSessionCompact(config, body, prepared);\n\t\tres.write(JSON.stringify(result.body));\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tres.write(JSON.stringify({ error: message }));\n\t} finally {\n\t\tclearInterval(heartbeat);\n\t\tres.end();\n\t}\n}\n\nasync function handleSessionCompact(\n\tconfig: ServerConfig,\n\tbody: SessionCompactBody,\n\tres: ServerResponse,\n): Promise<void> {\n\tconst prepared = prepareSessionCompact(body);\n\tif (\"status\" in prepared) {\n\t\tsendJson(res, prepared.status, prepared.body);\n\t\treturn;\n\t}\n\n\tif (body.streamResponse) {\n\t\tawait handleSessionCompactStream(config, body, prepared, res);\n\t\treturn;\n\t}\n\n\tawait handleSessionCompactJsonStream(config, body, prepared, res);\n}\n\nfunction handleDropLastAssistantError(config: ServerConfig, body: SessionIdBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tconst dropped = dropLastAssistantError(body.sessionId);\n\tconst session = getSession(body.sessionId);\n\tif (session) {\n\t\tpersistSession(config, session);\n\t}\n\tconst messageCount = session?.messages.length ?? 0;\n\tsendJson(res, 200, { success: true, dropped, messageCount });\n}\n\nfunction handleSessionHistory(\n\tsessionId: string,\n\tfrom: number | undefined,\n\tentriesFrom: number | undefined,\n\trevision: number | undefined,\n\tbaseTreeHash: string | undefined,\n\tres: ServerResponse,\n): void {\n\tconst session = getSession(sessionId);\n\tif (!session) {\n\t\tsendJson(res, 404, { error: \"session not found\" });\n\t\treturn;\n\t}\n\tconst baseMessageCount = from ?? 0;\n\tif (\n\t\tentriesFrom !== undefined &&\n\t\tentriesFrom <= session.entries.length &&\n\t\t(revision === undefined || revision <= session.revision) &&\n\t\t(baseTreeHash === undefined || baseTreeHash === session.prefixHashes[entriesFrom])\n\t) {\n\t\tsendJson(res, 200, sessionTreePatchResponseBody(session, baseMessageCount, entriesFrom, revision));\n\t\treturn;\n\t}\n\tsendJson(res, 200, sessionHistoryFullResponseBody(session, baseMessageCount));\n}\n\nfunction handleSessionRun(sessionId: string, runId: string, res: ServerResponse): void {\n\tconst run = getStreamRun(sessionId, runId);\n\tif (!run) {\n\t\tsendJson(res, 404, { error: \"run not found\" });\n\t\treturn;\n\t}\n\tsendJson(res, 200, run);\n}\n\nexport function buildStreamContext(\n\tsession: SessionState,\n\tbody: Pick<StreamRequestBody, \"contextOverlay\" | \"ephemeralMessages\">,\n): Context {\n\tconst messages = body.contextOverlay ?? [...session.messages, ...(body.ephemeralMessages ?? [])];\n\treturn {\n\t\tsystemPrompt: session.staticContext?.systemPrompt,\n\t\tmessages,\n\t\ttools: session.staticContext?.tools,\n\t};\n}\n\nfunction handleStream(config: ServerConfig, body: StreamRequestBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!body.model) {\n\t\tsendJson(res, 400, { error: \"model is required\" });\n\t\treturn;\n\t}\n\n\tconst session = getOrCreateSession(body.sessionId);\n\n\tif (body.staticContext) {\n\t\tsetStaticContext(body.sessionId, body.staticContext);\n\t\tpersistSession(config, session);\n\t}\n\n\tif (!session.staticContext && !body.staticContext) {\n\t\tsendJson(res, 400, { error: \"Session has no static context. Initialize with /api/session/init first.\" });\n\t\treturn;\n\t}\n\n\tif (body.ephemeralMessages !== undefined && !Array.isArray(body.ephemeralMessages)) {\n\t\tsendJson(res, 400, { error: \"ephemeralMessages must be an array\" });\n\t\treturn;\n\t}\n\tif (body.contextOverlay !== undefined && !Array.isArray(body.contextOverlay)) {\n\t\tsendJson(res, 400, { error: \"contextOverlay must be an array\" });\n\t\treturn;\n\t}\n\n\tconst context = buildStreamContext(session, body);\n\tconst existingRun = body.runId ? getStreamRun(body.sessionId, body.runId) : undefined;\n\n\tconst { model: resolvedModel, options: streamOptions } = resolveStreamOptions(config, body.model, body);\n\n\tres.writeHead(200, {\n\t\t\"Content-Type\": \"text/event-stream\",\n\t\t\"Cache-Control\": \"no-cache\",\n\t\tConnection: \"keep-alive\",\n\t});\n\tres.flushHeaders();\n\tres.write(STREAM_HEARTBEAT);\n\n\tif (existingRun?.status === \"completed\") {\n\t\tfor (const event of existingRun.events) {\n\t\t\tres.write(encodeProxyEvent(event));\n\t\t}\n\t\tres.end();\n\t\treturn;\n\t}\n\n\tconst run = body.runId ? startStreamRun(body.sessionId, body.runId) : undefined;\n\n\tconst heartbeat = setInterval(() => {\n\t\tif (!res.writableEnded) {\n\t\t\tres.write(STREAM_HEARTBEAT);\n\t\t}\n\t}, STREAM_HEARTBEAT_INTERVAL_MS);\n\theartbeat.unref();\n\n\tlet stream: AsyncIterable<AssistantMessageEvent>;\n\ttry {\n\t\tstream = streamSimple(resolvedModel, context, streamOptions);\n\t} catch (err) {\n\t\tclearInterval(heartbeat);\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tfailStreamRun(run, message);\n\t\tres.write(encodeErrorEvent(message));\n\t\tres.end();\n\t\treturn;\n\t}\n\n\t(async () => {\n\t\ttry {\n\t\t\tfor await (const event of stream) {\n\t\t\t\tconst proxyEvent = toProxyEvent(event);\n\t\t\t\tif (proxyEvent) {\n\t\t\t\t\trecordStreamRunEvent(run, proxyEvent);\n\t\t\t\t\tres.write(encodeProxyEvent(proxyEvent));\n\t\t\t\t}\n\t\t\t\tif (event.type === \"done\") {\n\t\t\t\t\tcompleteStreamRun(run, event.message);\n\t\t\t\t} else if (event.type === \"error\") {\n\t\t\t\t\tfailStreamRun(run, event.error.errorMessage ?? event.reason);\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tclearInterval(heartbeat);\n\t\t}\n\n\t\tres.end();\n\t})().catch((err) => {\n\t\tclearInterval(heartbeat);\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tfailStreamRun(run, message);\n\t\tres.write(encodeErrorEvent(message));\n\t\tres.end();\n\t});\n}\n\nasync function handlePostRequest(\n\tconfig: ServerConfig,\n\tpathname: string,\n\tbody: unknown,\n\tres: ServerResponse,\n): Promise<boolean> {\n\tif (pathname === \"/api/receive\") {\n\t\ttry {\n\t\t\tsendJson(res, 200, receiveUpload(config.uploadDir, body));\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof ReceiveUploadError)) throw error;\n\t\t\tsendJson(res, error.status, { error: error.message });\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/init\") {\n\t\thandleSessionInit(config, body as SessionInitBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/update\") {\n\t\thandleSessionUpdate(config, body as SessionInitBody & { staticContext: SessionStaticContext }, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/sync\") {\n\t\thandleSessionSync(config, body as SessionSyncBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/append\") {\n\t\thandleSessionAppend(config, body as SessionAppendBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/tree/sync\") {\n\t\thandleSessionTreeSync(config, body as SessionTreeSyncBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/tree/append\") {\n\t\thandleSessionTreeAppend(config, body as SessionTreeSyncBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/tree/switch\") {\n\t\thandleSessionTreeSwitch(config, body as SessionTreeSwitchBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/drop-last-assistant-error\") {\n\t\thandleDropLastAssistantError(config, body as SessionIdBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/compact\") {\n\t\tawait handleSessionCompact(config, body as SessionCompactBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/stream\") {\n\t\thandleStream(config, body as StreamRequestBody, res);\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function createPiServer(configOverride?: Partial<ServerConfig>): HttpServer {\n\tconst config = loadConfig(configOverride);\n\tloadPersistedSessions(config.sessionStoreDir);\n\n\tconst server = createServer(async (req, res) => {\n\t\tconst url = new URL(req.url ?? \"/\", `http://${config.host}:${config.port}`);\n\n\t\tif (req.method === \"GET\" && url.pathname === \"/health\") {\n\t\t\tsendJson(res, 200, { status: \"ok\" });\n\t\t\treturn;\n\t\t}\n\n\t\tif (!authenticate(config, req)) {\n\t\t\tconst body =\n\t\t\t\treq.method === \"GET\" && url.pathname === \"/\"\n\t\t\t\t\t? { error: \"Unauthorized\", version: PI_SERVER_VERSION }\n\t\t\t\t\t: { error: \"Unauthorized\" };\n\t\t\tsendJson(res, 401, body);\n\t\t\treturn;\n\t\t}\n\n\t\tif (req.method === \"GET\" && url.pathname === \"/api/sessions\") {\n\t\t\tsendJson(res, 200, { sessions: listSessions() });\n\t\t\treturn;\n\t\t}\n\n\t\tconst runMatch = /^\\/api\\/session\\/([^/]+)\\/runs\\/([^/]+)$/.exec(url.pathname);\n\t\tif (req.method === \"GET\" && runMatch) {\n\t\t\thandleSessionRun(decodeURIComponent(runMatch[1]), decodeURIComponent(runMatch[2]), res);\n\t\t\treturn;\n\t\t}\n\n\t\tif (req.method === \"GET\" && url.pathname.startsWith(\"/api/session/\") && url.pathname.endsWith(\"/history\")) {\n\t\t\tconst encodedSessionId = url.pathname.slice(\"/api/session/\".length, -\"/history\".length);\n\t\t\tconst fromParam = url.searchParams.get(\"from\");\n\t\t\tconst from = fromParam === null ? undefined : Number(fromParam);\n\t\t\tif (from !== undefined && (!Number.isInteger(from) || from < 0)) {\n\t\t\t\tsendJson(res, 400, { error: \"from must be a non-negative integer\" });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst entriesFromParam = url.searchParams.get(\"entriesFrom\");\n\t\t\tconst entriesFrom = entriesFromParam === null ? undefined : Number(entriesFromParam);\n\t\t\tif (entriesFrom !== undefined && (!Number.isInteger(entriesFrom) || entriesFrom < 0)) {\n\t\t\t\tsendJson(res, 400, { error: \"entriesFrom must be a non-negative integer\" });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst revisionParam = url.searchParams.get(\"revision\");\n\t\t\tconst revision = revisionParam === null ? undefined : Number(revisionParam);\n\t\t\tif (revision !== undefined && (!Number.isInteger(revision) || revision < 0)) {\n\t\t\t\tsendJson(res, 400, { error: \"revision must be a non-negative integer\" });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandleSessionHistory(\n\t\t\t\tdecodeURIComponent(encodedSessionId),\n\t\t\t\tfrom,\n\t\t\t\tentriesFrom,\n\t\t\t\trevision,\n\t\t\t\turl.searchParams.get(\"baseTreeHash\") ?? undefined,\n\t\t\t\tres,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (req.method === \"POST\" && url.pathname === CHUNK_ENDPOINT) {\n\t\t\ttry {\n\t\t\t\tconst body = JSON.parse(await readBody(req)) as RequestChunkBody;\n\t\t\t\tconst chunkResult = receiveRequestChunk(body);\n\t\t\t\tif (!chunkResult.complete) {\n\t\t\t\t\tsendJson(res, 200, chunkResult.ack);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait handlePostRequest(config, chunkResult.target, JSON.parse(chunkResult.bodyJson) as unknown, res);\n\t\t\t} catch (err) {\n\t\t\t\tlogRequestError(req, err);\n\t\t\t\tif (!res.headersSent) {\n\t\t\t\t\tsendJson(res, 400, { error: err instanceof Error ? err.message : String(err) });\n\t\t\t\t} else {\n\t\t\t\t\tres.write(encodeErrorEvent(err instanceof Error ? err.message : String(err)));\n\t\t\t\t\tres.end();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (req.method === \"POST\") {\n\t\t\ttry {\n\t\t\t\tconst body = JSON.parse(await readBody(req)) as unknown;\n\t\t\t\tif (await handlePostRequest(config, url.pathname, body, res)) return;\n\t\t\t} catch (err) {\n\t\t\t\tlogRequestError(req, err);\n\t\t\t\tif (!res.headersSent) {\n\t\t\t\t\tsendJson(res, 500, { error: err instanceof Error ? err.message : String(err) });\n\t\t\t\t} else {\n\t\t\t\t\tres.write(encodeErrorEvent(err instanceof Error ? err.message : String(err)));\n\t\t\t\t\tres.end();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (req.method === \"DELETE\" && url.pathname.startsWith(\"/api/session/\")) {\n\t\t\tconst sessionId = decodeURIComponent(url.pathname.slice(\"/api/session/\".length));\n\t\t\tdeleteSessionFromStore(sessionId);\n\t\t\tdeletePersistedSession(config.sessionStoreDir, sessionId);\n\t\t\tsendJson(res, 200, { deleted: sessionId });\n\t\t\treturn;\n\t\t}\n\n\t\tsendJson(res, 404, { error: \"Not found\" });\n\t});\n\n\treturn server;\n}\n\nfunction toProxyEvent(event: AssistantMessageEvent): ProxyAssistantMessageEvent | undefined {\n\tswitch (event.type) {\n\t\tcase \"start\":\n\t\t\treturn { type: \"start\" };\n\t\tcase \"text_start\":\n\t\t\treturn { type: \"text_start\", contentIndex: event.contentIndex };\n\t\tcase \"text_delta\":\n\t\t\treturn { type: \"text_delta\", contentIndex: event.contentIndex, delta: event.delta };\n\t\tcase \"text_end\":\n\t\t\treturn {\n\t\t\t\ttype: \"text_end\",\n\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\tcontentSignature:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"text\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { textSignature?: string }).textSignature\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\tcase \"thinking_start\":\n\t\t\treturn { type: \"thinking_start\", contentIndex: event.contentIndex };\n\t\tcase \"thinking_delta\":\n\t\t\treturn { type: \"thinking_delta\", contentIndex: event.contentIndex, delta: event.delta };\n\t\tcase \"thinking_end\":\n\t\t\treturn {\n\t\t\t\ttype: \"thinking_end\",\n\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\tcontentSignature:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"thinking\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { thinkingSignature?: string }).thinkingSignature\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\tcase \"toolcall_start\":\n\t\t\treturn {\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\tid:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"toolCall\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { id: string }).id\n\t\t\t\t\t\t: \"\",\n\t\t\t\ttoolName:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"toolCall\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { name: string }).name\n\t\t\t\t\t\t: \"\",\n\t\t\t};\n\t\tcase \"toolcall_delta\":\n\t\t\treturn { type: \"toolcall_delta\", contentIndex: event.contentIndex, delta: event.delta };\n\t\tcase \"toolcall_end\":\n\t\t\treturn { type: \"toolcall_end\", contentIndex: event.contentIndex };\n\t\tcase \"done\":\n\t\t\treturn { type: \"done\", reason: event.reason, usage: event.message.usage };\n\t\tcase \"error\":\n\t\t\treturn {\n\t\t\t\ttype: \"error\",\n\t\t\t\treason: event.reason,\n\t\t\t\terrorMessage: event.error.errorMessage,\n\t\t\t\tusage: event.error.usage,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nexport function startServer(configOverride?: Partial<ServerConfig>): HttpServer {\n\tconst config = loadConfig(configOverride);\n\tconst server = createPiServer(configOverride);\n\tserver.listen(config.port, config.host, () => {\n\t\tconsole.log(`pi-server listening on ${config.host}:${config.port}`);\n\t});\n\treturn server;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { createHash, type Hash, randomUUID } from \"node:crypto\";\nimport { createServer, type Server as HttpServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { createRequire } from \"node:module\";\nimport { basename, join } from \"node:path\";\nimport {\n\ttype CompactionPreparationOptions,\n\ttype CompactionSettings,\n\ttype CompactResult,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\ttype ProxyAssistantMessageEvent,\n\tprepareCompaction,\n\ttype SessionTreeEntry,\n} from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype AssistantMessage,\n\ttype AssistantMessageEvent,\n\ttype Context,\n\tcreateModels,\n\tcreateProvider,\n\ttype Message,\n\ttype Model,\n\ttype RetryPolicy,\n\ttype SimpleStreamOptions,\n\ttype Usage,\n} from \"@earendil-works/pi-ai\";\nimport { getCompatProviderExecutionRoute, streamSimple } from \"@earendil-works/pi-ai/compat\";\nimport { hashRemoteProviderExecution } from \"@earendil-works/pi-ai/provider-execution-node\";\nimport type { ServerConfig } from \"./config.ts\";\nimport { loadConfig } from \"./config.ts\";\nimport { encodeErrorEvent, encodeProxyEvent } from \"./event-encoding.ts\";\nimport {\n\tappendPiServerTreeHash,\n\tcanonicalJsonStringify,\n\thashPiServerTreeEntry,\n\tmatchesPiServerStreamBase,\n\tPI_SERVER_EMPTY_TREE_HASH,\n\ttype PiServerSessionIdentity,\n\ttype PiServerStreamBaseIdentity,\n} from \"./pi-server-protocol.ts\";\nimport { ReceiveUploadError, receiveUpload } from \"./receive-upload.ts\";\nimport { CHUNK_ENDPOINT, type RequestChunkBody, receiveRequestChunk } from \"./request-chunks.ts\";\nimport {\n\tdeletePersistedSession,\n\tloadPersistedSessions,\n\tpreflightPersistedSession,\n\tSessionPersistenceCapacityError,\n\ttype SessionPersistenceFaultPoint,\n\tsavePersistedSession,\n} from \"./session-persistence.ts\";\nimport {\n\tapplyPiServerCompactionEntry,\n\tapplySessionMutation,\n\tclearAllSessions,\n\tconfigureSessionCapacityLimits,\n\tDEFAULT_SESSION_CAPACITY_LIMITS,\n\tdeleteSession as deleteSessionFromStore,\n\tdropLastAssistantError,\n\texportSessionState,\n\tgetOrCreateSession,\n\tgetSession,\n\tgetSessionBranch,\n\tlistSessions,\n\ttype PiServerCompactionEntry,\n\ttype PiServerCompactionOperationMetadata,\n\tpreflightSessionCapacityMutation,\n\tresetSessionCapacityLimits,\n\trestoreSessionState,\n\tSessionCapacityError,\n\ttype SessionState,\n\ttype SessionStaticContext,\n\tswitchSessionLeaf,\n} from \"./session-store.ts\";\nimport {\n\tStreamRunConflictError,\n\tStreamRunCorruptionError,\n\tStreamRunNotFoundError,\n\tStreamRunPersistence,\n\ttype StreamRunPersistenceFaultPoint,\n\tStreamRunPersistenceTimeoutError,\n\tStreamRunQuotaError,\n\ttype StreamRunState,\n\tStreamRunStateError,\n\tStreamRunStoreLockedError,\n} from \"./stream-run-persistence.ts\";\n\nexport { loadConfig, type ServerConfig } from \"./config.ts\";\n\ninterface PackageMetadata {\n\tversion: string;\n}\n\nconst packageMetadata = createRequire(import.meta.url)(\"../package.json\") as PackageMetadata;\nconst PI_SERVER_VERSION = packageMetadata.version;\nconst PI_SERVER_PROTOCOL_VERSION = 2;\n\ninterface SessionInitBody {\n\tsessionId: string;\n\tstaticContext?: SessionStaticContext;\n\tstaticContextHash?: string;\n}\n\ninterface StreamRequestBody {\n\tsessionId: string;\n\trunId?: string;\n\teventCursor?: number;\n\trunMode?: \"main-durable\" | \"auxiliary-transient\";\n\tproviderExecutionFingerprint?: string;\n\tbaseStaticContextHash?: string;\n\tbaseRevision?: number;\n\tbaseTreeHash?: string;\n\tbaseEntryCount?: number;\n\tbaseLeafId?: string | null;\n\tmodel: Model<any>;\n\toptions?: SimpleStreamOptions;\n\tstaticContext?: SessionStaticContext;\n\tephemeralMessages?: Message[];\n\tcontextOverlay?: Message[];\n}\n\ninterface SessionSyncBody {\n\tsessionId: string;\n\tmessages: Message[];\n\tstaticContext?: SessionStaticContext;\n}\n\ninterface SessionAppendBody {\n\tsessionId: string;\n\tmessages: Message[];\n\tstaticContext?: SessionStaticContext;\n}\n\ninterface SessionTreeSyncBody {\n\tsessionId: string;\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\tstaticContext?: SessionStaticContext;\n}\n\ninterface SessionTreeSwitchBody {\n\tsessionId: string;\n\tleafId: string | null;\n}\n\ninterface SessionCompactBody {\n\tprotocolVersion: number;\n\tsessionId: string;\n\tproviderExecutionFingerprint?: string;\n\tmodel: Model<any>;\n\toptions?: SimpleStreamOptions;\n\tsettings?: CompactionSettings;\n\tpreparation?: CompactionPreparationOptions;\n\textensionCompaction?: CompactResult;\n\tcustomInstructions?: string;\n\tbaseStaticContextHash: string;\n\tbaseTreeHash: string;\n\tbaseEntryCount: number;\n\tbaseLeafId: string | null;\n\tbaseRevision: number;\n\tstreamResponse: boolean;\n\toperationId: string;\n\tretry?: RetryPolicy;\n}\n\nfunction createRequestModels(model: Model<any>, options: SimpleStreamOptions) {\n\tconst models = createModels();\n\tconst streamWithRequestOptions = (requestModel: Model<any>, context: Context, streamOptions: SimpleStreamOptions) =>\n\t\tstreamSimple(requestModel, context, { ...options, ...streamOptions });\n\tmodels.setProvider(\n\t\tcreateProvider({\n\t\t\tid: model.provider,\n\t\t\tname: model.provider,\n\t\t\tmodels: [model],\n\t\t\tauth: {\n\t\t\t\tapiKey: {\n\t\t\t\t\tname: \"pi-server request auth\",\n\t\t\t\t\tresolve: async () => ({\n\t\t\t\t\t\tauth: { apiKey: options.apiKey, headers: options.headers },\n\t\t\t\t\t\tenv: options.env,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t},\n\t\t\tapi: {\n\t\t\t\tstream: streamWithRequestOptions,\n\t\t\t\tstreamSimple: streamWithRequestOptions,\n\t\t\t},\n\t\t}),\n\t);\n\treturn models;\n}\n\ninterface SessionIdBody {\n\tsessionId: string;\n}\n\ninterface StreamRunRecord {\n\tsessionId: string;\n\trunId?: string;\n\tstorageRunId: string;\n\trequestHash: string;\n\tstatus: \"running\" | \"completed\" | \"failed\";\n\tnextSeq: number;\n\tmessage?: AssistantMessage;\n\terrorMessage?: string;\n\tmodel: ResolvedStream[\"model\"];\n\tcontentDeltas: Map<number, { type: \"text\" | \"thinking\"; hash: Hash; bytes: number }>;\n\tabortController: AbortController;\n\tsubscribers: Map<ServerResponse, StreamRunSubscriber>;\n\tproviderFailureLogged: boolean;\n\tpersistenceFailureLogged: boolean;\n\tpendingEvents: string[];\n\tpendingEventBytes: number;\n\tflushTimer?: ReturnType<typeof setTimeout>;\n\tflushPromise?: Promise<void>;\n\tpersistenceError?: Error;\n\tterminalPromise?: Promise<void>;\n\tshuttingDown: boolean;\n}\n\ninterface StreamRunSubscriber {\n\theartbeat?: ReturnType<typeof setInterval>;\n\theartbeatWrite?: Promise<void>;\n\tonClose: () => void;\n\tabortController: AbortController;\n\tcursor: number;\n\tflushing: boolean;\n\tflushAgain: boolean;\n\tpump?: Promise<void>;\n}\n\ninterface StreamRunRuntime {\n\tstore: StreamRunPersistence;\n\tactiveRuns: Map<string, StreamRunRecord>;\n\tsetupQueue: Promise<void>;\n\tsubscriberPumps: Map<string, Set<Promise<void>>>;\n\treplayReaders: Map<string, Set<StreamRunReplay>>;\n\tdrainIdleTimeoutMs: number;\n\tfatalPersistenceError?: Error;\n\tonFatalPersistenceError?: (error: Error) => void;\n\tclosing: boolean;\n}\n\ninterface StreamRunReplay {\n\trunId: string;\n\tresponse: ServerResponse;\n\tabortController: AbortController;\n\tpromise?: Promise<void>;\n}\n\ninterface CompactRunRecord {\n\tsessionId: string;\n\toperationId: string;\n\trequestHash: string;\n\tstatus: \"running\" | \"settled\";\n\tresult?: SessionCompactHttpResponse;\n\tpromise: Promise<SessionCompactHttpResponse>;\n\tabortController: AbortController;\n\tsubscribers: Set<ServerResponse>;\n\tsettlement?: Promise<SessionCompactHttpResponse>;\n\tresolveTerminal?: (response: SessionCompactHttpResponse) => void;\n\trejectTerminal?: (error: unknown) => void;\n}\n\ninterface CompactRunRuntime {\n\tstore: StreamRunPersistence;\n\tactiveRuns: Map<string, CompactRunRecord>;\n\tsetupQueue: Promise<void>;\n\tdrainIdleTimeoutMs: number;\n\tfatalPersistenceError?: Error;\n\tonFatalPersistenceError?: (error: Error) => void;\n\tclosing: boolean;\n}\n\ninterface SessionMutationRuntime {\n\tqueues: Map<string, Promise<void>>;\n}\n\ninterface ServerPersistenceRuntime {\n\tfatalError?: Error;\n\tstreamRuntime?: StreamRunRuntime;\n\tcompactRuntime?: CompactRunRuntime;\n\tonFatalPersistenceError?: (error: Error) => void;\n\tsessionFaultInjector?: (point: SessionPersistenceFaultPoint) => void;\n}\n\ninterface CompactBaseIdentity {\n\tstaticContextHash: string;\n\ttreeHash: string;\n\tentryCount: number;\n\tleafId: string | null;\n\trevision: number;\n}\n\ninterface CompactionCommitPlan {\n\tbase: CompactBaseIdentity;\n\tentry: PiServerCompactionEntry;\n\tupdatedTreeHash: string;\n\tupdatedRevision: number;\n}\n\ninterface CompactTerminalPlan {\n\tversion: 1;\n\tsessionId: string;\n\toperationId: string;\n\trequestHash: string;\n\tresponse: SessionCompactHttpResponse;\n\tcommit?: CompactionCommitPlan;\n}\n\ninterface CapturedJsonResponse {\n\tstatus: number;\n\tbodyJson: string;\n}\n\ninterface ChunkTargetResponseRecord extends CapturedJsonResponse {\n\tcreatedAt: number;\n\tbytes: number;\n}\n\nconst jsonResponseCaptures = new WeakMap<ServerResponse, (response: CapturedJsonResponse) => void>();\nconst serverInitializations = new WeakMap<HttpServer, Promise<void>>();\nlet sessionCapacityMutationQueue: Promise<void> = Promise.resolve();\nlet piServerOwner: symbol | undefined;\nlet activeServerPersistenceRuntime: ServerPersistenceRuntime | undefined;\n\nconst STREAM_HEARTBEAT = \": keep-alive\\n\\n\";\nconst JSON_HEARTBEAT = \" \\n\";\nconst STREAM_HEARTBEAT_INTERVAL_MS = 25_000;\nconst STREAM_RUN_CLEANUP_INTERVAL_MS = 60_000;\nconst STREAM_RUN_MAX_RECORDS = 256;\nconst STREAM_RUN_MAX_SUBSCRIBERS = 8;\nconst STREAM_RUN_ERROR_LOG_CHARS = 1000;\nconst STREAM_RUN_BATCH_MAX_EVENTS = 64;\nconst STREAM_RUN_BATCH_MAX_BYTES = 64 * 1024;\nconst STREAM_RUN_BATCH_DELAY_MS = 12;\nconst STREAM_RUN_RESTART_ERROR_MESSAGE = \"restart-unknown\";\nconst STREAM_RUN_MAX_FRAME_BYTES = 256 * 1024 * 1024;\nconst STREAM_RUN_MAX_BYTES = 8 * 1024 * 1024 * 1024;\nconst STREAM_RUN_MAX_TOTAL_BYTES = 8 * 1024 * 1024 * 1024;\nconst STREAM_RUN_TERMINAL_RESERVE_BYTES = 64 * 1024 * 1024;\nexport const DEFAULT_STREAM_DRAIN_IDLE_TIMEOUT_MS = 90_000;\nconst CHUNK_ACK_HEADER = \"X-Pi-Chunk-Ack\";\nconst COMPACT_RUN_MAX_RECORDS = 32;\nconst COMPACT_RUN_MAX_FRAME_BYTES = 64 * 1024 * 1024;\nconst COMPACT_RUN_MAX_BYTES = 128 * 1024 * 1024;\nconst COMPACT_RUN_MAX_TOTAL_BYTES = 1024 * 1024 * 1024;\nconst COMPACT_RUN_TERMINAL_RESERVE_BYTES = 64 * 1024 * 1024;\nconst COMPACT_RUN_MAX_SUBSCRIBERS = 8;\nconst REQUEST_BODY_MAX_BYTES = 2 * 1024 * 1024;\nconst REQUEST_BODY_NO_PROGRESS_TIMEOUT_MS = 90_000;\nconst HEADERS_TIMEOUT_MS = 15_000;\nconst CHUNK_TARGET_RESPONSE_TTL_MS = 60_000;\nconst CHUNK_TARGET_RESPONSE_MAX_RECORDS = 128;\nconst CHUNK_TARGET_RESPONSE_MAX_BYTES = 16 * 1024 * 1024;\nconst FATAL_SHUTDOWN_GRACE_MS = 10_000;\n\nclass RequestBodyTooLargeError extends Error {\n\treadonly statusCode = 413;\n}\n\nclass RequestBodyIncompleteError extends Error {\n\treadonly statusCode = 400;\n}\n\nclass RequestBodyNoProgressError extends Error {\n\treadonly statusCode = 408;\n}\n\nclass ServerPersistenceUnavailableError extends Error {\n\treadonly statusCode = 503;\n\n\tconstructor() {\n\t\tsuper(\"pi-server durable persistence is unavailable\");\n\t\tthis.name = \"ServerPersistenceUnavailableError\";\n\t}\n}\n\nexport type PiServerOptions = Partial<ServerConfig> & {\n\tstreamDrainIdleTimeoutMs?: number;\n\tstreamRunMaxFrameBytes?: number;\n\tstreamRunMaxBytes?: number;\n\tstreamRunMaxTotalBytes?: number;\n\tstreamRunTerminalReserveBytes?: number;\n\tstreamRunIoNoProgressTimeoutMs?: number;\n\tstreamRunFaultInjector?: (point: StreamRunPersistenceFaultPoint) => void | Promise<void>;\n\tcompactRunMaxBytes?: number;\n\tcompactRunMaxTotalBytes?: number;\n\tcompactRunTerminalReserveBytes?: number;\n\tcompactRunIoNoProgressTimeoutMs?: number;\n\tcompactRunFaultInjector?: (point: StreamRunPersistenceFaultPoint) => void | Promise<void>;\n\trequestBodyNoProgressTimeoutMs?: number;\n\tsessionMaxEntries?: number;\n\tsessionMaxLogicalBytes?: number;\n\tsessionsMaxEntries?: number;\n\tsessionsMaxLogicalBytes?: number;\n\tmaxLoadedSessions?: number;\n\tsessionPersistenceFaultInjector?: (point: SessionPersistenceFaultPoint) => void;\n\tsessionPersistenceDelete?: typeof deletePersistedSession;\n\tonFatalStreamPersistenceError?: (error: Error) => void;\n\tfatalShutdownGraceMs?: number;\n\tfatalExit?: (code: number) => void;\n};\n\nfunction positiveServerOption(\n\tvalue: number | undefined,\n\tenvironmentVariable: string,\n\tfallback: number,\n\tlabel: string,\n): number {\n\tconst environmentValue = process.env[environmentVariable];\n\tconst resolved = value ?? (environmentValue === undefined ? fallback : Number(environmentValue));\n\tif (!Number.isSafeInteger(resolved) || resolved <= 0) {\n\t\tthrow new Error(`${label} (${environmentVariable}) must be a positive safe integer`);\n\t}\n\treturn resolved;\n}\n\nfunction acquirePiServerOwnership(): symbol {\n\tif (piServerOwner) {\n\t\tthrow new Error(\n\t\t\t\"pi-server already owns the process-wide session store; close the existing server before creating another\",\n\t\t);\n\t}\n\tconst owner = Symbol(\"pi-server-owner\");\n\tpiServerOwner = owner;\n\tclearAllSessions();\n\tresetSessionCapacityLimits();\n\tsessionCapacityMutationQueue = Promise.resolve();\n\treturn owner;\n}\n\nfunction releasePiServerOwnership(owner: symbol): void {\n\tif (piServerOwner !== owner) return;\n\tclearAllSessions();\n\tresetSessionCapacityLimits();\n\tsessionCapacityMutationQueue = Promise.resolve();\n\tactiveServerPersistenceRuntime = undefined;\n\tpiServerOwner = undefined;\n}\n\nfunction assertServerPersistenceHealthy(): void {\n\tif (activeServerPersistenceRuntime?.fatalError) {\n\t\tthrow new ServerPersistenceUnavailableError();\n\t}\n}\n\nexport function readBody(\n\treq: IncomingMessage,\n\tmaxBytes = REQUEST_BODY_MAX_BYTES,\n\tnoProgressTimeoutMs = REQUEST_BODY_NO_PROGRESS_TIMEOUT_MS,\n): Promise<string> {\n\tif (!Number.isSafeInteger(noProgressTimeoutMs) || noProgressTimeoutMs <= 0) {\n\t\tthrow new Error(\"request body no-progress timeout must be a positive safe integer\");\n\t}\n\treturn new Promise((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet noProgressTimer: ReturnType<typeof setTimeout> | undefined;\n\t\tconst chunks: Buffer[] = [];\n\t\tlet receivedBytes = 0;\n\n\t\tconst cleanup = () => {\n\t\t\treq.off(\"data\", onData);\n\t\t\treq.off(\"end\", onEnd);\n\t\t\treq.off(\"error\", onError);\n\t\t\treq.off(\"aborted\", onAborted);\n\t\t\treq.off(\"close\", onClose);\n\t\t\tif (noProgressTimer) clearTimeout(noProgressTimer);\n\t\t};\n\t\tconst finish = (error?: Error) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tif (error) {\n\t\t\t\tchunks.length = 0;\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(Buffer.concat(chunks).toString(\"utf-8\"));\n\t\t};\n\t\tconst armNoProgressTimer = () => {\n\t\t\tif (noProgressTimer) clearTimeout(noProgressTimer);\n\t\t\tnoProgressTimer = setTimeout(() => {\n\t\t\t\tfinish(new RequestBodyNoProgressError(`Request body made no progress for ${noProgressTimeoutMs}ms`));\n\t\t\t\treq.resume();\n\t\t\t}, noProgressTimeoutMs);\n\t\t\tnoProgressTimer.unref();\n\t\t};\n\t\tconst onData = (chunk: Buffer) => {\n\t\t\tif (settled) return;\n\t\t\tif (chunk.byteLength === 0) return;\n\t\t\tarmNoProgressTimer();\n\t\t\treceivedBytes += chunk.byteLength;\n\t\t\tif (receivedBytes > maxBytes) {\n\t\t\t\tfinish(new RequestBodyTooLargeError(`Request body exceeds ${maxBytes} bytes`));\n\t\t\t\treq.resume();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tchunks.push(chunk);\n\t\t};\n\t\tconst onEnd = () => finish();\n\t\tconst onError = (error: Error) => finish(error);\n\t\tconst onAborted = () => finish(new RequestBodyIncompleteError(\"Request body was aborted before completion\"));\n\t\tconst onClose = () => finish(new RequestBodyIncompleteError(\"Request closed before body completion\"));\n\n\t\treq.on(\"data\", onData);\n\t\treq.once(\"end\", onEnd);\n\t\treq.once(\"error\", onError);\n\t\treq.once(\"aborted\", onAborted);\n\t\treq.once(\"close\", onClose);\n\t\tarmNoProgressTimer();\n\t\tif (req.aborted) {\n\t\t\tonAborted();\n\t\t\treturn;\n\t\t}\n\t\tif (req.destroyed && !req.complete) {\n\t\t\tonClose();\n\t\t\treturn;\n\t\t}\n\n\t\tconst contentLength = Number(req.headers[\"content-length\"]);\n\t\tif (Number.isFinite(contentLength) && contentLength > maxBytes) {\n\t\t\tfinish(new RequestBodyTooLargeError(`Request body exceeds ${maxBytes} bytes`));\n\t\t\treq.resume();\n\t\t}\n\t});\n}\n\nfunction requestErrorStatus(error: unknown, defaultStatus: number): number {\n\tif (error instanceof RequestBodyTooLargeError) return error.statusCode;\n\tif (error instanceof RequestBodyIncompleteError) return error.statusCode;\n\tif (error instanceof RequestBodyNoProgressError) return error.statusCode;\n\tif (error instanceof ServerPersistenceUnavailableError) return error.statusCode;\n\tif (error instanceof SessionCapacityError || error instanceof SessionPersistenceCapacityError) return 507;\n\tif (error instanceof StreamRunNotFoundError) return 404;\n\tif (error instanceof StreamRunConflictError || error instanceof StreamRunStateError) return 409;\n\tif (error instanceof StreamRunQuotaError || error instanceof StreamRunStoreLockedError) return 503;\n\treturn defaultStatus;\n}\n\nfunction requestErrorBody(error: unknown): Record<string, unknown> {\n\tif (error instanceof SessionPersistenceCapacityError) {\n\t\treturn {\n\t\t\terror: `Persisted session capacity exceeded: resource=${error.resource}, session=${error.sessionId}, requested=${error.requested}, limit=${error.limit}`,\n\t\t\tcode: error.code,\n\t\t\tresource: error.resource,\n\t\t\tsessionId: error.sessionId,\n\t\t\tcurrent: error.current,\n\t\t\trequested: error.requested,\n\t\t\tlimit: error.limit,\n\t\t\tretryable: error.retryable,\n\t\t\tartifact: basename(error.path),\n\t\t};\n\t}\n\tif (error instanceof SessionCapacityError) {\n\t\treturn {\n\t\t\terror: error.message,\n\t\t\tcode: error.code,\n\t\t\tresource: error.resource,\n\t\t\tsessionId: error.sessionId,\n\t\t\tcurrent: error.current,\n\t\t\trequested: error.requested,\n\t\t\tlimit: error.limit,\n\t\t\tretryable: error.retryable,\n\t\t};\n\t}\n\treturn { error: error instanceof Error ? error.message : String(error) };\n}\n\nfunction sendJson(res: ServerResponse, status: number, body: unknown): void {\n\tconst data = JSON.stringify(body);\n\tconst capture = jsonResponseCaptures.get(res);\n\tif (capture) {\n\t\tjsonResponseCaptures.delete(res);\n\t\tcapture({ status, bodyJson: data });\n\t}\n\tres.writeHead(status, { \"Content-Type\": \"application/json\", \"Content-Length\": Buffer.byteLength(data) });\n\tres.end(data);\n}\n\nfunction sendCapturedJson(res: ServerResponse, response: CapturedJsonResponse): void {\n\tconst data = response.bodyJson;\n\tres.writeHead(response.status, { \"Content-Type\": \"application/json\", \"Content-Length\": Buffer.byteLength(data) });\n\tres.end(data);\n}\n\nfunction logRequestError(req: IncomingMessage, error: unknown): void {\n\tif (error instanceof SessionCapacityError || error instanceof SessionPersistenceCapacityError) return;\n\tif (error instanceof ServerPersistenceUnavailableError) return;\n\tconst message = error instanceof Error ? error.stack || error.message : String(error);\n\tconsole.error(`${req.method ?? \"UNKNOWN\"} ${req.url ?? \"/\"} failed: ${message}`);\n}\n\nfunction authenticate(config: ServerConfig, req: IncomingMessage): boolean {\n\tif (!config.authToken) return true;\n\tconst header = req.headers.authorization;\n\tif (!header) return false;\n\tconst token = header.startsWith(\"Bearer \") ? header.slice(7) : header;\n\treturn token === config.authToken;\n}\n\ninterface ResolvedStream {\n\tmodel: Model<any>;\n\toptions: SimpleStreamOptions;\n}\n\nfunction sessionResponseBody(session: SessionState) {\n\treturn {\n\t\tprotocolVersion: PI_SERVER_PROTOCOL_VERSION,\n\t\tsessionId: session.sessionId,\n\t\tstaticContextHash: session.staticContextHash,\n\t\ttreeHash: session.treeHash,\n\t\tmessageCount: session.messages.length,\n\t\tentryCount: session.entries.length,\n\t\tleafId: session.leafId,\n\t\trevision: session.revision,\n\t};\n}\n\nfunction sessionHistoryV2Summary(session: SessionState) {\n\treturn {\n\t\tprotocolVersion: PI_SERVER_PROTOCOL_VERSION,\n\t\tsessionId: session.sessionId,\n\t\tstaticContextHash: session.staticContextHash,\n\t\ttreeHash: session.treeHash,\n\t\tmessageCount: session.messages.length,\n\t\tentryCount: session.entries.length,\n\t\tleafId: session.leafId,\n\t\trevision: session.revision,\n\t};\n}\n\nfunction currentServerPersistenceRuntime(): ServerPersistenceRuntime {\n\tconst runtime = activeServerPersistenceRuntime;\n\tif (!runtime) {\n\t\tthrow new ServerPersistenceUnavailableError();\n\t}\n\treturn runtime;\n}\n\nfunction persistSession(config: ServerConfig, session: SessionState): void {\n\tconst runtime = currentServerPersistenceRuntime();\n\ttry {\n\t\tsavePersistedSession(config.sessionStoreDir, session, {\n\t\t\tfaultInjector: runtime.sessionFaultInjector,\n\t\t});\n\t} catch (error) {\n\t\tif (!(error instanceof SessionPersistenceCapacityError)) {\n\t\t\tfailStopServerPersistence(runtime, error);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction mutateAndPersistSession(config: ServerConfig, sessionId: string, mutate: () => SessionState): SessionState {\n\tconst runtime = currentServerPersistenceRuntime();\n\tconst previous = getSession(sessionId);\n\tconst previousState = previous ? exportSessionState(previous) : undefined;\n\tconst session = mutate();\n\ttry {\n\t\tpersistSession(config, session);\n\t\treturn session;\n\t} catch (error) {\n\t\tif (!(error instanceof SessionPersistenceCapacityError)) throw error;\n\t\ttry {\n\t\t\tif (previousState) {\n\t\t\t\trestoreSessionState(previousState);\n\t\t\t} else {\n\t\t\t\tdeleteSessionFromStore(sessionId);\n\t\t\t}\n\t\t} catch (rollbackError) {\n\t\t\tconst failure = new AggregateError(\n\t\t\t\t[error, rollbackError],\n\t\t\t\t`Failed to restore session ${sessionId} after persistence capacity rejection`,\n\t\t\t);\n\t\t\tfailStopServerPersistence(runtime, failure);\n\t\t\tthrow failure;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction runKey(sessionId: string, runId: string): string {\n\treturn `${sessionId}\\0${runId}`;\n}\n\nfunction hashStreamRequest(body: StreamRequestBody): string {\n\tconst serialized = canonicalJsonStringify({\n\t\tsessionId: body.sessionId,\n\t\trunMode: body.runMode,\n\t\tbaseStaticContextHash: body.baseStaticContextHash,\n\t\tbaseRevision: body.baseRevision,\n\t\tbaseTreeHash: body.baseTreeHash,\n\t\tbaseEntryCount: body.baseEntryCount,\n\t\tbaseLeafId: body.baseLeafId,\n\t\tmodel: body.model,\n\t\toptions: body.options,\n\t\tproviderExecutionFingerprint: body.providerExecutionFingerprint,\n\t\tstaticContext: body.staticContext,\n\t\tephemeralMessages: body.ephemeralMessages,\n\t\tcontextOverlay: body.contextOverlay,\n\t});\n\tif (serialized === undefined) {\n\t\tthrow new Error(\"Failed to serialize pi-server stream request\");\n\t}\n\treturn createHash(\"sha256\").update(serialized).digest(\"hex\");\n}\n\nfunction sessionIdentity(session: SessionState): PiServerSessionIdentity {\n\treturn {\n\t\tstaticContextHash: session.staticContextHash,\n\t\ttreeHash: session.treeHash,\n\t\tentryCount: session.entries.length,\n\t\tleafId: session.leafId,\n\t\trevision: session.revision,\n\t};\n}\n\nfunction streamBaseIdentity(session: SessionState): PiServerStreamBaseIdentity {\n\treturn {\n\t\tbaseStaticContextHash: session.staticContextHash,\n\t\tbaseTreeHash: session.treeHash,\n\t\tbaseEntryCount: session.entries.length,\n\t\tbaseLeafId: session.leafId,\n\t\tbaseRevision: session.revision,\n\t};\n}\n\nfunction hashCompactRequest(body: SessionCompactBody): string {\n\tconst serialized = canonicalJsonStringify({\n\t\tprotocolVersion: body.protocolVersion,\n\t\tsessionId: body.sessionId,\n\t\tproviderExecutionFingerprint: body.providerExecutionFingerprint,\n\t\tmodel: body.model,\n\t\toptions: body.options,\n\t\tsettings: body.settings,\n\t\tpreparation: body.preparation,\n\t\textensionCompaction: body.extensionCompaction,\n\t\tcustomInstructions: body.customInstructions,\n\t\tbaseStaticContextHash: body.baseStaticContextHash,\n\t\tbaseTreeHash: body.baseTreeHash,\n\t\tbaseEntryCount: body.baseEntryCount,\n\t\tbaseLeafId: body.baseLeafId,\n\t\tbaseRevision: body.baseRevision,\n\t\tstreamResponse: body.streamResponse,\n\t\tretry: body.retry,\n\t});\n\tif (serialized === undefined) {\n\t\tthrow new Error(\"Failed to serialize pi-server compaction request\");\n\t}\n\treturn createHash(\"sha256\").update(serialized).digest(\"hex\");\n}\n\nfunction providerExecutionParityError(\n\tmodel: Model<any> | undefined,\n\tfingerprint: string | undefined,\n): string | undefined {\n\tif (!model) return \"model is required before provider execution parity can be verified\";\n\tif (typeof fingerprint !== \"string\" || !/^[a-f0-9]{64}$/u.test(fingerprint)) {\n\t\treturn (\n\t\t\t`providerExecutionFingerprint is required for ${model.provider}/${model.id}; ` +\n\t\t\t\"upgrade pi-client and pi-server together\"\n\t\t);\n\t}\n\tconst route = getCompatProviderExecutionRoute(model);\n\tif (route.kind !== \"builtin_provider\" && route.kind !== \"builtin_api\") {\n\t\treturn (\n\t\t\t`pi-server cannot preserve provider execution parity for ${model.provider}/${model.id}: ` +\n\t\t\t`server route is ${route.kind}; upgrade matching runtimes or use plain pi`\n\t\t);\n\t}\n\tconst expected = hashRemoteProviderExecution(model, route);\n\tif (fingerprint !== expected) {\n\t\treturn (\n\t\t\t`provider execution fingerprint mismatch for ${model.provider}/${model.id}; ` +\n\t\t\t\"pi-client/pi-server runtime versions or provider routes differ, so execution was rejected\"\n\t\t);\n\t}\n\treturn undefined;\n}\n\nfunction createStreamErrorEvent(\n\terrorMessage: string,\n\treason: \"aborted\" | \"error\" = \"error\",\n): Extract<ProxyAssistantMessageEvent, { type: \"error\" }> {\n\treturn {\n\t\ttype: \"error\",\n\t\treason,\n\t\terrorMessage,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t};\n}\n\nfunction createRestartFailureTerminal(identity: { sessionId: string; runId: string; requestMac: string }): {\n\tevent: string;\n\tresult: AssistantMessage;\n\terrorMessage: string;\n} {\n\tconst result: AssistantMessage = {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: \"openai-responses\",\n\t\tprovider: \"pi-server\",\n\t\tmodel: STREAM_RUN_RESTART_ERROR_MESSAGE,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"error\",\n\t\terrorMessage: STREAM_RUN_RESTART_ERROR_MESSAGE,\n\t\ttimestamp: Date.now(),\n\t\tdiagnostics: [\n\t\t\t{\n\t\t\t\ttype: \"pi_server_run\",\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tdetails: {\n\t\t\t\t\tsessionId: identity.sessionId,\n\t\t\t\t\trunId: identity.runId,\n\t\t\t\t\trequestMac: identity.requestMac,\n\t\t\t\t\trestartUnknown: true,\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n\treturn {\n\t\tevent: encodeProxyEvent({\n\t\t\ttype: \"error\",\n\t\t\treason: \"error\",\n\t\t\terrorMessage: result.errorMessage,\n\t\t\tusage: result.usage,\n\t\t\tdiagnostics: result.diagnostics,\n\t\t\tapi: result.api,\n\t\t\tprovider: result.provider,\n\t\t\tmodel: result.model,\n\t\t\ttimestamp: result.timestamp,\n\t\t}),\n\t\tresult,\n\t\terrorMessage: STREAM_RUN_RESTART_ERROR_MESSAGE,\n\t};\n}\n\nfunction clearStreamRunFlushTimer(run: StreamRunRecord): void {\n\tif (!run.flushTimer) return;\n\tclearTimeout(run.flushTimer);\n\trun.flushTimer = undefined;\n}\n\nfunction releaseTerminalStreamRun(runtime: StreamRunRuntime, run: StreamRunRecord): void {\n\tif (run.status === \"running\" || run.subscribers.size > 0) return;\n\truntime.activeRuns.delete(runKey(run.sessionId, run.storageRunId));\n}\n\nfunction detachStreamRunSubscriber(runtime: StreamRunRuntime, run: StreamRunRecord, res: ServerResponse): void {\n\tconst subscriber = run.subscribers.get(res);\n\tif (!subscriber) return;\n\tif (subscriber.heartbeat) {\n\t\tclearInterval(subscriber.heartbeat);\n\t}\n\tsubscriber.abortController.abort();\n\tres.off(\"close\", subscriber.onClose);\n\trun.subscribers.delete(res);\n\treleaseTerminalStreamRun(runtime, run);\n}\n\nexport function waitForStreamDrain(\n\tres: ServerResponse,\n\tidleTimeoutMs = DEFAULT_STREAM_DRAIN_IDLE_TIMEOUT_MS,\n): Promise<boolean> {\n\tif (!Number.isSafeInteger(idleTimeoutMs) || idleTimeoutMs <= 0) {\n\t\tthrow new Error(\"stream drain idle timeout must be a positive safe integer\");\n\t}\n\treturn new Promise((resolve) => {\n\t\tif (res.destroyed || res.writableEnded) {\n\t\t\tresolve(false);\n\t\t\treturn;\n\t\t}\n\t\tlet settled = false;\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tconst cleanup = () => {\n\t\t\tres.off(\"drain\", onDrain);\n\t\t\tres.off(\"close\", onClose);\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t};\n\t\tconst finish = (drained: boolean) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tresolve(drained);\n\t\t};\n\t\tconst onDrain = () => finish(true);\n\t\tconst onClose = () => finish(false);\n\t\tres.once(\"drain\", onDrain);\n\t\tres.once(\"close\", onClose);\n\t\ttimeout = setTimeout(() => finish(false), idleTimeoutMs);\n\t\ttimeout.unref();\n\t\tif (res.destroyed || res.writableEnded) {\n\t\t\tonClose();\n\t\t}\n\t});\n}\n\nasync function writeWithStreamDrain(res: ServerResponse, data: string, idleTimeoutMs: number): Promise<boolean> {\n\tif (res.destroyed || res.writableEnded) return false;\n\ttry {\n\t\tif (res.writableNeedDrain && !(await waitForStreamDrain(res, idleTimeoutMs))) return false;\n\t\tif (res.destroyed || res.writableEnded) return false;\n\t\tif (res.write(data)) return true;\n\t\treturn waitForStreamDrain(res, idleTimeoutMs);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction messageFromDurableState(state: StreamRunState): AssistantMessage | undefined {\n\tconst result = state.terminal?.result;\n\tif (typeof result !== \"object\" || result === null || !(\"role\" in result) || result.role !== \"assistant\") {\n\t\treturn undefined;\n\t}\n\treturn result as AssistantMessage;\n}\n\nfunction applyDurableState(run: StreamRunRecord, state: StreamRunState): void {\n\trun.status = state.status;\n\trun.nextSeq = state.nextSeq;\n\trun.message = messageFromDurableState(state);\n\trun.errorMessage = state.terminal?.errorMessage;\n}\n\nasync function pumpStreamRunSubscriber(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\tres: ServerResponse,\n\tsubscriber: StreamRunSubscriber,\n): Promise<void> {\n\ttry {\n\t\tdo {\n\t\t\tsubscriber.flushAgain = false;\n\t\t\tfor await (const frame of runtime.store.iterateEvents(\n\t\t\t\trun.sessionId,\n\t\t\t\trun.storageRunId,\n\t\t\t\tsubscriber.cursor,\n\t\t\t\tsubscriber.abortController.signal,\n\t\t\t)) {\n\t\t\t\tif (run.subscribers.get(res) !== subscriber || res.destroyed || res.writableEnded) return;\n\t\t\t\tsubscriber.cursor = frame.seq + 1;\n\t\t\t\tif (!res.write(frame.event) && !(await waitForStreamDrain(res, runtime.drainIdleTimeoutMs))) {\n\t\t\t\t\tdetachStreamRunSubscriber(runtime, run, res);\n\t\t\t\t\tif (!res.destroyed) res.destroy();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tsubscriber.abortController.signal.aborted ||\n\t\t\t\trun.subscribers.get(res) !== subscriber ||\n\t\t\t\tres.destroyed ||\n\t\t\t\tres.writableEnded\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst state = await runtime.store.get(run.sessionId, run.storageRunId);\n\t\t\tif (!state) {\n\t\t\t\tthrow new StreamRunNotFoundError(run.sessionId, run.storageRunId);\n\t\t\t}\n\t\t\tapplyDurableState(run, state);\n\t\t\tif (run.status !== \"running\" && subscriber.cursor >= run.nextSeq) {\n\t\t\t\tdetachStreamRunSubscriber(runtime, run, res);\n\t\t\t\tif (!res.destroyed && !res.writableEnded) res.end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (subscriber.cursor < run.nextSeq) subscriber.flushAgain = true;\n\t\t} while (subscriber.flushAgain);\n\t} catch {\n\t\tdetachStreamRunSubscriber(runtime, run, res);\n\t\tif (!res.destroyed) res.destroy();\n\t}\n}\n\nfunction addSessionSubscriberPump(runtime: StreamRunRuntime, sessionId: string, pump: Promise<void>): void {\n\tlet pumps = runtime.subscriberPumps.get(sessionId);\n\tif (!pumps) {\n\t\tpumps = new Set();\n\t\truntime.subscriberPumps.set(sessionId, pumps);\n\t}\n\tpumps.add(pump);\n}\n\nfunction removeSessionSubscriberPump(runtime: StreamRunRuntime, sessionId: string, pump: Promise<void>): void {\n\tconst pumps = runtime.subscriberPumps.get(sessionId);\n\tif (!pumps) return;\n\tpumps.delete(pump);\n\tif (pumps.size === 0) runtime.subscriberPumps.delete(sessionId);\n}\n\nfunction startStreamRunSubscriberPump(runtime: StreamRunRuntime, run: StreamRunRecord, res: ServerResponse): void {\n\tconst subscriber = run.subscribers.get(res);\n\tif (!subscriber || res.destroyed || res.writableEnded) return;\n\tif (subscriber.heartbeatWrite) {\n\t\tsubscriber.flushAgain = true;\n\t\treturn;\n\t}\n\tif (subscriber.flushing) {\n\t\tsubscriber.flushAgain = true;\n\t\treturn;\n\t}\n\tsubscriber.flushing = true;\n\tconst pump = pumpStreamRunSubscriber(runtime, run, res, subscriber).finally(() => {\n\t\tsubscriber.flushing = false;\n\t\tremoveSessionSubscriberPump(runtime, run.sessionId, pump);\n\t\tif (subscriber.flushAgain && run.subscribers.get(res) === subscriber) {\n\t\t\tstartStreamRunSubscriberPump(runtime, run, res);\n\t\t}\n\t});\n\tsubscriber.pump = pump;\n\taddSessionSubscriberPump(runtime, run.sessionId, pump);\n}\n\nfunction notifyStreamRunSubscribers(runtime: StreamRunRuntime, run: StreamRunRecord): void {\n\tfor (const res of [...run.subscribers.keys()]) {\n\t\tstartStreamRunSubscriberPump(runtime, run, res);\n\t}\n\treleaseTerminalStreamRun(runtime, run);\n}\n\nfunction beginStreamResponse(res: ServerResponse): boolean {\n\ttry {\n\t\tres.writeHead(200, {\n\t\t\t\"Content-Type\": \"text/event-stream\",\n\t\t\t\"Cache-Control\": \"no-cache\",\n\t\t\tConnection: \"keep-alive\",\n\t\t});\n\t\tres.flushHeaders();\n\t\treturn true;\n\t} catch {\n\t\tres.destroy();\n\t\treturn false;\n\t}\n}\n\nfunction startStreamRunSubscriberHeartbeat(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\tres: ServerResponse,\n\tsubscriber: StreamRunSubscriber,\n): void {\n\tif (subscriber.heartbeatWrite || subscriber.flushing || run.subscribers.get(res) !== subscriber) return;\n\tconst heartbeatWrite = writeWithStreamDrain(res, STREAM_HEARTBEAT, runtime.drainIdleTimeoutMs)\n\t\t.then((succeeded) => {\n\t\t\tif (!succeeded && run.subscribers.get(res) === subscriber) {\n\t\t\t\tdetachStreamRunSubscriber(runtime, run, res);\n\t\t\t\tif (!res.destroyed) res.destroy();\n\t\t\t}\n\t\t})\n\t\t.catch(() => {\n\t\t\tif (run.subscribers.get(res) === subscriber) {\n\t\t\t\tdetachStreamRunSubscriber(runtime, run, res);\n\t\t\t\tif (!res.destroyed) res.destroy();\n\t\t\t}\n\t\t})\n\t\t.finally(() => {\n\t\t\tif (subscriber.heartbeatWrite === heartbeatWrite) subscriber.heartbeatWrite = undefined;\n\t\t\tif (run.subscribers.get(res) === subscriber && !res.destroyed && !res.writableEnded) {\n\t\t\t\tstartStreamRunSubscriberPump(runtime, run, res);\n\t\t\t}\n\t\t});\n\tsubscriber.heartbeatWrite = heartbeatWrite;\n}\n\nfunction subscribeToStreamRun(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\tres: ServerResponse,\n\tcursor: number,\n): void {\n\tconst onClose = () => detachStreamRunSubscriber(runtime, run, res);\n\tconst subscriber: StreamRunSubscriber = {\n\t\tonClose,\n\t\tabortController: new AbortController(),\n\t\tcursor,\n\t\tflushing: false,\n\t\tflushAgain: false,\n\t};\n\tif (run.status === \"running\") {\n\t\tsubscriber.heartbeat = setInterval(() => {\n\t\t\tstartStreamRunSubscriberHeartbeat(runtime, run, res, subscriber);\n\t\t}, STREAM_HEARTBEAT_INTERVAL_MS);\n\t\tsubscriber.heartbeat.unref();\n\t}\n\trun.subscribers.set(res, subscriber);\n\tres.once(\"close\", onClose);\n\tstartStreamRunSubscriberHeartbeat(runtime, run, res, subscriber);\n}\n\nfunction enqueueStreamRunSetup<T>(runtime: StreamRunRuntime, operation: () => Promise<T>): Promise<T> {\n\tconst guardedOperation = () => {\n\t\tassertServerPersistenceHealthy();\n\t\treturn operation();\n\t};\n\tconst result = runtime.setupQueue.then(guardedOperation, guardedOperation);\n\truntime.setupQueue = result.then(\n\t\t() => undefined,\n\t\t() => undefined,\n\t);\n\treturn result;\n}\n\nfunction replayDurableStreamRun(\n\truntime: StreamRunRuntime,\n\tstate: StreamRunState,\n\tres: ServerResponse,\n\tcursor: number,\n): Promise<void> {\n\tif (cursor > state.nextSeq) {\n\t\tsendJson(res, 409, { error: `eventCursor ${cursor} exceeds durable nextSeq ${state.nextSeq}` });\n\t\treturn Promise.resolve();\n\t}\n\tif (!beginStreamResponse(res)) return Promise.resolve();\n\tconst replay: StreamRunReplay = {\n\t\trunId: state.runId,\n\t\tresponse: res,\n\t\tabortController: new AbortController(),\n\t};\n\tlet readers = runtime.replayReaders.get(state.sessionId);\n\tif (!readers) {\n\t\treaders = new Set();\n\t\truntime.replayReaders.set(state.sessionId, readers);\n\t}\n\treaders.add(replay);\n\tconst onClose = () => replay.abortController.abort();\n\tres.once(\"close\", onClose);\n\tconst operation = (async () => {\n\t\ttry {\n\t\t\tif (!(await writeWithStreamDrain(res, STREAM_HEARTBEAT, runtime.drainIdleTimeoutMs))) {\n\t\t\t\treplay.abortController.abort();\n\t\t\t\tif (!res.destroyed) res.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor await (const frame of runtime.store.iterateEvents(\n\t\t\t\tstate.sessionId,\n\t\t\t\tstate.runId,\n\t\t\t\tcursor,\n\t\t\t\treplay.abortController.signal,\n\t\t\t)) {\n\t\t\t\tif (res.destroyed || res.writableEnded || replay.abortController.signal.aborted) return;\n\t\t\t\tif (!res.write(frame.event) && !(await waitForStreamDrain(res, runtime.drainIdleTimeoutMs))) {\n\t\t\t\t\treplay.abortController.abort();\n\t\t\t\t\tif (!res.destroyed) res.destroy();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!res.destroyed && !res.writableEnded) res.end();\n\t\t} catch (error) {\n\t\t\tif (!res.destroyed) res.destroy(error instanceof Error ? error : new Error(String(error)));\n\t\t} finally {\n\t\t\tres.off(\"close\", onClose);\n\t\t\tconst currentReaders = runtime.replayReaders.get(state.sessionId);\n\t\t\tcurrentReaders?.delete(replay);\n\t\t\tif (currentReaders?.size === 0) runtime.replayReaders.delete(state.sessionId);\n\t\t}\n\t})();\n\treplay.promise = operation;\n\treturn operation;\n}\n\nfunction createActiveStreamRun(\n\tstate: StreamRunState,\n\trunId: string | undefined,\n\tmodel: ResolvedStream[\"model\"],\n): StreamRunRecord {\n\treturn {\n\t\tsessionId: state.sessionId,\n\t\trunId,\n\t\tstorageRunId: state.runId,\n\t\trequestHash: state.requestMac,\n\t\tstatus: state.status,\n\t\tnextSeq: state.nextSeq,\n\t\tmodel,\n\t\tcontentDeltas: new Map(),\n\t\tabortController: new AbortController(),\n\t\tsubscribers: new Map(),\n\t\tproviderFailureLogged: false,\n\t\tpersistenceFailureLogged: false,\n\t\tpendingEvents: [],\n\t\tpendingEventBytes: 0,\n\t\tshuttingDown: false,\n\t};\n}\n\nasync function handleCancelSessionRun(\n\truntime: StreamRunRuntime,\n\tbody: SessionIdBody & { runId?: string },\n\tres: ServerResponse,\n): Promise<void> {\n\tif (!body.sessionId || !body.runId) {\n\t\tsendJson(res, 400, { error: \"sessionId and runId are required\" });\n\t\treturn;\n\t}\n\tconst sessionId = body.sessionId;\n\tconst runId = body.runId;\n\tconst key = runKey(sessionId, runId);\n\tconst activeRun = runtime.activeRuns.get(key);\n\tif (activeRun?.status === \"running\") {\n\t\tactiveRun.abortController.abort();\n\t}\n\tawait enqueueStreamRunSetup(runtime, async () => {\n\t\tconst state = await runtime.store.get(sessionId, runId);\n\t\tif (!state) {\n\t\t\tsendJson(res, 200, { canceled: false, status: \"missing\" });\n\t\t\treturn;\n\t\t}\n\t\tif (state.status !== \"running\") {\n\t\t\tsendJson(res, 200, { canceled: false, status: state.status });\n\t\t\treturn;\n\t\t}\n\t\tconst run = runtime.activeRuns.get(key);\n\t\tif (!run) {\n\t\t\tthrow new StreamRunStateError(\"Durable running stream has no active provider execution\");\n\t\t}\n\t\ttry {\n\t\t\tawait abortStreamRun(runtime, run, \"Request aborted by user\", \"aborted\");\n\t\t} catch (error) {\n\t\t\tawait handleStreamRunPersistenceFailure(runtime, run, error);\n\t\t\tif (runtime.fatalPersistenceError) throw runtime.fatalPersistenceError;\n\t\t\tif (run.status === \"running\") throw error;\n\t\t}\n\t\tsendJson(res, 200, { canceled: true, status: run.status });\n\t});\n}\n\nfunction logProviderStreamFailure(run: StreamRunRecord, model: ResolvedStream[\"model\"], errorMessage: string): void {\n\tif (run.providerFailureLogged) return;\n\trun.providerFailureLogged = true;\n\tconst safeErrorMessage =\n\t\terrorMessage.length > STREAM_RUN_ERROR_LOG_CHARS\n\t\t\t? `${errorMessage.slice(0, STREAM_RUN_ERROR_LOG_CHARS - 3)}...`\n\t\t\t: errorMessage;\n\tconsole.error(\n\t\tJSON.stringify({\n\t\t\tphase: \"provider_stream\",\n\t\t\tsessionId: run.sessionId,\n\t\t\trunId: run.runId ?? null,\n\t\t\tmodel: { provider: model.provider, id: model.id, api: model.api },\n\t\t\terror: safeErrorMessage,\n\t\t}),\n\t);\n}\n\nfunction logStreamRunPersistenceFailure(run: StreamRunRecord, error: unknown): void {\n\tif (run.persistenceFailureLogged) return;\n\trun.persistenceFailureLogged = true;\n\tconst rawMessage = error instanceof Error ? error.message : String(error);\n\tconst safeErrorMessage =\n\t\trawMessage.length > STREAM_RUN_ERROR_LOG_CHARS\n\t\t\t? `${rawMessage.slice(0, STREAM_RUN_ERROR_LOG_CHARS - 3)}...`\n\t\t\t: rawMessage;\n\tconsole.error(\n\t\tJSON.stringify({\n\t\t\tphase: \"stream_persistence\",\n\t\t\tsessionId: run.sessionId,\n\t\t\trunId: run.runId ?? run.storageRunId,\n\t\t\terror: safeErrorMessage,\n\t\t}),\n\t);\n}\n\nfunction withStreamRunDiagnostic(run: StreamRunRecord, message: AssistantMessage): AssistantMessage {\n\treturn {\n\t\t...message,\n\t\tdiagnostics: [\n\t\t\t...(message.diagnostics ?? []).filter((diagnostic) => diagnostic.type !== \"pi_server_run\"),\n\t\t\t{\n\t\t\t\ttype: \"pi_server_run\",\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tdetails: {\n\t\t\t\t\tsessionId: run.sessionId,\n\t\t\t\t\trunId: run.runId ?? run.storageRunId,\n\t\t\t\t\trequestMac: run.requestHash,\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n}\n\nfunction createSyntheticAssistantMessage(\n\trun: StreamRunRecord,\n\terrorMessage: string,\n\treason: \"aborted\" | \"error\",\n): AssistantMessage {\n\treturn withStreamRunDiagnostic(run, {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: run.model.api,\n\t\tprovider: run.model.provider,\n\t\tmodel: run.model.id,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: reason,\n\t\terrorMessage,\n\t\ttimestamp: Date.now(),\n\t});\n}\n\nfunction terminalProxyEvent(\n\trun: StreamRunRecord,\n\tmessage: AssistantMessage,\n): Extract<ProxyAssistantMessageEvent, { type: \"done\" | \"error\" }> {\n\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") {\n\t\tconst event = toProxyEvent({ type: \"error\", reason: message.stopReason, error: message }, run);\n\t\tif (!event || event.type !== \"error\") {\n\t\t\tthrow new Error(\"Failed to encode terminal stream error\");\n\t\t}\n\t\treturn event;\n\t}\n\tconst event = toProxyEvent({ type: \"done\", reason: message.stopReason, message }, run);\n\tif (!event || event.type !== \"done\") {\n\t\tthrow new Error(\"Failed to encode terminal stream completion\");\n\t}\n\treturn event;\n}\n\nasync function flushPendingStreamRunEvents(runtime: StreamRunRuntime, run: StreamRunRecord): Promise<void> {\n\tclearStreamRunFlushTimer(run);\n\tif (run.flushPromise) {\n\t\tawait run.flushPromise;\n\t\tif (run.pendingEvents.length > 0) await flushPendingStreamRunEvents(runtime, run);\n\t\treturn;\n\t}\n\tif (run.pendingEvents.length === 0) return;\n\tconst operation = (async () => {\n\t\twhile (run.pendingEvents.length > 0) {\n\t\t\tif (run.persistenceError) throw run.persistenceError;\n\t\t\tconst events = run.pendingEvents.splice(0);\n\t\t\trun.pendingEventBytes = 0;\n\t\t\tconst frames = await runtime.store.appendEvents({\n\t\t\t\tsessionId: run.sessionId,\n\t\t\t\trunId: run.storageRunId,\n\t\t\t\tevents,\n\t\t\t\texpectedSeq: run.nextSeq,\n\t\t\t});\n\t\t\trun.nextSeq += frames.length;\n\t\t\tnotifyStreamRunSubscribers(runtime, run);\n\t\t}\n\t})();\n\tconst tracked = operation.catch((error: unknown): never => {\n\t\trun.persistenceError = error instanceof Error ? error : new Error(String(error));\n\t\tthrow run.persistenceError;\n\t});\n\trun.flushPromise = tracked;\n\ttry {\n\t\tawait tracked;\n\t} finally {\n\t\tif (run.flushPromise === tracked) run.flushPromise = undefined;\n\t\tif (!run.persistenceError && run.pendingEvents.length > 0 && !run.flushTimer) {\n\t\t\trun.flushTimer = setTimeout(() => {\n\t\t\t\trun.flushTimer = undefined;\n\t\t\t\tvoid flushPendingStreamRunEvents(runtime, run).catch((error: unknown) => {\n\t\t\t\t\tvoid handleStreamRunPersistenceFailure(runtime, run, error);\n\t\t\t\t});\n\t\t\t}, STREAM_RUN_BATCH_DELAY_MS);\n\t\t\trun.flushTimer.unref();\n\t\t}\n\t}\n}\n\nasync function queueStreamRunEvent(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\tevent: ProxyAssistantMessageEvent,\n): Promise<void> {\n\tif (run.persistenceError) throw run.persistenceError;\n\tif (run.status !== \"running\" || run.terminalPromise || run.abortController.signal.aborted) return;\n\tconst encoded = encodeProxyEvent(event);\n\trun.pendingEvents.push(encoded);\n\trun.pendingEventBytes += Buffer.byteLength(encoded);\n\tif (run.pendingEvents.length >= STREAM_RUN_BATCH_MAX_EVENTS || run.pendingEventBytes >= STREAM_RUN_BATCH_MAX_BYTES) {\n\t\tawait flushPendingStreamRunEvents(runtime, run);\n\t\treturn;\n\t}\n\tif (run.flushTimer || run.flushPromise) return;\n\trun.flushTimer = setTimeout(() => {\n\t\trun.flushTimer = undefined;\n\t\tvoid flushPendingStreamRunEvents(runtime, run).catch((error: unknown) => {\n\t\t\tvoid handleStreamRunPersistenceFailure(runtime, run, error);\n\t\t});\n\t}, STREAM_RUN_BATCH_DELAY_MS);\n\trun.flushTimer.unref();\n}\n\nasync function persistTerminalStreamRun(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\tmessage: AssistantMessage,\n\tskipPendingFlush = false,\n): Promise<void> {\n\tif (run.terminalPromise) return run.terminalPromise;\n\tconst operation = (async () => {\n\t\tclearStreamRunFlushTimer(run);\n\t\tif (!skipPendingFlush) {\n\t\t\tawait flushPendingStreamRunEvents(runtime, run);\n\t\t} else {\n\t\t\trun.pendingEvents.length = 0;\n\t\t\trun.pendingEventBytes = 0;\n\t\t\tawait run.flushPromise?.catch(() => undefined);\n\t\t}\n\t\tif (run.status !== \"running\") return;\n\t\tconst proxyEvent = terminalProxyEvent(run, message);\n\t\tlet state: StreamRunState;\n\t\ttry {\n\t\t\tstate = await runtime.store.settle({\n\t\t\t\tsessionId: run.sessionId,\n\t\t\t\trunId: run.storageRunId,\n\t\t\t\tstatus: message.stopReason === \"error\" || message.stopReason === \"aborted\" ? \"failed\" : \"completed\",\n\t\t\t\tevent: encodeProxyEvent(proxyEvent),\n\t\t\t\tresult: message,\n\t\t\t\terrorMessage: message.errorMessage,\n\t\t\t\texpectedSeq: run.nextSeq,\n\t\t\t});\n\t\t\tif (!run.runId) {\n\t\t\t\tstate = await runtime.store.acknowledge(run.sessionId, run.storageRunId);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\trun.persistenceError = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow run.persistenceError;\n\t\t}\n\t\tapplyDurableState(run, state);\n\t\tnotifyStreamRunSubscribers(runtime, run);\n\t})();\n\trun.terminalPromise = operation;\n\ttry {\n\t\tawait operation;\n\t} finally {\n\t\tif (run.terminalPromise === operation && run.status === \"running\") {\n\t\t\trun.terminalPromise = undefined;\n\t\t}\n\t}\n}\n\nfunction markStreamRunPersistenceFatal(runtime: StreamRunRuntime, persistenceError: Error): boolean {\n\tif (runtime.fatalPersistenceError) return false;\n\truntime.fatalPersistenceError = persistenceError;\n\truntime.closing = true;\n\tfor (const activeRun of runtime.activeRuns.values()) {\n\t\tactiveRun.shuttingDown = true;\n\t\tactiveRun.persistenceError ??= persistenceError;\n\t\tclearStreamRunFlushTimer(activeRun);\n\t\tactiveRun.abortController.abort();\n\t\tfor (const res of [...activeRun.subscribers.keys()]) {\n\t\t\tdetachStreamRunSubscriber(runtime, activeRun, res);\n\t\t\tres.destroy(new Error(\"pi-server stopped after an indeterminate stream persistence failure\"));\n\t\t}\n\t}\n\tfor (const replays of runtime.replayReaders.values()) {\n\t\tfor (const replay of replays) {\n\t\t\treplay.abortController.abort();\n\t\t\treplay.response.destroy(new Error(\"pi-server stopped after an indeterminate stream persistence failure\"));\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction failStopStreamRunPersistence(runtime: StreamRunRuntime, error: unknown): void {\n\tconst persistenceError = error instanceof Error ? error : new Error(String(error));\n\tif (activeServerPersistenceRuntime?.streamRuntime === runtime) {\n\t\tfailStopServerPersistence(activeServerPersistenceRuntime, persistenceError);\n\t\treturn;\n\t}\n\tif (!markStreamRunPersistenceFatal(runtime, persistenceError)) return;\n\tqueueMicrotask(() => runtime.onFatalPersistenceError?.(persistenceError));\n}\n\nasync function handleStreamRunPersistenceFailure(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\terror: unknown,\n): Promise<void> {\n\tif (run.status !== \"running\" || run.shuttingDown) return;\n\tlogStreamRunPersistenceFailure(run, error);\n\tconst persistenceError = error instanceof Error ? error : new Error(String(error));\n\tif (\n\t\tpersistenceError instanceof StreamRunCorruptionError ||\n\t\tpersistenceError instanceof StreamRunPersistenceTimeoutError ||\n\t\tpersistenceError instanceof StreamRunStoreLockedError ||\n\t\tpersistenceError instanceof StreamRunStateError ||\n\t\tpersistenceError instanceof StreamRunConflictError\n\t) {\n\t\tfailStopStreamRunPersistence(runtime, persistenceError);\n\t\treturn;\n\t}\n\trun.abortController.abort();\n\tconst errorMessage = `pi-server could not durably persist the provider stream: ${persistenceError.message}`;\n\tconst message = createSyntheticAssistantMessage(run, errorMessage, \"error\");\n\ttry {\n\t\tawait persistTerminalStreamRun(runtime, run, message, true);\n\t} catch (terminalError) {\n\t\tlogStreamRunPersistenceFailure(run, terminalError);\n\t\tfailStopStreamRunPersistence(runtime, terminalError);\n\t}\n}\n\nasync function abortStreamRun(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\terrorMessage: string,\n\treason: \"aborted\" | \"error\" = \"error\",\n): Promise<void> {\n\tif (run.status !== \"running\") return;\n\trun.abortController.abort();\n\tawait persistTerminalStreamRun(runtime, run, createSyntheticAssistantMessage(run, errorMessage, reason));\n}\n\nfunction compactRunKey(sessionId: string, operationId: string): string {\n\treturn `${sessionId}\\0${operationId}`;\n}\n\nfunction enqueueCompactSetup<T>(runtime: CompactRunRuntime, operation: () => Promise<T>): Promise<T> {\n\tconst guardedOperation = () => {\n\t\tassertServerPersistenceHealthy();\n\t\treturn operation();\n\t};\n\tconst result = runtime.setupQueue.then(guardedOperation, guardedOperation);\n\truntime.setupQueue = result.then(\n\t\t() => undefined,\n\t\t() => undefined,\n\t);\n\treturn result;\n}\n\ninterface SessionDeletionFenceState {\n\tversions: Map<string, number>;\n\tactive: Map<string, number>;\n}\n\nconst sessionDeletionFences = new WeakMap<SessionMutationRuntime, SessionDeletionFenceState>();\n\nfunction sessionDeletionFenceState(runtime: SessionMutationRuntime): SessionDeletionFenceState {\n\tlet state = sessionDeletionFences.get(runtime);\n\tif (!state) {\n\t\tstate = { versions: new Map(), active: new Map() };\n\t\tsessionDeletionFences.set(runtime, state);\n\t}\n\treturn state;\n}\n\nfunction advanceSessionDeletionVersion(state: SessionDeletionFenceState, sessionId: string): void {\n\tstate.versions.set(sessionId, (state.versions.get(sessionId) ?? 0) + 1);\n}\n\nfunction cleanupSessionDeletionFence(runtime: SessionMutationRuntime, sessionId: string): void {\n\tconst state = sessionDeletionFences.get(runtime);\n\tif (!state || (state.active.get(sessionId) ?? 0) > 0 || runtime.queues.has(sessionId)) return;\n\tstate.versions.delete(sessionId);\n\tif (state.versions.size === 0 && state.active.size === 0) sessionDeletionFences.delete(runtime);\n}\n\nfunction enqueueSessionMutation<T>(\n\truntime: SessionMutationRuntime,\n\tsessionId: string,\n\toperation: () => Promise<T> | T,\n\tbypassDeletionFence = false,\n\texpectedDeletionVersion?: number,\n): Promise<T> {\n\tconst deletionState = sessionDeletionFenceState(runtime);\n\tconst deletionVersion = expectedDeletionVersion ?? deletionState.versions.get(sessionId) ?? 0;\n\tconst previous = runtime.queues.get(sessionId) ?? Promise.resolve();\n\tconst guardedOperation = () => {\n\t\tassertServerPersistenceHealthy();\n\t\tif (\n\t\t\t!bypassDeletionFence &&\n\t\t\t((deletionState.active.get(sessionId) ?? 0) > 0 ||\n\t\t\t\t(deletionState.versions.get(sessionId) ?? 0) !== deletionVersion)\n\t\t) {\n\t\t\tthrow new StreamRunConflictError(\n\t\t\t\t`Session ${sessionId} was deleted while this mutation was queued; reconcile before retrying`,\n\t\t\t);\n\t\t}\n\t\treturn operation();\n\t};\n\tconst result = previous.then(guardedOperation, guardedOperation);\n\tconst tail = result.then(\n\t\t() => undefined,\n\t\t() => undefined,\n\t);\n\truntime.queues.set(sessionId, tail);\n\tvoid tail.finally(() => {\n\t\tif (runtime.queues.get(sessionId) === tail) {\n\t\t\truntime.queues.delete(sessionId);\n\t\t\tcleanupSessionDeletionFence(runtime, sessionId);\n\t\t}\n\t});\n\treturn result;\n}\n\nfunction enqueueSessionCapacityMutation<T>(operation: () => Promise<T> | T): Promise<T> {\n\tconst guardedOperation = () => {\n\t\tassertServerPersistenceHealthy();\n\t\treturn operation();\n\t};\n\tconst result = sessionCapacityMutationQueue.then(guardedOperation, guardedOperation);\n\tsessionCapacityMutationQueue = result.then(\n\t\t() => undefined,\n\t\t() => undefined,\n\t);\n\treturn result;\n}\n\nfunction enqueueSessionStoreMutation<T>(\n\truntime: SessionMutationRuntime,\n\tsessionId: string,\n\toperation: () => Promise<T> | T,\n\tbypassDeletionFence = false,\n): Promise<T> {\n\treturn enqueueSessionMutation(\n\t\truntime,\n\t\tsessionId,\n\t\t() => enqueueSessionCapacityMutation(operation),\n\t\tbypassDeletionFence,\n\t);\n}\n\nfunction releaseCompactRun(runtime: CompactRunRuntime, run: CompactRunRecord): void {\n\tif (run.status === \"running\" || run.subscribers.size > 0) return;\n\truntime.activeRuns.delete(compactRunKey(run.sessionId, run.operationId));\n}\n\nfunction markCompactPersistenceFatal(runtime: CompactRunRuntime, failure: Error): boolean {\n\tif (runtime.fatalPersistenceError) return false;\n\truntime.fatalPersistenceError = failure;\n\truntime.closing = true;\n\tfor (const run of runtime.activeRuns.values()) {\n\t\trun.abortController.abort();\n\t\tfor (const response of run.subscribers) {\n\t\t\tresponse.destroy(new Error(\"pi-server stopped after an indeterminate compaction persistence failure\"));\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction failStopCompactPersistence(runtime: CompactRunRuntime, error: unknown): void {\n\tconst failure = error instanceof Error ? error : new Error(String(error));\n\tif (activeServerPersistenceRuntime?.compactRuntime === runtime) {\n\t\tfailStopServerPersistence(activeServerPersistenceRuntime, failure);\n\t\treturn;\n\t}\n\tif (!markCompactPersistenceFatal(runtime, failure)) return;\n\tqueueMicrotask(() => runtime.onFatalPersistenceError?.(failure));\n}\n\nfunction failStopServerPersistence(runtime: ServerPersistenceRuntime, error: unknown): void {\n\tif (runtime.fatalError) return;\n\tconst failure = error instanceof Error ? error : new Error(String(error));\n\truntime.fatalError = failure;\n\tif (runtime.streamRuntime) markStreamRunPersistenceFatal(runtime.streamRuntime, failure);\n\tif (runtime.compactRuntime) markCompactPersistenceFatal(runtime.compactRuntime, failure);\n\tqueueMicrotask(() => runtime.onFatalPersistenceError?.(failure));\n}\n\nfunction createCompactTerminalPlan(\n\trun: Pick<CompactRunRecord, \"sessionId\" | \"operationId\" | \"requestHash\">,\n\tresponse: SessionCompactHttpResponse,\n\tcommit?: CompactionCommitPlan,\n): CompactTerminalPlan {\n\treturn {\n\t\tversion: 1,\n\t\tsessionId: run.sessionId,\n\t\toperationId: run.operationId,\n\t\trequestHash: run.requestHash,\n\t\tresponse,\n\t\t...(commit ? { commit } : {}),\n\t};\n}\n\nfunction createCompactFailureResponse(\n\trun: Pick<CompactRunRecord, \"sessionId\" | \"operationId\" | \"requestHash\">,\n\tstatus: number,\n\terror: string,\n\toperationDisposition: \"terminal\" | \"not_started\",\n): { status: number; body: SessionCompactFailureBody } {\n\treturn {\n\t\tstatus,\n\t\tbody: {\n\t\t\tprotocolVersion: PI_SERVER_PROTOCOL_VERSION,\n\t\t\tsessionId: run.sessionId,\n\t\t\toperationId: run.operationId,\n\t\t\trequestHash: run.requestHash,\n\t\t\tstatus: operationDisposition === \"terminal\" ? \"failed\" : \"rejected\",\n\t\t\thttpStatus: status,\n\t\t\toperationDisposition,\n\t\t\terror,\n\t\t},\n\t};\n}\n\nfunction createCompactCapacityFailureResponse(\n\trun: Pick<CompactRunRecord, \"sessionId\" | \"operationId\" | \"requestHash\">,\n\terror: SessionCapacityError | SessionPersistenceCapacityError,\n\toperationDisposition: \"terminal\" | \"not_started\",\n): SessionCompactHttpResponse {\n\tconst errorMessage =\n\t\terror instanceof SessionPersistenceCapacityError\n\t\t\t? `Persisted session capacity exceeded: resource=${error.resource}, session=${error.sessionId}, requested=${error.requested}, limit=${error.limit}`\n\t\t\t: error.message;\n\tconst response = createCompactFailureResponse(run, 507, errorMessage, operationDisposition);\n\treturn {\n\t\tstatus: response.status,\n\t\tbody: {\n\t\t\t...response.body,\n\t\t\tcode: error.code,\n\t\t\tresource: error.resource,\n\t\t\tcurrent: error.current,\n\t\t\trequested: error.requested,\n\t\t\tlimit: error.limit,\n\t\t\tretryable: false as const,\n\t\t\t...(error instanceof SessionPersistenceCapacityError ? { artifact: basename(error.path) } : {}),\n\t\t},\n\t};\n}\n\nfunction createCompactRestartFailureTerminal(identity: { sessionId: string; runId: string; requestMac: string }): {\n\tevent: string;\n\tresult: CompactTerminalPlan;\n\terrorMessage: string;\n} {\n\tconst response = createCompactFailureResponse(\n\t\t{ sessionId: identity.sessionId, operationId: identity.runId, requestHash: identity.requestMac },\n\t\t500,\n\t\t\"restart-unknown: pi-server restarted before compaction reached a durable terminal state; provider execution will not be repeated\",\n\t\t\"terminal\",\n\t);\n\tconst result = createCompactTerminalPlan(\n\t\t{ sessionId: identity.sessionId, operationId: identity.runId, requestHash: identity.requestMac },\n\t\tresponse,\n\t);\n\treturn {\n\t\tevent: JSON.stringify(result),\n\t\tresult,\n\t\terrorMessage: response.body.error as string,\n\t};\n}\n\nfunction compactTerminalPlanFromState(state: StreamRunState): CompactTerminalPlan {\n\tconst result = state.terminal?.result;\n\tassertCompactTerminalPlan(result, `${state.sessionId}/${state.runId}`);\n\tif (\n\t\tresult.sessionId !== state.sessionId ||\n\t\tresult.operationId !== state.runId ||\n\t\tresult.requestHash !== state.requestMac\n\t) {\n\t\tthrow new StreamRunCorruptionError(\n\t\t\t`${state.sessionId}/${state.runId}`,\n\t\t\t\"terminal compaction identity does not match durable run metadata\",\n\t\t);\n\t}\n\treturn result;\n}\n\nfunction applyCompactTerminalPlan(config: ServerConfig, plan: CompactTerminalPlan): void {\n\tconst commit = plan.commit;\n\tif (!commit) return;\n\tmutateAndPersistSession(config, plan.sessionId, () =>\n\t\tapplyPiServerCompactionEntry(plan.sessionId, {\n\t\t\tentry: commit.entry,\n\t\t\toperation: commit.entry.piServerCompactOperation,\n\t\t\tupdatedTreeHash: commit.updatedTreeHash,\n\t\t\tupdatedRevision: commit.updatedRevision,\n\t\t}),\n\t);\n}\n\nfunction preflightCompactTerminalPlan(config: ServerConfig, plan: CompactTerminalPlan): void {\n\tconst commit = plan.commit;\n\tif (!commit) return;\n\tconst current = getSession(plan.sessionId);\n\tif (!current) {\n\t\tthrow new Error(`Session ${plan.sessionId} disappeared before compaction persistence preflight`);\n\t}\n\tconst previousState = exportSessionState(current);\n\ttry {\n\t\tconst candidate = applyPiServerCompactionEntry(plan.sessionId, {\n\t\t\tentry: commit.entry,\n\t\t\toperation: commit.entry.piServerCompactOperation,\n\t\t\tupdatedTreeHash: commit.updatedTreeHash,\n\t\t\tupdatedRevision: commit.updatedRevision,\n\t\t});\n\t\tpreflightPersistedSession(config.sessionStoreDir, candidate);\n\t} finally {\n\t\trestoreSessionState(previousState);\n\t}\n}\n\nfunction settleCompactRun(\n\tconfig: ServerConfig,\n\truntime: CompactRunRuntime,\n\tmutations: SessionMutationRuntime,\n\trun: CompactRunRecord,\n\tplanOrFactory: CompactTerminalPlan | (() => CompactTerminalPlan),\n\tstatus: \"completed\" | \"failed\" = \"completed\",\n): Promise<SessionCompactHttpResponse> {\n\tif (run.settlement) return run.settlement;\n\tconst settlement = (async () => {\n\t\tconst durablePlan = await enqueueSessionMutation(mutations, run.sessionId, () =>\n\t\t\tenqueueSessionCapacityMutation(async () => {\n\t\t\t\tlet plan = typeof planOrFactory === \"function\" ? planOrFactory() : planOrFactory;\n\t\t\t\tif (plan.commit) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpreflightSessionCapacityMutation(run.sessionId, {\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\tkind: \"append_entries\",\n\t\t\t\t\t\t\t\tentries: [plan.commit.entry],\n\t\t\t\t\t\t\t\tleafId: plan.commit.entry.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpreflightCompactTerminalPlan(config, plan);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!(error instanceof SessionCapacityError) && !(error instanceof SessionPersistenceCapacityError)) {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tplan = createCompactTerminalPlan(run, createCompactCapacityFailureResponse(run, error, \"terminal\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst durableStatus = plan.commit ? status : \"failed\";\n\t\t\t\tconst state = await runtime.store.settle({\n\t\t\t\t\tsessionId: run.sessionId,\n\t\t\t\t\trunId: run.operationId,\n\t\t\t\t\tstatus: durableStatus,\n\t\t\t\t\tevent: JSON.stringify(plan),\n\t\t\t\t\tresult: plan,\n\t\t\t\t\t...(durableStatus === \"failed\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\terrorMessage:\n\t\t\t\t\t\t\t\t\t\"error\" in plan.response.body ? plan.response.body.error : \"Compaction failed before commit\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t\tconst settledPlan = compactTerminalPlanFromState(state);\n\t\t\t\tapplyCompactTerminalPlan(config, settledPlan);\n\t\t\t\treturn settledPlan;\n\t\t\t}),\n\t\t);\n\t\trun.status = \"settled\";\n\t\trun.result = durablePlan.response;\n\t\trun.resolveTerminal?.(durablePlan.response);\n\t\trun.resolveTerminal = undefined;\n\t\trun.rejectTerminal = undefined;\n\t\treturn durablePlan.response;\n\t})().catch((error: unknown) => {\n\t\trun.rejectTerminal?.(error);\n\t\trun.resolveTerminal = undefined;\n\t\trun.rejectTerminal = undefined;\n\t\tfailStopCompactPersistence(runtime, error);\n\t\tthrow error;\n\t});\n\trun.settlement = settlement;\n\tvoid settlement.finally(() => releaseCompactRun(runtime, run)).catch(() => undefined);\n\treturn settlement;\n}\n\nasync function handleCancelSessionCompact(\n\tconfig: ServerConfig,\n\truntime: CompactRunRuntime,\n\tmutations: SessionMutationRuntime,\n\tbody: SessionIdBody & { operationId?: string; requestHash?: string },\n\tres: ServerResponse,\n): Promise<void> {\n\tif (!body.sessionId || !body.operationId || !body.requestHash) {\n\t\tsendJson(res, 400, { error: \"sessionId, operationId, and requestHash are required\" });\n\t\treturn;\n\t}\n\tconst action = await enqueueCompactSetup(runtime, async () => {\n\t\tconst state = await runtime.store.get(body.sessionId, body.operationId!);\n\t\tif (!state) return { kind: \"missing\" } as const;\n\t\tif (state.requestMac !== body.requestHash) {\n\t\t\tthrow new StreamRunConflictError(\"operationId is bound to a different compaction request\");\n\t\t}\n\t\tif (state.status !== \"running\") {\n\t\t\treturn { kind: \"terminal\", state } as const;\n\t\t}\n\t\tconst run = runtime.activeRuns.get(compactRunKey(body.sessionId, body.operationId!));\n\t\tif (!run) {\n\t\t\tthrow new StreamRunStateError(\"Durable running compaction has no active provider execution\");\n\t\t}\n\t\trun.abortController.abort();\n\t\tconst response = createCompactFailureResponse(run, 499, \"Compaction aborted by user\", \"terminal\");\n\t\treturn {\n\t\t\tkind: \"canceled\",\n\t\t\tpromise: settleCompactRun(config, runtime, mutations, run, createCompactTerminalPlan(run, response), \"failed\"),\n\t\t} as const;\n\t});\n\tif (action.kind === \"missing\") {\n\t\tsendJson(res, 404, { error: \"compaction operation not found\" });\n\t\treturn;\n\t}\n\tif (action.kind === \"terminal\") {\n\t\tconst plan = compactTerminalPlanFromState(action.state);\n\t\tsendJson(res, 200, {\n\t\t\tcanceled: false,\n\t\t\tstatus: action.state.status,\n\t\t\tsessionId: action.state.sessionId,\n\t\t\toperationId: action.state.runId,\n\t\t\trequestHash: action.state.requestMac,\n\t\t\tresultStatus: plan.response.status,\n\t\t\tterminal: plan.response.body,\n\t\t});\n\t\treturn;\n\t}\n\tconst terminalResponse = await action.promise;\n\tsendJson(res, 200, {\n\t\tcanceled: true,\n\t\tstatus: \"failed\",\n\t\tsessionId: body.sessionId,\n\t\toperationId: body.operationId,\n\t\trequestHash: body.requestHash,\n\t\tresultStatus: 499,\n\t\tterminal: terminalResponse.body,\n\t});\n}\n\nfunction pruneChunkTargetResponses(\n\tresponses: Map<string, ChunkTargetResponseRecord>,\n\tnow = Date.now(),\n\textraBytes = 0,\n): void {\n\tfor (const [requestId, response] of responses) {\n\t\tif (now - response.createdAt >= CHUNK_TARGET_RESPONSE_TTL_MS) {\n\t\t\tresponses.delete(requestId);\n\t\t}\n\t}\n\tlet retainedBytes = 0;\n\tfor (const response of responses.values()) retainedBytes += response.bytes;\n\twhile (\n\t\tresponses.size >= CHUNK_TARGET_RESPONSE_MAX_RECORDS ||\n\t\tretainedBytes + extraBytes > CHUNK_TARGET_RESPONSE_MAX_BYTES\n\t) {\n\t\tconst oldest = responses.keys().next();\n\t\tif (oldest.done) break;\n\t\tconst oldestResponse = responses.get(oldest.value);\n\t\tif (!oldestResponse) throw new Error(\"Chunk target response cache became inconsistent\");\n\t\tretainedBytes -= oldestResponse.bytes;\n\t\tresponses.delete(oldest.value);\n\t}\n}\n\nfunction cacheChunkTargetResponse(\n\tresponses: Map<string, ChunkTargetResponseRecord>,\n\trequestId: string,\n\tresponse: CapturedJsonResponse,\n): void {\n\tconst bytes = Buffer.byteLength(response.bodyJson);\n\tif (bytes > CHUNK_TARGET_RESPONSE_MAX_BYTES) return;\n\tpruneChunkTargetResponses(responses, Date.now(), bytes);\n\tif (responses.size >= CHUNK_TARGET_RESPONSE_MAX_RECORDS) return;\n\tresponses.set(requestId, { ...response, createdAt: Date.now(), bytes });\n}\n\nfunction sessionHistoryFullResponseBody(session: SessionState, baseMessageCount: number) {\n\treturn {\n\t\tsessionId: session.sessionId,\n\t\tstaticContext: session.staticContext,\n\t\tstaticContextHash: session.staticContextHash,\n\t\ttreeHash: session.treeHash,\n\t\tmessageCount: session.messages.length,\n\t\tentryCount: session.entries.length,\n\t\tleafId: session.leafId,\n\t\trevision: session.revision,\n\t\tentries: session.entries,\n\t\tbaseMessageCount,\n\t\tmessages: session.messages.slice(baseMessageCount),\n\t};\n}\n\nfunction sessionHistoryV2FullResponseBody(session: SessionState) {\n\treturn {\n\t\t...sessionHistoryV2Summary(session),\n\t\tentries: session.entries,\n\t};\n}\n\nfunction sessionTreePatchResponseBody(\n\tsession: SessionState,\n\tbaseMessageCount: number,\n\tentriesFrom: number,\n\tbaseRevision: number | undefined,\n) {\n\treturn {\n\t\tsessionId: session.sessionId,\n\t\tstaticContext: session.staticContext,\n\t\tstaticContextHash: session.staticContextHash,\n\t\ttreeHash: session.treeHash,\n\t\tmessageCount: session.messages.length,\n\t\tentryCount: session.entries.length,\n\t\tleafId: session.leafId,\n\t\trevision: session.revision,\n\t\tbaseMessageCount,\n\t\tmessages: session.messages.slice(baseMessageCount),\n\t\ttreePatch: {\n\t\t\tentriesFrom,\n\t\t\tbaseRevision,\n\t\t\tentries: session.entries.slice(entriesFrom),\n\t\t\tleafId: session.leafId,\n\t\t\trevision: session.revision,\n\t\t},\n\t};\n}\n\nfunction sessionTreePatchV2ResponseBody(session: SessionState, entriesFrom: number, baseRevision: number | undefined) {\n\treturn {\n\t\t...sessionHistoryV2Summary(session),\n\t\ttreePatch: {\n\t\t\tentriesFrom,\n\t\t\tbaseRevision,\n\t\t\tentries: session.entries.slice(entriesFrom),\n\t\t\tleafId: session.leafId,\n\t\t\trevision: session.revision,\n\t\t},\n\t};\n}\n\ntype PreparedCompaction = Parameters<typeof compact>[0];\ntype ExtensionCompactionReplacement = CompactResult & { firstKeptEntryId: string; fromHook: true };\n\ninterface PreparedSessionCompact {\n\tpreparation: PreparedCompaction;\n\textensionCompaction?: ExtensionCompactionReplacement;\n\toptions: SimpleStreamOptions;\n\tbaseStaticContextHash: string;\n\tbaseTreeHash: string;\n\tbaseEntryCount: number;\n\tbaseLeafId: string | null;\n\tbaseRevision: number;\n}\n\ninterface SessionCompactV2SuccessBody {\n\terror?: undefined;\n\tprotocolVersion: typeof PI_SERVER_PROTOCOL_VERSION;\n\tsessionId: string;\n\toperationId: string;\n\trequestHash: string;\n\ttreePatch: {\n\t\tbaseStaticContextHash: string;\n\t\tbaseTreeHash: string;\n\t\tbaseEntryCount: number;\n\t\tbaseLeafId: string | null;\n\t\tbaseRevision: number;\n\t\tentriesFrom: number;\n\t\tentries: [PiServerCompactionEntry];\n\t\tleafId: string;\n\t\trevision: number;\n\t\ttreeHash: string;\n\t};\n}\n\ninterface SessionCompactFailureBody {\n\terror: string;\n\tprotocolVersion?: number;\n\tsessionId?: string;\n\toperationId?: string;\n\trequestHash?: string;\n\tstatus?: \"failed\" | \"rejected\";\n\thttpStatus?: number;\n\toperationDisposition?: \"terminal\" | \"not_started\";\n\tcode?: string;\n\tresource?: string;\n\tcurrent?: number;\n\trequested?: number;\n\tlimit?: number;\n\tretryable?: false;\n\tartifact?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonNegativeFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isCompactionUsage(value: unknown): value is Usage {\n\tif (!isRecord(value) || !isRecord(value.cost)) return false;\n\tif (\n\t\t!isNonNegativeFiniteNumber(value.input) ||\n\t\t!isNonNegativeFiniteNumber(value.output) ||\n\t\t!isNonNegativeFiniteNumber(value.cacheRead) ||\n\t\t!isNonNegativeFiniteNumber(value.cacheWrite) ||\n\t\t!isNonNegativeFiniteNumber(value.totalTokens) ||\n\t\t!isNonNegativeFiniteNumber(value.cost.input) ||\n\t\t!isNonNegativeFiniteNumber(value.cost.output) ||\n\t\t!isNonNegativeFiniteNumber(value.cost.cacheRead) ||\n\t\t!isNonNegativeFiniteNumber(value.cost.cacheWrite) ||\n\t\t!isNonNegativeFiniteNumber(value.cost.total)\n\t) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(value.cacheWrite1h === undefined || isNonNegativeFiniteNumber(value.cacheWrite1h)) &&\n\t\t(value.reasoning === undefined || isNonNegativeFiniteNumber(value.reasoning))\n\t);\n}\n\nfunction assertCompactTerminalPlan(value: unknown, source: string): asserts value is CompactTerminalPlan {\n\tif (\n\t\t!isRecord(value) ||\n\t\tvalue.version !== 1 ||\n\t\ttypeof value.sessionId !== \"string\" ||\n\t\tvalue.sessionId.length === 0 ||\n\t\ttypeof value.operationId !== \"string\" ||\n\t\tvalue.operationId.length === 0 ||\n\t\ttypeof value.requestHash !== \"string\" ||\n\t\t!/^[a-f0-9]{64}$/u.test(value.requestHash) ||\n\t\t!isRecord(value.response) ||\n\t\t!Number.isSafeInteger(value.response.status) ||\n\t\t(value.response.status as number) < 100 ||\n\t\t(value.response.status as number) > 599 ||\n\t\t!isRecord(value.response.body)\n\t) {\n\t\tthrow new StreamRunCorruptionError(source, \"terminal compaction plan has invalid identity or response\");\n\t}\n\tif (value.commit === undefined) {\n\t\tif (\n\t\t\tvalue.response.body.protocolVersion !== PI_SERVER_PROTOCOL_VERSION ||\n\t\t\tvalue.response.body.sessionId !== value.sessionId ||\n\t\t\tvalue.response.body.operationId !== value.operationId ||\n\t\t\tvalue.response.body.requestHash !== value.requestHash ||\n\t\t\tvalue.response.body.status !== \"failed\" ||\n\t\t\tvalue.response.body.httpStatus !== value.response.status ||\n\t\t\tvalue.response.body.operationDisposition !== \"terminal\" ||\n\t\t\ttypeof value.response.body.error !== \"string\" ||\n\t\t\tvalue.response.body.error.length === 0\n\t\t) {\n\t\t\tthrow new StreamRunCorruptionError(source, \"non-commit terminal compaction plan has no error response\");\n\t\t}\n\t\treturn;\n\t}\n\tif (!isRecord(value.commit) || !isRecord(value.commit.base) || !isRecord(value.commit.entry)) {\n\t\tthrow new StreamRunCorruptionError(source, \"terminal compaction commit is invalid\");\n\t}\n\tconst base = value.commit.base;\n\tconst entry = value.commit.entry;\n\tif (\n\t\ttypeof base.staticContextHash !== \"string\" ||\n\t\t(base.staticContextHash !== \"\" && !/^[a-f0-9]{64}$/u.test(base.staticContextHash)) ||\n\t\ttypeof base.treeHash !== \"string\" ||\n\t\t!/^[a-f0-9]{64}$/u.test(base.treeHash) ||\n\t\t!Number.isSafeInteger(base.entryCount) ||\n\t\t(base.entryCount as number) < 0 ||\n\t\t(base.leafId !== null && (typeof base.leafId !== \"string\" || base.leafId.length === 0)) ||\n\t\t!Number.isSafeInteger(base.revision) ||\n\t\t(base.revision as number) < 0 ||\n\t\tentry.type !== \"compaction\" ||\n\t\ttypeof entry.id !== \"string\" ||\n\t\tentry.id.length === 0 ||\n\t\tentry.parentId !== base.leafId ||\n\t\ttypeof entry.timestamp !== \"string\" ||\n\t\ttypeof entry.summary !== \"string\" ||\n\t\ttypeof entry.firstKeptEntryId !== \"string\" ||\n\t\tentry.firstKeptEntryId.length === 0 ||\n\t\t!isNonNegativeFiniteNumber(entry.tokensBefore) ||\n\t\t!isRecord(entry.piServerCompactOperation) ||\n\t\ttypeof value.commit.updatedTreeHash !== \"string\" ||\n\t\t!/^[a-f0-9]{64}$/u.test(value.commit.updatedTreeHash) ||\n\t\t!Number.isSafeInteger(value.commit.updatedRevision) ||\n\t\tvalue.commit.updatedRevision !== (base.revision as number) + 1\n\t) {\n\t\tthrow new StreamRunCorruptionError(source, \"terminal compaction commit fields are invalid\");\n\t}\n\tconst operation = entry.piServerCompactOperation;\n\tif (\n\t\toperation.version !== 1 ||\n\t\toperation.operationId !== value.operationId ||\n\t\toperation.requestHash !== value.requestHash ||\n\t\toperation.baseStaticContextHash !== base.staticContextHash ||\n\t\toperation.baseTreeHash !== base.treeHash ||\n\t\toperation.baseEntryCount !== base.entryCount ||\n\t\toperation.baseLeafId !== base.leafId ||\n\t\toperation.baseRevision !== base.revision ||\n\t\tappendPiServerTreeHash(base.treeHash as string, hashPiServerTreeEntry(entry as unknown as SessionTreeEntry)) !==\n\t\t\tvalue.commit.updatedTreeHash\n\t) {\n\t\tthrow new StreamRunCorruptionError(source, \"terminal compaction operation metadata is inconsistent\");\n\t}\n\tconst body = value.response.body;\n\tif (\n\t\tvalue.response.status !== 200 ||\n\t\tbody.protocolVersion !== PI_SERVER_PROTOCOL_VERSION ||\n\t\tbody.sessionId !== value.sessionId ||\n\t\tbody.operationId !== value.operationId ||\n\t\tbody.requestHash !== value.requestHash ||\n\t\t!isRecord(body.treePatch)\n\t) {\n\t\tthrow new StreamRunCorruptionError(source, \"terminal compaction response does not match its commit\");\n\t}\n\tconst patch = body.treePatch;\n\tif (\n\t\tpatch.baseStaticContextHash !== base.staticContextHash ||\n\t\tpatch.baseTreeHash !== base.treeHash ||\n\t\tpatch.baseEntryCount !== base.entryCount ||\n\t\tpatch.baseLeafId !== base.leafId ||\n\t\tpatch.baseRevision !== base.revision ||\n\t\tpatch.entriesFrom !== base.entryCount ||\n\t\t!Array.isArray(patch.entries) ||\n\t\tpatch.entries.length !== 1 ||\n\t\tcanonicalJsonStringify(patch.entries[0]) !== canonicalJsonStringify(entry) ||\n\t\tpatch.leafId !== entry.id ||\n\t\tpatch.revision !== value.commit.updatedRevision ||\n\t\tpatch.treeHash !== value.commit.updatedTreeHash\n\t) {\n\t\tthrow new StreamRunCorruptionError(source, \"terminal compaction response patch is inconsistent\");\n\t}\n}\n\nfunction normalizeExtensionCompaction(\n\tvalue: unknown,\n\tactiveBranch: SessionTreeEntry[],\n): ExtensionCompactionReplacement {\n\tif (!isRecord(value)) {\n\t\tthrow new Error(\"extensionCompaction must be an object\");\n\t}\n\tif (typeof value.summary !== \"string\") {\n\t\tthrow new Error(\"extensionCompaction.summary must be a string\");\n\t}\n\tif (typeof value.firstKeptEntryId !== \"string\" || value.firstKeptEntryId.length === 0) {\n\t\tthrow new Error(\"extensionCompaction.firstKeptEntryId must be a non-empty string\");\n\t}\n\tif (!activeBranch.some((entry) => entry.id === value.firstKeptEntryId)) {\n\t\tthrow new Error(\"extensionCompaction.firstKeptEntryId must reference the active session branch\");\n\t}\n\tif (!isNonNegativeFiniteNumber(value.tokensBefore)) {\n\t\tthrow new Error(\"extensionCompaction.tokensBefore must be a non-negative finite number\");\n\t}\n\tif (value.retainedTail !== undefined && !Array.isArray(value.retainedTail)) {\n\t\tthrow new Error(\"extensionCompaction.retainedTail must be an array when provided\");\n\t}\n\tif (value.usage !== undefined && !isCompactionUsage(value.usage)) {\n\t\tthrow new Error(\"extensionCompaction.usage must be a valid non-negative usage object\");\n\t}\n\treturn {\n\t\tsummary: value.summary,\n\t\tfirstKeptEntryId: value.firstKeptEntryId,\n\t\ttokensBefore: value.tokensBefore,\n\t\t...(value.retainedTail !== undefined\n\t\t\t? { retainedTail: value.retainedTail as NonNullable<CompactResult[\"retainedTail\"]> }\n\t\t\t: {}),\n\t\t...(value.details !== undefined ? { details: value.details } : {}),\n\t\t...(value.usage !== undefined ? { usage: value.usage } : {}),\n\t\tfromHook: true,\n\t};\n}\n\ninterface SessionCompactHttpResponse {\n\tstatus: number;\n\tbody: SessionCompactFailureBody | SessionCompactV2SuccessBody;\n}\n\nexport function resolveStreamOptions(\n\t_config: ServerConfig,\n\tmodel: Model<any>,\n\tbody: StreamRequestBody,\n): ResolvedStream {\n\treturn { model, options: { ...(body.options ?? {}) } };\n}\n\nfunction handleSessionInit(config: ServerConfig, body: SessionInitBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (body.staticContext) {\n\t\tconst session = mutateAndPersistSession(config, body.sessionId, () =>\n\t\t\tapplySessionMutation(body.sessionId, { staticContext: body.staticContext }),\n\t\t);\n\t\tsendJson(res, 200, sessionResponseBody(session));\n\t\treturn;\n\t} else if (body.staticContextHash !== undefined) {\n\t\tif (!/^[a-f0-9]{64}$/i.test(body.staticContextHash)) {\n\t\t\tsendJson(res, 400, { error: \"staticContextHash must be a 64-character hex digest\" });\n\t\t\treturn;\n\t\t}\n\t\tconst session = mutateAndPersistSession(config, body.sessionId, () => getOrCreateSession(body.sessionId));\n\t\tsendJson(res, 200, {\n\t\t\t...sessionResponseBody(session),\n\t\t\tstaticContextRequired: session.staticContextHash !== body.staticContextHash,\n\t\t});\n\t\treturn;\n\t}\n\tconst session = mutateAndPersistSession(config, body.sessionId, () => getOrCreateSession(body.sessionId));\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionUpdate(\n\tconfig: ServerConfig,\n\tbody: SessionInitBody & { staticContext: SessionStaticContext },\n\tres: ServerResponse,\n): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!body.staticContext) {\n\t\tsendJson(res, 400, { error: \"staticContext is required for update\" });\n\t\treturn;\n\t}\n\tconst session = mutateAndPersistSession(config, body.sessionId, () =>\n\t\tapplySessionMutation(body.sessionId, { staticContext: body.staticContext }),\n\t);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionSync(config: ServerConfig, body: SessionSyncBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!Array.isArray(body.messages)) {\n\t\tsendJson(res, 400, { error: \"messages is required\" });\n\t\treturn;\n\t}\n\tconst session = mutateAndPersistSession(config, body.sessionId, () =>\n\t\tapplySessionMutation(body.sessionId, {\n\t\t\t...(body.staticContext ? { staticContext: body.staticContext } : {}),\n\t\t\tcontent: { kind: \"replace_messages\", messages: body.messages },\n\t\t}),\n\t);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionAppend(config: ServerConfig, body: SessionAppendBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!Array.isArray(body.messages)) {\n\t\tsendJson(res, 400, { error: \"messages is required\" });\n\t\treturn;\n\t}\n\tconst session = mutateAndPersistSession(config, body.sessionId, () =>\n\t\tapplySessionMutation(body.sessionId, {\n\t\t\t...(body.staticContext ? { staticContext: body.staticContext } : {}),\n\t\t\tcontent: { kind: \"append_messages\", messages: body.messages },\n\t\t}),\n\t);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionTreeSync(config: ServerConfig, body: SessionTreeSyncBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!Array.isArray(body.entries)) {\n\t\tsendJson(res, 400, { error: \"entries is required\" });\n\t\treturn;\n\t}\n\tconst session = mutateAndPersistSession(config, body.sessionId, () =>\n\t\tapplySessionMutation(body.sessionId, {\n\t\t\t...(body.staticContext ? { staticContext: body.staticContext } : {}),\n\t\t\tcontent: { kind: \"replace_entries\", entries: body.entries, leafId: body.leafId ?? null },\n\t\t}),\n\t);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionTreeAppend(config: ServerConfig, body: SessionTreeSyncBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (!Array.isArray(body.entries)) {\n\t\tsendJson(res, 400, { error: \"entries is required\" });\n\t\treturn;\n\t}\n\tconst session = mutateAndPersistSession(config, body.sessionId, () =>\n\t\tapplySessionMutation(body.sessionId, {\n\t\t\t...(body.staticContext ? { staticContext: body.staticContext } : {}),\n\t\t\tcontent: { kind: \"append_entries\", entries: body.entries, leafId: body.leafId ?? null },\n\t\t}),\n\t);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction handleSessionTreeSwitch(config: ServerConfig, body: SessionTreeSwitchBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tconst session = mutateAndPersistSession(config, body.sessionId, () =>\n\t\tswitchSessionLeaf(body.sessionId, body.leafId ?? null),\n\t);\n\tsendJson(res, 200, sessionResponseBody(session));\n}\n\nfunction prepareSessionCompact(body: SessionCompactBody): PreparedSessionCompact | SessionCompactHttpResponse {\n\tif (!body.sessionId) {\n\t\treturn { status: 400, body: { error: \"sessionId is required\" } };\n\t}\n\tif (!body.model) {\n\t\treturn { status: 400, body: { error: \"model is required\" } };\n\t}\n\n\tconst session = getSession(body.sessionId);\n\tif (!session) {\n\t\treturn { status: 404, body: { error: \"session not found\" } };\n\t}\n\tif (\n\t\tbody.baseStaticContextHash !== session.staticContextHash ||\n\t\tbody.baseTreeHash !== session.treeHash ||\n\t\tbody.baseEntryCount !== session.entries.length ||\n\t\tbody.baseLeafId !== session.leafId ||\n\t\tbody.baseRevision !== session.revision\n\t) {\n\t\treturn {\n\t\t\tstatus: 409,\n\t\t\tbody: { error: \"Session base identity does not match the compaction request; reconcile and retry\" },\n\t\t};\n\t}\n\n\tconst entries = getSessionBranch(session);\n\tconst preparationResult = prepareCompaction(entries, body.settings ?? DEFAULT_COMPACTION_SETTINGS, body.preparation);\n\tif (!preparationResult.ok) {\n\t\treturn { status: 400, body: { error: preparationResult.error.message } };\n\t}\n\tif (!preparationResult.value) {\n\t\treturn { status: 400, body: { error: \"Nothing to compact\" } };\n\t}\n\n\tlet extensionCompaction: ExtensionCompactionReplacement | undefined;\n\tif (body.extensionCompaction !== undefined) {\n\t\ttry {\n\t\t\textensionCompaction = normalizeExtensionCompaction(body.extensionCompaction, entries);\n\t\t} catch (error) {\n\t\t\treturn { status: 400, body: { error: error instanceof Error ? error.message : String(error) } };\n\t\t}\n\t}\n\n\tconst options = body.options ?? {};\n\treturn {\n\t\tpreparation: preparationResult.value,\n\t\textensionCompaction,\n\t\toptions,\n\t\tbaseStaticContextHash: session.staticContextHash,\n\t\tbaseTreeHash: session.treeHash,\n\t\tbaseEntryCount: session.entries.length,\n\t\tbaseLeafId: session.leafId,\n\t\tbaseRevision: session.revision,\n\t};\n}\n\nfunction createCompactionCommitPlan(\n\tbody: SessionCompactBody,\n\tprepared: PreparedSessionCompact,\n\trequestHash: string,\n\tcompaction: CompactResult | ExtensionCompactionReplacement,\n): CompactTerminalPlan {\n\tconst firstKeptEntryId = compaction.firstKeptEntryId;\n\tif (!firstKeptEntryId) {\n\t\treturn createCompactTerminalPlan(\n\t\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\t\tcreateCompactFailureResponse(\n\t\t\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\t\t\t500,\n\t\t\t\t\"Compaction result is missing firstKeptEntryId\",\n\t\t\t\t\"terminal\",\n\t\t\t),\n\t\t);\n\t}\n\tconst currentSession = getSession(body.sessionId);\n\tif (\n\t\t!currentSession ||\n\t\tcurrentSession.staticContextHash !== prepared.baseStaticContextHash ||\n\t\tcurrentSession.treeHash !== prepared.baseTreeHash ||\n\t\tcurrentSession.entries.length !== prepared.baseEntryCount ||\n\t\tcurrentSession.leafId !== prepared.baseLeafId ||\n\t\tcurrentSession.revision !== prepared.baseRevision\n\t) {\n\t\treturn createCompactTerminalPlan(\n\t\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\t\tcreateCompactFailureResponse(\n\t\t\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\t\t\t409,\n\t\t\t\t\"Session changed while compaction was running; the stale compaction was not committed\",\n\t\t\t\t\"terminal\",\n\t\t\t),\n\t\t);\n\t}\n\tconst operation: PiServerCompactionOperationMetadata = {\n\t\tversion: 1,\n\t\toperationId: body.operationId,\n\t\trequestHash,\n\t\tbaseStaticContextHash: prepared.baseStaticContextHash,\n\t\tbaseTreeHash: prepared.baseTreeHash,\n\t\tbaseEntryCount: prepared.baseEntryCount,\n\t\tbaseLeafId: prepared.baseLeafId,\n\t\tbaseRevision: prepared.baseRevision,\n\t};\n\tconst compactionEntry: PiServerCompactionEntry = {\n\t\ttype: \"compaction\",\n\t\tid: randomUUID(),\n\t\tparentId: prepared.baseLeafId,\n\t\ttimestamp: new Date().toISOString(),\n\t\tsummary: compaction.summary,\n\t\tfirstKeptEntryId,\n\t\ttokensBefore: compaction.tokensBefore,\n\t\t...(compaction.retainedTail !== undefined ? { retainedTail: compaction.retainedTail } : {}),\n\t\t...(compaction.details !== undefined ? { details: compaction.details } : {}),\n\t\t...(compaction.usage !== undefined ? { usage: compaction.usage } : {}),\n\t\t...(\"fromHook\" in compaction && compaction.fromHook !== undefined ? { fromHook: compaction.fromHook } : {}),\n\t\tpiServerCompactOperation: operation,\n\t};\n\tconst updatedTreeHash = appendPiServerTreeHash(prepared.baseTreeHash, hashPiServerTreeEntry(compactionEntry));\n\tconst updatedRevision = prepared.baseRevision + 1;\n\tconst response: SessionCompactHttpResponse = {\n\t\tstatus: 200,\n\t\tbody: {\n\t\t\tprotocolVersion: PI_SERVER_PROTOCOL_VERSION,\n\t\t\tsessionId: body.sessionId,\n\t\t\toperationId: body.operationId,\n\t\t\trequestHash,\n\t\t\ttreePatch: {\n\t\t\t\tbaseStaticContextHash: prepared.baseStaticContextHash,\n\t\t\t\tbaseTreeHash: prepared.baseTreeHash,\n\t\t\t\tbaseEntryCount: prepared.baseEntryCount,\n\t\t\t\tbaseLeafId: prepared.baseLeafId,\n\t\t\t\tbaseRevision: prepared.baseRevision,\n\t\t\t\tentriesFrom: prepared.baseEntryCount,\n\t\t\t\tentries: [compactionEntry],\n\t\t\t\tleafId: compactionEntry.id,\n\t\t\t\trevision: updatedRevision,\n\t\t\t\ttreeHash: updatedTreeHash,\n\t\t\t},\n\t\t},\n\t};\n\treturn createCompactTerminalPlan(\n\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\tresponse,\n\t\t{\n\t\t\tbase: {\n\t\t\t\tstaticContextHash: prepared.baseStaticContextHash,\n\t\t\t\ttreeHash: prepared.baseTreeHash,\n\t\t\t\tentryCount: prepared.baseEntryCount,\n\t\t\t\tleafId: prepared.baseLeafId,\n\t\t\t\trevision: prepared.baseRevision,\n\t\t\t},\n\t\t\tentry: compactionEntry,\n\t\t\tupdatedTreeHash,\n\t\t\tupdatedRevision,\n\t\t},\n\t);\n}\n\nasync function computeSessionCompaction(\n\tbody: SessionCompactBody,\n\tprepared: PreparedSessionCompact,\n\tsignal: AbortSignal,\n): Promise<CompactResult | ExtensionCompactionReplacement | SessionCompactHttpResponse> {\n\tif (prepared.extensionCompaction) return prepared.extensionCompaction;\n\tconst result = await compact(\n\t\tprepared.preparation,\n\t\tcreateRequestModels(body.model, prepared.options),\n\t\tbody.model,\n\t\tbody.customInstructions,\n\t\tsignal,\n\t\tprepared.options.reasoning,\n\t\tbody.retry,\n\t);\n\tif (!result.ok) {\n\t\treturn { status: 500, body: { error: result.error.message } };\n\t}\n\treturn result.value;\n}\n\nfunction encodeServerSentEvent(event: string, body: unknown): string {\n\treturn `event: ${event}\\ndata: ${JSON.stringify(body)}\\n\\n`;\n}\n\nfunction attachCompactRunSubscriber(\n\truntime: CompactRunRuntime,\n\trun: CompactRunRecord,\n\tres: ServerResponse,\n\tdrainIdleTimeoutMs: number,\n) {\n\tlet detached = false;\n\tlet resolveClosed: (() => void) | undefined;\n\tconst closed = new Promise<void>((resolve) => {\n\t\tresolveClosed = resolve;\n\t});\n\tconst onClose = () => detach(false);\n\tconst detach = (destroyResponse: boolean) => {\n\t\tif (detached) return;\n\t\tdetached = true;\n\t\tres.off(\"close\", onClose);\n\t\trun.subscribers.delete(res);\n\t\treleaseCompactRun(runtime, run);\n\t\tresolveClosed?.();\n\t\tif (destroyResponse && !res.destroyed) res.destroy();\n\t};\n\trun.subscribers.add(res);\n\tres.once(\"close\", onClose);\n\n\tlet writeTail = Promise.resolve(true);\n\tconst write = (data: string): Promise<boolean> => {\n\t\tconst writeResult = writeTail.then(async (previousWriteSucceeded) => {\n\t\t\tif (!previousWriteSucceeded || detached) return false;\n\t\t\tconst succeeded = await writeWithStreamDrain(res, data, drainIdleTimeoutMs);\n\t\t\tif (!succeeded) detach(true);\n\t\t\treturn succeeded;\n\t\t});\n\t\twriteTail = writeResult.catch(() => {\n\t\t\tdetach(true);\n\t\t\treturn false;\n\t\t});\n\t\treturn writeResult;\n\t};\n\treturn { closed, detach, write };\n}\n\nasync function handleSessionCompactStream(\n\truntime: CompactRunRuntime,\n\trun: CompactRunRecord,\n\tres: ServerResponse,\n\tdrainIdleTimeoutMs: number,\n): Promise<void> {\n\ttry {\n\t\tres.writeHead(200, {\n\t\t\t\"Content-Type\": \"text/event-stream\",\n\t\t\t\"Cache-Control\": \"no-cache\",\n\t\t\tConnection: \"keep-alive\",\n\t\t});\n\t\tres.flushHeaders();\n\t} catch {\n\t\tres.destroy();\n\t\treturn;\n\t}\n\n\tconst subscriber = attachCompactRunSubscriber(runtime, run, res, drainIdleTimeoutMs);\n\tif (!(await subscriber.write(STREAM_HEARTBEAT))) return;\n\tconst heartbeat = setInterval(() => {\n\t\tvoid subscriber.write(STREAM_HEARTBEAT);\n\t}, STREAM_HEARTBEAT_INTERVAL_MS);\n\theartbeat.unref();\n\n\ttry {\n\t\tconst outcome = await Promise.race([\n\t\t\trun.promise.then((result) => ({ type: \"result\" as const, result })),\n\t\t\tsubscriber.closed.then(() => ({ type: \"closed\" as const })),\n\t\t]);\n\t\tif (outcome.type === \"closed\") return;\n\t\tclearInterval(heartbeat);\n\t\tawait subscriber.write(\n\t\t\tencodeServerSentEvent(outcome.result.status >= 400 ? \"error\" : \"result\", outcome.result.body),\n\t\t);\n\t} finally {\n\t\tclearInterval(heartbeat);\n\t\tsubscriber.detach(false);\n\t\tif (!res.destroyed && !res.writableEnded) {\n\t\t\tres.end();\n\t\t}\n\t}\n}\n\nasync function handleSessionCompactJsonStream(\n\truntime: CompactRunRuntime,\n\trun: CompactRunRecord,\n\tres: ServerResponse,\n\tdrainIdleTimeoutMs: number,\n): Promise<void> {\n\ttry {\n\t\tres.writeHead(200, {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\"Cache-Control\": \"no-cache\",\n\t\t\tConnection: \"keep-alive\",\n\t\t});\n\t\tres.flushHeaders();\n\t} catch {\n\t\tres.destroy();\n\t\treturn;\n\t}\n\n\tconst subscriber = attachCompactRunSubscriber(runtime, run, res, drainIdleTimeoutMs);\n\tif (!(await subscriber.write(JSON_HEARTBEAT))) return;\n\tconst heartbeat = setInterval(() => {\n\t\tvoid subscriber.write(JSON_HEARTBEAT);\n\t}, STREAM_HEARTBEAT_INTERVAL_MS);\n\theartbeat.unref();\n\n\ttry {\n\t\tconst outcome = await Promise.race([\n\t\t\trun.promise.then((result) => ({ type: \"result\" as const, result })),\n\t\t\tsubscriber.closed.then(() => ({ type: \"closed\" as const })),\n\t\t]);\n\t\tif (outcome.type === \"closed\") return;\n\t\tclearInterval(heartbeat);\n\t\tawait subscriber.write(JSON.stringify(outcome.result.body));\n\t} finally {\n\t\tclearInterval(heartbeat);\n\t\tsubscriber.detach(false);\n\t\tif (!res.destroyed && !res.writableEnded) {\n\t\t\tres.end();\n\t\t}\n\t}\n}\n\nfunction compactNotStartedResponse(\n\tbody: Pick<SessionCompactBody, \"sessionId\" | \"operationId\">,\n\trequestHash: string,\n\tresponse: SessionCompactHttpResponse,\n): SessionCompactHttpResponse {\n\tconst error = typeof response.body.error === \"string\" ? response.body.error : \"Compaction request was rejected\";\n\treturn createCompactFailureResponse(\n\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\tresponse.status,\n\t\terror,\n\t\t\"not_started\",\n\t);\n}\n\nfunction preflightCompactionCapacity(\n\tconfig: ServerConfig,\n\tbody: SessionCompactBody,\n\tprepared: PreparedSessionCompact,\n\trequestHash: string,\n): SessionCompactHttpResponse | undefined {\n\ttry {\n\t\tconst probePlan = createCompactionCommitPlan(body, prepared, requestHash, {\n\t\t\tsummary: \"\",\n\t\t\tfirstKeptEntryId: prepared.preparation.firstKeptEntryId,\n\t\t\ttokensBefore: 0,\n\t\t});\n\t\tif (!probePlan.commit) {\n\t\t\tthrow new Error(\"Failed to construct the minimum compaction persistence probe\");\n\t\t}\n\t\tpreflightSessionCapacityMutation(body.sessionId, {\n\t\t\tcontent: {\n\t\t\t\tkind: \"append_entries\",\n\t\t\t\tentries: [probePlan.commit.entry],\n\t\t\t\tleafId: probePlan.commit.entry.id,\n\t\t\t},\n\t\t});\n\t\tpreflightCompactTerminalPlan(config, probePlan);\n\t} catch (error) {\n\t\tif (!(error instanceof SessionCapacityError) && !(error instanceof SessionPersistenceCapacityError)) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn createCompactCapacityFailureResponse(\n\t\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\t\terror,\n\t\t\t\"not_started\",\n\t\t);\n\t}\n}\n\nasync function handleSessionCompact(\n\tconfig: ServerConfig,\n\truntime: CompactRunRuntime,\n\tmutations: SessionMutationRuntime,\n\tbody: SessionCompactBody,\n\tres: ServerResponse,\n): Promise<void> {\n\tif (body.protocolVersion !== PI_SERVER_PROTOCOL_VERSION) {\n\t\tsendJson(res, 400, {\n\t\t\terror: `Unsupported pi-server protocol version: ${body.protocolVersion}`,\n\t\t\tprotocolVersion: PI_SERVER_PROTOCOL_VERSION,\n\t\t});\n\t\treturn;\n\t}\n\tif (!body.sessionId || !body.operationId) {\n\t\tsendJson(res, 400, { error: \"sessionId and operationId are required\" });\n\t\treturn;\n\t}\n\tif (\n\t\ttypeof body.baseStaticContextHash !== \"string\" ||\n\t\t(body.baseStaticContextHash !== \"\" && !/^[a-f0-9]{64}$/u.test(body.baseStaticContextHash)) ||\n\t\ttypeof body.baseTreeHash !== \"string\" ||\n\t\t!/^[a-f0-9]{64}$/u.test(body.baseTreeHash) ||\n\t\t!Number.isSafeInteger(body.baseEntryCount) ||\n\t\tbody.baseEntryCount < 0 ||\n\t\t(body.baseLeafId !== null && (typeof body.baseLeafId !== \"string\" || body.baseLeafId.length === 0)) ||\n\t\t!Number.isSafeInteger(body.baseRevision) ||\n\t\tbody.baseRevision < 0\n\t) {\n\t\tsendJson(res, 400, { error: \"A valid complete compaction base identity is required\" });\n\t\treturn;\n\t}\n\tif (typeof body.streamResponse !== \"boolean\") {\n\t\tsendJson(res, 400, { error: \"streamResponse is required\" });\n\t\treturn;\n\t}\n\tconst requestHash = hashCompactRequest(body);\n\tconst parityError = providerExecutionParityError(body.model, body.providerExecutionFingerprint);\n\tif (parityError) {\n\t\tconst response = createCompactFailureResponse(\n\t\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\t\t409,\n\t\t\tparityError,\n\t\t\t\"not_started\",\n\t\t);\n\t\tsendJson(res, response.status, response.body);\n\t\treturn;\n\t}\n\tconst action = await enqueueCompactSetup(runtime, async () => {\n\t\tif (runtime.closing) return { kind: \"closing\" } as const;\n\t\tawait runtime.store.prune();\n\t\tconst existingState = await runtime.store.get(body.sessionId, body.operationId);\n\t\tif (existingState) {\n\t\t\tif (existingState.requestMac !== requestHash) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"response\",\n\t\t\t\t\tresponse: createCompactFailureResponse(\n\t\t\t\t\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\t\t\t\t\t409,\n\t\t\t\t\t\t\"operationId is already bound to a different compaction request\",\n\t\t\t\t\t\t\"not_started\",\n\t\t\t\t\t),\n\t\t\t\t} as const;\n\t\t\t}\n\t\t\tif (existingState.status !== \"running\") {\n\t\t\t\tconst plan = compactTerminalPlanFromState(existingState);\n\t\t\t\tawait enqueueSessionStoreMutation(mutations, body.sessionId, () => applyCompactTerminalPlan(config, plan));\n\t\t\t\tconst replay: CompactRunRecord = {\n\t\t\t\t\tsessionId: body.sessionId,\n\t\t\t\t\toperationId: body.operationId,\n\t\t\t\t\trequestHash,\n\t\t\t\t\tstatus: \"settled\",\n\t\t\t\t\tresult: plan.response,\n\t\t\t\t\tpromise: Promise.resolve(plan.response),\n\t\t\t\t\tabortController: new AbortController(),\n\t\t\t\t\tsubscribers: new Set(),\n\t\t\t\t};\n\t\t\t\treturn { kind: \"run\", run: replay } as const;\n\t\t\t}\n\t\t\tconst activeRun = runtime.activeRuns.get(compactRunKey(body.sessionId, body.operationId));\n\t\t\tif (!activeRun) {\n\t\t\t\tthrow new StreamRunStateError(\"Durable running compaction has no active provider execution\");\n\t\t\t}\n\t\t\treturn { kind: \"run\", run: activeRun } as const;\n\t\t}\n\t\treturn enqueueSessionMutation(mutations, body.sessionId, async () => {\n\t\t\tconst prepared = prepareSessionCompact(body);\n\t\t\tif (\"status\" in prepared) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"response\",\n\t\t\t\t\tresponse: compactNotStartedResponse(body, requestHash, prepared),\n\t\t\t\t} as const;\n\t\t\t}\n\t\t\tconst capacityFailure = preflightCompactionCapacity(config, body, prepared, requestHash);\n\t\t\tif (capacityFailure) {\n\t\t\t\treturn { kind: \"response\", response: capacityFailure } as const;\n\t\t\t}\n\t\t\tconst state = await runtime.store.begin({\n\t\t\t\tsessionId: body.sessionId,\n\t\t\t\trunId: body.operationId,\n\t\t\t\trequestMac: requestHash,\n\t\t\t});\n\t\t\tif (state.status !== \"running\") {\n\t\t\t\tthrow new StreamRunStateError(\"New durable compaction did not begin in running state\");\n\t\t\t}\n\t\t\tconst abortController = new AbortController();\n\t\t\tlet resolveTerminal: ((response: SessionCompactHttpResponse) => void) | undefined;\n\t\t\tlet rejectTerminal: ((error: unknown) => void) | undefined;\n\t\t\tconst terminal = new Promise<SessionCompactHttpResponse>((resolve, reject) => {\n\t\t\t\tresolveTerminal = resolve;\n\t\t\t\trejectTerminal = reject;\n\t\t\t});\n\t\t\tconst run: CompactRunRecord = {\n\t\t\t\tsessionId: body.sessionId,\n\t\t\t\toperationId: body.operationId,\n\t\t\t\trequestHash,\n\t\t\t\tstatus: \"running\",\n\t\t\t\tpromise: terminal,\n\t\t\t\tabortController,\n\t\t\t\tsubscribers: new Set(),\n\t\t\t\tresolveTerminal,\n\t\t\t\trejectTerminal,\n\t\t\t};\n\t\t\truntime.activeRuns.set(compactRunKey(body.sessionId, body.operationId), run);\n\t\t\tvoid (async () => {\n\t\t\t\tlet computed: CompactResult | ExtensionCompactionReplacement | SessionCompactHttpResponse;\n\t\t\t\ttry {\n\t\t\t\t\tcomputed = await computeSessionCompaction(body, prepared, abortController.signal);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcomputed = {\n\t\t\t\t\t\tstatus: 500,\n\t\t\t\t\t\tbody: { error: error instanceof Error ? error.message : String(error) },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (\"status\" in computed) {\n\t\t\t\t\tconst error =\n\t\t\t\t\t\ttypeof computed.body.error === \"string\" ? computed.body.error : \"Compaction provider failed\";\n\t\t\t\t\treturn settleCompactRun(\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\truntime,\n\t\t\t\t\t\tmutations,\n\t\t\t\t\t\trun,\n\t\t\t\t\t\tcreateCompactTerminalPlan(run, createCompactFailureResponse(run, computed.status, error, \"terminal\")),\n\t\t\t\t\t\t\"failed\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (abortController.signal.aborted) {\n\t\t\t\t\treturn settleCompactRun(\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\truntime,\n\t\t\t\t\t\tmutations,\n\t\t\t\t\t\trun,\n\t\t\t\t\t\tcreateCompactTerminalPlan(\n\t\t\t\t\t\t\trun,\n\t\t\t\t\t\t\tcreateCompactFailureResponse(run, 499, \"Compaction aborted by user\", \"terminal\"),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"failed\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn settleCompactRun(config, runtime, mutations, run, () =>\n\t\t\t\t\tcreateCompactionCommitPlan(body, prepared, requestHash, computed),\n\t\t\t\t);\n\t\t\t})().catch(() => undefined);\n\t\t\treturn { kind: \"run\", run } as const;\n\t\t});\n\t});\n\tif (action.kind === \"closing\") {\n\t\tconst response = createCompactFailureResponse(\n\t\t\t{ sessionId: body.sessionId, operationId: body.operationId, requestHash },\n\t\t\t503,\n\t\t\t\"pi-server is closing\",\n\t\t\t\"not_started\",\n\t\t);\n\t\tsendJson(res, response.status, response.body);\n\t\treturn;\n\t}\n\tif (action.kind === \"response\") {\n\t\tsendJson(res, action.response.status, action.response.body);\n\t\treturn;\n\t}\n\tconst run = action.run;\n\tif (run.status === \"running\" && run.subscribers.size >= COMPACT_RUN_MAX_SUBSCRIBERS) {\n\t\tsendJson(res, 503, { error: \"Too many subscribers for this compaction\" });\n\t\treturn;\n\t}\n\n\tif (body.streamResponse) {\n\t\tawait handleSessionCompactStream(runtime, run, res, runtime.drainIdleTimeoutMs);\n\t\treturn;\n\t}\n\n\tawait handleSessionCompactJsonStream(runtime, run, res, runtime.drainIdleTimeoutMs);\n}\n\nasync function handleSessionCompactRecovery(\n\tconfig: ServerConfig,\n\truntime: CompactRunRuntime,\n\tmutations: SessionMutationRuntime,\n\tsessionId: string,\n\toperationId: string,\n\trequestHash: string | undefined,\n\tres: ServerResponse,\n): Promise<void> {\n\tif (!requestHash || !/^[a-f0-9]{64}$/u.test(requestHash)) {\n\t\tsendJson(res, 400, { error: \"requestHash is required and must be a lowercase SHA-256 digest\" });\n\t\treturn;\n\t}\n\tconst action = await enqueueCompactSetup(runtime, async () => {\n\t\tconst state = await runtime.store.get(sessionId, operationId);\n\t\tif (!state) return { kind: \"missing\" } as const;\n\t\tif (state.requestMac !== requestHash) {\n\t\t\tthrow new StreamRunConflictError(\"operationId is bound to a different compaction request\");\n\t\t}\n\t\tif (state.status === \"running\") {\n\t\t\tconst active = runtime.activeRuns.get(compactRunKey(sessionId, operationId));\n\t\t\tif (!active) {\n\t\t\t\tthrow new StreamRunStateError(\"Durable running compaction has no active provider execution\");\n\t\t\t}\n\t\t\treturn { kind: \"run\", run: active } as const;\n\t\t}\n\t\tconst plan = compactTerminalPlanFromState(state);\n\t\tawait enqueueSessionStoreMutation(mutations, sessionId, () => applyCompactTerminalPlan(config, plan));\n\t\tconst replay: CompactRunRecord = {\n\t\t\tsessionId,\n\t\t\toperationId,\n\t\t\trequestHash,\n\t\t\tstatus: \"settled\",\n\t\t\tresult: plan.response,\n\t\t\tpromise: Promise.resolve(plan.response),\n\t\t\tabortController: new AbortController(),\n\t\t\tsubscribers: new Set(),\n\t\t};\n\t\treturn { kind: \"run\", run: replay } as const;\n\t});\n\tif (action.kind === \"missing\") {\n\t\tsendJson(res, 404, { error: \"compaction operation not found\" });\n\t\treturn;\n\t}\n\tawait handleSessionCompactStream(runtime, action.run, res, runtime.drainIdleTimeoutMs);\n}\n\nasync function handleAcknowledgeSessionCompact(\n\tconfig: ServerConfig,\n\truntime: CompactRunRuntime,\n\tmutations: SessionMutationRuntime,\n\tbody: SessionIdBody & { operationId?: string; requestHash?: string },\n\tres: ServerResponse,\n): Promise<void> {\n\tif (!body.sessionId || !body.operationId || !body.requestHash) {\n\t\tsendJson(res, 400, { error: \"sessionId, operationId, and requestHash are required\" });\n\t\treturn;\n\t}\n\tconst state = await enqueueCompactSetup(runtime, async () => {\n\t\tconst current = await runtime.store.get(body.sessionId, body.operationId!);\n\t\tif (!current) return undefined;\n\t\tif (current.requestMac !== body.requestHash) {\n\t\t\tthrow new StreamRunConflictError(\"operationId is bound to a different compaction request\");\n\t\t}\n\t\tif (current.status === \"running\") {\n\t\t\tthrow new StreamRunStateError(\"Cannot acknowledge a running compaction\");\n\t\t}\n\t\tconst plan = compactTerminalPlanFromState(current);\n\t\tawait enqueueSessionStoreMutation(mutations, body.sessionId, () => applyCompactTerminalPlan(config, plan));\n\t\tconst acknowledged = await runtime.store.acknowledge(body.sessionId, body.operationId!);\n\t\tawait runtime.store.prune();\n\t\treturn acknowledged;\n\t});\n\tif (!state) {\n\t\tsendJson(res, 404, { error: \"compaction operation not found\" });\n\t\treturn;\n\t}\n\tsendJson(res, 200, {\n\t\tacknowledged: true,\n\t\tsessionId: state.sessionId,\n\t\toperationId: state.runId,\n\t\trequestHash: state.requestMac,\n\t\tstatus: state.status,\n\t\tacknowledgedAt: state.acknowledgedAt,\n\t});\n}\n\ninterface ReservedCompactRunDeletion {\n\trun: CompactRunRecord;\n\tplan: CompactTerminalPlan;\n\tresolve: (response: SessionCompactHttpResponse) => void;\n\treject: (error: unknown) => void;\n}\n\nasync function reserveSessionCompactRunsForDeletion(\n\truntime: CompactRunRuntime,\n\tsessionId: string,\n): Promise<{ activeRuns: CompactRunRecord[]; reserved: ReservedCompactRunDeletion[] }> {\n\tconst activeRuns = [...runtime.activeRuns.values()].filter((run) => run.sessionId === sessionId);\n\tconst reserved: ReservedCompactRunDeletion[] = [];\n\tfor (const run of activeRuns) {\n\t\trun.abortController.abort();\n\t\tif (run.settlement) {\n\t\t\tawait run.settlement;\n\t\t\tcontinue;\n\t\t}\n\t\tconst plan = createCompactTerminalPlan(\n\t\t\trun,\n\t\t\tcreateCompactFailureResponse(run, 499, \"Session deleted while compaction was running\", \"terminal\"),\n\t\t);\n\t\tlet resolve!: (response: SessionCompactHttpResponse) => void;\n\t\tlet reject!: (error: unknown) => void;\n\t\tconst settlement = new Promise<SessionCompactHttpResponse>((resolvePromise, rejectPromise) => {\n\t\t\tresolve = resolvePromise;\n\t\t\treject = rejectPromise;\n\t\t});\n\t\trun.settlement = settlement;\n\t\tvoid settlement.catch(() => undefined);\n\t\treserved.push({ run, plan, resolve, reject });\n\t}\n\treturn { activeRuns, reserved };\n}\n\nasync function deleteSessionCompactRunsLocked(\n\truntime: CompactRunRuntime,\n\tsessionId: string,\n\tactiveRuns: CompactRunRecord[],\n\treserved: ReservedCompactRunDeletion[],\n): Promise<void> {\n\tfor (const { run, plan, resolve } of reserved) {\n\t\tconst state = await runtime.store.settle({\n\t\t\tsessionId: run.sessionId,\n\t\t\trunId: run.operationId,\n\t\t\tstatus: \"failed\",\n\t\t\tevent: JSON.stringify(plan),\n\t\t\tresult: plan,\n\t\t\terrorMessage: plan.response.body.error as string,\n\t\t});\n\t\tconst durablePlan = compactTerminalPlanFromState(state);\n\t\trun.status = \"settled\";\n\t\trun.result = durablePlan.response;\n\t\trun.resolveTerminal?.(durablePlan.response);\n\t\trun.resolveTerminal = undefined;\n\t\trun.rejectTerminal = undefined;\n\t\tresolve(durablePlan.response);\n\t}\n\tfor (const run of activeRuns) {\n\t\tfor (const response of run.subscribers) response.destroy();\n\t\truntime.activeRuns.delete(compactRunKey(run.sessionId, run.operationId));\n\t}\n\tconst states = await runtime.store.list();\n\tfor (const state of states) {\n\t\tif (state.sessionId !== sessionId) continue;\n\t\tawait runtime.store.delete(state.sessionId, state.runId);\n\t}\n}\n\nfunction handleDropLastAssistantError(config: ServerConfig, body: SessionIdBody, res: ServerResponse): void {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tlet dropped = false;\n\tconst existingSession = getSession(body.sessionId);\n\tconst session = existingSession\n\t\t? mutateAndPersistSession(config, body.sessionId, () => {\n\t\t\t\tdropped = dropLastAssistantError(body.sessionId);\n\t\t\t\tconst updated = getSession(body.sessionId);\n\t\t\t\tif (!updated) throw new Error(`Session ${body.sessionId} disappeared while dropping its assistant error`);\n\t\t\t\treturn updated;\n\t\t\t})\n\t\t: undefined;\n\tconst messageCount = session?.messages.length ?? 0;\n\tsendJson(res, 200, { success: true, dropped, messageCount });\n}\n\nfunction handleSessionHistory(\n\tsessionId: string,\n\tfrom: number | undefined,\n\tentriesFrom: number | undefined,\n\trevision: number | undefined,\n\tbaseTreeHash: string | undefined,\n\tprotocolVersion: number | undefined,\n\tres: ServerResponse,\n): void {\n\tconst session = getSession(sessionId);\n\tif (!session) {\n\t\tsendJson(res, 404, { error: \"session not found\" });\n\t\treturn;\n\t}\n\tif (protocolVersion !== undefined && protocolVersion !== PI_SERVER_PROTOCOL_VERSION) {\n\t\tsendJson(res, 400, {\n\t\t\terror: `Unsupported pi-server protocol version: ${protocolVersion}`,\n\t\t\tprotocolVersion: PI_SERVER_PROTOCOL_VERSION,\n\t\t});\n\t\treturn;\n\t}\n\tconst baseMessageCount = from ?? 0;\n\tif (\n\t\tentriesFrom !== undefined &&\n\t\tentriesFrom <= session.entries.length &&\n\t\t(revision === undefined || revision <= session.revision) &&\n\t\t(baseTreeHash === undefined || baseTreeHash === session.prefixHashes[entriesFrom])\n\t) {\n\t\tsendJson(\n\t\t\tres,\n\t\t\t200,\n\t\t\tprotocolVersion === PI_SERVER_PROTOCOL_VERSION\n\t\t\t\t? sessionTreePatchV2ResponseBody(session, entriesFrom, revision)\n\t\t\t\t: sessionTreePatchResponseBody(session, baseMessageCount, entriesFrom, revision),\n\t\t);\n\t\treturn;\n\t}\n\tsendJson(\n\t\tres,\n\t\t200,\n\t\tprotocolVersion === PI_SERVER_PROTOCOL_VERSION\n\t\t\t? sessionHistoryV2FullResponseBody(session)\n\t\t\t: sessionHistoryFullResponseBody(session, baseMessageCount),\n\t);\n}\n\nasync function handleSessionRun(\n\truntime: StreamRunRuntime,\n\tsessionId: string,\n\trunId: string,\n\tres: ServerResponse,\n): Promise<void> {\n\tconst state = await enqueueStreamRunSetup(runtime, async () => {\n\t\tawait runtime.store.prune();\n\t\treturn runtime.store.get(sessionId, runId);\n\t});\n\tif (!state) {\n\t\tsendJson(res, 404, { error: \"run not found\" });\n\t\treturn;\n\t}\n\tsendJson(res, 200, {\n\t\tsessionId: state.sessionId,\n\t\trunId: state.runId,\n\t\tstatus: state.status,\n\t\trequestMac: state.requestMac,\n\t\tnextSeq: state.nextSeq,\n\t\tmessage: messageFromDurableState(state),\n\t\terrorMessage: state.terminal?.errorMessage,\n\t\tacknowledgedAt: state.acknowledgedAt,\n\t});\n}\n\nasync function handleSessionRunEvents(\n\truntime: StreamRunRuntime,\n\tsessionId: string,\n\trunId: string,\n\tfrom: number,\n\tres: ServerResponse,\n): Promise<void> {\n\tconst action = await enqueueStreamRunSetup(runtime, async () => {\n\t\tawait runtime.store.prune();\n\t\tconst state = await runtime.store.get(sessionId, runId);\n\t\tif (!state) return { kind: \"missing\" } as const;\n\t\tif (from > state.nextSeq) {\n\t\t\treturn { kind: \"invalid_cursor\", nextSeq: state.nextSeq } as const;\n\t\t}\n\t\tif (state.status !== \"running\") {\n\t\t\treturn { kind: \"replay\", promise: replayDurableStreamRun(runtime, state, res, from) } as const;\n\t\t}\n\t\tconst run = runtime.activeRuns.get(runKey(sessionId, runId));\n\t\tif (!run) {\n\t\t\treturn { kind: \"unavailable\" } as const;\n\t\t}\n\t\tif (run.subscribers.size >= STREAM_RUN_MAX_SUBSCRIBERS) {\n\t\t\treturn { kind: \"subscriber_limit\" } as const;\n\t\t}\n\t\tif (!beginStreamResponse(res)) return { kind: \"attached\" } as const;\n\t\tsubscribeToStreamRun(runtime, run, res, from);\n\t\treturn { kind: \"attached\" } as const;\n\t});\n\tswitch (action.kind) {\n\t\tcase \"missing\":\n\t\t\tsendJson(res, 404, { error: \"run not found\" });\n\t\t\treturn;\n\t\tcase \"invalid_cursor\":\n\t\t\tsendJson(res, 409, { error: `from ${from} exceeds durable nextSeq ${action.nextSeq}` });\n\t\t\treturn;\n\t\tcase \"unavailable\":\n\t\t\tsendJson(res, 409, { error: \"Durable running stream has no active provider execution\" });\n\t\t\treturn;\n\t\tcase \"subscriber_limit\":\n\t\t\tsendJson(res, 503, { error: \"Too many subscribers for this stream run\" });\n\t\t\treturn;\n\t\tcase \"replay\":\n\t\t\tawait action.promise;\n\t\t\treturn;\n\t\tcase \"attached\":\n\t\t\treturn;\n\t}\n}\n\nexport function buildStreamContext(\n\tsession: SessionState,\n\tbody: Pick<StreamRequestBody, \"contextOverlay\" | \"ephemeralMessages\">,\n): Context {\n\tconst messages = body.contextOverlay ?? [...session.messages, ...(body.ephemeralMessages ?? [])];\n\treturn {\n\t\tsystemPrompt: session.staticContext?.systemPrompt,\n\t\tmessages,\n\t\ttools: session.staticContext?.tools,\n\t};\n}\n\nasync function terminateStreamRunWithProviderError(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\tmodel: ResolvedStream[\"model\"],\n\terrorMessage: string,\n): Promise<void> {\n\tif (run.status !== \"running\") return;\n\tlogProviderStreamFailure(run, model, errorMessage);\n\tawait persistTerminalStreamRun(runtime, run, createSyntheticAssistantMessage(run, errorMessage, \"error\"));\n}\n\nfunction executeStreamRun(\n\truntime: StreamRunRuntime,\n\trun: StreamRunRecord,\n\tmodel: ResolvedStream[\"model\"],\n\tcontext: Context,\n\tstreamOptions: SimpleStreamOptions,\n): void {\n\tlet stream: AsyncIterable<AssistantMessageEvent>;\n\ttry {\n\t\tstream = streamSimple(model, context, { ...streamOptions, signal: run.abortController.signal });\n\t} catch (error) {\n\t\tvoid terminateStreamRunWithProviderError(\n\t\t\truntime,\n\t\t\trun,\n\t\t\tmodel,\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t).catch((persistenceError: unknown) => {\n\t\t\tvoid handleStreamRunPersistenceFailure(runtime, run, persistenceError);\n\t\t});\n\t\treturn;\n\t}\n\n\tvoid (async () => {\n\t\ttry {\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (run.status !== \"running\") return;\n\t\t\t\tif (event.type === \"error\") {\n\t\t\t\t\tif (event.reason === \"error\") {\n\t\t\t\t\t\tlogProviderStreamFailure(run, model, event.error.errorMessage ?? event.reason);\n\t\t\t\t\t}\n\t\t\t\t\tawait persistTerminalStreamRun(runtime, run, withStreamRunDiagnostic(run, event.error));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (event.type === \"done\") {\n\t\t\t\t\tawait persistTerminalStreamRun(runtime, run, withStreamRunDiagnostic(run, event.message));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst proxyEvent = toProxyEvent(event, run);\n\t\t\t\tif (proxyEvent) await queueStreamRunEvent(runtime, run, proxyEvent);\n\t\t\t}\n\t\t\tawait terminateStreamRunWithProviderError(\n\t\t\t\truntime,\n\t\t\t\trun,\n\t\t\t\tmodel,\n\t\t\t\t\"Provider stream ended without a terminal event\",\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (run.shuttingDown || run.status !== \"running\") return;\n\t\t\tif (run.persistenceError) {\n\t\t\t\tawait handleStreamRunPersistenceFailure(runtime, run, run.persistenceError);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait terminateStreamRunWithProviderError(\n\t\t\t\truntime,\n\t\t\t\trun,\n\t\t\t\tmodel,\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t);\n\t\t}\n\t})().catch((error: unknown) => {\n\t\tvoid handleStreamRunPersistenceFailure(runtime, run, error);\n\t});\n}\n\nasync function handleStream(\n\tconfig: ServerConfig,\n\truntime: StreamRunRuntime,\n\tmutations: SessionMutationRuntime,\n\tbody: StreamRequestBody,\n\tres: ServerResponse,\n): Promise<void> {\n\tif (!body.sessionId) {\n\t\tsendJson(res, 400, { error: \"sessionId is required\" });\n\t\treturn;\n\t}\n\tif (body.runMode !== undefined && body.runMode !== \"main-durable\" && body.runMode !== \"auxiliary-transient\") {\n\t\tsendJson(res, 400, { error: \"runMode must be main-durable or auxiliary-transient\" });\n\t\treturn;\n\t}\n\tif (body.ephemeralMessages !== undefined && !Array.isArray(body.ephemeralMessages)) {\n\t\tsendJson(res, 400, { error: \"ephemeralMessages must be an array\" });\n\t\treturn;\n\t}\n\tif (body.contextOverlay !== undefined && !Array.isArray(body.contextOverlay)) {\n\t\tsendJson(res, 400, { error: \"contextOverlay must be an array\" });\n\t\treturn;\n\t}\n\tif (body.baseStaticContextHash === undefined) {\n\t\tsendJson(res, 400, { error: \"baseStaticContextHash is required\" });\n\t\treturn;\n\t}\n\tif (body.baseStaticContextHash !== \"\" && !/^[a-f0-9]{64}$/.test(body.baseStaticContextHash)) {\n\t\tsendJson(res, 400, {\n\t\t\terror: \"baseStaticContextHash must be empty or a lowercase 64-character SHA-256 digest\",\n\t\t});\n\t\treturn;\n\t}\n\tif (body.baseRevision === undefined) {\n\t\tsendJson(res, 400, { error: \"baseRevision is required\" });\n\t\treturn;\n\t}\n\tif (!Number.isSafeInteger(body.baseRevision) || body.baseRevision < 0) {\n\t\tsendJson(res, 400, { error: \"baseRevision must be a non-negative safe integer\" });\n\t\treturn;\n\t}\n\tconst baseStaticContextHash = body.baseStaticContextHash;\n\tconst baseRevision = body.baseRevision;\n\tconst cursor = body.eventCursor ?? 0;\n\tif (!Number.isSafeInteger(cursor) || cursor < 0) {\n\t\tsendJson(res, 400, { error: \"eventCursor must be a non-negative safe integer\" });\n\t\treturn;\n\t}\n\tif (body.baseTreeHash !== undefined && !/^[a-f0-9]{64}$/.test(body.baseTreeHash)) {\n\t\tsendJson(res, 400, { error: \"baseTreeHash must be a lowercase 64-character SHA-256 digest\" });\n\t\treturn;\n\t}\n\tif (body.baseEntryCount !== undefined && (!Number.isSafeInteger(body.baseEntryCount) || body.baseEntryCount < 0)) {\n\t\tsendJson(res, 400, { error: \"baseEntryCount must be a non-negative safe integer\" });\n\t\treturn;\n\t}\n\tif (\n\t\tbody.baseLeafId !== undefined &&\n\t\tbody.baseLeafId !== null &&\n\t\t(typeof body.baseLeafId !== \"string\" || body.baseLeafId.length === 0)\n\t) {\n\t\tsendJson(res, 400, { error: \"baseLeafId must be a non-empty string or null\" });\n\t\treturn;\n\t}\n\tconst parityError = providerExecutionParityError(body.model, body.providerExecutionFingerprint);\n\tif (parityError) {\n\t\tsendJson(res, 409, { error: parityError });\n\t\treturn;\n\t}\n\tconst requestHash = hashStreamRequest(body);\n\tconst storageRunId = body.runId ?? `anonymous:${randomUUID()}`;\n\tconst deletionVersion = sessionDeletionFences.get(mutations)?.versions.get(body.sessionId) ?? 0;\n\tconst action = await enqueueStreamRunSetup(runtime, () =>\n\t\tenqueueSessionMutation(\n\t\t\tmutations,\n\t\t\tbody.sessionId,\n\t\t\tasync () => {\n\t\t\t\tif (runtime.closing) return { kind: \"closing\" } as const;\n\t\t\t\tawait runtime.store.prune();\n\t\t\t\tconst existingState = body.runId ? await runtime.store.get(body.sessionId, body.runId) : undefined;\n\t\t\t\tif (existingState) {\n\t\t\t\t\tif (existingState.requestMac !== requestHash) {\n\t\t\t\t\t\tthrow new StreamRunConflictError(\"runId is already bound to a different stream request\");\n\t\t\t\t\t}\n\t\t\t\t\tif (cursor > existingState.nextSeq) {\n\t\t\t\t\t\tthrow new StreamRunConflictError(\n\t\t\t\t\t\t\t`eventCursor ${cursor} exceeds durable nextSeq ${existingState.nextSeq}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (existingState.status !== \"running\") {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tkind: \"replay\",\n\t\t\t\t\t\t\tpromise: replayDurableStreamRun(runtime, existingState, res, cursor),\n\t\t\t\t\t\t} as const;\n\t\t\t\t\t}\n\t\t\t\t\tconst existingRun = runtime.activeRuns.get(runKey(body.sessionId, body.runId!));\n\t\t\t\t\tif (!existingRun) {\n\t\t\t\t\t\tthrow new StreamRunStateError(\"Durable running stream has no active provider execution\");\n\t\t\t\t\t}\n\t\t\t\t\tif (existingRun.subscribers.size >= STREAM_RUN_MAX_SUBSCRIBERS) {\n\t\t\t\t\t\treturn { kind: \"subscriber_limit\" } as const;\n\t\t\t\t\t}\n\t\t\t\t\tif (beginStreamResponse(res)) {\n\t\t\t\t\t\tsubscribeToStreamRun(runtime, existingRun, res, cursor);\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"attached\" } as const;\n\t\t\t\t}\n\n\t\t\t\tconst existingSession = getSession(body.sessionId);\n\t\t\t\tif (!existingSession?.staticContext && !body.staticContext) {\n\t\t\t\t\treturn { kind: \"missing_context\" } as const;\n\t\t\t\t}\n\t\t\t\tif (body.baseTreeHash === undefined || body.baseEntryCount === undefined || body.baseLeafId === undefined) {\n\t\t\t\t\treturn { kind: \"missing_tree_base\" } as const;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t!matchesPiServerStreamBase(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbaseStaticContextHash,\n\t\t\t\t\t\t\tbaseTreeHash: body.baseTreeHash,\n\t\t\t\t\t\t\tbaseEntryCount: body.baseEntryCount,\n\t\t\t\t\t\t\tbaseLeafId: body.baseLeafId,\n\t\t\t\t\t\t\tbaseRevision,\n\t\t\t\t\t\t},\n\t\t\t\t\t\texistingSession\n\t\t\t\t\t\t\t? sessionIdentity(existingSession)\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tstaticContextHash: \"\",\n\t\t\t\t\t\t\t\t\ttreeHash: PI_SERVER_EMPTY_TREE_HASH,\n\t\t\t\t\t\t\t\t\tentryCount: 0,\n\t\t\t\t\t\t\t\t\tleafId: null,\n\t\t\t\t\t\t\t\t\trevision: 0,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn { kind: \"session_conflict\" } as const;\n\t\t\t\t}\n\t\t\t\tconst staticContext = body.staticContext;\n\t\t\t\tconst session =\n\t\t\t\t\texistingSession && !staticContext\n\t\t\t\t\t\t? existingSession\n\t\t\t\t\t\t: await enqueueSessionCapacityMutation(() =>\n\t\t\t\t\t\t\t\tmutateAndPersistSession(config, body.sessionId, () =>\n\t\t\t\t\t\t\t\t\tapplySessionMutation(body.sessionId, staticContext ? { staticContext } : {}),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\tconst expectedIdentity = streamBaseIdentity(session);\n\t\t\t\tconst resolved = resolveStreamOptions(config, body.model, body);\n\t\t\t\tconst state = await runtime.store.begin({\n\t\t\t\t\tsessionId: body.sessionId,\n\t\t\t\t\trunId: storageRunId,\n\t\t\t\t\trequestMac: requestHash,\n\t\t\t\t});\n\t\t\t\tconst currentSession = getSession(body.sessionId);\n\t\t\t\tif (!currentSession || !matchesPiServerStreamBase(expectedIdentity, sessionIdentity(currentSession))) {\n\t\t\t\t\tawait runtime.store.rollbackUnstartedBegin({\n\t\t\t\t\t\tsessionId: body.sessionId,\n\t\t\t\t\t\trunId: storageRunId,\n\t\t\t\t\t\trequestMac: requestHash,\n\t\t\t\t\t});\n\t\t\t\t\treturn { kind: \"session_conflict\" } as const;\n\t\t\t\t}\n\t\t\t\tconst context = buildStreamContext(currentSession, body);\n\t\t\t\tconst run = createActiveStreamRun(state, body.runId, resolved.model);\n\t\t\t\truntime.activeRuns.set(runKey(body.sessionId, storageRunId), run);\n\t\t\t\tif (beginStreamResponse(res)) {\n\t\t\t\t\tsubscribeToStreamRun(runtime, run, res, cursor);\n\t\t\t\t}\n\t\t\t\treturn { kind: \"start\", run, context, resolved } as const;\n\t\t\t},\n\t\t\tfalse,\n\t\t\tdeletionVersion,\n\t\t),\n\t);\n\tswitch (action.kind) {\n\t\tcase \"closing\":\n\t\t\tsendJson(res, 503, { error: \"pi-server is closing\" });\n\t\t\treturn;\n\t\tcase \"subscriber_limit\":\n\t\t\tsendJson(res, 503, { error: \"Too many subscribers for this stream run\" });\n\t\t\treturn;\n\t\tcase \"missing_context\":\n\t\t\tsendJson(res, 400, { error: \"Session has no static context. Initialize with /api/session/init first.\" });\n\t\t\treturn;\n\t\tcase \"missing_tree_base\":\n\t\t\tsendJson(res, 400, { error: \"baseTreeHash, baseEntryCount, and baseLeafId are required for a new run\" });\n\t\t\treturn;\n\t\tcase \"session_conflict\":\n\t\t\tsendJson(res, 409, {\n\t\t\t\terror: \"Stream request base identity does not match the current server session\",\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"replay\":\n\t\t\tawait action.promise;\n\t\t\treturn;\n\t\tcase \"attached\":\n\t\t\treturn;\n\t\tcase \"start\":\n\t\t\texecuteStreamRun(runtime, action.run, action.resolved.model, action.context, action.resolved.options);\n\t\t\treturn;\n\t}\n}\n\nasync function handleAcknowledgeSessionRun(\n\truntime: StreamRunRuntime,\n\tbody: SessionIdBody & { runId?: string },\n\tres: ServerResponse,\n): Promise<void> {\n\tif (!body.sessionId || !body.runId) {\n\t\tsendJson(res, 400, { error: \"sessionId and runId are required\" });\n\t\treturn;\n\t}\n\tconst state = await enqueueStreamRunSetup(runtime, () => runtime.store.acknowledge(body.sessionId, body.runId!));\n\tsendJson(res, 200, {\n\t\tacknowledged: true,\n\t\tsessionId: state.sessionId,\n\t\trunId: state.runId,\n\t\trequestMac: state.requestMac,\n\t\tstatus: state.status,\n\t\tacknowledgedAt: state.acknowledgedAt,\n\t});\n}\n\nasync function deleteSessionStreamRunsLocked(runtime: StreamRunRuntime, sessionId: string): Promise<void> {\n\tconst activeRuns = [...runtime.activeRuns.values()].filter((run) => run.sessionId === sessionId);\n\tfor (const run of activeRuns) {\n\t\tawait abortStreamRun(runtime, run, \"Session deleted while provider stream was running\");\n\t\tfor (const res of [...run.subscribers.keys()]) {\n\t\t\tdetachStreamRunSubscriber(runtime, run, res);\n\t\t\tres.destroy();\n\t\t}\n\t\truntime.activeRuns.delete(runKey(run.sessionId, run.storageRunId));\n\t}\n\tconst replays = [...(runtime.replayReaders.get(sessionId) ?? [])];\n\tfor (const replay of replays) {\n\t\treplay.abortController.abort();\n\t\treplay.response.destroy();\n\t}\n\tconst pending = [\n\t\t...(runtime.subscriberPumps.get(sessionId) ?? []),\n\t\t...replays.flatMap((replay) => (replay.promise ? [replay.promise] : [])),\n\t];\n\tif (pending.length > 0) {\n\t\tawait Promise.allSettled(pending);\n\t}\n\tconst states = await runtime.store.list();\n\tfor (const state of states) {\n\t\tif (state.sessionId !== sessionId) continue;\n\t\tawait runtime.store.delete(state.sessionId, state.runId);\n\t}\n}\n\nasync function deleteSessionAtomically(\n\tconfig: ServerConfig,\n\tdeletePersistence: typeof deletePersistedSession,\n\tstreamRuntime: StreamRunRuntime,\n\tcompactRuntime: CompactRunRuntime,\n\tsessionMutations: SessionMutationRuntime,\n\tsessionId: string,\n): Promise<void> {\n\tconst deletionState = sessionDeletionFenceState(sessionMutations);\n\tadvanceSessionDeletionVersion(deletionState, sessionId);\n\tdeletionState.active.set(sessionId, (deletionState.active.get(sessionId) ?? 0) + 1);\n\tlet fenceClosed = false;\n\tconst closeFence = () => {\n\t\tif (fenceClosed) return;\n\t\tfenceClosed = true;\n\t\tconst remaining = (deletionState.active.get(sessionId) ?? 1) - 1;\n\t\tif (remaining === 0) deletionState.active.delete(sessionId);\n\t\telse deletionState.active.set(sessionId, remaining);\n\t\tadvanceSessionDeletionVersion(deletionState, sessionId);\n\t\tcleanupSessionDeletionFence(sessionMutations, sessionId);\n\t};\n\tlet reserved: ReservedCompactRunDeletion[] = [];\n\ttry {\n\t\tawait enqueueStreamRunSetup(streamRuntime, () =>\n\t\t\tenqueueCompactSetup(compactRuntime, async () => {\n\t\t\t\tconst compactDeletion = await reserveSessionCompactRunsForDeletion(compactRuntime, sessionId);\n\t\t\t\treserved = compactDeletion.reserved;\n\t\t\t\tawait enqueueSessionStoreMutation(\n\t\t\t\t\tsessionMutations,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait deleteSessionStreamRunsLocked(streamRuntime, sessionId);\n\t\t\t\t\t\t\tawait deleteSessionCompactRunsLocked(\n\t\t\t\t\t\t\t\tcompactRuntime,\n\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\tcompactDeletion.activeRuns,\n\t\t\t\t\t\t\t\tcompactDeletion.reserved,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdeleteSessionFromStore(sessionId);\n\t\t\t\t\t\t\tdeletePersistence(config.sessionStoreDir, sessionId);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tcloseFence();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}),\n\t\t);\n\t} catch (error) {\n\t\tfor (const { run, reject } of reserved) {\n\t\t\tif (run.status !== \"running\") continue;\n\t\t\trun.rejectTerminal?.(error);\n\t\t\trun.resolveTerminal = undefined;\n\t\t\trun.rejectTerminal = undefined;\n\t\t\treject(error);\n\t\t}\n\t\tfailStopServerPersistence(currentServerPersistenceRuntime(), error);\n\t\tthrow error;\n\t} finally {\n\t\tcloseFence();\n\t}\n}\n\nasync function handlePostRequest(\n\tconfig: ServerConfig,\n\tstreamRuntime: StreamRunRuntime,\n\tcompactRuntime: CompactRunRuntime,\n\tsessionMutations: SessionMutationRuntime,\n\tpathname: string,\n\tbody: unknown,\n\tres: ServerResponse,\n): Promise<boolean> {\n\tif (pathname === \"/api/receive\") {\n\t\ttry {\n\t\t\tsendJson(res, 200, receiveUpload(config.uploadDir, body));\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof ReceiveUploadError)) throw error;\n\t\t\tsendJson(res, error.status, { error: error.message });\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/init\") {\n\t\tconst request = body as SessionInitBody;\n\t\tawait enqueueSessionStoreMutation(sessionMutations, request.sessionId, () =>\n\t\t\thandleSessionInit(config, request, res),\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/update\") {\n\t\tconst request = body as SessionInitBody & { staticContext: SessionStaticContext };\n\t\tawait enqueueSessionStoreMutation(sessionMutations, request.sessionId, () =>\n\t\t\thandleSessionUpdate(config, request, res),\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/sync\") {\n\t\tconst request = body as SessionSyncBody;\n\t\tawait enqueueSessionStoreMutation(sessionMutations, request.sessionId, () =>\n\t\t\thandleSessionSync(config, request, res),\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/append\") {\n\t\tconst request = body as SessionAppendBody;\n\t\tawait enqueueSessionStoreMutation(sessionMutations, request.sessionId, () =>\n\t\t\thandleSessionAppend(config, request, res),\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/tree/sync\") {\n\t\tconst request = body as SessionTreeSyncBody;\n\t\tawait enqueueSessionStoreMutation(sessionMutations, request.sessionId, () =>\n\t\t\thandleSessionTreeSync(config, request, res),\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/tree/append\") {\n\t\tconst request = body as SessionTreeSyncBody;\n\t\tawait enqueueSessionStoreMutation(sessionMutations, request.sessionId, () =>\n\t\t\thandleSessionTreeAppend(config, request, res),\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/tree/switch\") {\n\t\tconst request = body as SessionTreeSwitchBody;\n\t\tawait enqueueSessionStoreMutation(sessionMutations, request.sessionId, () =>\n\t\t\thandleSessionTreeSwitch(config, request, res),\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/drop-last-assistant-error\") {\n\t\tconst request = body as SessionIdBody;\n\t\tawait enqueueSessionStoreMutation(sessionMutations, request.sessionId, () =>\n\t\t\thandleDropLastAssistantError(config, request, res),\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/run/cancel\") {\n\t\tawait handleCancelSessionRun(streamRuntime, body as SessionIdBody & { runId?: string }, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/run/ack\") {\n\t\tawait handleAcknowledgeSessionRun(streamRuntime, body as SessionIdBody & { runId?: string }, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/compact/cancel\") {\n\t\tawait handleCancelSessionCompact(\n\t\t\tconfig,\n\t\t\tcompactRuntime,\n\t\t\tsessionMutations,\n\t\t\tbody as SessionIdBody & { operationId?: string; requestHash?: string },\n\t\t\tres,\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/compact/ack\") {\n\t\tawait handleAcknowledgeSessionCompact(\n\t\t\tconfig,\n\t\t\tcompactRuntime,\n\t\t\tsessionMutations,\n\t\t\tbody as SessionIdBody & { operationId?: string; requestHash?: string },\n\t\t\tres,\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/session/compact\") {\n\t\tawait handleSessionCompact(config, compactRuntime, sessionMutations, body as SessionCompactBody, res);\n\t\treturn true;\n\t}\n\n\tif (pathname === \"/api/stream\") {\n\t\tawait handleStream(config, streamRuntime, sessionMutations, body as StreamRequestBody, res);\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction createOwnedPiServer(configOverride: PiServerOptions | undefined, ownership: symbol): HttpServer {\n\tconst config = loadConfig(configOverride);\n\tconst drainIdleTimeoutMs = positiveServerOption(\n\t\tconfigOverride?.streamDrainIdleTimeoutMs,\n\t\t\"PI_SERVER_STREAM_DRAIN_IDLE_TIMEOUT_MS\",\n\t\tDEFAULT_STREAM_DRAIN_IDLE_TIMEOUT_MS,\n\t\t\"streamDrainIdleTimeoutMs\",\n\t);\n\tconst requestBodyNoProgressTimeoutMs = positiveServerOption(\n\t\tconfigOverride?.requestBodyNoProgressTimeoutMs,\n\t\t\"PI_SERVER_REQUEST_BODY_NO_PROGRESS_TIMEOUT_MS\",\n\t\tREQUEST_BODY_NO_PROGRESS_TIMEOUT_MS,\n\t\t\"requestBodyNoProgressTimeoutMs\",\n\t);\n\tconst streamRunMaxFrameBytes = positiveServerOption(\n\t\tconfigOverride?.streamRunMaxFrameBytes,\n\t\t\"PI_SERVER_STREAM_RUN_MAX_FRAME_BYTES\",\n\t\tSTREAM_RUN_MAX_FRAME_BYTES,\n\t\t\"streamRunMaxFrameBytes\",\n\t);\n\tconst streamRunMaxBytes = positiveServerOption(\n\t\tconfigOverride?.streamRunMaxBytes,\n\t\t\"PI_SERVER_STREAM_RUN_MAX_BYTES\",\n\t\tSTREAM_RUN_MAX_BYTES,\n\t\t\"streamRunMaxBytes\",\n\t);\n\tconst streamRunMaxTotalBytes = positiveServerOption(\n\t\tconfigOverride?.streamRunMaxTotalBytes,\n\t\t\"PI_SERVER_STREAM_RUN_MAX_TOTAL_BYTES\",\n\t\tSTREAM_RUN_MAX_TOTAL_BYTES,\n\t\t\"streamRunMaxTotalBytes\",\n\t);\n\tconst streamRunTerminalReserveBytes = positiveServerOption(\n\t\tconfigOverride?.streamRunTerminalReserveBytes,\n\t\t\"PI_SERVER_STREAM_RUN_TERMINAL_RESERVE_BYTES\",\n\t\tSTREAM_RUN_TERMINAL_RESERVE_BYTES,\n\t\t\"streamRunTerminalReserveBytes\",\n\t);\n\tconst streamRunIoNoProgressTimeoutMs = positiveServerOption(\n\t\tconfigOverride?.streamRunIoNoProgressTimeoutMs,\n\t\t\"PI_SERVER_STREAM_RUN_IO_NO_PROGRESS_TIMEOUT_MS\",\n\t\t120_000,\n\t\t\"streamRunIoNoProgressTimeoutMs\",\n\t);\n\tconst compactRunMaxBytes = positiveServerOption(\n\t\tconfigOverride?.compactRunMaxBytes,\n\t\t\"PI_SERVER_COMPACT_RUN_MAX_BYTES\",\n\t\tCOMPACT_RUN_MAX_BYTES,\n\t\t\"compactRunMaxBytes\",\n\t);\n\tconst compactRunMaxTotalBytes = positiveServerOption(\n\t\tconfigOverride?.compactRunMaxTotalBytes,\n\t\t\"PI_SERVER_COMPACT_RUN_MAX_TOTAL_BYTES\",\n\t\tCOMPACT_RUN_MAX_TOTAL_BYTES,\n\t\t\"compactRunMaxTotalBytes\",\n\t);\n\tconst compactRunTerminalReserveBytes = positiveServerOption(\n\t\tconfigOverride?.compactRunTerminalReserveBytes,\n\t\t\"PI_SERVER_COMPACT_RUN_TERMINAL_RESERVE_BYTES\",\n\t\tCOMPACT_RUN_TERMINAL_RESERVE_BYTES,\n\t\t\"compactRunTerminalReserveBytes\",\n\t);\n\tconst compactRunIoNoProgressTimeoutMs = positiveServerOption(\n\t\tconfigOverride?.compactRunIoNoProgressTimeoutMs,\n\t\t\"PI_SERVER_COMPACT_RUN_IO_NO_PROGRESS_TIMEOUT_MS\",\n\t\t120_000,\n\t\t\"compactRunIoNoProgressTimeoutMs\",\n\t);\n\tconst sessionMaxEntries = positiveServerOption(\n\t\tconfigOverride?.sessionMaxEntries,\n\t\t\"PI_SERVER_SESSION_MAX_ENTRIES\",\n\t\tDEFAULT_SESSION_CAPACITY_LIMITS.maxEntriesPerSession,\n\t\t\"sessionMaxEntries\",\n\t);\n\tconst sessionMaxLogicalBytes = positiveServerOption(\n\t\tconfigOverride?.sessionMaxLogicalBytes,\n\t\t\"PI_SERVER_SESSION_MAX_LOGICAL_BYTES\",\n\t\tDEFAULT_SESSION_CAPACITY_LIMITS.maxLogicalBytesPerSession,\n\t\t\"sessionMaxLogicalBytes\",\n\t);\n\tconst sessionsMaxEntries = positiveServerOption(\n\t\tconfigOverride?.sessionsMaxEntries,\n\t\t\"PI_SERVER_SESSIONS_MAX_ENTRIES\",\n\t\tDEFAULT_SESSION_CAPACITY_LIMITS.maxAggregateEntries,\n\t\t\"sessionsMaxEntries\",\n\t);\n\tconst sessionsMaxLogicalBytes = positiveServerOption(\n\t\tconfigOverride?.sessionsMaxLogicalBytes,\n\t\t\"PI_SERVER_SESSIONS_MAX_LOGICAL_BYTES\",\n\t\tDEFAULT_SESSION_CAPACITY_LIMITS.maxAggregateLogicalBytes,\n\t\t\"sessionsMaxLogicalBytes\",\n\t);\n\tconst maxLoadedSessions = positiveServerOption(\n\t\tconfigOverride?.maxLoadedSessions,\n\t\t\"PI_SERVER_MAX_LOADED_SESSIONS\",\n\t\tDEFAULT_SESSION_CAPACITY_LIMITS.maxLoadedSessions,\n\t\t\"maxLoadedSessions\",\n\t);\n\tconfigureSessionCapacityLimits({\n\t\tmaxEntriesPerSession: sessionMaxEntries,\n\t\tmaxLogicalBytesPerSession: sessionMaxLogicalBytes,\n\t\tmaxAggregateEntries: sessionsMaxEntries,\n\t\tmaxAggregateLogicalBytes: sessionsMaxLogicalBytes,\n\t\tmaxLoadedSessions,\n\t});\n\tconst persistenceRuntime: ServerPersistenceRuntime = {\n\t\tonFatalPersistenceError: configOverride?.onFatalStreamPersistenceError,\n\t\tsessionFaultInjector: configOverride?.sessionPersistenceFaultInjector,\n\t};\n\tactiveServerPersistenceRuntime = persistenceRuntime;\n\tlet streamRuntime: StreamRunRuntime;\n\tconst streamStore = new StreamRunPersistence({\n\t\trootDir: join(config.sessionStoreDir, \".runs\"),\n\t\tlockPath: join(config.sessionStoreDir, \".pi-server-owner.sqlite\"),\n\t\tmaxRuns: STREAM_RUN_MAX_RECORDS,\n\t\tmaxFrameBytes: streamRunMaxFrameBytes,\n\t\tmaxRunBytes: streamRunMaxBytes,\n\t\tmaxTotalBytes: streamRunMaxTotalBytes,\n\t\tterminalReserveBytes: streamRunTerminalReserveBytes,\n\t\tmaxBatchBytes: streamRunMaxFrameBytes,\n\t\tioNoProgressTimeoutMs: streamRunIoNoProgressTimeoutMs,\n\t\tfaultInjector: configOverride?.streamRunFaultInjector,\n\t\trestartFailureEvent: encodeProxyEvent(createStreamErrorEvent(STREAM_RUN_RESTART_ERROR_MESSAGE)),\n\t\trestartFailureMessage: STREAM_RUN_RESTART_ERROR_MESSAGE,\n\t\trestartFailureTerminal: createRestartFailureTerminal,\n\t\tonFatalError: (error) => failStopServerPersistence(persistenceRuntime, error),\n\t});\n\tstreamRuntime = {\n\t\tstore: streamStore,\n\t\tactiveRuns: new Map(),\n\t\tsetupQueue: Promise.resolve(),\n\t\tsubscriberPumps: new Map(),\n\t\treplayReaders: new Map(),\n\t\tdrainIdleTimeoutMs,\n\t\tclosing: false,\n\t};\n\tpersistenceRuntime.streamRuntime = streamRuntime;\n\tconst sessionMutations: SessionMutationRuntime = { queues: new Map() };\n\tlet compactRuntime: CompactRunRuntime;\n\tconst compactStore = new StreamRunPersistence({\n\t\trootDir: join(config.sessionStoreDir, \".compactions\"),\n\t\tlockPath: join(config.sessionStoreDir, \".pi-server-compact-owner.sqlite\"),\n\t\tmaxRuns: COMPACT_RUN_MAX_RECORDS,\n\t\tmaxFrameBytes: COMPACT_RUN_MAX_FRAME_BYTES,\n\t\tmaxRunBytes: compactRunMaxBytes,\n\t\tmaxTotalBytes: compactRunMaxTotalBytes,\n\t\tterminalReserveBytes: compactRunTerminalReserveBytes,\n\t\tmaxBatchBytes: COMPACT_RUN_MAX_FRAME_BYTES,\n\t\tioNoProgressTimeoutMs: compactRunIoNoProgressTimeoutMs,\n\t\tfaultInjector: configOverride?.compactRunFaultInjector,\n\t\trestartFailureMessage: \"restart-unknown\",\n\t\trestartFailureEvent: JSON.stringify({ error: \"restart-unknown\" }),\n\t\trestartFailureTerminal: createCompactRestartFailureTerminal,\n\t\tonFatalError: (error) => failStopServerPersistence(persistenceRuntime, error),\n\t});\n\tcompactRuntime = {\n\t\tstore: compactStore,\n\t\tactiveRuns: new Map(),\n\t\tsetupQueue: Promise.resolve(),\n\t\tdrainIdleTimeoutMs,\n\t\tclosing: false,\n\t};\n\tpersistenceRuntime.compactRuntime = compactRuntime;\n\tlet streamStoreInitialized = false;\n\tlet compactStoreInitialized = false;\n\tconst serverInitialization = (async () => {\n\t\tawait streamStore.initialize();\n\t\tstreamStoreInitialized = true;\n\t\tawait compactStore.initialize();\n\t\tcompactStoreInitialized = true;\n\t\tloadPersistedSessions(config.sessionStoreDir);\n\t\tconst compactStates = await compactStore.list();\n\t\tfor (const compactState of compactStates) {\n\t\t\tif (compactState.status === \"running\") {\n\t\t\t\tthrow new StreamRunStateError(\"Compaction recovery left a durable operation running\");\n\t\t\t}\n\t\t\tconst state = await compactStore.get(compactState.sessionId, compactState.runId);\n\t\t\tif (!state) {\n\t\t\t\tthrow new StreamRunCorruptionError(\n\t\t\t\t\t`${compactState.sessionId}/${compactState.runId}`,\n\t\t\t\t\t\"compaction disappeared during startup recovery\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tapplyCompactTerminalPlan(config, compactTerminalPlanFromState(state));\n\t\t}\n\t})();\n\tconst serverReady = serverInitialization.catch((error: unknown) => {\n\t\tfailStopServerPersistence(persistenceRuntime, error);\n\t\tif (streamStoreInitialized && !compactStoreInitialized) {\n\t\t\tvoid streamStore.close().catch(() => undefined);\n\t\t}\n\t});\n\tconst chunkTargetResponses = new Map<string, ChunkTargetResponseRecord>();\n\n\tconst server = createServer(async (req, res) => {\n\t\ttry {\n\t\t\tawait serverReady;\n\t\t\tconst url = new URL(req.url ?? \"/\", `http://${config.host}:${config.port}`);\n\n\t\t\tif (persistenceRuntime.fatalError) {\n\t\t\t\tsendJson(res, 503, { status: \"error\", error: \"durable operation persistence health failure\" });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (req.method === \"GET\" && url.pathname === \"/health\") {\n\t\t\t\tsendJson(res, 200, { status: \"ok\" });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!authenticate(config, req)) {\n\t\t\t\tconst body =\n\t\t\t\t\treq.method === \"GET\" && url.pathname === \"/\"\n\t\t\t\t\t\t? { error: \"Unauthorized\", version: PI_SERVER_VERSION }\n\t\t\t\t\t\t: { error: \"Unauthorized\" };\n\t\t\t\tsendJson(res, 401, body);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (req.method === \"GET\" && url.pathname === \"/api/sessions\") {\n\t\t\t\tsendJson(res, 200, { sessions: listSessions() });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst runEventsMatch = /^\\/api\\/session\\/([^/]+)\\/runs\\/([^/]+)\\/events$/.exec(url.pathname);\n\t\t\tif (req.method === \"GET\" && runEventsMatch) {\n\t\t\t\tconst fromParam = url.searchParams.get(\"from\");\n\t\t\t\tconst from = fromParam === null ? 0 : Number(fromParam);\n\t\t\t\tif (!Number.isSafeInteger(from) || from < 0) {\n\t\t\t\t\tsendJson(res, 400, { error: \"from must be a non-negative safe integer\" });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait handleSessionRunEvents(\n\t\t\t\t\tstreamRuntime,\n\t\t\t\t\tdecodeURIComponent(runEventsMatch[1]),\n\t\t\t\t\tdecodeURIComponent(runEventsMatch[2]),\n\t\t\t\t\tfrom,\n\t\t\t\t\tres,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst runMatch = /^\\/api\\/session\\/([^/]+)\\/runs\\/([^/]+)$/.exec(url.pathname);\n\t\t\tif (req.method === \"GET\" && runMatch) {\n\t\t\t\tawait handleSessionRun(\n\t\t\t\t\tstreamRuntime,\n\t\t\t\t\tdecodeURIComponent(runMatch[1]),\n\t\t\t\t\tdecodeURIComponent(runMatch[2]),\n\t\t\t\t\tres,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst compactMatch = /^\\/api\\/session\\/([^/]+)\\/compactions\\/([^/]+)$/.exec(url.pathname);\n\t\t\tif (req.method === \"GET\" && compactMatch) {\n\t\t\t\tawait handleSessionCompactRecovery(\n\t\t\t\t\tconfig,\n\t\t\t\t\tcompactRuntime,\n\t\t\t\t\tsessionMutations,\n\t\t\t\t\tdecodeURIComponent(compactMatch[1]),\n\t\t\t\t\tdecodeURIComponent(compactMatch[2]),\n\t\t\t\t\turl.searchParams.get(\"requestHash\") ?? undefined,\n\t\t\t\t\tres,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (req.method === \"GET\" && url.pathname.startsWith(\"/api/session/\") && url.pathname.endsWith(\"/history\")) {\n\t\t\t\tconst encodedSessionId = url.pathname.slice(\"/api/session/\".length, -\"/history\".length);\n\t\t\t\tconst fromParam = url.searchParams.get(\"from\");\n\t\t\t\tconst from = fromParam === null ? undefined : Number(fromParam);\n\t\t\t\tif (from !== undefined && (!Number.isInteger(from) || from < 0)) {\n\t\t\t\t\tsendJson(res, 400, { error: \"from must be a non-negative integer\" });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst entriesFromParam = url.searchParams.get(\"entriesFrom\");\n\t\t\t\tconst entriesFrom = entriesFromParam === null ? undefined : Number(entriesFromParam);\n\t\t\t\tif (entriesFrom !== undefined && (!Number.isInteger(entriesFrom) || entriesFrom < 0)) {\n\t\t\t\t\tsendJson(res, 400, { error: \"entriesFrom must be a non-negative integer\" });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst revisionParam = url.searchParams.get(\"revision\");\n\t\t\t\tconst revision = revisionParam === null ? undefined : Number(revisionParam);\n\t\t\t\tif (revision !== undefined && (!Number.isInteger(revision) || revision < 0)) {\n\t\t\t\t\tsendJson(res, 400, { error: \"revision must be a non-negative integer\" });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst protocolVersionParam = url.searchParams.get(\"protocolVersion\");\n\t\t\t\tconst protocolVersion = protocolVersionParam === null ? undefined : Number(protocolVersionParam);\n\t\t\t\tif (protocolVersion !== undefined && !Number.isInteger(protocolVersion)) {\n\t\t\t\t\tsendJson(res, 400, { error: \"protocolVersion must be an integer\" });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\thandleSessionHistory(\n\t\t\t\t\tdecodeURIComponent(encodedSessionId),\n\t\t\t\t\tfrom,\n\t\t\t\t\tentriesFrom,\n\t\t\t\t\trevision,\n\t\t\t\t\turl.searchParams.get(\"baseTreeHash\") ?? undefined,\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t\tres,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (req.method === \"POST\" && url.pathname === CHUNK_ENDPOINT) {\n\t\t\t\ttry {\n\t\t\t\t\tconst body = JSON.parse(\n\t\t\t\t\t\tawait readBody(req, REQUEST_BODY_MAX_BYTES, requestBodyNoProgressTimeoutMs),\n\t\t\t\t\t) as RequestChunkBody;\n\t\t\t\t\tconst chunkResult = receiveRequestChunk(body);\n\t\t\t\t\tif (!chunkResult.complete) {\n\t\t\t\t\t\tres.setHeader(CHUNK_ACK_HEADER, \"1\");\n\t\t\t\t\t\tsendJson(res, 200, chunkResult.ack);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tres.setHeader(CHUNK_ACK_HEADER, \"0\");\n\t\t\t\t\tconst targetBody = JSON.parse(chunkResult.bodyJson) as unknown;\n\t\t\t\t\tconst targetUsesOwnJournal =\n\t\t\t\t\t\tchunkResult.target === \"/api/stream\" || chunkResult.target === \"/api/session/compact\";\n\t\t\t\t\tif (targetUsesOwnJournal) {\n\t\t\t\t\t\tconst record =\n\t\t\t\t\t\t\ttypeof targetBody === \"object\" && targetBody !== null\n\t\t\t\t\t\t\t\t? (targetBody as Record<string, unknown>)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst id = chunkResult.target === \"/api/stream\" ? record?.runId : record?.operationId;\n\t\t\t\t\t\tif (typeof id !== \"string\" || id.length === 0) {\n\t\t\t\t\t\t\tsendJson(res, 400, {\n\t\t\t\t\t\t\t\terror: `${chunkResult.target} chunk requests require an idempotency id`,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (chunkResult.replayed) {\n\t\t\t\t\t\tpruneChunkTargetResponses(chunkTargetResponses);\n\t\t\t\t\t\tconst cachedResponse = chunkTargetResponses.get(chunkResult.requestId);\n\t\t\t\t\t\tif (!cachedResponse) {\n\t\t\t\t\t\t\tsendJson(res, 409, {\n\t\t\t\t\t\t\t\terror: \"Chunk target response expired; reconcile target state before retrying\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsendCapturedJson(res, cachedResponse);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjsonResponseCaptures.set(res, (response) => {\n\t\t\t\t\t\t\tcacheChunkTargetResponse(chunkTargetResponses, chunkResult.requestId, response);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait handlePostRequest(\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tstreamRuntime,\n\t\t\t\t\t\tcompactRuntime,\n\t\t\t\t\t\tsessionMutations,\n\t\t\t\t\t\tchunkResult.target,\n\t\t\t\t\t\ttargetBody,\n\t\t\t\t\t\tres,\n\t\t\t\t\t);\n\t\t\t\t\tif (!targetUsesOwnJournal && jsonResponseCaptures.has(res)) {\n\t\t\t\t\t\tthrow new Error(`Chunk target ${chunkResult.target} ended without a JSON response`);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogRequestError(req, err);\n\t\t\t\t\tif (!res.headersSent) {\n\t\t\t\t\t\tsendJson(res, requestErrorStatus(err, 400), requestErrorBody(err));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tres.write(encodeErrorEvent(err instanceof Error ? err.message : String(err)));\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tjsonResponseCaptures.delete(res);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (req.method === \"POST\") {\n\t\t\t\ttry {\n\t\t\t\t\tconst body = JSON.parse(\n\t\t\t\t\t\tawait readBody(req, REQUEST_BODY_MAX_BYTES, requestBodyNoProgressTimeoutMs),\n\t\t\t\t\t) as unknown;\n\t\t\t\t\tif (\n\t\t\t\t\t\tawait handlePostRequest(\n\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t\tstreamRuntime,\n\t\t\t\t\t\t\tcompactRuntime,\n\t\t\t\t\t\t\tsessionMutations,\n\t\t\t\t\t\t\turl.pathname,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tres,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogRequestError(req, err);\n\t\t\t\t\tif (!res.headersSent) {\n\t\t\t\t\t\tsendJson(res, requestErrorStatus(err, 500), requestErrorBody(err));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tres.write(encodeErrorEvent(err instanceof Error ? err.message : String(err)));\n\t\t\t\t\t\tres.end();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (req.method === \"DELETE\" && url.pathname.startsWith(\"/api/session/\")) {\n\t\t\t\tconst sessionId = decodeURIComponent(url.pathname.slice(\"/api/session/\".length));\n\t\t\t\tawait deleteSessionAtomically(\n\t\t\t\t\tconfig,\n\t\t\t\t\tconfigOverride?.sessionPersistenceDelete ?? deletePersistedSession,\n\t\t\t\t\tstreamRuntime,\n\t\t\t\t\tcompactRuntime,\n\t\t\t\t\tsessionMutations,\n\t\t\t\t\tsessionId,\n\t\t\t\t);\n\t\t\t\tsendJson(res, 200, { deleted: sessionId });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsendJson(res, 404, { error: \"Not found\" });\n\t\t} catch (error) {\n\t\t\tlogRequestError(req, error);\n\t\t\tif (res.headersSent) {\n\t\t\t\tres.destroy(error instanceof Error ? error : new Error(String(error)));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsendJson(res, error instanceof URIError ? 400 : requestErrorStatus(error, 500), requestErrorBody(error));\n\t\t}\n\t});\n\tserverInitializations.set(server, serverInitialization);\n\tserver.requestTimeout = 0;\n\tserver.headersTimeout = HEADERS_TIMEOUT_MS;\n\n\tconst streamRunCleanup = setInterval(() => {\n\t\tvoid streamStore.prune().catch((error: unknown) => {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tphase: \"stream_persistence\",\n\t\t\t\t\toperation: \"prune\",\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tpruneChunkTargetResponses(chunkTargetResponses);\n\t}, STREAM_RUN_CLEANUP_INTERVAL_MS);\n\tstreamRunCleanup.unref();\n\tconst compactRunCleanup = setInterval(() => {\n\t\tvoid compactStore.prune().catch((error: unknown) => failStopCompactPersistence(compactRuntime, error));\n\t}, STREAM_RUN_CLEANUP_INTERVAL_MS);\n\tcompactRunCleanup.unref();\n\tlet shutdownPromise: Promise<void> | undefined;\n\tconst shutDownRuns = (): Promise<void> => {\n\t\tif (shutdownPromise) return shutdownPromise;\n\t\tclearInterval(streamRunCleanup);\n\t\tclearInterval(compactRunCleanup);\n\t\tstreamRuntime.closing = true;\n\t\tcompactRuntime.closing = true;\n\t\tconst pendingCompactSettlements: Promise<SessionCompactHttpResponse>[] = [];\n\t\tfor (const run of streamRuntime.activeRuns.values()) {\n\t\t\trun.shuttingDown = true;\n\t\t\tclearStreamRunFlushTimer(run);\n\t\t\trun.abortController.abort();\n\t\t\tfor (const res of [...run.subscribers.keys()]) {\n\t\t\t\tdetachStreamRunSubscriber(streamRuntime, run, res);\n\t\t\t\tres.destroy();\n\t\t\t}\n\t\t}\n\t\tstreamRuntime.activeRuns.clear();\n\t\tfor (const replays of streamRuntime.replayReaders.values()) {\n\t\t\tfor (const replay of replays) {\n\t\t\t\treplay.abortController.abort();\n\t\t\t\treplay.response.destroy();\n\t\t\t}\n\t\t}\n\t\tfor (const run of compactRuntime.activeRuns.values()) {\n\t\t\trun.abortController.abort();\n\t\t\tpendingCompactSettlements.push(\n\t\t\t\tsettleCompactRun(\n\t\t\t\t\tconfig,\n\t\t\t\t\tcompactRuntime,\n\t\t\t\t\tsessionMutations,\n\t\t\t\t\trun,\n\t\t\t\t\tcreateCompactTerminalPlan(\n\t\t\t\t\t\trun,\n\t\t\t\t\t\tcreateCompactFailureResponse(run, 499, \"Server closed while compaction was running\", \"terminal\"),\n\t\t\t\t\t),\n\t\t\t\t\t\"failed\",\n\t\t\t\t),\n\t\t\t);\n\t\t\tfor (const res of run.subscribers) {\n\t\t\t\tres.destroy();\n\t\t\t}\n\t\t}\n\t\tcompactRuntime.activeRuns.clear();\n\t\tchunkTargetResponses.clear();\n\t\tshutdownPromise = (async () => {\n\t\t\tconst cleanupErrors: unknown[] = [];\n\t\t\ttry {\n\t\t\t\tawait serverReady;\n\t\t\t} catch (error) {\n\t\t\t\tcleanupErrors.push(error);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait streamRuntime.setupQueue;\n\t\t\t} catch (error) {\n\t\t\t\tcleanupErrors.push(error);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait compactRuntime.setupQueue;\n\t\t\t} catch (error) {\n\t\t\t\tcleanupErrors.push(error);\n\t\t\t}\n\t\t\tif (pendingCompactSettlements.length > 0) {\n\t\t\t\tconst settlements = await Promise.allSettled(pendingCompactSettlements);\n\t\t\t\tfor (const settlement of settlements) {\n\t\t\t\t\tif (settlement.status === \"rejected\") cleanupErrors.push(settlement.reason);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (streamStoreInitialized) {\n\t\t\t\ttry {\n\t\t\t\t\tawait streamStore.flush();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcleanupErrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (compactStoreInitialized) {\n\t\t\t\ttry {\n\t\t\t\t\tawait compactStore.flush();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcleanupErrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst pendingStreamReaders = [\n\t\t\t\t...[...streamRuntime.subscriberPumps.values()].flatMap((pumps) => [...pumps]),\n\t\t\t\t...[...streamRuntime.replayReaders.values()].flatMap((replays) =>\n\t\t\t\t\t[...replays].flatMap((replay) => (replay.promise ? [replay.promise] : [])),\n\t\t\t\t),\n\t\t\t];\n\t\t\tif (pendingStreamReaders.length > 0) {\n\t\t\t\tawait Promise.allSettled(pendingStreamReaders);\n\t\t\t}\n\t\t\tif (streamStoreInitialized) {\n\t\t\t\ttry {\n\t\t\t\t\tawait streamStore.close();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcleanupErrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (compactStoreInitialized) {\n\t\t\t\ttry {\n\t\t\t\t\tawait compactStore.close();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcleanupErrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (cleanupErrors.length === 1) throw cleanupErrors[0];\n\t\t\tif (cleanupErrors.length > 1) {\n\t\t\t\tthrow new AggregateError(cleanupErrors, \"pi-server shutdown encountered persistence errors\");\n\t\t\t}\n\t\t})();\n\t\treturn shutdownPromise;\n\t};\n\tconst closeServer = server.close.bind(server);\n\tlet ownershipReleased = false;\n\tconst releaseOwnership = () => {\n\t\tif (ownershipReleased) return;\n\t\townershipReleased = true;\n\t\treleasePiServerOwnership(ownership);\n\t};\n\tserver.close = ((callback?: (error?: Error) => void) => {\n\t\tconst cleanup = shutDownRuns();\n\t\tlet httpClosed = false;\n\t\tlet cleanupDone = false;\n\t\tlet finished = false;\n\t\tlet closeError: Error | undefined;\n\t\tconst finish = () => {\n\t\t\tif (finished || !httpClosed || !cleanupDone) return;\n\t\t\tfinished = true;\n\t\t\treleaseOwnership();\n\t\t\tcallback?.(closeError);\n\t\t};\n\t\tvoid cleanup.then(\n\t\t\t() => {\n\t\t\t\tcleanupDone = true;\n\t\t\t\tfinish();\n\t\t\t},\n\t\t\t(error: unknown) => {\n\t\t\t\tcleanupDone = true;\n\t\t\t\tcloseError = error instanceof Error ? error : new Error(String(error));\n\t\t\t\tfinish();\n\t\t\t},\n\t\t);\n\t\treturn closeServer((error?: Error) => {\n\t\t\thttpClosed = true;\n\t\t\tcloseError ??= error;\n\t\t\tfinish();\n\t\t});\n\t}) as typeof server.close;\n\tserver.once(\"close\", () => {\n\t\tvoid shutDownRuns()\n\t\t\t.finally(releaseOwnership)\n\t\t\t.catch(() => undefined);\n\t});\n\n\treturn server;\n}\n\nexport function createPiServer(configOverride?: PiServerOptions): HttpServer {\n\tconst ownership = acquirePiServerOwnership();\n\ttry {\n\t\treturn createOwnedPiServer(configOverride, ownership);\n\t} catch (error) {\n\t\treleasePiServerOwnership(ownership);\n\t\tthrow error;\n\t}\n}\n\nfunction toProxyEvent(event: AssistantMessageEvent, run: StreamRunRecord): ProxyAssistantMessageEvent | undefined {\n\tswitch (event.type) {\n\t\tcase \"start\":\n\t\t\trun.contentDeltas.clear();\n\t\t\treturn { type: \"start\" };\n\t\tcase \"text_start\": {\n\t\t\trun.contentDeltas.set(event.contentIndex, { type: \"text\", hash: createHash(\"sha256\"), bytes: 0 });\n\t\t\treturn { type: \"text_start\", contentIndex: event.contentIndex };\n\t\t}\n\t\tcase \"text_delta\": {\n\t\t\tconst accumulated = run.contentDeltas.get(event.contentIndex);\n\t\t\tconst digest =\n\t\t\t\taccumulated?.type === \"text\"\n\t\t\t\t\t? accumulated\n\t\t\t\t\t: { type: \"text\" as const, hash: createHash(\"sha256\"), bytes: 0 };\n\t\t\tdigest.hash.update(event.delta, \"utf-8\");\n\t\t\tdigest.bytes += Buffer.byteLength(event.delta, \"utf-8\");\n\t\t\trun.contentDeltas.set(event.contentIndex, digest);\n\t\t\treturn { type: \"text_delta\", contentIndex: event.contentIndex, delta: event.delta };\n\t\t}\n\t\tcase \"text_end\": {\n\t\t\tconst accumulated = run.contentDeltas.get(event.contentIndex);\n\t\t\trun.contentDeltas.delete(event.contentIndex);\n\t\t\tconst contentBytes = Buffer.byteLength(event.content, \"utf-8\");\n\t\t\tconst contentHash = createHash(\"sha256\").update(event.content, \"utf-8\").digest(\"hex\");\n\t\t\tconst deltasMatch =\n\t\t\t\taccumulated?.type === \"text\" &&\n\t\t\t\taccumulated.bytes === contentBytes &&\n\t\t\t\taccumulated.hash.digest(\"hex\") === contentHash;\n\t\t\treturn {\n\t\t\t\ttype: \"text_end\",\n\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\tcontent: deltasMatch ? undefined : event.content,\n\t\t\t\tcontentSignature:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"text\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { textSignature?: string }).textSignature\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t}\n\t\tcase \"thinking_start\": {\n\t\t\trun.contentDeltas.set(event.contentIndex, { type: \"thinking\", hash: createHash(\"sha256\"), bytes: 0 });\n\t\t\treturn { type: \"thinking_start\", contentIndex: event.contentIndex };\n\t\t}\n\t\tcase \"thinking_delta\": {\n\t\t\tconst accumulated = run.contentDeltas.get(event.contentIndex);\n\t\t\tconst digest =\n\t\t\t\taccumulated?.type === \"thinking\"\n\t\t\t\t\t? accumulated\n\t\t\t\t\t: { type: \"thinking\" as const, hash: createHash(\"sha256\"), bytes: 0 };\n\t\t\tdigest.hash.update(event.delta, \"utf-8\");\n\t\t\tdigest.bytes += Buffer.byteLength(event.delta, \"utf-8\");\n\t\t\trun.contentDeltas.set(event.contentIndex, digest);\n\t\t\treturn { type: \"thinking_delta\", contentIndex: event.contentIndex, delta: event.delta };\n\t\t}\n\t\tcase \"thinking_end\": {\n\t\t\tconst accumulated = run.contentDeltas.get(event.contentIndex);\n\t\t\trun.contentDeltas.delete(event.contentIndex);\n\t\t\tconst contentBytes = Buffer.byteLength(event.content, \"utf-8\");\n\t\t\tconst contentHash = createHash(\"sha256\").update(event.content, \"utf-8\").digest(\"hex\");\n\t\t\tconst deltasMatch =\n\t\t\t\taccumulated?.type === \"thinking\" &&\n\t\t\t\taccumulated.bytes === contentBytes &&\n\t\t\t\taccumulated.hash.digest(\"hex\") === contentHash;\n\t\t\treturn {\n\t\t\t\ttype: \"thinking_end\",\n\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\tcontent: deltasMatch ? undefined : event.content,\n\t\t\t\tcontentSignature:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"thinking\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { thinkingSignature?: string }).thinkingSignature\n\t\t\t\t\t\t: undefined,\n\t\t\t\tredacted:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"thinking\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { redacted?: boolean }).redacted\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t}\n\t\tcase \"toolcall_start\":\n\t\t\treturn {\n\t\t\t\ttype: \"toolcall_start\",\n\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\tid:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"toolCall\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { id: string }).id\n\t\t\t\t\t\t: \"\",\n\t\t\t\ttoolName:\n\t\t\t\t\tevent.partial.content[event.contentIndex]?.type === \"toolCall\"\n\t\t\t\t\t\t? (event.partial.content[event.contentIndex] as { name: string }).name\n\t\t\t\t\t\t: \"\",\n\t\t\t};\n\t\tcase \"toolcall_delta\":\n\t\t\treturn { type: \"toolcall_delta\", contentIndex: event.contentIndex, delta: event.delta };\n\t\tcase \"toolcall_end\":\n\t\t\treturn {\n\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\tthoughtSignature: event.toolCall.thoughtSignature,\n\t\t\t\ttoolCall: event.toolCall,\n\t\t\t};\n\t\tcase \"done\":\n\t\t\trun.contentDeltas.clear();\n\t\t\treturn {\n\t\t\t\ttype: \"done\",\n\t\t\t\treason: event.reason,\n\t\t\t\tusage: event.message.usage,\n\t\t\t\tresponseModel: event.message.responseModel,\n\t\t\t\tresponseId: event.message.responseId,\n\t\t\t\tdiagnostics: event.message.diagnostics,\n\t\t\t\tapi: event.message.api,\n\t\t\t\tprovider: event.message.provider,\n\t\t\t\tmodel: event.message.model,\n\t\t\t\ttimestamp: event.message.timestamp,\n\t\t\t};\n\t\tcase \"error\":\n\t\t\trun.contentDeltas.clear();\n\t\t\treturn {\n\t\t\t\ttype: \"error\",\n\t\t\t\treason: event.reason,\n\t\t\t\terrorMessage: event.error.errorMessage,\n\t\t\t\tusage: event.error.usage,\n\t\t\t\tresponseModel: event.error.responseModel,\n\t\t\t\tresponseId: event.error.responseId,\n\t\t\t\tdiagnostics: event.error.diagnostics,\n\t\t\t\tapi: event.error.api,\n\t\t\t\tprovider: event.error.provider,\n\t\t\t\tmodel: event.error.model,\n\t\t\t\ttimestamp: event.error.timestamp,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nexport function startServer(configOverride?: PiServerOptions): HttpServer {\n\tconst config = loadConfig(configOverride);\n\tconst externalFatalHandler = configOverride?.onFatalStreamPersistenceError;\n\tconst fatalShutdownGraceMs = configOverride?.fatalShutdownGraceMs ?? FATAL_SHUTDOWN_GRACE_MS;\n\tif (!Number.isSafeInteger(fatalShutdownGraceMs) || fatalShutdownGraceMs <= 0) {\n\t\tthrow new Error(\"fatalShutdownGraceMs must be a positive safe integer\");\n\t}\n\tconst fatalExit = configOverride?.fatalExit ?? ((code: number) => process.exit(code));\n\tlet server: HttpServer;\n\tserver = createPiServer({\n\t\t...configOverride,\n\t\tonFatalStreamPersistenceError: (error) => {\n\t\t\tprocess.exitCode = 1;\n\t\t\tconst hardExitTimer = setTimeout(() => fatalExit(1), fatalShutdownGraceMs);\n\t\t\tserver.close((closeError) => {\n\t\t\t\tif (!closeError) clearTimeout(hardExitTimer);\n\t\t\t\tif (closeError) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t\tphase: \"stream_persistence\",\n\t\t\t\t\t\t\toperation: \"fatal_shutdown\",\n\t\t\t\t\t\t\terror: closeError.message,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\texternalFatalHandler?.(error);\n\t\t\t});\n\t\t},\n\t});\n\tconst initialization = serverInitializations.get(server);\n\tif (!initialization) {\n\t\tthrow new Error(\"pi-server initialization promise was not registered\");\n\t}\n\tvoid initialization.then(\n\t\t() => {\n\t\t\tserver.listen(config.port, config.host, () => {\n\t\t\t\tconsole.log(`pi-server listening on ${config.host}:${config.port}`);\n\t\t\t});\n\t\t},\n\t\t() => undefined,\n\t);\n\treturn server;\n}\n"]}
|