@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverScope.mjs","names":[],"sources":["../../../src/server/serverScope.ts"],"sourcesContent":["import { Context, type Events, type Fiber, Service } from '@deepseek-ai/cordis';\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\n\nimport { PO_HEADLESS_OWNER, readPoHeadlessHost } from '../schemas/headless';\nimport type { PoApiHandler, PoApiScope } from '../schemas/packageApi';\nimport {\n PO_FS_SERVICE,\n PO_SESSION_STORAGE_SERVICE,\n PO_SHELL_SERVICE,\n PO_SQLITE_SERVICE,\n type PoPlatform,\n} from '../schemas/platform';\nimport type { PoServerBundleEntry } from '../schemas/serverBundle';\nimport { PO_SERVER_HOST_SERVICE, type PoServerHostService, type PoServerPlugin } from '../schemas/serverPlugin';\nimport {\n PO_SERVER_SCOPE_LEVELS,\n PO_SERVER_SCOPE_SERVICE,\n type PoServerPluginShare,\n type PoServerResourceKey,\n type PoServerResourceLease,\n type PoServerScopeService,\n type PoServiceContract,\n} from '../schemas/serverScope';\nimport { PO_SESSION_FILES_SERVICE, PO_SESSION_TEMP_DIR } from '../services/sessionFiles';\nimport { LIVE_FACTORY_TIMEOUT_MS, withTimeout } from './liveImport';\nimport type { LoadedServerPackage } from './serverPackages';\n\ninterface Binding {\n readonly name: string;\n readonly value: unknown;\n}\n\ninterface InstalledPackage {\n readonly plugin: PoServerPlugin;\n readonly declaration?: PoServerBundleEntry;\n readonly fiber: Fiber;\n}\n\n/** One shared value, how many levels hold it, and how its creator said to dispose it. */\ninterface SharedValue {\n readonly value: Promise<unknown>;\n holders: number;\n readonly disposeValue: ((value: unknown) => void | Promise<void>) | undefined;\n}\n\n/** What one plugin build shares in one tree: its keyed values, and what each scope running it holds. */\nclass PluginShare {\n readonly values = new Map<string, SharedValue>();\n readonly running = new Map<PoServerScope, unknown>();\n\n get idle(): boolean {\n return this.values.size === 0 && this.running.size === 0;\n }\n}\n\nconst resourceName = (key: PoServerResourceKey): string => JSON.stringify(typeof key === 'string' ? [key] : key);\n/** What a scope's owner publishes for the packages installed at its level. */\nexport interface PoServerScopeHost {\n /**\n * The level's mount table. A host that also routes requests (`createPoServerHost` does) answers\n * API requests for this level and every level below it that does not serve the API itself.\n */\n readonly host: PoServerHostService & { handlerFor?(basePath: string): PoApiHandler | undefined };\n /** Host capabilities published as `po/fs`, `po/shell`, `po/sqlite` and `po/session-storage`. */\n readonly platform: PoPlatform;\n}\n\nexport interface PoServerPackageSettledReport {\n readonly packageName: string;\n readonly durationMs: number;\n readonly outcome: 'installed' | 'failed' | 'timed_out';\n}\n\nexport interface PoServerInstallOptions {\n readonly onNotice?: (message: string) => void;\n /** Bound on each package's `apply`; defaults to `LIVE_FACTORY_TIMEOUT_MS`. */\n readonly factoryTimeoutMs?: number;\n /** Reports how long each package's `apply` took and how it ended, for telemetry. */\n readonly onPackageSettled?: (report: PoServerPackageSettledReport) => void;\n}\n\nconst depth = (level: PoApiScope): number => PO_SERVER_SCOPE_LEVELS.indexOf(level);\n\nconst describe = (error: unknown): string => (error instanceof Error ? error.message : String(error));\n\n/** Publishes one binding as a native service of the root it is plugged into. */\nfunction bindingProvider(context: Context, binding: Binding): void {\n context.provide(binding.name, binding.value);\n}\n\n/**\n * The scope service each root publishes.\n *\n * Cordis traceable services rebind `ctx` to the caller, so a binding made through\n * `provide` unwinds with the plugin that made it.\n */\nclass ScopeService extends Service<PoServerScopeService> implements PoServerScopeService {\n readonly level: PoApiScope;\n\n constructor(\n ctx: Context,\n private readonly scope: PoServerScope,\n ) {\n super(ctx, PO_SERVER_SCOPE_SERVICE);\n this.level = scope.level;\n }\n\n async provide<T>(contract: PoServiceContract<T>, value: T): Promise<() => Promise<void>> {\n return await this.ctx.effect(() => this.scope.bind(contract, value), `po scope provide ${contract.name}`);\n }\n\n resolve<T>(contract: PoServiceContract<T>): T | undefined {\n return this.scope.resolve(contract);\n }\n\n emit<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void {\n this.scope.emit(name, ...args);\n }\n\n broadcast<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void {\n this.scope.broadcast(name, ...args);\n }\n\n plugin<TRoots>(owner: object): PoServerPluginShare<TRoots> {\n return this.scope.share<TRoots>(owner);\n }\n}\n\n/**\n * Binds registrations to the Cordis fiber that calls the host service.\n *\n * The host itself is shared by every package at its level, but Cordis traceable\n * services rebind `ctx` to the caller. That lets a package's registration unwind\n * even when `apply` throws before it can return its disposer.\n */\nclass ScopedPoServerHost extends Service<PoServerHostService> implements PoServerHostService {\n readonly scope: PoServerHostService['scope'];\n readonly context: PoServerHostService['context'];\n\n constructor(\n ctx: Context,\n private readonly host: PoServerHostService,\n ) {\n super(ctx, PO_SERVER_HOST_SERVICE);\n this.scope = host.scope;\n this.context = host.context;\n }\n\n registerApi(api: Parameters<PoServerHostService['registerApi']>[0]) {\n const headless = this.scope === 'session' ? readPoHeadlessHost(this.ctx) : undefined;\n if (headless) {\n const activity = headless.registerActivity({\n name: `api:${api.basePath}`,\n start: () => {\n const registration = this.host.registerApi(api);\n if (registration.mounted !== true) {\n registration.dispose();\n throw new Error(`package API '${api.basePath}' did not mount.`);\n }\n return () => {\n registration.dispose();\n };\n },\n });\n return {\n mounted: true,\n dispose: () => activity.dispose(),\n };\n }\n const registration = this.host.registerApi(api);\n if (registration.mounted !== true) {\n registration.dispose();\n throw new Error(`package API '${api.basePath}' did not mount.`);\n }\n this.ctx.effect(() => () => registration.dispose(), 'server package API registration');\n return registration;\n }\n\n registerChannel(channel: Parameters<PoServerHostService['registerChannel']>[0]) {\n const registration = this.host.registerChannel(channel);\n if (registration.mounted !== true) {\n registration.dispose();\n throw new Error(`hub channel '${channel.frameType}' did not mount.`);\n }\n this.ctx.effect(() => () => registration.dispose(), 'server package channel registration');\n return registration;\n }\n\n registerMethod: PoServerHostService['registerMethod'] = (definition, handler) => {\n const registration = this.host.registerMethod(definition, handler);\n if (registration.mounted !== true) {\n registration.dispose();\n throw new Error(`plugin method '${definition.service}.${definition.method}' did not mount.`);\n }\n this.ctx.effect(() => () => registration.dispose(), 'server package method registration');\n return registration;\n };\n\n mounted(): readonly string[] {\n return this.host.mounted();\n }\n\n mountedChannels(): readonly string[] {\n return this.host.mountedChannels();\n }\n}\n\n/** Publishes the host service from inside a root-level plugin, so it unwinds with the scope. */\nfunction serverHostProvider(context: Context, host: PoServerHostService): void {\n new ScopedPoServerHost(context, host);\n}\n\n/** Publishes the platform services from inside a root-level plugin, so they unwind with the scope. */\nfunction platformProvider(\n context: Context,\n input: { platform: PoPlatform; cwd: string; temporaryDirectory?: string },\n): void {\n const env = input.platform.env(input.cwd);\n context.provide(PO_FS_SERVICE, env);\n context.provide(PO_SHELL_SERVICE, env);\n context.provide(PO_SQLITE_SERVICE, input.platform.sqlite);\n context.provide(PO_SESSION_STORAGE_SERVICE, input.platform.sessions);\n if (input.temporaryDirectory !== undefined)\n context.provide(PO_SESSION_FILES_SERVICE, { temporaryDirectory: input.temporaryDirectory });\n context.effect(() => () => env.cleanup(BACKGROUND_CONTEXT), 'platform execution env');\n}\n\n/**\n * One level of the server IoC tree: its own cordis root, a parent link, the contracts bound here,\n * and the packages installed here.\n *\n * Separate roots rather than one shared root, because cordis re-checks every fiber of a root on each\n * service change; a hundred sessions in one root would make every change scan all of them. A binding\n * is instead mirrored into each descendant root as a native service, so a plugin injects an outer\n * level's service exactly as it injects its own.\n */\nexport class PoServerScope {\n readonly root = new Context();\n private readonly children = new Set<PoServerScope>();\n private readonly bound = new Map<string, Binding>();\n private readonly mirrors = new Map<Binding, Fiber>();\n private readonly installed = new Map<string, InstalledPackage>();\n private installs: Promise<void> = Promise.resolve();\n /** Set once a package's apply never settled, to the bound it overran; its fiber may never finish disposing. */\n private abandonedTimeoutMs: number | undefined;\n private notice: (message: string) => void = () => undefined;\n private disposing: Promise<void> | undefined;\n /** The served mount table, read when a request routes through this level. */\n private router: PoServerScopeHost['host'] | undefined;\n /** Kept by the outermost scope only: what each plugin build shares across the whole tree. */\n private readonly shares = new Map<object, PluginShare>();\n\n private constructor(\n readonly level: PoApiScope,\n readonly parent: PoServerScope | undefined,\n ) {}\n\n /** Opens a scope below `parent`, with every binding visible from its ancestors already published. */\n static async open(level: PoApiScope, parent?: PoServerScope): Promise<PoServerScope> {\n if (parent?.disposing !== undefined) throw new Error(`The ${parent.level} scope is disposed.`);\n if (parent !== undefined && depth(level) <= depth(parent.level))\n throw new Error(`A ${level} scope cannot open below a ${parent.level} scope.`);\n const scope = new PoServerScope(level, parent);\n parent?.children.add(scope);\n try {\n await scope.root.plugin(ScopeService, scope);\n await Promise.all((parent?.visible() ?? []).map((binding) => scope.mirror(binding)));\n } catch (error) {\n await scope.dispose();\n throw error;\n }\n return scope;\n }\n\n get disposed(): boolean {\n return this.disposing !== undefined;\n }\n\n /**\n * Publishes what every package at this level reads: the owner's mount table as `po/server-host`,\n * and the platform services. They stay for the life of the scope; the owner still disposes the\n * mount table it handed in.\n */\n async serve(input: PoServerScopeHost): Promise<void> {\n if (this.disposed) throw new Error(`The ${this.level} scope is disposed.`);\n if (input.host.scope !== this.level)\n throw new Error(`A ${input.host.scope} host cannot serve a ${this.level} scope.`);\n await this.root.plugin(serverHostProvider, input.host);\n this.router = input.host;\n // Published callers may hand a host without context (the packed authoring check does), so read it defensively.\n const hostContext = input.host.context as Partial<PoServerHostService['context']> | undefined;\n const cwd = hostContext?.cwd ?? hostContext?.workspaceRoot ?? input.platform.homeDirectory;\n await this.root.plugin(platformProvider, {\n platform: input.platform,\n cwd,\n temporaryDirectory: this.level === 'session' ? hostContext?.environment?.[PO_SESSION_TEMP_DIR] : undefined,\n });\n }\n\n /**\n * Installs packages at this level, each as its own fiber in this root, one at a time.\n *\n * Installation only adds. A package installed from the same build (the same plugin object) is\n * skipped. One whose build changed is disposed and the new build applied; when that fails, the\n * previous build is applied again. A package missing from `packages` stays installed, because\n * which packages a session runs is its own composition's choice. Installs into one scope run one\n * at a time. Resolves with every package installed here, in install order.\n */\n install(\n packages: readonly (PoServerPlugin | LoadedServerPackage)[],\n options: PoServerInstallOptions = {},\n ): Promise<readonly string[]> {\n const run = this.installs.then(() => this.installAll(packages, options));\n this.installs = run.then(\n () => undefined,\n () => undefined,\n );\n return run;\n }\n\n /**\n * Binds a contract owned by this level here and in every descendant, including ones opened later.\n * Settles once every descendant root publishes it. Hosts call this directly; plugins go through\n * the scope service so the binding follows their fiber.\n */\n async bind<T>(contract: PoServiceContract<T>, value: T): Promise<() => Promise<void>> {\n if (this.disposed) throw new Error(`The ${this.level} scope is disposed.`);\n if (contract.scope !== this.level)\n throw new Error(\n `Contract '${contract.name}' belongs to the ${contract.scope} scope and cannot be provided from the ${this.level} scope.`,\n );\n if (this.bound.has(contract.name))\n throw new Error(`Contract '${contract.name}' is already provided in this ${this.level} scope.`);\n const binding: Binding = { name: contract.name, value };\n this.bound.set(contract.name, binding);\n const withdraw = async (): Promise<void> => {\n if (this.bound.get(contract.name) !== binding) return;\n this.bound.delete(contract.name);\n await Promise.all([...this.subtree()].map((scope) => scope.unmirror(binding)));\n };\n try {\n await Promise.all([...this.subtree()].map((scope) => scope.mirror(binding)));\n } catch (error) {\n await withdraw();\n throw error;\n }\n return withdraw;\n }\n\n resolve<T>(contract: PoServiceContract<T>): T | undefined {\n if (depth(contract.scope) > depth(this.level))\n throw new Error(`A ${this.level} scope cannot see the ${contract.scope} contract '${contract.name}'.`);\n for (const scope of this.ancestry()) {\n if (scope.level === contract.scope) return scope.bound.get(contract.name)?.value as T | undefined;\n }\n return undefined;\n }\n\n /**\n * The handler for an API, from this level or the nearest one above it that serves it. An API\n * declared at a level reaches every level below it, and a level that runs a package from an outer\n * level leaves that level's root-bound APIs to it; a level that declares the API itself wins.\n */\n apiHandler(basePath: string): PoApiHandler | undefined {\n for (const scope of this.ancestry()) {\n const handler = scope.router?.handlerFor?.(basePath);\n if (handler !== undefined) return handler;\n }\n return undefined;\n }\n\n emit<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void {\n deliver([...this.ancestry()], name, args);\n }\n\n broadcast<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void {\n deliver([...this.subtree()], name, args);\n }\n\n /**\n * Disposes descendants first, then the packages installed here in reverse install order, then\n * this root; a binding made here unwinds with its provider.\n */\n dispose(): Promise<void> {\n this.disposing ??= (async () => {\n await Promise.all([...this.children].map((child) => child.dispose()));\n this.parent?.children.delete(this);\n this.mirrors.clear();\n this.router = undefined;\n const packages = [...this.installed.values()].reverse();\n this.installed.clear();\n for (const { fiber } of packages) await fiber.dispose();\n const disposal = this.root.fiber.dispose();\n if (this.abandonedTimeoutMs === undefined) return await disposal;\n // An abandoned apply holds its fiber open, so teardown is bounded rather than left to hang.\n await withTimeout(disposal, this.abandonedTimeoutMs, `${this.level} scope dispose`).catch((error: unknown) =>\n this.notice(describe(error)),\n );\n })().finally(async () => {\n // What a level never released, such as a value an abandoned apply held, goes with the tree.\n if (this.parent === undefined) await this.disposeShares();\n });\n return this.disposing;\n }\n\n /**\n * What the plugin build `owner` shares in this tree, seen from this scope. The outermost scope keeps\n * one store per build, so every level of one hub sees the same values and no two hubs ever do.\n */\n share<TRoots>(owner: object): PoServerPluginShare<TRoots> {\n const top = this.outermost();\n const storeOf = (): PluginShare => {\n let store = top.shares.get(owner);\n if (store === undefined) {\n store = new PluginShare();\n top.shares.set(owner, store);\n }\n return store;\n };\n // An idle store is dropped, so builds a reload replaced do not accumulate.\n const settle = (store: PluginShare): void => {\n if (store.idle && top.shares.get(owner) === store) top.shares.delete(owner);\n };\n return {\n acquire: async <T>(\n key: PoServerResourceKey,\n create: () => T | Promise<T>,\n dispose?: (value: T) => void | Promise<void>,\n ): Promise<PoServerResourceLease<T>> => {\n if (this.disposed) throw new Error(`The ${this.level} scope is disposed.`);\n const store = storeOf();\n const name = resourceName(key);\n let shared = store.values.get(name);\n if (shared === undefined) {\n const created: SharedValue = {\n value: Promise.resolve().then(create),\n holders: 0,\n disposeValue: dispose === undefined ? undefined : (value) => dispose(value as T),\n };\n store.values.set(name, created);\n // A value that could not be created is not kept, so the next acquire creates it again.\n created.value.catch(() => {\n if (store.values.get(name) === created) store.values.delete(name);\n settle(store);\n });\n shared = created;\n }\n const held = shared;\n held.holders += 1;\n let value: unknown;\n try {\n value = await held.value;\n } catch (error) {\n held.holders -= 1;\n throw error;\n }\n let released = false;\n return {\n value: value as T,\n release: async () => {\n if (released) return;\n released = true;\n held.holders -= 1;\n if (held.holders > 0 || store.values.get(name) !== held) return;\n store.values.delete(name);\n settle(store);\n await held.disposeValue?.(value);\n },\n };\n },\n run: (roots) => {\n if (this.disposed) throw new Error(`The ${this.level} scope is disposed.`);\n const store = storeOf();\n store.running.set(this, roots);\n return () => {\n if (store.running.get(this) === roots) store.running.delete(this);\n settle(store);\n };\n },\n outer: (from) => {\n const store = top.shares.get(owner);\n if (store === undefined) return [];\n const held: TRoots[] = [];\n for (const scope of this.parent?.ancestry() ?? []) {\n if (depth(scope.level) >= depth(from) && store.running.has(scope))\n held.push(store.running.get(scope) as TRoots);\n }\n return held;\n },\n };\n }\n\n private async installAll(\n packages: readonly (PoServerPlugin | LoadedServerPackage)[],\n options: PoServerInstallOptions,\n ): Promise<readonly string[]> {\n if (this.disposed) throw new Error(`The ${this.level} scope is disposed.`);\n const notice = options.onNotice ?? ((): void => {});\n this.notice = notice;\n if (\n packages.some((candidate) => 'retained' in candidate && candidate.retained === true) &&\n !readPoHeadlessHost(this.root)\n )\n throw new Error('Retained server candidates require a gated headless host');\n for (const candidate of packages) {\n const plugin = 'declaration' in candidate ? candidate.plugin : candidate;\n const declaration = 'declaration' in candidate ? candidate.declaration : undefined;\n const name = declaration?.packageName ?? plugin.name;\n const previous = this.installed.get(name);\n if (previous?.plugin === plugin) continue;\n if (previous !== undefined) {\n this.installed.delete(name);\n await previous.fiber.dispose();\n }\n try {\n const fiber = await this.apply(name, plugin, declaration, options);\n this.installed.set(name, { plugin, ...(declaration === undefined ? {} : { declaration }), fiber });\n } catch (error) {\n const message = `server package '${name}' did not install (${describe(error)})`;\n if (previous !== undefined) {\n await this.restore(name, previous, options, message);\n continue;\n }\n if (\n declaration?.required === true &&\n !('initiallyEligible' in candidate && candidate.initiallyEligible === false)\n )\n throw new Error(message, { cause: error });\n notice(message);\n }\n }\n // A level waiting for a contract that nothing at it or above it provides would never mount, silently.\n for (const candidate of packages) {\n const plugin = 'declaration' in candidate ? candidate.plugin : candidate;\n const name = ('declaration' in candidate ? candidate.declaration.packageName : undefined) ?? plugin.name;\n if (this.installed.get(name)?.plugin !== plugin) continue;\n for (const contract of plugin.injects?.[this.level] ?? []) {\n // An inner level's contract is never visible here; defineServerPlugin refuses one, a raw plugin may not.\n const missing = depth(contract.scope) > depth(this.level) || this.resolve(contract) === undefined;\n if (missing)\n notice(\n `server package '${name}' waits for contract '${contract.name}', which no ${contract.scope} package provides.`,\n );\n }\n }\n return [...this.installed.keys()];\n }\n\n /** Applies a replaced package's previous build again after its new build failed. */\n private async restore(\n name: string,\n previous: InstalledPackage,\n options: PoServerInstallOptions,\n message: string,\n ): Promise<void> {\n try {\n const fiber = await this.apply(name, previous.plugin, previous.declaration, options);\n this.installed.set(name, { ...previous, fiber });\n this.notice(`${message}; its previous build is restored.`);\n } catch (rollbackError) {\n this.notice(`${message}; its previous build could not be restored (${describe(rollbackError)}).`);\n }\n }\n\n /** Applies one package as its own fiber, bounded by the factory timeout, and reports how it settled. */\n private async apply(\n name: string,\n plugin: PoServerPlugin,\n declaration: PoServerBundleEntry | undefined,\n options: PoServerInstallOptions,\n ): Promise<Fiber> {\n const startedAt = Date.now();\n const timeoutMs = options.factoryTimeoutMs ?? LIVE_FACTORY_TIMEOUT_MS;\n const settled = (outcome: PoServerPackageSettledReport['outcome']): void =>\n options.onPackageSettled?.({ packageName: name, durationMs: Date.now() - startedAt, outcome });\n let fiber: Fiber | undefined;\n let applySettled = false;\n try {\n const owner = declaration ? this.root.extend({ [PO_HEADLESS_OWNER]: declaration }) : this.root;\n fiber = owner.plugin(plugin);\n const applied = fiber.await();\n const markSettled = (): void => {\n applySettled = true;\n };\n applied.then(markSettled, markSettled);\n await withTimeout(applied, timeoutMs, `server package '${name}' apply`);\n settled('installed');\n return fiber;\n } catch (error) {\n settled(fiber && !applySettled ? 'timed_out' : 'failed');\n if (fiber && !applySettled) {\n this.abandonedTimeoutMs = Math.max(this.abandonedTimeoutMs ?? 0, timeoutMs);\n void fiber\n .dispose()\n .catch((disposeError: unknown) =>\n this.notice(`abandoned server package '${name}' did not dispose (${describe(disposeError)})`),\n );\n } else await fiber?.dispose();\n throw error;\n }\n }\n\n private visible(): Binding[] {\n return [...(this.parent?.visible() ?? []), ...this.bound.values()];\n }\n\n /** This scope, then each parent out to the root. */\n private outermost(): PoServerScope {\n return this.parent === undefined ? this : this.parent.outermost();\n }\n\n /** Disposes every value the tree still holds, newest first; a failure is reported and the rest still go. */\n private async disposeShares(): Promise<void> {\n const values = [...this.shares.values()].flatMap((store) => [...store.values.values()]).reverse();\n this.shares.clear();\n for (const shared of values) {\n try {\n await shared.disposeValue?.(await shared.value);\n } catch (error) {\n this.notice(`a shared server value did not dispose (${describe(error)})`);\n }\n }\n }\n\n private *ancestry(): Generator<PoServerScope> {\n yield this;\n if (this.parent !== undefined) yield* this.parent.ancestry();\n }\n\n private *subtree(): Generator<PoServerScope> {\n if (this.disposed) return;\n yield this;\n for (const child of this.children) yield* child.subtree();\n }\n\n /**\n * Publishes a binding into this root and settles once it is live. Idempotent per binding, since a\n * child opening mid-bind is reached by both `open` and `bind`.\n */\n private async mirror(binding: Binding): Promise<void> {\n if (this.disposed) return;\n let fiber = this.mirrors.get(binding);\n if (fiber === undefined) {\n fiber = this.root.plugin(bindingProvider, binding);\n this.mirrors.set(binding, fiber);\n }\n await fiber.await();\n }\n\n private async unmirror(binding: Binding): Promise<void> {\n const fiber = this.mirrors.get(binding);\n this.mirrors.delete(binding);\n // A disposing root unwinds its own mirrors.\n if (!this.disposed) await fiber?.dispose();\n }\n}\n\n/** Every scope receives the event even when an earlier one's listener throws. */\nfunction deliver(scopes: readonly PoServerScope[], name: keyof Events, args: readonly unknown[]): void {\n const errors: unknown[] = [];\n for (const scope of scopes) {\n if (scope.disposed) continue;\n try {\n scope.root.events.emit(name, ...args);\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length > 0) throw new AggregateError(errors, `${errors.length} scope listener(s) of '${name}' failed.`);\n}\n"],"mappings":"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"}
|
|
@@ -322,7 +322,7 @@ function createSessionMcpHttpHandler(options) {
|
|
|
322
322
|
const advertised = wrapper ? void 0 : grantedSurface(parent.grant, parent.target.toolSurface).tools.find((tool) => tool.name === requested);
|
|
323
323
|
if (!wrapper && !advertised) throw new require_index.SessionMcpConversationError("TOOL_NOT_AVAILABLE", `Tool '${message.params.name}' is not available on this connection.` + (prefix === void 0 ? "" : ` Tool names here start with '${prefix}_'.`) + nextCall("session_capabilities", " for the current list."));
|
|
324
324
|
const transferName = requested === "use_extra_tools" && typeof message.params.arguments?.name === "string" ? sessionMcpInternalName(prefix, message.params.arguments.name) : requested;
|
|
325
|
-
fileTransfer = grantedSurface(parent.grant, parent.target.toolSurface).tools.some((tool) => tool.name === transferName && tool._meta?.["
|
|
325
|
+
fileTransfer = grantedSurface(parent.grant, parent.target.toolSurface).tools.some((tool) => tool.name === transferName && tool._meta?.["po/fileTransfer"] === true);
|
|
326
326
|
publishInvocation();
|
|
327
327
|
widgetTool = advertised;
|
|
328
328
|
const wrapperArgs = wrapper ? toolArguments(requested, message.params.arguments ?? {}, wire) : void 0;
|
|
@@ -403,7 +403,7 @@ function createSessionMcpHttpHandler(options) {
|
|
|
403
403
|
const selected = tools.find((tool) => tool.name === name);
|
|
404
404
|
if (name === void 0 || wrapper && (!extras.some((tool) => tool.name === name) || !selected)) throw new require_index.SessionMcpConversationError("TOOL_NOT_AVAILABLE", `Extra tool '${wrapperArgs?.name ?? message.params.name}' is not available.` + nextCall("load_extra_tools", " and pass a name it returns."));
|
|
405
405
|
if (!wrapper && (!selected || !(0, node_util.isDeepStrictEqual)(selected.parameters, advertised.parameters) || !(0, node_util.isDeepStrictEqual)(selected.outputSchema, advertised.outputSchema) || !(0, node_util.isDeepStrictEqual)(selected.annotations, advertised.annotations) || !(0, node_util.isDeepStrictEqual)(selected._meta, advertised._meta))) throw new require_index.SessionMcpConversationError("SESSION_TOOL_SURFACE_CHANGED", `This tool changed or was removed after your tool list loaded.${nextCall("load_extra_tools", grantedExtraTools(grant).some((tool) => tool.name === "use_extra_tools") ? ", and if it lists the tool, run it with " + wire("use_extra_tools") + "." : ", then refresh the connection to call a returned tool.")}`);
|
|
406
|
-
fileTransfer ||= selected?._meta?.["
|
|
406
|
+
fileTransfer ||= selected?._meta?.["po/fileTransfer"] === true;
|
|
407
407
|
widgetTool = wrapper ? void 0 : selected;
|
|
408
408
|
const recheck = async () => {
|
|
409
409
|
const current = await resolveTarget(false);
|
|
@@ -465,7 +465,7 @@ function createSessionMcpHttpHandler(options) {
|
|
|
465
465
|
});
|
|
466
466
|
} catch (error) {
|
|
467
467
|
if (signal.aborted || error instanceof _modelcontextprotocol_server.ProtocolError || error instanceof require_index.SessionMcpConversationError) throw error;
|
|
468
|
-
if (require_headless.
|
|
468
|
+
if (require_headless.isPoHeadlessToolBusyError(error)) throw new require_index.SessionMcpConversationError("SESSION_BUSY", `The session stayed busy for 30 seconds, so ${wire(name)} did not start. Wait for the current turn to finish, then retry once.`);
|
|
469
469
|
throw new require_index.SessionMcpConversationError("TOOL_CALL_FAILED", `${wire(name)} did not return a result: ${error instanceof Error ? error.message : "unknown error"}. If the tool changes files or state, inspect before retrying.`);
|
|
470
470
|
}
|
|
471
471
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionMcpHandler.cjs","names":["isDeepStrictEqual","SessionMcpConversationError","ProtocolError","ProtocolErrorCode","Server","sessionMcpConversationDigest","randomUUID","isDoomHeadlessToolBusyError","createMcpHandler"],"sources":["../../../src/server/sessionMcpHandler.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport {\n createMcpHandler,\n ProtocolError,\n ProtocolErrorCode,\n Server,\n type CallToolResult,\n type Tool,\n} from '@modelcontextprotocol/server';\n\nimport { isDoomHeadlessToolBusyError } from '../schemas/headless';\nimport type { SessionMcpInvocation } from '../schemas/sessionMcpActivity';\nimport type { SessionMcpAccessGrant, SessionMcpAuthorizationService } from '../services/sessionMcpAuthorization';\nimport { sessionMcpConversationDigest, SessionMcpConversationError } from '../services/sessionMcpConversations';\nimport type { SessionToolDescriptor, SessionToolSurface } from '../types/server/sessionToolSurface';\n\n/** Stable transport tools stay available when a conversation changes its MCP composition. */\nexport const SESSION_MCP_EXTRA_TOOLS: readonly Tool[] = [\n {\n name: 'load_extra_tools',\n title: 'Load extra tools',\n description:\n 'List Po tools and skills added or changed in this conversation after your tool list loaded, for example after a mode change. Takes {}. Empty means nothing was added or changed. Run a returned tool with use_extra_tools.',\n inputSchema: { type: 'object', properties: {}, additionalProperties: false },\n annotations: { readOnlyHint: true },\n _meta: { ui: { visibility: ['model'] } },\n },\n {\n name: 'use_extra_tools',\n title: 'Use extra tools',\n description:\n \"Run a Po tool returned by load_extra_tools, in the session's host repository. Pass { name, arguments }. Check isError in the result.\",\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Exact name returned by load_extra_tools, including any prefix.' },\n arguments: {\n type: 'object',\n description: \"Arguments object matching that tool's input schema. Defaults to {}.\",\n },\n },\n required: ['name'],\n additionalProperties: false,\n },\n _meta: { ui: { visibility: ['model'] } },\n },\n {\n name: 'session_capabilities',\n title: 'Session capabilities',\n description:\n 'List every Po tool and skill this connection is granted now, with input schemas. Takes {}. This is an inventory and does not add tools to your tool list. Call it once when a tool seems missing or the session mode changed.',\n inputSchema: { type: 'object', properties: {}, additionalProperties: false },\n annotations: { readOnlyHint: true },\n _meta: { ui: { visibility: ['model'] } },\n },\n];\n\nexport interface SessionMcpBaseline {\n readonly tools: readonly Tool[];\n readonly skills: readonly { name: string; description: string }[];\n}\n\nfunction presentationMeta(meta: Tool['_meta'], presentation: 'pure' | 'app'): Tool['_meta'] {\n if (presentation === 'app' || meta === undefined) return meta;\n return Object.fromEntries(\n Object.entries(meta)\n .filter(([key]) => (key !== 'ui' && !key.startsWith('openai/')) || key === 'openai/fileParams')\n .filter(([key]) => key !== 'po/widget' && key !== 'po/toolName'),\n );\n}\n\nfunction publicTool(tool: SessionToolDescriptor): Tool {\n return {\n name: tool.name,\n title: tool.label,\n description: tool.description,\n inputSchema: tool.parameters as Tool['inputSchema'],\n ...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),\n ...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),\n _meta: {\n ...tool._meta,\n ui: { ...tool._meta?.ui, visibility: tool._meta?.ui?.visibility ?? ['model'] },\n },\n };\n}\n\nfunction grantedExtraTools(grant: SessionMcpAccessGrant): readonly Tool[] {\n return grant.scope === 'session'\n ? SESSION_MCP_EXTRA_TOOLS\n : SESSION_MCP_EXTRA_TOOLS.filter((tool) => grant.tools.includes(tool.name));\n}\n\nfunction extraTools(\n baseline: SessionMcpBaseline,\n tools: readonly SessionToolDescriptor[],\n presentTool: (tool: Tool) => Tool,\n): Tool[] {\n return tools\n .map(publicTool)\n .map(presentTool)\n .filter(\n (tool) =>\n !SESSION_MCP_EXTRA_TOOLS.some((wrapper) => wrapper.name === tool.name) &&\n !isDeepStrictEqual(\n baseline.tools.find((original) => original.name === tool.name),\n tool,\n ),\n );\n}\n\n/** Remote agents see `${prefix}_${name}`; grants, baselines, and history keep internal names. */\nexport function sessionMcpWireName(prefix: string | undefined, name: string): string {\n return prefix === undefined ? name : `${prefix}_${name}`;\n}\n\n/** Strips the prefix exactly once. A bare name on a prefixed connection maps to nothing. */\nexport function sessionMcpInternalName(prefix: string | undefined, wire: string): string | undefined {\n if (prefix === undefined) return wire;\n const head = `${prefix}_`;\n return wire.startsWith(head) && wire.length > head.length ? wire.slice(head.length) : undefined;\n}\n\nfunction wireTool(prefix: string | undefined, tool: Tool): Tool {\n return prefix === undefined ? tool : { ...tool, name: sessionMcpWireName(prefix, tool.name) };\n}\n\n/** Kept at or under 512 characters with a 24-character prefix. */\nfunction sessionMcpInstructions(prefix: string | undefined): string {\n return (\n (prefix === undefined ? '' : `Tool names here start with '${prefix}_'. `) +\n 'Use only this Po session; tools run in its host repository, not locally. ' +\n 'Call load_context first and after selection changes. session_capabilities lists granted tools; ' +\n 'load_extra_tools lists additions or changes, run with use_extra_tools; load_skill loads guidance. ' +\n 'Inspect before editing; follow repository checks. Assume no UI, downloads, or notifications. ' +\n 'Read saved logs, do not relaunch work. Saving a plan does not authorize implementation.'\n );\n}\n\nfunction toolArguments(\n name: string,\n value: unknown,\n wire: (name: string) => string,\n): { name?: string; arguments?: Record<string, unknown> } {\n const invalid = (problem: string): SessionMcpConversationError =>\n new SessionMcpConversationError('TOOL_ARGUMENTS_INVALID', `Invalid arguments for '${wire(name)}': ${problem}`);\n if (typeof value !== 'object' || value === null || Array.isArray(value)) throw invalid('pass a JSON object.');\n const args = value as Record<string, unknown>;\n const keys = Object.keys(args);\n if (name !== 'use_extra_tools') {\n if (keys.length !== 0) throw invalid(`it takes no arguments. Remove: ${keys.join(', ')}. Call it with {}.`);\n return args;\n }\n const unexpected = keys.filter((key) => key !== 'name' && key !== 'arguments');\n if (unexpected.length !== 0)\n throw invalid(`unexpected keys: ${unexpected.join(', ')}. Pass { \"name\": string, \"arguments\"?: object }.`);\n if (typeof args.name !== 'string' || args.name.trim() === '')\n throw invalid(`\"name\" must be a tool name returned by ${wire('load_extra_tools')}.`);\n if (\n args.arguments !== undefined &&\n (typeof args.arguments !== 'object' || args.arguments === null || Array.isArray(args.arguments))\n )\n throw invalid('\"arguments\" must be an object.');\n return args as { name?: string; arguments?: Record<string, unknown> };\n}\nexport interface SessionMcpTarget {\n readonly generation: number;\n readonly sessionId?: string;\n readonly toolSurface: SessionToolSurface;\n /** Reports whether the session's local agent is blocked from starting turns. */\n readonly agentLocked?: () => boolean;\n}\n\nconst LOCAL_AGENT_UNLOCKED_NOTICE =\n 'The Po user unlocked the local agent in this session, so it may also act here. Check state before you edit.';\n\nexport interface SessionMcpHttpHandlerOptions {\n /** Exact HTTPS resource indicator minted into access grants. */\n readonly audience: string;\n readonly presentation?: 'pure' | 'app';\n readonly authorization: Pick<SessionMcpAuthorizationService, 'authenticateAccessToken' | 'authenticateUrlToken'>;\n readonly onVerified?: (grant: SessionMcpAccessGrant) => void | Promise<void>;\n readonly resourceMetadataUrl?: string;\n /** Signed JWT carried as the final URL path segment instead of an Authorization header. */\n readonly pathToken?: string;\n readonly baselines?: Map<string, SessionMcpBaseline>;\n /** Shared only by signed-URL requests in one live session incarnation. */\n readonly operations?: SessionMcpOperationRegistry;\n readonly resolveSession: (sessionId: string) => SessionMcpTarget | undefined | Promise<SessionMcpTarget | undefined>;\n readonly resolveConversation?: (\n grant: SessionMcpAccessGrant,\n digest: string,\n reserve: boolean,\n signal?: AbortSignal,\n ) => SessionMcpTarget | Promise<SessionMcpTarget>;\n /** Only bounded, non-reversible correlation values are reported here. */\n readonly onNotice?: (message: string) => void;\n /** Host-only call history, separate from MCP notices and the agent transcript. */\n readonly onInvocation?: (invocation: SessionMcpInvocation) => void;\n readonly serverName?: string;\n readonly serverVersion?: string;\n}\n\nexport type SessionMcpOperationRegistry = Map<\n string,\n { controller: AbortController; owner: string; conversation?: string }\n>;\n\nexport type SessionMcpHttpHandler = (request: Request) => Promise<Response>;\n\nfunction jsonError(status: number, message: string, authenticate = false, resourceMetadataUrl?: string): Response {\n return Response.json(\n { jsonrpc: '2.0', error: { code: -32_000, message }, id: null },\n {\n status,\n headers: {\n 'cache-control': 'no-store',\n ...(authenticate\n ? {\n 'www-authenticate':\n resourceMetadataUrl === undefined ? 'Bearer' : `Bearer resource_metadata=\"${resourceMetadataUrl}\"`,\n }\n : {}),\n },\n },\n );\n}\n\nfunction bearerToken(request: Request): string | undefined {\n const authorization = request.headers.get('authorization');\n const match = authorization === null ? undefined : /^Bearer ([A-Za-z0-9_-]+)$/iu.exec(authorization);\n return match?.[1];\n}\n\nfunction currentUrl(request: Request): string | undefined {\n try {\n const url = new URL(request.url);\n return url.search === '' && url.hash === '' ? url.href : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction grantedSurface(grant: SessionMcpAccessGrant, surface: SessionToolSurface) {\n const snapshot = surface.readSurface();\n if (snapshot.tools.some((tool) => SESSION_MCP_EXTRA_TOOLS.some((wrapper) => wrapper.name === tool.name)))\n throw new ProtocolError(\n ProtocolErrorCode.InvalidRequest,\n 'A session tool conflicts with a reserved remote tool name.',\n );\n const toolNames = new Set(grant.tools);\n const skillNames = new Set(grant.skills);\n const tools = grant.scope === 'session' ? snapshot.tools : snapshot.tools.filter((tool) => toolNames.has(tool.name));\n const resourceUris = new Set(tools.map((tool) => tool._meta?.ui?.resourceUri));\n return {\n snapshot,\n tools,\n skills: grant.scope === 'session' ? snapshot.skills : snapshot.skills.filter((skill) => skillNames.has(skill.name)),\n uiResources: (snapshot.uiResources ?? []).filter((resource) => resourceUris.has(resource.uri)),\n };\n}\n\n/** Identity is supplied by the approved tool descriptor, never by upstream result metadata. */\nfunction widgetResult(\n tool: SessionToolDescriptor | undefined,\n result: CallToolResult,\n prefix: string | undefined,\n): CallToolResult {\n const widget = tool?._meta?.['po/widget'];\n return typeof widget !== 'string'\n ? result\n : {\n ...result,\n // The host compares this with the tool name it called, which is the remote name.\n _meta: { ...result._meta, 'po/widget': widget, 'po/toolName': sessionMcpWireName(prefix, tool!.name) },\n };\n}\n\n/** Creates a stateless Streamable HTTP MCP request handler for session capabilities. */\nexport function createSessionMcpHttpHandler(options: SessionMcpHttpHandlerOptions): SessionMcpHttpHandler {\n const audience = new URL(options.audience);\n if (\n audience.protocol !== 'https:' ||\n audience.username !== '' ||\n audience.password !== '' ||\n audience.search !== '' ||\n audience.hash !== ''\n ) {\n throw new Error('Session MCP audience must be an absolute HTTPS URL without credentials, a query, or a fragment.');\n }\n const exactAudience = audience.href;\n if (options.pathToken !== undefined && !/^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/u.test(options.pathToken)) {\n throw new Error('Session MCP path token must be a compact JWT.');\n }\n const presentation = options.presentation ?? 'pure';\n const resourceAudience = presentation === 'app' ? exactAudience.replace(/\\/mcp$/u, '/mcp-app') : exactAudience;\n const presentTool = (tool: Tool): Tool => ({ ...tool, _meta: presentationMeta(tool._meta, presentation) });\n const baselineKey = (clientId: string): string => JSON.stringify([presentation, clientId]);\n const exactResource = options.pathToken === undefined ? resourceAudience : `${resourceAudience}/${options.pathToken}`;\n const authenticate =\n options.pathToken === undefined\n ? options.authorization.authenticateAccessToken\n : options.authorization.authenticateUrlToken;\n const operations: SessionMcpOperationRegistry = options.operations ?? new Map();\n const baselines = options.baselines ?? new Map<string, SessionMcpBaseline>();\n const operationOwner = (grant: SessionMcpAccessGrant, requestId: string | number): string =>\n JSON.stringify([grant.clientId, grant.sessionId, grant.sessionGeneration, grant.id, requestId]);\n\n return async (request) => {\n if (currentUrl(request) !== exactResource) return jsonError(404, 'MCP resource not found.');\n const token = options.pathToken ?? bearerToken(request);\n if (token === undefined)\n return jsonError(401, 'A Bearer access token is required.', true, options.resourceMetadataUrl);\n const grant = authenticate(token, exactAudience);\n if (grant === undefined)\n return options.pathToken === undefined\n ? jsonError(401, 'The Bearer access token is invalid or expired.', true, options.resourceMetadataUrl)\n : jsonError(401, 'The signed MCP URL is invalid or revoked.');\n // Bindings are immutable, so the prefix cannot change for the lifetime of this grant.\n const prefix = grant.toolPrefix;\n const wire = (name: string): string => sessionMcpWireName(prefix, name);\n /** Names a wrapper as the next call only when this grant can use it. */\n const nextCall = (tool: string, text: string): string =>\n grantedExtraTools(grant).some((wrapper) => wrapper.name === tool) ? ` Call ${wire(tool)}${text}` : '';\n const surfaceChanged = (): SessionMcpConversationError =>\n new SessionMcpConversationError(\n 'SESSION_TOOL_SURFACE_CHANGED',\n `The session tools changed before this call ran.${nextCall('session_capabilities', ', then retry.')}`,\n );\n const authorizeOperation = async (): Promise<{\n grant: SessionMcpAccessGrant;\n target: SessionMcpTarget;\n }> => {\n const activeGrant = authenticate(token, exactAudience);\n if (activeGrant === undefined || activeGrant.id !== grant.id) {\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'The session grant is no longer active.');\n }\n const target = await options.resolveSession(activeGrant.sessionId);\n const recheckedGrant = authenticate(token, exactAudience);\n if (\n recheckedGrant === undefined ||\n recheckedGrant.id !== activeGrant.id ||\n target === undefined ||\n target.generation !== recheckedGrant.sessionGeneration\n ) {\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'The session grant is no longer active.');\n }\n return { grant: recheckedGrant, target };\n };\n try {\n await authorizeOperation();\n } catch {\n return options.pathToken === undefined\n ? jsonError(401, 'The session grant is no longer active.', true, options.resourceMetadataUrl)\n : jsonError(401, 'The signed MCP URL is invalid or revoked.');\n }\n\n const server = new Server(\n { name: options.serverName ?? 'po-session', version: options.serverVersion ?? '1.0.0' },\n {\n capabilities: { tools: {}, resources: {} },\n instructions: sessionMcpInstructions(prefix),\n },\n );\n server.setNotificationHandler('notifications/cancelled', async (notification) => {\n const active = await authorizeOperation();\n if (notification.params.requestId === undefined) return;\n const owner = operationOwner(active.grant, notification.params.requestId);\n const conversation = sessionMcpConversationDigest(notification.params._meta);\n // A notification without a conversation identity cannot safely cancel one\n // of several child runtimes that may reuse its request ID.\n if (conversation === undefined) return;\n const candidates = [...operations.values()].filter(\n (operation) => operation.owner === owner && operation.conversation === conversation,\n );\n if (candidates.length === 1) candidates[0]!.controller.abort();\n });\n server.setRequestHandler('tools/list', async () => {\n const active = await authorizeOperation();\n await options.onVerified?.(active.grant);\n const { tools, skills } = grantedSurface(active.grant, active.target.toolSurface);\n const parentTools = tools.map(publicTool).map(presentTool);\n const wrappers = grantedExtraTools(active.grant);\n const baseline = structuredClone({\n tools: parentTools,\n skills: skills.map(({ name, description }) => ({ name, description })),\n });\n await authorizeOperation();\n baselines.set(baselineKey(active.grant.clientId), baseline);\n return { tools: [...parentTools, ...wrappers].map((tool) => wireTool(prefix, presentTool(tool))) };\n });\n server.setRequestHandler('tools/call', async (message, ctx): Promise<CallToolResult> => {\n const conversation = sessionMcpConversationDigest(\n ctx.mcpReq._meta ?? (message.params as { _meta?: unknown })._meta,\n );\n const owner = operationOwner(grant, ctx.mcpReq.id);\n const key = JSON.stringify([owner, conversation]);\n if (operations.has(key))\n throw new ProtocolError(\n ProtocolErrorCode.InvalidRequest,\n 'A tool call with this request identity is already active.',\n );\n if (options.operations !== undefined && operations.size >= 1024)\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Too many active MCP tool calls. Retry later.');\n const controller = new AbortController();\n operations.set(key, { controller, owner, conversation });\n const signal = AbortSignal.any([request.signal, ctx.mcpReq.signal, controller.signal]);\n const invocationId = randomUUID();\n let skillAccessOpen = true;\n let widgetTool: SessionToolDescriptor | undefined;\n let invocation: SessionMcpInvocation | undefined;\n let fileTransfer = false;\n const publishInvocation = (): void => {\n if (invocation?.sessionId === undefined) return;\n try {\n options.onInvocation?.(\n fileTransfer\n ? {\n ...invocation,\n input: { redacted: 'file transfer' },\n ...(invocation.output === undefined ? {} : { output: { redacted: 'file transfer' } }),\n }\n : { ...invocation },\n );\n } catch {\n // Observability failures must not turn an already executed tool into a retryable failure.\n options.onNotice?.('session MCP call history could not be saved');\n }\n };\n const completeInvocation = (result: CallToolResult): CallToolResult => {\n if (invocation !== undefined) {\n invocation = {\n ...invocation,\n status: signal.aborted ? 'cancelled' : result.isError ? 'failed' : 'succeeded',\n finishedAt: Date.now(),\n output: result.structuredContent ?? result.content,\n };\n publishInvocation();\n }\n return { ...result, _meta: presentationMeta(result._meta, presentation) };\n };\n try {\n const parent = await authorizeOperation();\n const requested = sessionMcpInternalName(prefix, message.params.name);\n invocation = {\n id: invocationId,\n parentSessionId: parent.grant.sessionId,\n clientId: parent.grant.clientId,\n conversationDigest: conversation,\n toolName: requested ?? message.params.name,\n startedAt: Date.now(),\n status: 'running',\n input: { redacted: 'pending tool authorization' },\n };\n const wrapper = grantedExtraTools(parent.grant).some((tool) => tool.name === requested);\n const advertised = wrapper\n ? undefined\n : grantedSurface(parent.grant, parent.target.toolSurface).tools.find((tool) => tool.name === requested);\n if (!wrapper && !advertised)\n throw new SessionMcpConversationError(\n 'TOOL_NOT_AVAILABLE',\n `Tool '${message.params.name}' is not available on this connection.` +\n (prefix === undefined ? '' : ` Tool names here start with '${prefix}_'.`) +\n nextCall('session_capabilities', ' for the current list.'),\n );\n const transferName =\n requested === 'use_extra_tools' && typeof message.params.arguments?.name === 'string'\n ? sessionMcpInternalName(prefix, message.params.arguments.name)\n : requested;\n fileTransfer = grantedSurface(parent.grant, parent.target.toolSurface).tools.some(\n (tool) => tool.name === transferName && tool._meta?.['doompi/fileTransfer'] === true,\n );\n publishInvocation();\n widgetTool = advertised;\n const wrapperArgs = wrapper ? toolArguments(requested!, message.params.arguments ?? {}, wire) : undefined;\n // A binding must not outlive an unpersisted registration when tools/call precedes tools/list.\n await options.onVerified?.(parent.grant);\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=started`);\n const resolveTarget = async (reserve: boolean) => {\n const active = await authorizeOperation();\n if (!conversation)\n throw new SessionMcpConversationError(\n 'CONVERSATION_ID_REQUIRED',\n 'This connection requires conversation metadata. Use a compatible ChatGPT conversation and retry.',\n );\n if (!options.resolveConversation)\n throw new SessionMcpConversationError(\n 'CONVERSATION_ROUTING_UNAVAILABLE',\n 'Conversation routing is unavailable in this host.',\n );\n signal.throwIfAborted();\n const target = await options.resolveConversation(active.grant, conversation, reserve, signal);\n await authorizeOperation();\n signal.throwIfAborted();\n return { grant: active.grant, target };\n };\n if (wrapper && !conversation)\n throw new SessionMcpConversationError(\n 'CONVERSATION_ID_REQUIRED',\n 'This connection requires conversation metadata. Use a compatible ChatGPT conversation and retry.',\n );\n if (\n (requested === 'load_extra_tools' || requested === 'use_extra_tools') &&\n !baselines.has(baselineKey(parent.grant.clientId))\n )\n throw new SessionMcpConversationError(\n 'SESSION_MCP_BASELINE_REQUIRED',\n 'Refresh this MCP connection tool catalog before loading or using extra tools.',\n );\n const active = await resolveTarget(true);\n invocation = { ...invocation, sessionId: active.target.sessionId ?? parent.grant.sessionId };\n publishInvocation();\n const { snapshot, tools, skills } = grantedSurface(active.grant, active.target.toolSurface);\n const baseline = baselines.get(baselineKey(parent.grant.clientId));\n const extras = wrapper && baseline ? extraTools(baseline, tools, presentTool) : [];\n if (requested === 'session_capabilities' && wrapper) {\n const capabilities = {\n sessionId: active.target.sessionId ?? parent.grant.sessionId,\n generation: active.target.generation,\n revision: snapshot.revision,\n baseline: baseline === undefined ? 'missing' : 'available',\n inventory: 'active_surface',\n discovery: 'unknown',\n tools: [...tools.map(publicTool).map(presentTool), ...grantedExtraTools(active.grant)].map((tool) =>\n wireTool(prefix, presentTool(tool)),\n ),\n skills: skills.map(({ name, description }) => ({ name, description })),\n ...(active.target.agentLocked === undefined\n ? {}\n : { localAgent: active.target.agentLocked() ? 'locked' : 'unlocked' }),\n };\n const current = await resolveTarget(false);\n if (\n current.target.toolSurface !== active.target.toolSurface ||\n current.target.generation !== active.target.generation ||\n current.target.sessionId !== active.target.sessionId ||\n current.target.toolSurface.readSurface().revision !== snapshot.revision\n )\n throw surfaceChanged();\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=succeeded`);\n return completeInvocation({\n content: [{ type: 'text', text: JSON.stringify(capabilities) }],\n structuredContent: capabilities,\n isError: false,\n });\n }\n if (requested === 'load_extra_tools' && wrapper) {\n const discovery = {\n tools: extras.map((tool) => wireTool(prefix, presentTool(tool))),\n skills: (tools.some((tool) => tool.name === 'load_skill') ? skills : [])\n .map(({ name, description }) => ({ name, description }))\n .filter(\n (skill) =>\n !isDeepStrictEqual(\n baseline!.skills.find((original) => original.name === skill.name),\n skill,\n ),\n ),\n };\n const current = await resolveTarget(false);\n if (\n current.target.toolSurface !== active.target.toolSurface ||\n current.target.generation !== active.target.generation ||\n current.target.sessionId !== active.target.sessionId ||\n current.target.toolSurface.readSurface().revision !== snapshot.revision\n )\n throw surfaceChanged();\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=succeeded`);\n return completeInvocation({\n content: [{ type: 'text', text: JSON.stringify(discovery) }],\n structuredContent: discovery,\n isError: false,\n });\n }\n const name = wrapper ? sessionMcpInternalName(prefix, wrapperArgs!.name!) : requested;\n const selected = tools.find((tool) => tool.name === name);\n if (name === undefined || (wrapper && (!extras.some((tool) => tool.name === name) || !selected)))\n throw new SessionMcpConversationError(\n 'TOOL_NOT_AVAILABLE',\n `Extra tool '${wrapperArgs?.name ?? message.params.name}' is not available.` +\n nextCall('load_extra_tools', ' and pass a name it returns.'),\n );\n if (\n !wrapper &&\n (!selected ||\n !isDeepStrictEqual(selected.parameters, advertised!.parameters) ||\n !isDeepStrictEqual(selected.outputSchema, advertised!.outputSchema) ||\n !isDeepStrictEqual(selected.annotations, advertised!.annotations) ||\n !isDeepStrictEqual(selected._meta, advertised!._meta))\n )\n throw new SessionMcpConversationError(\n 'SESSION_TOOL_SURFACE_CHANGED',\n `This tool changed or was removed after your tool list loaded.${nextCall(\n 'load_extra_tools',\n grantedExtraTools(grant).some((tool) => tool.name === 'use_extra_tools')\n ? ', and if it lists the tool, run it with ' + wire('use_extra_tools') + '.'\n : ', then refresh the connection to call a returned tool.',\n )}`,\n );\n fileTransfer ||= selected?._meta?.['doompi/fileTransfer'] === true;\n widgetTool = wrapper ? undefined : selected;\n const recheck = async () => {\n const current = await resolveTarget(false);\n if (\n current.target.toolSurface !== active.target.toolSurface ||\n current.target.generation !== active.target.generation ||\n current.target.sessionId !== active.target.sessionId\n )\n throw surfaceChanged();\n if (wrapper) {\n if (!grantedExtraTools(current.grant).some((tool) => tool.name === requested)) throw surfaceChanged();\n } else {\n const currentAdvertised = grantedSurface(current.grant, parent.target.toolSurface).tools.find(\n (tool) => tool.name === requested,\n );\n if (!currentAdvertised || !isDeepStrictEqual(currentAdvertised, advertised)) throw surfaceChanged();\n }\n return current;\n };\n const authorizedSkills = async () => {\n if (!skillAccessOpen)\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Remote skill access is no longer active.');\n signal.throwIfAborted();\n const current = await recheck();\n signal.throwIfAborted();\n return grantedSurface(current.grant, current.target.toolSurface);\n };\n const mcpSkills = {\n async list() {\n const { skills } = await authorizedSkills();\n return skills.map(({ name, description }) => ({ name, description }));\n },\n async read(name: string) {\n const current = await authorizedSkills();\n const skill = current.skills.find((candidate) => candidate.name === name);\n if (!skill)\n throw new ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Skill '${name}' is not granted or active on this connection.${nextCall('session_capabilities', ' to see available skills.')} Continue without it if unavailable.`,\n );\n const text = await active.target.toolSurface.readSkill(current.snapshot.revision, skill.uri);\n signal.throwIfAborted();\n const after = await authorizedSkills();\n if (after.snapshot.revision !== current.snapshot.revision) throw surfaceChanged();\n return text;\n },\n };\n invocation = {\n ...invocation,\n toolName: name,\n input: wrapper ? (wrapperArgs!.arguments ?? {}) : (message.params.arguments ?? {}),\n };\n publishInvocation();\n let result: Awaited<ReturnType<SessionToolSurface['invokeTool']>>;\n try {\n result = await active.target.toolSurface.invokeTool({\n revision: snapshot.revision,\n name,\n arguments: wrapper ? (wrapperArgs!.arguments ?? {}) : (message.params.arguments ?? {}),\n signal,\n mcpSkills,\n authorize: async () => {\n const current = await recheck();\n if (wrapper) {\n const currentTool = grantedSurface(current.grant, current.target.toolSurface).tools.find(\n (tool) => tool.name === name,\n );\n if (!currentTool || !isDeepStrictEqual(currentTool, selected)) throw surfaceChanged();\n }\n },\n });\n } catch (error) {\n if (signal.aborted || error instanceof ProtocolError || error instanceof SessionMcpConversationError)\n throw error;\n if (isDoomHeadlessToolBusyError(error))\n throw new SessionMcpConversationError(\n 'SESSION_BUSY',\n `The session stayed busy for 30 seconds, so ${wire(name)} did not start. Wait for the current turn to finish, then retry once.`,\n );\n // After-hooks can fail once execution finished, so never claim the call did not run.\n throw new SessionMcpConversationError(\n 'TOOL_CALL_FAILED',\n `${wire(name)} did not return a result: ${error instanceof Error ? error.message : 'unknown error'}. ` +\n 'If the tool changes files or state, inspect before retrying.',\n );\n }\n try {\n await recheck();\n } catch (error) {\n if (!(error instanceof SessionMcpConversationError)) throw error;\n throw new SessionMcpConversationError(\n 'SESSION_RESULT_WITHHELD',\n 'The call may have run, but its result was withheld because the session tools or grants changed. ' +\n 'Inspect state before retrying.',\n );\n }\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=succeeded`);\n const content =\n result.content.length === 0 && result.structuredContent !== undefined\n ? [{ type: 'text' as const, text: JSON.stringify(result.structuredContent) }]\n : result.content;\n return completeInvocation(\n widgetResult(\n wrapper ? undefined : selected,\n {\n content:\n active.target.agentLocked?.() === false\n ? [...content, { type: 'text', text: LOCAL_AGENT_UNLOCKED_NOTICE }]\n : content,\n ...(result.structuredContent === undefined ? {} : { structuredContent: result.structuredContent }),\n ...(result._meta === undefined ? {} : { _meta: result._meta }),\n isError: result.isError ?? false,\n },\n prefix,\n ),\n );\n } catch (error) {\n // The cause is logged because the client may drop the answer, for example on a timeout\n // during a first call that provisions a worktree, and then nothing else records why. Only a\n // class or code: a message can carry tool arguments, which notices never do.\n const cause =\n error instanceof SessionMcpConversationError\n ? error.code\n : signal.aborted\n ? 'aborted'\n : error instanceof ProtocolError\n ? `mcp_${String(error.code)}`\n : error instanceof Error\n ? error.name\n : 'unknown';\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=failed cause=${cause}`);\n if (invocation !== undefined) {\n invocation = {\n ...invocation,\n status: signal.aborted ? 'cancelled' : 'failed',\n finishedAt: Date.now(),\n output: {\n cause,\n message: fileTransfer\n ? 'File transfer failed.'\n : error instanceof Error\n ? error.message\n : 'Tool call failed.',\n },\n };\n publishInvocation();\n }\n if (!(error instanceof SessionMcpConversationError)) throw error;\n const failure = widgetResult(\n widgetTool,\n {\n content: [{ type: 'text', text: error.message }],\n isError: true,\n structuredContent: {\n code: error.code,\n message: error.message,\n ...(error.bindingId === undefined ? {} : { bindingId: error.bindingId }),\n },\n },\n prefix,\n );\n return { ...failure, _meta: presentationMeta(failure._meta, presentation) };\n } finally {\n skillAccessOpen = false;\n operations.delete(key);\n }\n });\n server.setRequestHandler('resources/list', async () => {\n const active = await authorizeOperation();\n const { uiResources } = grantedSurface(active.grant, active.target.toolSurface);\n return {\n resources: presentation === 'app' ? [...uiResources] : [],\n };\n });\n server.setRequestHandler('resources/read', async (message, ctx) => {\n const conversation = sessionMcpConversationDigest(\n ctx.mcpReq._meta ?? (message.params as { _meta?: unknown })._meta,\n );\n const active = await authorizeOperation();\n const { snapshot, skills, uiResources } = grantedSurface(active.grant, active.target.toolSurface);\n const skill = skills.find((candidate) => candidate.uri === message.params.uri);\n if (skill !== undefined) {\n if (!conversation)\n throw new ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Use ${wire('load_skill')} with conversation metadata to read target-session guidance.`,\n );\n if (!options.resolveConversation)\n throw new ProtocolError(\n ProtocolErrorCode.InvalidRequest,\n 'Conversation routing is unavailable in this host.',\n );\n const target = await options.resolveConversation(active.grant, conversation, false, request.signal);\n const text = await target.toolSurface.readSkill(snapshot.revision, skill.uri);\n await authorizeOperation();\n return { contents: [{ uri: skill.uri, mimeType: 'text/markdown', text }] };\n }\n const resource = uiResources.find((candidate) => candidate.uri === message.params.uri);\n if (presentation === 'app' && resource !== undefined && active.target.toolSurface.readUiResource !== undefined) {\n // Templates are immutable and session-independent, so hosts may prefetch them without a conversation ID.\n request.signal.throwIfAborted();\n const text = await active.target.toolSurface.readUiResource(snapshot.revision, resource.uri);\n request.signal.throwIfAborted();\n const current = await authorizeOperation();\n const after = grantedSurface(current.grant, current.target.toolSurface);\n if (\n current.target.toolSurface !== active.target.toolSurface ||\n after.snapshot.revision !== snapshot.revision ||\n !isDeepStrictEqual(\n after.uiResources.find((candidate) => candidate.uri === resource.uri),\n resource,\n )\n )\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'The session UI resource surface has changed.');\n return { contents: [{ ...resource, text }] };\n }\n if (message.params.uri.startsWith('ui:'))\n throw new ProtocolError(ProtocolErrorCode.InvalidParams, 'UI resource is not granted or active.');\n throw new ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Use ${wire('load_skill')} with conversation metadata to read target-session guidance.`,\n );\n });\n\n // One server per request, as before. Only the 2026-07-28 revision is served; a 2025-era request\n // is refused with the versions this endpoint supports.\n const handler = createMcpHandler(() => server, { legacy: 'reject' });\n try {\n return await handler.fetch(request, {\n authInfo: {\n token,\n clientId: grant.clientId,\n scopes:\n grant.scope === 'session'\n ? ['session']\n : [...grant.tools.map((name) => `tool:${name}`), ...grant.skills.map((name) => `skill:${name}`)],\n expiresAt: Math.floor(grant.expiresAt / 1000),\n resource: new URL(exactResource),\n },\n });\n } catch {\n return jsonError(500, 'Internal MCP server error.');\n }\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessionMcpHandler.cjs","names":["isDeepStrictEqual","SessionMcpConversationError","ProtocolError","ProtocolErrorCode","Server","sessionMcpConversationDigest","randomUUID","isPoHeadlessToolBusyError","createMcpHandler"],"sources":["../../../src/server/sessionMcpHandler.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { isDeepStrictEqual } from 'node:util';\n\nimport {\n createMcpHandler,\n ProtocolError,\n ProtocolErrorCode,\n Server,\n type CallToolResult,\n type Tool,\n} from '@modelcontextprotocol/server';\n\nimport { isPoHeadlessToolBusyError } from '../schemas/headless';\nimport type { SessionMcpInvocation } from '../schemas/sessionMcpActivity';\nimport type { SessionMcpAccessGrant, SessionMcpAuthorizationService } from '../services/sessionMcpAuthorization';\nimport { sessionMcpConversationDigest, SessionMcpConversationError } from '../services/sessionMcpConversations';\nimport type { SessionToolDescriptor, SessionToolSurface } from '../types/server/sessionToolSurface';\n\n/** Stable transport tools stay available when a conversation changes its MCP composition. */\nexport const SESSION_MCP_EXTRA_TOOLS: readonly Tool[] = [\n {\n name: 'load_extra_tools',\n title: 'Load extra tools',\n description:\n 'List Po tools and skills added or changed in this conversation after your tool list loaded, for example after a mode change. Takes {}. Empty means nothing was added or changed. Run a returned tool with use_extra_tools.',\n inputSchema: { type: 'object', properties: {}, additionalProperties: false },\n annotations: { readOnlyHint: true },\n _meta: { ui: { visibility: ['model'] } },\n },\n {\n name: 'use_extra_tools',\n title: 'Use extra tools',\n description:\n \"Run a Po tool returned by load_extra_tools, in the session's host repository. Pass { name, arguments }. Check isError in the result.\",\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Exact name returned by load_extra_tools, including any prefix.' },\n arguments: {\n type: 'object',\n description: \"Arguments object matching that tool's input schema. Defaults to {}.\",\n },\n },\n required: ['name'],\n additionalProperties: false,\n },\n _meta: { ui: { visibility: ['model'] } },\n },\n {\n name: 'session_capabilities',\n title: 'Session capabilities',\n description:\n 'List every Po tool and skill this connection is granted now, with input schemas. Takes {}. This is an inventory and does not add tools to your tool list. Call it once when a tool seems missing or the session mode changed.',\n inputSchema: { type: 'object', properties: {}, additionalProperties: false },\n annotations: { readOnlyHint: true },\n _meta: { ui: { visibility: ['model'] } },\n },\n];\n\nexport interface SessionMcpBaseline {\n readonly tools: readonly Tool[];\n readonly skills: readonly { name: string; description: string }[];\n}\n\nfunction presentationMeta(meta: Tool['_meta'], presentation: 'pure' | 'app'): Tool['_meta'] {\n if (presentation === 'app' || meta === undefined) return meta;\n return Object.fromEntries(\n Object.entries(meta)\n .filter(([key]) => (key !== 'ui' && !key.startsWith('openai/')) || key === 'openai/fileParams')\n .filter(([key]) => key !== 'po/widget' && key !== 'po/toolName'),\n );\n}\n\nfunction publicTool(tool: SessionToolDescriptor): Tool {\n return {\n name: tool.name,\n title: tool.label,\n description: tool.description,\n inputSchema: tool.parameters as Tool['inputSchema'],\n ...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),\n ...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),\n _meta: {\n ...tool._meta,\n ui: { ...tool._meta?.ui, visibility: tool._meta?.ui?.visibility ?? ['model'] },\n },\n };\n}\n\nfunction grantedExtraTools(grant: SessionMcpAccessGrant): readonly Tool[] {\n return grant.scope === 'session'\n ? SESSION_MCP_EXTRA_TOOLS\n : SESSION_MCP_EXTRA_TOOLS.filter((tool) => grant.tools.includes(tool.name));\n}\n\nfunction extraTools(\n baseline: SessionMcpBaseline,\n tools: readonly SessionToolDescriptor[],\n presentTool: (tool: Tool) => Tool,\n): Tool[] {\n return tools\n .map(publicTool)\n .map(presentTool)\n .filter(\n (tool) =>\n !SESSION_MCP_EXTRA_TOOLS.some((wrapper) => wrapper.name === tool.name) &&\n !isDeepStrictEqual(\n baseline.tools.find((original) => original.name === tool.name),\n tool,\n ),\n );\n}\n\n/** Remote agents see `${prefix}_${name}`; grants, baselines, and history keep internal names. */\nexport function sessionMcpWireName(prefix: string | undefined, name: string): string {\n return prefix === undefined ? name : `${prefix}_${name}`;\n}\n\n/** Strips the prefix exactly once. A bare name on a prefixed connection maps to nothing. */\nexport function sessionMcpInternalName(prefix: string | undefined, wire: string): string | undefined {\n if (prefix === undefined) return wire;\n const head = `${prefix}_`;\n return wire.startsWith(head) && wire.length > head.length ? wire.slice(head.length) : undefined;\n}\n\nfunction wireTool(prefix: string | undefined, tool: Tool): Tool {\n return prefix === undefined ? tool : { ...tool, name: sessionMcpWireName(prefix, tool.name) };\n}\n\n/** Kept at or under 512 characters with a 24-character prefix. */\nfunction sessionMcpInstructions(prefix: string | undefined): string {\n return (\n (prefix === undefined ? '' : `Tool names here start with '${prefix}_'. `) +\n 'Use only this Po session; tools run in its host repository, not locally. ' +\n 'Call load_context first and after selection changes. session_capabilities lists granted tools; ' +\n 'load_extra_tools lists additions or changes, run with use_extra_tools; load_skill loads guidance. ' +\n 'Inspect before editing; follow repository checks. Assume no UI, downloads, or notifications. ' +\n 'Read saved logs, do not relaunch work. Saving a plan does not authorize implementation.'\n );\n}\n\nfunction toolArguments(\n name: string,\n value: unknown,\n wire: (name: string) => string,\n): { name?: string; arguments?: Record<string, unknown> } {\n const invalid = (problem: string): SessionMcpConversationError =>\n new SessionMcpConversationError('TOOL_ARGUMENTS_INVALID', `Invalid arguments for '${wire(name)}': ${problem}`);\n if (typeof value !== 'object' || value === null || Array.isArray(value)) throw invalid('pass a JSON object.');\n const args = value as Record<string, unknown>;\n const keys = Object.keys(args);\n if (name !== 'use_extra_tools') {\n if (keys.length !== 0) throw invalid(`it takes no arguments. Remove: ${keys.join(', ')}. Call it with {}.`);\n return args;\n }\n const unexpected = keys.filter((key) => key !== 'name' && key !== 'arguments');\n if (unexpected.length !== 0)\n throw invalid(`unexpected keys: ${unexpected.join(', ')}. Pass { \"name\": string, \"arguments\"?: object }.`);\n if (typeof args.name !== 'string' || args.name.trim() === '')\n throw invalid(`\"name\" must be a tool name returned by ${wire('load_extra_tools')}.`);\n if (\n args.arguments !== undefined &&\n (typeof args.arguments !== 'object' || args.arguments === null || Array.isArray(args.arguments))\n )\n throw invalid('\"arguments\" must be an object.');\n return args as { name?: string; arguments?: Record<string, unknown> };\n}\nexport interface SessionMcpTarget {\n readonly generation: number;\n readonly sessionId?: string;\n readonly toolSurface: SessionToolSurface;\n /** Reports whether the session's local agent is blocked from starting turns. */\n readonly agentLocked?: () => boolean;\n}\n\nconst LOCAL_AGENT_UNLOCKED_NOTICE =\n 'The Po user unlocked the local agent in this session, so it may also act here. Check state before you edit.';\n\nexport interface SessionMcpHttpHandlerOptions {\n /** Exact HTTPS resource indicator minted into access grants. */\n readonly audience: string;\n readonly presentation?: 'pure' | 'app';\n readonly authorization: Pick<SessionMcpAuthorizationService, 'authenticateAccessToken' | 'authenticateUrlToken'>;\n readonly onVerified?: (grant: SessionMcpAccessGrant) => void | Promise<void>;\n readonly resourceMetadataUrl?: string;\n /** Signed JWT carried as the final URL path segment instead of an Authorization header. */\n readonly pathToken?: string;\n readonly baselines?: Map<string, SessionMcpBaseline>;\n /** Shared only by signed-URL requests in one live session incarnation. */\n readonly operations?: SessionMcpOperationRegistry;\n readonly resolveSession: (sessionId: string) => SessionMcpTarget | undefined | Promise<SessionMcpTarget | undefined>;\n readonly resolveConversation?: (\n grant: SessionMcpAccessGrant,\n digest: string,\n reserve: boolean,\n signal?: AbortSignal,\n ) => SessionMcpTarget | Promise<SessionMcpTarget>;\n /** Only bounded, non-reversible correlation values are reported here. */\n readonly onNotice?: (message: string) => void;\n /** Host-only call history, separate from MCP notices and the agent transcript. */\n readonly onInvocation?: (invocation: SessionMcpInvocation) => void;\n readonly serverName?: string;\n readonly serverVersion?: string;\n}\n\nexport type SessionMcpOperationRegistry = Map<\n string,\n { controller: AbortController; owner: string; conversation?: string }\n>;\n\nexport type SessionMcpHttpHandler = (request: Request) => Promise<Response>;\n\nfunction jsonError(status: number, message: string, authenticate = false, resourceMetadataUrl?: string): Response {\n return Response.json(\n { jsonrpc: '2.0', error: { code: -32_000, message }, id: null },\n {\n status,\n headers: {\n 'cache-control': 'no-store',\n ...(authenticate\n ? {\n 'www-authenticate':\n resourceMetadataUrl === undefined ? 'Bearer' : `Bearer resource_metadata=\"${resourceMetadataUrl}\"`,\n }\n : {}),\n },\n },\n );\n}\n\nfunction bearerToken(request: Request): string | undefined {\n const authorization = request.headers.get('authorization');\n const match = authorization === null ? undefined : /^Bearer ([A-Za-z0-9_-]+)$/iu.exec(authorization);\n return match?.[1];\n}\n\nfunction currentUrl(request: Request): string | undefined {\n try {\n const url = new URL(request.url);\n return url.search === '' && url.hash === '' ? url.href : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction grantedSurface(grant: SessionMcpAccessGrant, surface: SessionToolSurface) {\n const snapshot = surface.readSurface();\n if (snapshot.tools.some((tool) => SESSION_MCP_EXTRA_TOOLS.some((wrapper) => wrapper.name === tool.name)))\n throw new ProtocolError(\n ProtocolErrorCode.InvalidRequest,\n 'A session tool conflicts with a reserved remote tool name.',\n );\n const toolNames = new Set(grant.tools);\n const skillNames = new Set(grant.skills);\n const tools = grant.scope === 'session' ? snapshot.tools : snapshot.tools.filter((tool) => toolNames.has(tool.name));\n const resourceUris = new Set(tools.map((tool) => tool._meta?.ui?.resourceUri));\n return {\n snapshot,\n tools,\n skills: grant.scope === 'session' ? snapshot.skills : snapshot.skills.filter((skill) => skillNames.has(skill.name)),\n uiResources: (snapshot.uiResources ?? []).filter((resource) => resourceUris.has(resource.uri)),\n };\n}\n\n/** Identity is supplied by the approved tool descriptor, never by upstream result metadata. */\nfunction widgetResult(\n tool: SessionToolDescriptor | undefined,\n result: CallToolResult,\n prefix: string | undefined,\n): CallToolResult {\n const widget = tool?._meta?.['po/widget'];\n return typeof widget !== 'string'\n ? result\n : {\n ...result,\n // The host compares this with the tool name it called, which is the remote name.\n _meta: { ...result._meta, 'po/widget': widget, 'po/toolName': sessionMcpWireName(prefix, tool!.name) },\n };\n}\n\n/** Creates a stateless Streamable HTTP MCP request handler for session capabilities. */\nexport function createSessionMcpHttpHandler(options: SessionMcpHttpHandlerOptions): SessionMcpHttpHandler {\n const audience = new URL(options.audience);\n if (\n audience.protocol !== 'https:' ||\n audience.username !== '' ||\n audience.password !== '' ||\n audience.search !== '' ||\n audience.hash !== ''\n ) {\n throw new Error('Session MCP audience must be an absolute HTTPS URL without credentials, a query, or a fragment.');\n }\n const exactAudience = audience.href;\n if (options.pathToken !== undefined && !/^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/u.test(options.pathToken)) {\n throw new Error('Session MCP path token must be a compact JWT.');\n }\n const presentation = options.presentation ?? 'pure';\n const resourceAudience = presentation === 'app' ? exactAudience.replace(/\\/mcp$/u, '/mcp-app') : exactAudience;\n const presentTool = (tool: Tool): Tool => ({ ...tool, _meta: presentationMeta(tool._meta, presentation) });\n const baselineKey = (clientId: string): string => JSON.stringify([presentation, clientId]);\n const exactResource = options.pathToken === undefined ? resourceAudience : `${resourceAudience}/${options.pathToken}`;\n const authenticate =\n options.pathToken === undefined\n ? options.authorization.authenticateAccessToken\n : options.authorization.authenticateUrlToken;\n const operations: SessionMcpOperationRegistry = options.operations ?? new Map();\n const baselines = options.baselines ?? new Map<string, SessionMcpBaseline>();\n const operationOwner = (grant: SessionMcpAccessGrant, requestId: string | number): string =>\n JSON.stringify([grant.clientId, grant.sessionId, grant.sessionGeneration, grant.id, requestId]);\n\n return async (request) => {\n if (currentUrl(request) !== exactResource) return jsonError(404, 'MCP resource not found.');\n const token = options.pathToken ?? bearerToken(request);\n if (token === undefined)\n return jsonError(401, 'A Bearer access token is required.', true, options.resourceMetadataUrl);\n const grant = authenticate(token, exactAudience);\n if (grant === undefined)\n return options.pathToken === undefined\n ? jsonError(401, 'The Bearer access token is invalid or expired.', true, options.resourceMetadataUrl)\n : jsonError(401, 'The signed MCP URL is invalid or revoked.');\n // Bindings are immutable, so the prefix cannot change for the lifetime of this grant.\n const prefix = grant.toolPrefix;\n const wire = (name: string): string => sessionMcpWireName(prefix, name);\n /** Names a wrapper as the next call only when this grant can use it. */\n const nextCall = (tool: string, text: string): string =>\n grantedExtraTools(grant).some((wrapper) => wrapper.name === tool) ? ` Call ${wire(tool)}${text}` : '';\n const surfaceChanged = (): SessionMcpConversationError =>\n new SessionMcpConversationError(\n 'SESSION_TOOL_SURFACE_CHANGED',\n `The session tools changed before this call ran.${nextCall('session_capabilities', ', then retry.')}`,\n );\n const authorizeOperation = async (): Promise<{\n grant: SessionMcpAccessGrant;\n target: SessionMcpTarget;\n }> => {\n const activeGrant = authenticate(token, exactAudience);\n if (activeGrant === undefined || activeGrant.id !== grant.id) {\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'The session grant is no longer active.');\n }\n const target = await options.resolveSession(activeGrant.sessionId);\n const recheckedGrant = authenticate(token, exactAudience);\n if (\n recheckedGrant === undefined ||\n recheckedGrant.id !== activeGrant.id ||\n target === undefined ||\n target.generation !== recheckedGrant.sessionGeneration\n ) {\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'The session grant is no longer active.');\n }\n return { grant: recheckedGrant, target };\n };\n try {\n await authorizeOperation();\n } catch {\n return options.pathToken === undefined\n ? jsonError(401, 'The session grant is no longer active.', true, options.resourceMetadataUrl)\n : jsonError(401, 'The signed MCP URL is invalid or revoked.');\n }\n\n const server = new Server(\n { name: options.serverName ?? 'po-session', version: options.serverVersion ?? '1.0.0' },\n {\n capabilities: { tools: {}, resources: {} },\n instructions: sessionMcpInstructions(prefix),\n },\n );\n server.setNotificationHandler('notifications/cancelled', async (notification) => {\n const active = await authorizeOperation();\n if (notification.params.requestId === undefined) return;\n const owner = operationOwner(active.grant, notification.params.requestId);\n const conversation = sessionMcpConversationDigest(notification.params._meta);\n // A notification without a conversation identity cannot safely cancel one\n // of several child runtimes that may reuse its request ID.\n if (conversation === undefined) return;\n const candidates = [...operations.values()].filter(\n (operation) => operation.owner === owner && operation.conversation === conversation,\n );\n if (candidates.length === 1) candidates[0]!.controller.abort();\n });\n server.setRequestHandler('tools/list', async () => {\n const active = await authorizeOperation();\n await options.onVerified?.(active.grant);\n const { tools, skills } = grantedSurface(active.grant, active.target.toolSurface);\n const parentTools = tools.map(publicTool).map(presentTool);\n const wrappers = grantedExtraTools(active.grant);\n const baseline = structuredClone({\n tools: parentTools,\n skills: skills.map(({ name, description }) => ({ name, description })),\n });\n await authorizeOperation();\n baselines.set(baselineKey(active.grant.clientId), baseline);\n return { tools: [...parentTools, ...wrappers].map((tool) => wireTool(prefix, presentTool(tool))) };\n });\n server.setRequestHandler('tools/call', async (message, ctx): Promise<CallToolResult> => {\n const conversation = sessionMcpConversationDigest(\n ctx.mcpReq._meta ?? (message.params as { _meta?: unknown })._meta,\n );\n const owner = operationOwner(grant, ctx.mcpReq.id);\n const key = JSON.stringify([owner, conversation]);\n if (operations.has(key))\n throw new ProtocolError(\n ProtocolErrorCode.InvalidRequest,\n 'A tool call with this request identity is already active.',\n );\n if (options.operations !== undefined && operations.size >= 1024)\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Too many active MCP tool calls. Retry later.');\n const controller = new AbortController();\n operations.set(key, { controller, owner, conversation });\n const signal = AbortSignal.any([request.signal, ctx.mcpReq.signal, controller.signal]);\n const invocationId = randomUUID();\n let skillAccessOpen = true;\n let widgetTool: SessionToolDescriptor | undefined;\n let invocation: SessionMcpInvocation | undefined;\n let fileTransfer = false;\n const publishInvocation = (): void => {\n if (invocation?.sessionId === undefined) return;\n try {\n options.onInvocation?.(\n fileTransfer\n ? {\n ...invocation,\n input: { redacted: 'file transfer' },\n ...(invocation.output === undefined ? {} : { output: { redacted: 'file transfer' } }),\n }\n : { ...invocation },\n );\n } catch {\n // Observability failures must not turn an already executed tool into a retryable failure.\n options.onNotice?.('session MCP call history could not be saved');\n }\n };\n const completeInvocation = (result: CallToolResult): CallToolResult => {\n if (invocation !== undefined) {\n invocation = {\n ...invocation,\n status: signal.aborted ? 'cancelled' : result.isError ? 'failed' : 'succeeded',\n finishedAt: Date.now(),\n output: result.structuredContent ?? result.content,\n };\n publishInvocation();\n }\n return { ...result, _meta: presentationMeta(result._meta, presentation) };\n };\n try {\n const parent = await authorizeOperation();\n const requested = sessionMcpInternalName(prefix, message.params.name);\n invocation = {\n id: invocationId,\n parentSessionId: parent.grant.sessionId,\n clientId: parent.grant.clientId,\n conversationDigest: conversation,\n toolName: requested ?? message.params.name,\n startedAt: Date.now(),\n status: 'running',\n input: { redacted: 'pending tool authorization' },\n };\n const wrapper = grantedExtraTools(parent.grant).some((tool) => tool.name === requested);\n const advertised = wrapper\n ? undefined\n : grantedSurface(parent.grant, parent.target.toolSurface).tools.find((tool) => tool.name === requested);\n if (!wrapper && !advertised)\n throw new SessionMcpConversationError(\n 'TOOL_NOT_AVAILABLE',\n `Tool '${message.params.name}' is not available on this connection.` +\n (prefix === undefined ? '' : ` Tool names here start with '${prefix}_'.`) +\n nextCall('session_capabilities', ' for the current list.'),\n );\n const transferName =\n requested === 'use_extra_tools' && typeof message.params.arguments?.name === 'string'\n ? sessionMcpInternalName(prefix, message.params.arguments.name)\n : requested;\n fileTransfer = grantedSurface(parent.grant, parent.target.toolSurface).tools.some(\n (tool) => tool.name === transferName && tool._meta?.['po/fileTransfer'] === true,\n );\n publishInvocation();\n widgetTool = advertised;\n const wrapperArgs = wrapper ? toolArguments(requested!, message.params.arguments ?? {}, wire) : undefined;\n // A binding must not outlive an unpersisted registration when tools/call precedes tools/list.\n await options.onVerified?.(parent.grant);\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=started`);\n const resolveTarget = async (reserve: boolean) => {\n const active = await authorizeOperation();\n if (!conversation)\n throw new SessionMcpConversationError(\n 'CONVERSATION_ID_REQUIRED',\n 'This connection requires conversation metadata. Use a compatible ChatGPT conversation and retry.',\n );\n if (!options.resolveConversation)\n throw new SessionMcpConversationError(\n 'CONVERSATION_ROUTING_UNAVAILABLE',\n 'Conversation routing is unavailable in this host.',\n );\n signal.throwIfAborted();\n const target = await options.resolveConversation(active.grant, conversation, reserve, signal);\n await authorizeOperation();\n signal.throwIfAborted();\n return { grant: active.grant, target };\n };\n if (wrapper && !conversation)\n throw new SessionMcpConversationError(\n 'CONVERSATION_ID_REQUIRED',\n 'This connection requires conversation metadata. Use a compatible ChatGPT conversation and retry.',\n );\n if (\n (requested === 'load_extra_tools' || requested === 'use_extra_tools') &&\n !baselines.has(baselineKey(parent.grant.clientId))\n )\n throw new SessionMcpConversationError(\n 'SESSION_MCP_BASELINE_REQUIRED',\n 'Refresh this MCP connection tool catalog before loading or using extra tools.',\n );\n const active = await resolveTarget(true);\n invocation = { ...invocation, sessionId: active.target.sessionId ?? parent.grant.sessionId };\n publishInvocation();\n const { snapshot, tools, skills } = grantedSurface(active.grant, active.target.toolSurface);\n const baseline = baselines.get(baselineKey(parent.grant.clientId));\n const extras = wrapper && baseline ? extraTools(baseline, tools, presentTool) : [];\n if (requested === 'session_capabilities' && wrapper) {\n const capabilities = {\n sessionId: active.target.sessionId ?? parent.grant.sessionId,\n generation: active.target.generation,\n revision: snapshot.revision,\n baseline: baseline === undefined ? 'missing' : 'available',\n inventory: 'active_surface',\n discovery: 'unknown',\n tools: [...tools.map(publicTool).map(presentTool), ...grantedExtraTools(active.grant)].map((tool) =>\n wireTool(prefix, presentTool(tool)),\n ),\n skills: skills.map(({ name, description }) => ({ name, description })),\n ...(active.target.agentLocked === undefined\n ? {}\n : { localAgent: active.target.agentLocked() ? 'locked' : 'unlocked' }),\n };\n const current = await resolveTarget(false);\n if (\n current.target.toolSurface !== active.target.toolSurface ||\n current.target.generation !== active.target.generation ||\n current.target.sessionId !== active.target.sessionId ||\n current.target.toolSurface.readSurface().revision !== snapshot.revision\n )\n throw surfaceChanged();\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=succeeded`);\n return completeInvocation({\n content: [{ type: 'text', text: JSON.stringify(capabilities) }],\n structuredContent: capabilities,\n isError: false,\n });\n }\n if (requested === 'load_extra_tools' && wrapper) {\n const discovery = {\n tools: extras.map((tool) => wireTool(prefix, presentTool(tool))),\n skills: (tools.some((tool) => tool.name === 'load_skill') ? skills : [])\n .map(({ name, description }) => ({ name, description }))\n .filter(\n (skill) =>\n !isDeepStrictEqual(\n baseline!.skills.find((original) => original.name === skill.name),\n skill,\n ),\n ),\n };\n const current = await resolveTarget(false);\n if (\n current.target.toolSurface !== active.target.toolSurface ||\n current.target.generation !== active.target.generation ||\n current.target.sessionId !== active.target.sessionId ||\n current.target.toolSurface.readSurface().revision !== snapshot.revision\n )\n throw surfaceChanged();\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=succeeded`);\n return completeInvocation({\n content: [{ type: 'text', text: JSON.stringify(discovery) }],\n structuredContent: discovery,\n isError: false,\n });\n }\n const name = wrapper ? sessionMcpInternalName(prefix, wrapperArgs!.name!) : requested;\n const selected = tools.find((tool) => tool.name === name);\n if (name === undefined || (wrapper && (!extras.some((tool) => tool.name === name) || !selected)))\n throw new SessionMcpConversationError(\n 'TOOL_NOT_AVAILABLE',\n `Extra tool '${wrapperArgs?.name ?? message.params.name}' is not available.` +\n nextCall('load_extra_tools', ' and pass a name it returns.'),\n );\n if (\n !wrapper &&\n (!selected ||\n !isDeepStrictEqual(selected.parameters, advertised!.parameters) ||\n !isDeepStrictEqual(selected.outputSchema, advertised!.outputSchema) ||\n !isDeepStrictEqual(selected.annotations, advertised!.annotations) ||\n !isDeepStrictEqual(selected._meta, advertised!._meta))\n )\n throw new SessionMcpConversationError(\n 'SESSION_TOOL_SURFACE_CHANGED',\n `This tool changed or was removed after your tool list loaded.${nextCall(\n 'load_extra_tools',\n grantedExtraTools(grant).some((tool) => tool.name === 'use_extra_tools')\n ? ', and if it lists the tool, run it with ' + wire('use_extra_tools') + '.'\n : ', then refresh the connection to call a returned tool.',\n )}`,\n );\n fileTransfer ||= selected?._meta?.['po/fileTransfer'] === true;\n widgetTool = wrapper ? undefined : selected;\n const recheck = async () => {\n const current = await resolveTarget(false);\n if (\n current.target.toolSurface !== active.target.toolSurface ||\n current.target.generation !== active.target.generation ||\n current.target.sessionId !== active.target.sessionId\n )\n throw surfaceChanged();\n if (wrapper) {\n if (!grantedExtraTools(current.grant).some((tool) => tool.name === requested)) throw surfaceChanged();\n } else {\n const currentAdvertised = grantedSurface(current.grant, parent.target.toolSurface).tools.find(\n (tool) => tool.name === requested,\n );\n if (!currentAdvertised || !isDeepStrictEqual(currentAdvertised, advertised)) throw surfaceChanged();\n }\n return current;\n };\n const authorizedSkills = async () => {\n if (!skillAccessOpen)\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Remote skill access is no longer active.');\n signal.throwIfAborted();\n const current = await recheck();\n signal.throwIfAborted();\n return grantedSurface(current.grant, current.target.toolSurface);\n };\n const mcpSkills = {\n async list() {\n const { skills } = await authorizedSkills();\n return skills.map(({ name, description }) => ({ name, description }));\n },\n async read(name: string) {\n const current = await authorizedSkills();\n const skill = current.skills.find((candidate) => candidate.name === name);\n if (!skill)\n throw new ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Skill '${name}' is not granted or active on this connection.${nextCall('session_capabilities', ' to see available skills.')} Continue without it if unavailable.`,\n );\n const text = await active.target.toolSurface.readSkill(current.snapshot.revision, skill.uri);\n signal.throwIfAborted();\n const after = await authorizedSkills();\n if (after.snapshot.revision !== current.snapshot.revision) throw surfaceChanged();\n return text;\n },\n };\n invocation = {\n ...invocation,\n toolName: name,\n input: wrapper ? (wrapperArgs!.arguments ?? {}) : (message.params.arguments ?? {}),\n };\n publishInvocation();\n let result: Awaited<ReturnType<SessionToolSurface['invokeTool']>>;\n try {\n result = await active.target.toolSurface.invokeTool({\n revision: snapshot.revision,\n name,\n arguments: wrapper ? (wrapperArgs!.arguments ?? {}) : (message.params.arguments ?? {}),\n signal,\n mcpSkills,\n authorize: async () => {\n const current = await recheck();\n if (wrapper) {\n const currentTool = grantedSurface(current.grant, current.target.toolSurface).tools.find(\n (tool) => tool.name === name,\n );\n if (!currentTool || !isDeepStrictEqual(currentTool, selected)) throw surfaceChanged();\n }\n },\n });\n } catch (error) {\n if (signal.aborted || error instanceof ProtocolError || error instanceof SessionMcpConversationError)\n throw error;\n if (isPoHeadlessToolBusyError(error))\n throw new SessionMcpConversationError(\n 'SESSION_BUSY',\n `The session stayed busy for 30 seconds, so ${wire(name)} did not start. Wait for the current turn to finish, then retry once.`,\n );\n // After-hooks can fail once execution finished, so never claim the call did not run.\n throw new SessionMcpConversationError(\n 'TOOL_CALL_FAILED',\n `${wire(name)} did not return a result: ${error instanceof Error ? error.message : 'unknown error'}. ` +\n 'If the tool changes files or state, inspect before retrying.',\n );\n }\n try {\n await recheck();\n } catch (error) {\n if (!(error instanceof SessionMcpConversationError)) throw error;\n throw new SessionMcpConversationError(\n 'SESSION_RESULT_WITHHELD',\n 'The call may have run, but its result was withheld because the session tools or grants changed. ' +\n 'Inspect state before retrying.',\n );\n }\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=succeeded`);\n const content =\n result.content.length === 0 && result.structuredContent !== undefined\n ? [{ type: 'text' as const, text: JSON.stringify(result.structuredContent) }]\n : result.content;\n return completeInvocation(\n widgetResult(\n wrapper ? undefined : selected,\n {\n content:\n active.target.agentLocked?.() === false\n ? [...content, { type: 'text', text: LOCAL_AGENT_UNLOCKED_NOTICE }]\n : content,\n ...(result.structuredContent === undefined ? {} : { structuredContent: result.structuredContent }),\n ...(result._meta === undefined ? {} : { _meta: result._meta }),\n isError: result.isError ?? false,\n },\n prefix,\n ),\n );\n } catch (error) {\n // The cause is logged because the client may drop the answer, for example on a timeout\n // during a first call that provisions a worktree, and then nothing else records why. Only a\n // class or code: a message can carry tool arguments, which notices never do.\n const cause =\n error instanceof SessionMcpConversationError\n ? error.code\n : signal.aborted\n ? 'aborted'\n : error instanceof ProtocolError\n ? `mcp_${String(error.code)}`\n : error instanceof Error\n ? error.name\n : 'unknown';\n options.onNotice?.(`session MCP invocation id=${invocationId} lifecycle=failed cause=${cause}`);\n if (invocation !== undefined) {\n invocation = {\n ...invocation,\n status: signal.aborted ? 'cancelled' : 'failed',\n finishedAt: Date.now(),\n output: {\n cause,\n message: fileTransfer\n ? 'File transfer failed.'\n : error instanceof Error\n ? error.message\n : 'Tool call failed.',\n },\n };\n publishInvocation();\n }\n if (!(error instanceof SessionMcpConversationError)) throw error;\n const failure = widgetResult(\n widgetTool,\n {\n content: [{ type: 'text', text: error.message }],\n isError: true,\n structuredContent: {\n code: error.code,\n message: error.message,\n ...(error.bindingId === undefined ? {} : { bindingId: error.bindingId }),\n },\n },\n prefix,\n );\n return { ...failure, _meta: presentationMeta(failure._meta, presentation) };\n } finally {\n skillAccessOpen = false;\n operations.delete(key);\n }\n });\n server.setRequestHandler('resources/list', async () => {\n const active = await authorizeOperation();\n const { uiResources } = grantedSurface(active.grant, active.target.toolSurface);\n return {\n resources: presentation === 'app' ? [...uiResources] : [],\n };\n });\n server.setRequestHandler('resources/read', async (message, ctx) => {\n const conversation = sessionMcpConversationDigest(\n ctx.mcpReq._meta ?? (message.params as { _meta?: unknown })._meta,\n );\n const active = await authorizeOperation();\n const { snapshot, skills, uiResources } = grantedSurface(active.grant, active.target.toolSurface);\n const skill = skills.find((candidate) => candidate.uri === message.params.uri);\n if (skill !== undefined) {\n if (!conversation)\n throw new ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Use ${wire('load_skill')} with conversation metadata to read target-session guidance.`,\n );\n if (!options.resolveConversation)\n throw new ProtocolError(\n ProtocolErrorCode.InvalidRequest,\n 'Conversation routing is unavailable in this host.',\n );\n const target = await options.resolveConversation(active.grant, conversation, false, request.signal);\n const text = await target.toolSurface.readSkill(snapshot.revision, skill.uri);\n await authorizeOperation();\n return { contents: [{ uri: skill.uri, mimeType: 'text/markdown', text }] };\n }\n const resource = uiResources.find((candidate) => candidate.uri === message.params.uri);\n if (presentation === 'app' && resource !== undefined && active.target.toolSurface.readUiResource !== undefined) {\n // Templates are immutable and session-independent, so hosts may prefetch them without a conversation ID.\n request.signal.throwIfAborted();\n const text = await active.target.toolSurface.readUiResource(snapshot.revision, resource.uri);\n request.signal.throwIfAborted();\n const current = await authorizeOperation();\n const after = grantedSurface(current.grant, current.target.toolSurface);\n if (\n current.target.toolSurface !== active.target.toolSurface ||\n after.snapshot.revision !== snapshot.revision ||\n !isDeepStrictEqual(\n after.uiResources.find((candidate) => candidate.uri === resource.uri),\n resource,\n )\n )\n throw new ProtocolError(ProtocolErrorCode.InvalidRequest, 'The session UI resource surface has changed.');\n return { contents: [{ ...resource, text }] };\n }\n if (message.params.uri.startsWith('ui:'))\n throw new ProtocolError(ProtocolErrorCode.InvalidParams, 'UI resource is not granted or active.');\n throw new ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Use ${wire('load_skill')} with conversation metadata to read target-session guidance.`,\n );\n });\n\n // One server per request, as before. Only the 2026-07-28 revision is served; a 2025-era request\n // is refused with the versions this endpoint supports.\n const handler = createMcpHandler(() => server, { legacy: 'reject' });\n try {\n return await handler.fetch(request, {\n authInfo: {\n token,\n clientId: grant.clientId,\n scopes:\n grant.scope === 'session'\n ? ['session']\n : [...grant.tools.map((name) => `tool:${name}`), ...grant.skills.map((name) => `skill:${name}`)],\n expiresAt: Math.floor(grant.expiresAt / 1000),\n resource: new URL(exactResource),\n },\n });\n } catch {\n return jsonError(500, 'Internal MCP server error.');\n }\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isPoHeadlessToolBusyError } from "../schemas/headless.mjs";
|
|
2
2
|
import { SessionMcpConversationError, sessionMcpConversationDigest } from "../services/sessionMcpConversations/index.mjs";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { isDeepStrictEqual } from "node:util";
|
|
@@ -322,7 +322,7 @@ function createSessionMcpHttpHandler(options) {
|
|
|
322
322
|
const advertised = wrapper ? void 0 : grantedSurface(parent.grant, parent.target.toolSurface).tools.find((tool) => tool.name === requested);
|
|
323
323
|
if (!wrapper && !advertised) throw new SessionMcpConversationError("TOOL_NOT_AVAILABLE", `Tool '${message.params.name}' is not available on this connection.` + (prefix === void 0 ? "" : ` Tool names here start with '${prefix}_'.`) + nextCall("session_capabilities", " for the current list."));
|
|
324
324
|
const transferName = requested === "use_extra_tools" && typeof message.params.arguments?.name === "string" ? sessionMcpInternalName(prefix, message.params.arguments.name) : requested;
|
|
325
|
-
fileTransfer = grantedSurface(parent.grant, parent.target.toolSurface).tools.some((tool) => tool.name === transferName && tool._meta?.["
|
|
325
|
+
fileTransfer = grantedSurface(parent.grant, parent.target.toolSurface).tools.some((tool) => tool.name === transferName && tool._meta?.["po/fileTransfer"] === true);
|
|
326
326
|
publishInvocation();
|
|
327
327
|
widgetTool = advertised;
|
|
328
328
|
const wrapperArgs = wrapper ? toolArguments(requested, message.params.arguments ?? {}, wire) : void 0;
|
|
@@ -403,7 +403,7 @@ function createSessionMcpHttpHandler(options) {
|
|
|
403
403
|
const selected = tools.find((tool) => tool.name === name);
|
|
404
404
|
if (name === void 0 || wrapper && (!extras.some((tool) => tool.name === name) || !selected)) throw new SessionMcpConversationError("TOOL_NOT_AVAILABLE", `Extra tool '${wrapperArgs?.name ?? message.params.name}' is not available.` + nextCall("load_extra_tools", " and pass a name it returns."));
|
|
405
405
|
if (!wrapper && (!selected || !isDeepStrictEqual(selected.parameters, advertised.parameters) || !isDeepStrictEqual(selected.outputSchema, advertised.outputSchema) || !isDeepStrictEqual(selected.annotations, advertised.annotations) || !isDeepStrictEqual(selected._meta, advertised._meta))) throw new SessionMcpConversationError("SESSION_TOOL_SURFACE_CHANGED", `This tool changed or was removed after your tool list loaded.${nextCall("load_extra_tools", grantedExtraTools(grant).some((tool) => tool.name === "use_extra_tools") ? ", and if it lists the tool, run it with " + wire("use_extra_tools") + "." : ", then refresh the connection to call a returned tool.")}`);
|
|
406
|
-
fileTransfer ||= selected?._meta?.["
|
|
406
|
+
fileTransfer ||= selected?._meta?.["po/fileTransfer"] === true;
|
|
407
407
|
widgetTool = wrapper ? void 0 : selected;
|
|
408
408
|
const recheck = async () => {
|
|
409
409
|
const current = await resolveTarget(false);
|
|
@@ -465,7 +465,7 @@ function createSessionMcpHttpHandler(options) {
|
|
|
465
465
|
});
|
|
466
466
|
} catch (error) {
|
|
467
467
|
if (signal.aborted || error instanceof ProtocolError || error instanceof SessionMcpConversationError) throw error;
|
|
468
|
-
if (
|
|
468
|
+
if (isPoHeadlessToolBusyError(error)) throw new SessionMcpConversationError("SESSION_BUSY", `The session stayed busy for 30 seconds, so ${wire(name)} did not start. Wait for the current turn to finish, then retry once.`);
|
|
469
469
|
throw new SessionMcpConversationError("TOOL_CALL_FAILED", `${wire(name)} did not return a result: ${error instanceof Error ? error.message : "unknown error"}. If the tool changes files or state, inspect before retrying.`);
|
|
470
470
|
}
|
|
471
471
|
try {
|