@agimon-ai/doompi-core 0.0.1-alpha.100
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 +21 -0
- package/README.md +5 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/agentModel.cjs +4 -0
- package/dist/agentModel.d.mts +2 -0
- package/dist/agentModel.mjs +2 -0
- package/dist/apiContracts.cjs +2009 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +1018 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +1989 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/askUser.cjs +8 -0
- package/dist/askUser.d.mts +2 -0
- package/dist/askUser.mjs +2 -0
- package/dist/authorTools.cjs +5 -0
- package/dist/authorTools.d.mts +2 -0
- package/dist/authorTools.mjs +2 -0
- package/dist/backgroundWork.cjs +7 -0
- package/dist/backgroundWork.d.mts +2 -0
- package/dist/backgroundWork.mjs +2 -0
- package/dist/bundleAssetPolicy.cjs +5 -0
- package/dist/bundleAssetPolicy.d.mts +2 -0
- package/dist/bundleAssetPolicy.mjs +2 -0
- package/dist/childProcess.cjs +15 -0
- package/dist/childProcess.d.mts +2 -0
- package/dist/childProcess.mjs +2 -0
- package/dist/childSession.cjs +8 -0
- package/dist/childSession.d.mts +3 -0
- package/dist/childSession.mjs +3 -0
- package/dist/cockpitContainer.cjs +4 -0
- package/dist/cockpitContainer.d.mts +2 -0
- package/dist/cockpitContainer.mjs +2 -0
- package/dist/config.cjs +13 -0
- package/dist/config.d.mts +3 -0
- package/dist/config.mjs +2 -0
- package/dist/contextApi.cjs +10 -0
- package/dist/contextApi.d.mts +4 -0
- package/dist/contextApi.mjs +3 -0
- package/dist/contextContributions.cjs +7 -0
- package/dist/contextContributions.d.mts +3 -0
- package/dist/contextContributions.mjs +3 -0
- package/dist/contextDetail.cjs +65 -0
- package/dist/contextDetail.cjs.map +1 -0
- package/dist/contextDetail.d.mts +19 -0
- package/dist/contextDetail.d.mts.map +1 -0
- package/dist/contextDetail.mjs +64 -0
- package/dist/contextDetail.mjs.map +1 -0
- package/dist/contextDetailStore.cjs +100 -0
- package/dist/contextDetailStore.cjs.map +1 -0
- package/dist/contextDetailStore.d.mts +19 -0
- package/dist/contextDetailStore.d.mts.map +1 -0
- package/dist/contextDetailStore.mjs +91 -0
- package/dist/contextDetailStore.mjs.map +1 -0
- package/dist/contextProjection.cjs +121 -0
- package/dist/contextProjection.cjs.map +1 -0
- package/dist/contextProjection.d.mts +130 -0
- package/dist/contextProjection.d.mts.map +1 -0
- package/dist/contextProjection.mjs +117 -0
- package/dist/contextProjection.mjs.map +1 -0
- package/dist/cordisHost.cjs +11 -0
- package/dist/cordisHost.d.mts +2 -0
- package/dist/cordisHost.mjs +2 -0
- package/dist/delegation.cjs +18 -0
- package/dist/delegation.d.mts +2 -0
- package/dist/delegation.mjs +2 -0
- package/dist/doomPackage.cjs +61 -0
- package/dist/doomPackage.cjs.map +1 -0
- package/dist/doomPackage.d.mts +17 -0
- package/dist/doomPackage.d.mts.map +1 -0
- package/dist/doomPackage.mjs +54 -0
- package/dist/doomPackage.mjs.map +1 -0
- package/dist/executionBudget.cjs +231 -0
- package/dist/executionBudget.cjs.map +1 -0
- package/dist/executionBudget.d.mts +11 -0
- package/dist/executionBudget.d.mts.map +1 -0
- package/dist/executionBudget.mjs +225 -0
- package/dist/executionBudget.mjs.map +1 -0
- package/dist/extensionFile.cjs +24 -0
- package/dist/extensionFile.d.mts +3 -0
- package/dist/extensionFile.mjs +2 -0
- package/dist/footer.cjs +6 -0
- package/dist/footer.d.mts +2 -0
- package/dist/footer.mjs +2 -0
- package/dist/headless.cjs +9 -0
- package/dist/headless.d.mts +2 -0
- package/dist/headless.mjs +2 -0
- package/dist/headlessHub.cjs +914 -0
- package/dist/headlessHub.cjs.map +1 -0
- package/dist/headlessHub.d.mts +157 -0
- package/dist/headlessHub.d.mts.map +1 -0
- package/dist/headlessHub.mjs +911 -0
- package/dist/headlessHub.mjs.map +1 -0
- package/dist/headlessServer.cjs +910 -0
- package/dist/headlessServer.cjs.map +1 -0
- package/dist/headlessServer.d.mts +64 -0
- package/dist/headlessServer.d.mts.map +1 -0
- package/dist/headlessServer.mjs +904 -0
- package/dist/headlessServer.mjs.map +1 -0
- package/dist/headlessSessionHost.cjs +0 -0
- package/dist/headlessSessionHost.d.mts +71 -0
- package/dist/headlessSessionHost.d.mts.map +1 -0
- package/dist/headlessSessionHost.mjs +1 -0
- package/dist/headlessSessionManager.cjs +51 -0
- package/dist/headlessSessionManager.cjs.map +1 -0
- package/dist/headlessSessionManager.d.mts +6 -0
- package/dist/headlessSessionManager.d.mts.map +1 -0
- package/dist/headlessSessionManager.mjs +50 -0
- package/dist/headlessSessionManager.mjs.map +1 -0
- package/dist/help.cjs +24 -0
- package/dist/help.d.mts +3 -0
- package/dist/help.mjs +3 -0
- package/dist/history.cjs +25 -0
- package/dist/history.d.mts +10 -0
- package/dist/history.mjs +10 -0
- package/dist/historyImport.cjs +553 -0
- package/dist/historyImport.cjs.map +1 -0
- package/dist/historyImport.d.mts +76 -0
- package/dist/historyImport.d.mts.map +1 -0
- package/dist/historyImport.mjs +547 -0
- package/dist/historyImport.mjs.map +1 -0
- package/dist/historyOwnership.cjs +253 -0
- package/dist/historyOwnership.cjs.map +1 -0
- package/dist/historyOwnership.d.mts +23 -0
- package/dist/historyOwnership.d.mts.map +1 -0
- package/dist/historyOwnership.mjs +247 -0
- package/dist/historyOwnership.mjs.map +1 -0
- package/dist/hubChannel.cjs +4 -0
- package/dist/hubChannel.d.mts +2 -0
- package/dist/hubChannel.mjs +2 -0
- package/dist/index.cjs +44 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +6 -0
- package/dist/json.cjs +6 -0
- package/dist/json.d.mts +2 -0
- package/dist/json.mjs +2 -0
- package/dist/jsonlSessionRepo.cjs +217 -0
- package/dist/jsonlSessionRepo.cjs.map +1 -0
- package/dist/jsonlSessionRepo.d.mts +7 -0
- package/dist/jsonlSessionRepo.d.mts.map +1 -0
- package/dist/jsonlSessionRepo.mjs +212 -0
- package/dist/jsonlSessionRepo.mjs.map +1 -0
- package/dist/kernel.cjs +3 -0
- package/dist/kernel.d.mts +3 -0
- package/dist/kernel.mjs +2 -0
- package/dist/leader.cjs +9 -0
- package/dist/leader.d.mts +2 -0
- package/dist/leader.mjs +2 -0
- package/dist/logSinkTelemetry.cjs +5 -0
- package/dist/logSinkTelemetry.d.mts +2 -0
- package/dist/logSinkTelemetry.mjs +2 -0
- package/dist/machineApi.cjs +92 -0
- package/dist/machineApi.cjs.map +1 -0
- package/dist/machineApi.d.mts +7 -0
- package/dist/machineApi.d.mts.map +1 -0
- package/dist/machineApi.mjs +88 -0
- package/dist/machineApi.mjs.map +1 -0
- package/dist/main.cjs +11 -0
- package/dist/main.d.mts +5 -0
- package/dist/main.mjs +4 -0
- package/dist/mcpFacet.cjs +12 -0
- package/dist/mcpFacet.d.mts +4 -0
- package/dist/mcpFacet.mjs +4 -0
- package/dist/mcpProjection.cjs +16 -0
- package/dist/mcpProjection.d.mts +2 -0
- package/dist/mcpProjection.mjs +2 -0
- package/dist/mcpSchemaCost.cjs +195 -0
- package/dist/mcpSchemaCost.cjs.map +1 -0
- package/dist/mcpSchemaCost.d.mts +35 -0
- package/dist/mcpSchemaCost.d.mts.map +1 -0
- package/dist/mcpSchemaCost.mjs +190 -0
- package/dist/mcpSchemaCost.mjs.map +1 -0
- package/dist/mcpSession.cjs +9 -0
- package/dist/mcpSession.d.mts +2 -0
- package/dist/mcpSession.mjs +2 -0
- package/dist/mcpStatus.cjs +7 -0
- package/dist/mcpStatus.d.mts +2 -0
- package/dist/mcpStatus.mjs +2 -0
- package/dist/mcpToolResolver.cjs +5 -0
- package/dist/mcpToolResolver.d.mts +2 -0
- package/dist/mcpToolResolver.mjs +2 -0
- package/dist/mcpWidget.cjs +0 -0
- package/dist/mcpWidget.d.mts +2 -0
- package/dist/mcpWidget.mjs +1 -0
- package/dist/moduleResolution.cjs +405 -0
- package/dist/moduleResolution.cjs.map +1 -0
- package/dist/moduleResolution.d.mts +67 -0
- package/dist/moduleResolution.d.mts.map +1 -0
- package/dist/moduleResolution.mjs +389 -0
- package/dist/moduleResolution.mjs.map +1 -0
- package/dist/narration.cjs +10 -0
- package/dist/narration.d.mts +2 -0
- package/dist/narration.mjs +2 -0
- package/dist/notification.cjs +17 -0
- package/dist/notification.d.mts +2 -0
- package/dist/notification.mjs +2 -0
- package/dist/packageApi.cjs +16 -0
- package/dist/packageApi.d.mts +3 -0
- package/dist/packageApi.mjs +3 -0
- package/dist/packageApiServer.cjs +191 -0
- package/dist/packageApiServer.cjs.map +1 -0
- package/dist/packageApiServer.d.mts +57 -0
- package/dist/packageApiServer.d.mts.map +1 -0
- package/dist/packageApiServer.mjs +189 -0
- package/dist/packageApiServer.mjs.map +1 -0
- package/dist/piExtension.cjs +13 -0
- package/dist/piExtension.d.mts +5 -0
- package/dist/piExtension.mjs +4 -0
- package/dist/piSettings.cjs +12 -0
- package/dist/piSettings.d.mts +2 -0
- package/dist/piSettings.mjs +2 -0
- package/dist/pluginProtocol.cjs +10 -0
- package/dist/pluginProtocol.d.mts +2 -0
- package/dist/pluginProtocol.mjs +2 -0
- package/dist/profileIdentity.cjs +6 -0
- package/dist/profileIdentity.d.mts +2 -0
- package/dist/profileIdentity.mjs +2 -0
- package/dist/protocol.cjs +10 -0
- package/dist/protocol.d.mts +2 -0
- package/dist/protocol.mjs +2 -0
- package/dist/readiness.cjs +8 -0
- package/dist/readiness.d.mts +2 -0
- package/dist/readiness.mjs +2 -0
- package/dist/relaunchHandoff.cjs +6 -0
- package/dist/relaunchHandoff.d.mts +2 -0
- package/dist/relaunchHandoff.mjs +2 -0
- package/dist/remoteApi.cjs +42 -0
- package/dist/remoteApi.cjs.map +1 -0
- package/dist/remoteApi.d.mts +7 -0
- package/dist/remoteApi.d.mts.map +1 -0
- package/dist/remoteApi.mjs +41 -0
- package/dist/remoteApi.mjs.map +1 -0
- package/dist/remoteRuntime.cjs +460 -0
- package/dist/remoteRuntime.cjs.map +1 -0
- package/dist/remoteRuntime.d.mts +28 -0
- package/dist/remoteRuntime.d.mts.map +1 -0
- package/dist/remoteRuntime.mjs +456 -0
- package/dist/remoteRuntime.mjs.map +1 -0
- package/dist/runtimeConfig.cjs +232 -0
- package/dist/runtimeConfig.cjs.map +1 -0
- package/dist/runtimeConfig.d.mts +313 -0
- package/dist/runtimeConfig.d.mts.map +1 -0
- package/dist/runtimeConfig.mjs +221 -0
- package/dist/runtimeConfig.mjs.map +1 -0
- package/dist/runtimeContextApi.cjs +64 -0
- package/dist/runtimeContextApi.cjs.map +1 -0
- package/dist/runtimeContextApi.d.mts +16 -0
- package/dist/runtimeContextApi.d.mts.map +1 -0
- package/dist/runtimeContextApi.mjs +62 -0
- package/dist/runtimeContextApi.mjs.map +1 -0
- package/dist/runtimeCordisHost.cjs +193 -0
- package/dist/runtimeCordisHost.cjs.map +1 -0
- package/dist/runtimeCordisHost.d.mts +63 -0
- package/dist/runtimeCordisHost.d.mts.map +1 -0
- package/dist/runtimeCordisHost.mjs +184 -0
- package/dist/runtimeCordisHost.mjs.map +1 -0
- package/dist/runtimeHeadlessSessionManager.cjs +0 -0
- package/dist/runtimeHeadlessSessionManager.d.mts +18 -0
- package/dist/runtimeHeadlessSessionManager.d.mts.map +1 -0
- package/dist/runtimeHeadlessSessionManager.mjs +1 -0
- package/dist/runtimeIdentity.cjs +26 -0
- package/dist/runtimeIdentity.cjs.map +1 -0
- package/dist/runtimeIdentity.d.mts +7 -0
- package/dist/runtimeIdentity.d.mts.map +1 -0
- package/dist/runtimeIdentity.mjs +21 -0
- package/dist/runtimeIdentity.mjs.map +1 -0
- package/dist/runtimeJson.cjs +46 -0
- package/dist/runtimeJson.cjs.map +1 -0
- package/dist/runtimeJson.d.mts +22 -0
- package/dist/runtimeJson.d.mts.map +1 -0
- package/dist/runtimeJson.mjs +39 -0
- package/dist/runtimeJson.mjs.map +1 -0
- package/dist/runtimeLogSinkTelemetry.cjs +102 -0
- package/dist/runtimeLogSinkTelemetry.cjs.map +1 -0
- package/dist/runtimeLogSinkTelemetry.d.mts +49 -0
- package/dist/runtimeLogSinkTelemetry.d.mts.map +1 -0
- package/dist/runtimeLogSinkTelemetry.mjs +99 -0
- package/dist/runtimeLogSinkTelemetry.mjs.map +1 -0
- package/dist/runtimePiExtension.cjs +339 -0
- package/dist/runtimePiExtension.cjs.map +1 -0
- package/dist/runtimePiExtension.d.mts +160 -0
- package/dist/runtimePiExtension.d.mts.map +1 -0
- package/dist/runtimePiExtension.mjs +333 -0
- package/dist/runtimePiExtension.mjs.map +1 -0
- package/dist/runtimePiSettings.cjs +116 -0
- package/dist/runtimePiSettings.cjs.map +1 -0
- package/dist/runtimePiSettings.d.mts +29 -0
- package/dist/runtimePiSettings.d.mts.map +1 -0
- package/dist/runtimePiSettings.mjs +103 -0
- package/dist/runtimePiSettings.mjs.map +1 -0
- package/dist/runtimeProtocol.cjs +223 -0
- package/dist/runtimeProtocol.cjs.map +1 -0
- package/dist/runtimeProtocol.d.mts +84 -0
- package/dist/runtimeProtocol.d.mts.map +1 -0
- package/dist/runtimeProtocol.mjs +215 -0
- package/dist/runtimeProtocol.mjs.map +1 -0
- package/dist/runtimeToolNames.cjs +51 -0
- package/dist/runtimeToolNames.cjs.map +1 -0
- package/dist/runtimeToolNames.d.mts +24 -0
- package/dist/runtimeToolNames.d.mts.map +1 -0
- package/dist/runtimeToolNames.mjs +49 -0
- package/dist/runtimeToolNames.mjs.map +1 -0
- package/dist/runtimeTransition.cjs +27 -0
- package/dist/runtimeTransition.cjs.map +1 -0
- package/dist/runtimeTransition.d.mts +114 -0
- package/dist/runtimeTransition.d.mts.map +1 -0
- package/dist/runtimeTransition.mjs +24 -0
- package/dist/runtimeTransition.mjs.map +1 -0
- package/dist/sandboxHarness.cjs +6 -0
- package/dist/sandboxHarness.d.mts +2 -0
- package/dist/sandboxHarness.mjs +2 -0
- package/dist/server.cjs +17 -0
- package/dist/server.d.mts +10 -0
- package/dist/server.mjs +7 -0
- package/dist/serverFacet.cjs +30 -0
- package/dist/serverFacet.d.mts +8 -0
- package/dist/serverFacet.mjs +8 -0
- package/dist/serverTelemetry.cjs +25 -0
- package/dist/serverTelemetry.cjs.map +1 -0
- package/dist/serverTelemetry.d.mts +12 -0
- package/dist/serverTelemetry.d.mts.map +1 -0
- package/dist/serverTelemetry.mjs +23 -0
- package/dist/serverTelemetry.mjs.map +1 -0
- package/dist/sessionFilesApi.cjs +96 -0
- package/dist/sessionFilesApi.cjs.map +1 -0
- package/dist/sessionFilesApi.d.mts +7 -0
- package/dist/sessionFilesApi.d.mts.map +1 -0
- package/dist/sessionFilesApi.mjs +91 -0
- package/dist/sessionFilesApi.mjs.map +1 -0
- package/dist/sessionMcp.cjs +6 -0
- package/dist/sessionMcp.d.mts +5 -0
- package/dist/sessionMcp.mjs +3 -0
- package/dist/sessionProtocol.cjs +8 -0
- package/dist/sessionProtocol.d.mts +3 -0
- package/dist/sessionProtocol.mjs +2 -0
- package/dist/skills.cjs +9 -0
- package/dist/skills.d.mts +2 -0
- package/dist/skills.mjs +2 -0
- package/dist/sqliteHistoryImport.cjs +151 -0
- package/dist/sqliteHistoryImport.cjs.map +1 -0
- package/dist/sqliteHistoryImport.d.mts +8 -0
- package/dist/sqliteHistoryImport.d.mts.map +1 -0
- package/dist/sqliteHistoryImport.mjs +146 -0
- package/dist/sqliteHistoryImport.mjs.map +1 -0
- package/dist/sqliteSessionStorage.cjs +53 -0
- package/dist/sqliteSessionStorage.cjs.map +1 -0
- package/dist/sqliteSessionStorage.d.mts +7 -0
- package/dist/sqliteSessionStorage.d.mts.map +1 -0
- package/dist/sqliteSessionStorage.mjs +49 -0
- package/dist/sqliteSessionStorage.mjs.map +1 -0
- package/dist/src/constants/authorTools.cjs +10 -0
- package/dist/src/constants/authorTools.cjs.map +1 -0
- package/dist/src/constants/authorTools.d.mts +6 -0
- package/dist/src/constants/authorTools.d.mts.map +1 -0
- package/dist/src/constants/authorTools.mjs +8 -0
- package/dist/src/constants/authorTools.mjs.map +1 -0
- package/dist/src/constants/contextApi.cjs +28 -0
- package/dist/src/constants/contextApi.cjs.map +1 -0
- package/dist/src/constants/contextApi.d.mts +21 -0
- package/dist/src/constants/contextApi.d.mts.map +1 -0
- package/dist/src/constants/contextApi.mjs +23 -0
- package/dist/src/constants/contextApi.mjs.map +1 -0
- package/dist/src/constants/remote.cjs +90 -0
- package/dist/src/constants/remote.cjs.map +1 -0
- package/dist/src/constants/remote.mjs +69 -0
- package/dist/src/constants/remote.mjs.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.cjs +12 -0
- package/dist/src/constants/voiceReloadHandoff.cjs.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.d.mts +7 -0
- package/dist/src/constants/voiceReloadHandoff.d.mts.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.mjs +9 -0
- package/dist/src/constants/voiceReloadHandoff.mjs.map +1 -0
- package/dist/src/constants/voiceTools.cjs +96 -0
- package/dist/src/constants/voiceTools.cjs.map +1 -0
- package/dist/src/constants/voiceTools.d.mts +58 -0
- package/dist/src/constants/voiceTools.d.mts.map +1 -0
- package/dist/src/constants/voiceTools.mjs +60 -0
- package/dist/src/constants/voiceTools.mjs.map +1 -0
- package/dist/src/extensions/extensionFile.cjs +165 -0
- package/dist/src/extensions/extensionFile.cjs.map +1 -0
- package/dist/src/extensions/extensionFile.d.mts +79 -0
- package/dist/src/extensions/extensionFile.d.mts.map +1 -0
- package/dist/src/extensions/extensionFile.mjs +144 -0
- package/dist/src/extensions/extensionFile.mjs.map +1 -0
- package/dist/src/extensions/serverPlugin.cjs +106 -0
- package/dist/src/extensions/serverPlugin.cjs.map +1 -0
- package/dist/src/extensions/serverPlugin.d.mts +5 -0
- package/dist/src/extensions/serverPlugin.d.mts.map +1 -0
- package/dist/src/extensions/serverPlugin.mjs +106 -0
- package/dist/src/extensions/serverPlugin.mjs.map +1 -0
- package/dist/src/extensions/webPlugin.cjs +131 -0
- package/dist/src/extensions/webPlugin.cjs.map +1 -0
- package/dist/src/extensions/webPlugin.d.mts +66 -0
- package/dist/src/extensions/webPlugin.d.mts.map +1 -0
- package/dist/src/extensions/webPlugin.mjs +110 -0
- package/dist/src/extensions/webPlugin.mjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.cjs +572 -0
- package/dist/src/pi/piSessionRuntime.cjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.d.mts +43 -0
- package/dist/src/pi/piSessionRuntime.d.mts.map +1 -0
- package/dist/src/pi/piSessionRuntime.mjs +571 -0
- package/dist/src/pi/piSessionRuntime.mjs.map +1 -0
- package/dist/src/pi/piWebSocketListener.cjs +115 -0
- package/dist/src/pi/piWebSocketListener.cjs.map +1 -0
- package/dist/src/pi/piWebSocketListener.mjs +115 -0
- package/dist/src/pi/piWebSocketListener.mjs.map +1 -0
- package/dist/src/schemas/agentModel.cjs +33 -0
- package/dist/src/schemas/agentModel.cjs.map +1 -0
- package/dist/src/schemas/agentModel.d.mts +26 -0
- package/dist/src/schemas/agentModel.d.mts.map +1 -0
- package/dist/src/schemas/agentModel.mjs +32 -0
- package/dist/src/schemas/agentModel.mjs.map +1 -0
- package/dist/src/schemas/apiContracts.d.mts +58 -0
- package/dist/src/schemas/apiContracts.d.mts.map +1 -0
- package/dist/src/schemas/askUser.cjs +42 -0
- package/dist/src/schemas/askUser.cjs.map +1 -0
- package/dist/src/schemas/askUser.d.mts +47 -0
- package/dist/src/schemas/askUser.d.mts.map +1 -0
- package/dist/src/schemas/askUser.mjs +37 -0
- package/dist/src/schemas/askUser.mjs.map +1 -0
- package/dist/src/schemas/backgroundWork.cjs +31 -0
- package/dist/src/schemas/backgroundWork.cjs.map +1 -0
- package/dist/src/schemas/backgroundWork.d.mts +72 -0
- package/dist/src/schemas/backgroundWork.d.mts.map +1 -0
- package/dist/src/schemas/backgroundWork.mjs +27 -0
- package/dist/src/schemas/backgroundWork.mjs.map +1 -0
- package/dist/src/schemas/childProcess.cjs +67 -0
- package/dist/src/schemas/childProcess.cjs.map +1 -0
- package/dist/src/schemas/childProcess.d.mts +30 -0
- package/dist/src/schemas/childProcess.d.mts.map +1 -0
- package/dist/src/schemas/childProcess.mjs +55 -0
- package/dist/src/schemas/childProcess.mjs.map +1 -0
- package/dist/src/schemas/cockpitContainer.cjs +31 -0
- package/dist/src/schemas/cockpitContainer.cjs.map +1 -0
- package/dist/src/schemas/cockpitContainer.d.mts +80 -0
- package/dist/src/schemas/cockpitContainer.d.mts.map +1 -0
- package/dist/src/schemas/cockpitContainer.mjs +30 -0
- package/dist/src/schemas/cockpitContainer.mjs.map +1 -0
- package/dist/src/schemas/contextContributions.cjs +17 -0
- package/dist/src/schemas/contextContributions.cjs.map +1 -0
- package/dist/src/schemas/contextContributions.d.mts +49 -0
- package/dist/src/schemas/contextContributions.d.mts.map +1 -0
- package/dist/src/schemas/contextContributions.mjs +15 -0
- package/dist/src/schemas/contextContributions.mjs.map +1 -0
- package/dist/src/schemas/delegation.cjs +91 -0
- package/dist/src/schemas/delegation.cjs.map +1 -0
- package/dist/src/schemas/delegation.d.mts +95 -0
- package/dist/src/schemas/delegation.d.mts.map +1 -0
- package/dist/src/schemas/delegation.mjs +76 -0
- package/dist/src/schemas/delegation.mjs.map +1 -0
- package/dist/src/schemas/extensionFile.d.mts +136 -0
- package/dist/src/schemas/extensionFile.d.mts.map +1 -0
- package/dist/src/schemas/footer.cjs +48 -0
- package/dist/src/schemas/footer.cjs.map +1 -0
- package/dist/src/schemas/footer.d.mts +48 -0
- package/dist/src/schemas/footer.d.mts.map +1 -0
- package/dist/src/schemas/footer.mjs +45 -0
- package/dist/src/schemas/footer.mjs.map +1 -0
- package/dist/src/schemas/headless.cjs +44 -0
- package/dist/src/schemas/headless.cjs.map +1 -0
- package/dist/src/schemas/headless.d.mts +370 -0
- package/dist/src/schemas/headless.d.mts.map +1 -0
- package/dist/src/schemas/headless.mjs +38 -0
- package/dist/src/schemas/headless.mjs.map +1 -0
- package/dist/src/schemas/help.cjs +281 -0
- package/dist/src/schemas/help.cjs.map +1 -0
- package/dist/src/schemas/help.d.mts +119 -0
- package/dist/src/schemas/help.d.mts.map +1 -0
- package/dist/src/schemas/help.mjs +262 -0
- package/dist/src/schemas/help.mjs.map +1 -0
- package/dist/src/schemas/hubChannel.cjs +20 -0
- package/dist/src/schemas/hubChannel.cjs.map +1 -0
- package/dist/src/schemas/hubChannel.d.mts +236 -0
- package/dist/src/schemas/hubChannel.d.mts.map +1 -0
- package/dist/src/schemas/hubChannel.mjs +19 -0
- package/dist/src/schemas/hubChannel.mjs.map +1 -0
- package/dist/src/schemas/leader.cjs +57 -0
- package/dist/src/schemas/leader.cjs.map +1 -0
- package/dist/src/schemas/leader.d.mts +107 -0
- package/dist/src/schemas/leader.d.mts.map +1 -0
- package/dist/src/schemas/leader.mjs +51 -0
- package/dist/src/schemas/leader.mjs.map +1 -0
- package/dist/src/schemas/mcpBundle.cjs +92 -0
- package/dist/src/schemas/mcpBundle.cjs.map +1 -0
- package/dist/src/schemas/mcpBundle.d.mts +33 -0
- package/dist/src/schemas/mcpBundle.d.mts.map +1 -0
- package/dist/src/schemas/mcpBundle.mjs +90 -0
- package/dist/src/schemas/mcpBundle.mjs.map +1 -0
- package/dist/src/schemas/mcpFacet.cjs +24 -0
- package/dist/src/schemas/mcpFacet.cjs.map +1 -0
- package/dist/src/schemas/mcpFacet.d.mts +91 -0
- package/dist/src/schemas/mcpFacet.d.mts.map +1 -0
- package/dist/src/schemas/mcpFacet.mjs +21 -0
- package/dist/src/schemas/mcpFacet.mjs.map +1 -0
- package/dist/src/schemas/mcpProjection.cjs +117 -0
- package/dist/src/schemas/mcpProjection.cjs.map +1 -0
- package/dist/src/schemas/mcpProjection.d.mts +124 -0
- package/dist/src/schemas/mcpProjection.d.mts.map +1 -0
- package/dist/src/schemas/mcpProjection.mjs +104 -0
- package/dist/src/schemas/mcpProjection.mjs.map +1 -0
- package/dist/src/schemas/mcpSession.cjs +57 -0
- package/dist/src/schemas/mcpSession.cjs.map +1 -0
- package/dist/src/schemas/mcpSession.d.mts +57 -0
- package/dist/src/schemas/mcpSession.d.mts.map +1 -0
- package/dist/src/schemas/mcpSession.mjs +51 -0
- package/dist/src/schemas/mcpSession.mjs.map +1 -0
- package/dist/src/schemas/mcpStatus.cjs +52 -0
- package/dist/src/schemas/mcpStatus.cjs.map +1 -0
- package/dist/src/schemas/mcpStatus.d.mts +73 -0
- package/dist/src/schemas/mcpStatus.d.mts.map +1 -0
- package/dist/src/schemas/mcpStatus.mjs +48 -0
- package/dist/src/schemas/mcpStatus.mjs.map +1 -0
- package/dist/src/schemas/mcpToolResolver.cjs +17 -0
- package/dist/src/schemas/mcpToolResolver.cjs.map +1 -0
- package/dist/src/schemas/mcpToolResolver.d.mts +24 -0
- package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -0
- package/dist/src/schemas/mcpToolResolver.mjs +15 -0
- package/dist/src/schemas/mcpToolResolver.mjs.map +1 -0
- package/dist/src/schemas/narration.cjs +54 -0
- package/dist/src/schemas/narration.cjs.map +1 -0
- package/dist/src/schemas/narration.d.mts +29 -0
- package/dist/src/schemas/narration.d.mts.map +1 -0
- package/dist/src/schemas/narration.mjs +47 -0
- package/dist/src/schemas/narration.mjs.map +1 -0
- package/dist/src/schemas/notification.cjs +122 -0
- package/dist/src/schemas/notification.cjs.map +1 -0
- package/dist/src/schemas/notification.d.mts +48 -0
- package/dist/src/schemas/notification.d.mts.map +1 -0
- package/dist/src/schemas/notification.mjs +108 -0
- package/dist/src/schemas/notification.mjs.map +1 -0
- package/dist/src/schemas/packageApi.cjs +73 -0
- package/dist/src/schemas/packageApi.cjs.map +1 -0
- package/dist/src/schemas/packageApi.d.mts +249 -0
- package/dist/src/schemas/packageApi.d.mts.map +1 -0
- package/dist/src/schemas/packageApi.mjs +64 -0
- package/dist/src/schemas/packageApi.mjs.map +1 -0
- package/dist/src/schemas/piTool.cjs +26 -0
- package/dist/src/schemas/piTool.cjs.map +1 -0
- package/dist/src/schemas/piTool.d.mts +25 -0
- package/dist/src/schemas/piTool.d.mts.map +1 -0
- package/dist/src/schemas/piTool.mjs +26 -0
- package/dist/src/schemas/piTool.mjs.map +1 -0
- package/dist/src/schemas/pluginContributions.cjs +19 -0
- package/dist/src/schemas/pluginContributions.cjs.map +1 -0
- package/dist/src/schemas/pluginContributions.d.mts +56 -0
- package/dist/src/schemas/pluginContributions.d.mts.map +1 -0
- package/dist/src/schemas/pluginContributions.mjs +18 -0
- package/dist/src/schemas/pluginContributions.mjs.map +1 -0
- package/dist/src/schemas/pluginProtocol.cjs +103 -0
- package/dist/src/schemas/pluginProtocol.cjs.map +1 -0
- package/dist/src/schemas/pluginProtocol.d.mts +68 -0
- package/dist/src/schemas/pluginProtocol.d.mts.map +1 -0
- package/dist/src/schemas/pluginProtocol.mjs +96 -0
- package/dist/src/schemas/pluginProtocol.mjs.map +1 -0
- package/dist/src/schemas/profileIdentity.cjs +67 -0
- package/dist/src/schemas/profileIdentity.cjs.map +1 -0
- package/dist/src/schemas/profileIdentity.d.mts +50 -0
- package/dist/src/schemas/profileIdentity.d.mts.map +1 -0
- package/dist/src/schemas/profileIdentity.mjs +64 -0
- package/dist/src/schemas/profileIdentity.mjs.map +1 -0
- package/dist/src/schemas/readiness.cjs +251 -0
- package/dist/src/schemas/readiness.cjs.map +1 -0
- package/dist/src/schemas/readiness.d.mts +84 -0
- package/dist/src/schemas/readiness.d.mts.map +1 -0
- package/dist/src/schemas/readiness.mjs +246 -0
- package/dist/src/schemas/readiness.mjs.map +1 -0
- package/dist/src/schemas/relaunchHandoff.cjs +47 -0
- package/dist/src/schemas/relaunchHandoff.cjs.map +1 -0
- package/dist/src/schemas/relaunchHandoff.d.mts +25 -0
- package/dist/src/schemas/relaunchHandoff.d.mts.map +1 -0
- package/dist/src/schemas/relaunchHandoff.mjs +44 -0
- package/dist/src/schemas/relaunchHandoff.mjs.map +1 -0
- package/dist/src/schemas/sandboxHarness.cjs +29 -0
- package/dist/src/schemas/sandboxHarness.cjs.map +1 -0
- package/dist/src/schemas/sandboxHarness.d.mts +39 -0
- package/dist/src/schemas/sandboxHarness.d.mts.map +1 -0
- package/dist/src/schemas/sandboxHarness.mjs +26 -0
- package/dist/src/schemas/sandboxHarness.mjs.map +1 -0
- package/dist/src/schemas/serverBundle.cjs +79 -0
- package/dist/src/schemas/serverBundle.cjs.map +1 -0
- package/dist/src/schemas/serverBundle.d.mts +34 -0
- package/dist/src/schemas/serverBundle.d.mts.map +1 -0
- package/dist/src/schemas/serverBundle.mjs +77 -0
- package/dist/src/schemas/serverBundle.mjs.map +1 -0
- package/dist/src/schemas/serverFacet.cjs +102 -0
- package/dist/src/schemas/serverFacet.cjs.map +1 -0
- package/dist/src/schemas/serverFacet.d.mts +141 -0
- package/dist/src/schemas/serverFacet.d.mts.map +1 -0
- package/dist/src/schemas/serverFacet.mjs +93 -0
- package/dist/src/schemas/serverFacet.mjs.map +1 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts +45 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts.map +1 -0
- package/dist/src/schemas/sessionProtocol.cjs +17 -0
- package/dist/src/schemas/sessionProtocol.cjs.map +1 -0
- package/dist/src/schemas/sessionProtocol.d.mts +308 -0
- package/dist/src/schemas/sessionProtocol.d.mts.map +1 -0
- package/dist/src/schemas/sessionProtocol.mjs +12 -0
- package/dist/src/schemas/sessionProtocol.mjs.map +1 -0
- package/dist/src/schemas/sessionUpdates.d.mts +34 -0
- package/dist/src/schemas/sessionUpdates.d.mts.map +1 -0
- package/dist/src/schemas/skills.cjs +115 -0
- package/dist/src/schemas/skills.cjs.map +1 -0
- package/dist/src/schemas/skills.d.mts +65 -0
- package/dist/src/schemas/skills.d.mts.map +1 -0
- package/dist/src/schemas/skills.mjs +109 -0
- package/dist/src/schemas/skills.mjs.map +1 -0
- package/dist/src/schemas/toolOverrides.cjs +17 -0
- package/dist/src/schemas/toolOverrides.cjs.map +1 -0
- package/dist/src/schemas/toolOverrides.d.mts +29 -0
- package/dist/src/schemas/toolOverrides.d.mts.map +1 -0
- package/dist/src/schemas/toolOverrides.mjs +15 -0
- package/dist/src/schemas/toolOverrides.mjs.map +1 -0
- package/dist/src/schemas/toolSurface.cjs +17 -0
- package/dist/src/schemas/toolSurface.cjs.map +1 -0
- package/dist/src/schemas/toolSurface.d.mts +70 -0
- package/dist/src/schemas/toolSurface.d.mts.map +1 -0
- package/dist/src/schemas/toolSurface.mjs +15 -0
- package/dist/src/schemas/toolSurface.mjs.map +1 -0
- package/dist/src/schemas/uiHub.cjs +17 -0
- package/dist/src/schemas/uiHub.cjs.map +1 -0
- package/dist/src/schemas/uiHub.d.mts +23 -0
- package/dist/src/schemas/uiHub.d.mts.map +1 -0
- package/dist/src/schemas/uiHub.mjs +15 -0
- package/dist/src/schemas/uiHub.mjs.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.cjs +78 -0
- package/dist/src/schemas/voiceReloadHandoff.cjs.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.d.mts +31 -0
- package/dist/src/schemas/voiceReloadHandoff.d.mts.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.mjs +75 -0
- package/dist/src/schemas/voiceReloadHandoff.mjs.map +1 -0
- package/dist/src/schemas/voiceTools.cjs +205 -0
- package/dist/src/schemas/voiceTools.cjs.map +1 -0
- package/dist/src/schemas/voiceTools.d.mts +120 -0
- package/dist/src/schemas/voiceTools.d.mts.map +1 -0
- package/dist/src/schemas/voiceTools.mjs +194 -0
- package/dist/src/schemas/voiceTools.mjs.map +1 -0
- package/dist/src/server/devProxyForward.cjs +141 -0
- package/dist/src/server/devProxyForward.cjs.map +1 -0
- package/dist/src/server/devProxyForward.mjs +139 -0
- package/dist/src/server/devProxyForward.mjs.map +1 -0
- package/dist/src/server/devProxyRoutes.cjs +97 -0
- package/dist/src/server/devProxyRoutes.cjs.map +1 -0
- package/dist/src/server/devProxyRoutes.mjs +97 -0
- package/dist/src/server/devProxyRoutes.mjs.map +1 -0
- package/dist/src/server/devProxySocket.cjs +87 -0
- package/dist/src/server/devProxySocket.cjs.map +1 -0
- package/dist/src/server/devProxySocket.mjs +87 -0
- package/dist/src/server/devProxySocket.mjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.cjs +1964 -0
- package/dist/src/server/directHarnessRuntime.cjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.d.mts +3 -0
- package/dist/src/server/directHarnessRuntime.mjs +1958 -0
- package/dist/src/server/directHarnessRuntime.mjs.map +1 -0
- package/dist/src/server/harnessErrorMessage.cjs +13 -0
- package/dist/src/server/harnessErrorMessage.cjs.map +1 -0
- package/dist/src/server/harnessErrorMessage.mjs +13 -0
- package/dist/src/server/harnessErrorMessage.mjs.map +1 -0
- package/dist/src/server/headlessProtocol.cjs +366 -0
- package/dist/src/server/headlessProtocol.cjs.map +1 -0
- package/dist/src/server/headlessProtocol.mjs +366 -0
- package/dist/src/server/headlessProtocol.mjs.map +1 -0
- package/dist/src/server/jsonlTranscriptReader.cjs +85 -0
- package/dist/src/server/jsonlTranscriptReader.cjs.map +1 -0
- package/dist/src/server/jsonlTranscriptReader.mjs +83 -0
- package/dist/src/server/jsonlTranscriptReader.mjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.cjs +115 -0
- package/dist/src/server/mcpBundleLoader.cjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.d.mts +27 -0
- package/dist/src/server/mcpBundleLoader.d.mts.map +1 -0
- package/dist/src/server/mcpBundleLoader.mjs +111 -0
- package/dist/src/server/mcpBundleLoader.mjs.map +1 -0
- package/dist/src/server/nativeChildTranscriptReader.cjs +20 -0
- package/dist/src/server/nativeChildTranscriptReader.cjs.map +1 -0
- package/dist/src/server/nativeChildTranscriptReader.mjs +18 -0
- package/dist/src/server/nativeChildTranscriptReader.mjs.map +1 -0
- package/dist/src/server/remoteRoutes.cjs +386 -0
- package/dist/src/server/remoteRoutes.cjs.map +1 -0
- package/dist/src/server/remoteRoutes.mjs +386 -0
- package/dist/src/server/remoteRoutes.mjs.map +1 -0
- package/dist/src/server/serverFacetLoader.cjs +220 -0
- package/dist/src/server/serverFacetLoader.cjs.map +1 -0
- package/dist/src/server/serverFacetLoader.d.mts +77 -0
- package/dist/src/server/serverFacetLoader.d.mts.map +1 -0
- package/dist/src/server/serverFacetLoader.mjs +215 -0
- package/dist/src/server/serverFacetLoader.mjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.cjs +494 -0
- package/dist/src/server/sessionMcpHandler.cjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.d.mts +47 -0
- package/dist/src/server/sessionMcpHandler.d.mts.map +1 -0
- package/dist/src/server/sessionMcpHandler.mjs +493 -0
- package/dist/src/server/sessionMcpHandler.mjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.cjs +780 -0
- package/dist/src/server/sessionMcpRoutes.cjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.mjs +775 -0
- package/dist/src/server/sessionMcpRoutes.mjs.map +1 -0
- package/dist/src/server/threadJournals.cjs +172 -0
- package/dist/src/server/threadJournals.cjs.map +1 -0
- package/dist/src/server/threadJournals.mjs +169 -0
- package/dist/src/server/threadJournals.mjs.map +1 -0
- package/dist/src/services/acpSessionUpdates/index.cjs +129 -0
- package/dist/src/services/acpSessionUpdates/index.cjs.map +1 -0
- package/dist/src/services/acpSessionUpdates/index.mjs +129 -0
- package/dist/src/services/acpSessionUpdates/index.mjs.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.cjs +60 -0
- package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.d.mts +24 -0
- package/dist/src/services/apiSurfaceAssert/index.d.mts.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.mjs +60 -0
- package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -0
- package/dist/src/services/bundlePublication/index.cjs +88 -0
- package/dist/src/services/bundlePublication/index.cjs.map +1 -0
- package/dist/src/services/bundlePublication/index.mjs +85 -0
- package/dist/src/services/bundlePublication/index.mjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.cjs +14 -0
- package/dist/src/services/contextApiUrls/index.cjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.d.mts +6 -0
- package/dist/src/services/contextApiUrls/index.d.mts.map +1 -0
- package/dist/src/services/contextApiUrls/index.mjs +14 -0
- package/dist/src/services/contextApiUrls/index.mjs.map +1 -0
- package/dist/src/services/contextContributions/index.cjs +79 -0
- package/dist/src/services/contextContributions/index.cjs.map +1 -0
- package/dist/src/services/contextContributions/index.d.mts +6 -0
- package/dist/src/services/contextContributions/index.d.mts.map +1 -0
- package/dist/src/services/contextContributions/index.mjs +79 -0
- package/dist/src/services/contextContributions/index.mjs.map +1 -0
- package/dist/src/services/contextUsage/index.cjs +27 -0
- package/dist/src/services/contextUsage/index.cjs.map +1 -0
- package/dist/src/services/contextUsage/index.mjs +25 -0
- package/dist/src/services/contextUsage/index.mjs.map +1 -0
- package/dist/src/services/devProxyPolicy/index.cjs +168 -0
- package/dist/src/services/devProxyPolicy/index.cjs.map +1 -0
- package/dist/src/services/devProxyPolicy/index.mjs +165 -0
- package/dist/src/services/devProxyPolicy/index.mjs.map +1 -0
- package/dist/src/services/devProxyStore/index.cjs +107 -0
- package/dist/src/services/devProxyStore/index.cjs.map +1 -0
- package/dist/src/services/devProxyStore/index.mjs +104 -0
- package/dist/src/services/devProxyStore/index.mjs.map +1 -0
- package/dist/src/services/deviceAuth/index.cjs +125 -0
- package/dist/src/services/deviceAuth/index.cjs.map +1 -0
- package/dist/src/services/deviceAuth/index.d.mts +9 -0
- package/dist/src/services/deviceAuth/index.d.mts.map +1 -0
- package/dist/src/services/deviceAuth/index.mjs +125 -0
- package/dist/src/services/deviceAuth/index.mjs.map +1 -0
- package/dist/src/services/deviceSessions/index.cjs +147 -0
- package/dist/src/services/deviceSessions/index.cjs.map +1 -0
- package/dist/src/services/deviceSessions/index.d.mts +15 -0
- package/dist/src/services/deviceSessions/index.d.mts.map +1 -0
- package/dist/src/services/deviceSessions/index.mjs +141 -0
- package/dist/src/services/deviceSessions/index.mjs.map +1 -0
- package/dist/src/services/headlessClient/index.cjs +125 -0
- package/dist/src/services/headlessClient/index.cjs.map +1 -0
- package/dist/src/services/headlessClient/index.mjs +125 -0
- package/dist/src/services/headlessClient/index.mjs.map +1 -0
- package/dist/src/services/historyCreationFileSystem/index.cjs +115 -0
- package/dist/src/services/historyCreationFileSystem/index.cjs.map +1 -0
- package/dist/src/services/historyCreationFileSystem/index.mjs +115 -0
- package/dist/src/services/historyCreationFileSystem/index.mjs.map +1 -0
- package/dist/src/services/hubChannelHarness/index.cjs +50 -0
- package/dist/src/services/hubChannelHarness/index.cjs.map +1 -0
- package/dist/src/services/hubChannelHarness/index.d.mts +17 -0
- package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -0
- package/dist/src/services/hubChannelHarness/index.mjs +50 -0
- package/dist/src/services/hubChannelHarness/index.mjs.map +1 -0
- package/dist/src/services/kernel/index.cjs +147 -0
- package/dist/src/services/kernel/index.cjs.map +1 -0
- package/dist/src/services/kernel/index.d.mts +9 -0
- package/dist/src/services/kernel/index.d.mts.map +1 -0
- package/dist/src/services/kernel/index.mjs +147 -0
- package/dist/src/services/kernel/index.mjs.map +1 -0
- package/dist/src/services/loginFlow/index.cjs +131 -0
- package/dist/src/services/loginFlow/index.cjs.map +1 -0
- package/dist/src/services/loginFlow/index.mjs +131 -0
- package/dist/src/services/loginFlow/index.mjs.map +1 -0
- package/dist/src/services/loopbackAddress/index.cjs +58 -0
- package/dist/src/services/loopbackAddress/index.cjs.map +1 -0
- package/dist/src/services/loopbackAddress/index.mjs +56 -0
- package/dist/src/services/loopbackAddress/index.mjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.cjs +144 -0
- package/dist/src/services/openSessionRegistry/index.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.d.mts +40 -0
- package/dist/src/services/openSessionRegistry/index.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/index.mjs +141 -0
- package/dist/src/services/openSessionRegistry/index.mjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.cjs +36 -0
- package/dist/src/services/packageApiHarness/index.cjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.d.mts +40 -0
- package/dist/src/services/packageApiHarness/index.d.mts.map +1 -0
- package/dist/src/services/packageApiHarness/index.mjs +36 -0
- package/dist/src/services/packageApiHarness/index.mjs.map +1 -0
- package/dist/src/services/packageResource/index.cjs +54 -0
- package/dist/src/services/packageResource/index.cjs.map +1 -0
- package/dist/src/services/packageResource/index.d.mts +26 -0
- package/dist/src/services/packageResource/index.d.mts.map +1 -0
- package/dist/src/services/packageResource/index.mjs +51 -0
- package/dist/src/services/packageResource/index.mjs.map +1 -0
- package/dist/src/services/pairingFlow/index.cjs +145 -0
- package/dist/src/services/pairingFlow/index.cjs.map +1 -0
- package/dist/src/services/pairingFlow/index.d.mts +44 -0
- package/dist/src/services/pairingFlow/index.d.mts.map +1 -0
- package/dist/src/services/pairingFlow/index.mjs +145 -0
- package/dist/src/services/pairingFlow/index.mjs.map +1 -0
- package/dist/src/services/pairingPage/index.cjs +450 -0
- package/dist/src/services/pairingPage/index.cjs.map +1 -0
- package/dist/src/services/pairingPage/index.mjs +447 -0
- package/dist/src/services/pairingPage/index.mjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.cjs +821 -0
- package/dist/src/services/piExtensionHost/index.cjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.mjs +817 -0
- package/dist/src/services/piExtensionHost/index.mjs.map +1 -0
- package/dist/src/services/piHelpTools/index.cjs +68 -0
- package/dist/src/services/piHelpTools/index.cjs.map +1 -0
- package/dist/src/services/piHelpTools/index.d.mts +10 -0
- package/dist/src/services/piHelpTools/index.d.mts.map +1 -0
- package/dist/src/services/piHelpTools/index.mjs +68 -0
- package/dist/src/services/piHelpTools/index.mjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.cjs +112 -0
- package/dist/src/services/piSessionEntries/index.cjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.mjs +108 -0
- package/dist/src/services/piSessionEntries/index.mjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.cjs +71 -0
- package/dist/src/services/pluginLifecycle/index.cjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.d.mts +11 -0
- package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -0
- package/dist/src/services/pluginLifecycle/index.mjs +71 -0
- package/dist/src/services/pluginLifecycle/index.mjs.map +1 -0
- package/dist/src/services/providerAuth/index.cjs +156 -0
- package/dist/src/services/providerAuth/index.cjs.map +1 -0
- package/dist/src/services/providerAuth/index.mjs +154 -0
- package/dist/src/services/providerAuth/index.mjs.map +1 -0
- package/dist/src/services/remoteAccess/index.cjs +396 -0
- package/dist/src/services/remoteAccess/index.cjs.map +1 -0
- package/dist/src/services/remoteAccess/index.d.mts +81 -0
- package/dist/src/services/remoteAccess/index.d.mts.map +1 -0
- package/dist/src/services/remoteAccess/index.mjs +396 -0
- package/dist/src/services/remoteAccess/index.mjs.map +1 -0
- package/dist/src/services/remoteAccessSettings/index.cjs +151 -0
- package/dist/src/services/remoteAccessSettings/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessSettings/index.mjs +149 -0
- package/dist/src/services/remoteAccessSettings/index.mjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.cjs +126 -0
- package/dist/src/services/remoteAccessStore/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.mjs +121 -0
- package/dist/src/services/remoteAccessStore/index.mjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs +190 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.d.mts +7 -0
- package/dist/src/services/remoteGuardPolicy/index.d.mts.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs +186 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs.map +1 -0
- package/dist/src/services/requestReceipts/index.cjs +161 -0
- package/dist/src/services/requestReceipts/index.cjs.map +1 -0
- package/dist/src/services/requestReceipts/index.d.mts +11 -0
- package/dist/src/services/requestReceipts/index.d.mts.map +1 -0
- package/dist/src/services/requestReceipts/index.mjs +161 -0
- package/dist/src/services/requestReceipts/index.mjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.cjs +590 -0
- package/dist/src/services/rpcTranscript/index.cjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.d.mts +50 -0
- package/dist/src/services/rpcTranscript/index.d.mts.map +1 -0
- package/dist/src/services/rpcTranscript/index.mjs +589 -0
- package/dist/src/services/rpcTranscript/index.mjs.map +1 -0
- package/dist/src/services/serverFacet/index.cjs +197 -0
- package/dist/src/services/serverFacet/index.cjs.map +1 -0
- package/dist/src/services/serverFacet/index.d.mts +31 -0
- package/dist/src/services/serverFacet/index.d.mts.map +1 -0
- package/dist/src/services/serverFacet/index.mjs +197 -0
- package/dist/src/services/serverFacet/index.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.cjs +46 -0
- package/dist/src/services/sessionGitStatus/index.cjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.mjs +46 -0
- package/dist/src/services/sessionGitStatus/index.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/type.d.mts +8 -0
- package/dist/src/services/sessionGitStatus/type.d.mts.map +1 -0
- package/dist/src/services/sessionMcpActivity/index.cjs +115 -0
- package/dist/src/services/sessionMcpActivity/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpActivity/index.mjs +111 -0
- package/dist/src/services/sessionMcpActivity/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs +432 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts +123 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs +430 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpConversations/index.cjs +217 -0
- package/dist/src/services/sessionMcpConversations/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpConversations/index.mjs +212 -0
- package/dist/src/services/sessionMcpConversations/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.cjs +86 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.mjs +83 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.mjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.cjs +119 -0
- package/dist/src/services/sessionPresentation/index.cjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.mjs +119 -0
- package/dist/src/services/sessionPresentation/index.mjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs +105 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts +29 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs +100 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs +70 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.d.mts +14 -0
- package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.mjs +67 -0
- package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -0
- package/dist/src/services/toolCost/index.cjs +47 -0
- package/dist/src/services/toolCost/index.cjs.map +1 -0
- package/dist/src/services/toolCost/index.d.mts +38 -0
- package/dist/src/services/toolCost/index.d.mts.map +1 -0
- package/dist/src/services/toolCost/index.mjs +46 -0
- package/dist/src/services/toolCost/index.mjs.map +1 -0
- package/dist/src/services/toolOverrides/index.cjs +45 -0
- package/dist/src/services/toolOverrides/index.cjs.map +1 -0
- package/dist/src/services/toolOverrides/index.d.mts +6 -0
- package/dist/src/services/toolOverrides/index.d.mts.map +1 -0
- package/dist/src/services/toolOverrides/index.mjs +45 -0
- package/dist/src/services/toolOverrides/index.mjs.map +1 -0
- package/dist/src/services/toolPrompt/index.cjs +13 -0
- package/dist/src/services/toolPrompt/index.cjs.map +1 -0
- package/dist/src/services/toolPrompt/index.mjs +13 -0
- package/dist/src/services/toolPrompt/index.mjs.map +1 -0
- package/dist/src/services/toolSurface/index.cjs +134 -0
- package/dist/src/services/toolSurface/index.cjs.map +1 -0
- package/dist/src/services/toolSurface/index.d.mts +19 -0
- package/dist/src/services/toolSurface/index.d.mts.map +1 -0
- package/dist/src/services/toolSurface/index.mjs +134 -0
- package/dist/src/services/toolSurface/index.mjs.map +1 -0
- package/dist/src/services/traceContext/index.cjs +13 -0
- package/dist/src/services/traceContext/index.cjs.map +1 -0
- package/dist/src/services/traceContext/index.mjs +13 -0
- package/dist/src/services/traceContext/index.mjs.map +1 -0
- package/dist/src/services/transcriptPages/index.cjs +74 -0
- package/dist/src/services/transcriptPages/index.cjs.map +1 -0
- package/dist/src/services/transcriptPages/index.mjs +73 -0
- package/dist/src/services/transcriptPages/index.mjs.map +1 -0
- package/dist/src/services/tunnelOutput/index.cjs +58 -0
- package/dist/src/services/tunnelOutput/index.cjs.map +1 -0
- package/dist/src/services/tunnelOutput/index.mjs +54 -0
- package/dist/src/services/tunnelOutput/index.mjs.map +1 -0
- package/dist/src/services/tunnelProcess/index.cjs +487 -0
- package/dist/src/services/tunnelProcess/index.cjs.map +1 -0
- package/dist/src/services/tunnelProcess/index.mjs +481 -0
- package/dist/src/services/tunnelProcess/index.mjs.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.cjs +136 -0
- package/dist/src/services/voiceReloadHandoff/index.cjs.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.d.mts +34 -0
- package/dist/src/services/voiceReloadHandoff/index.d.mts.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.mjs +135 -0
- package/dist/src/services/voiceReloadHandoff/index.mjs.map +1 -0
- package/dist/src/services/voiceToolsContract/index.cjs +26 -0
- package/dist/src/services/voiceToolsContract/index.cjs.map +1 -0
- package/dist/src/services/voiceToolsContract/index.d.mts +76 -0
- package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -0
- package/dist/src/services/voiceToolsContract/index.mjs +24 -0
- package/dist/src/services/voiceToolsContract/index.mjs.map +1 -0
- package/dist/src/services/webauthn/index.cjs +262 -0
- package/dist/src/services/webauthn/index.cjs.map +1 -0
- package/dist/src/services/webauthn/index.d.mts +39 -0
- package/dist/src/services/webauthn/index.d.mts.map +1 -0
- package/dist/src/services/webauthn/index.mjs +262 -0
- package/dist/src/services/webauthn/index.mjs.map +1 -0
- package/dist/src/services/webauthnPolicy/index.cjs +163 -0
- package/dist/src/services/webauthnPolicy/index.cjs.map +1 -0
- package/dist/src/services/webauthnPolicy/index.d.mts +41 -0
- package/dist/src/services/webauthnPolicy/index.d.mts.map +1 -0
- package/dist/src/services/webauthnPolicy/index.mjs +156 -0
- package/dist/src/services/webauthnPolicy/index.mjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.cjs +151 -0
- package/dist/src/services/workspaceRegistry/index.cjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.d.mts +47 -0
- package/dist/src/services/workspaceRegistry/index.d.mts.map +1 -0
- package/dist/src/services/workspaceRegistry/index.mjs +144 -0
- package/dist/src/services/workspaceRegistry/index.mjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +261 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +32 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +254 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +28 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +1 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +25 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +1 -0
- package/dist/src/systems/child/services/childSession/index.cjs +219 -0
- package/dist/src/systems/child/services/childSession/index.cjs.map +1 -0
- package/dist/src/systems/child/services/childSession/index.d.mts +14 -0
- package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -0
- package/dist/src/systems/child/services/childSession/index.mjs +219 -0
- package/dist/src/systems/child/services/childSession/index.mjs.map +1 -0
- package/dist/src/systems/child/types/childSession.cjs +19 -0
- package/dist/src/systems/child/types/childSession.cjs.map +1 -0
- package/dist/src/systems/child/types/childSession.d.mts +148 -0
- package/dist/src/systems/child/types/childSession.d.mts.map +1 -0
- package/dist/src/systems/child/types/childSession.mjs +16 -0
- package/dist/src/systems/child/types/childSession.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs +554 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts +111 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs +552 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs +1293 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +14 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs +1288 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -0
- package/dist/src/systems/main/types/headlessHost.d.mts +36 -0
- package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.cjs +73 -0
- package/dist/src/testing/pi/extensionScenarios.cjs.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.d.mts +41 -0
- package/dist/src/testing/pi/extensionScenarios.d.mts.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.mjs +73 -0
- package/dist/src/testing/pi/extensionScenarios.mjs.map +1 -0
- package/dist/src/testing/pi/testHost.cjs +398 -0
- package/dist/src/testing/pi/testHost.cjs.map +1 -0
- package/dist/src/testing/pi/testHost.d.mts +160 -0
- package/dist/src/testing/pi/testHost.d.mts.map +1 -0
- package/dist/src/testing/pi/testHost.mjs +398 -0
- package/dist/src/testing/pi/testHost.mjs.map +1 -0
- package/dist/src/types/config.d.mts +20 -0
- package/dist/src/types/config.d.mts.map +1 -0
- package/dist/src/types/kernel.d.mts +69 -0
- package/dist/src/types/kernel.d.mts.map +1 -0
- package/dist/src/types/remote.d.mts +124 -0
- package/dist/src/types/remote.d.mts.map +1 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts +209 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -0
- package/dist/src/types/server/session.d.mts +5 -0
- package/dist/src/types/server/session.d.mts.map +1 -0
- package/dist/src/types/server/sessionToolSurface.d.mts +44 -0
- package/dist/src/types/server/sessionToolSurface.d.mts.map +1 -0
- package/dist/src/web/models/globalStore.cjs +23 -0
- package/dist/src/web/models/globalStore.cjs.map +1 -0
- package/dist/src/web/models/globalStore.d.mts +6 -0
- package/dist/src/web/models/globalStore.d.mts.map +1 -0
- package/dist/src/web/models/globalStore.mjs +23 -0
- package/dist/src/web/models/globalStore.mjs.map +1 -0
- package/dist/src/web/models/sessionStore.cjs +56 -0
- package/dist/src/web/models/sessionStore.cjs.map +1 -0
- package/dist/src/web/models/sessionStore.d.mts +14 -0
- package/dist/src/web/models/sessionStore.d.mts.map +1 -0
- package/dist/src/web/models/sessionStore.mjs +56 -0
- package/dist/src/web/models/sessionStore.mjs.map +1 -0
- package/dist/src/web/models/workspaceStore.cjs +50 -0
- package/dist/src/web/models/workspaceStore.cjs.map +1 -0
- package/dist/src/web/models/workspaceStore.d.mts +18 -0
- package/dist/src/web/models/workspaceStore.d.mts.map +1 -0
- package/dist/src/web/models/workspaceStore.mjs +50 -0
- package/dist/src/web/models/workspaceStore.mjs.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.cjs +20 -0
- package/dist/src/web/schemas/bundleAssetPolicy.cjs.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.d.mts +10 -0
- package/dist/src/web/schemas/bundleAssetPolicy.d.mts.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.mjs +18 -0
- package/dist/src/web/schemas/bundleAssetPolicy.mjs.map +1 -0
- package/dist/src/web/schemas/template.cjs +15 -0
- package/dist/src/web/schemas/template.cjs.map +1 -0
- package/dist/src/web/schemas/template.d.mts +6 -0
- package/dist/src/web/schemas/template.d.mts.map +1 -0
- package/dist/src/web/schemas/template.mjs +15 -0
- package/dist/src/web/schemas/template.mjs.map +1 -0
- package/dist/src/web/services/apiClient/index.cjs +156 -0
- package/dist/src/web/services/apiClient/index.cjs.map +1 -0
- package/dist/src/web/services/apiClient/index.d.mts +152 -0
- package/dist/src/web/services/apiClient/index.d.mts.map +1 -0
- package/dist/src/web/services/apiClient/index.mjs +154 -0
- package/dist/src/web/services/apiClient/index.mjs.map +1 -0
- package/dist/src/web/services/apiPaths/index.cjs +83 -0
- package/dist/src/web/services/apiPaths/index.cjs.map +1 -0
- package/dist/src/web/services/apiPaths/index.d.mts +81 -0
- package/dist/src/web/services/apiPaths/index.d.mts.map +1 -0
- package/dist/src/web/services/apiPaths/index.mjs +78 -0
- package/dist/src/web/services/apiPaths/index.mjs.map +1 -0
- package/dist/src/web/services/apiRoutes/index.cjs +47 -0
- package/dist/src/web/services/apiRoutes/index.cjs.map +1 -0
- package/dist/src/web/services/apiRoutes/index.d.mts +21 -0
- package/dist/src/web/services/apiRoutes/index.d.mts.map +1 -0
- package/dist/src/web/services/apiRoutes/index.mjs +43 -0
- package/dist/src/web/services/apiRoutes/index.mjs.map +1 -0
- package/dist/src/web/services/mcpWidget.cjs +9 -0
- package/dist/src/web/services/mcpWidget.cjs.map +1 -0
- package/dist/src/web/services/mcpWidget.d.mts +6 -0
- package/dist/src/web/services/mcpWidget.d.mts.map +1 -0
- package/dist/src/web/services/mcpWidget.mjs +9 -0
- package/dist/src/web/services/mcpWidget.mjs.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.cjs +70 -0
- package/dist/src/web/services/sessionRegistry/index.cjs.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.d.mts +29 -0
- package/dist/src/web/services/sessionRegistry/index.d.mts.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.mjs +66 -0
- package/dist/src/web/services/sessionRegistry/index.mjs.map +1 -0
- package/dist/src/web/services/testing/channels.cjs +11 -0
- package/dist/src/web/services/testing/channels.cjs.map +1 -0
- package/dist/src/web/services/testing/channels.d.mts +8 -0
- package/dist/src/web/services/testing/channels.d.mts.map +1 -0
- package/dist/src/web/services/testing/channels.mjs +11 -0
- package/dist/src/web/services/testing/channels.mjs.map +1 -0
- package/dist/src/web/services/testing/index.cjs +27 -0
- package/dist/src/web/services/testing/index.cjs.map +1 -0
- package/dist/src/web/services/testing/index.d.mts +31 -0
- package/dist/src/web/services/testing/index.d.mts.map +1 -0
- package/dist/src/web/services/testing/index.mjs +27 -0
- package/dist/src/web/services/testing/index.mjs.map +1 -0
- package/dist/src/web/services/testing/rpcStub.cjs +58 -0
- package/dist/src/web/services/testing/rpcStub.cjs.map +1 -0
- package/dist/src/web/services/testing/rpcStub.d.mts +37 -0
- package/dist/src/web/services/testing/rpcStub.d.mts.map +1 -0
- package/dist/src/web/services/testing/rpcStub.mjs +58 -0
- package/dist/src/web/services/testing/rpcStub.mjs.map +1 -0
- package/dist/src/web/services/testing/slotProps.cjs +91 -0
- package/dist/src/web/services/testing/slotProps.cjs.map +1 -0
- package/dist/src/web/services/testing/slotProps.d.mts +69 -0
- package/dist/src/web/services/testing/slotProps.d.mts.map +1 -0
- package/dist/src/web/services/testing/slotProps.mjs +90 -0
- package/dist/src/web/services/testing/slotProps.mjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.cjs +128 -0
- package/dist/src/web/services/testing/templateRail.cjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.d.mts +31 -0
- package/dist/src/web/services/testing/templateRail.d.mts.map +1 -0
- package/dist/src/web/services/testing/templateRail.mjs +126 -0
- package/dist/src/web/services/testing/templateRail.mjs.map +1 -0
- package/dist/src/web/services/toolResult/index.cjs +30 -0
- package/dist/src/web/services/toolResult/index.cjs.map +1 -0
- package/dist/src/web/services/toolResult/index.d.mts +14 -0
- package/dist/src/web/services/toolResult/index.d.mts.map +1 -0
- package/dist/src/web/services/toolResult/index.mjs +29 -0
- package/dist/src/web/services/toolResult/index.mjs.map +1 -0
- package/dist/src/web/types/extensionFile.d.mts +59 -0
- package/dist/src/web/types/extensionFile.d.mts.map +1 -0
- package/dist/src/web/types/mcpWidget.d.mts +14 -0
- package/dist/src/web/types/mcpWidget.d.mts.map +1 -0
- package/dist/src/web/types/modelContext.d.mts +43 -0
- package/dist/src/web/types/modelContext.d.mts.map +1 -0
- package/dist/src/web/types/sessionRegistry.d.mts +43 -0
- package/dist/src/web/types/sessionRegistry.d.mts.map +1 -0
- package/dist/src/web/types/template.d.mts +155 -0
- package/dist/src/web/types/template.d.mts.map +1 -0
- package/dist/src/web/types/webPlugin.d.mts +896 -0
- package/dist/src/web/types/webPlugin.d.mts.map +1 -0
- package/dist/syncLocation.cjs +244 -0
- package/dist/syncLocation.cjs.map +1 -0
- package/dist/syncLocation.d.mts +37 -0
- package/dist/syncLocation.d.mts.map +1 -0
- package/dist/syncLocation.mjs +231 -0
- package/dist/syncLocation.mjs.map +1 -0
- package/dist/syncRegistration.cjs +171 -0
- package/dist/syncRegistration.cjs.map +1 -0
- package/dist/syncRegistration.d.mts +48 -0
- package/dist/syncRegistration.d.mts.map +1 -0
- package/dist/syncRegistration.mjs +159 -0
- package/dist/syncRegistration.mjs.map +1 -0
- package/dist/syncStateContract.cjs +19 -0
- package/dist/syncStateContract.cjs.map +1 -0
- package/dist/syncStateContract.d.mts +14 -0
- package/dist/syncStateContract.d.mts.map +1 -0
- package/dist/syncStateContract.mjs +16 -0
- package/dist/syncStateContract.mjs.map +1 -0
- package/dist/terminalPiChildSessionService.cjs +267 -0
- package/dist/terminalPiChildSessionService.cjs.map +1 -0
- package/dist/terminalPiChildSessionService.d.mts +42 -0
- package/dist/terminalPiChildSessionService.d.mts.map +1 -0
- package/dist/terminalPiChildSessionService.mjs +260 -0
- package/dist/terminalPiChildSessionService.mjs.map +1 -0
- package/dist/testing.cjs +11 -0
- package/dist/testing.d.mts +6 -0
- package/dist/testing.mjs +6 -0
- package/dist/toolInventory.cjs +136 -0
- package/dist/toolInventory.cjs.map +1 -0
- package/dist/toolInventory.d.mts +66 -0
- package/dist/toolInventory.d.mts.map +1 -0
- package/dist/toolInventory.mjs +133 -0
- package/dist/toolInventory.mjs.map +1 -0
- package/dist/toolNames.cjs +4 -0
- package/dist/toolNames.d.mts +2 -0
- package/dist/toolNames.mjs +2 -0
- package/dist/toolOverrides.cjs +7 -0
- package/dist/toolOverrides.d.mts +3 -0
- package/dist/toolOverrides.mjs +3 -0
- package/dist/toolSurface.cjs +7 -0
- package/dist/toolSurface.d.mts +3 -0
- package/dist/toolSurface.mjs +3 -0
- package/dist/transition.cjs +5 -0
- package/dist/transition.d.cjs +5 -0
- package/dist/transition.d.mts +2 -0
- package/dist/transition.mjs +2 -0
- package/dist/transitionClassifier.cjs +112 -0
- package/dist/transitionClassifier.cjs.map +1 -0
- package/dist/transitionClassifier.d.mts +18 -0
- package/dist/transitionClassifier.d.mts.map +1 -0
- package/dist/transitionClassifier.mjs +111 -0
- package/dist/transitionClassifier.mjs.map +1 -0
- package/dist/transitionCoordinator.cjs +131 -0
- package/dist/transitionCoordinator.cjs.map +1 -0
- package/dist/transitionCoordinator.d.mts +16 -0
- package/dist/transitionCoordinator.d.mts.map +1 -0
- package/dist/transitionCoordinator.mjs +130 -0
- package/dist/transitionCoordinator.mjs.map +1 -0
- package/dist/typesContextApi.cjs +0 -0
- package/dist/typesContextApi.d.mts +73 -0
- package/dist/typesContextApi.d.mts.map +1 -0
- package/dist/typesContextApi.mjs +1 -0
- package/dist/uiHub.cjs +5 -0
- package/dist/uiHub.d.mts +2 -0
- package/dist/uiHub.mjs +2 -0
- package/dist/v3Export.cjs +1004 -0
- package/dist/v3Export.cjs.map +1 -0
- package/dist/v3Export.d.mts +34 -0
- package/dist/v3Export.d.mts.map +1 -0
- package/dist/v3Export.mjs +1000 -0
- package/dist/v3Export.mjs.map +1 -0
- package/dist/voiceReloadHandoff.cjs +14 -0
- package/dist/voiceReloadHandoff.d.mts +4 -0
- package/dist/voiceReloadHandoff.mjs +4 -0
- package/dist/voiceTools.cjs +56 -0
- package/dist/voiceTools.d.mts +4 -0
- package/dist/voiceTools.mjs +4 -0
- package/dist/web.cjs +64 -0
- package/dist/web.d.mts +19 -0
- package/dist/web.mjs +13 -0
- package/dist/webCompositions.cjs +100 -0
- package/dist/webCompositions.cjs.map +1 -0
- package/dist/webCompositions.d.mts +20 -0
- package/dist/webCompositions.d.mts.map +1 -0
- package/dist/webCompositions.mjs +95 -0
- package/dist/webCompositions.mjs.map +1 -0
- package/dist/webTesting.cjs +14 -0
- package/dist/webTesting.d.mts +6 -0
- package/dist/webTesting.mjs +6 -0
- package/package.json +616 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/sessionMcpAuthorization/index.ts"],"mappings":";YAcY;qBAMC,6BAA6B;WAC/B,MAAM;EAEf,YAAY,MAAM,0BAA0B;;YAOlC;YACA;iBAWK;WACN;WACA;WACA;WACA;WACA;;iBAGM,gCAAgC;;WAEtC;;iBAGM;WACN;WACA;WACA;WACA;WACA,OAAO;;WAEP,UAAU;WACV;WACA;;YAGC,4CAA4C,KACtD;WAIe;WAA2B;WAAwB;;WACnD;WAA+B;WAAmC;;iBAGlE,wBAAwB;WAC9B;WACA;;iBAGM,8BAA8B;WACpC;;iBAGM;WACN;WACA;WACA;WACA;WACA,OAAO;;iBAGD;WACN;WACA;WACA;WACA;;WAEA;;YAGC;WACG;WAAuB;WAA8B;;WACrD;WAAuB;WAA8C;;iBAEnE;WACN;WACA;WACA;WACA;;YAGC;WAEG;WACA;WACA;WACA;WACA;WACA;;WAGA;WACA;WACA;WACA;;iBAGE;WACN;WACA,OAAO;WACP;;iBAGM;WACN,QAAQ;WACR;WACA;WACA,SAAS,KAAK;WACd;;iBAGM;EACf,aAAa,OAAO,8BAA8B;EAClD,WAAW,mBAAmB;EAC9B,wBAAwB;EACxB,aAAa;EACb,2BAA2B,OAAO,4CAA4C;EAC9E,yBAAyB,mBAAmB;EAC5C,uBACE,kBACA,qBACA,qBACC;EACH,8BAA8B,cAAc,kCAAkC;EAC9E,uBAAuB,OAAO,wCAAwC;EACtE,cAAc,SAAS,yBAAyB;EAChD,cAAc;EACd,qBAAqB,eAAe,mBAAmB;EACvD,wBAAwB,eAAe,mBAAmB;EAC1D,YAAY;EACZ,wBAAwB,mBAAmB;EAC3C,cAAc;;;wBA4IA,qCACd,UAAS,wCACR"}
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
import { createHash, createHmac, randomBytes, timingSafeEqual } from "node:crypto";
|
|
2
|
+
//#region src/services/sessionMcpAuthorization/index.ts
|
|
3
|
+
const ACCESS_TOKEN_TTL_MS = 9e5;
|
|
4
|
+
const AUTHORIZATION_CODE_TTL_MS = 3e5;
|
|
5
|
+
const CLIENT_ID_BYTES = 18;
|
|
6
|
+
const CLIENT_SECRET_BYTES = 32;
|
|
7
|
+
const DEFAULT_MAX_RECORDS = 1e4;
|
|
8
|
+
const GRANT_ID_BYTES = 18;
|
|
9
|
+
const REFRESH_TOKEN_TTL_MS = 2592e6;
|
|
10
|
+
const TOKEN_BYTES = 32;
|
|
11
|
+
const URL_TOKEN_HEADER = Buffer.from("{\"alg\":\"HS256\",\"typ\":\"JWT\"}").toString("base64url");
|
|
12
|
+
const URL_TOKEN_ISSUER = "doompi-session-mcp";
|
|
13
|
+
const URL_TOKEN_MAX_LENGTH = 4096;
|
|
14
|
+
var SessionMcpOAuthError = class extends Error {
|
|
15
|
+
code;
|
|
16
|
+
constructor(code, message) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = "SessionMcpOAuthError";
|
|
19
|
+
this.code = code;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Conversation routing is mandatory. Legacy registrations are migrated at read time
|
|
24
|
+
* so they cannot continue to share their parent runtime.
|
|
25
|
+
*/
|
|
26
|
+
function sessionMcpRouting(value) {
|
|
27
|
+
if (value === void 0 || value === "session" || value === "conversation") return "conversation";
|
|
28
|
+
throw new SessionMcpOAuthError("invalid_request", "Session MCP routing is not supported.");
|
|
29
|
+
}
|
|
30
|
+
function digest(value) {
|
|
31
|
+
return createHash("sha256").update(value).digest();
|
|
32
|
+
}
|
|
33
|
+
function tokenKey(value) {
|
|
34
|
+
return digest(value).toString("hex");
|
|
35
|
+
}
|
|
36
|
+
function opaque(bytes = TOKEN_BYTES) {
|
|
37
|
+
return randomBytes(bytes).toString("base64url");
|
|
38
|
+
}
|
|
39
|
+
function exactSecret(actual, expectedHash) {
|
|
40
|
+
return timingSafeEqual(digest(actual), expectedHash);
|
|
41
|
+
}
|
|
42
|
+
function urlTokenSignature(input, key) {
|
|
43
|
+
return createHmac("sha256", key).update(input).digest();
|
|
44
|
+
}
|
|
45
|
+
function parseUrlToken(token) {
|
|
46
|
+
if (token.length > URL_TOKEN_MAX_LENGTH) return void 0;
|
|
47
|
+
const parts = token.split(".");
|
|
48
|
+
if (parts.length !== 3) return void 0;
|
|
49
|
+
const [header, payload, encodedSignature] = parts;
|
|
50
|
+
if (header !== URL_TOKEN_HEADER || !/^[A-Za-z0-9_-]{1,2048}$/u.test(payload) || !/^[A-Za-z0-9_-]{43}$/u.test(encodedSignature)) return void 0;
|
|
51
|
+
try {
|
|
52
|
+
const payloadBytes = Buffer.from(payload, "base64url");
|
|
53
|
+
const signature = Buffer.from(encodedSignature, "base64url");
|
|
54
|
+
if (payloadBytes.toString("base64url") !== payload || signature.length !== 32 || signature.toString("base64url") !== encodedSignature) return void 0;
|
|
55
|
+
const value = JSON.parse(payloadBytes.toString("utf8"));
|
|
56
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
57
|
+
const claims = value;
|
|
58
|
+
if (Object.keys(value).sort().join(",") !== "aud,iat,iss,sid,sub" || claims.iss !== URL_TOKEN_ISSUER || typeof claims.sub !== "string" || claims.sub === "" || typeof claims.sid !== "string" || claims.sid === "" || typeof claims.aud !== "string" || claims.aud === "" || typeof claims.iat !== "number" || !Number.isSafeInteger(claims.iat)) return void 0;
|
|
59
|
+
return {
|
|
60
|
+
claims,
|
|
61
|
+
input: `${header}.${payload}`,
|
|
62
|
+
signature
|
|
63
|
+
};
|
|
64
|
+
} catch {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function requireHttpsUrl(value, label, allowQuery) {
|
|
69
|
+
let parsed;
|
|
70
|
+
try {
|
|
71
|
+
parsed = new URL(value);
|
|
72
|
+
} catch {
|
|
73
|
+
throw new SessionMcpOAuthError("invalid_request", `${label} must be an absolute HTTPS URL.`);
|
|
74
|
+
}
|
|
75
|
+
if (parsed.protocol !== "https:" || parsed.username !== "" || parsed.password !== "" || parsed.hash !== "" || !allowQuery && parsed.search !== "") throw new SessionMcpOAuthError("invalid_request", `${label} must be an absolute HTTPS URL without credentials, a query, or a fragment.`);
|
|
76
|
+
return parsed.href;
|
|
77
|
+
}
|
|
78
|
+
function requireName(value, label) {
|
|
79
|
+
const normalized = value.trim();
|
|
80
|
+
if (normalized === "") throw new SessionMcpOAuthError("invalid_request", `${label} must not be empty.`);
|
|
81
|
+
return normalized;
|
|
82
|
+
}
|
|
83
|
+
function exactUniqueGrants(values, label) {
|
|
84
|
+
if (values.some((value) => value === "" || value !== value.trim())) throw new SessionMcpOAuthError("invalid_request", `${label} grants must contain exact non-empty names.`);
|
|
85
|
+
return Object.freeze([...new Set(values)]);
|
|
86
|
+
}
|
|
87
|
+
/** In-memory restricted OAuth authority. It intentionally has no discovery or client registration surface. */
|
|
88
|
+
function createSessionMcpAuthorizationService(options = {}) {
|
|
89
|
+
const now = options.now ?? Date.now;
|
|
90
|
+
const codeTtl = options.authorizationCodeTtlMs ?? AUTHORIZATION_CODE_TTL_MS;
|
|
91
|
+
const accessTtl = options.accessTokenTtlMs ?? ACCESS_TOKEN_TTL_MS;
|
|
92
|
+
const refreshTtl = options.refreshTokenTtlMs ?? REFRESH_TOKEN_TTL_MS;
|
|
93
|
+
const maxRecords = options.maxRecords ?? DEFAULT_MAX_RECORDS;
|
|
94
|
+
if (!Number.isSafeInteger(maxRecords) || maxRecords < 3) throw new Error("Session MCP authorization maxRecords must be a safe integer of at least 3.");
|
|
95
|
+
const clients = /* @__PURE__ */ new Map();
|
|
96
|
+
const bindings = /* @__PURE__ */ new Map();
|
|
97
|
+
const grants = /* @__PURE__ */ new Map();
|
|
98
|
+
const codes = /* @__PURE__ */ new Map();
|
|
99
|
+
const accessTokens = /* @__PURE__ */ new Map();
|
|
100
|
+
const refreshTokens = /* @__PURE__ */ new Map();
|
|
101
|
+
const consumedRefreshTokens = /* @__PURE__ */ new Map();
|
|
102
|
+
const publicClient = ({ secretHash: _secretHash, ...client }) => client;
|
|
103
|
+
const recordCount = () => grants.size + codes.size + accessTokens.size + refreshTokens.size + consumedRefreshTokens.size;
|
|
104
|
+
const sweep = () => {
|
|
105
|
+
const currentTime = now();
|
|
106
|
+
for (const [key, value] of codes) if (value.expiresAt <= currentTime) codes.delete(key);
|
|
107
|
+
for (const [key, value] of accessTokens) if (value.expiresAt <= currentTime) accessTokens.delete(key);
|
|
108
|
+
for (const [key, value] of refreshTokens) if (value.expiresAt <= currentTime) refreshTokens.delete(key);
|
|
109
|
+
for (const [key, value] of consumedRefreshTokens) if (value.expiresAt <= currentTime) consumedRefreshTokens.delete(key);
|
|
110
|
+
const referencedGrants = /* @__PURE__ */ new Set();
|
|
111
|
+
for (const value of codes.values()) referencedGrants.add(value.grant.id);
|
|
112
|
+
for (const value of accessTokens.values()) referencedGrants.add(value.grant.id);
|
|
113
|
+
for (const value of refreshTokens.values()) referencedGrants.add(value.grant.id);
|
|
114
|
+
for (const value of consumedRefreshTokens.values()) referencedGrants.add(value.grantId);
|
|
115
|
+
for (const grantId of grants.keys()) if (!referencedGrants.has(grantId)) grants.delete(grantId);
|
|
116
|
+
};
|
|
117
|
+
const requireCapacity = (additionalRecords) => {
|
|
118
|
+
sweep();
|
|
119
|
+
if (recordCount() + additionalRecords > maxRecords) throw new SessionMcpOAuthError("invalid_request", "The authorization service is at capacity.");
|
|
120
|
+
};
|
|
121
|
+
const authenticateClient = (clientId, clientSecret) => {
|
|
122
|
+
const client = clients.get(clientId);
|
|
123
|
+
if (client === void 0 || !exactSecret(clientSecret, client.secretHash)) throw new SessionMcpOAuthError("invalid_client", "Client authentication failed.");
|
|
124
|
+
return client;
|
|
125
|
+
};
|
|
126
|
+
const revokeGrant = (grantId) => {
|
|
127
|
+
if (!grants.delete(grantId)) return false;
|
|
128
|
+
for (const [key, value] of codes) if (value.grant.id === grantId) codes.delete(key);
|
|
129
|
+
for (const [key, value] of accessTokens) if (value.grant.id === grantId) accessTokens.delete(key);
|
|
130
|
+
for (const [key, value] of refreshTokens) if (value.grant.id === grantId) refreshTokens.delete(key);
|
|
131
|
+
return true;
|
|
132
|
+
};
|
|
133
|
+
const revokeFamily = (familyId, grantId) => {
|
|
134
|
+
revokeGrant(grantId);
|
|
135
|
+
for (const [key, value] of accessTokens) if (value.familyId === familyId) accessTokens.delete(key);
|
|
136
|
+
for (const [key, value] of refreshTokens) if (value.familyId === familyId) refreshTokens.delete(key);
|
|
137
|
+
};
|
|
138
|
+
const mintTokens = (grant, familyId = opaque(GRANT_ID_BYTES), familyExpiresAt = now() + refreshTtl) => {
|
|
139
|
+
const issuedAt = now();
|
|
140
|
+
const accessExpiresAt = Math.min(issuedAt + accessTtl, familyExpiresAt);
|
|
141
|
+
const accessToken = opaque();
|
|
142
|
+
const refreshToken = opaque();
|
|
143
|
+
accessTokens.set(tokenKey(accessToken), {
|
|
144
|
+
grant,
|
|
145
|
+
familyId,
|
|
146
|
+
expiresAt: accessExpiresAt
|
|
147
|
+
});
|
|
148
|
+
refreshTokens.set(tokenKey(refreshToken), {
|
|
149
|
+
grant,
|
|
150
|
+
familyId,
|
|
151
|
+
expiresAt: familyExpiresAt,
|
|
152
|
+
familyExpiresAt
|
|
153
|
+
});
|
|
154
|
+
return {
|
|
155
|
+
accessToken,
|
|
156
|
+
refreshToken,
|
|
157
|
+
tokenType: "Bearer",
|
|
158
|
+
expiresIn: Math.max(0, Math.floor((accessExpiresAt - issuedAt) / 1e3)),
|
|
159
|
+
grant
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
return {
|
|
163
|
+
createClient(input) {
|
|
164
|
+
const createdAt = now();
|
|
165
|
+
const clientId = opaque(CLIENT_ID_BYTES);
|
|
166
|
+
const clientSecret = opaque(CLIENT_SECRET_BYTES);
|
|
167
|
+
const urlCredential = input.authMethod === "url_token";
|
|
168
|
+
const headerCredential = input.authMethod === "api_key";
|
|
169
|
+
let redirectUri = "";
|
|
170
|
+
if (!urlCredential && !headerCredential) {
|
|
171
|
+
if (typeof input.redirectUri !== "string") throw new SessionMcpOAuthError("invalid_request", "Redirect URI must be an absolute HTTPS URL.");
|
|
172
|
+
redirectUri = requireHttpsUrl(input.redirectUri, "Redirect URI", true);
|
|
173
|
+
}
|
|
174
|
+
const client = {
|
|
175
|
+
clientId,
|
|
176
|
+
name: requireName(input.name, "Client name"),
|
|
177
|
+
redirectUri,
|
|
178
|
+
tokenEndpointAuthMethod: urlCredential ? "url_token" : headerCredential ? "api_key" : "client_secret_post",
|
|
179
|
+
createdAt,
|
|
180
|
+
secretHash: digest(clientSecret)
|
|
181
|
+
};
|
|
182
|
+
clients.set(clientId, client);
|
|
183
|
+
return {
|
|
184
|
+
...publicClient(client),
|
|
185
|
+
clientSecret
|
|
186
|
+
};
|
|
187
|
+
},
|
|
188
|
+
readClient(clientId) {
|
|
189
|
+
const client = clients.get(clientId);
|
|
190
|
+
return client === void 0 ? void 0 : publicClient(client);
|
|
191
|
+
},
|
|
192
|
+
listClients() {
|
|
193
|
+
return [...clients.values()].map(publicClient);
|
|
194
|
+
},
|
|
195
|
+
revokeClient(clientId) {
|
|
196
|
+
if (!clients.delete(clientId)) return false;
|
|
197
|
+
bindings.delete(clientId);
|
|
198
|
+
for (const grant of grants.values()) if (grant.clientId === clientId) revokeGrant(grant.id);
|
|
199
|
+
return true;
|
|
200
|
+
},
|
|
201
|
+
createAuthorizationBinding(input) {
|
|
202
|
+
if (!clients.has(input.clientId)) throw new SessionMcpOAuthError("invalid_client", "Unknown local client.");
|
|
203
|
+
if (bindings.has(input.clientId)) throw new SessionMcpOAuthError("invalid_request", "Client authorization is already bound.");
|
|
204
|
+
if (!Number.isSafeInteger(input.sessionGeneration) || input.sessionGeneration < 0) throw new SessionMcpOAuthError("invalid_request", "Session generation must be a non-negative safe integer.");
|
|
205
|
+
const routing = sessionMcpRouting(input.routing);
|
|
206
|
+
const scope = input.scope ?? "restricted";
|
|
207
|
+
if (scope !== "session" && scope !== "restricted") throw new SessionMcpOAuthError("invalid_request", "Authorization scope is not supported.");
|
|
208
|
+
let tools;
|
|
209
|
+
let skills;
|
|
210
|
+
if (scope === "session") {
|
|
211
|
+
if (input.tools !== void 0 || input.skills !== void 0) throw new SessionMcpOAuthError("invalid_request", "Session scope cannot include capability grants.");
|
|
212
|
+
tools = Object.freeze([]);
|
|
213
|
+
skills = Object.freeze([]);
|
|
214
|
+
} else {
|
|
215
|
+
if (!Array.isArray(input.tools) || !Array.isArray(input.skills)) throw new SessionMcpOAuthError("invalid_request", "Restricted scope requires tool and skill grants.");
|
|
216
|
+
tools = exactUniqueGrants(input.tools, "Tool");
|
|
217
|
+
skills = exactUniqueGrants(input.skills, "Skill");
|
|
218
|
+
}
|
|
219
|
+
const binding = Object.freeze({
|
|
220
|
+
clientId: input.clientId,
|
|
221
|
+
sessionId: requireName(input.sessionId, "Session ID"),
|
|
222
|
+
sessionGeneration: input.sessionGeneration,
|
|
223
|
+
audience: requireHttpsUrl(input.audience, "Audience", false),
|
|
224
|
+
scope,
|
|
225
|
+
routing,
|
|
226
|
+
tools,
|
|
227
|
+
skills
|
|
228
|
+
});
|
|
229
|
+
bindings.set(input.clientId, binding);
|
|
230
|
+
return binding;
|
|
231
|
+
},
|
|
232
|
+
readAuthorizationBinding(clientId) {
|
|
233
|
+
return bindings.get(clientId);
|
|
234
|
+
},
|
|
235
|
+
persistentRegistration(clientId, workspaceId, verifiedAt) {
|
|
236
|
+
const client = clients.get(clientId);
|
|
237
|
+
const binding = bindings.get(clientId);
|
|
238
|
+
if (client === void 0 || binding === void 0 || !Number.isSafeInteger(verifiedAt)) return void 0;
|
|
239
|
+
const { sessionGeneration: _sessionGeneration, ...persistentBinding } = binding;
|
|
240
|
+
return {
|
|
241
|
+
client: publicClient(client),
|
|
242
|
+
secretHash: client.secretHash.toString("hex"),
|
|
243
|
+
workspaceId: requireName(workspaceId, "Workspace ID"),
|
|
244
|
+
binding: persistentBinding,
|
|
245
|
+
verifiedAt
|
|
246
|
+
};
|
|
247
|
+
},
|
|
248
|
+
restorePersistentRegistration(registration, sessionGeneration) {
|
|
249
|
+
if (bindings.has(registration.client.clientId) || !/^[a-f0-9]{64}$/u.test(registration.secretHash) || !Number.isSafeInteger(sessionGeneration) || sessionGeneration < 0 || registration.client.clientId !== registration.binding.clientId) return false;
|
|
250
|
+
try {
|
|
251
|
+
const held = clients.get(registration.client.clientId);
|
|
252
|
+
if (held && (held.redirectUri !== registration.client.redirectUri || held.tokenEndpointAuthMethod !== registration.client.tokenEndpointAuthMethod || !timingSafeEqual(held.secretHash, Buffer.from(registration.secretHash, "hex")))) return false;
|
|
253
|
+
if (registration.client.tokenEndpointAuthMethod !== "client_secret_post" && registration.client.tokenEndpointAuthMethod !== "api_key" && registration.client.tokenEndpointAuthMethod !== "url_token" || registration.client.tokenEndpointAuthMethod !== "client_secret_post" && (registration.client.redirectUri !== "" || registration.binding.scope !== "session")) return false;
|
|
254
|
+
const client = {
|
|
255
|
+
clientId: requireName(registration.client.clientId, "Client ID"),
|
|
256
|
+
name: requireName(registration.client.name, "Client name"),
|
|
257
|
+
redirectUri: registration.client.tokenEndpointAuthMethod === "client_secret_post" ? requireHttpsUrl(registration.client.redirectUri, "Redirect URI", true) : registration.client.redirectUri,
|
|
258
|
+
tokenEndpointAuthMethod: registration.client.tokenEndpointAuthMethod,
|
|
259
|
+
createdAt: registration.client.createdAt,
|
|
260
|
+
secretHash: Buffer.from(registration.secretHash, "hex")
|
|
261
|
+
};
|
|
262
|
+
const routing = sessionMcpRouting(registration.binding.routing);
|
|
263
|
+
const scope = registration.binding.scope;
|
|
264
|
+
const tools = scope === "session" ? Object.freeze([]) : exactUniqueGrants(registration.binding.tools, "Tool");
|
|
265
|
+
const skills = scope === "session" ? Object.freeze([]) : exactUniqueGrants(registration.binding.skills, "Skill");
|
|
266
|
+
if (scope !== "session" && scope !== "restricted" || scope === "session" && (registration.binding.tools.length !== 0 || registration.binding.skills.length !== 0)) throw new SessionMcpOAuthError("invalid_request", "Stored Session MCP authorization is invalid.");
|
|
267
|
+
clients.set(client.clientId, client);
|
|
268
|
+
bindings.set(client.clientId, Object.freeze({
|
|
269
|
+
clientId: client.clientId,
|
|
270
|
+
sessionId: requireName(registration.binding.sessionId, "Session ID"),
|
|
271
|
+
sessionGeneration,
|
|
272
|
+
audience: requireHttpsUrl(registration.binding.audience, "Audience", false),
|
|
273
|
+
scope,
|
|
274
|
+
routing,
|
|
275
|
+
tools,
|
|
276
|
+
skills
|
|
277
|
+
}));
|
|
278
|
+
return true;
|
|
279
|
+
} catch {
|
|
280
|
+
clients.delete(registration.client.clientId);
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
issueAuthorizationCode(input) {
|
|
285
|
+
const client = clients.get(input.clientId);
|
|
286
|
+
if (client === void 0) throw new SessionMcpOAuthError("invalid_client", "Unknown local client.");
|
|
287
|
+
const binding = bindings.get(input.clientId);
|
|
288
|
+
if (binding === void 0) throw new SessionMcpOAuthError("invalid_request", "Client authorization has not been preauthorized.");
|
|
289
|
+
if (client.tokenEndpointAuthMethod !== "client_secret_post") throw new SessionMcpOAuthError("invalid_client", "This client does not support OAuth authorization.");
|
|
290
|
+
if (input.redirectUri !== client.redirectUri) throw new SessionMcpOAuthError("invalid_request", "Redirect URI does not exactly match the registered callback.");
|
|
291
|
+
if (input.codeChallengeMethod !== "S256" || !/^[A-Za-z0-9_-]{43}$/u.test(input.codeChallenge)) throw new SessionMcpOAuthError("invalid_request", "A valid S256 PKCE challenge is required.");
|
|
292
|
+
requireCapacity(2);
|
|
293
|
+
const issuedAt = now();
|
|
294
|
+
const grant = Object.freeze({
|
|
295
|
+
id: opaque(GRANT_ID_BYTES),
|
|
296
|
+
...binding,
|
|
297
|
+
createdAt: issuedAt
|
|
298
|
+
});
|
|
299
|
+
const code = opaque();
|
|
300
|
+
const expiresAt = issuedAt + codeTtl;
|
|
301
|
+
grants.set(grant.id, grant);
|
|
302
|
+
codes.set(tokenKey(code), {
|
|
303
|
+
clientId: client.clientId,
|
|
304
|
+
redirectUri: client.redirectUri,
|
|
305
|
+
challenge: input.codeChallenge,
|
|
306
|
+
grant,
|
|
307
|
+
expiresAt
|
|
308
|
+
});
|
|
309
|
+
return {
|
|
310
|
+
code,
|
|
311
|
+
grant,
|
|
312
|
+
expiresAt
|
|
313
|
+
};
|
|
314
|
+
},
|
|
315
|
+
exchangeToken(request) {
|
|
316
|
+
if (authenticateClient(request.clientId, request.clientSecret).tokenEndpointAuthMethod !== "client_secret_post") throw new SessionMcpOAuthError("invalid_client", "This client does not support OAuth tokens.");
|
|
317
|
+
sweep();
|
|
318
|
+
if (request.grantType === "authorization_code") {
|
|
319
|
+
const codeKey = tokenKey(request.code);
|
|
320
|
+
const stored = codes.get(codeKey);
|
|
321
|
+
if (stored === void 0 || stored.expiresAt <= now() || stored.clientId !== request.clientId || stored.redirectUri !== request.redirectUri || !/^[A-Za-z0-9\-._~]{43,128}$/u.test(request.codeVerifier) || createHash("sha256").update(request.codeVerifier).digest("base64url") !== stored.challenge || !grants.has(stored.grant.id)) {
|
|
322
|
+
codes.delete(codeKey);
|
|
323
|
+
if (stored !== void 0) revokeGrant(stored.grant.id);
|
|
324
|
+
throw new SessionMcpOAuthError("invalid_grant", "Authorization code is invalid or expired.");
|
|
325
|
+
}
|
|
326
|
+
requireCapacity(1);
|
|
327
|
+
codes.delete(codeKey);
|
|
328
|
+
return mintTokens(stored.grant);
|
|
329
|
+
}
|
|
330
|
+
if (request.grantType === "refresh_token") {
|
|
331
|
+
const refreshKey = tokenKey(request.refreshToken);
|
|
332
|
+
const replayed = consumedRefreshTokens.get(refreshKey);
|
|
333
|
+
if (replayed !== void 0) {
|
|
334
|
+
if (replayed.clientId === request.clientId && replayed.expiresAt > now()) revokeFamily(replayed.familyId, replayed.grantId);
|
|
335
|
+
throw new SessionMcpOAuthError("invalid_grant", "Refresh token is invalid or expired.");
|
|
336
|
+
}
|
|
337
|
+
const stored = refreshTokens.get(refreshKey);
|
|
338
|
+
if (stored === void 0 || stored.expiresAt <= now() || stored.grant.clientId !== request.clientId || !grants.has(stored.grant.id)) {
|
|
339
|
+
refreshTokens.delete(refreshKey);
|
|
340
|
+
throw new SessionMcpOAuthError("invalid_grant", "Refresh token is invalid or expired.");
|
|
341
|
+
}
|
|
342
|
+
requireCapacity(2);
|
|
343
|
+
refreshTokens.delete(refreshKey);
|
|
344
|
+
consumedRefreshTokens.set(refreshKey, {
|
|
345
|
+
clientId: stored.grant.clientId,
|
|
346
|
+
grantId: stored.grant.id,
|
|
347
|
+
familyId: stored.familyId,
|
|
348
|
+
expiresAt: stored.familyExpiresAt
|
|
349
|
+
});
|
|
350
|
+
return mintTokens(stored.grant, stored.familyId, stored.familyExpiresAt);
|
|
351
|
+
}
|
|
352
|
+
throw new SessionMcpOAuthError("unsupported_grant_type", "Only authorization_code and refresh_token are supported.");
|
|
353
|
+
},
|
|
354
|
+
issueUrlToken(clientId) {
|
|
355
|
+
const client = clients.get(clientId);
|
|
356
|
+
if (client === void 0 || client.tokenEndpointAuthMethod !== "url_token") throw new SessionMcpOAuthError("invalid_client", "This client does not support signed MCP URLs.");
|
|
357
|
+
const binding = bindings.get(clientId);
|
|
358
|
+
if (binding === void 0) throw new SessionMcpOAuthError("invalid_request", "Client authorization has not been preauthorized.");
|
|
359
|
+
const payload = Buffer.from(JSON.stringify({
|
|
360
|
+
aud: binding.audience,
|
|
361
|
+
iat: Math.floor(client.createdAt / 1e3),
|
|
362
|
+
iss: URL_TOKEN_ISSUER,
|
|
363
|
+
sid: binding.sessionId,
|
|
364
|
+
sub: client.clientId
|
|
365
|
+
})).toString("base64url");
|
|
366
|
+
const input = `${URL_TOKEN_HEADER}.${payload}`;
|
|
367
|
+
return `${input}.${urlTokenSignature(input, client.secretHash).toString("base64url")}`;
|
|
368
|
+
},
|
|
369
|
+
authenticateUrlToken(token, audience) {
|
|
370
|
+
const parsed = parseUrlToken(token);
|
|
371
|
+
if (parsed === void 0) return void 0;
|
|
372
|
+
const client = clients.get(parsed.claims.sub);
|
|
373
|
+
if (client === void 0 || client.tokenEndpointAuthMethod !== "url_token") return void 0;
|
|
374
|
+
const binding = bindings.get(client.clientId);
|
|
375
|
+
if (binding === void 0 || binding.audience !== audience || parsed.claims.aud !== audience || parsed.claims.sid !== binding.sessionId || parsed.claims.iat !== Math.floor(client.createdAt / 1e3)) return void 0;
|
|
376
|
+
const expected = urlTokenSignature(parsed.input, client.secretHash);
|
|
377
|
+
if (!timingSafeEqual(expected, parsed.signature)) return void 0;
|
|
378
|
+
return {
|
|
379
|
+
id: client.clientId,
|
|
380
|
+
...binding,
|
|
381
|
+
createdAt: client.createdAt,
|
|
382
|
+
expiresAt: Number.MAX_SAFE_INTEGER
|
|
383
|
+
};
|
|
384
|
+
},
|
|
385
|
+
authenticateAccessToken(token, audience) {
|
|
386
|
+
sweep();
|
|
387
|
+
const key = tokenKey(token);
|
|
388
|
+
const presentedHash = digest(token);
|
|
389
|
+
for (const client of clients.values()) {
|
|
390
|
+
if (client.tokenEndpointAuthMethod !== "api_key" || !timingSafeEqual(presentedHash, client.secretHash)) continue;
|
|
391
|
+
const binding = bindings.get(client.clientId);
|
|
392
|
+
if (binding === void 0 || binding.audience !== audience) return void 0;
|
|
393
|
+
return {
|
|
394
|
+
id: client.clientId,
|
|
395
|
+
...binding,
|
|
396
|
+
createdAt: client.createdAt,
|
|
397
|
+
expiresAt: Number.MAX_SAFE_INTEGER
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
const stored = accessTokens.get(key);
|
|
401
|
+
if (stored === void 0) return void 0;
|
|
402
|
+
if (stored.expiresAt <= now() || !grants.has(stored.grant.id)) {
|
|
403
|
+
accessTokens.delete(key);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
if (stored.grant.audience !== audience) return void 0;
|
|
407
|
+
return {
|
|
408
|
+
...stored.grant,
|
|
409
|
+
expiresAt: stored.expiresAt
|
|
410
|
+
};
|
|
411
|
+
},
|
|
412
|
+
revokeGrant,
|
|
413
|
+
revokeSessionGeneration(sessionId, sessionGeneration) {
|
|
414
|
+
let revoked = 0;
|
|
415
|
+
for (const grant of grants.values()) if (grant.sessionId === sessionId && grant.sessionGeneration === sessionGeneration && revokeGrant(grant.id)) revoked += 1;
|
|
416
|
+
for (const [clientId, binding] of bindings) if (binding.sessionId === sessionId && binding.sessionGeneration === sessionGeneration) bindings.delete(clientId);
|
|
417
|
+
return revoked;
|
|
418
|
+
},
|
|
419
|
+
revokeSession(sessionId) {
|
|
420
|
+
let revoked = 0;
|
|
421
|
+
for (const grant of grants.values()) if (grant.sessionId === sessionId && revokeGrant(grant.id)) revoked += 1;
|
|
422
|
+
for (const [clientId, binding] of bindings) if (binding.sessionId === sessionId) bindings.delete(clientId);
|
|
423
|
+
return revoked;
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
//#endregion
|
|
428
|
+
export { SessionMcpOAuthError, createSessionMcpAuthorizationService, sessionMcpRouting };
|
|
429
|
+
|
|
430
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/sessionMcpAuthorization/index.ts"],"sourcesContent":["import { createHash, createHmac, randomBytes, timingSafeEqual } from 'node:crypto';\n\nconst ACCESS_TOKEN_TTL_MS = 15 * 60_000;\nconst AUTHORIZATION_CODE_TTL_MS = 5 * 60_000;\nconst CLIENT_ID_BYTES = 18;\nconst CLIENT_SECRET_BYTES = 32;\nconst DEFAULT_MAX_RECORDS = 10_000;\nconst GRANT_ID_BYTES = 18;\nconst REFRESH_TOKEN_TTL_MS = 30 * 24 * 60 * 60_000;\nconst TOKEN_BYTES = 32;\nconst URL_TOKEN_HEADER = Buffer.from('{\"alg\":\"HS256\",\"typ\":\"JWT\"}').toString('base64url');\nconst URL_TOKEN_ISSUER = 'doompi-session-mcp';\nconst URL_TOKEN_MAX_LENGTH = 4096;\n\nexport type SessionMcpOAuthErrorCode =\n | 'invalid_client'\n | 'invalid_grant'\n | 'invalid_request'\n | 'unsupported_grant_type';\n\nexport class SessionMcpOAuthError extends Error {\n readonly code: SessionMcpOAuthErrorCode;\n\n constructor(code: SessionMcpOAuthErrorCode, message: string) {\n super(message);\n this.name = 'SessionMcpOAuthError';\n this.code = code;\n }\n}\n\nexport type SessionMcpScope = 'restricted' | 'session';\nexport type SessionMcpRouting = 'conversation';\n\n/**\n * Conversation routing is mandatory. Legacy registrations are migrated at read time\n * so they cannot continue to share their parent runtime.\n */\nexport function sessionMcpRouting(value: unknown): SessionMcpRouting {\n if (value === undefined || value === 'session' || value === 'conversation') return 'conversation';\n throw new SessionMcpOAuthError('invalid_request', 'Session MCP routing is not supported.');\n}\n\nexport interface SessionMcpClient {\n readonly clientId: string;\n readonly name: string;\n readonly redirectUri: string;\n readonly tokenEndpointAuthMethod: 'client_secret_post' | 'api_key' | 'url_token';\n readonly createdAt: number;\n}\n\nexport interface CreatedSessionMcpClient extends SessionMcpClient {\n /** Returned once. Only a SHA-256 digest is retained by the service. */\n readonly clientSecret: string;\n}\n\nexport interface SessionMcpAuthorizationBinding {\n readonly clientId: string;\n readonly sessionId: string;\n readonly sessionGeneration: number;\n readonly audience: string;\n readonly scope: SessionMcpScope;\n /** Always conversation. Legacy persisted values are normalized at read time. */\n readonly routing?: SessionMcpRouting;\n readonly tools: readonly string[];\n readonly skills: readonly string[];\n}\n\nexport type CreateSessionMcpAuthorizationBindingInput = Omit<\n SessionMcpAuthorizationBinding,\n 'scope' | 'tools' | 'skills'\n> &\n (\n | { readonly scope: 'session'; readonly tools?: never; readonly skills?: never }\n | { readonly scope?: 'restricted'; readonly tools: readonly string[]; readonly skills: readonly string[] }\n );\n\nexport interface SessionMcpGrant extends SessionMcpAuthorizationBinding {\n readonly id: string;\n readonly createdAt: number;\n}\n\nexport interface SessionMcpAccessGrant extends SessionMcpGrant {\n readonly expiresAt: number;\n}\n\nexport interface SessionMcpTokenResponse {\n readonly accessToken: string;\n readonly refreshToken: string;\n readonly tokenType: 'Bearer';\n readonly expiresIn: number;\n readonly grant: SessionMcpGrant;\n}\n\nexport interface SessionMcpAuthorizationServiceOptions {\n readonly now?: () => number;\n readonly authorizationCodeTtlMs?: number;\n readonly accessTokenTtlMs?: number;\n readonly refreshTokenTtlMs?: number;\n /** Maximum combined authorization codes, grants, tokens, and refresh-token tombstones. */\n readonly maxRecords?: number;\n}\n\nexport type CreateSessionMcpClientInput =\n | { readonly name: string; readonly redirectUri: string; readonly authMethod?: 'oauth' }\n | { readonly name: string; readonly authMethod: 'api_key' | 'url_token'; readonly redirectUri?: never };\n\nexport interface IssueSessionMcpAuthorizationCodeInput {\n readonly clientId: string;\n readonly redirectUri: string;\n readonly codeChallenge: string;\n readonly codeChallengeMethod: 'S256';\n}\n\nexport type SessionMcpTokenRequest =\n | {\n readonly grantType: 'authorization_code';\n readonly clientId: string;\n readonly clientSecret: string;\n readonly code: string;\n readonly redirectUri: string;\n readonly codeVerifier: string;\n }\n | {\n readonly grantType: 'refresh_token';\n readonly clientId: string;\n readonly clientSecret: string;\n readonly refreshToken: string;\n };\n\nexport interface SessionMcpAuthorizationCode {\n readonly code: string;\n readonly grant: SessionMcpGrant;\n readonly expiresAt: number;\n}\n\nexport interface SessionMcpPersistentRegistration {\n readonly client: SessionMcpClient;\n readonly secretHash: string;\n readonly workspaceId: string;\n readonly binding: Omit<SessionMcpAuthorizationBinding, 'sessionGeneration'>;\n readonly verifiedAt: number;\n}\n\nexport interface SessionMcpAuthorizationService {\n createClient(input: CreateSessionMcpClientInput): CreatedSessionMcpClient;\n readClient(clientId: string): SessionMcpClient | undefined;\n listClients(): readonly SessionMcpClient[];\n revokeClient(clientId: string): boolean;\n createAuthorizationBinding(input: CreateSessionMcpAuthorizationBindingInput): SessionMcpAuthorizationBinding;\n readAuthorizationBinding(clientId: string): SessionMcpAuthorizationBinding | undefined;\n persistentRegistration(\n clientId: string,\n workspaceId: string,\n verifiedAt: number,\n ): SessionMcpPersistentRegistration | undefined;\n restorePersistentRegistration(registration: SessionMcpPersistentRegistration, sessionGeneration: number): boolean;\n issueAuthorizationCode(input: IssueSessionMcpAuthorizationCodeInput): SessionMcpAuthorizationCode;\n exchangeToken(request: SessionMcpTokenRequest): SessionMcpTokenResponse;\n issueUrlToken(clientId: string): string;\n authenticateUrlToken(token: string, audience: string): SessionMcpAccessGrant | undefined;\n authenticateAccessToken(token: string, audience: string): SessionMcpAccessGrant | undefined;\n revokeGrant(grantId: string): boolean;\n revokeSessionGeneration(sessionId: string, sessionGeneration: number): number;\n revokeSession(sessionId: string): number;\n}\n\ninterface StoredClient extends SessionMcpClient {\n readonly secretHash: Buffer;\n}\n\ninterface StoredCode {\n readonly clientId: string;\n readonly redirectUri: string;\n readonly challenge: string;\n readonly grant: SessionMcpGrant;\n readonly expiresAt: number;\n}\n\ninterface StoredAccessToken {\n readonly grant: SessionMcpGrant;\n readonly familyId: string;\n readonly expiresAt: number;\n}\n\ninterface StoredRefreshToken extends StoredAccessToken {\n readonly familyExpiresAt: number;\n}\n\ninterface ConsumedRefreshToken {\n readonly clientId: string;\n readonly grantId: string;\n readonly familyId: string;\n readonly expiresAt: number;\n}\n\nfunction digest(value: string): Buffer {\n return createHash('sha256').update(value).digest();\n}\n\nfunction tokenKey(value: string): string {\n return digest(value).toString('hex');\n}\n\nfunction opaque(bytes = TOKEN_BYTES): string {\n return randomBytes(bytes).toString('base64url');\n}\n\nfunction exactSecret(actual: string, expectedHash: Buffer): boolean {\n return timingSafeEqual(digest(actual), expectedHash);\n}\n\ninterface SessionMcpUrlTokenClaims {\n readonly aud: string;\n readonly iat: number;\n readonly iss: typeof URL_TOKEN_ISSUER;\n readonly sid: string;\n readonly sub: string;\n}\n\nfunction urlTokenSignature(input: string, key: Buffer): Buffer {\n return createHmac('sha256', key).update(input).digest();\n}\n\nfunction parseUrlToken(\n token: string,\n): { readonly claims: SessionMcpUrlTokenClaims; readonly input: string; readonly signature: Buffer } | undefined {\n if (token.length > URL_TOKEN_MAX_LENGTH) return undefined;\n const parts = token.split('.');\n if (parts.length !== 3) return undefined;\n const [header, payload, encodedSignature] = parts;\n if (\n header !== URL_TOKEN_HEADER ||\n !/^[A-Za-z0-9_-]{1,2048}$/u.test(payload!) ||\n !/^[A-Za-z0-9_-]{43}$/u.test(encodedSignature!)\n )\n return undefined;\n try {\n const payloadBytes = Buffer.from(payload!, 'base64url');\n const signature = Buffer.from(encodedSignature!, 'base64url');\n if (\n payloadBytes.toString('base64url') !== payload ||\n signature.length !== 32 ||\n signature.toString('base64url') !== encodedSignature\n )\n return undefined;\n const value: unknown = JSON.parse(payloadBytes.toString('utf8'));\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;\n const claims = value as Partial<SessionMcpUrlTokenClaims>;\n if (\n Object.keys(value).sort().join(',') !== 'aud,iat,iss,sid,sub' ||\n claims.iss !== URL_TOKEN_ISSUER ||\n typeof claims.sub !== 'string' ||\n claims.sub === '' ||\n typeof claims.sid !== 'string' ||\n claims.sid === '' ||\n typeof claims.aud !== 'string' ||\n claims.aud === '' ||\n typeof claims.iat !== 'number' ||\n !Number.isSafeInteger(claims.iat)\n )\n return undefined;\n return { claims: claims as SessionMcpUrlTokenClaims, input: `${header}.${payload}`, signature };\n } catch {\n return undefined;\n }\n}\n\nfunction requireHttpsUrl(value: string, label: string, allowQuery: boolean): string {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n throw new SessionMcpOAuthError('invalid_request', `${label} must be an absolute HTTPS URL.`);\n }\n if (\n parsed.protocol !== 'https:' ||\n parsed.username !== '' ||\n parsed.password !== '' ||\n parsed.hash !== '' ||\n (!allowQuery && parsed.search !== '')\n ) {\n throw new SessionMcpOAuthError(\n 'invalid_request',\n `${label} must be an absolute HTTPS URL without credentials, a query, or a fragment.`,\n );\n }\n return parsed.href;\n}\n\nfunction requireName(value: string, label: string): string {\n const normalized = value.trim();\n if (normalized === '') throw new SessionMcpOAuthError('invalid_request', `${label} must not be empty.`);\n return normalized;\n}\n\nfunction exactUniqueGrants(values: readonly string[], label: string): readonly string[] {\n if (values.some((value) => value === '' || value !== value.trim())) {\n throw new SessionMcpOAuthError('invalid_request', `${label} grants must contain exact non-empty names.`);\n }\n return Object.freeze([...new Set(values)]);\n}\n\n/** In-memory restricted OAuth authority. It intentionally has no discovery or client registration surface. */\nexport function createSessionMcpAuthorizationService(\n options: SessionMcpAuthorizationServiceOptions = {},\n): SessionMcpAuthorizationService {\n const now = options.now ?? Date.now;\n const codeTtl = options.authorizationCodeTtlMs ?? AUTHORIZATION_CODE_TTL_MS;\n const accessTtl = options.accessTokenTtlMs ?? ACCESS_TOKEN_TTL_MS;\n const refreshTtl = options.refreshTokenTtlMs ?? REFRESH_TOKEN_TTL_MS;\n const maxRecords = options.maxRecords ?? DEFAULT_MAX_RECORDS;\n if (!Number.isSafeInteger(maxRecords) || maxRecords < 3) {\n throw new Error('Session MCP authorization maxRecords must be a safe integer of at least 3.');\n }\n\n const clients = new Map<string, StoredClient>();\n const bindings = new Map<string, SessionMcpAuthorizationBinding>();\n const grants = new Map<string, SessionMcpGrant>();\n const codes = new Map<string, StoredCode>();\n const accessTokens = new Map<string, StoredAccessToken>();\n const refreshTokens = new Map<string, StoredRefreshToken>();\n const consumedRefreshTokens = new Map<string, ConsumedRefreshToken>();\n\n const publicClient = ({ secretHash: _secretHash, ...client }: StoredClient): SessionMcpClient => client;\n\n const recordCount = (): number =>\n grants.size + codes.size + accessTokens.size + refreshTokens.size + consumedRefreshTokens.size;\n\n const sweep = (): void => {\n const currentTime = now();\n for (const [key, value] of codes) if (value.expiresAt <= currentTime) codes.delete(key);\n for (const [key, value] of accessTokens) if (value.expiresAt <= currentTime) accessTokens.delete(key);\n for (const [key, value] of refreshTokens) if (value.expiresAt <= currentTime) refreshTokens.delete(key);\n for (const [key, value] of consumedRefreshTokens) {\n if (value.expiresAt <= currentTime) consumedRefreshTokens.delete(key);\n }\n\n const referencedGrants = new Set<string>();\n for (const value of codes.values()) referencedGrants.add(value.grant.id);\n for (const value of accessTokens.values()) referencedGrants.add(value.grant.id);\n for (const value of refreshTokens.values()) referencedGrants.add(value.grant.id);\n for (const value of consumedRefreshTokens.values()) referencedGrants.add(value.grantId);\n for (const grantId of grants.keys()) if (!referencedGrants.has(grantId)) grants.delete(grantId);\n };\n\n const requireCapacity = (additionalRecords: number): void => {\n sweep();\n if (recordCount() + additionalRecords > maxRecords) {\n throw new SessionMcpOAuthError('invalid_request', 'The authorization service is at capacity.');\n }\n };\n\n const authenticateClient = (clientId: string, clientSecret: string): StoredClient => {\n const client = clients.get(clientId);\n if (client === undefined || !exactSecret(clientSecret, client.secretHash)) {\n throw new SessionMcpOAuthError('invalid_client', 'Client authentication failed.');\n }\n return client;\n };\n\n const revokeGrant = (grantId: string): boolean => {\n if (!grants.delete(grantId)) return false;\n for (const [key, value] of codes) if (value.grant.id === grantId) codes.delete(key);\n for (const [key, value] of accessTokens) if (value.grant.id === grantId) accessTokens.delete(key);\n for (const [key, value] of refreshTokens) if (value.grant.id === grantId) refreshTokens.delete(key);\n return true;\n };\n\n const revokeFamily = (familyId: string, grantId: string): void => {\n revokeGrant(grantId);\n for (const [key, value] of accessTokens) if (value.familyId === familyId) accessTokens.delete(key);\n for (const [key, value] of refreshTokens) if (value.familyId === familyId) refreshTokens.delete(key);\n };\n\n const mintTokens = (\n grant: SessionMcpGrant,\n familyId = opaque(GRANT_ID_BYTES),\n familyExpiresAt = now() + refreshTtl,\n ): SessionMcpTokenResponse => {\n const issuedAt = now();\n const accessExpiresAt = Math.min(issuedAt + accessTtl, familyExpiresAt);\n const accessToken = opaque();\n const refreshToken = opaque();\n accessTokens.set(tokenKey(accessToken), { grant, familyId, expiresAt: accessExpiresAt });\n refreshTokens.set(tokenKey(refreshToken), {\n grant,\n familyId,\n expiresAt: familyExpiresAt,\n familyExpiresAt,\n });\n return {\n accessToken,\n refreshToken,\n tokenType: 'Bearer',\n expiresIn: Math.max(0, Math.floor((accessExpiresAt - issuedAt) / 1000)),\n grant,\n };\n };\n\n return {\n createClient(input) {\n const createdAt = now();\n const clientId = opaque(CLIENT_ID_BYTES);\n const clientSecret = opaque(CLIENT_SECRET_BYTES);\n const urlCredential = input.authMethod === 'url_token';\n const headerCredential = input.authMethod === 'api_key';\n let redirectUri = '';\n if (!urlCredential && !headerCredential) {\n if (typeof input.redirectUri !== 'string') {\n throw new SessionMcpOAuthError('invalid_request', 'Redirect URI must be an absolute HTTPS URL.');\n }\n redirectUri = requireHttpsUrl(input.redirectUri, 'Redirect URI', true);\n }\n const client: StoredClient = {\n clientId,\n name: requireName(input.name, 'Client name'),\n redirectUri,\n tokenEndpointAuthMethod: urlCredential ? 'url_token' : headerCredential ? 'api_key' : 'client_secret_post',\n createdAt,\n secretHash: digest(clientSecret),\n };\n clients.set(clientId, client);\n return { ...publicClient(client), clientSecret };\n },\n readClient(clientId) {\n const client = clients.get(clientId);\n return client === undefined ? undefined : publicClient(client);\n },\n listClients() {\n return [...clients.values()].map(publicClient);\n },\n revokeClient(clientId) {\n if (!clients.delete(clientId)) return false;\n bindings.delete(clientId);\n for (const grant of grants.values()) if (grant.clientId === clientId) revokeGrant(grant.id);\n return true;\n },\n createAuthorizationBinding(input) {\n if (!clients.has(input.clientId)) throw new SessionMcpOAuthError('invalid_client', 'Unknown local client.');\n if (bindings.has(input.clientId)) {\n throw new SessionMcpOAuthError('invalid_request', 'Client authorization is already bound.');\n }\n if (!Number.isSafeInteger(input.sessionGeneration) || input.sessionGeneration < 0) {\n throw new SessionMcpOAuthError('invalid_request', 'Session generation must be a non-negative safe integer.');\n }\n const routing = sessionMcpRouting(input.routing);\n const scope = input.scope ?? 'restricted';\n if (scope !== 'session' && scope !== 'restricted') {\n throw new SessionMcpOAuthError('invalid_request', 'Authorization scope is not supported.');\n }\n let tools: readonly string[];\n let skills: readonly string[];\n if (scope === 'session') {\n if (input.tools !== undefined || input.skills !== undefined) {\n throw new SessionMcpOAuthError('invalid_request', 'Session scope cannot include capability grants.');\n }\n tools = Object.freeze([] as string[]);\n skills = Object.freeze([] as string[]);\n } else {\n if (!Array.isArray(input.tools) || !Array.isArray(input.skills)) {\n throw new SessionMcpOAuthError('invalid_request', 'Restricted scope requires tool and skill grants.');\n }\n tools = exactUniqueGrants(input.tools, 'Tool');\n skills = exactUniqueGrants(input.skills, 'Skill');\n }\n const binding: SessionMcpAuthorizationBinding = Object.freeze({\n clientId: input.clientId,\n sessionId: requireName(input.sessionId, 'Session ID'),\n sessionGeneration: input.sessionGeneration,\n audience: requireHttpsUrl(input.audience, 'Audience', false),\n scope,\n routing,\n tools,\n skills,\n });\n bindings.set(input.clientId, binding);\n return binding;\n },\n readAuthorizationBinding(clientId) {\n return bindings.get(clientId);\n },\n persistentRegistration(clientId, workspaceId, verifiedAt) {\n const client = clients.get(clientId);\n const binding = bindings.get(clientId);\n if (client === undefined || binding === undefined || !Number.isSafeInteger(verifiedAt)) return undefined;\n const { sessionGeneration: _sessionGeneration, ...persistentBinding } = binding;\n return {\n client: publicClient(client),\n secretHash: client.secretHash.toString('hex'),\n workspaceId: requireName(workspaceId, 'Workspace ID'),\n binding: persistentBinding,\n verifiedAt,\n };\n },\n restorePersistentRegistration(registration, sessionGeneration) {\n if (\n bindings.has(registration.client.clientId) ||\n !/^[a-f0-9]{64}$/u.test(registration.secretHash) ||\n !Number.isSafeInteger(sessionGeneration) ||\n sessionGeneration < 0 ||\n registration.client.clientId !== registration.binding.clientId\n )\n return false;\n try {\n // Restarting a runtime revokes its binding, not its durable client registration.\n const held = clients.get(registration.client.clientId);\n if (\n held &&\n (held.redirectUri !== registration.client.redirectUri ||\n held.tokenEndpointAuthMethod !== registration.client.tokenEndpointAuthMethod ||\n !timingSafeEqual(held.secretHash, Buffer.from(registration.secretHash, 'hex')))\n )\n return false;\n if (\n (registration.client.tokenEndpointAuthMethod !== 'client_secret_post' &&\n registration.client.tokenEndpointAuthMethod !== 'api_key' &&\n registration.client.tokenEndpointAuthMethod !== 'url_token') ||\n (registration.client.tokenEndpointAuthMethod !== 'client_secret_post' &&\n (registration.client.redirectUri !== '' || registration.binding.scope !== 'session'))\n )\n return false;\n const client: StoredClient = {\n clientId: requireName(registration.client.clientId, 'Client ID'),\n name: requireName(registration.client.name, 'Client name'),\n redirectUri:\n registration.client.tokenEndpointAuthMethod === 'client_secret_post'\n ? requireHttpsUrl(registration.client.redirectUri, 'Redirect URI', true)\n : registration.client.redirectUri,\n tokenEndpointAuthMethod: registration.client.tokenEndpointAuthMethod,\n createdAt: registration.client.createdAt,\n secretHash: Buffer.from(registration.secretHash, 'hex'),\n };\n const routing = sessionMcpRouting(registration.binding.routing);\n const scope = registration.binding.scope;\n const tools =\n scope === 'session' ? Object.freeze([] as string[]) : exactUniqueGrants(registration.binding.tools, 'Tool');\n const skills =\n scope === 'session' ? Object.freeze([] as string[]) : exactUniqueGrants(registration.binding.skills, 'Skill');\n if (\n (scope !== 'session' && scope !== 'restricted') ||\n (scope === 'session' && (registration.binding.tools.length !== 0 || registration.binding.skills.length !== 0))\n ) {\n throw new SessionMcpOAuthError('invalid_request', 'Stored Session MCP authorization is invalid.');\n }\n clients.set(client.clientId, client);\n bindings.set(\n client.clientId,\n Object.freeze({\n clientId: client.clientId,\n sessionId: requireName(registration.binding.sessionId, 'Session ID'),\n sessionGeneration,\n audience: requireHttpsUrl(registration.binding.audience, 'Audience', false),\n scope,\n routing,\n tools,\n skills,\n }),\n );\n return true;\n } catch {\n clients.delete(registration.client.clientId);\n return false;\n }\n },\n issueAuthorizationCode(input) {\n const client = clients.get(input.clientId);\n if (client === undefined) throw new SessionMcpOAuthError('invalid_client', 'Unknown local client.');\n const binding = bindings.get(input.clientId);\n if (binding === undefined) {\n throw new SessionMcpOAuthError('invalid_request', 'Client authorization has not been preauthorized.');\n }\n if (client.tokenEndpointAuthMethod !== 'client_secret_post') {\n throw new SessionMcpOAuthError('invalid_client', 'This client does not support OAuth authorization.');\n }\n if (input.redirectUri !== client.redirectUri) {\n throw new SessionMcpOAuthError(\n 'invalid_request',\n 'Redirect URI does not exactly match the registered callback.',\n );\n }\n if (input.codeChallengeMethod !== 'S256' || !/^[A-Za-z0-9_-]{43}$/u.test(input.codeChallenge)) {\n throw new SessionMcpOAuthError('invalid_request', 'A valid S256 PKCE challenge is required.');\n }\n requireCapacity(2);\n const issuedAt = now();\n const grant: SessionMcpGrant = Object.freeze({\n id: opaque(GRANT_ID_BYTES),\n ...binding,\n createdAt: issuedAt,\n });\n const code = opaque();\n const expiresAt = issuedAt + codeTtl;\n grants.set(grant.id, grant);\n codes.set(tokenKey(code), {\n clientId: client.clientId,\n redirectUri: client.redirectUri,\n challenge: input.codeChallenge,\n grant,\n expiresAt,\n });\n return { code, grant, expiresAt };\n },\n exchangeToken(request) {\n const client = authenticateClient(request.clientId, request.clientSecret);\n if (client.tokenEndpointAuthMethod !== 'client_secret_post') {\n throw new SessionMcpOAuthError('invalid_client', 'This client does not support OAuth tokens.');\n }\n sweep();\n if (request.grantType === 'authorization_code') {\n const codeKey = tokenKey(request.code);\n const stored = codes.get(codeKey);\n if (\n stored === undefined ||\n stored.expiresAt <= now() ||\n stored.clientId !== request.clientId ||\n stored.redirectUri !== request.redirectUri ||\n !/^[A-Za-z0-9\\-._~]{43,128}$/u.test(request.codeVerifier) ||\n createHash('sha256').update(request.codeVerifier).digest('base64url') !== stored.challenge ||\n !grants.has(stored.grant.id)\n ) {\n codes.delete(codeKey);\n if (stored !== undefined) revokeGrant(stored.grant.id);\n throw new SessionMcpOAuthError('invalid_grant', 'Authorization code is invalid or expired.');\n }\n requireCapacity(1);\n codes.delete(codeKey);\n return mintTokens(stored.grant);\n }\n if (request.grantType === 'refresh_token') {\n const refreshKey = tokenKey(request.refreshToken);\n const replayed = consumedRefreshTokens.get(refreshKey);\n if (replayed !== undefined) {\n if (replayed.clientId === request.clientId && replayed.expiresAt > now()) {\n revokeFamily(replayed.familyId, replayed.grantId);\n }\n throw new SessionMcpOAuthError('invalid_grant', 'Refresh token is invalid or expired.');\n }\n const stored = refreshTokens.get(refreshKey);\n if (\n stored === undefined ||\n stored.expiresAt <= now() ||\n stored.grant.clientId !== request.clientId ||\n !grants.has(stored.grant.id)\n ) {\n refreshTokens.delete(refreshKey);\n throw new SessionMcpOAuthError('invalid_grant', 'Refresh token is invalid or expired.');\n }\n requireCapacity(2);\n refreshTokens.delete(refreshKey);\n consumedRefreshTokens.set(refreshKey, {\n clientId: stored.grant.clientId,\n grantId: stored.grant.id,\n familyId: stored.familyId,\n expiresAt: stored.familyExpiresAt,\n });\n return mintTokens(stored.grant, stored.familyId, stored.familyExpiresAt);\n }\n throw new SessionMcpOAuthError(\n 'unsupported_grant_type',\n 'Only authorization_code and refresh_token are supported.',\n );\n },\n issueUrlToken(clientId) {\n const client = clients.get(clientId);\n if (client === undefined || client.tokenEndpointAuthMethod !== 'url_token') {\n throw new SessionMcpOAuthError('invalid_client', 'This client does not support signed MCP URLs.');\n }\n const binding = bindings.get(clientId);\n if (binding === undefined) {\n throw new SessionMcpOAuthError('invalid_request', 'Client authorization has not been preauthorized.');\n }\n const payload = Buffer.from(\n JSON.stringify({\n aud: binding.audience,\n iat: Math.floor(client.createdAt / 1000),\n iss: URL_TOKEN_ISSUER,\n sid: binding.sessionId,\n sub: client.clientId,\n } satisfies SessionMcpUrlTokenClaims),\n ).toString('base64url');\n const input = `${URL_TOKEN_HEADER}.${payload}`;\n return `${input}.${urlTokenSignature(input, client.secretHash).toString('base64url')}`;\n },\n authenticateUrlToken(token, audience) {\n const parsed = parseUrlToken(token);\n if (parsed === undefined) return undefined;\n const client = clients.get(parsed.claims.sub);\n if (client === undefined || client.tokenEndpointAuthMethod !== 'url_token') return undefined;\n const binding = bindings.get(client.clientId);\n if (\n binding === undefined ||\n binding.audience !== audience ||\n parsed.claims.aud !== audience ||\n parsed.claims.sid !== binding.sessionId ||\n parsed.claims.iat !== Math.floor(client.createdAt / 1000)\n )\n return undefined;\n const expected = urlTokenSignature(parsed.input, client.secretHash);\n if (!timingSafeEqual(expected, parsed.signature)) return undefined;\n return { id: client.clientId, ...binding, createdAt: client.createdAt, expiresAt: Number.MAX_SAFE_INTEGER };\n },\n authenticateAccessToken(token, audience) {\n sweep();\n const key = tokenKey(token);\n // API keys are long-lived credentials, but remain tied to the current binding and audience.\n const presentedHash = digest(token);\n for (const client of clients.values()) {\n if (client.tokenEndpointAuthMethod !== 'api_key' || !timingSafeEqual(presentedHash, client.secretHash))\n continue;\n const binding = bindings.get(client.clientId);\n if (binding === undefined || binding.audience !== audience) return undefined;\n return { id: client.clientId, ...binding, createdAt: client.createdAt, expiresAt: Number.MAX_SAFE_INTEGER };\n }\n const stored = accessTokens.get(key);\n if (stored === undefined) return undefined;\n if (stored.expiresAt <= now() || !grants.has(stored.grant.id)) {\n accessTokens.delete(key);\n return undefined;\n }\n if (stored.grant.audience !== audience) return undefined;\n return { ...stored.grant, expiresAt: stored.expiresAt };\n },\n revokeGrant,\n revokeSessionGeneration(sessionId, sessionGeneration) {\n let revoked = 0;\n for (const grant of grants.values()) {\n if (grant.sessionId === sessionId && grant.sessionGeneration === sessionGeneration && revokeGrant(grant.id)) {\n revoked += 1;\n }\n }\n for (const [clientId, binding] of bindings) {\n if (binding.sessionId === sessionId && binding.sessionGeneration === sessionGeneration)\n bindings.delete(clientId);\n }\n return revoked;\n },\n revokeSession(sessionId) {\n let revoked = 0;\n for (const grant of grants.values()) {\n if (grant.sessionId === sessionId && revokeGrant(grant.id)) revoked += 1;\n }\n for (const [clientId, binding] of bindings) if (binding.sessionId === sessionId) bindings.delete(clientId);\n return revoked;\n },\n };\n}\n"],"mappings":";;AAEA,MAAM,sBAAsB;AAC5B,MAAM,4BAA4B;AAClC,MAAM,kBAAkB;AACxB,MAAM,sBAAsB;AAC5B,MAAM,sBAAsB;AAC5B,MAAM,iBAAiB;AACvB,MAAM,uBAAuB;AAC7B,MAAM,cAAc;AACpB,MAAM,mBAAmB,OAAO,KAAK,qCAA6B,CAAC,CAAC,SAAS,WAAW;AACxF,MAAM,mBAAmB;AACzB,MAAM,uBAAuB;AAQ7B,IAAa,uBAAb,cAA0C,MAAM;CAC9C;CAEA,YAAY,MAAgC,SAAiB;EAC3D,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,OAAO;CACd;AACF;;;;;AASA,SAAgB,kBAAkB,OAAmC;CACnE,IAAI,UAAU,KAAA,KAAa,UAAU,aAAa,UAAU,gBAAgB,OAAO;CACnF,MAAM,IAAI,qBAAqB,mBAAmB,uCAAuC;AAC3F;AA2JA,SAAS,OAAO,OAAuB;CACrC,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;AACnD;AAEA,SAAS,SAAS,OAAuB;CACvC,OAAO,OAAO,KAAK,CAAC,CAAC,SAAS,KAAK;AACrC;AAEA,SAAS,OAAO,QAAQ,aAAqB;CAC3C,OAAO,YAAY,KAAK,CAAC,CAAC,SAAS,WAAW;AAChD;AAEA,SAAS,YAAY,QAAgB,cAA+B;CAClE,OAAO,gBAAgB,OAAO,MAAM,GAAG,YAAY;AACrD;AAUA,SAAS,kBAAkB,OAAe,KAAqB;CAC7D,OAAO,WAAW,UAAU,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;AACxD;AAEA,SAAS,cACP,OAC+G;CAC/G,IAAI,MAAM,SAAS,sBAAsB,OAAO,KAAA;CAChD,MAAM,QAAQ,MAAM,MAAM,GAAG;CAC7B,IAAI,MAAM,WAAW,GAAG,OAAO,KAAA;CAC/B,MAAM,CAAC,QAAQ,SAAS,oBAAoB;CAC5C,IACE,WAAW,oBACX,CAAC,2BAA2B,KAAK,OAAQ,KACzC,CAAC,uBAAuB,KAAK,gBAAiB,GAE9C,OAAO,KAAA;CACT,IAAI;EACF,MAAM,eAAe,OAAO,KAAK,SAAU,WAAW;EACtD,MAAM,YAAY,OAAO,KAAK,kBAAmB,WAAW;EAC5D,IACE,aAAa,SAAS,WAAW,MAAM,WACvC,UAAU,WAAW,MACrB,UAAU,SAAS,WAAW,MAAM,kBAEpC,OAAO,KAAA;EACT,MAAM,QAAiB,KAAK,MAAM,aAAa,SAAS,MAAM,CAAC;EAC/D,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG,OAAO,KAAA;EAChF,MAAM,SAAS;EACf,IACE,OAAO,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,yBACxC,OAAO,QAAQ,oBACf,OAAO,OAAO,QAAQ,YACtB,OAAO,QAAQ,MACf,OAAO,OAAO,QAAQ,YACtB,OAAO,QAAQ,MACf,OAAO,OAAO,QAAQ,YACtB,OAAO,QAAQ,MACf,OAAO,OAAO,QAAQ,YACtB,CAAC,OAAO,cAAc,OAAO,GAAG,GAEhC,OAAO,KAAA;EACT,OAAO;GAAU;GAAoC,OAAO,GAAG,OAAO,GAAG;GAAW;EAAU;CAChG,QAAQ;EACN;CACF;AACF;AAEA,SAAS,gBAAgB,OAAe,OAAe,YAA6B;CAClF,IAAI;CACJ,IAAI;EACF,SAAS,IAAI,IAAI,KAAK;CACxB,QAAQ;EACN,MAAM,IAAI,qBAAqB,mBAAmB,GAAG,MAAM,gCAAgC;CAC7F;CACA,IACE,OAAO,aAAa,YACpB,OAAO,aAAa,MACpB,OAAO,aAAa,MACpB,OAAO,SAAS,MACf,CAAC,cAAc,OAAO,WAAW,IAElC,MAAM,IAAI,qBACR,mBACA,GAAG,MAAM,4EACX;CAEF,OAAO,OAAO;AAChB;AAEA,SAAS,YAAY,OAAe,OAAuB;CACzD,MAAM,aAAa,MAAM,KAAK;CAC9B,IAAI,eAAe,IAAI,MAAM,IAAI,qBAAqB,mBAAmB,GAAG,MAAM,oBAAoB;CACtG,OAAO;AACT;AAEA,SAAS,kBAAkB,QAA2B,OAAkC;CACtF,IAAI,OAAO,MAAM,UAAU,UAAU,MAAM,UAAU,MAAM,KAAK,CAAC,GAC/D,MAAM,IAAI,qBAAqB,mBAAmB,GAAG,MAAM,4CAA4C;CAEzG,OAAO,OAAO,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC;AAC3C;;AAGA,SAAgB,qCACd,UAAiD,CAAC,GAClB;CAChC,MAAM,MAAM,QAAQ,OAAO,KAAK;CAChC,MAAM,UAAU,QAAQ,0BAA0B;CAClD,MAAM,YAAY,QAAQ,oBAAoB;CAC9C,MAAM,aAAa,QAAQ,qBAAqB;CAChD,MAAM,aAAa,QAAQ,cAAc;CACzC,IAAI,CAAC,OAAO,cAAc,UAAU,KAAK,aAAa,GACpD,MAAM,IAAI,MAAM,4EAA4E;CAG9F,MAAM,0BAAU,IAAI,IAA0B;CAC9C,MAAM,2BAAW,IAAI,IAA4C;CACjE,MAAM,yBAAS,IAAI,IAA6B;CAChD,MAAM,wBAAQ,IAAI,IAAwB;CAC1C,MAAM,+BAAe,IAAI,IAA+B;CACxD,MAAM,gCAAgB,IAAI,IAAgC;CAC1D,MAAM,wCAAwB,IAAI,IAAkC;CAEpE,MAAM,gBAAgB,EAAE,YAAY,aAAa,GAAG,aAA6C;CAEjG,MAAM,oBACJ,OAAO,OAAO,MAAM,OAAO,aAAa,OAAO,cAAc,OAAO,sBAAsB;CAE5F,MAAM,cAAoB;EACxB,MAAM,cAAc,IAAI;EACxB,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,IAAI,MAAM,aAAa,aAAa,MAAM,OAAO,GAAG;EACtF,KAAK,MAAM,CAAC,KAAK,UAAU,cAAc,IAAI,MAAM,aAAa,aAAa,aAAa,OAAO,GAAG;EACpG,KAAK,MAAM,CAAC,KAAK,UAAU,eAAe,IAAI,MAAM,aAAa,aAAa,cAAc,OAAO,GAAG;EACtG,KAAK,MAAM,CAAC,KAAK,UAAU,uBACzB,IAAI,MAAM,aAAa,aAAa,sBAAsB,OAAO,GAAG;EAGtE,MAAM,mCAAmB,IAAI,IAAY;EACzC,KAAK,MAAM,SAAS,MAAM,OAAO,GAAG,iBAAiB,IAAI,MAAM,MAAM,EAAE;EACvE,KAAK,MAAM,SAAS,aAAa,OAAO,GAAG,iBAAiB,IAAI,MAAM,MAAM,EAAE;EAC9E,KAAK,MAAM,SAAS,cAAc,OAAO,GAAG,iBAAiB,IAAI,MAAM,MAAM,EAAE;EAC/E,KAAK,MAAM,SAAS,sBAAsB,OAAO,GAAG,iBAAiB,IAAI,MAAM,OAAO;EACtF,KAAK,MAAM,WAAW,OAAO,KAAK,GAAG,IAAI,CAAC,iBAAiB,IAAI,OAAO,GAAG,OAAO,OAAO,OAAO;CAChG;CAEA,MAAM,mBAAmB,sBAAoC;EAC3D,MAAM;EACN,IAAI,YAAY,IAAI,oBAAoB,YACtC,MAAM,IAAI,qBAAqB,mBAAmB,2CAA2C;CAEjG;CAEA,MAAM,sBAAsB,UAAkB,iBAAuC;EACnF,MAAM,SAAS,QAAQ,IAAI,QAAQ;EACnC,IAAI,WAAW,KAAA,KAAa,CAAC,YAAY,cAAc,OAAO,UAAU,GACtE,MAAM,IAAI,qBAAqB,kBAAkB,+BAA+B;EAElF,OAAO;CACT;CAEA,MAAM,eAAe,YAA6B;EAChD,IAAI,CAAC,OAAO,OAAO,OAAO,GAAG,OAAO;EACpC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,IAAI,MAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG;EAClF,KAAK,MAAM,CAAC,KAAK,UAAU,cAAc,IAAI,MAAM,MAAM,OAAO,SAAS,aAAa,OAAO,GAAG;EAChG,KAAK,MAAM,CAAC,KAAK,UAAU,eAAe,IAAI,MAAM,MAAM,OAAO,SAAS,cAAc,OAAO,GAAG;EAClG,OAAO;CACT;CAEA,MAAM,gBAAgB,UAAkB,YAA0B;EAChE,YAAY,OAAO;EACnB,KAAK,MAAM,CAAC,KAAK,UAAU,cAAc,IAAI,MAAM,aAAa,UAAU,aAAa,OAAO,GAAG;EACjG,KAAK,MAAM,CAAC,KAAK,UAAU,eAAe,IAAI,MAAM,aAAa,UAAU,cAAc,OAAO,GAAG;CACrG;CAEA,MAAM,cACJ,OACA,WAAW,OAAO,cAAc,GAChC,kBAAkB,IAAI,IAAI,eACE;EAC5B,MAAM,WAAW,IAAI;EACrB,MAAM,kBAAkB,KAAK,IAAI,WAAW,WAAW,eAAe;EACtE,MAAM,cAAc,OAAO;EAC3B,MAAM,eAAe,OAAO;EAC5B,aAAa,IAAI,SAAS,WAAW,GAAG;GAAE;GAAO;GAAU,WAAW;EAAgB,CAAC;EACvF,cAAc,IAAI,SAAS,YAAY,GAAG;GACxC;GACA;GACA,WAAW;GACX;EACF,CAAC;EACD,OAAO;GACL;GACA;GACA,WAAW;GACX,WAAW,KAAK,IAAI,GAAG,KAAK,OAAO,kBAAkB,YAAY,GAAI,CAAC;GACtE;EACF;CACF;CAEA,OAAO;EACL,aAAa,OAAO;GAClB,MAAM,YAAY,IAAI;GACtB,MAAM,WAAW,OAAO,eAAe;GACvC,MAAM,eAAe,OAAO,mBAAmB;GAC/C,MAAM,gBAAgB,MAAM,eAAe;GAC3C,MAAM,mBAAmB,MAAM,eAAe;GAC9C,IAAI,cAAc;GAClB,IAAI,CAAC,iBAAiB,CAAC,kBAAkB;IACvC,IAAI,OAAO,MAAM,gBAAgB,UAC/B,MAAM,IAAI,qBAAqB,mBAAmB,6CAA6C;IAEjG,cAAc,gBAAgB,MAAM,aAAa,gBAAgB,IAAI;GACvE;GACA,MAAM,SAAuB;IAC3B;IACA,MAAM,YAAY,MAAM,MAAM,aAAa;IAC3C;IACA,yBAAyB,gBAAgB,cAAc,mBAAmB,YAAY;IACtF;IACA,YAAY,OAAO,YAAY;GACjC;GACA,QAAQ,IAAI,UAAU,MAAM;GAC5B,OAAO;IAAE,GAAG,aAAa,MAAM;IAAG;GAAa;EACjD;EACA,WAAW,UAAU;GACnB,MAAM,SAAS,QAAQ,IAAI,QAAQ;GACnC,OAAO,WAAW,KAAA,IAAY,KAAA,IAAY,aAAa,MAAM;EAC/D;EACA,cAAc;GACZ,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY;EAC/C;EACA,aAAa,UAAU;GACrB,IAAI,CAAC,QAAQ,OAAO,QAAQ,GAAG,OAAO;GACtC,SAAS,OAAO,QAAQ;GACxB,KAAK,MAAM,SAAS,OAAO,OAAO,GAAG,IAAI,MAAM,aAAa,UAAU,YAAY,MAAM,EAAE;GAC1F,OAAO;EACT;EACA,2BAA2B,OAAO;GAChC,IAAI,CAAC,QAAQ,IAAI,MAAM,QAAQ,GAAG,MAAM,IAAI,qBAAqB,kBAAkB,uBAAuB;GAC1G,IAAI,SAAS,IAAI,MAAM,QAAQ,GAC7B,MAAM,IAAI,qBAAqB,mBAAmB,wCAAwC;GAE5F,IAAI,CAAC,OAAO,cAAc,MAAM,iBAAiB,KAAK,MAAM,oBAAoB,GAC9E,MAAM,IAAI,qBAAqB,mBAAmB,yDAAyD;GAE7G,MAAM,UAAU,kBAAkB,MAAM,OAAO;GAC/C,MAAM,QAAQ,MAAM,SAAS;GAC7B,IAAI,UAAU,aAAa,UAAU,cACnC,MAAM,IAAI,qBAAqB,mBAAmB,uCAAuC;GAE3F,IAAI;GACJ,IAAI;GACJ,IAAI,UAAU,WAAW;IACvB,IAAI,MAAM,UAAU,KAAA,KAAa,MAAM,WAAW,KAAA,GAChD,MAAM,IAAI,qBAAqB,mBAAmB,iDAAiD;IAErG,QAAQ,OAAO,OAAO,CAAC,CAAa;IACpC,SAAS,OAAO,OAAO,CAAC,CAAa;GACvC,OAAO;IACL,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC,MAAM,QAAQ,MAAM,MAAM,GAC5D,MAAM,IAAI,qBAAqB,mBAAmB,kDAAkD;IAEtG,QAAQ,kBAAkB,MAAM,OAAO,MAAM;IAC7C,SAAS,kBAAkB,MAAM,QAAQ,OAAO;GAClD;GACA,MAAM,UAA0C,OAAO,OAAO;IAC5D,UAAU,MAAM;IAChB,WAAW,YAAY,MAAM,WAAW,YAAY;IACpD,mBAAmB,MAAM;IACzB,UAAU,gBAAgB,MAAM,UAAU,YAAY,KAAK;IAC3D;IACA;IACA;IACA;GACF,CAAC;GACD,SAAS,IAAI,MAAM,UAAU,OAAO;GACpC,OAAO;EACT;EACA,yBAAyB,UAAU;GACjC,OAAO,SAAS,IAAI,QAAQ;EAC9B;EACA,uBAAuB,UAAU,aAAa,YAAY;GACxD,MAAM,SAAS,QAAQ,IAAI,QAAQ;GACnC,MAAM,UAAU,SAAS,IAAI,QAAQ;GACrC,IAAI,WAAW,KAAA,KAAa,YAAY,KAAA,KAAa,CAAC,OAAO,cAAc,UAAU,GAAG,OAAO,KAAA;GAC/F,MAAM,EAAE,mBAAmB,oBAAoB,GAAG,sBAAsB;GACxE,OAAO;IACL,QAAQ,aAAa,MAAM;IAC3B,YAAY,OAAO,WAAW,SAAS,KAAK;IAC5C,aAAa,YAAY,aAAa,cAAc;IACpD,SAAS;IACT;GACF;EACF;EACA,8BAA8B,cAAc,mBAAmB;GAC7D,IACE,SAAS,IAAI,aAAa,OAAO,QAAQ,KACzC,CAAC,kBAAkB,KAAK,aAAa,UAAU,KAC/C,CAAC,OAAO,cAAc,iBAAiB,KACvC,oBAAoB,KACpB,aAAa,OAAO,aAAa,aAAa,QAAQ,UAEtD,OAAO;GACT,IAAI;IAEF,MAAM,OAAO,QAAQ,IAAI,aAAa,OAAO,QAAQ;IACrD,IACE,SACC,KAAK,gBAAgB,aAAa,OAAO,eACxC,KAAK,4BAA4B,aAAa,OAAO,2BACrD,CAAC,gBAAgB,KAAK,YAAY,OAAO,KAAK,aAAa,YAAY,KAAK,CAAC,IAE/E,OAAO;IACT,IACG,aAAa,OAAO,4BAA4B,wBAC/C,aAAa,OAAO,4BAA4B,aAChD,aAAa,OAAO,4BAA4B,eACjD,aAAa,OAAO,4BAA4B,yBAC9C,aAAa,OAAO,gBAAgB,MAAM,aAAa,QAAQ,UAAU,YAE5E,OAAO;IACT,MAAM,SAAuB;KAC3B,UAAU,YAAY,aAAa,OAAO,UAAU,WAAW;KAC/D,MAAM,YAAY,aAAa,OAAO,MAAM,aAAa;KACzD,aACE,aAAa,OAAO,4BAA4B,uBAC5C,gBAAgB,aAAa,OAAO,aAAa,gBAAgB,IAAI,IACrE,aAAa,OAAO;KAC1B,yBAAyB,aAAa,OAAO;KAC7C,WAAW,aAAa,OAAO;KAC/B,YAAY,OAAO,KAAK,aAAa,YAAY,KAAK;IACxD;IACA,MAAM,UAAU,kBAAkB,aAAa,QAAQ,OAAO;IAC9D,MAAM,QAAQ,aAAa,QAAQ;IACnC,MAAM,QACJ,UAAU,YAAY,OAAO,OAAO,CAAC,CAAa,IAAI,kBAAkB,aAAa,QAAQ,OAAO,MAAM;IAC5G,MAAM,SACJ,UAAU,YAAY,OAAO,OAAO,CAAC,CAAa,IAAI,kBAAkB,aAAa,QAAQ,QAAQ,OAAO;IAC9G,IACG,UAAU,aAAa,UAAU,gBACjC,UAAU,cAAc,aAAa,QAAQ,MAAM,WAAW,KAAK,aAAa,QAAQ,OAAO,WAAW,IAE3G,MAAM,IAAI,qBAAqB,mBAAmB,8CAA8C;IAElG,QAAQ,IAAI,OAAO,UAAU,MAAM;IACnC,SAAS,IACP,OAAO,UACP,OAAO,OAAO;KACZ,UAAU,OAAO;KACjB,WAAW,YAAY,aAAa,QAAQ,WAAW,YAAY;KACnE;KACA,UAAU,gBAAgB,aAAa,QAAQ,UAAU,YAAY,KAAK;KAC1E;KACA;KACA;KACA;IACF,CAAC,CACH;IACA,OAAO;GACT,QAAQ;IACN,QAAQ,OAAO,aAAa,OAAO,QAAQ;IAC3C,OAAO;GACT;EACF;EACA,uBAAuB,OAAO;GAC5B,MAAM,SAAS,QAAQ,IAAI,MAAM,QAAQ;GACzC,IAAI,WAAW,KAAA,GAAW,MAAM,IAAI,qBAAqB,kBAAkB,uBAAuB;GAClG,MAAM,UAAU,SAAS,IAAI,MAAM,QAAQ;GAC3C,IAAI,YAAY,KAAA,GACd,MAAM,IAAI,qBAAqB,mBAAmB,kDAAkD;GAEtG,IAAI,OAAO,4BAA4B,sBACrC,MAAM,IAAI,qBAAqB,kBAAkB,mDAAmD;GAEtG,IAAI,MAAM,gBAAgB,OAAO,aAC/B,MAAM,IAAI,qBACR,mBACA,8DACF;GAEF,IAAI,MAAM,wBAAwB,UAAU,CAAC,uBAAuB,KAAK,MAAM,aAAa,GAC1F,MAAM,IAAI,qBAAqB,mBAAmB,0CAA0C;GAE9F,gBAAgB,CAAC;GACjB,MAAM,WAAW,IAAI;GACrB,MAAM,QAAyB,OAAO,OAAO;IAC3C,IAAI,OAAO,cAAc;IACzB,GAAG;IACH,WAAW;GACb,CAAC;GACD,MAAM,OAAO,OAAO;GACpB,MAAM,YAAY,WAAW;GAC7B,OAAO,IAAI,MAAM,IAAI,KAAK;GAC1B,MAAM,IAAI,SAAS,IAAI,GAAG;IACxB,UAAU,OAAO;IACjB,aAAa,OAAO;IACpB,WAAW,MAAM;IACjB;IACA;GACF,CAAC;GACD,OAAO;IAAE;IAAM;IAAO;GAAU;EAClC;EACA,cAAc,SAAS;GAErB,IADe,mBAAmB,QAAQ,UAAU,QAAQ,YACnD,CAAC,CAAC,4BAA4B,sBACrC,MAAM,IAAI,qBAAqB,kBAAkB,4CAA4C;GAE/F,MAAM;GACN,IAAI,QAAQ,cAAc,sBAAsB;IAC9C,MAAM,UAAU,SAAS,QAAQ,IAAI;IACrC,MAAM,SAAS,MAAM,IAAI,OAAO;IAChC,IACE,WAAW,KAAA,KACX,OAAO,aAAa,IAAI,KACxB,OAAO,aAAa,QAAQ,YAC5B,OAAO,gBAAgB,QAAQ,eAC/B,CAAC,8BAA8B,KAAK,QAAQ,YAAY,KACxD,WAAW,QAAQ,CAAC,CAAC,OAAO,QAAQ,YAAY,CAAC,CAAC,OAAO,WAAW,MAAM,OAAO,aACjF,CAAC,OAAO,IAAI,OAAO,MAAM,EAAE,GAC3B;KACA,MAAM,OAAO,OAAO;KACpB,IAAI,WAAW,KAAA,GAAW,YAAY,OAAO,MAAM,EAAE;KACrD,MAAM,IAAI,qBAAqB,iBAAiB,2CAA2C;IAC7F;IACA,gBAAgB,CAAC;IACjB,MAAM,OAAO,OAAO;IACpB,OAAO,WAAW,OAAO,KAAK;GAChC;GACA,IAAI,QAAQ,cAAc,iBAAiB;IACzC,MAAM,aAAa,SAAS,QAAQ,YAAY;IAChD,MAAM,WAAW,sBAAsB,IAAI,UAAU;IACrD,IAAI,aAAa,KAAA,GAAW;KAC1B,IAAI,SAAS,aAAa,QAAQ,YAAY,SAAS,YAAY,IAAI,GACrE,aAAa,SAAS,UAAU,SAAS,OAAO;KAElD,MAAM,IAAI,qBAAqB,iBAAiB,sCAAsC;IACxF;IACA,MAAM,SAAS,cAAc,IAAI,UAAU;IAC3C,IACE,WAAW,KAAA,KACX,OAAO,aAAa,IAAI,KACxB,OAAO,MAAM,aAAa,QAAQ,YAClC,CAAC,OAAO,IAAI,OAAO,MAAM,EAAE,GAC3B;KACA,cAAc,OAAO,UAAU;KAC/B,MAAM,IAAI,qBAAqB,iBAAiB,sCAAsC;IACxF;IACA,gBAAgB,CAAC;IACjB,cAAc,OAAO,UAAU;IAC/B,sBAAsB,IAAI,YAAY;KACpC,UAAU,OAAO,MAAM;KACvB,SAAS,OAAO,MAAM;KACtB,UAAU,OAAO;KACjB,WAAW,OAAO;IACpB,CAAC;IACD,OAAO,WAAW,OAAO,OAAO,OAAO,UAAU,OAAO,eAAe;GACzE;GACA,MAAM,IAAI,qBACR,0BACA,0DACF;EACF;EACA,cAAc,UAAU;GACtB,MAAM,SAAS,QAAQ,IAAI,QAAQ;GACnC,IAAI,WAAW,KAAA,KAAa,OAAO,4BAA4B,aAC7D,MAAM,IAAI,qBAAqB,kBAAkB,+CAA+C;GAElG,MAAM,UAAU,SAAS,IAAI,QAAQ;GACrC,IAAI,YAAY,KAAA,GACd,MAAM,IAAI,qBAAqB,mBAAmB,kDAAkD;GAEtG,MAAM,UAAU,OAAO,KACrB,KAAK,UAAU;IACb,KAAK,QAAQ;IACb,KAAK,KAAK,MAAM,OAAO,YAAY,GAAI;IACvC,KAAK;IACL,KAAK,QAAQ;IACb,KAAK,OAAO;GACd,CAAoC,CACtC,CAAC,CAAC,SAAS,WAAW;GACtB,MAAM,QAAQ,GAAG,iBAAiB,GAAG;GACrC,OAAO,GAAG,MAAM,GAAG,kBAAkB,OAAO,OAAO,UAAU,CAAC,CAAC,SAAS,WAAW;EACrF;EACA,qBAAqB,OAAO,UAAU;GACpC,MAAM,SAAS,cAAc,KAAK;GAClC,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;GACjC,MAAM,SAAS,QAAQ,IAAI,OAAO,OAAO,GAAG;GAC5C,IAAI,WAAW,KAAA,KAAa,OAAO,4BAA4B,aAAa,OAAO,KAAA;GACnF,MAAM,UAAU,SAAS,IAAI,OAAO,QAAQ;GAC5C,IACE,YAAY,KAAA,KACZ,QAAQ,aAAa,YACrB,OAAO,OAAO,QAAQ,YACtB,OAAO,OAAO,QAAQ,QAAQ,aAC9B,OAAO,OAAO,QAAQ,KAAK,MAAM,OAAO,YAAY,GAAI,GAExD,OAAO,KAAA;GACT,MAAM,WAAW,kBAAkB,OAAO,OAAO,OAAO,UAAU;GAClE,IAAI,CAAC,gBAAgB,UAAU,OAAO,SAAS,GAAG,OAAO,KAAA;GACzD,OAAO;IAAE,IAAI,OAAO;IAAU,GAAG;IAAS,WAAW,OAAO;IAAW,WAAW,OAAO;GAAiB;EAC5G;EACA,wBAAwB,OAAO,UAAU;GACvC,MAAM;GACN,MAAM,MAAM,SAAS,KAAK;GAE1B,MAAM,gBAAgB,OAAO,KAAK;GAClC,KAAK,MAAM,UAAU,QAAQ,OAAO,GAAG;IACrC,IAAI,OAAO,4BAA4B,aAAa,CAAC,gBAAgB,eAAe,OAAO,UAAU,GACnG;IACF,MAAM,UAAU,SAAS,IAAI,OAAO,QAAQ;IAC5C,IAAI,YAAY,KAAA,KAAa,QAAQ,aAAa,UAAU,OAAO,KAAA;IACnE,OAAO;KAAE,IAAI,OAAO;KAAU,GAAG;KAAS,WAAW,OAAO;KAAW,WAAW,OAAO;IAAiB;GAC5G;GACA,MAAM,SAAS,aAAa,IAAI,GAAG;GACnC,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;GACjC,IAAI,OAAO,aAAa,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,MAAM,EAAE,GAAG;IAC7D,aAAa,OAAO,GAAG;IACvB;GACF;GACA,IAAI,OAAO,MAAM,aAAa,UAAU,OAAO,KAAA;GAC/C,OAAO;IAAE,GAAG,OAAO;IAAO,WAAW,OAAO;GAAU;EACxD;EACA;EACA,wBAAwB,WAAW,mBAAmB;GACpD,IAAI,UAAU;GACd,KAAK,MAAM,SAAS,OAAO,OAAO,GAChC,IAAI,MAAM,cAAc,aAAa,MAAM,sBAAsB,qBAAqB,YAAY,MAAM,EAAE,GACxG,WAAW;GAGf,KAAK,MAAM,CAAC,UAAU,YAAY,UAChC,IAAI,QAAQ,cAAc,aAAa,QAAQ,sBAAsB,mBACnE,SAAS,OAAO,QAAQ;GAE5B,OAAO;EACT;EACA,cAAc,WAAW;GACvB,IAAI,UAAU;GACd,KAAK,MAAM,SAAS,OAAO,OAAO,GAChC,IAAI,MAAM,cAAc,aAAa,YAAY,MAAM,EAAE,GAAG,WAAW;GAEzE,KAAK,MAAM,CAAC,UAAU,YAAY,UAAU,IAAI,QAAQ,cAAc,WAAW,SAAS,OAAO,QAAQ;GACzG,OAAO;EACT;CACF;AACF"}
|