@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":"headlessChildSessionService.mjs","names":[],"sources":["../../../../../src/systems/child/adapters/headlessChildSessionService.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { Models, MutableModels, Provider } from '@earendil-works/pi-ai';\nimport {\n createBashTool,\n createEditTool,\n createFindTool,\n createGrepTool,\n createLsTool,\n createReadTool,\n createWriteTool,\n} from '@earendil-works/pi-coding-agent';\nimport { createSession, AgentDoc, type Cursor, type EntryRecord, type EntryId } from '@earendil-works/pi-durable';\n\nimport {\n createDoomChildSessionService,\n type DoomChildSessionIntercom,\n type DoomChildSessionHooks,\n type DoomChildSessionHookBinding,\n type DoomChildSessionRequest,\n type DoomChildSessionRuntime,\n type DoomChildSessionService,\n type DoomChildSessionServiceProvider,\n type DoomChildSessionTool,\n type DoomChildSessionMcpTool,\n} from '../../../exports/childSession';\nimport {\n createDirectHarnessRuntime,\n promptForAssistantText,\n type DirectHarnessRuntime,\n type DirectHarnessRuntimeOptions,\n} from '../../../server/directHarnessRuntime';\nimport { readNativeChildTranscript } from '../../../server/nativeChildTranscriptReader';\nimport { DurableNavigationDoc } from '../../../services/durableNavigation';\nimport type { HistoryOwnership } from '../../../services/historyImport';\nimport { createHistoryOwnership } from '../../../services/historyOwnership';\nimport {\n openReadOnlyDurableStorage,\n openSqliteSessionStorage,\n SessionMetadataDoc,\n SessionIdentityDoc,\n} from '../../../services/sqliteSessionStorage';\nimport type { DirectHarnessModel } from '../../../types/server/directHarnessRuntime';\nimport { registerNativeChild } from './nativeChildRuntimes';\n\nexport interface HeadlessChildSessionServiceOptions {\n readonly parentSessionId: string;\n readonly cwd: string;\n readonly sessionsRoot?: string;\n readonly models?: Models | MutableModels;\n /**\n * Providers to merge into the model registry for every child spawn. A thunk\n * is resolved per spawn so providers registered after this service was built,\n * such as Pi extension providers, are still visible to the child.\n */\n readonly providers?: readonly Provider[] | (() => readonly Provider[]);\n readonly defaultModel?: () => DirectHarnessModel | undefined;\n /** Snapshot the parent preference once per creation, never live-sync child toggles. */\n readonly parentFastMode?: () => boolean | Promise<boolean>;\n /** Resolve the current session's MCP dispatcher at spawn and invocation time. */\n readonly hooks?: () => DoomChildSessionHooks | undefined;\n readonly mcpTool?: () => DoomChildSessionMcpTool | undefined;\n readonly subscribeMcpTool?: (listener: () => void) => () => void;\n readonly historyOwnership?: HistoryOwnership;\n readonly now?: () => number;\n readonly runtimeFactory?: (options: DirectHarnessRuntimeOptions) => Promise<DirectHarnessRuntime>;\n}\n\nexport interface HeadlessChildSessionServiceProvider extends DoomChildSessionServiceProvider {\n close(): Promise<void>;\n}\n\nconst THINKING_SUFFIX_PATTERN = /:(off|minimal|low|medium|high|xhigh|max)$/;\n\nexport interface ParsedChildModel {\n readonly model: DirectHarnessModel;\n readonly thinking?: string;\n}\n\n/**\n * Child model specs may carry a Pi thinking suffix, for example\n * `anthropic-vertex/claude-sonnet-5:medium`. The suffix is a request option and\n * never part of the model id, so it has to be split off before model lookup.\n */\nexport function parseChildModelReference(value: string | undefined): ParsedChildModel | undefined {\n if (value === undefined) return undefined;\n const suffix = THINKING_SUFFIX_PATTERN.exec(value);\n const reference = suffix === null ? value : value.slice(0, value.length - suffix[0].length);\n const separator = reference.indexOf('/');\n if (separator <= 0 || separator === reference.length - 1)\n throw new Error(`Child model must use the provider/model form: ${value}`);\n return {\n model: { provider: reference.slice(0, separator), id: reference.slice(separator + 1) },\n ...(suffix === null ? {} : { thinking: suffix[1] as string }),\n };\n}\n\n/** Resolve the provider set for one spawn, tolerating both a fixed array and a thunk. */\nexport function resolveChildProviders(\n providers: readonly Provider[] | (() => readonly Provider[]) | undefined,\n): readonly Provider[] | undefined {\n const resolved = typeof providers === 'function' ? providers() : providers;\n return resolved === undefined || resolved.length === 0 ? undefined : resolved;\n}\n\nfunction sessionFile(runtime: DirectHarnessRuntime): string | undefined {\n return runtime.sessionFile;\n}\n\nfunction childRuntime(\n runtime: DirectHarnessRuntime,\n intercom?: DoomChildSessionIntercom,\n release?: () => void | Promise<void>,\n): DoomChildSessionRuntime {\n const file = sessionFile(runtime);\n return {\n sessionId: runtime.sessionId,\n ...(file === undefined ? {} : { sessionFile: file }),\n ...(file === undefined\n ? {}\n : { readTranscriptPage: (request, signal) => readNativeChildTranscript(file, request, signal) }),\n prompt: (task) => promptForAssistantText(runtime, task, intercom?.hold?.bind(intercom)),\n async steer(message) {\n await runtime.submitInternalMessage(message, 'steer');\n },\n async followUp(message) {\n await runtime.submitInternalMessage(message, 'followUp');\n },\n onUsage(listener) {\n return runtime.onEvent((event) => {\n if (event.type !== 'usage') return;\n listener({ rowId: event.row.id, cost: event.row.usage.cost.total });\n });\n },\n abort: () => runtime.abort(),\n dispose: async () => {\n try {\n await release?.();\n } finally {\n try {\n await runtime.dispose();\n } finally {\n intercom?.dispose?.();\n }\n }\n },\n };\n}\n\n/** Own the hook lifetime independently of the caller's startup signal. */\nexport function bindChildHooks(\n request: DoomChildSessionRequest,\n hooks: DoomChildSessionHooks | undefined,\n readRuntime: () => DirectHarnessRuntime | undefined,\n signal?: AbortSignal,\n): { binding?: DoomChildSessionHookBinding; dispose(): Promise<void> } {\n const lifetime = new AbortController();\n const abort = () => lifetime.abort(signal?.reason);\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted) abort();\n const admittedRuntime = () => {\n lifetime.signal.throwIfAborted();\n const runtime = readRuntime();\n if (!runtime) throw new Error('Child hook runtime is not available.');\n return runtime;\n };\n // Copy only data. The borrowed intercom retains its owner and is never frozen.\n const { intercom, ...data } = request;\n const freeze = (value: unknown): void => {\n if (typeof value !== 'object' || value === null) return;\n for (const child of Object.values(value)) freeze(child);\n Object.freeze(value);\n };\n const snapshot = structuredClone(data);\n freeze(snapshot);\n let binding: DoomChildSessionHookBinding | undefined;\n try {\n binding = hooks?.bind({\n request: Object.freeze({ ...snapshot, ...(intercom ? { intercom } : {}) }),\n sessionId: () => readRuntime()?.sessionId,\n signal: lifetime.signal,\n async sendMessage(text, delivery) {\n await admittedRuntime().submitInternalMessage(text, delivery);\n },\n async appendCustomEntry(type, data) {\n await admittedRuntime().appendCustomEntry(type, data);\n },\n });\n } catch (error) {\n lifetime.abort();\n signal?.removeEventListener('abort', abort);\n throw error;\n }\n let disposal: Promise<void> | undefined;\n return {\n ...(binding ? { binding } : {}),\n dispose: () =>\n (disposal ??= (async () => {\n lifetime.abort();\n signal?.removeEventListener('abort', abort);\n await binding?.dispose();\n })()),\n };\n}\n\ntype DirectHarnessTool = Parameters<DirectHarnessRuntime['replaceTools']>[0][number];\n\nasync function installIntercom(\n runtime: DirectHarnessRuntime,\n intercom: DoomChildSessionIntercom | undefined,\n tools: DirectHarnessTool[],\n): Promise<void> {\n if (!intercom) return;\n const tool = intercom.bindRuntime(childRuntime(runtime));\n const adapted: DirectHarnessTool = {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters as never,\n execute: async (operationId, params, onUpdate, _toolContext, _invocation, context) => {\n const result = await tool.execute(\n operationId,\n params,\n context.abortSignal ?? new AbortController().signal,\n (partial) => onUpdate({ content: partial.content as never, details: partial.details }),\n );\n return { content: result.content as never, details: result.details, isError: result.isError };\n },\n };\n tools.push(adapted);\n await runtime.replaceTools(tools);\n}\n\nfunction hasConfiguredValues(value: readonly string[] | undefined): boolean {\n return value !== undefined && value.length > 0;\n}\n\nconst NATIVE_TOOL_FACTORIES = {\n read: createReadTool,\n bash: createBashTool,\n edit: createEditTool,\n write: createWriteTool,\n grep: createGrepTool,\n find: createFindTool,\n ls: createLsTool,\n} as const;\n\ntype NativeCodingTool = ReturnType<(typeof NATIVE_TOOL_FACTORIES)[keyof typeof NATIVE_TOOL_FACTORIES]>;\n\nfunction adaptNativeTool(tool: NativeCodingTool | DoomChildSessionTool): DirectHarnessTool {\n const prompt = tool as (NativeCodingTool | DoomChildSessionTool) & {\n promptSnippet?: string;\n promptGuidelines?: string[];\n executionMode?: string;\n };\n return {\n name: prompt.name,\n description: prompt.description,\n ...(prompt.executionMode === 'parallel' || prompt.executionMode === 'sequential'\n ? { executionMode: prompt.executionMode }\n : {}),\n label: 'label' in tool ? tool.label : tool.name,\n parameters: tool.parameters as never,\n ...('prepareArguments' in tool && typeof tool.prepareArguments === 'function'\n ? { prepareArguments: (args: unknown) => tool.prepareArguments!(args) as never }\n : {}),\n async execute(toolCallId, parameters, onUpdate, _toolContext, _invocation, context) {\n const execute = tool.execute as (\n id: string,\n params: unknown,\n signal: AbortSignal,\n update: (result: { content: unknown; details?: unknown }) => void,\n ) => Promise<{ content: unknown; details?: unknown; isError?: boolean }>;\n const result = await execute(\n toolCallId,\n parameters,\n context.abortSignal ?? new AbortController().signal,\n (partial) => onUpdate({ content: partial.content as never, details: partial.details }),\n );\n if (result.isError) {\n const content = result.content as DoomChildSessionToolResultContent;\n throw new Error(\n content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('\\n') || 'MCP tool failed.',\n );\n }\n return { content: result.content as never, details: result.details };\n },\n };\n}\n\ntype DoomChildSessionToolResultContent = Awaited<ReturnType<DoomChildSessionTool['execute']>>['content'];\n\n/** Validate and project native fields before a source fork can publish a child journal. */\nexport function composeDirectHarnessRequestOptions(\n request: DoomChildSessionRequest,\n resolveMcpTool?: () => DoomChildSessionMcpTool | undefined,\n validateRequired = true,\n): Pick<DirectHarnessRuntimeOptions, 'systemPrompt' | 'tools' | 'activeToolNames'> {\n const unsupported = [\n ...(hasConfiguredValues(request.extensions) ? ['extensions'] : []),\n ...(hasConfiguredValues(request.subagentOnlyExtensions) ? ['subagentOnlyExtensions'] : []),\n ...(hasConfiguredValues(request.capabilityCeiling?.allowedExternalProfiles) ? ['allowedExternalProfiles'] : []),\n ];\n if (unsupported.length > 0) {\n throw new Error(\n `Native child session configuration is unsupported by the direct harness: ${unsupported.join(', ')}`,\n );\n }\n\n const requested = [...new Set(request.tools ?? Object.keys(NATIVE_TOOL_FACTORIES))];\n const excluded = new Set(request.excludeTools ?? []);\n const ceiling = request.capabilityCeiling;\n const allowed = ceiling?.allowedTools;\n const isMcp = (name: string) => name === 'mcp' || name === 'mcp_use';\n const mcpDenied =\n (ceiling !== undefined && ceiling.allowMcpTools !== true) ||\n (allowed !== undefined && allowed.every((name) => Object.hasOwn(NATIVE_TOOL_FACTORIES, name))) ||\n [...excluded].some(isMcp);\n const wantsMcp =\n !mcpDenied &&\n (requested.some(isMcp) ||\n hasConfiguredValues(request.mcpDirectTools) ||\n requested.some((name) => !Object.hasOwn(NATIVE_TOOL_FACTORIES, name)));\n const provider = wantsMcp ? resolveMcpTool?.() : undefined;\n const catalog = provider?.catalog;\n const snapshot = catalog?.snapshot() ?? [];\n const expand = (values: readonly string[]) =>\n new Set(values.flatMap((name) => (isMcp(name) ? snapshot.map((tool) => tool.name) : [name])));\n const grants = allowed === undefined ? undefined : expand(allowed);\n const denied = expand([...excluded]);\n const selected = expand(requested);\n if (request.mcpDirectTools?.length) {\n const selectors = new Set(catalog?.resolveSelectors(request.mcpDirectTools) ?? []);\n for (const tool of snapshot) {\n if (!selectors.has(tool.name)) selected.delete(tool.name);\n else if (request.tools === undefined) selected.add(tool.name);\n }\n }\n const nativeNames = requested.filter(\n (name) =>\n Object.hasOwn(NATIVE_TOOL_FACTORIES, name) && !denied.has(name) && (grants === undefined || grants.has(name)),\n );\n const direct = mcpDenied\n ? []\n : snapshot.filter(\n (tool) => selected.has(tool.name) && !denied.has(tool.name) && (grants === undefined || grants.has(tool.name)),\n );\n const unknown = requested.filter(\n (name) =>\n !Object.hasOwn(NATIVE_TOOL_FACTORIES, name) &&\n !isMcp(name) &&\n !snapshot.some((tool) => tool.name === name) &&\n !denied.has(name) &&\n (grants === undefined || grants.has(name)),\n );\n if (unknown.length > 0 && validateRequired)\n throw new Error(`Native child session requested unknown direct harness tools: ${unknown.join(', ')}`);\n const names = [...nativeNames, ...direct.map((tool) => tool.name)];\n const required = ceiling?.requiredTools ?? [];\n const missing = required.filter((name) => (isMcp(name) ? direct.length === 0 : !names.includes(name)));\n if (validateRequired && missing.length > 0)\n throw new Error(`Native child session capability ceiling requires unavailable tools: ${missing.join(', ')}`);\n if (validateRequired && wantsMcp && !catalog)\n throw new Error('Native child session MCP tools are unavailable. Enable MCP in the parent session.');\n const tools = [\n ...nativeNames.map((name) =>\n adaptNativeTool(\n NATIVE_TOOL_FACTORIES[name as keyof typeof NATIVE_TOOL_FACTORIES](request.cwd) as NativeCodingTool,\n ),\n ),\n ...direct.map((tool) =>\n adaptNativeTool({\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n signal?.throwIfAborted();\n if (resolveMcpTool?.() !== provider || !catalog?.snapshot().includes(tool))\n throw new Error('The parent session MCP tool is no longer available.');\n return tool.execute(toolCallId, parameters, signal, onUpdate);\n },\n } satisfies DoomChildSessionTool),\n ),\n ];\n return {\n tools,\n activeToolNames: names,\n ...(request.systemPrompt === undefined ? {} : { systemPrompt: request.systemPrompt }),\n };\n}\n\n/** Refresh borrowed declarations without replacing native tools or rebinding intercom. */\nexport function bindChildMcpCatalog(\n runtime: DirectHarnessRuntime,\n request: DoomChildSessionRequest,\n options: Pick<HeadlessChildSessionServiceOptions, 'mcpTool' | 'subscribeMcpTool'>,\n initialTools: readonly DirectHarnessTool[],\n): () => void {\n if (request.capabilityCeiling !== undefined && request.capabilityCeiling.allowMcpTools !== true)\n return () => undefined;\n if (request.capabilityCeiling?.allowedTools?.every((name) => Object.hasOwn(NATIVE_TOOL_FACTORIES, name)))\n return () => undefined;\n if (request.excludeTools?.some((name) => name === 'mcp' || name === 'mcp_use')) return () => undefined;\n if (\n !request.tools?.some(\n (name) => name === 'mcp' || name === 'mcp_use' || !Object.hasOwn(NATIVE_TOOL_FACTORIES, name),\n ) &&\n !request.mcpDirectTools?.length\n )\n return () => undefined;\n const retained = initialTools.filter(\n (tool, index) =>\n Object.hasOwn(NATIVE_TOOL_FACTORIES, tool.name) ||\n (request.intercom !== undefined && index === initialTools.length - 1),\n );\n let disposed = false;\n let provider: DoomChildSessionMcpTool | undefined;\n let unsubscribeCatalog: (() => void) | undefined;\n let previous: readonly DoomChildSessionTool[] = [];\n let pending = Promise.resolve();\n let failure: unknown;\n const refresh = () => {\n if (disposed) return;\n const current = options.mcpTool?.();\n const changed = current !== provider;\n if (changed) {\n unsubscribeCatalog?.();\n provider = current;\n unsubscribeCatalog = provider?.catalog?.subscribe(refresh);\n }\n const snapshot = provider?.catalog?.snapshot() ?? [];\n if (!changed && snapshot.length === previous.length && snapshot.every((tool, index) => tool === previous[index]))\n return;\n previous = snapshot;\n const composition = composeDirectHarnessRequestOptions(request, options.mcpTool, false);\n const direct = (composition.tools ?? []).filter((tool) => !Object.hasOwn(NATIVE_TOOL_FACTORIES, tool.name));\n pending = pending\n .then(async () => {\n if (!disposed) await runtime.replaceTools([...retained, ...direct]);\n })\n .catch((error: unknown) => {\n failure = error;\n });\n };\n const unsubscribeProvider = options.subscribeMcpTool?.(refresh);\n refresh();\n return () => {\n disposed = true;\n unsubscribeProvider?.();\n unsubscribeCatalog?.();\n if (failure !== undefined) throw new Error('Child MCP catalog refresh failed.', { cause: failure });\n };\n}\n\nasync function forkChildJournal(\n sourcePath: string,\n branch: string,\n entryId: string | undefined,\n ownership: HistoryOwnership,\n parentSessionId?: string,\n): Promise<string> {\n const source = await openReadOnlyDurableStorage(sourcePath);\n const read = createSession(source);\n let destination: Awaited<ReturnType<typeof openSqliteSessionStorage>> | undefined;\n const failures: unknown[] = [];\n try {\n const navigation = await read.snapshot(DurableNavigationDoc, BACKGROUND_CONTEXT);\n const selected = navigation?.activeConversationId;\n if (selected === null || selected === undefined) throw new Error('Child source has no active conversation');\n const metadata = await read.snapshot(SessionMetadataDoc, BACKGROUND_CONTEXT);\n if (branch !== (metadata?.laneName ?? 'main')) throw new Error('Child source lane does not exist');\n const cutoff = entryId === undefined ? undefined : (Number(entryId) as EntryId);\n if (\n entryId !== undefined &&\n (!Number.isSafeInteger(cutoff) || !(await source.entry(selected, cutoff!, BACKGROUND_CONTEXT)))\n )\n throw new Error('Child fork entry is not visible in its source conversation');\n const records: EntryRecord[] = [];\n let cursor: Cursor | undefined;\n do {\n const page = await source.scanEntries(\n { conversationId: selected, ...(cutoff === undefined ? {} : { maxEntryId: cutoff }) },\n 256,\n cursor,\n BACKGROUND_CONTEXT,\n );\n records.push(...page.items);\n cursor = page.next;\n } while (cursor);\n records.reverse();\n const agent =\n cutoff === undefined\n ? await read.snapshot(AgentDoc, selected, BACKGROUND_CONTEXT)\n : await read.snapshotAsOf(AgentDoc, selected, cutoff, BACKGROUND_CONTEXT);\n destination = await openSqliteSessionStorage(\n {\n sessionsRoot: path.dirname(path.dirname(path.resolve(sourcePath))),\n sessionId: randomUUID(),\n parentSessionId: parentSessionId ?? (await read.snapshot(SessionIdentityDoc, BACKGROUND_CONTEXT))?.id,\n historyOwnership: ownership,\n },\n BACKGROUND_CONTEXT,\n );\n await destination.session.commit(async (tx) => {\n const conversation = await tx.createConversation({ ownership: { kind: 'ownerless' } });\n if (agent) Object.assign(await tx.doc(AgentDoc, conversation.id), agent);\n (await tx.doc(SessionMetadataDoc)).laneName = branch;\n const ids = new Map<number, EntryId>();\n for (const entry of records) {\n const { id: _id, conversationId: _conversation, byTaskId: _task, head, edits, ...draft } = entry;\n const appended = await tx.appendEntry(conversation.id, {\n ...draft,\n ...(head === undefined ? {} : { head: head === entry.id ? 'self' : ids.get(head) }),\n ...(edits === undefined\n ? {}\n : {\n edits: edits.map((edit) => {\n const target = ids.get(edit.target);\n if (target === undefined) throw new Error('Invalid fork context edit');\n return { ...edit, target };\n }),\n }),\n });\n ids.set(entry.id, appended.id);\n }\n (await tx.doc(DurableNavigationDoc)).activeConversationId = conversation.id;\n }, BACKGROUND_CONTEXT);\n } catch (error) {\n failures.push(error);\n }\n try {\n await read.close(BACKGROUND_CONTEXT);\n } catch (error) {\n failures.push(error);\n }\n if (destination) {\n try {\n await destination.session.close(BACKGROUND_CONTEXT);\n await destination.historyLease.release();\n } catch (error) {\n failures.push(error);\n }\n }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, 'Child fork cleanup failed');\n if (!destination) throw new Error('Child fork failed');\n return destination.sessionFile;\n}\n\nexport function createHeadlessChildSessionService(\n options: HeadlessChildSessionServiceOptions,\n): DoomChildSessionService {\n const runtimeFactory = options.runtimeFactory ?? createDirectHarnessRuntime;\n const ownership = options.historyOwnership ?? createHistoryOwnership({ sourceFormat: 'sqlite' });\n\n return createDoomChildSessionService(\n async (request: DoomChildSessionRequest, signal): Promise<DoomChildSessionRuntime> => {\n signal?.throwIfAborted();\n if (request.source.kind === 'terminal-pi-fork')\n throw new Error('Headless child sessions do not support terminal Pi sources.');\n const directRequestOptions = composeDirectHarnessRequestOptions(request, options.mcpTool);\n const fastMode = await options.parentFastMode?.();\n if (fastMode !== undefined && typeof fastMode !== 'boolean')\n throw new Error('Parent Fast mode must be a boolean.');\n\n let sessionPath: string | undefined;\n let sessionId: string | undefined;\n if (request.source.kind === 'v4-restore') {\n sessionPath = path.resolve(request.source.sessionFile);\n if (path.extname(sessionPath) !== '.sqlite')\n throw new Error('Server child restore requires SQLite; import JSONL offline first.');\n } else if (request.source.kind === 'v4-fork') {\n sessionPath = await forkChildJournal(\n request.source.sessionFile,\n request.source.branch,\n request.source.entryId,\n ownership,\n request.parentSessionId || options.parentSessionId,\n );\n } else {\n sessionId = randomUUID();\n }\n\n const requestedModel = parseChildModelReference(request.model);\n const model = requestedModel?.model ?? options.defaultModel?.();\n const thinking = request.thinking ?? requestedModel?.thinking;\n const providers = resolveChildProviders(options.providers);\n const runtimeOptions: DirectHarnessRuntimeOptions = {\n storage: 'sqlite',\n ...(request.source.kind === 'v4-fork' ? { lane: request.source.branch } : {}),\n cwd: request.cwd || options.cwd,\n ...(sessionId === undefined ? {} : { sessionId }),\n parentSessionId: request.parentSessionId || options.parentSessionId,\n ...(sessionPath === undefined ? {} : { sessionPath }),\n ...(options.sessionsRoot === undefined ? {} : { sessionsRoot: options.sessionsRoot }),\n ...(options.models === undefined ? {} : { models: options.models }),\n ...(providers === undefined ? {} : { providers }),\n ...(model === undefined ? {} : { model }),\n ...(thinking === undefined ? {} : { thinkingLevel: thinking as never }),\n ...directRequestOptions,\n ...(fastMode === undefined ? {} : { initialFastMode: fastMode }),\n historyOwnership: ownership,\n };\n\n let runtime: DirectHarnessRuntime | undefined;\n let hooks: ReturnType<typeof bindChildHooks> | undefined;\n try {\n hooks = bindChildHooks(request, options.hooks?.(), () => runtime, signal);\n if (hooks.binding) {\n runtimeOptions.beforeTool = hooks.binding.beforeTool;\n runtimeOptions.afterTool = hooks.binding.afterTool;\n }\n runtime = await runtimeFactory(runtimeOptions);\n if (requestedModel && model) await runtime.setModel(model);\n if (thinking !== undefined) await runtime.setThinkingLevel(thinking as never);\n await installIntercom(runtime, request.intercom, (runtimeOptions.tools ?? []) as DirectHarnessTool[]);\n const releaseMcp = bindChildMcpCatalog(runtime, request, options, runtimeOptions.tools ?? []);\n const file = sessionFile(runtime);\n const releaseNative = file ? registerNativeChild(file, runtime) : undefined;\n return childRuntime(runtime, request.intercom, async () => {\n try {\n releaseMcp();\n } finally {\n try {\n releaseNative?.();\n } finally {\n await hooks?.dispose();\n }\n }\n });\n } catch (error) {\n const failures: unknown[] = [error];\n try {\n await hooks?.dispose();\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n let closed = false;\n try {\n if (runtime) {\n await runtime.dispose();\n closed = true;\n }\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n try {\n request.intercom?.dispose?.();\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n // A rejected factory may have failed its own writer cleanup, so retain that fork.\n if (closed && sessionPath !== undefined && request.source.kind === 'v4-fork') {\n try {\n for (const suffix of ['', '-wal', '-shm']) fs.rmSync(sessionPath + suffix, { force: true });\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n }\n if (failures.length > 1) throw new AggregateError(failures, 'Headless child startup cleanup failed');\n throw error;\n }\n },\n { now: options.now ?? Date.now },\n );\n}\n\nexport function createHeadlessChildSessionServiceProvider(\n options: HeadlessChildSessionServiceOptions,\n): HeadlessChildSessionServiceProvider {\n const service = createHeadlessChildSessionService(options);\n return {\n get: () => service,\n close: () => service.close(),\n };\n}\n\nexport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../../../server/directHarnessRuntime';\nexport type { DirectHarnessModel } from '../../../types/server/directHarnessRuntime';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"headlessChildSessionService.mjs","names":[],"sources":["../../../../../src/systems/child/adapters/headlessChildSessionService.ts"],"sourcesContent":["import { BACKGROUND_CONTEXT, withAbortSignal } from '@earendil-works/chord/context';\nimport type { Conversation, ConversationId, EntryId, Harness, JsonObject } from '@earendil-works/pi-durable';\n\nimport {\n createPoChildSessionService,\n PO_CHILD_INPUT_CUSTOM_TYPE,\n type PoChildSessionConfig,\n type PoChildSessionInput,\n type PoChildSessionIntercom,\n type PoChildSessionHooks,\n type PoChildSessionHookBinding,\n type PoChildSessionHookRegistry,\n type PoChildSessionRequest,\n type PoChildSessionRuntime,\n type PoChildSessionService,\n type PoChildSessionServiceProvider,\n type PoChildSessionTool,\n type PoChildSessionMcpTool,\n type PoChildThread,\n type PoStoredChildRun,\n} from '../../../exports/childSession';\nimport { createAgentSessionRuntime, type AgentSessionRuntime } from '../../../pi/piSessionRuntime';\nimport type { TranscriptPage, TranscriptPageRequest } from '../../../schemas/sessionProtocol';\nimport {\n promptForAssistantText,\n type DirectHarnessRuntime,\n type DirectHarnessRuntimeOptions,\n} from '../../../server/directHarnessRuntime';\nimport { IdentityHistoryDoc } from '../../../services/durableSession/docs';\nimport { createSubagentConversation, markSubagentReported, readSubagents } from '../../../services/durableSubagents';\nimport { NATIVE_TOOL_FACTORIES } from '../../../services/nativeChildTools';\nimport { durableTranscriptLane, readTranscriptPage } from '../../../services/transcriptPages';\nimport type { DirectHarnessLaneOptions, DirectHarnessModel } from '../../../types/server/directHarnessRuntime';\n\nexport interface HeadlessChildSessionServiceOptions {\n readonly cwd: string;\n /** The parent session's runtime: every child is one more lane of its Harness. */\n readonly runtime: DirectHarnessRuntime;\n /** Resolve the current session's child hooks at spawn and invocation time. */\n readonly hooks?: () => PoChildSessionHooks | undefined;\n /** Resolve the current session's MCP dispatcher at spawn and invocation time. */\n readonly mcpTool?: () => PoChildSessionMcpTool | undefined;\n readonly subscribeMcpTool?: (listener: () => void) => () => void;\n readonly now?: () => number;\n}\n\nexport interface HeadlessChildSessionService extends PoChildSessionService {\n thread(runId: string): PoChildThread | undefined;\n}\n\nexport interface HeadlessChildSessionServiceProvider extends PoChildSessionServiceProvider {\n get(): HeadlessChildSessionService;\n close(): Promise<void>;\n}\n\nconst THINKING_SUFFIX_PATTERN = /:(off|minimal|low|medium|high|xhigh|max)$/;\n\nexport interface ParsedChildModel {\n readonly model: DirectHarnessModel;\n readonly thinking?: string;\n}\n\n/**\n * Child model specs may carry a Pi thinking suffix, for example\n * `anthropic-vertex/claude-sonnet-5:medium`. The suffix is a request option and\n * never part of the model id, so it has to be split off before model lookup.\n */\nexport function parseChildModelReference(value: string | undefined): ParsedChildModel | undefined {\n if (value === undefined) return undefined;\n const suffix = THINKING_SUFFIX_PATTERN.exec(value);\n const reference = suffix === null ? value : value.slice(0, value.length - suffix[0].length);\n const separator = reference.indexOf('/');\n if (separator <= 0 || separator === reference.length - 1)\n throw new Error(`Child model must use the provider/model form: ${value}`);\n return {\n model: { provider: reference.slice(0, separator), id: reference.slice(separator + 1) },\n ...(suffix === null ? {} : { thinking: suffix[1] as string }),\n };\n}\n\n/**\n * An attributed input rides a displayed custom message whose details carry the\n * sender. The model reads its text once, as a user turn, exactly like a string.\n */\nexport function childInputMessage(\n input: PoChildSessionInput,\n): Parameters<DirectHarnessRuntime['submitInternalMessage']>[0] {\n if (typeof input === 'string') return input;\n return {\n role: 'custom',\n customType: PO_CHILD_INPUT_CUSTOM_TYPE,\n content: input.text,\n display: true,\n details: { sender: input.sender },\n timestamp: Date.now(),\n };\n}\n\n/** The runtime's own model and effort, read once and then followed through its config changes. */\nfunction observeChildConfig(\n runtime: DirectHarnessRuntime,\n listener: (config: PoChildSessionConfig) => void,\n): () => void {\n const changed = new Set<string>();\n let open = true;\n const off = runtime.onEvent((event) => {\n if (event.type !== 'config_update') return;\n changed.add(event.property);\n listener(\n event.property === 'model'\n ? { model: `${event.value.provider}/${event.value.modelId}` }\n : { thinking: event.value },\n );\n });\n void runtime.readState().then(\n (state) => {\n const model = state.model as { provider?: unknown; id?: unknown } | undefined;\n if (!open) return;\n listener({\n ...(!changed.has('model') && typeof model?.provider === 'string' && typeof model.id === 'string'\n ? { model: `${model.provider}/${model.id}` }\n : {}),\n ...(!changed.has('thinkingLevel') && typeof state.thinkingLevel === 'string'\n ? { thinking: state.thinkingLevel }\n : {}),\n });\n },\n // A runtime that cannot read its state reports nothing; the run shows its config as not reported.\n () => undefined,\n );\n return () => {\n open = false;\n off();\n };\n}\n\n/** Input, usage and observation methods of a child lane. */\nfunction childRuntimeMethods(\n runtime: DirectHarnessRuntime,\n inputRequestId: string,\n hold?: () => Promise<boolean>,\n): Pick<PoChildSessionRuntime, 'prompt' | 'steer' | 'followUp' | 'abort' | 'onUsage' | 'onConfig' | 'onToolStart'> {\n return {\n prompt: (task) => promptForAssistantText(runtime, childInputMessage(task), hold, inputRequestId),\n async steer(message) {\n await runtime.submitInternalMessage(childInputMessage(message), 'steer');\n },\n async followUp(message) {\n await runtime.submitInternalMessage(childInputMessage(message), 'followUp');\n },\n abort: () => runtime.abort(),\n onUsage: (listener) =>\n runtime.onEvent((event) => {\n if (event.type !== 'usage') return;\n listener({ rowId: event.row.id, cost: event.row.usage.cost.total, tokens: event.row.usage.totalTokens });\n }),\n onConfig: (listener) => observeChildConfig(runtime, listener),\n onToolStart: (listener) =>\n runtime.onEvent((event) => {\n if (event.type === 'tool_execution_start') listener(event.toolCallId);\n }),\n };\n}\n\n/** Pages of a child conversation through its parent's Harness, also after the child's lane closed. */\nfunction childTranscriptReader(harness: Harness, conversation: Conversation, sessionId: string) {\n return async (request: Omit<TranscriptPageRequest, 'threadId'>, signal?: AbortSignal): Promise<TranscriptPage> => {\n const context = signal ? withAbortSignal(signal, BACKGROUND_CONTEXT) : BACKGROUND_CONTEXT;\n const page = await readTranscriptPage(\n {\n sessionId,\n laneName: 'main',\n lane: durableTranscriptLane(\n (query, limit, cursor, scanContext) => conversation.entries(query, limit, cursor, scanContext),\n (readContext) => harness.snapshot(IdentityHistoryDoc, conversation.id, readContext),\n ),\n },\n request,\n 0,\n context,\n );\n return { ...page, revision: 0 };\n };\n}\n\n/** Pages of a stored run's conversation, opened on first read: what a thread view reads once the run's lane is gone. */\nfunction storedTranscriptReader(harness: Harness, conversationId: number, sessionId: string) {\n let opening: Promise<ReturnType<typeof childTranscriptReader>> | undefined;\n return async (request: Omit<TranscriptPageRequest, 'threadId'>, signal?: AbortSignal): Promise<TranscriptPage> => {\n opening ??= harness.conversation(conversationId as ConversationId, BACKGROUND_CONTEXT).then((conversation) => {\n if (!conversation) throw new Error(`Child conversation ${conversationId} is unavailable.`);\n return childTranscriptReader(harness, conversation, sessionId);\n });\n try {\n const read = await opening;\n return await read(request, signal);\n } catch (error) {\n opening = undefined;\n throw error;\n }\n };\n}\n\nfunction childRuntime(\n runtime: DirectHarnessRuntime,\n inputRequestId: string,\n readPage: PoChildSessionRuntime['readTranscriptPage'],\n intercom?: PoChildSessionIntercom,\n release?: () => void | Promise<void>,\n): PoChildSessionRuntime {\n return {\n sessionId: runtime.sessionId,\n ...(readPage ? { readTranscriptPage: readPage } : {}),\n ...childRuntimeMethods(runtime, inputRequestId, intercom?.hold?.bind(intercom)),\n dispose: async () => {\n try {\n await release?.();\n } finally {\n try {\n await runtime.dispose();\n } finally {\n intercom?.dispose?.();\n }\n }\n },\n };\n}\n\n/** Own the hook lifetime independently of the caller's startup signal. */\nexport function bindChildHooks(\n request: PoChildSessionRequest,\n hooks: PoChildSessionHooks | undefined,\n readRuntime: () => DirectHarnessRuntime | undefined,\n signal?: AbortSignal,\n): { binding?: PoChildSessionHookBinding; dispose(): Promise<void> } {\n const lifetime = new AbortController();\n const abort = () => lifetime.abort(signal?.reason);\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted) abort();\n const admittedRuntime = () => {\n lifetime.signal.throwIfAborted();\n const runtime = readRuntime();\n if (!runtime) throw new Error('Child hook runtime is not available.');\n return runtime;\n };\n // Copy only data. The borrowed intercom retains its owner and is never frozen.\n const { intercom, ...data } = request;\n const freeze = (value: unknown): void => {\n if (typeof value !== 'object' || value === null) return;\n for (const child of Object.values(value)) freeze(child);\n Object.freeze(value);\n };\n const snapshot = structuredClone(data);\n freeze(snapshot);\n let binding: PoChildSessionHookBinding | undefined;\n try {\n binding = hooks?.bind({\n request: Object.freeze({ ...snapshot, ...(intercom ? { intercom } : {}) }),\n sessionId: () => readRuntime()?.sessionId,\n signal: lifetime.signal,\n async sendMessage(text, delivery) {\n await admittedRuntime().submitInternalMessage(text, delivery);\n },\n async appendCustomEntry(type, data) {\n await admittedRuntime().appendCustomEntry(type, data);\n },\n });\n } catch (error) {\n lifetime.abort();\n signal?.removeEventListener('abort', abort);\n throw error;\n }\n let disposal: Promise<void> | undefined;\n return {\n ...(binding ? { binding } : {}),\n dispose: () =>\n (disposal ??= (async () => {\n lifetime.abort();\n signal?.removeEventListener('abort', abort);\n await binding?.dispose();\n })()),\n };\n}\n\nexport function createPoChildSessionHookRegistry(): PoChildSessionHookRegistry {\n const entries = new Set<PoChildSessionHooks>();\n return {\n register(hooks) {\n entries.add(hooks);\n return { dispose: () => void entries.delete(hooks) };\n },\n list: () => [...entries],\n };\n}\n\n/**\n * Chains child hooks into one provider. The first is the legacy single provider: its errors\n * propagate as before. Later hooks see the patched result, and their errors are reported and skipped,\n * so an observer can never break a child tool call.\n */\nexport function composeChildSessionHooks(\n list: readonly (PoChildSessionHooks | undefined)[],\n onError?: (message: string) => void,\n): PoChildSessionHooks | undefined {\n const hooks = list.filter((entry): entry is PoChildSessionHooks => entry !== undefined);\n if (hooks.length <= 1) return hooks[0];\n const report = (error: unknown): void =>\n onError?.(`Child session hook failed: ${error instanceof Error ? error.message : String(error)}`);\n return {\n bind(scope) {\n const bindings: PoChildSessionHookBinding[] = [];\n try {\n for (const entry of hooks) bindings.push(entry.bind(scope));\n } catch (error) {\n void Promise.allSettled(bindings.map((binding) => binding.dispose()));\n throw error;\n }\n return {\n async beforeTool(event, context) {\n let args = event.args;\n let changed = false;\n for (const [index, binding] of bindings.entries()) {\n let result: Awaited<ReturnType<PoChildSessionHookBinding['beforeTool']>>;\n try {\n result = await binding.beforeTool({ ...event, args }, context);\n } catch (error) {\n if (index === 0) throw error;\n report(error);\n continue;\n }\n if (result?.block) return result;\n if (result?.args) {\n args = result.args;\n changed = true;\n }\n }\n return changed ? { args } : undefined;\n },\n async afterTool(event, context) {\n let current = event;\n let patch: NonNullable<Awaited<ReturnType<PoChildSessionHookBinding['afterTool']>>> | undefined;\n for (const [index, binding] of bindings.entries()) {\n let result: Awaited<ReturnType<PoChildSessionHookBinding['afterTool']>>;\n try {\n result = await binding.afterTool(current, context);\n } catch (error) {\n if (index === 0) throw error;\n report(error);\n continue;\n }\n if (!result) continue;\n const terminate = patch?.terminate === true || result.terminate === true;\n patch = { ...patch, ...result, ...(terminate ? { terminate } : {}) };\n current = {\n ...current,\n ...(result.content === undefined ? {} : { content: result.content }),\n ...(result.details === undefined ? {} : { details: result.details }),\n ...(result.isError === undefined ? {} : { isError: result.isError }),\n ...(result.usage === undefined ? {} : { usage: result.usage }),\n };\n }\n return patch;\n },\n async dispose() {\n const results = await Promise.allSettled(bindings.map((binding) => binding.dispose()));\n const failure = results.find((result) => result.status === 'rejected');\n if (failure) throw failure.reason;\n },\n };\n },\n };\n}\n\ntype DirectHarnessTool = Parameters<DirectHarnessRuntime['replaceTools']>[0][number];\n\nasync function installIntercom(\n runtime: DirectHarnessRuntime,\n intercom: PoChildSessionIntercom | undefined,\n tools: DirectHarnessTool[],\n inputRequestId: string,\n): Promise<void> {\n if (!intercom) return;\n const tool = intercom.bindRuntime(childRuntime(runtime, inputRequestId, undefined));\n const adapted: DirectHarnessTool = {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters as never,\n execute: async (operationId, params, onUpdate, _toolContext, _invocation, context) => {\n const result = await tool.execute(\n operationId,\n params,\n context.abortSignal ?? new AbortController().signal,\n (partial) => onUpdate({ content: partial.content as never, details: partial.details }),\n );\n return { content: result.content as never, details: result.details, isError: result.isError };\n },\n };\n tools.push(adapted);\n await runtime.replaceTools(tools);\n}\n\nfunction hasConfiguredValues(value: readonly string[] | undefined): boolean {\n return value !== undefined && value.length > 0;\n}\n\ntype NativeCodingTool = ReturnType<(typeof NATIVE_TOOL_FACTORIES)[keyof typeof NATIVE_TOOL_FACTORIES]>;\n\nfunction adaptNativeTool(tool: NativeCodingTool | PoChildSessionTool): DirectHarnessTool {\n const prompt = tool as (NativeCodingTool | PoChildSessionTool) & {\n promptSnippet?: string;\n promptGuidelines?: string[];\n executionMode?: string;\n };\n return {\n name: prompt.name,\n description: prompt.description,\n ...(prompt.executionMode === 'parallel' || prompt.executionMode === 'sequential'\n ? { executionMode: prompt.executionMode }\n : {}),\n label: 'label' in tool ? tool.label : tool.name,\n parameters: tool.parameters as never,\n ...('prepareArguments' in tool && typeof tool.prepareArguments === 'function'\n ? { prepareArguments: (args: unknown) => tool.prepareArguments!(args) as never }\n : {}),\n async execute(toolCallId, parameters, onUpdate, _toolContext, _invocation, context) {\n const execute = tool.execute as (\n id: string,\n params: unknown,\n signal: AbortSignal,\n update: (result: { content: unknown; details?: unknown }) => void,\n ) => Promise<{ content: unknown; details?: unknown; isError?: boolean }>;\n const result = await execute(\n toolCallId,\n parameters,\n context.abortSignal ?? new AbortController().signal,\n (partial) => onUpdate({ content: partial.content as never, details: partial.details }),\n );\n if (result.isError) {\n const content = result.content as PoChildSessionToolResultContent;\n throw new Error(\n content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('\\n') || 'MCP tool failed.',\n );\n }\n return { content: result.content as never, details: result.details };\n },\n };\n}\n\ntype PoChildSessionToolResultContent = Awaited<ReturnType<PoChildSessionTool['execute']>>['content'];\n\n/** Validate and project native fields before the child conversation is created. */\nexport function composeDirectHarnessRequestOptions(\n request: PoChildSessionRequest,\n resolveMcpTool?: () => PoChildSessionMcpTool | undefined,\n validateRequired = true,\n): Pick<DirectHarnessRuntimeOptions, 'systemPrompt' | 'tools' | 'activeToolNames'> {\n const unsupported = [\n ...(hasConfiguredValues(request.extensions) ? ['extensions'] : []),\n ...(hasConfiguredValues(request.subagentOnlyExtensions) ? ['subagentOnlyExtensions'] : []),\n ...(hasConfiguredValues(request.capabilityCeiling?.allowedExternalProfiles) ? ['allowedExternalProfiles'] : []),\n ];\n if (unsupported.length > 0) {\n throw new Error(\n `Native child session configuration is unsupported by the direct harness: ${unsupported.join(', ')}`,\n );\n }\n\n const requested = [...new Set(request.tools ?? Object.keys(NATIVE_TOOL_FACTORIES))];\n const excluded = new Set(request.excludeTools ?? []);\n const ceiling = request.capabilityCeiling;\n const allowed = ceiling?.allowedTools;\n const isMcp = (name: string) => name === 'mcp' || name === 'mcp_use';\n const mcpDenied =\n (ceiling !== undefined && ceiling.allowMcpTools !== true) ||\n (allowed !== undefined && allowed.every((name) => Object.hasOwn(NATIVE_TOOL_FACTORIES, name))) ||\n [...excluded].some(isMcp);\n const wantsMcp =\n !mcpDenied &&\n (requested.some(isMcp) ||\n hasConfiguredValues(request.mcpDirectTools) ||\n requested.some((name) => !Object.hasOwn(NATIVE_TOOL_FACTORIES, name)));\n const provider = wantsMcp ? resolveMcpTool?.() : undefined;\n const catalog = provider?.catalog;\n const snapshot = catalog?.snapshot() ?? [];\n const expand = (values: readonly string[]) =>\n new Set(values.flatMap((name) => (isMcp(name) ? snapshot.map((tool) => tool.name) : [name])));\n const grants = allowed === undefined ? undefined : expand(allowed);\n const denied = expand([...excluded]);\n const selected = expand(requested);\n if (request.mcpDirectTools?.length) {\n const selectors = new Set(catalog?.resolveSelectors(request.mcpDirectTools) ?? []);\n for (const tool of snapshot) {\n if (!selectors.has(tool.name)) selected.delete(tool.name);\n else if (request.tools === undefined) selected.add(tool.name);\n }\n }\n const nativeNames = requested.filter(\n (name) =>\n Object.hasOwn(NATIVE_TOOL_FACTORIES, name) && !denied.has(name) && (grants === undefined || grants.has(name)),\n );\n const direct = mcpDenied\n ? []\n : snapshot.filter(\n (tool) => selected.has(tool.name) && !denied.has(tool.name) && (grants === undefined || grants.has(tool.name)),\n );\n const unknown = requested.filter(\n (name) =>\n !Object.hasOwn(NATIVE_TOOL_FACTORIES, name) &&\n !isMcp(name) &&\n !snapshot.some((tool) => tool.name === name) &&\n !denied.has(name) &&\n (grants === undefined || grants.has(name)),\n );\n if (unknown.length > 0 && validateRequired)\n throw new Error(`Native child session requested unknown direct harness tools: ${unknown.join(', ')}`);\n const names = [...nativeNames, ...direct.map((tool) => tool.name)];\n const required = ceiling?.requiredTools ?? [];\n const missing = required.filter((name) => (isMcp(name) ? direct.length === 0 : !names.includes(name)));\n if (validateRequired && missing.length > 0)\n throw new Error(`Native child session capability ceiling requires unavailable tools: ${missing.join(', ')}`);\n if (validateRequired && wantsMcp && !catalog)\n throw new Error('Native child session MCP tools are unavailable. Enable MCP in the parent session.');\n const tools = [\n ...nativeNames.map((name) =>\n adaptNativeTool(\n NATIVE_TOOL_FACTORIES[name as keyof typeof NATIVE_TOOL_FACTORIES](request.cwd) as NativeCodingTool,\n ),\n ),\n ...direct.map((tool) =>\n adaptNativeTool({\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n signal?.throwIfAborted();\n if (resolveMcpTool?.() !== provider || !catalog?.snapshot().includes(tool))\n throw new Error('The parent session MCP tool is no longer available.');\n return tool.execute(toolCallId, parameters, signal, onUpdate);\n },\n } satisfies PoChildSessionTool),\n ),\n ];\n return {\n tools,\n activeToolNames: names,\n ...(request.systemPrompt === undefined ? {} : { systemPrompt: request.systemPrompt }),\n };\n}\n\n/** Refresh borrowed declarations without replacing native tools or rebinding intercom. */\nexport function bindChildMcpCatalog(\n runtime: DirectHarnessRuntime,\n request: PoChildSessionRequest,\n options: Pick<HeadlessChildSessionServiceOptions, 'mcpTool' | 'subscribeMcpTool'>,\n initialTools: readonly DirectHarnessTool[],\n): () => void {\n if (request.capabilityCeiling !== undefined && request.capabilityCeiling.allowMcpTools !== true)\n return () => undefined;\n if (request.capabilityCeiling?.allowedTools?.every((name) => Object.hasOwn(NATIVE_TOOL_FACTORIES, name)))\n return () => undefined;\n if (request.excludeTools?.some((name) => name === 'mcp' || name === 'mcp_use')) return () => undefined;\n if (\n !request.tools?.some(\n (name) => name === 'mcp' || name === 'mcp_use' || !Object.hasOwn(NATIVE_TOOL_FACTORIES, name),\n ) &&\n !request.mcpDirectTools?.length\n )\n return () => undefined;\n const retained = initialTools.filter(\n (tool, index) =>\n Object.hasOwn(NATIVE_TOOL_FACTORIES, tool.name) ||\n (request.intercom !== undefined && index === initialTools.length - 1),\n );\n let disposed = false;\n let provider: PoChildSessionMcpTool | undefined;\n let unsubscribeCatalog: (() => void) | undefined;\n let previous: readonly PoChildSessionTool[] = [];\n let pending = Promise.resolve();\n let failure: unknown;\n const refresh = () => {\n if (disposed) return;\n const current = options.mcpTool?.();\n const changed = current !== provider;\n if (changed) {\n unsubscribeCatalog?.();\n provider = current;\n unsubscribeCatalog = provider?.catalog?.subscribe(refresh);\n }\n const snapshot = provider?.catalog?.snapshot() ?? [];\n if (!changed && snapshot.length === previous.length && snapshot.every((tool, index) => tool === previous[index]))\n return;\n previous = snapshot;\n const composition = composeDirectHarnessRequestOptions(request, options.mcpTool, false);\n const direct = (composition.tools ?? []).filter((tool) => !Object.hasOwn(NATIVE_TOOL_FACTORIES, tool.name));\n pending = pending\n .then(async () => {\n if (!disposed) await runtime.replaceTools([...retained, ...direct]);\n })\n .catch((error: unknown) => {\n failure = error;\n });\n };\n const unsubscribeProvider = options.subscribeMcpTool?.(refresh);\n refresh();\n return () => {\n disposed = true;\n unsubscribeProvider?.();\n unsubscribeCatalog?.();\n if (failure !== undefined) throw new Error('Child MCP catalog refresh failed.', { cause: failure });\n };\n}\n\n/** The request as stored for a re-attach: data only, without its live intercom, environment or source. */\nfunction storedRequest(request: PoChildSessionRequest): JsonObject {\n const { intercom: _intercom, environment: _environment, source: _source, ...data } = request;\n return JSON.parse(JSON.stringify(data)) as JsonObject;\n}\n\n/**\n * Children are task-owned conversations of the parent's Harness, each run as one more lane. A run's conversation,\n * anchor and request are stored, so after a restart the child resumes with the Harness and `restore` re-attaches it.\n */\nexport function createHeadlessChildSessionService(\n options: HeadlessChildSessionServiceOptions,\n): HeadlessChildSessionService {\n const parent = options.runtime;\n const context = BACKGROUND_CONTEXT;\n // Live transcript state while a lane is open, and pages for the session's lifetime: what a thread view reads.\n const states = new Map<string, AgentSessionRuntime>();\n const readers = new Map<string, NonNullable<PoChildSessionRuntime['readTranscriptPage']>>();\n let closed = false;\n const storedReader = (runId: string, conversationId: number) => {\n const reader = storedTranscriptReader(parent.harness, conversationId, runId);\n readers.set(runId, reader);\n return reader;\n };\n // Runs stored before this service existed, finished or not, stay readable; a lane opened later replaces its reader.\n void readSubagents(parent.harness, context).then(\n (runs) => {\n if (closed) return;\n for (const [runId, run] of Object.entries(runs)) if (!readers.has(runId)) storedReader(runId, run.conversationId);\n },\n // An unreadable record leaves stored runs to the lookup on read.\n () => undefined,\n );\n const readerOf = async (runId: string) => {\n const reader = readers.get(runId);\n if (reader) return reader;\n const run = (await readSubagents(parent.harness, context))[runId];\n return run ? (readers.get(runId) ?? storedReader(runId, run.conversationId)) : undefined;\n };\n // A reported run never runs again, so its lane's tools, prompt and hooks leave the shared registry.\n const report = async (runId: string, outcome?: Parameters<typeof markSubagentReported>[3]) => {\n const conversationId = await markSubagentReported(parent.harness, runId, context, outcome);\n if (conversationId !== undefined) parent.closeLane(conversationId);\n };\n const service = createPoChildSessionService(\n async (request: PoChildSessionRequest, signal): Promise<PoChildSessionRuntime> => {\n signal?.throwIfAborted();\n const existing = (await readSubagents(parent.harness, context))[request.runId];\n if (existing?.reported) throw new Error(`Child run '${request.runId}' has already finished.`);\n const restoring = existing !== undefined;\n // A restored child may resume before the parent's MCP catalog returns; its tools follow the catalog.\n const directRequestOptions = composeDirectHarnessRequestOptions(request, options.mcpTool, !restoring);\n const requestedModel = parseChildModelReference(request.model);\n const thinking = request.thinking ?? requestedModel?.thinking;\n let forkAt: EntryId | undefined;\n if (!restoring && request.source.kind === 'fork') {\n const entryId = request.source.entryId ?? (await parent.readEntries()).leafId ?? undefined;\n // A multi-message entry projects its later messages as `<entry id>:<position>`; fork at the entry itself.\n const durableId = entryId === undefined ? Number.NaN : Number(String(entryId).split(':', 1)[0]);\n if (!Number.isSafeInteger(durableId)) throw new Error('The parent session has no history to fork.');\n forkAt = durableId as EntryId;\n }\n const { conversation, stored } = existing\n ? {\n conversation: await parent.harness.conversation(existing.conversationId as ConversationId, context),\n stored: existing,\n }\n : await createSubagentConversation(\n parent.harness,\n parent.lane,\n { runId: request.runId, request: storedRequest(request), ...(forkAt === undefined ? {} : { forkAt }) },\n context,\n );\n if (!conversation) throw new Error(`Child run '${request.runId}' has no conversation.`);\n\n let runtime: DirectHarnessRuntime | undefined;\n let hooks: ReturnType<typeof bindChildHooks> | undefined;\n // Bound on first use when restoring: a child may resume before the parent's hooks are ready, and a tool\n // call then fails closed until they are.\n const boundHooks = () => (hooks ??= bindChildHooks(request, options.hooks?.(), () => runtime, signal));\n try {\n if (!restoring) boundHooks();\n const laneOptions: DirectHarnessLaneOptions = {\n sessionId: request.runId,\n cwd: request.cwd || options.cwd,\n ...(requestedModel ? { model: requestedModel.model } : {}),\n ...(thinking === undefined ? {} : { thinkingLevel: thinking as never }),\n ...directRequestOptions,\n beforeTool: (event, toolContext) => boundHooks().binding?.beforeTool(event, toolContext),\n afterTool: (event, toolContext) => boundHooks().binding?.afterTool(event, toolContext),\n };\n runtime = await parent.openLane(conversation, laneOptions);\n await installIntercom(\n runtime,\n request.intercom,\n (laneOptions.tools ?? []) as DirectHarnessTool[],\n stored.inputRequestId,\n );\n const releaseMcp = bindChildMcpCatalog(runtime, request, options, laneOptions.tools ?? []);\n const state = createAgentSessionRuntime({\n runtime,\n sessionId: runtime.sessionId,\n sessionName: runtime.sessionId,\n cwd: '',\n });\n states.set(request.runId, state);\n const readPage = childTranscriptReader(parent.harness, conversation, runtime.sessionId);\n readers.set(request.runId, readPage);\n return childRuntime(runtime, stored.inputRequestId, readPage, request.intercom, async () => {\n try {\n releaseMcp();\n } finally {\n try {\n if (states.get(request.runId) === state) states.delete(request.runId);\n await state.dispose();\n } finally {\n await hooks?.dispose();\n }\n }\n });\n } catch (error) {\n const failures: unknown[] = [error];\n for (const cleanup of [\n () => hooks?.dispose(),\n () => runtime?.dispose(),\n () => request.intercom?.dispose?.(),\n // A child that never started is finished: nothing re-attaches it after a restart.\n () => (restoring ? undefined : report(request.runId, { state: 'failed' })),\n ]) {\n try {\n await cleanup();\n } catch (cleanupError) {\n failures.push(cleanupError);\n }\n }\n if (failures.length > 1) throw new AggregateError(failures, 'Headless child startup cleanup failed');\n throw error;\n }\n },\n {\n now: options.now ?? Date.now,\n store: {\n async stored(): Promise<PoStoredChildRun[]> {\n const runs: PoStoredChildRun[] = [];\n for (const run of Object.values(await readSubagents(parent.harness, context))) {\n if (run.reported || !run.request) continue;\n const receipt = await parent.harness.commit(\n (tx) => tx.submissionByRequest(run.conversationId as ConversationId, run.inputRequestId),\n context,\n );\n runs.push({\n request: run.request as unknown as PoStoredChildRun['request'],\n settled: receipt?.status === 'done' || receipt?.status === 'unanswered',\n });\n }\n return runs;\n },\n markReported: report,\n },\n },\n );\n return {\n ...service,\n async readTranscriptPage(runId, request, signal) {\n if (closed) throw new Error('The Po child-session service is closed.');\n signal?.throwIfAborted();\n const reader = await readerOf(runId);\n if (!reader) throw new Error(`Child run '${runId}' has no readable transcript.`);\n const page = await reader(request, signal);\n signal?.throwIfAborted();\n return page;\n },\n async reported(runId) {\n const run = (await readSubagents(parent.harness, context))[runId];\n if (!run?.reported) return undefined;\n return {\n ...(run.agent === undefined ? {} : { agent: run.agent }),\n ...(run.task === undefined ? {} : { task: run.task }),\n ...(run.state === undefined ? {} : { state: run.state }),\n };\n },\n thread(runId) {\n const reader = readers.get(runId);\n if (!reader) return undefined;\n const state = states.get(runId)?.state;\n return { ...(state ? { state } : {}), readTranscriptPage: reader };\n },\n async close() {\n closed = true;\n await service.close();\n states.clear();\n readers.clear();\n },\n };\n}\n\nexport function createHeadlessChildSessionServiceProvider(\n options: HeadlessChildSessionServiceOptions,\n): HeadlessChildSessionServiceProvider {\n const service = createHeadlessChildSessionService(options);\n return {\n get: () => service,\n close: () => service.close(),\n };\n}\n\nexport type { DirectHarnessRuntime, DirectHarnessRuntimeOptions } from '../../../server/directHarnessRuntime';\nexport type { DirectHarnessModel } from '../../../types/server/directHarnessRuntime';\n"],"mappings":";;;;;;;;;;AAuDA,MAAM,0BAA0B;;;;;;AAYhC,SAAgB,yBAAyB,OAAyD;CAChG,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;CAChC,MAAM,SAAS,wBAAwB,KAAK,KAAK;CACjD,MAAM,YAAY,WAAW,OAAO,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,OAAO,EAAE,CAAC,MAAM;CAC1F,MAAM,YAAY,UAAU,QAAQ,GAAG;CACvC,IAAI,aAAa,KAAK,cAAc,UAAU,SAAS,GACrD,MAAM,IAAI,MAAM,iDAAiD,OAAO;CAC1E,OAAO;EACL,OAAO;GAAE,UAAU,UAAU,MAAM,GAAG,SAAS;GAAG,IAAI,UAAU,MAAM,YAAY,CAAC;EAAE;EACrF,GAAI,WAAW,OAAO,CAAC,IAAI,EAAE,UAAU,OAAO,GAAa;CAC7D;AACF;;;;;AAMA,SAAgB,kBACd,OAC8D;CAC9D,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,OAAO;EACL,MAAM;EACN,YAAY;EACZ,SAAS,MAAM;EACf,SAAS;EACT,SAAS,EAAE,QAAQ,MAAM,OAAO;EAChC,WAAW,KAAK,IAAI;CACtB;AACF;;AAGA,SAAS,mBACP,SACA,UACY;CACZ,MAAM,0BAAU,IAAI,IAAY;CAChC,IAAI,OAAO;CACX,MAAM,MAAM,QAAQ,SAAS,UAAU;EACrC,IAAI,MAAM,SAAS,iBAAiB;EACpC,QAAQ,IAAI,MAAM,QAAQ;EAC1B,SACE,MAAM,aAAa,UACf,EAAE,OAAO,GAAG,MAAM,MAAM,SAAS,GAAG,MAAM,MAAM,UAAU,IAC1D,EAAE,UAAU,MAAM,MAAM,CAC9B;CACF,CAAC;CACD,QAAa,UAAU,CAAC,CAAC,MACtB,UAAU;EACT,MAAM,QAAQ,MAAM;EACpB,IAAI,CAAC,MAAM;EACX,SAAS;GACP,GAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,OAAO,aAAa,YAAY,OAAO,MAAM,OAAO,WACpF,EAAE,OAAO,GAAG,MAAM,SAAS,GAAG,MAAM,KAAK,IACzC,CAAC;GACL,GAAI,CAAC,QAAQ,IAAI,eAAe,KAAK,OAAO,MAAM,kBAAkB,WAChE,EAAE,UAAU,MAAM,cAAc,IAChC,CAAC;EACP,CAAC;CACH,SAEM,KAAA,CACR;CACA,aAAa;EACX,OAAO;EACP,IAAI;CACN;AACF;;AAGA,SAAS,oBACP,SACA,gBACA,MACiH;CACjH,OAAO;EACL,SAAS,SAAS,uBAAuB,SAAS,kBAAkB,IAAI,GAAG,MAAM,cAAc;EAC/F,MAAM,MAAM,SAAS;GACnB,MAAM,QAAQ,sBAAsB,kBAAkB,OAAO,GAAG,OAAO;EACzE;EACA,MAAM,SAAS,SAAS;GACtB,MAAM,QAAQ,sBAAsB,kBAAkB,OAAO,GAAG,UAAU;EAC5E;EACA,aAAa,QAAQ,MAAM;EAC3B,UAAU,aACR,QAAQ,SAAS,UAAU;GACzB,IAAI,MAAM,SAAS,SAAS;GAC5B,SAAS;IAAE,OAAO,MAAM,IAAI;IAAI,MAAM,MAAM,IAAI,MAAM,KAAK;IAAO,QAAQ,MAAM,IAAI,MAAM;GAAY,CAAC;EACzG,CAAC;EACH,WAAW,aAAa,mBAAmB,SAAS,QAAQ;EAC5D,cAAc,aACZ,QAAQ,SAAS,UAAU;GACzB,IAAI,MAAM,SAAS,wBAAwB,SAAS,MAAM,UAAU;EACtE,CAAC;CACL;AACF;;AAGA,SAAS,sBAAsB,SAAkB,cAA4B,WAAmB;CAC9F,OAAO,OAAO,SAAkD,WAAkD;EAChH,MAAM,UAAU,SAAS,gBAAgB,QAAQ,kBAAkB,IAAI;EAcvE,OAAO;GAAE,GAAG,MAbO,mBACjB;IACE;IACA,UAAU;IACV,MAAM,uBACH,OAAO,OAAO,QAAQ,gBAAgB,aAAa,QAAQ,OAAO,OAAO,QAAQ,WAAW,IAC5F,gBAAgB,QAAQ,SAAS,oBAAoB,aAAa,IAAI,WAAW,CACpF;GACF,GACA,SACA,GACA,OACF;GACkB,UAAU;EAAE;CAChC;AACF;;AAGA,SAAS,uBAAuB,SAAkB,gBAAwB,WAAmB;CAC3F,IAAI;CACJ,OAAO,OAAO,SAAkD,WAAkD;EAChH,YAAY,QAAQ,aAAa,gBAAkC,kBAAkB,CAAC,CAAC,MAAM,iBAAiB;GAC5G,IAAI,CAAC,cAAc,MAAM,IAAI,MAAM,sBAAsB,eAAe,iBAAiB;GACzF,OAAO,sBAAsB,SAAS,cAAc,SAAS;EAC/D,CAAC;EACD,IAAI;GAEF,OAAO,OAAM,MADM,QAAA,CACD,SAAS,MAAM;EACnC,SAAS,OAAO;GACd,UAAU,KAAA;GACV,MAAM;EACR;CACF;AACF;AAEA,SAAS,aACP,SACA,gBACA,UACA,UACA,SACuB;CACvB,OAAO;EACL,WAAW,QAAQ;EACnB,GAAI,WAAW,EAAE,oBAAoB,SAAS,IAAI,CAAC;EACnD,GAAG,oBAAoB,SAAS,gBAAgB,UAAU,MAAM,KAAK,QAAQ,CAAC;EAC9E,SAAS,YAAY;GACnB,IAAI;IACF,MAAM,UAAU;GAClB,UAAU;IACR,IAAI;KACF,MAAM,QAAQ,QAAQ;IACxB,UAAU;KACR,UAAU,UAAU;IACtB;GACF;EACF;CACF;AACF;;AAGA,SAAgB,eACd,SACA,OACA,aACA,QACmE;CACnE,MAAM,WAAW,IAAI,gBAAgB;CACrC,MAAM,cAAc,SAAS,MAAM,QAAQ,MAAM;CACjD,QAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;CACvD,IAAI,QAAQ,SAAS,MAAM;CAC3B,MAAM,wBAAwB;EAC5B,SAAS,OAAO,eAAe;EAC/B,MAAM,UAAU,YAAY;EAC5B,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,sCAAsC;EACpE,OAAO;CACT;CAEA,MAAM,EAAE,UAAU,GAAG,SAAS;CAC9B,MAAM,UAAU,UAAyB;EACvC,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;EACjD,KAAK,MAAM,SAAS,OAAO,OAAO,KAAK,GAAG,OAAO,KAAK;EACtD,OAAO,OAAO,KAAK;CACrB;CACA,MAAM,WAAW,gBAAgB,IAAI;CACrC,OAAO,QAAQ;CACf,IAAI;CACJ,IAAI;EACF,UAAU,OAAO,KAAK;GACpB,SAAS,OAAO,OAAO;IAAE,GAAG;IAAU,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;GAAG,CAAC;GACzE,iBAAiB,YAAY,CAAC,EAAE;GAChC,QAAQ,SAAS;GACjB,MAAM,YAAY,MAAM,UAAU;IAChC,MAAM,gBAAgB,CAAC,CAAC,sBAAsB,MAAM,QAAQ;GAC9D;GACA,MAAM,kBAAkB,MAAM,MAAM;IAClC,MAAM,gBAAgB,CAAC,CAAC,kBAAkB,MAAM,IAAI;GACtD;EACF,CAAC;CACH,SAAS,OAAO;EACd,SAAS,MAAM;EACf,QAAQ,oBAAoB,SAAS,KAAK;EAC1C,MAAM;CACR;CACA,IAAI;CACJ,OAAO;EACL,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;EAC7B,eACG,cAAc,YAAY;GACzB,SAAS,MAAM;GACf,QAAQ,oBAAoB,SAAS,KAAK;GAC1C,MAAM,SAAS,QAAQ;EACzB,EAAA,CAAG;CACP;AACF;AAEA,SAAgB,mCAA+D;CAC7E,MAAM,0BAAU,IAAI,IAAyB;CAC7C,OAAO;EACL,SAAS,OAAO;GACd,QAAQ,IAAI,KAAK;GACjB,OAAO,EAAE,eAAe,KAAK,QAAQ,OAAO,KAAK,EAAE;EACrD;EACA,YAAY,CAAC,GAAG,OAAO;CACzB;AACF;;;;;;AAOA,SAAgB,yBACd,MACA,SACiC;CACjC,MAAM,QAAQ,KAAK,QAAQ,UAAwC,UAAU,KAAA,CAAS;CACtF,IAAI,MAAM,UAAU,GAAG,OAAO,MAAM;CACpC,MAAM,UAAU,UACd,UAAU,8BAA8B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;CAClG,OAAO,EACL,KAAK,OAAO;EACV,MAAM,WAAwC,CAAC;EAC/C,IAAI;GACF,KAAK,MAAM,SAAS,OAAO,SAAS,KAAK,MAAM,KAAK,KAAK,CAAC;EAC5D,SAAS,OAAO;GACd,QAAa,WAAW,SAAS,KAAK,YAAY,QAAQ,QAAQ,CAAC,CAAC;GACpE,MAAM;EACR;EACA,OAAO;GACL,MAAM,WAAW,OAAO,SAAS;IAC/B,IAAI,OAAO,MAAM;IACjB,IAAI,UAAU;IACd,KAAK,MAAM,CAAC,OAAO,YAAY,SAAS,QAAQ,GAAG;KACjD,IAAI;KACJ,IAAI;MACF,SAAS,MAAM,QAAQ,WAAW;OAAE,GAAG;OAAO;MAAK,GAAG,OAAO;KAC/D,SAAS,OAAO;MACd,IAAI,UAAU,GAAG,MAAM;MACvB,OAAO,KAAK;MACZ;KACF;KACA,IAAI,QAAQ,OAAO,OAAO;KAC1B,IAAI,QAAQ,MAAM;MAChB,OAAO,OAAO;MACd,UAAU;KACZ;IACF;IACA,OAAO,UAAU,EAAE,KAAK,IAAI,KAAA;GAC9B;GACA,MAAM,UAAU,OAAO,SAAS;IAC9B,IAAI,UAAU;IACd,IAAI;IACJ,KAAK,MAAM,CAAC,OAAO,YAAY,SAAS,QAAQ,GAAG;KACjD,IAAI;KACJ,IAAI;MACF,SAAS,MAAM,QAAQ,UAAU,SAAS,OAAO;KACnD,SAAS,OAAO;MACd,IAAI,UAAU,GAAG,MAAM;MACvB,OAAO,KAAK;MACZ;KACF;KACA,IAAI,CAAC,QAAQ;KACb,MAAM,YAAY,OAAO,cAAc,QAAQ,OAAO,cAAc;KACpE,QAAQ;MAAE,GAAG;MAAO,GAAG;MAAQ,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;KAAG;KACnE,UAAU;MACR,GAAG;MACH,GAAI,OAAO,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,OAAO,QAAQ;MAClE,GAAI,OAAO,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,OAAO,QAAQ;MAClE,GAAI,OAAO,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,OAAO,QAAQ;MAClE,GAAI,OAAO,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,OAAO,MAAM;KAC9D;IACF;IACA,OAAO;GACT;GACA,MAAM,UAAU;IAEd,MAAM,WAAU,MADM,QAAQ,WAAW,SAAS,KAAK,YAAY,QAAQ,QAAQ,CAAC,CAAC,EAAA,CAC7D,MAAM,WAAW,OAAO,WAAW,UAAU;IACrE,IAAI,SAAS,MAAM,QAAQ;GAC7B;EACF;CACF,EACF;AACF;AAIA,eAAe,gBACb,SACA,UACA,OACA,gBACe;CACf,IAAI,CAAC,UAAU;CACf,MAAM,OAAO,SAAS,YAAY,aAAa,SAAS,gBAAgB,KAAA,CAAS,CAAC;CAClF,MAAM,UAA6B;EACjC,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,YAAY,KAAK;EACjB,SAAS,OAAO,aAAa,QAAQ,UAAU,cAAc,aAAa,YAAY;GACpF,MAAM,SAAS,MAAM,KAAK,QACxB,aACA,QACA,QAAQ,eAAe,IAAI,gBAAgB,CAAC,CAAC,SAC5C,YAAY,SAAS;IAAE,SAAS,QAAQ;IAAkB,SAAS,QAAQ;GAAQ,CAAC,CACvF;GACA,OAAO;IAAE,SAAS,OAAO;IAAkB,SAAS,OAAO;IAAS,SAAS,OAAO;GAAQ;EAC9F;CACF;CACA,MAAM,KAAK,OAAO;CAClB,MAAM,QAAQ,aAAa,KAAK;AAClC;AAEA,SAAS,oBAAoB,OAA+C;CAC1E,OAAO,UAAU,KAAA,KAAa,MAAM,SAAS;AAC/C;AAIA,SAAS,gBAAgB,MAAgE;CACvF,MAAM,SAAS;CAKf,OAAO;EACL,MAAM,OAAO;EACb,aAAa,OAAO;EACpB,GAAI,OAAO,kBAAkB,cAAc,OAAO,kBAAkB,eAChE,EAAE,eAAe,OAAO,cAAc,IACtC,CAAC;EACL,OAAO,WAAW,OAAO,KAAK,QAAQ,KAAK;EAC3C,YAAY,KAAK;EACjB,GAAI,sBAAsB,QAAQ,OAAO,KAAK,qBAAqB,aAC/D,EAAE,mBAAmB,SAAkB,KAAK,iBAAkB,IAAI,EAAW,IAC7E,CAAC;EACL,MAAM,QAAQ,YAAY,YAAY,UAAU,cAAc,aAAa,SAAS;GAClF,MAAM,UAAU,KAAK;GAMrB,MAAM,SAAS,MAAM,QACnB,YACA,YACA,QAAQ,eAAe,IAAI,gBAAgB,CAAC,CAAC,SAC5C,YAAY,SAAS;IAAE,SAAS,QAAQ;IAAkB,SAAS,QAAQ;GAAQ,CAAC,CACvF;GACA,IAAI,OAAO,SAAS;IAClB,MAAM,UAAU,OAAO;IACvB,MAAM,IAAI,MACR,QACG,QAAQ,SAAS,KAAK,SAAS,MAAM,CAAC,CACtC,KAAK,SAAS,KAAK,IAAI,CAAC,CACxB,KAAK,IAAI,KAAK,kBACnB;GACF;GACA,OAAO;IAAE,SAAS,OAAO;IAAkB,SAAS,OAAO;GAAQ;EACrE;CACF;AACF;;AAKA,SAAgB,mCACd,SACA,gBACA,mBAAmB,MAC8D;CACjF,MAAM,cAAc;EAClB,GAAI,oBAAoB,QAAQ,UAAU,IAAI,CAAC,YAAY,IAAI,CAAC;EAChE,GAAI,oBAAoB,QAAQ,sBAAsB,IAAI,CAAC,wBAAwB,IAAI,CAAC;EACxF,GAAI,oBAAoB,QAAQ,mBAAmB,uBAAuB,IAAI,CAAC,yBAAyB,IAAI,CAAC;CAC/G;CACA,IAAI,YAAY,SAAS,GACvB,MAAM,IAAI,MACR,4EAA4E,YAAY,KAAK,IAAI,GACnG;CAGF,MAAM,YAAY,CAAC,GAAG,IAAI,IAAI,QAAQ,SAAS,OAAO,KAAK,qBAAqB,CAAC,CAAC;CAClF,MAAM,WAAW,IAAI,IAAI,QAAQ,gBAAgB,CAAC,CAAC;CACnD,MAAM,UAAU,QAAQ;CACxB,MAAM,UAAU,SAAS;CACzB,MAAM,SAAS,SAAiB,SAAS,SAAS,SAAS;CAC3D,MAAM,YACH,YAAY,KAAA,KAAa,QAAQ,kBAAkB,QACnD,YAAY,KAAA,KAAa,QAAQ,OAAO,SAAS,OAAO,OAAO,uBAAuB,IAAI,CAAC,KAC5F,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,KAAK;CAC1B,MAAM,WACJ,CAAC,cACA,UAAU,KAAK,KAAK,KACnB,oBAAoB,QAAQ,cAAc,KAC1C,UAAU,MAAM,SAAS,CAAC,OAAO,OAAO,uBAAuB,IAAI,CAAC;CACxE,MAAM,WAAW,WAAW,iBAAiB,IAAI,KAAA;CACjD,MAAM,UAAU,UAAU;CAC1B,MAAM,WAAW,SAAS,SAAS,KAAK,CAAC;CACzC,MAAM,UAAU,WACd,IAAI,IAAI,OAAO,SAAS,SAAU,MAAM,IAAI,IAAI,SAAS,KAAK,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAE,CAAC;CAC9F,MAAM,SAAS,YAAY,KAAA,IAAY,KAAA,IAAY,OAAO,OAAO;CACjE,MAAM,SAAS,OAAO,CAAC,GAAG,QAAQ,CAAC;CACnC,MAAM,WAAW,OAAO,SAAS;CACjC,IAAI,QAAQ,gBAAgB,QAAQ;EAClC,MAAM,YAAY,IAAI,IAAI,SAAS,iBAAiB,QAAQ,cAAc,KAAK,CAAC,CAAC;EACjF,KAAK,MAAM,QAAQ,UACjB,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,GAAG,SAAS,OAAO,KAAK,IAAI;OACnD,IAAI,QAAQ,UAAU,KAAA,GAAW,SAAS,IAAI,KAAK,IAAI;CAEhE;CACA,MAAM,cAAc,UAAU,QAC3B,SACC,OAAO,OAAO,uBAAuB,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,MAAM,WAAW,KAAA,KAAa,OAAO,IAAI,IAAI,EAC/G;CACA,MAAM,SAAS,YACX,CAAC,IACD,SAAS,QACN,SAAS,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,IAAI,MAAM,WAAW,KAAA,KAAa,OAAO,IAAI,KAAK,IAAI,EAC9G;CACJ,MAAM,UAAU,UAAU,QACvB,SACC,CAAC,OAAO,OAAO,uBAAuB,IAAI,KAC1C,CAAC,MAAM,IAAI,KACX,CAAC,SAAS,MAAM,SAAS,KAAK,SAAS,IAAI,KAC3C,CAAC,OAAO,IAAI,IAAI,MACf,WAAW,KAAA,KAAa,OAAO,IAAI,IAAI,EAC5C;CACA,IAAI,QAAQ,SAAS,KAAK,kBACxB,MAAM,IAAI,MAAM,gEAAgE,QAAQ,KAAK,IAAI,GAAG;CACtG,MAAM,QAAQ,CAAC,GAAG,aAAa,GAAG,OAAO,KAAK,SAAS,KAAK,IAAI,CAAC;CAEjE,MAAM,WADW,SAAS,iBAAiB,CAAC,EAAA,CACnB,QAAQ,SAAU,MAAM,IAAI,IAAI,OAAO,WAAW,IAAI,CAAC,MAAM,SAAS,IAAI,CAAE;CACrG,IAAI,oBAAoB,QAAQ,SAAS,GACvC,MAAM,IAAI,MAAM,uEAAuE,QAAQ,KAAK,IAAI,GAAG;CAC7G,IAAI,oBAAoB,YAAY,CAAC,SACnC,MAAM,IAAI,MAAM,mFAAmF;CAmBrG,OAAO;EACL,OAAA,CAlBA,GAAG,YAAY,KAAK,SAClB,gBACE,sBAAsB,KAA2C,CAAC,QAAQ,GAAG,CAC/E,CACF,GACA,GAAG,OAAO,KAAK,SACb,gBAAgB;GACd,GAAG;GACH,QAAQ,YAAY,YAAY,QAAQ,UAAU;IAChD,QAAQ,eAAe;IACvB,IAAI,iBAAiB,MAAM,YAAY,CAAC,SAAS,SAAS,CAAC,CAAC,SAAS,IAAI,GACvE,MAAM,IAAI,MAAM,qDAAqD;IACvE,OAAO,KAAK,QAAQ,YAAY,YAAY,QAAQ,QAAQ;GAC9D;EACF,CAA8B,CAChC,CAGI;EACJ,iBAAiB;EACjB,GAAI,QAAQ,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,QAAQ,aAAa;CACrF;AACF;;AAGA,SAAgB,oBACd,SACA,SACA,SACA,cACY;CACZ,IAAI,QAAQ,sBAAsB,KAAA,KAAa,QAAQ,kBAAkB,kBAAkB,MACzF,aAAa,KAAA;CACf,IAAI,QAAQ,mBAAmB,cAAc,OAAO,SAAS,OAAO,OAAO,uBAAuB,IAAI,CAAC,GACrG,aAAa,KAAA;CACf,IAAI,QAAQ,cAAc,MAAM,SAAS,SAAS,SAAS,SAAS,SAAS,GAAG,aAAa,KAAA;CAC7F,IACE,CAAC,QAAQ,OAAO,MACb,SAAS,SAAS,SAAS,SAAS,aAAa,CAAC,OAAO,OAAO,uBAAuB,IAAI,CAC9F,KACA,CAAC,QAAQ,gBAAgB,QAEzB,aAAa,KAAA;CACf,MAAM,WAAW,aAAa,QAC3B,MAAM,UACL,OAAO,OAAO,uBAAuB,KAAK,IAAI,KAC7C,QAAQ,aAAa,KAAA,KAAa,UAAU,aAAa,SAAS,CACvE;CACA,IAAI,WAAW;CACf,IAAI;CACJ,IAAI;CACJ,IAAI,WAA0C,CAAC;CAC/C,IAAI,UAAU,QAAQ,QAAQ;CAC9B,IAAI;CACJ,MAAM,gBAAgB;EACpB,IAAI,UAAU;EACd,MAAM,UAAU,QAAQ,UAAU;EAClC,MAAM,UAAU,YAAY;EAC5B,IAAI,SAAS;GACX,qBAAqB;GACrB,WAAW;GACX,qBAAqB,UAAU,SAAS,UAAU,OAAO;EAC3D;EACA,MAAM,WAAW,UAAU,SAAS,SAAS,KAAK,CAAC;EACnD,IAAI,CAAC,WAAW,SAAS,WAAW,SAAS,UAAU,SAAS,OAAO,MAAM,UAAU,SAAS,SAAS,MAAM,GAC7G;EACF,WAAW;EAEX,MAAM,UADc,mCAAmC,SAAS,QAAQ,SAAS,KACvD,CAAC,CAAC,SAAS,CAAC,EAAA,CAAG,QAAQ,SAAS,CAAC,OAAO,OAAO,uBAAuB,KAAK,IAAI,CAAC;EAC1G,UAAU,QACP,KAAK,YAAY;GAChB,IAAI,CAAC,UAAU,MAAM,QAAQ,aAAa,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC;EACpE,CAAC,CAAC,CACD,OAAO,UAAmB;GACzB,UAAU;EACZ,CAAC;CACL;CACA,MAAM,sBAAsB,QAAQ,mBAAmB,OAAO;CAC9D,QAAQ;CACR,aAAa;EACX,WAAW;EACX,sBAAsB;EACtB,qBAAqB;EACrB,IAAI,YAAY,KAAA,GAAW,MAAM,IAAI,MAAM,qCAAqC,EAAE,OAAO,QAAQ,CAAC;CACpG;AACF;;AAGA,SAAS,cAAc,SAA4C;CACjE,MAAM,EAAE,UAAU,WAAW,aAAa,cAAc,QAAQ,SAAS,GAAG,SAAS;CACrF,OAAO,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;AACxC;;;;;AAMA,SAAgB,kCACd,SAC6B;CAC7B,MAAM,SAAS,QAAQ;CACvB,MAAM,UAAU;CAEhB,MAAM,yBAAS,IAAI,IAAiC;CACpD,MAAM,0BAAU,IAAI,IAAsE;CAC1F,IAAI,SAAS;CACb,MAAM,gBAAgB,OAAe,mBAA2B;EAC9D,MAAM,SAAS,uBAAuB,OAAO,SAAS,gBAAgB,KAAK;EAC3E,QAAQ,IAAI,OAAO,MAAM;EACzB,OAAO;CACT;CAEA,cAAmB,OAAO,SAAS,OAAO,CAAC,CAAC,MACzC,SAAS;EACR,IAAI,QAAQ;EACZ,KAAK,MAAM,CAAC,OAAO,QAAQ,OAAO,QAAQ,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,GAAG,aAAa,OAAO,IAAI,cAAc;CAClH,SAEM,KAAA,CACR;CACA,MAAM,WAAW,OAAO,UAAkB;EACxC,MAAM,SAAS,QAAQ,IAAI,KAAK;EAChC,IAAI,QAAQ,OAAO;EACnB,MAAM,OAAO,MAAM,cAAc,OAAO,SAAS,OAAO,EAAA,CAAG;EAC3D,OAAO,MAAO,QAAQ,IAAI,KAAK,KAAK,aAAa,OAAO,IAAI,cAAc,IAAK,KAAA;CACjF;CAEA,MAAM,SAAS,OAAO,OAAe,YAAyD;EAC5F,MAAM,iBAAiB,MAAM,qBAAqB,OAAO,SAAS,OAAO,SAAS,OAAO;EACzF,IAAI,mBAAmB,KAAA,GAAW,OAAO,UAAU,cAAc;CACnE;CACA,MAAM,UAAU,4BACd,OAAO,SAAgC,WAA2C;EAChF,QAAQ,eAAe;EACvB,MAAM,YAAY,MAAM,cAAc,OAAO,SAAS,OAAO,EAAA,CAAG,QAAQ;EACxE,IAAI,UAAU,UAAU,MAAM,IAAI,MAAM,cAAc,QAAQ,MAAM,wBAAwB;EAC5F,MAAM,YAAY,aAAa,KAAA;EAE/B,MAAM,uBAAuB,mCAAmC,SAAS,QAAQ,SAAS,CAAC,SAAS;EACpG,MAAM,iBAAiB,yBAAyB,QAAQ,KAAK;EAC7D,MAAM,WAAW,QAAQ,YAAY,gBAAgB;EACrD,IAAI;EACJ,IAAI,CAAC,aAAa,QAAQ,OAAO,SAAS,QAAQ;GAChD,MAAM,UAAU,QAAQ,OAAO,YAAY,MAAM,OAAO,YAAY,EAAA,CAAG,UAAU,KAAA;GAEjF,MAAM,YAAY,YAAY,KAAA,IAAY,MAAa,OAAO,OAAO,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE;GAC9F,IAAI,CAAC,OAAO,cAAc,SAAS,GAAG,MAAM,IAAI,MAAM,4CAA4C;GAClG,SAAS;EACX;EACA,MAAM,EAAE,cAAc,WAAW,WAC7B;GACE,cAAc,MAAM,OAAO,QAAQ,aAAa,SAAS,gBAAkC,OAAO;GAClG,QAAQ;EACV,IACA,MAAM,2BACJ,OAAO,SACP,OAAO,MACP;GAAE,OAAO,QAAQ;GAAO,SAAS,cAAc,OAAO;GAAG,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;EAAG,GACrG,OACF;EACJ,IAAI,CAAC,cAAc,MAAM,IAAI,MAAM,cAAc,QAAQ,MAAM,uBAAuB;EAEtF,IAAI;EACJ,IAAI;EAGJ,MAAM,mBAAoB,UAAU,eAAe,SAAS,QAAQ,QAAQ,SAAS,SAAS,MAAM;EACpG,IAAI;GACF,IAAI,CAAC,WAAW,WAAW;GAC3B,MAAM,cAAwC;IAC5C,WAAW,QAAQ;IACnB,KAAK,QAAQ,OAAO,QAAQ;IAC5B,GAAI,iBAAiB,EAAE,OAAO,eAAe,MAAM,IAAI,CAAC;IACxD,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe,SAAkB;IACrE,GAAG;IACH,aAAa,OAAO,gBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,OAAO,WAAW;IACvF,YAAY,OAAO,gBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,OAAO,WAAW;GACvF;GACA,UAAU,MAAM,OAAO,SAAS,cAAc,WAAW;GACzD,MAAM,gBACJ,SACA,QAAQ,UACP,YAAY,SAAS,CAAC,GACvB,OAAO,cACT;GACA,MAAM,aAAa,oBAAoB,SAAS,SAAS,SAAS,YAAY,SAAS,CAAC,CAAC;GACzF,MAAM,QAAQ,0BAA0B;IACtC;IACA,WAAW,QAAQ;IACnB,aAAa,QAAQ;IACrB,KAAK;GACP,CAAC;GACD,OAAO,IAAI,QAAQ,OAAO,KAAK;GAC/B,MAAM,WAAW,sBAAsB,OAAO,SAAS,cAAc,QAAQ,SAAS;GACtF,QAAQ,IAAI,QAAQ,OAAO,QAAQ;GACnC,OAAO,aAAa,SAAS,OAAO,gBAAgB,UAAU,QAAQ,UAAU,YAAY;IAC1F,IAAI;KACF,WAAW;IACb,UAAU;KACR,IAAI;MACF,IAAI,OAAO,IAAI,QAAQ,KAAK,MAAM,OAAO,OAAO,OAAO,QAAQ,KAAK;MACpE,MAAM,MAAM,QAAQ;KACtB,UAAU;MACR,MAAM,OAAO,QAAQ;KACvB;IACF;GACF,CAAC;EACH,SAAS,OAAO;GACd,MAAM,WAAsB,CAAC,KAAK;GAClC,KAAK,MAAM,WAAW;UACd,OAAO,QAAQ;UACf,SAAS,QAAQ;UACjB,QAAQ,UAAU,UAAU;UAE3B,YAAY,KAAA,IAAY,OAAO,QAAQ,OAAO,EAAE,OAAO,SAAS,CAAC;GAC1E,GACE,IAAI;IACF,MAAM,QAAQ;GAChB,SAAS,cAAc;IACrB,SAAS,KAAK,YAAY;GAC5B;GAEF,IAAI,SAAS,SAAS,GAAG,MAAM,IAAI,eAAe,UAAU,uCAAuC;GACnG,MAAM;EACR;CACF,GACA;EACE,KAAK,QAAQ,OAAO,KAAK;EACzB,OAAO;GACL,MAAM,SAAsC;IAC1C,MAAM,OAA2B,CAAC;IAClC,KAAK,MAAM,OAAO,OAAO,OAAO,MAAM,cAAc,OAAO,SAAS,OAAO,CAAC,GAAG;KAC7E,IAAI,IAAI,YAAY,CAAC,IAAI,SAAS;KAClC,MAAM,UAAU,MAAM,OAAO,QAAQ,QAClC,OAAO,GAAG,oBAAoB,IAAI,gBAAkC,IAAI,cAAc,GACvF,OACF;KACA,KAAK,KAAK;MACR,SAAS,IAAI;MACb,SAAS,SAAS,WAAW,UAAU,SAAS,WAAW;KAC7D,CAAC;IACH;IACA,OAAO;GACT;GACA,cAAc;EAChB;CACF,CACF;CACA,OAAO;EACL,GAAG;EACH,MAAM,mBAAmB,OAAO,SAAS,QAAQ;GAC/C,IAAI,QAAQ,MAAM,IAAI,MAAM,yCAAyC;GACrE,QAAQ,eAAe;GACvB,MAAM,SAAS,MAAM,SAAS,KAAK;GACnC,IAAI,CAAC,QAAQ,MAAM,IAAI,MAAM,cAAc,MAAM,8BAA8B;GAC/E,MAAM,OAAO,MAAM,OAAO,SAAS,MAAM;GACzC,QAAQ,eAAe;GACvB,OAAO;EACT;EACA,MAAM,SAAS,OAAO;GACpB,MAAM,OAAO,MAAM,cAAc,OAAO,SAAS,OAAO,EAAA,CAAG;GAC3D,IAAI,CAAC,KAAK,UAAU,OAAO,KAAA;GAC3B,OAAO;IACL,GAAI,IAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,IAAI,MAAM;IACtD,GAAI,IAAI,SAAS,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK;IACnD,GAAI,IAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,IAAI,MAAM;GACxD;EACF;EACA,OAAO,OAAO;GACZ,MAAM,SAAS,QAAQ,IAAI,KAAK;GAChC,IAAI,CAAC,QAAQ,OAAO,KAAA;GACpB,MAAM,QAAQ,OAAO,IAAI,KAAK,CAAC,EAAE;GACjC,OAAO;IAAE,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;IAAI,oBAAoB;GAAO;EACnE;EACA,MAAM,QAAQ;GACZ,SAAS;GACT,MAAM,QAAQ,MAAM;GACpB,OAAO,MAAM;GACb,QAAQ,MAAM;EAChB;CACF;AACF;AAEA,SAAgB,0CACd,SACqC;CACrC,MAAM,UAAU,kCAAkC,OAAO;CACzD,OAAO;EACL,WAAW;EACX,aAAa,QAAQ,MAAM;CAC7B;AACF"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* The factory is the host boundary: it must construct the direct harness, apply
|
|
6
6
|
* history ownership, and return only after child extensions are composed.
|
|
7
7
|
*/
|
|
8
|
-
function
|
|
8
|
+
function createPoChildSessionService(factory, dependencies) {
|
|
9
9
|
const handles = /* @__PURE__ */ new Map();
|
|
10
|
+
const outcomes = /* @__PURE__ */ new Map();
|
|
10
11
|
const transcriptReaders = /* @__PURE__ */ new Map();
|
|
11
12
|
const claimedRunIds = /* @__PURE__ */ new Set();
|
|
12
13
|
const starting = /* @__PURE__ */ new Set();
|
|
@@ -20,24 +21,29 @@ function createDoomChildSessionService(factory, dependencies) {
|
|
|
20
21
|
const recordCleanupFailure = (error) => {
|
|
21
22
|
cleanupFailures.push(error);
|
|
22
23
|
};
|
|
23
|
-
|
|
24
|
+
const store = dependencies.store;
|
|
25
|
+
const service = {
|
|
24
26
|
start(request, signal) {
|
|
25
|
-
if (closed) return Promise.reject(/* @__PURE__ */ new Error("The
|
|
27
|
+
if (closed) return Promise.reject(/* @__PURE__ */ new Error("The Po child-session service is closed."));
|
|
26
28
|
if (claimedRunIds.has(request.runId)) return Promise.reject(/* @__PURE__ */ new Error(`Child run '${request.runId}' already exists.`));
|
|
27
29
|
claimedRunIds.add(request.runId);
|
|
28
30
|
const pending = (async () => {
|
|
29
31
|
try {
|
|
30
32
|
signal?.throwIfAborted();
|
|
31
|
-
const
|
|
33
|
+
const owned = await createHandle(async (ownedRequest, ownedSignal) => {
|
|
32
34
|
const runtime = await factory(ownedRequest, ownedSignal);
|
|
33
35
|
if (runtime.readTranscriptPage) transcriptReaders.set(request.runId, (pageRequest, pageSignal) => runtime.readTranscriptPage(pageRequest, pageSignal));
|
|
34
36
|
return runtime;
|
|
35
|
-
}, dependencies, request, signal, () =>
|
|
37
|
+
}, dependencies, request, signal, (outcome) => {
|
|
38
|
+
if (outcome) outcomes.set(request.runId, outcome);
|
|
39
|
+
release(request.runId);
|
|
40
|
+
}, recordCleanupFailure);
|
|
41
|
+
const handle = owned.handle;
|
|
36
42
|
if (closed || signal?.aborted) {
|
|
37
43
|
await handle.dispose();
|
|
38
44
|
throw signal?.reason ?? /* @__PURE__ */ new Error("Child session startup was cancelled.");
|
|
39
45
|
}
|
|
40
|
-
if (!isTerminal(handle.state())) handles.set(request.runId,
|
|
46
|
+
if (!isTerminal(handle.state())) handles.set(request.runId, owned);
|
|
41
47
|
return handle;
|
|
42
48
|
} catch (error) {
|
|
43
49
|
transcriptReaders.delete(request.runId);
|
|
@@ -49,9 +55,9 @@ function createDoomChildSessionService(factory, dependencies) {
|
|
|
49
55
|
pending.then(() => starting.delete(pending), () => starting.delete(pending));
|
|
50
56
|
return pending;
|
|
51
57
|
},
|
|
52
|
-
get: (runId) => handles.get(runId),
|
|
58
|
+
get: (runId) => handles.get(runId)?.handle,
|
|
53
59
|
async readTranscriptPage(runId, request, signal) {
|
|
54
|
-
if (closed) throw new Error("The
|
|
60
|
+
if (closed) throw new Error("The Po child-session service is closed.");
|
|
55
61
|
signal?.throwIfAborted();
|
|
56
62
|
const reader = transcriptReaders.get(runId);
|
|
57
63
|
if (!reader) throw new Error(`Child run '${runId}' has no readable transcript.`);
|
|
@@ -59,26 +65,50 @@ function createDoomChildSessionService(factory, dependencies) {
|
|
|
59
65
|
signal?.throwIfAborted();
|
|
60
66
|
return page;
|
|
61
67
|
},
|
|
68
|
+
...store ? {
|
|
69
|
+
stored: () => store.stored(),
|
|
70
|
+
async restore(runId, live) {
|
|
71
|
+
const active = handles.get(runId);
|
|
72
|
+
if (active) return active.handle;
|
|
73
|
+
const run = (await store.stored()).find((stored) => stored.request.runId === runId);
|
|
74
|
+
if (!run) throw new Error(`No stored child run matches '${runId}'.`);
|
|
75
|
+
return service.start({
|
|
76
|
+
...run.request,
|
|
77
|
+
source: { kind: "fresh" },
|
|
78
|
+
environment: {},
|
|
79
|
+
...live?.intercom ? { intercom: live.intercom } : {}
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
async markReported(runId) {
|
|
83
|
+
await store.markReported(runId, outcomes.get(runId));
|
|
84
|
+
outcomes.delete(runId);
|
|
85
|
+
}
|
|
86
|
+
} : {},
|
|
62
87
|
close() {
|
|
63
88
|
closePromise ??= (async () => {
|
|
64
89
|
if (closed) return;
|
|
65
90
|
closed = true;
|
|
66
91
|
await Promise.allSettled(starting);
|
|
67
92
|
const active = [...handles.values()];
|
|
68
|
-
await Promise.allSettled(active.map((
|
|
93
|
+
await Promise.allSettled(active.map((owned) => owned.detach()));
|
|
69
94
|
const failures = [...cleanupFailures];
|
|
70
95
|
handles.clear();
|
|
71
96
|
transcriptReaders.clear();
|
|
72
97
|
claimedRunIds.clear();
|
|
73
|
-
|
|
98
|
+
outcomes.clear();
|
|
99
|
+
if (failures.length) throw new AggregateError(failures, "Po child-session shutdown failed.");
|
|
74
100
|
})();
|
|
75
101
|
return closePromise;
|
|
76
102
|
}
|
|
77
103
|
};
|
|
104
|
+
return service;
|
|
78
105
|
}
|
|
79
106
|
function isTerminal(state) {
|
|
80
107
|
return state === "completed" || state === "failed" || state === "stopped";
|
|
81
108
|
}
|
|
109
|
+
function isAbortError(error) {
|
|
110
|
+
return error instanceof Error && error.name === "AbortError";
|
|
111
|
+
}
|
|
82
112
|
function errorMessage(error) {
|
|
83
113
|
return error instanceof Error ? error.message : typeof error === "string" ? error : "Unknown cleanup failure";
|
|
84
114
|
}
|
|
@@ -96,9 +126,11 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
|
|
|
96
126
|
let cleanupPromise;
|
|
97
127
|
let abortCleanup;
|
|
98
128
|
const listeners = /* @__PURE__ */ new Set();
|
|
99
|
-
const sessionFile = runtime.sessionFile;
|
|
100
129
|
const usageRows = /* @__PURE__ */ new Set();
|
|
130
|
+
const toolCalls = /* @__PURE__ */ new Set();
|
|
101
131
|
let cost;
|
|
132
|
+
let tokens;
|
|
133
|
+
let config = {};
|
|
102
134
|
let usageCleanup;
|
|
103
135
|
const emit = (next, message) => {
|
|
104
136
|
state = next;
|
|
@@ -107,8 +139,10 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
|
|
|
107
139
|
state: next,
|
|
108
140
|
timestamp: dependencies.now(),
|
|
109
141
|
...message ? { message } : {},
|
|
110
|
-
...
|
|
111
|
-
...
|
|
142
|
+
...cost === void 0 ? {} : { cost },
|
|
143
|
+
...tokens === void 0 ? {} : { tokens },
|
|
144
|
+
...toolCalls.size === 0 ? {} : { toolCount: toolCalls.size },
|
|
145
|
+
...config
|
|
112
146
|
};
|
|
113
147
|
lastEvent = event;
|
|
114
148
|
for (const listener of Array.from(listeners)) try {
|
|
@@ -119,7 +153,21 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
|
|
|
119
153
|
if (usageRows.has(usage.rowId) || !Number.isFinite(usage.cost)) return;
|
|
120
154
|
usageRows.add(usage.rowId);
|
|
121
155
|
cost = (cost ?? 0) + usage.cost;
|
|
122
|
-
|
|
156
|
+
if (usage.tokens !== void 0 && Number.isFinite(usage.tokens)) tokens = (tokens ?? 0) + usage.tokens;
|
|
157
|
+
if (!isTerminal(state)) emit("running");
|
|
158
|
+
};
|
|
159
|
+
const onConfig = (next) => {
|
|
160
|
+
config = {
|
|
161
|
+
...config,
|
|
162
|
+
...next.model ? { model: next.model } : {},
|
|
163
|
+
...next.thinking ? { thinking: next.thinking } : {}
|
|
164
|
+
};
|
|
165
|
+
if (!isTerminal(state)) emit("running");
|
|
166
|
+
};
|
|
167
|
+
const onToolStart = (toolCallId) => {
|
|
168
|
+
if (toolCalls.has(toolCallId)) return;
|
|
169
|
+
toolCalls.add(toolCallId);
|
|
170
|
+
if (!isTerminal(state)) emit("running");
|
|
123
171
|
};
|
|
124
172
|
const cleanup = () => {
|
|
125
173
|
cleanupPromise ??= (async () => {
|
|
@@ -149,7 +197,7 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
|
|
|
149
197
|
emit("failed", `Child session cleanup failed: ${detail}`);
|
|
150
198
|
}
|
|
151
199
|
disposed = true;
|
|
152
|
-
onTerminal();
|
|
200
|
+
onTerminal({ state });
|
|
153
201
|
listeners.clear();
|
|
154
202
|
if (cleanupFailure !== void 0) throw cleanupFailure;
|
|
155
203
|
})();
|
|
@@ -157,7 +205,6 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
|
|
|
157
205
|
};
|
|
158
206
|
const handle = {
|
|
159
207
|
runId: request.runId,
|
|
160
|
-
...sessionFile ? { sessionFile } : {},
|
|
161
208
|
state: () => state,
|
|
162
209
|
subscribe(listener) {
|
|
163
210
|
if (disposed || isTerminal(state)) {
|
|
@@ -201,6 +248,20 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
|
|
|
201
248
|
},
|
|
202
249
|
dispose: () => finish("stopped", "Child session disposed.")
|
|
203
250
|
};
|
|
251
|
+
const detach = () => {
|
|
252
|
+
finishPromise ??= (async () => {
|
|
253
|
+
disposed = true;
|
|
254
|
+
listeners.clear();
|
|
255
|
+
try {
|
|
256
|
+
await cleanup();
|
|
257
|
+
} catch (error) {
|
|
258
|
+
onCleanupFailure(error);
|
|
259
|
+
} finally {
|
|
260
|
+
onTerminal();
|
|
261
|
+
}
|
|
262
|
+
})();
|
|
263
|
+
return finishPromise.catch(() => void 0);
|
|
264
|
+
};
|
|
204
265
|
if (signal) {
|
|
205
266
|
const onAbort = () => {
|
|
206
267
|
handle.stop("Child session startup was cancelled.").catch(() => void 0);
|
|
@@ -208,12 +269,25 @@ async function createHandle(factory, dependencies, request, signal, onTerminal,
|
|
|
208
269
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
209
270
|
abortCleanup = () => signal.removeEventListener("abort", onAbort);
|
|
210
271
|
}
|
|
211
|
-
|
|
272
|
+
const unsubscribe = [
|
|
273
|
+
runtime.onUsage?.(onUsage),
|
|
274
|
+
runtime.onConfig?.(onConfig),
|
|
275
|
+
runtime.onToolStart?.(onToolStart)
|
|
276
|
+
];
|
|
277
|
+
usageCleanup = () => {
|
|
278
|
+
for (const stop of unsubscribe) stop?.();
|
|
279
|
+
};
|
|
212
280
|
emit("running");
|
|
213
|
-
Promise.resolve().then(() => runtime.prompt(request.
|
|
214
|
-
|
|
281
|
+
Promise.resolve().then(() => runtime.prompt(request.sender ? {
|
|
282
|
+
text: request.task,
|
|
283
|
+
sender: request.sender
|
|
284
|
+
} : request.task)).then((message) => stopPromise ? void 0 : finish("completed", typeof message === "string" ? message : void 0).catch(() => void 0), (error) => stopPromise ? void 0 : finish(isAbortError(error) ? "stopped" : "failed", error instanceof Error ? error.message : String(error)).catch(() => void 0));
|
|
285
|
+
return {
|
|
286
|
+
handle,
|
|
287
|
+
detach
|
|
288
|
+
};
|
|
215
289
|
}
|
|
216
290
|
//#endregion
|
|
217
|
-
exports.
|
|
291
|
+
exports.createPoChildSessionService = createPoChildSessionService;
|
|
218
292
|
|
|
219
293
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../../../src/systems/child/services/childSession/index.ts"],"sourcesContent":["import type { TranscriptPage, TranscriptPageRequest } from '../../../../schemas/sessionProtocol';\nimport type {\n DoomChildSessionEvent,\n DoomChildSessionHandle,\n DoomChildSessionRequest,\n DoomChildSessionRuntimeFactory,\n DoomChildSessionService,\n DoomChildSessionState,\n DoomChildSessionUsage,\n} from '../../types/childSession';\n\nexport interface DoomChildSessionServiceDependencies {\n readonly now: () => number;\n}\n\n/**\n * Owns lifecycle for runtimes created by a direct host adapter.\n *\n * The factory is the host boundary: it must construct the direct harness, apply\n * history ownership, and return only after child extensions are composed.\n */\nexport function createDoomChildSessionService(\n factory: DoomChildSessionRuntimeFactory,\n dependencies: DoomChildSessionServiceDependencies,\n): DoomChildSessionService {\n const handles = new Map<string, DoomChildSessionHandle>();\n const transcriptReaders = new Map<\n string,\n (request: Omit<TranscriptPageRequest, 'threadId'>, signal?: AbortSignal) => Promise<TranscriptPage>\n >();\n const claimedRunIds = new Set<string>();\n const starting = new Set<Promise<DoomChildSessionHandle>>();\n const cleanupFailures: unknown[] = [];\n let closed = false;\n let closePromise: Promise<void> | undefined;\n\n const release = (runId: string): void => {\n handles.delete(runId);\n if (!transcriptReaders.has(runId)) claimedRunIds.delete(runId);\n };\n const recordCleanupFailure = (error: unknown): void => {\n cleanupFailures.push(error);\n };\n\n const service: DoomChildSessionService = {\n start(request, signal) {\n if (closed) return Promise.reject(new Error('The Doom child-session service is closed.'));\n if (claimedRunIds.has(request.runId))\n return Promise.reject(new Error(`Child run '${request.runId}' already exists.`));\n claimedRunIds.add(request.runId);\n\n const pending = (async (): Promise<DoomChildSessionHandle> => {\n try {\n signal?.throwIfAborted();\n const handle = await createHandle(\n async (ownedRequest, ownedSignal) => {\n const runtime = await factory(ownedRequest, ownedSignal);\n if (runtime.readTranscriptPage)\n transcriptReaders.set(request.runId, (pageRequest, pageSignal) =>\n runtime.readTranscriptPage!(pageRequest, pageSignal),\n );\n return runtime;\n },\n dependencies,\n request,\n signal,\n () => release(request.runId),\n recordCleanupFailure,\n );\n if (closed || signal?.aborted) {\n await handle.dispose();\n throw signal?.reason ?? new Error('Child session startup was cancelled.');\n }\n if (!isTerminal(handle.state())) handles.set(request.runId, handle);\n return handle;\n } catch (error) {\n transcriptReaders.delete(request.runId);\n release(request.runId);\n throw error;\n }\n })();\n starting.add(pending);\n void pending.then(\n () => starting.delete(pending),\n () => starting.delete(pending),\n );\n return pending;\n },\n get: (runId) => handles.get(runId),\n async readTranscriptPage(runId, request, signal) {\n if (closed) throw new Error('The Doom child-session service is closed.');\n signal?.throwIfAborted();\n const reader = transcriptReaders.get(runId);\n if (!reader) throw new Error(`Child run '${runId}' has no readable transcript.`);\n const page = await reader(request, signal);\n signal?.throwIfAborted();\n return page;\n },\n close() {\n closePromise ??= (async () => {\n if (closed) return;\n closed = true;\n await Promise.allSettled(starting);\n const active = [...handles.values()];\n await Promise.allSettled(active.map((handle) => handle.dispose()));\n const failures = [...cleanupFailures];\n handles.clear();\n transcriptReaders.clear();\n claimedRunIds.clear();\n if (failures.length) throw new AggregateError(failures, 'Doom child-session shutdown failed.');\n })();\n return closePromise;\n },\n };\n return service;\n}\n\nfunction isTerminal(state: DoomChildSessionState): boolean {\n return state === 'completed' || state === 'failed' || state === 'stopped';\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : typeof error === 'string' ? error : 'Unknown cleanup failure';\n}\n\nasync function createHandle(\n factory: DoomChildSessionRuntimeFactory,\n dependencies: DoomChildSessionServiceDependencies,\n request: DoomChildSessionRequest,\n signal: AbortSignal | undefined,\n onTerminal: () => void,\n onCleanupFailure: (error: unknown) => void,\n): Promise<DoomChildSessionHandle> {\n const runtime = await factory(request, signal);\n if (signal?.aborted) {\n await runtime.dispose();\n throw signal.reason ?? new Error('Child session startup was cancelled.');\n }\n\n let state: DoomChildSessionState = 'starting';\n let disposed = false;\n let lastEvent: DoomChildSessionEvent | undefined;\n let finishPromise: Promise<void> | undefined;\n let stopPromise: Promise<void> | undefined;\n let cleanupPromise: Promise<void> | undefined;\n let abortCleanup: (() => void) | undefined;\n const listeners = new Set<(event: DoomChildSessionEvent) => void>();\n const sessionFile = runtime.sessionFile;\n const usageRows = new Set<string>();\n let cost: number | undefined;\n let usageCleanup: (() => void) | undefined;\n\n const emit = (next: DoomChildSessionState, message?: string): void => {\n state = next;\n const event: DoomChildSessionEvent = {\n runId: request.runId,\n state: next,\n timestamp: dependencies.now(),\n ...(message ? { message } : {}),\n ...(sessionFile ? { sessionFile } : {}),\n ...(cost === undefined ? {} : { cost }),\n };\n lastEvent = event;\n for (const listener of Array.from(listeners)) {\n try {\n listener(event);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n };\n\n const onUsage = (usage: DoomChildSessionUsage): void => {\n if (usageRows.has(usage.rowId) || !Number.isFinite(usage.cost)) return;\n usageRows.add(usage.rowId);\n cost = (cost ?? 0) + usage.cost;\n emit('running');\n };\n\n const cleanup = (): Promise<void> => {\n cleanupPromise ??= (async () => {\n try {\n await runtime.dispose();\n } finally {\n usageCleanup?.();\n usageCleanup = undefined;\n abortCleanup?.();\n abortCleanup = undefined;\n }\n })();\n return cleanupPromise;\n };\n\n const finish = (\n next: Extract<DoomChildSessionState, 'completed' | 'failed' | 'stopped'>,\n message?: string,\n ): Promise<void> => {\n finishPromise ??= (async () => {\n let cleanupFailure: unknown;\n try {\n await cleanup();\n } catch (error) {\n cleanupFailure = error;\n onCleanupFailure(error);\n }\n if (cleanupFailure === undefined) {\n emit(next, message);\n } else {\n const detail = errorMessage(cleanupFailure);\n emit('failed', `Child session cleanup failed: ${detail}`);\n }\n disposed = true;\n onTerminal();\n listeners.clear();\n if (cleanupFailure !== undefined) throw cleanupFailure;\n })();\n return finishPromise;\n };\n\n const handle: DoomChildSessionHandle = {\n runId: request.runId,\n ...(sessionFile ? { sessionFile } : {}),\n state: () => state,\n subscribe(listener) {\n if (disposed || isTerminal(state)) {\n if (lastEvent) {\n try {\n listener(lastEvent);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n return () => false;\n }\n listeners.add(listener);\n if (lastEvent) {\n try {\n listener(lastEvent);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n return () => listeners.delete(listener);\n },\n async steer(message, steerSignal) {\n if (disposed || finishPromise) throw new Error(`Child run '${request.runId}' is no longer active.`);\n steerSignal?.throwIfAborted();\n await runtime.steer(message);\n steerSignal?.throwIfAborted();\n },\n stop(reason) {\n stopPromise ??= (async () => {\n if (finishPromise) return finishPromise;\n let abortFailure: unknown;\n try {\n await runtime.abort();\n } catch (error) {\n abortFailure = error;\n }\n let finishFailure: unknown;\n try {\n await finish('stopped', reason ?? 'Child session stopped.');\n } catch (error) {\n finishFailure = error;\n }\n if (abortFailure !== undefined && finishFailure !== undefined)\n throw new AggregateError([abortFailure, finishFailure], 'Stopping the child session failed.');\n if (abortFailure !== undefined) throw abortFailure;\n if (finishFailure !== undefined) throw finishFailure;\n })();\n return stopPromise;\n },\n dispose: () => finish('stopped', 'Child session disposed.'),\n };\n\n if (signal) {\n const onAbort = (): void => {\n void handle.stop('Child session startup was cancelled.').catch(() => undefined);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n abortCleanup = () => signal.removeEventListener('abort', onAbort);\n }\n usageCleanup = runtime.onUsage?.(onUsage);\n emit('running');\n void Promise.resolve()\n .then(() => runtime.prompt(request.task))\n .then(\n (message) => finish('completed', typeof message === 'string' ? message : undefined).catch(() => undefined),\n (error: unknown) =>\n finish('failed', error instanceof Error ? error.message : String(error)).catch(() => undefined),\n );\n return handle;\n}\n\nexport type { DoomChildSessionRuntime } from '../../types/childSession';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../../../src/systems/child/services/childSession/index.ts"],"sourcesContent":["import type { TranscriptPage, TranscriptPageRequest } from '../../../../schemas/sessionProtocol';\nimport type {\n PoChildSessionEvent,\n PoChildSessionHandle,\n PoChildSessionRequest,\n PoChildSessionRuntimeFactory,\n PoChildSessionService,\n PoChildSessionState,\n PoChildSessionUsage,\n PoChildSessionConfig,\n PoStoredChildRun,\n} from '../../types/childSession';\n\n/** How a run ended, kept with its stored record once it is reported. */\nexport interface PoChildRunOutcome {\n readonly state: Extract<PoChildSessionState, 'completed' | 'failed' | 'stopped'>;\n}\n\nexport interface PoChildSessionServiceDependencies {\n readonly now: () => number;\n /** The host's stored runs, for re-attaching them after a restart. */\n readonly store?: {\n stored(): Promise<readonly PoStoredChildRun[]>;\n markReported(runId: string, outcome?: PoChildRunOutcome): Promise<void>;\n };\n}\n\n/** A handle and the shutdown path that leaves its run unfinished, so it resumes after a restart. */\ninterface OwnedChildHandle {\n readonly handle: PoChildSessionHandle;\n detach(): Promise<void>;\n}\n\n/**\n * Owns lifecycle for runtimes created by a direct host adapter.\n *\n * The factory is the host boundary: it must construct the direct harness, apply\n * history ownership, and return only after child extensions are composed.\n */\nexport function createPoChildSessionService(\n factory: PoChildSessionRuntimeFactory,\n dependencies: PoChildSessionServiceDependencies,\n): PoChildSessionService {\n const handles = new Map<string, OwnedChildHandle>();\n const outcomes = new Map<string, PoChildRunOutcome>();\n const transcriptReaders = new Map<\n string,\n (request: Omit<TranscriptPageRequest, 'threadId'>, signal?: AbortSignal) => Promise<TranscriptPage>\n >();\n const claimedRunIds = new Set<string>();\n const starting = new Set<Promise<PoChildSessionHandle>>();\n const cleanupFailures: unknown[] = [];\n let closed = false;\n let closePromise: Promise<void> | undefined;\n\n const release = (runId: string): void => {\n handles.delete(runId);\n if (!transcriptReaders.has(runId)) claimedRunIds.delete(runId);\n };\n const recordCleanupFailure = (error: unknown): void => {\n cleanupFailures.push(error);\n };\n const store = dependencies.store;\n\n const service: PoChildSessionService = {\n start(request, signal) {\n if (closed) return Promise.reject(new Error('The Po child-session service is closed.'));\n if (claimedRunIds.has(request.runId))\n return Promise.reject(new Error(`Child run '${request.runId}' already exists.`));\n claimedRunIds.add(request.runId);\n\n const pending = (async (): Promise<PoChildSessionHandle> => {\n try {\n signal?.throwIfAborted();\n const owned = await createHandle(\n async (ownedRequest, ownedSignal) => {\n const runtime = await factory(ownedRequest, ownedSignal);\n if (runtime.readTranscriptPage)\n transcriptReaders.set(request.runId, (pageRequest, pageSignal) =>\n runtime.readTranscriptPage!(pageRequest, pageSignal),\n );\n return runtime;\n },\n dependencies,\n request,\n signal,\n (outcome) => {\n if (outcome) outcomes.set(request.runId, outcome);\n release(request.runId);\n },\n recordCleanupFailure,\n );\n const handle = owned.handle;\n if (closed || signal?.aborted) {\n await handle.dispose();\n throw signal?.reason ?? new Error('Child session startup was cancelled.');\n }\n if (!isTerminal(handle.state())) handles.set(request.runId, owned);\n return handle;\n } catch (error) {\n transcriptReaders.delete(request.runId);\n release(request.runId);\n throw error;\n }\n })();\n starting.add(pending);\n void pending.then(\n () => starting.delete(pending),\n () => starting.delete(pending),\n );\n return pending;\n },\n get: (runId) => handles.get(runId)?.handle,\n async readTranscriptPage(runId, request, signal) {\n if (closed) throw new Error('The Po child-session service is closed.');\n signal?.throwIfAborted();\n const reader = transcriptReaders.get(runId);\n if (!reader) throw new Error(`Child run '${runId}' has no readable transcript.`);\n const page = await reader(request, signal);\n signal?.throwIfAborted();\n return page;\n },\n ...(store\n ? {\n stored: () => store.stored(),\n async restore(runId, live) {\n const active = handles.get(runId);\n if (active) return active.handle;\n const run = (await store.stored()).find((stored) => stored.request.runId === runId);\n if (!run) throw new Error(`No stored child run matches '${runId}'.`);\n // The host recognises a stored run ID and re-attaches its conversation instead of creating one.\n return service.start({\n ...run.request,\n source: { kind: 'fresh' },\n environment: {},\n ...(live?.intercom ? { intercom: live.intercom } : {}),\n });\n },\n async markReported(runId: string) {\n await store.markReported(runId, outcomes.get(runId));\n outcomes.delete(runId);\n },\n }\n : {}),\n close() {\n closePromise ??= (async () => {\n if (closed) return;\n closed = true;\n await Promise.allSettled(starting);\n // Shutdown is not an outcome: a running child detaches without reporting and resumes after a restart.\n const active = [...handles.values()];\n await Promise.allSettled(active.map((owned) => owned.detach()));\n const failures = [...cleanupFailures];\n handles.clear();\n transcriptReaders.clear();\n claimedRunIds.clear();\n outcomes.clear();\n if (failures.length) throw new AggregateError(failures, 'Po child-session shutdown failed.');\n })();\n return closePromise;\n },\n };\n return service;\n}\n\nfunction isTerminal(state: PoChildSessionState): boolean {\n return state === 'completed' || state === 'failed' || state === 'stopped';\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : typeof error === 'string' ? error : 'Unknown cleanup failure';\n}\n\nasync function createHandle(\n factory: PoChildSessionRuntimeFactory,\n dependencies: PoChildSessionServiceDependencies,\n request: PoChildSessionRequest,\n signal: AbortSignal | undefined,\n onTerminal: (outcome?: PoChildRunOutcome) => void,\n onCleanupFailure: (error: unknown) => void,\n): Promise<OwnedChildHandle> {\n const runtime = await factory(request, signal);\n if (signal?.aborted) {\n await runtime.dispose();\n throw signal.reason ?? new Error('Child session startup was cancelled.');\n }\n\n let state: PoChildSessionState = 'starting';\n let disposed = false;\n let lastEvent: PoChildSessionEvent | undefined;\n let finishPromise: Promise<void> | undefined;\n let stopPromise: Promise<void> | undefined;\n let cleanupPromise: Promise<void> | undefined;\n let abortCleanup: (() => void) | undefined;\n const listeners = new Set<(event: PoChildSessionEvent) => void>();\n const usageRows = new Set<string>();\n const toolCalls = new Set<string>();\n let cost: number | undefined;\n let tokens: number | undefined;\n let config: { model?: string; thinking?: string } = {};\n let usageCleanup: (() => void) | undefined;\n\n const emit = (next: PoChildSessionState, message?: string): void => {\n state = next;\n const event: PoChildSessionEvent = {\n runId: request.runId,\n state: next,\n timestamp: dependencies.now(),\n ...(message ? { message } : {}),\n ...(cost === undefined ? {} : { cost }),\n ...(tokens === undefined ? {} : { tokens }),\n ...(toolCalls.size === 0 ? {} : { toolCount: toolCalls.size }),\n ...config,\n };\n lastEvent = event;\n for (const listener of Array.from(listeners)) {\n try {\n listener(event);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n };\n\n const onUsage = (usage: PoChildSessionUsage): void => {\n if (usageRows.has(usage.rowId) || !Number.isFinite(usage.cost)) return;\n usageRows.add(usage.rowId);\n cost = (cost ?? 0) + usage.cost;\n if (usage.tokens !== undefined && Number.isFinite(usage.tokens)) tokens = (tokens ?? 0) + usage.tokens;\n if (!isTerminal(state)) emit('running');\n };\n const onConfig = (next: PoChildSessionConfig): void => {\n config = {\n ...config,\n ...(next.model ? { model: next.model } : {}),\n ...(next.thinking ? { thinking: next.thinking } : {}),\n };\n if (!isTerminal(state)) emit('running');\n };\n const onToolStart = (toolCallId: string): void => {\n if (toolCalls.has(toolCallId)) return;\n toolCalls.add(toolCallId);\n if (!isTerminal(state)) emit('running');\n };\n\n const cleanup = (): Promise<void> => {\n cleanupPromise ??= (async () => {\n try {\n await runtime.dispose();\n } finally {\n usageCleanup?.();\n usageCleanup = undefined;\n abortCleanup?.();\n abortCleanup = undefined;\n }\n })();\n return cleanupPromise;\n };\n\n const finish = (\n next: Extract<PoChildSessionState, 'completed' | 'failed' | 'stopped'>,\n message?: string,\n ): Promise<void> => {\n finishPromise ??= (async () => {\n let cleanupFailure: unknown;\n try {\n await cleanup();\n } catch (error) {\n cleanupFailure = error;\n onCleanupFailure(error);\n }\n if (cleanupFailure === undefined) {\n emit(next, message);\n } else {\n const detail = errorMessage(cleanupFailure);\n emit('failed', `Child session cleanup failed: ${detail}`);\n }\n disposed = true;\n onTerminal({ state: state as PoChildRunOutcome['state'] });\n listeners.clear();\n if (cleanupFailure !== undefined) throw cleanupFailure;\n })();\n return finishPromise;\n };\n\n const handle: PoChildSessionHandle = {\n runId: request.runId,\n state: () => state,\n subscribe(listener) {\n if (disposed || isTerminal(state)) {\n if (lastEvent) {\n try {\n listener(lastEvent);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n return () => false;\n }\n listeners.add(listener);\n if (lastEvent) {\n try {\n listener(lastEvent);\n } catch {\n // Observers must not fault child ownership.\n }\n }\n return () => listeners.delete(listener);\n },\n async steer(message, steerSignal) {\n if (disposed || finishPromise) throw new Error(`Child run '${request.runId}' is no longer active.`);\n steerSignal?.throwIfAborted();\n await runtime.steer(message);\n steerSignal?.throwIfAborted();\n },\n stop(reason) {\n stopPromise ??= (async () => {\n if (finishPromise) return finishPromise;\n let abortFailure: unknown;\n try {\n await runtime.abort();\n } catch (error) {\n abortFailure = error;\n }\n let finishFailure: unknown;\n try {\n await finish('stopped', reason ?? 'Child session stopped.');\n } catch (error) {\n finishFailure = error;\n }\n if (abortFailure !== undefined && finishFailure !== undefined)\n throw new AggregateError([abortFailure, finishFailure], 'Stopping the child session failed.');\n if (abortFailure !== undefined) throw abortFailure;\n if (finishFailure !== undefined) throw finishFailure;\n })();\n return stopPromise;\n },\n dispose: () => finish('stopped', 'Child session disposed.'),\n };\n // Releases the runtime without a terminal event; a later prompt settlement finds the run finished and stays silent.\n const detach = (): Promise<void> => {\n finishPromise ??= (async () => {\n disposed = true;\n listeners.clear();\n try {\n await cleanup();\n } catch (error) {\n onCleanupFailure(error);\n } finally {\n onTerminal();\n }\n })();\n return finishPromise.catch(() => undefined);\n };\n\n if (signal) {\n const onAbort = (): void => {\n void handle.stop('Child session startup was cancelled.').catch(() => undefined);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n abortCleanup = () => signal.removeEventListener('abort', onAbort);\n }\n const unsubscribe = [runtime.onUsage?.(onUsage), runtime.onConfig?.(onConfig), runtime.onToolStart?.(onToolStart)];\n usageCleanup = () => {\n for (const stop of unsubscribe) stop?.();\n };\n emit('running');\n // A stop settles the prompt as aborted; the stop then reports the run as stopped, not as its prompt ended.\n void Promise.resolve()\n .then(() => runtime.prompt(request.sender ? { text: request.task, sender: request.sender } : request.task))\n .then(\n (message) =>\n stopPromise\n ? undefined\n : finish('completed', typeof message === 'string' ? message : undefined).catch(() => undefined),\n (error: unknown) =>\n stopPromise\n ? undefined\n : // A restored run whose input was aborted before the restart ends as stopped, not failed.\n finish(\n isAbortError(error) ? 'stopped' : 'failed',\n error instanceof Error ? error.message : String(error),\n ).catch(() => undefined),\n );\n return { handle, detach };\n}\n\nexport type { PoChildSessionRuntime } from '../../types/childSession';\n"],"mappings":"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"}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PoChildSessionRuntime, PoChildSessionRuntimeFactory, PoChildSessionService, PoChildSessionState, PoStoredChildRun } from "../../types/childSession.mjs";
|
|
2
2
|
//#region src/systems/child/services/childSession/index.d.ts
|
|
3
|
-
|
|
3
|
+
/** How a run ended, kept with its stored record once it is reported. */
|
|
4
|
+
export interface PoChildRunOutcome {
|
|
5
|
+
readonly state: Extract<PoChildSessionState, 'completed' | 'failed' | 'stopped'>;
|
|
6
|
+
}
|
|
7
|
+
export interface PoChildSessionServiceDependencies {
|
|
4
8
|
readonly now: () => number;
|
|
9
|
+
/** The host's stored runs, for re-attaching them after a restart. */
|
|
10
|
+
readonly store?: {
|
|
11
|
+
stored(): Promise<readonly PoStoredChildRun[]>;
|
|
12
|
+
markReported(runId: string, outcome?: PoChildRunOutcome): Promise<void>;
|
|
13
|
+
};
|
|
5
14
|
}
|
|
6
15
|
/**
|
|
7
16
|
* Owns lifecycle for runtimes created by a direct host adapter.
|
|
@@ -9,6 +18,6 @@ export interface DoomChildSessionServiceDependencies {
|
|
|
9
18
|
* The factory is the host boundary: it must construct the direct harness, apply
|
|
10
19
|
* history ownership, and return only after child extensions are composed.
|
|
11
20
|
*/
|
|
12
|
-
export declare function
|
|
21
|
+
export declare function createPoChildSessionService(factory: PoChildSessionRuntimeFactory, dependencies: PoChildSessionServiceDependencies): PoChildSessionService;
|
|
13
22
|
//#endregion
|
|
14
23
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../../src/systems/child/services/childSession/index.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../../src/systems/child/services/childSession/index.ts"],"mappings":";;;iBAciB;WACN,OAAO,QAAQ;;iBAGT;WACN;;WAEA;IACP,UAAU,iBAAiB;IAC3B,aAAa,eAAe,UAAU,oBAAoB;;;;;;;;;wBAgB9C,4BACd,SAAS,8BACT,cAAc,oCACb"}
|