@agimon-ai/po-core 0.0.0-alpha.0
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 +7 -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 +2094 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +1086 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +2074 -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 +9 -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 +9 -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 +12 -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 +96 -0
- package/dist/contextDetailStore.cjs.map +1 -0
- package/dist/contextDetailStore.d.mts +21 -0
- package/dist/contextDetailStore.d.mts.map +1 -0
- package/dist/contextDetailStore.mjs +87 -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 +13 -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 +232 -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 +226 -0
- package/dist/executionBudget.mjs.map +1 -0
- package/dist/extensionFile.cjs +19 -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 +16 -0
- package/dist/headless.d.mts +2 -0
- package/dist/headless.mjs +2 -0
- package/dist/headlessHub.cjs +1008 -0
- package/dist/headlessHub.cjs.map +1 -0
- package/dist/headlessHub.d.mts +176 -0
- package/dist/headlessHub.d.mts.map +1 -0
- package/dist/headlessHub.mjs +1005 -0
- package/dist/headlessHub.mjs.map +1 -0
- package/dist/headlessServer.cjs +956 -0
- package/dist/headlessServer.cjs.map +1 -0
- package/dist/headlessServer.d.mts +66 -0
- package/dist/headlessServer.d.mts.map +1 -0
- package/dist/headlessServer.mjs +949 -0
- package/dist/headlessServer.mjs.map +1 -0
- package/dist/headlessSessionHost.cjs +0 -0
- package/dist/headlessSessionHost.d.mts +89 -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/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 +44 -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 +42 -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 +9 -0
- package/dist/mcpFacet.d.mts +4 -0
- package/dist/mcpFacet.mjs +3 -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 +412 -0
- package/dist/moduleResolution.cjs.map +1 -0
- package/dist/moduleResolution.d.mts +72 -0
- package/dist/moduleResolution.d.mts.map +1 -0
- package/dist/moduleResolution.mjs +396 -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/native.cjs +29 -0
- package/dist/native.d.mts +12 -0
- package/dist/native.mjs +8 -0
- package/dist/notification.cjs +17 -0
- package/dist/notification.d.mts +2 -0
- package/dist/notification.mjs +2 -0
- package/dist/packageApi.cjs +17 -0
- package/dist/packageApi.d.mts +3 -0
- package/dist/packageApi.mjs +3 -0
- package/dist/packageApiServer.cjs +196 -0
- package/dist/packageApiServer.cjs.map +1 -0
- package/dist/packageApiServer.d.mts +62 -0
- package/dist/packageApiServer.d.mts.map +1 -0
- package/dist/packageApiServer.mjs +194 -0
- package/dist/packageApiServer.mjs.map +1 -0
- package/dist/piSettings.cjs +20 -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/remoteApi.cjs +45 -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 +44 -0
- package/dist/remoteApi.mjs.map +1 -0
- package/dist/remoteRuntime.cjs +498 -0
- package/dist/remoteRuntime.cjs.map +1 -0
- package/dist/remoteRuntime.d.mts +36 -0
- package/dist/remoteRuntime.d.mts.map +1 -0
- package/dist/remoteRuntime.mjs +494 -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 +223 -0
- package/dist/runtimeCordisHost.cjs.map +1 -0
- package/dist/runtimeCordisHost.d.mts +78 -0
- package/dist/runtimeCordisHost.d.mts.map +1 -0
- package/dist/runtimeCordisHost.mjs +212 -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/runtimePackages.cjs +120 -0
- package/dist/runtimePackages.cjs.map +1 -0
- package/dist/runtimePackages.d.mts +57 -0
- package/dist/runtimePackages.d.mts.map +1 -0
- package/dist/runtimePackages.mjs +110 -0
- package/dist/runtimePackages.mjs.map +1 -0
- package/dist/runtimePiSettings.cjs +257 -0
- package/dist/runtimePiSettings.cjs.map +1 -0
- package/dist/runtimePiSettings.d.mts +70 -0
- package/dist/runtimePiSettings.d.mts.map +1 -0
- package/dist/runtimePiSettings.mjs +235 -0
- package/dist/runtimePiSettings.mjs.map +1 -0
- package/dist/runtimeProtocol.cjs +228 -0
- package/dist/runtimeProtocol.cjs.map +1 -0
- package/dist/runtimeProtocol.d.mts +86 -0
- package/dist/runtimeProtocol.d.mts.map +1 -0
- package/dist/runtimeProtocol.mjs +219 -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 +34 -0
- package/dist/serverFacet.d.mts +10 -0
- package/dist/serverFacet.mjs +9 -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/sqliteSessionStorage.cjs +168 -0
- package/dist/sqliteSessionStorage.cjs.map +1 -0
- package/dist/sqliteSessionStorage.d.mts +35 -0
- package/dist/sqliteSessionStorage.d.mts.map +1 -0
- package/dist/sqliteSessionStorage.mjs +158 -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 +31 -0
- package/dist/src/constants/contextApi.cjs.map +1 -0
- package/dist/src/constants/contextApi.d.mts +23 -0
- package/dist/src/constants/contextApi.d.mts.map +1 -0
- package/dist/src/constants/contextApi.mjs +25 -0
- package/dist/src/constants/contextApi.mjs.map +1 -0
- package/dist/src/constants/nativeHost.cjs +56 -0
- package/dist/src/constants/nativeHost.cjs.map +1 -0
- package/dist/src/constants/nativeHost.d.mts +21 -0
- package/dist/src/constants/nativeHost.d.mts.map +1 -0
- package/dist/src/constants/nativeHost.mjs +53 -0
- package/dist/src/constants/nativeHost.mjs.map +1 -0
- package/dist/src/constants/remote.cjs +132 -0
- package/dist/src/constants/remote.cjs.map +1 -0
- package/dist/src/constants/remote.mjs +99 -0
- package/dist/src/constants/remote.mjs.map +1 -0
- package/dist/src/constants/sessionFiles.cjs +27 -0
- package/dist/src/constants/sessionFiles.cjs.map +1 -0
- package/dist/src/constants/sessionFiles.mjs +25 -0
- package/dist/src/constants/sessionFiles.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 +140 -0
- package/dist/src/extensions/extensionFile.cjs.map +1 -0
- package/dist/src/extensions/extensionFile.d.mts +69 -0
- package/dist/src/extensions/extensionFile.d.mts.map +1 -0
- package/dist/src/extensions/extensionFile.mjs +124 -0
- package/dist/src/extensions/extensionFile.mjs.map +1 -0
- package/dist/src/extensions/serverPlugin.cjs +107 -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 +107 -0
- package/dist/src/extensions/serverPlugin.mjs.map +1 -0
- package/dist/src/extensions/webPlugin.cjs +136 -0
- package/dist/src/extensions/webPlugin.cjs.map +1 -0
- package/dist/src/extensions/webPlugin.d.mts +68 -0
- package/dist/src/extensions/webPlugin.d.mts.map +1 -0
- package/dist/src/extensions/webPlugin.mjs +114 -0
- package/dist/src/extensions/webPlugin.mjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.cjs +625 -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 +624 -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 +44 -0
- package/dist/src/schemas/backgroundWork.cjs.map +1 -0
- package/dist/src/schemas/backgroundWork.d.mts +76 -0
- package/dist/src/schemas/backgroundWork.d.mts.map +1 -0
- package/dist/src/schemas/backgroundWork.mjs +38 -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 +116 -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 +97 -0
- package/dist/src/schemas/headless.cjs.map +1 -0
- package/dist/src/schemas/headless.d.mts +472 -0
- package/dist/src/schemas/headless.d.mts.map +1 -0
- package/dist/src/schemas/headless.mjs +84 -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 +271 -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.d.mts +13 -0
- package/dist/src/schemas/mcpBundle.d.mts.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 +76 -0
- package/dist/src/schemas/packageApi.cjs.map +1 -0
- package/dist/src/schemas/packageApi.d.mts +302 -0
- package/dist/src/schemas/packageApi.d.mts.map +1 -0
- package/dist/src/schemas/packageApi.mjs +66 -0
- package/dist/src/schemas/packageApi.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 +70 -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/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.d.mts +19 -0
- package/dist/src/schemas/serverBundle.d.mts.map +1 -0
- package/dist/src/schemas/serverFacet.cjs +111 -0
- package/dist/src/schemas/serverFacet.cjs.map +1 -0
- package/dist/src/schemas/serverFacet.d.mts +152 -0
- package/dist/src/schemas/serverFacet.d.mts.map +1 -0
- package/dist/src/schemas/serverFacet.mjs +101 -0
- package/dist/src/schemas/serverFacet.mjs.map +1 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts +47 -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 +313 -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 +93 -0
- package/dist/src/server/devProxySocket.cjs.map +1 -0
- package/dist/src/server/devProxySocket.d.mts +25 -0
- package/dist/src/server/devProxySocket.d.mts.map +1 -0
- package/dist/src/server/devProxySocket.mjs +93 -0
- package/dist/src/server/devProxySocket.mjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.cjs +2387 -0
- package/dist/src/server/directHarnessRuntime.cjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.d.mts +4 -0
- package/dist/src/server/directHarnessRuntime.mjs +2384 -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 +382 -0
- package/dist/src/server/headlessProtocol.cjs.map +1 -0
- package/dist/src/server/headlessProtocol.mjs +382 -0
- package/dist/src/server/headlessProtocol.mjs.map +1 -0
- package/dist/src/server/liveImport.cjs +37 -0
- package/dist/src/server/liveImport.cjs.map +1 -0
- package/dist/src/server/liveImport.d.mts +27 -0
- package/dist/src/server/liveImport.d.mts.map +1 -0
- package/dist/src/server/liveImport.mjs +34 -0
- package/dist/src/server/liveImport.mjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.cjs +108 -0
- package/dist/src/server/mcpBundleLoader.cjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.d.mts +46 -0
- package/dist/src/server/mcpBundleLoader.d.mts.map +1 -0
- package/dist/src/server/mcpBundleLoader.mjs +107 -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 +463 -0
- package/dist/src/server/remoteRoutes.cjs.map +1 -0
- package/dist/src/server/remoteRoutes.mjs +463 -0
- package/dist/src/server/remoteRoutes.mjs.map +1 -0
- package/dist/src/server/serverFacetLoader.cjs +214 -0
- package/dist/src/server/serverFacetLoader.cjs.map +1 -0
- package/dist/src/server/serverFacetLoader.d.mts +72 -0
- package/dist/src/server/serverFacetLoader.d.mts.map +1 -0
- package/dist/src/server/serverFacetLoader.mjs +212 -0
- package/dist/src/server/serverFacetLoader.mjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.cjs +585 -0
- package/dist/src/server/sessionMcpHandler.cjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.d.mts +50 -0
- package/dist/src/server/sessionMcpHandler.d.mts.map +1 -0
- package/dist/src/server/sessionMcpHandler.mjs +582 -0
- package/dist/src/server/sessionMcpHandler.mjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.cjs +809 -0
- package/dist/src/server/sessionMcpRoutes.cjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.mjs +804 -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 +89 -0
- package/dist/src/services/bundlePublication/index.cjs.map +1 -0
- package/dist/src/services/bundlePublication/index.mjs +86 -0
- package/dist/src/services/bundlePublication/index.mjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.cjs +53 -0
- package/dist/src/services/contextApiUrls/index.cjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.d.mts +8 -0
- package/dist/src/services/contextApiUrls/index.d.mts.map +1 -0
- package/dist/src/services/contextApiUrls/index.mjs +52 -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 +146 -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 +146 -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 +18 -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/deviceTrust/index.cjs +294 -0
- package/dist/src/services/deviceTrust/index.cjs.map +1 -0
- package/dist/src/services/deviceTrust/index.mjs +282 -0
- package/dist/src/services/deviceTrust/index.mjs.map +1 -0
- package/dist/src/services/durableNavigation/index.cjs +46 -0
- package/dist/src/services/durableNavigation/index.cjs.map +1 -0
- package/dist/src/services/durableNavigation/index.mjs +45 -0
- package/dist/src/services/durableNavigation/index.mjs.map +1 -0
- package/dist/src/services/headlessClient/index.cjs +126 -0
- package/dist/src/services/headlessClient/index.cjs.map +1 -0
- package/dist/src/services/headlessClient/index.mjs +126 -0
- package/dist/src/services/headlessClient/index.mjs.map +1 -0
- package/dist/src/services/historyImport/index.cjs +8 -0
- package/dist/src/services/historyImport/index.cjs.map +1 -0
- package/dist/src/services/historyImport/index.d.mts +68 -0
- package/dist/src/services/historyImport/index.d.mts.map +1 -0
- package/dist/src/services/historyImport/index.mjs +8 -0
- package/dist/src/services/historyImport/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 +134 -0
- package/dist/src/services/openSessionRegistry/index.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.d.mts +36 -0
- package/dist/src/services/openSessionRegistry/index.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/index.mjs +131 -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 +889 -0
- package/dist/src/services/piExtensionHost/index.cjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.mjs +885 -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 +121 -0
- package/dist/src/services/piSessionEntries/index.cjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.mjs +117 -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 +8 -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/publicFileShares/index.cjs +192 -0
- package/dist/src/services/publicFileShares/index.cjs.map +1 -0
- package/dist/src/services/publicFileShares/index.d.mts +16 -0
- package/dist/src/services/publicFileShares/index.d.mts.map +1 -0
- package/dist/src/services/publicFileShares/index.mjs +188 -0
- package/dist/src/services/publicFileShares/index.mjs.map +1 -0
- package/dist/src/services/remoteAccess/index.cjs +567 -0
- package/dist/src/services/remoteAccess/index.cjs.map +1 -0
- package/dist/src/services/remoteAccess/index.d.mts +121 -0
- package/dist/src/services/remoteAccess/index.d.mts.map +1 -0
- package/dist/src/services/remoteAccess/index.mjs +567 -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 +197 -0
- package/dist/src/services/remoteAccessStore/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.mjs +192 -0
- package/dist/src/services/remoteAccessStore/index.mjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs +200 -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 +196 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs.map +1 -0
- package/dist/src/services/requestReceipts/index.cjs +167 -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 +167 -0
- package/dist/src/services/requestReceipts/index.mjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.cjs +633 -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 +632 -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/sessionAttachments/index.cjs +111 -0
- package/dist/src/services/sessionAttachments/index.cjs.map +1 -0
- package/dist/src/services/sessionAttachments/index.d.mts +11 -0
- package/dist/src/services/sessionAttachments/index.d.mts.map +1 -0
- package/dist/src/services/sessionAttachments/index.mjs +107 -0
- package/dist/src/services/sessionAttachments/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 +473 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts +125 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs +469 -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 +120 -0
- package/dist/src/services/sessionPresentation/index.cjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.mjs +120 -0
- package/dist/src/services/sessionPresentation/index.mjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs +97 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts +28 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs +92 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs +67 -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 +65 -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 +117 -0
- package/dist/src/services/transcriptPages/index.cjs.map +1 -0
- package/dist/src/services/transcriptPages/index.mjs +115 -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 +174 -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 +167 -0
- package/dist/src/services/webauthnPolicy/index.mjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.cjs +187 -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 +179 -0
- package/dist/src/services/workspaceRegistry/index.mjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +466 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +36 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +457 -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 +21 -0
- package/dist/src/systems/child/types/childSession.cjs.map +1 -0
- package/dist/src/systems/child/types/childSession.d.mts +182 -0
- package/dist/src/systems/child/types/childSession.d.mts.map +1 -0
- package/dist/src/systems/child/types/childSession.mjs +17 -0
- package/dist/src/systems/child/types/childSession.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs +597 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts +116 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs +595 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs +1668 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +20 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs +1663 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -0
- package/dist/src/systems/main/types/headlessHost.d.mts +37 -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 +399 -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 +399 -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 +152 -0
- package/dist/src/types/remote.d.mts.map +1 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts +526 -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 +35 -0
- package/dist/src/web/schemas/template.cjs.map +1 -0
- package/dist/src/web/schemas/template.d.mts +9 -0
- package/dist/src/web/schemas/template.d.mts.map +1 -0
- package/dist/src/web/schemas/template.mjs +34 -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 +97 -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 +96 -0
- package/dist/src/web/services/testing/slotProps.mjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.cjs +156 -0
- package/dist/src/web/services/testing/templateRail.cjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.d.mts +32 -0
- package/dist/src/web/services/testing/templateRail.d.mts.map +1 -0
- package/dist/src/web/services/testing/templateRail.mjs +154 -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 +62 -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/nativeTemplate.d.mts +29 -0
- package/dist/src/web/types/nativeTemplate.d.mts.map +1 -0
- package/dist/src/web/types/sessionRegistry.d.mts +46 -0
- package/dist/src/web/types/sessionRegistry.d.mts.map +1 -0
- package/dist/src/web/types/template.d.mts +135 -0
- package/dist/src/web/types/template.d.mts.map +1 -0
- package/dist/src/web/types/webPlugin.d.mts +915 -0
- package/dist/src/web/types/webPlugin.d.mts.map +1 -0
- package/dist/terminalPiChildSessionService.cjs +324 -0
- package/dist/terminalPiChildSessionService.cjs.map +1 -0
- package/dist/terminalPiChildSessionService.d.mts +46 -0
- package/dist/terminalPiChildSessionService.d.mts.map +1 -0
- package/dist/terminalPiChildSessionService.mjs +318 -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 +79 -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 +10 -0
- package/dist/v3Export.cjs.map +1 -0
- package/dist/v3Export.d.mts +35 -0
- package/dist/v3Export.d.mts.map +1 -0
- package/dist/v3Export.mjs +9 -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 +65 -0
- package/dist/web.d.mts +20 -0
- package/dist/web.mjs +13 -0
- package/dist/webCompositions.cjs +181 -0
- package/dist/webCompositions.cjs.map +1 -0
- package/dist/webCompositions.d.mts +79 -0
- package/dist/webCompositions.d.mts.map +1 -0
- package/dist/webCompositions.mjs +174 -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 +586 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["os","path","poHomeDirectory","fs","DEFAULT_REMOTE_SETTINGS","parseRemoteAccessSettings","serializeRemoteAccessSettings"],"sources":["../../../../src/services/remoteAccessStore/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { TRUSTED_DEVICE_LIMIT } from '../../constants/remote';\nimport type { RemoteAccessSettings, TrustedDeviceRecord } from '../../types/remote';\nimport { poHomeDirectory } from '../piSettings';\nimport {\n DEFAULT_REMOTE_SETTINGS,\n parseRemoteAccessSettings,\n serializeRemoteAccessSettings,\n} from '../remoteAccessSettings';\nimport type { StoredCredential } from '../webauthnPolicy';\n\n/** Where the cockpit keeps machine-local state; `po sync` already writes its bundle here. */\nconst STATE_DIRECTORY = 'web';\nconst SETTINGS_FILE = 'remote-access.json';\nconst CREDENTIALS_FILE = 'credentials.json';\nconst TRUSTED_DEVICES_FILE = 'trusted-devices.json';\nconst TRUSTED_DEVICE_PLATFORMS: ReadonlySet<string> = new Set(['ios', 'android']);\nconst STORED_ID = /^[A-Za-z0-9_-]{1,64}$/u;\nconst STORED_KEY = /^[A-Za-z0-9_-]{1,512}$/u;\nconst MAX_STORED_LABEL = 200;\nconst DIRECTORY_MODE = 0o700;\nconst FILE_MODE = 0o600;\n/** Any bit set for group or other; a state file readable by another account is worth repairing. */\nconst LOOSE_MODE_MASK = 0o077;\n\nexport interface RemoteAccessStoreOptions {\n /** Overridden by --state-dir and by tests; the default is ~/.po/web. */\n stateDir?: string;\n onNotice?: (message: string) => void;\n}\n\nexport interface RemoteAccessStore {\n readonly directory: string;\n settings(): RemoteAccessSettings;\n save(settings: RemoteAccessSettings): void;\n /**\n * Registered passkeys. Public keys only, so the file is not a bearer secret\n * and losing it costs a re-enrolment rather than an account.\n */\n credentials(): readonly StoredCredential[];\n saveCredential(credential: StoredCredential): void;\n removeCredential(id: string): boolean;\n /** Registered native devices. Public keys only, at most `TRUSTED_DEVICE_LIMIT`. */\n trustedDevices(): readonly TrustedDeviceRecord[];\n /** Adds or replaces one record by id. False when a new record would exceed the limit. */\n saveTrustedDevice(record: TrustedDeviceRecord): boolean;\n removeTrustedDevice(id: string): boolean;\n}\n\nexport function defaultRemoteStateDir(homeDir: string = os.homedir()): string {\n return path.join(poHomeDirectory(homeDir), STATE_DIRECTORY);\n}\n\n/**\n * Repairs a state file another account can read.\n *\n * Cheap, and it catches the cases a fresh write never would: a file restored\n * from a backup, copied with a permissive umask, or checked out of somewhere it\n * should not have been.\n */\nfunction tightenMode(filePath: string, notice: (message: string) => void): void {\n try {\n if ((fs.statSync(filePath).mode & LOOSE_MODE_MASK) === 0) return;\n fs.chmodSync(filePath, FILE_MODE);\n notice(`tightened permissions on ${filePath}`);\n } catch {\n // The file is missing or unreadable; the caller's own read reports that.\n }\n}\n\n/** Whether one parsed entry is a complete trusted-device record; anything else is dropped. */\nfunction isTrustedDeviceRecord(value: unknown): value is TrustedDeviceRecord {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n return (\n typeof record.id === 'string' &&\n STORED_ID.test(record.id) &&\n typeof record.identityPublicKey === 'string' &&\n STORED_KEY.test(record.identityPublicKey) &&\n typeof record.stepUpPublicKey === 'string' &&\n STORED_KEY.test(record.stepUpPublicKey) &&\n record.identityPublicKey !== record.stepUpPublicKey &&\n typeof record.label === 'string' &&\n record.label.length <= MAX_STORED_LABEL &&\n typeof record.platform === 'string' &&\n TRUSTED_DEVICE_PLATFORMS.has(record.platform) &&\n Number.isFinite(record.createdAt) &&\n Number.isFinite(record.lastSeenAt)\n );\n}\n\n/**\n * Settings and passkeys on disk. Sessions deliberately not.\n *\n * A session is revoked when remote access is switched off, and a hub restart is\n * a switch-off, so persisting one would buy nothing while creating a bearer\n * secret worth stealing. A passkey is the opposite: surviving is its whole\n * point, and what is stored is a public key.\n */\nexport function createRemoteAccessStore(options: RemoteAccessStoreOptions = {}): RemoteAccessStore {\n const directory = options.stateDir ?? defaultRemoteStateDir();\n const notice = options.onNotice ?? ((): void => {});\n const settingsPath = path.join(directory, SETTINGS_FILE);\n const credentialsPath = path.join(directory, CREDENTIALS_FILE);\n const trustedDevicesPath = path.join(directory, TRUSTED_DEVICES_FILE);\n\n let current = load();\n let registered = loadCredentials();\n let trusted = loadTrustedDevices();\n\n function load(): RemoteAccessSettings {\n let raw: string;\n try {\n raw = fs.readFileSync(settingsPath, 'utf8');\n } catch {\n // No file is the normal first run, so this is not worth a notice.\n return DEFAULT_REMOTE_SETTINGS;\n }\n tightenMode(settingsPath, notice);\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n // Left in place rather than rewritten: silently overwriting a file\n // somebody hand-edited is worse than ignoring it for this run.\n notice(`remote access settings at ${settingsPath} are not valid JSON; using defaults`);\n return DEFAULT_REMOTE_SETTINGS;\n }\n const outcome = parseRemoteAccessSettings(parsed);\n for (const warning of outcome.warnings) notice(`remote access settings: ${warning}`);\n return outcome.settings;\n }\n\n function loadCredentials(): StoredCredential[] {\n let raw: string;\n try {\n raw = fs.readFileSync(credentialsPath, 'utf8');\n } catch {\n return [];\n }\n tightenMode(credentialsPath, notice);\n try {\n const parsed: unknown = JSON.parse(raw);\n return Array.isArray(parsed) ? (parsed as StoredCredential[]) : [];\n } catch {\n // Fails closed: a half-readable credential file means enrolling again,\n // not guessing which entries survived.\n notice(`registered passkeys at ${credentialsPath} are not valid JSON; none will load`);\n return [];\n }\n }\n\n function loadTrustedDevices(): TrustedDeviceRecord[] {\n let raw: string;\n try {\n raw = fs.readFileSync(trustedDevicesPath, 'utf8');\n } catch {\n return [];\n }\n tightenMode(trustedDevicesPath, notice);\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n // Fails closed like passkeys: a device signs in only from a record read whole.\n notice(`trusted devices at ${trustedDevicesPath} are not valid JSON; none will load`);\n return [];\n }\n if (!Array.isArray(parsed)) {\n notice(`trusted devices at ${trustedDevicesPath} are not a list; none will load`);\n return [];\n }\n const loaded: TrustedDeviceRecord[] = [];\n for (const entry of parsed) {\n if (!isTrustedDeviceRecord(entry) || loaded.some((held) => held.id === entry.id)) {\n notice(`dropped an invalid trusted device record from ${trustedDevicesPath}`);\n continue;\n }\n if (loaded.length >= TRUSTED_DEVICE_LIMIT) {\n notice(\n `dropped trusted devices beyond the limit of ${String(TRUSTED_DEVICE_LIMIT)} from ${trustedDevicesPath}`,\n );\n break;\n }\n loaded.push({\n id: entry.id,\n identityPublicKey: entry.identityPublicKey,\n stepUpPublicKey: entry.stepUpPublicKey,\n label: entry.label,\n platform: entry.platform,\n createdAt: entry.createdAt,\n lastSeenAt: entry.lastSeenAt,\n });\n }\n return loaded;\n }\n\n function writeJson(target: string, body: unknown): void {\n const temporary = `${target}.${String(process.pid)}.tmp`;\n try {\n fs.mkdirSync(directory, { recursive: true, mode: DIRECTORY_MODE });\n fs.writeFileSync(temporary, `${JSON.stringify(body, undefined, 2)}\\n`, { mode: FILE_MODE });\n // Rename rather than write in place, so a crash mid-write leaves the\n // previous contents rather than a truncated file.\n fs.renameSync(temporary, target);\n } catch (error) {\n notice(`${target} could not be saved: ${error instanceof Error ? error.message : String(error)}`);\n try {\n fs.rmSync(temporary, { force: true });\n } catch {\n // Nothing further to do; the temp file is inert either way.\n }\n }\n }\n\n return {\n directory,\n settings: () => current,\n credentials: () => registered,\n\n saveCredential(credential) {\n registered = [...registered.filter((held) => held.id !== credential.id), credential];\n writeJson(credentialsPath, registered);\n },\n\n removeCredential(id) {\n const next = registered.filter((held) => held.id !== id);\n if (next.length === registered.length) return false;\n registered = next;\n writeJson(credentialsPath, registered);\n return true;\n },\n\n trustedDevices: () => trusted,\n\n saveTrustedDevice(record) {\n const others = trusted.filter((held) => held.id !== record.id);\n if (others.length === trusted.length && trusted.length >= TRUSTED_DEVICE_LIMIT) return false;\n trusted = [...others, record];\n writeJson(trustedDevicesPath, trusted);\n return true;\n },\n\n removeTrustedDevice(id) {\n const next = trusted.filter((held) => held.id !== id);\n if (next.length === trusted.length) return false;\n trusted = next;\n writeJson(trustedDevicesPath, trusted);\n return true;\n },\n\n save(settings) {\n current = settings;\n writeJson(settingsPath, serializeRemoteAccessSettings(settings));\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { poHomeDirectory } from "../../../runtimePiSettings.mjs";
|
|
2
|
+
import "../../constants/remote.mjs";
|
|
3
|
+
import { DEFAULT_REMOTE_SETTINGS, parseRemoteAccessSettings, serializeRemoteAccessSettings } from "../remoteAccessSettings/index.mjs";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
//#region src/services/remoteAccessStore/index.ts
|
|
8
|
+
/** Where the cockpit keeps machine-local state; `po sync` already writes its bundle here. */
|
|
9
|
+
const STATE_DIRECTORY = "web";
|
|
10
|
+
const SETTINGS_FILE = "remote-access.json";
|
|
11
|
+
const CREDENTIALS_FILE = "credentials.json";
|
|
12
|
+
const TRUSTED_DEVICES_FILE = "trusted-devices.json";
|
|
13
|
+
const TRUSTED_DEVICE_PLATFORMS = /* @__PURE__ */ new Set(["ios", "android"]);
|
|
14
|
+
const STORED_ID = /^[A-Za-z0-9_-]{1,64}$/u;
|
|
15
|
+
const STORED_KEY = /^[A-Za-z0-9_-]{1,512}$/u;
|
|
16
|
+
const MAX_STORED_LABEL = 200;
|
|
17
|
+
const DIRECTORY_MODE = 448;
|
|
18
|
+
const FILE_MODE = 384;
|
|
19
|
+
/** Any bit set for group or other; a state file readable by another account is worth repairing. */
|
|
20
|
+
const LOOSE_MODE_MASK = 63;
|
|
21
|
+
function defaultRemoteStateDir(homeDir = os.homedir()) {
|
|
22
|
+
return path.join(poHomeDirectory(homeDir), STATE_DIRECTORY);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Repairs a state file another account can read.
|
|
26
|
+
*
|
|
27
|
+
* Cheap, and it catches the cases a fresh write never would: a file restored
|
|
28
|
+
* from a backup, copied with a permissive umask, or checked out of somewhere it
|
|
29
|
+
* should not have been.
|
|
30
|
+
*/
|
|
31
|
+
function tightenMode(filePath, notice) {
|
|
32
|
+
try {
|
|
33
|
+
if ((fs.statSync(filePath).mode & LOOSE_MODE_MASK) === 0) return;
|
|
34
|
+
fs.chmodSync(filePath, FILE_MODE);
|
|
35
|
+
notice(`tightened permissions on ${filePath}`);
|
|
36
|
+
} catch {}
|
|
37
|
+
}
|
|
38
|
+
/** Whether one parsed entry is a complete trusted-device record; anything else is dropped. */
|
|
39
|
+
function isTrustedDeviceRecord(value) {
|
|
40
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
41
|
+
const record = value;
|
|
42
|
+
return typeof record.id === "string" && STORED_ID.test(record.id) && typeof record.identityPublicKey === "string" && STORED_KEY.test(record.identityPublicKey) && typeof record.stepUpPublicKey === "string" && STORED_KEY.test(record.stepUpPublicKey) && record.identityPublicKey !== record.stepUpPublicKey && typeof record.label === "string" && record.label.length <= MAX_STORED_LABEL && typeof record.platform === "string" && TRUSTED_DEVICE_PLATFORMS.has(record.platform) && Number.isFinite(record.createdAt) && Number.isFinite(record.lastSeenAt);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Settings and passkeys on disk. Sessions deliberately not.
|
|
46
|
+
*
|
|
47
|
+
* A session is revoked when remote access is switched off, and a hub restart is
|
|
48
|
+
* a switch-off, so persisting one would buy nothing while creating a bearer
|
|
49
|
+
* secret worth stealing. A passkey is the opposite: surviving is its whole
|
|
50
|
+
* point, and what is stored is a public key.
|
|
51
|
+
*/
|
|
52
|
+
function createRemoteAccessStore(options = {}) {
|
|
53
|
+
const directory = options.stateDir ?? defaultRemoteStateDir();
|
|
54
|
+
const notice = options.onNotice ?? (() => {});
|
|
55
|
+
const settingsPath = path.join(directory, SETTINGS_FILE);
|
|
56
|
+
const credentialsPath = path.join(directory, CREDENTIALS_FILE);
|
|
57
|
+
const trustedDevicesPath = path.join(directory, TRUSTED_DEVICES_FILE);
|
|
58
|
+
let current = load();
|
|
59
|
+
let registered = loadCredentials();
|
|
60
|
+
let trusted = loadTrustedDevices();
|
|
61
|
+
function load() {
|
|
62
|
+
let raw;
|
|
63
|
+
try {
|
|
64
|
+
raw = fs.readFileSync(settingsPath, "utf8");
|
|
65
|
+
} catch {
|
|
66
|
+
return DEFAULT_REMOTE_SETTINGS;
|
|
67
|
+
}
|
|
68
|
+
tightenMode(settingsPath, notice);
|
|
69
|
+
let parsed;
|
|
70
|
+
try {
|
|
71
|
+
parsed = JSON.parse(raw);
|
|
72
|
+
} catch {
|
|
73
|
+
notice(`remote access settings at ${settingsPath} are not valid JSON; using defaults`);
|
|
74
|
+
return DEFAULT_REMOTE_SETTINGS;
|
|
75
|
+
}
|
|
76
|
+
const outcome = parseRemoteAccessSettings(parsed);
|
|
77
|
+
for (const warning of outcome.warnings) notice(`remote access settings: ${warning}`);
|
|
78
|
+
return outcome.settings;
|
|
79
|
+
}
|
|
80
|
+
function loadCredentials() {
|
|
81
|
+
let raw;
|
|
82
|
+
try {
|
|
83
|
+
raw = fs.readFileSync(credentialsPath, "utf8");
|
|
84
|
+
} catch {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
tightenMode(credentialsPath, notice);
|
|
88
|
+
try {
|
|
89
|
+
const parsed = JSON.parse(raw);
|
|
90
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
91
|
+
} catch {
|
|
92
|
+
notice(`registered passkeys at ${credentialsPath} are not valid JSON; none will load`);
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function loadTrustedDevices() {
|
|
97
|
+
let raw;
|
|
98
|
+
try {
|
|
99
|
+
raw = fs.readFileSync(trustedDevicesPath, "utf8");
|
|
100
|
+
} catch {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
tightenMode(trustedDevicesPath, notice);
|
|
104
|
+
let parsed;
|
|
105
|
+
try {
|
|
106
|
+
parsed = JSON.parse(raw);
|
|
107
|
+
} catch {
|
|
108
|
+
notice(`trusted devices at ${trustedDevicesPath} are not valid JSON; none will load`);
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
if (!Array.isArray(parsed)) {
|
|
112
|
+
notice(`trusted devices at ${trustedDevicesPath} are not a list; none will load`);
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
const loaded = [];
|
|
116
|
+
for (const entry of parsed) {
|
|
117
|
+
if (!isTrustedDeviceRecord(entry) || loaded.some((held) => held.id === entry.id)) {
|
|
118
|
+
notice(`dropped an invalid trusted device record from ${trustedDevicesPath}`);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (loaded.length >= 32) {
|
|
122
|
+
notice(`dropped trusted devices beyond the limit of ${String(32)} from ${trustedDevicesPath}`);
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
loaded.push({
|
|
126
|
+
id: entry.id,
|
|
127
|
+
identityPublicKey: entry.identityPublicKey,
|
|
128
|
+
stepUpPublicKey: entry.stepUpPublicKey,
|
|
129
|
+
label: entry.label,
|
|
130
|
+
platform: entry.platform,
|
|
131
|
+
createdAt: entry.createdAt,
|
|
132
|
+
lastSeenAt: entry.lastSeenAt
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return loaded;
|
|
136
|
+
}
|
|
137
|
+
function writeJson(target, body) {
|
|
138
|
+
const temporary = `${target}.${String(process.pid)}.tmp`;
|
|
139
|
+
try {
|
|
140
|
+
fs.mkdirSync(directory, {
|
|
141
|
+
recursive: true,
|
|
142
|
+
mode: DIRECTORY_MODE
|
|
143
|
+
});
|
|
144
|
+
fs.writeFileSync(temporary, `${JSON.stringify(body, void 0, 2)}\n`, { mode: FILE_MODE });
|
|
145
|
+
fs.renameSync(temporary, target);
|
|
146
|
+
} catch (error) {
|
|
147
|
+
notice(`${target} could not be saved: ${error instanceof Error ? error.message : String(error)}`);
|
|
148
|
+
try {
|
|
149
|
+
fs.rmSync(temporary, { force: true });
|
|
150
|
+
} catch {}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
directory,
|
|
155
|
+
settings: () => current,
|
|
156
|
+
credentials: () => registered,
|
|
157
|
+
saveCredential(credential) {
|
|
158
|
+
registered = [...registered.filter((held) => held.id !== credential.id), credential];
|
|
159
|
+
writeJson(credentialsPath, registered);
|
|
160
|
+
},
|
|
161
|
+
removeCredential(id) {
|
|
162
|
+
const next = registered.filter((held) => held.id !== id);
|
|
163
|
+
if (next.length === registered.length) return false;
|
|
164
|
+
registered = next;
|
|
165
|
+
writeJson(credentialsPath, registered);
|
|
166
|
+
return true;
|
|
167
|
+
},
|
|
168
|
+
trustedDevices: () => trusted,
|
|
169
|
+
saveTrustedDevice(record) {
|
|
170
|
+
const others = trusted.filter((held) => held.id !== record.id);
|
|
171
|
+
if (others.length === trusted.length && trusted.length >= 32) return false;
|
|
172
|
+
trusted = [...others, record];
|
|
173
|
+
writeJson(trustedDevicesPath, trusted);
|
|
174
|
+
return true;
|
|
175
|
+
},
|
|
176
|
+
removeTrustedDevice(id) {
|
|
177
|
+
const next = trusted.filter((held) => held.id !== id);
|
|
178
|
+
if (next.length === trusted.length) return false;
|
|
179
|
+
trusted = next;
|
|
180
|
+
writeJson(trustedDevicesPath, trusted);
|
|
181
|
+
return true;
|
|
182
|
+
},
|
|
183
|
+
save(settings) {
|
|
184
|
+
current = settings;
|
|
185
|
+
writeJson(settingsPath, serializeRemoteAccessSettings(settings));
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//#endregion
|
|
190
|
+
export { createRemoteAccessStore, defaultRemoteStateDir };
|
|
191
|
+
|
|
192
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/remoteAccessStore/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { TRUSTED_DEVICE_LIMIT } from '../../constants/remote';\nimport type { RemoteAccessSettings, TrustedDeviceRecord } from '../../types/remote';\nimport { poHomeDirectory } from '../piSettings';\nimport {\n DEFAULT_REMOTE_SETTINGS,\n parseRemoteAccessSettings,\n serializeRemoteAccessSettings,\n} from '../remoteAccessSettings';\nimport type { StoredCredential } from '../webauthnPolicy';\n\n/** Where the cockpit keeps machine-local state; `po sync` already writes its bundle here. */\nconst STATE_DIRECTORY = 'web';\nconst SETTINGS_FILE = 'remote-access.json';\nconst CREDENTIALS_FILE = 'credentials.json';\nconst TRUSTED_DEVICES_FILE = 'trusted-devices.json';\nconst TRUSTED_DEVICE_PLATFORMS: ReadonlySet<string> = new Set(['ios', 'android']);\nconst STORED_ID = /^[A-Za-z0-9_-]{1,64}$/u;\nconst STORED_KEY = /^[A-Za-z0-9_-]{1,512}$/u;\nconst MAX_STORED_LABEL = 200;\nconst DIRECTORY_MODE = 0o700;\nconst FILE_MODE = 0o600;\n/** Any bit set for group or other; a state file readable by another account is worth repairing. */\nconst LOOSE_MODE_MASK = 0o077;\n\nexport interface RemoteAccessStoreOptions {\n /** Overridden by --state-dir and by tests; the default is ~/.po/web. */\n stateDir?: string;\n onNotice?: (message: string) => void;\n}\n\nexport interface RemoteAccessStore {\n readonly directory: string;\n settings(): RemoteAccessSettings;\n save(settings: RemoteAccessSettings): void;\n /**\n * Registered passkeys. Public keys only, so the file is not a bearer secret\n * and losing it costs a re-enrolment rather than an account.\n */\n credentials(): readonly StoredCredential[];\n saveCredential(credential: StoredCredential): void;\n removeCredential(id: string): boolean;\n /** Registered native devices. Public keys only, at most `TRUSTED_DEVICE_LIMIT`. */\n trustedDevices(): readonly TrustedDeviceRecord[];\n /** Adds or replaces one record by id. False when a new record would exceed the limit. */\n saveTrustedDevice(record: TrustedDeviceRecord): boolean;\n removeTrustedDevice(id: string): boolean;\n}\n\nexport function defaultRemoteStateDir(homeDir: string = os.homedir()): string {\n return path.join(poHomeDirectory(homeDir), STATE_DIRECTORY);\n}\n\n/**\n * Repairs a state file another account can read.\n *\n * Cheap, and it catches the cases a fresh write never would: a file restored\n * from a backup, copied with a permissive umask, or checked out of somewhere it\n * should not have been.\n */\nfunction tightenMode(filePath: string, notice: (message: string) => void): void {\n try {\n if ((fs.statSync(filePath).mode & LOOSE_MODE_MASK) === 0) return;\n fs.chmodSync(filePath, FILE_MODE);\n notice(`tightened permissions on ${filePath}`);\n } catch {\n // The file is missing or unreadable; the caller's own read reports that.\n }\n}\n\n/** Whether one parsed entry is a complete trusted-device record; anything else is dropped. */\nfunction isTrustedDeviceRecord(value: unknown): value is TrustedDeviceRecord {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n return (\n typeof record.id === 'string' &&\n STORED_ID.test(record.id) &&\n typeof record.identityPublicKey === 'string' &&\n STORED_KEY.test(record.identityPublicKey) &&\n typeof record.stepUpPublicKey === 'string' &&\n STORED_KEY.test(record.stepUpPublicKey) &&\n record.identityPublicKey !== record.stepUpPublicKey &&\n typeof record.label === 'string' &&\n record.label.length <= MAX_STORED_LABEL &&\n typeof record.platform === 'string' &&\n TRUSTED_DEVICE_PLATFORMS.has(record.platform) &&\n Number.isFinite(record.createdAt) &&\n Number.isFinite(record.lastSeenAt)\n );\n}\n\n/**\n * Settings and passkeys on disk. Sessions deliberately not.\n *\n * A session is revoked when remote access is switched off, and a hub restart is\n * a switch-off, so persisting one would buy nothing while creating a bearer\n * secret worth stealing. A passkey is the opposite: surviving is its whole\n * point, and what is stored is a public key.\n */\nexport function createRemoteAccessStore(options: RemoteAccessStoreOptions = {}): RemoteAccessStore {\n const directory = options.stateDir ?? defaultRemoteStateDir();\n const notice = options.onNotice ?? ((): void => {});\n const settingsPath = path.join(directory, SETTINGS_FILE);\n const credentialsPath = path.join(directory, CREDENTIALS_FILE);\n const trustedDevicesPath = path.join(directory, TRUSTED_DEVICES_FILE);\n\n let current = load();\n let registered = loadCredentials();\n let trusted = loadTrustedDevices();\n\n function load(): RemoteAccessSettings {\n let raw: string;\n try {\n raw = fs.readFileSync(settingsPath, 'utf8');\n } catch {\n // No file is the normal first run, so this is not worth a notice.\n return DEFAULT_REMOTE_SETTINGS;\n }\n tightenMode(settingsPath, notice);\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n // Left in place rather than rewritten: silently overwriting a file\n // somebody hand-edited is worse than ignoring it for this run.\n notice(`remote access settings at ${settingsPath} are not valid JSON; using defaults`);\n return DEFAULT_REMOTE_SETTINGS;\n }\n const outcome = parseRemoteAccessSettings(parsed);\n for (const warning of outcome.warnings) notice(`remote access settings: ${warning}`);\n return outcome.settings;\n }\n\n function loadCredentials(): StoredCredential[] {\n let raw: string;\n try {\n raw = fs.readFileSync(credentialsPath, 'utf8');\n } catch {\n return [];\n }\n tightenMode(credentialsPath, notice);\n try {\n const parsed: unknown = JSON.parse(raw);\n return Array.isArray(parsed) ? (parsed as StoredCredential[]) : [];\n } catch {\n // Fails closed: a half-readable credential file means enrolling again,\n // not guessing which entries survived.\n notice(`registered passkeys at ${credentialsPath} are not valid JSON; none will load`);\n return [];\n }\n }\n\n function loadTrustedDevices(): TrustedDeviceRecord[] {\n let raw: string;\n try {\n raw = fs.readFileSync(trustedDevicesPath, 'utf8');\n } catch {\n return [];\n }\n tightenMode(trustedDevicesPath, notice);\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n // Fails closed like passkeys: a device signs in only from a record read whole.\n notice(`trusted devices at ${trustedDevicesPath} are not valid JSON; none will load`);\n return [];\n }\n if (!Array.isArray(parsed)) {\n notice(`trusted devices at ${trustedDevicesPath} are not a list; none will load`);\n return [];\n }\n const loaded: TrustedDeviceRecord[] = [];\n for (const entry of parsed) {\n if (!isTrustedDeviceRecord(entry) || loaded.some((held) => held.id === entry.id)) {\n notice(`dropped an invalid trusted device record from ${trustedDevicesPath}`);\n continue;\n }\n if (loaded.length >= TRUSTED_DEVICE_LIMIT) {\n notice(\n `dropped trusted devices beyond the limit of ${String(TRUSTED_DEVICE_LIMIT)} from ${trustedDevicesPath}`,\n );\n break;\n }\n loaded.push({\n id: entry.id,\n identityPublicKey: entry.identityPublicKey,\n stepUpPublicKey: entry.stepUpPublicKey,\n label: entry.label,\n platform: entry.platform,\n createdAt: entry.createdAt,\n lastSeenAt: entry.lastSeenAt,\n });\n }\n return loaded;\n }\n\n function writeJson(target: string, body: unknown): void {\n const temporary = `${target}.${String(process.pid)}.tmp`;\n try {\n fs.mkdirSync(directory, { recursive: true, mode: DIRECTORY_MODE });\n fs.writeFileSync(temporary, `${JSON.stringify(body, undefined, 2)}\\n`, { mode: FILE_MODE });\n // Rename rather than write in place, so a crash mid-write leaves the\n // previous contents rather than a truncated file.\n fs.renameSync(temporary, target);\n } catch (error) {\n notice(`${target} could not be saved: ${error instanceof Error ? error.message : String(error)}`);\n try {\n fs.rmSync(temporary, { force: true });\n } catch {\n // Nothing further to do; the temp file is inert either way.\n }\n }\n }\n\n return {\n directory,\n settings: () => current,\n credentials: () => registered,\n\n saveCredential(credential) {\n registered = [...registered.filter((held) => held.id !== credential.id), credential];\n writeJson(credentialsPath, registered);\n },\n\n removeCredential(id) {\n const next = registered.filter((held) => held.id !== id);\n if (next.length === registered.length) return false;\n registered = next;\n writeJson(credentialsPath, registered);\n return true;\n },\n\n trustedDevices: () => trusted,\n\n saveTrustedDevice(record) {\n const others = trusted.filter((held) => held.id !== record.id);\n if (others.length === trusted.length && trusted.length >= TRUSTED_DEVICE_LIMIT) return false;\n trusted = [...others, record];\n writeJson(trustedDevicesPath, trusted);\n return true;\n },\n\n removeTrustedDevice(id) {\n const next = trusted.filter((held) => held.id !== id);\n if (next.length === trusted.length) return false;\n trusted = next;\n writeJson(trustedDevicesPath, trusted);\n return true;\n },\n\n save(settings) {\n current = settings;\n writeJson(settingsPath, serializeRemoteAccessSettings(settings));\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
const require_remote = require("../../constants/remote.cjs");
|
|
2
|
+
//#region src/services/remoteGuardPolicy/index.ts
|
|
3
|
+
/**
|
|
4
|
+
* Who may do what, on which listener.
|
|
5
|
+
*
|
|
6
|
+
* The cockpit runs one Hono app behind two sockets: a loopback listener that is
|
|
7
|
+
* open to whoever already has an account on the machine, and a tunnel listener
|
|
8
|
+
* that faces the public internet. Every decision here answers one question
|
|
9
|
+
* about one request, with no I/O, so the whole trust boundary is readable in a
|
|
10
|
+
* single sitting and testable without a server.
|
|
11
|
+
*/
|
|
12
|
+
const METHOD_GET = "GET";
|
|
13
|
+
const METHOD_HEAD = "HEAD";
|
|
14
|
+
const METHOD_POST = "POST";
|
|
15
|
+
/** Cloudflare's edge speaks to us on 443, so the Host it forwards may or may not carry the port. */
|
|
16
|
+
const HTTPS_DEFAULT_PORT = "443";
|
|
17
|
+
/**
|
|
18
|
+
* The exact package-owned pairing and PWA bootstrap routes the tunnel listener
|
|
19
|
+
* answers directly. They are matched by string equality, never prefixes or
|
|
20
|
+
* wildcards. A contract test pins the list so additions require review.
|
|
21
|
+
*
|
|
22
|
+
* Passkey sign-in and native device sign-in are public because each creates a
|
|
23
|
+
* session by proving a credential: a passkey, or a registered device identity key.
|
|
24
|
+
* Passkey registration is also direct so the self-contained pairing page can run
|
|
25
|
+
* it, but its handlers require the paired device cookie issued only after host
|
|
26
|
+
* approval. Native device registration is not listed: it is sealed only.
|
|
27
|
+
*/
|
|
28
|
+
const PUBLIC_PAIRING_ROUTES = [
|
|
29
|
+
{
|
|
30
|
+
method: METHOD_GET,
|
|
31
|
+
path: "/"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
method: METHOD_GET,
|
|
35
|
+
path: require_remote.PAIRING_PAGE_ROUTE
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
method: METHOD_GET,
|
|
39
|
+
path: "/manifest.webmanifest"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
method: METHOD_GET,
|
|
43
|
+
path: "/sw.js"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
method: METHOD_GET,
|
|
47
|
+
path: "/pwa/pwa.js"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
method: METHOD_GET,
|
|
51
|
+
path: "/pwa/icon-192.png"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
method: METHOD_GET,
|
|
55
|
+
path: "/pwa/icon-512.png"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
method: METHOD_POST,
|
|
59
|
+
path: require_remote.PAIRING_CLAIM_ROUTE
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
method: METHOD_GET,
|
|
63
|
+
path: require_remote.PAIRING_STATUS_ROUTE
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
method: METHOD_POST,
|
|
67
|
+
path: require_remote.PASSKEY_AUTH_BEGIN_ROUTE
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
method: METHOD_POST,
|
|
71
|
+
path: require_remote.PASSKEY_AUTH_FINISH_ROUTE
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
method: METHOD_POST,
|
|
75
|
+
path: require_remote.PASSKEY_REGISTER_BEGIN_ROUTE
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
method: METHOD_POST,
|
|
79
|
+
path: require_remote.PASSKEY_REGISTER_FINISH_ROUTE
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
method: METHOD_POST,
|
|
83
|
+
path: require_remote.DEVICE_AUTH_CHALLENGE_ROUTE
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
method: METHOD_POST,
|
|
87
|
+
path: require_remote.DEVICE_AUTH_AUTHENTICATE_ROUTE
|
|
88
|
+
}
|
|
89
|
+
];
|
|
90
|
+
/**
|
|
91
|
+
* Whether the tunnel listener may answer this request directly.
|
|
92
|
+
*
|
|
93
|
+
* Session requirements for direct routes are enforced by their exact handlers.
|
|
94
|
+
* `path` must be the value the router matched on, which for Hono is
|
|
95
|
+
* `c.req.path`. That value is percent-decoded, so `/%70air` reaches the `/pair`
|
|
96
|
+
* handler; comparing against a separately parsed pathname would let the guard
|
|
97
|
+
* and the router disagree about the same request, which is how an allowlist
|
|
98
|
+
* turns into a bypass.
|
|
99
|
+
*/
|
|
100
|
+
function isPublicPairingRoute(method, path) {
|
|
101
|
+
const wanted = method.toUpperCase();
|
|
102
|
+
return PUBLIC_PAIRING_ROUTES.some((route) => route.method === wanted && route.path === path);
|
|
103
|
+
}
|
|
104
|
+
/** Normalizes to scheme://host[:port], lowercased. Undefined for anything unparseable, `null` included. */
|
|
105
|
+
function normalizeOrigin(raw) {
|
|
106
|
+
try {
|
|
107
|
+
return new URL(raw).origin.toLowerCase();
|
|
108
|
+
} catch {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function normalizeHost(raw) {
|
|
113
|
+
return raw.trim().toLowerCase();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* What the loopback listener accepts.
|
|
117
|
+
*
|
|
118
|
+
* The port is the one the socket actually bound, not a constant, because the
|
|
119
|
+
* hub takes `--port` and the e2e fixture reserves a random free one. The vite
|
|
120
|
+
* dev server is allowed unconditionally so the documented two-terminal plugin
|
|
121
|
+
* loop keeps working; anything that can bind that port already runs as this
|
|
122
|
+
* user, so the marginal risk is close to nothing.
|
|
123
|
+
*/
|
|
124
|
+
function localOriginPolicy(port, extraOrigins = []) {
|
|
125
|
+
const hosts = /* @__PURE__ */ new Set();
|
|
126
|
+
const origins = /* @__PURE__ */ new Set();
|
|
127
|
+
for (const listenPort of [port, require_remote.WEB_DEV_SERVER_PORT]) for (const name of [
|
|
128
|
+
"127.0.0.1",
|
|
129
|
+
"localhost",
|
|
130
|
+
"[::1]"
|
|
131
|
+
]) {
|
|
132
|
+
const host = `${name}:${String(listenPort)}`;
|
|
133
|
+
hosts.add(host);
|
|
134
|
+
origins.add(`http://${host}`);
|
|
135
|
+
}
|
|
136
|
+
for (const extra of extraOrigins) {
|
|
137
|
+
const normalized = normalizeOrigin(extra);
|
|
138
|
+
if (normalized !== void 0) origins.add(normalized);
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
origins,
|
|
142
|
+
hosts
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/** What the tunnel listener accepts: its own origin and nothing else. */
|
|
146
|
+
function tunnelOriginPolicy(publicOrigin, extraHosts = []) {
|
|
147
|
+
const normalized = normalizeOrigin(publicOrigin);
|
|
148
|
+
if (normalized === void 0) throw new Error(`The tunnel origin "${publicOrigin}" is not a URL.`);
|
|
149
|
+
const host = new URL(normalized).host;
|
|
150
|
+
const hosts = /* @__PURE__ */ new Set([host, `${host}:${HTTPS_DEFAULT_PORT}`]);
|
|
151
|
+
for (const extra of extraHosts) hosts.add(normalizeHost(extra));
|
|
152
|
+
return {
|
|
153
|
+
origins: /* @__PURE__ */ new Set([normalized]),
|
|
154
|
+
hosts
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/** A request with a side effect: anything that is not a plain read, plus every socket upgrade. */
|
|
158
|
+
function isMutating(method, isUpgrade) {
|
|
159
|
+
if (isUpgrade) return true;
|
|
160
|
+
const wanted = method.toUpperCase();
|
|
161
|
+
return wanted !== METHOD_GET && wanted !== METHOD_HEAD;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Whether the request's Origin and Host are ones this listener answers to.
|
|
165
|
+
*
|
|
166
|
+
* The loopback listener is lenient about a missing Origin and strict about one
|
|
167
|
+
* that is present. That asymmetry is deliberate: a browser always sends Origin
|
|
168
|
+
* on a socket handshake and on a cross-origin mutation, which is the attack
|
|
169
|
+
* this closes, while curl, the health probe, and the test harness send none and
|
|
170
|
+
* would break for no security gain. It buys nothing against a local program,
|
|
171
|
+
* which can send whatever it likes, and is not meant to.
|
|
172
|
+
*
|
|
173
|
+
* The tunnel listener requires Origin on anything with a side effect and
|
|
174
|
+
* tolerates its absence only on a plain read, because a top-level navigation
|
|
175
|
+
* (following the scanned link) legitimately sends none.
|
|
176
|
+
*
|
|
177
|
+
* Host is checked on both. On the loopback listener that is the DNS-rebinding
|
|
178
|
+
* defence for a well-known port, and it is the only check a socket upgrade gets
|
|
179
|
+
* at all, since the upgrade path never reaches the node-server host parsing.
|
|
180
|
+
*/
|
|
181
|
+
function originVerdict(input) {
|
|
182
|
+
const policy = input.listener === "local" ? input.local : input.tunnel;
|
|
183
|
+
if (policy === void 0) return "not-ready";
|
|
184
|
+
if (input.host === void 0 || !policy.hosts.has(normalizeHost(input.host))) return "bad-host";
|
|
185
|
+
if (input.origin === void 0) {
|
|
186
|
+
if (input.listener === "local") return "allow";
|
|
187
|
+
return isMutating(input.method, input.isUpgrade) ? "bad-origin" : "allow";
|
|
188
|
+
}
|
|
189
|
+
const origin = normalizeOrigin(input.origin);
|
|
190
|
+
if (origin === void 0 || !policy.origins.has(origin)) return "bad-origin";
|
|
191
|
+
return "allow";
|
|
192
|
+
}
|
|
193
|
+
//#endregion
|
|
194
|
+
exports.PUBLIC_PAIRING_ROUTES = PUBLIC_PAIRING_ROUTES;
|
|
195
|
+
exports.isPublicPairingRoute = isPublicPairingRoute;
|
|
196
|
+
exports.localOriginPolicy = localOriginPolicy;
|
|
197
|
+
exports.originVerdict = originVerdict;
|
|
198
|
+
exports.tunnelOriginPolicy = tunnelOriginPolicy;
|
|
199
|
+
|
|
200
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["PAIRING_PAGE_ROUTE","PAIRING_CLAIM_ROUTE","PAIRING_STATUS_ROUTE","PASSKEY_AUTH_BEGIN_ROUTE","PASSKEY_AUTH_FINISH_ROUTE","PASSKEY_REGISTER_BEGIN_ROUTE","PASSKEY_REGISTER_FINISH_ROUTE","DEVICE_AUTH_CHALLENGE_ROUTE","DEVICE_AUTH_AUTHENTICATE_ROUTE","WEB_DEV_SERVER_PORT"],"sources":["../../../../src/services/remoteGuardPolicy/index.ts"],"sourcesContent":["/**\n * Who may do what, on which listener.\n *\n * The cockpit runs one Hono app behind two sockets: a loopback listener that is\n * open to whoever already has an account on the machine, and a tunnel listener\n * that faces the public internet. Every decision here answers one question\n * about one request, with no I/O, so the whole trust boundary is readable in a\n * single sitting and testable without a server.\n */\n\nimport {\n DEVICE_AUTH_AUTHENTICATE_ROUTE,\n DEVICE_AUTH_CHALLENGE_ROUTE,\n PAIRING_CLAIM_ROUTE,\n PAIRING_PAGE_ROUTE,\n PAIRING_STATUS_ROUTE,\n PASSKEY_AUTH_BEGIN_ROUTE,\n PASSKEY_AUTH_FINISH_ROUTE,\n PASSKEY_REGISTER_BEGIN_ROUTE,\n PASSKEY_REGISTER_FINISH_ROUTE,\n WEB_DEV_SERVER_PORT,\n} from '../../constants/remote';\n\nconst METHOD_GET = 'GET';\nconst METHOD_HEAD = 'HEAD';\nconst METHOD_POST = 'POST';\n/** Cloudflare's edge speaks to us on 443, so the Host it forwards may or may not carry the port. */\nconst HTTPS_DEFAULT_PORT = '443';\n\nexport type GuardListener = 'local' | 'tunnel';\n\nexport type OriginVerdict = 'allow' | 'bad-origin' | 'bad-host' | 'not-ready';\n\nexport interface OriginPolicy {\n origins: ReadonlySet<string>;\n hosts: ReadonlySet<string>;\n}\n\nexport interface OriginVerdictInput {\n listener: GuardListener;\n method: string;\n isUpgrade: boolean;\n origin: string | undefined;\n host: string | undefined;\n local: OriginPolicy;\n /** Undefined until the tunnel reports its hostname; until then nothing on that listener is served. */\n tunnel: OriginPolicy | undefined;\n}\n\n/**\n * Which socket a request arrived on.\n *\n * Phrased as allow-only-if-provably-local on purpose. A missing env, an\n * unreadable port, or a socket torn down mid-request all resolve to 'tunnel'\n * and therefore require a credential. The mirror-image phrasing\n * (`port === tunnelPort`) fails open on every one of those.\n */\nexport function listenerOf(socketLocalPort: number | undefined, loopbackPort: number | undefined): GuardListener {\n if (loopbackPort === undefined || socketLocalPort === undefined) return 'tunnel';\n return socketLocalPort === loopbackPort ? 'local' : 'tunnel';\n}\n\n/**\n * The exact package-owned pairing and PWA bootstrap routes the tunnel listener\n * answers directly. They are matched by string equality, never prefixes or\n * wildcards. A contract test pins the list so additions require review.\n *\n * Passkey sign-in and native device sign-in are public because each creates a\n * session by proving a credential: a passkey, or a registered device identity key.\n * Passkey registration is also direct so the self-contained pairing page can run\n * it, but its handlers require the paired device cookie issued only after host\n * approval. Native device registration is not listed: it is sealed only.\n */\nexport const PUBLIC_PAIRING_ROUTES: readonly { method: string; path: string }[] = [\n { method: METHOD_GET, path: '/' },\n { method: METHOD_GET, path: PAIRING_PAGE_ROUTE },\n { method: METHOD_GET, path: '/manifest.webmanifest' },\n { method: METHOD_GET, path: '/sw.js' },\n { method: METHOD_GET, path: '/pwa/pwa.js' },\n { method: METHOD_GET, path: '/pwa/icon-192.png' },\n { method: METHOD_GET, path: '/pwa/icon-512.png' },\n { method: METHOD_POST, path: PAIRING_CLAIM_ROUTE },\n { method: METHOD_GET, path: PAIRING_STATUS_ROUTE },\n { method: METHOD_POST, path: PASSKEY_AUTH_BEGIN_ROUTE },\n { method: METHOD_POST, path: PASSKEY_AUTH_FINISH_ROUTE },\n { method: METHOD_POST, path: PASSKEY_REGISTER_BEGIN_ROUTE },\n { method: METHOD_POST, path: PASSKEY_REGISTER_FINISH_ROUTE },\n { method: METHOD_POST, path: DEVICE_AUTH_CHALLENGE_ROUTE },\n { method: METHOD_POST, path: DEVICE_AUTH_AUTHENTICATE_ROUTE },\n];\n\n/**\n * Whether the tunnel listener may answer this request directly.\n *\n * Session requirements for direct routes are enforced by their exact handlers.\n * `path` must be the value the router matched on, which for Hono is\n * `c.req.path`. That value is percent-decoded, so `/%70air` reaches the `/pair`\n * handler; comparing against a separately parsed pathname would let the guard\n * and the router disagree about the same request, which is how an allowlist\n * turns into a bypass.\n */\nexport function isPublicPairingRoute(method: string, path: string): boolean {\n const wanted = method.toUpperCase();\n return PUBLIC_PAIRING_ROUTES.some((route) => route.method === wanted && route.path === path);\n}\n\n/**\n * Reads the operator's extra-origin allowlist.\n *\n * The escape hatch for a dev setup this package cannot guess: a second dev\n * server port, a reverse proxy, a `.local` hostname. Comma separated, blanks\n * dropped, so an empty or unset variable adds nothing.\n */\nexport function allowedOriginsFromEnv(raw: string | undefined): readonly string[] {\n if (raw === undefined) return [];\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry !== '');\n}\n\n/** Normalizes to scheme://host[:port], lowercased. Undefined for anything unparseable, `null` included. */\nfunction normalizeOrigin(raw: string): string | undefined {\n try {\n return new URL(raw).origin.toLowerCase();\n } catch {\n // An Origin header that is not a URL is either the opaque `null` or a\n // forgery; neither is on any allowlist, so refusing it is the answer.\n return undefined;\n }\n}\n\nfunction normalizeHost(raw: string): string {\n return raw.trim().toLowerCase();\n}\n\n/**\n * What the loopback listener accepts.\n *\n * The port is the one the socket actually bound, not a constant, because the\n * hub takes `--port` and the e2e fixture reserves a random free one. The vite\n * dev server is allowed unconditionally so the documented two-terminal plugin\n * loop keeps working; anything that can bind that port already runs as this\n * user, so the marginal risk is close to nothing.\n */\nexport function localOriginPolicy(port: number, extraOrigins: readonly string[] = []): OriginPolicy {\n const hosts = new Set<string>();\n const origins = new Set<string>();\n // The dev server's own port belongs here too: vite proxies /api to the hub\n // without `changeOrigin`, so the browser's Host and Origin arrive unchanged\n // and both name 7534 rather than the hub's port.\n for (const listenPort of [port, WEB_DEV_SERVER_PORT]) {\n for (const name of ['127.0.0.1', 'localhost', '[::1]']) {\n const host = `${name}:${String(listenPort)}`;\n hosts.add(host);\n origins.add(`http://${host}`);\n }\n }\n for (const extra of extraOrigins) {\n const normalized = normalizeOrigin(extra);\n if (normalized !== undefined) origins.add(normalized);\n }\n return { origins, hosts };\n}\n\n/** What the tunnel listener accepts: its own origin and nothing else. */\nexport function tunnelOriginPolicy(publicOrigin: string, extraHosts: readonly string[] = []): OriginPolicy {\n const normalized = normalizeOrigin(publicOrigin);\n if (normalized === undefined) throw new Error(`The tunnel origin \"${publicOrigin}\" is not a URL.`);\n const host = new URL(normalized).host;\n const hosts = new Set([host, `${host}:${HTTPS_DEFAULT_PORT}`]);\n for (const extra of extraHosts) hosts.add(normalizeHost(extra));\n return { origins: new Set([normalized]), hosts };\n}\n\n/** A request with a side effect: anything that is not a plain read, plus every socket upgrade. */\nfunction isMutating(method: string, isUpgrade: boolean): boolean {\n if (isUpgrade) return true;\n const wanted = method.toUpperCase();\n return wanted !== METHOD_GET && wanted !== METHOD_HEAD;\n}\n\n/**\n * Whether the request's Origin and Host are ones this listener answers to.\n *\n * The loopback listener is lenient about a missing Origin and strict about one\n * that is present. That asymmetry is deliberate: a browser always sends Origin\n * on a socket handshake and on a cross-origin mutation, which is the attack\n * this closes, while curl, the health probe, and the test harness send none and\n * would break for no security gain. It buys nothing against a local program,\n * which can send whatever it likes, and is not meant to.\n *\n * The tunnel listener requires Origin on anything with a side effect and\n * tolerates its absence only on a plain read, because a top-level navigation\n * (following the scanned link) legitimately sends none.\n *\n * Host is checked on both. On the loopback listener that is the DNS-rebinding\n * defence for a well-known port, and it is the only check a socket upgrade gets\n * at all, since the upgrade path never reaches the node-server host parsing.\n */\nexport function originVerdict(input: OriginVerdictInput): OriginVerdict {\n const policy = input.listener === 'local' ? input.local : input.tunnel;\n // Before the tunnel names itself there is no legitimate traffic to serve and\n // no origin to compare against, so the listener answers nothing at all.\n if (policy === undefined) return 'not-ready';\n\n if (input.host === undefined || !policy.hosts.has(normalizeHost(input.host))) return 'bad-host';\n\n if (input.origin === undefined) {\n if (input.listener === 'local') return 'allow';\n return isMutating(input.method, input.isUpgrade) ? 'bad-origin' : 'allow';\n }\n\n const origin = normalizeOrigin(input.origin);\n if (origin === undefined || !policy.origins.has(origin)) return 'bad-origin';\n return 'allow';\n}\n"],"mappings":";;;;;;;;;;;AAuBA,MAAM,aAAa;AACnB,MAAM,cAAc;AACpB,MAAM,cAAc;;AAEpB,MAAM,qBAAqB;;;;;;;;;;;;AA8C3B,MAAa,wBAAqE;CAChF;EAAE,QAAQ;EAAY,MAAM;CAAI;CAChC;EAAE,QAAQ;EAAY,MAAMA,eAAAA;CAAmB;CAC/C;EAAE,QAAQ;EAAY,MAAM;CAAwB;CACpD;EAAE,QAAQ;EAAY,MAAM;CAAS;CACrC;EAAE,QAAQ;EAAY,MAAM;CAAc;CAC1C;EAAE,QAAQ;EAAY,MAAM;CAAoB;CAChD;EAAE,QAAQ;EAAY,MAAM;CAAoB;CAChD;EAAE,QAAQ;EAAa,MAAMC,eAAAA;CAAoB;CACjD;EAAE,QAAQ;EAAY,MAAMC,eAAAA;CAAqB;CACjD;EAAE,QAAQ;EAAa,MAAMC,eAAAA;CAAyB;CACtD;EAAE,QAAQ;EAAa,MAAMC,eAAAA;CAA0B;CACvD;EAAE,QAAQ;EAAa,MAAMC,eAAAA;CAA6B;CAC1D;EAAE,QAAQ;EAAa,MAAMC,eAAAA;CAA8B;CAC3D;EAAE,QAAQ;EAAa,MAAMC,eAAAA;CAA4B;CACzD;EAAE,QAAQ;EAAa,MAAMC,eAAAA;CAA+B;AAC9D;;;;;;;;;;;AAYA,SAAgB,qBAAqB,QAAgB,MAAuB;CAC1E,MAAM,SAAS,OAAO,YAAY;CAClC,OAAO,sBAAsB,MAAM,UAAU,MAAM,WAAW,UAAU,MAAM,SAAS,IAAI;AAC7F;;AAkBA,SAAS,gBAAgB,KAAiC;CACxD,IAAI;EACF,OAAO,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,YAAY;CACzC,QAAQ;EAGN;CACF;AACF;AAEA,SAAS,cAAc,KAAqB;CAC1C,OAAO,IAAI,KAAK,CAAC,CAAC,YAAY;AAChC;;;;;;;;;;AAWA,SAAgB,kBAAkB,MAAc,eAAkC,CAAC,GAAiB;CAClG,MAAM,wBAAQ,IAAI,IAAY;CAC9B,MAAM,0BAAU,IAAI,IAAY;CAIhC,KAAK,MAAM,cAAc,CAAC,MAAMC,eAAAA,mBAAmB,GACjD,KAAK,MAAM,QAAQ;EAAC;EAAa;EAAa;CAAO,GAAG;EACtD,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,UAAU;EACzC,MAAM,IAAI,IAAI;EACd,QAAQ,IAAI,UAAU,MAAM;CAC9B;CAEF,KAAK,MAAM,SAAS,cAAc;EAChC,MAAM,aAAa,gBAAgB,KAAK;EACxC,IAAI,eAAe,KAAA,GAAW,QAAQ,IAAI,UAAU;CACtD;CACA,OAAO;EAAE;EAAS;CAAM;AAC1B;;AAGA,SAAgB,mBAAmB,cAAsB,aAAgC,CAAC,GAAiB;CACzG,MAAM,aAAa,gBAAgB,YAAY;CAC/C,IAAI,eAAe,KAAA,GAAW,MAAM,IAAI,MAAM,sBAAsB,aAAa,gBAAgB;CACjG,MAAM,OAAO,IAAI,IAAI,UAAU,CAAC,CAAC;CACjC,MAAM,wBAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,oBAAoB,CAAC;CAC7D,KAAK,MAAM,SAAS,YAAY,MAAM,IAAI,cAAc,KAAK,CAAC;CAC9D,OAAO;EAAE,yBAAS,IAAI,IAAI,CAAC,UAAU,CAAC;EAAG;CAAM;AACjD;;AAGA,SAAS,WAAW,QAAgB,WAA6B;CAC/D,IAAI,WAAW,OAAO;CACtB,MAAM,SAAS,OAAO,YAAY;CAClC,OAAO,WAAW,cAAc,WAAW;AAC7C;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,cAAc,OAA0C;CACtE,MAAM,SAAS,MAAM,aAAa,UAAU,MAAM,QAAQ,MAAM;CAGhE,IAAI,WAAW,KAAA,GAAW,OAAO;CAEjC,IAAI,MAAM,SAAS,KAAA,KAAa,CAAC,OAAO,MAAM,IAAI,cAAc,MAAM,IAAI,CAAC,GAAG,OAAO;CAErF,IAAI,MAAM,WAAW,KAAA,GAAW;EAC9B,IAAI,MAAM,aAAa,SAAS,OAAO;EACvC,OAAO,WAAW,MAAM,QAAQ,MAAM,SAAS,IAAI,eAAe;CACpE;CAEA,MAAM,SAAS,gBAAgB,MAAM,MAAM;CAC3C,IAAI,WAAW,KAAA,KAAa,CAAC,OAAO,QAAQ,IAAI,MAAM,GAAG,OAAO;CAChE,OAAO;AACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/remoteGuardPolicy/index.ts"],"mappings":";iBAiCiB;EACf,SAAS;EACT,OAAO"}
|