@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,282 @@
|
|
|
1
|
+
import { DEVICE_AUTH_CHALLENGE_TTL_MS, DEVICE_CHALLENGE_LIMIT, DEVICE_STEP_UP_CHALLENGE_TTL_MS, DEVICE_STEP_UP_TAG } from "../../constants/remote.mjs";
|
|
2
|
+
import { sanitizeUserAgent } from "../deviceSessions/index.mjs";
|
|
3
|
+
import { isStepUpAction } from "../webauthnPolicy/index.mjs";
|
|
4
|
+
import { createPublicKey, randomBytes } from "node:crypto";
|
|
5
|
+
import { verifyDeviceSignature } from "@agimon-ai/po-web-security/node";
|
|
6
|
+
//#region src/services/deviceTrust/index.ts
|
|
7
|
+
/**
|
|
8
|
+
* Native device trust: message layout, key checks, and single-use challenges.
|
|
9
|
+
*
|
|
10
|
+
* A phone paired by QR registers two P-256 keys over the sealed gateway: an
|
|
11
|
+
* identity key that signs silent reconnects, and a step-up key that only
|
|
12
|
+
* biometrics unlock. Every signed message is `tag + "\n" + JSON.stringify(fields)`
|
|
13
|
+
* with the fields in the fixed order below, so the phone and the host build the
|
|
14
|
+
* same bytes and no message can be passed off as another or as a manifest.
|
|
15
|
+
*
|
|
16
|
+
* No I/O and no hidden clock: the caller passes the clock, the challenge store,
|
|
17
|
+
* and the record lookup, so every rule here is testable without a server.
|
|
18
|
+
*/
|
|
19
|
+
/** Challenges and nonces are 32 random bytes, which is 43 base64url characters. */
|
|
20
|
+
const RANDOM_BYTES = 32;
|
|
21
|
+
const RANDOM_VALUE = /^[A-Za-z0-9_-]{43}$/u;
|
|
22
|
+
const CHALLENGE_ID_BYTES = 16;
|
|
23
|
+
/** Opaque ids: trusted device ids, session device ids, and challenge ids. */
|
|
24
|
+
const OPAQUE_ID = /^[A-Za-z0-9_-]{1,64}$/u;
|
|
25
|
+
const MAX_SPKI_LENGTH = 512;
|
|
26
|
+
const MAX_CHANNEL_KEY_LENGTH = 128;
|
|
27
|
+
const MAX_SIGNATURE_LENGTH = 128;
|
|
28
|
+
const BASE64URL = /^[A-Za-z0-9_-]+$/u;
|
|
29
|
+
const P256_CURVE = "prime256v1";
|
|
30
|
+
const PLATFORMS = /* @__PURE__ */ new Set(["ios", "android"]);
|
|
31
|
+
function isRecord(value) {
|
|
32
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
33
|
+
}
|
|
34
|
+
function isBase64Url(value, maximum) {
|
|
35
|
+
return typeof value === "string" && value.length > 0 && value.length <= maximum && BASE64URL.test(value);
|
|
36
|
+
}
|
|
37
|
+
function ttlOf(purpose) {
|
|
38
|
+
return purpose.kind === "auth" ? DEVICE_AUTH_CHALLENGE_TTL_MS : DEVICE_STEP_UP_CHALLENGE_TTL_MS;
|
|
39
|
+
}
|
|
40
|
+
/** `po/host-channel-key/v1`, signed by the host bundle signer. */
|
|
41
|
+
function hostChannelKeyFields(origin, hostPublicKey, deviceNonce) {
|
|
42
|
+
return [
|
|
43
|
+
origin,
|
|
44
|
+
hostPublicKey,
|
|
45
|
+
deviceNonce
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
/** `po/device-register/v1`, signed by the identity key and separately by the step-up key. */
|
|
49
|
+
function deviceRegisterFields(input) {
|
|
50
|
+
return [
|
|
51
|
+
input.origin,
|
|
52
|
+
input.hostPublicKey,
|
|
53
|
+
input.sessionDeviceId,
|
|
54
|
+
input.identityPublicKey,
|
|
55
|
+
input.stepUpPublicKey,
|
|
56
|
+
input.platform
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
/** `po/device-auth/v1`, signed by the identity key. All three channel keys are covered. */
|
|
60
|
+
function deviceAuthFields(input) {
|
|
61
|
+
return [
|
|
62
|
+
input.origin,
|
|
63
|
+
input.challenge,
|
|
64
|
+
input.hostPublicKey,
|
|
65
|
+
input.trustedDeviceId,
|
|
66
|
+
input.channels.session,
|
|
67
|
+
input.channels.protocol,
|
|
68
|
+
input.channels.http
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
/** `po/device-step-up/v1`, signed by the biometric step-up key. */
|
|
72
|
+
function deviceStepUpFields(input) {
|
|
73
|
+
return [
|
|
74
|
+
input.origin,
|
|
75
|
+
input.action,
|
|
76
|
+
input.sessionDeviceId,
|
|
77
|
+
input.challengeId,
|
|
78
|
+
input.challenge
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
/** Whether a value is a base64url DER SPKI for an EC P-256 public key, the only kind a device may register. */
|
|
82
|
+
function isP256PublicKey(value) {
|
|
83
|
+
if (!isBase64Url(value, MAX_SPKI_LENGTH)) return false;
|
|
84
|
+
try {
|
|
85
|
+
const key = createPublicKey({
|
|
86
|
+
key: Buffer.from(value, "base64url"),
|
|
87
|
+
format: "der",
|
|
88
|
+
type: "spki"
|
|
89
|
+
});
|
|
90
|
+
return key.asymmetricKeyType === "ec" && key.asymmetricKeyDetails?.namedCurve === P256_CURVE;
|
|
91
|
+
} catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Whether a value is a fresh-looking 32-byte base64url nonce. */
|
|
96
|
+
function isDeviceNonce(value) {
|
|
97
|
+
return typeof value === "string" && RANDOM_VALUE.test(value);
|
|
98
|
+
}
|
|
99
|
+
function isOpaqueId(value) {
|
|
100
|
+
return typeof value === "string" && OPAQUE_ID.test(value);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Single-use challenges, bounded in count and lifetime.
|
|
104
|
+
*
|
|
105
|
+
* Deleted on first `take`, whatever the outcome of the check that follows, so a
|
|
106
|
+
* challenge cannot be retried. Expired entries are swept on every issue, and the
|
|
107
|
+
* oldest entry goes when the store is full.
|
|
108
|
+
*/
|
|
109
|
+
function createDeviceChallenges(options) {
|
|
110
|
+
const random = options.random ?? ((bytes) => randomBytes(bytes).toString("base64url"));
|
|
111
|
+
const pending = /* @__PURE__ */ new Map();
|
|
112
|
+
const live = (entry, at) => at - entry.issuedAt < ttlOf(entry.purpose);
|
|
113
|
+
return {
|
|
114
|
+
issue(hostPublicKey, purpose) {
|
|
115
|
+
const at = options.now();
|
|
116
|
+
for (const [id, entry] of pending) if (!live(entry, at)) pending.delete(id);
|
|
117
|
+
while (pending.size >= DEVICE_CHALLENGE_LIMIT) {
|
|
118
|
+
const oldest = pending.keys().next().value;
|
|
119
|
+
if (oldest === void 0) break;
|
|
120
|
+
pending.delete(oldest);
|
|
121
|
+
}
|
|
122
|
+
const entry = {
|
|
123
|
+
id: random(CHALLENGE_ID_BYTES),
|
|
124
|
+
challenge: random(RANDOM_BYTES),
|
|
125
|
+
hostPublicKey,
|
|
126
|
+
issuedAt: at,
|
|
127
|
+
purpose
|
|
128
|
+
};
|
|
129
|
+
pending.set(entry.id, entry);
|
|
130
|
+
return entry;
|
|
131
|
+
},
|
|
132
|
+
take(id) {
|
|
133
|
+
const entry = pending.get(id);
|
|
134
|
+
if (entry === void 0) return void 0;
|
|
135
|
+
pending.delete(id);
|
|
136
|
+
return live(entry, options.now()) ? entry : void 0;
|
|
137
|
+
},
|
|
138
|
+
dropWhere(predicate) {
|
|
139
|
+
for (const [id, entry] of pending) if (predicate(entry)) pending.delete(id);
|
|
140
|
+
},
|
|
141
|
+
clear: () => pending.clear(),
|
|
142
|
+
size: () => pending.size
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The public reconnect challenge.
|
|
147
|
+
*
|
|
148
|
+
* It never consults the trusted-device list, so a known id and an unknown one
|
|
149
|
+
* produce the same shape and the route cannot be used to enumerate devices.
|
|
150
|
+
* The attestation proves the fresh tunnel key with the signer the phone pinned
|
|
151
|
+
* at pairing, over the phone's own nonce. Undefined while the host cannot attest.
|
|
152
|
+
*/
|
|
153
|
+
function deviceAuthChallenge(input) {
|
|
154
|
+
const attestation = input.attest(hostChannelKeyFields(input.origin, input.hostPublicKey, input.nonce));
|
|
155
|
+
if (attestation === void 0) return void 0;
|
|
156
|
+
const issued = input.challenges.issue(input.hostPublicKey, {
|
|
157
|
+
kind: "auth",
|
|
158
|
+
trustedDeviceId: input.trustedDeviceId
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
challengeId: issued.id,
|
|
162
|
+
challenge: issued.challenge,
|
|
163
|
+
hostPublicKey: input.hostPublicKey,
|
|
164
|
+
attestation
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/** A step-up challenge bound to one action and one session, answered by the biometric key. */
|
|
168
|
+
function deviceStepUpChallenge(input) {
|
|
169
|
+
const issued = input.challenges.issue(input.hostPublicKey, {
|
|
170
|
+
kind: "step-up",
|
|
171
|
+
sessionDeviceId: input.sessionDeviceId,
|
|
172
|
+
action: input.action
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
ceremonyId: issued.id,
|
|
176
|
+
challenge: issued.challenge,
|
|
177
|
+
kind: "device-key"
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Checks a registration from a sealed `pairing` session.
|
|
182
|
+
*
|
|
183
|
+
* Both keys must be distinct P-256 SPKIs and both must sign the same
|
|
184
|
+
* `po/device-register/v1` message, which binds them to this origin, this
|
|
185
|
+
* tunnel key, and this exact session.
|
|
186
|
+
*/
|
|
187
|
+
function verifyRegistration(input) {
|
|
188
|
+
if (input.trust?.kind !== "pairing") return {
|
|
189
|
+
ok: false,
|
|
190
|
+
reason: "not-pairing"
|
|
191
|
+
};
|
|
192
|
+
const body = input.body;
|
|
193
|
+
if (!isRecord(body)) return {
|
|
194
|
+
ok: false,
|
|
195
|
+
reason: "invalid"
|
|
196
|
+
};
|
|
197
|
+
const { identityPublicKey, stepUpPublicKey, label, platform, identityProof, stepUpProof } = body;
|
|
198
|
+
if (!isP256PublicKey(identityPublicKey) || !isP256PublicKey(stepUpPublicKey) || identityPublicKey === stepUpPublicKey || typeof label !== "string" || typeof platform !== "string" || !PLATFORMS.has(platform) || !isBase64Url(identityProof, MAX_SIGNATURE_LENGTH) || !isBase64Url(stepUpProof, MAX_SIGNATURE_LENGTH)) return {
|
|
199
|
+
ok: false,
|
|
200
|
+
reason: "invalid"
|
|
201
|
+
};
|
|
202
|
+
const fields = deviceRegisterFields({
|
|
203
|
+
origin: input.origin,
|
|
204
|
+
hostPublicKey: input.hostPublicKey,
|
|
205
|
+
sessionDeviceId: input.sessionDeviceId,
|
|
206
|
+
identityPublicKey,
|
|
207
|
+
stepUpPublicKey,
|
|
208
|
+
platform
|
|
209
|
+
});
|
|
210
|
+
if (!verifyDeviceSignature(identityPublicKey, "po/device-register/v1", fields, identityProof) || !verifyDeviceSignature(stepUpPublicKey, "po/device-register/v1", fields, stepUpProof)) return {
|
|
211
|
+
ok: false,
|
|
212
|
+
reason: "invalid"
|
|
213
|
+
};
|
|
214
|
+
return {
|
|
215
|
+
ok: true,
|
|
216
|
+
identityPublicKey,
|
|
217
|
+
stepUpPublicKey,
|
|
218
|
+
label: sanitizeUserAgent(label),
|
|
219
|
+
platform
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
function channelKeysOf(value) {
|
|
223
|
+
if (!isRecord(value)) return void 0;
|
|
224
|
+
const { session, protocol, http } = value;
|
|
225
|
+
if (!isBase64Url(session, MAX_CHANNEL_KEY_LENGTH) || !isBase64Url(protocol, MAX_CHANNEL_KEY_LENGTH) || !isBase64Url(http, MAX_CHANNEL_KEY_LENGTH)) return void 0;
|
|
226
|
+
if (session === protocol || session === http || protocol === http) return void 0;
|
|
227
|
+
return {
|
|
228
|
+
session,
|
|
229
|
+
protocol,
|
|
230
|
+
http
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Checks a device sign-in. The challenge is consumed before anything else is
|
|
235
|
+
* looked at, so every attempt, good or bad, burns it.
|
|
236
|
+
*/
|
|
237
|
+
function verifyAuthentication(input) {
|
|
238
|
+
const body = input.body;
|
|
239
|
+
if (!isRecord(body) || !isOpaqueId(body.challengeId)) return { ok: false };
|
|
240
|
+
const issued = input.challenges.take(body.challengeId);
|
|
241
|
+
if (issued === void 0 || issued.purpose.kind !== "auth") return { ok: false };
|
|
242
|
+
if (input.hostPublicKey === void 0 || issued.hostPublicKey !== input.hostPublicKey) return { ok: false };
|
|
243
|
+
if (!isOpaqueId(body.trustedDeviceId) || body.trustedDeviceId !== issued.purpose.trustedDeviceId) return { ok: false };
|
|
244
|
+
if (!isBase64Url(body.signature, MAX_SIGNATURE_LENGTH)) return { ok: false };
|
|
245
|
+
const channels = channelKeysOf(body.channels);
|
|
246
|
+
if (channels === void 0) return { ok: false };
|
|
247
|
+
const record = input.find(body.trustedDeviceId);
|
|
248
|
+
if (record === void 0) return { ok: false };
|
|
249
|
+
const fields = deviceAuthFields({
|
|
250
|
+
origin: input.origin,
|
|
251
|
+
challenge: issued.challenge,
|
|
252
|
+
hostPublicKey: issued.hostPublicKey,
|
|
253
|
+
trustedDeviceId: record.id,
|
|
254
|
+
channels
|
|
255
|
+
});
|
|
256
|
+
if (!verifyDeviceSignature(record.identityPublicKey, "po/device-auth/v1", fields, body.signature)) return { ok: false };
|
|
257
|
+
return {
|
|
258
|
+
ok: true,
|
|
259
|
+
record,
|
|
260
|
+
channels
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/** Checks a biometric step-up signature for one action from one device-key session. */
|
|
264
|
+
function verifyStepUp(input) {
|
|
265
|
+
if (!isOpaqueId(input.ceremonyId) || !isStepUpAction(input.action)) return false;
|
|
266
|
+
const issued = input.challenges.take(input.ceremonyId);
|
|
267
|
+
if (issued === void 0 || issued.purpose.kind !== "step-up") return false;
|
|
268
|
+
if (input.hostPublicKey === void 0 || issued.hostPublicKey !== input.hostPublicKey) return false;
|
|
269
|
+
if (issued.purpose.sessionDeviceId !== input.sessionDeviceId || issued.purpose.action !== input.action) return false;
|
|
270
|
+
if (!isBase64Url(input.signature, MAX_SIGNATURE_LENGTH)) return false;
|
|
271
|
+
return verifyDeviceSignature(input.stepUpPublicKey, DEVICE_STEP_UP_TAG, deviceStepUpFields({
|
|
272
|
+
origin: input.origin,
|
|
273
|
+
action: input.action,
|
|
274
|
+
sessionDeviceId: input.sessionDeviceId,
|
|
275
|
+
challengeId: issued.id,
|
|
276
|
+
challenge: issued.challenge
|
|
277
|
+
}), input.signature);
|
|
278
|
+
}
|
|
279
|
+
//#endregion
|
|
280
|
+
export { createDeviceChallenges, deviceAuthChallenge, deviceAuthFields, deviceRegisterFields, deviceStepUpChallenge, deviceStepUpFields, hostChannelKeyFields, isDeviceNonce, isOpaqueId, isP256PublicKey, verifyAuthentication, verifyRegistration, verifyStepUp };
|
|
281
|
+
|
|
282
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/deviceTrust/index.ts"],"sourcesContent":["/**\n * Native device trust: message layout, key checks, and single-use challenges.\n *\n * A phone paired by QR registers two P-256 keys over the sealed gateway: an\n * identity key that signs silent reconnects, and a step-up key that only\n * biometrics unlock. Every signed message is `tag + \"\\n\" + JSON.stringify(fields)`\n * with the fields in the fixed order below, so the phone and the host build the\n * same bytes and no message can be passed off as another or as a manifest.\n *\n * No I/O and no hidden clock: the caller passes the clock, the challenge store,\n * and the record lookup, so every rule here is testable without a server.\n */\n\nimport { createPublicKey, randomBytes } from 'node:crypto';\n\nimport { verifyDeviceSignature } from '@agimon-ai/po-web-security/node';\n\nimport {\n DEVICE_AUTH_CHALLENGE_TTL_MS,\n DEVICE_AUTH_TAG,\n DEVICE_CHALLENGE_LIMIT,\n DEVICE_REGISTER_TAG,\n DEVICE_STEP_UP_CHALLENGE_TTL_MS,\n DEVICE_STEP_UP_TAG,\n} from '../../constants/remote';\nimport type { DeviceTrust, TrustedDevicePlatform, TrustedDeviceRecord } from '../../types/remote';\nimport { sanitizeUserAgent } from '../deviceSessions';\nimport { isStepUpAction, type StepUpAction } from '../webauthnPolicy';\n\n/** Challenges and nonces are 32 random bytes, which is 43 base64url characters. */\nconst RANDOM_BYTES = 32;\nconst RANDOM_VALUE = /^[A-Za-z0-9_-]{43}$/u;\nconst CHALLENGE_ID_BYTES = 16;\n/** Opaque ids: trusted device ids, session device ids, and challenge ids. */\nconst OPAQUE_ID = /^[A-Za-z0-9_-]{1,64}$/u;\nconst MAX_SPKI_LENGTH = 512;\nconst MAX_CHANNEL_KEY_LENGTH = 128;\nconst MAX_SIGNATURE_LENGTH = 128;\nconst BASE64URL = /^[A-Za-z0-9_-]+$/u;\nconst P256_CURVE = 'prime256v1';\nconst PLATFORMS: ReadonlySet<string> = new Set<TrustedDevicePlatform>(['ios', 'android']);\n\nexport type DeviceChallengePurpose =\n | { kind: 'auth'; trustedDeviceId: string }\n | { kind: 'step-up'; sessionDeviceId: string; action: StepUpAction };\n\nexport interface DeviceChallenge {\n id: string;\n challenge: string;\n /** The tunnel key in force when the challenge was issued; it must still be the current one. */\n hostPublicKey: string;\n issuedAt: number;\n purpose: DeviceChallengePurpose;\n}\n\nexport interface DeviceChallenges {\n issue(hostPublicKey: string, purpose: DeviceChallengePurpose): DeviceChallenge;\n /** Removes and returns a live challenge. Undefined when unknown, already used, or expired. */\n take(id: string): DeviceChallenge | undefined;\n /** Drops every challenge the predicate selects, such as those of a revoked device. */\n dropWhere(predicate: (challenge: DeviceChallenge) => boolean): void;\n clear(): void;\n size(): number;\n}\n\nexport interface DeviceChallengesOptions {\n now: () => number;\n /** Base64url random value of the given byte length; injectable for tests. */\n random?: (bytes: number) => string;\n}\n\nexport interface DeviceChannelKeys {\n session: string;\n protocol: string;\n http: string;\n}\n\nexport type RegistrationVerdict =\n | {\n ok: true;\n identityPublicKey: string;\n stepUpPublicKey: string;\n label: string;\n platform: TrustedDevicePlatform;\n }\n | { ok: false; reason: 'not-pairing' | 'invalid' };\n\nexport type AuthenticationVerdict =\n | { ok: true; record: TrustedDeviceRecord; channels: DeviceChannelKeys }\n | { ok: false };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isBase64Url(value: unknown, maximum: number): value is string {\n return typeof value === 'string' && value.length > 0 && value.length <= maximum && BASE64URL.test(value);\n}\n\nfunction ttlOf(purpose: DeviceChallengePurpose): number {\n return purpose.kind === 'auth' ? DEVICE_AUTH_CHALLENGE_TTL_MS : DEVICE_STEP_UP_CHALLENGE_TTL_MS;\n}\n\n/** `po/host-channel-key/v1`, signed by the host bundle signer. */\nexport function hostChannelKeyFields(origin: string, hostPublicKey: string, deviceNonce: string): string[] {\n return [origin, hostPublicKey, deviceNonce];\n}\n\n/** `po/device-register/v1`, signed by the identity key and separately by the step-up key. */\nexport function deviceRegisterFields(input: {\n origin: string;\n hostPublicKey: string;\n sessionDeviceId: string;\n identityPublicKey: string;\n stepUpPublicKey: string;\n platform: string;\n}): string[] {\n return [\n input.origin,\n input.hostPublicKey,\n input.sessionDeviceId,\n input.identityPublicKey,\n input.stepUpPublicKey,\n input.platform,\n ];\n}\n\n/** `po/device-auth/v1`, signed by the identity key. All three channel keys are covered. */\nexport function deviceAuthFields(input: {\n origin: string;\n challenge: string;\n hostPublicKey: string;\n trustedDeviceId: string;\n channels: DeviceChannelKeys;\n}): string[] {\n return [\n input.origin,\n input.challenge,\n input.hostPublicKey,\n input.trustedDeviceId,\n input.channels.session,\n input.channels.protocol,\n input.channels.http,\n ];\n}\n\n/** `po/device-step-up/v1`, signed by the biometric step-up key. */\nexport function deviceStepUpFields(input: {\n origin: string;\n action: string;\n sessionDeviceId: string;\n challengeId: string;\n challenge: string;\n}): string[] {\n return [input.origin, input.action, input.sessionDeviceId, input.challengeId, input.challenge];\n}\n\n/** Whether a value is a base64url DER SPKI for an EC P-256 public key, the only kind a device may register. */\nexport function isP256PublicKey(value: unknown): value is string {\n if (!isBase64Url(value, MAX_SPKI_LENGTH)) return false;\n try {\n const key = createPublicKey({ key: Buffer.from(value, 'base64url'), format: 'der', type: 'spki' });\n return key.asymmetricKeyType === 'ec' && key.asymmetricKeyDetails?.namedCurve === P256_CURVE;\n } catch {\n // Not a parseable SPKI, which is the answer: refuse it.\n return false;\n }\n}\n\n/** Whether a value is a fresh-looking 32-byte base64url nonce. */\nexport function isDeviceNonce(value: unknown): value is string {\n return typeof value === 'string' && RANDOM_VALUE.test(value);\n}\n\nexport function isOpaqueId(value: unknown): value is string {\n return typeof value === 'string' && OPAQUE_ID.test(value);\n}\n\n/**\n * Single-use challenges, bounded in count and lifetime.\n *\n * Deleted on first `take`, whatever the outcome of the check that follows, so a\n * challenge cannot be retried. Expired entries are swept on every issue, and the\n * oldest entry goes when the store is full.\n */\nexport function createDeviceChallenges(options: DeviceChallengesOptions): DeviceChallenges {\n const random = options.random ?? ((bytes: number): string => randomBytes(bytes).toString('base64url'));\n const pending = new Map<string, DeviceChallenge>();\n const live = (entry: DeviceChallenge, at: number): boolean => at - entry.issuedAt < ttlOf(entry.purpose);\n\n return {\n issue(hostPublicKey, purpose) {\n const at = options.now();\n for (const [id, entry] of pending) if (!live(entry, at)) pending.delete(id);\n while (pending.size >= DEVICE_CHALLENGE_LIMIT) {\n const oldest = pending.keys().next().value;\n if (oldest === undefined) break;\n pending.delete(oldest);\n }\n const entry: DeviceChallenge = {\n id: random(CHALLENGE_ID_BYTES),\n challenge: random(RANDOM_BYTES),\n hostPublicKey,\n issuedAt: at,\n purpose,\n };\n pending.set(entry.id, entry);\n return entry;\n },\n\n take(id) {\n const entry = pending.get(id);\n if (entry === undefined) return undefined;\n pending.delete(id);\n return live(entry, options.now()) ? entry : undefined;\n },\n\n dropWhere(predicate) {\n for (const [id, entry] of pending) if (predicate(entry)) pending.delete(id);\n },\n\n clear: () => pending.clear(),\n size: () => pending.size,\n };\n}\n\n/**\n * The public reconnect challenge.\n *\n * It never consults the trusted-device list, so a known id and an unknown one\n * produce the same shape and the route cannot be used to enumerate devices.\n * The attestation proves the fresh tunnel key with the signer the phone pinned\n * at pairing, over the phone's own nonce. Undefined while the host cannot attest.\n */\nexport function deviceAuthChallenge(input: {\n challenges: DeviceChallenges;\n trustedDeviceId: string;\n nonce: string;\n origin: string;\n hostPublicKey: string;\n attest: (fields: readonly string[]) => string | undefined;\n}): { challengeId: string; challenge: string; hostPublicKey: string; attestation: string } | undefined {\n const attestation = input.attest(hostChannelKeyFields(input.origin, input.hostPublicKey, input.nonce));\n if (attestation === undefined) return undefined;\n const issued = input.challenges.issue(input.hostPublicKey, { kind: 'auth', trustedDeviceId: input.trustedDeviceId });\n return { challengeId: issued.id, challenge: issued.challenge, hostPublicKey: input.hostPublicKey, attestation };\n}\n\n/** A step-up challenge bound to one action and one session, answered by the biometric key. */\nexport function deviceStepUpChallenge(input: {\n challenges: DeviceChallenges;\n sessionDeviceId: string;\n action: StepUpAction;\n hostPublicKey: string;\n}): { ceremonyId: string; challenge: string; kind: 'device-key' } {\n const issued = input.challenges.issue(input.hostPublicKey, {\n kind: 'step-up',\n sessionDeviceId: input.sessionDeviceId,\n action: input.action,\n });\n return { ceremonyId: issued.id, challenge: issued.challenge, kind: 'device-key' };\n}\n\n/**\n * Checks a registration from a sealed `pairing` session.\n *\n * Both keys must be distinct P-256 SPKIs and both must sign the same\n * `po/device-register/v1` message, which binds them to this origin, this\n * tunnel key, and this exact session.\n */\nexport function verifyRegistration(input: {\n origin: string;\n hostPublicKey: string;\n sessionDeviceId: string;\n trust: DeviceTrust | undefined;\n body: unknown;\n}): RegistrationVerdict {\n if (input.trust?.kind !== 'pairing') return { ok: false, reason: 'not-pairing' };\n const body = input.body;\n if (!isRecord(body)) return { ok: false, reason: 'invalid' };\n const { identityPublicKey, stepUpPublicKey, label, platform, identityProof, stepUpProof } = body;\n if (\n !isP256PublicKey(identityPublicKey) ||\n !isP256PublicKey(stepUpPublicKey) ||\n identityPublicKey === stepUpPublicKey ||\n typeof label !== 'string' ||\n typeof platform !== 'string' ||\n !PLATFORMS.has(platform) ||\n !isBase64Url(identityProof, MAX_SIGNATURE_LENGTH) ||\n !isBase64Url(stepUpProof, MAX_SIGNATURE_LENGTH)\n )\n return { ok: false, reason: 'invalid' };\n const fields = deviceRegisterFields({\n origin: input.origin,\n hostPublicKey: input.hostPublicKey,\n sessionDeviceId: input.sessionDeviceId,\n identityPublicKey,\n stepUpPublicKey,\n platform,\n });\n if (\n !verifyDeviceSignature(identityPublicKey, DEVICE_REGISTER_TAG, fields, identityProof) ||\n !verifyDeviceSignature(stepUpPublicKey, DEVICE_REGISTER_TAG, fields, stepUpProof)\n )\n return { ok: false, reason: 'invalid' };\n return {\n ok: true,\n identityPublicKey,\n stepUpPublicKey,\n // Attacker-supplied and shown in the host UI, so it is cleaned like a user agent.\n label: sanitizeUserAgent(label),\n platform: platform as TrustedDevicePlatform,\n };\n}\n\nfunction channelKeysOf(value: unknown): DeviceChannelKeys | undefined {\n if (!isRecord(value)) return undefined;\n const { session, protocol, http } = value;\n if (\n !isBase64Url(session, MAX_CHANNEL_KEY_LENGTH) ||\n !isBase64Url(protocol, MAX_CHANNEL_KEY_LENGTH) ||\n !isBase64Url(http, MAX_CHANNEL_KEY_LENGTH)\n )\n return undefined;\n if (session === protocol || session === http || protocol === http) return undefined;\n return { session, protocol, http };\n}\n\n/**\n * Checks a device sign-in. The challenge is consumed before anything else is\n * looked at, so every attempt, good or bad, burns it.\n */\nexport function verifyAuthentication(input: {\n challenges: DeviceChallenges;\n origin: string;\n /** The tunnel key in force now; a challenge issued under another one is refused. */\n hostPublicKey: string | undefined;\n find: (trustedDeviceId: string) => TrustedDeviceRecord | undefined;\n body: unknown;\n}): AuthenticationVerdict {\n const body = input.body;\n if (!isRecord(body) || !isOpaqueId(body.challengeId)) return { ok: false };\n const issued = input.challenges.take(body.challengeId);\n if (issued === undefined || issued.purpose.kind !== 'auth') return { ok: false };\n if (input.hostPublicKey === undefined || issued.hostPublicKey !== input.hostPublicKey) return { ok: false };\n if (!isOpaqueId(body.trustedDeviceId) || body.trustedDeviceId !== issued.purpose.trustedDeviceId)\n return { ok: false };\n if (!isBase64Url(body.signature, MAX_SIGNATURE_LENGTH)) return { ok: false };\n const channels = channelKeysOf(body.channels);\n if (channels === undefined) return { ok: false };\n const record = input.find(body.trustedDeviceId);\n if (record === undefined) return { ok: false };\n const fields = deviceAuthFields({\n origin: input.origin,\n challenge: issued.challenge,\n hostPublicKey: issued.hostPublicKey,\n trustedDeviceId: record.id,\n channels,\n });\n if (!verifyDeviceSignature(record.identityPublicKey, DEVICE_AUTH_TAG, fields, body.signature)) return { ok: false };\n return { ok: true, record, channels };\n}\n\n/** Checks a biometric step-up signature for one action from one device-key session. */\nexport function verifyStepUp(input: {\n challenges: DeviceChallenges;\n origin: string;\n hostPublicKey: string | undefined;\n sessionDeviceId: string;\n action: string;\n ceremonyId: unknown;\n signature: unknown;\n stepUpPublicKey: string;\n}): boolean {\n if (!isOpaqueId(input.ceremonyId) || !isStepUpAction(input.action)) return false;\n const issued = input.challenges.take(input.ceremonyId);\n if (issued === undefined || issued.purpose.kind !== 'step-up') return false;\n if (input.hostPublicKey === undefined || issued.hostPublicKey !== input.hostPublicKey) return false;\n if (issued.purpose.sessionDeviceId !== input.sessionDeviceId || issued.purpose.action !== input.action) return false;\n if (!isBase64Url(input.signature, MAX_SIGNATURE_LENGTH)) return false;\n return verifyDeviceSignature(\n input.stepUpPublicKey,\n DEVICE_STEP_UP_TAG,\n deviceStepUpFields({\n origin: input.origin,\n action: input.action,\n sessionDeviceId: input.sessionDeviceId,\n challengeId: issued.id,\n challenge: issued.challenge,\n }),\n input.signature,\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/services/durableNavigation/index.ts
|
|
2
|
+
/** External session identity is independent of the currently selected conversation. */
|
|
3
|
+
const DurableNavigationDoc = (0, require("@earendil-works/pi-durable").defineDoc)({
|
|
4
|
+
kind: "po.navigation",
|
|
5
|
+
version: 1,
|
|
6
|
+
scope: "session",
|
|
7
|
+
initial: () => ({
|
|
8
|
+
activeConversationId: null,
|
|
9
|
+
branches: []
|
|
10
|
+
})
|
|
11
|
+
});
|
|
12
|
+
/** Select the initial conversation without overwriting a previously persisted selection. */
|
|
13
|
+
async function initializeDurableNavigation(session, conversationId, context) {
|
|
14
|
+
return session.commit(async (tx) => {
|
|
15
|
+
if (!await tx.conversation(conversationId)) throw new Error("Initial conversation does not exist");
|
|
16
|
+
const navigation = await tx.doc(DurableNavigationDoc);
|
|
17
|
+
navigation.activeConversationId ??= conversationId;
|
|
18
|
+
return navigation.activeConversationId;
|
|
19
|
+
}, context);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fork the selected history, retaining its abandoned tail. A head marker alone cannot rewind.
|
|
23
|
+
* The caller must settle active work and prepare any summary before entering this transaction.
|
|
24
|
+
* Expected selection guards against a stale asynchronous summary switching a newer selection.
|
|
25
|
+
*/
|
|
26
|
+
async function navigateDurableConversation(session, expectedConversationId, targetId, context, options) {
|
|
27
|
+
return session.commit(async (tx) => {
|
|
28
|
+
const navigation = await tx.doc(DurableNavigationDoc);
|
|
29
|
+
if (navigation.activeConversationId !== expectedConversationId) throw new Error("The active conversation changed during navigation");
|
|
30
|
+
const next = targetId === null ? await tx.createConversation({ ownership: { kind: "ownerless" } }) : await tx.forkConversation(expectedConversationId, targetId, { ownership: { kind: "ownerless" } });
|
|
31
|
+
if (options?.summary) await tx.appendEntry(next.id, options.summary);
|
|
32
|
+
navigation.branches.push({
|
|
33
|
+
conversationId: next.id,
|
|
34
|
+
sourceConversationId: expectedConversationId,
|
|
35
|
+
targetId
|
|
36
|
+
});
|
|
37
|
+
navigation.activeConversationId = next.id;
|
|
38
|
+
return next.id;
|
|
39
|
+
}, context);
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
exports.DurableNavigationDoc = DurableNavigationDoc;
|
|
43
|
+
exports.initializeDurableNavigation = initializeDurableNavigation;
|
|
44
|
+
exports.navigateDurableConversation = navigateDurableConversation;
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["defineDoc"],"sources":["../../../../src/services/durableNavigation/index.ts"],"sourcesContent":["import type { Context } from '@earendil-works/chord';\nimport {\n defineDoc,\n type ConversationId,\n type EntryDraft,\n type EntryId,\n type Session,\n} from '@earendil-works/pi-durable';\n\n/** External session identity is independent of the currently selected conversation. */\nexport const DurableNavigationDoc = defineDoc<{\n activeConversationId: ConversationId | null;\n branches: { conversationId: ConversationId; sourceConversationId: ConversationId; targetId: EntryId | null }[];\n}>({\n kind: 'po.navigation',\n version: 1,\n scope: 'session',\n initial: () => ({ activeConversationId: null, branches: [] }),\n});\n\n/** Select the initial conversation without overwriting a previously persisted selection. */\nexport async function initializeDurableNavigation(\n session: Session,\n conversationId: ConversationId,\n context: Context,\n): Promise<ConversationId> {\n return session.commit(async (tx) => {\n if (!(await tx.conversation(conversationId))) throw new Error('Initial conversation does not exist');\n const navigation = await tx.doc(DurableNavigationDoc);\n navigation.activeConversationId ??= conversationId;\n return navigation.activeConversationId;\n }, context);\n}\n\n/**\n * Fork the selected history, retaining its abandoned tail. A head marker alone cannot rewind.\n * The caller must settle active work and prepare any summary before entering this transaction.\n * Expected selection guards against a stale asynchronous summary switching a newer selection.\n */\nexport async function navigateDurableConversation(\n session: Session,\n expectedConversationId: ConversationId,\n targetId: EntryId | null,\n context: Context,\n options?: { summary?: EntryDraft },\n): Promise<ConversationId> {\n return session.commit(async (tx) => {\n const navigation = await tx.doc(DurableNavigationDoc);\n if (navigation.activeConversationId !== expectedConversationId)\n throw new Error('The active conversation changed during navigation');\n const next =\n targetId === null\n ? await tx.createConversation({ ownership: { kind: 'ownerless' } })\n : await tx.forkConversation(expectedConversationId, targetId, { ownership: { kind: 'ownerless' } });\n if (options?.summary) await tx.appendEntry(next.id, options.summary);\n navigation.branches.push({\n conversationId: next.id,\n sourceConversationId: expectedConversationId,\n targetId,\n });\n navigation.activeConversationId = next.id;\n return next.id;\n }, context);\n}\n"],"mappings":";;AAUA,MAAa,wBAAA,uCAAuBA,CAAAA,CAAAA,UAAAA,CAGjC;CACD,MAAM;CACN,SAAS;CACT,OAAO;CACP,gBAAgB;EAAE,sBAAsB;EAAM,UAAU,CAAC;CAAE;AAC7D,CAAC;;AAGD,eAAsB,4BACpB,SACA,gBACA,SACyB;CACzB,OAAO,QAAQ,OAAO,OAAO,OAAO;EAClC,IAAI,CAAE,MAAM,GAAG,aAAa,cAAc,GAAI,MAAM,IAAI,MAAM,qCAAqC;EACnG,MAAM,aAAa,MAAM,GAAG,IAAI,oBAAoB;EACpD,WAAW,yBAAyB;EACpC,OAAO,WAAW;CACpB,GAAG,OAAO;AACZ;;;;;;AAOA,eAAsB,4BACpB,SACA,wBACA,UACA,SACA,SACyB;CACzB,OAAO,QAAQ,OAAO,OAAO,OAAO;EAClC,MAAM,aAAa,MAAM,GAAG,IAAI,oBAAoB;EACpD,IAAI,WAAW,yBAAyB,wBACtC,MAAM,IAAI,MAAM,mDAAmD;EACrE,MAAM,OACJ,aAAa,OACT,MAAM,GAAG,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,EAAE,CAAC,IAChE,MAAM,GAAG,iBAAiB,wBAAwB,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,EAAE,CAAC;EACtG,IAAI,SAAS,SAAS,MAAM,GAAG,YAAY,KAAK,IAAI,QAAQ,OAAO;EACnE,WAAW,SAAS,KAAK;GACvB,gBAAgB,KAAK;GACrB,sBAAsB;GACtB;EACF,CAAC;EACD,WAAW,uBAAuB,KAAK;EACvC,OAAO,KAAK;CACd,GAAG,OAAO;AACZ"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { defineDoc } from "@earendil-works/pi-durable";
|
|
2
|
+
//#region src/services/durableNavigation/index.ts
|
|
3
|
+
/** External session identity is independent of the currently selected conversation. */
|
|
4
|
+
const DurableNavigationDoc = defineDoc({
|
|
5
|
+
kind: "po.navigation",
|
|
6
|
+
version: 1,
|
|
7
|
+
scope: "session",
|
|
8
|
+
initial: () => ({
|
|
9
|
+
activeConversationId: null,
|
|
10
|
+
branches: []
|
|
11
|
+
})
|
|
12
|
+
});
|
|
13
|
+
/** Select the initial conversation without overwriting a previously persisted selection. */
|
|
14
|
+
async function initializeDurableNavigation(session, conversationId, context) {
|
|
15
|
+
return session.commit(async (tx) => {
|
|
16
|
+
if (!await tx.conversation(conversationId)) throw new Error("Initial conversation does not exist");
|
|
17
|
+
const navigation = await tx.doc(DurableNavigationDoc);
|
|
18
|
+
navigation.activeConversationId ??= conversationId;
|
|
19
|
+
return navigation.activeConversationId;
|
|
20
|
+
}, context);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Fork the selected history, retaining its abandoned tail. A head marker alone cannot rewind.
|
|
24
|
+
* The caller must settle active work and prepare any summary before entering this transaction.
|
|
25
|
+
* Expected selection guards against a stale asynchronous summary switching a newer selection.
|
|
26
|
+
*/
|
|
27
|
+
async function navigateDurableConversation(session, expectedConversationId, targetId, context, options) {
|
|
28
|
+
return session.commit(async (tx) => {
|
|
29
|
+
const navigation = await tx.doc(DurableNavigationDoc);
|
|
30
|
+
if (navigation.activeConversationId !== expectedConversationId) throw new Error("The active conversation changed during navigation");
|
|
31
|
+
const next = targetId === null ? await tx.createConversation({ ownership: { kind: "ownerless" } }) : await tx.forkConversation(expectedConversationId, targetId, { ownership: { kind: "ownerless" } });
|
|
32
|
+
if (options?.summary) await tx.appendEntry(next.id, options.summary);
|
|
33
|
+
navigation.branches.push({
|
|
34
|
+
conversationId: next.id,
|
|
35
|
+
sourceConversationId: expectedConversationId,
|
|
36
|
+
targetId
|
|
37
|
+
});
|
|
38
|
+
navigation.activeConversationId = next.id;
|
|
39
|
+
return next.id;
|
|
40
|
+
}, context);
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { DurableNavigationDoc, initializeDurableNavigation, navigateDurableConversation };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/durableNavigation/index.ts"],"sourcesContent":["import type { Context } from '@earendil-works/chord';\nimport {\n defineDoc,\n type ConversationId,\n type EntryDraft,\n type EntryId,\n type Session,\n} from '@earendil-works/pi-durable';\n\n/** External session identity is independent of the currently selected conversation. */\nexport const DurableNavigationDoc = defineDoc<{\n activeConversationId: ConversationId | null;\n branches: { conversationId: ConversationId; sourceConversationId: ConversationId; targetId: EntryId | null }[];\n}>({\n kind: 'po.navigation',\n version: 1,\n scope: 'session',\n initial: () => ({ activeConversationId: null, branches: [] }),\n});\n\n/** Select the initial conversation without overwriting a previously persisted selection. */\nexport async function initializeDurableNavigation(\n session: Session,\n conversationId: ConversationId,\n context: Context,\n): Promise<ConversationId> {\n return session.commit(async (tx) => {\n if (!(await tx.conversation(conversationId))) throw new Error('Initial conversation does not exist');\n const navigation = await tx.doc(DurableNavigationDoc);\n navigation.activeConversationId ??= conversationId;\n return navigation.activeConversationId;\n }, context);\n}\n\n/**\n * Fork the selected history, retaining its abandoned tail. A head marker alone cannot rewind.\n * The caller must settle active work and prepare any summary before entering this transaction.\n * Expected selection guards against a stale asynchronous summary switching a newer selection.\n */\nexport async function navigateDurableConversation(\n session: Session,\n expectedConversationId: ConversationId,\n targetId: EntryId | null,\n context: Context,\n options?: { summary?: EntryDraft },\n): Promise<ConversationId> {\n return session.commit(async (tx) => {\n const navigation = await tx.doc(DurableNavigationDoc);\n if (navigation.activeConversationId !== expectedConversationId)\n throw new Error('The active conversation changed during navigation');\n const next =\n targetId === null\n ? await tx.createConversation({ ownership: { kind: 'ownerless' } })\n : await tx.forkConversation(expectedConversationId, targetId, { ownership: { kind: 'ownerless' } });\n if (options?.summary) await tx.appendEntry(next.id, options.summary);\n navigation.branches.push({\n conversationId: next.id,\n sourceConversationId: expectedConversationId,\n targetId,\n });\n navigation.activeConversationId = next.id;\n return next.id;\n }, context);\n}\n"],"mappings":";;;AAUA,MAAa,uBAAuB,UAGjC;CACD,MAAM;CACN,SAAS;CACT,OAAO;CACP,gBAAgB;EAAE,sBAAsB;EAAM,UAAU,CAAC;CAAE;AAC7D,CAAC;;AAGD,eAAsB,4BACpB,SACA,gBACA,SACyB;CACzB,OAAO,QAAQ,OAAO,OAAO,OAAO;EAClC,IAAI,CAAE,MAAM,GAAG,aAAa,cAAc,GAAI,MAAM,IAAI,MAAM,qCAAqC;EACnG,MAAM,aAAa,MAAM,GAAG,IAAI,oBAAoB;EACpD,WAAW,yBAAyB;EACpC,OAAO,WAAW;CACpB,GAAG,OAAO;AACZ;;;;;;AAOA,eAAsB,4BACpB,SACA,wBACA,UACA,SACA,SACyB;CACzB,OAAO,QAAQ,OAAO,OAAO,OAAO;EAClC,MAAM,aAAa,MAAM,GAAG,IAAI,oBAAoB;EACpD,IAAI,WAAW,yBAAyB,wBACtC,MAAM,IAAI,MAAM,mDAAmD;EACrE,MAAM,OACJ,aAAa,OACT,MAAM,GAAG,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,EAAE,CAAC,IAChE,MAAM,GAAG,iBAAiB,wBAAwB,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,EAAE,CAAC;EACtG,IAAI,SAAS,SAAS,MAAM,GAAG,YAAY,KAAK,IAAI,QAAQ,OAAO;EACnE,WAAW,SAAS,KAAK;GACvB,gBAAgB,KAAK;GACrB,sBAAsB;GACtB;EACF,CAAC;EACD,WAAW,uBAAuB,KAAK;EACvC,OAAO,KAAK;CACd,GAAG,OAAO;AACZ"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
const require_notification = require("../../schemas/notification.cjs");
|
|
2
|
+
require("../../../notification.cjs");
|
|
3
|
+
let node_crypto = require("node:crypto");
|
|
4
|
+
//#region src/services/headlessClient/index.ts
|
|
5
|
+
/** Explicit client interactions over the existing browser dialog protocol. */
|
|
6
|
+
function createHeadlessClient(options) {
|
|
7
|
+
const pending = /* @__PURE__ */ new Map();
|
|
8
|
+
let disposed = false;
|
|
9
|
+
const advance = () => pending.values().next().value?.start();
|
|
10
|
+
return {
|
|
11
|
+
client: {
|
|
12
|
+
async notify(request) {
|
|
13
|
+
if (disposed) return;
|
|
14
|
+
const data = require_notification.createDoomNotificationEntryData(request);
|
|
15
|
+
if (!data) throw new Error("Invalid notification request");
|
|
16
|
+
try {
|
|
17
|
+
await options.appendCustomEntry(require_notification.DOOM_NOTIFICATION_ENTRY_TYPE, data);
|
|
18
|
+
} catch (error) {
|
|
19
|
+
if (disposed) return;
|
|
20
|
+
options.emitFrame({
|
|
21
|
+
type: "error",
|
|
22
|
+
code: "notification_undelivered",
|
|
23
|
+
error: `${data.body} (not saved to history: ${error instanceof Error ? error.message : String(error)})`
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
setStatus(source, text) {
|
|
28
|
+
if (disposed) throw new Error("Headless client is closed");
|
|
29
|
+
options.emitFrame({
|
|
30
|
+
type: "extension_ui_request",
|
|
31
|
+
method: "setStatus",
|
|
32
|
+
statusKey: source,
|
|
33
|
+
statusText: text
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
appendComposerText(text) {
|
|
37
|
+
if (disposed) throw new Error("Headless client is closed");
|
|
38
|
+
options.emitFrame({
|
|
39
|
+
type: "extension_ui_request",
|
|
40
|
+
method: "append_composer_text",
|
|
41
|
+
id: (0, node_crypto.randomUUID)(),
|
|
42
|
+
text
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
request(request, signal) {
|
|
46
|
+
if (disposed) return Promise.reject(/* @__PURE__ */ new Error("Headless client is closed"));
|
|
47
|
+
if (signal?.aborted) return Promise.resolve(void 0);
|
|
48
|
+
if (![
|
|
49
|
+
"confirm",
|
|
50
|
+
"select",
|
|
51
|
+
"input"
|
|
52
|
+
].includes(request.kind)) return Promise.reject(/* @__PURE__ */ new Error("Unsupported headless client request"));
|
|
53
|
+
const labels = request.options?.map((option) => option.label);
|
|
54
|
+
if (labels && new Set(labels).size !== labels.length) return Promise.reject(/* @__PURE__ */ new Error("Select option labels must be unique"));
|
|
55
|
+
const id = `headless-ui:${(0, node_crypto.randomUUID)()}`;
|
|
56
|
+
return new Promise((resolve, reject) => {
|
|
57
|
+
let started = false;
|
|
58
|
+
const finish = (outcome) => {
|
|
59
|
+
if (!pending.delete(id)) return;
|
|
60
|
+
signal?.removeEventListener("abort", abort);
|
|
61
|
+
try {
|
|
62
|
+
if (started) options.emitFrame({
|
|
63
|
+
type: "extension_ui_answered",
|
|
64
|
+
id
|
|
65
|
+
});
|
|
66
|
+
if ("error" in outcome) reject(outcome.error);
|
|
67
|
+
else resolve(outcome.value);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
reject(error);
|
|
70
|
+
} finally {
|
|
71
|
+
advance();
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const abort = () => finish({ value: void 0 });
|
|
75
|
+
pending.set(id, {
|
|
76
|
+
start() {
|
|
77
|
+
if (started || disposed) return;
|
|
78
|
+
started = true;
|
|
79
|
+
try {
|
|
80
|
+
options.emitFrame({
|
|
81
|
+
type: "extension_ui_request",
|
|
82
|
+
id,
|
|
83
|
+
method: request.kind === "input" && request.multiline ? "editor" : request.kind,
|
|
84
|
+
title: request.title,
|
|
85
|
+
message: request.message,
|
|
86
|
+
options: labels,
|
|
87
|
+
placeholder: request.message,
|
|
88
|
+
prefill: request.initialValue
|
|
89
|
+
});
|
|
90
|
+
} catch (error) {
|
|
91
|
+
finish({ error });
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
respond(frame) {
|
|
95
|
+
if (!started) return;
|
|
96
|
+
if (frame.cancelled === true) return finish({ value: void 0 });
|
|
97
|
+
if (request.kind === "confirm") {
|
|
98
|
+
if (typeof frame.confirmed === "boolean") finish({ value: frame.confirmed });
|
|
99
|
+
} else if (typeof frame.value === "string") {
|
|
100
|
+
const selected = request.options?.find((option) => option.label === frame.value);
|
|
101
|
+
finish({ value: selected?.value ?? frame.value });
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
close: () => finish({ error: /* @__PURE__ */ new Error("Headless client is closed") })
|
|
105
|
+
});
|
|
106
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
107
|
+
advance();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
receive(frame) {
|
|
112
|
+
if (frame.type !== "extension_ui_response") return false;
|
|
113
|
+
if (typeof frame.id === "string") pending.get(frame.id)?.respond(frame);
|
|
114
|
+
return true;
|
|
115
|
+
},
|
|
116
|
+
dispose() {
|
|
117
|
+
if (disposed) return;
|
|
118
|
+
disposed = true;
|
|
119
|
+
for (const request of pending.values()) request.close();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//#endregion
|
|
124
|
+
exports.createHeadlessClient = createHeadlessClient;
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["createDoomNotificationEntryData","DOOM_NOTIFICATION_ENTRY_TYPE","randomUUID"],"sources":["../../../../src/services/headlessClient/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport { createDoomNotificationEntryData, DOOM_NOTIFICATION_ENTRY_TYPE } from '../../exports/notification';\nimport type {\n HeadlessClientBridge,\n HeadlessClientOptions,\n PendingClientRequest,\n} from '../../types/server/headlessClient';\n\n/** Explicit client interactions over the existing browser dialog protocol. */\nexport function createHeadlessClient(options: HeadlessClientOptions): HeadlessClientBridge {\n const pending = new Map<string, PendingClientRequest>();\n let disposed = false;\n const advance = (): void => pending.values().next().value?.start();\n\n return {\n client: {\n async notify(request) {\n // Detached callbacks can outlive their session. A closed client has no recipient.\n if (disposed) return;\n const data = createDoomNotificationEntryData(request);\n if (!data) throw new Error('Invalid notification request');\n try {\n await options.appendCustomEntry(DOOM_NOTIFICATION_ENTRY_TYPE, data);\n } catch (error) {\n if (disposed) return;\n // Callers fire notify without awaiting, often to report a journal failure. A rejection here\n // would crash the session server, so a refused append still reaches the browser live.\n options.emitFrame({\n type: 'error',\n code: 'notification_undelivered',\n error: `${data.body} (not saved to history: ${error instanceof Error ? error.message : String(error)})`,\n });\n }\n },\n setStatus(source, text) {\n if (disposed) throw new Error('Headless client is closed');\n options.emitFrame({ type: 'extension_ui_request', method: 'setStatus', statusKey: source, statusText: text });\n },\n appendComposerText(text) {\n if (disposed) throw new Error('Headless client is closed');\n options.emitFrame({ type: 'extension_ui_request', method: 'append_composer_text', id: randomUUID(), text });\n },\n request(request, signal) {\n if (disposed) return Promise.reject(new Error('Headless client is closed'));\n if (signal?.aborted) return Promise.resolve(undefined);\n if (!['confirm', 'select', 'input'].includes(request.kind)) {\n return Promise.reject(new Error('Unsupported headless client request'));\n }\n const labels = request.options?.map((option) => option.label);\n if (labels && new Set(labels).size !== labels.length) {\n return Promise.reject(new Error('Select option labels must be unique'));\n }\n const id = `headless-ui:${randomUUID()}`;\n return new Promise((resolve, reject) => {\n let started = false;\n const finish = (outcome: { value: unknown } | { error: unknown }): void => {\n if (!pending.delete(id)) return;\n signal?.removeEventListener('abort', abort);\n try {\n if (started) options.emitFrame({ type: 'extension_ui_answered', id });\n if ('error' in outcome) reject(outcome.error);\n else resolve(outcome.value);\n } catch (error) {\n reject(error);\n } finally {\n advance();\n }\n };\n const abort = (): void => finish({ value: undefined });\n pending.set(id, {\n start() {\n if (started || disposed) return;\n started = true;\n try {\n options.emitFrame({\n type: 'extension_ui_request',\n id,\n method: request.kind === 'input' && request.multiline ? 'editor' : request.kind,\n title: request.title,\n message: request.message,\n options: labels,\n placeholder: request.message,\n prefill: request.initialValue,\n });\n } catch (error) {\n finish({ error });\n }\n },\n respond(frame) {\n if (!started) return;\n if (frame.cancelled === true) return finish({ value: undefined });\n if (request.kind === 'confirm') {\n if (typeof frame.confirmed === 'boolean') finish({ value: frame.confirmed });\n } else if (typeof frame.value === 'string') {\n // Rich questionnaire clients return an encoded whole-answer envelope here.\n const selected = request.options?.find((option) => option.label === frame.value);\n finish({ value: selected?.value ?? frame.value });\n }\n },\n close: () => finish({ error: new Error('Headless client is closed') }),\n });\n signal?.addEventListener('abort', abort, { once: true });\n advance();\n });\n },\n },\n receive(frame) {\n if (frame.type !== 'extension_ui_response') return false;\n if (typeof frame.id === 'string') pending.get(frame.id)?.respond(frame);\n return true;\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n for (const request of pending.values()) request.close();\n },\n };\n}\n"],"mappings":"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"}
|