@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,396 @@
|
|
|
1
|
+
import { COOKIE_CEILING_SECONDS, PAIRING_PAGE_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_STATE_TYPE } from "../../constants/remote.mjs";
|
|
2
|
+
import { cookieMaxAgeSeconds } from "../deviceSessions/index.mjs";
|
|
3
|
+
import { createDeviceAuth } from "../deviceAuth/index.mjs";
|
|
4
|
+
import { createPairingFlow } from "../pairingFlow/index.mjs";
|
|
5
|
+
import { parseRemoteAccessSettings, serializeRemoteAccessSettings } from "../remoteAccessSettings/index.mjs";
|
|
6
|
+
import { tunnelOriginPolicy } from "../remoteGuardPolicy/index.mjs";
|
|
7
|
+
import { createWebAuthn } from "../webauthn/index.mjs";
|
|
8
|
+
import { createHash, randomBytes, randomInt } from "node:crypto";
|
|
9
|
+
import { createHostHandshake } from "@agimon-ai/doompi-web-security/node";
|
|
10
|
+
import { SEALED_KEY_PARAM } from "@agimon-ai/doompi-web-security";
|
|
11
|
+
//#region src/services/remoteAccess/index.ts
|
|
12
|
+
const TOKEN_BYTES = 32;
|
|
13
|
+
const SWEEP_INTERVAL_MS = 3e5;
|
|
14
|
+
const MS_PER_MINUTE = 6e4;
|
|
15
|
+
function bundlePairingTrust(value) {
|
|
16
|
+
if (value === void 0) return void 0;
|
|
17
|
+
return {
|
|
18
|
+
...value,
|
|
19
|
+
fingerprint: createHash("sha256").update(Buffer.from(value.publicKey, "base64url")).digest("hex")
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function createRemoteAccess(options) {
|
|
23
|
+
const notice = options.onNotice ?? (() => {});
|
|
24
|
+
const now = options.now ?? (() => Date.now());
|
|
25
|
+
const broadcastLocal = options.broadcastLocal ?? (() => {});
|
|
26
|
+
const broadcastAll = options.broadcastAll ?? (() => {});
|
|
27
|
+
let settings = options.store.settings();
|
|
28
|
+
let status = "off";
|
|
29
|
+
let listener;
|
|
30
|
+
let stopTunnel;
|
|
31
|
+
let tunnelStartup;
|
|
32
|
+
let publicOrigin;
|
|
33
|
+
let publicOriginRevision = 0;
|
|
34
|
+
let policy;
|
|
35
|
+
let startedAt;
|
|
36
|
+
let closesAt;
|
|
37
|
+
let failure;
|
|
38
|
+
/** Settings an `enable` asked to hand over with, waiting for its response to flush. */
|
|
39
|
+
let pendingHandover;
|
|
40
|
+
let autoCloseTimer;
|
|
41
|
+
/** One handshake per tunnel; its public half goes in every QR while the tunnel lives. */
|
|
42
|
+
let handshake;
|
|
43
|
+
const channels = /* @__PURE__ */ new Map();
|
|
44
|
+
const sockets = /* @__PURE__ */ new Map();
|
|
45
|
+
const channelKey = (deviceId, scope) => `${deviceId}:${scope}`;
|
|
46
|
+
const dropDeviceAccess = (deviceId, reason) => {
|
|
47
|
+
options.onDeviceDropped?.(deviceId);
|
|
48
|
+
for (const scope of [
|
|
49
|
+
"session",
|
|
50
|
+
"protocol",
|
|
51
|
+
"http"
|
|
52
|
+
]) channels.delete(channelKey(deviceId, scope));
|
|
53
|
+
const held = sockets.get(deviceId);
|
|
54
|
+
sockets.delete(deviceId);
|
|
55
|
+
for (const close of held ?? []) try {
|
|
56
|
+
close(1008, `device ${reason}`);
|
|
57
|
+
} catch {}
|
|
58
|
+
};
|
|
59
|
+
const devices = createDeviceAuth({
|
|
60
|
+
settings: () => settings,
|
|
61
|
+
now,
|
|
62
|
+
onNotice: notice,
|
|
63
|
+
onDrop: (record, reason) => dropDeviceAccess(record.id, reason)
|
|
64
|
+
});
|
|
65
|
+
const webauthn = createWebAuthn({
|
|
66
|
+
publicOrigin: () => publicOrigin,
|
|
67
|
+
credentials: () => options.store.credentials(),
|
|
68
|
+
saveCredential: (credential) => options.store.saveCredential(credential),
|
|
69
|
+
removeCredential: (id) => options.store.removeCredential(id),
|
|
70
|
+
now,
|
|
71
|
+
onNotice: notice
|
|
72
|
+
});
|
|
73
|
+
const pairing = createPairingFlow({
|
|
74
|
+
randomToken: () => randomBytes(TOKEN_BYTES).toString("base64url"),
|
|
75
|
+
randomManualCode: () => randomInt(1e8).toString().padStart(8, "0"),
|
|
76
|
+
digest: (token) => createHash("sha256").update(token).digest("hex"),
|
|
77
|
+
now,
|
|
78
|
+
onNotice: notice
|
|
79
|
+
});
|
|
80
|
+
const sweeper = setInterval(() => {
|
|
81
|
+
devices.sweep();
|
|
82
|
+
pairing.sweep();
|
|
83
|
+
}, SWEEP_INTERVAL_MS);
|
|
84
|
+
sweeper.unref();
|
|
85
|
+
function publish() {
|
|
86
|
+
broadcastAll({
|
|
87
|
+
type: REMOTE_STATE_TYPE,
|
|
88
|
+
state: view(void 0, false)
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function view(selfDeviceId, forLocalCaller) {
|
|
92
|
+
return {
|
|
93
|
+
status,
|
|
94
|
+
...publicOrigin === void 0 ? {} : { publicUrl: publicOrigin },
|
|
95
|
+
...startedAt === void 0 ? {} : { startedAt: new Date(startedAt).toISOString() },
|
|
96
|
+
...closesAt === void 0 ? {} : { closesAt: new Date(closesAt).toISOString() },
|
|
97
|
+
...failure === void 0 ? {} : { error: failure },
|
|
98
|
+
devices: devices.list().map((record) => ({
|
|
99
|
+
id: record.id,
|
|
100
|
+
label: record.label,
|
|
101
|
+
userAgent: record.userAgent,
|
|
102
|
+
createdAt: new Date(record.createdAt).toISOString(),
|
|
103
|
+
lastSeenAt: new Date(record.lastSeenAt).toISOString(),
|
|
104
|
+
self: record.id === selfDeviceId
|
|
105
|
+
})),
|
|
106
|
+
pending: forLocalCaller ? pairing.pending().map((request) => ({
|
|
107
|
+
id: request.id,
|
|
108
|
+
userAgent: request.userAgent,
|
|
109
|
+
edgeIp: request.edgeIp,
|
|
110
|
+
createdAt: new Date(request.createdAt).toISOString(),
|
|
111
|
+
expiresAt: new Date(request.createdAt + 18e4).toISOString()
|
|
112
|
+
})) : [],
|
|
113
|
+
settings
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function armAutoClose() {
|
|
117
|
+
clearTimeout(autoCloseTimer);
|
|
118
|
+
autoCloseTimer = void 0;
|
|
119
|
+
closesAt = void 0;
|
|
120
|
+
if (!settings.autoCloseEnabled || status !== "on") return;
|
|
121
|
+
closesAt = now() + settings.autoCloseMinutes * MS_PER_MINUTE;
|
|
122
|
+
autoCloseTimer = setTimeout(() => {
|
|
123
|
+
notice("remote access reached its time limit; closing");
|
|
124
|
+
disable();
|
|
125
|
+
}, settings.autoCloseMinutes * MS_PER_MINUTE);
|
|
126
|
+
autoCloseTimer.unref();
|
|
127
|
+
}
|
|
128
|
+
/** Everything teardown has to do, in the order it has to happen. */
|
|
129
|
+
async function teardown() {
|
|
130
|
+
clearTimeout(autoCloseTimer);
|
|
131
|
+
autoCloseTimer = void 0;
|
|
132
|
+
closesAt = void 0;
|
|
133
|
+
for (const held of sockets.values()) for (const close of held) try {
|
|
134
|
+
close(1008, "remote access revoked");
|
|
135
|
+
} catch {}
|
|
136
|
+
sockets.clear();
|
|
137
|
+
const starting = tunnelStartup;
|
|
138
|
+
tunnelStartup = void 0;
|
|
139
|
+
starting?.controller.abort();
|
|
140
|
+
const startingOutcome = await starting?.outcome.catch(() => void 0);
|
|
141
|
+
if (startingOutcome?.ok === true) await startingOutcome.stop().catch(() => void 0);
|
|
142
|
+
await stopTunnel?.().catch(() => void 0);
|
|
143
|
+
stopTunnel = void 0;
|
|
144
|
+
await listener?.close().catch(() => void 0);
|
|
145
|
+
listener = void 0;
|
|
146
|
+
if (publicOrigin !== void 0) publicOriginRevision += 1;
|
|
147
|
+
publicOrigin = void 0;
|
|
148
|
+
policy = void 0;
|
|
149
|
+
startedAt = void 0;
|
|
150
|
+
pairing.clear();
|
|
151
|
+
webauthn.clearChallenges();
|
|
152
|
+
handshake = void 0;
|
|
153
|
+
channels.clear();
|
|
154
|
+
devices.revokeAll();
|
|
155
|
+
}
|
|
156
|
+
async function disable() {
|
|
157
|
+
if (status === "off") return;
|
|
158
|
+
await teardown();
|
|
159
|
+
status = "off";
|
|
160
|
+
failure = void 0;
|
|
161
|
+
notice("remote access off");
|
|
162
|
+
publish();
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
state: (selfDeviceId, forLocalCaller = false) => view(selfDeviceId, forLocalCaller),
|
|
166
|
+
settings: () => settings,
|
|
167
|
+
publicOrigin: () => publicOrigin,
|
|
168
|
+
publicOriginRevision: () => publicOriginRevision,
|
|
169
|
+
updateSettings(patch) {
|
|
170
|
+
const parsed = parseRemoteAccessSettings(serializeRemoteAccessSettings({
|
|
171
|
+
...settings,
|
|
172
|
+
...patch
|
|
173
|
+
}));
|
|
174
|
+
for (const warning of parsed.warnings) notice(`remote access settings: ${warning}`);
|
|
175
|
+
settings = parsed.settings;
|
|
176
|
+
options.store.save(settings);
|
|
177
|
+
devices.reschedule();
|
|
178
|
+
armAutoClose();
|
|
179
|
+
publish();
|
|
180
|
+
return settings;
|
|
181
|
+
},
|
|
182
|
+
/**
|
|
183
|
+
* Runs a handover `enable` deferred, once its response is on the wire.
|
|
184
|
+
*
|
|
185
|
+
* Split out rather than done inside `enable` because the reply and the
|
|
186
|
+
* teardown travel over the same socket, and doing them in the wrong order
|
|
187
|
+
* leaves the caller unable to tell success from a dropped connection.
|
|
188
|
+
*/
|
|
189
|
+
commitHandover() {
|
|
190
|
+
const handing = pendingHandover;
|
|
191
|
+
if (handing === void 0) return;
|
|
192
|
+
pendingHandover = void 0;
|
|
193
|
+
notice("handing the cockpit over to a container");
|
|
194
|
+
options.requestHandover?.(handing);
|
|
195
|
+
},
|
|
196
|
+
/** True between a contained `enable` and the handover its response defers. */
|
|
197
|
+
handoverPending: () => pendingHandover !== void 0,
|
|
198
|
+
tunnelPort: () => listener?.port,
|
|
199
|
+
tunnelPolicy: () => policy,
|
|
200
|
+
async enable() {
|
|
201
|
+
if (status === "on" || status === "starting") return { ok: true };
|
|
202
|
+
status = "starting";
|
|
203
|
+
failure = void 0;
|
|
204
|
+
publish();
|
|
205
|
+
if (settings.sandbox.enabled && options.contained !== true) {
|
|
206
|
+
if (settings.sandbox.workspaces.length === 0) {
|
|
207
|
+
status = "failed";
|
|
208
|
+
failure = "Add at least one workspace before running the cockpit in a container.";
|
|
209
|
+
publish();
|
|
210
|
+
return {
|
|
211
|
+
ok: false,
|
|
212
|
+
error: failure
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
if (options.requestHandover === void 0) {
|
|
216
|
+
status = "failed";
|
|
217
|
+
failure = "This cockpit cannot hand over to a container.";
|
|
218
|
+
publish();
|
|
219
|
+
return {
|
|
220
|
+
ok: false,
|
|
221
|
+
error: failure
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
pendingHandover = settings;
|
|
225
|
+
return { ok: true };
|
|
226
|
+
}
|
|
227
|
+
let bound;
|
|
228
|
+
try {
|
|
229
|
+
bound = await options.bindListener();
|
|
230
|
+
} catch (error) {
|
|
231
|
+
status = "failed";
|
|
232
|
+
failure = `The tunnel listener could not bind: ${error instanceof Error ? error.message : String(error)}`;
|
|
233
|
+
publish();
|
|
234
|
+
return {
|
|
235
|
+
ok: false,
|
|
236
|
+
error: failure
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
listener = bound;
|
|
240
|
+
const controller = new AbortController();
|
|
241
|
+
const launching = options.launchTunnel({
|
|
242
|
+
port: bound.port,
|
|
243
|
+
config: settings.tunnel,
|
|
244
|
+
signal: controller.signal,
|
|
245
|
+
acceptOrigin: (origin) => {
|
|
246
|
+
policy = tunnelOriginPolicy(origin);
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
const startup = {
|
|
250
|
+
controller,
|
|
251
|
+
outcome: launching
|
|
252
|
+
};
|
|
253
|
+
tunnelStartup = startup;
|
|
254
|
+
const outcome = await launching;
|
|
255
|
+
if (tunnelStartup !== startup || controller.signal.aborted) return {
|
|
256
|
+
ok: false,
|
|
257
|
+
error: "Tunnel startup was cancelled."
|
|
258
|
+
};
|
|
259
|
+
tunnelStartup = void 0;
|
|
260
|
+
if (!outcome.ok) {
|
|
261
|
+
await teardown();
|
|
262
|
+
status = "failed";
|
|
263
|
+
failure = outcome.message;
|
|
264
|
+
notice(`remote access failed: ${outcome.message}`);
|
|
265
|
+
publish();
|
|
266
|
+
return {
|
|
267
|
+
ok: false,
|
|
268
|
+
error: outcome.message
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
stopTunnel = outcome.stop;
|
|
272
|
+
handshake = createHostHandshake();
|
|
273
|
+
publicOrigin = outcome.publicOrigin;
|
|
274
|
+
policy = tunnelOriginPolicy(outcome.publicOrigin);
|
|
275
|
+
startedAt = now();
|
|
276
|
+
status = "on";
|
|
277
|
+
armAutoClose();
|
|
278
|
+
notice(`remote access on at ${outcome.publicOrigin}`);
|
|
279
|
+
publish();
|
|
280
|
+
return { ok: true };
|
|
281
|
+
},
|
|
282
|
+
disable,
|
|
283
|
+
mintPairing() {
|
|
284
|
+
if (status !== "on" || publicOrigin === void 0 || handshake === void 0) return void 0;
|
|
285
|
+
const trust = bundlePairingTrust(options.bundleTrust?.());
|
|
286
|
+
if (trust === void 0) return void 0;
|
|
287
|
+
const { code, manualCode, expiresAt } = pairing.mintCode();
|
|
288
|
+
const fragment = new URLSearchParams({
|
|
289
|
+
c: code,
|
|
290
|
+
[SEALED_KEY_PARAM]: handshake.publicKey,
|
|
291
|
+
["s"]: trust.publicKey,
|
|
292
|
+
["r"]: String(trust.revision)
|
|
293
|
+
});
|
|
294
|
+
return {
|
|
295
|
+
code,
|
|
296
|
+
manualCode,
|
|
297
|
+
pairUrl: `${publicOrigin}${PAIRING_PAGE_ROUTE}#${fragment.toString()}`,
|
|
298
|
+
expiresAt: new Date(expiresAt).toISOString(),
|
|
299
|
+
...trust
|
|
300
|
+
};
|
|
301
|
+
},
|
|
302
|
+
bundleTrust: () => bundlePairingTrust(options.bundleTrust?.()),
|
|
303
|
+
claim(input) {
|
|
304
|
+
const outcome = pairing.claim(input);
|
|
305
|
+
if (outcome.ok) broadcastLocal({
|
|
306
|
+
type: REMOTE_PAIRING_REQUEST_TYPE,
|
|
307
|
+
state: view(void 0, true)
|
|
308
|
+
});
|
|
309
|
+
return outcome;
|
|
310
|
+
},
|
|
311
|
+
pairingStatus: (requestId) => pairing.status(requestId),
|
|
312
|
+
approve(requestId) {
|
|
313
|
+
const outcome = pairing.approve(requestId);
|
|
314
|
+
if (outcome === "approved") broadcastLocal({
|
|
315
|
+
type: REMOTE_PAIRING_REQUEST_TYPE,
|
|
316
|
+
state: view(void 0, true)
|
|
317
|
+
});
|
|
318
|
+
return outcome;
|
|
319
|
+
},
|
|
320
|
+
deny(requestId) {
|
|
321
|
+
const outcome = pairing.deny(requestId);
|
|
322
|
+
if (outcome === "denied") broadcastLocal({
|
|
323
|
+
type: REMOTE_PAIRING_REQUEST_TYPE,
|
|
324
|
+
state: view(void 0, true)
|
|
325
|
+
});
|
|
326
|
+
return outcome;
|
|
327
|
+
},
|
|
328
|
+
redeem(requestId) {
|
|
329
|
+
const approved = pairing.consume(requestId);
|
|
330
|
+
if (approved === void 0) return void 0;
|
|
331
|
+
const enrolled = devices.enrol({ userAgent: approved.userAgent });
|
|
332
|
+
publish();
|
|
333
|
+
return {
|
|
334
|
+
...enrolled,
|
|
335
|
+
maxAgeSeconds: cookieMaxAgeSeconds(settings, COOKIE_CEILING_SECONDS)
|
|
336
|
+
};
|
|
337
|
+
},
|
|
338
|
+
authorize: (token) => devices.verify(token)?.id,
|
|
339
|
+
sessionForPasskey(label) {
|
|
340
|
+
const enrolled = devices.enrol({ userAgent: label });
|
|
341
|
+
publish();
|
|
342
|
+
return {
|
|
343
|
+
...enrolled,
|
|
344
|
+
maxAgeSeconds: cookieMaxAgeSeconds(settings, COOKIE_CEILING_SECONDS)
|
|
345
|
+
};
|
|
346
|
+
},
|
|
347
|
+
passkeys: () => ({
|
|
348
|
+
support: () => webauthn.support(),
|
|
349
|
+
list: () => options.store.credentials(),
|
|
350
|
+
beginRegistration: async (caller, label) => await webauthn.beginRegistration(caller, label),
|
|
351
|
+
finishRegistration: async (ceremonyId, caller, response, label) => await webauthn.finishRegistration(ceremonyId, caller, response, label),
|
|
352
|
+
beginAuthentication: async (caller) => await webauthn.beginAuthentication(caller),
|
|
353
|
+
finishAuthentication: async (ceremonyId, caller, response) => await webauthn.finishAuthentication(ceremonyId, caller, response),
|
|
354
|
+
beginStepUp: async (caller, action) => await webauthn.beginStepUp(caller, action),
|
|
355
|
+
finishStepUp: async (ceremonyId, caller, action, response) => await webauthn.finishStepUp(ceremonyId, caller, action, response),
|
|
356
|
+
forget: (id) => {
|
|
357
|
+
const forgotten = options.store.removeCredential(id);
|
|
358
|
+
if (forgotten) publish();
|
|
359
|
+
return forgotten;
|
|
360
|
+
}
|
|
361
|
+
}),
|
|
362
|
+
stepUpRequired: () => webauthn.support().supported,
|
|
363
|
+
channelPublicKey: () => handshake?.publicKey,
|
|
364
|
+
openChannel(deviceId, scope, clientPublicKey) {
|
|
365
|
+
const channel = handshake?.accept(clientPublicKey);
|
|
366
|
+
if (channel === void 0) return false;
|
|
367
|
+
channels.set(channelKey(deviceId, scope), channel);
|
|
368
|
+
return true;
|
|
369
|
+
},
|
|
370
|
+
channelFor: (deviceId, scope) => channels.get(channelKey(deviceId, scope)),
|
|
371
|
+
revokeDevice(id) {
|
|
372
|
+
const revoked = devices.revoke(id);
|
|
373
|
+
if (revoked) publish();
|
|
374
|
+
return revoked;
|
|
375
|
+
},
|
|
376
|
+
isDeviceConnected: (deviceId) => (sockets.get(deviceId)?.size ?? 0) > 0,
|
|
377
|
+
trackSocket(deviceId, close) {
|
|
378
|
+
const held = sockets.get(deviceId) ?? /* @__PURE__ */ new Set();
|
|
379
|
+
held.add(close);
|
|
380
|
+
sockets.set(deviceId, held);
|
|
381
|
+
return () => {
|
|
382
|
+
held.delete(close);
|
|
383
|
+
if (held.size === 0) sockets.delete(deviceId);
|
|
384
|
+
};
|
|
385
|
+
},
|
|
386
|
+
async close() {
|
|
387
|
+
clearInterval(sweeper);
|
|
388
|
+
await teardown();
|
|
389
|
+
status = "off";
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
//#endregion
|
|
394
|
+
export { createRemoteAccess };
|
|
395
|
+
|
|
396
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/remoteAccess/index.ts"],"sourcesContent":["import { createHash, randomBytes, randomInt } from 'node:crypto';\n\nimport { SEALED_KEY_PARAM } from '@agimon-ai/doompi-web-security';\nimport { createHostHandshake, type HostHandshake, type SealedChannel } from '@agimon-ai/doompi-web-security/node';\n\nimport {\n BUNDLE_MINIMUM_REVISION_PARAM,\n BUNDLE_SIGNING_KEY_PARAM,\n PAIRING_PAGE_ROUTE,\n REMOTE_PAIRING_REQUEST_TYPE,\n REMOTE_STATE_TYPE,\n} from '../../constants/remote';\nimport { COOKIE_CEILING_SECONDS } from '../../constants/remote';\nimport {\n type BundlePairingTrust,\n type PairingStatus,\n type RemoteAccessSettings,\n type RemoteAccessStateView,\n type RemoteAccessStatus,\n type RemoteChannelScope,\n type TunnelLauncher,\n type TunnelStartResult,\n} from '../../types/remote';\nimport { createDeviceAuth, type DeviceAuth, type EnrolledDevice } from '../deviceAuth';\nimport { cookieMaxAgeSeconds } from '../deviceSessions';\nimport { createPairingFlow, type PairingFlow } from '../pairingFlow';\nimport { parseRemoteAccessSettings, serializeRemoteAccessSettings } from '../remoteAccessSettings';\nimport type { RemoteAccessStore } from '../remoteAccessStore';\nimport { type OriginPolicy, tunnelOriginPolicy } from '../remoteGuardPolicy';\nimport { createWebAuthn, type PasskeySupport, type WebAuthn } from '../webauthn';\nimport type { StepUpAction, StoredCredential } from '../webauthnPolicy';\n\nconst TOKEN_BYTES = 32;\nconst SWEEP_INTERVAL_MS = 5 * 60_000;\nconst MS_PER_MINUTE = 60_000;\n\n/** The tunnel listener, bound by the host so this file never imports an HTTP server. */\nexport interface TunnelListener {\n port: number;\n close: () => Promise<void>;\n}\n\nexport interface RemoteAccessOptions {\n store: RemoteAccessStore;\n launchTunnel: TunnelLauncher;\n /** Binds a fresh loopback listener for the tunnel to point at. */\n bindListener: () => Promise<TunnelListener>;\n /** Current signed publication authenticated through the physical pairing display. */\n bundleTrust?: () => { publicKey: string; revision: number } | undefined;\n /** Removes ephemeral state owned by a paired device when its authorization ends. */\n onDeviceDropped?: (deviceId: string) => void;\n onNotice?: (message: string) => void;\n /** Frames only the local cockpit may see, such as an approval prompt. */\n broadcastLocal?: (frame: object) => void;\n /** Frames both local and remote pages see. */\n broadcastAll?: (frame: object) => void;\n /**\n * Asks the launcher to hand this cockpit over to a container.\n *\n * A signal rather than a call that does the work, because handing over means\n * closing the server this code is running inside, which it cannot do to\n * itself. The launcher owns that sequence and the rollback if it fails.\n */\n requestHandover?: (settings: RemoteAccessSettings) => void;\n /**\n * Whether this cockpit is already the one inside the container.\n *\n * Without it the contained hub would read the same settings it was handed and\n * try to hand over again, to a container inside a container.\n */\n contained?: boolean;\n now?: () => number;\n}\n\nexport interface RemoteAccess {\n state(selfDeviceId?: string, forLocalCaller?: boolean): RemoteAccessStateView;\n settings(): RemoteAccessSettings;\n updateSettings(patch: Partial<RemoteAccessSettings>): RemoteAccessSettings;\n tunnelPort(): number | undefined;\n /** The public origin the tunnel currently answers on, while one is up. */\n publicOrigin(): string | undefined;\n /** Changes whenever an established public exposure is torn down. */\n publicOriginRevision(): number;\n tunnelPolicy(): OriginPolicy | undefined;\n enable(): Promise<{ ok: true } | { ok: false; error: string }>;\n /** True between a contained `enable` and the handover its response defers. */\n handoverPending(): boolean;\n /** Runs that deferred handover, once the response asking for it is on the wire. */\n commitHandover(): void;\n disable(): Promise<void>;\n /** Mints the QR credential, separate manual code, and URL. Undefined while unavailable. */\n mintPairing():\n | ({ code: string; manualCode: string; pairUrl: string; expiresAt: string } & BundlePairingTrust)\n | undefined;\n bundleTrust(): BundlePairingTrust | undefined;\n claim(input: {\n code: string;\n userAgent: string | undefined;\n edgeIp: string | undefined;\n sourceAddress: string | undefined;\n }): ReturnType<PairingFlow['claim']>;\n pairingStatus(requestId: string): PairingStatus | undefined;\n approve(requestId: string): ReturnType<PairingFlow['approve']>;\n deny(requestId: string): ReturnType<PairingFlow['deny']>;\n /** Turns an approved request into a session, exactly once. */\n redeem(requestId: string): (EnrolledDevice & { maxAgeSeconds: number }) | undefined;\n authorize(token: string | undefined): string | undefined;\n /** Mints a session for a device that proved a registered passkey. */\n sessionForPasskey(label: string): EnrolledDevice & { maxAgeSeconds: number };\n passkeys(): {\n support: () => PasskeySupport;\n list: () => readonly StoredCredential[];\n beginRegistration: WebAuthn['beginRegistration'];\n finishRegistration: WebAuthn['finishRegistration'];\n beginAuthentication: WebAuthn['beginAuthentication'];\n finishAuthentication: WebAuthn['finishAuthentication'];\n beginStepUp: WebAuthn['beginStepUp'];\n finishStepUp: WebAuthn['finishStepUp'];\n forget: (id: string) => boolean;\n };\n /** Whether this action needs a fresh gesture that has not been supplied. */\n stepUpRequired(action: StepUpAction): boolean;\n /** The host's ephemeral public key for this tunnel, delivered after QR pairing or passkey sign-in. */\n channelPublicKey(): string | undefined;\n /** Completes one purpose-bound sealed channel against a fresh device key. */\n openChannel(deviceId: string, scope: RemoteChannelScope, clientPublicKey: string): boolean;\n channelFor(deviceId: string, scope: RemoteChannelScope): SealedChannel | undefined;\n revokeDevice(id: string): boolean;\n isDeviceConnected(deviceId: string): boolean;\n /** Registers a remote socket against its device so revocation closes it immediately. */\n trackSocket(deviceId: string, close: (code: number, reason: string) => void): () => void;\n close(): Promise<void>;\n}\n\nfunction bundlePairingTrust(\n value: { publicKey: string; revision: number } | undefined,\n): BundlePairingTrust | undefined {\n if (value === undefined) return undefined;\n return {\n ...value,\n fingerprint: createHash('sha256').update(Buffer.from(value.publicKey, 'base64url')).digest('hex'),\n };\n}\n\nexport function createRemoteAccess(options: RemoteAccessOptions): RemoteAccess {\n const notice = options.onNotice ?? ((): void => {});\n const now = options.now ?? ((): number => Date.now());\n const broadcastLocal = options.broadcastLocal ?? ((): void => {});\n const broadcastAll = options.broadcastAll ?? ((): void => {});\n\n let settings = options.store.settings();\n let status: RemoteAccessStatus = 'off';\n let listener: TunnelListener | undefined;\n let stopTunnel: (() => Promise<void>) | undefined;\n let tunnelStartup: { controller: AbortController; outcome: Promise<TunnelStartResult> } | undefined;\n let publicOrigin: string | undefined;\n let publicOriginRevision = 0;\n let policy: OriginPolicy | undefined;\n let startedAt: number | undefined;\n let closesAt: number | undefined;\n let failure: string | undefined;\n /** Settings an `enable` asked to hand over with, waiting for its response to flush. */\n let pendingHandover: RemoteAccessSettings | undefined;\n let autoCloseTimer: ReturnType<typeof setTimeout> | undefined;\n /** One handshake per tunnel; its public half goes in every QR while the tunnel lives. */\n let handshake: HostHandshake | undefined;\n const channels = new Map<string, SealedChannel>();\n const sockets = new Map<string, Set<(code: number, reason: string) => void>>();\n\n const channelKey = (deviceId: string, scope: RemoteChannelScope): string => `${deviceId}:${scope}`;\n const dropDeviceAccess = (deviceId: string, reason: 'revoked' | 'expired'): void => {\n options.onDeviceDropped?.(deviceId);\n for (const scope of ['session', 'protocol', 'http'] as const) channels.delete(channelKey(deviceId, scope));\n const held = sockets.get(deviceId);\n sockets.delete(deviceId);\n for (const close of held ?? []) {\n try {\n close(1008, `device ${reason}`);\n } catch {\n // The socket is already gone.\n }\n }\n };\n\n const devices: DeviceAuth = createDeviceAuth({\n settings: () => settings,\n now,\n onNotice: notice,\n onDrop: (record, reason) => dropDeviceAccess(record.id, reason),\n });\n\n const webauthn: WebAuthn = createWebAuthn({\n publicOrigin: () => publicOrigin,\n credentials: () => options.store.credentials(),\n saveCredential: (credential) => options.store.saveCredential(credential),\n removeCredential: (id) => options.store.removeCredential(id),\n now,\n onNotice: notice,\n });\n\n const pairing: PairingFlow = createPairingFlow({\n randomToken: () => randomBytes(TOKEN_BYTES).toString('base64url'),\n randomManualCode: () => randomInt(100_000_000).toString().padStart(8, '0'),\n digest: (token) => createHash('sha256').update(token).digest('hex'),\n now,\n onNotice: notice,\n });\n\n const sweeper = setInterval(() => {\n devices.sweep();\n pairing.sweep();\n }, SWEEP_INTERVAL_MS);\n sweeper.unref();\n\n function publish(): void {\n broadcastAll({ type: REMOTE_STATE_TYPE, state: view(undefined, false) });\n }\n\n function view(selfDeviceId: string | undefined, forLocalCaller: boolean): RemoteAccessStateView {\n return {\n status,\n ...(publicOrigin === undefined ? {} : { publicUrl: publicOrigin }),\n ...(startedAt === undefined ? {} : { startedAt: new Date(startedAt).toISOString() }),\n ...(closesAt === undefined ? {} : { closesAt: new Date(closesAt).toISOString() }),\n ...(failure === undefined ? {} : { error: failure }),\n devices: devices.list().map((record) => ({\n id: record.id,\n label: record.label,\n userAgent: record.userAgent,\n createdAt: new Date(record.createdAt).toISOString(),\n lastSeenAt: new Date(record.lastSeenAt).toISOString(),\n self: record.id === selfDeviceId,\n })),\n // A paired phone must never see the approval queue: a device that can\n // approve devices makes its own access permanent, which is exactly what\n // host confirmation exists to prevent.\n pending: forLocalCaller\n ? pairing.pending().map((request) => ({\n id: request.id,\n userAgent: request.userAgent,\n edgeIp: request.edgeIp,\n createdAt: new Date(request.createdAt).toISOString(),\n expiresAt: new Date(request.createdAt + 180_000).toISOString(),\n }))\n : [],\n settings,\n };\n }\n\n function armAutoClose(): void {\n clearTimeout(autoCloseTimer);\n autoCloseTimer = undefined;\n closesAt = undefined;\n if (!settings.autoCloseEnabled || status !== 'on') return;\n const at = now() + settings.autoCloseMinutes * MS_PER_MINUTE;\n closesAt = at;\n autoCloseTimer = setTimeout(() => {\n notice('remote access reached its time limit; closing');\n void disable();\n }, settings.autoCloseMinutes * MS_PER_MINUTE);\n autoCloseTimer.unref();\n }\n\n /** Everything teardown has to do, in the order it has to happen. */\n async function teardown(): Promise<void> {\n clearTimeout(autoCloseTimer);\n autoCloseTimer = undefined;\n closesAt = undefined;\n // Sockets first. An upgraded socket has left the HTTP server's connection\n // tracking, so closing the listener does not touch it: without this a\n // paired phone keeps driving the agent after remote access is switched off.\n for (const held of sockets.values()) {\n for (const close of held) {\n try {\n close(1008, 'remote access revoked');\n } catch {\n // The socket is already gone, which is the outcome we wanted.\n }\n }\n }\n sockets.clear();\n const starting = tunnelStartup;\n tunnelStartup = undefined;\n starting?.controller.abort();\n const startingOutcome = await starting?.outcome.catch(() => undefined);\n if (startingOutcome?.ok === true) await startingOutcome.stop().catch(() => undefined);\n await stopTunnel?.().catch(() => undefined);\n stopTunnel = undefined;\n await listener?.close().catch(() => undefined);\n listener = undefined;\n if (publicOrigin !== undefined) publicOriginRevision += 1;\n publicOrigin = undefined;\n policy = undefined;\n startedAt = undefined;\n pairing.clear();\n webauthn.clearChallenges();\n handshake = undefined;\n channels.clear();\n // Sessions go; passkeys and any other durable credential do not, so\n // switching back on does not mean enrolling every device again.\n devices.revokeAll();\n }\n\n async function disable(): Promise<void> {\n if (status === 'off') return;\n await teardown();\n status = 'off';\n failure = undefined;\n notice('remote access off');\n publish();\n }\n\n return {\n state: (selfDeviceId, forLocalCaller = false) => view(selfDeviceId, forLocalCaller),\n settings: () => settings,\n publicOrigin: () => publicOrigin,\n publicOriginRevision: () => publicOriginRevision,\n\n updateSettings(patch) {\n // Through the parser rather than spread straight in, so a value out of\n // range is clamped now instead of silently differing until the next load.\n const parsed = parseRemoteAccessSettings(\n serializeRemoteAccessSettings({ ...settings, ...patch }) as Record<string, unknown>,\n );\n for (const warning of parsed.warnings) notice(`remote access settings: ${warning}`);\n settings = parsed.settings;\n options.store.save(settings);\n // Re-arm rather than leave the old deadline: shortening the window has to\n // take effect now, and lengthening it should not close early.\n devices.reschedule();\n armAutoClose();\n publish();\n return settings;\n },\n\n /**\n * Runs a handover `enable` deferred, once its response is on the wire.\n *\n * Split out rather than done inside `enable` because the reply and the\n * teardown travel over the same socket, and doing them in the wrong order\n * leaves the caller unable to tell success from a dropped connection.\n */\n commitHandover() {\n const handing = pendingHandover;\n if (handing === undefined) return;\n pendingHandover = undefined;\n notice('handing the cockpit over to a container');\n options.requestHandover?.(handing);\n },\n\n /** True between a contained `enable` and the handover its response defers. */\n handoverPending: () => pendingHandover !== undefined,\n\n tunnelPort: () => listener?.port,\n tunnelPolicy: () => policy,\n\n async enable() {\n if (status === 'on' || status === 'starting') return { ok: true };\n status = 'starting';\n failure = undefined;\n publish();\n\n // Containment has to be in place before the tunnel is, so a contained\n // cockpit hands over instead of starting a tunnel here. The container's\n // own hub turns remote access on once it is serving.\n if (settings.sandbox.enabled && options.contained !== true) {\n if (settings.sandbox.workspaces.length === 0) {\n status = 'failed';\n failure = 'Add at least one workspace before running the cockpit in a container.';\n publish();\n return { ok: false, error: failure };\n }\n if (options.requestHandover === undefined) {\n status = 'failed';\n failure = 'This cockpit cannot hand over to a container.';\n publish();\n return { ok: false, error: failure };\n }\n // Held rather than run: the handover closes the server carrying this\n // very response, so the caller has to hear the answer first.\n pendingHandover = settings;\n return { ok: true };\n }\n let bound: TunnelListener;\n try {\n bound = await options.bindListener();\n } catch (error) {\n status = 'failed';\n failure = `The tunnel listener could not bind: ${error instanceof Error ? error.message : String(error)}`;\n publish();\n return { ok: false, error: failure };\n }\n listener = bound;\n const controller = new AbortController();\n const launching = options.launchTunnel({\n port: bound.port,\n config: settings.tunnel,\n signal: controller.signal,\n acceptOrigin: (origin) => {\n policy = tunnelOriginPolicy(origin);\n },\n });\n const startup = { controller, outcome: launching };\n tunnelStartup = startup;\n const outcome = await launching;\n if (tunnelStartup !== startup || controller.signal.aborted) {\n return { ok: false, error: 'Tunnel startup was cancelled.' };\n }\n tunnelStartup = undefined;\n if (!outcome.ok) {\n await teardown();\n status = 'failed';\n failure = outcome.message;\n notice(`remote access failed: ${outcome.message}`);\n publish();\n return { ok: false, error: outcome.message };\n }\n stopTunnel = outcome.stop;\n // A fresh key pair per tunnel: the QR is the only place its public half\n // travels, so it must not outlive the code that carried it.\n handshake = createHostHandshake();\n publicOrigin = outcome.publicOrigin;\n policy = tunnelOriginPolicy(outcome.publicOrigin);\n startedAt = now();\n status = 'on';\n armAutoClose();\n notice(`remote access on at ${outcome.publicOrigin}`);\n publish();\n return { ok: true };\n },\n\n disable,\n\n mintPairing() {\n if (status !== 'on' || publicOrigin === undefined || handshake === undefined) return undefined;\n const trust = bundlePairingTrust(options.bundleTrust?.());\n if (trust === undefined) return undefined;\n const { code, manualCode, expiresAt } = pairing.mintCode();\n // The token, channel key, signer key, and publication floor ride in the fragment,\n // so the relay never observes the values used to authenticate either channel.\n const fragment = new URLSearchParams({\n c: code,\n [SEALED_KEY_PARAM]: handshake.publicKey,\n [BUNDLE_SIGNING_KEY_PARAM]: trust.publicKey,\n [BUNDLE_MINIMUM_REVISION_PARAM]: String(trust.revision),\n });\n return {\n code,\n manualCode,\n pairUrl: `${publicOrigin}${PAIRING_PAGE_ROUTE}#${fragment.toString()}`,\n expiresAt: new Date(expiresAt).toISOString(),\n ...trust,\n };\n },\n\n bundleTrust: () => bundlePairingTrust(options.bundleTrust?.()),\n\n claim(input) {\n const outcome = pairing.claim(input);\n if (outcome.ok) {\n broadcastLocal({ type: REMOTE_PAIRING_REQUEST_TYPE, state: view(undefined, true) });\n }\n return outcome;\n },\n\n pairingStatus: (requestId) => pairing.status(requestId),\n\n approve(requestId) {\n const outcome = pairing.approve(requestId);\n if (outcome === 'approved') broadcastLocal({ type: REMOTE_PAIRING_REQUEST_TYPE, state: view(undefined, true) });\n return outcome;\n },\n\n deny(requestId) {\n const outcome = pairing.deny(requestId);\n if (outcome === 'denied') broadcastLocal({ type: REMOTE_PAIRING_REQUEST_TYPE, state: view(undefined, true) });\n return outcome;\n },\n\n redeem(requestId) {\n const approved = pairing.consume(requestId);\n if (approved === undefined) return undefined;\n const enrolled = devices.enrol({ userAgent: approved.userAgent });\n publish();\n return { ...enrolled, maxAgeSeconds: cookieMaxAgeSeconds(settings, COOKIE_CEILING_SECONDS) };\n },\n\n authorize: (token) => devices.verify(token)?.id,\n\n sessionForPasskey(label) {\n const enrolled = devices.enrol({ userAgent: label });\n publish();\n return { ...enrolled, maxAgeSeconds: cookieMaxAgeSeconds(settings, COOKIE_CEILING_SECONDS) };\n },\n\n passkeys: () => ({\n support: () => webauthn.support(),\n list: () => options.store.credentials(),\n // Wrapped rather than passed by reference: an unbound method carries\n // whatever `this` the caller happens to have.\n beginRegistration: async (caller, label) => await webauthn.beginRegistration(caller, label),\n finishRegistration: async (ceremonyId, caller, response, label) =>\n await webauthn.finishRegistration(ceremonyId, caller, response, label),\n beginAuthentication: async (caller) => await webauthn.beginAuthentication(caller),\n finishAuthentication: async (ceremonyId, caller, response) =>\n await webauthn.finishAuthentication(ceremonyId, caller, response),\n beginStepUp: async (caller, action) => await webauthn.beginStepUp(caller, action),\n finishStepUp: async (ceremonyId, caller, action, response) =>\n await webauthn.finishStepUp(ceremonyId, caller, action, response),\n forget: (id) => {\n const forgotten = options.store.removeCredential(id);\n if (forgotten) publish();\n return forgotten;\n },\n }),\n\n // Only meaningful where passkeys are: a quick tunnel has no stable rpID, so\n // there is nothing to step up with and the session cookie is all there is.\n stepUpRequired: () => webauthn.support().supported,\n\n channelPublicKey: () => handshake?.publicKey,\n\n openChannel(deviceId, scope, clientPublicKey) {\n const channel = handshake?.accept(clientPublicKey);\n if (channel === undefined) return false;\n channels.set(channelKey(deviceId, scope), channel);\n return true;\n },\n\n channelFor: (deviceId, scope) => channels.get(channelKey(deviceId, scope)),\n\n revokeDevice(id) {\n const revoked = devices.revoke(id);\n if (revoked) publish();\n return revoked;\n },\n\n isDeviceConnected: (deviceId) => (sockets.get(deviceId)?.size ?? 0) > 0,\n\n trackSocket(deviceId, close) {\n const held = sockets.get(deviceId) ?? new Set();\n held.add(close);\n sockets.set(deviceId, held);\n return () => {\n held.delete(close);\n if (held.size === 0) sockets.delete(deviceId);\n };\n },\n\n async close() {\n clearInterval(sweeper);\n await teardown();\n status = 'off';\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const MIN_MINUTES = 1;
|
|
2
|
+
const MAX_MINUTES = 1440;
|
|
3
|
+
const MIN_HOURS = 1;
|
|
4
|
+
const MAX_HOURS = 720;
|
|
5
|
+
/**
|
|
6
|
+
* Both time limits start off.
|
|
7
|
+
*
|
|
8
|
+
* The durations are still here so switching one on lands on a sensible number
|
|
9
|
+
* rather than an empty field. What being off actually means: a tunnel stays up
|
|
10
|
+
* until it is closed or the hub restarts, and a paired session lasts until it
|
|
11
|
+
* is revoked or remote access is switched off. Those two events are the only
|
|
12
|
+
* expiry there is by default.
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_REMOTE_SETTINGS = {
|
|
15
|
+
autoCloseEnabled: false,
|
|
16
|
+
autoCloseMinutes: 60,
|
|
17
|
+
sessionExpiryEnabled: false,
|
|
18
|
+
idleMinutes: 30,
|
|
19
|
+
absoluteHours: 12,
|
|
20
|
+
tunnel: { kind: "quick" },
|
|
21
|
+
sandbox: {
|
|
22
|
+
enabled: false,
|
|
23
|
+
workspaces: []
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
function isRecord(value) {
|
|
27
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
28
|
+
}
|
|
29
|
+
function readBoolean(raw, fallback, field, warnings) {
|
|
30
|
+
if (raw === void 0) return fallback;
|
|
31
|
+
if (typeof raw !== "boolean") {
|
|
32
|
+
warnings.push(`${field} must be true or false; using ${String(fallback)}.`);
|
|
33
|
+
return fallback;
|
|
34
|
+
}
|
|
35
|
+
return raw;
|
|
36
|
+
}
|
|
37
|
+
function readClamped(raw, fallback, bounds, field, warnings) {
|
|
38
|
+
if (raw === void 0) return fallback;
|
|
39
|
+
if (typeof raw !== "number" || !Number.isFinite(raw)) {
|
|
40
|
+
warnings.push(`${field} must be a number; using ${String(fallback)}.`);
|
|
41
|
+
return fallback;
|
|
42
|
+
}
|
|
43
|
+
const clamped = Math.min(bounds.max, Math.max(bounds.min, Math.round(raw)));
|
|
44
|
+
if (clamped !== raw) warnings.push(`${field} must be between ${String(bounds.min)} and ${String(bounds.max)}; using ${String(clamped)}.`);
|
|
45
|
+
return clamped;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A tunnel configuration is only accepted whole.
|
|
49
|
+
*
|
|
50
|
+
* A named tunnel missing its hostname is not a named tunnel with a default, it
|
|
51
|
+
* is a misconfiguration, and quietly falling back to a quick tunnel would swap
|
|
52
|
+
* a stable origin for a rotating one without telling anybody.
|
|
53
|
+
*/
|
|
54
|
+
function readTunnel(raw, warnings) {
|
|
55
|
+
if (raw === void 0) return DEFAULT_REMOTE_SETTINGS.tunnel;
|
|
56
|
+
if (!isRecord(raw)) {
|
|
57
|
+
warnings.push("tunnel must be an object; using a quick tunnel.");
|
|
58
|
+
return { kind: "quick" };
|
|
59
|
+
}
|
|
60
|
+
if (raw.kind === "quick") return { kind: "quick" };
|
|
61
|
+
if (raw.kind !== "named") {
|
|
62
|
+
warnings.push(`tunnel.kind must be "quick" or "named"; using a quick tunnel.`);
|
|
63
|
+
return { kind: "quick" };
|
|
64
|
+
}
|
|
65
|
+
if (typeof raw.hostname !== "string" || raw.hostname === "") {
|
|
66
|
+
warnings.push("A named tunnel needs a hostname; using a quick tunnel.");
|
|
67
|
+
return { kind: "quick" };
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
kind: "named",
|
|
71
|
+
hostname: raw.hostname,
|
|
72
|
+
...typeof raw.name === "string" && raw.name !== "" ? { name: raw.name } : {},
|
|
73
|
+
...typeof raw.tokenFile === "string" && raw.tokenFile !== "" ? { tokenFile: raw.tokenFile } : {},
|
|
74
|
+
...typeof raw.configFile === "string" && raw.configFile !== "" ? { configFile: raw.configFile } : {}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reads the container settings, keeping only absolute workspace paths.
|
|
79
|
+
*
|
|
80
|
+
* A relative path would resolve against the container's working directory
|
|
81
|
+
* rather than the host's, which is a mount that silently points somewhere else.
|
|
82
|
+
* Refusing one is better than mounting the wrong directory.
|
|
83
|
+
*/
|
|
84
|
+
function readSandbox(raw, warnings) {
|
|
85
|
+
const fallback = DEFAULT_REMOTE_SETTINGS.sandbox;
|
|
86
|
+
if (raw === void 0) return fallback;
|
|
87
|
+
if (!isRecord(raw)) {
|
|
88
|
+
warnings.push("sandbox must be an object; the cockpit will not be contained.");
|
|
89
|
+
return fallback;
|
|
90
|
+
}
|
|
91
|
+
const workspaces = [];
|
|
92
|
+
for (const entry of Array.isArray(raw.workspaces) ? raw.workspaces : []) {
|
|
93
|
+
if (typeof entry !== "string" || !entry.startsWith("/")) {
|
|
94
|
+
warnings.push(`A workspace must be an absolute path; ignoring ${String(entry)}.`);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (!workspaces.includes(entry)) workspaces.push(entry);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
enabled: readBoolean(raw.enabled, fallback.enabled, "sandbox.enabled", warnings),
|
|
101
|
+
workspaces
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function parseRemoteAccessSettings(raw) {
|
|
105
|
+
const warnings = [];
|
|
106
|
+
if (!isRecord(raw)) return {
|
|
107
|
+
settings: DEFAULT_REMOTE_SETTINGS,
|
|
108
|
+
warnings
|
|
109
|
+
};
|
|
110
|
+
if (raw.version !== 1) {
|
|
111
|
+
warnings.push(`Settings version ${String(raw.version)} is not version ${String(1)}; using defaults.`);
|
|
112
|
+
return {
|
|
113
|
+
settings: DEFAULT_REMOTE_SETTINGS,
|
|
114
|
+
warnings
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const defaults = DEFAULT_REMOTE_SETTINGS;
|
|
118
|
+
return {
|
|
119
|
+
settings: {
|
|
120
|
+
autoCloseEnabled: readBoolean(raw.autoCloseEnabled, defaults.autoCloseEnabled, "autoCloseEnabled", warnings),
|
|
121
|
+
autoCloseMinutes: readClamped(raw.autoCloseMinutes, defaults.autoCloseMinutes, {
|
|
122
|
+
min: MIN_MINUTES,
|
|
123
|
+
max: MAX_MINUTES
|
|
124
|
+
}, "autoCloseMinutes", warnings),
|
|
125
|
+
sessionExpiryEnabled: readBoolean(raw.sessionExpiryEnabled, defaults.sessionExpiryEnabled, "sessionExpiryEnabled", warnings),
|
|
126
|
+
idleMinutes: readClamped(raw.idleMinutes, defaults.idleMinutes, {
|
|
127
|
+
min: MIN_MINUTES,
|
|
128
|
+
max: MAX_MINUTES
|
|
129
|
+
}, "idleMinutes", warnings),
|
|
130
|
+
absoluteHours: readClamped(raw.absoluteHours, defaults.absoluteHours, {
|
|
131
|
+
min: MIN_HOURS,
|
|
132
|
+
max: MAX_HOURS
|
|
133
|
+
}, "absoluteHours", warnings),
|
|
134
|
+
tunnel: readTunnel(raw.tunnel, warnings),
|
|
135
|
+
sandbox: readSandbox(raw.sandbox, warnings)
|
|
136
|
+
},
|
|
137
|
+
warnings
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function serializeRemoteAccessSettings(settings) {
|
|
141
|
+
return {
|
|
142
|
+
version: 1,
|
|
143
|
+
...settings
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//#endregion
|
|
147
|
+
exports.DEFAULT_REMOTE_SETTINGS = DEFAULT_REMOTE_SETTINGS;
|
|
148
|
+
exports.parseRemoteAccessSettings = parseRemoteAccessSettings;
|
|
149
|
+
exports.serializeRemoteAccessSettings = serializeRemoteAccessSettings;
|
|
150
|
+
|
|
151
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/remoteAccessSettings/index.ts"],"sourcesContent":["/**\n * The persisted remote-access settings, and how a bad file becomes a good one.\n *\n * Every failure here is recoverable by falling back, never by throwing: a\n * corrupt settings file must not stop the cockpit from starting, because the\n * cockpit is how you would fix it.\n */\n\nimport type { RemoteAccessSettings, SandboxSettings, TunnelConfig } from '../../types/remote';\n\n/** Bumped when a field changes meaning; an unrecognised version falls back to defaults. */\nexport const REMOTE_SETTINGS_VERSION = 1;\n\nconst MIN_MINUTES = 1;\nconst MAX_MINUTES = 1440;\nconst MIN_HOURS = 1;\nconst MAX_HOURS = 720;\n\n/**\n * Both time limits start off.\n *\n * The durations are still here so switching one on lands on a sensible number\n * rather than an empty field. What being off actually means: a tunnel stays up\n * until it is closed or the hub restarts, and a paired session lasts until it\n * is revoked or remote access is switched off. Those two events are the only\n * expiry there is by default.\n */\nexport const DEFAULT_REMOTE_SETTINGS: RemoteAccessSettings = {\n autoCloseEnabled: false,\n autoCloseMinutes: 60,\n sessionExpiryEnabled: false,\n idleMinutes: 30,\n absoluteHours: 12,\n tunnel: { kind: 'quick' },\n sandbox: { enabled: false, workspaces: [] },\n};\n\nexport interface ParsedRemoteSettings {\n settings: RemoteAccessSettings;\n /** Everything that had to be corrected, so the host can say so once rather than silently differ. */\n warnings: string[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readBoolean(raw: unknown, fallback: boolean, field: string, warnings: string[]): boolean {\n if (raw === undefined) return fallback;\n if (typeof raw !== 'boolean') {\n warnings.push(`${field} must be true or false; using ${String(fallback)}.`);\n return fallback;\n }\n return raw;\n}\n\nfunction readClamped(\n raw: unknown,\n fallback: number,\n bounds: { min: number; max: number },\n field: string,\n warnings: string[],\n): number {\n if (raw === undefined) return fallback;\n if (typeof raw !== 'number' || !Number.isFinite(raw)) {\n warnings.push(`${field} must be a number; using ${String(fallback)}.`);\n return fallback;\n }\n const clamped = Math.min(bounds.max, Math.max(bounds.min, Math.round(raw)));\n if (clamped !== raw) {\n warnings.push(\n `${field} must be between ${String(bounds.min)} and ${String(bounds.max)}; using ${String(clamped)}.`,\n );\n }\n return clamped;\n}\n\n/**\n * A tunnel configuration is only accepted whole.\n *\n * A named tunnel missing its hostname is not a named tunnel with a default, it\n * is a misconfiguration, and quietly falling back to a quick tunnel would swap\n * a stable origin for a rotating one without telling anybody.\n */\nfunction readTunnel(raw: unknown, warnings: string[]): TunnelConfig {\n if (raw === undefined) return DEFAULT_REMOTE_SETTINGS.tunnel;\n if (!isRecord(raw)) {\n warnings.push('tunnel must be an object; using a quick tunnel.');\n return { kind: 'quick' };\n }\n if (raw.kind === 'quick') return { kind: 'quick' };\n if (raw.kind !== 'named') {\n warnings.push(`tunnel.kind must be \"quick\" or \"named\"; using a quick tunnel.`);\n return { kind: 'quick' };\n }\n if (typeof raw.hostname !== 'string' || raw.hostname === '') {\n warnings.push('A named tunnel needs a hostname; using a quick tunnel.');\n return { kind: 'quick' };\n }\n return {\n kind: 'named',\n hostname: raw.hostname,\n ...(typeof raw.name === 'string' && raw.name !== '' ? { name: raw.name } : {}),\n ...(typeof raw.tokenFile === 'string' && raw.tokenFile !== '' ? { tokenFile: raw.tokenFile } : {}),\n ...(typeof raw.configFile === 'string' && raw.configFile !== '' ? { configFile: raw.configFile } : {}),\n };\n}\n\n/**\n * Reads the container settings, keeping only absolute workspace paths.\n *\n * A relative path would resolve against the container's working directory\n * rather than the host's, which is a mount that silently points somewhere else.\n * Refusing one is better than mounting the wrong directory.\n */\nfunction readSandbox(raw: unknown, warnings: string[]): SandboxSettings {\n const fallback = DEFAULT_REMOTE_SETTINGS.sandbox;\n if (raw === undefined) return fallback;\n if (!isRecord(raw)) {\n warnings.push('sandbox must be an object; the cockpit will not be contained.');\n return fallback;\n }\n const workspaces: string[] = [];\n for (const entry of Array.isArray(raw.workspaces) ? raw.workspaces : []) {\n if (typeof entry !== 'string' || !entry.startsWith('/')) {\n warnings.push(`A workspace must be an absolute path; ignoring ${String(entry)}.`);\n continue;\n }\n if (!workspaces.includes(entry)) workspaces.push(entry);\n }\n return { enabled: readBoolean(raw.enabled, fallback.enabled, 'sandbox.enabled', warnings), workspaces };\n}\n\nexport function parseRemoteAccessSettings(raw: unknown): ParsedRemoteSettings {\n const warnings: string[] = [];\n if (!isRecord(raw)) {\n return { settings: DEFAULT_REMOTE_SETTINGS, warnings };\n }\n if (raw.version !== REMOTE_SETTINGS_VERSION) {\n warnings.push(\n `Settings version ${String(raw.version)} is not version ${String(REMOTE_SETTINGS_VERSION)}; using defaults.`,\n );\n return { settings: DEFAULT_REMOTE_SETTINGS, warnings };\n }\n const defaults = DEFAULT_REMOTE_SETTINGS;\n return {\n settings: {\n autoCloseEnabled: readBoolean(raw.autoCloseEnabled, defaults.autoCloseEnabled, 'autoCloseEnabled', warnings),\n autoCloseMinutes: readClamped(\n raw.autoCloseMinutes,\n defaults.autoCloseMinutes,\n { min: MIN_MINUTES, max: MAX_MINUTES },\n 'autoCloseMinutes',\n warnings,\n ),\n sessionExpiryEnabled: readBoolean(\n raw.sessionExpiryEnabled,\n defaults.sessionExpiryEnabled,\n 'sessionExpiryEnabled',\n warnings,\n ),\n idleMinutes: readClamped(\n raw.idleMinutes,\n defaults.idleMinutes,\n { min: MIN_MINUTES, max: MAX_MINUTES },\n 'idleMinutes',\n warnings,\n ),\n absoluteHours: readClamped(\n raw.absoluteHours,\n defaults.absoluteHours,\n { min: MIN_HOURS, max: MAX_HOURS },\n 'absoluteHours',\n warnings,\n ),\n tunnel: readTunnel(raw.tunnel, warnings),\n sandbox: readSandbox(raw.sandbox, warnings),\n },\n warnings,\n };\n}\n\nexport function serializeRemoteAccessSettings(settings: RemoteAccessSettings): unknown {\n return { version: REMOTE_SETTINGS_VERSION, ...settings };\n}\n"],"mappings":"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"}
|