@code-yeongyu/senpi 2026.11.2-1 → 2026.11.2-2
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 +19 -0
- package/dist/bundle/chunks/{chunk-AMCDEC5A.js → chunk-B2LRAXQU.js} +2 -2
- package/dist/bundle/chunks/{chunk-D22YF34L.js → chunk-CQ3G57HE.js} +1 -1
- package/dist/bundle/chunks/{chunk-ZUVGFXCS.js → chunk-FVYWSBX3.js} +3 -3
- package/dist/bundle/chunks/{chunk-665UPAKG.js → chunk-H3BTMIH5.js} +6 -6
- package/dist/bundle/chunks/{chunk-KEJWNCLN.js → chunk-HUSQY3ID.js} +1 -1
- package/dist/bundle/chunks/{chunk-IBV4OVXQ.js → chunk-N6OHYIJR.js} +1 -1
- package/dist/bundle/chunks/{chunk-XZR4J6HM.js → chunk-PP52OWBB.js} +1 -1
- package/dist/bundle/chunks/{chunk-XVQISKHL.js → chunk-QV2IEA3B.js} +4 -4
- package/dist/bundle/chunks/{chunk-2V6BR24J.js → chunk-VEWJSPOZ.js} +1 -1
- package/dist/bundle/chunks/{cli-main-REFQSP6S.js → cli-main-6ZI4QO2Z.js} +1 -1
- package/dist/bundle/chunks/{host-command-Y3ZT6YLD.js → host-command-O3ALG2O3.js} +1 -1
- package/dist/bundle/chunks/{host-lifecycle-VW73K4WA.js → host-lifecycle-SGTVODHB.js} +1 -1
- package/dist/bundle/chunks/host-lifecycle.js +5 -5
- package/dist/bundle/chunks/{host-session-command-YDEUZBTX.js → host-session-command-4WRR5JSB.js} +1 -1
- package/dist/bundle/chunks/{interactive-mode-UZXPNJ4V.js → interactive-mode-TF7R35GK.js} +1 -1
- package/dist/bundle/chunks/{main-O5G75MYS.js → main-XLUYSOXP.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-AZKJYA2X.js → multi-session-host-CADYC2BS.js} +4 -3
- package/dist/bundle/chunks/{package-manager-cli-2YDUGJNR.js → package-manager-cli-I62KMIWK.js} +1 -1
- package/dist/bundle/chunks/{rpc-mode-KZD5HZNI.js → rpc-mode-T5GVMUBQ.js} +1 -1
- package/dist/bundle/chunks/{schedule-command-7LSJAINZ.js → schedule-command-YXGRN5CM.js} +1 -1
- package/dist/bundle/chunks/{session-control-endpoint-BG2KQ6MJ.js → session-control-endpoint-PREVS5UO.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +63 -62
- package/dist/bundle/cli.js +2 -2
- package/dist/bundle/host-supervisor.js +5 -5
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/bundle/runtime-manifest.json +1 -1
- package/dist/core/session-recovery-identity.d.ts +12 -1
- package/dist/modes/rpc/compact-call-fold.d.ts +3 -1
- package/dist/modes/rpc/compact-call-fold.js +17 -6
- package/dist/modes/rpc/compact-call-identity.d.ts +13 -0
- package/dist/modes/rpc/compact-call-identity.js +30 -0
- package/dist/modes/rpc/compact-call-model.d.ts +14 -0
- package/dist/modes/rpc/compact-call-model.js +4 -0
- package/dist/modes/rpc/compact-call-table.d.ts +9 -0
- package/dist/modes/rpc/compact-call-table.js +20 -0
- package/dist/modes/rpc/compact-catalog-settled.d.ts +5 -0
- package/dist/modes/rpc/compact-catalog-settled.js +9 -2
- package/dist/modes/rpc/compact-lane-current.d.ts +2 -0
- package/dist/modes/rpc/compact-lane-current.js +4 -0
- package/dist/modes/rpc/compact-message-identity.d.ts +74 -0
- package/dist/modes/rpc/compact-message-identity.js +101 -0
- package/dist/modes/rpc/compact-session-calls.d.ts +5 -4
- package/dist/modes/rpc/compact-session-calls.js +13 -8
- package/dist/modes/rpc/compact-session-state.d.ts +2 -0
- package/dist/modes/rpc/compact-session-state.js +4 -0
- package/dist/modes/rpc/compact-settled-messages.d.ts +12 -4
- package/dist/modes/rpc/compact-settled-messages.js +18 -10
- package/dist/modes/rpc/connection-handler.js +1 -1
- package/dist/modes/rpc/connection-question-bridge.d.ts +2 -1
- package/dist/modes/rpc/connection-question-bridge.js +3 -1
- package/dist/modes/rpc/host-lifecycle-proxy.d.ts +9 -0
- package/dist/modes/rpc/host-lifecycle-proxy.js +29 -7
- package/dist/modes/rpc/rpc-question-types.d.ts +2 -0
- package/dist/modes/rpc/session-acceptance-compact.d.ts +17 -7
- package/dist/modes/rpc/session-acceptance-compact.js +20 -8
- package/dist/modes/rpc/session-acceptance-lane.d.ts +5 -0
- package/dist/modes/rpc/session-acceptance-lane.js +12 -11
- package/dist/modes/rpc/session-event-writer-destinations.d.ts +2 -1
- package/dist/modes/rpc/session-event-writer-destinations.js +24 -9
- package/dist/utils/version-check.js +9 -3
- package/docs/engine-socket/fixtures/admission-routes/i-live-identity.json +716 -0
- package/docs/engine-socket/fixtures/admission-routes/index.json +3 -1
- package/docs/engine-socket/fixtures/admission-routes/j-live-call-identity.json +1020 -0
- package/docs/rpc.md +66 -0
- package/package.json +6 -6
package/dist/bundle/chunks/{multi-session-host-AZKJYA2X.js → multi-session-host-CADYC2BS.js}
RENAMED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{getInternalHostBootstrap}from"./chunk-6STZ65LL.js";import{AcceptedTranscript,CALL_RECORDS,COMPACT_LEAF_CODE_UNITS,COMPONENT_RECORDS,CompactCommitDependencies,CompactComponentRoots,CompactContentStore,CompactCurrentComponents,CompactIndexTree,CompactReadError,CompactReadLease,CompactStorageReadError,CompactValues,CompactWriteError,FRAGMENT_ENVELOPE_MAX_BYTES,FRAGMENT_MAX_BYTES,GeneratedFramesCursor,RecoveryStorageHealth,SEQUENCED,SessionEventWriter,TERMINAL_PHASE,TRANSFER_STAGING_MAX_BYTES,TransferStaging,TransferStagingError,admitRecord,answerSetSessionContext,answerSubscribeSessions,answerUnsubscribeSessions,applyContextPatch,callLeaves,callOrder,captureAdmissionReply,correlationChange,enqueueLegacyRecord,field,jsonChunks,notAttachedRefusal,parseBoundedId,privateRootStat,protocolId,publishedSessionContext,recordLoopBlockedMs,recoveryAgentDir,registryStatusSource,runtimeItemKey,socketSink,storageUnavailable,terminal,withAdmissionReply,withAdmissionRequest}from"./chunk-XVQISKHL.js";import{ACCEPT_EDITS_PERMISSION_PRESET_CAPABILITY,AUTO_PERMISSION_PRESET_CAPABILITY,AgentSessionRuntime,EXTENSION_STATE_PAYLOAD,EXTENSION_STATE_PREFIX,HostMcpRegistry,MANIFEST_FILE,MOVE_BUNDLE_FORMAT,MoveBundleInvalidError,ProviderScope,SESSION_BUNDLE_PATH,STATE_ATTEMPT_FIELD,SessionPendingInputs,StructuredLaneUnavailableError,bindToProviderScope,createAgentSessionRuntime,createRpcConnectionHandler,createWebViewBroker,foreignSessionHolders,isMoveId,isPlainId,isSecurityNoticeState,movedStateDir,outgoingStateDir,parseMoveId,parsePermissionPresetName,parsePlainId,pathExists,prepareOutgoingState,readCodemodeKernelRows,readMainThreadHeapBytes,readManifest,readRecordedRepositoryIdentity,readSessionCwd,rebindSessionFile,runWithProviderScope,sealedOutgoingStateDir,sessionWorkerDataRegistry,sha256File,sharedPathIdentityResolver,startHostChildReaper,structuredLaneEnabled,subscriptionLimits,verifyBundle}from"./chunk-665UPAKG.js";import{SessionHeldError,encodedSessionId,liveSessionHolders,readProcessStartMs,serializeByKey,withSessionMoveLock}from"./chunk-2BTB7AWD.js";import"./chunk-KEJWNCLN.js";import{CONNECTION_ROLE_FIXED,ClientAdmissions,ConnectionRoles,DURABLE_CLIENT_MESSAGE_ID_CAPABILITY,EFFECT_LEDGER_CAPABILITY,EMPTY_SESSION_CONTEXT,EffectLedger,advertisedCompactCapabilities,answerEffectFromTranscript,answeredUiRequestId,beginEffect,buildRpcSessionState,carriesExtensionOwner,drainSessionEffects,effectAnswer,installSessionEffectSink,isEffectBegin,isGrantSelectRequest,latestSessionEffect,recoveryCarrier,refusedExtensionUiResponse,roleConnection,rpcCommandShapeError,sessionAutoTitleError,sessionBrowserEngineError,sessionContextError,sessionKindError,sessionPromptSurfaceError,sessionRetryFallbackError,setSessionRecoveryEpoch}from"./chunk-AMCDEC5A.js";import"./chunk-5TG7AOLR.js";import{RPC_ERROR_ATTACHED,RPC_ERROR_HOST_DRAINING,RPC_ERROR_INVALID_LAUNCH_PROFILE,RPC_ERROR_INVALID_PATH,RPC_ERROR_INVALID_RELEASE_REASON,RPC_ERROR_INVALID_SESSION_CONTEXT,RPC_ERROR_INVALID_SESSION_ENV,RPC_ERROR_INVALID_SESSION_KIND,RPC_ERROR_MISSING_SESSION_ID,RPC_ERROR_OPEN_FAILED,RPC_ERROR_OWNER_CHANGED,RPC_ERROR_RELEASE_FAILED,RPC_ERROR_RELEASE_UNSUPPORTED,RPC_ERROR_SESSION_BUSY,RPC_ERROR_SESSION_CLOSING,RPC_ERROR_SESSION_HELD,RPC_ERROR_TURN_ACTIVE,RPC_ERROR_UNKNOWN_SESSION,RPC_ERROR_UNSUPPORTED_TRANSPORT,RPC_ERROR_WARM_FAILED,STEER_WHEN_IDLE_CAPABILITY,USER_ACTIVITY_CAPABILITY}from"./chunk-VRKA3LIT.js";import"./chunk-C5G5PONA.js";import"./chunk-OG2JODU6.js";import{liveToolMediaScope,toolMediaPersister}from"./chunk-HECKLNOO.js";import"./chunk-FEQDJBDL.js";import"./chunk-B255QWLT.js";import{SESSION_MOVED,SESSION_MOVED_IN,SESSION_RECLAIMED,SESSION_RELEASED,SessionManager,SessionMovedAwayError,assertValidSessionId,compactUpdatesEnabled,compareRepositoryIdentities,getDefaultSessionDir,headerSessionId,loadEntriesFromFileAsync,ownershipStep,readRepositoryIdentity,sessionOwnership}from"./chunk-ARNSNIED.js";import{resolveMovedPath}from"./chunk-L5OFGHDA.js";import"./chunk-UURGXV5B.js";import"./chunk-NEOL3GWO.js";import{OPEN_AFTER_QUEUED_DEADLINE_MS}from"./chunk-J2OBN7TI.js";import"./chunk-Y4MPEIY5.js";import{flushRawStdout,takeOverStdout,waitForRawStdoutBackpressure,writeRawStdout}from"./chunk-ZJSGYBBD.js";import"./chunk-FOMJ73UU.js";import"./chunk-VICVLJNU.js";import"./chunk-PIAY636U.js";import"./chunk-LGO25HPL.js";import"./chunk-Y3TMJV3J.js";import"./chunk-ETCYVVVO.js";import{isRecord}from"./chunk-7ICGN62G.js";import{BEGIN_HANDOVER_COMMAND,EXPECTED_RUNTIME_BUILD_ID_ENV,HostIdleHandover,agentDirMismatch,beginHandoverResponse,handoverRefusal,isHandoffBusy,isHostIdle,isTransientDaemonEnvName,parseBeginHandover,performIdleHandover,readDrainVerdicts,runAsHostGenerationProcess,withHostIdentity}from"./chunk-IBV4OVXQ.js";import{ATTENDED_CAPABILITY,AUTH_KEY_VERIFY_CAPABILITY,AUTO_TITLE_PER_SESSION_CAPABILITY,AUTO_TITLE_SESSIONS_CAPABILITY,BROWSER_ENGINE_CAPABILITY,CONTINUE_FROM_LEAF_CAPABILITY,DETACH_CONNECTION_CAPABILITY,DURABLE_SESSION_ID_CAPABILITY,ENTRIES_TAIL_CAPABILITY,EVAL_CELLS_CAPABILITY,GENERATION_HANDOFF_CAPABILITY,MEDIA_PLACEHOLDERS_CAPABILITY,MOVED_PATH_GUARD_CAPABILITY,OBSERVE_READS_CAPABILITY,PROMPT_SURFACE_CAPABILITY,PROMPT_SURFACE_CHAT_CAPABILITY,PROVIDER_ACCOUNT_TEST_CAPABILITY,QUEUED_MESSAGE_REVISION_CAPABILITY,RESUME_SESSION_CAPABILITY,RETAIN_ON_DISCONNECT_CAPABILITY,RETRY_FALLBACK_PROFILE_CAPABILITY,RUNTIME_IDENTITY_HANDOVER_CAPABILITY,SESSION_CONTEXT_CAPABILITY,SESSION_ENV_CAPABILITY,SESSION_HELD_CAPABILITY,SESSION_KIND_CAPABILITY,SESSION_RELOCATION_CAPABILITY,SESSION_STATUS_CAPABILITY,TOOL_BARRIER_CAPABILITY,WARM_CAPABILITY,computeRuntimeBuildId,hostGeneration,hostInstanceId,parseClientCapabilities,pathIdentityResolverStatus,protocolIdentity}from"./chunk-VOSHKGXG.js";import"./chunk-WEOFT5KT.js";import"./chunk-QMRJYMNH.js";import{presenterBootstrapStream}from"./chunk-7DWTKE4Z.js";import{ClientOccupancy,PublicRpcConnection,acceptInternalConnection,armHostWatchdog,consumeHostWatchdogEnv,loopLagErrorMs,prepareSocketPath,scrubHostWatchdogEnv}from"./chunk-ZUVGFXCS.js";import{SESSION_PATH_RETRY_AFTER_MS,createEndpointReservations,holderGenerationEnded,hostChildDrainRequestFile,ownGenerationDir,parseIdleExitMs,watchDrainRequest,writeHeartbeat,writeStallEvidence}from"./chunk-6LDUM5CL.js";import{HOST_DAEMON_DIR_ENV,canonicalSessionPath,createHostDaemonPaths,sessionDirectoryRemoved}from"./chunk-FNBEICAA.js";import"./chunk-SGS76663.js";import"./chunk-H4QOEVS5.js";import"./chunk-3CKVTGWG.js";import"./chunk-PE3PNVKT.js";import"./chunk-5UVTDRIP.js";import"./chunk-ZNPH5BWS.js";import"./chunk-6VWIMHMH.js";import"./chunk-RQDLTDNO.js";import"./chunk-KLAX467B.js";import"./chunk-SAZ6E74O.js";import{lockWithLossHandling}from"./chunk-F7GBSQRV.js";import"./chunk-GZVCRV7I.js";import{external_exports}from"./chunk-KUPQO7MC.js";import"./chunk-U3VOXCGP.js";import"./chunk-SOMFLLPD.js";import{isHostOwnedToolRuntimeCapability,isSpawnedBy,toolRuntimeCapabilities}from"./chunk-PZSDJIXD.js";import"./chunk-26UBFF6N.js";import{readOwnFootprint}from"./chunk-MTQQ2VQH.js";import"./chunk-WEGTCUO3.js";import"./chunk-GDPWQJDQ.js";import{RpcPublicEndpoint}from"./chunk-E6UCZ7E5.js";import"./chunk-UYO5Z35O.js";import{MAX_RPC_LINE_CHARACTERS,attachJsonlLineReader,serializeJsonLine}from"./chunk-H52J72VA.js";import"./chunk-HB35RBP4.js";import{FILE_STORAGE_LOCK_RETRY_MAX_DELAY_MS,FILE_STORAGE_LOCK_RETRY_MIN_DELAY_MS,isLockError}from"./chunk-7X72IACK.js";import"./chunk-YWD54RHU.js";import"./chunk-C5XX36EB.js";import"./chunk-IYL5E4QQ.js";import"./chunk-OEFCY46F.js";import"./chunk-KRNXUTZJ.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-RPAEB2Z5.js";import"./chunk-D2ROBVZ4.js";import{killTrackedDetachedChildren}from"./chunk-CLZLV65G.js";import"./chunk-YU4AYH4C.js";import"./chunk-N4TSAHRL.js";import"./chunk-LNAZ7XEU.js";import"./chunk-DLAY7CIU.js";import"./chunk-KKVVSE6C.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-4WWORAQH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-TG4E7Z7W.js";import"./chunk-32R442XT.js";import"./chunk-WHPDEDCC.js";import"./chunk-7UC4W2T2.js";import"./chunk-HK46JMSC.js";import"./chunk-WBTKUCRH.js";import"./chunk-WDTJ6JKE.js";import"./chunk-5ROMKDLK.js";import{parseStreamingJson}from"./chunk-3W47LTXQ.js";import"./chunk-3BJFH3CZ.js";import"./chunk-3SASTB6Y.js";import{SeedFrontierError,seedNextOffset}from"./chunk-5CSZPC55.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-YU2P3CAR.js";import"./chunk-XZR4J6HM.js";import"./chunk-D22YF34L.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-6WISUXVI.js";import"./chunk-XVRRNJQD.js";import"./chunk-42XRJQM6.js";import"./chunk-2SOVDETB.js";import"./chunk-UKSFF47T.js";import{PUBLIC_SOCKET_IDENTITY_FILE,readSocketIdentityFile,shieldSocketDuringClose,socketEntryReplaced,statSocketIdentity,unlinkOwnedSocket,waitForSocketIdentityFile}from"./chunk-OM7LH7AP.js";import{SOCKET_SECRET_FILE_ENV,acquireOwnershipSafeLock,authenticateSocket,ensureSocketSecret,resolveSocketTransportAddress,socketSecretPath}from"./chunk-QEESHRTS.js";import{VERSION,envValue,isBunBinary,normalizePath,resolvePath}from"./chunk-ISZ4EWIS.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import{ownProcessStartedAtMs}from"./chunk-QN2BHP3M.js";import"./chunk-AOTHPTMU.js";import{processStartTimeMs}from"./chunk-O5RYI3IW.js";import"./chunk-IKOFCODM.js";import{randomUUID as randomUUID9}from"node:crypto";import{createServer as createServer2}from"node:net";import{mkdtemp as mkdtemp2,rm as rm9}from"node:fs/promises";import{tmpdir as tmpdir3}from"node:os";import{basename as basename2,dirname as dirname3,join as join12}from"node:path";var HostCoreGate=class{constructor(registry,route,hooks){this.inFlight=new Map,this.answering=new Set,this.route=route,this.runtimeBuildId=hooks.runtimeBuildId,this.endpoint=hooks.endpoint,this.handover=hooks.handover===void 0?void 0:new HostIdleHandover({...hooks.handover,isIdle:()=>isHostIdle(registry,this.inFlight)})}async intercept(parsed,deliver){if(!isRecord2(parsed)||parsed.type!==BEGIN_HANDOVER_COMMAND)return!1;let answering=this.answerBegin(parsed).then(deliver);this.answering.add(answering);try{await answering}finally{this.answering.delete(answering)}return!0}async answerBegin(parsed){if(this.handover===void 0)return beginHandoverResponse(parsed.id,{kind:"refused",reason:"handover_unsupported"});let request=parseBeginHandover(parsed);if(typeof request=="string")return beginHandoverResponse(parsed.id,request);let detail2=request.agentDir===void 0||this.endpoint===void 0?void 0:await agentDirMismatch(this.endpoint.socket,request.agentDir,this.endpoint.agentDir);return beginHandoverResponse(parsed.id,detail2===void 0?await this.handover.begin(request):{kind:"refused",reason:"foreign_agent_dir",detail:detail2})}async answered(){for(;this.answering.size>0;)await Promise.allSettled([...this.answering])}async dispatch(command){let pending=this.handover?.view();if(pending!==void 0&&this.handover?.admits(command.type)===!1)return handoverRefusal(command,pending);let key="sessionId"in command?command.sessionId:void 0;this.inFlight.set(key,(this.inFlight.get(key)??0)+1);let response;try{response=await this.route(command)}finally{let remaining=(this.inFlight.get(key)??1)-1;remaining>0?this.inFlight.set(key,remaining):this.inFlight.delete(key),this.handover?.observe()}return response===void 0?void 0:withHostIdentity(response,this.runtimeBuildId,this.handover?.view())}};function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var HandoffAnnouncement=class{begin(superseded,identity2,publicSocket,log){return this.record=superseded.then(replaced=>({type:"host_superseded",...identity2,successor:replaced?{socket:publicSocket}:null}),cause=>{log(`handoff announcement failed: ${String(cause)}`)}),this.record}deliverLate(stream,arrivedBeforeDrain){let record=this.record;return!arrivedBeforeDrain||record===void 0?!1:(record.then(announced=>announced===void 0?stream.destroy():stream.end(`${JSON.stringify(announced)}
|
|
2
|
+
import{getInternalHostBootstrap}from"./chunk-6STZ65LL.js";import{AcceptedTranscript,CALL_NAMED_RECORDS,CALL_RECORDS,CALL_UNKNOWN,COMPACT_LEAF_CODE_UNITS,COMPONENT_RECORDS,CompactCommitDependencies,CompactComponentRoots,CompactContentStore,CompactCurrentComponents,CompactIndexTree,CompactReadError,CompactReadLease,CompactStorageReadError,CompactValues,CompactWriteError,FRAGMENT_ENVELOPE_MAX_BYTES,FRAGMENT_MAX_BYTES,GeneratedFramesCursor,RecoveryStorageHealth,SEQUENCED,SessionEventWriter,TERMINAL_PHASE,TRANSFER_STAGING_MAX_BYTES,TransferStaging,TransferStagingError,admitRecord,answerSetSessionContext,answerSubscribeSessions,answerUnsubscribeSessions,applyContextPatch,callIdentity,callLeaves,callOrder,captureAdmissionReply,correlationChange,enqueueLegacyRecord,field,jsonChunks,notAttachedRefusal,parseBoundedId,privateRootStat,protocolId,publishedSessionContext,recordLoopBlockedMs,recoveryAgentDir,registryStatusSource,runtimeItemKey,socketSink,storageUnavailable,terminal,toolcallIndex,withAdmissionReply,withAdmissionRequest}from"./chunk-QV2IEA3B.js";import{ACCEPT_EDITS_PERMISSION_PRESET_CAPABILITY,AUTO_PERMISSION_PRESET_CAPABILITY,AgentSessionRuntime,EXTENSION_STATE_PAYLOAD,EXTENSION_STATE_PREFIX,HostMcpRegistry,MANIFEST_FILE,MOVE_BUNDLE_FORMAT,MoveBundleInvalidError,ProviderScope,SESSION_BUNDLE_PATH,STATE_ATTEMPT_FIELD,SessionPendingInputs,StructuredLaneUnavailableError,bindToProviderScope,createAgentSessionRuntime,createRpcConnectionHandler,createWebViewBroker,foreignSessionHolders,isMoveId,isPlainId,isSecurityNoticeState,movedStateDir,outgoingStateDir,parseMoveId,parsePermissionPresetName,parsePlainId,pathExists,prepareOutgoingState,readCodemodeKernelRows,readMainThreadHeapBytes,readManifest,readRecordedRepositoryIdentity,readSessionCwd,rebindSessionFile,runWithProviderScope,sealedOutgoingStateDir,sessionWorkerDataRegistry,sha256File,sharedPathIdentityResolver,startHostChildReaper,structuredLaneEnabled,subscriptionLimits,verifyBundle}from"./chunk-H3BTMIH5.js";import{SessionHeldError,encodedSessionId,liveSessionHolders,readProcessStartMs,serializeByKey,withSessionMoveLock}from"./chunk-2BTB7AWD.js";import"./chunk-HUSQY3ID.js";import{CONNECTION_ROLE_FIXED,ClientAdmissions,ConnectionRoles,DURABLE_CLIENT_MESSAGE_ID_CAPABILITY,EFFECT_LEDGER_CAPABILITY,EMPTY_SESSION_CONTEXT,EffectLedger,advertisedCompactCapabilities,answerEffectFromTranscript,answeredUiRequestId,beginEffect,buildRpcSessionState,carriesExtensionOwner,drainSessionEffects,effectAnswer,installSessionEffectSink,isEffectBegin,isGrantSelectRequest,latestSessionEffect,recoveryCarrier,refusedExtensionUiResponse,roleConnection,rpcCommandShapeError,sessionAutoTitleError,sessionBrowserEngineError,sessionContextError,sessionKindError,sessionPromptSurfaceError,sessionRetryFallbackError,setSessionRecoveryEpoch}from"./chunk-B2LRAXQU.js";import"./chunk-5TG7AOLR.js";import{RPC_ERROR_ATTACHED,RPC_ERROR_HOST_DRAINING,RPC_ERROR_INVALID_LAUNCH_PROFILE,RPC_ERROR_INVALID_PATH,RPC_ERROR_INVALID_RELEASE_REASON,RPC_ERROR_INVALID_SESSION_CONTEXT,RPC_ERROR_INVALID_SESSION_ENV,RPC_ERROR_INVALID_SESSION_KIND,RPC_ERROR_MISSING_SESSION_ID,RPC_ERROR_OPEN_FAILED,RPC_ERROR_OWNER_CHANGED,RPC_ERROR_RELEASE_FAILED,RPC_ERROR_RELEASE_UNSUPPORTED,RPC_ERROR_SESSION_BUSY,RPC_ERROR_SESSION_CLOSING,RPC_ERROR_SESSION_HELD,RPC_ERROR_TURN_ACTIVE,RPC_ERROR_UNKNOWN_SESSION,RPC_ERROR_UNSUPPORTED_TRANSPORT,RPC_ERROR_WARM_FAILED,STEER_WHEN_IDLE_CAPABILITY,USER_ACTIVITY_CAPABILITY}from"./chunk-VRKA3LIT.js";import"./chunk-C5G5PONA.js";import"./chunk-OG2JODU6.js";import{liveToolMediaScope,toolMediaPersister}from"./chunk-HECKLNOO.js";import"./chunk-FEQDJBDL.js";import"./chunk-B255QWLT.js";import{SESSION_MOVED,SESSION_MOVED_IN,SESSION_RECLAIMED,SESSION_RELEASED,SessionManager,SessionMovedAwayError,assertValidSessionId,compactUpdatesEnabled,compareRepositoryIdentities,getDefaultSessionDir,headerSessionId,loadEntriesFromFileAsync,ownershipStep,readRepositoryIdentity,sessionOwnership}from"./chunk-ARNSNIED.js";import{resolveMovedPath}from"./chunk-L5OFGHDA.js";import"./chunk-UURGXV5B.js";import"./chunk-NEOL3GWO.js";import{OPEN_AFTER_QUEUED_DEADLINE_MS}from"./chunk-J2OBN7TI.js";import"./chunk-Y4MPEIY5.js";import{flushRawStdout,takeOverStdout,waitForRawStdoutBackpressure,writeRawStdout}from"./chunk-ZJSGYBBD.js";import"./chunk-FOMJ73UU.js";import"./chunk-VICVLJNU.js";import"./chunk-PIAY636U.js";import"./chunk-LGO25HPL.js";import"./chunk-Y3TMJV3J.js";import"./chunk-ETCYVVVO.js";import{isRecord}from"./chunk-7ICGN62G.js";import{BEGIN_HANDOVER_COMMAND,EXPECTED_RUNTIME_BUILD_ID_ENV,HostIdleHandover,agentDirMismatch,beginHandoverResponse,handoverRefusal,isHandoffBusy,isHostIdle,isTransientDaemonEnvName,parseBeginHandover,performIdleHandover,readDrainVerdicts,runAsHostGenerationProcess,withHostIdentity}from"./chunk-N6OHYIJR.js";import{ATTENDED_CAPABILITY,AUTH_KEY_VERIFY_CAPABILITY,AUTO_TITLE_PER_SESSION_CAPABILITY,AUTO_TITLE_SESSIONS_CAPABILITY,BROWSER_ENGINE_CAPABILITY,CONTINUE_FROM_LEAF_CAPABILITY,DETACH_CONNECTION_CAPABILITY,DURABLE_SESSION_ID_CAPABILITY,ENTRIES_TAIL_CAPABILITY,EVAL_CELLS_CAPABILITY,GENERATION_HANDOFF_CAPABILITY,MEDIA_PLACEHOLDERS_CAPABILITY,MOVED_PATH_GUARD_CAPABILITY,OBSERVE_READS_CAPABILITY,PROMPT_SURFACE_CAPABILITY,PROMPT_SURFACE_CHAT_CAPABILITY,PROVIDER_ACCOUNT_TEST_CAPABILITY,QUEUED_MESSAGE_REVISION_CAPABILITY,RESUME_SESSION_CAPABILITY,RETAIN_ON_DISCONNECT_CAPABILITY,RETRY_FALLBACK_PROFILE_CAPABILITY,RUNTIME_IDENTITY_HANDOVER_CAPABILITY,SESSION_CONTEXT_CAPABILITY,SESSION_ENV_CAPABILITY,SESSION_HELD_CAPABILITY,SESSION_KIND_CAPABILITY,SESSION_RELOCATION_CAPABILITY,SESSION_STATUS_CAPABILITY,TOOL_BARRIER_CAPABILITY,WARM_CAPABILITY,computeRuntimeBuildId,hostGeneration,hostInstanceId,parseClientCapabilities,pathIdentityResolverStatus,protocolIdentity}from"./chunk-VOSHKGXG.js";import"./chunk-WEOFT5KT.js";import"./chunk-QMRJYMNH.js";import{presenterBootstrapStream}from"./chunk-7DWTKE4Z.js";import{ClientOccupancy,PublicRpcConnection,acceptInternalConnection,armHostWatchdog,consumeHostWatchdogEnv,loopLagErrorMs,prepareSocketPath,scrubHostWatchdogEnv}from"./chunk-FVYWSBX3.js";import{SESSION_PATH_RETRY_AFTER_MS,createEndpointReservations,holderGenerationEnded,hostChildDrainRequestFile,ownGenerationDir,parseIdleExitMs,watchDrainRequest,writeHeartbeat,writeStallEvidence}from"./chunk-6LDUM5CL.js";import{HOST_DAEMON_DIR_ENV,canonicalSessionPath,createHostDaemonPaths,sessionDirectoryRemoved}from"./chunk-FNBEICAA.js";import"./chunk-SGS76663.js";import"./chunk-H4QOEVS5.js";import"./chunk-3CKVTGWG.js";import"./chunk-PE3PNVKT.js";import"./chunk-5UVTDRIP.js";import"./chunk-ZNPH5BWS.js";import"./chunk-6VWIMHMH.js";import"./chunk-RQDLTDNO.js";import"./chunk-KLAX467B.js";import"./chunk-SAZ6E74O.js";import{lockWithLossHandling}from"./chunk-F7GBSQRV.js";import"./chunk-GZVCRV7I.js";import{external_exports}from"./chunk-KUPQO7MC.js";import"./chunk-U3VOXCGP.js";import"./chunk-SOMFLLPD.js";import{isHostOwnedToolRuntimeCapability,isSpawnedBy,toolRuntimeCapabilities}from"./chunk-PZSDJIXD.js";import"./chunk-26UBFF6N.js";import{readOwnFootprint}from"./chunk-MTQQ2VQH.js";import"./chunk-WEGTCUO3.js";import"./chunk-GDPWQJDQ.js";import{RpcPublicEndpoint}from"./chunk-E6UCZ7E5.js";import"./chunk-UYO5Z35O.js";import{MAX_RPC_LINE_CHARACTERS,attachJsonlLineReader,serializeJsonLine}from"./chunk-H52J72VA.js";import"./chunk-HB35RBP4.js";import{FILE_STORAGE_LOCK_RETRY_MAX_DELAY_MS,FILE_STORAGE_LOCK_RETRY_MIN_DELAY_MS,isLockError}from"./chunk-7X72IACK.js";import"./chunk-YWD54RHU.js";import"./chunk-C5XX36EB.js";import"./chunk-IYL5E4QQ.js";import"./chunk-OEFCY46F.js";import"./chunk-KRNXUTZJ.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-RPAEB2Z5.js";import"./chunk-D2ROBVZ4.js";import{killTrackedDetachedChildren}from"./chunk-CLZLV65G.js";import"./chunk-YU4AYH4C.js";import"./chunk-N4TSAHRL.js";import"./chunk-LNAZ7XEU.js";import"./chunk-DLAY7CIU.js";import"./chunk-KKVVSE6C.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-4WWORAQH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-TG4E7Z7W.js";import"./chunk-32R442XT.js";import"./chunk-WHPDEDCC.js";import"./chunk-7UC4W2T2.js";import"./chunk-HK46JMSC.js";import"./chunk-WBTKUCRH.js";import"./chunk-WDTJ6JKE.js";import"./chunk-5ROMKDLK.js";import{parseStreamingJson}from"./chunk-3W47LTXQ.js";import"./chunk-3BJFH3CZ.js";import"./chunk-3SASTB6Y.js";import{SeedFrontierError,seedNextOffset}from"./chunk-5CSZPC55.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-YU2P3CAR.js";import"./chunk-PP52OWBB.js";import"./chunk-CQ3G57HE.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-6WISUXVI.js";import"./chunk-XVRRNJQD.js";import"./chunk-42XRJQM6.js";import"./chunk-2SOVDETB.js";import"./chunk-UKSFF47T.js";import{PUBLIC_SOCKET_IDENTITY_FILE,readSocketIdentityFile,shieldSocketDuringClose,socketEntryReplaced,statSocketIdentity,unlinkOwnedSocket,waitForSocketIdentityFile}from"./chunk-OM7LH7AP.js";import{SOCKET_SECRET_FILE_ENV,acquireOwnershipSafeLock,authenticateSocket,ensureSocketSecret,resolveSocketTransportAddress,socketSecretPath}from"./chunk-QEESHRTS.js";import{VERSION,envValue,isBunBinary,normalizePath,resolvePath}from"./chunk-ISZ4EWIS.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import{ownProcessStartedAtMs}from"./chunk-QN2BHP3M.js";import"./chunk-AOTHPTMU.js";import{processStartTimeMs}from"./chunk-O5RYI3IW.js";import"./chunk-IKOFCODM.js";import{randomUUID as randomUUID9}from"node:crypto";import{createServer as createServer2}from"node:net";import{mkdtemp as mkdtemp2,rm as rm9}from"node:fs/promises";import{tmpdir as tmpdir3}from"node:os";import{basename as basename2,dirname as dirname3,join as join12}from"node:path";var HostCoreGate=class{constructor(registry,route,hooks){this.inFlight=new Map,this.answering=new Set,this.route=route,this.runtimeBuildId=hooks.runtimeBuildId,this.endpoint=hooks.endpoint,this.handover=hooks.handover===void 0?void 0:new HostIdleHandover({...hooks.handover,isIdle:()=>isHostIdle(registry,this.inFlight)})}async intercept(parsed,deliver){if(!isRecord2(parsed)||parsed.type!==BEGIN_HANDOVER_COMMAND)return!1;let answering=this.answerBegin(parsed).then(deliver);this.answering.add(answering);try{await answering}finally{this.answering.delete(answering)}return!0}async answerBegin(parsed){if(this.handover===void 0)return beginHandoverResponse(parsed.id,{kind:"refused",reason:"handover_unsupported"});let request=parseBeginHandover(parsed);if(typeof request=="string")return beginHandoverResponse(parsed.id,request);let detail2=request.agentDir===void 0||this.endpoint===void 0?void 0:await agentDirMismatch(this.endpoint.socket,request.agentDir,this.endpoint.agentDir);return beginHandoverResponse(parsed.id,detail2===void 0?await this.handover.begin(request):{kind:"refused",reason:"foreign_agent_dir",detail:detail2})}async answered(){for(;this.answering.size>0;)await Promise.allSettled([...this.answering])}async dispatch(command){let pending=this.handover?.view();if(pending!==void 0&&this.handover?.admits(command.type)===!1)return handoverRefusal(command,pending);let key="sessionId"in command?command.sessionId:void 0;this.inFlight.set(key,(this.inFlight.get(key)??0)+1);let response;try{response=await this.route(command)}finally{let remaining=(this.inFlight.get(key)??1)-1;remaining>0?this.inFlight.set(key,remaining):this.inFlight.delete(key),this.handover?.observe()}return response===void 0?void 0:withHostIdentity(response,this.runtimeBuildId,this.handover?.view())}};function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var HandoffAnnouncement=class{begin(superseded,identity2,publicSocket,log){return this.record=superseded.then(replaced=>({type:"host_superseded",...identity2,successor:replaced?{socket:publicSocket}:null}),cause=>{log(`handoff announcement failed: ${String(cause)}`)}),this.record}deliverLate(stream,arrivedBeforeDrain){let record=this.record;return!arrivedBeforeDrain||record===void 0?!1:(record.then(announced=>announced===void 0?stream.destroy():stream.end(`${JSON.stringify(announced)}
|
|
3
3
|
`)),!0)}};import{existsSync as existsSync4}from"node:fs";import{createHash}from"node:crypto";import{existsSync,renameSync}from"node:fs";import{mkdir,readdir,readFile,rm,writeFile}from"node:fs/promises";import{join}from"node:path";var CALLER_ENV_NAMES_ENV="SENPI_RPC_CALLER_ENV_NAMES",DEFAULT_CALLER_ENV_NAMES=Object.freeze(["OMOCAT_LANE"]),MAX_SESSION_ENV_ENTRIES=16,MAX_SESSION_ENV_VALUE_LENGTH=4096,ENV_NAME=/^[A-Z_][A-Z0-9_]*$/u,MAX_ECHOED_NAME_LENGTH=64;function callerEnvPassableNames(hostEnv=process.env){let names=new Set(DEFAULT_CALLER_ENV_NAMES);for(let raw of(hostEnv[CALLER_ENV_NAMES_ENV]??"").split(",")){let name=raw.trim();ENV_NAME.test(name)&&!isTransientDaemonEnvName(name)&&names.add(name)}return names}function sessionEnvShapeError(value){if(value===void 0)return;if(!isPlainRecord(value))return"env must be an object of strings.";let entries=Object.entries(value);if(entries.length>MAX_SESSION_ENV_ENTRIES)return`env allows at most ${MAX_SESSION_ENV_ENTRIES} entries.`;for(let[name,entry]of entries){if(!ENV_NAME.test(name))return`env name "${echoedName(name)}" must match ${ENV_NAME.source}.`;if(typeof entry!="string")return`env.${echoedName(name)} must be a string.`;if(entry.includes("\0"))return`env.${echoedName(name)} must not contain NUL.`;if(entry.length>MAX_SESSION_ENV_VALUE_LENGTH)return`env.${echoedName(name)} must be at most ${MAX_SESSION_ENV_VALUE_LENGTH} characters.`}}function sessionEnvError(value,hostEnv=process.env){let shape=sessionEnvShapeError(value);if(shape!==void 0||!isPlainRecord(value))return shape;let passable=callerEnvPassableNames(hostEnv);for(let name of Object.keys(value))if(!passable.has(name))return`env.${echoedName(name)} is not a caller-passable name (passable: ${[...passable].sort().join(", ")}).`}function inheritedSessionEnv(parent,requested){let merged={...parent,...requested};return Object.keys(merged).length===0?void 0:merged}function echoedName(name){return name.length>MAX_ECHOED_NAME_LENGTH?`${name.slice(0,MAX_ECHOED_NAME_LENGTH)}...`:name}function isPlainRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var recordDir=daemonDir=>join(daemonDir,"handover-parked"),entryFile=(daemonDir,sessionPath)=>join(recordDir(daemonDir),`${createHash("sha256").update(sessionPath,"utf8").digest("hex").slice(0,16)}.json`),mutationChain=Promise.resolve();function enqueueMutation(mutation){let next=mutationChain.then(mutation,mutation);return mutationChain=next.catch(()=>{}),next}function isEntry(value){if(typeof value!="object"||value===null||Array.isArray(value))return!1;let record=value;return typeof record.sessionPath=="string"&&typeof record.retainOnDisconnect=="boolean"&&(record.durableSessionId===void 0||typeof record.durableSessionId=="string")&&(record.cwd===void 0||typeof record.cwd=="string")&&(record.parkedBy===void 0||typeof record.parkedBy=="string")&&(record.thinkingLevel===void 0||typeof record.thinkingLevel=="string")&&(record.permissionPreset===void 0||typeof record.permissionPreset=="string"&&parsePermissionPresetName(record.permissionPreset)!==void 0)&&sessionPromptSurfaceError(record.promptSurface)===void 0&&sessionBrowserEngineError(record.browserEngine)===void 0&&sessionKindError(record.sessionKind)===void 0&&sessionContextError(record.sessionContext)===void 0&&(record.contextOverlay===void 0||!("refusal"in applyContextPatch(void 0,record.contextOverlay)))&&sessionAutoTitleError(record.autoTitle)===void 0&&sessionRetryFallbackError(record.retryFallback)===void 0&&sessionEnvShapeError(record.sessionEnv)===void 0&&(record.model===void 0||typeof record.model=="object"&&record.model!==null&&typeof record.model.provider=="string"&&typeof record.model.modelId=="string")}async function writeEntryFile(daemonDir,entry){await mkdir(recordDir(daemonDir),{recursive:!0,mode:448});let file=entryFile(daemonDir,entry.sessionPath),tmp=`${file}.${process.pid}.${Math.random().toString(16).slice(2,10)}.tmp`;await writeFile(tmp,`${JSON.stringify(entry,null,2)}
|
|
4
4
|
`,{mode:384}),renameSync(tmp,file)}function recordHandoverParkedSession(daemonDir,entry){return enqueueMutation(()=>writeEntryFile(daemonDir,entry))}async function readHandoverParkedSessions(daemonDir){let names;try{names=(await readdir(recordDir(daemonDir))).filter(name=>name.endsWith(".json"))}catch{return[]}let entries=[];for(let name of names){let file=join(recordDir(daemonDir),name);try{let parsed=JSON.parse(await readFile(file,"utf8"));isEntry(parsed)&&entries.push(parsed)}catch(cause){cause instanceof SyntaxError&&(process.stderr.write(`senpi rpc handover-parked entry ${name} is corrupt; dropping it
|
|
5
|
-
`),await rm(file,{force:!0}))}}return entries}function clearHandoverParkedSession(daemonDir,sessionPath){return enqueueMutation(()=>rm(entryFile(daemonDir,sessionPath),{force:!0}))}function dropHandoverParkedSessionIfFileGone(daemonDir,sessionPath){return existsSync(sessionPath)?Promise.resolve():clearHandoverParkedSession(daemonDir,sessionPath)}import{isAbsolute as isAbsolute2}from"node:path";import{access}from"node:fs/promises";import{isAbsolute}from"node:path";var MAX_WARM_PROFILES=64;function profileKey(profile){let context=Object.entries(profile.sessionContext??{}).sort(([a],[b])=>a<b?-1:a>b?1:0);return JSON.stringify([profile.cwd,profile.sessionKind??"interactive",context])}var HostWarmer=class{constructor(load){this.warm=new Set,this.loading=new Map,this.load=load}async run(profile){let key=profileKey(profile);if(this.warm.has(key))return"already_warm";let pending=this.loading.get(key);return pending===void 0&&(pending=this.loadOnce(key,profile),this.loading.set(key,pending)),await pending,"warmed"}async loadOnce(key,profile){try{if(await this.load(profile),this.warm.add(key),this.warm.size>MAX_WARM_PROFILES){let oldest=this.warm.values().next().value;oldest!==void 0&&this.warm.delete(oldest)}}finally{this.loading.delete(key)}}};function createRegistryWarm(prepare,host){let warmer=new HostWarmer(async profile=>{await access(profile.cwd);let launchProfile={cwd:profile.cwd,...profile.sessionKind!==void 0?{sessionKind:profile.sessionKind}:{},...profile.sessionContext!==void 0?{sessionContext:Object.freeze({...profile.sessionContext})}:{}},scope=new ProviderScope;try{await runWithProviderScope(scope,()=>prepare({cwd:profile.cwd,agentDir:host.agentDir,launchProfile:Object.freeze(launchProfile),...host.mcpRegistry!==void 0?{mcpRegistry:host.mcpRegistry}:{}}))}finally{scope.close()}});return profile=>warmer.run(profile)}function refusal(command,code2){return{id:command.id,type:"response",command:"warm",success:!1,error:code2}}async function answerWarm(command,host){if(host.draining)return refusal(command,"host_draining");let kindError=sessionKindError(command.kind);if(kindError)return refusal(command,`${RPC_ERROR_INVALID_SESSION_KIND}: ${kindError}`);let contextError=sessionContextError(command.context);if(contextError)return refusal(command,`${RPC_ERROR_INVALID_SESSION_CONTEXT}: ${contextError}`);if(host.warm===void 0)return{id:command.id,type:"response",command:"warm",success:!0,data:{state:"unsupported"}};let sessionContext=host.hostContext?{...command.context,...host.hostContext}:command.context,cwd=command.cwd??host.cwd;if(!isAbsolute(cwd))return refusal(command,RPC_ERROR_INVALID_PATH);try{let state=await host.warm({cwd,...command.kind!==void 0?{sessionKind:command.kind}:{},...sessionContext!==void 0?{sessionContext}:{}});return{id:command.id,type:"response",command:"warm",success:!0,data:{state}}}catch(cause){return refusal(command,`${RPC_ERROR_WARM_FAILED}: ${cause instanceof Error?cause.message:String(cause)}`)}}var observations=new Set(["get_state","get_snapshot","get_effect_status","get_pending_inputs","get_messages","get_entries","get_tree","get_recovery_page","release_recovery","get_fork_messages","get_last_assistant_text","get_session_stats","resolve_path","get_steering_messages","get_follow_up_messages","get_available_models","get_available_thinking_levels","get_model_thinking_level","get_fast_mode","get_commands","get_loaded_surfaces","get_media","get_auth_providers","get_provider_accounts","memory_report","eval_cells.list","eval_cells.peek"]);function refreshesSessionActivity(command){return!observations.has(command)}var RpcSessionRegistryError=class extends Error{constructor(code2,reason,detail2){super(code2==="open_failed"&&reason?`${code2}: ${reason}`:code2),this.code=code2,this.name="RpcSessionRegistryError",detail2&&(this.detail=detail2)}};function frozenProfile(profile){return Object.freeze({...profile,...profile.holderEndpoint?{holderEndpoint:Object.freeze({...profile.holderEndpoint})}:{},...profile.creationModel?{creationModel:Object.freeze({...profile.creationModel})}:{},...profile.sessionContext?{sessionContext:Object.freeze({...profile.sessionContext})}:{},...profile.sessionEnv?{sessionEnv:Object.freeze({...profile.sessionEnv})}:{},...profile.retryFallback?{retryFallback:Object.freeze({modelFallback:profile.retryFallback.modelFallback,fallbackChains:Object.freeze(Object.fromEntries(Object.entries(profile.retryFallback.fallbackChains).map(([key,entries])=>[key,Object.freeze([...entries])])))})}:{}})}function sessionIdentity(profile){return{kind:profile.sessionKind??"interactive",context:profile.sessionContext??EMPTY_SESSION_CONTEXT}}function attachLiveSession(entry,now,markAttached){if(entry?.state!=="open")throw new RpcSessionRegistryError("unknown_session");let wasParked=entry.retainOnDisconnect===!0&&entry.attachments===0;return entry.attachments++,entry.detachedAt=void 0,entry.lastCommandAt=now,markAttached(),wasParked&&entry.runtime&&(entry.lifecycleMutex=entry.lifecycleMutex.then(()=>entry.runtime?.emitAttachmentEvent("session_resumed"))),entry}function markPathAttached(entry,claims){entry?.reservationKey&&claims?.setAttached(entry.reservationKey,!0)}function beginPendingClaim(pending,sessionPath){let settled=Promise.withResolvers();return pending.set(sessionPath,settled.promise),()=>{pending.get(sessionPath)===settled.promise&&pending.delete(sessionPath),settled.resolve()}}async function takeCrossGenerationClaim(reservations,pending,pathReservations,sessionPath){let settle=beginPendingClaim(pending,sessionPath),holder;try{holder=await pathReservations.claim(sessionPath)}catch(cause){throw reservations.delete(sessionPath),settle(),cause}if(holder===void 0)return settle;throw reservations.delete(sessionPath),settle(),new RpcSessionRegistryError("session_path_in_use",void 0,{owner:holder,retry_after_ms:SESSION_PATH_RETRY_AFTER_MS})}async function settlePendingClaim(pending,sessionPath,graceMs){let timer,late=new Promise(resolve2=>{timer=setTimeout(()=>resolve2("late"),graceMs)});try{for(let claim=pending.get(sessionPath);claim!==void 0;claim=pending.get(sessionPath))if(await Promise.race([claim.then(()=>"settled"),late])==="late")throw new RpcSessionRegistryError("session_path_in_use","another open of this path is still taking its claim",{reason:"claim_in_progress",retry_after_ms:SESSION_PATH_RETRY_AFTER_MS})}finally{clearTimeout(timer)}}function syncRuntimeMetadata(entries,reservations,pathReservations){for(let entry of entries){let manager=entry.runtime?.session.sessionManager;if(!manager)continue;let currentPath=manager.getSessionFile(),currentKey=currentPath?canonicalSessionPath(currentPath):void 0;(currentPath!==entry.sessionPath||currentKey!==entry.reservationKey)&&(entry.reservationKey&&(reservations.delete(entry.reservationKey),pathReservations?.release(entry.reservationKey)),currentKey&&(reservations.add(currentKey),pathReservations?.claim(currentKey,entry.attachments>0)),entry.reservationKey=currentKey,entry.sessionPath=currentPath),entry.durableSessionId=manager.getSessionId(),entry.cwd=manager.getCwd()}}async function settleClosingReservation(entries,sessionPath,closeGraceMs){let closing=[...entries].find(entry=>entry.reservationKey===sessionPath&&entry.state==="closing");if(!closing?.closeCompletion)return;let deadline;try{await Promise.race([closing.closeCompletion,new Promise(resolve2=>{deadline=setTimeout(resolve2,closeGraceMs)})])}finally{deadline&&clearTimeout(deadline)}}function assertRequestedModelResolved(profile,diagnostics){let requested=profile.creationModel;if(requested===void 0)return;let unresolved=diagnostics.find(diagnostic=>diagnostic.code==="model_unresolved");if(unresolved!==void 0)throw new RpcSessionRegistryError("open_failed",`model_unavailable: ${unresolved.message}`,{reason:"model_unavailable",requestedModel:`${requested.provider}/${requested.modelId}`})}import{randomUUID as randomUUID2}from"node:crypto";import{tmpdir}from"node:os";import{join as join3}from"node:path";var CompactPagedBatch=class{constructor(tree){this.changes=[],this.tree=tree}async apply(root,changes){return this.changes=[...changes].sort(([a],[b])=>a<b?-1:a>b?1:0),this.build(await this.merge(root,0,this.changes.length))}async merge(sub,from,to){if(from===to)return sub;if(!sub)return this.fresh(from,to);let node=await this.open(sub),split=from;for(;split<to&&this.changes[split][0]<node.name;)split++;let hit=split<to&&this.changes[split][0]===node.name,left=await this.merge(node.left,from,split),right=await this.merge(node.right,hit?split+1:split,to);if(!hit&&left===node.left&&right===node.right)return sub;let value=hit?this.changes[split][1]:node.value;return value===void 0?this.concat(left,right):(node.value=value,this.join(left,node,right))}fresh(from,to){let rows=[];for(let[name,value]of this.changes.slice(from,to))value!==void 0&&rows.push([name,value]);let grow=(lo,hi)=>{if(lo===hi)return;let mid=lo+hi>>>1,[name,value]=rows[mid],left=grow(lo,mid);return this.fix({key:void 0,name,value,left,right:grow(mid+1,hi),height:0,size:0})};return grow(0,rows.length)}async join(left,node,right){let lh=left?.height??0,rh=right?.height??0;if(left&&lh>rh+1){let top=await this.open(left);return top.right=await this.join(top.right,node,right),this.balance(top)}if(right&&rh>lh+1){let top=await this.open(right);return top.left=await this.join(left,node,top.left),this.balance(top)}return node.left=left,node.right=right,this.fix(node)}async concat(left,right){if(!left)return right;if(!right)return left;let[min,rest]=await this.takeMin(right);return this.join(left,min,rest)}async takeMin(sub){let node=await this.open(sub);if(!node.left)return[node,node.right];let[min,rest]=await this.takeMin(node.left);return node.left=rest,[min,await this.balance(node)]}async balance(node){let leftHeavy=(node.left?.height??0)>(node.right?.height??0),side=leftHeavy?"left":"right",other=leftHeavy?"right":"left",heavy=node[side];if(!heavy||heavy.height-(node[other]?.height??0)<2)return this.fix(node);let child=await this.open(heavy),inner=child[other];if(inner&&inner.height>(child[side]?.height??0)){let pivot=await this.open(inner);return child[other]=pivot[side],node[side]=pivot[other],pivot[side]=this.fix(child),pivot[other]=this.fix(node),this.fix(pivot)}return node[side]=inner,child[other]=this.fix(node),this.fix(child)}fix(node){return node.height=1+Math.max(node.left?.height??0,node.right?.height??0),node.size=1+(node.left?.size??0)+(node.right?.size??0),node}async open(sub){if(!("ref"in sub))return sub;let{node,name}=await this.tree.read(sub),{key,value,left,right}=node;return{key,name,value,left,right,height:sub.height,size:sub.size}}async build(sub){if(!sub||"ref"in sub)return this.tree.adjust(sub,1),sub;let left=await this.build(sub.left);try{let right=await this.build(sub.right);try{let key=sub.key??this.tree.own(sub.name);try{return await this.tree.make({key,value:sub.value,left,right})}finally{sub.key||this.tree.release(key)}}finally{this.tree.adjust(right,-1)}}finally{this.tree.adjust(left,-1)}}};var ROUND_CACHE_BYTES=1024*1024,CompactPagedTree=class{constructor(store,leavesOf){this.dirty=[],this.cacheBytes=0,this.allocatedNodes=0,this.store=store,this.values=new CompactValues(store),this.leavesOf=leavesOf}adjust(root,live,pins){root&&this.store.adjust(root.ref.owner,live,pins)}async cached(operation){this.cache=new Map,this.cacheBytes=0;try{return await operation()}finally{this.cache=void 0,this.cacheBytes=0}}async read(root){let cached=this.cache?.get(root.ref.node);if(cached)return this.cache?.delete(root.ref.node),this.cache?.set(root.ref.node,cached),cached;let text3=await this.store.readLeaf(root.ref.node),node=JSON.parse(text3),name=await this.values.read(node.key);if(typeof name!="string")throw new CompactReadError("ownership");return this.remember(root.ref.node,node,name,text3.length)}remember(id,node,name,units){let existing=this.cache?.get(id);if(existing)return existing;let bytes=(units+name.length)*2+128,decoded={node,name,bytes};if(this.cache&&bytes<=ROUND_CACHE_BYTES){for(;this.cacheBytes+bytes>ROUND_CACHE_BYTES;){let oldest=this.cache.entries().next().value;if(!oldest)break;this.cache.delete(oldest[0]),this.cacheBytes-=oldest[1].bytes}this.cache.set(id,decoded),this.cacheBytes+=bytes}return decoded}async get(root,key){let ref=root;for(;ref;){let{node,name}=await this.read(ref);if(key===name)return node.value;ref=key<name?node.left:node.right}}async getMany(root,keys){let ordered=[...keys].sort(),found=new Map,visit=async(ref,from,to)=>{if(!ref||from===to)return;let{node,name}=await this.read(ref),split=from;for(;split<to&&ordered[split]<name;)split++;await visit(node.left,from,split);let right=split;for(;right<to&&ordered[right]===name;)found.set(ordered[right++],node.value);await visit(node.right,right,to)};return await visit(root,0,ordered.length),found}async*entries(root,after){if(!root)return;let{node,name:key}=await this.read(root);(after===void 0||key>after)&&(yield*this.entries(node.left,after),yield[key,node.value]),yield*this.entries(node.right,after)}apply(root,changes){return new CompactPagedBatch({read:ref=>this.read(ref),make:node=>this.make(node),own:name=>this.values.own(name),adjust:(ref,live)=>this.adjust(ref,live,0),release:key=>this.store.adjust(key.owner,-1,0)}).apply(root,changes)}async make(node){let text3=JSON.stringify(node),name=this.cache?await this.values.read(node.key):void 0,leaf=this.store.createLeaf(text3,!0),owner=this.store.text.own([leaf,node.key.owner,...this.leavesOf(node.value),node.left?.ref.owner??0,node.right?.ref.owner??0]);return this.store.adjust(leaf,-1,0),this.dirty.push(leaf),this.allocatedNodes++,this.cache&&typeof name=="string"&&this.remember(leaf,node,name,text3.length),{ref:{node:leaf,owner},height:1+Math.max(node.left?.height??0,node.right?.height??0),size:1+(node.left?.size??0)+(node.right?.size??0)}}async flush(){let dirty=this.dirty;this.dirty=[],await this.store.flushLeaves(dirty,"node_write")}};function*packPages(rows){let page=[],bytes=2;for(let row of rows){let size=Buffer.byteLength(JSON.stringify(row));if(size+2>65536)throw new CompactWriteError("size_limit");(page.length===128||bytes+size+ +(page.length>0)>65536)&&(yield page,page=[],bytes=2),bytes+=size+ +(page.length>0),page.push(row)}page.length&&(yield page)}var CompactIndexCompactor=class{constructor(index,threshold){this.running=!1,this.index=index,this.threshold=threshold}schedule(){let index=this.index;this.running||!index.store.spillAllowed||(index.overrides?.size??0)-index.pending.size<this.threshold&&!index.status().deletionMasks||(this.running=!0,index.store.enqueue("page_write",async()=>{let progress=!1;try{progress=await index.bases.cached(()=>this.compact())}finally{this.running=!1}progress&&this.schedule()}))}*readyEntries(cut){for(let key of[...this.index.ready].sort()){if(!this.index.ready.has(key))continue;let value=this.index.overlays.get(cut.overrides,key);value&&(yield[key,value])}}async compact(){let i=this.index;if(!i.store.spillAllowed||(i.pending.size&&await i.store.flushValues(),!i.store.spillAllowed))return!1;let cut=i.freeze(),selected=new Map,touched,rows=new Map,removed=new Set,merged=[],written=[],loaded2=[],unowned=new Set,draft=i.base;i.bases.adjust(draft,1,0);try{let entries=this.readyEntries(cut),exhausted=!1;for(;selected.size<128&&!exhausted;){let batch=[];for(;batch.length<128;){let next=entries.next();if(next.done){exhausted=!0;break}batch.push(next.value)}if(!batch.length)break;let locations=await i.bases.getMany(cut.base,batch.map(([key])=>key));for(let[key,value]of batch){let page=locations.get(key)?.page;if((!page||!touched||page.path===touched.path)&&(selected.set(key,value),touched??=page),selected.size===128)break}}let small;for(let page of i.pages)if(page.count<64&&page.bytes<32768){small=page;break}for(let page of small?.path===touched?.path?[small]:[small,touched]){if(!page)continue;let data2=await i.readPage(page);loaded2.push(data2);let keyed=[];for(let row of data2.rows){let key=await i.values.read(row.key);if(typeof key!="string")throw new CompactReadError("ownership");keyed.push([key,row])}let locations=await i.bases.getMany(cut.base,keyed.map(([key])=>key));for(let[key,row]of keyed)locations.get(key)?.page.path===page.path&&(rows.set(key,row),removed.add(key))}for(let[key,change]of selected){if(removed.add(key),change.deleted){rows.delete(key);continue}let row=change.row??rows.get(key);if(row&&change.patch.size){let value=await i.values.merge(row.value,change.patch);merged.push(value.owner),row={...row,value}}row&&rows.set(key,row)}let ordered=[...rows],offset=0;for(let chunk of packPages(ordered.map(([,row])=>row))){let data2=Buffer.from(JSON.stringify(chunk));i.peakResidentPages=Math.max(i.peakResidentPages,i.residentPages+1);let path=await i.store.writeFile(data2,"page_write",data2.byteLength);if(path===void 0)return!1;written.push({page:{path,bytes:data2.byteLength,count:chunk.length,owner:0},keys:ordered.slice(offset,offset+chunk.length).map(([key])=>key)}),unowned.add(written[written.length-1].page),offset+=chunk.length}if(!i.store.spillAllowed)return!1;let changes=new Map,owners=[];try{for(let candidate of written){let kept=[],refs=[];for(let[offset2,key]of candidate.keys.entries()){let row=rows.get(key);if(!row)throw new CompactReadError("ownership");refs.push(row.key.owner);let folded=selected.get(key),current=i.overlays.get(i.overrides,key);folded&¤t!==folded&&(!current||current.deleted||current.row!==folded.row)||(refs.push(row.value.owner,row.payload),kept.push([key,offset2]))}let file=i.store.ownFile(candidate.page.path,candidate.page.bytes),page={...candidate.page,owner:i.store.text.own([...refs,file])};owners.push(page.owner),i.store.adjust(file,-1,0),unowned.delete(candidate.page);for(let[key,offset2]of kept)changes.set(key,{page,offset:offset2}),removed.delete(key);kept.length&&(candidate.page=page)}for(let key of removed)changes.set(key,void 0);let next=await i.bases.apply(draft,changes);i.bases.adjust(draft,-1,0),draft=next}finally{for(let owner of owners)i.store.adjust(owner,-1,0)}if(await i.bases.flush(),!i.store.spillAllowed)return!1;let previous=i.base;i.base=draft,draft=void 0,i.bases.adjust(previous,-1,0);for(let page of i.pages)(page.path===small?.path||page.path===touched?.path)&&i.pages.delete(page);for(let{page}of written)page.owner&&i.pages.add(page);for(let[key,value]of selected)i.overlays.get(i.overrides,key)===value&&i.drop(key);return selected.size>0}catch(error2){if(error2 instanceof CompactReadError&&error2.reason==="retired")return!1;throw error2}finally{i.bases.adjust(draft,-1,0);for(let page of loaded2)page[Symbol.dispose]();for(let page of unowned)i.store.discard(page.path,page.bytes);for(let owner of merged)i.store.adjust(owner,-1,0);i.release(cut)}}};async function readIndexPage(index,cut,cursor){if(cursor&&cursor.cut!==cut)throw new CompactReadError("ownership");let rows=[],base=index.bases.entries(cut.base,cursor?.after),overlay=index.overlays.entries(cut.overrides,cursor?.after),a=await base.next(),b=overlay.next(),last,loaded2,from;try{for(;(!a.done||!b.done)&&rows.length<128;){let key=a.done?b.value?.[0]:b.done||a.value[0]<b.value[0]?a.value[0]:b.value[0];if(key===void 0)break;let old=!a.done&&a.value[0]===key?a.value[1]:void 0,change=!b.done&&b.value[0]===key?b.value[1]:void 0;if(!change?.deleted){!change?.row&&old&&from?.path!==old.page.path&&(loaded2?.[Symbol.dispose](),loaded2=void 0,from=old.page,loaded2=await index.readPage(from));let row=change?.row??(old?loaded2?.rows[old.offset]:void 0);row&&rows.push({row,patch:change?.patchValue})}last=key,!a.done&&a.value[0]===key&&(a=await base.next()),!b.done&&b.value[0]===key&&(b=overlay.next())}}finally{loaded2?.[Symbol.dispose]()}if(index.store.assertReadable(),Buffer.byteLength(JSON.stringify(rows))>65536)throw new CompactReadError("size_limit");return{rows,next:a.done&&b.done||last===void 0?void 0:{cut,after:last}}}async function readIndexEntries(index,cut){let result=new Map,after;for(;;){let page=await index.page(cut,after);for(let entry of page.rows){let value=await index.values.read(entry.row.value),row=JSON.parse(JSON.stringify(value));entry.patch&&Object.assign(row,await index.values.read(entry.patch));let key=await index.values.read(entry.row.key);if(typeof key!="string")throw new CompactReadError("ownership");result.set(key,row)}if(!page.next)return result;after=page.next}}var __addDisposableResource=function(env,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose2,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose2=value[Symbol.asyncDispose]}if(dispose2===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose2=value[Symbol.dispose],async&&(inner=dispose2)}if(typeof dispose2!="function")throw new TypeError("Object not disposable.");inner&&(dispose2=function(){try{inner.call(this)}catch(e){return Promise.reject(e)}}),env.stack.push({value,dispose:dispose2,async})}else async&&env.stack.push({async:!0});return value},__disposeResources=(function(SuppressedError2){return function(env){function fail2(e){env.error=env.hasError?new SuppressedError2(e,env.error,"An error was suppressed during disposal."):e,env.hasError=!0}var r,s=0;function next(){for(;r=env.stack.pop();)try{if(!r.async&&s===1)return s=0,env.stack.push(r),Promise.resolve().then(next);if(r.dispose){var result=r.dispose.call(r.value);if(r.async)return s|=2,Promise.resolve(result).then(next,function(e){return fail2(e),next()})}else s|=1}catch(e){fail2(e)}if(s===1)return env.hasError?Promise.reject(env.error):Promise.resolve();if(env.hasError)throw env.error}return next()}})(typeof SuppressedError=="function"?SuppressedError:function(error2,suppressed,message){var e=new Error(message);return e.name="SuppressedError",e.error=error2,e.suppressed=suppressed,e}),CompactContentIndex=class{constructor(store,leavesOf,threshold){this.pages=new Set,this.ready=new Set,this.cuts=new WeakMap,this.tombstones=0,this.maskUnits=0,this.residentPages=0,this.peakResidentPages=0,this.store=store,this.leavesOf=leavesOf,this.values=new CompactValues(store),this.bases=new CompactPagedTree(store,({page})=>[page.owner]),this.overlays=new CompactIndexTree((value,live,pins)=>store.adjust(value.owner,live,pins)),this.pending=new CompactCommitDependencies(store,key=>{this.ready.add(key),this.maybeCompact()}),this.compactor=new CompactIndexCompactor(this,threshold)}set(key,row){let value=this.values.own(row),refs=[value.owner];try{let keyRef=this.values.own(key);refs.push(keyRef.owner);let payload=this.store.text.own(this.leavesOf(row));refs.push(payload),this.put(key,{key:keyRef,value,payload},new Map,!1)}finally{for(let ref of refs)this.store.adjust(ref,-1,0)}}patch(key,fields){let current=this.overlays.get(this.overrides,key),patch=new Map(current?.patch),owned=[];try{for(let[name,value]of Object.entries(fields)){let ref=this.values.own(value);owned.push(ref),patch.set(name,ref)}this.put(key,current?.row,patch,!1)}finally{for(let ref of owned)this.store.adjust(ref.owner,-1,0)}}delete(key){this.put(key,void 0,new Map,!0)}freeze(){this.store.assertReadable();let cut={base:this.base,overrides:this.overrides};return this.bases.adjust(cut.base,0,1),this.overlays.adjust(cut.overrides,0,1),this.cuts.set(cut,new CompactReadLease(()=>{this.bases.adjust(cut.base,0,-1),this.overlays.adjust(cut.overrides,0,-1)},()=>this.store.assertReadable())),cut}release(cut){this.lease(cut).release()}async lookup(cut,key){return this.lease(cut).run(async()=>{let env_1={stack:[],error:void 0,hasError:!1};try{let change=this.overlays.get(cut.overrides,key);if(change?.deleted)return;if(change?.row)return change.row;let old=await this.bases.get(cut.base,key);return old?__addDisposableResource(env_1,await this.readPage(old.page),!1).rows[old.offset]:void 0}catch(e_1){env_1.error=e_1,env_1.hasError=!0}finally{__disposeResources(env_1)}})}async entries(cut){return this.lease(cut).run(()=>readIndexEntries(this,cut))}async page(cut,cursor){return this.lease(cut).run(()=>readIndexPage(this,cut,cursor))}async readPage(page){if(page.bytes>65536)throw new CompactReadError("size_limit");if(page.count>128)throw new CompactReadError("count_limit");this.peakResidentPages=Math.max(this.peakResidentPages,++this.residentPages);try{let data2=await this.store.readFile(page.path,page.bytes,"page_read"),rows=JSON.parse(data2.toString("utf8"));if(rows.length>128)throw new CompactReadError("count_limit");if(rows.length!==page.count)throw new CompactReadError("ownership");return{rows,[Symbol.dispose]:()=>{this.residentPages--}}}catch(error2){throw this.residentPages--,error2}}status(){return{overrideSlots:this.overrides?.size??0,deletionMasks:this.tombstones,deletionMaskBytes:this.maskUnits*2,basePages:this.pages.size,baseRows:this.base?.size??0,residentIndexNodes:this.overlays.residentNodes,allocatedIndexNodes:this.bases.allocatedNodes+this.overlays.allocatedNodes,residentPages:this.residentPages+this.values.residentPages,peakResidentPages:this.peakResidentPages+this.values.peakResidentPages}}maybeCompact(){this.compactor.schedule()}drop(key){let old=this.overlays.get(this.overrides,key);if(!old)return;old.deleted&&(this.tombstones--,this.maskUnits-=key.length);let next=this.overlays.set(this.overrides,key,void 0);this.overlays.adjust(this.overrides,-1,0),this.overrides=next,this.pending.delete(key),this.ready.delete(key)}put(key,row,patch,deleted){let patchValue=patch.size?this.values.record(patch):void 0,refs=patchValue?[patchValue.owner]:[];row&&refs.push(row.key.owner,row.value.owner,row.payload);let owner=this.store.text.own(refs);this.drop(key);let next=this.overlays.set(this.overrides,key,{row,patch,patchValue,owner,deleted});this.overlays.adjust(this.overrides,-1,0),this.overrides=next,this.store.adjust(owner,-1,0),patchValue&&this.store.adjust(patchValue.owner,-1,0),deleted&&(this.tombstones++,this.maskUnits+=key.length),this.pending.set(key,refs),this.pending.has(key)||this.ready.add(key),this.maybeCompact()}lease(cut){let lease=this.cuts.get(cut);if(!lease)throw new CompactReadError("ownership");return lease}};var COMPACT_PROTOCOL_MAX_DEPTH=1024;function assertProtocolDepth(value){let stack=[],ancestors=new Set,enter=child=>{if(!(typeof child!="object"||child===null)){if(ancestors.has(child))throw new CompactWriteError("cycle");if(stack.length===COMPACT_PROTOCOL_MAX_DEPTH)throw new CompactWriteError("unsupported_value",COMPACT_PROTOCOL_MAX_DEPTH);ancestors.add(child),stack.push({container:child,children:Array.isArray(child)?child:Object.values(child),index:0})}};enter(value);for(let top=stack.at(-1);top;top=stack.at(-1))top.index<top.children.length?enter(top.children[top.index++]):(stack.pop(),ancestors.delete(top.container))}function protocolClone(record){return assertProtocolDepth(record),JSON.parse(JSON.stringify(record))}function protocolDepthLimitOf(cause){return cause instanceof CompactWriteError?cause.limit:void 0}function canonicalLoss(frame2){return frame2.limit===void 0?frame2.reason:new CompactWriteError("unsupported_value",frame2.limit)}var isProjection=value=>typeof value=="object"&&value!==null&&typeof Reflect.get(value,"runtimeItemKey")=="string",CompactSettledMessages=class{constructor(epoch,options,diagnose){this.keys=new Map,this.joins=0,this.epoch=epoch,this.diagnose=diagnose,this.store=new CompactContentStore(options),this.rows=new CompactContentIndex(this.store,row=>row.kind==="terminal"?[...row.payload,row.call?.owner??0]:[],128)}reader(root){return{store:this.store,values:this.rows.values,members:valid=>this.members(root,valid),messageOf:entryId=>this.messageOf(root,entryId)}}valid(carrier){return carrier!==void 0&&carrier.epoch===this.epoch}end(record,carrier,sequence2,turnId,call){if(assertProtocolDepth(record),!this.valid(carrier))return this.reject("unknown_message");let id=carrier.messageId;if(this.keys.has(`end:${id}`)||this.keys.has(`settled:${id}`))return this.reject("duplicate_end");let owned=this.keys.get(`owner:${id}`);if(carrier.durableEntryId&&owned!==void 0&&owned!==carrier.durableEntryId)return this.reject("conflicting_owner");let joined=!1;if(carrier.durableEntryId&&owned===void 0){if(this.keys.has(`entry:${carrier.durableEntryId}`))return this.reject("conflicting_owner");this.join(id,carrier.durableEntryId),joined=!0}if(this.keys.has(`owner:${id}`))return this.settle(id),joined;let projection=call?this.rows.values.own(call):null;this.keys.set(`end:${id}`,"");let message=Reflect.get(record,"message"),role=String(Reflect.get(Object(message),"role")),payload=[],text3=JSON.stringify({terminal:message,correlation:{clientMessageId:Reflect.get(record,"clientMessageId"),clientTurnId:Reflect.get(record,"clientTurnId"),clientMessages:Reflect.get(record,"clientMessages")}});for(let offset=0;offset<text3.length;offset+=COMPACT_LEAF_CODE_UNITS)payload.push(this.store.createLeaf(text3.slice(offset,offset+COMPACT_LEAF_CODE_UNITS)));this.put(`terminal:${id}`,{kind:"terminal",messageId:id,turnId,terminalSequence:sequence2,role,runtimeItemKey:call?.runtimeItemKey??null,entryId:null,status:"pending",error:null,payload,call:projection});for(let leaf of payload)this.store.adjust(leaf,-1,0);return projection&&this.store.adjust(projection.owner,-1,0),["user","assistant","toolResult","custom"].includes(role)||this.diagnose("unsupported_role"),!1}reject(reason){return this.diagnose(reason),!1}fail(carrier,errorMessage2){if(!this.valid(carrier)||!this.keys.has(`terminal:${carrier.messageId}`))return this.diagnose("unknown_message");this.rows.patch(`terminal:${carrier.messageId}`,{status:"failed",error:{errorMessage:errorMessage2}})}append(transition){let id=transition.owningMessageId;if(id!==void 0){if(transition.recoveryEpoch!==this.epoch)return this.diagnose("retired_owner");if(this.keys.has(`owner:${id}`)||this.keys.has(`settled:${id}`)||this.keys.has(`entry:${transition.id}`))return this.diagnose("conflicting_owner");this.join(id,transition.id)}}join(messageId,entryId){let owner={kind:"owner",messageId,entryId,ordinal:this.joins++};this.put(`owner:${messageId}`,owner),this.put(`entry:${entryId}`,owner),this.rows.delete(`terminal:${messageId}`),this.keys.delete(`terminal:${messageId}`),this.keys.set(`owner:${messageId}`,entryId),this.keys.has(`end:${messageId}`)&&this.settle(messageId)}settle(messageId){this.keys.set(`settled:${messageId}`,this.keys.get(`owner:${messageId}`)??""),this.keys.delete(`owner:${messageId}`),this.keys.delete(`end:${messageId}`)}put(key,row){this.rows.set(key,row),this.keys.set(key,"")}async messagesOf(entryIds){let cut=this.rows.freeze();try{let ids=[];for(let entryId of entryIds)ids.push(await this.messageOf(cut,entryId)??void 0);return ids}finally{this.rows.release(cut)}}freeze(){return this.rows.freeze()}release(root){this.rows.release(root)}async read(root){let settledMessages=[],owners=[];for(let[key,row]of await this.rows.entries(root)){if(row.kind==="owner"&&key.startsWith("owner:")&&owners.push({kind:"owner",messageId:row.messageId,entryId:row.entryId}),row.kind!=="terminal")continue;let{payload,kind:_kind,call,...fields}=row,bytes=(await Promise.all(payload.map(leaf=>this.store.readLeaf(leaf)))).join(""),value=JSON.parse(bytes),projection=call?await this.rows.values.read(call):void 0;if(projection!==void 0&&!isProjection(projection))throw new CompactReadError("ownership");settledMessages.push({...fields,...value,...projection?{call:projection}:{}})}return{settledMessages,owners}}async*members(root,valid){let cursor;do{let page=await this.rows.page(root,cursor);for(let{row,patch}of page.rows){valid();let key=await this.rows.values.read(row.key);if(typeof key!="string"||key.startsWith("entry:"))continue;let stored=JSON.parse(JSON.stringify(await this.rows.values.read(row.value)));if(stored.kind==="owner"){yield stored;continue}let patched=patch?JSON.parse(JSON.stringify(await this.rows.values.read(patch))):{};yield{kind:"terminal",row:{...stored,...patched}}}cursor=page.next}while(cursor)}async messageOf(root,entryId){let row=await this.rows.lookup(root,`entry:${entryId}`),owner=row&&await this.rows.values.read(row.value),messageId=owner?Reflect.get(Object(owner),"messageId"):null;return typeof messageId=="string"?messageId:null}storageStatus(){return{...this.store.status(),...this.rows.status(),residentSettledKeys:this.keys.size}}idle(){return this.store.idle()}retire(){return this.store.retire()}};function foldCompactTransition({settled,current},transition,transcriptAvailable,epoch){transition.kind==="append"&&transcriptAvailable&&settled.append(transition),current.transcript(transition,settled,epoch)}function foldCompactRecord({settled,current},{record,type,carrier,canonical,sequence:sequence2,turnId,call}){canonical&¤t.fold(canonical,sequence2,turnId),COMPONENT_RECORDS.has(type)&¤t.foldComponent(record,sequence2);let joined=type==="message_end"&&settled.end(record,carrier,sequence2,turnId,call);type==="transcript_write_failed"&&settled.fail(carrier,String(Reflect.get(record,"errorMessage")));let status=type==="transcript_write_failed"?"failed":joined?"appended":void 0;status&&settled.valid(carrier)&¤t.status(carrier.messageId,status)}var CORRELATION=["clientMessageId","clientTurnId","clientMessages"];function laneTransition({record,carrier,ordinal,firstOrdinal}){let identity2={messageId:carrier.messageId,epoch:carrier.epoch,ordinal,firstOrdinal},correlated=CORRELATION.filter(key=>key in record),correlation=correlated.length?{correlation:Object.fromEntries(correlated.map(key=>[key,Reflect.get(record,key)]))}:{},message={type:"seeded_message",...identity2,...correlation,...record.invalidatedBlocks?{invalidatedBlocks:record.invalidatedBlocks}:{},...record.rewrittenFrom===void 0?{}:{rewrittenFrom:record.rewrittenFrom}};switch(record.type){case"message_block_state":case"message_block_metadata":case"message_tool_arguments_reset":return{type:"seeded_block",...identity2,event:record};case"message_start":case"message_end":return{...message,record};case"message_update":{let event=record.assistantMessageEvent;return"contentIndex"in event?{type:"seeded_block",...identity2,event,usage:record.usage,...record.messageMetadata?{messageMetadata:record.messageMetadata}:{},...correlation,...record.resolvedToolName===void 0?{}:{resolvedToolName:record.resolvedToolName}}:{...message,record:{...record,assistantMessageEvent:event}}}}}var CompactTransitionError=class extends Error{constructor(reason,detail2){super(`compact transition rejected (${reason}): ${detail2}`),this.name="CompactTransitionError",this.reason=reason}};function appendBlock(store,block,text3){block.units+=text3.length;let rest=text3;for(;block.tail.length+rest.length>=COMPACT_LEAF_CODE_UNITS;){let take=COMPACT_LEAF_CODE_UNITS-block.tail.length;block.root=store.text.append(block.root,block.tail+rest.slice(0,take)),store.adjust(block.tailRoot,-1,0),block.tailRoot=0,block.tail="",rest=rest.slice(take)}rest.length&&(block.tailRoot=store.text.append(block.tailRoot,rest,!0)),block.tail+=rest}function adjustBlock(store,block,live){store.adjust(block.root,live,0),store.adjust(block.tailRoot,live,0)}function deltaBlock(store,block,offset,text3){if(offset!==block.emitted)throw new CompactTransitionError("non_contiguous",`offset ${offset}, expected ${block.emitted}`);let overlapEnd=Math.min(offset+text3.length,block.units),overlap=Math.max(0,overlapEnd-offset);if(overlap>0&&text3.slice(0,overlap)!==block.witness.slice(offset,overlapEnd))throw new CompactTransitionError("conflicting_overlap",`[${offset}, ${overlapEnd})`);appendBlock(store,block,text3.slice(overlap)),block.emitted=offset+text3.length,block.emitted>=block.covered&&(block.witness="")}function parseFrontier(next,length,previous=0){if(!Number.isSafeInteger(next)||next<previous||next>length)throw new CompactTransitionError("invalid_parse_frontier",`${next} outside [${previous}, ${length}]`)}function seedOffset(next,length){try{return seedNextOffset(next,length)}catch(error2){throw error2 instanceof SeedFrontierError?new CompactTransitionError("invalid_seed_frontier",error2.code):error2}}function seedBlock(draft,block,frontier){let text3=block.type==="text"?block.text:block.type==="thinking"?block.thinking:frontier?.rawArgumentPrefix??"",nextOffset=frontier?seedOffset(frontier.nextOffset,text3.length):text3.length,covered=frontier?.coveredCodeUnits??0;if(!Number.isSafeInteger(covered)||covered!==0&&covered!==text3.length||covered===0&&nextOffset!==text3.length)throw new CompactTransitionError("invalid_coverage",`${covered} of ${text3.length}`);let parsedThrough=frontier?.parsedThrough??0;parseFrontier(parsedThrough,text3.length);let fields=Object.fromEntries(Object.entries(block).filter(([key])=>key!=="text"&&key!=="thinking").map(([key,value])=>[key,key==="thinkingSignature"||key==="textSignature"?"":value])),body=draft.text(block.type==="thinking"?"thinking":block.type==="toolCall"?"tool_arguments":"text",text3);body.emitted=nextOffset,body.covered=covered,body.witness=nextOffset<covered?text3:"";let signature=block.type==="text"?block.textSignature:block.type==="thinking"?block.thinkingSignature:void 0;return{type:block.type,fields:draft.fields(fields),body,signature:draft.text("text",signature??""),phase:"open",parsedThrough}}function foldSeededBlock(draft,old,event){switch(event.type){case"text_start":case"thinking_start":case"toolcall_start":if(old&&old.phase!=="initial")throw new CompactTransitionError("duplicate_block",`${event.contentIndex}`);return seedBlock(draft,event.seed.block,event.seed);case"message_block_state":if(event.phase!=="insert")break;if(old&&old.phase!=="initial")throw new CompactTransitionError("duplicate_block",`${event.contentIndex}`);return seedBlock(draft,event.block)}if(!old)throw new CompactTransitionError("unknown_block",`${event.contentIndex}`);if(old.phase!=="open")throw new CompactTransitionError("invalid_phase",old.phase);switch(event.type){case"text_delta":case"thinking_delta":case"toolcall_delta":{let kind=event.type==="text_delta"?"text":event.type==="thinking_delta"?"thinking":"toolCall";if(old.type!==kind)throw new CompactTransitionError("wrong_kind",`${old.type} / ${kind}`);let parsedThrough=event.type==="toolcall_delta"?event.parsedThrough:0;parseFrontier(parsedThrough,Math.max(old.body.units,event.offset+event.delta.length),old.parsedThrough);let body=draft.clone(old.body);return deltaBlock(draft.store,body,event.offset,event.delta),{...old,body,parsedThrough}}case"message_tool_arguments_reset":if(old.type!=="toolCall")throw new CompactTransitionError("wrong_kind",old.type);return parseFrontier(event.parsedThrough,event.rawArgumentPrefix.length),{...old,body:draft.text("tool_arguments",event.rawArgumentPrefix),parsedThrough:event.parsedThrough};case"message_block_metadata":{let{type:_type,contentIndex:_index,thinkingSignatureDelta,thinkingSignature,textSignature,...fields}=event;if((thinkingSignatureDelta!==void 0||thinkingSignature!==void 0)&&old.type!=="thinking")throw new CompactTransitionError("wrong_kind",old.type);if(textSignature!==void 0&&old.type!=="text")throw new CompactTransitionError("wrong_kind",old.type);let replacement=thinkingSignature??textSignature,signature=replacement===void 0?draft.clone(old.signature):draft.text("text",replacement);return thinkingSignatureDelta!==void 0&&appendBlock(draft.store,signature,thinkingSignatureDelta),{...old,signature,fields:draft.fields({...fields,...thinkingSignature!==void 0||thinkingSignatureDelta!==void 0?{thinkingSignature:""}:{},...textSignature!==void 0?{textSignature:""}:{}},old.fields)}}case"message_block_state":case"text_end":case"thinking_end":{let kind=event.type==="message_block_state"?event.block.type:event.type==="text_end"?"text":"thinking";if(old.type!==kind)throw new CompactTransitionError("wrong_kind",`${old.type} / ${kind}`);return{...seedBlock(draft,event.block),phase:"ended"}}case"toolcall_end":if(old.type!=="toolCall")throw new CompactTransitionError("wrong_kind",old.type);return{...old,fields:draft.fields(event.toolCall),phase:"ended"}}}function frozenSeededBlock(block){return{type:block.type,fields:block.fields,phase:block.phase,parsedThrough:block.parsedThrough,signature:{root:block.signature.root,tailRoot:block.signature.tailRoot}}}function frozenBlock(contentIndex,block){return{contentIndex,kind:block.kind,root:block.root,tail:"",tailRoot:block.tailRoot,...block.seeded?{seeded:frozenSeededBlock(block.seeded)}:{}}}function seededBlockLeaves(block){return[block.signature.root,block.signature.tailRoot,...Object.values(block.fields).map(ref=>ref.owner)]}var CompactStartIdentity=class{constructor(epoch){this.highWater=-1,this.live=new Map,this.current=epoch}validate({epoch,ordinal,firstOrdinal,messageId}){let binding2=this.live.get(messageId);if(typeof epoch!="string"||!epoch.length||!Number.isSafeInteger(ordinal)||ordinal<0||!Number.isSafeInteger(firstOrdinal)||firstOrdinal<0||firstOrdinal>ordinal||binding2&&(binding2.epoch!==epoch||binding2.firstOrdinal!==firstOrdinal))throw new CompactTransitionError("invalid_start_identity","valid epoch, ordinal and stable first ordinal required");if(this.current!==void 0&&epoch!==this.current||ordinal<=this.highWater||!binding2&&firstOrdinal<=this.highWater)throw new CompactTransitionError("duplicate_or_stale_start","not the owner's epoch, or a stale ordinal; bootstrap a new producer epoch before restarting its counter");if(!binding2&&firstOrdinal!==ordinal)throw new CompactTransitionError("invalid_start_identity","a new message must bind its own first start")}commit({epoch,ordinal,firstOrdinal,messageId}){this.current=epoch,this.highWater=ordinal,this.live.set(messageId,{epoch,firstOrdinal})}release(messageId){this.live.delete(messageId)}};var CompactColdOperations=class{constructor(index,isActive,install){this.chain=Promise.resolve(),this.keys=new Map,this.pending=0,this.index=index,this.isActive=isActive,this.install=install}activate(key){let token=this.keys.get(key);token&&(token.active=!0)}run(input,afterSequence){if(this.isActive(input.messageId))return Promise.resolve(this.active(afterSequence));if(this.pending===128)return Promise.resolve({kind:"rejected",reason:"capacity",afterSequence});let step=this.admit(input,afterSequence);return this.enqueue(async()=>(await step())())}runAll(inputs,afterSequence){let live=inputs.map(input=>this.isActive(input.messageId));if(live.every(Boolean))return Promise.resolve(inputs.map(()=>this.active(afterSequence)));if(this.pending===128)return Promise.resolve(live.map(active=>active?this.active(afterSequence):{kind:"rejected",reason:"capacity",afterSequence}));let steps=inputs.map((input,index)=>live[index]?async()=>()=>this.active(afterSequence):this.admit(input,afterSequence));return this.enqueue(async()=>{let commits=[];for(let step of steps)commits.push(await step());return commits.map(commit=>commit())})}idle(){return this.chain}active(afterSequence){return{kind:"rejected",reason:"active_message",afterSequence}}enqueue(task){this.pending++;let result=this.chain.then(task).finally(()=>{this.pending--});return this.chain=result.then(()=>{}),result}admit(input,afterSequence){let operation={...input},key=operation.messageId,previous=this.keys.get(key),token=(previous?.active?void 0:previous)??{removed:!1,active:!1,pending:0};return this.keys.set(key,token),token.pending++,async()=>{let commit=await this.prepare(operation,token,afterSequence);return()=>{try{return commit()}finally{--token.pending===0&&this.keys.get(key)===token&&this.keys.delete(key)}}}}async prepare(operation,token,afterSequence){let key=operation.messageId,unknown={kind:"rejected",reason:"unknown_message",afterSequence},outcome=value=>()=>value;try{if(this.index.store.assertReadable(),token.active||this.isActive(key))return outcome(this.active(afterSequence));if(token.removed&&operation.type!=="message_install")return outcome(unknown)}catch(cause){return outcome(this.failure(cause,afterSequence))}let cut=this.index.freeze(),row,keep;try{row=await this.index.lookup(cut,key),keep=operation.type==="message_install"?{persistence:operation.persistence}:row&&operation.type==="message_replace"?await this.current(cut,key,row):void 0}catch(cause){return this.index.release(cut),outcome(this.failure(cause,afterSequence))}return()=>{try{if(this.index.store.assertReadable(),token.active||this.isActive(key))return this.active(afterSequence);if(token.removed&&operation.type!=="message_install"||!row&&!keep)return unknown;switch(operation.type){case"message_status":this.index.patch(key,{persistence:operation.persistence});break;case"message_remove":this.index.delete(key),token.removed=!0,this.keys.delete(key);break;default:keep&&this.install(key,operation.message,keep)}return{kind:"applied",afterSequence}}catch(cause){return this.failure(cause,afterSequence)}finally{this.index.release(cut)}}}failure(cause,afterSequence){return cause instanceof CompactReadError&&cause.reason==="retired"?{kind:"rejected",reason:"retired",afterSequence}:{kind:"failed",cause,afterSequence}}async current(cut,key,row){let stored=await this.index.values.read(row.value),patch=this.index.overlays.get(cut.overrides,key)?.patchValue,value=patch?{...stored,...await this.index.values.read(patch)}:stored;return{persistence:value.persistence,...value.correlation?{correlation:value.correlation}:{}}}};var CompactSeededDraft=class{constructor(store){this.releases=[],this.store=store,this.values=new CompactValues(store)}fields(value,previous={},removeNull=!1){let result={...previous};for(let[key,item]of Object.entries(value)){if(item===void 0)continue;if(item===null&&removeNull){Reflect.deleteProperty(result,key);continue}let ref=this.values.own(item);this.releases.push(()=>this.store.adjust(ref.owner,-1,0)),Object.defineProperty(result,key,{value:ref,enumerable:!0,configurable:!0,writable:!0})}return result}text(kind,text3=""){let block={kind,root:0,tail:"",tailRoot:0,units:0,emitted:0,covered:0,witness:""};return this.releases.push(()=>adjustBlock(this.store,block,-1)),appendBlock(this.store,block,text3),block.emitted=block.units,block}clone(block){let candidate={...block};return adjustBlock(this.store,candidate,1),this.releases.push(()=>adjustBlock(this.store,candidate,-1)),candidate}[Symbol.dispose](){for(let release of this.releases.reverse())release()}};var __addDisposableResource2=function(env,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose2,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose2=value[Symbol.asyncDispose]}if(dispose2===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose2=value[Symbol.dispose],async&&(inner=dispose2)}if(typeof dispose2!="function")throw new TypeError("Object not disposable.");inner&&(dispose2=function(){try{inner.call(this)}catch(e){return Promise.reject(e)}}),env.stack.push({value,dispose:dispose2,async})}else async&&env.stack.push({async:!0});return value},__disposeResources2=(function(SuppressedError2){return function(env){function fail2(e){env.error=env.hasError?new SuppressedError2(e,env.error,"An error was suppressed during disposal."):e,env.hasError=!0}var r,s=0;function next(){for(;r=env.stack.pop();)try{if(!r.async&&s===1)return s=0,env.stack.push(r),Promise.resolve().then(next);if(r.dispose){var result=r.dispose.call(r.value);if(r.async)return s|=2,Promise.resolve(result).then(next,function(e){return fail2(e),next()})}else s|=1}catch(e){fail2(e)}if(s===1)return env.hasError?Promise.reject(env.error):Promise.resolve();if(env.hasError)throw env.error}return next()}})(typeof SuppressedError=="function"?SuppressedError:function(error2,suppressed,message){var e=new Error(message);return e.name="SuppressedError",e.error=error2,e.suppressed=suppressed,e});function recordMessage(record){if(record.type!=="message_update")return{message:record.message,terminal:record.type==="message_end"};let event=record.assistantMessageEvent;switch(event.type){case"start":return{message:event.seed.message,terminal:!1};case"done":return{message:event.message,terminal:!0};case"error":return{message:event.error,terminal:!0}}}function seedMessage(draft,message,terminal2,previous,cut={}){let blocks=new Map,{invalidatedBlocks=[],rewrittenFrom=Number.POSITIVE_INFINITY}=cut;if(rewrittenFrom<0||rewrittenFrom!==Number.POSITIVE_INFINITY&&!Number.isSafeInteger(rewrittenFrom)||invalidatedBlocks.some(index=>!Number.isSafeInteger(index)||index<0))throw new CompactTransitionError("invalid_terminal",`rewrittenFrom ${rewrittenFrom}`);if(message.role!=="assistant")return{fields:draft.fields(message),blocks};let invalidated=new Set(invalidatedBlocks),{content,...metadata}=message;for(let[index,publicBlock]of content.entries()){let block=seedBlock(draft,publicBlock),old=previous?.get(index)?.seeded,raw=terminal2&&block.type==="toolCall"&&old?.type==="toolCall"&&old.phase==="ended"&&index<rewrittenFrom&&!invalidated.has(index);blocks.set(index,{...block,...raw?{body:{...draft.clone(old.body),witness:""},parsedThrough:old.parsedThrough}:{},phase:terminal2?"ended":"initial"})}return{fields:draft.fields(metadata),blocks}}function updateFields(draft,fields,update){if(update.usage===void 0&&update.messageMetadata===void 0)return fields;let changed={...update.messageMetadata,...update.usage===void 0?{}:{usage:update.usage}};return draft.fields(changed,fields,!0)}function installSettledMessage(owner,messageId,message,keep){let env_1={stack:[],error:void 0,hasError:!1};try{let draft=__addDisposableResource2(env_1,new CompactSeededDraft(owner.store),!1),{fields,blocks}=seedMessage(draft,message,!0),root={header:void 0,ref:void 0};for(let[index,block]of blocks)root=owner.blockRoots.set(root,String(index).padStart(16,"0"),frozenBlock(index,{...block.body,seeded:block}));owner.settled.set(messageId,{messageId,persistence:keep.persistence,fields,...root.ref?{blocks:root.ref}:{},...keep.correlation?{correlation:keep.correlation}:{}}),owner.blockRoots.release(root)}catch(e_1){env_1.error=e_1,env_1.hasError=!0}finally{__disposeResources2(env_1)}}var messageLeaves=row=>[row.blocks?.owner??0,...Object.values({...row.fields,...row.correlation}).map(ref=>ref.owner)],CompactStateStorage=class{constructor(options){this.epoch=options.epoch,this.sessionEpoch=options.sessionEpoch??"",this.store=new CompactContentStore(options),this.blockRoots=new CompactComponentRoots(this.store,block=>[block.root,block.tailRoot??0,...block.seeded?seededBlockLeaves(block.seeded):[]]),this.messageRoots=new CompactComponentRoots(this.store,messageLeaves),this.settled=new CompactContentIndex(this.store,messageLeaves,options.compactAboveRows??128),this.cold=new CompactColdOperations(this.settled,key=>this.isActiveKey(key),(messageId,message,keep)=>installSettledMessage({store:this.store,blockRoots:this.blockRoots,settled:this.settled},messageId,message,keep))}isActiveKey(_key){return!1}};function rowOf(messageId,message){return{messageId,...message.root.ref?{blocks:message.root.ref}:{},...message.fields?{fields:message.fields}:{},...message.correlation?{correlation:message.correlation}:{}}}var CompactActiveMessages=class extends CompactStateStorage{constructor(){super(...arguments),this.messages={header:void 0,ref:void 0},this.active=new Map,this.identity=new CompactStartIdentity(this.epoch),this.sequence=0,this.residentTailBytes=0,this.hotWitnessBytes=0}isActiveKey(key){return this.active.has(key)}publish(address,block,fields){let message=this.active.get(address.messageId)??{...this.fresh(),epoch:block.epoch};fields&&(message.fields=fields),this.put(message,address.contentIndex,block),this.publishRow(address.messageId,message)}install(messageId,parts,blocks){let old=this.active.get(messageId),message={...this.fresh(old?.order),...parts};for(let[index,block]of blocks)this.put(message,index,{...block.body,seeded:block,epoch:parts.epoch});this.publishRow(messageId,message),old&&this.discard(old)}settle(messageId,persistence){let message=this.active.get(messageId);this.settled.set(messageId,{...message?rowOf(messageId,message):{messageId},persistence}),this.dropActive(messageId)}dropActive(messageId){let message=this.active.get(messageId);message&&(this.messages=this.messageRoots.set(this.messages,message.order,void 0),this.discard(message),this.active.delete(messageId),this.identity.release(messageId))}block(address){let block=this.active.get(address.messageId)?.blocks.get(address.contentIndex);if(!block)throw new CompactTransitionError("unknown_block",`${address.messageId}#${address.contentIndex}`);return block}fresh(order=String(this.sequence).padStart(16,"0")){return{order,blocks:new Map,root:{header:void 0,ref:void 0},tailBytes:0,witnessBytes:0}}put(message,contentIndex,block){let old=message.blocks.get(contentIndex),tails=(block.tail.length+(block.seeded?.signature.tail.length??0)-(old?.tail.length??0)-(old?.seeded?.signature.tail.length??0))*2,witness=(block.witness.length-(old?.witness.length??0))*2;message.root=this.blockRoots.set(message.root,String(contentIndex).padStart(16,"0"),frozenBlock(contentIndex,block)),message.blocks.set(contentIndex,block),message.tailBytes+=tails,message.witnessBytes+=witness,this.residentTailBytes+=tails,this.hotWitnessBytes+=witness}publishRow(messageId,message){this.messages=this.messageRoots.set(this.messages,message.order,rowOf(messageId,message)),this.active.has(messageId)||this.cold.activate(messageId),this.active.set(messageId,message)}discard(message){this.blockRoots.release(message.root),this.residentTailBytes-=message.tailBytes,this.hotWitnessBytes-=message.witnessBytes}};var field2=(record,key)=>Reflect.get(record,key),text=(record,key)=>String(field2(record,key)??""),ownedRaw=block=>block?{kind:"owned",root:block.root,tailRoot:block.tailRoot}:null;function foldCallBlock(calls,t,step,block){let address={messageId:t.messageId,contentIndex:t.event.contentIndex},correlation=t.correlation&&{..."clientMessageId"in t.correlation?{clientMessageId:field2(t.correlation,"clientMessageId")}:{},..."clientTurnId"in t.correlation?{clientTurnId:field2(t.correlation,"clientTurnId")}:{}};switch(t.event.type){case"toolcall_start":return calls.toolStart(step,{...address,id:t.event.id,name:t.event.toolName,arguments:t.event.seed.block.arguments,...t.resolvedToolName===void 0?{}:{resolvedName:t.resolvedToolName},...correlation?{correlation}:{}});case"toolcall_end":return calls.announce(step,{...address,id:t.event.toolCall.id,name:t.event.toolCall.name,arguments:t.event.toolCall.arguments,...t.resolvedToolName===void 0?{}:{resolvedName:t.resolvedToolName}},ownedRaw(block));case"message_block_metadata":t.event.name!==void 0&&calls.requestedName(step,address.messageId,address.contentIndex,t.event.name);return;default:return}}function foldCallTerminal(calls,messageId,message,step,live){if(message.role==="assistant")for(let[contentIndex,block]of message.content.entries())block.type==="toolCall"&&calls.announce(step,{messageId,contentIndex,id:block.id,name:block.name,arguments:block.arguments},ownedRaw(live?.get(contentIndex)))}function foldCallRecord(calls,record,scope,sequence2){let step={sequence:sequence2,scope},before=calls.table.counters.replacements,projection;switch(field2(record,"type")){case"tool_execution_start":{let parentToolCallId=field2(record,"parentToolCallId");calls.executionStart(step,{toolCallId:text(record,"toolCallId"),toolName:text(record,"toolName"),args:field2(record,"args")??null,...typeof parentToolCallId=="string"?{parentToolCallId}:{}});break}case"tool_execution_update":calls.executionUpdate(step,text(record,"toolCallId"),field2(record,"args")??null,field2(record,"partialResult")??null);break;case"tool_execution_end":calls.executionEnd(step,text(record,"toolCallId"),field2(record,"result")??null,field2(record,"isError")===!0);break;case"tool_hook_status":calls.hook(step,text(record,"toolCallId"),record);break;case"turn_end":calls.turnEnd(step);break;case"agent_settled":calls.agentSettled(step);break;case"message_end":{let message=Object(field2(record,"message"));field2(message,"role")==="toolResult"&&(projection=calls.settle(step,text(message,"toolCallId"),field2(message,"isError")===!0));break}}return{changed:calls.table.counters.replacements!==before,...projection?{projection}:{}}}async function readCompactBlocks(texts,blocks,valid){let result=[];for(let{contentIndex,kind,root,tail,tailRoot}of blocks){valid();let text3="";for await(let chunk of texts.chunks(root,valid))text3+=chunk;for await(let chunk of texts.chunks(tailRoot??0,valid))text3+=chunk;text3+=tail,result.push({contentIndex,kind,text:text3})}return result}async function readCalls(frozen,owner,valid){let values=new CompactValues(owner.store),slot=async ref=>ref?await values.read(ref,valid):null,raw=async address=>{if(!address)return null;if(address.kind==="owned"){let text3="";for await(let chunk of owner.store.text.chunks(address.root,valid))text3+=chunk;for await(let chunk of owner.store.text.chunks(address.tailRoot,valid))text3+=chunk;return text3}for await(let[,row]of owner.messageRoots.entries(frozen.active,valid))if(row.messageId===address.messageId){for await(let[,block]of owner.blockRoots.entries(row.blocks,valid))if(block.contentIndex===address.contentIndex)return(await readCompactBlocks(owner.store.text,[block],valid))[0].text}return null},calls=[];for await(let[,call]of owner.calls.entries(frozen.calls.ref,valid))calls.push({...call,raw:await raw(call.raw),hook:await slot(call.hook),progress:await slot(call.progress),result:await slot(call.result)});return valid(),{sequence:frozen.calls.sequence,calls,counters:frozen.calls.counters}}function coldFlowOperations(flow){let remove=messageId=>({type:"message_remove",messageId});switch(flow.type){case"edit":return[{type:"message_replace",messageId:flow.messageId,message:flow.message}];case"context_edit_removal":return[remove(flow.messageId)];case"compaction":return flow.removed.map(remove);case"branch":return[...flow.removed.map(remove),...flow.installed.map(entry=>({type:"message_install",...entry}))]}}function projectionOf(call){let{phase:_phase,join:_join,raw:_raw,hook:_hook,progress:_progress,result:_result,...fields}=call;return fields}function settleCall(table,call,isError){let settled=terminal(call)?call:{...call,phase:TERMINAL_PHASE,outcome:{kind:"result",isError,source:"result_message"}};return retire(table,settled)}function frame(table,call){let children=table.childrenOf(call.runtimeItemKey),completed=children.filter(terminal);return{call,completed,everyChildCompleted:completed.length===children.length,calls:[]}}function retire(table,call){let stack=[frame(table,call)];for(;;){let top=stack[stack.length-1];if(!top)throw new Error("call retirement lost its root");let child=top.completed[top.calls.length];if(child){stack.push(frame(table,child));continue}table.remove(top.call.runtimeItemKey);let complete=top.everyChildCompleted&&top.calls.every(projection2=>projection2.nestedCalls.complete),projection={...projectionOf(top.call),nestedCalls:{calls:top.calls,complete,omitted:0}};stack.pop();let parent=stack[stack.length-1];if(!parent)return projection;parent.calls.push(projection)}}function orphaned(table,call){if(call.parentKey===null)return!1;let parent=table.get(call.parentKey);return parent===void 0||parent.join==="carrierless"}var NOT_EXECUTED={phase:TERMINAL_PHASE,outcome:{kind:"not-executed"},join:"carrierless"};function settledPatch(call){return call.startSequence===null&&!terminal(call)?NOT_EXECUTED:call.phase==="executing"?{phase:TERMINAL_PHASE,outcome:{kind:"abandoned"},join:"carrierless"}:call.join==="pending"?{join:"carrierless"}:void 0}var turnKey=(turnId,toolCallId)=>`${turnId}\0${toolCallId}`,messageKey=(messageId,contentIndex)=>`${messageId}#${contentIndex}`,CompactCallTable=class{constructor(store){this.root={header:void 0,ref:void 0},this.entries=new Map,this.byTurn=new Map,this.byMessage=new Map,this.byId=new Map,this.children=new Map,this.slotBytes=0,this.headerBytes=0,this.counters={replacements:0,progressReplacements:0,unknown:0,late:0,collisions:0,reused:0},this.slotBytesOf=new WeakMap,this.store=store,this.values=new CompactValues(store),this.roots=new CompactComponentRoots(store,callLeaves)}get(key){return this.entries.get(key)?.call}byTurnId(turnId,toolCallId){if(turnId===null||!toolCallId)return;let key=this.byTurn.get(turnKey(turnId,toolCallId));return key===void 0?void 0:this.get(key)}byOwner(messageId,contentIndex){let key=this.byMessage.get(messageKey(messageId,contentIndex));return key===void 0?void 0:this.get(key)}newestById(toolCallId){let keys=this.byId.get(toolCallId)??[];for(let index=keys.length-1;index>=0;index--){let call=this.get(keys[index]);if(call&&(!terminal(call)||call.outcome?.kind==="abandoned"))return call}}oldestById(toolCallId,turnId,open3){let rank=entry=>`${entry.call.turnId===turnId?0:1}${entry.order}`,oldest;for(let key of this.byId.get(toolCallId)??[]){let entry=this.entries.get(key);entry&&open3(entry.call)&&(!oldest||rank(entry)<rank(oldest))&&(oldest=entry)}return oldest?.call}*ofTurn(turnId){for(let{call}of this.entries.values())call.turnId===turnId&&(yield call)}*all(){for(let{call}of this.entries.values())yield call}childrenOf(parentKey){return[...this.children.get(parentKey)??[]].flatMap(key=>this.get(key)??[])}own(value){let bytes=Buffer.byteLength(JSON.stringify(value)??"");return{ref:this.values.own(value),bytes}}replaceSlot(call,field3,value){let slot=this.own(value),previous=call[field3],next={...call,[field3]:slot.ref};return this.slotBytes+=slot.bytes-(previous?this.slotBytesOf.get(previous)??0:0),this.slotBytesOf.set(slot.ref,slot.bytes),previous&&this.slotBytesOf.delete(previous),this.put(next,creationOf(call)),this.store.adjust(slot.ref.owner,-1,0),next}put(call,creation){let order=callOrder(creation.sequence,creation.k),bytes=headerBytes(call),previous=this.entries.get(call.runtimeItemKey)?.call;previous&&this.unindex(previous),this.root=this.roots.set(this.root,order,call),this.counters.replacements++,this.headerBytes+=bytes-(previous?headerBytes(previous):0),this.entries.set(call.runtimeItemKey,{call,order}),this.index(call)}remove(key){let entry=this.entries.get(key);if(entry){this.unindex(entry.call);for(let slot of[entry.call.hook,entry.call.progress,entry.call.result])slot&&(this.slotBytes-=this.slotBytesOf.get(slot)??0,this.slotBytesOf.delete(slot));this.headerBytes-=headerBytes(entry.call),this.entries.delete(key),this.root=this.roots.set(this.root,entry.order,void 0),this.counters.replacements++}}indexedTo(turnId,toolCallId){return this.byTurn.get(turnKey(turnId,toolCallId))}repoint(turnId,toolCallId,key){this.byTurn.set(turnKey(turnId,toolCallId),key)}snapshot(){let carrierless=0;for(let{call}of this.entries.values())call.join==="carrierless"&&carrierless++;return{live:this.entries.size,carrierless,replacements:this.counters.replacements,headerBytes:this.headerBytes,slotBytes:this.slotBytes,progressReplacements:this.counters.progressReplacements,ignored:{unknown:this.counters.unknown,late:this.counters.late},collisions:this.counters.collisions,reused:this.counters.reused}}freeze(){return this.root.ref&&this.store.adjust(this.root.ref.owner,0,1),this.root.ref}release(ref){ref&&this.store.adjust(ref.owner,0,-1)}entriesOf(ref,valid){return this.roots.entries(ref,valid)}index(call){if(call.toolCallId){let slot=turnKey(call.turnId,call.toolCallId);(!this.byTurn.has(slot)||this.byTurn.get(slot)===call.runtimeItemKey)&&this.byTurn.set(slot,call.runtimeItemKey);let keys=this.byId.get(call.toolCallId)??[];keys.includes(call.runtimeItemKey)||this.byId.set(call.toolCallId,[...keys,call.runtimeItemKey])}if(call.owningMessageId!==null&&call.contentIndex!==null&&this.byMessage.set(messageKey(call.owningMessageId,call.contentIndex),call.runtimeItemKey),call.parentKey!==null){let siblings=this.children.get(call.parentKey)??new Set;siblings.add(call.runtimeItemKey),this.children.set(call.parentKey,siblings)}}unindex(call){if(call.toolCallId){let slot=turnKey(call.turnId,call.toolCallId);this.byTurn.get(slot)===call.runtimeItemKey&&this.byTurn.delete(slot);let keys=(this.byId.get(call.toolCallId)??[]).filter(key=>key!==call.runtimeItemKey);keys.length?this.byId.set(call.toolCallId,keys):this.byId.delete(call.toolCallId)}if(call.owningMessageId!==null&&call.contentIndex!==null){let slot=messageKey(call.owningMessageId,call.contentIndex);this.byMessage.get(slot)===call.runtimeItemKey&&this.byMessage.delete(slot)}if(call.parentKey!==null){let siblings=this.children.get(call.parentKey);siblings?.delete(call.runtimeItemKey),siblings?.size===0&&this.children.delete(call.parentKey)}}};function headerBytes(call){return Buffer.byteLength(JSON.stringify(call))}function creationOf(call){let tail=call.runtimeItemKey.slice(call.runtimeItemKey.lastIndexOf(":")+1),[sequence2,k]=tail.split(".");return{sequence:Number(sequence2),k:Number(k)}}var awaitingStart=call=>call.startSequence===null&&!terminal(call),executing=call=>call.phase==="executing",stillOpen=call=>!terminal(call),awaitingCarrier=call=>call.join==="pending",FRESH={owningMessageId:null,contentIndex:null,parentKey:null,join:"pending",startSequence:null,startedAtMs:null,requestedName:null,resolvedName:null,seed:null,raw:null,input:{announced:null,started:null,prepared:null},correlation:null,hook:null,progress:null,result:null,outcome:null},CompactSessionCalls=class{constructor(store){this.sequence=0,this.mintedAt=-1,this.mintedK=0,this.table=new CompactCallTable(store)}get(key){return this.table.get(key)}toolStart(step,block){let turnId=step.scope.turnId;if(turnId===null)return;let id=block.id||null,existing=this.table.byTurnId(turnId,id),raw={kind:"active",messageId:block.messageId,contentIndex:block.contentIndex},fields={owningMessageId:block.messageId,contentIndex:block.contentIndex,seed:block.arguments,raw,...block.correlation?{correlation:block.correlation}:{}};if(existing&&existing.owningMessageId===null&&existing.parentKey===null){this.update(step,existing,{...fields,requestedName:existing.requestedName??block.name});return}existing&&this.table.counters.collisions++,this.create(step,{turnId,toolCallId:id,phase:"streaming",requestedName:block.name||null,resolvedName:block.resolvedName??null,...fields})}requestedName(step,messageId,contentIndex,name){let call=this.table.byOwner(messageId,contentIndex);call&&this.update(step,call,{requestedName:name})}announce(step,block,raw){let call=this.table.byOwner(block.messageId,block.contentIndex),turnId=step.scope.turnId;if(!call){if(turnId===null)return;this.create(step,{turnId,toolCallId:block.id||null,owningMessageId:block.messageId,contentIndex:block.contentIndex,phase:"awaiting-execution",requestedName:block.name||null,resolvedName:block.resolvedName??null,raw,input:{announced:block.arguments,started:null,prepared:null},...block.correlation?{correlation:block.correlation}:{}});return}let id=block.id||null,taken=id&&id!==call.toolCallId?this.table.indexedTo(call.turnId,id):void 0;taken!==void 0&&this.table.counters.collisions++,this.update(step,call,{...taken===void 0&&id?{toolCallId:id}:{},phase:call.phase==="streaming"?"awaiting-execution":call.phase,requestedName:block.name||call.requestedName,resolvedName:block.resolvedName??call.resolvedName,input:{...call.input,announced:block.arguments},raw:call.raw?.kind==="owned"?call.raw:raw})}executionStart(step,start){let turnId=step.scope.turnId;if(turnId===null)return;let started={startSequence:step.sequence,startedAtMs:Date.now(),resolvedName:start.toolName},announced=this.table.oldestById(start.toolCallId,turnId,awaitingStart);if(announced){this.update(step,announced,{...started,phase:"executing",input:{...announced.input,started:start.args}});return}let existing=this.table.byTurnId(turnId,start.toolCallId);existing&&this.table.counters.reused++;let parent=start.parentToolCallId?this.lookup(turnId,start.parentToolCallId):void 0,created=this.create(step,{turnId,toolCallId:start.toolCallId,parentKey:parent?.runtimeItemKey??null,phase:"executing",input:{announced:null,started:start.args,prepared:null},...started});existing&&this.table.repoint(turnId,start.toolCallId,created.runtimeItemKey)}executionUpdate(step,toolCallId,args,partialResult){let call=this.resolve(step,toolCallId,executing);if(!call)return this.ignore("unknown");if(call.phase!=="executing")return this.ignore("late");let progressed=this.table.replaceSlot(call,"progress",partialResult);this.table.counters.progressReplacements++,call.input.prepared===null&&this.update(step,progressed,{input:{...call.input,prepared:args}}),this.sequence=step.sequence}hook(step,toolCallId,record){let call=this.resolve(step,toolCallId,stillOpen);if(!call)return this.ignore("unknown");if(terminal(call))return this.ignore("late");this.table.replaceSlot(call,"hook",record),this.sequence=step.sequence}executionEnd(step,toolCallId,result,isError){let call=this.resolve(step,toolCallId,stillOpen);if(!call)return this.ignore("unknown");if(terminal(call)&&call.outcome?.kind!=="abandoned")return this.ignore("late");let ended=this.table.replaceSlot(call,"result",result);this.update(step,ended,{phase:TERMINAL_PHASE,outcome:{kind:"result",isError,source:"execution_end"},join:orphaned(this.table,call)||call.join==="carrierless"?"carrierless":"pending"})}settle(step,toolCallId,isError){let call=this.resolve(step,toolCallId,awaitingCarrier);if(!call)return;let projection=settleCall(this.table,call,isError);return this.sequence=step.sequence,projection}turnEnd(step){let turnId=step.scope.turnId;if(turnId!==null)for(let call of[...this.table.ofTurn(turnId)])call.startSequence===null&&!terminal(call)&&this.update(step,call,NOT_EXECUTED)}agentSettled(step){for(let call of[...this.table.all()]){let patch=settledPatch(call);patch&&this.update(step,call,patch)}}freeze(){return{sequence:this.sequence,ref:this.table.freeze(),counters:this.table.snapshot()}}release(frozen){this.table.release(frozen.ref)}entries(ref,valid){return this.table.entriesOf(ref,valid)}resolve(step,toolCallId,open3){let turnId=step.scope.turnId;return this.table.oldestById(toolCallId,turnId,open3)??this.lookup(turnId,toolCallId)}lookup(turnId,toolCallId){return this.table.byTurnId(turnId,toolCallId)??this.table.newestById(toolCallId)}ignore(kind){this.table.counters[kind]++}create(step,fields){this.mintedAt!==step.sequence?(this.mintedAt=step.sequence,this.mintedK=0):this.mintedK++;let call={...FRESH,toolCallId:null,...fields,runtimeItemKey:runtimeItemKey(step.scope,step.sequence,this.mintedK)};return this.table.put(call,{sequence:step.sequence,k:this.mintedK}),this.sequence=step.sequence,call}update(step,call,patch){this.table.put({...call,...patch},creationOf(call)),this.sequence=step.sequence}};async function readSeededFields(store,fields,valid){let values=new CompactValues(store),result={};for(let[key,ref]of Object.entries(fields)){let value=await values.read(ref,valid);valid(),Object.defineProperty(result,key,{value,enumerable:!0,configurable:!0,writable:!0})}return result}async function readSeededBlock(store,block,context){let fields=await readSeededFields(store,block.fields,context.valid),signature="";for(let root of[block.signature.root,block.signature.tailRoot])for await(let part of store.text.chunks(root,context.valid))signature+=part;switch(block.type){case"text":return{...fields,text:context.text,..."textSignature"in fields?{textSignature:signature}:{}};case"thinking":return{...fields,thinking:context.text,..."thinkingSignature"in fields?{thinkingSignature:signature}:{}};case"toolCall":return{...fields,...block.phase==="open"&&block.parsedThrough>0?{arguments:parseStreamingJson(context.text.slice(0,block.parsedThrough))}:{}};default:return fields}}async function readRowBlocks(ref,components,valid){let blocks=[];for await(let[,block]of components.blockRoots.entries(ref,valid))blocks.push(block);let view=await readCompactBlocks(components.store.text,blocks,valid),content=[];for(let[index,block]of blocks.entries())block.seeded&&(content[block.contentIndex]=await readSeededBlock(components.store,block.seeded,{text:view[index].text,valid}));return{frozen:blocks,blocks:view,content}}async function readActiveMessages(frozen,components,valid){let messages=[];for await(let[,row]of components.messageRoots.entries(frozen.active,valid)){let{frozen:rows,blocks,content}=await readRowBlocks(row.blocks,components,valid);messages.push({messageId:row.messageId,fields:row.fields?await readSeededFields(components.store,row.fields,valid):void 0,blocks:rows.map((block,index)=>({contentIndex:block.contentIndex,text:blocks[index].text,phase:block.seeded?.phase,block:content[block.contentIndex]}))})}return valid(),messages}async function readCompactState(frozen,components,valid){let readMessage=async row=>{let{blocks,content}=await readRowBlocks(row.blocks,components,valid);if(!row.fields)return{blocks,...content.length?{message:{content}}:{}};let fields=await readSeededFields(components.store,row.fields,valid);return{blocks,message:"content"in fields?fields:{...fields,content},...row.correlation?{correlation:await readSeededFields(components.store,row.correlation,valid)}:{}}},messages=[];for(let[messageId,row]of await components.settled.entries(frozen.settled))messages.push({messageId,persistence:row.persistence,...await readMessage(row)});for await(let[,row]of components.messageRoots.entries(frozen.active,valid))messages.push({messageId:row.messageId,persistence:void 0,...await readMessage(row)});return valid(),{sequence:frozen.sequence,messages}}var __addDisposableResource3=function(env,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose2,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose2=value[Symbol.asyncDispose]}if(dispose2===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose2=value[Symbol.dispose],async&&(inner=dispose2)}if(typeof dispose2!="function")throw new TypeError("Object not disposable.");inner&&(dispose2=function(){try{inner.call(this)}catch(e){return Promise.reject(e)}}),env.stack.push({value,dispose:dispose2,async})}else async&&env.stack.push({async:!0});return value},__disposeResources3=(function(SuppressedError2){return function(env){function fail2(e){env.error=env.hasError?new SuppressedError2(e,env.error,"An error was suppressed during disposal."):e,env.hasError=!0}var r,s=0;function next(){for(;r=env.stack.pop();)try{if(!r.async&&s===1)return s=0,env.stack.push(r),Promise.resolve().then(next);if(r.dispose){var result=r.dispose.call(r.value);if(r.async)return s|=2,Promise.resolve(result).then(next,function(e){return fail2(e),next()})}else s|=1}catch(e){fail2(e)}if(s===1)return env.hasError?Promise.reject(env.error):Promise.resolve();if(env.hasError)throw env.error}return next()}})(typeof SuppressedError=="function"?SuppressedError:function(error2,suppressed,message){var e=new Error(message);return e.name="SuppressedError",e.error=error2,e.suppressed=suppressed,e}),CompactSessionState=class extends CompactActiveMessages{constructor(){super(...arguments),this.frozenTailBytes=0,this.cuts=new WeakMap,this.components=new CompactCurrentComponents(this.store),this.calls=new CompactSessionCalls(this.store)}get acceptedSequence(){return this.sequence}get openBroadcastDialogs(){return this.components.openBroadcast}accept(t,sequence2=this.sequence+1,turnId=null){t.type!=="message_remove"&&this.store.assertReadable();let step={sequence:sequence2,scope:this.callScope(turnId)};if((t.type==="message_status"||t.type==="message_remove")&&!this.active.has(t.messageId))throw new CompactTransitionError("cold_operation_required","use applyCold after acceptance");switch(t.type){case"seeded_block":{let env_1={stack:[],error:void 0,hasError:!1};try{let address={messageId:t.messageId,contentIndex:t.event.contentIndex},old=this.active.get(t.messageId)?.blocks.get(address.contentIndex);if(old?.epoch!==void 0&&old.epoch!==t.epoch)throw new CompactTransitionError("wrong_epoch",t.messageId);if(!Number.isSafeInteger(address.contentIndex)||address.contentIndex<0)throw new CompactTransitionError("unknown_block",String(address.contentIndex));let starting="seed"in t.event||t.event.type==="message_block_state"&&t.event.phase==="insert"&&(!old||old.seeded?.phase==="initial");starting&&this.identity.validate(t);let draft=__addDisposableResource3(env_1,new CompactSeededDraft(this.store),!1),fields=updateFields(draft,this.active.get(t.messageId)?.fields,t),block=foldSeededBlock(draft,old?.seeded,t.event);this.publish(address,{...block.body,seeded:block,epoch:t.epoch},fields),starting&&this.identity.commit(t),foldCallBlock(this.calls,t,step,this.active.get(t.messageId)?.blocks.get(address.contentIndex));break}catch(e_1){env_1.error=e_1,env_1.hasError=!0}finally{__disposeResources3(env_1)}}case"seeded_message":{let{message,terminal:terminal2}=recordMessage(t.record);terminal2&&foldCallTerminal(this.calls,t.messageId,message,step,this.active.get(t.messageId)?.blocks),this.acceptMessage(t);break}case"block_start":this.start(t);break;case"block_delta":{let block={...this.block(t)};adjustBlock(this.store,block,1);try{deltaBlock(this.store,block,t.offset,t.text),this.publish(t,block)}finally{adjustBlock(this.store,block,-1)}break}case"block_replace":{let block={...this.block(t),root:0,tail:"",tailRoot:0,units:0,covered:0,witness:""};appendBlock(this.store,block,t.text),block.emitted=block.units,this.publish(t,block),adjustBlock(this.store,block,-1);break}case"message_status":this.settle(t.messageId,t.persistence);break;case"message_remove":this.dropActive(t.messageId);break;case"component":this.components.apply(t.record);break}return this.sequence=sequence2,sequence2}acceptCall(record,sequence2,turnId){this.store.assertReadable();let fold=foldCallRecord(this.calls,record,this.callScope(turnId),sequence2);return fold.changed&&(this.sequence=sequence2),fold}applyCold(t){return this.cold.run(t,this.sequence)}applyColdFlow(flow){return this.cold.runAll(coldFlowOperations(flow),this.sequence)}freeze(){this.store.assertReadable();let active=this.messages.ref,tails=this.residentTailBytes;active&&this.store.adjust(active.owner,0,1),this.frozenTailBytes+=tails;let frozen={sequence:this.sequence,active,settled:this.settled.freeze(),components:this.components.freeze(),calls:this.calls.freeze()};return this.cuts.set(frozen,new CompactReadLease(()=>{active&&this.store.adjust(active.owner,0,-1),this.frozenTailBytes-=tails,this.settled.release(frozen.settled),this.components.release(frozen.components),this.calls.release(frozen.calls)})),frozen}release(frozen){this.cutLease(frozen).release()}async read(frozen){return this.under(frozen,valid=>readCompactState(frozen,{...this.roots,settled:this.settled},valid))}readActive(frozen){return this.under(frozen,valid=>readActiveMessages(frozen,this.roots,valid))}readComponents(frozen){return this.under(frozen,valid=>this.components.read(frozen.components,valid))}readCalls(frozen){let owner={calls:this.calls,...this.roots};return this.under(frozen,valid=>readCalls(frozen,owner,valid))}cutStorage(frozen,use){return this.under(frozen,valid=>use(this.store,valid))}get roots(){return{store:this.store,blockRoots:this.blockRoots,messageRoots:this.messageRoots}}callScope(turnId){return{sessionEpoch:this.sessionEpoch,turnId}}cutLease(frozen){let lease=this.cuts.get(frozen);if(!lease)throw new CompactReadError("ownership");return lease}under(frozen,read){let lease=this.cutLease(frozen),valid=()=>{lease.assert(),this.store.assertReadable()};return valid(),lease.run(()=>read(valid))}storageStatus(){return{...this.store.status(),...this.settled.status(),residentTailBytes:this.residentTailBytes,frozenTailBytes:this.frozenTailBytes,hotWitnessBytes:this.hotWitnessBytes,residentComponentNodes:this.blockRoots.residentNodes+this.messageRoots.residentNodes,residentComponentIndexBytes:(this.blockRoots.residentNodes+this.messageRoots.residentNodes)*192,residentTextNodes:this.store.text.residentNodes,residentTextIndexBytes:this.store.text.residentNodes*192}}async idle(){await this.cold.idle(),await this.store.idle()}async retire(){await this.store.retire(),await this.cold.idle()}start(t){if(this.identity.validate(t),this.active.get(t.messageId)?.blocks.has(t.contentIndex))throw new CompactTransitionError("duplicate_block",`${t.messageId}#${t.contentIndex}`);let covered=t.coveredCodeUnits;if(!Number.isInteger(covered)||covered!==0&&covered!==t.seed.length)throw new CompactTransitionError("invalid_coverage",`${covered} of ${t.seed.length} seed code units`);let block={kind:t.kind,root:0,tail:"",tailRoot:0,units:0,emitted:covered>0?0:t.seed.length,covered,witness:t.seed.slice(0,covered)};appendBlock(this.store,block,t.seed),this.publish(t,block),adjustBlock(this.store,block,-1),this.identity.commit(t)}acceptMessage(t){let env_2={stack:[],error:void 0,hasError:!1};try{let live=this.active.get(t.messageId);if(live?.epoch!==void 0&&live.epoch!==t.epoch)throw new CompactTransitionError("wrong_epoch",t.messageId);let{message,terminal:terminal2}=recordMessage(t.record);if(!terminal2&&[...live?.blocks.values()??[]].some(block=>block.seeded?.phase!=="initial"))throw new CompactTransitionError("invalid_phase","a start cannot rewind streamed blocks");live||this.identity.validate(t);let draft=__addDisposableResource3(env_2,new CompactSeededDraft(this.store),!1),next=seedMessage(draft,message,terminal2,live?.blocks,t),correlation=live?.correlation??(t.correlation&&draft.fields(t.correlation));this.install(t.messageId,{fields:next.fields,correlation,epoch:t.epoch},next.blocks),live||this.identity.commit(t),t.record.type==="message_end"&&this.settle(t.messageId,"pending")}catch(e_2){env_2.error=e_2,env_2.hasError=!0}finally{__disposeResources3(env_2)}}};async function compactColdFlow(flow,messagesOf){let known=async entryIds=>(await messagesOf(entryIds)).filter(messageId=>messageId!==void 0);switch(flow.kind){case"edit":case"context_edit_removal":{let[messageId]=await messagesOf([flow.targetId]);return messageId===void 0?void 0:flow.kind==="edit"?{type:"edit",messageId,message:flow.message}:{type:"context_edit_removal",messageId}}case"compaction":return{type:"compaction",removed:await known(flow.removedIds)};case"branch":{let installedIds=await messagesOf(flow.installed.map(entry=>entry.id)),installed=flow.installed.flatMap(({message},index)=>{let messageId=installedIds[index];return messageId===void 0?[]:[{messageId,message,persistence:"appended"}]});return{type:"branch",removed:await known(flow.removedIds),installed}}}}var CompactLaneCurrent=class{constructor(){this.cleanup=Promise.resolve(),this.coldChain=Promise.resolve(),this.owners=new WeakMap,this.refused=0}get refusedRecords(){return this.refused}get openBroadcastDialogs(){return this.state?.openBroadcastDialogs}bootstrap(options){this.retire(),this.state=new CompactSessionState(options)}admits(record,type){if(type!=="message_end"&&!CALL_RECORDS.has(type)&&!COMPONENT_RECORDS.has(type))return!0;try{return assertProtocolDepth(record),!0}catch(cause){let limit=protocolDepthLimitOf(cause);return limit===void 0?this.fail(cause):this.refuse(limit),!1}}fold(unit,sequence2,turnId=null){this.apply(()=>laneTransition(unit),sequence2,turnId)}foldComponent(record,sequence2){this.apply(()=>({type:"component",record:protocolClone(record)}),sequence2)}foldCall(record,sequence2,turnId){if(this.state)try{return this.state.acceptCall(protocolClone(record),sequence2,turnId)}catch(cause){this.fail(cause);return}}transcript(transition,settled,epoch){transition.kind==="append"&&transition.owningMessageId&&transition.recoveryEpoch===epoch&&this.status(transition.owningMessageId,"appended");let flow=transition.kind==="append"||transition.kind==="leaf"?transition.flow:void 0;flow&&this.cold(async state=>{let cold=await compactColdFlow(flow,entryIds=>settled.messagesOf(entryIds));return cold&&state.applyColdFlow(cold)})}status(messageId,persistence){this.cold(state=>state.applyCold({type:"message_status",messageId,persistence}))}cold(step){let state=this.state;state&&(this.coldChain=this.coldChain.then(async()=>{try{let failed=[await step(state)??[]].flat().find(outcome=>outcome.kind==="failed");failed&&this.state===state&&this.fail(failed.cause)}catch(cause){this.state===state&&this.fail(cause)}}))}apply(build,sequence2,turnId=null){if(this.state)try{let transition=build();transition&&this.state.accept(transition,sequence2,turnId)}catch(cause){this.fail(cause)}}freeze(){let state=this.state;if(state)try{let cut=state.freeze();return this.owners.set(cut,state),cut}catch(cause){this.fail(cause);return}}release(cut){cut&&this.owners.get(cut)?.release(cut)}read(cut){return this.owned(cut,(owner,held)=>owner.read(held))}readComponents(cut){return this.owned(cut,(owner,held)=>owner.readComponents(held))}readActive(cut){return this.owned(cut,(owner,held)=>owner.readActive(held))}readCalls(cut){return this.owned(cut,(owner,held)=>owner.readCalls(held))}cutStorage(cut,use){return this.owned(cut,(owner,held)=>owner.cutStorage(held,use))}owned(cut,read){let owner=cut&&this.owners.get(cut);return cut?owner?read(owner,cut):Promise.reject(new CompactReadError("ownership")):Promise.reject(new CompactReadError("unavailable"))}retire(){let state=this.state;this.state=void 0,state&&(this.cleanup=Promise.all([this.cleanup,state.retire()]).then(()=>{}))}idle(){return Promise.all([this.cleanup,this.coldChain,this.state?.idle()]).then(()=>{})}fail(cause){let limit=protocolDepthLimitOf(cause);if(limit!==void 0)return this.refuse(limit);if(!this.state)return;let reason=cause instanceof Error&&"reason"in cause?String(cause.reason):String(cause);process.stderr.write(`senpi rpc acceptance: compact current state unavailable: ${reason}
|
|
5
|
+
`),await rm(file,{force:!0}))}}return entries}function clearHandoverParkedSession(daemonDir,sessionPath){return enqueueMutation(()=>rm(entryFile(daemonDir,sessionPath),{force:!0}))}function dropHandoverParkedSessionIfFileGone(daemonDir,sessionPath){return existsSync(sessionPath)?Promise.resolve():clearHandoverParkedSession(daemonDir,sessionPath)}import{isAbsolute as isAbsolute2}from"node:path";import{access}from"node:fs/promises";import{isAbsolute}from"node:path";var MAX_WARM_PROFILES=64;function profileKey(profile){let context=Object.entries(profile.sessionContext??{}).sort(([a],[b])=>a<b?-1:a>b?1:0);return JSON.stringify([profile.cwd,profile.sessionKind??"interactive",context])}var HostWarmer=class{constructor(load){this.warm=new Set,this.loading=new Map,this.load=load}async run(profile){let key=profileKey(profile);if(this.warm.has(key))return"already_warm";let pending=this.loading.get(key);return pending===void 0&&(pending=this.loadOnce(key,profile),this.loading.set(key,pending)),await pending,"warmed"}async loadOnce(key,profile){try{if(await this.load(profile),this.warm.add(key),this.warm.size>MAX_WARM_PROFILES){let oldest=this.warm.values().next().value;oldest!==void 0&&this.warm.delete(oldest)}}finally{this.loading.delete(key)}}};function createRegistryWarm(prepare,host){let warmer=new HostWarmer(async profile=>{await access(profile.cwd);let launchProfile={cwd:profile.cwd,...profile.sessionKind!==void 0?{sessionKind:profile.sessionKind}:{},...profile.sessionContext!==void 0?{sessionContext:Object.freeze({...profile.sessionContext})}:{}},scope=new ProviderScope;try{await runWithProviderScope(scope,()=>prepare({cwd:profile.cwd,agentDir:host.agentDir,launchProfile:Object.freeze(launchProfile),...host.mcpRegistry!==void 0?{mcpRegistry:host.mcpRegistry}:{}}))}finally{scope.close()}});return profile=>warmer.run(profile)}function refusal(command,code2){return{id:command.id,type:"response",command:"warm",success:!1,error:code2}}async function answerWarm(command,host){if(host.draining)return refusal(command,"host_draining");let kindError=sessionKindError(command.kind);if(kindError)return refusal(command,`${RPC_ERROR_INVALID_SESSION_KIND}: ${kindError}`);let contextError=sessionContextError(command.context);if(contextError)return refusal(command,`${RPC_ERROR_INVALID_SESSION_CONTEXT}: ${contextError}`);if(host.warm===void 0)return{id:command.id,type:"response",command:"warm",success:!0,data:{state:"unsupported"}};let sessionContext=host.hostContext?{...command.context,...host.hostContext}:command.context,cwd=command.cwd??host.cwd;if(!isAbsolute(cwd))return refusal(command,RPC_ERROR_INVALID_PATH);try{let state=await host.warm({cwd,...command.kind!==void 0?{sessionKind:command.kind}:{},...sessionContext!==void 0?{sessionContext}:{}});return{id:command.id,type:"response",command:"warm",success:!0,data:{state}}}catch(cause){return refusal(command,`${RPC_ERROR_WARM_FAILED}: ${cause instanceof Error?cause.message:String(cause)}`)}}var observations=new Set(["get_state","get_snapshot","get_effect_status","get_pending_inputs","get_messages","get_entries","get_tree","get_recovery_page","release_recovery","get_fork_messages","get_last_assistant_text","get_session_stats","resolve_path","get_steering_messages","get_follow_up_messages","get_available_models","get_available_thinking_levels","get_model_thinking_level","get_fast_mode","get_commands","get_loaded_surfaces","get_media","get_auth_providers","get_provider_accounts","memory_report","eval_cells.list","eval_cells.peek"]);function refreshesSessionActivity(command){return!observations.has(command)}var RpcSessionRegistryError=class extends Error{constructor(code2,reason,detail2){super(code2==="open_failed"&&reason?`${code2}: ${reason}`:code2),this.code=code2,this.name="RpcSessionRegistryError",detail2&&(this.detail=detail2)}};function frozenProfile(profile){return Object.freeze({...profile,...profile.holderEndpoint?{holderEndpoint:Object.freeze({...profile.holderEndpoint})}:{},...profile.creationModel?{creationModel:Object.freeze({...profile.creationModel})}:{},...profile.sessionContext?{sessionContext:Object.freeze({...profile.sessionContext})}:{},...profile.sessionEnv?{sessionEnv:Object.freeze({...profile.sessionEnv})}:{},...profile.retryFallback?{retryFallback:Object.freeze({modelFallback:profile.retryFallback.modelFallback,fallbackChains:Object.freeze(Object.fromEntries(Object.entries(profile.retryFallback.fallbackChains).map(([key,entries])=>[key,Object.freeze([...entries])])))})}:{}})}function sessionIdentity(profile){return{kind:profile.sessionKind??"interactive",context:profile.sessionContext??EMPTY_SESSION_CONTEXT}}function attachLiveSession(entry,now,markAttached){if(entry?.state!=="open")throw new RpcSessionRegistryError("unknown_session");let wasParked=entry.retainOnDisconnect===!0&&entry.attachments===0;return entry.attachments++,entry.detachedAt=void 0,entry.lastCommandAt=now,markAttached(),wasParked&&entry.runtime&&(entry.lifecycleMutex=entry.lifecycleMutex.then(()=>entry.runtime?.emitAttachmentEvent("session_resumed"))),entry}function markPathAttached(entry,claims){entry?.reservationKey&&claims?.setAttached(entry.reservationKey,!0)}function beginPendingClaim(pending,sessionPath){let settled=Promise.withResolvers();return pending.set(sessionPath,settled.promise),()=>{pending.get(sessionPath)===settled.promise&&pending.delete(sessionPath),settled.resolve()}}async function takeCrossGenerationClaim(reservations,pending,pathReservations,sessionPath){let settle=beginPendingClaim(pending,sessionPath),holder;try{holder=await pathReservations.claim(sessionPath)}catch(cause){throw reservations.delete(sessionPath),settle(),cause}if(holder===void 0)return settle;throw reservations.delete(sessionPath),settle(),new RpcSessionRegistryError("session_path_in_use",void 0,{owner:holder,retry_after_ms:SESSION_PATH_RETRY_AFTER_MS})}async function settlePendingClaim(pending,sessionPath,graceMs){let timer,late=new Promise(resolve2=>{timer=setTimeout(()=>resolve2("late"),graceMs)});try{for(let claim=pending.get(sessionPath);claim!==void 0;claim=pending.get(sessionPath))if(await Promise.race([claim.then(()=>"settled"),late])==="late")throw new RpcSessionRegistryError("session_path_in_use","another open of this path is still taking its claim",{reason:"claim_in_progress",retry_after_ms:SESSION_PATH_RETRY_AFTER_MS})}finally{clearTimeout(timer)}}function syncRuntimeMetadata(entries,reservations,pathReservations){for(let entry of entries){let manager=entry.runtime?.session.sessionManager;if(!manager)continue;let currentPath=manager.getSessionFile(),currentKey=currentPath?canonicalSessionPath(currentPath):void 0;(currentPath!==entry.sessionPath||currentKey!==entry.reservationKey)&&(entry.reservationKey&&(reservations.delete(entry.reservationKey),pathReservations?.release(entry.reservationKey)),currentKey&&(reservations.add(currentKey),pathReservations?.claim(currentKey,entry.attachments>0)),entry.reservationKey=currentKey,entry.sessionPath=currentPath),entry.durableSessionId=manager.getSessionId(),entry.cwd=manager.getCwd()}}async function settleClosingReservation(entries,sessionPath,closeGraceMs){let closing=[...entries].find(entry=>entry.reservationKey===sessionPath&&entry.state==="closing");if(!closing?.closeCompletion)return;let deadline;try{await Promise.race([closing.closeCompletion,new Promise(resolve2=>{deadline=setTimeout(resolve2,closeGraceMs)})])}finally{deadline&&clearTimeout(deadline)}}function assertRequestedModelResolved(profile,diagnostics){let requested=profile.creationModel;if(requested===void 0)return;let unresolved=diagnostics.find(diagnostic=>diagnostic.code==="model_unresolved");if(unresolved!==void 0)throw new RpcSessionRegistryError("open_failed",`model_unavailable: ${unresolved.message}`,{reason:"model_unavailable",requestedModel:`${requested.provider}/${requested.modelId}`})}import{randomUUID as randomUUID2}from"node:crypto";import{tmpdir}from"node:os";import{join as join3}from"node:path";var OWNER_UNKNOWN=Object.freeze({ownerUnknown:!0}),MessageIdentities=class{constructor(){this.joins=new Map,this.unvouched=new Set,this.overflowed=!1,this.evictions=0,this.overflows=0}reset(){this.joins.clear(),this.unvouched.clear(),this.overflowed=!1,this.held=void 0}status(){return{ownerJoinsEvicted:this.evictions,ownerJoinsOverflowed:this.overflows}}joined(transition,owner){if(transition.kind!=="append")return;if(owner===void 0){transition.owningMessageId!==void 0&&this.unvouch(transition.id);return}if(this.joins.set(transition.id,owner),this.joins.size<=1024)return;let[oldest]=this.joins.keys();oldest!==void 0&&(this.joins.delete(oldest),this.evictions+=1,this.unvouch(oldest))}unvouch(entryId){if(this.unvouched.add(entryId),this.unvouched.size<=4096)return;let[forgotten]=this.unvouched.keys();forgotten!==void 0&&this.unvouched.delete(forgotten),this.overflows+=1,!this.overflowed&&(this.overflowed=!0,process.stderr.write(`senpi rpc acceptance: unvouched-owner ring overflowed (4096; evicted or never-joined owned entries); unmatched entries carry ownerUnknown until the epoch ends
|
|
6
|
+
`))}clear(){this.held=void 0}hold(type,sequence2,record,recorded){let identity2=recorded??(type==="entry_appended"?this.takeEntryOwner(record):void 0);identity2&&(this.held={type,sequence:sequence2,identity:identity2})}of(type,sequence2){let held=this.held;return held&&held.type===type&&held.sequence===sequence2?held.identity:void 0}takeEntryOwner(record){let entryId=Reflect.get(Object(Reflect.get(record,"entry")),"id");if(typeof entryId!="string")return;let owningMessageId=this.joins.get(entryId);return this.joins.delete(entryId),owningMessageId!==void 0?{owningMessageId}:this.unvouched.delete(entryId)||this.overflowed?OWNER_UNKNOWN:void 0}};var CompactPagedBatch=class{constructor(tree){this.changes=[],this.tree=tree}async apply(root,changes){return this.changes=[...changes].sort(([a],[b])=>a<b?-1:a>b?1:0),this.build(await this.merge(root,0,this.changes.length))}async merge(sub,from,to){if(from===to)return sub;if(!sub)return this.fresh(from,to);let node=await this.open(sub),split=from;for(;split<to&&this.changes[split][0]<node.name;)split++;let hit=split<to&&this.changes[split][0]===node.name,left=await this.merge(node.left,from,split),right=await this.merge(node.right,hit?split+1:split,to);if(!hit&&left===node.left&&right===node.right)return sub;let value=hit?this.changes[split][1]:node.value;return value===void 0?this.concat(left,right):(node.value=value,this.join(left,node,right))}fresh(from,to){let rows=[];for(let[name,value]of this.changes.slice(from,to))value!==void 0&&rows.push([name,value]);let grow=(lo,hi)=>{if(lo===hi)return;let mid=lo+hi>>>1,[name,value]=rows[mid],left=grow(lo,mid);return this.fix({key:void 0,name,value,left,right:grow(mid+1,hi),height:0,size:0})};return grow(0,rows.length)}async join(left,node,right){let lh=left?.height??0,rh=right?.height??0;if(left&&lh>rh+1){let top=await this.open(left);return top.right=await this.join(top.right,node,right),this.balance(top)}if(right&&rh>lh+1){let top=await this.open(right);return top.left=await this.join(left,node,top.left),this.balance(top)}return node.left=left,node.right=right,this.fix(node)}async concat(left,right){if(!left)return right;if(!right)return left;let[min,rest]=await this.takeMin(right);return this.join(left,min,rest)}async takeMin(sub){let node=await this.open(sub);if(!node.left)return[node,node.right];let[min,rest]=await this.takeMin(node.left);return node.left=rest,[min,await this.balance(node)]}async balance(node){let leftHeavy=(node.left?.height??0)>(node.right?.height??0),side=leftHeavy?"left":"right",other=leftHeavy?"right":"left",heavy=node[side];if(!heavy||heavy.height-(node[other]?.height??0)<2)return this.fix(node);let child=await this.open(heavy),inner=child[other];if(inner&&inner.height>(child[side]?.height??0)){let pivot=await this.open(inner);return child[other]=pivot[side],node[side]=pivot[other],pivot[side]=this.fix(child),pivot[other]=this.fix(node),this.fix(pivot)}return node[side]=inner,child[other]=this.fix(node),this.fix(child)}fix(node){return node.height=1+Math.max(node.left?.height??0,node.right?.height??0),node.size=1+(node.left?.size??0)+(node.right?.size??0),node}async open(sub){if(!("ref"in sub))return sub;let{node,name}=await this.tree.read(sub),{key,value,left,right}=node;return{key,name,value,left,right,height:sub.height,size:sub.size}}async build(sub){if(!sub||"ref"in sub)return this.tree.adjust(sub,1),sub;let left=await this.build(sub.left);try{let right=await this.build(sub.right);try{let key=sub.key??this.tree.own(sub.name);try{return await this.tree.make({key,value:sub.value,left,right})}finally{sub.key||this.tree.release(key)}}finally{this.tree.adjust(right,-1)}}finally{this.tree.adjust(left,-1)}}};var ROUND_CACHE_BYTES=1024*1024,CompactPagedTree=class{constructor(store,leavesOf){this.dirty=[],this.cacheBytes=0,this.allocatedNodes=0,this.store=store,this.values=new CompactValues(store),this.leavesOf=leavesOf}adjust(root,live,pins){root&&this.store.adjust(root.ref.owner,live,pins)}async cached(operation){this.cache=new Map,this.cacheBytes=0;try{return await operation()}finally{this.cache=void 0,this.cacheBytes=0}}async read(root){let cached=this.cache?.get(root.ref.node);if(cached)return this.cache?.delete(root.ref.node),this.cache?.set(root.ref.node,cached),cached;let text3=await this.store.readLeaf(root.ref.node),node=JSON.parse(text3),name=await this.values.read(node.key);if(typeof name!="string")throw new CompactReadError("ownership");return this.remember(root.ref.node,node,name,text3.length)}remember(id,node,name,units){let existing=this.cache?.get(id);if(existing)return existing;let bytes=(units+name.length)*2+128,decoded={node,name,bytes};if(this.cache&&bytes<=ROUND_CACHE_BYTES){for(;this.cacheBytes+bytes>ROUND_CACHE_BYTES;){let oldest=this.cache.entries().next().value;if(!oldest)break;this.cache.delete(oldest[0]),this.cacheBytes-=oldest[1].bytes}this.cache.set(id,decoded),this.cacheBytes+=bytes}return decoded}async get(root,key){let ref=root;for(;ref;){let{node,name}=await this.read(ref);if(key===name)return node.value;ref=key<name?node.left:node.right}}async getMany(root,keys){let ordered=[...keys].sort(),found=new Map,visit=async(ref,from,to)=>{if(!ref||from===to)return;let{node,name}=await this.read(ref),split=from;for(;split<to&&ordered[split]<name;)split++;await visit(node.left,from,split);let right=split;for(;right<to&&ordered[right]===name;)found.set(ordered[right++],node.value);await visit(node.right,right,to)};return await visit(root,0,ordered.length),found}async*entries(root,after){if(!root)return;let{node,name:key}=await this.read(root);(after===void 0||key>after)&&(yield*this.entries(node.left,after),yield[key,node.value]),yield*this.entries(node.right,after)}apply(root,changes){return new CompactPagedBatch({read:ref=>this.read(ref),make:node=>this.make(node),own:name=>this.values.own(name),adjust:(ref,live)=>this.adjust(ref,live,0),release:key=>this.store.adjust(key.owner,-1,0)}).apply(root,changes)}async make(node){let text3=JSON.stringify(node),name=this.cache?await this.values.read(node.key):void 0,leaf=this.store.createLeaf(text3,!0),owner=this.store.text.own([leaf,node.key.owner,...this.leavesOf(node.value),node.left?.ref.owner??0,node.right?.ref.owner??0]);return this.store.adjust(leaf,-1,0),this.dirty.push(leaf),this.allocatedNodes++,this.cache&&typeof name=="string"&&this.remember(leaf,node,name,text3.length),{ref:{node:leaf,owner},height:1+Math.max(node.left?.height??0,node.right?.height??0),size:1+(node.left?.size??0)+(node.right?.size??0)}}async flush(){let dirty=this.dirty;this.dirty=[],await this.store.flushLeaves(dirty,"node_write")}};function*packPages(rows){let page=[],bytes=2;for(let row of rows){let size=Buffer.byteLength(JSON.stringify(row));if(size+2>65536)throw new CompactWriteError("size_limit");(page.length===128||bytes+size+ +(page.length>0)>65536)&&(yield page,page=[],bytes=2),bytes+=size+ +(page.length>0),page.push(row)}page.length&&(yield page)}var CompactIndexCompactor=class{constructor(index,threshold){this.running=!1,this.index=index,this.threshold=threshold}schedule(){let index=this.index;this.running||!index.store.spillAllowed||(index.overrides?.size??0)-index.pending.size<this.threshold&&!index.status().deletionMasks||(this.running=!0,index.store.enqueue("page_write",async()=>{let progress=!1;try{progress=await index.bases.cached(()=>this.compact())}finally{this.running=!1}progress&&this.schedule()}))}*readyEntries(cut){for(let key of[...this.index.ready].sort()){if(!this.index.ready.has(key))continue;let value=this.index.overlays.get(cut.overrides,key);value&&(yield[key,value])}}async compact(){let i=this.index;if(!i.store.spillAllowed||(i.pending.size&&await i.store.flushValues(),!i.store.spillAllowed))return!1;let cut=i.freeze(),selected=new Map,touched,rows=new Map,removed=new Set,merged=[],written=[],loaded2=[],unowned=new Set,draft=i.base;i.bases.adjust(draft,1,0);try{let entries=this.readyEntries(cut),exhausted=!1;for(;selected.size<128&&!exhausted;){let batch=[];for(;batch.length<128;){let next=entries.next();if(next.done){exhausted=!0;break}batch.push(next.value)}if(!batch.length)break;let locations=await i.bases.getMany(cut.base,batch.map(([key])=>key));for(let[key,value]of batch){let page=locations.get(key)?.page;if((!page||!touched||page.path===touched.path)&&(selected.set(key,value),touched??=page),selected.size===128)break}}let small;for(let page of i.pages)if(page.count<64&&page.bytes<32768){small=page;break}for(let page of small?.path===touched?.path?[small]:[small,touched]){if(!page)continue;let data2=await i.readPage(page);loaded2.push(data2);let keyed=[];for(let row of data2.rows){let key=await i.values.read(row.key);if(typeof key!="string")throw new CompactReadError("ownership");keyed.push([key,row])}let locations=await i.bases.getMany(cut.base,keyed.map(([key])=>key));for(let[key,row]of keyed)locations.get(key)?.page.path===page.path&&(rows.set(key,row),removed.add(key))}for(let[key,change]of selected){if(removed.add(key),change.deleted){rows.delete(key);continue}let row=change.row??rows.get(key);if(row&&change.patch.size){let value=await i.values.merge(row.value,change.patch);merged.push(value.owner),row={...row,value}}row&&rows.set(key,row)}let ordered=[...rows],offset=0;for(let chunk of packPages(ordered.map(([,row])=>row))){let data2=Buffer.from(JSON.stringify(chunk));i.peakResidentPages=Math.max(i.peakResidentPages,i.residentPages+1);let path=await i.store.writeFile(data2,"page_write",data2.byteLength);if(path===void 0)return!1;written.push({page:{path,bytes:data2.byteLength,count:chunk.length,owner:0},keys:ordered.slice(offset,offset+chunk.length).map(([key])=>key)}),unowned.add(written[written.length-1].page),offset+=chunk.length}if(!i.store.spillAllowed)return!1;let changes=new Map,owners=[];try{for(let candidate of written){let kept=[],refs=[];for(let[offset2,key]of candidate.keys.entries()){let row=rows.get(key);if(!row)throw new CompactReadError("ownership");refs.push(row.key.owner);let folded=selected.get(key),current=i.overlays.get(i.overrides,key);folded&¤t!==folded&&(!current||current.deleted||current.row!==folded.row)||(refs.push(row.value.owner,row.payload),kept.push([key,offset2]))}let file=i.store.ownFile(candidate.page.path,candidate.page.bytes),page={...candidate.page,owner:i.store.text.own([...refs,file])};owners.push(page.owner),i.store.adjust(file,-1,0),unowned.delete(candidate.page);for(let[key,offset2]of kept)changes.set(key,{page,offset:offset2}),removed.delete(key);kept.length&&(candidate.page=page)}for(let key of removed)changes.set(key,void 0);let next=await i.bases.apply(draft,changes);i.bases.adjust(draft,-1,0),draft=next}finally{for(let owner of owners)i.store.adjust(owner,-1,0)}if(await i.bases.flush(),!i.store.spillAllowed)return!1;let previous=i.base;i.base=draft,draft=void 0,i.bases.adjust(previous,-1,0);for(let page of i.pages)(page.path===small?.path||page.path===touched?.path)&&i.pages.delete(page);for(let{page}of written)page.owner&&i.pages.add(page);for(let[key,value]of selected)i.overlays.get(i.overrides,key)===value&&i.drop(key);return selected.size>0}catch(error2){if(error2 instanceof CompactReadError&&error2.reason==="retired")return!1;throw error2}finally{i.bases.adjust(draft,-1,0);for(let page of loaded2)page[Symbol.dispose]();for(let page of unowned)i.store.discard(page.path,page.bytes);for(let owner of merged)i.store.adjust(owner,-1,0);i.release(cut)}}};async function readIndexPage(index,cut,cursor){if(cursor&&cursor.cut!==cut)throw new CompactReadError("ownership");let rows=[],base=index.bases.entries(cut.base,cursor?.after),overlay=index.overlays.entries(cut.overrides,cursor?.after),a=await base.next(),b=overlay.next(),last,loaded2,from;try{for(;(!a.done||!b.done)&&rows.length<128;){let key=a.done?b.value?.[0]:b.done||a.value[0]<b.value[0]?a.value[0]:b.value[0];if(key===void 0)break;let old=!a.done&&a.value[0]===key?a.value[1]:void 0,change=!b.done&&b.value[0]===key?b.value[1]:void 0;if(!change?.deleted){!change?.row&&old&&from?.path!==old.page.path&&(loaded2?.[Symbol.dispose](),loaded2=void 0,from=old.page,loaded2=await index.readPage(from));let row=change?.row??(old?loaded2?.rows[old.offset]:void 0);row&&rows.push({row,patch:change?.patchValue})}last=key,!a.done&&a.value[0]===key&&(a=await base.next()),!b.done&&b.value[0]===key&&(b=overlay.next())}}finally{loaded2?.[Symbol.dispose]()}if(index.store.assertReadable(),Buffer.byteLength(JSON.stringify(rows))>65536)throw new CompactReadError("size_limit");return{rows,next:a.done&&b.done||last===void 0?void 0:{cut,after:last}}}async function readIndexEntries(index,cut){let result=new Map,after;for(;;){let page=await index.page(cut,after);for(let entry of page.rows){let value=await index.values.read(entry.row.value),row=JSON.parse(JSON.stringify(value));entry.patch&&Object.assign(row,await index.values.read(entry.patch));let key=await index.values.read(entry.row.key);if(typeof key!="string")throw new CompactReadError("ownership");result.set(key,row)}if(!page.next)return result;after=page.next}}var __addDisposableResource=function(env,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose2,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose2=value[Symbol.asyncDispose]}if(dispose2===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose2=value[Symbol.dispose],async&&(inner=dispose2)}if(typeof dispose2!="function")throw new TypeError("Object not disposable.");inner&&(dispose2=function(){try{inner.call(this)}catch(e){return Promise.reject(e)}}),env.stack.push({value,dispose:dispose2,async})}else async&&env.stack.push({async:!0});return value},__disposeResources=(function(SuppressedError2){return function(env){function fail2(e){env.error=env.hasError?new SuppressedError2(e,env.error,"An error was suppressed during disposal."):e,env.hasError=!0}var r,s=0;function next(){for(;r=env.stack.pop();)try{if(!r.async&&s===1)return s=0,env.stack.push(r),Promise.resolve().then(next);if(r.dispose){var result=r.dispose.call(r.value);if(r.async)return s|=2,Promise.resolve(result).then(next,function(e){return fail2(e),next()})}else s|=1}catch(e){fail2(e)}if(s===1)return env.hasError?Promise.reject(env.error):Promise.resolve();if(env.hasError)throw env.error}return next()}})(typeof SuppressedError=="function"?SuppressedError:function(error2,suppressed,message){var e=new Error(message);return e.name="SuppressedError",e.error=error2,e.suppressed=suppressed,e}),CompactContentIndex=class{constructor(store,leavesOf,threshold){this.pages=new Set,this.ready=new Set,this.cuts=new WeakMap,this.tombstones=0,this.maskUnits=0,this.residentPages=0,this.peakResidentPages=0,this.store=store,this.leavesOf=leavesOf,this.values=new CompactValues(store),this.bases=new CompactPagedTree(store,({page})=>[page.owner]),this.overlays=new CompactIndexTree((value,live,pins)=>store.adjust(value.owner,live,pins)),this.pending=new CompactCommitDependencies(store,key=>{this.ready.add(key),this.maybeCompact()}),this.compactor=new CompactIndexCompactor(this,threshold)}set(key,row){let value=this.values.own(row),refs=[value.owner];try{let keyRef=this.values.own(key);refs.push(keyRef.owner);let payload=this.store.text.own(this.leavesOf(row));refs.push(payload),this.put(key,{key:keyRef,value,payload},new Map,!1)}finally{for(let ref of refs)this.store.adjust(ref,-1,0)}}patch(key,fields){let current=this.overlays.get(this.overrides,key),patch=new Map(current?.patch),owned=[];try{for(let[name,value]of Object.entries(fields)){let ref=this.values.own(value);owned.push(ref),patch.set(name,ref)}this.put(key,current?.row,patch,!1)}finally{for(let ref of owned)this.store.adjust(ref.owner,-1,0)}}delete(key){this.put(key,void 0,new Map,!0)}freeze(){this.store.assertReadable();let cut={base:this.base,overrides:this.overrides};return this.bases.adjust(cut.base,0,1),this.overlays.adjust(cut.overrides,0,1),this.cuts.set(cut,new CompactReadLease(()=>{this.bases.adjust(cut.base,0,-1),this.overlays.adjust(cut.overrides,0,-1)},()=>this.store.assertReadable())),cut}release(cut){this.lease(cut).release()}async lookup(cut,key){return this.lease(cut).run(async()=>{let env_1={stack:[],error:void 0,hasError:!1};try{let change=this.overlays.get(cut.overrides,key);if(change?.deleted)return;if(change?.row)return change.row;let old=await this.bases.get(cut.base,key);return old?__addDisposableResource(env_1,await this.readPage(old.page),!1).rows[old.offset]:void 0}catch(e_1){env_1.error=e_1,env_1.hasError=!0}finally{__disposeResources(env_1)}})}async entries(cut){return this.lease(cut).run(()=>readIndexEntries(this,cut))}async page(cut,cursor){return this.lease(cut).run(()=>readIndexPage(this,cut,cursor))}async readPage(page){if(page.bytes>65536)throw new CompactReadError("size_limit");if(page.count>128)throw new CompactReadError("count_limit");this.peakResidentPages=Math.max(this.peakResidentPages,++this.residentPages);try{let data2=await this.store.readFile(page.path,page.bytes,"page_read"),rows=JSON.parse(data2.toString("utf8"));if(rows.length>128)throw new CompactReadError("count_limit");if(rows.length!==page.count)throw new CompactReadError("ownership");return{rows,[Symbol.dispose]:()=>{this.residentPages--}}}catch(error2){throw this.residentPages--,error2}}status(){return{overrideSlots:this.overrides?.size??0,deletionMasks:this.tombstones,deletionMaskBytes:this.maskUnits*2,basePages:this.pages.size,baseRows:this.base?.size??0,residentIndexNodes:this.overlays.residentNodes,allocatedIndexNodes:this.bases.allocatedNodes+this.overlays.allocatedNodes,residentPages:this.residentPages+this.values.residentPages,peakResidentPages:this.peakResidentPages+this.values.peakResidentPages}}maybeCompact(){this.compactor.schedule()}drop(key){let old=this.overlays.get(this.overrides,key);if(!old)return;old.deleted&&(this.tombstones--,this.maskUnits-=key.length);let next=this.overlays.set(this.overrides,key,void 0);this.overlays.adjust(this.overrides,-1,0),this.overrides=next,this.pending.delete(key),this.ready.delete(key)}put(key,row,patch,deleted){let patchValue=patch.size?this.values.record(patch):void 0,refs=patchValue?[patchValue.owner]:[];row&&refs.push(row.key.owner,row.value.owner,row.payload);let owner=this.store.text.own(refs);this.drop(key);let next=this.overlays.set(this.overrides,key,{row,patch,patchValue,owner,deleted});this.overlays.adjust(this.overrides,-1,0),this.overrides=next,this.store.adjust(owner,-1,0),patchValue&&this.store.adjust(patchValue.owner,-1,0),deleted&&(this.tombstones++,this.maskUnits+=key.length),this.pending.set(key,refs),this.pending.has(key)||this.ready.add(key),this.maybeCompact()}lease(cut){let lease=this.cuts.get(cut);if(!lease)throw new CompactReadError("ownership");return lease}};var COMPACT_PROTOCOL_MAX_DEPTH=1024;function assertProtocolDepth(value){let stack=[],ancestors=new Set,enter=child=>{if(!(typeof child!="object"||child===null)){if(ancestors.has(child))throw new CompactWriteError("cycle");if(stack.length===COMPACT_PROTOCOL_MAX_DEPTH)throw new CompactWriteError("unsupported_value",COMPACT_PROTOCOL_MAX_DEPTH);ancestors.add(child),stack.push({container:child,children:Array.isArray(child)?child:Object.values(child),index:0})}};enter(value);for(let top=stack.at(-1);top;top=stack.at(-1))top.index<top.children.length?enter(top.children[top.index++]):(stack.pop(),ancestors.delete(top.container))}function protocolClone(record){return assertProtocolDepth(record),JSON.parse(JSON.stringify(record))}function protocolDepthLimitOf(cause){return cause instanceof CompactWriteError?cause.limit:void 0}function canonicalLoss(frame2){return frame2.limit===void 0?frame2.reason:new CompactWriteError("unsupported_value",frame2.limit)}var isProjection=value=>typeof value=="object"&&value!==null&&typeof Reflect.get(value,"runtimeItemKey")=="string",CompactSettledMessages=class{constructor(epoch,options,diagnose){this.keys=new Map,this.joins=0,this.epoch=epoch,this.diagnose=diagnose,this.store=new CompactContentStore(options),this.rows=new CompactContentIndex(this.store,row=>row.kind==="terminal"?[...row.payload,row.call?.owner??0]:[],128)}reader(root){return{store:this.store,values:this.rows.values,members:valid=>this.members(root,valid),messageOf:entryId=>this.messageOf(root,entryId)}}valid(carrier){return carrier!==void 0&&carrier.epoch===this.epoch}end(record,carrier,sequence2,turnId,call){if(assertProtocolDepth(record),!this.valid(carrier))return this.reject("unknown_message");let identity2={messageId:carrier.messageId,terminalSequence:sequence2},id=identity2.messageId;if(this.keys.has(`end:${id}`)||this.keys.has(`settled:${id}`))return this.reject("duplicate_end");let owned=this.keys.get(`owner:${id}`);if(carrier.durableEntryId&&owned!==void 0&&owned!==carrier.durableEntryId)return this.reject("conflicting_owner");let joined=!1;if(carrier.durableEntryId&&owned===void 0){if(this.keys.has(`entry:${carrier.durableEntryId}`))return this.reject("conflicting_owner");this.join(id,carrier.durableEntryId),joined=!0}if(this.keys.has(`owner:${id}`))return this.settle(id),{joined,identity:identity2};let projection=call?this.rows.values.own(call):null;this.keys.set(`end:${id}`,"");let message=Reflect.get(record,"message"),role=String(Reflect.get(Object(message),"role")),payload=[],text3=JSON.stringify({terminal:message,correlation:{clientMessageId:Reflect.get(record,"clientMessageId"),clientTurnId:Reflect.get(record,"clientTurnId"),clientMessages:Reflect.get(record,"clientMessages")}});for(let offset=0;offset<text3.length;offset+=COMPACT_LEAF_CODE_UNITS)payload.push(this.store.createLeaf(text3.slice(offset,offset+COMPACT_LEAF_CODE_UNITS)));this.put(`terminal:${id}`,{kind:"terminal",messageId:id,turnId,terminalSequence:identity2.terminalSequence,role,runtimeItemKey:call?.runtimeItemKey??null,entryId:null,status:"pending",error:null,payload,call:projection});for(let leaf of payload)this.store.adjust(leaf,-1,0);return projection&&this.store.adjust(projection.owner,-1,0),["user","assistant","toolResult","custom"].includes(role)||this.diagnose("unsupported_role"),{joined:!1,identity:identity2}}reject(reason){this.diagnose(reason)}fail(carrier,errorMessage2){return!this.valid(carrier)||!this.keys.has(`terminal:${carrier.messageId}`)?this.reject("unknown_message"):(this.rows.patch(`terminal:${carrier.messageId}`,{status:"failed",error:{errorMessage:errorMessage2}}),{messageId:carrier.messageId})}append(transition){let id=transition.owningMessageId;if(id!==void 0)return transition.recoveryEpoch!==this.epoch?this.reject("retired_owner"):this.keys.has(`owner:${id}`)||this.keys.has(`settled:${id}`)||this.keys.has(`entry:${transition.id}`)?this.reject("conflicting_owner"):(this.join(id,transition.id),id)}join(messageId,entryId){let owner={kind:"owner",messageId,entryId,ordinal:this.joins++};this.put(`owner:${messageId}`,owner),this.put(`entry:${entryId}`,owner),this.rows.delete(`terminal:${messageId}`),this.keys.delete(`terminal:${messageId}`),this.keys.set(`owner:${messageId}`,entryId),this.keys.has(`end:${messageId}`)&&this.settle(messageId)}settle(messageId){this.keys.set(`settled:${messageId}`,this.keys.get(`owner:${messageId}`)??""),this.keys.delete(`owner:${messageId}`),this.keys.delete(`end:${messageId}`)}put(key,row){this.rows.set(key,row),this.keys.set(key,"")}async messagesOf(entryIds){let cut=this.rows.freeze();try{let ids=[];for(let entryId of entryIds)ids.push(await this.messageOf(cut,entryId)??void 0);return ids}finally{this.rows.release(cut)}}freeze(){return this.rows.freeze()}release(root){this.rows.release(root)}async read(root){let settledMessages=[],owners=[];for(let[key,row]of await this.rows.entries(root)){if(row.kind==="owner"&&key.startsWith("owner:")&&owners.push({kind:"owner",messageId:row.messageId,entryId:row.entryId}),row.kind!=="terminal")continue;let{payload,kind:_kind,call,...fields}=row,bytes=(await Promise.all(payload.map(leaf=>this.store.readLeaf(leaf)))).join(""),value=JSON.parse(bytes),projection=call?await this.rows.values.read(call):void 0;if(projection!==void 0&&!isProjection(projection))throw new CompactReadError("ownership");settledMessages.push({...fields,...value,...projection?{call:projection}:{}})}return{settledMessages,owners}}async*members(root,valid){let cursor;do{let page=await this.rows.page(root,cursor);for(let{row,patch}of page.rows){valid();let key=await this.rows.values.read(row.key);if(typeof key!="string"||key.startsWith("entry:"))continue;let stored=JSON.parse(JSON.stringify(await this.rows.values.read(row.value)));if(stored.kind==="owner"){yield stored;continue}let patched=patch?JSON.parse(JSON.stringify(await this.rows.values.read(patch))):{};yield{kind:"terminal",row:{...stored,...patched}}}cursor=page.next}while(cursor)}async messageOf(root,entryId){let row=await this.rows.lookup(root,`entry:${entryId}`),owner=row&&await this.rows.values.read(row.value),messageId=owner?Reflect.get(Object(owner),"messageId"):null;return typeof messageId=="string"?messageId:null}storageStatus(){return{...this.store.status(),...this.rows.status(),residentSettledKeys:this.keys.size}}idle(){return this.store.idle()}retire(){return this.store.retire()}};function foldCompactTransition({settled,current},transition,transcriptAvailable,epoch){let owner=transition.kind==="append"&&transcriptAvailable?settled.append(transition):void 0;return current.transcript(transition,settled,epoch),owner}function foldCompactRecord({settled,current},{record,type,carrier,canonical,sequence:sequence2,turnId,call}){canonical&¤t.fold(canonical,sequence2,turnId),COMPONENT_RECORDS.has(type)&¤t.foldComponent(record,sequence2);let ended=type==="message_end"?settled.end(record,carrier,sequence2,turnId,call?.projection):void 0,failed=type==="transcript_write_failed"?settled.fail(carrier,String(Reflect.get(record,"errorMessage"))):void 0,status=type==="transcript_write_failed"?"failed":ended?.joined?"appended":void 0;status&&settled.valid(carrier)&¤t.status(carrier.messageId,status);let block=toolcallIndex(record),streamed=block!==void 0&&carrier?callIdentity(current.callOwning(carrier.messageId,block)):void 0;return ended?.identity??failed??call?.identity??streamed}var CORRELATION=["clientMessageId","clientTurnId","clientMessages"];function laneTransition({record,carrier,ordinal,firstOrdinal}){let identity2={messageId:carrier.messageId,epoch:carrier.epoch,ordinal,firstOrdinal},correlated=CORRELATION.filter(key=>key in record),correlation=correlated.length?{correlation:Object.fromEntries(correlated.map(key=>[key,Reflect.get(record,key)]))}:{},message={type:"seeded_message",...identity2,...correlation,...record.invalidatedBlocks?{invalidatedBlocks:record.invalidatedBlocks}:{},...record.rewrittenFrom===void 0?{}:{rewrittenFrom:record.rewrittenFrom}};switch(record.type){case"message_block_state":case"message_block_metadata":case"message_tool_arguments_reset":return{type:"seeded_block",...identity2,event:record};case"message_start":case"message_end":return{...message,record};case"message_update":{let event=record.assistantMessageEvent;return"contentIndex"in event?{type:"seeded_block",...identity2,event,usage:record.usage,...record.messageMetadata?{messageMetadata:record.messageMetadata}:{},...correlation,...record.resolvedToolName===void 0?{}:{resolvedToolName:record.resolvedToolName}}:{...message,record:{...record,assistantMessageEvent:event}}}}}var CompactTransitionError=class extends Error{constructor(reason,detail2){super(`compact transition rejected (${reason}): ${detail2}`),this.name="CompactTransitionError",this.reason=reason}};function appendBlock(store,block,text3){block.units+=text3.length;let rest=text3;for(;block.tail.length+rest.length>=COMPACT_LEAF_CODE_UNITS;){let take=COMPACT_LEAF_CODE_UNITS-block.tail.length;block.root=store.text.append(block.root,block.tail+rest.slice(0,take)),store.adjust(block.tailRoot,-1,0),block.tailRoot=0,block.tail="",rest=rest.slice(take)}rest.length&&(block.tailRoot=store.text.append(block.tailRoot,rest,!0)),block.tail+=rest}function adjustBlock(store,block,live){store.adjust(block.root,live,0),store.adjust(block.tailRoot,live,0)}function deltaBlock(store,block,offset,text3){if(offset!==block.emitted)throw new CompactTransitionError("non_contiguous",`offset ${offset}, expected ${block.emitted}`);let overlapEnd=Math.min(offset+text3.length,block.units),overlap=Math.max(0,overlapEnd-offset);if(overlap>0&&text3.slice(0,overlap)!==block.witness.slice(offset,overlapEnd))throw new CompactTransitionError("conflicting_overlap",`[${offset}, ${overlapEnd})`);appendBlock(store,block,text3.slice(overlap)),block.emitted=offset+text3.length,block.emitted>=block.covered&&(block.witness="")}function parseFrontier(next,length,previous=0){if(!Number.isSafeInteger(next)||next<previous||next>length)throw new CompactTransitionError("invalid_parse_frontier",`${next} outside [${previous}, ${length}]`)}function seedOffset(next,length){try{return seedNextOffset(next,length)}catch(error2){throw error2 instanceof SeedFrontierError?new CompactTransitionError("invalid_seed_frontier",error2.code):error2}}function seedBlock(draft,block,frontier){let text3=block.type==="text"?block.text:block.type==="thinking"?block.thinking:frontier?.rawArgumentPrefix??"",nextOffset=frontier?seedOffset(frontier.nextOffset,text3.length):text3.length,covered=frontier?.coveredCodeUnits??0;if(!Number.isSafeInteger(covered)||covered!==0&&covered!==text3.length||covered===0&&nextOffset!==text3.length)throw new CompactTransitionError("invalid_coverage",`${covered} of ${text3.length}`);let parsedThrough=frontier?.parsedThrough??0;parseFrontier(parsedThrough,text3.length);let fields=Object.fromEntries(Object.entries(block).filter(([key])=>key!=="text"&&key!=="thinking").map(([key,value])=>[key,key==="thinkingSignature"||key==="textSignature"?"":value])),body=draft.text(block.type==="thinking"?"thinking":block.type==="toolCall"?"tool_arguments":"text",text3);body.emitted=nextOffset,body.covered=covered,body.witness=nextOffset<covered?text3:"";let signature=block.type==="text"?block.textSignature:block.type==="thinking"?block.thinkingSignature:void 0;return{type:block.type,fields:draft.fields(fields),body,signature:draft.text("text",signature??""),phase:"open",parsedThrough}}function foldSeededBlock(draft,old,event){switch(event.type){case"text_start":case"thinking_start":case"toolcall_start":if(old&&old.phase!=="initial")throw new CompactTransitionError("duplicate_block",`${event.contentIndex}`);return seedBlock(draft,event.seed.block,event.seed);case"message_block_state":if(event.phase!=="insert")break;if(old&&old.phase!=="initial")throw new CompactTransitionError("duplicate_block",`${event.contentIndex}`);return seedBlock(draft,event.block)}if(!old)throw new CompactTransitionError("unknown_block",`${event.contentIndex}`);if(old.phase!=="open")throw new CompactTransitionError("invalid_phase",old.phase);switch(event.type){case"text_delta":case"thinking_delta":case"toolcall_delta":{let kind=event.type==="text_delta"?"text":event.type==="thinking_delta"?"thinking":"toolCall";if(old.type!==kind)throw new CompactTransitionError("wrong_kind",`${old.type} / ${kind}`);let parsedThrough=event.type==="toolcall_delta"?event.parsedThrough:0;parseFrontier(parsedThrough,Math.max(old.body.units,event.offset+event.delta.length),old.parsedThrough);let body=draft.clone(old.body);return deltaBlock(draft.store,body,event.offset,event.delta),{...old,body,parsedThrough}}case"message_tool_arguments_reset":if(old.type!=="toolCall")throw new CompactTransitionError("wrong_kind",old.type);return parseFrontier(event.parsedThrough,event.rawArgumentPrefix.length),{...old,body:draft.text("tool_arguments",event.rawArgumentPrefix),parsedThrough:event.parsedThrough};case"message_block_metadata":{let{type:_type,contentIndex:_index,thinkingSignatureDelta,thinkingSignature,textSignature,...fields}=event;if((thinkingSignatureDelta!==void 0||thinkingSignature!==void 0)&&old.type!=="thinking")throw new CompactTransitionError("wrong_kind",old.type);if(textSignature!==void 0&&old.type!=="text")throw new CompactTransitionError("wrong_kind",old.type);let replacement=thinkingSignature??textSignature,signature=replacement===void 0?draft.clone(old.signature):draft.text("text",replacement);return thinkingSignatureDelta!==void 0&&appendBlock(draft.store,signature,thinkingSignatureDelta),{...old,signature,fields:draft.fields({...fields,...thinkingSignature!==void 0||thinkingSignatureDelta!==void 0?{thinkingSignature:""}:{},...textSignature!==void 0?{textSignature:""}:{}},old.fields)}}case"message_block_state":case"text_end":case"thinking_end":{let kind=event.type==="message_block_state"?event.block.type:event.type==="text_end"?"text":"thinking";if(old.type!==kind)throw new CompactTransitionError("wrong_kind",`${old.type} / ${kind}`);return{...seedBlock(draft,event.block),phase:"ended"}}case"toolcall_end":if(old.type!=="toolCall")throw new CompactTransitionError("wrong_kind",old.type);return{...old,fields:draft.fields(event.toolCall),phase:"ended"}}}function frozenSeededBlock(block){return{type:block.type,fields:block.fields,phase:block.phase,parsedThrough:block.parsedThrough,signature:{root:block.signature.root,tailRoot:block.signature.tailRoot}}}function frozenBlock(contentIndex,block){return{contentIndex,kind:block.kind,root:block.root,tail:"",tailRoot:block.tailRoot,...block.seeded?{seeded:frozenSeededBlock(block.seeded)}:{}}}function seededBlockLeaves(block){return[block.signature.root,block.signature.tailRoot,...Object.values(block.fields).map(ref=>ref.owner)]}var CompactStartIdentity=class{constructor(epoch){this.highWater=-1,this.live=new Map,this.current=epoch}validate({epoch,ordinal,firstOrdinal,messageId}){let binding2=this.live.get(messageId);if(typeof epoch!="string"||!epoch.length||!Number.isSafeInteger(ordinal)||ordinal<0||!Number.isSafeInteger(firstOrdinal)||firstOrdinal<0||firstOrdinal>ordinal||binding2&&(binding2.epoch!==epoch||binding2.firstOrdinal!==firstOrdinal))throw new CompactTransitionError("invalid_start_identity","valid epoch, ordinal and stable first ordinal required");if(this.current!==void 0&&epoch!==this.current||ordinal<=this.highWater||!binding2&&firstOrdinal<=this.highWater)throw new CompactTransitionError("duplicate_or_stale_start","not the owner's epoch, or a stale ordinal; bootstrap a new producer epoch before restarting its counter");if(!binding2&&firstOrdinal!==ordinal)throw new CompactTransitionError("invalid_start_identity","a new message must bind its own first start")}commit({epoch,ordinal,firstOrdinal,messageId}){this.current=epoch,this.highWater=ordinal,this.live.set(messageId,{epoch,firstOrdinal})}release(messageId){this.live.delete(messageId)}};var CompactColdOperations=class{constructor(index,isActive,install){this.chain=Promise.resolve(),this.keys=new Map,this.pending=0,this.index=index,this.isActive=isActive,this.install=install}activate(key){let token=this.keys.get(key);token&&(token.active=!0)}run(input,afterSequence){if(this.isActive(input.messageId))return Promise.resolve(this.active(afterSequence));if(this.pending===128)return Promise.resolve({kind:"rejected",reason:"capacity",afterSequence});let step=this.admit(input,afterSequence);return this.enqueue(async()=>(await step())())}runAll(inputs,afterSequence){let live=inputs.map(input=>this.isActive(input.messageId));if(live.every(Boolean))return Promise.resolve(inputs.map(()=>this.active(afterSequence)));if(this.pending===128)return Promise.resolve(live.map(active=>active?this.active(afterSequence):{kind:"rejected",reason:"capacity",afterSequence}));let steps=inputs.map((input,index)=>live[index]?async()=>()=>this.active(afterSequence):this.admit(input,afterSequence));return this.enqueue(async()=>{let commits=[];for(let step of steps)commits.push(await step());return commits.map(commit=>commit())})}idle(){return this.chain}active(afterSequence){return{kind:"rejected",reason:"active_message",afterSequence}}enqueue(task){this.pending++;let result=this.chain.then(task).finally(()=>{this.pending--});return this.chain=result.then(()=>{}),result}admit(input,afterSequence){let operation={...input},key=operation.messageId,previous=this.keys.get(key),token=(previous?.active?void 0:previous)??{removed:!1,active:!1,pending:0};return this.keys.set(key,token),token.pending++,async()=>{let commit=await this.prepare(operation,token,afterSequence);return()=>{try{return commit()}finally{--token.pending===0&&this.keys.get(key)===token&&this.keys.delete(key)}}}}async prepare(operation,token,afterSequence){let key=operation.messageId,unknown={kind:"rejected",reason:"unknown_message",afterSequence},outcome=value=>()=>value;try{if(this.index.store.assertReadable(),token.active||this.isActive(key))return outcome(this.active(afterSequence));if(token.removed&&operation.type!=="message_install")return outcome(unknown)}catch(cause){return outcome(this.failure(cause,afterSequence))}let cut=this.index.freeze(),row,keep;try{row=await this.index.lookup(cut,key),keep=operation.type==="message_install"?{persistence:operation.persistence}:row&&operation.type==="message_replace"?await this.current(cut,key,row):void 0}catch(cause){return this.index.release(cut),outcome(this.failure(cause,afterSequence))}return()=>{try{if(this.index.store.assertReadable(),token.active||this.isActive(key))return this.active(afterSequence);if(token.removed&&operation.type!=="message_install"||!row&&!keep)return unknown;switch(operation.type){case"message_status":this.index.patch(key,{persistence:operation.persistence});break;case"message_remove":this.index.delete(key),token.removed=!0,this.keys.delete(key);break;default:keep&&this.install(key,operation.message,keep)}return{kind:"applied",afterSequence}}catch(cause){return this.failure(cause,afterSequence)}finally{this.index.release(cut)}}}failure(cause,afterSequence){return cause instanceof CompactReadError&&cause.reason==="retired"?{kind:"rejected",reason:"retired",afterSequence}:{kind:"failed",cause,afterSequence}}async current(cut,key,row){let stored=await this.index.values.read(row.value),patch=this.index.overlays.get(cut.overrides,key)?.patchValue,value=patch?{...stored,...await this.index.values.read(patch)}:stored;return{persistence:value.persistence,...value.correlation?{correlation:value.correlation}:{}}}};var CompactSeededDraft=class{constructor(store){this.releases=[],this.store=store,this.values=new CompactValues(store)}fields(value,previous={},removeNull=!1){let result={...previous};for(let[key,item]of Object.entries(value)){if(item===void 0)continue;if(item===null&&removeNull){Reflect.deleteProperty(result,key);continue}let ref=this.values.own(item);this.releases.push(()=>this.store.adjust(ref.owner,-1,0)),Object.defineProperty(result,key,{value:ref,enumerable:!0,configurable:!0,writable:!0})}return result}text(kind,text3=""){let block={kind,root:0,tail:"",tailRoot:0,units:0,emitted:0,covered:0,witness:""};return this.releases.push(()=>adjustBlock(this.store,block,-1)),appendBlock(this.store,block,text3),block.emitted=block.units,block}clone(block){let candidate={...block};return adjustBlock(this.store,candidate,1),this.releases.push(()=>adjustBlock(this.store,candidate,-1)),candidate}[Symbol.dispose](){for(let release of this.releases.reverse())release()}};var __addDisposableResource2=function(env,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose2,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose2=value[Symbol.asyncDispose]}if(dispose2===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose2=value[Symbol.dispose],async&&(inner=dispose2)}if(typeof dispose2!="function")throw new TypeError("Object not disposable.");inner&&(dispose2=function(){try{inner.call(this)}catch(e){return Promise.reject(e)}}),env.stack.push({value,dispose:dispose2,async})}else async&&env.stack.push({async:!0});return value},__disposeResources2=(function(SuppressedError2){return function(env){function fail2(e){env.error=env.hasError?new SuppressedError2(e,env.error,"An error was suppressed during disposal."):e,env.hasError=!0}var r,s=0;function next(){for(;r=env.stack.pop();)try{if(!r.async&&s===1)return s=0,env.stack.push(r),Promise.resolve().then(next);if(r.dispose){var result=r.dispose.call(r.value);if(r.async)return s|=2,Promise.resolve(result).then(next,function(e){return fail2(e),next()})}else s|=1}catch(e){fail2(e)}if(s===1)return env.hasError?Promise.reject(env.error):Promise.resolve();if(env.hasError)throw env.error}return next()}})(typeof SuppressedError=="function"?SuppressedError:function(error2,suppressed,message){var e=new Error(message);return e.name="SuppressedError",e.error=error2,e.suppressed=suppressed,e});function recordMessage(record){if(record.type!=="message_update")return{message:record.message,terminal:record.type==="message_end"};let event=record.assistantMessageEvent;switch(event.type){case"start":return{message:event.seed.message,terminal:!1};case"done":return{message:event.message,terminal:!0};case"error":return{message:event.error,terminal:!0}}}function seedMessage(draft,message,terminal2,previous,cut={}){let blocks=new Map,{invalidatedBlocks=[],rewrittenFrom=Number.POSITIVE_INFINITY}=cut;if(rewrittenFrom<0||rewrittenFrom!==Number.POSITIVE_INFINITY&&!Number.isSafeInteger(rewrittenFrom)||invalidatedBlocks.some(index=>!Number.isSafeInteger(index)||index<0))throw new CompactTransitionError("invalid_terminal",`rewrittenFrom ${rewrittenFrom}`);if(message.role!=="assistant")return{fields:draft.fields(message),blocks};let invalidated=new Set(invalidatedBlocks),{content,...metadata}=message;for(let[index,publicBlock]of content.entries()){let block=seedBlock(draft,publicBlock),old=previous?.get(index)?.seeded,raw=terminal2&&block.type==="toolCall"&&old?.type==="toolCall"&&old.phase==="ended"&&index<rewrittenFrom&&!invalidated.has(index);blocks.set(index,{...block,...raw?{body:{...draft.clone(old.body),witness:""},parsedThrough:old.parsedThrough}:{},phase:terminal2?"ended":"initial"})}return{fields:draft.fields(metadata),blocks}}function updateFields(draft,fields,update){if(update.usage===void 0&&update.messageMetadata===void 0)return fields;let changed={...update.messageMetadata,...update.usage===void 0?{}:{usage:update.usage}};return draft.fields(changed,fields,!0)}function installSettledMessage(owner,messageId,message,keep){let env_1={stack:[],error:void 0,hasError:!1};try{let draft=__addDisposableResource2(env_1,new CompactSeededDraft(owner.store),!1),{fields,blocks}=seedMessage(draft,message,!0),root={header:void 0,ref:void 0};for(let[index,block]of blocks)root=owner.blockRoots.set(root,String(index).padStart(16,"0"),frozenBlock(index,{...block.body,seeded:block}));owner.settled.set(messageId,{messageId,persistence:keep.persistence,fields,...root.ref?{blocks:root.ref}:{},...keep.correlation?{correlation:keep.correlation}:{}}),owner.blockRoots.release(root)}catch(e_1){env_1.error=e_1,env_1.hasError=!0}finally{__disposeResources2(env_1)}}var messageLeaves=row=>[row.blocks?.owner??0,...Object.values({...row.fields,...row.correlation}).map(ref=>ref.owner)],CompactStateStorage=class{constructor(options){this.epoch=options.epoch,this.sessionEpoch=options.sessionEpoch??"",this.store=new CompactContentStore(options),this.blockRoots=new CompactComponentRoots(this.store,block=>[block.root,block.tailRoot??0,...block.seeded?seededBlockLeaves(block.seeded):[]]),this.messageRoots=new CompactComponentRoots(this.store,messageLeaves),this.settled=new CompactContentIndex(this.store,messageLeaves,options.compactAboveRows??128),this.cold=new CompactColdOperations(this.settled,key=>this.isActiveKey(key),(messageId,message,keep)=>installSettledMessage({store:this.store,blockRoots:this.blockRoots,settled:this.settled},messageId,message,keep))}isActiveKey(_key){return!1}};function rowOf(messageId,message){return{messageId,...message.root.ref?{blocks:message.root.ref}:{},...message.fields?{fields:message.fields}:{},...message.correlation?{correlation:message.correlation}:{}}}var CompactActiveMessages=class extends CompactStateStorage{constructor(){super(...arguments),this.messages={header:void 0,ref:void 0},this.active=new Map,this.identity=new CompactStartIdentity(this.epoch),this.sequence=0,this.residentTailBytes=0,this.hotWitnessBytes=0}isActiveKey(key){return this.active.has(key)}publish(address,block,fields){let message=this.active.get(address.messageId)??{...this.fresh(),epoch:block.epoch};fields&&(message.fields=fields),this.put(message,address.contentIndex,block),this.publishRow(address.messageId,message)}install(messageId,parts,blocks){let old=this.active.get(messageId),message={...this.fresh(old?.order),...parts};for(let[index,block]of blocks)this.put(message,index,{...block.body,seeded:block,epoch:parts.epoch});this.publishRow(messageId,message),old&&this.discard(old)}settle(messageId,persistence){let message=this.active.get(messageId);this.settled.set(messageId,{...message?rowOf(messageId,message):{messageId},persistence}),this.dropActive(messageId)}dropActive(messageId){let message=this.active.get(messageId);message&&(this.messages=this.messageRoots.set(this.messages,message.order,void 0),this.discard(message),this.active.delete(messageId),this.identity.release(messageId))}block(address){let block=this.active.get(address.messageId)?.blocks.get(address.contentIndex);if(!block)throw new CompactTransitionError("unknown_block",`${address.messageId}#${address.contentIndex}`);return block}fresh(order=String(this.sequence).padStart(16,"0")){return{order,blocks:new Map,root:{header:void 0,ref:void 0},tailBytes:0,witnessBytes:0}}put(message,contentIndex,block){let old=message.blocks.get(contentIndex),tails=(block.tail.length+(block.seeded?.signature.tail.length??0)-(old?.tail.length??0)-(old?.seeded?.signature.tail.length??0))*2,witness=(block.witness.length-(old?.witness.length??0))*2;message.root=this.blockRoots.set(message.root,String(contentIndex).padStart(16,"0"),frozenBlock(contentIndex,block)),message.blocks.set(contentIndex,block),message.tailBytes+=tails,message.witnessBytes+=witness,this.residentTailBytes+=tails,this.hotWitnessBytes+=witness}publishRow(messageId,message){this.messages=this.messageRoots.set(this.messages,message.order,rowOf(messageId,message)),this.active.has(messageId)||this.cold.activate(messageId),this.active.set(messageId,message)}discard(message){this.blockRoots.release(message.root),this.residentTailBytes-=message.tailBytes,this.hotWitnessBytes-=message.witnessBytes}};var field2=(record,key)=>Reflect.get(record,key),text=(record,key)=>String(field2(record,key)??""),ownedRaw=block=>block?{kind:"owned",root:block.root,tailRoot:block.tailRoot}:null;function foldCallBlock(calls,t,step,block){let address={messageId:t.messageId,contentIndex:t.event.contentIndex},correlation=t.correlation&&{..."clientMessageId"in t.correlation?{clientMessageId:field2(t.correlation,"clientMessageId")}:{},..."clientTurnId"in t.correlation?{clientTurnId:field2(t.correlation,"clientTurnId")}:{}};switch(t.event.type){case"toolcall_start":return calls.toolStart(step,{...address,id:t.event.id,name:t.event.toolName,arguments:t.event.seed.block.arguments,...t.resolvedToolName===void 0?{}:{resolvedName:t.resolvedToolName},...correlation?{correlation}:{}});case"toolcall_end":return calls.announce(step,{...address,id:t.event.toolCall.id,name:t.event.toolCall.name,arguments:t.event.toolCall.arguments,...t.resolvedToolName===void 0?{}:{resolvedName:t.resolvedToolName}},ownedRaw(block));case"message_block_metadata":t.event.name!==void 0&&calls.requestedName(step,address.messageId,address.contentIndex,t.event.name);return;default:return}}function foldCallTerminal(calls,messageId,message,step,live){if(message.role==="assistant")for(let[contentIndex,block]of message.content.entries())block.type==="toolCall"&&calls.announce(step,{messageId,contentIndex,id:block.id,name:block.name,arguments:block.arguments},ownedRaw(live?.get(contentIndex)))}function foldCallRecord(calls,record,scope,sequence2){let step={sequence:sequence2,scope},before=calls.table.counters.replacements,projection,call,type=field2(record,"type");switch(type){case"tool_execution_start":{let parentToolCallId=field2(record,"parentToolCallId");call=calls.executionStart(step,{toolCallId:text(record,"toolCallId"),toolName:text(record,"toolName"),args:field2(record,"args")??null,...typeof parentToolCallId=="string"?{parentToolCallId}:{}});break}case"tool_execution_update":call=calls.executionUpdate(step,text(record,"toolCallId"),field2(record,"args")??null,field2(record,"partialResult")??null);break;case"tool_execution_end":call=calls.executionEnd(step,text(record,"toolCallId"),field2(record,"result")??null,field2(record,"isError")===!0);break;case"tool_hook_status":call=calls.hook(step,text(record,"toolCallId"),record);break;case"turn_end":calls.turnEnd(step);break;case"agent_settled":calls.agentSettled(step);break;case"message_end":{let message=Object(field2(record,"message"));field2(message,"role")==="toolResult"&&(projection=calls.settle(step,text(message,"toolCallId"),field2(message,"isError")===!0));break}}let named=CALL_NAMED_RECORDS.has(String(type)),identity2=call&&calls.table.sharesIdInMessage(call)?CALL_UNKNOWN:callIdentity(call);return{changed:calls.table.counters.replacements!==before,...projection?{projection}:{},...named?{identity:identity2}:{}}}async function readCompactBlocks(texts,blocks,valid){let result=[];for(let{contentIndex,kind,root,tail,tailRoot}of blocks){valid();let text3="";for await(let chunk of texts.chunks(root,valid))text3+=chunk;for await(let chunk of texts.chunks(tailRoot??0,valid))text3+=chunk;text3+=tail,result.push({contentIndex,kind,text:text3})}return result}async function readCalls(frozen,owner,valid){let values=new CompactValues(owner.store),slot=async ref=>ref?await values.read(ref,valid):null,raw=async address=>{if(!address)return null;if(address.kind==="owned"){let text3="";for await(let chunk of owner.store.text.chunks(address.root,valid))text3+=chunk;for await(let chunk of owner.store.text.chunks(address.tailRoot,valid))text3+=chunk;return text3}for await(let[,row]of owner.messageRoots.entries(frozen.active,valid))if(row.messageId===address.messageId){for await(let[,block]of owner.blockRoots.entries(row.blocks,valid))if(block.contentIndex===address.contentIndex)return(await readCompactBlocks(owner.store.text,[block],valid))[0].text}return null},calls=[];for await(let[,call]of owner.calls.entries(frozen.calls.ref,valid))calls.push({...call,raw:await raw(call.raw),hook:await slot(call.hook),progress:await slot(call.progress),result:await slot(call.result)});return valid(),{sequence:frozen.calls.sequence,calls,counters:frozen.calls.counters}}function coldFlowOperations(flow){let remove=messageId=>({type:"message_remove",messageId});switch(flow.type){case"edit":return[{type:"message_replace",messageId:flow.messageId,message:flow.message}];case"context_edit_removal":return[remove(flow.messageId)];case"compaction":return flow.removed.map(remove);case"branch":return[...flow.removed.map(remove),...flow.installed.map(entry=>({type:"message_install",...entry}))]}}function projectionOf(call){let{phase:_phase,join:_join,raw:_raw,hook:_hook,progress:_progress,result:_result,...fields}=call;return fields}function settleCall(table,call,isError){let settled=terminal(call)?call:{...call,phase:TERMINAL_PHASE,outcome:{kind:"result",isError,source:"result_message"}};return retire(table,settled)}function frame(table,call){let children=table.childrenOf(call.runtimeItemKey),completed=children.filter(terminal);return{call,completed,everyChildCompleted:completed.length===children.length,calls:[]}}function retire(table,call){let stack=[frame(table,call)];for(;;){let top=stack[stack.length-1];if(!top)throw new Error("call retirement lost its root");let child=top.completed[top.calls.length];if(child){stack.push(frame(table,child));continue}table.remove(top.call.runtimeItemKey);let complete=top.everyChildCompleted&&top.calls.every(projection2=>projection2.nestedCalls.complete),projection={...projectionOf(top.call),nestedCalls:{calls:top.calls,complete,omitted:0}};stack.pop();let parent=stack[stack.length-1];if(!parent)return projection;parent.calls.push(projection)}}function orphaned(table,call){if(call.parentKey===null)return!1;let parent=table.get(call.parentKey);return parent===void 0||parent.join==="carrierless"}var NOT_EXECUTED={phase:TERMINAL_PHASE,outcome:{kind:"not-executed"},join:"carrierless"};function settledPatch(call){return call.startSequence===null&&!terminal(call)?NOT_EXECUTED:call.phase==="executing"?{phase:TERMINAL_PHASE,outcome:{kind:"abandoned"},join:"carrierless"}:call.join==="pending"?{join:"carrierless"}:void 0}var turnKey=(turnId,toolCallId)=>`${turnId}\0${toolCallId}`,messageKey=(messageId,contentIndex)=>`${messageId}#${contentIndex}`,sharedKey=(messageId,toolCallId)=>`${messageId}\0${toolCallId}`,CompactCallTable=class{constructor(store){this.root={header:void 0,ref:void 0},this.entries=new Map,this.byTurn=new Map,this.byMessage=new Map,this.byId=new Map,this.children=new Map,this.shared=new Set,this.slotBytes=0,this.headerBytes=0,this.counters={replacements:0,progressReplacements:0,unknown:0,late:0,collisions:0,reused:0},this.slotBytesOf=new WeakMap,this.store=store,this.values=new CompactValues(store),this.roots=new CompactComponentRoots(store,callLeaves)}get(key){return this.entries.get(key)?.call}byTurnId(turnId,toolCallId){if(turnId===null||!toolCallId)return;let key=this.byTurn.get(turnKey(turnId,toolCallId));return key===void 0?void 0:this.get(key)}byOwner(messageId,contentIndex){let key=this.byMessage.get(messageKey(messageId,contentIndex));return key===void 0?void 0:this.get(key)}newestById(toolCallId){let keys=this.byId.get(toolCallId)??[];for(let index=keys.length-1;index>=0;index--){let call=this.get(keys[index]);if(call&&(!terminal(call)||call.outcome?.kind==="abandoned"))return call}}oldestById(toolCallId,turnId,open3){let rank=entry=>`${entry.call.turnId===turnId?0:1}${entry.order}`,oldest;for(let key of this.byId.get(toolCallId)??[]){let entry=this.entries.get(key);entry&&open3(entry.call)&&(!oldest||rank(entry)<rank(oldest))&&(oldest=entry)}return oldest?.call}sharesIdInMessage(call){let{owningMessageId,toolCallId}=call;return owningMessageId!==null&&toolCallId!==null&&this.shared.has(sharedKey(owningMessageId,toolCallId))}*ofTurn(turnId){for(let{call}of this.entries.values())call.turnId===turnId&&(yield call)}*all(){for(let{call}of this.entries.values())yield call}childrenOf(parentKey){return[...this.children.get(parentKey)??[]].flatMap(key=>this.get(key)??[])}own(value){let bytes=Buffer.byteLength(JSON.stringify(value)??"");return{ref:this.values.own(value),bytes}}replaceSlot(call,field3,value){let slot=this.own(value),previous=call[field3],next={...call,[field3]:slot.ref};return this.slotBytes+=slot.bytes-(previous?this.slotBytesOf.get(previous)??0:0),this.slotBytesOf.set(slot.ref,slot.bytes),previous&&this.slotBytesOf.delete(previous),this.put(next,creationOf(call)),this.store.adjust(slot.ref.owner,-1,0),next}put(call,creation){let order=callOrder(creation.sequence,creation.k),bytes=headerBytes(call),previous=this.entries.get(call.runtimeItemKey)?.call;previous&&this.unindex(previous),this.root=this.roots.set(this.root,order,call),this.counters.replacements++,this.headerBytes+=bytes-(previous?headerBytes(previous):0),this.entries.set(call.runtimeItemKey,{call,order}),this.index(call)}remove(key){let entry=this.entries.get(key);if(!entry)return;this.unindex(entry.call);for(let slot of[entry.call.hook,entry.call.progress,entry.call.result])slot&&(this.slotBytes-=this.slotBytesOf.get(slot)??0,this.slotBytesOf.delete(slot));this.headerBytes-=headerBytes(entry.call),this.entries.delete(key);let{owningMessageId,toolCallId}=entry.call;owningMessageId!==null&&toolCallId&&!this.inMessage(owningMessageId,toolCallId).length&&this.shared.delete(sharedKey(owningMessageId,toolCallId)),this.root=this.roots.set(this.root,entry.order,void 0),this.counters.replacements++}indexedTo(turnId,toolCallId){return this.byTurn.get(turnKey(turnId,toolCallId))}repoint(turnId,toolCallId,key){this.byTurn.set(turnKey(turnId,toolCallId),key)}snapshot(){let carrierless=0;for(let{call}of this.entries.values())call.join==="carrierless"&&carrierless++;return{live:this.entries.size,carrierless,replacements:this.counters.replacements,headerBytes:this.headerBytes,slotBytes:this.slotBytes,progressReplacements:this.counters.progressReplacements,ignored:{unknown:this.counters.unknown,late:this.counters.late},collisions:this.counters.collisions,reused:this.counters.reused}}freeze(){return this.root.ref&&this.store.adjust(this.root.ref.owner,0,1),this.root.ref}release(ref){ref&&this.store.adjust(ref.owner,0,-1)}entriesOf(ref,valid){return this.roots.entries(ref,valid)}index(call){if(call.toolCallId){let slot=turnKey(call.turnId,call.toolCallId);(!this.byTurn.has(slot)||this.byTurn.get(slot)===call.runtimeItemKey)&&this.byTurn.set(slot,call.runtimeItemKey);let keys=this.byId.get(call.toolCallId)??[];keys.includes(call.runtimeItemKey)||this.byId.set(call.toolCallId,[...keys,call.runtimeItemKey]),call.owningMessageId!==null&&this.inMessage(call.owningMessageId,call.toolCallId).length>1&&this.shared.add(sharedKey(call.owningMessageId,call.toolCallId))}if(call.owningMessageId!==null&&call.contentIndex!==null&&this.byMessage.set(messageKey(call.owningMessageId,call.contentIndex),call.runtimeItemKey),call.parentKey!==null){let siblings=this.children.get(call.parentKey)??new Set;siblings.add(call.runtimeItemKey),this.children.set(call.parentKey,siblings)}}inMessage(messageId,toolCallId){return(this.byId.get(toolCallId)??[]).filter(key=>this.get(key)?.owningMessageId===messageId)}unindex(call){if(call.toolCallId){let slot=turnKey(call.turnId,call.toolCallId);this.byTurn.get(slot)===call.runtimeItemKey&&this.byTurn.delete(slot);let keys=(this.byId.get(call.toolCallId)??[]).filter(key=>key!==call.runtimeItemKey);keys.length?this.byId.set(call.toolCallId,keys):this.byId.delete(call.toolCallId)}if(call.owningMessageId!==null&&call.contentIndex!==null){let slot=messageKey(call.owningMessageId,call.contentIndex);this.byMessage.get(slot)===call.runtimeItemKey&&this.byMessage.delete(slot)}if(call.parentKey!==null){let siblings=this.children.get(call.parentKey);siblings?.delete(call.runtimeItemKey),siblings?.size===0&&this.children.delete(call.parentKey)}}};function headerBytes(call){return Buffer.byteLength(JSON.stringify(call))}function creationOf(call){let tail=call.runtimeItemKey.slice(call.runtimeItemKey.lastIndexOf(":")+1),[sequence2,k]=tail.split(".");return{sequence:Number(sequence2),k:Number(k)}}var awaitingStart=call=>call.startSequence===null&&!terminal(call),executing=call=>call.phase==="executing",stillOpen=call=>!terminal(call),awaitingCarrier=call=>call.join==="pending",FRESH={owningMessageId:null,contentIndex:null,parentKey:null,join:"pending",startSequence:null,startedAtMs:null,requestedName:null,resolvedName:null,seed:null,raw:null,input:{announced:null,started:null,prepared:null},correlation:null,hook:null,progress:null,result:null,outcome:null},CompactSessionCalls=class{constructor(store){this.sequence=0,this.mintedAt=-1,this.mintedK=0,this.table=new CompactCallTable(store)}get(key){return this.table.get(key)}toolStart(step,block){let turnId=step.scope.turnId;if(turnId===null)return;let id=block.id||null,existing=this.table.byTurnId(turnId,id),raw={kind:"active",messageId:block.messageId,contentIndex:block.contentIndex},fields={owningMessageId:block.messageId,contentIndex:block.contentIndex,seed:block.arguments,raw,...block.correlation?{correlation:block.correlation}:{}};if(existing&&existing.owningMessageId===null&&existing.parentKey===null){this.update(step,existing,{...fields,requestedName:existing.requestedName??block.name});return}existing&&this.table.counters.collisions++,this.create(step,{turnId,toolCallId:id,phase:"streaming",requestedName:block.name||null,resolvedName:block.resolvedName??null,...fields})}requestedName(step,messageId,contentIndex,name){let call=this.table.byOwner(messageId,contentIndex);call&&this.update(step,call,{requestedName:name})}announce(step,block,raw){let call=this.table.byOwner(block.messageId,block.contentIndex),turnId=step.scope.turnId;if(!call){if(turnId===null)return;this.create(step,{turnId,toolCallId:block.id||null,owningMessageId:block.messageId,contentIndex:block.contentIndex,phase:"awaiting-execution",requestedName:block.name||null,resolvedName:block.resolvedName??null,raw,input:{announced:block.arguments,started:null,prepared:null},...block.correlation?{correlation:block.correlation}:{}});return}let id=block.id||null,taken=id&&id!==call.toolCallId?this.table.indexedTo(call.turnId,id):void 0;taken!==void 0&&this.table.counters.collisions++,this.update(step,call,{...taken===void 0&&id?{toolCallId:id}:{},phase:call.phase==="streaming"?"awaiting-execution":call.phase,requestedName:block.name||call.requestedName,resolvedName:block.resolvedName??call.resolvedName,input:{...call.input,announced:block.arguments},raw:call.raw?.kind==="owned"?call.raw:raw})}executionStart(step,start){let turnId=step.scope.turnId;if(turnId===null)return;let started={startSequence:step.sequence,startedAtMs:Date.now(),resolvedName:start.toolName},announced=this.table.oldestById(start.toolCallId,turnId,awaitingStart);if(announced)return this.update(step,announced,{...started,phase:"executing",input:{...announced.input,started:start.args}});let existing=this.table.byTurnId(turnId,start.toolCallId);existing&&this.table.counters.reused++;let parent=start.parentToolCallId?this.lookup(turnId,start.parentToolCallId):void 0,created=this.create(step,{turnId,toolCallId:start.toolCallId,parentKey:parent?.runtimeItemKey??null,phase:"executing",input:{announced:null,started:start.args,prepared:null},...started});return existing&&this.table.repoint(turnId,start.toolCallId,created.runtimeItemKey),created}executionUpdate(step,toolCallId,args,partialResult){let call=this.resolve(step,toolCallId,executing);if(!call)return this.ignore("unknown");if(call.phase!=="executing")return this.ignore("late");let progressed=this.table.replaceSlot(call,"progress",partialResult);return this.table.counters.progressReplacements++,call.input.prepared===null&&this.update(step,progressed,{input:{...call.input,prepared:args}}),this.sequence=step.sequence,progressed}hook(step,toolCallId,record){let call=this.resolve(step,toolCallId,stillOpen);if(!call)return this.ignore("unknown");if(terminal(call))return this.ignore("late");let hooked=this.table.replaceSlot(call,"hook",record);return this.sequence=step.sequence,hooked}executionEnd(step,toolCallId,result,isError){let call=this.resolve(step,toolCallId,stillOpen);if(!call)return this.ignore("unknown");if(terminal(call)&&call.outcome?.kind!=="abandoned")return this.ignore("late");let ended=this.table.replaceSlot(call,"result",result);return this.update(step,ended,{phase:TERMINAL_PHASE,outcome:{kind:"result",isError,source:"execution_end"},join:orphaned(this.table,call)||call.join==="carrierless"?"carrierless":"pending"})}settle(step,toolCallId,isError){let call=this.resolve(step,toolCallId,awaitingCarrier);if(!call)return;let projection=settleCall(this.table,call,isError);return this.sequence=step.sequence,projection}turnEnd(step){let turnId=step.scope.turnId;if(turnId!==null)for(let call of[...this.table.ofTurn(turnId)])call.startSequence===null&&!terminal(call)&&this.update(step,call,NOT_EXECUTED)}agentSettled(step){for(let call of[...this.table.all()]){let patch=settledPatch(call);patch&&this.update(step,call,patch)}}freeze(){return{sequence:this.sequence,ref:this.table.freeze(),counters:this.table.snapshot()}}release(frozen){this.table.release(frozen.ref)}entries(ref,valid){return this.table.entriesOf(ref,valid)}resolve(step,toolCallId,open3){let turnId=step.scope.turnId;return this.table.oldestById(toolCallId,turnId,open3)??this.lookup(turnId,toolCallId)}lookup(turnId,toolCallId){return this.table.byTurnId(turnId,toolCallId)??this.table.newestById(toolCallId)}ignore(kind){this.table.counters[kind]++}create(step,fields){this.mintedAt!==step.sequence?(this.mintedAt=step.sequence,this.mintedK=0):this.mintedK++;let call={...FRESH,toolCallId:null,...fields,runtimeItemKey:runtimeItemKey(step.scope,step.sequence,this.mintedK)};return this.table.put(call,{sequence:step.sequence,k:this.mintedK}),this.sequence=step.sequence,call}update(step,call,patch){let next={...call,...patch};return this.table.put(next,creationOf(call)),this.sequence=step.sequence,next}};async function readSeededFields(store,fields,valid){let values=new CompactValues(store),result={};for(let[key,ref]of Object.entries(fields)){let value=await values.read(ref,valid);valid(),Object.defineProperty(result,key,{value,enumerable:!0,configurable:!0,writable:!0})}return result}async function readSeededBlock(store,block,context){let fields=await readSeededFields(store,block.fields,context.valid),signature="";for(let root of[block.signature.root,block.signature.tailRoot])for await(let part of store.text.chunks(root,context.valid))signature+=part;switch(block.type){case"text":return{...fields,text:context.text,..."textSignature"in fields?{textSignature:signature}:{}};case"thinking":return{...fields,thinking:context.text,..."thinkingSignature"in fields?{thinkingSignature:signature}:{}};case"toolCall":return{...fields,...block.phase==="open"&&block.parsedThrough>0?{arguments:parseStreamingJson(context.text.slice(0,block.parsedThrough))}:{}};default:return fields}}async function readRowBlocks(ref,components,valid){let blocks=[];for await(let[,block]of components.blockRoots.entries(ref,valid))blocks.push(block);let view=await readCompactBlocks(components.store.text,blocks,valid),content=[];for(let[index,block]of blocks.entries())block.seeded&&(content[block.contentIndex]=await readSeededBlock(components.store,block.seeded,{text:view[index].text,valid}));return{frozen:blocks,blocks:view,content}}async function readActiveMessages(frozen,components,valid){let messages=[];for await(let[,row]of components.messageRoots.entries(frozen.active,valid)){let{frozen:rows,blocks,content}=await readRowBlocks(row.blocks,components,valid);messages.push({messageId:row.messageId,fields:row.fields?await readSeededFields(components.store,row.fields,valid):void 0,blocks:rows.map((block,index)=>({contentIndex:block.contentIndex,text:blocks[index].text,phase:block.seeded?.phase,block:content[block.contentIndex]}))})}return valid(),messages}async function readCompactState(frozen,components,valid){let readMessage=async row=>{let{blocks,content}=await readRowBlocks(row.blocks,components,valid);if(!row.fields)return{blocks,...content.length?{message:{content}}:{}};let fields=await readSeededFields(components.store,row.fields,valid);return{blocks,message:"content"in fields?fields:{...fields,content},...row.correlation?{correlation:await readSeededFields(components.store,row.correlation,valid)}:{}}},messages=[];for(let[messageId,row]of await components.settled.entries(frozen.settled))messages.push({messageId,persistence:row.persistence,...await readMessage(row)});for await(let[,row]of components.messageRoots.entries(frozen.active,valid))messages.push({messageId:row.messageId,persistence:void 0,...await readMessage(row)});return valid(),{sequence:frozen.sequence,messages}}var __addDisposableResource3=function(env,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose2,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose2=value[Symbol.asyncDispose]}if(dispose2===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose2=value[Symbol.dispose],async&&(inner=dispose2)}if(typeof dispose2!="function")throw new TypeError("Object not disposable.");inner&&(dispose2=function(){try{inner.call(this)}catch(e){return Promise.reject(e)}}),env.stack.push({value,dispose:dispose2,async})}else async&&env.stack.push({async:!0});return value},__disposeResources3=(function(SuppressedError2){return function(env){function fail2(e){env.error=env.hasError?new SuppressedError2(e,env.error,"An error was suppressed during disposal."):e,env.hasError=!0}var r,s=0;function next(){for(;r=env.stack.pop();)try{if(!r.async&&s===1)return s=0,env.stack.push(r),Promise.resolve().then(next);if(r.dispose){var result=r.dispose.call(r.value);if(r.async)return s|=2,Promise.resolve(result).then(next,function(e){return fail2(e),next()})}else s|=1}catch(e){fail2(e)}if(s===1)return env.hasError?Promise.reject(env.error):Promise.resolve();if(env.hasError)throw env.error}return next()}})(typeof SuppressedError=="function"?SuppressedError:function(error2,suppressed,message){var e=new Error(message);return e.name="SuppressedError",e.error=error2,e.suppressed=suppressed,e}),CompactSessionState=class extends CompactActiveMessages{constructor(){super(...arguments),this.frozenTailBytes=0,this.cuts=new WeakMap,this.components=new CompactCurrentComponents(this.store),this.calls=new CompactSessionCalls(this.store)}get acceptedSequence(){return this.sequence}get openBroadcastDialogs(){return this.components.openBroadcast}accept(t,sequence2=this.sequence+1,turnId=null){t.type!=="message_remove"&&this.store.assertReadable();let step={sequence:sequence2,scope:this.callScope(turnId)};if((t.type==="message_status"||t.type==="message_remove")&&!this.active.has(t.messageId))throw new CompactTransitionError("cold_operation_required","use applyCold after acceptance");switch(t.type){case"seeded_block":{let env_1={stack:[],error:void 0,hasError:!1};try{let address={messageId:t.messageId,contentIndex:t.event.contentIndex},old=this.active.get(t.messageId)?.blocks.get(address.contentIndex);if(old?.epoch!==void 0&&old.epoch!==t.epoch)throw new CompactTransitionError("wrong_epoch",t.messageId);if(!Number.isSafeInteger(address.contentIndex)||address.contentIndex<0)throw new CompactTransitionError("unknown_block",String(address.contentIndex));let starting="seed"in t.event||t.event.type==="message_block_state"&&t.event.phase==="insert"&&(!old||old.seeded?.phase==="initial");starting&&this.identity.validate(t);let draft=__addDisposableResource3(env_1,new CompactSeededDraft(this.store),!1),fields=updateFields(draft,this.active.get(t.messageId)?.fields,t),block=foldSeededBlock(draft,old?.seeded,t.event);this.publish(address,{...block.body,seeded:block,epoch:t.epoch},fields),starting&&this.identity.commit(t),foldCallBlock(this.calls,t,step,this.active.get(t.messageId)?.blocks.get(address.contentIndex));break}catch(e_1){env_1.error=e_1,env_1.hasError=!0}finally{__disposeResources3(env_1)}}case"seeded_message":{let{message,terminal:terminal2}=recordMessage(t.record);terminal2&&foldCallTerminal(this.calls,t.messageId,message,step,this.active.get(t.messageId)?.blocks),this.acceptMessage(t);break}case"block_start":this.start(t);break;case"block_delta":{let block={...this.block(t)};adjustBlock(this.store,block,1);try{deltaBlock(this.store,block,t.offset,t.text),this.publish(t,block)}finally{adjustBlock(this.store,block,-1)}break}case"block_replace":{let block={...this.block(t),root:0,tail:"",tailRoot:0,units:0,covered:0,witness:""};appendBlock(this.store,block,t.text),block.emitted=block.units,this.publish(t,block),adjustBlock(this.store,block,-1);break}case"message_status":this.settle(t.messageId,t.persistence);break;case"message_remove":this.dropActive(t.messageId);break;case"component":this.components.apply(t.record);break}return this.sequence=sequence2,sequence2}acceptCall(record,sequence2,turnId){this.store.assertReadable();let fold=foldCallRecord(this.calls,record,this.callScope(turnId),sequence2);return fold.changed&&(this.sequence=sequence2),fold}callOwning(messageId,contentIndex){return this.calls.table.byOwner(messageId,contentIndex)}applyCold(t){return this.cold.run(t,this.sequence)}applyColdFlow(flow){return this.cold.runAll(coldFlowOperations(flow),this.sequence)}freeze(){this.store.assertReadable();let active=this.messages.ref,tails=this.residentTailBytes;active&&this.store.adjust(active.owner,0,1),this.frozenTailBytes+=tails;let frozen={sequence:this.sequence,active,settled:this.settled.freeze(),components:this.components.freeze(),calls:this.calls.freeze()};return this.cuts.set(frozen,new CompactReadLease(()=>{active&&this.store.adjust(active.owner,0,-1),this.frozenTailBytes-=tails,this.settled.release(frozen.settled),this.components.release(frozen.components),this.calls.release(frozen.calls)})),frozen}release(frozen){this.cutLease(frozen).release()}async read(frozen){return this.under(frozen,valid=>readCompactState(frozen,{...this.roots,settled:this.settled},valid))}readActive(frozen){return this.under(frozen,valid=>readActiveMessages(frozen,this.roots,valid))}readComponents(frozen){return this.under(frozen,valid=>this.components.read(frozen.components,valid))}readCalls(frozen){let owner={calls:this.calls,...this.roots};return this.under(frozen,valid=>readCalls(frozen,owner,valid))}cutStorage(frozen,use){return this.under(frozen,valid=>use(this.store,valid))}get roots(){return{store:this.store,blockRoots:this.blockRoots,messageRoots:this.messageRoots}}callScope(turnId){return{sessionEpoch:this.sessionEpoch,turnId}}cutLease(frozen){let lease=this.cuts.get(frozen);if(!lease)throw new CompactReadError("ownership");return lease}under(frozen,read){let lease=this.cutLease(frozen),valid=()=>{lease.assert(),this.store.assertReadable()};return valid(),lease.run(()=>read(valid))}storageStatus(){return{...this.store.status(),...this.settled.status(),residentTailBytes:this.residentTailBytes,frozenTailBytes:this.frozenTailBytes,hotWitnessBytes:this.hotWitnessBytes,residentComponentNodes:this.blockRoots.residentNodes+this.messageRoots.residentNodes,residentComponentIndexBytes:(this.blockRoots.residentNodes+this.messageRoots.residentNodes)*192,residentTextNodes:this.store.text.residentNodes,residentTextIndexBytes:this.store.text.residentNodes*192}}async idle(){await this.cold.idle(),await this.store.idle()}async retire(){await this.store.retire(),await this.cold.idle()}start(t){if(this.identity.validate(t),this.active.get(t.messageId)?.blocks.has(t.contentIndex))throw new CompactTransitionError("duplicate_block",`${t.messageId}#${t.contentIndex}`);let covered=t.coveredCodeUnits;if(!Number.isInteger(covered)||covered!==0&&covered!==t.seed.length)throw new CompactTransitionError("invalid_coverage",`${covered} of ${t.seed.length} seed code units`);let block={kind:t.kind,root:0,tail:"",tailRoot:0,units:0,emitted:covered>0?0:t.seed.length,covered,witness:t.seed.slice(0,covered)};appendBlock(this.store,block,t.seed),this.publish(t,block),adjustBlock(this.store,block,-1),this.identity.commit(t)}acceptMessage(t){let env_2={stack:[],error:void 0,hasError:!1};try{let live=this.active.get(t.messageId);if(live?.epoch!==void 0&&live.epoch!==t.epoch)throw new CompactTransitionError("wrong_epoch",t.messageId);let{message,terminal:terminal2}=recordMessage(t.record);if(!terminal2&&[...live?.blocks.values()??[]].some(block=>block.seeded?.phase!=="initial"))throw new CompactTransitionError("invalid_phase","a start cannot rewind streamed blocks");live||this.identity.validate(t);let draft=__addDisposableResource3(env_2,new CompactSeededDraft(this.store),!1),next=seedMessage(draft,message,terminal2,live?.blocks,t),correlation=live?.correlation??(t.correlation&&draft.fields(t.correlation));this.install(t.messageId,{fields:next.fields,correlation,epoch:t.epoch},next.blocks),live||this.identity.commit(t),t.record.type==="message_end"&&this.settle(t.messageId,"pending")}catch(e_2){env_2.error=e_2,env_2.hasError=!0}finally{__disposeResources3(env_2)}}};async function compactColdFlow(flow,messagesOf){let known=async entryIds=>(await messagesOf(entryIds)).filter(messageId=>messageId!==void 0);switch(flow.kind){case"edit":case"context_edit_removal":{let[messageId]=await messagesOf([flow.targetId]);return messageId===void 0?void 0:flow.kind==="edit"?{type:"edit",messageId,message:flow.message}:{type:"context_edit_removal",messageId}}case"compaction":return{type:"compaction",removed:await known(flow.removedIds)};case"branch":{let installedIds=await messagesOf(flow.installed.map(entry=>entry.id)),installed=flow.installed.flatMap(({message},index)=>{let messageId=installedIds[index];return messageId===void 0?[]:[{messageId,message,persistence:"appended"}]});return{type:"branch",removed:await known(flow.removedIds),installed}}}}var CompactLaneCurrent=class{constructor(){this.cleanup=Promise.resolve(),this.coldChain=Promise.resolve(),this.owners=new WeakMap,this.refused=0}get refusedRecords(){return this.refused}get openBroadcastDialogs(){return this.state?.openBroadcastDialogs}bootstrap(options){this.retire(),this.state=new CompactSessionState(options)}admits(record,type){if(type!=="message_end"&&!CALL_RECORDS.has(type)&&!COMPONENT_RECORDS.has(type))return!0;try{return assertProtocolDepth(record),!0}catch(cause){let limit=protocolDepthLimitOf(cause);return limit===void 0?this.fail(cause):this.refuse(limit),!1}}fold(unit,sequence2,turnId=null){this.apply(()=>laneTransition(unit),sequence2,turnId)}foldComponent(record,sequence2){this.apply(()=>({type:"component",record:protocolClone(record)}),sequence2)}foldCall(record,sequence2,turnId){if(this.state)try{return this.state.acceptCall(protocolClone(record),sequence2,turnId)}catch(cause){this.fail(cause);return}}callOwning(messageId,contentIndex){return this.state?.callOwning(messageId,contentIndex)}transcript(transition,settled,epoch){transition.kind==="append"&&transition.owningMessageId&&transition.recoveryEpoch===epoch&&this.status(transition.owningMessageId,"appended");let flow=transition.kind==="append"||transition.kind==="leaf"?transition.flow:void 0;flow&&this.cold(async state=>{let cold=await compactColdFlow(flow,entryIds=>settled.messagesOf(entryIds));return cold&&state.applyColdFlow(cold)})}status(messageId,persistence){this.cold(state=>state.applyCold({type:"message_status",messageId,persistence}))}cold(step){let state=this.state;state&&(this.coldChain=this.coldChain.then(async()=>{try{let failed=[await step(state)??[]].flat().find(outcome=>outcome.kind==="failed");failed&&this.state===state&&this.fail(failed.cause)}catch(cause){this.state===state&&this.fail(cause)}}))}apply(build,sequence2,turnId=null){if(this.state)try{let transition=build();transition&&this.state.accept(transition,sequence2,turnId)}catch(cause){this.fail(cause)}}freeze(){let state=this.state;if(state)try{let cut=state.freeze();return this.owners.set(cut,state),cut}catch(cause){this.fail(cause);return}}release(cut){cut&&this.owners.get(cut)?.release(cut)}read(cut){return this.owned(cut,(owner,held)=>owner.read(held))}readComponents(cut){return this.owned(cut,(owner,held)=>owner.readComponents(held))}readActive(cut){return this.owned(cut,(owner,held)=>owner.readActive(held))}readCalls(cut){return this.owned(cut,(owner,held)=>owner.readCalls(held))}cutStorage(cut,use){return this.owned(cut,(owner,held)=>owner.cutStorage(held,use))}owned(cut,read){let owner=cut&&this.owners.get(cut);return cut?owner?read(owner,cut):Promise.reject(new CompactReadError("ownership")):Promise.reject(new CompactReadError("unavailable"))}retire(){let state=this.state;this.state=void 0,state&&(this.cleanup=Promise.all([this.cleanup,state.retire()]).then(()=>{}))}idle(){return Promise.all([this.cleanup,this.coldChain,this.state?.idle()]).then(()=>{})}fail(cause){let limit=protocolDepthLimitOf(cause);if(limit!==void 0)return this.refuse(limit);if(!this.state)return;let reason=cause instanceof Error&&"reason"in cause?String(cause.reason):String(cause);process.stderr.write(`senpi rpc acceptance: compact current state unavailable: ${reason}
|
|
6
7
|
`),this.retire()}refuse(limit){this.refused+=1,process.stderr.write(`senpi rpc acceptance: compact record refused: unsupported_value (depth above ${limit})
|
|
7
8
|
`)}};var AcceptedRootReads=class{constructor(){this.live=new Set,this.rootOwners=new WeakMap,this.current=new CompactLaneCurrent}get liveRoots(){return this.live.size}holds(root){return this.live.has(root)}readCurrent(root){if(!this.live.has(root))throw new Error("accepted root released");return this.current.read(root.current)}readCurrentComponents(root){if(!this.live.has(root))throw new Error("accepted root released");return this.current.readComponents(root.current)}readCurrentActive(root){if(!this.live.has(root))throw new Error("accepted root released");return this.current.readActive(root.current)}readCurrentCalls(root){if(!this.live.has(root))throw new Error("accepted root released");return this.current.readCalls(root.current)}cutStorage(root,use){return this.current.cutStorage(root.current,use)}readSettled(root){return this.settledOwner(root).read(root.settled)}settledOf(root){return this.settledOwner(root).reader(root.settled)}settledOwner(root){let owner=this.rootOwners.get(root);if(!owner||!this.live.has(root))throw new Error("accepted root released");return owner}};import{createHash as createHash2,randomUUID}from"node:crypto";import{constants}from"node:fs";import{lstat,mkdir as mkdir2,open,rename,rm as rm2}from"node:fs/promises";import{join as join2}from"node:path";var RANGE=1024;async function syncDirectory(path){let directory=await open(path,"r");try{await directory.sync()}finally{await directory.close()}}var SessionGenerations=class{constructor(agentDir){this.issued=0,this.ceiling=Number.MAX_SAFE_INTEGER,this.failed=!1,this.closed=!1,this.binding=0,this.pending=Promise.resolve(),this.agentDir=agentDir,this.dir=join2(agentDir,`.senpi-recovery-generations-${process.getuid?.()??"user"}`)}bind(sessionId){let path=join2(this.dir,createHash2("sha256").update(sessionId).digest("hex"));if(this.closed||path===this.path)return this.pending;let previous=this.path;return this.path=path,this.binding++,this.pending=this.pending.then(async()=>{await this.release?.(),this.release=void 0,this.failed=!1,this.issued=this.ceiling=previous?Math.max(this.issued,this.ceiling):this.issued,await this.initialize(path)}).catch(cause=>this.unavailable(cause)).finally(()=>{this.binding--}),this.pending}async initialize(path){if(await mkdir2(this.dir,{mode:448,recursive:!0}),!privateRootStat(await lstat(this.dir)))throw new CompactReadError("ownership");await syncDirectory(this.agentDir),this.release=await acquireOwnershipSafeLock(`${path}.lock`,{retries:{retries:0,minTimeout:0,maxTimeout:1}});try{let file=await open(path,constants.O_RDONLY|(constants.O_NOFOLLOW??0));try{let stat=await file.stat();if(!stat.isFile()||stat.size>32)throw new CompactReadError("integrity");let text3=await file.readFile("utf8"),floor=Number(text3);if(!/^(0|[1-9]\d*)$/.test(text3)||!Number.isSafeInteger(floor))throw new CompactReadError("integrity");this.issued=this.ceiling=Math.max(this.issued,floor)}finally{await file.close()}}catch(cause){if(!(cause instanceof Error&&"code"in cause&&cause.code==="ENOENT"))throw cause}await this.reserve(path)}next(){if(this.closed||this.failed||this.binding>0||this.issued>=this.ceiling)return;let generation=++this.issued;return this.path&&this.ceiling-generation===RANGE/2&&(this.pending=this.reserve(this.path).catch(cause=>this.unavailable(cause))),generation}async reserve(path){let next=Math.min(Number.MAX_SAFE_INTEGER,this.ceiling+RANGE);if(next<=this.ceiling)throw new CompactReadError("unavailable");let temporary=`${path}.${randomUUID()}.tmp`;try{let file=await open(temporary,constants.O_WRONLY|constants.O_CREAT|constants.O_EXCL,384);try{await file.writeFile(String(next)),await file.sync()}finally{await file.close()}await rename(temporary,path),await syncDirectory(this.dir),this.ceiling=next}finally{await rm2(temporary,{force:!0})}}unavailable(cause){if(this.failed=!0,!(cause instanceof Error))throw cause}idle(){return this.pending}close(){this.closed||(this.closed=!0,this.pending=this.pending.then(async()=>{await this.release?.(),this.release=void 0}))}};var RETIRED_SETTLED=Object.freeze({base:void 0,overrides:void 0}),SessionAcceptanceLane=class extends AcceptedRootReads{constructor(storage,diagnose=reason=>process.stderr.write(`senpi rpc acceptance: settled transition: ${reason}
|
|
8
|
-
`),agentDir=recoveryAgentDir){super(),this.epoch="",this.sequence=0,this.activeMessageId=null,this.turnId=null,this.correlation=null,this.refusedCorrelations=0,this.storageRetired=!1,this.nonce=randomUUID2(),this.cleanup=Promise.resolve(),this.compact=()=>({settled:this.settled,current:this.current}),this.generations=new SessionGenerations(agentDir),this.storage={...storage,dir:storage?.dir??tmpdir(),health:storage?.health??new RecoveryStorageHealth(agentDir)},this.diagnose=diagnose;let dir=join3(storage?.dir??tmpdir(),`senpi-transcript-${randomUUID2()}`);this.staging=new TransferStaging(new CompactContentStore({...this.storage,dir})),this.transcript=new AcceptedTranscript(this.staging)}get recoveryEpoch(){return this.nonce}get acceptedSequence(){return this.sequence}get sessionEpoch(){return this.epoch}get retired(){return this.retiredAs!==void 0}get retirement(){return this.retiredAs}get openBroadcastDialogs(){return this.retired?void 0:this.current.openBroadcastDialogs}bootstrap(input,nonce=randomUUID2()){this.retired||(this.settled&&this.retireSettled(),this.nonce=nonce,input.epochSignal&&Buffer.from(nonce,"ascii").copy(Buffer.from(input.epochSignal)),this.settled=new CompactSettledMessages(nonce,{...this.storage,dir:join3(this.storage?.dir??tmpdir(),`senpi-settled-${randomUUID2()}`)},this.diagnose),this.epoch=randomUUID2(),this.current.bootstrap({...this.storage,dir:join3(this.storage?.dir??tmpdir(),`senpi-current-${randomUUID2()}`),epoch:nonce,sessionEpoch:this.epoch}),this.sequence=0,this.transcript.release(),this.transcript=new AcceptedTranscript(this.staging),this.transcript.bootstrap(input.transcript),this.activeMessageId=null,this.turnId=null,this.correlation=null,this.refusedCorrelations=0)}applyTranscript(transitions){if(!(this.retired||this.epoch===""))for(let transition of transitions)this.sequence+=1,this.transcript.apply(transition),foldCompactTransition(this.compact(),transition,this.transcript.available,this.nonce)}accept(record,carrier,canonical,canonicalRefused=!1){let type=field(record,"type");if(this.retired||this.epoch===""||typeof type!="string"||!SEQUENCED.has(type))return;this.beforeAccept?.(record);let folds=!canonicalRefused&&this.current.admits(record,type),correlation=folds?correlationChange(this.correlation,this.turnId,record):void 0,at={sequence:this.sequence+(correlation?1:0),turnId:this.turnId},place=admitRecord(this.current,record,type,at,folds);if(!place)return;!folds&&correlationChange(this.correlation,this.turnId,record)&&(this.refusedCorrelations+=1),correlation&&(this.correlation=Object.freeze({sequence:place.sequence-1,...correlation}));let{turnId,call}=place;this.turnId=turnId,this.sequence=place.sequence,(type==="turn_end"||type==="agent_end")&&(this.turnId=null);let messageId=type.startsWith("message_")&&this.settled.valid(carrier)?carrier.messageId:null;return type==="message_start"&&(this.activeMessageId=messageId),folds&&foldCompactRecord(this.compact(),{record,type,carrier,canonical,sequence:this.sequence,turnId,call:call?.projection}),type==="message_end"&&this.activeMessageId===messageId&&(this.activeMessageId=null),{sessionEpoch:this.epoch,sequence:this.sequence,historyVersion:this.transcript.historyVersion,messageId,turnId}}acceptControl(unit){if(!(this.retired||this.epoch===""||!unit))return this.beforeAccept?.({type:"materializer_control"}),this.sequence+=1,this.current.fold(unit,this.sequence),this.sequence}compactUnavailable(cause){this.retired||this.current.fail(cause)}freeze(){let root=Object.freeze({sessionEpoch:this.epoch,sequence:this.sequence,activeMessageId:this.activeMessageId,turnId:this.turnId,correlation:this.correlation,refusedCorrelations:this.refusedCorrelations,transcript:this.transcript.freeze(),settled:this.retired?RETIRED_SETTLED:this.settled.freeze(),current:this.retired?void 0:this.current.freeze()});return this.retired||(this.rootOwners.set(root,this.settled),this.live.add(root),root.transcript.tail.retainCut(root.transcript.count)),root}release(root){this.live.delete(root)&&(root.transcript.tail.releaseCut(root.transcript.count),this.rootOwners.get(root)?.release(root.settled),this.current.release(root.current),this.retired&&this.retireStorage())}storageStatus(){return{...this.settled.storageStatus(),refusedRecords:this.current.refusedRecords,transcript:this.staging.status()}}async idle(){await this.generations.idle(),await this.cleanup,await this.settled.idle(),await this.current.idle(),await this.staging.idle()}retireSettled(){for(let root of this.live)this.release(root);this.cleanup=Promise.all([this.cleanup,this.settled.retire()]).then(()=>{}),this.cleanup.catch(()=>this.diagnose("retired_owner"))}retire(reason,keep=new Set){this.retiredAs??=reason,this.generations.close(),this.transcript=new AcceptedTranscript(this.staging);for(let root of this.live)keep.has(root)||this.release(root);this.retireStorage()}retireStorage(){this.storageRetired||this.live.size>0||(this.storageRetired=!0,this.settled&&this.retireSettled(),this.current.retire(),this.cleanup=Promise.all([this.cleanup,this.staging.close()]).then(()=>{}),this.cleanup.catch(()=>this.diagnose("retired_owner")))}};var DEFAULT_OPEN_IN_PROGRESS_WAIT_MS=45e3,OPEN_IN_PROGRESS_WAIT_RETRY_MS=2e3;function openInProgressWaitMs(){let override=Number(process.env.SENPI_OPEN_IN_PROGRESS_WAIT_MS);return Number.isFinite(override)&&override>0?override:DEFAULT_OPEN_IN_PROGRESS_WAIT_MS}var OpenInProgressWaitError=class extends Error{};function openingOwner(sessionPath){return{instanceId:hostInstanceId(),pid:process.pid,processStartTime:null,sessionPath,attached:!0,current:!0}}function waitWithDeadline(openCompletion,waitMs){let timer;return Promise.race([openCompletion,new Promise((_resolve,reject)=>{timer=setTimeout(()=>reject(new OpenInProgressWaitError),waitMs)})]).finally(()=>{timer!==void 0&&clearTimeout(timer)})}async function attachToOpenSession(entries,sessionPath,profile,options,pathReservations,now){let existing=[...entries].find(([,entry2])=>entry2.reservationKey===sessionPath&&entry2.state==="open");if(!existing){let inFlight=[...entries].find(([,entry2])=>entry2.reservationKey===sessionPath&&entry2.state==="opening");if(inFlight?.[1].openCompletion!==void 0){try{await waitWithDeadline(inFlight[1].openCompletion,openInProgressWaitMs())}catch(cause){throw cause instanceof OpenInProgressWaitError?new RpcSessionRegistryError("session_path_in_use","the session is still opening",{reason:"open_in_progress",retry_after_ms:OPEN_IN_PROGRESS_WAIT_RETRY_MS,owner:openingOwner(sessionPath)}):new RpcSessionRegistryError("session_path_in_use","the in-flight open failed",{reason:"open_failed",retry_after_ms:OPEN_IN_PROGRESS_WAIT_RETRY_MS})}return attachToOpenSession(entries,sessionPath,profile,options,pathReservations,now)}throw new RpcSessionRegistryError("session_path_in_use","the session is still being released",{reason:"path_still_held",retry_after_ms:OPEN_IN_PROGRESS_WAIT_RETRY_MS})}let[handle2,entry]=existing,wasParked=entry.retainOnDisconnect===!0&&entry.attachments===0;if(entry.attachments+=1,entry.detachedAt=void 0,pathReservations?.setAttached(sessionPath,!0),options?.retainOnDisconnect&&(entry.retainOnDisconnect=!0),!entry.durableSessionId)throw new RpcSessionRegistryError("session_path_in_use");return profile.promptSurface!==void 0&&profile.promptSurface!==entry.profile.promptSurface&&(entry.profile=frozenProfile({...entry.profile,promptSurface:profile.promptSurface}),entry.runtime?.setPromptSurface(profile.promptSurface)),profile.browserEngine!==void 0&&profile.browserEngine!==entry.profile.browserEngine&&(entry.profile=frozenProfile({...entry.profile,browserEngine:profile.browserEngine}),entry.runtime?.setBrowserEngine(profile.browserEngine)),profile.permissionPreset!==void 0&&(entry.profile=frozenProfile({...entry.profile,permissionPreset:profile.permissionPreset}),entry.runtime?.setPermissionPreset(profile.permissionPreset)),entry.lastCommandAt=now,wasParked&&(entry.lifecycleMutex=entry.lifecycleMutex.then(()=>entry.runtime?.emitAttachmentEvent("session_resumed")),await entry.lifecycleMutex),{sessionId:handle2,durableSessionId:entry.durableSessionId,sessionPath:entry.sessionPath,attached:!0}}import{existsSync as existsSync2}from"node:fs";function resolveMovedProfile(requested){let profile={...requested,cwd:resolveMovedPath(requested.cwd),...requested.sessionPath?{sessionPath:resolveMovedPath(requested.sessionPath)}:{}};if(profile.sessionPath!==requested.sessionPath&&profile.sessionPath&&!existsSync2(profile.sessionPath))throw new RpcSessionRegistryError("open_failed",`moved session file does not exist: ${profile.sessionPath}`);return profile}import{existsSync as existsSync3}from"node:fs";function createEntrySwitchSession(entry,createRuntime,syncRuntimeMetadata2){return(sessionPath,options)=>{let operation=entry.lifecycleMutex.then(async()=>{if(entry.state!=="open"||!entry.runtime)throw new RpcSessionRegistryError("unknown_session");let runtime=entry.runtime,cwdOverride=options?.cwdOverride,cwdChanged=cwdOverride!==void 0&&runtime.session.sessionManager.getCwd()!==cwdOverride,result=await runtime.switchSession(sessionPath,options);if(result.cancelled||!cwdChanged)return result;let replacement=new AgentSessionRuntime(runtime.session,runtime.services,createRuntime,[...runtime.diagnostics],runtime.modelFallbackMessage,runtime.launchProfile);return replacement.setRebindSession(entry.rebindSession),ClientAdmissions.sealQueuedOnReplace(replacement),EffectLedger.sealOnReplace(replacement),runtime.releaseSessionHold(),entry.runtime=replacement,syncRuntimeMetadata2(),result});return entry.lifecycleMutex=operation.then(()=>{},()=>{}),operation}}function buildOpeningEntry(input){let{profile,sessionPath,requestedDurableId,options}=input,isResume=sessionPath!==void 0&&existsSync3(sessionPath),sessionStartEvent=isResume||profile.attended===!1?{type:"session_start",reason:isResume?"resume":"startup",...profile.attended===!1?{attended:!1}:{}}:void 0,storedProfile=frozenProfile({...profile,...sessionPath?{sessionPath}:{}}),runtimeProfile=isResume?frozenProfile({...storedProfile,creationModel:void 0,initialThinkingLevel:void 0}):storedProfile,settleOpen,openCompletion=new Promise((resolve2,reject)=>{settleOpen={resolve:resolve2,reject}});openCompletion.catch(()=>{});let entry={state:"opening",scope:new ProviderScope,profile:storedProfile,...sessionIdentity(storedProfile),sessionPath,reservationKey:sessionPath,cwd:storedProfile.cwd,attachments:1,retainOnDisconnect:options?.retainOnDisconnect===!0,lastCommandAt:input.now,lifecycleMutex:Promise.resolve(),openCompletion};return entry.switchSession=createEntrySwitchSession(entry,input.createRuntime,input.sync),requestedDurableId!==void 0&&(entry.durableSessionId=requestedDurableId),{entry,storedProfile,runtimeProfile,sessionStartEvent,settleOpen}}function sessionIsWriting(entry){return entry.worker?.busy===!0||entry.runtime?.session.isSessionBusy===!0}function reportDetachedFailure(handle2,cause){process.stderr.write(`senpi rpc session ${handle2} teardown failed: ${String(cause)}
|
|
9
|
+
`),agentDir=recoveryAgentDir){super(),this.epoch="",this.sequence=0,this.activeMessageId=null,this.turnId=null,this.correlation=null,this.refusedCorrelations=0,this.identities=new MessageIdentities,this.storageRetired=!1,this.nonce=randomUUID2(),this.cleanup=Promise.resolve(),this.compact=()=>({settled:this.settled,current:this.current}),this.generations=new SessionGenerations(agentDir),this.storage={...storage,dir:storage?.dir??tmpdir(),health:storage?.health??new RecoveryStorageHealth(agentDir)},this.diagnose=diagnose;let dir=join3(storage?.dir??tmpdir(),`senpi-transcript-${randomUUID2()}`);this.staging=new TransferStaging(new CompactContentStore({...this.storage,dir})),this.transcript=new AcceptedTranscript(this.staging)}get recoveryEpoch(){return this.nonce}get acceptedSequence(){return this.sequence}get sessionEpoch(){return this.epoch}get retired(){return this.retiredAs!==void 0}get retirement(){return this.retiredAs}get openBroadcastDialogs(){return this.retired?void 0:this.current.openBroadcastDialogs}bootstrap(input,nonce=randomUUID2()){this.retired||(this.settled&&this.retireSettled(),this.identities.reset(),this.nonce=nonce,input.epochSignal&&Buffer.from(nonce,"ascii").copy(Buffer.from(input.epochSignal)),this.settled=new CompactSettledMessages(nonce,{...this.storage,dir:join3(this.storage?.dir??tmpdir(),`senpi-settled-${randomUUID2()}`)},this.diagnose),this.epoch=randomUUID2(),this.current.bootstrap({...this.storage,dir:join3(this.storage?.dir??tmpdir(),`senpi-current-${randomUUID2()}`),epoch:nonce,sessionEpoch:this.epoch}),this.sequence=0,this.transcript.release(),this.transcript=new AcceptedTranscript(this.staging),this.transcript.bootstrap(input.transcript),this.activeMessageId=null,this.turnId=null,this.correlation=null,this.refusedCorrelations=0)}applyTranscript(transitions){if(!(this.retired||this.epoch===""))for(let transition of transitions){this.sequence+=1,this.transcript.apply(transition);let owner=foldCompactTransition(this.compact(),transition,this.transcript.available,this.nonce);this.identities.joined(transition,owner)}}accept(record,carrier,canonical,canonicalRefused=!1){let type=field(record,"type");if(this.identities.clear(),this.retired||this.epoch===""||typeof type!="string"||!SEQUENCED.has(type))return;this.beforeAccept?.(record);let folds=!canonicalRefused&&this.current.admits(record,type),correlation=folds?correlationChange(this.correlation,this.turnId,record):void 0,at={sequence:this.sequence+(correlation?1:0),turnId:this.turnId},place=admitRecord(this.current,record,type,at,folds);if(!place)return;!folds&&correlationChange(this.correlation,this.turnId,record)&&(this.refusedCorrelations+=1),correlation&&(this.correlation=Object.freeze({sequence:place.sequence-1,...correlation}));let{turnId,call}=place;this.turnId=turnId,this.sequence=place.sequence,(type==="turn_end"||type==="agent_end")&&(this.turnId=null);let messageId=type.startsWith("message_")&&this.settled.valid(carrier)?carrier.messageId:null;type==="message_start"&&(this.activeMessageId=messageId);let unit={record,type,carrier,canonical,sequence:this.sequence,turnId,call};return this.identities.hold(type,this.sequence,record,folds?foldCompactRecord(this.compact(),unit):void 0),type==="message_end"&&this.activeMessageId===messageId&&(this.activeMessageId=null),{sessionEpoch:this.epoch,sequence:this.sequence,historyVersion:this.transcript.historyVersion,messageId,turnId}}acceptControl(unit){if(!(this.retired||this.epoch===""||!unit))return this.beforeAccept?.({type:"materializer_control"}),this.sequence+=1,this.current.fold(unit,this.sequence),this.sequence}compactUnavailable(cause){this.retired||this.current.fail(cause)}freeze(){let root=Object.freeze({sessionEpoch:this.epoch,sequence:this.sequence,activeMessageId:this.activeMessageId,turnId:this.turnId,correlation:this.correlation,refusedCorrelations:this.refusedCorrelations,transcript:this.transcript.freeze(),settled:this.retired?RETIRED_SETTLED:this.settled.freeze(),current:this.retired?void 0:this.current.freeze()});return this.retired||(this.rootOwners.set(root,this.settled),this.live.add(root),root.transcript.tail.retainCut(root.transcript.count)),root}release(root){this.live.delete(root)&&(root.transcript.tail.releaseCut(root.transcript.count),this.rootOwners.get(root)?.release(root.settled),this.current.release(root.current),this.retired&&this.retireStorage())}storageStatus(){return{...this.settled.storageStatus(),refusedRecords:this.current.refusedRecords,...this.identities.status(),transcript:this.staging.status()}}async idle(){await this.generations.idle(),await this.cleanup,await this.settled.idle(),await this.current.idle(),await this.staging.idle()}retireSettled(){for(let root of this.live)this.release(root);this.cleanup=Promise.all([this.cleanup,this.settled.retire()]).then(()=>{}),this.cleanup.catch(()=>this.diagnose("retired_owner"))}retire(reason,keep=new Set){this.retiredAs??=reason,this.identities.reset(),this.generations.close(),this.transcript=new AcceptedTranscript(this.staging);for(let root of this.live)keep.has(root)||this.release(root);this.retireStorage()}retireStorage(){this.storageRetired||this.live.size>0||(this.storageRetired=!0,this.settled&&this.retireSettled(),this.current.retire(),this.cleanup=Promise.all([this.cleanup,this.staging.close()]).then(()=>{}),this.cleanup.catch(()=>this.diagnose("retired_owner")))}};var DEFAULT_OPEN_IN_PROGRESS_WAIT_MS=45e3,OPEN_IN_PROGRESS_WAIT_RETRY_MS=2e3;function openInProgressWaitMs(){let override=Number(process.env.SENPI_OPEN_IN_PROGRESS_WAIT_MS);return Number.isFinite(override)&&override>0?override:DEFAULT_OPEN_IN_PROGRESS_WAIT_MS}var OpenInProgressWaitError=class extends Error{};function openingOwner(sessionPath){return{instanceId:hostInstanceId(),pid:process.pid,processStartTime:null,sessionPath,attached:!0,current:!0}}function waitWithDeadline(openCompletion,waitMs){let timer;return Promise.race([openCompletion,new Promise((_resolve,reject)=>{timer=setTimeout(()=>reject(new OpenInProgressWaitError),waitMs)})]).finally(()=>{timer!==void 0&&clearTimeout(timer)})}async function attachToOpenSession(entries,sessionPath,profile,options,pathReservations,now){let existing=[...entries].find(([,entry2])=>entry2.reservationKey===sessionPath&&entry2.state==="open");if(!existing){let inFlight=[...entries].find(([,entry2])=>entry2.reservationKey===sessionPath&&entry2.state==="opening");if(inFlight?.[1].openCompletion!==void 0){try{await waitWithDeadline(inFlight[1].openCompletion,openInProgressWaitMs())}catch(cause){throw cause instanceof OpenInProgressWaitError?new RpcSessionRegistryError("session_path_in_use","the session is still opening",{reason:"open_in_progress",retry_after_ms:OPEN_IN_PROGRESS_WAIT_RETRY_MS,owner:openingOwner(sessionPath)}):new RpcSessionRegistryError("session_path_in_use","the in-flight open failed",{reason:"open_failed",retry_after_ms:OPEN_IN_PROGRESS_WAIT_RETRY_MS})}return attachToOpenSession(entries,sessionPath,profile,options,pathReservations,now)}throw new RpcSessionRegistryError("session_path_in_use","the session is still being released",{reason:"path_still_held",retry_after_ms:OPEN_IN_PROGRESS_WAIT_RETRY_MS})}let[handle2,entry]=existing,wasParked=entry.retainOnDisconnect===!0&&entry.attachments===0;if(entry.attachments+=1,entry.detachedAt=void 0,pathReservations?.setAttached(sessionPath,!0),options?.retainOnDisconnect&&(entry.retainOnDisconnect=!0),!entry.durableSessionId)throw new RpcSessionRegistryError("session_path_in_use");return profile.promptSurface!==void 0&&profile.promptSurface!==entry.profile.promptSurface&&(entry.profile=frozenProfile({...entry.profile,promptSurface:profile.promptSurface}),entry.runtime?.setPromptSurface(profile.promptSurface)),profile.browserEngine!==void 0&&profile.browserEngine!==entry.profile.browserEngine&&(entry.profile=frozenProfile({...entry.profile,browserEngine:profile.browserEngine}),entry.runtime?.setBrowserEngine(profile.browserEngine)),profile.permissionPreset!==void 0&&(entry.profile=frozenProfile({...entry.profile,permissionPreset:profile.permissionPreset}),entry.runtime?.setPermissionPreset(profile.permissionPreset)),entry.lastCommandAt=now,wasParked&&(entry.lifecycleMutex=entry.lifecycleMutex.then(()=>entry.runtime?.emitAttachmentEvent("session_resumed")),await entry.lifecycleMutex),{sessionId:handle2,durableSessionId:entry.durableSessionId,sessionPath:entry.sessionPath,attached:!0}}import{existsSync as existsSync2}from"node:fs";function resolveMovedProfile(requested){let profile={...requested,cwd:resolveMovedPath(requested.cwd),...requested.sessionPath?{sessionPath:resolveMovedPath(requested.sessionPath)}:{}};if(profile.sessionPath!==requested.sessionPath&&profile.sessionPath&&!existsSync2(profile.sessionPath))throw new RpcSessionRegistryError("open_failed",`moved session file does not exist: ${profile.sessionPath}`);return profile}import{existsSync as existsSync3}from"node:fs";function createEntrySwitchSession(entry,createRuntime,syncRuntimeMetadata2){return(sessionPath,options)=>{let operation=entry.lifecycleMutex.then(async()=>{if(entry.state!=="open"||!entry.runtime)throw new RpcSessionRegistryError("unknown_session");let runtime=entry.runtime,cwdOverride=options?.cwdOverride,cwdChanged=cwdOverride!==void 0&&runtime.session.sessionManager.getCwd()!==cwdOverride,result=await runtime.switchSession(sessionPath,options);if(result.cancelled||!cwdChanged)return result;let replacement=new AgentSessionRuntime(runtime.session,runtime.services,createRuntime,[...runtime.diagnostics],runtime.modelFallbackMessage,runtime.launchProfile);return replacement.setRebindSession(entry.rebindSession),ClientAdmissions.sealQueuedOnReplace(replacement),EffectLedger.sealOnReplace(replacement),runtime.releaseSessionHold(),entry.runtime=replacement,syncRuntimeMetadata2(),result});return entry.lifecycleMutex=operation.then(()=>{},()=>{}),operation}}function buildOpeningEntry(input){let{profile,sessionPath,requestedDurableId,options}=input,isResume=sessionPath!==void 0&&existsSync3(sessionPath),sessionStartEvent=isResume||profile.attended===!1?{type:"session_start",reason:isResume?"resume":"startup",...profile.attended===!1?{attended:!1}:{}}:void 0,storedProfile=frozenProfile({...profile,...sessionPath?{sessionPath}:{}}),runtimeProfile=isResume?frozenProfile({...storedProfile,creationModel:void 0,initialThinkingLevel:void 0}):storedProfile,settleOpen,openCompletion=new Promise((resolve2,reject)=>{settleOpen={resolve:resolve2,reject}});openCompletion.catch(()=>{});let entry={state:"opening",scope:new ProviderScope,profile:storedProfile,...sessionIdentity(storedProfile),sessionPath,reservationKey:sessionPath,cwd:storedProfile.cwd,attachments:1,retainOnDisconnect:options?.retainOnDisconnect===!0,lastCommandAt:input.now,lifecycleMutex:Promise.resolve(),openCompletion};return entry.switchSession=createEntrySwitchSession(entry,input.createRuntime,input.sync),requestedDurableId!==void 0&&(entry.durableSessionId=requestedDurableId),{entry,storedProfile,runtimeProfile,sessionStartEvent,settleOpen}}function sessionIsWriting(entry){return entry.worker?.busy===!0||entry.runtime?.session.isSessionBusy===!0}function reportDetachedFailure(handle2,cause){process.stderr.write(`senpi rpc session ${handle2} teardown failed: ${String(cause)}
|
|
9
10
|
`)}function beginSessionClose(host,handle2,onRole,options){let entry=host.get(handle2);if(!entry)throw new RpcSessionRegistryError("unknown_session");if(entry.state==="closing")return onRole?.(!1),entry;if(entry.state!=="open")throw new RpcSessionRegistryError("unknown_session");return entry.attachments-=1,entry.attachments>0?entry:options?.detach&&entry.retainOnDisconnect?(entry.attachments=0,entry.detachedAt??=host.now(),entry.reservationKey&&!sessionIsWriting(entry)&&host.markDetached(entry.reservationKey),entry):(entry.state="closing",onRole?.(!0),entry.closeCompletion=new Promise(resolve2=>{entry.closeResolve=resolve2}),entry)}async function releaseWithinGrace(host,handle2,key){let timer,late=new Promise(resolve2=>{timer=setTimeout(()=>resolve2("late"),host.closeGraceMs)}),removal=host.releaseReservation(key).then(()=>"removed",cause=>(reportDetachedFailure(handle2,cause),"failed")),outcome=await Promise.race([removal,late]);clearTimeout(timer),outcome==="late"&&reportDetachedFailure(handle2,new Error(`session path reservation was not removed within ${host.closeGraceMs} ms; closing anyway`))}function closeSession(host,handle2){return beginSessionClose(host,handle2).state!=="closing"?Promise.resolve():closeMarkedSession(host,handle2)}function closeMarkedSession(host,handle2){host.sync();let entry=host.get(handle2);if(entry?.state!=="closing")throw new RpcSessionRegistryError("unknown_session");let completion=entry.closeCompletion;if(!completion)return Promise.resolve();if(entry.closeStarted)return completion;entry.closeStarted=!0;let previousLifecycle=entry.lifecycleMutex,releaseTimer,released=!1,disposePromise,scopeClosed=!1,disposeOnce=()=>disposePromise||(disposePromise=Promise.resolve(entry.runtime?.dispose()),disposePromise),closeScopeOnce=async()=>{scopeClosed||(scopeClosed=!0,await disposeOnce().catch(()=>{}),await entry.scope.close?.())},release=async()=>{released||(released=!0,releaseTimer&&clearTimeout(releaseTimer),entry.reservationKey&&await releaseWithinGrace(host,handle2,entry.reservationKey),entry.state="closed",host.delete(handle2))},graceful=(async()=>{await previousLifecycle;try{await entry.runtime?.session.abort()}catch(cause){reportDetachedFailure(handle2,cause)}try{await entry.runtime?.session.waitForIdle()}catch(cause){reportDetachedFailure(handle2,cause)}try{await disposeOnce()}catch(cause){reportDetachedFailure(handle2,cause)}try{await closeScopeOnce()}catch(cause){reportDetachedFailure(handle2,cause)}})(),settled=!1,finish=async()=>{settled||(settled=!0,await release(),entry.closeResolve?.())};return releaseTimer=setTimeout(()=>{disposeOnce().catch(cause=>reportDetachedFailure(handle2,cause)),closeScopeOnce().catch(cause=>reportDetachedFailure(handle2,cause)),graceful.catch(cause=>reportDetachedFailure(handle2,cause)),finish()},host.closeGraceMs),graceful.then(finish,cause=>(reportDetachedFailure(handle2,cause),finish())),completion}async function openRegistrySession(host,requested,options){host.validateProfile(requested);let profile=resolveMovedProfile(requested);host.syncRuntimeMetadata();let sessionPath=profile.sessionPath?canonicalSessionPath(profile.sessionPath):void 0,requestedDurableId=profile.durableSessionId;if(requestedDurableId!==void 0){for(let entry2 of host.entries.values())if(entry2.state!=="closed"&&entry2.durableSessionId===requestedDurableId&&!(sessionPath!==void 0&&entry2.reservationKey===sessionPath))throw new RpcSessionRegistryError("session_id_in_use")}if(sessionPath){await settleClosingReservation(host.entries.values(),sessionPath,host.closeGraceMs);let deadline=Date.now()+host.closeGraceMs;for(;host.pendingClaims.has(sessionPath);)await settlePendingClaim(host.pendingClaims,sessionPath,Math.max(0,deadline-Date.now()))}if(sessionPath&&host.reservations.has(sessionPath))return attachToOpenSession(host.entries,sessionPath,profile,options,host.options.pathReservations,host.now());if(options?.attachOnly)throw new RpcSessionRegistryError("session_not_held",void 0,{reason:"session_not_held",action:"rediscover_holder"});let claimSettled;sessionPath&&(host.reservations.add(sessionPath),host.options.pathReservations&&(claimSettled=await takeCrossGenerationClaim(host.reservations,host.pendingClaims,host.options.pathReservations,sessionPath)));let handle2=host.nextHandle(),opening;try{opening=buildOpeningEntry({profile,sessionPath,requestedDurableId,options,now:host.now(),createRuntime:host.options.createRuntime,sync:()=>host.syncRuntimeMetadata()})}catch(cause){try{sessionPath&&(host.reservations.delete(sessionPath),await host.options.pathReservations?.release(sessionPath))}catch(releaseCause){process.stderr.write(`senpi rpc open of ${sessionPath} could not release its claim: ${String(releaseCause)}
|
|
10
11
|
`)}finally{claimSettled?.()}throw cause}let{entry,storedProfile,runtimeProfile,sessionStartEvent,settleOpen}=opening;host.entries.set(handle2,entry),claimSettled?.(),host.options.onSizeChange?.(host.entries.size);try{let newSessionOptions={...requestedDurableId!==void 0?{id:requestedDurableId}:{},...storedProfile.spawnedBy?{spawnedBy:storedProfile.spawnedBy}:{}},manager=sessionPath?host.options.sessionFileLoad==="blocking"?SessionManager.open(sessionPath,void 0,storedProfile.cwd,newSessionOptions):await SessionManager.openAsync(sessionPath,void 0,storedProfile.cwd,newSessionOptions,host.options.createSlicer?.()):SessionManager.create(storedProfile.cwd,void 0,newSessionOptions);return entry.runtime=await runWithProviderScope(entry.scope,()=>createAgentSessionRuntime(host.options.createRuntime,{cwd:manager.getCwd(),agentDir:host.options.agentDir,sessionManager:manager,sessionStartEvent,launchProfile:runtimeProfile})),assertRequestedModelResolved(runtimeProfile,entry.runtime.diagnostics),ClientAdmissions.sealQueuedOnReplace(entry.runtime),EffectLedger.sealOnReplace(entry.runtime),entry.durableSessionId=manager.getSessionId(),entry.sessionPath??=manager.getSessionFile(),host.options.workerIsolate!==!0&&structuredLaneEnabled()&&(entry.acceptance=new SessionAcceptanceLane(void 0,void 0,host.options.agentDir),await entry.acceptance.generations.bind(entry.durableSessionId),entry.acceptance.bootstrap({transcript:manager.beginTranscriptJournal()}),setSessionRecoveryEpoch(entry.runtime.session,entry.acceptance.recoveryEpoch)),entry.state="open",settleOpen.resolve(),{sessionId:handle2,durableSessionId:entry.durableSessionId,sessionPath:entry.sessionPath}}catch(error2){try{await entry.runtime?.dispose()}catch{}finally{try{await entry.scope.close?.()}finally{host.entries.delete(handle2),host.options.onSizeChange?.(host.entries.size),sessionPath&&await releaseWithinGrace(host.teardownHost,handle2,sessionPath)}}if(error2 instanceof RpcSessionRegistryError)throw settleOpen.reject(error2),error2;let wrapped=new RpcSessionRegistryError("open_failed",error2 instanceof Error?error2.message:void 0);throw settleOpen.reject(wrapped),wrapped}}var RpcSessionRegistry=class{get agentDir(){return this.options.agentDir}constructor(options){this.entries=new Map,this.reservations=new Set,this.pendingClaims=new Map,this.nextHandle=0,options.createRuntime.prepare&&(this.warm=createRegistryWarm(options.createRuntime.prepare,{agentDir:options.agentDir,...options.mcpRegistry!==void 0?{mcpRegistry:options.mcpRegistry}:{}})),this.options=options.mcpRegistry===void 0?options:{...options,createRuntime:runtimeOptions=>options.createRuntime({...runtimeOptions,mcpRegistry:options.mcpRegistry})},this.supportsCompact=options.createRuntime.supportsCompact??(()=>!1),this.now=options.now??Date.now,this.closeGraceMs=options.closeGraceMs??1e4,this.teardownHost={closeGraceMs:this.closeGraceMs,get:handle2=>this.entries.get(handle2),delete:handle2=>{let deleted=this.entries.delete(handle2);return this.options.onSizeChange?.(this.entries.size),deleted},releaseReservation:async key=>{await this.options.pathReservations?.release(key),this.reservations.delete(key)},markDetached:key=>this.options.pathReservations?.setAttached(key,!1),now:()=>this.now(),sync:()=>this.syncRuntimeMetadata()}}get size(){return this.entries.size}holderPids(observedStarts){return this.options.pathReservations?.holderPids?.(observedStarts)??Promise.resolve([])}openSession(requested,options){return openRegistrySession({entries:this.entries,reservations:this.reservations,pendingClaims:this.pendingClaims,options:this.options,teardownHost:this.teardownHost,closeGraceMs:this.closeGraceMs,now:this.now,nextHandle:()=>`rpc-${++this.nextHandle}`,validateProfile:profile=>this.validateProfile(profile),syncRuntimeMetadata:()=>this.syncRuntimeMetadata()},requested,options)}peek(handle2){return this.entries.get(handle2)}attachSession(handle2){let entry=this.entries.get(handle2);return attachLiveSession(entry,this.now(),()=>markPathAttached(entry,this.options.pathReservations))}getForCommand(handle2,command){let entry=this.entries.get(handle2);if(!entry)throw new RpcSessionRegistryError("unknown_session");if(entry.state==="closing"&&!["abort","abort_bash","extension_ui_response","extension_ui_progress","host_response"].includes(command))throw new RpcSessionRegistryError("session_closing");if(entry.state!=="open"&&entry.state!=="closing")throw new RpcSessionRegistryError("unknown_session");return(entry.attachments>0||refreshesSessionActivity(command))&&(entry.lastCommandAt=this.now()),entry}beginClose(handle2,onRole,options){return beginSessionClose(this.teardownHost,handle2,onRole,options)}async close(handle2){return closeSession(this.teardownHost,handle2)}async closeMarked(handle2){return closeMarkedSession(this.teardownHost,handle2)}list(){this.syncRuntimeMetadata();let now=this.now();return[...this.entries].map(([sessionId,entry])=>({sessionId,durableSessionId:entry.durableSessionId,sessionPath:entry.sessionPath,cwd:entry.cwd,name:entry.runtime?.session.sessionManager.getSessionName(),kind:entry.kind,context:publishedSessionContext(entry.context,entry.contextOverlay),attachments:Math.max(0,entry.attachments),retain_on_disconnect:entry.retainOnDisconnect===!0,status:entry.state==="quarantined"?"closing":entry.state,idleMs:Math.max(0,now-entry.lastCommandAt),tool_child:entry.runtime?.session.toolChildRow()??{state:"none"}}))}syncRuntimeMetadata(){syncRuntimeMetadata(this.entries.values(),this.reservations,this.options.pathReservations)}validateProfile(profile){if(!isAbsolute2(profile.cwd)||profile.sessionPath!==void 0&&!isAbsolute2(profile.sessionPath))throw new RpcSessionRegistryError("invalid_path");if(profile.durableSessionId!==void 0)try{assertValidSessionId(profile.durableSessionId)}catch(cause){throw new RpcSessionRegistryError("invalid_session_id",String(cause))}}};var HANDOVER_PARKED_REOPEN_BUDGET_MS=12e4,HANDOVER_PARKED_REOPEN_POLL_MS=250,HANDOVER_PARKED_REOPEN_MAX_ATTEMPTS=8,HANDOVER_PARKED_REOPEN_QUIET_STREAK=8;async function reopenHandoverParkedSessions(open3,agentDir,socket,holder){let daemonDir=createHostDaemonPaths({socket,agentDir}).dir,deadline=Date.now()+HANDOVER_PARKED_REOPEN_BUDGET_MS,reopenAttempts=new Map,heldPolls=new Map,emptyStreak=0,sawAnyPark=!1;for(;;){if(holder?.shouldReopen!==void 0&&!holder.shouldReopen())return;let parked=await inheritedParks(daemonDir,holder);for(let entry of parked)sawAnyPark=!0,await reopenOne(daemonDir,open3,entry,reopenAttempts,heldPolls,holder);let remaining=(await inheritedParks(daemonDir,holder)).length;if(holder?.shouldReopen!==void 0&&!holder.shouldReopen()||(emptyStreak=remaining===0?emptyStreak+1:0,sawAnyPark&&emptyStreak>=HANDOVER_PARKED_REOPEN_QUIET_STREAK)||Date.now()>=deadline)return;await new Promise(resolve2=>setTimeout(resolve2,HANDOVER_PARKED_REOPEN_POLL_MS))}}async function inheritedParks(daemonDir,holder){return(await readHandoverParkedSessions(daemonDir)).filter(entry=>entry.parkedBy===void 0||entry.parkedBy!==holder?.hostInstance)}async function reopenOne(daemonDir,open3,entry,attempts,heldPolls,holder){let taskStatus=entry.contextOverlay&&Object.hasOwn(entry.contextOverlay,"task_status")?entry.contextOverlay.task_status:entry.sessionContext?.task_status;if(typeof taskStatus=="string"&&["completed","cancelled","error","failed","lost","interrupted"].includes(taskStatus)){await clearHandoverParkedSession(daemonDir,entry.sessionPath),process.stderr.write(`senpi rpc successor dropped a terminal parked session (${taskStatus}): ${entry.sessionPath}
|
|
11
12
|
`);return}if(await dropHandoverParkedSessionIfFileGone(daemonDir,entry.sessionPath),!existsSync4(entry.sessionPath)){process.stderr.write(`senpi rpc successor dropped a parked session whose file is gone: ${entry.sessionPath}
|