@agimon-ai/po-core 0.0.0-alpha.2 → 0.0.0-alpha.21
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/LICENSE +149 -21
- package/NOTICE +41 -0
- package/dist/agentModel.cjs +1 -1
- package/dist/agentModel.d.mts +2 -2
- package/dist/agentModel.mjs +1 -2
- package/dist/apiContracts.cjs +623 -802
- package/dist/apiContracts.cjs.map +1 -1
- package/dist/apiContracts.d.mts +277 -615
- package/dist/apiContracts.d.mts.map +1 -1
- package/dist/apiContracts.mjs +617 -794
- package/dist/apiContracts.mjs.map +1 -1
- package/dist/askUser.cjs +2 -2
- package/dist/askUser.d.mts +2 -2
- package/dist/askUser.mjs +1 -2
- package/dist/authorTools.mjs +1 -2
- package/dist/backgroundWork.cjs +3 -3
- package/dist/backgroundWork.d.mts +2 -2
- package/dist/backgroundWork.mjs +1 -2
- package/dist/bundleAssetPolicy.mjs +1 -2
- package/dist/chatgptAuth.cjs +3 -2
- package/dist/chatgptAuth.d.mts +3 -2
- package/dist/chatgptAuth.mjs +2 -1
- package/dist/childProcess.cjs +1 -1
- package/dist/childProcess.d.mts +2 -2
- package/dist/childProcess.mjs +1 -2
- package/dist/childSession.cjs +11 -6
- package/dist/childSession.d.mts +3 -3
- package/dist/childSession.mjs +3 -3
- package/dist/cockpitContainer.mjs +1 -2
- package/dist/config.cjs +1 -1
- package/dist/config.d.mts +3 -3
- package/dist/config.mjs +1 -2
- package/dist/contextApi.cjs +1 -0
- package/dist/contextApi.d.mts +2 -2
- package/dist/contextApi.mjs +2 -2
- package/dist/contextContributions.cjs +4 -4
- package/dist/contextContributions.d.mts +3 -3
- package/dist/contextContributions.mjs +3 -3
- package/dist/contextDetailStore.cjs +7 -5
- package/dist/contextDetailStore.cjs.map +1 -1
- package/dist/contextDetailStore.d.mts +2 -1
- package/dist/contextDetailStore.d.mts.map +1 -1
- package/dist/contextDetailStore.mjs +6 -4
- package/dist/contextDetailStore.mjs.map +1 -1
- package/dist/contextProjection.cjs +7 -2
- package/dist/contextProjection.cjs.map +1 -1
- package/dist/contextProjection.d.mts +4 -1
- package/dist/contextProjection.d.mts.map +1 -1
- package/dist/contextProjection.mjs +5 -2
- package/dist/contextProjection.mjs.map +1 -1
- package/dist/cordisHost.cjs +11 -11
- package/dist/cordisHost.d.mts +2 -2
- package/dist/cordisHost.mjs +1 -2
- package/dist/delegation.cjs +8 -8
- package/dist/delegation.d.mts +2 -2
- package/dist/delegation.mjs +1 -2
- package/dist/executionBudget.cjs +4 -3
- package/dist/executionBudget.cjs.map +1 -1
- package/dist/executionBudget.d.mts +2 -2
- package/dist/executionBudget.d.mts.map +1 -1
- package/dist/executionBudget.mjs +4 -3
- package/dist/executionBudget.mjs.map +1 -1
- package/dist/extensionFile.cjs +5 -0
- package/dist/extensionFile.d.mts +4 -2
- package/dist/extensionFile.mjs +4 -2
- package/dist/footer.d.mts +2 -2
- package/dist/footer.mjs +1 -2
- package/dist/headless.cjs +14 -14
- package/dist/headless.d.mts +2 -2
- package/dist/headless.mjs +1 -2
- package/dist/headlessHub.cjs +308 -109
- package/dist/headlessHub.cjs.map +1 -1
- package/dist/headlessHub.d.mts +71 -36
- package/dist/headlessHub.d.mts.map +1 -1
- package/dist/headlessHub.mjs +309 -110
- package/dist/headlessHub.mjs.map +1 -1
- package/dist/headlessProtocol.cjs +327 -0
- package/dist/headlessProtocol.cjs.map +1 -0
- package/dist/headlessProtocol.d.mts +30 -0
- package/dist/headlessProtocol.d.mts.map +1 -0
- package/dist/headlessProtocol.mjs +326 -0
- package/dist/headlessProtocol.mjs.map +1 -0
- package/dist/headlessServer.cjs +166 -151
- package/dist/headlessServer.cjs.map +1 -1
- package/dist/headlessServer.d.mts +13 -5
- package/dist/headlessServer.d.mts.map +1 -1
- package/dist/headlessServer.mjs +166 -151
- package/dist/headlessServer.mjs.map +1 -1
- package/dist/headlessSessionHost.d.mts +58 -21
- package/dist/headlessSessionHost.d.mts.map +1 -1
- package/dist/help.cjs +20 -20
- package/dist/help.d.mts +2 -2
- package/dist/help.mjs +2 -2
- package/dist/history.cjs +16 -20
- package/dist/history.d.mts +9 -7
- package/dist/history.mjs +6 -7
- package/dist/historyOwnership.cjs.map +1 -1
- package/dist/historyOwnership.d.mts +1 -1
- package/dist/historyOwnership.mjs.map +1 -1
- package/dist/hubChannel.cjs +9 -0
- package/dist/hubChannel.d.mts +3 -2
- package/dist/hubChannel.mjs +3 -2
- package/dist/index.cjs +26 -28
- package/dist/index.d.mts +6 -6
- package/dist/index.mjs +6 -6
- package/dist/interop/chord.mjs +1 -0
- package/dist/interop/chordContext.mjs +1 -0
- package/dist/json.cjs +11 -5
- package/dist/json.d.mts +4 -2
- package/dist/json.mjs +4 -2
- package/dist/kernel.cjs +1 -1
- package/dist/kernel.d.mts +3 -3
- package/dist/kernel.mjs +1 -2
- package/dist/leader.d.mts +2 -2
- package/dist/leader.mjs +1 -2
- package/dist/logSinkTelemetry.mjs +1 -2
- package/dist/machineApi.cjs +80 -74
- package/dist/machineApi.cjs.map +1 -1
- package/dist/machineApi.d.mts +5 -2
- package/dist/machineApi.d.mts.map +1 -1
- package/dist/machineApi.mjs +78 -71
- package/dist/machineApi.mjs.map +1 -1
- package/dist/main.cjs +2 -1
- package/dist/main.d.mts +2 -1
- package/dist/main.mjs +2 -1
- package/dist/mcpFacet.d.mts +3 -3
- package/dist/mcpProjection.cjs +13 -13
- package/dist/mcpProjection.d.mts +2 -2
- package/dist/mcpProjection.mjs +1 -2
- package/dist/mcpSchemaCost.cjs +4 -4
- package/dist/mcpSchemaCost.cjs.map +1 -1
- package/dist/mcpSchemaCost.d.mts +2 -2
- package/dist/mcpSchemaCost.mjs +4 -4
- package/dist/mcpSchemaCost.mjs.map +1 -1
- package/dist/mcpSession.cjs +7 -7
- package/dist/mcpSession.d.mts +2 -2
- package/dist/mcpSession.mjs +1 -2
- package/dist/mcpStatus.cjs +2 -2
- package/dist/mcpStatus.d.mts +2 -2
- package/dist/mcpStatus.mjs +1 -2
- package/dist/mcpToolResolver.cjs +3 -3
- package/dist/mcpToolResolver.d.mts +2 -2
- package/dist/mcpToolResolver.mjs +1 -2
- package/dist/mcpWidget.d.mts +2 -2
- package/dist/moduleResolution.cjs +43 -8
- package/dist/moduleResolution.cjs.map +1 -1
- package/dist/moduleResolution.d.mts +10 -1
- package/dist/moduleResolution.d.mts.map +1 -1
- package/dist/moduleResolution.mjs +40 -7
- package/dist/moduleResolution.mjs.map +1 -1
- package/dist/narration.cjs +3 -3
- package/dist/narration.d.mts +2 -2
- package/dist/narration.mjs +1 -2
- package/dist/native.cjs +9 -0
- package/dist/native.d.mts +4 -3
- package/dist/native.mjs +3 -2
- package/dist/nodePlatform.cjs +77 -0
- package/dist/nodePlatform.cjs.map +1 -0
- package/dist/nodePlatform.d.mts +17 -0
- package/dist/nodePlatform.d.mts.map +1 -0
- package/dist/nodePlatform.mjs +72 -0
- package/dist/nodePlatform.mjs.map +1 -0
- package/dist/notification.cjs +15 -15
- package/dist/notification.d.mts +2 -2
- package/dist/notification.mjs +1 -2
- package/dist/packageApi.cjs +11 -11
- package/dist/packageApi.d.mts +2 -2
- package/dist/packageApi.mjs +2 -2
- package/dist/packageApiServer.cjs +45 -27
- package/dist/packageApiServer.cjs.map +1 -1
- package/dist/packageApiServer.d.mts +36 -26
- package/dist/packageApiServer.d.mts.map +1 -1
- package/dist/packageApiServer.mjs +44 -26
- package/dist/packageApiServer.mjs.map +1 -1
- package/dist/piSettings.cjs +41 -20
- package/dist/piSettings.d.mts +4 -2
- package/dist/piSettings.mjs +4 -2
- package/dist/platform.cjs +62 -0
- package/dist/platform.d.mts +10 -0
- package/dist/platform.mjs +10 -0
- package/dist/pluginProtocol.cjs +7 -8
- package/dist/pluginProtocol.d.mts +2 -2
- package/dist/pluginProtocol.mjs +1 -2
- package/dist/poPackage.cjs +12 -0
- package/dist/poPackage.d.mts +3 -0
- package/dist/poPackage.mjs +3 -0
- package/dist/profileIdentity.cjs +1 -1
- package/dist/profileIdentity.d.mts +2 -2
- package/dist/profileIdentity.mjs +1 -2
- package/dist/protocol.cjs +3 -3
- package/dist/protocol.d.mts +2 -2
- package/dist/protocol.mjs +1 -2
- package/dist/readiness.cjs +6 -6
- package/dist/readiness.d.mts +2 -2
- package/dist/readiness.mjs +1 -2
- package/dist/remoteApi.cjs.map +1 -1
- package/dist/remoteApi.d.mts +2 -2
- package/dist/remoteApi.mjs.map +1 -1
- package/dist/remoteRuntime.cjs +42 -65
- package/dist/remoteRuntime.cjs.map +1 -1
- package/dist/remoteRuntime.d.mts +3 -2
- package/dist/remoteRuntime.d.mts.map +1 -1
- package/dist/remoteRuntime.mjs +41 -62
- package/dist/remoteRuntime.mjs.map +1 -1
- package/dist/runtimeConfig.cjs +4 -4
- package/dist/runtimeConfig.cjs.map +1 -1
- package/dist/runtimeConfig.d.mts +10 -9
- package/dist/runtimeConfig.d.mts.map +1 -1
- package/dist/runtimeConfig.mjs +4 -4
- package/dist/runtimeConfig.mjs.map +1 -1
- package/dist/runtimeContextApi.cjs +10 -3
- package/dist/runtimeContextApi.cjs.map +1 -1
- package/dist/runtimeContextApi.d.mts +3 -3
- package/dist/runtimeContextApi.d.mts.map +1 -1
- package/dist/runtimeContextApi.mjs +10 -3
- package/dist/runtimeContextApi.mjs.map +1 -1
- package/dist/runtimeCordisHost.cjs +46 -46
- package/dist/runtimeCordisHost.cjs.map +1 -1
- package/dist/runtimeCordisHost.d.mts +29 -28
- package/dist/runtimeCordisHost.d.mts.map +1 -1
- package/dist/runtimeCordisHost.mjs +42 -42
- package/dist/runtimeCordisHost.mjs.map +1 -1
- package/dist/runtimeIdentity.cjs +6 -9
- package/dist/runtimeIdentity.cjs.map +1 -1
- package/dist/runtimeIdentity.d.mts +5 -1
- package/dist/runtimeIdentity.d.mts.map +1 -1
- package/dist/runtimeIdentity.mjs +5 -8
- package/dist/runtimeIdentity.mjs.map +1 -1
- package/dist/runtimeJson.cjs +10 -45
- package/dist/runtimeJson.d.mts +3 -22
- package/dist/runtimeJson.mjs +3 -39
- package/dist/runtimeLogSinkTelemetry.cjs +19 -19
- package/dist/runtimeLogSinkTelemetry.cjs.map +1 -1
- package/dist/runtimeLogSinkTelemetry.d.mts +19 -19
- package/dist/runtimeLogSinkTelemetry.mjs +19 -19
- package/dist/runtimeLogSinkTelemetry.mjs.map +1 -1
- package/dist/runtimePackages.cjs +7 -2
- package/dist/runtimePackages.cjs.map +1 -1
- package/dist/runtimePackages.d.mts +4 -1
- package/dist/runtimePackages.d.mts.map +1 -1
- package/dist/runtimePackages.mjs +7 -2
- package/dist/runtimePackages.mjs.map +1 -1
- package/dist/runtimePiSettings.cjs +40 -263
- package/dist/runtimePiSettings.d.mts +3 -72
- package/dist/runtimePiSettings.mjs +3 -241
- package/dist/runtimeProtocol.cjs +19 -19
- package/dist/runtimeProtocol.cjs.map +1 -1
- package/dist/runtimeProtocol.d.mts +7 -7
- package/dist/runtimeProtocol.d.mts.map +1 -1
- package/dist/runtimeProtocol.mjs +17 -17
- package/dist/runtimeProtocol.mjs.map +1 -1
- package/dist/runtimeTransition.cjs +9 -9
- package/dist/runtimeTransition.cjs.map +1 -1
- package/dist/runtimeTransition.d.mts +10 -10
- package/dist/runtimeTransition.d.mts.map +1 -1
- package/dist/runtimeTransition.mjs +7 -7
- package/dist/runtimeTransition.mjs.map +1 -1
- package/dist/sandboxHarness.mjs +1 -2
- package/dist/server.cjs +3 -7
- package/dist/server.d.mts +6 -6
- package/dist/server.mjs +3 -4
- package/dist/serverPlugin.cjs +39 -0
- package/dist/serverPlugin.d.mts +12 -0
- package/dist/serverPlugin.mjs +11 -0
- package/dist/serverTelemetry.cjs +1 -1
- package/dist/serverTelemetry.cjs.map +1 -1
- package/dist/serverTelemetry.d.mts +2 -2
- package/dist/serverTelemetry.mjs +2 -2
- package/dist/serverTelemetry.mjs.map +1 -1
- package/dist/sessionFilesApi.cjs +41 -37
- package/dist/sessionFilesApi.cjs.map +1 -1
- package/dist/sessionFilesApi.d.mts +6 -3
- package/dist/sessionFilesApi.d.mts.map +1 -1
- package/dist/sessionFilesApi.mjs +41 -36
- package/dist/sessionFilesApi.mjs.map +1 -1
- package/dist/sessionProtocol.cjs +31 -6
- package/dist/sessionProtocol.d.mts +8 -3
- package/dist/sessionProtocol.mjs +8 -2
- package/dist/skills.cjs +5 -5
- package/dist/skills.d.mts +2 -2
- package/dist/skills.mjs +1 -2
- package/dist/sqliteSessionStorage.cjs +28 -50
- package/dist/sqliteSessionStorage.cjs.map +1 -1
- package/dist/sqliteSessionStorage.d.mts +13 -20
- package/dist/sqliteSessionStorage.d.mts.map +1 -1
- package/dist/sqliteSessionStorage.mjs +25 -48
- package/dist/sqliteSessionStorage.mjs.map +1 -1
- package/dist/src/constants/agentSettled.cjs +7 -0
- package/dist/src/constants/agentSettled.cjs.map +1 -0
- package/dist/src/constants/agentSettled.mjs +7 -0
- package/dist/src/constants/agentSettled.mjs.map +1 -0
- package/dist/src/constants/contextApi.cjs +3 -1
- package/dist/src/constants/contextApi.cjs.map +1 -1
- package/dist/src/constants/contextApi.d.mts +2 -1
- package/dist/src/constants/contextApi.d.mts.map +1 -1
- package/dist/src/constants/contextApi.mjs +3 -2
- package/dist/src/constants/contextApi.mjs.map +1 -1
- package/dist/src/constants/voiceTools.cjs +6 -6
- package/dist/src/constants/voiceTools.cjs.map +1 -1
- package/dist/src/constants/voiceTools.d.mts +3 -3
- package/dist/src/constants/voiceTools.mjs +4 -4
- package/dist/src/constants/voiceTools.mjs.map +1 -1
- package/dist/src/extensions/extensionFile.cjs +22 -5
- package/dist/src/extensions/extensionFile.cjs.map +1 -1
- package/dist/src/extensions/extensionFile.d.mts +17 -4
- package/dist/src/extensions/extensionFile.d.mts.map +1 -1
- package/dist/src/extensions/extensionFile.mjs +22 -6
- package/dist/src/extensions/extensionFile.mjs.map +1 -1
- package/dist/src/extensions/serverPlugin.cjs +231 -92
- package/dist/src/extensions/serverPlugin.cjs.map +1 -1
- package/dist/src/extensions/serverPlugin.d.mts +2 -2
- package/dist/src/extensions/serverPlugin.d.mts.map +1 -1
- package/dist/src/extensions/serverPlugin.mjs +232 -93
- package/dist/src/extensions/serverPlugin.mjs.map +1 -1
- package/dist/src/pi/piSessionRuntime.cjs +349 -142
- package/dist/src/pi/piSessionRuntime.cjs.map +1 -1
- package/dist/src/pi/piSessionRuntime.d.mts +18 -17
- package/dist/src/pi/piSessionRuntime.d.mts.map +1 -1
- package/dist/src/pi/piSessionRuntime.mjs +342 -135
- package/dist/src/pi/piSessionRuntime.mjs.map +1 -1
- package/dist/src/schemas/agentModel.cjs +2 -2
- package/dist/src/schemas/agentModel.cjs.map +1 -1
- package/dist/src/schemas/agentModel.d.mts +1 -1
- package/dist/src/schemas/agentModel.mjs +2 -2
- package/dist/src/schemas/agentModel.mjs.map +1 -1
- package/dist/src/schemas/apiContracts.d.mts +2 -2
- package/dist/src/schemas/apiContracts.d.mts.map +1 -1
- package/dist/src/schemas/askUser.cjs +4 -4
- package/dist/src/schemas/askUser.cjs.map +1 -1
- package/dist/src/schemas/askUser.d.mts +4 -4
- package/dist/src/schemas/askUser.d.mts.map +1 -1
- package/dist/src/schemas/askUser.mjs +3 -3
- package/dist/src/schemas/askUser.mjs.map +1 -1
- package/dist/src/schemas/backgroundWork.cjs +10 -10
- package/dist/src/schemas/backgroundWork.cjs.map +1 -1
- package/dist/src/schemas/backgroundWork.d.mts +9 -9
- package/dist/src/schemas/backgroundWork.d.mts.map +1 -1
- package/dist/src/schemas/backgroundWork.mjs +8 -8
- package/dist/src/schemas/backgroundWork.mjs.map +1 -1
- package/dist/src/schemas/childProcess.cjs +5 -5
- package/dist/src/schemas/childProcess.cjs.map +1 -1
- package/dist/src/schemas/childProcess.d.mts +2 -2
- package/dist/src/schemas/childProcess.mjs +5 -5
- package/dist/src/schemas/childProcess.mjs.map +1 -1
- package/dist/src/schemas/contextContributions.cjs +10 -10
- package/dist/src/schemas/contextContributions.cjs.map +1 -1
- package/dist/src/schemas/contextContributions.d.mts +16 -16
- package/dist/src/schemas/contextContributions.d.mts.map +1 -1
- package/dist/src/schemas/contextContributions.mjs +8 -8
- package/dist/src/schemas/contextContributions.mjs.map +1 -1
- package/dist/src/schemas/delegation.cjs +17 -17
- package/dist/src/schemas/delegation.cjs.map +1 -1
- package/dist/src/schemas/delegation.d.mts +16 -16
- package/dist/src/schemas/delegation.d.mts.map +1 -1
- package/dist/src/schemas/delegation.mjs +10 -10
- package/dist/src/schemas/delegation.mjs.map +1 -1
- package/dist/src/schemas/extensionFile.d.mts +23 -19
- package/dist/src/schemas/extensionFile.d.mts.map +1 -1
- package/dist/src/schemas/footer.cjs.map +1 -1
- package/dist/src/schemas/footer.d.mts +5 -5
- package/dist/src/schemas/footer.d.mts.map +1 -1
- package/dist/src/schemas/footer.mjs.map +1 -1
- package/dist/src/schemas/headless.cjs +37 -37
- package/dist/src/schemas/headless.cjs.map +1 -1
- package/dist/src/schemas/headless.d.mts +100 -101
- package/dist/src/schemas/headless.d.mts.map +1 -1
- package/dist/src/schemas/headless.mjs +24 -24
- package/dist/src/schemas/headless.mjs.map +1 -1
- package/dist/src/schemas/help.cjs +60 -60
- package/dist/src/schemas/help.cjs.map +1 -1
- package/dist/src/schemas/help.d.mts +43 -43
- package/dist/src/schemas/help.d.mts.map +1 -1
- package/dist/src/schemas/help.mjs +41 -41
- package/dist/src/schemas/help.mjs.map +1 -1
- package/dist/src/schemas/home.cjs +127 -0
- package/dist/src/schemas/home.cjs.map +1 -0
- package/dist/src/schemas/home.d.mts +63 -0
- package/dist/src/schemas/home.d.mts.map +1 -0
- package/dist/src/schemas/home.mjs +121 -0
- package/dist/src/schemas/home.mjs.map +1 -0
- package/dist/src/schemas/httpApiContracts.cjs +441 -0
- package/dist/src/schemas/httpApiContracts.cjs.map +1 -0
- package/dist/src/schemas/httpApiContracts.d.mts +78 -0
- package/dist/src/schemas/httpApiContracts.d.mts.map +1 -0
- package/dist/src/schemas/httpApiContracts.mjs +434 -0
- package/dist/src/schemas/httpApiContracts.mjs.map +1 -0
- package/dist/src/schemas/hubChannel.cjs +3 -0
- package/dist/src/schemas/hubChannel.cjs.map +1 -1
- package/dist/src/schemas/hubChannel.d.mts +84 -60
- package/dist/src/schemas/hubChannel.d.mts.map +1 -1
- package/dist/src/schemas/hubChannel.mjs +3 -1
- package/dist/src/schemas/hubChannel.mjs.map +1 -1
- package/dist/src/schemas/leader.cjs.map +1 -1
- package/dist/src/schemas/leader.d.mts +3 -3
- package/dist/src/schemas/leader.d.mts.map +1 -1
- package/dist/src/schemas/leader.mjs.map +1 -1
- package/dist/src/schemas/mcpBundle.d.mts +3 -3
- package/dist/src/schemas/mcpFacet.cjs.map +1 -1
- package/dist/src/schemas/mcpFacet.d.mts +22 -22
- package/dist/src/schemas/mcpFacet.d.mts.map +1 -1
- package/dist/src/schemas/mcpFacet.mjs.map +1 -1
- package/dist/src/schemas/mcpProjection.cjs +41 -41
- package/dist/src/schemas/mcpProjection.cjs.map +1 -1
- package/dist/src/schemas/mcpProjection.d.mts +31 -30
- package/dist/src/schemas/mcpProjection.d.mts.map +1 -1
- package/dist/src/schemas/mcpProjection.mjs +29 -29
- package/dist/src/schemas/mcpProjection.mjs.map +1 -1
- package/dist/src/schemas/mcpSession.cjs +23 -23
- package/dist/src/schemas/mcpSession.cjs.map +1 -1
- package/dist/src/schemas/mcpSession.d.mts +12 -12
- package/dist/src/schemas/mcpSession.d.mts.map +1 -1
- package/dist/src/schemas/mcpSession.mjs +18 -18
- package/dist/src/schemas/mcpSession.mjs.map +1 -1
- package/dist/src/schemas/mcpStatus.cjs +5 -5
- package/dist/src/schemas/mcpStatus.cjs.map +1 -1
- package/dist/src/schemas/mcpStatus.d.mts +4 -4
- package/dist/src/schemas/mcpStatus.d.mts.map +1 -1
- package/dist/src/schemas/mcpStatus.mjs +4 -4
- package/dist/src/schemas/mcpStatus.mjs.map +1 -1
- package/dist/src/schemas/mcpToolResolver.cjs +9 -9
- package/dist/src/schemas/mcpToolResolver.cjs.map +1 -1
- package/dist/src/schemas/mcpToolResolver.d.mts +7 -7
- package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -1
- package/dist/src/schemas/mcpToolResolver.mjs +7 -7
- package/dist/src/schemas/mcpToolResolver.mjs.map +1 -1
- package/dist/src/schemas/narration.cjs +9 -9
- package/dist/src/schemas/narration.cjs.map +1 -1
- package/dist/src/schemas/narration.d.mts +5 -5
- package/dist/src/schemas/narration.d.mts.map +1 -1
- package/dist/src/schemas/narration.mjs +7 -7
- package/dist/src/schemas/narration.mjs.map +1 -1
- package/dist/src/schemas/notification.cjs +45 -45
- package/dist/src/schemas/notification.cjs.map +1 -1
- package/dist/src/schemas/notification.d.mts +22 -22
- package/dist/src/schemas/notification.d.mts.map +1 -1
- package/dist/src/schemas/notification.mjs +31 -31
- package/dist/src/schemas/notification.mjs.map +1 -1
- package/dist/src/schemas/packageApi.cjs +28 -28
- package/dist/src/schemas/packageApi.cjs.map +1 -1
- package/dist/src/schemas/packageApi.d.mts +91 -65
- package/dist/src/schemas/packageApi.d.mts.map +1 -1
- package/dist/src/schemas/packageApi.mjs +18 -18
- package/dist/src/schemas/packageApi.mjs.map +1 -1
- package/dist/src/schemas/platform.cjs +34 -0
- package/dist/src/schemas/platform.cjs.map +1 -0
- package/dist/src/schemas/platform.d.mts +75 -0
- package/dist/src/schemas/platform.d.mts.map +1 -0
- package/dist/src/schemas/platform.mjs +27 -0
- package/dist/src/schemas/platform.mjs.map +1 -0
- package/dist/src/schemas/pluginContributions.cjs.map +1 -1
- package/dist/src/schemas/pluginContributions.d.mts +12 -12
- package/dist/src/schemas/pluginContributions.d.mts.map +1 -1
- package/dist/src/schemas/pluginContributions.mjs.map +1 -1
- package/dist/src/schemas/pluginProtocol.cjs +24 -27
- package/dist/src/schemas/pluginProtocol.cjs.map +1 -1
- package/dist/src/schemas/pluginProtocol.d.mts +21 -21
- package/dist/src/schemas/pluginProtocol.d.mts.map +1 -1
- package/dist/src/schemas/pluginProtocol.mjs +18 -20
- package/dist/src/schemas/pluginProtocol.mjs.map +1 -1
- package/dist/src/schemas/profileIdentity.cjs +2 -2
- package/dist/src/schemas/profileIdentity.cjs.map +1 -1
- package/dist/src/schemas/profileIdentity.d.mts +1 -1
- package/dist/src/schemas/profileIdentity.mjs +2 -2
- package/dist/src/schemas/profileIdentity.mjs.map +1 -1
- package/dist/src/schemas/protocolChannelsContract.cjs +27 -0
- package/dist/src/schemas/protocolChannelsContract.cjs.map +1 -0
- package/dist/src/schemas/protocolChannelsContract.d.mts +37 -0
- package/dist/src/schemas/protocolChannelsContract.d.mts.map +1 -0
- package/dist/src/schemas/protocolChannelsContract.mjs +25 -0
- package/dist/src/schemas/protocolChannelsContract.mjs.map +1 -0
- package/dist/src/schemas/protocolContracts.cjs +168 -0
- package/dist/src/schemas/protocolContracts.cjs.map +1 -0
- package/dist/src/schemas/protocolContracts.d.mts +69 -0
- package/dist/src/schemas/protocolContracts.d.mts.map +1 -0
- package/dist/src/schemas/protocolContracts.mjs +164 -0
- package/dist/src/schemas/protocolContracts.mjs.map +1 -0
- package/dist/src/schemas/protocolHubContract.cjs +51 -0
- package/dist/src/schemas/protocolHubContract.cjs.map +1 -0
- package/dist/src/schemas/protocolHubContract.d.mts +218 -0
- package/dist/src/schemas/protocolHubContract.d.mts.map +1 -0
- package/dist/src/schemas/protocolHubContract.mjs +49 -0
- package/dist/src/schemas/protocolHubContract.mjs.map +1 -0
- package/dist/src/schemas/protocolSessionContract.cjs +22 -0
- package/dist/src/schemas/protocolSessionContract.cjs.map +1 -0
- package/dist/src/schemas/protocolSessionContract.d.mts +324 -0
- package/dist/src/schemas/protocolSessionContract.d.mts.map +1 -0
- package/dist/src/schemas/protocolSessionContract.mjs +22 -0
- package/dist/src/schemas/protocolSessionContract.mjs.map +1 -0
- package/dist/src/schemas/protocolThreadContract.cjs +21 -0
- package/dist/src/schemas/protocolThreadContract.cjs.map +1 -0
- package/dist/src/schemas/protocolThreadContract.d.mts +29 -0
- package/dist/src/schemas/protocolThreadContract.d.mts.map +1 -0
- package/dist/src/schemas/protocolThreadContract.mjs +20 -0
- package/dist/src/schemas/protocolThreadContract.mjs.map +1 -0
- package/dist/src/schemas/readiness.cjs +36 -36
- package/dist/src/schemas/readiness.cjs.map +1 -1
- package/dist/src/schemas/readiness.d.mts +37 -37
- package/dist/src/schemas/readiness.d.mts.map +1 -1
- package/dist/src/schemas/readiness.mjs +31 -31
- package/dist/src/schemas/readiness.mjs.map +1 -1
- package/dist/src/schemas/serverBundle.d.mts +5 -5
- package/dist/src/schemas/serverPlugin.cjs +103 -0
- package/dist/src/schemas/serverPlugin.cjs.map +1 -0
- package/dist/src/schemas/serverPlugin.d.mts +176 -0
- package/dist/src/schemas/serverPlugin.d.mts.map +1 -0
- package/dist/src/schemas/serverPlugin.mjs +95 -0
- package/dist/src/schemas/serverPlugin.mjs.map +1 -0
- package/dist/src/schemas/serverScope.cjs +37 -0
- package/dist/src/schemas/serverScope.cjs.map +1 -0
- package/dist/src/schemas/serverScope.d.mts +77 -0
- package/dist/src/schemas/serverScope.d.mts.map +1 -0
- package/dist/src/schemas/serverScope.mjs +33 -0
- package/dist/src/schemas/serverScope.mjs.map +1 -0
- package/dist/src/schemas/sessionApiContracts.cjs +320 -0
- package/dist/src/schemas/sessionApiContracts.cjs.map +1 -0
- package/dist/src/schemas/sessionApiContracts.mjs +318 -0
- package/dist/src/schemas/sessionApiContracts.mjs.map +1 -0
- package/dist/src/schemas/sessionProtocol.cjs +20 -13
- package/dist/src/schemas/sessionProtocol.cjs.map +1 -1
- package/dist/src/schemas/sessionProtocol.d.mts +37 -54
- package/dist/src/schemas/sessionProtocol.d.mts.map +1 -1
- package/dist/src/schemas/sessionProtocol.mjs +17 -8
- package/dist/src/schemas/sessionProtocol.mjs.map +1 -1
- package/dist/src/schemas/skills.cjs +16 -16
- package/dist/src/schemas/skills.cjs.map +1 -1
- package/dist/src/schemas/skills.d.mts +7 -7
- package/dist/src/schemas/skills.d.mts.map +1 -1
- package/dist/src/schemas/skills.mjs +12 -12
- package/dist/src/schemas/skills.mjs.map +1 -1
- package/dist/src/schemas/toolOverrides.cjs +9 -9
- package/dist/src/schemas/toolOverrides.cjs.map +1 -1
- package/dist/src/schemas/toolOverrides.d.mts +8 -8
- package/dist/src/schemas/toolOverrides.d.mts.map +1 -1
- package/dist/src/schemas/toolOverrides.mjs +7 -7
- package/dist/src/schemas/toolOverrides.mjs.map +1 -1
- package/dist/src/schemas/toolSurface.cjs +9 -9
- package/dist/src/schemas/toolSurface.cjs.map +1 -1
- package/dist/src/schemas/toolSurface.d.mts +13 -13
- package/dist/src/schemas/toolSurface.d.mts.map +1 -1
- package/dist/src/schemas/toolSurface.mjs +7 -7
- package/dist/src/schemas/toolSurface.mjs.map +1 -1
- package/dist/src/schemas/uiHub.cjs +9 -9
- package/dist/src/schemas/uiHub.cjs.map +1 -1
- package/dist/src/schemas/uiHub.d.mts +12 -12
- package/dist/src/schemas/uiHub.d.mts.map +1 -1
- package/dist/src/schemas/uiHub.mjs +7 -7
- package/dist/src/schemas/uiHub.mjs.map +1 -1
- package/dist/src/server/directHarnessRuntime.cjs +691 -775
- package/dist/src/server/directHarnessRuntime.cjs.map +1 -1
- package/dist/src/server/directHarnessRuntime.d.mts +5 -1
- package/dist/src/server/directHarnessRuntime.d.mts.map +1 -0
- package/dist/src/server/directHarnessRuntime.mjs +671 -754
- package/dist/src/server/directHarnessRuntime.mjs.map +1 -1
- package/dist/src/server/largeFrameLink.cjs +47 -0
- package/dist/src/server/largeFrameLink.cjs.map +1 -0
- package/dist/src/server/largeFrameLink.mjs +47 -0
- package/dist/src/server/largeFrameLink.mjs.map +1 -0
- package/dist/src/server/liveImport.cjs +1 -1
- package/dist/src/server/liveImport.cjs.map +1 -1
- package/dist/src/server/liveImport.d.mts +1 -1
- package/dist/src/server/liveImport.mjs +1 -1
- package/dist/src/server/liveImport.mjs.map +1 -1
- package/dist/src/server/mcpBundleLoader.cjs.map +1 -1
- package/dist/src/server/mcpBundleLoader.d.mts +6 -6
- package/dist/src/server/mcpBundleLoader.d.mts.map +1 -1
- package/dist/src/server/mcpBundleLoader.mjs.map +1 -1
- package/dist/src/server/serverPackages.cjs +60 -0
- package/dist/src/server/serverPackages.cjs.map +1 -0
- package/dist/src/server/serverPackages.d.mts +44 -0
- package/dist/src/server/serverPackages.d.mts.map +1 -0
- package/dist/src/server/serverPackages.mjs +59 -0
- package/dist/src/server/serverPackages.mjs.map +1 -0
- package/dist/src/server/serverScope.cjs +510 -0
- package/dist/src/server/serverScope.cjs.map +1 -0
- package/dist/src/server/serverScope.d.mts +123 -0
- package/dist/src/server/serverScope.d.mts.map +1 -0
- package/dist/src/server/serverScope.mjs +510 -0
- package/dist/src/server/serverScope.mjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.cjs +3 -3
- package/dist/src/server/sessionMcpHandler.cjs.map +1 -1
- package/dist/src/server/sessionMcpHandler.mjs +4 -4
- package/dist/src/server/sessionMcpHandler.mjs.map +1 -1
- package/dist/src/server/sessionMcpRoutes.cjs +2 -1
- package/dist/src/server/sessionMcpRoutes.cjs.map +1 -1
- package/dist/src/server/sessionMcpRoutes.mjs +2 -1
- package/dist/src/server/sessionMcpRoutes.mjs.map +1 -1
- package/dist/src/server/threadJournals.cjs +38 -107
- package/dist/src/server/threadJournals.cjs.map +1 -1
- package/dist/src/server/threadJournals.mjs +38 -104
- package/dist/src/server/threadJournals.mjs.map +1 -1
- package/dist/src/services/apiSurfaceAssert/index.cjs +1 -1
- package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -1
- package/dist/src/services/apiSurfaceAssert/index.d.mts +6 -6
- package/dist/src/services/apiSurfaceAssert/index.mjs +1 -1
- package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -1
- package/dist/src/services/chatgptAuth/index.cjs +1 -220
- package/dist/src/services/chatgptAuth/index.cjs.map +1 -1
- package/dist/src/services/chatgptAuth/index.d.mts +0 -18
- package/dist/src/services/chatgptAuth/index.d.mts.map +1 -1
- package/dist/src/services/chatgptAuth/index.mjs +1 -217
- package/dist/src/services/chatgptAuth/index.mjs.map +1 -1
- package/dist/src/services/chatgptImages/index.cjs +1 -1
- package/dist/src/services/chatgptImages/index.cjs.map +1 -1
- package/dist/src/services/chatgptImages/index.mjs +1 -1
- package/dist/src/services/chatgptImages/index.mjs.map +1 -1
- package/dist/src/services/chatgptLogin/index.cjs +230 -0
- package/dist/src/services/chatgptLogin/index.cjs.map +1 -0
- package/dist/src/services/chatgptLogin/index.d.mts +21 -0
- package/dist/src/services/chatgptLogin/index.d.mts.map +1 -0
- package/dist/src/services/chatgptLogin/index.mjs +227 -0
- package/dist/src/services/chatgptLogin/index.mjs.map +1 -0
- package/dist/src/services/chatgptWebSearch/index.cjs +1 -1
- package/dist/src/services/chatgptWebSearch/index.cjs.map +1 -1
- package/dist/src/services/chatgptWebSearch/index.mjs +1 -1
- package/dist/src/services/chatgptWebSearch/index.mjs.map +1 -1
- package/dist/src/services/contextContributions/index.cjs +8 -8
- package/dist/src/services/contextContributions/index.cjs.map +1 -1
- package/dist/src/services/contextContributions/index.d.mts +3 -3
- package/dist/src/services/contextContributions/index.d.mts.map +1 -1
- package/dist/src/services/contextContributions/index.mjs +8 -8
- package/dist/src/services/contextContributions/index.mjs.map +1 -1
- package/dist/src/services/devProxyStore/devProxyRecords.cjs +59 -0
- package/dist/src/services/devProxyStore/devProxyRecords.cjs.map +1 -0
- package/dist/src/services/devProxyStore/devProxyRecords.mjs +56 -0
- package/dist/src/services/devProxyStore/devProxyRecords.mjs.map +1 -0
- package/dist/src/services/devProxyStore/index.cjs +7 -101
- package/dist/src/services/devProxyStore/index.cjs.map +1 -1
- package/dist/src/services/devProxyStore/index.mjs +7 -101
- package/dist/src/services/devProxyStore/index.mjs.map +1 -1
- package/dist/src/services/devProxyStore/sync.cjs +66 -0
- package/dist/src/services/devProxyStore/sync.cjs.map +1 -0
- package/dist/src/services/devProxyStore/sync.mjs +63 -0
- package/dist/src/services/devProxyStore/sync.mjs.map +1 -0
- package/dist/src/services/durableNavigation/docs.cjs +15 -0
- package/dist/src/services/durableNavigation/docs.cjs.map +1 -0
- package/dist/src/services/durableNavigation/docs.mjs +16 -0
- package/dist/src/services/durableNavigation/docs.mjs.map +1 -0
- package/dist/src/services/durableNavigation/index.cjs +3 -18
- package/dist/src/services/durableNavigation/index.cjs.map +1 -1
- package/dist/src/services/durableNavigation/index.mjs +2 -17
- package/dist/src/services/durableNavigation/index.mjs.map +1 -1
- package/dist/src/services/durableQueue/docs.cjs +12 -0
- package/dist/src/services/durableQueue/docs.cjs.map +1 -0
- package/dist/src/services/durableQueue/docs.mjs +13 -0
- package/dist/src/services/durableQueue/docs.mjs.map +1 -0
- package/dist/src/services/durableQueue/index.cjs +151 -0
- package/dist/src/services/durableQueue/index.cjs.map +1 -0
- package/dist/src/services/durableQueue/index.mjs +149 -0
- package/dist/src/services/durableQueue/index.mjs.map +1 -0
- package/dist/src/services/durableRequestReceipts/docs.cjs +11 -0
- package/dist/src/services/durableRequestReceipts/docs.cjs.map +1 -0
- package/dist/src/services/durableRequestReceipts/docs.mjs +12 -0
- package/dist/src/services/durableRequestReceipts/docs.mjs.map +1 -0
- package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.cjs +10 -16
- package/dist/src/services/durableRequestReceipts/index.cjs.map +1 -0
- package/dist/src/services/durableRequestReceipts/index.d.mts +12 -0
- package/dist/src/services/durableRequestReceipts/index.d.mts.map +1 -0
- package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.mjs +7 -13
- package/dist/src/services/durableRequestReceipts/index.mjs.map +1 -0
- package/dist/src/services/durableSession/docs.cjs +65 -0
- package/dist/src/services/durableSession/docs.cjs.map +1 -0
- package/dist/src/services/durableSession/docs.d.mts +17 -0
- package/dist/src/services/durableSession/docs.d.mts.map +1 -0
- package/dist/src/services/durableSession/docs.mjs +60 -0
- package/dist/src/services/durableSession/docs.mjs.map +1 -0
- package/dist/src/services/durableSession/index.cjs +21 -0
- package/dist/src/services/durableSession/index.cjs.map +1 -0
- package/dist/src/services/durableSession/index.d.mts +13 -0
- package/dist/src/services/durableSession/index.d.mts.map +1 -0
- package/dist/src/services/durableSession/index.mjs +20 -0
- package/dist/src/services/durableSession/index.mjs.map +1 -0
- package/dist/src/services/durableSubagents/docs.cjs +15 -0
- package/dist/src/services/durableSubagents/docs.cjs.map +1 -0
- package/dist/src/services/durableSubagents/docs.mjs +16 -0
- package/dist/src/services/durableSubagents/docs.mjs.map +1 -0
- package/dist/src/services/durableSubagents/extension.cjs +11 -0
- package/dist/src/services/durableSubagents/extension.cjs.map +1 -0
- package/dist/src/services/durableSubagents/extension.mjs +12 -0
- package/dist/src/services/durableSubagents/extension.mjs.map +1 -0
- package/dist/src/services/durableSubagents/index.cjs +95 -0
- package/dist/src/services/durableSubagents/index.cjs.map +1 -0
- package/dist/src/services/durableSubagents/index.mjs +90 -0
- package/dist/src/services/durableSubagents/index.mjs.map +1 -0
- package/dist/src/services/durableSubagents/tasks.cjs +25 -0
- package/dist/src/services/durableSubagents/tasks.cjs.map +1 -0
- package/dist/src/services/durableSubagents/tasks.mjs +26 -0
- package/dist/src/services/durableSubagents/tasks.mjs.map +1 -0
- package/dist/src/services/headlessClient/index.cjs +20 -13
- package/dist/src/services/headlessClient/index.cjs.map +1 -1
- package/dist/src/services/headlessClient/index.mjs +21 -14
- package/dist/src/services/headlessClient/index.mjs.map +1 -1
- package/dist/src/services/historyOwnership/type.d.mts +15 -0
- package/dist/src/services/historyOwnership/type.d.mts.map +1 -0
- package/dist/src/services/hubChannelHarness/index.cjs +2 -2
- package/dist/src/services/hubChannelHarness/index.cjs.map +1 -1
- package/dist/src/services/hubChannelHarness/index.d.mts +8 -8
- package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -1
- package/dist/src/services/hubChannelHarness/index.mjs +2 -2
- package/dist/src/services/hubChannelHarness/index.mjs.map +1 -1
- package/dist/src/services/json/core.cjs +30 -0
- package/dist/src/services/json/core.cjs.map +1 -0
- package/dist/src/services/json/core.d.mts +21 -0
- package/dist/src/services/json/core.d.mts.map +1 -0
- package/dist/src/services/json/core.mjs +26 -0
- package/dist/src/services/json/core.mjs.map +1 -0
- package/dist/src/services/json/sync.cjs +48 -0
- package/dist/src/services/json/sync.cjs.map +1 -0
- package/dist/src/services/json/sync.d.mts +22 -0
- package/dist/src/services/json/sync.d.mts.map +1 -0
- package/dist/src/services/json/sync.mjs +43 -0
- package/dist/src/services/json/sync.mjs.map +1 -0
- package/dist/src/services/kernel/index.cjs +2 -2
- package/dist/src/services/kernel/index.cjs.map +1 -1
- package/dist/src/services/kernel/index.d.mts +3 -3
- package/dist/src/services/kernel/index.d.mts.map +1 -1
- package/dist/src/services/kernel/index.mjs +2 -2
- package/dist/src/services/kernel/index.mjs.map +1 -1
- package/dist/src/services/nativeChildTools/index.cjs +16 -0
- package/dist/src/services/nativeChildTools/index.cjs.map +1 -0
- package/dist/src/services/nativeChildTools/index.mjs +16 -0
- package/dist/src/services/nativeChildTools/index.mjs.map +1 -0
- package/dist/src/services/nodeHost/index.cjs +30 -0
- package/dist/src/services/nodeHost/index.cjs.map +1 -0
- package/dist/src/services/nodeHost/index.d.mts +16 -0
- package/dist/src/services/nodeHost/index.d.mts.map +1 -0
- package/dist/src/services/nodeHost/index.mjs +27 -0
- package/dist/src/services/nodeHost/index.mjs.map +1 -0
- package/dist/src/services/nodeModelDependencies/index.cjs +89 -0
- package/dist/src/services/nodeModelDependencies/index.cjs.map +1 -0
- package/dist/src/services/nodeModelDependencies/index.mjs +86 -0
- package/dist/src/services/nodeModelDependencies/index.mjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.cjs +6 -128
- package/dist/src/services/openSessionRegistry/index.cjs.map +1 -1
- package/dist/src/services/openSessionRegistry/index.d.mts +5 -36
- package/dist/src/services/openSessionRegistry/index.mjs +6 -128
- package/dist/src/services/openSessionRegistry/index.mjs.map +1 -1
- package/dist/src/services/openSessionRegistry/openSessionRecords.cjs +87 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts +30 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.mjs +81 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.mjs.map +1 -0
- package/dist/src/services/openSessionRegistry/sync.cjs +71 -0
- package/dist/src/services/openSessionRegistry/sync.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/sync.d.mts +14 -0
- package/dist/src/services/openSessionRegistry/sync.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/sync.mjs +68 -0
- package/dist/src/services/openSessionRegistry/sync.mjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.cjs +1 -1
- package/dist/src/services/packageApiHarness/index.cjs.map +1 -1
- package/dist/src/services/packageApiHarness/index.d.mts +6 -6
- package/dist/src/services/packageApiHarness/index.d.mts.map +1 -1
- package/dist/src/services/packageApiHarness/index.mjs +2 -2
- package/dist/src/services/packageApiHarness/index.mjs.map +1 -1
- package/dist/src/services/piArgs/index.cjs +53 -0
- package/dist/src/services/piArgs/index.cjs.map +1 -0
- package/dist/src/services/piArgs/index.d.mts +6 -0
- package/dist/src/services/piArgs/index.d.mts.map +1 -0
- package/dist/src/services/piArgs/index.mjs +53 -0
- package/dist/src/services/piArgs/index.mjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.cjs +47 -39
- package/dist/src/services/piExtensionHost/index.cjs.map +1 -1
- package/dist/src/services/piExtensionHost/index.d.mts +83 -0
- package/dist/src/services/piExtensionHost/index.d.mts.map +1 -0
- package/dist/src/services/piExtensionHost/index.mjs +47 -38
- package/dist/src/services/piExtensionHost/index.mjs.map +1 -1
- package/dist/src/services/piHelpTools/index.cjs +5 -5
- package/dist/src/services/piHelpTools/index.cjs.map +1 -1
- package/dist/src/services/piHelpTools/index.d.mts.map +1 -1
- package/dist/src/services/piHelpTools/index.mjs +7 -7
- package/dist/src/services/piHelpTools/index.mjs.map +1 -1
- package/dist/src/services/piMessages/index.cjs +106 -0
- package/dist/src/services/piMessages/index.cjs.map +1 -0
- package/dist/src/services/piMessages/index.mjs +105 -0
- package/dist/src/services/piMessages/index.mjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.cjs +4 -4
- package/dist/src/services/piSessionEntries/index.cjs.map +1 -1
- package/dist/src/services/piSessionEntries/index.mjs +3 -3
- package/dist/src/services/piSessionEntries/index.mjs.map +1 -1
- package/dist/src/services/piSettings/core.cjs +308 -0
- package/dist/src/services/piSettings/core.cjs.map +1 -0
- package/dist/src/services/piSettings/core.d.mts +102 -0
- package/dist/src/services/piSettings/core.d.mts.map +1 -0
- package/dist/src/services/piSettings/core.mjs +276 -0
- package/dist/src/services/piSettings/core.mjs.map +1 -0
- package/dist/src/services/piSettings/sync.cjs +119 -0
- package/dist/src/services/piSettings/sync.cjs.map +1 -0
- package/dist/src/services/piSettings/sync.d.mts +44 -0
- package/dist/src/services/piSettings/sync.d.mts.map +1 -0
- package/dist/src/services/piSettings/sync.mjs +110 -0
- package/dist/src/services/piSettings/sync.mjs.map +1 -0
- package/dist/src/services/piSummary/index.cjs +7 -0
- package/dist/src/services/piSummary/index.cjs.map +1 -0
- package/dist/src/services/piSummary/index.mjs +7 -0
- package/dist/src/services/piSummary/index.mjs.map +1 -0
- package/dist/src/services/platformFiles/index.cjs +44 -0
- package/dist/src/services/platformFiles/index.cjs.map +1 -0
- package/dist/src/services/platformFiles/index.d.mts +16 -0
- package/dist/src/services/platformFiles/index.d.mts.map +1 -0
- package/dist/src/services/platformFiles/index.mjs +39 -0
- package/dist/src/services/platformFiles/index.mjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.cjs +19 -13
- package/dist/src/services/pluginLifecycle/index.cjs.map +1 -1
- package/dist/src/services/pluginLifecycle/index.d.mts +2 -0
- package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -1
- package/dist/src/services/pluginLifecycle/index.mjs +19 -14
- package/dist/src/services/pluginLifecycle/index.mjs.map +1 -1
- package/dist/src/services/poPackage/core.cjs +73 -0
- package/dist/src/services/poPackage/core.cjs.map +1 -0
- package/dist/src/services/poPackage/core.d.mts +32 -0
- package/dist/src/services/poPackage/core.d.mts.map +1 -0
- package/dist/src/services/poPackage/core.mjs +66 -0
- package/dist/src/services/poPackage/core.mjs.map +1 -0
- package/dist/src/services/poPackage/sync.cjs +55 -0
- package/dist/src/services/poPackage/sync.cjs.map +1 -0
- package/dist/src/services/poPackage/sync.d.mts +21 -0
- package/dist/src/services/poPackage/sync.d.mts.map +1 -0
- package/dist/src/services/poPackage/sync.mjs +50 -0
- package/dist/src/services/poPackage/sync.mjs.map +1 -0
- package/dist/src/services/providerAuth/index.cjs +11 -7
- package/dist/src/services/providerAuth/index.cjs.map +1 -1
- package/dist/src/services/providerAuth/index.mjs +11 -7
- package/dist/src/services/providerAuth/index.mjs.map +1 -1
- package/dist/src/services/publicFileShares/index.cjs +1 -1
- package/dist/src/services/publicFileShares/index.cjs.map +1 -1
- package/dist/src/services/publicFileShares/index.d.mts +2 -2
- package/dist/src/services/publicFileShares/index.mjs +2 -2
- package/dist/src/services/publicFileShares/index.mjs.map +1 -1
- package/dist/src/services/remoteAccess/index.d.mts +1 -0
- package/dist/src/services/remoteAccess/index.d.mts.map +1 -1
- package/dist/src/services/remoteAccessStore/index.cjs +8 -190
- package/dist/src/services/remoteAccessStore/index.cjs.map +1 -1
- package/dist/src/services/remoteAccessStore/index.d.mts +2 -0
- package/dist/src/services/remoteAccessStore/index.mjs +7 -187
- package/dist/src/services/remoteAccessStore/index.mjs.map +1 -1
- package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs +98 -0
- package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs +88 -0
- package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs.map +1 -0
- package/dist/src/services/remoteAccessStore/sync.cjs +111 -0
- package/dist/src/services/remoteAccessStore/sync.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/sync.mjs +108 -0
- package/dist/src/services/remoteAccessStore/sync.mjs.map +1 -0
- package/dist/src/services/runtimeIdentity/sync.cjs +23 -0
- package/dist/src/services/runtimeIdentity/sync.cjs.map +1 -0
- package/dist/src/services/runtimeIdentity/sync.d.mts +9 -0
- package/dist/src/services/runtimeIdentity/sync.d.mts.map +1 -0
- package/dist/src/services/runtimeIdentity/sync.mjs +20 -0
- package/dist/src/services/runtimeIdentity/sync.mjs.map +1 -0
- package/dist/src/services/serialRunner/index.cjs +25 -0
- package/dist/src/services/serialRunner/index.cjs.map +1 -0
- package/dist/src/services/serialRunner/index.d.mts +10 -0
- package/dist/src/services/serialRunner/index.d.mts.map +1 -0
- package/dist/src/services/serialRunner/index.mjs +25 -0
- package/dist/src/services/serialRunner/index.mjs.map +1 -0
- package/dist/src/services/{serverFacet → serverHost}/index.cjs +5 -5
- package/dist/src/services/serverHost/index.cjs.map +1 -0
- package/dist/src/services/serverHost/index.d.mts +31 -0
- package/dist/src/services/serverHost/index.d.mts.map +1 -0
- package/dist/src/services/{serverFacet → serverHost}/index.mjs +5 -5
- package/dist/src/services/serverHost/index.mjs.map +1 -0
- package/dist/src/services/sessionAttachments/index.cjs +4 -3
- package/dist/src/services/sessionAttachments/index.cjs.map +1 -1
- package/dist/src/services/sessionAttachments/index.d.mts +1 -6
- package/dist/src/services/sessionAttachments/index.d.mts.map +1 -1
- package/dist/src/services/sessionAttachments/index.mjs +3 -2
- package/dist/src/services/sessionAttachments/index.mjs.map +1 -1
- package/dist/src/services/sessionAttachments/type.d.mts +9 -0
- package/dist/src/services/sessionAttachments/type.d.mts.map +1 -0
- package/dist/src/services/sessionFiles/index.cjs +96 -0
- package/dist/src/services/sessionFiles/index.cjs.map +1 -0
- package/dist/src/services/sessionFiles/index.d.mts +33 -0
- package/dist/src/services/sessionFiles/index.d.mts.map +1 -0
- package/dist/src/services/sessionFiles/index.mjs +89 -0
- package/dist/src/services/sessionFiles/index.mjs.map +1 -0
- package/dist/src/services/sessionFiles/sessionDirectory.cjs +66 -0
- package/dist/src/services/sessionFiles/sessionDirectory.cjs.map +1 -0
- package/dist/src/services/sessionFiles/sessionDirectory.mjs +62 -0
- package/dist/src/services/sessionFiles/sessionDirectory.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.cjs +31 -33
- package/dist/src/services/sessionGitStatus/index.cjs.map +1 -1
- package/dist/src/services/sessionGitStatus/index.mjs +31 -33
- package/dist/src/services/sessionGitStatus/index.mjs.map +1 -1
- package/dist/src/services/sessionPresentation/index.cjs +3 -27
- package/dist/src/services/sessionPresentation/index.cjs.map +1 -1
- package/dist/src/services/sessionPresentation/index.mjs +3 -27
- package/dist/src/services/sessionPresentation/index.mjs.map +1 -1
- package/dist/src/services/skillPrompt/index.cjs +11 -0
- package/dist/src/services/skillPrompt/index.cjs.map +1 -0
- package/dist/src/services/skillPrompt/index.mjs +11 -0
- package/dist/src/services/skillPrompt/index.mjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs +44 -30
- package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -1
- package/dist/src/services/sqliteSessionHistory/index.d.mts +7 -4
- package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -1
- package/dist/src/services/sqliteSessionHistory/index.mjs +43 -28
- package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -1
- package/dist/src/services/sqliteTranscriptReader/index.cjs +21 -45
- package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -1
- package/dist/src/services/sqliteTranscriptReader/index.d.mts +3 -2
- package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -1
- package/dist/src/services/sqliteTranscriptReader/index.mjs +16 -38
- package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -1
- package/dist/src/services/testMode/index.cjs +162 -0
- package/dist/src/services/testMode/index.cjs.map +1 -0
- package/dist/src/services/testMode/index.d.mts +17 -0
- package/dist/src/services/testMode/index.d.mts.map +1 -0
- package/dist/src/services/testMode/index.mjs +155 -0
- package/dist/src/services/testMode/index.mjs.map +1 -0
- package/dist/src/services/toolOverrides/index.cjs +6 -6
- package/dist/src/services/toolOverrides/index.cjs.map +1 -1
- package/dist/src/services/toolOverrides/index.d.mts +3 -3
- package/dist/src/services/toolOverrides/index.d.mts.map +1 -1
- package/dist/src/services/toolOverrides/index.mjs +6 -6
- package/dist/src/services/toolOverrides/index.mjs.map +1 -1
- package/dist/src/services/toolPrompt/index.d.mts +17 -0
- package/dist/src/services/toolPrompt/index.d.mts.map +1 -0
- package/dist/src/services/toolSurface/index.cjs +3 -3
- package/dist/src/services/toolSurface/index.cjs.map +1 -1
- package/dist/src/services/toolSurface/index.d.mts +3 -3
- package/dist/src/services/toolSurface/index.d.mts.map +1 -1
- package/dist/src/services/toolSurface/index.mjs +4 -4
- package/dist/src/services/toolSurface/index.mjs.map +1 -1
- package/dist/src/services/traceContext/index.cjs.map +1 -1
- package/dist/src/services/traceContext/index.mjs.map +1 -1
- package/dist/src/services/transcriptPages/index.cjs +159 -33
- package/dist/src/services/transcriptPages/index.cjs.map +1 -1
- package/dist/src/services/transcriptPages/index.mjs +158 -34
- package/dist/src/services/transcriptPages/index.mjs.map +1 -1
- package/dist/src/services/voiceToolsContract/index.cjs +7 -7
- package/dist/src/services/voiceToolsContract/index.cjs.map +1 -1
- package/dist/src/services/voiceToolsContract/index.d.mts +4 -4
- package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -1
- package/dist/src/services/voiceToolsContract/index.mjs +7 -7
- package/dist/src/services/voiceToolsContract/index.mjs.map +1 -1
- package/dist/src/services/workspaceRegistry/index.cjs +9 -179
- package/dist/src/services/workspaceRegistry/index.cjs.map +1 -1
- package/dist/src/services/workspaceRegistry/index.d.mts +5 -47
- package/dist/src/services/workspaceRegistry/index.mjs +7 -176
- package/dist/src/services/workspaceRegistry/index.mjs.map +1 -1
- package/dist/src/services/workspaceRegistry/sync.cjs +148 -0
- package/dist/src/services/workspaceRegistry/sync.cjs.map +1 -0
- package/dist/src/services/workspaceRegistry/sync.d.mts +34 -0
- package/dist/src/services/workspaceRegistry/sync.d.mts.map +1 -0
- package/dist/src/services/workspaceRegistry/sync.mjs +140 -0
- package/dist/src/services/workspaceRegistry/sync.mjs.map +1 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.cjs +114 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.cjs.map +1 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts +31 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts.map +1 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.mjs +101 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.mjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +339 -202
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -1
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +16 -21
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -1
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +329 -191
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -1
- package/dist/src/systems/child/services/childSession/index.cjs +94 -20
- package/dist/src/systems/child/services/childSession/index.cjs.map +1 -1
- package/dist/src/systems/child/services/childSession/index.d.mts +12 -3
- package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -1
- package/dist/src/systems/child/services/childSession/index.mjs +94 -20
- package/dist/src/systems/child/services/childSession/index.mjs.map +1 -1
- package/dist/src/systems/child/types/childSession.cjs +33 -13
- package/dist/src/systems/child/types/childSession.cjs.map +1 -1
- package/dist/src/systems/child/types/childSession.d.mts +143 -80
- package/dist/src/systems/child/types/childSession.d.mts.map +1 -1
- package/dist/src/systems/child/types/childSession.mjs +24 -9
- package/dist/src/systems/child/types/childSession.mjs.map +1 -1
- package/dist/src/systems/main/adapters/headlessHost.cjs +30 -27
- package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -1
- package/dist/src/systems/main/adapters/headlessHost.d.mts +22 -22
- package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -1
- package/dist/src/systems/main/adapters/headlessHost.mjs +33 -30
- package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -1
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs +248 -229
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -1
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +4 -5
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -1
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs +239 -219
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -1
- package/dist/src/systems/main/types/headlessHost.d.mts +16 -14
- package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -1
- package/dist/src/testing/pi/testHost.cjs +2 -2
- package/dist/src/testing/pi/testHost.cjs.map +1 -1
- package/dist/src/testing/pi/testHost.d.mts +3 -2
- package/dist/src/testing/pi/testHost.mjs +3 -3
- package/dist/src/testing/pi/testHost.mjs.map +1 -1
- package/dist/src/types/config.d.mts +1 -1
- package/dist/src/types/config.d.mts.map +1 -1
- package/dist/src/types/kernel.d.mts +3 -3
- package/dist/src/types/server/directHarnessRuntime.d.mts +54 -25
- package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -1
- package/dist/src/types/server/sessionToolSurface.d.mts +9 -9
- package/dist/src/web/services/apiClient/index.d.mts +1 -0
- package/dist/src/web/services/apiPaths/index.cjs.map +1 -1
- package/dist/src/web/services/apiPaths/index.d.mts +1 -1
- package/dist/src/web/services/apiPaths/index.mjs.map +1 -1
- package/dist/src/web/services/mcpWidget.cjs.map +1 -1
- package/dist/src/web/services/mcpWidget.d.mts +2 -2
- package/dist/src/web/services/mcpWidget.d.mts.map +1 -1
- package/dist/src/web/services/mcpWidget.mjs.map +1 -1
- package/dist/src/web/services/testing/templateRail.cjs +3 -0
- package/dist/src/web/services/testing/templateRail.cjs.map +1 -1
- package/dist/src/web/services/testing/templateRail.mjs +3 -0
- package/dist/src/web/services/testing/templateRail.mjs.map +1 -1
- package/dist/src/web/types/mcpWidget.d.mts +1 -1
- package/dist/src/web/types/nativeTemplate.d.mts +1 -1
- package/dist/src/web/types/nativeTemplate.d.mts.map +1 -1
- package/dist/src/web/types/template.d.mts +8 -0
- package/dist/src/web/types/template.d.mts.map +1 -1
- package/dist/src/web/types/webPlugin.d.mts +17 -5
- package/dist/src/web/types/webPlugin.d.mts.map +1 -1
- package/dist/testMode.cjs +4 -0
- package/dist/testMode.d.mts +2 -0
- package/dist/testMode.mjs +1 -0
- package/dist/testing.cjs +1 -1
- package/dist/testing.d.mts +2 -2
- package/dist/testing.mjs +2 -2
- package/dist/toolInventory.cjs.map +1 -1
- package/dist/toolInventory.mjs.map +1 -1
- package/dist/toolNames.mjs +1 -2
- package/dist/toolOverrides.cjs +4 -4
- package/dist/toolOverrides.d.mts +3 -3
- package/dist/toolOverrides.mjs +3 -3
- package/dist/toolSurface.cjs +4 -4
- package/dist/toolSurface.d.mts +3 -3
- package/dist/toolSurface.mjs +3 -3
- package/dist/transition.cjs +3 -3
- package/dist/transition.d.cjs +3 -3
- package/dist/transition.d.mts +2 -2
- package/dist/transition.mjs +1 -2
- package/dist/transitionClassifier.cjs.map +1 -1
- package/dist/transitionClassifier.d.mts +2 -2
- package/dist/transitionClassifier.d.mts.map +1 -1
- package/dist/transitionClassifier.mjs.map +1 -1
- package/dist/transitionCoordinator.cjs +3 -3
- package/dist/transitionCoordinator.cjs.map +1 -1
- package/dist/transitionCoordinator.d.mts +4 -4
- package/dist/transitionCoordinator.d.mts.map +1 -1
- package/dist/transitionCoordinator.mjs +3 -3
- package/dist/transitionCoordinator.mjs.map +1 -1
- package/dist/typesContextApi.d.mts +2 -1
- package/dist/typesContextApi.d.mts.map +1 -1
- package/dist/uiHub.cjs +3 -3
- package/dist/uiHub.d.mts +2 -2
- package/dist/uiHub.mjs +1 -2
- package/dist/voiceTools.cjs +5 -5
- package/dist/voiceTools.d.mts +3 -3
- package/dist/voiceTools.mjs +3 -3
- package/dist/web.cjs +8 -0
- package/dist/web.d.mts +3 -2
- package/dist/web.mjs +2 -1
- package/dist/webCompositions.cjs.map +1 -1
- package/dist/webCompositions.d.mts +7 -7
- package/dist/webCompositions.d.mts.map +1 -1
- package/dist/webCompositions.mjs.map +1 -1
- package/licenses/Codex-Apache-2.0.txt +201 -0
- package/package.json +58 -53
- package/dist/doomPackage.cjs +0 -61
- package/dist/doomPackage.cjs.map +0 -1
- package/dist/doomPackage.d.mts +0 -17
- package/dist/doomPackage.d.mts.map +0 -1
- package/dist/doomPackage.mjs +0 -54
- package/dist/doomPackage.mjs.map +0 -1
- package/dist/jsonlSessionRepo.cjs +0 -44
- package/dist/jsonlSessionRepo.cjs.map +0 -1
- package/dist/jsonlSessionRepo.d.mts +0 -7
- package/dist/jsonlSessionRepo.d.mts.map +0 -1
- package/dist/jsonlSessionRepo.mjs +0 -42
- package/dist/jsonlSessionRepo.mjs.map +0 -1
- package/dist/runtimeJson.cjs.map +0 -1
- package/dist/runtimeJson.d.mts.map +0 -1
- package/dist/runtimeJson.mjs.map +0 -1
- package/dist/runtimePiSettings.cjs.map +0 -1
- package/dist/runtimePiSettings.d.mts.map +0 -1
- package/dist/runtimePiSettings.mjs.map +0 -1
- package/dist/serverFacet.cjs +0 -34
- package/dist/serverFacet.d.mts +0 -10
- package/dist/serverFacet.mjs +0 -9
- package/dist/src/pi/piWebSocketListener.cjs +0 -115
- package/dist/src/pi/piWebSocketListener.cjs.map +0 -1
- package/dist/src/pi/piWebSocketListener.mjs +0 -115
- package/dist/src/pi/piWebSocketListener.mjs.map +0 -1
- package/dist/src/schemas/serverFacet.cjs +0 -111
- package/dist/src/schemas/serverFacet.cjs.map +0 -1
- package/dist/src/schemas/serverFacet.d.mts +0 -152
- package/dist/src/schemas/serverFacet.d.mts.map +0 -1
- package/dist/src/schemas/serverFacet.mjs +0 -101
- package/dist/src/schemas/serverFacet.mjs.map +0 -1
- package/dist/src/schemas/sessionUpdates.d.mts +0 -34
- package/dist/src/schemas/sessionUpdates.d.mts.map +0 -1
- package/dist/src/server/headlessProtocol.cjs +0 -382
- package/dist/src/server/headlessProtocol.cjs.map +0 -1
- package/dist/src/server/headlessProtocol.mjs +0 -382
- package/dist/src/server/headlessProtocol.mjs.map +0 -1
- package/dist/src/server/nativeChildTranscriptReader.cjs +0 -20
- package/dist/src/server/nativeChildTranscriptReader.cjs.map +0 -1
- package/dist/src/server/nativeChildTranscriptReader.mjs +0 -18
- package/dist/src/server/nativeChildTranscriptReader.mjs.map +0 -1
- package/dist/src/server/serverFacetLoader.cjs +0 -214
- package/dist/src/server/serverFacetLoader.cjs.map +0 -1
- package/dist/src/server/serverFacetLoader.d.mts +0 -72
- package/dist/src/server/serverFacetLoader.d.mts.map +0 -1
- package/dist/src/server/serverFacetLoader.mjs +0 -212
- package/dist/src/server/serverFacetLoader.mjs.map +0 -1
- package/dist/src/services/acpSessionUpdates/index.cjs +0 -129
- package/dist/src/services/acpSessionUpdates/index.cjs.map +0 -1
- package/dist/src/services/acpSessionUpdates/index.mjs +0 -129
- package/dist/src/services/acpSessionUpdates/index.mjs.map +0 -1
- package/dist/src/services/historyImport/index.cjs +0 -8
- package/dist/src/services/historyImport/index.cjs.map +0 -1
- package/dist/src/services/historyImport/index.d.mts +0 -68
- package/dist/src/services/historyImport/index.d.mts.map +0 -1
- package/dist/src/services/historyImport/index.mjs +0 -8
- package/dist/src/services/historyImport/index.mjs.map +0 -1
- package/dist/src/services/openSessionRegistry/index.d.mts.map +0 -1
- package/dist/src/services/requestReceipts/index.cjs.map +0 -1
- package/dist/src/services/requestReceipts/index.d.mts +0 -11
- package/dist/src/services/requestReceipts/index.d.mts.map +0 -1
- package/dist/src/services/requestReceipts/index.mjs.map +0 -1
- package/dist/src/services/rpcTranscript/index.cjs +0 -633
- package/dist/src/services/rpcTranscript/index.cjs.map +0 -1
- package/dist/src/services/rpcTranscript/index.d.mts +0 -50
- package/dist/src/services/rpcTranscript/index.d.mts.map +0 -1
- package/dist/src/services/rpcTranscript/index.mjs +0 -632
- package/dist/src/services/rpcTranscript/index.mjs.map +0 -1
- package/dist/src/services/serverFacet/index.cjs.map +0 -1
- package/dist/src/services/serverFacet/index.d.mts +0 -31
- package/dist/src/services/serverFacet/index.d.mts.map +0 -1
- package/dist/src/services/serverFacet/index.mjs.map +0 -1
- package/dist/src/services/workspaceRegistry/index.d.mts.map +0 -1
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +0 -28
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +0 -1
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +0 -25
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +0 -1
- package/dist/terminalPiChildSessionService.cjs +0 -324
- package/dist/terminalPiChildSessionService.cjs.map +0 -1
- package/dist/terminalPiChildSessionService.d.mts +0 -46
- package/dist/terminalPiChildSessionService.d.mts.map +0 -1
- package/dist/terminalPiChildSessionService.mjs +0 -318
- package/dist/terminalPiChildSessionService.mjs.map +0 -1
- package/dist/v3Export.cjs +0 -10
- package/dist/v3Export.cjs.map +0 -1
- package/dist/v3Export.d.mts +0 -35
- package/dist/v3Export.d.mts.map +0 -1
- package/dist/v3Export.mjs +0 -9
- package/dist/v3Export.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directHarnessRuntime.mjs","names":["released"],"sources":["../../../src/server/directHarnessRuntime.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport type { Context, JsonValue } from '@earendil-works/chord';\nimport { BACKGROUND_CONTEXT, awaitWithContext, withAbortSignal } from '@earendil-works/chord/context';\nimport {\n createModels,\n getSupportedThinkingLevels,\n createAssistantMessageEventStream,\n type AssistantMessageEventStream,\n type Models,\n type MutableModels,\n type Api,\n type Model,\n type ImageContent,\n type Message,\n type Provider,\n type AssistantMessage,\n type ToolResultMessage,\n} from '@earendil-works/pi-ai';\nimport { getCurrentSystemPrompt, getCurrentTools } from '@earendil-works/pi-ai/utils/transcript';\nimport { convertToLlm } from '@earendil-works/pi-coding-agent';\nimport {\n Harness,\n createRegistry,\n defineDoc,\n GenerationTask,\n ToolTask,\n CompactionTask,\n hook,\n watchEvents,\n UsageDoc,\n LiveDoc,\n InboxDoc,\n AgentDoc,\n UserEntry,\n type Tx,\n type CompactionResult,\n type TaskId,\n type Conversation,\n type Cursor,\n type EntryRecord,\n type EntryId,\n type SubmissionId,\n type HarnessSettings,\n type ToolRegistration,\n type AgentEventStream,\n} from '@earendil-works/pi-durable';\nimport { NodeExecutionEnv } from '@earendil-works/pi-durable/env/node';\n\nimport { DoomHeadlessToolBusyError } from '../schemas/headless';\nimport { contextTokensOf, contextUsageOf, latestAssistantUsage } from '../services/contextUsage';\nimport { initializeDurableNavigation, navigateDurableConversation } from '../services/durableNavigation';\nimport { formatSkillsForSystemPrompt } from '../services/piExtensionHost';\nimport { openSqliteSessionStorage, SessionIdentityDoc, SessionMetadataDoc } from '../services/sqliteSessionStorage';\nimport { projectDurableEntries } from '../services/transcriptPages';\nimport type {\n DirectHarnessRuntime,\n DirectHarnessRuntimeOptions,\n DirectHarnessFrame,\n DirectHarnessEventListener,\n DirectHarnessLifecycle,\n DirectHarnessQueuedInput,\n Entry,\n AgentHarnessTool,\n AgentMessage,\n HarnessEvent,\n} from '../types/server/directHarnessRuntime';\n\nexport const AGENT_SETTLED_ENTRY_TYPE = 'po.agent-settled';\nconst LifecycleDoc = defineDoc({\n kind: 'po.server.lifecycle',\n version: 1,\n scope: 'session',\n initial: () => ({ json: '{\"revision\":0,\"paused\":false,\"queue\":[]}' }),\n});\nconst FastModeDoc = defineDoc({\n kind: 'po.fast-mode',\n version: 1,\n scope: 'session',\n initial: (): { enabled: boolean } => ({ enabled: false }),\n});\n// Blocks local agent turns so a remote MCP agent can work without the local model acting.\nconst AgentLockDoc = defineDoc({\n kind: 'po.agent-lock',\n version: 1,\n scope: 'session',\n initial: (): { locked: boolean } => ({ locked: false }),\n});\nconst AGENT_LOCKED_ERROR = 'The local agent is locked. Unlock it to start a turn.';\nconst CODEX_API = 'openai-codex-responses';\nconst CODEX_PROVIDER = 'openai-codex';\nconst LabelsDoc = defineDoc({\n kind: 'po.labels',\n version: 1,\n scope: 'session',\n initial: () => ({ labels: {} as Record<string, string> }),\n});\ntype Retained = Omit<DirectHarnessQueuedInput, 'disposition'> & {\n disposition: DirectHarnessQueuedInput['disposition'] | 'consumed' | 'removed';\n // Older records have unknown provenance and remain retained, not queue-owned.\n explicitQueue?: boolean;\n attempt?: number;\n submissionMode?: 'steer' | 'followUp' | 'reject' | 'write';\n} & { submissionId?: number; conversationId?: number; message?: AgentMessage; operationId?: string };\ntype InternalDeliveryRecord = { message: AgentMessage; conversationId: number; submissionId?: number };\ntype LifecycleRecord = {\n revision: number;\n paused: boolean;\n abortOperationId?: string;\n abortTaskId?: number;\n queue: Retained[];\n internalDeliveries?: Record<string, InternalDeliveryRecord>;\n};\n\nfunction nativeId<T extends number>(id: string): T {\n const value = Number(id);\n if (!Number.isSafeInteger(value) || value < 0 || String(value) !== id)\n throw new Error(`Invalid durable identifier: ${id}`);\n return value as T;\n}\nfunction json(value: unknown): JsonValue {\n return JSON.parse(JSON.stringify(value)) as JsonValue;\n}\nfunction text(message: string | AgentMessage): string {\n if (typeof message === 'string') return message;\n if (!('content' in message))\n return 'summary' in message ? message.summary : 'output' in message ? message.output : '';\n return typeof message.content === 'string'\n ? message.content\n : message.content.map((p) => (p.type === 'text' ? p.text : '')).join('');\n}\n/** Compatibility projection keeps protocol identities strings and retains fork ancestry. */\nexport async function projectDurableConversationEntries(\n conversation: Conversation,\n context: Context,\n): Promise<Entry[]> {\n const records: EntryRecord[] = [];\n let cursor: Cursor | undefined;\n do {\n const page = await conversation.entries({}, 256, cursor, context);\n records.push(...page.items);\n cursor = page.next;\n } while (cursor);\n records.reverse();\n return projectDurableEntries(records);\n}\n/**\n * Runs one prompt and returns the newest assistant text it produced. `hold` keeps the run open\n * across later turns started by intercom delivery: while it resolves true, wait for the lane to\n * go idle and ask again. The returned text is the newest one across all of those turns.\n */\nexport async function promptForAssistantText(\n runtime: DirectHarnessRuntime,\n prompt: string,\n hold?: () => Promise<boolean>,\n): Promise<string | undefined> {\n const previous = new Set((await runtime.readEntries()).entries.map((e) => e.id));\n await (\n await runtime.submitInternalMessage(prompt)\n ).settled;\n while (hold && (await hold())) await runtime.lane.waitForIdle(BACKGROUND_CONTEXT);\n return (\n (await runtime.readEntries()).entries\n .toReversed()\n .filter((e) => !previous.has(e.id))\n .flatMap((e) => (e.type === 'message' && e.message.role === 'assistant' ? [text(e.message).trim()] : []))[0] ||\n undefined\n );\n}\n\nexport async function createDirectHarnessRuntime<TContext extends object | undefined = object | undefined>(\n options: DirectHarnessRuntimeOptions<TContext>,\n): Promise<DirectHarnessRuntime<TContext>> {\n if (options.initialFastMode !== undefined && typeof options.initialFastMode !== 'boolean')\n throw new Error('Initial Fast mode must be a boolean.');\n if (options.initialAgentLocked !== undefined && typeof options.initialAgentLocked !== 'boolean')\n throw new Error('Initial agent lock must be a boolean.');\n const context = options.context ?? BACKGROUND_CONTEXT;\n if (options.storage === 'jsonl' || options.legacySessionPath !== undefined)\n throw new Error('Legacy JSONL direct storage is unsupported; use durable-v1 SQLite');\n if (options.session && !options.durableStorage)\n throw new Error('A durable Session injection requires its raw durableStorage');\n const storage = options.durableStorage\n ? {\n storage: options.durableStorage,\n sessionFile: options.sessionPath,\n historyLease: undefined,\n repository: undefined,\n }\n : await openSqliteSessionStorage(options, context);\n let startupHarness: Harness | undefined;\n try {\n const registry = createRegistry();\n const environment = new NodeExecutionEnv({ cwd: options.cwd });\n let disposed = false;\n let quarantined = false;\n let failure: unknown;\n let preparationFailure: unknown;\n const terminatingCalls = new Set<string>();\n let fastMode = false;\n let agentLocked = false;\n const assertUnlocked = () => {\n if (agentLocked) throw new Error(AGENT_LOCKED_ERROR);\n };\n let resources = options.resources ?? {};\n let tools = options.tools ?? [];\n let activeNames = new Set(options.activeToolNames ?? tools.map((t) => t.name));\n let settings: HarnessSettings = {\n stream: options.streamOptions,\n retry: options.retry,\n compaction: options.compaction,\n toolExecution: options.toolExecution,\n steeringMode: options.steeringMode,\n followUpMode: options.followUpMode,\n };\n const listeners = new Set<(frame: DirectHarnessFrame) => void>();\n const eventListeners = new Set<DirectHarnessEventListener>();\n const checkpointBoundaries = new Set<{\n active: boolean;\n callback: Parameters<NonNullable<DirectHarnessRuntime['registerCheckpointBoundary']>>[0];\n }>();\n const emit = (frame: DirectHarnessFrame) => {\n for (const listener of listeners) {\n try {\n listener(frame);\n } catch (error) {\n for (const other of listeners) if (other !== listener) other({ type: 'handler_error', error: String(error) });\n }\n }\n };\n const writable = async <T>(work: () => Promise<T>): Promise<T> => {\n if (disposed || quarantined) throw new Error('Direct harness writes are unavailable', { cause: failure });\n try {\n await storage.historyLease?.assertQuiescent();\n return await work();\n } catch (error) {\n const code = typeof error === 'object' && error !== null && 'code' in error ? error.code : undefined;\n if (\n typeof code === 'string' &&\n ['EACCES', 'EBUSY', 'EIO', 'EMFILE', 'ENFILE', 'ENOSPC', 'EPERM', 'EROFS'].includes(code)\n ) {\n quarantined = true;\n failure = error;\n emit({ type: 'error', code: 'storage_quarantined', error: String(error) });\n }\n throw error;\n }\n };\n let sourceModels: Models | MutableModels;\n if (options.models) sourceModels = options.models;\n else {\n if (!options.providers?.length) throw new Error('Direct harness requires Models or a Provider');\n sourceModels = createModels(options.credentials ? { credentials: options.credentials } : undefined);\n }\n for (const provider of options.providers ?? []) {\n const mutable = sourceModels as Partial<MutableModels> & {\n registerNativeProvider?: (provider: Provider) => void;\n };\n const register = mutable.setProvider?.bind(sourceModels) ?? mutable.registerNativeProvider?.bind(sourceModels);\n if (!register) throw new Error('Models registry cannot register providers');\n register(provider);\n }\n const models = new Proxy(sourceModels, {\n get(target, key) {\n const value: unknown = Reflect.get(target, key, target);\n if (typeof value !== 'function') return value;\n if (\n !['stream', 'complete', 'streamSimple', 'completeSimple', 'streamDeferred', 'fetchDeferred'].includes(\n String(key),\n )\n )\n return value.bind(target);\n return (...args: unknown[]) => {\n if (disposed || quarantined || preparationFailure)\n throw new Error('Model dispatch unavailable', { cause: preparationFailure });\n options.guardModelRequest?.();\n const request = args[1] as { tools?: { name: string }[] };\n if (\n !['complete', 'completeSimple'].includes(String(key)) &&\n request?.tools?.some((t) => !activeNames.has(t.name))\n )\n throw new Error('Model request contains disabled tools');\n const requestOptions = args[2] as Record<string, unknown> | undefined;\n const usePriority =\n fastMode &&\n (args[0] as Model<Api>).api === CODEX_API &&\n (args[0] as Model<Api>).provider === CODEX_PROVIDER;\n const originalOnPayload = requestOptions?.onPayload;\n args[2] = {\n ...requestOptions,\n // Only the public auxiliary completion API may override Doom's persisted identity.\n sessionId: key === 'complete' ? (requestOptions?.sessionId ?? sessionId) : sessionId,\n ...(usePriority ? { serviceTier: 'priority' } : {}),\n onPayload: async (payload: unknown, model: Model<Api>) => {\n options.guardModelRequest?.();\n const original =\n typeof originalOnPayload === 'function' ? await originalOnPayload(payload, model) : undefined;\n const transformed = original === undefined ? payload : original;\n const patch = await options.beforePayload?.({ payload: transformed, model }, context);\n const finalPayload = patch === undefined ? transformed : patch.payload;\n if (!usePriority) return finalPayload;\n if (typeof finalPayload !== 'object' || finalPayload === null || Array.isArray(finalPayload))\n throw new Error('Invalid Codex request payload');\n return { ...finalPayload, service_tier: 'priority' };\n },\n };\n const dispatched: unknown = Reflect.apply(value, target, args);\n if (!['stream', 'streamSimple', 'fetchDeferred'].includes(String(key))) return dispatched;\n const source = dispatched as AssistantMessageEventStream;\n const output = createAssistantMessageEventStream();\n const requestedModel = args[0] as Model<Api>;\n const signal = (args[2] as { signal?: AbortSignal }).signal;\n let ended = false;\n let current: AssistantMessage = {\n role: 'assistant',\n content: [],\n api: requestedModel.api,\n provider: requestedModel.provider,\n model: requestedModel.id,\n timestamp: Date.now(),\n stopReason: 'pending',\n usage: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n },\n };\n const cancel = () => {\n if (ended) return;\n ended = true;\n const cancelled = { ...current, stopReason: 'aborted' as const, errorMessage: 'Agent request aborted' };\n output.push({ type: 'error', reason: 'aborted', error: cancelled });\n output.end();\n };\n signal?.addEventListener('abort', cancel, { once: true });\n if (signal?.aborted) cancel();\n void (async () => {\n try {\n for await (const event of source) {\n if (ended) break;\n if ('partial' in event) current = event.partial;\n output.push(event);\n }\n if (!ended) {\n ended = true;\n output.end(await source.result());\n }\n } catch (error) {\n if (!ended) {\n ended = true;\n const failed = { ...current, stopReason: 'error' as const, errorMessage: String(error) };\n output.push({ type: 'error', reason: 'error', error: failed });\n output.end();\n }\n } finally {\n signal?.removeEventListener('abort', cancel);\n }\n })();\n return output;\n };\n },\n }) as Models;\n const resolveToolContext = async (ctx: Context) =>\n typeof options.toolContext === 'function' ? options.toolContext(ctx) : (options.toolContext as TContext);\n const nativeTool = (tool: AgentHarnessTool<TContext>): ToolRegistration => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n constrainedSampling: tool.constrainedSampling,\n prepareArguments: tool.prepareArguments ? (args) => tool.prepareArguments!(args) : undefined,\n replay: tool.replay ?? 'unsafe',\n executionMode: tool.executionMode,\n async execute(args, api, ctx) {\n if (!activeNames.has(tool.name)) throw new Error(`Tool '${tool.name}' is no longer active`);\n const pending = tool.execute(\n api.callId,\n args,\n (partial) => {\n for (const part of partial.content) if (part.type === 'text') api.output(part.text);\n if (partial.details !== undefined)\n void api\n .details(json(partial.details), ctx)\n .catch((error) => emit({ type: 'error', error: String(error) }));\n },\n await resolveToolContext(ctx),\n {\n invocationId: String(api.taskId),\n operationId: String(api.taskId),\n turnId: String(api.taskId),\n getMemo: (name) => api.memo(name, ctx),\n setMemo: async (name, value) => {\n if (value === undefined) throw new Error('Durable invocation memos cannot be deleted');\n await api.memo(name, value, ctx);\n },\n },\n ctx,\n );\n const result = await awaitWithContext(pending, ctx);\n return {\n content: result.content,\n isError: result.isError,\n ...(result.details === undefined ? {} : { details: json(result.details) }),\n };\n },\n });\n const install = () =>\n registry.install({\n name: 'po.host',\n tools: tools.map(nativeTool),\n sections: [\n {\n key: 'po',\n tag: false,\n async render(_input, ctx) {\n preparationFailure = undefined;\n try {\n const prompt =\n typeof options.systemPrompt === 'function'\n ? await options.systemPrompt(await resolveToolContext(ctx), ctx)\n : (options.systemPrompt ?? '');\n const skills =\n options.systemPrompt === undefined ? formatSkillsForSystemPrompt(resources.skills ?? []) : '';\n return [prompt, skills].filter(Boolean).join('\\n\\n');\n } catch (error) {\n preparationFailure = error;\n throw error;\n }\n },\n },\n ],\n hooks: [\n hook(GenerationTask, {\n async afterTools(_assistant, _results, api, ctx) {\n const lane = conversation;\n if (lane.id !== api.conversationId) return;\n for (const registration of checkpointBoundaries) {\n if (!registration.active || disposed || ctx.abortSignal?.aborted || external) continue;\n let open = true;\n try {\n await registration.callback({\n signal: ctx.abortSignal,\n appendMessage: (message) =>\n commitCheckpointMessage(registration, lane, message, ctx, () => open, api.taskId),\n });\n } finally {\n open = false;\n }\n }\n },\n async beforeRequest(request, api, ctx) {\n // Outside the try: a lock must not poison model dispatch for remote operations.\n assertUnlocked();\n try {\n const live = await api.snapshot(LiveDoc, api.conversationId, ctx);\n const retained = await api.snapshot(LifecycleDoc, ctx);\n const queue = JSON.parse(retained?.json ?? '{\"queue\":[]}') as LifecycleRecord;\n if (\n live?.run &&\n queue.queue.some(\n (item) =>\n item.operationId !== undefined &&\n item.submissionId !== undefined &&\n live.run!.inputs.includes(item.submissionId as SubmissionId) &&\n item.operationId !== String(live.run!.inputs[0]),\n )\n )\n throw new Error('Steering target changed before model admission');\n const agent = await conversation.agent(ctx);\n const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n await options.beforeModelRequest?.(\n { phase: 'turn', model, prompt: [...request.messages], resources },\n ctx,\n );\n const systemPrompt = getCurrentSystemPrompt(request.messages);\n const contextMessages = options.transformContext\n ? await restoreCustomContextMessages(request.messages, ctx, await conversation.context(ctx))\n : request.messages.filter((message) => message.role !== 'system');\n // Snapshot before hooks, which may mutate their input in place.\n const originalContext = structuredClone(contextMessages);\n const patch = await options.transformContext?.({ messages: contextMessages, systemPrompt }, ctx);\n const changed =\n patch &&\n ((patch.systemPrompt !== undefined && patch.systemPrompt !== systemPrompt) ||\n (patch.messages !== undefined && !isDeepStrictEqual(patch.messages, originalContext)));\n let messages: Message[] = changed\n ? [\n {\n role: 'system',\n content: patch.systemPrompt ?? systemPrompt,\n timestamp: Date.now(),\n toolsAdded: getCurrentTools(request.messages),\n },\n ...convertToLlm(patch.messages ?? request.messages.filter((m) => m.role !== 'system')),\n ]\n : [...request.messages];\n if (options.toProviderMessages) messages = await options.toProviderMessages(messages, ctx);\n await options.beforeModelRequest?.({ phase: 'request', model, resources }, ctx);\n return { messages };\n } catch (error) {\n preparationFailure = error;\n throw error;\n }\n },\n }),\n hook(ToolTask, {\n async beforeTool(call, _api, ctx) {\n const patch = await options.beforeTool?.(\n { toolCallId: call.id, toolName: call.name, args: call.arguments as Record<string, JsonValue> },\n ctx,\n );\n if (patch?.block?.terminate) terminatingCalls.add(call.id);\n return patch ? { arguments: patch.args, block: patch.block?.reason } : undefined;\n },\n async afterTool(call, result, _api, ctx) {\n const patch = await options.afterTool?.(\n {\n toolCallId: call.id,\n toolName: call.name,\n args: call.arguments as Record<string, JsonValue>,\n content: result.content ?? [],\n details: result.details,\n isError: result.isError ?? false,\n usage: result.usage,\n },\n ctx,\n );\n return patch\n ? {\n ...result,\n ...patch,\n control:\n patch.terminate || terminatingCalls.delete(call.id)\n ? { ...result.control, terminate: true }\n : result.control,\n }\n : terminatingCalls.delete(call.id)\n ? { ...result, control: { ...result.control, terminate: true } }\n : undefined;\n },\n }),\n hook(CompactionTask, {\n async beforeCompact(input, _api, ctx) {\n if (!options.beforeCompaction) return;\n const entries = projectDurableEntries(input.entries);\n const patch = await options.beforeCompaction(\n {\n reason: input.reason,\n customInstructions: input.instructions,\n preparation: {\n entries,\n messages: [...input.messages],\n tokensBefore: 0,\n retainedTail: [],\n firstKeptEntryId: String(input.firstKept),\n messagesToSummarize: [...input.messages],\n turnPrefixMessages: [],\n isSplitTurn: false,\n fileOps: { read: new Set(), written: new Set(), edited: new Set() },\n settings: {\n enabled: options.compaction?.enabled ?? true,\n reserveTokens: options.compaction?.reserveTokens ?? 16384,\n keepRecentTokens: options.compaction?.keepRecentTokens ?? 20000,\n },\n },\n },\n ctx,\n );\n if (patch?.decline) return { decline: true };\n if (patch?.compaction) return { summary: patch.compaction.summary };\n return undefined;\n },\n }),\n ],\n });\n install();\n const harness = await Harness.open(\n storage.storage,\n {\n models,\n registry,\n get settings() {\n return settings;\n },\n env: () => environment,\n onReport: (error) => emit({ type: 'handler_error', error: String(error) }),\n },\n context,\n );\n startupHarness = harness;\n const root = await harness.root(context, {\n agent: {\n cwd: options.cwd,\n ...((options.model ?? models.getModels()[0])\n ? {\n model: {\n provider: (options.model ?? models.getModels()[0]!).provider,\n modelId: (options.model ?? models.getModels()[0]!).id,\n },\n }\n : {}),\n ...(options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n },\n });\n const activeId = await initializeDurableNavigation(harness, root.id, context);\n let conversation = (await harness.conversation(activeId, context))!;\n const storedAgent = await harness.snapshot(AgentDoc, conversation.id, context);\n const initialModel = options.model ?? models.getModels()[0];\n await conversation.configure(\n {\n ...(!storedAgent?.model && initialModel\n ? { model: { provider: initialModel.provider, modelId: initialModel.id } }\n : {}),\n ...(!storedAgent?.thinkingLevel && options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n },\n context,\n );\n const storedFastMode = await harness.snapshot(FastModeDoc, context);\n fastMode = storedFastMode?.enabled ?? options.initialFastMode ?? false;\n const storedAgentLock = await harness.snapshot(AgentLockDoc, context);\n agentLocked = storedAgentLock?.locked ?? options.initialAgentLocked ?? false;\n const storedIdentity = await harness.snapshot(SessionIdentityDoc, context);\n const sessionId = storedIdentity?.id || options.sessionId || randomUUID();\n await writable(() =>\n harness.commit(async (tx) => {\n const identity = await tx.doc(SessionIdentityDoc);\n if (!identity.id) {\n identity.id = sessionId;\n identity.createdAt = Date.now();\n identity.parentSessionId = options.parentSessionId ?? '';\n }\n if (!storedAgentLock && options.initialAgentLocked !== undefined)\n (await tx.doc(AgentLockDoc)).locked = agentLocked;\n if (!storedFastMode) {\n (await tx.doc(FastModeDoc)).enabled = fastMode;\n if (options.initialFastMode !== undefined)\n await tx.appendEntry(conversation.id, {\n kind: 'po.fast-mode',\n data: { version: 1, enabled: fastMode, sessionId },\n });\n }\n const metadata = await tx.doc(SessionMetadataDoc);\n metadata.workspaceRoot ||= options.cwd;\n if (options.lane !== undefined) metadata.laneName = options.lane;\n if (!storedIdentity?.id && options.sessionName !== undefined) metadata.name = options.sessionName;\n }, context),\n );\n const laneName = options.lane ?? 'main';\n let resolveExited!: (code: number) => void;\n const exited = new Promise<number>((resolve) => {\n resolveExited = resolve;\n });\n const readRecord = async (): Promise<LifecycleRecord> =>\n JSON.parse(\n (await harness.snapshot(LifecycleDoc, context))?.json ?? '{\"revision\":0,\"paused\":false,\"queue\":[]}',\n ) as LifecycleRecord;\n const changeRecord = async <T>(change: (record: LifecycleRecord) => T): Promise<T> =>\n writable(() =>\n harness.commit(async (tx) => {\n const doc = await tx.doc(LifecycleDoc);\n const record = JSON.parse(doc.json) as LifecycleRecord;\n const result = change(record);\n record.revision++;\n doc.json = JSON.stringify(record);\n return result;\n }, context),\n );\n let userAdmission = false;\n let promptAdmissions = 0;\n let userAdmissionSettled: Promise<void> = Promise.resolve();\n let releaseUserAdmission: (() => void) | undefined;\n const guardUserAdmission = () => {\n if (userAdmission) throw new Error('A user interruption is already being admitted');\n };\n let external: string | undefined;\n let externalAbort: AbortController | undefined;\n let compactionAdmission = false;\n const nativeExecution = async () => {\n const live = await harness.snapshot(LiveDoc, conversation.id, context);\n const inspected = await harness.inspect(context);\n const task = inspected.tasks.find((t) => t.record.conversationId === conversation.id && !t.record.background);\n return live?.run\n ? {\n id: String(live.run.inputs[0]),\n kind: 'run' as const,\n status:\n (await readRecord()).abortOperationId === String(live.run.inputs[0])\n ? ('aborting' as const)\n : ('open' as const),\n }\n : task\n ? {\n id: String(task.record.id),\n kind: 'compaction' as const,\n status: task.record.abortRequested ? ('aborting' as const) : ('open' as const),\n }\n : null;\n };\n const execution = async () =>\n (await nativeExecution()) ??\n (external\n ? { id: external, kind: 'navigation' as const, status: 'open' as const }\n : settling\n ? { id: 'settling', kind: 'run' as const, status: 'open' as const }\n : null);\n const readLifecycle = async (): Promise<DirectHarnessLifecycle> => {\n const record = await readRecord();\n return {\n revision: record.revision,\n paused: record.paused,\n queue: record.queue\n .filter(\n (item): item is Retained & { disposition: DirectHarnessQueuedInput['disposition'] } =>\n item.explicitQueue === true && item.disposition !== 'consumed' && item.disposition !== 'removed',\n )\n .map(\n ({\n explicitQueue: _q,\n submissionId: _s,\n conversationId: _c,\n message: _m,\n operationId: _o,\n attempt: _a,\n ...item\n }) => item,\n ),\n operation: await execution(),\n };\n };\n const publish = async () => emit({ type: 'lifecycle_update', lifecycle: await readLifecycle() });\n let watcher: AgentEventStream;\n let eventsSettled = Promise.resolve();\n let settling = 0;\n const admittingInternal = new Set<string>();\n const reconcilingInternal = new Map<string, Promise<void>>();\n const internalDelivery = new Map<SubmissionId, { done: Promise<void>; resolve: () => void }>();\n const deliveredInputs = new Set<SubmissionId>();\n const nextTurnMessages: AgentMessage[] = [];\n let deferredInternalCount = 0;\n const flushNextTurn = async () => {\n const staged = nextTurnMessages.splice(0);\n for (let index = 0; index < staged.length; index++) {\n const message = staged[index]!;\n try {\n await writable(() =>\n conversation.submit(\n {\n type: 'write',\n requestId: randomUUID(),\n entry: { kind: 'po.entry', data: json({ type: 'message', message }), model: convertToLlm([message]) },\n },\n context,\n ),\n );\n } catch (error) {\n nextTurnMessages.unshift(...staged.slice(index));\n throw error;\n }\n }\n };\n let logicalLoopActive = false;\n let lastAssistant: AssistantMessage | undefined;\n let partial: AssistantMessage | undefined;\n let toolResults: ToolResultMessage[] = [];\n const deliver = async (event: HarnessEvent, eventContext: Context) => {\n for (const listener of eventListeners)\n try {\n await listener(event, eventContext);\n } catch (error) {\n emit({ type: 'handler_error', error: String(error) });\n }\n };\n const attach = async () => {\n if (watcher) await watcher.stop();\n watcher = await watchEvents(harness, conversation.id, context);\n let predecessor = watcher.snapshot.entries.at(-1)?.id;\n const customSources = new Map<string, AgentMessage>();\n const generatedSources = new Map<EntryId, AgentMessage | undefined>();\n const rememberCustom = (raw: EntryRecord) => {\n const projected = projectDurableEntries([raw])[0];\n const data = raw.data && typeof raw.data === 'object' && !Array.isArray(raw.data) ? raw.data : undefined;\n if (\n projected?.type === 'message' &&\n projected.message.role === 'custom' &&\n typeof data?.inputRequestId === 'string'\n )\n customSources.set(data.inputRequestId, projected.message);\n };\n for (const raw of watcher.snapshot.entries) rememberCustom(raw);\n for (const requestId of customSources.keys()) {\n const receipt = await storage.storage.submissionByRequest(conversation.id, requestId, context);\n if (receipt && receipt.status !== 'queued') customSources.delete(requestId);\n }\n const generatedEntrySource = async (raw: EntryRecord, ctx: Context) => {\n if (generatedSources.has(raw.id)) return generatedSources.get(raw.id);\n let source: AgentMessage | undefined;\n if (raw.model?.[0]?.role === 'user')\n for (const [requestId, custom] of customSources) {\n const receipt = await storage.storage.submissionByRequest(conversation.id, requestId, ctx);\n if (receipt && 'entry' in receipt && receipt.entry === raw.id) {\n source = custom;\n customSources.delete(requestId);\n break;\n }\n }\n generatedSources.set(raw.id, source);\n while (generatedSources.size > 128) generatedSources.delete(generatedSources.keys().next().value!);\n return source;\n };\n lastAssistant = undefined;\n partial = undefined;\n toolResults = [];\n watcher.start(async (events, eventContext) => {\n for (const event of events) {\n let mapped: HarnessEvent | undefined;\n if (event.type === 'turn_start' || event.type === 'run_start') {\n lastAssistant = undefined;\n partial = undefined;\n toolResults = [];\n }\n if (event.type === 'message_end' || event.type === 'entry_appended') {\n rememberCustom(event.entry);\n const entry = projectDurableEntries([event.entry])[0];\n await generatedEntrySource(event.entry, eventContext);\n if (entry) {\n entry.parentId = predecessor === undefined ? null : String(predecessor);\n const added: HarnessEvent = { type: 'entry_added', entry };\n emit({ type: 'entry_appended', entry });\n eventsSettled = eventsSettled.then(() => deliver(added, eventContext));\n }\n predecessor = event.entry.id;\n }\n if (['run_start', 'run_end', 'turn_start', 'compaction_start'].includes(event.type))\n mapped = { type: event.type } as HarnessEvent;\n if (event.type === 'message_start') {\n if (event.message.role === 'assistant') partial = structuredClone(event.message);\n mapped = { type: 'message_start', message: event.message };\n }\n if (event.type === 'message_end' && event.entry.model?.[0]) {\n const projected = projectDurableEntries([event.entry])[0];\n if (projected?.type === 'custom' && projected.customType === 'po.internal-context') continue;\n const message =\n (await generatedEntrySource(event.entry, eventContext)) ??\n (projected?.type === 'message' && projected.message.role === 'custom'\n ? projected.message\n : event.entry.model[0]);\n if (message.role === 'assistant') lastAssistant = message;\n if (message.role === 'toolResult') toolResults.push(message);\n mapped = { type: 'message_end', message, entryId: String(event.entry.id), runId: String(conversation.id) };\n }\n\n if (event.type === 'tool_execution_start') mapped = { ...event, type: 'tool_start' };\n if (event.type === 'tool_execution_end') {\n const result = event.entry?.model?.find((m) => m.role === 'toolResult');\n mapped = {\n type: 'tool_end',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: {\n content: result?.content ?? [],\n details: result?.details === undefined ? undefined : json(result.details),\n },\n isError: result?.isError ?? true,\n };\n }\n if (event.type === 'turn_end' && lastAssistant) {\n mapped = { type: 'turn_end', message: lastAssistant, toolResults };\n toolResults = [];\n lastAssistant = undefined;\n partial = undefined;\n }\n if (event.type === 'message_update' && partial) {\n for (const change of event.changes) {\n if (change.type === 'message') {\n partial = structuredClone(change.message);\n } else if ('block' in change) {\n partial.content[change.contentIndex] = structuredClone(change.block);\n }\n const block = 'contentIndex' in change ? partial.content[change.contentIndex] : undefined;\n if (change.type === 'text_delta' && block?.type === 'text') block.text += change.delta;\n if (change.type === 'thinking_delta' && block?.type === 'thinking') block.thinking += change.delta;\n {\n const update: HarnessEvent = {\n type: 'message_update',\n message: structuredClone(partial),\n event:\n 'delta' in change\n ? {\n type: change.type,\n contentIndex: change.contentIndex,\n delta: change.delta,\n partial: structuredClone(partial),\n }\n : { type: 'start', partial: structuredClone(partial) },\n };\n emit({ ...update, assistantMessageEvent: update.event });\n eventsSettled = eventsSettled.then(() => deliver(update, eventContext));\n }\n }\n }\n if (event.type === 'tool_execution_update')\n mapped = {\n type: 'tool_update',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n partialResult: {\n content: [\n {\n type: 'text',\n text: event.output ? ('set' in event.output ? event.output.set : (event.output.append ?? '')) : '',\n },\n ],\n details: event.details,\n },\n };\n if (event.type === 'compaction_end') {\n const receipt = await harness.waitForTask(event.taskId as TaskId<CompactionResult>, eventContext);\n const outcome = receipt.state.outcome;\n const result = outcome.status === 'completed' ? outcome.result : undefined;\n const summary = result?.submissionId\n ? await harness.submission(result.submissionId, eventContext)\n : undefined;\n const status = await summary?.status(eventContext);\n const entryId = result?.entryId ?? (status && 'entry' in status ? status.entry : undefined);\n mapped = {\n type: 'compaction_end',\n status:\n outcome.status === 'completed'\n ? result?.entryId !== undefined || result?.submissionId !== undefined\n ? 'completed'\n : 'aborted'\n : outcome.status === 'aborted'\n ? 'aborted'\n : 'failed',\n reason: event.reason,\n entryId: entryId === undefined ? undefined : String(entryId),\n error:\n outcome.status !== 'completed' && outcome.status !== 'aborted'\n ? new Error(\n 'error' in outcome ? (outcome.error?.message ?? 'Compaction failed') : 'Compaction failed',\n )\n : undefined,\n };\n }\n if (event.type === 'inbox_update')\n mapped = { type: 'queue_update', queues: event.items.map((item) => ({ kind: item.mode })) };\n if (event.type === 'message_end') {\n for (const message of event.entry.model ?? [])\n if (message.role === 'assistant')\n eventsSettled = eventsSettled.then(() =>\n deliver({ type: 'usage', row: { id: String(event.entry.id), usage: message.usage } }, eventContext),\n );\n }\n if (!mapped) continue;\n const publishMapped = (event: HarnessEvent) =>\n emit({\n ...event,\n type:\n event.type === 'tool_start'\n ? 'tool_execution_start'\n : event.type === 'tool_update'\n ? 'tool_execution_update'\n : event.type === 'tool_end'\n ? 'tool_execution_end'\n : event.type === 'entry_added'\n ? 'entry_appended'\n : event.type,\n });\n if (mapped.type === 'run_end') {\n const settledEvent = {\n runId: String(event.type === 'run_end' ? event.inputs[0] : conversation.id),\n timestamp: Date.now(),\n };\n settling++;\n let released = false;\n const release = () => {\n if (!released) {\n settling--;\n released = true;\n }\n };\n eventsSettled = eventsSettled\n .then(async () => {\n await reconcile();\n try {\n await writable(() =>\n harness.commit(\n (tx) => tx.appendEntry(conversation.id, { kind: AGENT_SETTLED_ENTRY_TYPE, data: settledEvent }),\n eventContext,\n ),\n );\n } catch (error) {\n emit({ type: 'error', code: 'agent_settled', error: String(error) });\n }\n const live = await harness.snapshot(LiveDoc, conversation.id, eventContext);\n const successorActive = !!live?.run && String(live.run.inputs[0]) !== settledEvent.runId;\n // Read terminal input outcomes, including cancellation before any assistant message.\n const statuses = await Promise.all(\n event.type === 'run_end'\n ? event.inputs.map(async (id) => {\n const submission = await harness.submission(id, eventContext);\n if (!submission) throw new Error(`Settled submission ${id} is unavailable`);\n return submission.status(eventContext);\n })\n : [],\n );\n const aborted = statuses.some(\n (status) => status.status === 'unanswered' && status.reason === 'aborted',\n );\n mapped = { type: 'run_end', runId: settledEvent.runId, successorActive, aborted };\n publishMapped(mapped);\n await deliver(mapped, eventContext);\n release();\n // A settlement hook can admit work after the initial successor check.\n const lifecycle = await readLifecycle();\n emit({ type: 'lifecycle_update', lifecycle });\n if (!lifecycle.operation) {\n logicalLoopActive = false;\n emit({ type: 'agent_end', runId: settledEvent.runId });\n emit({ type: 'agent_settled', ...settledEvent });\n }\n })\n .catch((error) => emit({ type: 'error', code: 'settled_event', error: String(error) }))\n .finally(async () => {\n release();\n if (event.type === 'run_end')\n for (const id of event.inputs) {\n deliveredInputs.add(id);\n internalDelivery.get(id)?.resolve();\n }\n while (deliveredInputs.size > 128) deliveredInputs.delete(deliveredInputs.values().next().value!);\n try {\n await publish();\n } catch (error) {\n emit({ type: 'error', code: 'lifecycle_update', error: String(error) });\n }\n // Do not await drain here: drain waits for this settlement chain.\n void drain().catch((error) => emit({ type: 'error', code: 'drain', error: String(error) }));\n });\n } else {\n // Protocol publication must not wait for extension hooks on earlier events.\n publishMapped(mapped);\n if (mapped.type === 'run_start') {\n if (!logicalLoopActive) emit({ type: 'agent_start' });\n logicalLoopActive = true;\n void publish().catch((error) => emit({ type: 'error', code: 'lifecycle_update', error: String(error) }));\n }\n const delivered = mapped;\n eventsSettled = eventsSettled.then(() => deliver(delivered, eventContext));\n }\n }\n });\n };\n await attach();\n const reconcileInternal = (requestId: string, item: InternalDeliveryRecord): Promise<void> => {\n const existing = reconcilingInternal.get(requestId);\n if (existing) return existing;\n const work = (async () => {\n if (admittingInternal.has(requestId)) return;\n const target =\n item.conversationId === conversation.id\n ? conversation\n : await harness.conversation(item.conversationId as typeof conversation.id, context);\n if (!target) throw new Error('Internal delivery conversation is unavailable');\n let receipt = await storage.storage.submissionByRequest(target.id, requestId, context);\n // A failed native run can strand queued inputs. Never withdraw from a surviving run.\n if (receipt?.status === 'queued' && !(await harness.snapshot(LiveDoc, target.id, context))?.run) {\n await harness.abortSubmission(receipt.id, context);\n receipt = await storage.storage.submissionByRequest(target.id, requestId, context);\n }\n if (receipt?.status === 'queued') return;\n if (!receipt || (receipt.status === 'unanswered' && receipt.entry === undefined)) {\n if ((await harness.snapshot(LiveDoc, target.id, context))?.run) return;\n let envelope =\n item.message.role === 'custom'\n ? await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context)\n : undefined;\n if (item.message.role === 'custom' && !envelope) {\n await (\n await writable(() =>\n target.submit(\n {\n type: 'write',\n requestId: `${requestId}:message`,\n entry: {\n kind: 'po.entry',\n data: json({\n type: 'message',\n message: item.message,\n timestamp: item.message.timestamp,\n inputRequestId: requestId,\n }),\n },\n },\n context,\n ),\n )\n ).wait(context);\n envelope = await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context);\n }\n if (envelope?.status === 'queued') {\n // An idle passive write places surviving queued envelope writes, without admitting input.\n await (\n await writable(() =>\n target.submit(\n {\n type: 'write',\n requestId: `${requestId}:message-placement`,\n entry: { kind: 'po.internal-delivery' },\n },\n context,\n ),\n )\n ).wait(context);\n envelope = await storage.storage.submissionByRequest(target.id, `${requestId}:message`, context);\n }\n const envelopeId = envelope && 'entry' in envelope ? envelope.entry : undefined;\n const draft: Parameters<Conversation['submit']>[0] = {\n type: 'write',\n requestId: `${requestId}:context`,\n entry: {\n kind: 'po.entry',\n data: json(\n item.message.role === 'custom'\n ? { type: 'custom', customType: 'po.internal-context', data: { inputRequestId: requestId } }\n : { type: 'message', message: item.message },\n ),\n ...(envelopeId === undefined\n ? { model: convertToLlm([item.message]) }\n : {\n edits: [{ target: envelopeId, action: 'replace' as const, messages: convertToLlm([item.message]) }],\n }),\n },\n };\n let fallback;\n try {\n fallback = await writable(() => target.submit(draft, context));\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(target.id, `${requestId}:context`, context);\n fallback = accepted && (await harness.submission(accepted.id, context));\n if (!fallback) throw error;\n }\n if ((await fallback.wait(context)).status !== 'done') throw new Error('Internal context write failed');\n }\n await changeRecord((r) => {\n delete r.internalDeliveries?.[requestId];\n });\n })().finally(() => {\n reconcilingInternal.delete(requestId);\n });\n reconcilingInternal.set(requestId, work);\n return work;\n };\n const reconcile = async () => {\n const record = await readRecord();\n // Withdraw all stranded internal inputs before any passive write can flush an idle native inbox.\n for (const [requestId, item] of Object.entries(record.internalDeliveries ?? {})) {\n if (admittingInternal.has(requestId)) continue;\n if ((await harness.snapshot(LiveDoc, item.conversationId as typeof conversation.id, context))?.run) continue;\n const receipt = await storage.storage.submissionByRequest(\n item.conversationId as typeof conversation.id,\n requestId,\n context,\n );\n if (receipt?.status === 'queued') await harness.abortSubmission(receipt.id, context);\n }\n for (const [requestId, item] of Object.entries(record.internalDeliveries ?? {}))\n await reconcileInternal(requestId, item);\n for (const item of record.queue) {\n if (item.disposition !== 'handoff' && item.disposition !== 'uncertain') continue;\n const submission = item.submissionId\n ? await harness.submission(item.submissionId as SubmissionId, context)\n : undefined;\n const status = await submission?.status(context);\n if (status?.status === 'done' || status?.status === 'placed' || status?.status === 'unanswered')\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (!q) return;\n if (status.status === 'unanswered' && status.entry === undefined && r.paused) {\n q.disposition = 'pending';\n q.attempt = (q.attempt ?? 0) + 1;\n delete q.submissionId;\n } else {\n q.disposition = 'consumed';\n q.text = '';\n delete q.message;\n delete q.images;\n }\n const receipts = r.queue.filter((q) => q.disposition === 'consumed' || q.disposition === 'removed');\n if (receipts.length > 128) {\n const expired = new Set(receipts.slice(0, receipts.length - 128).map((q) => q.id));\n r.queue = r.queue.filter((q) => !expired.has(q.id));\n }\n });\n else if (!status && !handingOff.has(item.id) && !userClaims.has(item.id))\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (q) q.disposition = 'uncertain';\n });\n }\n };\n const handingOff = new Set<string>();\n const userClaims = new Set<string>();\n let drainPromise: Promise<void> | undefined;\n let drainRequested = false;\n const drain = (): Promise<void> => {\n if (drainPromise) {\n drainRequested = true;\n return drainPromise;\n }\n return (drainPromise ??= (async () => {\n await reconcile();\n while (!disposed) {\n const record = await readRecord();\n if (agentLocked || userAdmission || record.paused || (await execution())) break;\n const item = record.queue.find((q) => q.disposition === 'pending');\n if (!item) break;\n const submission = await handoff(item, 'reject');\n if (!submission) continue;\n await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n }\n })().finally(() => {\n drainPromise = undefined;\n if (drainRequested) {\n drainRequested = false;\n void drain().catch((error) => emit({ type: 'error', code: 'drain', error: String(error) }));\n }\n }));\n };\n const handoff = async (\n item: Retained,\n mode: NonNullable<Retained['submissionMode']>,\n recovering = false,\n allowPaused = false,\n ) => {\n if (external || handingOff.has(item.id)) return undefined;\n handingOff.add(item.id);\n try {\n const claimed = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (!q || (r.paused && !recovering && !allowPaused)) return undefined;\n if (recovering ? q.disposition !== 'handoff' || q.submissionId !== undefined : q.disposition !== 'pending')\n return undefined;\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = mode;\n if (item.operationId !== undefined) {\n q.delivery = item.delivery;\n q.operationId = item.operationId;\n }\n return q;\n });\n if (!claimed) return undefined;\n const content = input(claimed.message ?? claimed.text, claimed.images);\n const requestId = `${claimed.id}:${claimed.attempt ?? 0}`;\n const submit = () =>\n writable(() =>\n conversation.submit(\n mode === 'write'\n ? {\n type: 'write',\n requestId,\n entry: { kind: 'po.message', model: [{ role: 'user', content, timestamp: Date.now() }] },\n }\n : { type: 'input', content, whenBusy: mode, requestId },\n context,\n ),\n );\n let submission;\n try {\n submission = await submit();\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(conversation.id, requestId, context);\n if (!accepted) throw error;\n submission = await harness.submission(accepted.id, context);\n if (!submission) throw error;\n }\n await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === item.id);\n if (q) q.submissionId = submission.id;\n });\n await reconcile();\n await publish();\n return submission;\n } finally {\n handingOff.delete(item.id);\n }\n };\n const input = (message: string | AgentMessage, images?: ImageContent[]) => {\n if (typeof message !== 'string') {\n if (message.role !== 'user') throw new Error('Only user messages can admit an agent run');\n return message.content;\n }\n return images?.length ? [{ type: 'text' as const, text: message }, ...images] : message;\n };\n const enqueue = async (\n message: string | AgentMessage,\n images: ImageContent[] | undefined,\n delivery: Retained['delivery'],\n scheduling: Retained['scheduling'],\n explicitQueue = false,\n ) => {\n const id = randomUUID();\n await changeRecord((r) => {\n r.queue.push({\n id,\n text: text(message),\n ...(images ? { images } : {}),\n ...(typeof message === 'string' ? {} : { message }),\n delivery,\n scheduling,\n explicitQueue,\n disposition: 'pending',\n });\n });\n await publish();\n return { id };\n };\n const queued = async (\n message: string | AgentMessage,\n images: ImageContent[] | undefined,\n delivery: 'followUp' | 'nextRun',\n ) => {\n guardUserAdmission();\n assertUnlocked();\n await enqueue(message, images, delivery, 'automatic');\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n };\n const dispatchCommand = async (value: string) => options.dispatchCommand?.(value) ?? false;\n const admit = async (message: string | AgentMessage, images?: ImageContent[], mode?: 'steer' | 'followUp') => {\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n if (typeof message === 'string' && (await dispatchCommand(message)))\n return { settled: Promise.resolve(), handledCommand: true };\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n promptAdmissions++;\n try {\n assertUnlocked();\n const record = await readRecord();\n await flushNextTurn();\n const { id } = await enqueue(message, images, mode ?? 'nextRun', 'automatic');\n const submission = await handoff(\n (await readRecord()).queue.find((q) => q.id === id)!,\n mode ?? 'reject',\n false,\n record.paused,\n );\n if (!submission) return { settled: Promise.resolve() };\n let resolveDelivery!: () => void;\n const delivered = new Promise<void>((resolve) => {\n resolveDelivery = resolve;\n });\n internalDelivery.set(submission.id, { done: delivered, resolve: resolveDelivery });\n if (deliveredInputs.has(submission.id)) resolveDelivery();\n const settled = (async () => {\n try {\n const status = await submission.wait(context);\n // A durable receipt can finish before the watcher has queued run_end.\n // Wait for this input's settlement hooks, not the current event tail.\n if (status.status === 'done' || status.entry !== undefined) await delivered;\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(\n `Agent submission failed: ${status.reason}${typeof status.detail === 'string' && status.detail ? `: ${status.detail}` : ''}`,\n );\n await drain();\n } finally {\n internalDelivery.delete(submission.id);\n }\n })();\n void settled.catch((error) => emit({ type: 'error', error: String(error) }));\n return { settled };\n } finally {\n promptAdmissions--;\n }\n };\n const abort = async (operationId?: string) => {\n const current = await execution();\n if (!current || current.id === 'settling' || (operationId && current.id !== operationId)) return;\n if (current.id === external) {\n externalAbort?.abort();\n return;\n }\n const live = await harness.snapshot(LiveDoc, conversation.id, context);\n const taskId = live?.run?.taskId ?? nativeId(current.id);\n await changeRecord((r) => {\n r.paused = true;\n r.abortOperationId = current.id;\n r.abortTaskId = taskId;\n });\n await publish();\n await writable(async () => {\n if (current.kind === 'run') await conversation.abort(context);\n else await harness.abortTask(taskId, context);\n });\n await reconcile();\n };\n const interrupt = async () => {\n await abort();\n await writable(() => conversation.abort(context));\n await eventsSettled;\n };\n // Host-owned admission uses only public Tx operations. Target validation and both\n // lifecycle/native ownership move on the same Session mutation line.\n const admitSelected = async (selection: { id: string; operationId?: string }, replay = false) =>\n writable(() =>\n harness.commit(async (tx: Tx) => {\n const doc = await tx.doc(LifecycleDoc);\n const record = JSON.parse(doc.json) as LifecycleRecord;\n const q = record.queue.find((q) => q.id === selection.id);\n if (!q || q.explicitQueue !== true) return 'not_found' as const;\n const requestId = `${q.id}:${q.attempt ?? 0}`;\n // An accepted request survives completion/replacement and a lost acknowledgement.\n const accepted = await tx.submissionByRequest(conversation.id, requestId);\n if (accepted && accepted.type !== 'input')\n throw new Error(`Request ${requestId} already identifies a submission of type ${accepted.type}`);\n if (accepted && replay) return accepted.id;\n if (q.disposition === 'removed' || q.disposition === 'consumed') return 'not_found' as const;\n if (accepted || q.disposition !== 'pending') return 'in_flight' as const;\n const live = await tx.doc(LiveDoc, conversation.id);\n const task = live.run ? await tx.task(live.run.taskId) : undefined;\n if (\n (live.run ? String(live.run.inputs[0]) : undefined) !== selection.operationId ||\n task?.abortRequested ||\n (live.run && record.abortOperationId === selection.operationId)\n )\n return 'target_changed' as const;\n if (!live.run) {\n let page = await tx.scanTasks(\n { conversationId: conversation.id, kind: CompactionTask.definition.name, background: false },\n 128,\n );\n while (true) {\n if (page.items.some((task) => task.state.status !== 'terminal')) return 'target_changed' as const;\n if (!page.next) break;\n page = await tx.scanTasks(\n { conversationId: conversation.id, kind: CompactionTask.definition.name, background: false },\n 128,\n page.next,\n );\n }\n }\n const content = input(q.message ?? q.text, q.images);\n const inbox = await tx.doc(InboxDoc, conversation.id);\n // Native final boundaries read the active head before any table writes.\n let head = live.run ? undefined : (await tx.latestHeadMarker(conversation.id))?.head;\n const now = Date.now();\n let id: SubmissionId;\n if (!live.run && inbox.items.length === 0) {\n const entry = await tx.appendEntry(UserEntry, conversation.id, {\n model: [{ role: 'user', content, timestamp: now }],\n });\n id = (\n await tx.createSubmission({\n conversationId: conversation.id,\n requestId,\n type: 'input',\n status: 'placed',\n entry: entry.id,\n })\n ).id;\n live.run = {\n taskId: await tx.createTask(\n GenerationTask,\n {},\n { ownership: { kind: 'conversation' }, conversationId: conversation.id },\n ),\n inputs: [id],\n };\n } else {\n id = (\n await tx.createSubmission({ conversationId: conversation.id, requestId, type: 'input', status: 'queued' })\n ).id;\n inbox.items.push({ id, mode: 'steer', content: json(content) as typeof content });\n if (!live.run) {\n // Preserve native write-first placement, stale heads, queue modes and\n // positional input order rather than restarting just the selected input.\n const writes = inbox.items.flatMap((item, index) => (item.mode === 'write' ? [index] : []));\n const pick = (mode: 'steer' | 'followUp') => {\n const indexes = inbox.items.flatMap((item, index) => (item.mode === mode ? [index] : []));\n const queueMode = mode === 'steer' ? settings.steeringMode : settings.followUpMode;\n return queueMode === 'all' ? indexes : indexes.slice(0, 1);\n };\n const users = [...pick('steer'), ...pick('followUp')].sort((a, b) => a - b);\n for (const index of writes) {\n const item = inbox.items[index]!;\n if (item.mode !== 'write') continue;\n // Public InboxDoc represents native write drafts as JsonObject.\n const draft = item.entry as unknown as Extract<\n Parameters<Conversation['submit']>[0],\n { type: 'write' }\n >['entry'];\n if (typeof draft.head === 'number' && head !== undefined && draft.head < head) {\n tx.settleSubmission(item.id, { status: 'unanswered', reason: 'stale' });\n continue;\n }\n const entry = await tx.appendEntry(conversation.id, draft);\n if (draft.head !== undefined) head = draft.head === 'self' ? entry.id : draft.head;\n tx.placeSubmission(item.id, entry.id);\n }\n const inputs: SubmissionId[] = [];\n for (const index of users) {\n const item = inbox.items[index]!;\n if (item.mode === 'write') continue;\n const entry = await tx.appendEntry(UserEntry, conversation.id, {\n model: [{ role: 'user', content: item.content, timestamp: now }],\n });\n tx.placeSubmission(item.id, entry.id);\n inputs.push(item.id);\n }\n for (const index of [...writes, ...users].sort((a, b) => b - a)) inbox.items.splice(index, 1);\n if (inputs.length)\n live.run = {\n taskId: await tx.createTask(\n GenerationTask,\n {},\n { ownership: { kind: 'conversation' }, conversationId: conversation.id },\n ),\n inputs,\n };\n }\n }\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = 'steer';\n q.submissionId = id;\n record.revision++;\n doc.json = JSON.stringify(record);\n return id;\n }, context),\n );\n const submitUserPrompt = async (\n message: string | Extract<AgentMessage, { role: 'user' }>,\n images?: ImageContent[],\n selection?: { id: string; operationId?: string },\n submissionMode: 'reject' | 'steer' = 'reject',\n ): Promise<{\n settled: Promise<void>;\n handledCommand?: boolean;\n queueOutcome?: 'not_found' | 'in_flight' | 'target_changed';\n }> => {\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n if (!selection && (typeof message === 'string' ? !message && !images?.length : !message.content.length))\n throw new Error('User input must contain text or an image');\n if (!selection && typeof message === 'string' && (await dispatchCommand(message)))\n return { settled: Promise.resolve(), handledCommand: true };\n assertUnlocked();\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n userAdmission = true;\n userAdmissionSettled = new Promise<void>((resolve) => {\n releaseUserAdmission = resolve;\n });\n let claimed: Retained | undefined;\n try {\n if (selection && submissionMode === 'steer') {\n let admitted;\n try {\n admitted = await admitSelected(selection);\n } catch (error) {\n // Re-enter the line to find an accepted request before rechecking its target.\n const accepted = await storage.storage.submissionByRequest(\n conversation.id,\n `${selection.id}:${(await readRecord()).queue.find((q) => q.id === selection.id)?.attempt ?? 0}`,\n context,\n );\n if (!accepted) throw error;\n admitted = await admitSelected(selection, true);\n }\n if (typeof admitted === 'string') return { settled: Promise.resolve(), queueOutcome: admitted };\n const submission = await harness.submission(admitted, context);\n if (!submission) throw new Error('Accepted promotion submission is missing');\n const settled = (async () => {\n const status = await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'user_prompt', error: String(error) }));\n await reconcile();\n await publish();\n return { settled };\n }\n const current = await execution();\n if (selection) {\n const outcome = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === selection.id);\n if (!q || q.explicitQueue !== true || q.disposition === 'removed' || q.disposition === 'consumed')\n return 'not_found' as const;\n if (q.disposition !== 'pending') return 'in_flight' as const;\n if (current?.id !== selection.operationId || current?.status === 'aborting')\n return 'target_changed' as const;\n if (q.message && q.message.role !== 'user') throw new Error('Only user input can interrupt and respond');\n userClaims.add(q.id);\n if (submissionMode === 'reject') r.paused = true;\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = submissionMode;\n return { ...q };\n });\n if (typeof outcome === 'string') return { settled: Promise.resolve(), queueOutcome: outcome };\n claimed = outcome;\n }\n if (submissionMode === 'reject') {\n if (current) await abort(current.id);\n await conversation.waitForIdle(context);\n await eventsSettled;\n }\n if (!selection) await flushNextTurn();\n if (!claimed) {\n const { id } = await enqueue(\n message,\n images,\n submissionMode === 'steer' ? 'steer' : 'nextRun',\n submissionMode === 'steer' ? 'automatic' : 'held',\n );\n claimed = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === id);\n if (!q || q.disposition !== 'pending') throw new Error('User input was removed before admission');\n q.disposition = 'handoff';\n q.conversationId = conversation.id;\n q.submissionMode = submissionMode;\n return { ...q };\n });\n }\n const submission = await handoff(claimed, submissionMode, true);\n if (!submission) throw new Error('User admission ownership changed');\n const settled = (async () => {\n const status = await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'user_prompt', error: String(error) }));\n await publish();\n return { settled };\n } finally {\n if (claimed) userClaims.delete(claimed.id);\n if (selection) userClaims.delete(selection.id);\n userAdmission = false;\n releaseUserAdmission?.();\n releaseUserAdmission = undefined;\n }\n };\n const recover = async () => {\n const r = await readRecord();\n if (r.abortOperationId) {\n const task =\n r.abortTaskId === undefined\n ? undefined\n : await harness.getTask(r.abortTaskId as Parameters<typeof harness.getTask>[0], context);\n if (task && task.state.status !== 'terminal') await conversation.abort(context);\n }\n for (const item of r.queue.filter((q) => q.disposition === 'handoff' && !q.submissionId)) {\n // requestId deduplicates the crash window between native admission and product receipt.\n if (item.conversationId !== conversation.id) {\n await changeRecord((record) => {\n const q = record.queue.find((q) => q.id === item.id);\n if (q) q.disposition = 'uncertain';\n });\n continue;\n }\n await handoff(item, item.submissionMode ?? (item.delivery === 'steer' ? 'steer' : 'followUp'), true);\n }\n await reconcile();\n await changeRecord(() => undefined);\n };\n const admissionBusy = () =>\n userAdmission ||\n promptAdmissions > 0 ||\n settling > 0 ||\n handingOff.size > 0 ||\n admittingInternal.size > 0 ||\n compactionAdmission;\n const runExternalOperation = async <T>(\n work: () => Promise<T>,\n { signal, waitMs = 0 }: { signal?: AbortSignal; waitMs?: number } = {},\n ): Promise<T> => {\n if (!Number.isFinite(waitMs) || waitMs < 0) throw new RangeError('waitMs must be finite and non-negative');\n const deadline = Date.now() + waitMs;\n const pendingFollowUp = async () => {\n if (waitMs === 0 || agentLocked) return false;\n const record = await readRecord();\n return (\n !record.paused &&\n record.queue.some((item) => item.disposition === 'pending' || item.disposition === 'handoff')\n );\n };\n for (;;) {\n if (waitMs === 0) guardUserAdmission();\n signal?.throwIfAborted();\n if (disposed || disposePromise) throw new Error('Direct harness is disposed');\n const busy = (await nativeExecution()) || (await pendingFollowUp());\n signal?.throwIfAborted();\n if (disposed || disposePromise) throw new Error('Direct harness is disposed');\n // Claim synchronously after every await, so simultaneous external calls cannot both own the lane.\n if (!busy && !external && !admissionBusy()) {\n external = randomUUID();\n let admitted = false;\n try {\n const changed = (await nativeExecution()) || (await pendingFollowUp());\n signal?.throwIfAborted();\n if (disposed || disposePromise) throw new Error('Direct harness is disposed');\n if (waitMs > 0 && Date.now() >= deadline) throw new DoomHeadlessToolBusyError();\n admitted = !changed && !admissionBusy();\n } finally {\n if (!admitted) {\n external = undefined;\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n }\n }\n if (admitted) break;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) throw new DoomHeadlessToolBusyError();\n // ponytail: bounded polling, not FIFO. Add ordered admission only if callers need it.\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n await awaitWithContext(\n new Promise<void>((resolve) => {\n timer = setTimeout(resolve, Math.min(100, remaining));\n }),\n signal ? withAbortSignal(signal, context) : context,\n );\n } finally {\n clearTimeout(timer);\n }\n }\n externalAbort = new AbortController();\n try {\n await publish();\n return await writable(work);\n } finally {\n external = undefined;\n externalAbort = undefined;\n await publish();\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n }\n };\n const appendEntry = async (entry: Parameters<Conversation['submit']>[0] & { type: 'write' }) => {\n const lane = conversation;\n const submission = await writable(() => lane.submit(entry, context));\n const receipt = await submission.wait(context);\n if (receipt.status !== 'done') throw new Error(`Entry write failed: ${receipt.reason}`);\n return String(receipt.entry);\n };\n // Restore only unchanged native contributions, retaining canonical edits and occurrence ordering.\n const restoreCustomContextMessages = async (\n messages: readonly Message[],\n ctx: Context,\n view: Awaited<ReturnType<Conversation['context']>>,\n conversationId = conversation.id,\n ): Promise<AgentMessage[]> => {\n const contextContributions = new Map<string, AgentMessage[]>();\n const customByEntry = new Map<number, AgentMessage>();\n for (const raw of view.entries) {\n const entry = projectDurableEntries([raw])[0];\n if (entry?.type !== 'message' || entry.message.role !== 'custom') continue;\n const data = raw.data && typeof raw.data === 'object' && !Array.isArray(raw.data) ? raw.data : undefined;\n const receipt =\n typeof data?.inputRequestId === 'string'\n ? await storage.storage.submissionByRequest(conversationId, data.inputRequestId, ctx)\n : undefined;\n const fallback =\n receipt?.status === 'unanswered' &&\n !('entry' in receipt && receipt.entry !== undefined) &&\n typeof data?.inputRequestId === 'string'\n ? await storage.storage.submissionByRequest(conversationId, `${data.inputRequestId}:context`, ctx)\n : undefined;\n const placed = fallback ?? receipt;\n const placedEntry =\n placed && 'entry' in placed && placed.entry !== undefined\n ? view.entries.find((candidate) => candidate.id === placed.entry)\n : undefined;\n const target = placedEntry?.edits?.some((edit) => edit.target === raw.id)\n ? raw.id\n : (placedEntry?.id ?? raw.id);\n const contributions = view.contributions[view.entries.findIndex((candidate) => candidate.id === target)];\n const original = placedEntry?.edits?.find((edit) => edit.target === raw.id && edit.action === 'replace');\n const model = original?.messages ?? view.entries.find((candidate) => candidate.id === target)?.model;\n if (\n model?.length === 1 &&\n contributions?.length === 1 &&\n JSON.stringify(model[0]) === JSON.stringify(contributions[0])\n )\n customByEntry.set(target, entry.message);\n }\n for (const [index, raw] of view.entries.entries()) {\n const custom = customByEntry.get(raw.id);\n for (const native of view.contributions[index] ?? []) {\n const key = JSON.stringify(native);\n const message = custom && view.contributions[index]?.length === 1 ? custom : native;\n const contributions = contextContributions.get(key) ?? [];\n contributions.push(message);\n contextContributions.set(key, contributions);\n }\n }\n return messages\n .filter((message) => message.role !== 'system')\n .map((message) => contextContributions.get(JSON.stringify(message))?.shift() ?? message);\n };\n const readEntries = async () => {\n const entries = await projectDurableConversationEntries(conversation, context);\n return { entries, leafId: entries.at(-1)?.id ?? null };\n };\n const getSessionStats = async () => {\n const { entries } = await readEntries();\n const messages = entries.flatMap((e) => (e.type === 'message' ? [e.message] : []));\n const agent = await conversation.agent(context);\n const selected = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n const contextUsage = contextUsageOf(contextTokensOf(latestAssistantUsage(entries)), selected?.contextWindow);\n const usage = await harness.usage(context);\n const all = [...Object.values(usage.models), ...Object.values(usage.tools)];\n const tokens = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };\n let cost = 0;\n for (const u of all) {\n tokens.input += u.input;\n tokens.output += u.output;\n tokens.cacheRead += u.cacheRead;\n tokens.cacheWrite += u.cacheWrite;\n tokens.total += u.totalTokens;\n cost += u.cost.total;\n }\n return {\n sessionId,\n sessionFile: storage.sessionFile,\n ...(contextUsage === undefined ? {} : { contextUsage }),\n messageCount: messages.length,\n totalMessages: messages.length,\n userMessages: messages.filter((m) => m.role === 'user').length,\n assistantMessages: messages.filter((m) => m.role === 'assistant').length,\n toolCalls: messages.flatMap((m) =>\n m.role === 'assistant' ? m.content.filter((c) => c.type === 'toolCall') : [],\n ).length,\n toolResults: messages.filter((m) => m.role === 'toolResult').length,\n tokens,\n cost,\n totalCost: cost,\n usage: {\n input: tokens.input,\n output: tokens.output,\n cacheRead: tokens.cacheRead,\n cacheWrite: tokens.cacheWrite,\n totalTokens: tokens.total,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: cost },\n },\n };\n };\n let disposePromise: Promise<void> | undefined;\n const dispose = () =>\n (disposePromise ??= (async () => {\n const failures: unknown[] = [];\n const attempt = async (cleanup: () => Promise<unknown>) => {\n try {\n await cleanup();\n return true;\n } catch (error) {\n failures.push(error);\n return false;\n }\n };\n await attempt(interrupt);\n disposed = true;\n await attempt(() => watcher.stop());\n await attempt(() => eventsSettled);\n const harnessClosed = await attempt(() => harness.close(context));\n const repositoryClosed = harnessClosed && (await attempt(async () => storage.repository?.close(context)));\n await attempt(() => environment.cleanup(context));\n if (harnessClosed && repositoryClosed) await attempt(async () => storage.historyLease?.release());\n resolveExited(failures.length ? 1 : 0);\n if (failures.length) throw new AggregateError(failures, 'Direct harness cleanup failed');\n })());\n const recordUsage: DirectHarnessRuntime<TContext>['recordUsage'] = async (usage, usageOptions) => {\n const entryId = await appendEntry({\n type: 'write',\n entry: { kind: 'po.usage', data: json({ usage, ...usageOptions }) },\n });\n await writable(() =>\n harness.commit(async (tx) => {\n const ledger = await tx.doc(UsageDoc, conversation.id);\n const key = 'po/auxiliary';\n const previous = ledger.models[key];\n ledger.models[key] = previous\n ? {\n ...usage,\n input: previous.input + usage.input,\n output: previous.output + usage.output,\n cacheRead: previous.cacheRead + usage.cacheRead,\n cacheWrite: previous.cacheWrite + usage.cacheWrite,\n totalTokens: previous.totalTokens + usage.totalTokens,\n cost: {\n input: previous.cost.input + usage.cost.input,\n output: previous.cost.output + usage.cost.output,\n cacheRead: previous.cost.cacheRead + usage.cost.cacheRead,\n cacheWrite: previous.cost.cacheWrite + usage.cost.cacheWrite,\n total: previous.cost.total + usage.cost.total,\n },\n }\n : usage;\n }, context),\n );\n return entryId;\n };\n const removeQueued: DirectHarnessRuntime<TContext>['removeQueued'] = async (id) => {\n const item = (await readRecord()).queue.find((q) => q.id === id);\n if (!item || item.explicitQueue !== true) return 'not_found';\n if (item.disposition === 'consumed') return 'already_consumed';\n if (item.disposition === 'removed') return 'removed';\n if (item.submissionId) {\n const result = await harness.abortSubmission(item.submissionId as SubmissionId, context, conversation.id);\n if (result === 'already_placed') return 'in_flight';\n if (result === 'settled') return 'already_consumed';\n } else if (item.disposition !== 'pending') return 'in_flight';\n const result = await changeRecord((r) => {\n const q = r.queue.find((q) => q.id === id);\n if (!q || q.explicitQueue !== true) return 'not_found' as const;\n if (q.disposition === 'consumed') return 'already_consumed' as const;\n if (q.disposition === 'removed') return 'removed' as const;\n if (q.submissionId !== item.submissionId || (item.submissionId === undefined && q.disposition !== 'pending'))\n return 'in_flight' as const;\n q.disposition = 'removed';\n q.text = '';\n delete q.message;\n delete q.images;\n return 'removed' as const;\n });\n await publish();\n return result;\n };\n const commitCheckpointMessage = async (\n registration: { active: boolean },\n lane: Conversation,\n message: AgentMessage,\n ctx: Context,\n scopeIsOpen: () => boolean = () => true,\n taskId?: TaskId,\n ): Promise<string | undefined> => {\n const usable = () =>\n registration.active &&\n scopeIsOpen() &&\n !disposed &&\n !quarantined &&\n !external &&\n conversation.id === lane.id &&\n !ctx.abortSignal?.aborted;\n if (!usable()) return;\n return writable(async () => {\n if (!usable()) return;\n return harness.commit(async (tx) => {\n if (!usable()) return;\n const live = await tx.doc(LiveDoc, lane.id);\n const inbox = await tx.doc(InboxDoc, lane.id);\n if (\n !usable() ||\n live.compactions?.length ||\n inbox.items.some((item) => item.mode !== 'write') ||\n (taskId === undefined ? live.run !== undefined : live.run?.taskId !== taskId)\n )\n return;\n const entry = await tx.appendEntry(lane.id, {\n kind: 'po.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp }),\n model: convertToLlm([message]),\n });\n return String(entry.id);\n }, ctx);\n });\n };\n const appendMessage = (message: AgentMessage) =>\n appendEntry({\n type: 'write',\n entry: {\n kind: 'po.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp }),\n model: convertToLlm([message]),\n },\n });\n return {\n sessionId,\n sessionFile: storage.sessionFile,\n laneName,\n harnessId: options.harnessId ?? `${sessionId}:${laneName}`,\n session: harness,\n harness,\n get lane() {\n return conversation;\n },\n exited,\n get storageQuarantined() {\n return quarantined;\n },\n completeModel: models.complete?.bind(models),\n onPresentationFrame(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n onEvent(listener) {\n eventListeners.add(listener);\n return () => eventListeners.delete(listener);\n },\n stop() {\n void dispose().catch((error) => emit({ type: 'error', error: String(error) }));\n },\n readEntries,\n async getContextMessages() {\n const assertReadable = () => {\n if (disposed || quarantined) throw new Error('Direct harness context is unavailable', { cause: failure });\n };\n assertReadable();\n const lane = conversation;\n const view = await lane.context(context);\n assertReadable();\n const messages = await restoreCustomContextMessages(view.messages, context, view, lane.id);\n assertReadable();\n return structuredClone(messages);\n },\n readLifecycle,\n dispatchCommand,\n listCommands: () => [...(options.listCommands?.() ?? [])],\n async readState() {\n const lifecycle = await readLifecycle();\n const agent = await conversation.agent(context);\n const metadata = await harness.snapshot(SessionMetadataDoc, context);\n const stats = await getSessionStats();\n const inbox = await harness.snapshot(InboxDoc, conversation.id, context);\n const retained = (await readRecord()).queue;\n const retainedSubmissions = new Set(retained.map((item) => item.submissionId));\n const nativePending =\n inbox?.items.filter((item) => item.mode !== 'write' && !retainedSubmissions.has(item.id)).length ?? 0;\n return json({\n sessionId,\n sessionFile: storage.sessionFile,\n sessionName: metadata?.name,\n model: agent.model ? { provider: agent.model.provider, id: agent.model.modelId } : undefined,\n thinkingLevel: agent.thinkingLevel,\n isIdle: !(await execution()) && !admissionBusy(),\n isStreaming: lifecycle.operation?.kind === 'run',\n isCompacting: lifecycle.operation?.kind === 'compaction',\n operationId: lifecycle.operation?.id,\n executionStatus: lifecycle.operation?.status,\n fastMode,\n agentLocked,\n queuePaused: lifecycle.paused,\n queueRevision: lifecycle.revision,\n steeringMode: settings.steeringMode ?? 'one-at-a-time',\n followUpMode: settings.followUpMode ?? 'one-at-a-time',\n autoCompactionEnabled: settings.compaction?.enabled ?? true,\n messageCount: stats.messageCount,\n pendingMessageCount:\n retained.filter((item) => item.disposition !== 'consumed' && item.disposition !== 'removed').length +\n nativePending +\n nextTurnMessages.length +\n deferredInternalCount,\n }) as Record<string, unknown>;\n },\n enqueueAutomatic: async (value, images) => {\n assertUnlocked();\n const result = await enqueue(value, images, 'nextRun', 'automatic', true);\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n return result;\n },\n removeQueued,\n async promoteQueued(id, operationId) {\n const result = await submitUserPrompt('', undefined, { id, operationId }, 'steer');\n return result.queueOutcome ?? 'promoted';\n },\n async resumeQueue() {\n guardUserAdmission();\n await changeRecord((r) => {\n r.paused = false;\n delete r.abortOperationId;\n delete r.abortTaskId;\n });\n await publish();\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n },\n recover,\n async setFastMode(enabled) {\n if (enabled) {\n const selected = (await conversation.agent(context)).model;\n const model = selected ? models.getModel(selected.provider, selected.modelId) : undefined;\n if (model?.api !== CODEX_API || model.provider !== CODEX_PROVIDER)\n throw new Error('Fast mode requires an OpenAI Codex model');\n }\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(FastModeDoc)).enabled = enabled;\n await tx.appendEntry(conversation.id, { kind: 'po.fast-mode', data: { version: 1, enabled, sessionId } });\n }, context),\n );\n fastMode = enabled;\n emit({ type: 'fast_mode_changed', enabled });\n },\n agentLocked: () => agentLocked,\n async setAgentLock(locked) {\n if (typeof locked !== 'boolean') throw new Error('Agent lock must be a boolean.');\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(AgentLockDoc)).locked = locked;\n }, context),\n );\n agentLocked = locked;\n emit({ type: 'agent_lock_changed', locked });\n if (!locked) return;\n // Only a local agent run stops; a remote MCP operation keeps running.\n const current = await execution();\n if (current?.kind === 'run') await abort(current.id);\n },\n async setModel(model) {\n const previous = (await conversation.agent(context)).model;\n if (!models.getModel(model.provider, model.id))\n throw new Error(`Model not found: ${model.provider}/${model.id}`);\n await writable(() =>\n conversation.configure({ model: { provider: model.provider, modelId: model.id } }, context),\n );\n await deliver(\n {\n type: 'config_update',\n property: 'model',\n value: { provider: model.provider, modelId: model.id },\n previous,\n },\n context,\n );\n emit({ type: 'model_select', model });\n },\n availableModels: () => models.getAvailable(),\n async availableThinkingLevels() {\n const agent = await conversation.agent(context);\n const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n if (!model) throw new Error('No model is selected');\n return getSupportedThinkingLevels(model);\n },\n setThinkingLevel: (level) => writable(() => conversation.configure({ thinkingLevel: level }, context)),\n async setSteeringMode(mode) {\n settings = { ...settings, steeringMode: mode };\n },\n async setFollowUpMode(mode) {\n settings = { ...settings, followUpMode: mode };\n },\n navigateTree: (targetId, navigationOptions) =>\n runExternalOperation(async () => {\n try {\n const expected = conversation.id;\n if (\n targetId !== null &&\n !(await storage.storage.entry(conversation.id, nativeId<EntryId>(targetId), context))\n )\n throw new Error('Navigation target is not in the selected conversation');\n const oldTip = (await readEntries()).leafId;\n await deliver({ type: 'navigation_start' }, context);\n emit({ type: 'navigation_start', targetId });\n let summary = navigationOptions?.summary;\n if (navigationOptions?.summarize === true && summary === undefined) {\n const selected = (await conversation.agent(context)).model;\n const model = selected ? models.getModel(selected.provider, selected.modelId) : undefined;\n if (!model) throw new Error('No model is selected for navigation summary');\n const instructions = navigationOptions.customInstructions;\n if (instructions !== undefined && typeof instructions !== 'string')\n throw new Error('Navigation instructions must be a string');\n const base =\n 'Summarize this conversation for continuing work on another branch. Include decisions, progress, remaining work, and essential context. Return only the summary.';\n const messages: Message[] = [\n {\n role: 'system',\n content:\n navigationOptions.replaceInstructions === true\n ? (instructions ?? base)\n : [base, instructions].filter(Boolean).join('\\n\\n'),\n timestamp: Date.now(),\n },\n {\n role: 'user',\n content: JSON.stringify((await conversation.context(context)).messages),\n timestamp: Date.now(),\n },\n ];\n await options.beforeModelRequest?.({ phase: 'request', model, prompt: messages, resources }, context);\n const summaryContext = withAbortSignal(externalAbort!.signal, context);\n let answer: AssistantMessage;\n try {\n answer = await awaitWithContext(\n models.complete(model, { messages }, { signal: externalAbort!.signal }),\n summaryContext,\n );\n } catch (error) {\n if (externalAbort?.signal.aborted) {\n await deliver(\n { type: 'navigation_end', status: 'aborted', tipId: oldTip, fromTipId: oldTip },\n context,\n );\n emit({ type: 'navigation_end', status: 'aborted' });\n return { cancelled: true, entries: (await readEntries()).entries };\n }\n throw error;\n }\n if (answer.stopReason === 'error' || answer.stopReason === 'aborted')\n throw new Error(answer.errorMessage ?? 'Navigation summary failed');\n summary = text(answer).trim();\n await recordUsage(answer.usage, { details: { purpose: 'branch_summary' } });\n }\n if (externalAbort?.signal.aborted) {\n await deliver({ type: 'navigation_end', status: 'aborted', tipId: oldTip, fromTipId: oldTip }, context);\n emit({ type: 'navigation_end', status: 'aborted' });\n return { cancelled: true, entries: (await readEntries()).entries };\n }\n if (summary !== undefined && typeof summary !== 'string')\n throw new Error('Navigation summary must be a string');\n const id = await navigateDurableConversation(\n harness,\n expected,\n targetId === null ? null : nativeId<EntryId>(targetId),\n context,\n typeof summary === 'string'\n ? {\n summary: {\n kind: 'po.entry',\n data: {\n type: 'branch_summary',\n summary,\n fromId: targetId,\n fromHook: navigationOptions?.summarize !== true,\n },\n model: [\n {\n role: 'user',\n content: `<branch_summary>\\n${summary}\\n</branch_summary>`,\n timestamp: Date.now(),\n },\n ],\n },\n }\n : undefined,\n );\n const agent = await conversation.agent(context);\n conversation = (await harness.conversation(id, context))!;\n if (targetId === null)\n await conversation.configure(\n {\n model: agent.model,\n thinkingLevel: agent.thinkingLevel,\n cwd: agent.cwd,\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n instructions: agent.instructions,\n },\n context,\n );\n await attach();\n const result = await readEntries();\n if (typeof navigationOptions?.label === 'string' && targetId !== null)\n await harness.commit(async (tx) => {\n (await tx.doc(LabelsDoc)).labels[targetId] = navigationOptions.label as string;\n }, context);\n for (const entry of result.entries)\n if (entry.type === 'branch_summary') await deliver({ type: 'entry_added', entry }, context);\n const event: HarnessEvent = {\n type: 'navigation_end',\n status: 'completed',\n tipId: result.leafId,\n fromTipId: oldTip,\n };\n await deliver(event, context);\n emit({ ...event });\n return { cancelled: false, entries: result.entries };\n } catch (error) {\n await deliver(\n {\n type: 'navigation_end',\n status: 'failed',\n tipId: null,\n fromTipId: null,\n error: error instanceof Error ? error : new Error(String(error)),\n },\n context,\n );\n emit({ type: 'navigation_end', status: 'failed', error: String(error) });\n throw error;\n }\n }),\n async clearQueue() {\n const selected = (await readRecord()).queue.filter(\n (item) => item.explicitQueue === true && item.disposition !== 'consumed' && item.disposition !== 'removed',\n );\n for (const item of selected) await removeQueued(item.id);\n await publish();\n return { steering: [], followUp: [] };\n },\n async setName(name) {\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(SessionMetadataDoc)).name = name;\n }, context),\n );\n emit({ type: 'session_info_changed', name });\n },\n getSessionStats,\n async replaceTools(replacement) {\n tools = replacement;\n activeNames = new Set(tools.map((t) => t.name));\n install();\n await writable(() => conversation.configure({ tools: tools.map(nativeTool) }, context));\n },\n async replaceResources(replacement) {\n resources = replacement;\n install();\n },\n async readResources() {\n return resources;\n },\n runExternalOperation,\n appendCustomEntry: async (customType, data) => {\n const lane = conversation;\n return String(\n (\n await writable(() =>\n lane.commit(\n (tx) =>\n tx.appendEntry(lane.id, {\n kind: customType,\n ...(data === undefined ? {} : { data: json(data) }),\n ...(options.entryProjectors?.[customType]\n ? {\n model: convertToLlm(\n options.entryProjectors[customType]({\n type: 'custom',\n id: '',\n parentId: null,\n timestamp: Date.now(),\n seq: 0,\n customType,\n ...(data === undefined ? {} : { data: json(data) }),\n }),\n ),\n }\n : {}),\n }),\n context,\n ),\n )\n ).id,\n );\n },\n appendMessage,\n registerCheckpointBoundary(callback) {\n const registration = { active: true, callback };\n checkpointBoundaries.add(registration);\n return {\n appendMessage: (message) => commitCheckpointMessage(registration, conversation, message, context),\n dispose() {\n registration.active = false;\n checkpointBoundaries.delete(registration);\n },\n };\n },\n setLabel: (targetId, label) =>\n writable(() =>\n harness.commit(async (tx) => {\n const labels = (await tx.doc(LabelsDoc)).labels;\n if (label === undefined) delete labels[targetId];\n else labels[targetId] = label;\n }, context),\n ),\n recordUsage,\n submitPrompt: admit,\n submitUserPrompt,\n prompt: async (value, images) => {\n await (\n await admit(value, images)\n ).settled;\n },\n admitMessage: (message) => admit(message),\n submitInternalMessage: async function submitInternalMessage(\n message,\n delivery = 'steer',\n requestId = randomUUID(),\n ) {\n if (typeof message !== 'string' && message.role !== 'user' && message.role !== 'custom')\n throw new Error('Internal input must be user or custom message content');\n if (delivery === 'nextTurn') {\n nextTurnMessages.push(\n typeof message === 'string' ? { role: 'user', content: message, timestamp: Date.now() } : message,\n );\n return { settled: Promise.resolve() };\n }\n const preserved: AgentMessage =\n typeof message === 'string' ? { role: 'user', content: message, timestamp: Date.now() } : message;\n // A locked agent records environmental input for its next turn without starting one.\n if (agentLocked) {\n await appendMessage(preserved);\n return { settled: Promise.resolve() };\n }\n const deliveryRecord: InternalDeliveryRecord = { message: preserved, conversationId: conversation.id };\n if (userAdmission) {\n deferredInternalCount++;\n admittingInternal.add(requestId);\n try {\n await changeRecord((r) => {\n (r.internalDeliveries ??= {})[requestId] = deliveryRecord;\n });\n } catch (error) {\n deferredInternalCount--;\n admittingInternal.delete(requestId);\n throw error;\n }\n const released = userAdmissionSettled;\n const settled = released.then(async () => {\n deferredInternalCount--;\n admittingInternal.delete(requestId);\n await (\n await submitInternalMessage(preserved, delivery, requestId)\n ).settled;\n });\n void settled.catch((error) => emit({ type: 'error', code: 'internal_message', error: String(error) }));\n return { settled };\n }\n if (external) throw new Error('An operation is already running');\n const content = typeof message === 'string' ? message : message.content;\n const submit = async (draft: Parameters<Conversation['submit']>[0] & { requestId: string }) => {\n try {\n return await writable(() => conversation.submit(draft, context));\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(conversation.id, draft.requestId, context);\n const submission = accepted && (await harness.submission(accepted.id, context));\n if (!submission) throw error;\n return submission;\n }\n };\n admittingInternal.add(requestId);\n // Preserve custom presentation metadata without adding its content twice to model context.\n let envelope: Awaited<ReturnType<Conversation['submit']>> | undefined;\n let submission: Awaited<ReturnType<Conversation['submit']>>;\n try {\n await changeRecord((r) => {\n (r.internalDeliveries ??= {})[requestId] = deliveryRecord;\n });\n envelope =\n typeof message !== 'string' && message.role === 'custom'\n ? await submit({\n type: 'write',\n requestId: `${requestId}:message`,\n entry: {\n kind: 'po.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp, inputRequestId: requestId }),\n },\n })\n : undefined;\n submission = await submit({ type: 'input', content, whenBusy: delivery, requestId });\n await changeRecord((r) => {\n const item = r.internalDeliveries?.[requestId];\n if (item) item.submissionId = submission.id;\n });\n } finally {\n admittingInternal.delete(requestId);\n }\n let pendingDelivery = internalDelivery.get(submission.id);\n if (!pendingDelivery) {\n let resolveDelivery!: () => void;\n const done = new Promise<void>((resolve) => {\n resolveDelivery = resolve;\n });\n pendingDelivery = { done, resolve: resolveDelivery };\n internalDelivery.set(submission.id, pendingDelivery);\n }\n if (deliveredInputs.has(submission.id)) pendingDelivery.resolve();\n const delivered = pendingDelivery.done;\n const settled = (async () => {\n try {\n const status = await submission.wait(context);\n if (status.status === 'unanswered' && status.entry === undefined) {\n await conversation.waitForIdle(context);\n await reconcileInternal(requestId, deliveryRecord);\n }\n if (envelope && (await envelope.wait(context)).status !== 'done')\n throw new Error('Internal message journal write failed');\n if (status.status === 'done' || status.entry !== undefined) {\n const live = await harness.snapshot(\n LiveDoc,\n deliveryRecord.conversationId as typeof conversation.id,\n context,\n );\n // Reopened or aged-out receipts have no future run-end notification.\n if (!live?.run?.inputs.some((id) => String(id) === String(submission.id))) pendingDelivery.resolve();\n await delivered;\n }\n await eventsSettled;\n await reconcileInternal(requestId, deliveryRecord);\n } finally {\n internalDelivery.delete(submission.id);\n }\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'internal_message', error: String(error) }));\n return { settled };\n },\n steer: async (message, images) => {\n if (typeof message !== 'string' && message.role !== 'user')\n throw new Error('Only user messages can steer an agent run');\n await submitUserPrompt(message, images, undefined, 'steer');\n },\n followUp: (message, images) => queued(message, images, 'followUp'),\n nextRun: (message, images) => queued(message, images, 'nextRun'),\n abort,\n interrupt,\n async compact(instructions) {\n guardUserAdmission();\n if (external || compactionAdmission) throw new Error('An operation is already running');\n compactionAdmission = true;\n const previous = settings;\n try {\n if (await execution()) throw new Error('An operation is already running');\n settings = { ...settings, compaction: { ...settings.compaction, keepRecentTokens: 0 } };\n const task = await writable(() => conversation.compact(instructions, context));\n const receipt = await harness.waitForTask(task, context);\n await eventsSettled;\n if (['failed', 'faulted', 'orphaned'].includes(receipt.state.outcome.status))\n throw new Error('Compaction failed');\n } finally {\n settings = previous;\n compactionAdmission = false;\n }\n },\n async admitResume() {\n await recover();\n const resumed = !!(await execution());\n harness.resume();\n const settled = (async () => {\n await conversation.waitForIdle(context);\n await eventsSettled;\n await drain();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'resume', error: String(error) }));\n return { resumed, settled };\n },\n async resume() {\n await recover();\n const resumed = !!(await execution());\n harness.resume();\n if (resumed) {\n await conversation.waitForIdle(context);\n await eventsSettled;\n }\n void drain().catch((error) => emit({ type: 'error', error: String(error) }));\n return resumed;\n },\n dispose,\n };\n } catch (error) {\n const failures: unknown[] = [error];\n try {\n if (startupHarness) await startupHarness.close(context);\n else await storage.storage.close(context);\n } catch (closeError) {\n failures.push(closeError);\n }\n if (failures.length === 1) {\n try {\n await storage.repository?.close(context);\n await storage.historyLease?.release();\n } catch (closeError) {\n failures.push(closeError);\n }\n }\n if (failures.length > 1) throw new AggregateError(failures, 'Direct harness startup and cleanup failed');\n throw error;\n }\n}\nexport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../types/server/directHarnessRuntime';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"directHarnessRuntime.mjs","names":["lane","released"],"sources":["../../../src/server/directHarnessRuntime.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport type { Context, JsonValue } from '@earendil-works/chord';\nimport { BACKGROUND_CONTEXT, awaitWithContext, withAbortSignal } from '@earendil-works/chord/context';\nimport {\n createModels,\n getSupportedThinkingLevels,\n createAssistantMessageEventStream,\n type AssistantMessageEventStream,\n type Models,\n type MutableModels,\n type Api,\n type Model,\n type ImageContent,\n type Message,\n type Provider,\n type AssistantMessage,\n type ToolResultMessage,\n} from '@earendil-works/pi-ai';\nimport { getCurrentSystemPrompt, getCurrentTools } from '@earendil-works/pi-ai/utils/transcript';\nimport {\n Harness,\n createRegistry,\n GenerationTask,\n ToolTask,\n CompactionTask,\n DEFAULT_COMPACTION_POLICY,\n hook,\n watchEvents,\n UsageDoc,\n LiveDoc,\n InboxDoc,\n ProviderDoc,\n AgentDoc,\n type CompactionResult,\n type TaskId,\n type Conversation,\n type ConversationId,\n type Cursor,\n type EntryRecord,\n type EntryId,\n type InboxItem,\n type SubmissionId,\n type HarnessSettings,\n type Registry,\n type ToolRegistration,\n type AgentEventStream,\n} from '@earendil-works/pi-durable';\n\nimport { AGENT_SETTLED_ENTRY_TYPE } from '../constants/agentSettled';\nimport { PoHeadlessToolBusyError } from '../schemas/headless';\nimport type { PoSessionStorage } from '../schemas/platform';\nimport { PO_PROFILE_IDENTITY_ENTRY_TYPE } from '../schemas/profileIdentity';\nimport { SESSION_GROUPS_CHANGED_FRAME } from '../schemas/sessionProtocol';\nimport { contextTokensOf, contextUsageOf } from '../services/contextUsage';\nimport { initializeDurableNavigation, navigateDurableConversation } from '../services/durableNavigation';\nimport { admitSelected, heldContent, heldRequestId, type HeldInput, type HeldQueue } from '../services/durableQueue';\nimport { HeldQueueDoc } from '../services/durableQueue/docs';\nimport {\n AgentLockDoc,\n FastModeDoc,\n IdentityHistoryDoc,\n LabelsDoc,\n SessionIdentityDoc,\n SessionMetadataDoc,\n} from '../services/durableSession/docs';\nimport { SubagentsExtension, subagentConversations } from '../services/durableSubagents';\nimport { convertToLlm } from '../services/piMessages';\nimport { formatSkillsForSystemPrompt } from '../services/skillPrompt';\nimport { projectDurableEntries } from '../services/transcriptPages';\nimport type {\n DirectHarnessRuntime,\n DirectHarnessRuntimeOptions,\n DirectHarnessFrame,\n DirectHarnessEventListener,\n DirectHarnessLifecycle,\n DirectHarnessQueuedInput,\n Entry,\n AgentHarnessTool,\n AgentMessage,\n HarnessEvent,\n} from '../types/server/directHarnessRuntime';\n\n/** What a lane borrows from the main runtime of its Harness. */\ninterface LaneAttachment {\n readonly harness: Harness;\n readonly storage: PoSessionStorage;\n readonly registry: Registry;\n readonly conversation: Conversation;\n /** Provider identities of lane conversations, whose model requests skip the main lane's guards. */\n readonly laneProviderSessions: Set<string>;\n /** The conversation whose manual compaction holds the Harness-wide keep-nothing settings, if any. */\n readonly manualCompaction: { conversationId?: string };\n}\n\nconst AGENT_LOCKED_ERROR = 'The local agent is locked. Unlock it to start a turn.';\nconst CODEX_API = 'openai-codex-responses';\nconst CODEX_PROVIDER = 'openai-codex';\ntype InternalDeliveryRecord = { message: AgentMessage; conversationId: number };\ntype InboxContent = Extract<InboxItem, { mode: 'steer' | 'followUp' }>['content'];\n\nfunction nativeId<T extends number>(id: string): T {\n const value = Number(id);\n if (!Number.isSafeInteger(value) || value < 0 || String(value) !== id)\n throw new Error(`Invalid durable identifier: ${id}`);\n return value as T;\n}\nfunction json(value: unknown): JsonValue {\n return JSON.parse(JSON.stringify(value)) as JsonValue;\n}\nfunction text(message: string | AgentMessage): string {\n if (typeof message === 'string') return message;\n if (!('content' in message))\n return 'summary' in message ? message.summary : 'output' in message ? message.output : '';\n return typeof message.content === 'string'\n ? message.content\n : message.content.map((p) => (p.type === 'text' ? p.text : '')).join('');\n}\nfunction fromContent(content: InboxContent): Pick<HeldInput, 'text' | 'images'> {\n const parts = typeof content === 'string' ? [{ type: 'text' as const, text: content }] : content;\n const images = parts.filter((part) => part.type === 'image');\n return { text: text({ role: 'user', content, timestamp: 0 }), ...(images.length ? { images } : {}) };\n}\n/** Compatibility projection keeps protocol identities strings and retains fork ancestry. */\nexport async function projectDurableConversationEntries(\n conversation: Conversation,\n context: Context,\n minEntryId?: EntryId,\n): Promise<Entry[]> {\n const records: EntryRecord[] = [];\n let cursor: Cursor | undefined;\n do {\n const page = await conversation.entries(minEntryId === undefined ? {} : { minEntryId }, 256, cursor, context);\n records.push(...page.items);\n cursor = page.next;\n } while (cursor);\n records.reverse();\n return projectDurableEntries(records);\n}\n/**\n * Runs one prompt and returns the newest assistant text it produced. `hold` keeps the run open\n * across later turns started by intercom delivery: while it resolves true, wait for the lane to\n * go idle and ask again. The returned text is the newest one across all of those turns. With a\n * `requestId` the prompt is admitted once: a later call, such as one after a restart, waits for it.\n */\nexport async function promptForAssistantText(\n runtime: DirectHarnessRuntime,\n prompt: string | AgentMessage,\n hold?: () => Promise<boolean>,\n requestId?: string,\n): Promise<string | undefined> {\n const lane = runtime.lane;\n const receipt =\n requestId === undefined\n ? undefined\n : await runtime.harness.commit((tx) => tx.submissionByRequest(lane.id, requestId), BACKGROUND_CONTEXT);\n const before = (await runtime.readEntries()).entries;\n // An admitted prompt's answer follows its placed entry; a fresh one's follows everything there now.\n const previous = new Set(\n (receipt?.entry === undefined ? before : before.filter((e) => Number(e.id) <= receipt.entry!)).map((e) => e.id),\n );\n if (receipt) {\n const settled = await (await runtime.harness.submission(receipt.id, BACKGROUND_CONTEXT))?.wait(BACKGROUND_CONTEXT);\n // A prompt stopped before the restart stays stopped rather than reading as an answer.\n if (settled?.status === 'unanswered' && settled.reason === 'aborted')\n throw Object.assign(new Error('The prompt was stopped before it was answered'), { name: 'AbortError' });\n } else await (await runtime.submitInternalMessage(prompt, undefined, requestId)).settled;\n while (hold && (await hold())) await lane.waitForIdle(BACKGROUND_CONTEXT);\n return (\n (await runtime.readEntries()).entries\n .toReversed()\n .filter((e) => !previous.has(e.id))\n .flatMap((e) => (e.type === 'message' && e.message.role === 'assistant' ? [text(e.message).trim()] : []))[0] ||\n undefined\n );\n}\n\nexport function createDirectHarnessRuntime<TContext extends object | undefined = object | undefined>(\n options: DirectHarnessRuntimeOptions<TContext>,\n): Promise<DirectHarnessRuntime<TContext>> {\n return createLaneRuntime(options, undefined);\n}\n\n/** The extension holding one lane's tools, prompt and hooks. */\nfunction laneExtensionName(conversationId: ConversationId): string {\n return `po.lane-${conversationId}`;\n}\n/** The main lane opens its Harness; a further lane runs on the main lane's Harness as one more conversation. */\nasync function createLaneRuntime<TContext extends object | undefined>(\n options: DirectHarnessRuntimeOptions<TContext>,\n attached: LaneAttachment | undefined,\n): Promise<DirectHarnessRuntime<TContext>> {\n if (options.initialFastMode !== undefined && typeof options.initialFastMode !== 'boolean')\n throw new Error('Initial Fast mode must be a boolean.');\n if (options.initialAgentLocked !== undefined && typeof options.initialAgentLocked !== 'boolean')\n throw new Error('Initial agent lock must be a boolean.');\n const context = options.context ?? BACKGROUND_CONTEXT;\n if (options.session && !options.durableStorage)\n throw new Error('A durable Session injection requires its raw durableStorage');\n const platform = options.platform;\n const storage: PoSessionStorage =\n attached?.storage ??\n (options.durableStorage\n ? { storage: options.durableStorage, assertWritable() {}, release: async () => {} }\n : await platform.sessions.open(\n { sessionId: options.sessionId, parentSessionId: options.parentSessionId, existing: options.resume },\n context,\n ));\n let startupHarness: Harness | undefined;\n try {\n const registry = attached?.registry ?? createRegistry();\n const environment = attached ? undefined : platform.env(options.cwd);\n const laneProviderSessions = attached?.laneProviderSessions ?? new Set<string>();\n const manualCompaction = attached?.manualCompaction ?? {};\n const extensionName = attached ? laneExtensionName(attached.conversation.id) : 'po.host';\n let disposed = false;\n let quarantined = false;\n let failure: unknown;\n let preparationFailure: unknown;\n const terminatingCalls = new Set<string>();\n let fastMode = false;\n let agentLocked = false;\n const assertUnlocked = () => {\n if (agentLocked) throw new Error(AGENT_LOCKED_ERROR);\n };\n let resources = options.resources ?? {};\n let tools = options.tools ?? [];\n let activeNames = new Set(options.activeToolNames ?? tools.map((t) => t.name));\n let settings: HarnessSettings = {\n // Lanes select their own extension, so a conversation without a selection gets the main lane's alone.\n extensions: [{ name: 'po.host' }],\n stream: options.streamOptions,\n retry: options.retry,\n compaction: options.compaction,\n toolExecution: options.toolExecution,\n steeringMode: options.steeringMode,\n followUpMode: options.followUpMode,\n };\n const listeners = new Set<(frame: DirectHarnessFrame) => void>();\n const eventListeners = new Set<DirectHarnessEventListener>();\n const checkpointBoundaries = new Set<{\n active: boolean;\n callback: Parameters<NonNullable<DirectHarnessRuntime['registerCheckpointBoundary']>>[0];\n }>();\n const toolBoundaryQueue: { run: () => Promise<void>; reject: (error: unknown) => void }[] = [];\n let toolBoundaryDrain: Promise<void> | undefined;\n const flushToolBoundary = (): Promise<void> => {\n if (toolBoundaryDrain) return toolBoundaryDrain;\n toolBoundaryDrain = (async () => {\n while (toolBoundaryQueue.length && !disposed && !disposePromise) {\n await toolBoundaryQueue.shift()!.run();\n }\n })().finally(() => {\n toolBoundaryDrain = undefined;\n });\n return toolBoundaryDrain;\n };\n const emit = (frame: DirectHarnessFrame) => {\n for (const listener of listeners) {\n try {\n listener(frame);\n } catch (error) {\n for (const other of listeners) if (other !== listener) other({ type: 'handler_error', error: String(error) });\n }\n }\n };\n const writable = async <T>(work: () => Promise<T>): Promise<T> => {\n if (disposed || quarantined) throw new Error('Direct harness writes are unavailable', { cause: failure });\n try {\n await storage.assertWritable();\n return await work();\n } catch (error) {\n const code = typeof error === 'object' && error !== null && 'code' in error ? error.code : undefined;\n if (\n typeof code === 'string' &&\n ['EACCES', 'EBUSY', 'EIO', 'EMFILE', 'ENFILE', 'ENOSPC', 'EPERM', 'EROFS'].includes(code)\n ) {\n quarantined = true;\n failure = error;\n emit({ type: 'error', code: 'storage_quarantined', error: String(error) });\n }\n throw error;\n }\n };\n let sourceModels: Models | MutableModels;\n if (options.models) sourceModels = options.models;\n else {\n if (!options.providers?.length) throw new Error('Direct harness requires Models or a Provider');\n sourceModels = createModels(options.credentials ? { credentials: options.credentials } : undefined);\n }\n for (const provider of options.providers ?? []) {\n const mutable = sourceModels as Partial<MutableModels> & {\n registerNativeProvider?: (provider: Provider) => void;\n };\n const register = mutable.setProvider?.bind(sourceModels) ?? mutable.registerNativeProvider?.bind(sourceModels);\n if (!register) throw new Error('Models registry cannot register providers');\n register(provider);\n }\n const models = new Proxy(sourceModels, {\n get(target, key) {\n const value: unknown = Reflect.get(target, key, target);\n if (typeof value !== 'function') return value;\n if (\n !['stream', 'complete', 'streamSimple', 'completeSimple', 'streamDeferred', 'fetchDeferred'].includes(\n String(key),\n )\n )\n return value.bind(target);\n return (...args: unknown[]) => {\n const requestOptions = args[2] as Record<string, unknown> | undefined;\n // A lane's generation sends its own conversation's provider identity; the main lane's guards are not its.\n const lane =\n typeof requestOptions?.sessionId === 'string' && laneProviderSessions.has(requestOptions.sessionId);\n if (disposed || quarantined || (!lane && preparationFailure))\n throw new Error('Model dispatch unavailable', { cause: preparationFailure });\n if (!lane) options.guardModelRequest?.();\n const request = args[1] as { tools?: { name: string }[] };\n if (\n !lane &&\n !['complete', 'completeSimple'].includes(String(key)) &&\n request?.tools?.some((t) => !activeNames.has(t.name))\n )\n throw new Error('Model request contains disabled tools');\n const usePriority =\n fastMode &&\n (args[0] as Model<Api>).api === CODEX_API &&\n (args[0] as Model<Api>).provider === CODEX_PROVIDER;\n const originalOnPayload = requestOptions?.onPayload;\n args[2] = {\n ...requestOptions,\n // Only the public auxiliary completion API may override Po's persisted identity.\n sessionId: lane\n ? requestOptions!.sessionId\n : key === 'complete'\n ? (requestOptions?.sessionId ?? sessionId)\n : sessionId,\n ...(usePriority ? { serviceTier: 'priority' } : {}),\n onPayload: async (payload: unknown, model: Model<Api>) => {\n if (!lane) options.guardModelRequest?.();\n const original =\n typeof originalOnPayload === 'function' ? await originalOnPayload(payload, model) : undefined;\n const transformed = original === undefined ? payload : original;\n const patch = lane ? undefined : await options.beforePayload?.({ payload: transformed, model }, context);\n const finalPayload = patch === undefined ? transformed : patch.payload;\n if (!usePriority) return finalPayload;\n if (typeof finalPayload !== 'object' || finalPayload === null || Array.isArray(finalPayload))\n throw new Error('Invalid Codex request payload');\n return { ...finalPayload, service_tier: 'priority' };\n },\n };\n const dispatched: unknown = Reflect.apply(value, target, args);\n if (!['stream', 'streamSimple', 'fetchDeferred'].includes(String(key))) return dispatched;\n const source = dispatched as AssistantMessageEventStream;\n const output = createAssistantMessageEventStream();\n const requestedModel = args[0] as Model<Api>;\n const signal = (args[2] as { signal?: AbortSignal }).signal;\n let ended = false;\n let current: AssistantMessage = {\n role: 'assistant',\n content: [],\n api: requestedModel.api,\n provider: requestedModel.provider,\n model: requestedModel.id,\n timestamp: Date.now(),\n stopReason: 'pending',\n usage: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n },\n };\n const cancel = () => {\n if (ended) return;\n ended = true;\n const cancelled = { ...current, stopReason: 'aborted' as const, errorMessage: 'Agent request aborted' };\n output.push({ type: 'error', reason: 'aborted', error: cancelled });\n output.end();\n };\n signal?.addEventListener('abort', cancel, { once: true });\n if (signal?.aborted) cancel();\n void (async () => {\n try {\n for await (const event of source) {\n if (ended) break;\n if ('partial' in event) current = event.partial;\n output.push(event);\n }\n if (!ended) {\n ended = true;\n output.end(await source.result());\n }\n } catch (error) {\n if (!ended) {\n ended = true;\n const failed = { ...current, stopReason: 'error' as const, errorMessage: String(error) };\n output.push({ type: 'error', reason: 'error', error: failed });\n output.end();\n }\n } finally {\n signal?.removeEventListener('abort', cancel);\n }\n })();\n return output;\n };\n },\n }) as Models;\n const resolveToolContext = async (ctx: Context) =>\n typeof options.toolContext === 'function' ? options.toolContext(ctx) : (options.toolContext as TContext);\n const nativeTool = (tool: AgentHarnessTool<TContext>): ToolRegistration => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n constrainedSampling: tool.constrainedSampling,\n prepareArguments: tool.prepareArguments ? (args) => tool.prepareArguments!(args) : undefined,\n replay: tool.replay ?? 'unsafe',\n executionMode: tool.executionMode,\n async execute(args, api, ctx) {\n if (!activeNames.has(tool.name)) throw new Error(`Tool '${tool.name}' is no longer active`);\n // Po tools report the whole output so far; pi-durable appends, so pass on only what is new.\n let reported = '';\n const pending = tool.execute(\n api.callId,\n args,\n (partial) => {\n const snapshot = partial.content.map((part) => (part.type === 'text' ? part.text : '')).join('');\n // ponytail: a snapshot that does not extend the last one (a placeholder replaced, or a tail-capped\n // buffer trimmed) is appended whole after a newline. Upgrade path: tools stream deltas instead.\n const chunk = snapshot.startsWith(reported) ? snapshot.slice(reported.length) : `\\n${snapshot}`;\n reported = snapshot;\n if (chunk) api.output(chunk);\n if (partial.details !== undefined)\n void api\n .details(json(partial.details), ctx)\n .catch((error) => emit({ type: 'error', error: String(error) }));\n },\n await resolveToolContext(ctx),\n {\n invocationId: String(api.taskId),\n operationId: String(api.taskId),\n turnId: String(api.taskId),\n getMemo: (name) => api.memo(name, ctx),\n setMemo: async (name, value) => {\n if (value === undefined) throw new Error('Durable invocation memos cannot be deleted');\n await api.memo(name, value, ctx);\n },\n },\n ctx,\n );\n const result = await awaitWithContext(pending, ctx);\n return {\n output: result.content,\n isError: result.isError,\n ...(result.details === undefined ? {} : { details: json(result.details) }),\n };\n },\n });\n const install = () =>\n registry.install({\n name: extensionName,\n tools: tools.map(nativeTool),\n sections: [\n {\n key: 'po',\n tag: false,\n async render(_input, ctx) {\n preparationFailure = undefined;\n try {\n const prompt =\n typeof options.systemPrompt === 'function'\n ? await options.systemPrompt(await resolveToolContext(ctx), ctx)\n : (options.systemPrompt ?? '');\n const skills =\n options.systemPrompt === undefined ? formatSkillsForSystemPrompt(resources.skills ?? []) : '';\n return [prompt, skills].filter(Boolean).join('\\n\\n');\n } catch (error) {\n preparationFailure = error;\n throw error;\n }\n },\n },\n ],\n hooks: [\n hook(GenerationTask, {\n async afterTools(_assistant, _results, api, ctx) {\n const lane = conversation;\n if (lane.id !== api.conversationId) return;\n await flushToolBoundary();\n for (const registration of checkpointBoundaries) {\n if (!registration.active || disposed || ctx.abortSignal?.aborted || external) continue;\n let open = true;\n try {\n await registration.callback({\n signal: ctx.abortSignal,\n appendMessage: (message) =>\n commitCheckpointMessage(registration, lane, message, ctx, () => open, api.taskId),\n });\n } finally {\n open = false;\n }\n }\n },\n async beforeRequest(request, _api, ctx) {\n // Outside the try: a lock must not poison model dispatch for remote operations.\n assertUnlocked();\n try {\n const agent = await conversation.agent(ctx);\n const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n await options.beforeModelRequest?.(\n { phase: 'turn', model, prompt: [...request.messages], resources },\n ctx,\n );\n const systemPrompt = getCurrentSystemPrompt(request.messages);\n const contextMessages = options.transformContext\n ? restoreCustomContextMessages(request.messages, await conversation.context(ctx))\n : request.messages.filter((message) => message.role !== 'system');\n // Snapshot before hooks, which may mutate their input in place.\n const originalContext = structuredClone(contextMessages);\n const patch = await options.transformContext?.({ messages: contextMessages, systemPrompt }, ctx);\n const changed =\n patch &&\n ((patch.systemPrompt !== undefined && patch.systemPrompt !== systemPrompt) ||\n (patch.messages !== undefined && !isDeepStrictEqual(patch.messages, originalContext)));\n let messages: Message[] = changed\n ? [\n {\n role: 'system',\n content: patch.systemPrompt ?? systemPrompt,\n timestamp: Date.now(),\n toolsAdded: getCurrentTools(request.messages),\n },\n ...convertToLlm(patch.messages ?? request.messages.filter((m) => m.role !== 'system')),\n ]\n : [...request.messages];\n if (options.toProviderMessages) messages = await options.toProviderMessages(messages, ctx);\n await options.beforeModelRequest?.({ phase: 'request', model, resources }, ctx);\n return { messages };\n } catch (error) {\n preparationFailure = error;\n throw error;\n }\n },\n }),\n hook(ToolTask, {\n async beforeTool(call, _api, ctx) {\n const patch = await options.beforeTool?.(\n { toolCallId: call.id, toolName: call.name, args: call.arguments as Record<string, JsonValue> },\n ctx,\n );\n if (patch?.block?.terminate) terminatingCalls.add(call.id);\n return patch ? { arguments: patch.args, block: patch.block?.reason } : undefined;\n },\n async afterTool(call, result, _api, ctx) {\n const patch = await options.afterTool?.(\n {\n toolCallId: call.id,\n toolName: call.name,\n args: call.arguments as Record<string, JsonValue>,\n content: result.output ?? [],\n details: result.details,\n isError: result.isError ?? false,\n usage: result.usage,\n },\n ctx,\n );\n const { content: patchedOutput, terminate: _terminate, ...patchFields } = patch ?? {};\n return patch\n ? {\n ...result,\n ...patchFields,\n ...(patchedOutput === undefined ? {} : { output: patchedOutput }),\n control:\n patch.terminate || terminatingCalls.delete(call.id)\n ? { ...result.control, terminate: true }\n : result.control,\n }\n : terminatingCalls.delete(call.id)\n ? { ...result, control: { ...result.control, terminate: true } }\n : undefined;\n },\n }),\n hook(CompactionTask, {\n async beforeCompact(input, api, ctx) {\n // Another conversation's manual compaction keeps nothing; a threshold compaction here waits for later.\n const swapped = manualCompaction.conversationId;\n if (input.reason === 'threshold' && swapped !== undefined && swapped !== String(api.conversationId))\n return { decline: true };\n if (!options.beforeCompaction) return;\n const entries = projectDurableEntries(input.entries);\n const patch = await options.beforeCompaction(\n {\n reason: input.reason,\n customInstructions: input.instructions,\n preparation: {\n entries,\n messages: [...input.messages],\n tokensBefore: 0,\n retainedTail: [],\n firstKeptEntryId: String(input.firstKept),\n messagesToSummarize: [...input.messages],\n turnPrefixMessages: [],\n isSplitTurn: false,\n fileOps: { read: new Set(), written: new Set(), edited: new Set() },\n settings: {\n enabled: options.compaction?.enabled ?? DEFAULT_COMPACTION_POLICY.enabled,\n reserveTokens: options.compaction?.reserveTokens ?? DEFAULT_COMPACTION_POLICY.reserveTokens,\n keepRecentTokens:\n options.compaction?.keepRecentTokens ?? DEFAULT_COMPACTION_POLICY.keepRecentTokens,\n },\n },\n },\n ctx,\n );\n if (patch?.decline) return { decline: true };\n if (patch?.compaction) return { summary: patch.compaction.summary };\n return undefined;\n },\n }),\n ],\n });\n install();\n if (!attached) registry.install(SubagentsExtension);\n const harness =\n attached?.harness ??\n (await Harness.open(\n storage.storage,\n {\n models,\n registry,\n get settings() {\n return settings;\n },\n env: () => environment,\n onReport: (error) => emit({ type: 'handler_error', error: String(error) }),\n },\n context,\n ));\n if (!attached) startupHarness = harness;\n let conversation: Conversation;\n let sessionId: string;\n if (attached) {\n conversation = attached.conversation;\n if (!options.sessionId) throw new Error('A lane requires its session identity.');\n sessionId = options.sessionId;\n await writable(() =>\n conversation.configure(\n {\n extensions: [{ name: extensionName }],\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n modelTools: null,\n instructions: null,\n cwd: options.cwd,\n ...(options.model ? { model: { provider: options.model.provider, modelId: options.model.id } } : {}),\n ...(options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n },\n context,\n ),\n );\n const provider = await harness.snapshot(ProviderDoc, conversation.id, context);\n if (provider) laneProviderSessions.add(provider.sessionId);\n } else {\n const root = await harness.root(context, {\n agent: {\n cwd: options.cwd,\n ...((options.model ?? models.getModels()[0])\n ? {\n model: {\n provider: (options.model ?? models.getModels()[0]!).provider,\n modelId: (options.model ?? models.getModels()[0]!).id,\n },\n }\n : {}),\n ...(options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n },\n });\n const activeId = await initializeDurableNavigation(harness, root.id, context);\n conversation = (await harness.conversation(activeId, context))!;\n const storedAgent = await harness.snapshot(AgentDoc, conversation.id, context);\n const initialModel = options.model ?? models.getModels()[0];\n await conversation.configure(\n {\n ...(!storedAgent?.model && initialModel\n ? { model: { provider: initialModel.provider, modelId: initialModel.id } }\n : {}),\n ...(!storedAgent?.thinkingLevel && options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n },\n context,\n );\n const storedFastMode = await harness.snapshot(FastModeDoc, context);\n fastMode = storedFastMode?.enabled ?? options.initialFastMode ?? false;\n const storedAgentLock = await harness.snapshot(AgentLockDoc, context);\n agentLocked = storedAgentLock?.locked ?? options.initialAgentLocked ?? false;\n const storedIdentity = await harness.snapshot(SessionIdentityDoc, context);\n const mainSessionId = storedIdentity?.id || options.sessionId || randomUUID();\n sessionId = mainSessionId;\n const lane = conversation;\n await writable(() =>\n harness.commit(async (tx) => {\n const identity = await tx.doc(SessionIdentityDoc);\n if (!identity.id) {\n identity.id = mainSessionId;\n identity.createdAt = Date.now();\n identity.parentSessionId = options.parentSessionId ?? '';\n }\n if (!storedAgentLock && options.initialAgentLocked !== undefined)\n (await tx.doc(AgentLockDoc)).locked = agentLocked;\n if (!storedFastMode) {\n (await tx.doc(FastModeDoc)).enabled = fastMode;\n if (options.initialFastMode !== undefined)\n await tx.appendEntry(lane.id, {\n kind: 'po.fast-mode',\n data: { version: 1, enabled: fastMode, sessionId: mainSessionId },\n });\n }\n const metadata = await tx.doc(SessionMetadataDoc);\n metadata.workspaceRoot ||= options.cwd;\n if (options.lane !== undefined) metadata.laneName = options.lane;\n if (!storedIdentity?.id && options.sessionName !== undefined) metadata.name = options.sessionName;\n }, context),\n );\n }\n const laneName = options.lane ?? 'main';\n let resolveExited!: (code: number) => void;\n const exited = new Promise<number>((resolve) => {\n resolveExited = resolve;\n });\n // A lane holds nothing: no operator pauses or queues a child's input, so its record stays in memory.\n let laneRecord: HeldQueue = { revision: 0, paused: false, held: [] };\n const readRecord = async (): Promise<HeldQueue> =>\n attached\n ? structuredClone(laneRecord)\n : (JSON.parse(\n (await harness.snapshot(HeldQueueDoc, context))?.json ?? '{\"revision\":0,\"paused\":false,\"held\":[]}',\n ) as HeldQueue);\n const changeRecord = async <T>(change: (record: HeldQueue) => T): Promise<T> => {\n if (attached) {\n const record = structuredClone(laneRecord);\n const result = change(record);\n record.revision++;\n laneRecord = record;\n return result;\n }\n return writable(() =>\n harness.commit(async (tx) => {\n const doc = await tx.doc(HeldQueueDoc);\n const record = JSON.parse(doc.json) as HeldQueue;\n const result = change(record);\n record.revision++;\n doc.json = JSON.stringify(record);\n return result;\n }, context),\n );\n };\n let userAdmission = false;\n let promptAdmissions = 0;\n let userAdmissionSettled: Promise<void> = Promise.resolve();\n let releaseUserAdmission: (() => void) | undefined;\n const guardUserAdmission = () => {\n if (userAdmission) throw new Error('A user interruption is already being admitted');\n };\n let external: string | undefined;\n let externalAbort: AbortController | undefined;\n let compactionAdmission = false;\n const nativeExecution = async () => {\n const live = await harness.snapshot(LiveDoc, conversation.id, context);\n const inspected = await harness.inspect(context);\n const task = inspected.tasks.find((t) => t.record.conversationId === conversation.id && !t.record.background);\n return live?.run\n ? {\n id: String(live.run.inputs[0]),\n kind: 'run' as const,\n status:\n (await readRecord()).abortOperationId === String(live.run.inputs[0])\n ? ('aborting' as const)\n : ('open' as const),\n }\n : task\n ? {\n id: String(task.record.id),\n kind: 'compaction' as const,\n status: task.record.abortRequested ? ('aborting' as const) : ('open' as const),\n }\n : null;\n };\n const execution = async () =>\n (await nativeExecution()) ??\n (external\n ? { id: external, kind: 'navigation' as const, status: 'open' as const }\n : settling\n ? { id: 'settling', kind: 'run' as const, status: 'open' as const }\n : null);\n const runAtToolBoundary = <T>(callback: () => Promise<T>): Promise<T> => {\n if (disposed || disposePromise) return Promise.reject(new Error('Direct harness is disposed'));\n return new Promise<T>((resolve, reject) => {\n const pending = {\n async run() {\n try {\n resolve(await callback());\n } catch (error) {\n reject(error);\n }\n },\n reject,\n };\n // Enqueue before checking activity so a concurrent boundary cannot miss this work.\n toolBoundaryQueue.push(pending);\n void nativeExecution()\n .then(async (active) => {\n if (!active && !external) await flushToolBoundary();\n })\n .catch((error) => {\n const index = toolBoundaryQueue.indexOf(pending);\n if (index !== -1) {\n toolBoundaryQueue.splice(index, 1);\n reject(error);\n }\n });\n });\n };\n const readLifecycle = async (): Promise<DirectHarnessLifecycle> => {\n const record = await readRecord();\n const inbox = await harness.snapshot(InboxDoc, conversation.id, context);\n // A held input handed to pi.inbox stays visible under its held ID until a boundary places it.\n const handedOff: DirectHarnessQueuedInput[] = [];\n for (const item of inbox?.items ?? []) {\n if (item.mode === 'write') continue;\n const requestId = (await storage.storage.submission(item.id, context))?.requestId;\n if (!requestId?.startsWith(heldRequestId(''))) continue;\n handedOff.push({\n id: requestId.slice(heldRequestId('').length),\n ...fromContent(item.content),\n delivery: item.mode,\n scheduling: 'automatic',\n disposition: 'handoff',\n });\n }\n return {\n revision: record.revision,\n paused: record.paused,\n queue: [\n ...handedOff,\n ...record.held\n .filter((item) => item.explicitQueue)\n .map(({ explicitQueue: _q, message: _m, entry: _e, ...item }) => ({\n ...item,\n disposition: 'pending' as const,\n })),\n ],\n operation: await execution(),\n };\n };\n const publish = async () => emit({ type: 'lifecycle_update', lifecycle: await readLifecycle() });\n let watcher: AgentEventStream;\n let eventsSettled = Promise.resolve();\n let settling = 0;\n const admittingInternal = new Set<string>();\n const reconcilingInternal = new Map<string, Promise<void>>();\n const internalDelivery = new Map<SubmissionId, { done: Promise<void>; resolve: () => void }>();\n const deliveredInputs = new Set<SubmissionId>();\n const nextTurnMessages: AgentMessage[] = [];\n let deferredInternalCount = 0;\n const flushNextTurn = async () => {\n const staged = nextTurnMessages.splice(0);\n for (let index = 0; index < staged.length; index++) {\n const message = staged[index]!;\n try {\n await writable(() =>\n conversation.submit(\n {\n type: 'write',\n requestId: randomUUID(),\n entry: { kind: 'po.entry', data: json({ type: 'message', message }), model: convertToLlm([message]) },\n },\n context,\n ),\n );\n } catch (error) {\n nextTurnMessages.unshift(...staged.slice(index));\n throw error;\n }\n }\n };\n let logicalLoopActive = false;\n let lastAssistant: AssistantMessage | undefined;\n let partial: AssistantMessage | undefined;\n let toolResults: ToolResultMessage[] = [];\n const deliver = async (event: HarnessEvent, eventContext: Context) => {\n for (const listener of eventListeners)\n try {\n await listener(event, eventContext);\n } catch (error) {\n emit({ type: 'handler_error', error: String(error) });\n }\n };\n const attach = async () => {\n if (watcher) await watcher.stop();\n watcher = await watchEvents(harness, conversation.id, context);\n let predecessor = watcher.snapshot.entries.at(-1)?.id;\n // pi-durable streams tool output as trim/append deltas of a retained window; clients expect the whole window.\n const toolOutputs = new Map<string, string>();\n lastAssistant = undefined;\n partial = undefined;\n toolResults = [];\n watcher.start(async (events, eventContext) => {\n for (const event of events) {\n let mapped: HarnessEvent | undefined;\n if (event.type === 'turn_start' || event.type === 'run_start') {\n lastAssistant = undefined;\n partial = undefined;\n toolResults = [];\n }\n if (event.type === 'message_end' || event.type === 'entry_appended') {\n const entry = projectDurableEntries([event.entry])[0];\n if (entry) {\n entry.parentId = predecessor === undefined ? null : String(predecessor);\n const added: HarnessEvent = { type: 'entry_appended', entry };\n emit({ type: 'entry_appended', entry });\n eventsSettled = eventsSettled.then(() => deliver(added, eventContext));\n }\n predecessor = event.entry.id;\n }\n if (['run_start', 'run_end', 'turn_start', 'compaction_start'].includes(event.type))\n mapped = { type: event.type } as HarnessEvent;\n if (event.type === 'message_start') {\n if (event.message.role === 'assistant') partial = structuredClone(event.message);\n mapped = { type: 'message_start', message: event.message };\n }\n if (event.type === 'message_end' && event.entry.model?.[0]) {\n const projected = projectDurableEntries([event.entry])[0];\n const message =\n projected?.type === 'message' && projected.message.role === 'custom'\n ? projected.message\n : event.entry.model[0];\n if (message.role === 'assistant') lastAssistant = message;\n if (message.role === 'toolResult') toolResults.push(message);\n mapped = { type: 'message_end', message, entryId: String(event.entry.id), runId: String(conversation.id) };\n }\n\n if (event.type === 'tool_execution_start') mapped = { ...event, type: 'tool_execution_start' };\n if (event.type === 'tool_execution_end') {\n toolOutputs.delete(event.toolCallId);\n const result = event.entry?.model?.find((m) => m.role === 'toolResult');\n mapped = {\n type: 'tool_execution_end',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n result: {\n content: result?.content ?? [],\n details: result?.details === undefined ? undefined : json(result.details),\n },\n isError: result?.isError ?? true,\n };\n }\n if (event.type === 'turn_end' && lastAssistant) {\n mapped = { type: 'turn_end', message: lastAssistant, toolResults };\n toolResults = [];\n lastAssistant = undefined;\n partial = undefined;\n }\n if (event.type === 'message_update' && partial) {\n for (const change of event.changes) {\n if (change.type === 'message') {\n partial = structuredClone(change.message);\n } else if ('block' in change) {\n partial.content[change.contentIndex] = structuredClone(change.block);\n }\n const block = 'contentIndex' in change ? partial.content[change.contentIndex] : undefined;\n if (change.type === 'text_delta' && block?.type === 'text') block.text += change.delta;\n if (change.type === 'thinking_delta' && block?.type === 'thinking') block.thinking += change.delta;\n {\n const update: HarnessEvent = {\n type: 'message_update',\n message: structuredClone(partial),\n event:\n 'delta' in change\n ? {\n type: change.type,\n contentIndex: change.contentIndex,\n delta: change.delta,\n partial: structuredClone(partial),\n }\n : { type: 'start', partial: structuredClone(partial) },\n };\n // Clients read the streaming message from session `live`; extensions get the delta below.\n emit({ type: 'message_update', message: update.message });\n eventsSettled = eventsSettled.then(() => deliver(update, eventContext));\n }\n }\n }\n if (event.type === 'tool_execution_update') {\n const previous = toolOutputs.get(event.toolCallId) ?? '';\n const output = !event.output\n ? previous\n : 'set' in event.output\n ? event.output.set\n : previous.slice(event.output.trimStart ?? 0) + (event.output.append ?? '');\n toolOutputs.set(event.toolCallId, output);\n mapped = {\n type: 'tool_execution_update',\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n partialResult: { content: [{ type: 'text', text: output }], details: event.details },\n };\n }\n if (event.type === 'compaction_end') {\n const receipt = await harness.waitForTask(event.taskId as TaskId<CompactionResult>, eventContext);\n const outcome = receipt.state.outcome;\n const result = outcome.status === 'completed' ? outcome.result : undefined;\n const summary = result?.submissionId\n ? await harness.submission(result.submissionId, eventContext)\n : undefined;\n const status = await summary?.status(eventContext);\n const entryId = result?.entryId ?? (status && 'entry' in status ? status.entry : undefined);\n mapped = {\n type: 'compaction_end',\n status:\n outcome.status === 'completed'\n ? result?.entryId !== undefined || result?.submissionId !== undefined\n ? 'completed'\n : 'aborted'\n : outcome.status === 'aborted'\n ? 'aborted'\n : 'failed',\n reason: event.reason,\n entryId: entryId === undefined ? undefined : String(entryId),\n error: event.error === undefined ? undefined : new Error(event.error),\n };\n }\n if (event.type === 'inbox_update')\n mapped = { type: 'queue_update', queues: event.items.map((item) => ({ kind: item.mode })) };\n if (event.type === 'message_end') {\n for (const message of event.entry.model ?? [])\n if (message.role === 'assistant')\n eventsSettled = eventsSettled.then(() =>\n deliver({ type: 'usage', row: { id: String(event.entry.id), usage: message.usage } }, eventContext),\n );\n }\n if (!mapped) continue;\n if (mapped.type === 'run_end') {\n const settledEvent = {\n runId: String(event.type === 'run_end' ? event.inputs[0] : conversation.id),\n timestamp: Date.now(),\n };\n settling++;\n let released = false;\n const release = () => {\n if (!released) {\n settling--;\n released = true;\n }\n };\n eventsSettled = eventsSettled\n .then(async () => {\n if (!(await nativeExecution()) && !external) await flushToolBoundary();\n await reconcile();\n try {\n await writable(() =>\n harness.commit(\n (tx) => tx.appendEntry(conversation.id, { kind: AGENT_SETTLED_ENTRY_TYPE, data: settledEvent }),\n eventContext,\n ),\n );\n } catch (error) {\n emit({ type: 'error', code: 'agent_settled', error: String(error) });\n }\n const live = await harness.snapshot(LiveDoc, conversation.id, eventContext);\n const successorActive = !!live?.run && String(live.run.inputs[0]) !== settledEvent.runId;\n // Read terminal input outcomes, including cancellation before any assistant message.\n const statuses = await Promise.all(\n event.type === 'run_end'\n ? event.inputs.map(async (id) => {\n const submission = await harness.submission(id, eventContext);\n if (!submission) throw new Error(`Settled submission ${id} is unavailable`);\n return submission.status(eventContext);\n })\n : [],\n );\n const aborted = statuses.some(\n (status) => status.status === 'unanswered' && status.reason === 'aborted',\n );\n mapped = { type: 'run_end', runId: settledEvent.runId, successorActive, aborted };\n emit(mapped);\n await deliver(mapped, eventContext);\n release();\n // A settlement hook can admit work after the initial successor check.\n const lifecycle = await readLifecycle();\n emit({ type: 'lifecycle_update', lifecycle });\n if (!lifecycle.operation) {\n logicalLoopActive = false;\n emit({ type: 'agent_end', runId: settledEvent.runId });\n emit({ type: 'agent_settled', ...settledEvent });\n }\n })\n .catch((error) => emit({ type: 'error', code: 'settled_event', error: String(error) }))\n .finally(async () => {\n release();\n if (event.type === 'run_end')\n for (const id of event.inputs) {\n deliveredInputs.add(id);\n internalDelivery.get(id)?.resolve();\n }\n while (deliveredInputs.size > 128) deliveredInputs.delete(deliveredInputs.values().next().value!);\n try {\n await publish();\n } catch (error) {\n emit({ type: 'error', code: 'lifecycle_update', error: String(error) });\n }\n // Do not await dispatch here: it waits for this settlement chain.\n void dispatch().catch((error) => emit({ type: 'error', code: 'dispatch', error: String(error) }));\n });\n } else {\n // Protocol publication must not wait for extension hooks on earlier events.\n emit(mapped);\n if (mapped.type === 'run_start') {\n if (!logicalLoopActive) emit({ type: 'agent_start' });\n logicalLoopActive = true;\n void publish().catch((error) => emit({ type: 'error', code: 'lifecycle_update', error: String(error) }));\n }\n const delivered = mapped;\n eventsSettled = eventsSettled.then(() => deliver(delivered, eventContext));\n }\n }\n });\n };\n await attach();\n // In-process only: after a crash, pi.inbox still holds a stranded internal input but an abort drops it.\n const internalDeliveries = new Map<string, InternalDeliveryRecord>();\n const reconcileInternal = (requestId: string, item: InternalDeliveryRecord): Promise<void> => {\n const existing = reconcilingInternal.get(requestId);\n if (existing) return existing;\n const work = (async () => {\n if (admittingInternal.has(requestId)) return;\n const target =\n item.conversationId === conversation.id\n ? conversation\n : await harness.conversation(item.conversationId as typeof conversation.id, context);\n if (!target) throw new Error('Internal delivery conversation is unavailable');\n let receipt = await storage.storage.submissionByRequest(target.id, requestId, context);\n // A failed native run can strand queued inputs. Never withdraw from a surviving run.\n if (receipt?.status === 'queued' && !(await harness.snapshot(LiveDoc, target.id, context))?.run) {\n await harness.abortSubmission(receipt.id, context);\n receipt = await storage.storage.submissionByRequest(target.id, requestId, context);\n }\n if (receipt?.status === 'queued') return;\n if (!receipt || (receipt.status === 'unanswered' && receipt.entry === undefined)) {\n if ((await harness.snapshot(LiveDoc, target.id, context))?.run) return;\n const draft: Parameters<Conversation['submit']>[0] = {\n type: 'write',\n requestId: `${requestId}:context`,\n entry: {\n kind: 'po.entry',\n data: json({ type: 'message', message: item.message, timestamp: item.message.timestamp }),\n model: convertToLlm([item.message]),\n },\n };\n let fallback;\n try {\n fallback = await writable(() => target.submit(draft, context));\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(target.id, `${requestId}:context`, context);\n fallback = accepted && (await harness.submission(accepted.id, context));\n if (!fallback) throw error;\n }\n if ((await fallback.wait(context)).status !== 'done') throw new Error('Internal context write failed');\n }\n internalDeliveries.delete(requestId);\n })().finally(() => {\n reconcilingInternal.delete(requestId);\n });\n reconcilingInternal.set(requestId, work);\n return work;\n };\n const reconcile = async () => {\n // Withdraw all stranded internal inputs before any passive write can flush an idle native inbox.\n for (const [requestId, item] of internalDeliveries) {\n if (admittingInternal.has(requestId)) continue;\n if ((await harness.snapshot(LiveDoc, item.conversationId as typeof conversation.id, context))?.run) continue;\n const receipt = await storage.storage.submissionByRequest(\n item.conversationId as typeof conversation.id,\n requestId,\n context,\n );\n if (receipt?.status === 'queued') await harness.abortSubmission(receipt.id, context);\n }\n for (const [requestId, item] of internalDeliveries) await reconcileInternal(requestId, item);\n };\n const submitInput = async (draft: Parameters<Conversation['submit']>[0] & { requestId: string }) => {\n try {\n return await writable(() => conversation.submit(draft, context));\n } catch (error) {\n const accepted = await storage.storage.submissionByRequest(conversation.id, draft.requestId, context);\n const submission = accepted && (await harness.submission(accepted.id, context));\n if (!submission) throw error;\n return submission;\n }\n };\n const handingOff = new Set<string>();\n let dispatching: Promise<void> | undefined;\n let dispatchRequested = false;\n // Unpaused, held inputs move to pi.inbox: paused leftovers at once, explicitly queued ones one run at a time.\n const dispatch = (): Promise<void> => {\n if (dispatching) {\n dispatchRequested = true;\n return dispatching;\n }\n return (dispatching = (async () => {\n while (!disposed) {\n const record = await readRecord();\n if (agentLocked || userAdmission || external || record.paused) break;\n const idle = !(await execution());\n const item = record.held.find((q) => idle || !q.explicitQueue);\n if (!item || userAdmission || external) break;\n try {\n // Claim on the mutation line so a concurrent removal sees the handoff.\n const claimed = await changeRecord((r) => {\n if (!r.held.some((q) => q.id === item.id)) return false;\n handingOff.add(item.id);\n return true;\n });\n if (!claimed) continue;\n await submitInput({\n type: 'input',\n content: heldContent(item.message ?? item.text, item.images),\n whenBusy: 'followUp',\n requestId: heldRequestId(item.id),\n ...(item.entry ? { entry: item.entry } : {}),\n });\n await changeRecord((r) => {\n r.held = r.held.filter((q) => q.id !== item.id);\n });\n } finally {\n handingOff.delete(item.id);\n }\n await publish();\n }\n })().finally(() => {\n dispatching = undefined;\n if (dispatchRequested) {\n dispatchRequested = false;\n void dispatch().catch((error) => emit({ type: 'error', code: 'dispatch', error: String(error) }));\n }\n }));\n };\n const enqueue = async (\n message: string | AgentMessage,\n images: ImageContent[] | undefined,\n delivery: HeldInput['delivery'],\n explicitQueue: boolean,\n ) => {\n const id = randomUUID();\n await changeRecord((r) => {\n r.held.push({\n id,\n text: text(message),\n ...(images ? { images } : {}),\n ...(typeof message === 'string' ? {} : { message }),\n delivery,\n scheduling: 'automatic',\n explicitQueue,\n });\n });\n await publish();\n return { id };\n };\n const queued = async (\n message: string | AgentMessage,\n images: ImageContent[] | undefined,\n delivery: 'followUp' | 'nextRun',\n ) => {\n guardUserAdmission();\n assertUnlocked();\n if (external || (await readRecord()).paused) {\n await enqueue(message, images, delivery, false);\n return;\n }\n await submitInput({\n type: 'input',\n content: heldContent(message, images),\n whenBusy: 'followUp',\n requestId: randomUUID(),\n });\n await publish();\n };\n const dispatchCommand = async (value: string) => options.dispatchCommand?.(value) ?? false;\n const admit = async (message: string | AgentMessage, images?: ImageContent[], mode?: 'steer' | 'followUp') => {\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n if (typeof message === 'string' && (await dispatchCommand(message)))\n return { settled: Promise.resolve(), handledCommand: true };\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n promptAdmissions++;\n try {\n assertUnlocked();\n await flushNextTurn();\n const submission = await submitInput({\n type: 'input',\n content: heldContent(message, images),\n whenBusy: mode ?? 'reject',\n requestId: randomUUID(),\n });\n await publish();\n let resolveDelivery!: () => void;\n const delivered = new Promise<void>((resolve) => {\n resolveDelivery = resolve;\n });\n internalDelivery.set(submission.id, { done: delivered, resolve: resolveDelivery });\n if (deliveredInputs.has(submission.id)) resolveDelivery();\n const settled = (async () => {\n try {\n const status = await submission.wait(context);\n // A durable receipt can finish before the watcher has queued run_end.\n // Wait for this input's settlement hooks, not the current event tail.\n if (status.status === 'done' || status.entry !== undefined) await delivered;\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(\n `Agent submission failed: ${status.reason}${typeof status.detail === 'string' && status.detail ? `: ${status.detail}` : ''}`,\n );\n await dispatch();\n } finally {\n internalDelivery.delete(submission.id);\n }\n })();\n void settled.catch((error) => emit({ type: 'error', error: String(error) }));\n return { settled };\n } finally {\n promptAdmissions--;\n }\n };\n const abort = async (operationId?: string) => {\n const current = await execution();\n if (!current || current.id === 'settling' || (operationId && current.id !== operationId)) return;\n if (current.id === external) {\n externalAbort?.abort();\n return;\n }\n const stop = () =>\n writable(async () => {\n if (current.kind === 'run') await conversation.abort(context);\n else await harness.abortTask(nativeId(current.id), context);\n });\n if (attached) {\n // A lane holds nothing, so its queued inputs are withdrawn with its run.\n await stop();\n await reconcile();\n return;\n }\n // Aborting a run withdraws pi.inbox's queued inputs, so the operator's move to held, paused and visible, first.\n const captured = new Set<SubmissionId>();\n if (current.kind === 'run')\n for (const item of (await harness.snapshot(InboxDoc, conversation.id, context))?.items ?? []) {\n if (item.mode === 'write') continue;\n const requestId = (await storage.storage.submission(item.id, context))?.requestId;\n if (requestId === undefined || !internalDeliveries.has(requestId)) captured.add(item.id);\n }\n await writable(() =>\n harness.commit(async (tx) => {\n const doc = await tx.doc(HeldQueueDoc);\n const record = JSON.parse(doc.json) as HeldQueue;\n record.paused = true;\n record.abortOperationId = current.id;\n const items = (await tx.doc(InboxDoc, conversation.id)).items;\n const moved: HeldInput[] = [];\n for (let index = items.length - 1; index >= 0; index--) {\n const item = items[index]!;\n if (item.mode === 'write' || !captured.has(item.id)) continue;\n moved.unshift({\n id: randomUUID(),\n ...fromContent(item.content),\n ...(item.entry ? { entry: item.entry } : {}),\n delivery: item.mode,\n scheduling: 'automatic',\n explicitQueue: true,\n });\n tx.settleSubmission(item.id, { status: 'unanswered', reason: 'aborted' });\n items.splice(index, 1);\n }\n record.held.unshift(...moved);\n record.revision++;\n doc.json = JSON.stringify(record);\n }, context),\n );\n await publish();\n await stop();\n await reconcile();\n };\n const interrupt = async () => {\n await abort();\n await writable(() => conversation.abort(context));\n await eventsSettled;\n };\n const admitUser = async <T>(work: () => Promise<T>): Promise<T> => {\n userAdmission = true;\n userAdmissionSettled = new Promise<void>((resolve) => {\n releaseUserAdmission = resolve;\n });\n try {\n return await work();\n } finally {\n userAdmission = false;\n releaseUserAdmission?.();\n releaseUserAdmission = undefined;\n }\n };\n const submitUserPrompt = async (\n message: string | Extract<AgentMessage, { role: 'user' }>,\n images?: ImageContent[],\n submissionMode: 'reject' | 'steer' = 'reject',\n ): Promise<{ settled: Promise<void>; handledCommand?: boolean }> => {\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n if (typeof message === 'string' ? !message && !images?.length : !message.content.length)\n throw new Error('User input must contain text or an image');\n if (typeof message === 'string' && (await dispatchCommand(message)))\n return { settled: Promise.resolve(), handledCommand: true };\n assertUnlocked();\n guardUserAdmission();\n if (external) throw new Error('An operation is already running');\n return admitUser(async () => {\n if (submissionMode === 'reject') {\n const current = await execution();\n if (current) await abort(current.id);\n await conversation.waitForIdle(context);\n await eventsSettled;\n }\n await flushNextTurn();\n const submission = await submitInput({\n type: 'input',\n content: heldContent(message, images),\n whenBusy: submissionMode,\n requestId: randomUUID(),\n });\n const settled = (async () => {\n const status = await submission.wait(context);\n await eventsSettled;\n await reconcile();\n await publish();\n if (status.status === 'unanswered' && status.reason !== 'aborted')\n throw new Error(`Agent submission failed: ${status.reason}`);\n await dispatch();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'user_prompt', error: String(error) }));\n await publish();\n return { settled };\n });\n };\n const recover = async () => {\n const r = await readRecord();\n // A crash between recording the abort and pi-durable accepting it leaves the target running.\n const current = r.abortOperationId ? await nativeExecution() : null;\n if (current?.id === r.abortOperationId) {\n if (current?.kind === 'run') await conversation.abort(context);\n else if (current) await harness.abortTask(nativeId(current.id), context);\n }\n // A crash between handing a held input to pi.inbox and dropping it from held leaves it in both.\n const accepted = new Set<string>();\n for (const item of r.held)\n if (await storage.storage.submissionByRequest(conversation.id, heldRequestId(item.id), context))\n accepted.add(item.id);\n await reconcile();\n await changeRecord((record) => {\n record.held = record.held.filter((q) => !accepted.has(q.id));\n });\n };\n const admissionBusy = () =>\n userAdmission ||\n promptAdmissions > 0 ||\n settling > 0 ||\n handingOff.size > 0 ||\n admittingInternal.size > 0 ||\n compactionAdmission;\n const runExternalOperation = async <T>(\n work: () => Promise<T>,\n { signal, waitMs = 0 }: { signal?: AbortSignal; waitMs?: number } = {},\n ): Promise<T> => {\n if (!Number.isFinite(waitMs) || waitMs < 0) throw new RangeError('waitMs must be finite and non-negative');\n const deadline = Date.now() + waitMs;\n const pendingFollowUp = async () => {\n if (waitMs === 0 || agentLocked) return false;\n const record = await readRecord();\n return !record.paused && record.held.length > 0;\n };\n for (;;) {\n if (waitMs === 0) guardUserAdmission();\n signal?.throwIfAborted();\n if (disposed || disposePromise) throw new Error('Direct harness is disposed');\n const busy = (await nativeExecution()) || (await pendingFollowUp());\n signal?.throwIfAborted();\n if (disposed || disposePromise) throw new Error('Direct harness is disposed');\n // Claim synchronously after every await, so simultaneous external calls cannot both own the lane.\n if (!busy && !external && !admissionBusy()) {\n external = randomUUID();\n let admitted = false;\n try {\n const changed = (await nativeExecution()) || (await pendingFollowUp());\n signal?.throwIfAborted();\n if (disposed || disposePromise) throw new Error('Direct harness is disposed');\n if (waitMs > 0 && Date.now() >= deadline) throw new PoHeadlessToolBusyError();\n admitted = !changed && !admissionBusy();\n } finally {\n if (!admitted) {\n external = undefined;\n if (!(await nativeExecution())) await flushToolBoundary();\n void dispatch().catch((error) => emit({ type: 'error', error: String(error) }));\n }\n }\n if (admitted) break;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) throw new PoHeadlessToolBusyError();\n // ponytail: bounded polling, not FIFO. Add ordered admission only if callers need it.\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n await awaitWithContext(\n new Promise<void>((resolve) => {\n timer = setTimeout(resolve, Math.min(100, remaining));\n }),\n signal ? withAbortSignal(signal, context) : context,\n );\n } finally {\n clearTimeout(timer);\n }\n }\n externalAbort = new AbortController();\n try {\n await publish();\n return await writable(work);\n } finally {\n external = undefined;\n externalAbort = undefined;\n await flushToolBoundary();\n await publish();\n void dispatch().catch((error) => emit({ type: 'error', error: String(error) }));\n }\n };\n const appendEntry = async (entry: Parameters<Conversation['submit']>[0] & { type: 'write' }) => {\n const lane = conversation;\n const submission = await writable(() => lane.submit(entry, context));\n const receipt = await submission.wait(context);\n if (receipt.status !== 'done') throw new Error(`Entry write failed: ${receipt.reason}`);\n return String(receipt.entry);\n };\n // Show custom messages in place of the user messages they put in model context, keeping native order.\n const restoreCustomContextMessages = (\n messages: readonly Message[],\n view: Awaited<ReturnType<Conversation['context']>>,\n ): AgentMessage[] => {\n const contextContributions = new Map<string, AgentMessage[]>();\n for (const [index, raw] of view.entries.entries()) {\n const entry = projectDurableEntries([raw])[0];\n const contributions = view.contributions[index] ?? [];\n const custom =\n entry?.type === 'message' &&\n entry.message.role === 'custom' &&\n raw.model?.length === 1 &&\n contributions.length === 1 &&\n JSON.stringify(raw.model[0]) === JSON.stringify(contributions[0])\n ? entry.message\n : undefined;\n for (const native of contributions) {\n const key = JSON.stringify(native);\n const restored = contextContributions.get(key) ?? [];\n restored.push(custom ?? native);\n contextContributions.set(key, restored);\n }\n }\n return messages\n .filter((message) => message.role !== 'system')\n .map((message) => contextContributions.get(JSON.stringify(message))?.shift() ?? message);\n };\n const readEntries = async () => {\n const entries = await projectDurableConversationEntries(conversation, context);\n return { entries, leafId: entries.at(-1)?.id ?? null };\n };\n // ponytail: immutable history only. Add a storage revision before allowing in-place entry edits.\n let statsCache:\n | {\n conversation: Conversation;\n seq: number | undefined;\n contextTokens: number | null;\n messageCount: number;\n userMessages: number;\n assistantMessages: number;\n toolCalls: number;\n toolResults: number;\n }\n | undefined;\n const getSessionStats = async () => {\n const lane = conversation;\n const cached = statsCache;\n const previous = cached?.conversation === lane ? cached : undefined;\n // The inclusive boundary can project several messages; exclude its entire numeric sequence.\n const entries = (\n await projectDurableConversationEntries(lane, context, previous?.seq as EntryId | undefined)\n ).filter((entry) => previous?.seq === undefined || entry.seq > previous.seq);\n const messages = entries.flatMap((e) => (e.type === 'message' ? [e.message] : []));\n const agent = await conversation.agent(context);\n const selected = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n const latest = messages.findLast((message) => message.role === 'assistant');\n const contextTokens =\n latest?.role === 'assistant' ? contextTokensOf(latest.usage) : (previous?.contextTokens ?? null);\n const contextUsage = contextUsageOf(contextTokens, selected?.contextWindow);\n const usage = attached\n ? await harness.snapshot(UsageDoc, conversation.id, context)\n : await harness.usage(context);\n // A child's spend is its launcher's to report, so the main lane leaves its lanes out.\n const children = attached\n ? []\n : await Promise.all(\n (await subagentConversations(harness, context)).map((id) => harness.snapshot(UsageDoc, id, context)),\n );\n const tokens = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };\n let cost = 0;\n const add = (ledger: typeof usage, sign: number) => {\n const rows = [...Object.values(ledger?.models ?? {}), ...Object.values(ledger?.tools ?? {})];\n for (const u of rows) {\n tokens.input += sign * u.input;\n tokens.output += sign * u.output;\n tokens.cacheRead += sign * u.cacheRead;\n tokens.cacheWrite += sign * u.cacheWrite;\n tokens.total += sign * u.totalTokens;\n cost += sign * u.cost.total;\n }\n };\n add(usage, 1);\n for (const child of children) add(child, -1);\n // Fold the oldest-first suffix only after the ledgers: malformed content must not mask ledger errors.\n const next = {\n conversation: lane,\n seq: entries.at(-1)?.seq ?? previous?.seq,\n contextTokens,\n messageCount: (previous?.messageCount ?? 0) + messages.length,\n userMessages: (previous?.userMessages ?? 0) + messages.filter((m) => m.role === 'user').length,\n assistantMessages: (previous?.assistantMessages ?? 0) + messages.filter((m) => m.role === 'assistant').length,\n toolCalls:\n (previous?.toolCalls ?? 0) +\n messages.flatMap((m) => (m.role === 'assistant' ? m.content.filter((c) => c.type === 'toolCall') : []))\n .length,\n toolResults: (previous?.toolResults ?? 0) + messages.filter((m) => m.role === 'toolResult').length,\n };\n // A failed fold publishes nothing; a late read cannot replace a newer cache or retain an abandoned lane.\n if (conversation === lane && statsCache === cached) statsCache = next;\n return {\n sessionId,\n ...(contextUsage === undefined ? {} : { contextUsage }),\n messageCount: next.messageCount,\n totalMessages: next.messageCount,\n userMessages: next.userMessages,\n assistantMessages: next.assistantMessages,\n toolCalls: next.toolCalls,\n toolResults: next.toolResults,\n tokens,\n cost,\n totalCost: cost,\n usage: {\n input: tokens.input,\n output: tokens.output,\n cacheRead: tokens.cacheRead,\n cacheWrite: tokens.cacheWrite,\n totalTokens: tokens.total,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: cost },\n },\n };\n };\n let disposePromise: Promise<void> | undefined;\n const dispose = () =>\n (disposePromise ??= (async () => {\n for (const pending of toolBoundaryQueue.splice(0)) pending.reject(new Error('Direct harness is disposed'));\n const failures: unknown[] = [];\n const attempt = async (cleanup: () => Promise<unknown>) => {\n try {\n await cleanup();\n return true;\n } catch (error) {\n failures.push(error);\n return false;\n }\n };\n // A lane only detaches: its work belongs to the Harness and resumes with it.\n if (!attached) await attempt(interrupt);\n disposed = true;\n await attempt(() => watcher.stop());\n await attempt(() => eventsSettled);\n if (!attached) {\n const harnessClosed = await attempt(() => harness.close(context));\n await attempt(() => environment!.cleanup(context));\n if (harnessClosed) await attempt(() => storage.release(context));\n }\n resolveExited(failures.length ? 1 : 0);\n if (failures.length) throw new AggregateError(failures, 'Direct harness cleanup failed');\n })());\n const recordUsage: DirectHarnessRuntime<TContext>['recordUsage'] = async (usage, usageOptions) => {\n const entryId = await appendEntry({\n type: 'write',\n entry: { kind: 'po.usage', data: json({ usage, ...usageOptions }) },\n });\n await writable(() =>\n harness.commit(async (tx) => {\n const ledger = await tx.doc(UsageDoc, conversation.id);\n const key = 'po/auxiliary';\n const previous = ledger.models[key];\n ledger.models[key] = previous\n ? {\n ...usage,\n input: previous.input + usage.input,\n output: previous.output + usage.output,\n cacheRead: previous.cacheRead + usage.cacheRead,\n cacheWrite: previous.cacheWrite + usage.cacheWrite,\n totalTokens: previous.totalTokens + usage.totalTokens,\n cost: {\n input: previous.cost.input + usage.cost.input,\n output: previous.cost.output + usage.cost.output,\n cacheRead: previous.cost.cacheRead + usage.cost.cacheRead,\n cacheWrite: previous.cost.cacheWrite + usage.cost.cacheWrite,\n total: previous.cost.total + usage.cost.total,\n },\n }\n : usage;\n }, context),\n );\n return entryId;\n };\n const removeQueued: DirectHarnessRuntime<TContext>['removeQueued'] = async (id) => {\n // Claim on the mutation line, where a concurrent dispatch marks its handoff.\n const held = await changeRecord((r) => {\n if (handingOff.has(id)) return 'in_flight' as const;\n const index = r.held.findIndex((q) => q.id === id && q.explicitQueue);\n if (index === -1) return 'not_held' as const;\n r.held.splice(index, 1);\n return 'removed' as const;\n });\n if (held === 'in_flight') return held;\n if (held === 'not_held') {\n // A handed-off input already belongs to pi.inbox and runs at its next boundary.\n const accepted = await storage.storage.submissionByRequest(conversation.id, heldRequestId(id), context);\n if (!accepted) return 'not_found';\n return accepted.status === 'queued' ? 'in_flight' : 'already_consumed';\n }\n await publish();\n return 'removed';\n };\n const commitCheckpointMessage = async (\n registration: { active: boolean },\n lane: Conversation,\n message: AgentMessage,\n ctx: Context,\n scopeIsOpen: () => boolean = () => true,\n taskId?: TaskId,\n ): Promise<string | undefined> => {\n const usable = () =>\n registration.active &&\n scopeIsOpen() &&\n !disposed &&\n !quarantined &&\n !external &&\n conversation.id === lane.id &&\n !ctx.abortSignal?.aborted;\n if (!usable()) return;\n return writable(async () => {\n if (!usable()) return;\n return harness.commit(async (tx) => {\n if (!usable()) return;\n const live = await tx.doc(LiveDoc, lane.id);\n const inbox = await tx.doc(InboxDoc, lane.id);\n if (\n !usable() ||\n live.compactions?.length ||\n inbox.items.some((item) => item.mode !== 'write') ||\n (taskId === undefined ? live.run !== undefined : live.run?.taskId !== taskId)\n )\n return;\n const entry = await tx.appendEntry(lane.id, {\n kind: 'po.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp }),\n model: convertToLlm([message]),\n });\n return String(entry.id);\n }, ctx);\n });\n };\n const appendMessage = (message: AgentMessage, requestId?: string) =>\n appendEntry({\n type: 'write',\n ...(requestId === undefined ? {} : { requestId }),\n entry: {\n kind: 'po.entry',\n data: json({ type: 'message', message, timestamp: message.timestamp }),\n model: convertToLlm([message]),\n },\n });\n const mainOnly = () => {\n if (attached) throw new Error('Session state belongs to the main lane.');\n };\n return {\n sessionId,\n laneName,\n harnessId: options.harnessId ?? `${sessionId}:${laneName}`,\n session: harness,\n harness,\n get lane() {\n return conversation;\n },\n exited,\n get storageQuarantined() {\n return quarantined;\n },\n completeModel: models.complete?.bind(models),\n onPresentationFrame(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n onEvent(listener) {\n eventListeners.add(listener);\n return () => eventListeners.delete(listener);\n },\n stop() {\n void dispose().catch((error) => emit({ type: 'error', error: String(error) }));\n },\n readEntries,\n async readEntriesFrom(seq) {\n const lane = conversation;\n const minEntryId = nativeId<EntryId>(String(seq));\n const entries = await projectDurableConversationEntries(lane, context, minEntryId);\n if (entries.length > 0 && minEntryId > 0) {\n // The range projection starts with a null parent; restore the full branch's raw predecessor.\n const previous = await lane.entries({ maxEntryId: (minEntryId - 1) as EntryId }, 1, undefined, context);\n const parentId = previous.items[0] === undefined ? null : String(previous.items[0].id);\n for (const entry of entries) {\n if (entry.seq !== entries[0]!.seq) break;\n entry.parentId = parentId;\n }\n }\n return { entries, leafId: entries.at(-1)?.id ?? null };\n },\n scanEntries: (query, limit, cursor, scanContext) => conversation.entries(query, limit, cursor, scanContext),\n readIdentities: (readContext) => harness.snapshot(IdentityHistoryDoc, conversation.id, readContext),\n async getContextMessages() {\n const assertReadable = () => {\n if (disposed || quarantined) throw new Error('Direct harness context is unavailable', { cause: failure });\n };\n assertReadable();\n const lane = conversation;\n const view = await lane.context(context);\n assertReadable();\n const messages = restoreCustomContextMessages(view.messages, view);\n assertReadable();\n return structuredClone(messages);\n },\n readLifecycle,\n dispatchCommand,\n listCommands: () => [...(options.listCommands?.() ?? [])],\n async readState() {\n const lifecycle = await readLifecycle();\n const agent = await conversation.agent(context);\n const metadata = await harness.snapshot(SessionMetadataDoc, context);\n const stats = await getSessionStats();\n const inbox = await harness.snapshot(InboxDoc, conversation.id, context);\n const held = (await readRecord()).held.length;\n const nativePending = inbox?.items.filter((item) => item.mode !== 'write').length ?? 0;\n return json({\n sessionId,\n sessionName: metadata?.name,\n model: agent.model ? { provider: agent.model.provider, id: agent.model.modelId } : undefined,\n thinkingLevel: agent.thinkingLevel,\n isIdle: !(await execution()) && !admissionBusy(),\n isStreaming: lifecycle.operation?.kind === 'run',\n isCompacting: lifecycle.operation?.kind === 'compaction',\n operationId: lifecycle.operation?.id,\n executionStatus: lifecycle.operation?.status,\n fastMode,\n agentLocked,\n queuePaused: lifecycle.paused,\n queueRevision: lifecycle.revision,\n steeringMode: settings.steeringMode ?? 'one-at-a-time',\n followUpMode: settings.followUpMode ?? 'one-at-a-time',\n autoCompactionEnabled: settings.compaction?.enabled ?? true,\n messageCount: stats.messageCount,\n pendingMessageCount: held + nativePending + nextTurnMessages.length + deferredInternalCount,\n }) as Record<string, unknown>;\n },\n enqueueAutomatic: async (value, images) => {\n assertUnlocked();\n const result = await enqueue(value, images, 'nextRun', true);\n void dispatch().catch((error) => emit({ type: 'error', error: String(error) }));\n return result;\n },\n removeQueued,\n async promoteQueued(id, operationId) {\n guardUserAdmission();\n assertUnlocked();\n if (handingOff.has(id)) return 'in_flight';\n const result = await admitUser(() =>\n writable(async () => {\n try {\n return await harness.commit(\n (tx) => admitSelected(tx, conversation.id, { id, operationId }, settings, false),\n context,\n );\n } catch (error) {\n // A lost acknowledgement can follow a durable commit; the stable request ID tells which.\n if (await storage.storage.submissionByRequest(conversation.id, heldRequestId(id), context))\n return 'promoted' as const;\n throw error;\n }\n }),\n );\n if (typeof result === 'string' && result !== 'promoted') {\n await publish();\n return result;\n }\n // A raw commit does not enable task scheduling the way Conversation.submit() does.\n harness.resume();\n await publish();\n return 'promoted';\n },\n async resumeQueue() {\n guardUserAdmission();\n await changeRecord((r) => {\n r.paused = false;\n delete r.abortOperationId;\n });\n await publish();\n void dispatch().catch((error) => emit({ type: 'error', error: String(error) }));\n },\n recover,\n async setFastMode(enabled) {\n mainOnly();\n if (enabled) {\n const selected = (await conversation.agent(context)).model;\n const model = selected ? models.getModel(selected.provider, selected.modelId) : undefined;\n if (model?.api !== CODEX_API || model.provider !== CODEX_PROVIDER)\n throw new Error('Fast mode requires an OpenAI Codex model');\n }\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(FastModeDoc)).enabled = enabled;\n await tx.appendEntry(conversation.id, { kind: 'po.fast-mode', data: { version: 1, enabled, sessionId } });\n }, context),\n );\n fastMode = enabled;\n emit({ type: 'fast_mode_changed', enabled });\n },\n agentLocked: () => agentLocked,\n async setAgentLock(locked) {\n mainOnly();\n if (typeof locked !== 'boolean') throw new Error('Agent lock must be a boolean.');\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(AgentLockDoc)).locked = locked;\n }, context),\n );\n agentLocked = locked;\n emit({ type: 'agent_lock_changed', locked });\n if (!locked) return;\n // Only a local agent run stops; a remote MCP operation keeps running.\n const current = await execution();\n if (current?.kind === 'run') await abort(current.id);\n },\n async setModel(model) {\n const previous = (await conversation.agent(context)).model;\n if (!models.getModel(model.provider, model.id))\n throw new Error(`Model not found: ${model.provider}/${model.id}`);\n await writable(() =>\n conversation.configure({ model: { provider: model.provider, modelId: model.id } }, context),\n );\n await deliver(\n {\n type: 'config_update',\n property: 'model',\n value: { provider: model.provider, modelId: model.id },\n previous,\n },\n context,\n );\n emit({ type: 'model_select', model });\n },\n availableModels: () => models.getAvailable(),\n async availableThinkingLevels() {\n const agent = await conversation.agent(context);\n const model = agent.model ? models.getModel(agent.model.provider, agent.model.modelId) : undefined;\n if (!model) throw new Error('No model is selected');\n return getSupportedThinkingLevels(model);\n },\n setThinkingLevel: (level) => writable(() => conversation.configure({ thinkingLevel: level }, context)),\n async setSteeringMode(mode) {\n settings = { ...settings, steeringMode: mode };\n },\n async setFollowUpMode(mode) {\n settings = { ...settings, followUpMode: mode };\n },\n navigateTree: (targetId, navigationOptions) =>\n runExternalOperation(async () => {\n mainOnly();\n try {\n const expected = conversation.id;\n if (\n targetId !== null &&\n !(await storage.storage.entry(conversation.id, nativeId<EntryId>(targetId), context))\n )\n throw new Error('Navigation target is not in the selected conversation');\n const oldTip = (await readEntries()).leafId;\n await deliver({ type: 'navigation_start' }, context);\n emit({ type: 'navigation_start', targetId });\n let summary = navigationOptions?.summary;\n if (navigationOptions?.summarize === true && summary === undefined) {\n const selected = (await conversation.agent(context)).model;\n const model = selected ? models.getModel(selected.provider, selected.modelId) : undefined;\n if (!model) throw new Error('No model is selected for navigation summary');\n const instructions = navigationOptions.customInstructions;\n if (instructions !== undefined && typeof instructions !== 'string')\n throw new Error('Navigation instructions must be a string');\n const base =\n 'Summarize this conversation for continuing work on another branch. Include decisions, progress, remaining work, and essential context. Return only the summary.';\n const messages: Message[] = [\n {\n role: 'system',\n content:\n navigationOptions.replaceInstructions === true\n ? (instructions ?? base)\n : [base, instructions].filter(Boolean).join('\\n\\n'),\n timestamp: Date.now(),\n },\n {\n role: 'user',\n content: JSON.stringify((await conversation.context(context)).messages),\n timestamp: Date.now(),\n },\n ];\n await options.beforeModelRequest?.({ phase: 'request', model, prompt: messages, resources }, context);\n const summaryContext = withAbortSignal(externalAbort!.signal, context);\n let answer: AssistantMessage;\n try {\n answer = await awaitWithContext(\n models.complete(model, { messages }, { signal: externalAbort!.signal }),\n summaryContext,\n );\n } catch (error) {\n if (externalAbort?.signal.aborted) {\n await deliver(\n { type: 'navigation_end', status: 'aborted', tipId: oldTip, fromTipId: oldTip },\n context,\n );\n emit({ type: 'navigation_end', status: 'aborted' });\n return { cancelled: true, entries: (await readEntries()).entries };\n }\n throw error;\n }\n if (answer.stopReason === 'error' || answer.stopReason === 'aborted')\n throw new Error(answer.errorMessage ?? 'Navigation summary failed');\n summary = text(answer).trim();\n await recordUsage(answer.usage, { details: { purpose: 'branch_summary' } });\n }\n if (externalAbort?.signal.aborted) {\n await deliver({ type: 'navigation_end', status: 'aborted', tipId: oldTip, fromTipId: oldTip }, context);\n emit({ type: 'navigation_end', status: 'aborted' });\n return { cancelled: true, entries: (await readEntries()).entries };\n }\n if (summary !== undefined && typeof summary !== 'string')\n throw new Error('Navigation summary must be a string');\n const id = await navigateDurableConversation(\n harness,\n expected,\n targetId === null ? null : nativeId<EntryId>(targetId),\n context,\n typeof summary === 'string'\n ? {\n summary: {\n kind: 'po.entry',\n data: {\n type: 'branch_summary',\n summary,\n fromId: targetId,\n fromHook: navigationOptions?.summarize !== true,\n },\n model: [\n {\n role: 'user',\n content: `<branch_summary>\\n${summary}\\n</branch_summary>`,\n timestamp: Date.now(),\n },\n ],\n },\n }\n : undefined,\n );\n const agent = await conversation.agent(context);\n conversation = (await harness.conversation(id, context))!;\n statsCache = undefined;\n if (targetId === null)\n await conversation.configure(\n {\n model: agent.model,\n thinkingLevel: agent.thinkingLevel,\n cwd: agent.cwd,\n tools: tools.filter((t) => activeNames.has(t.name)).map(nativeTool),\n instructions: agent.instructions,\n },\n context,\n );\n await attach();\n const result = await readEntries();\n if (typeof navigationOptions?.label === 'string' && targetId !== null)\n await harness.commit(async (tx) => {\n (await tx.doc(LabelsDoc)).labels[targetId] = navigationOptions.label as string;\n }, context);\n for (const entry of result.entries)\n if (entry.type === 'branch_summary') await deliver({ type: 'entry_appended', entry }, context);\n const event: HarnessEvent = {\n type: 'navigation_end',\n status: 'completed',\n tipId: result.leafId,\n fromTipId: oldTip,\n };\n await deliver(event, context);\n emit({ ...event });\n return { cancelled: false, entries: result.entries };\n } catch (error) {\n await deliver(\n {\n type: 'navigation_end',\n status: 'failed',\n tipId: null,\n fromTipId: null,\n error: error instanceof Error ? error : new Error(String(error)),\n },\n context,\n );\n emit({ type: 'navigation_end', status: 'failed', error: String(error) });\n throw error;\n }\n }),\n async clearQueue() {\n const selected = (await readLifecycle()).queue;\n for (const item of selected) await removeQueued(item.id);\n await publish();\n return { steering: [], followUp: [] };\n },\n async setName(name) {\n mainOnly();\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(SessionMetadataDoc)).name = name;\n }, context),\n );\n emit({ type: 'session_info_changed', name });\n },\n async setGroups(groups) {\n mainOnly();\n await writable(() =>\n harness.commit(async (tx) => {\n (await tx.doc(SessionMetadataDoc)).groups = [...groups];\n }, context),\n );\n emit({ type: SESSION_GROUPS_CHANGED_FRAME, groups: [...groups] });\n },\n getSessionStats,\n async replaceTools(replacement) {\n tools = replacement;\n activeNames = new Set(tools.map((t) => t.name));\n install();\n await writable(() => conversation.configure({ tools: tools.map(nativeTool) }, context));\n },\n async replaceResources(replacement) {\n resources = replacement;\n install();\n },\n async readResources() {\n return resources;\n },\n runExternalOperation,\n runAtToolBoundary,\n appendCustomEntry: async (customType, data) => {\n const lane = conversation;\n return String(\n (\n await writable(() =>\n lane.commit(async (tx) => {\n const entry = await tx.appendEntry(lane.id, {\n kind: customType,\n ...(data === undefined ? {} : { data: json(data) }),\n ...(options.entryProjectors?.[customType]\n ? {\n model: convertToLlm(\n options.entryProjectors[customType]({\n type: 'custom',\n id: '',\n parentId: null,\n timestamp: Date.now(),\n seq: 0,\n customType,\n ...(data === undefined ? {} : { data: json(data) }),\n }),\n ),\n }\n : {}),\n });\n if (customType === PO_PROFILE_IDENTITY_ENTRY_TYPE) {\n // Same commit as the entry, so a page never sees one without the other. A repeated identity is\n // skipped: the page shows the same avatar, and session restarts do not grow the document.\n const history = await tx.doc(IdentityHistoryDoc, lane.id);\n const identity = json(data ?? {});\n if (JSON.stringify(history.items.at(-1)?.data) !== JSON.stringify(identity))\n history.items.push({ seq: Number(entry.id), data: identity });\n }\n return entry;\n }, context),\n )\n ).id,\n );\n },\n appendMessage: (message) => appendMessage(message),\n registerCheckpointBoundary(callback) {\n const registration = { active: true, callback };\n checkpointBoundaries.add(registration);\n return {\n appendMessage: (message) => commitCheckpointMessage(registration, conversation, message, context),\n dispose() {\n registration.active = false;\n checkpointBoundaries.delete(registration);\n },\n };\n },\n setLabel: (targetId, label) =>\n writable(() => {\n mainOnly();\n return harness.commit(async (tx) => {\n const labels = (await tx.doc(LabelsDoc)).labels;\n if (label === undefined) delete labels[targetId];\n else labels[targetId] = label;\n }, context);\n }),\n recordUsage,\n submitPrompt: admit,\n submitUserPrompt,\n prompt: async (value, images) => {\n await (\n await admit(value, images)\n ).settled;\n },\n admitMessage: (message) => admit(message),\n submitInternalMessage: async function submitInternalMessage(\n message,\n delivery = 'steer',\n requestId = randomUUID(),\n ) {\n if (typeof message !== 'string' && message.role !== 'user' && message.role !== 'custom')\n throw new Error('Internal input must be user or custom message content');\n if (delivery === 'nextTurn') {\n nextTurnMessages.push(\n typeof message === 'string' ? { role: 'user', content: message, timestamp: Date.now() } : message,\n );\n return { settled: Promise.resolve() };\n }\n const preserved: AgentMessage =\n typeof message === 'string' ? { role: 'user', content: message, timestamp: Date.now() } : message;\n // A locked agent records environmental input for its next turn without starting one.\n if (agentLocked) {\n try {\n await appendMessage(preserved, requestId);\n } catch (error) {\n // A retry of a request first admitted while unlocked is already in the transcript or its inbox.\n if (!(await storage.storage.submissionByRequest(conversation.id, requestId, context))) throw error;\n }\n return { settled: Promise.resolve() };\n }\n const deliveryRecord: InternalDeliveryRecord = { message: preserved, conversationId: conversation.id };\n if (userAdmission) {\n deferredInternalCount++;\n admittingInternal.add(requestId);\n internalDeliveries.set(requestId, deliveryRecord);\n const released = userAdmissionSettled;\n // Returning must not wait for the admission, whose settlement can wait for the caller's own event hook.\n const admission: ReturnType<DirectHarnessRuntime['submitInternalMessage']> = released.then(() => {\n deferredInternalCount--;\n admittingInternal.delete(requestId);\n return submitInternalMessage(preserved, delivery, requestId);\n });\n const settled = admission.then((submission) => submission.settled);\n void settled.catch((error) => emit({ type: 'error', code: 'internal_message', error: String(error) }));\n // A later interruption can defer it again.\n const admitted = admission.then((submission) => submission.admitted);\n // Its failure is reported through settled; a caller that needs durability awaits admitted itself.\n void admitted.catch(() => undefined);\n return { settled, admitted };\n }\n if (external) throw new Error('An operation is already running');\n const content = typeof message === 'string' ? message : message.content;\n admittingInternal.add(requestId);\n let submission: Awaited<ReturnType<Conversation['submit']>>;\n try {\n internalDeliveries.set(requestId, deliveryRecord);\n submission = await submitInput({\n type: 'input',\n content,\n whenBusy: delivery,\n requestId,\n // A custom message is placed as itself; the model still sees its content as user input.\n ...(preserved.role === 'custom'\n ? {\n entry: {\n kind: 'po.entry',\n data: json({ type: 'message', message: preserved, timestamp: preserved.timestamp }),\n },\n }\n : {}),\n });\n } finally {\n admittingInternal.delete(requestId);\n }\n let pendingDelivery = internalDelivery.get(submission.id);\n if (!pendingDelivery) {\n let resolveDelivery!: () => void;\n const done = new Promise<void>((resolve) => {\n resolveDelivery = resolve;\n });\n pendingDelivery = { done, resolve: resolveDelivery };\n internalDelivery.set(submission.id, pendingDelivery);\n }\n if (deliveredInputs.has(submission.id)) pendingDelivery.resolve();\n const delivered = pendingDelivery.done;\n const settled = (async () => {\n try {\n const status = await submission.wait(context);\n if (status.status === 'unanswered' && status.entry === undefined) {\n await conversation.waitForIdle(context);\n await reconcileInternal(requestId, deliveryRecord);\n }\n if (status.status === 'done' || status.entry !== undefined) {\n const live = await harness.snapshot(\n LiveDoc,\n deliveryRecord.conversationId as typeof conversation.id,\n context,\n );\n // Reopened or aged-out receipts have no future run-end notification.\n if (!live?.run?.inputs.some((id) => String(id) === String(submission.id))) pendingDelivery.resolve();\n await delivered;\n }\n await eventsSettled;\n await reconcileInternal(requestId, deliveryRecord);\n } finally {\n internalDelivery.delete(submission.id);\n }\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'internal_message', error: String(error) }));\n return { settled };\n },\n steer: async (message, images) => {\n if (typeof message !== 'string' && message.role !== 'user')\n throw new Error('Only user messages can steer an agent run');\n await submitUserPrompt(message, images, 'steer');\n },\n followUp: (message, images) => queued(message, images, 'followUp'),\n nextRun: (message, images) => queued(message, images, 'nextRun'),\n abort,\n interrupt,\n async compact(instructions) {\n // The Harness reads the main lane's settings, so only the main lane can swap in a keep-nothing compaction.\n if (attached) throw new Error('Manual compaction runs on the main lane only.');\n guardUserAdmission();\n if (external || compactionAdmission) throw new Error('An operation is already running');\n compactionAdmission = true;\n const previous = settings;\n try {\n if (await execution()) throw new Error('An operation is already running');\n // ponytail: pi-durable has no per-call keepRecentTokens and beforeCompact runs after the cut is chosen, so\n // manual compaction swaps the Harness-wide settings while its task runs. A threshold compaction of another\n // conversation in this Harness during that window would also keep nothing, so beforeCompact declines it.\n // Upgrade: a per-call option upstream.\n settings = { ...settings, compaction: { ...settings.compaction, keepRecentTokens: 0 } };\n manualCompaction.conversationId = String(conversation.id);\n const task = await writable(() => conversation.compact(instructions, context));\n const receipt = await harness.waitForTask(task, context);\n await eventsSettled;\n const outcome = receipt.state.outcome;\n if (outcome.status === 'failed' || outcome.status === 'faulted' || outcome.status === 'orphaned') {\n const reason = outcome.status === 'orphaned' ? outcome.reason : outcome.error.message;\n throw new Error(`Compaction failed: ${reason.trim() || outcome.status}`, { cause: outcome });\n }\n } finally {\n settings = previous;\n delete manualCompaction.conversationId;\n compactionAdmission = false;\n if (!(await nativeExecution())) await flushToolBoundary();\n }\n },\n async admitResume() {\n await recover();\n const resumed = !!(await execution());\n harness.resume();\n const settled = (async () => {\n await conversation.waitForIdle(context);\n await eventsSettled;\n await dispatch();\n })();\n void settled.catch((error) => emit({ type: 'error', code: 'resume', error: String(error) }));\n return { resumed, settled };\n },\n async resume() {\n await recover();\n const resumed = !!(await execution());\n harness.resume();\n if (resumed) {\n await conversation.waitForIdle(context);\n await eventsSettled;\n }\n void dispatch().catch((error) => emit({ type: 'error', error: String(error) }));\n return resumed;\n },\n openLane(laneConversation, laneOptions) {\n if (attached) return Promise.reject(new Error('Lanes open on the main lane.'));\n return createLaneRuntime<TContext>(\n { ...laneOptions, platform, models: sourceModels },\n { harness, storage, registry, conversation: laneConversation, laneProviderSessions, manualCompaction },\n );\n },\n closeLane(conversationId) {\n if (attached) throw new Error('Lanes close on the main lane.');\n registry.uninstall({ name: laneExtensionName(conversationId) });\n },\n dispose,\n };\n } catch (error) {\n // A lane borrows the main lane's storage, so its failed start leaves the storage to its owner.\n if (attached) throw error;\n const failures: unknown[] = [error];\n try {\n if (startupHarness) await startupHarness.close(context);\n else await storage.storage.close(context);\n } catch (closeError) {\n failures.push(closeError);\n }\n if (failures.length === 1) {\n try {\n await storage.release(context);\n } catch (closeError) {\n failures.push(closeError);\n }\n }\n if (failures.length > 1) throw new AggregateError(failures, 'Direct harness startup and cleanup failed');\n throw error;\n }\n}\nexport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../types/server/directHarnessRuntime';\n"],"mappings":"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"}
|