@agimon-ai/doompi-core 0.0.1-alpha.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/agentModel.cjs +4 -0
- package/dist/agentModel.d.mts +2 -0
- package/dist/agentModel.mjs +2 -0
- package/dist/apiContracts.cjs +2009 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +1018 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +1989 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/askUser.cjs +8 -0
- package/dist/askUser.d.mts +2 -0
- package/dist/askUser.mjs +2 -0
- package/dist/authorTools.cjs +5 -0
- package/dist/authorTools.d.mts +2 -0
- package/dist/authorTools.mjs +2 -0
- package/dist/backgroundWork.cjs +7 -0
- package/dist/backgroundWork.d.mts +2 -0
- package/dist/backgroundWork.mjs +2 -0
- package/dist/bundleAssetPolicy.cjs +5 -0
- package/dist/bundleAssetPolicy.d.mts +2 -0
- package/dist/bundleAssetPolicy.mjs +2 -0
- package/dist/childProcess.cjs +15 -0
- package/dist/childProcess.d.mts +2 -0
- package/dist/childProcess.mjs +2 -0
- package/dist/childSession.cjs +8 -0
- package/dist/childSession.d.mts +3 -0
- package/dist/childSession.mjs +3 -0
- package/dist/cockpitContainer.cjs +4 -0
- package/dist/cockpitContainer.d.mts +2 -0
- package/dist/cockpitContainer.mjs +2 -0
- package/dist/config.cjs +13 -0
- package/dist/config.d.mts +3 -0
- package/dist/config.mjs +2 -0
- package/dist/contextApi.cjs +10 -0
- package/dist/contextApi.d.mts +4 -0
- package/dist/contextApi.mjs +3 -0
- package/dist/contextContributions.cjs +7 -0
- package/dist/contextContributions.d.mts +3 -0
- package/dist/contextContributions.mjs +3 -0
- package/dist/contextDetail.cjs +65 -0
- package/dist/contextDetail.cjs.map +1 -0
- package/dist/contextDetail.d.mts +19 -0
- package/dist/contextDetail.d.mts.map +1 -0
- package/dist/contextDetail.mjs +64 -0
- package/dist/contextDetail.mjs.map +1 -0
- package/dist/contextDetailStore.cjs +100 -0
- package/dist/contextDetailStore.cjs.map +1 -0
- package/dist/contextDetailStore.d.mts +19 -0
- package/dist/contextDetailStore.d.mts.map +1 -0
- package/dist/contextDetailStore.mjs +91 -0
- package/dist/contextDetailStore.mjs.map +1 -0
- package/dist/contextProjection.cjs +121 -0
- package/dist/contextProjection.cjs.map +1 -0
- package/dist/contextProjection.d.mts +130 -0
- package/dist/contextProjection.d.mts.map +1 -0
- package/dist/contextProjection.mjs +117 -0
- package/dist/contextProjection.mjs.map +1 -0
- package/dist/cordisHost.cjs +11 -0
- package/dist/cordisHost.d.mts +2 -0
- package/dist/cordisHost.mjs +2 -0
- package/dist/delegation.cjs +18 -0
- package/dist/delegation.d.mts +2 -0
- package/dist/delegation.mjs +2 -0
- package/dist/doomPackage.cjs +61 -0
- package/dist/doomPackage.cjs.map +1 -0
- package/dist/doomPackage.d.mts +17 -0
- package/dist/doomPackage.d.mts.map +1 -0
- package/dist/doomPackage.mjs +54 -0
- package/dist/doomPackage.mjs.map +1 -0
- package/dist/executionBudget.cjs +231 -0
- package/dist/executionBudget.cjs.map +1 -0
- package/dist/executionBudget.d.mts +11 -0
- package/dist/executionBudget.d.mts.map +1 -0
- package/dist/executionBudget.mjs +225 -0
- package/dist/executionBudget.mjs.map +1 -0
- package/dist/extensionFile.cjs +24 -0
- package/dist/extensionFile.d.mts +3 -0
- package/dist/extensionFile.mjs +2 -0
- package/dist/footer.cjs +6 -0
- package/dist/footer.d.mts +2 -0
- package/dist/footer.mjs +2 -0
- package/dist/headless.cjs +9 -0
- package/dist/headless.d.mts +2 -0
- package/dist/headless.mjs +2 -0
- package/dist/headlessHub.cjs +914 -0
- package/dist/headlessHub.cjs.map +1 -0
- package/dist/headlessHub.d.mts +157 -0
- package/dist/headlessHub.d.mts.map +1 -0
- package/dist/headlessHub.mjs +911 -0
- package/dist/headlessHub.mjs.map +1 -0
- package/dist/headlessServer.cjs +910 -0
- package/dist/headlessServer.cjs.map +1 -0
- package/dist/headlessServer.d.mts +64 -0
- package/dist/headlessServer.d.mts.map +1 -0
- package/dist/headlessServer.mjs +904 -0
- package/dist/headlessServer.mjs.map +1 -0
- package/dist/headlessSessionHost.cjs +0 -0
- package/dist/headlessSessionHost.d.mts +71 -0
- package/dist/headlessSessionHost.d.mts.map +1 -0
- package/dist/headlessSessionHost.mjs +1 -0
- package/dist/headlessSessionManager.cjs +51 -0
- package/dist/headlessSessionManager.cjs.map +1 -0
- package/dist/headlessSessionManager.d.mts +6 -0
- package/dist/headlessSessionManager.d.mts.map +1 -0
- package/dist/headlessSessionManager.mjs +50 -0
- package/dist/headlessSessionManager.mjs.map +1 -0
- package/dist/help.cjs +24 -0
- package/dist/help.d.mts +3 -0
- package/dist/help.mjs +3 -0
- package/dist/history.cjs +25 -0
- package/dist/history.d.mts +10 -0
- package/dist/history.mjs +10 -0
- package/dist/historyImport.cjs +553 -0
- package/dist/historyImport.cjs.map +1 -0
- package/dist/historyImport.d.mts +76 -0
- package/dist/historyImport.d.mts.map +1 -0
- package/dist/historyImport.mjs +547 -0
- package/dist/historyImport.mjs.map +1 -0
- package/dist/historyOwnership.cjs +253 -0
- package/dist/historyOwnership.cjs.map +1 -0
- package/dist/historyOwnership.d.mts +23 -0
- package/dist/historyOwnership.d.mts.map +1 -0
- package/dist/historyOwnership.mjs +247 -0
- package/dist/historyOwnership.mjs.map +1 -0
- package/dist/hubChannel.cjs +4 -0
- package/dist/hubChannel.d.mts +2 -0
- package/dist/hubChannel.mjs +2 -0
- package/dist/index.cjs +44 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +6 -0
- package/dist/json.cjs +6 -0
- package/dist/json.d.mts +2 -0
- package/dist/json.mjs +2 -0
- package/dist/jsonlSessionRepo.cjs +217 -0
- package/dist/jsonlSessionRepo.cjs.map +1 -0
- package/dist/jsonlSessionRepo.d.mts +7 -0
- package/dist/jsonlSessionRepo.d.mts.map +1 -0
- package/dist/jsonlSessionRepo.mjs +212 -0
- package/dist/jsonlSessionRepo.mjs.map +1 -0
- package/dist/kernel.cjs +3 -0
- package/dist/kernel.d.mts +3 -0
- package/dist/kernel.mjs +2 -0
- package/dist/leader.cjs +9 -0
- package/dist/leader.d.mts +2 -0
- package/dist/leader.mjs +2 -0
- package/dist/logSinkTelemetry.cjs +5 -0
- package/dist/logSinkTelemetry.d.mts +2 -0
- package/dist/logSinkTelemetry.mjs +2 -0
- package/dist/machineApi.cjs +92 -0
- package/dist/machineApi.cjs.map +1 -0
- package/dist/machineApi.d.mts +7 -0
- package/dist/machineApi.d.mts.map +1 -0
- package/dist/machineApi.mjs +88 -0
- package/dist/machineApi.mjs.map +1 -0
- package/dist/main.cjs +11 -0
- package/dist/main.d.mts +5 -0
- package/dist/main.mjs +4 -0
- package/dist/mcpFacet.cjs +12 -0
- package/dist/mcpFacet.d.mts +4 -0
- package/dist/mcpFacet.mjs +4 -0
- package/dist/mcpProjection.cjs +16 -0
- package/dist/mcpProjection.d.mts +2 -0
- package/dist/mcpProjection.mjs +2 -0
- package/dist/mcpSchemaCost.cjs +195 -0
- package/dist/mcpSchemaCost.cjs.map +1 -0
- package/dist/mcpSchemaCost.d.mts +35 -0
- package/dist/mcpSchemaCost.d.mts.map +1 -0
- package/dist/mcpSchemaCost.mjs +190 -0
- package/dist/mcpSchemaCost.mjs.map +1 -0
- package/dist/mcpSession.cjs +9 -0
- package/dist/mcpSession.d.mts +2 -0
- package/dist/mcpSession.mjs +2 -0
- package/dist/mcpStatus.cjs +7 -0
- package/dist/mcpStatus.d.mts +2 -0
- package/dist/mcpStatus.mjs +2 -0
- package/dist/mcpToolResolver.cjs +5 -0
- package/dist/mcpToolResolver.d.mts +2 -0
- package/dist/mcpToolResolver.mjs +2 -0
- package/dist/mcpWidget.cjs +0 -0
- package/dist/mcpWidget.d.mts +2 -0
- package/dist/mcpWidget.mjs +1 -0
- package/dist/moduleResolution.cjs +405 -0
- package/dist/moduleResolution.cjs.map +1 -0
- package/dist/moduleResolution.d.mts +67 -0
- package/dist/moduleResolution.d.mts.map +1 -0
- package/dist/moduleResolution.mjs +389 -0
- package/dist/moduleResolution.mjs.map +1 -0
- package/dist/narration.cjs +10 -0
- package/dist/narration.d.mts +2 -0
- package/dist/narration.mjs +2 -0
- package/dist/notification.cjs +17 -0
- package/dist/notification.d.mts +2 -0
- package/dist/notification.mjs +2 -0
- package/dist/packageApi.cjs +16 -0
- package/dist/packageApi.d.mts +3 -0
- package/dist/packageApi.mjs +3 -0
- package/dist/packageApiServer.cjs +191 -0
- package/dist/packageApiServer.cjs.map +1 -0
- package/dist/packageApiServer.d.mts +57 -0
- package/dist/packageApiServer.d.mts.map +1 -0
- package/dist/packageApiServer.mjs +189 -0
- package/dist/packageApiServer.mjs.map +1 -0
- package/dist/piExtension.cjs +13 -0
- package/dist/piExtension.d.mts +5 -0
- package/dist/piExtension.mjs +4 -0
- package/dist/piSettings.cjs +12 -0
- package/dist/piSettings.d.mts +2 -0
- package/dist/piSettings.mjs +2 -0
- package/dist/pluginProtocol.cjs +10 -0
- package/dist/pluginProtocol.d.mts +2 -0
- package/dist/pluginProtocol.mjs +2 -0
- package/dist/profileIdentity.cjs +6 -0
- package/dist/profileIdentity.d.mts +2 -0
- package/dist/profileIdentity.mjs +2 -0
- package/dist/protocol.cjs +10 -0
- package/dist/protocol.d.mts +2 -0
- package/dist/protocol.mjs +2 -0
- package/dist/readiness.cjs +8 -0
- package/dist/readiness.d.mts +2 -0
- package/dist/readiness.mjs +2 -0
- package/dist/relaunchHandoff.cjs +6 -0
- package/dist/relaunchHandoff.d.mts +2 -0
- package/dist/relaunchHandoff.mjs +2 -0
- package/dist/remoteApi.cjs +42 -0
- package/dist/remoteApi.cjs.map +1 -0
- package/dist/remoteApi.d.mts +7 -0
- package/dist/remoteApi.d.mts.map +1 -0
- package/dist/remoteApi.mjs +41 -0
- package/dist/remoteApi.mjs.map +1 -0
- package/dist/remoteRuntime.cjs +460 -0
- package/dist/remoteRuntime.cjs.map +1 -0
- package/dist/remoteRuntime.d.mts +28 -0
- package/dist/remoteRuntime.d.mts.map +1 -0
- package/dist/remoteRuntime.mjs +456 -0
- package/dist/remoteRuntime.mjs.map +1 -0
- package/dist/runtimeConfig.cjs +232 -0
- package/dist/runtimeConfig.cjs.map +1 -0
- package/dist/runtimeConfig.d.mts +313 -0
- package/dist/runtimeConfig.d.mts.map +1 -0
- package/dist/runtimeConfig.mjs +221 -0
- package/dist/runtimeConfig.mjs.map +1 -0
- package/dist/runtimeContextApi.cjs +64 -0
- package/dist/runtimeContextApi.cjs.map +1 -0
- package/dist/runtimeContextApi.d.mts +16 -0
- package/dist/runtimeContextApi.d.mts.map +1 -0
- package/dist/runtimeContextApi.mjs +62 -0
- package/dist/runtimeContextApi.mjs.map +1 -0
- package/dist/runtimeCordisHost.cjs +193 -0
- package/dist/runtimeCordisHost.cjs.map +1 -0
- package/dist/runtimeCordisHost.d.mts +63 -0
- package/dist/runtimeCordisHost.d.mts.map +1 -0
- package/dist/runtimeCordisHost.mjs +184 -0
- package/dist/runtimeCordisHost.mjs.map +1 -0
- package/dist/runtimeHeadlessSessionManager.cjs +0 -0
- package/dist/runtimeHeadlessSessionManager.d.mts +18 -0
- package/dist/runtimeHeadlessSessionManager.d.mts.map +1 -0
- package/dist/runtimeHeadlessSessionManager.mjs +1 -0
- package/dist/runtimeIdentity.cjs +26 -0
- package/dist/runtimeIdentity.cjs.map +1 -0
- package/dist/runtimeIdentity.d.mts +7 -0
- package/dist/runtimeIdentity.d.mts.map +1 -0
- package/dist/runtimeIdentity.mjs +21 -0
- package/dist/runtimeIdentity.mjs.map +1 -0
- package/dist/runtimeJson.cjs +46 -0
- package/dist/runtimeJson.cjs.map +1 -0
- package/dist/runtimeJson.d.mts +22 -0
- package/dist/runtimeJson.d.mts.map +1 -0
- package/dist/runtimeJson.mjs +39 -0
- package/dist/runtimeJson.mjs.map +1 -0
- package/dist/runtimeLogSinkTelemetry.cjs +102 -0
- package/dist/runtimeLogSinkTelemetry.cjs.map +1 -0
- package/dist/runtimeLogSinkTelemetry.d.mts +49 -0
- package/dist/runtimeLogSinkTelemetry.d.mts.map +1 -0
- package/dist/runtimeLogSinkTelemetry.mjs +99 -0
- package/dist/runtimeLogSinkTelemetry.mjs.map +1 -0
- package/dist/runtimePiExtension.cjs +339 -0
- package/dist/runtimePiExtension.cjs.map +1 -0
- package/dist/runtimePiExtension.d.mts +160 -0
- package/dist/runtimePiExtension.d.mts.map +1 -0
- package/dist/runtimePiExtension.mjs +333 -0
- package/dist/runtimePiExtension.mjs.map +1 -0
- package/dist/runtimePiSettings.cjs +116 -0
- package/dist/runtimePiSettings.cjs.map +1 -0
- package/dist/runtimePiSettings.d.mts +29 -0
- package/dist/runtimePiSettings.d.mts.map +1 -0
- package/dist/runtimePiSettings.mjs +103 -0
- package/dist/runtimePiSettings.mjs.map +1 -0
- package/dist/runtimeProtocol.cjs +223 -0
- package/dist/runtimeProtocol.cjs.map +1 -0
- package/dist/runtimeProtocol.d.mts +84 -0
- package/dist/runtimeProtocol.d.mts.map +1 -0
- package/dist/runtimeProtocol.mjs +215 -0
- package/dist/runtimeProtocol.mjs.map +1 -0
- package/dist/runtimeToolNames.cjs +51 -0
- package/dist/runtimeToolNames.cjs.map +1 -0
- package/dist/runtimeToolNames.d.mts +24 -0
- package/dist/runtimeToolNames.d.mts.map +1 -0
- package/dist/runtimeToolNames.mjs +49 -0
- package/dist/runtimeToolNames.mjs.map +1 -0
- package/dist/runtimeTransition.cjs +27 -0
- package/dist/runtimeTransition.cjs.map +1 -0
- package/dist/runtimeTransition.d.mts +114 -0
- package/dist/runtimeTransition.d.mts.map +1 -0
- package/dist/runtimeTransition.mjs +24 -0
- package/dist/runtimeTransition.mjs.map +1 -0
- package/dist/sandboxHarness.cjs +6 -0
- package/dist/sandboxHarness.d.mts +2 -0
- package/dist/sandboxHarness.mjs +2 -0
- package/dist/server.cjs +17 -0
- package/dist/server.d.mts +10 -0
- package/dist/server.mjs +7 -0
- package/dist/serverFacet.cjs +30 -0
- package/dist/serverFacet.d.mts +8 -0
- package/dist/serverFacet.mjs +8 -0
- package/dist/serverTelemetry.cjs +25 -0
- package/dist/serverTelemetry.cjs.map +1 -0
- package/dist/serverTelemetry.d.mts +12 -0
- package/dist/serverTelemetry.d.mts.map +1 -0
- package/dist/serverTelemetry.mjs +23 -0
- package/dist/serverTelemetry.mjs.map +1 -0
- package/dist/sessionFilesApi.cjs +96 -0
- package/dist/sessionFilesApi.cjs.map +1 -0
- package/dist/sessionFilesApi.d.mts +7 -0
- package/dist/sessionFilesApi.d.mts.map +1 -0
- package/dist/sessionFilesApi.mjs +91 -0
- package/dist/sessionFilesApi.mjs.map +1 -0
- package/dist/sessionMcp.cjs +6 -0
- package/dist/sessionMcp.d.mts +5 -0
- package/dist/sessionMcp.mjs +3 -0
- package/dist/sessionProtocol.cjs +8 -0
- package/dist/sessionProtocol.d.mts +3 -0
- package/dist/sessionProtocol.mjs +2 -0
- package/dist/skills.cjs +9 -0
- package/dist/skills.d.mts +2 -0
- package/dist/skills.mjs +2 -0
- package/dist/sqliteHistoryImport.cjs +151 -0
- package/dist/sqliteHistoryImport.cjs.map +1 -0
- package/dist/sqliteHistoryImport.d.mts +8 -0
- package/dist/sqliteHistoryImport.d.mts.map +1 -0
- package/dist/sqliteHistoryImport.mjs +146 -0
- package/dist/sqliteHistoryImport.mjs.map +1 -0
- package/dist/sqliteSessionStorage.cjs +53 -0
- package/dist/sqliteSessionStorage.cjs.map +1 -0
- package/dist/sqliteSessionStorage.d.mts +7 -0
- package/dist/sqliteSessionStorage.d.mts.map +1 -0
- package/dist/sqliteSessionStorage.mjs +49 -0
- package/dist/sqliteSessionStorage.mjs.map +1 -0
- package/dist/src/constants/authorTools.cjs +10 -0
- package/dist/src/constants/authorTools.cjs.map +1 -0
- package/dist/src/constants/authorTools.d.mts +6 -0
- package/dist/src/constants/authorTools.d.mts.map +1 -0
- package/dist/src/constants/authorTools.mjs +8 -0
- package/dist/src/constants/authorTools.mjs.map +1 -0
- package/dist/src/constants/contextApi.cjs +28 -0
- package/dist/src/constants/contextApi.cjs.map +1 -0
- package/dist/src/constants/contextApi.d.mts +21 -0
- package/dist/src/constants/contextApi.d.mts.map +1 -0
- package/dist/src/constants/contextApi.mjs +23 -0
- package/dist/src/constants/contextApi.mjs.map +1 -0
- package/dist/src/constants/remote.cjs +90 -0
- package/dist/src/constants/remote.cjs.map +1 -0
- package/dist/src/constants/remote.mjs +69 -0
- package/dist/src/constants/remote.mjs.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.cjs +12 -0
- package/dist/src/constants/voiceReloadHandoff.cjs.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.d.mts +7 -0
- package/dist/src/constants/voiceReloadHandoff.d.mts.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.mjs +9 -0
- package/dist/src/constants/voiceReloadHandoff.mjs.map +1 -0
- package/dist/src/constants/voiceTools.cjs +96 -0
- package/dist/src/constants/voiceTools.cjs.map +1 -0
- package/dist/src/constants/voiceTools.d.mts +58 -0
- package/dist/src/constants/voiceTools.d.mts.map +1 -0
- package/dist/src/constants/voiceTools.mjs +60 -0
- package/dist/src/constants/voiceTools.mjs.map +1 -0
- package/dist/src/extensions/extensionFile.cjs +165 -0
- package/dist/src/extensions/extensionFile.cjs.map +1 -0
- package/dist/src/extensions/extensionFile.d.mts +79 -0
- package/dist/src/extensions/extensionFile.d.mts.map +1 -0
- package/dist/src/extensions/extensionFile.mjs +144 -0
- package/dist/src/extensions/extensionFile.mjs.map +1 -0
- package/dist/src/extensions/serverPlugin.cjs +106 -0
- package/dist/src/extensions/serverPlugin.cjs.map +1 -0
- package/dist/src/extensions/serverPlugin.d.mts +5 -0
- package/dist/src/extensions/serverPlugin.d.mts.map +1 -0
- package/dist/src/extensions/serverPlugin.mjs +106 -0
- package/dist/src/extensions/serverPlugin.mjs.map +1 -0
- package/dist/src/extensions/webPlugin.cjs +131 -0
- package/dist/src/extensions/webPlugin.cjs.map +1 -0
- package/dist/src/extensions/webPlugin.d.mts +66 -0
- package/dist/src/extensions/webPlugin.d.mts.map +1 -0
- package/dist/src/extensions/webPlugin.mjs +110 -0
- package/dist/src/extensions/webPlugin.mjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.cjs +572 -0
- package/dist/src/pi/piSessionRuntime.cjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.d.mts +43 -0
- package/dist/src/pi/piSessionRuntime.d.mts.map +1 -0
- package/dist/src/pi/piSessionRuntime.mjs +571 -0
- package/dist/src/pi/piSessionRuntime.mjs.map +1 -0
- package/dist/src/pi/piWebSocketListener.cjs +115 -0
- package/dist/src/pi/piWebSocketListener.cjs.map +1 -0
- package/dist/src/pi/piWebSocketListener.mjs +115 -0
- package/dist/src/pi/piWebSocketListener.mjs.map +1 -0
- package/dist/src/schemas/agentModel.cjs +33 -0
- package/dist/src/schemas/agentModel.cjs.map +1 -0
- package/dist/src/schemas/agentModel.d.mts +26 -0
- package/dist/src/schemas/agentModel.d.mts.map +1 -0
- package/dist/src/schemas/agentModel.mjs +32 -0
- package/dist/src/schemas/agentModel.mjs.map +1 -0
- package/dist/src/schemas/apiContracts.d.mts +58 -0
- package/dist/src/schemas/apiContracts.d.mts.map +1 -0
- package/dist/src/schemas/askUser.cjs +42 -0
- package/dist/src/schemas/askUser.cjs.map +1 -0
- package/dist/src/schemas/askUser.d.mts +47 -0
- package/dist/src/schemas/askUser.d.mts.map +1 -0
- package/dist/src/schemas/askUser.mjs +37 -0
- package/dist/src/schemas/askUser.mjs.map +1 -0
- package/dist/src/schemas/backgroundWork.cjs +31 -0
- package/dist/src/schemas/backgroundWork.cjs.map +1 -0
- package/dist/src/schemas/backgroundWork.d.mts +72 -0
- package/dist/src/schemas/backgroundWork.d.mts.map +1 -0
- package/dist/src/schemas/backgroundWork.mjs +27 -0
- package/dist/src/schemas/backgroundWork.mjs.map +1 -0
- package/dist/src/schemas/childProcess.cjs +67 -0
- package/dist/src/schemas/childProcess.cjs.map +1 -0
- package/dist/src/schemas/childProcess.d.mts +30 -0
- package/dist/src/schemas/childProcess.d.mts.map +1 -0
- package/dist/src/schemas/childProcess.mjs +55 -0
- package/dist/src/schemas/childProcess.mjs.map +1 -0
- package/dist/src/schemas/cockpitContainer.cjs +31 -0
- package/dist/src/schemas/cockpitContainer.cjs.map +1 -0
- package/dist/src/schemas/cockpitContainer.d.mts +80 -0
- package/dist/src/schemas/cockpitContainer.d.mts.map +1 -0
- package/dist/src/schemas/cockpitContainer.mjs +30 -0
- package/dist/src/schemas/cockpitContainer.mjs.map +1 -0
- package/dist/src/schemas/contextContributions.cjs +17 -0
- package/dist/src/schemas/contextContributions.cjs.map +1 -0
- package/dist/src/schemas/contextContributions.d.mts +49 -0
- package/dist/src/schemas/contextContributions.d.mts.map +1 -0
- package/dist/src/schemas/contextContributions.mjs +15 -0
- package/dist/src/schemas/contextContributions.mjs.map +1 -0
- package/dist/src/schemas/delegation.cjs +91 -0
- package/dist/src/schemas/delegation.cjs.map +1 -0
- package/dist/src/schemas/delegation.d.mts +95 -0
- package/dist/src/schemas/delegation.d.mts.map +1 -0
- package/dist/src/schemas/delegation.mjs +76 -0
- package/dist/src/schemas/delegation.mjs.map +1 -0
- package/dist/src/schemas/extensionFile.d.mts +136 -0
- package/dist/src/schemas/extensionFile.d.mts.map +1 -0
- package/dist/src/schemas/footer.cjs +48 -0
- package/dist/src/schemas/footer.cjs.map +1 -0
- package/dist/src/schemas/footer.d.mts +48 -0
- package/dist/src/schemas/footer.d.mts.map +1 -0
- package/dist/src/schemas/footer.mjs +45 -0
- package/dist/src/schemas/footer.mjs.map +1 -0
- package/dist/src/schemas/headless.cjs +44 -0
- package/dist/src/schemas/headless.cjs.map +1 -0
- package/dist/src/schemas/headless.d.mts +370 -0
- package/dist/src/schemas/headless.d.mts.map +1 -0
- package/dist/src/schemas/headless.mjs +38 -0
- package/dist/src/schemas/headless.mjs.map +1 -0
- package/dist/src/schemas/help.cjs +281 -0
- package/dist/src/schemas/help.cjs.map +1 -0
- package/dist/src/schemas/help.d.mts +119 -0
- package/dist/src/schemas/help.d.mts.map +1 -0
- package/dist/src/schemas/help.mjs +262 -0
- package/dist/src/schemas/help.mjs.map +1 -0
- package/dist/src/schemas/hubChannel.cjs +20 -0
- package/dist/src/schemas/hubChannel.cjs.map +1 -0
- package/dist/src/schemas/hubChannel.d.mts +236 -0
- package/dist/src/schemas/hubChannel.d.mts.map +1 -0
- package/dist/src/schemas/hubChannel.mjs +19 -0
- package/dist/src/schemas/hubChannel.mjs.map +1 -0
- package/dist/src/schemas/leader.cjs +57 -0
- package/dist/src/schemas/leader.cjs.map +1 -0
- package/dist/src/schemas/leader.d.mts +107 -0
- package/dist/src/schemas/leader.d.mts.map +1 -0
- package/dist/src/schemas/leader.mjs +51 -0
- package/dist/src/schemas/leader.mjs.map +1 -0
- package/dist/src/schemas/mcpBundle.cjs +92 -0
- package/dist/src/schemas/mcpBundle.cjs.map +1 -0
- package/dist/src/schemas/mcpBundle.d.mts +33 -0
- package/dist/src/schemas/mcpBundle.d.mts.map +1 -0
- package/dist/src/schemas/mcpBundle.mjs +90 -0
- package/dist/src/schemas/mcpBundle.mjs.map +1 -0
- package/dist/src/schemas/mcpFacet.cjs +24 -0
- package/dist/src/schemas/mcpFacet.cjs.map +1 -0
- package/dist/src/schemas/mcpFacet.d.mts +91 -0
- package/dist/src/schemas/mcpFacet.d.mts.map +1 -0
- package/dist/src/schemas/mcpFacet.mjs +21 -0
- package/dist/src/schemas/mcpFacet.mjs.map +1 -0
- package/dist/src/schemas/mcpProjection.cjs +117 -0
- package/dist/src/schemas/mcpProjection.cjs.map +1 -0
- package/dist/src/schemas/mcpProjection.d.mts +124 -0
- package/dist/src/schemas/mcpProjection.d.mts.map +1 -0
- package/dist/src/schemas/mcpProjection.mjs +104 -0
- package/dist/src/schemas/mcpProjection.mjs.map +1 -0
- package/dist/src/schemas/mcpSession.cjs +57 -0
- package/dist/src/schemas/mcpSession.cjs.map +1 -0
- package/dist/src/schemas/mcpSession.d.mts +57 -0
- package/dist/src/schemas/mcpSession.d.mts.map +1 -0
- package/dist/src/schemas/mcpSession.mjs +51 -0
- package/dist/src/schemas/mcpSession.mjs.map +1 -0
- package/dist/src/schemas/mcpStatus.cjs +52 -0
- package/dist/src/schemas/mcpStatus.cjs.map +1 -0
- package/dist/src/schemas/mcpStatus.d.mts +73 -0
- package/dist/src/schemas/mcpStatus.d.mts.map +1 -0
- package/dist/src/schemas/mcpStatus.mjs +48 -0
- package/dist/src/schemas/mcpStatus.mjs.map +1 -0
- package/dist/src/schemas/mcpToolResolver.cjs +17 -0
- package/dist/src/schemas/mcpToolResolver.cjs.map +1 -0
- package/dist/src/schemas/mcpToolResolver.d.mts +24 -0
- package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -0
- package/dist/src/schemas/mcpToolResolver.mjs +15 -0
- package/dist/src/schemas/mcpToolResolver.mjs.map +1 -0
- package/dist/src/schemas/narration.cjs +54 -0
- package/dist/src/schemas/narration.cjs.map +1 -0
- package/dist/src/schemas/narration.d.mts +29 -0
- package/dist/src/schemas/narration.d.mts.map +1 -0
- package/dist/src/schemas/narration.mjs +47 -0
- package/dist/src/schemas/narration.mjs.map +1 -0
- package/dist/src/schemas/notification.cjs +122 -0
- package/dist/src/schemas/notification.cjs.map +1 -0
- package/dist/src/schemas/notification.d.mts +48 -0
- package/dist/src/schemas/notification.d.mts.map +1 -0
- package/dist/src/schemas/notification.mjs +108 -0
- package/dist/src/schemas/notification.mjs.map +1 -0
- package/dist/src/schemas/packageApi.cjs +73 -0
- package/dist/src/schemas/packageApi.cjs.map +1 -0
- package/dist/src/schemas/packageApi.d.mts +249 -0
- package/dist/src/schemas/packageApi.d.mts.map +1 -0
- package/dist/src/schemas/packageApi.mjs +64 -0
- package/dist/src/schemas/packageApi.mjs.map +1 -0
- package/dist/src/schemas/piTool.cjs +26 -0
- package/dist/src/schemas/piTool.cjs.map +1 -0
- package/dist/src/schemas/piTool.d.mts +25 -0
- package/dist/src/schemas/piTool.d.mts.map +1 -0
- package/dist/src/schemas/piTool.mjs +26 -0
- package/dist/src/schemas/piTool.mjs.map +1 -0
- package/dist/src/schemas/pluginContributions.cjs +19 -0
- package/dist/src/schemas/pluginContributions.cjs.map +1 -0
- package/dist/src/schemas/pluginContributions.d.mts +56 -0
- package/dist/src/schemas/pluginContributions.d.mts.map +1 -0
- package/dist/src/schemas/pluginContributions.mjs +18 -0
- package/dist/src/schemas/pluginContributions.mjs.map +1 -0
- package/dist/src/schemas/pluginProtocol.cjs +103 -0
- package/dist/src/schemas/pluginProtocol.cjs.map +1 -0
- package/dist/src/schemas/pluginProtocol.d.mts +68 -0
- package/dist/src/schemas/pluginProtocol.d.mts.map +1 -0
- package/dist/src/schemas/pluginProtocol.mjs +96 -0
- package/dist/src/schemas/pluginProtocol.mjs.map +1 -0
- package/dist/src/schemas/profileIdentity.cjs +67 -0
- package/dist/src/schemas/profileIdentity.cjs.map +1 -0
- package/dist/src/schemas/profileIdentity.d.mts +50 -0
- package/dist/src/schemas/profileIdentity.d.mts.map +1 -0
- package/dist/src/schemas/profileIdentity.mjs +64 -0
- package/dist/src/schemas/profileIdentity.mjs.map +1 -0
- package/dist/src/schemas/readiness.cjs +251 -0
- package/dist/src/schemas/readiness.cjs.map +1 -0
- package/dist/src/schemas/readiness.d.mts +84 -0
- package/dist/src/schemas/readiness.d.mts.map +1 -0
- package/dist/src/schemas/readiness.mjs +246 -0
- package/dist/src/schemas/readiness.mjs.map +1 -0
- package/dist/src/schemas/relaunchHandoff.cjs +47 -0
- package/dist/src/schemas/relaunchHandoff.cjs.map +1 -0
- package/dist/src/schemas/relaunchHandoff.d.mts +25 -0
- package/dist/src/schemas/relaunchHandoff.d.mts.map +1 -0
- package/dist/src/schemas/relaunchHandoff.mjs +44 -0
- package/dist/src/schemas/relaunchHandoff.mjs.map +1 -0
- package/dist/src/schemas/sandboxHarness.cjs +29 -0
- package/dist/src/schemas/sandboxHarness.cjs.map +1 -0
- package/dist/src/schemas/sandboxHarness.d.mts +39 -0
- package/dist/src/schemas/sandboxHarness.d.mts.map +1 -0
- package/dist/src/schemas/sandboxHarness.mjs +26 -0
- package/dist/src/schemas/sandboxHarness.mjs.map +1 -0
- package/dist/src/schemas/serverBundle.cjs +79 -0
- package/dist/src/schemas/serverBundle.cjs.map +1 -0
- package/dist/src/schemas/serverBundle.d.mts +34 -0
- package/dist/src/schemas/serverBundle.d.mts.map +1 -0
- package/dist/src/schemas/serverBundle.mjs +77 -0
- package/dist/src/schemas/serverBundle.mjs.map +1 -0
- package/dist/src/schemas/serverFacet.cjs +102 -0
- package/dist/src/schemas/serverFacet.cjs.map +1 -0
- package/dist/src/schemas/serverFacet.d.mts +141 -0
- package/dist/src/schemas/serverFacet.d.mts.map +1 -0
- package/dist/src/schemas/serverFacet.mjs +93 -0
- package/dist/src/schemas/serverFacet.mjs.map +1 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts +45 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts.map +1 -0
- package/dist/src/schemas/sessionProtocol.cjs +17 -0
- package/dist/src/schemas/sessionProtocol.cjs.map +1 -0
- package/dist/src/schemas/sessionProtocol.d.mts +308 -0
- package/dist/src/schemas/sessionProtocol.d.mts.map +1 -0
- package/dist/src/schemas/sessionProtocol.mjs +12 -0
- package/dist/src/schemas/sessionProtocol.mjs.map +1 -0
- package/dist/src/schemas/sessionUpdates.d.mts +34 -0
- package/dist/src/schemas/sessionUpdates.d.mts.map +1 -0
- package/dist/src/schemas/skills.cjs +115 -0
- package/dist/src/schemas/skills.cjs.map +1 -0
- package/dist/src/schemas/skills.d.mts +65 -0
- package/dist/src/schemas/skills.d.mts.map +1 -0
- package/dist/src/schemas/skills.mjs +109 -0
- package/dist/src/schemas/skills.mjs.map +1 -0
- package/dist/src/schemas/toolOverrides.cjs +17 -0
- package/dist/src/schemas/toolOverrides.cjs.map +1 -0
- package/dist/src/schemas/toolOverrides.d.mts +29 -0
- package/dist/src/schemas/toolOverrides.d.mts.map +1 -0
- package/dist/src/schemas/toolOverrides.mjs +15 -0
- package/dist/src/schemas/toolOverrides.mjs.map +1 -0
- package/dist/src/schemas/toolSurface.cjs +17 -0
- package/dist/src/schemas/toolSurface.cjs.map +1 -0
- package/dist/src/schemas/toolSurface.d.mts +70 -0
- package/dist/src/schemas/toolSurface.d.mts.map +1 -0
- package/dist/src/schemas/toolSurface.mjs +15 -0
- package/dist/src/schemas/toolSurface.mjs.map +1 -0
- package/dist/src/schemas/uiHub.cjs +17 -0
- package/dist/src/schemas/uiHub.cjs.map +1 -0
- package/dist/src/schemas/uiHub.d.mts +23 -0
- package/dist/src/schemas/uiHub.d.mts.map +1 -0
- package/dist/src/schemas/uiHub.mjs +15 -0
- package/dist/src/schemas/uiHub.mjs.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.cjs +78 -0
- package/dist/src/schemas/voiceReloadHandoff.cjs.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.d.mts +31 -0
- package/dist/src/schemas/voiceReloadHandoff.d.mts.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.mjs +75 -0
- package/dist/src/schemas/voiceReloadHandoff.mjs.map +1 -0
- package/dist/src/schemas/voiceTools.cjs +205 -0
- package/dist/src/schemas/voiceTools.cjs.map +1 -0
- package/dist/src/schemas/voiceTools.d.mts +120 -0
- package/dist/src/schemas/voiceTools.d.mts.map +1 -0
- package/dist/src/schemas/voiceTools.mjs +194 -0
- package/dist/src/schemas/voiceTools.mjs.map +1 -0
- package/dist/src/server/devProxyForward.cjs +141 -0
- package/dist/src/server/devProxyForward.cjs.map +1 -0
- package/dist/src/server/devProxyForward.mjs +139 -0
- package/dist/src/server/devProxyForward.mjs.map +1 -0
- package/dist/src/server/devProxyRoutes.cjs +97 -0
- package/dist/src/server/devProxyRoutes.cjs.map +1 -0
- package/dist/src/server/devProxyRoutes.mjs +97 -0
- package/dist/src/server/devProxyRoutes.mjs.map +1 -0
- package/dist/src/server/devProxySocket.cjs +87 -0
- package/dist/src/server/devProxySocket.cjs.map +1 -0
- package/dist/src/server/devProxySocket.mjs +87 -0
- package/dist/src/server/devProxySocket.mjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.cjs +1964 -0
- package/dist/src/server/directHarnessRuntime.cjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.d.mts +3 -0
- package/dist/src/server/directHarnessRuntime.mjs +1958 -0
- package/dist/src/server/directHarnessRuntime.mjs.map +1 -0
- package/dist/src/server/harnessErrorMessage.cjs +13 -0
- package/dist/src/server/harnessErrorMessage.cjs.map +1 -0
- package/dist/src/server/harnessErrorMessage.mjs +13 -0
- package/dist/src/server/harnessErrorMessage.mjs.map +1 -0
- package/dist/src/server/headlessProtocol.cjs +366 -0
- package/dist/src/server/headlessProtocol.cjs.map +1 -0
- package/dist/src/server/headlessProtocol.mjs +366 -0
- package/dist/src/server/headlessProtocol.mjs.map +1 -0
- package/dist/src/server/jsonlTranscriptReader.cjs +85 -0
- package/dist/src/server/jsonlTranscriptReader.cjs.map +1 -0
- package/dist/src/server/jsonlTranscriptReader.mjs +83 -0
- package/dist/src/server/jsonlTranscriptReader.mjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.cjs +115 -0
- package/dist/src/server/mcpBundleLoader.cjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.d.mts +27 -0
- package/dist/src/server/mcpBundleLoader.d.mts.map +1 -0
- package/dist/src/server/mcpBundleLoader.mjs +111 -0
- package/dist/src/server/mcpBundleLoader.mjs.map +1 -0
- package/dist/src/server/nativeChildTranscriptReader.cjs +20 -0
- package/dist/src/server/nativeChildTranscriptReader.cjs.map +1 -0
- package/dist/src/server/nativeChildTranscriptReader.mjs +18 -0
- package/dist/src/server/nativeChildTranscriptReader.mjs.map +1 -0
- package/dist/src/server/remoteRoutes.cjs +386 -0
- package/dist/src/server/remoteRoutes.cjs.map +1 -0
- package/dist/src/server/remoteRoutes.mjs +386 -0
- package/dist/src/server/remoteRoutes.mjs.map +1 -0
- package/dist/src/server/serverFacetLoader.cjs +220 -0
- package/dist/src/server/serverFacetLoader.cjs.map +1 -0
- package/dist/src/server/serverFacetLoader.d.mts +77 -0
- package/dist/src/server/serverFacetLoader.d.mts.map +1 -0
- package/dist/src/server/serverFacetLoader.mjs +215 -0
- package/dist/src/server/serverFacetLoader.mjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.cjs +494 -0
- package/dist/src/server/sessionMcpHandler.cjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.d.mts +47 -0
- package/dist/src/server/sessionMcpHandler.d.mts.map +1 -0
- package/dist/src/server/sessionMcpHandler.mjs +493 -0
- package/dist/src/server/sessionMcpHandler.mjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.cjs +780 -0
- package/dist/src/server/sessionMcpRoutes.cjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.mjs +775 -0
- package/dist/src/server/sessionMcpRoutes.mjs.map +1 -0
- package/dist/src/server/threadJournals.cjs +172 -0
- package/dist/src/server/threadJournals.cjs.map +1 -0
- package/dist/src/server/threadJournals.mjs +169 -0
- package/dist/src/server/threadJournals.mjs.map +1 -0
- package/dist/src/services/acpSessionUpdates/index.cjs +129 -0
- package/dist/src/services/acpSessionUpdates/index.cjs.map +1 -0
- package/dist/src/services/acpSessionUpdates/index.mjs +129 -0
- package/dist/src/services/acpSessionUpdates/index.mjs.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.cjs +60 -0
- package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.d.mts +24 -0
- package/dist/src/services/apiSurfaceAssert/index.d.mts.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.mjs +60 -0
- package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -0
- package/dist/src/services/bundlePublication/index.cjs +88 -0
- package/dist/src/services/bundlePublication/index.cjs.map +1 -0
- package/dist/src/services/bundlePublication/index.mjs +85 -0
- package/dist/src/services/bundlePublication/index.mjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.cjs +14 -0
- package/dist/src/services/contextApiUrls/index.cjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.d.mts +6 -0
- package/dist/src/services/contextApiUrls/index.d.mts.map +1 -0
- package/dist/src/services/contextApiUrls/index.mjs +14 -0
- package/dist/src/services/contextApiUrls/index.mjs.map +1 -0
- package/dist/src/services/contextContributions/index.cjs +79 -0
- package/dist/src/services/contextContributions/index.cjs.map +1 -0
- package/dist/src/services/contextContributions/index.d.mts +6 -0
- package/dist/src/services/contextContributions/index.d.mts.map +1 -0
- package/dist/src/services/contextContributions/index.mjs +79 -0
- package/dist/src/services/contextContributions/index.mjs.map +1 -0
- package/dist/src/services/contextUsage/index.cjs +27 -0
- package/dist/src/services/contextUsage/index.cjs.map +1 -0
- package/dist/src/services/contextUsage/index.mjs +25 -0
- package/dist/src/services/contextUsage/index.mjs.map +1 -0
- package/dist/src/services/devProxyPolicy/index.cjs +168 -0
- package/dist/src/services/devProxyPolicy/index.cjs.map +1 -0
- package/dist/src/services/devProxyPolicy/index.mjs +165 -0
- package/dist/src/services/devProxyPolicy/index.mjs.map +1 -0
- package/dist/src/services/devProxyStore/index.cjs +107 -0
- package/dist/src/services/devProxyStore/index.cjs.map +1 -0
- package/dist/src/services/devProxyStore/index.mjs +104 -0
- package/dist/src/services/devProxyStore/index.mjs.map +1 -0
- package/dist/src/services/deviceAuth/index.cjs +125 -0
- package/dist/src/services/deviceAuth/index.cjs.map +1 -0
- package/dist/src/services/deviceAuth/index.d.mts +9 -0
- package/dist/src/services/deviceAuth/index.d.mts.map +1 -0
- package/dist/src/services/deviceAuth/index.mjs +125 -0
- package/dist/src/services/deviceAuth/index.mjs.map +1 -0
- package/dist/src/services/deviceSessions/index.cjs +147 -0
- package/dist/src/services/deviceSessions/index.cjs.map +1 -0
- package/dist/src/services/deviceSessions/index.d.mts +15 -0
- package/dist/src/services/deviceSessions/index.d.mts.map +1 -0
- package/dist/src/services/deviceSessions/index.mjs +141 -0
- package/dist/src/services/deviceSessions/index.mjs.map +1 -0
- package/dist/src/services/headlessClient/index.cjs +125 -0
- package/dist/src/services/headlessClient/index.cjs.map +1 -0
- package/dist/src/services/headlessClient/index.mjs +125 -0
- package/dist/src/services/headlessClient/index.mjs.map +1 -0
- package/dist/src/services/historyCreationFileSystem/index.cjs +115 -0
- package/dist/src/services/historyCreationFileSystem/index.cjs.map +1 -0
- package/dist/src/services/historyCreationFileSystem/index.mjs +115 -0
- package/dist/src/services/historyCreationFileSystem/index.mjs.map +1 -0
- package/dist/src/services/hubChannelHarness/index.cjs +50 -0
- package/dist/src/services/hubChannelHarness/index.cjs.map +1 -0
- package/dist/src/services/hubChannelHarness/index.d.mts +17 -0
- package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -0
- package/dist/src/services/hubChannelHarness/index.mjs +50 -0
- package/dist/src/services/hubChannelHarness/index.mjs.map +1 -0
- package/dist/src/services/kernel/index.cjs +147 -0
- package/dist/src/services/kernel/index.cjs.map +1 -0
- package/dist/src/services/kernel/index.d.mts +9 -0
- package/dist/src/services/kernel/index.d.mts.map +1 -0
- package/dist/src/services/kernel/index.mjs +147 -0
- package/dist/src/services/kernel/index.mjs.map +1 -0
- package/dist/src/services/loginFlow/index.cjs +131 -0
- package/dist/src/services/loginFlow/index.cjs.map +1 -0
- package/dist/src/services/loginFlow/index.mjs +131 -0
- package/dist/src/services/loginFlow/index.mjs.map +1 -0
- package/dist/src/services/loopbackAddress/index.cjs +58 -0
- package/dist/src/services/loopbackAddress/index.cjs.map +1 -0
- package/dist/src/services/loopbackAddress/index.mjs +56 -0
- package/dist/src/services/loopbackAddress/index.mjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.cjs +144 -0
- package/dist/src/services/openSessionRegistry/index.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.d.mts +40 -0
- package/dist/src/services/openSessionRegistry/index.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/index.mjs +141 -0
- package/dist/src/services/openSessionRegistry/index.mjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.cjs +36 -0
- package/dist/src/services/packageApiHarness/index.cjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.d.mts +40 -0
- package/dist/src/services/packageApiHarness/index.d.mts.map +1 -0
- package/dist/src/services/packageApiHarness/index.mjs +36 -0
- package/dist/src/services/packageApiHarness/index.mjs.map +1 -0
- package/dist/src/services/packageResource/index.cjs +54 -0
- package/dist/src/services/packageResource/index.cjs.map +1 -0
- package/dist/src/services/packageResource/index.d.mts +26 -0
- package/dist/src/services/packageResource/index.d.mts.map +1 -0
- package/dist/src/services/packageResource/index.mjs +51 -0
- package/dist/src/services/packageResource/index.mjs.map +1 -0
- package/dist/src/services/pairingFlow/index.cjs +145 -0
- package/dist/src/services/pairingFlow/index.cjs.map +1 -0
- package/dist/src/services/pairingFlow/index.d.mts +44 -0
- package/dist/src/services/pairingFlow/index.d.mts.map +1 -0
- package/dist/src/services/pairingFlow/index.mjs +145 -0
- package/dist/src/services/pairingFlow/index.mjs.map +1 -0
- package/dist/src/services/pairingPage/index.cjs +450 -0
- package/dist/src/services/pairingPage/index.cjs.map +1 -0
- package/dist/src/services/pairingPage/index.mjs +447 -0
- package/dist/src/services/pairingPage/index.mjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.cjs +821 -0
- package/dist/src/services/piExtensionHost/index.cjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.mjs +817 -0
- package/dist/src/services/piExtensionHost/index.mjs.map +1 -0
- package/dist/src/services/piHelpTools/index.cjs +68 -0
- package/dist/src/services/piHelpTools/index.cjs.map +1 -0
- package/dist/src/services/piHelpTools/index.d.mts +10 -0
- package/dist/src/services/piHelpTools/index.d.mts.map +1 -0
- package/dist/src/services/piHelpTools/index.mjs +68 -0
- package/dist/src/services/piHelpTools/index.mjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.cjs +112 -0
- package/dist/src/services/piSessionEntries/index.cjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.mjs +108 -0
- package/dist/src/services/piSessionEntries/index.mjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.cjs +71 -0
- package/dist/src/services/pluginLifecycle/index.cjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.d.mts +11 -0
- package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -0
- package/dist/src/services/pluginLifecycle/index.mjs +71 -0
- package/dist/src/services/pluginLifecycle/index.mjs.map +1 -0
- package/dist/src/services/providerAuth/index.cjs +156 -0
- package/dist/src/services/providerAuth/index.cjs.map +1 -0
- package/dist/src/services/providerAuth/index.mjs +154 -0
- package/dist/src/services/providerAuth/index.mjs.map +1 -0
- package/dist/src/services/remoteAccess/index.cjs +396 -0
- package/dist/src/services/remoteAccess/index.cjs.map +1 -0
- package/dist/src/services/remoteAccess/index.d.mts +81 -0
- package/dist/src/services/remoteAccess/index.d.mts.map +1 -0
- package/dist/src/services/remoteAccess/index.mjs +396 -0
- package/dist/src/services/remoteAccess/index.mjs.map +1 -0
- package/dist/src/services/remoteAccessSettings/index.cjs +151 -0
- package/dist/src/services/remoteAccessSettings/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessSettings/index.mjs +149 -0
- package/dist/src/services/remoteAccessSettings/index.mjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.cjs +126 -0
- package/dist/src/services/remoteAccessStore/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.mjs +121 -0
- package/dist/src/services/remoteAccessStore/index.mjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs +190 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.d.mts +7 -0
- package/dist/src/services/remoteGuardPolicy/index.d.mts.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs +186 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs.map +1 -0
- package/dist/src/services/requestReceipts/index.cjs +161 -0
- package/dist/src/services/requestReceipts/index.cjs.map +1 -0
- package/dist/src/services/requestReceipts/index.d.mts +11 -0
- package/dist/src/services/requestReceipts/index.d.mts.map +1 -0
- package/dist/src/services/requestReceipts/index.mjs +161 -0
- package/dist/src/services/requestReceipts/index.mjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.cjs +590 -0
- package/dist/src/services/rpcTranscript/index.cjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.d.mts +50 -0
- package/dist/src/services/rpcTranscript/index.d.mts.map +1 -0
- package/dist/src/services/rpcTranscript/index.mjs +589 -0
- package/dist/src/services/rpcTranscript/index.mjs.map +1 -0
- package/dist/src/services/serverFacet/index.cjs +197 -0
- package/dist/src/services/serverFacet/index.cjs.map +1 -0
- package/dist/src/services/serverFacet/index.d.mts +31 -0
- package/dist/src/services/serverFacet/index.d.mts.map +1 -0
- package/dist/src/services/serverFacet/index.mjs +197 -0
- package/dist/src/services/serverFacet/index.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.cjs +46 -0
- package/dist/src/services/sessionGitStatus/index.cjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.mjs +46 -0
- package/dist/src/services/sessionGitStatus/index.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/type.d.mts +8 -0
- package/dist/src/services/sessionGitStatus/type.d.mts.map +1 -0
- package/dist/src/services/sessionMcpActivity/index.cjs +115 -0
- package/dist/src/services/sessionMcpActivity/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpActivity/index.mjs +111 -0
- package/dist/src/services/sessionMcpActivity/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs +432 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts +123 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs +430 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpConversations/index.cjs +217 -0
- package/dist/src/services/sessionMcpConversations/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpConversations/index.mjs +212 -0
- package/dist/src/services/sessionMcpConversations/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.cjs +86 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.mjs +83 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.mjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.cjs +119 -0
- package/dist/src/services/sessionPresentation/index.cjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.mjs +119 -0
- package/dist/src/services/sessionPresentation/index.mjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs +105 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts +29 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs +100 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs +70 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.d.mts +14 -0
- package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.mjs +67 -0
- package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -0
- package/dist/src/services/toolCost/index.cjs +47 -0
- package/dist/src/services/toolCost/index.cjs.map +1 -0
- package/dist/src/services/toolCost/index.d.mts +38 -0
- package/dist/src/services/toolCost/index.d.mts.map +1 -0
- package/dist/src/services/toolCost/index.mjs +46 -0
- package/dist/src/services/toolCost/index.mjs.map +1 -0
- package/dist/src/services/toolOverrides/index.cjs +45 -0
- package/dist/src/services/toolOverrides/index.cjs.map +1 -0
- package/dist/src/services/toolOverrides/index.d.mts +6 -0
- package/dist/src/services/toolOverrides/index.d.mts.map +1 -0
- package/dist/src/services/toolOverrides/index.mjs +45 -0
- package/dist/src/services/toolOverrides/index.mjs.map +1 -0
- package/dist/src/services/toolPrompt/index.cjs +13 -0
- package/dist/src/services/toolPrompt/index.cjs.map +1 -0
- package/dist/src/services/toolPrompt/index.mjs +13 -0
- package/dist/src/services/toolPrompt/index.mjs.map +1 -0
- package/dist/src/services/toolSurface/index.cjs +134 -0
- package/dist/src/services/toolSurface/index.cjs.map +1 -0
- package/dist/src/services/toolSurface/index.d.mts +19 -0
- package/dist/src/services/toolSurface/index.d.mts.map +1 -0
- package/dist/src/services/toolSurface/index.mjs +134 -0
- package/dist/src/services/toolSurface/index.mjs.map +1 -0
- package/dist/src/services/traceContext/index.cjs +13 -0
- package/dist/src/services/traceContext/index.cjs.map +1 -0
- package/dist/src/services/traceContext/index.mjs +13 -0
- package/dist/src/services/traceContext/index.mjs.map +1 -0
- package/dist/src/services/transcriptPages/index.cjs +74 -0
- package/dist/src/services/transcriptPages/index.cjs.map +1 -0
- package/dist/src/services/transcriptPages/index.mjs +73 -0
- package/dist/src/services/transcriptPages/index.mjs.map +1 -0
- package/dist/src/services/tunnelOutput/index.cjs +58 -0
- package/dist/src/services/tunnelOutput/index.cjs.map +1 -0
- package/dist/src/services/tunnelOutput/index.mjs +54 -0
- package/dist/src/services/tunnelOutput/index.mjs.map +1 -0
- package/dist/src/services/tunnelProcess/index.cjs +487 -0
- package/dist/src/services/tunnelProcess/index.cjs.map +1 -0
- package/dist/src/services/tunnelProcess/index.mjs +481 -0
- package/dist/src/services/tunnelProcess/index.mjs.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.cjs +136 -0
- package/dist/src/services/voiceReloadHandoff/index.cjs.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.d.mts +34 -0
- package/dist/src/services/voiceReloadHandoff/index.d.mts.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.mjs +135 -0
- package/dist/src/services/voiceReloadHandoff/index.mjs.map +1 -0
- package/dist/src/services/voiceToolsContract/index.cjs +26 -0
- package/dist/src/services/voiceToolsContract/index.cjs.map +1 -0
- package/dist/src/services/voiceToolsContract/index.d.mts +76 -0
- package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -0
- package/dist/src/services/voiceToolsContract/index.mjs +24 -0
- package/dist/src/services/voiceToolsContract/index.mjs.map +1 -0
- package/dist/src/services/webauthn/index.cjs +262 -0
- package/dist/src/services/webauthn/index.cjs.map +1 -0
- package/dist/src/services/webauthn/index.d.mts +39 -0
- package/dist/src/services/webauthn/index.d.mts.map +1 -0
- package/dist/src/services/webauthn/index.mjs +262 -0
- package/dist/src/services/webauthn/index.mjs.map +1 -0
- package/dist/src/services/webauthnPolicy/index.cjs +163 -0
- package/dist/src/services/webauthnPolicy/index.cjs.map +1 -0
- package/dist/src/services/webauthnPolicy/index.d.mts +41 -0
- package/dist/src/services/webauthnPolicy/index.d.mts.map +1 -0
- package/dist/src/services/webauthnPolicy/index.mjs +156 -0
- package/dist/src/services/webauthnPolicy/index.mjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.cjs +151 -0
- package/dist/src/services/workspaceRegistry/index.cjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.d.mts +47 -0
- package/dist/src/services/workspaceRegistry/index.d.mts.map +1 -0
- package/dist/src/services/workspaceRegistry/index.mjs +144 -0
- package/dist/src/services/workspaceRegistry/index.mjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +261 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +32 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +254 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +28 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +1 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +25 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +1 -0
- package/dist/src/systems/child/services/childSession/index.cjs +219 -0
- package/dist/src/systems/child/services/childSession/index.cjs.map +1 -0
- package/dist/src/systems/child/services/childSession/index.d.mts +14 -0
- package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -0
- package/dist/src/systems/child/services/childSession/index.mjs +219 -0
- package/dist/src/systems/child/services/childSession/index.mjs.map +1 -0
- package/dist/src/systems/child/types/childSession.cjs +19 -0
- package/dist/src/systems/child/types/childSession.cjs.map +1 -0
- package/dist/src/systems/child/types/childSession.d.mts +148 -0
- package/dist/src/systems/child/types/childSession.d.mts.map +1 -0
- package/dist/src/systems/child/types/childSession.mjs +16 -0
- package/dist/src/systems/child/types/childSession.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs +554 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts +111 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs +552 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs +1293 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +14 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs +1288 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -0
- package/dist/src/systems/main/types/headlessHost.d.mts +36 -0
- package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.cjs +73 -0
- package/dist/src/testing/pi/extensionScenarios.cjs.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.d.mts +41 -0
- package/dist/src/testing/pi/extensionScenarios.d.mts.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.mjs +73 -0
- package/dist/src/testing/pi/extensionScenarios.mjs.map +1 -0
- package/dist/src/testing/pi/testHost.cjs +398 -0
- package/dist/src/testing/pi/testHost.cjs.map +1 -0
- package/dist/src/testing/pi/testHost.d.mts +160 -0
- package/dist/src/testing/pi/testHost.d.mts.map +1 -0
- package/dist/src/testing/pi/testHost.mjs +398 -0
- package/dist/src/testing/pi/testHost.mjs.map +1 -0
- package/dist/src/types/config.d.mts +20 -0
- package/dist/src/types/config.d.mts.map +1 -0
- package/dist/src/types/kernel.d.mts +69 -0
- package/dist/src/types/kernel.d.mts.map +1 -0
- package/dist/src/types/remote.d.mts +124 -0
- package/dist/src/types/remote.d.mts.map +1 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts +209 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -0
- package/dist/src/types/server/session.d.mts +5 -0
- package/dist/src/types/server/session.d.mts.map +1 -0
- package/dist/src/types/server/sessionToolSurface.d.mts +44 -0
- package/dist/src/types/server/sessionToolSurface.d.mts.map +1 -0
- package/dist/src/web/models/globalStore.cjs +23 -0
- package/dist/src/web/models/globalStore.cjs.map +1 -0
- package/dist/src/web/models/globalStore.d.mts +6 -0
- package/dist/src/web/models/globalStore.d.mts.map +1 -0
- package/dist/src/web/models/globalStore.mjs +23 -0
- package/dist/src/web/models/globalStore.mjs.map +1 -0
- package/dist/src/web/models/sessionStore.cjs +56 -0
- package/dist/src/web/models/sessionStore.cjs.map +1 -0
- package/dist/src/web/models/sessionStore.d.mts +14 -0
- package/dist/src/web/models/sessionStore.d.mts.map +1 -0
- package/dist/src/web/models/sessionStore.mjs +56 -0
- package/dist/src/web/models/sessionStore.mjs.map +1 -0
- package/dist/src/web/models/workspaceStore.cjs +50 -0
- package/dist/src/web/models/workspaceStore.cjs.map +1 -0
- package/dist/src/web/models/workspaceStore.d.mts +18 -0
- package/dist/src/web/models/workspaceStore.d.mts.map +1 -0
- package/dist/src/web/models/workspaceStore.mjs +50 -0
- package/dist/src/web/models/workspaceStore.mjs.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.cjs +20 -0
- package/dist/src/web/schemas/bundleAssetPolicy.cjs.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.d.mts +10 -0
- package/dist/src/web/schemas/bundleAssetPolicy.d.mts.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.mjs +18 -0
- package/dist/src/web/schemas/bundleAssetPolicy.mjs.map +1 -0
- package/dist/src/web/schemas/template.cjs +15 -0
- package/dist/src/web/schemas/template.cjs.map +1 -0
- package/dist/src/web/schemas/template.d.mts +6 -0
- package/dist/src/web/schemas/template.d.mts.map +1 -0
- package/dist/src/web/schemas/template.mjs +15 -0
- package/dist/src/web/schemas/template.mjs.map +1 -0
- package/dist/src/web/services/apiClient/index.cjs +156 -0
- package/dist/src/web/services/apiClient/index.cjs.map +1 -0
- package/dist/src/web/services/apiClient/index.d.mts +152 -0
- package/dist/src/web/services/apiClient/index.d.mts.map +1 -0
- package/dist/src/web/services/apiClient/index.mjs +154 -0
- package/dist/src/web/services/apiClient/index.mjs.map +1 -0
- package/dist/src/web/services/apiPaths/index.cjs +83 -0
- package/dist/src/web/services/apiPaths/index.cjs.map +1 -0
- package/dist/src/web/services/apiPaths/index.d.mts +81 -0
- package/dist/src/web/services/apiPaths/index.d.mts.map +1 -0
- package/dist/src/web/services/apiPaths/index.mjs +78 -0
- package/dist/src/web/services/apiPaths/index.mjs.map +1 -0
- package/dist/src/web/services/apiRoutes/index.cjs +47 -0
- package/dist/src/web/services/apiRoutes/index.cjs.map +1 -0
- package/dist/src/web/services/apiRoutes/index.d.mts +21 -0
- package/dist/src/web/services/apiRoutes/index.d.mts.map +1 -0
- package/dist/src/web/services/apiRoutes/index.mjs +43 -0
- package/dist/src/web/services/apiRoutes/index.mjs.map +1 -0
- package/dist/src/web/services/mcpWidget.cjs +9 -0
- package/dist/src/web/services/mcpWidget.cjs.map +1 -0
- package/dist/src/web/services/mcpWidget.d.mts +6 -0
- package/dist/src/web/services/mcpWidget.d.mts.map +1 -0
- package/dist/src/web/services/mcpWidget.mjs +9 -0
- package/dist/src/web/services/mcpWidget.mjs.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.cjs +70 -0
- package/dist/src/web/services/sessionRegistry/index.cjs.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.d.mts +29 -0
- package/dist/src/web/services/sessionRegistry/index.d.mts.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.mjs +66 -0
- package/dist/src/web/services/sessionRegistry/index.mjs.map +1 -0
- package/dist/src/web/services/testing/channels.cjs +11 -0
- package/dist/src/web/services/testing/channels.cjs.map +1 -0
- package/dist/src/web/services/testing/channels.d.mts +8 -0
- package/dist/src/web/services/testing/channels.d.mts.map +1 -0
- package/dist/src/web/services/testing/channels.mjs +11 -0
- package/dist/src/web/services/testing/channels.mjs.map +1 -0
- package/dist/src/web/services/testing/index.cjs +27 -0
- package/dist/src/web/services/testing/index.cjs.map +1 -0
- package/dist/src/web/services/testing/index.d.mts +31 -0
- package/dist/src/web/services/testing/index.d.mts.map +1 -0
- package/dist/src/web/services/testing/index.mjs +27 -0
- package/dist/src/web/services/testing/index.mjs.map +1 -0
- package/dist/src/web/services/testing/rpcStub.cjs +58 -0
- package/dist/src/web/services/testing/rpcStub.cjs.map +1 -0
- package/dist/src/web/services/testing/rpcStub.d.mts +37 -0
- package/dist/src/web/services/testing/rpcStub.d.mts.map +1 -0
- package/dist/src/web/services/testing/rpcStub.mjs +58 -0
- package/dist/src/web/services/testing/rpcStub.mjs.map +1 -0
- package/dist/src/web/services/testing/slotProps.cjs +91 -0
- package/dist/src/web/services/testing/slotProps.cjs.map +1 -0
- package/dist/src/web/services/testing/slotProps.d.mts +69 -0
- package/dist/src/web/services/testing/slotProps.d.mts.map +1 -0
- package/dist/src/web/services/testing/slotProps.mjs +90 -0
- package/dist/src/web/services/testing/slotProps.mjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.cjs +128 -0
- package/dist/src/web/services/testing/templateRail.cjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.d.mts +31 -0
- package/dist/src/web/services/testing/templateRail.d.mts.map +1 -0
- package/dist/src/web/services/testing/templateRail.mjs +126 -0
- package/dist/src/web/services/testing/templateRail.mjs.map +1 -0
- package/dist/src/web/services/toolResult/index.cjs +30 -0
- package/dist/src/web/services/toolResult/index.cjs.map +1 -0
- package/dist/src/web/services/toolResult/index.d.mts +14 -0
- package/dist/src/web/services/toolResult/index.d.mts.map +1 -0
- package/dist/src/web/services/toolResult/index.mjs +29 -0
- package/dist/src/web/services/toolResult/index.mjs.map +1 -0
- package/dist/src/web/types/extensionFile.d.mts +59 -0
- package/dist/src/web/types/extensionFile.d.mts.map +1 -0
- package/dist/src/web/types/mcpWidget.d.mts +14 -0
- package/dist/src/web/types/mcpWidget.d.mts.map +1 -0
- package/dist/src/web/types/modelContext.d.mts +43 -0
- package/dist/src/web/types/modelContext.d.mts.map +1 -0
- package/dist/src/web/types/sessionRegistry.d.mts +43 -0
- package/dist/src/web/types/sessionRegistry.d.mts.map +1 -0
- package/dist/src/web/types/template.d.mts +155 -0
- package/dist/src/web/types/template.d.mts.map +1 -0
- package/dist/src/web/types/webPlugin.d.mts +896 -0
- package/dist/src/web/types/webPlugin.d.mts.map +1 -0
- package/dist/syncLocation.cjs +244 -0
- package/dist/syncLocation.cjs.map +1 -0
- package/dist/syncLocation.d.mts +37 -0
- package/dist/syncLocation.d.mts.map +1 -0
- package/dist/syncLocation.mjs +231 -0
- package/dist/syncLocation.mjs.map +1 -0
- package/dist/syncRegistration.cjs +171 -0
- package/dist/syncRegistration.cjs.map +1 -0
- package/dist/syncRegistration.d.mts +48 -0
- package/dist/syncRegistration.d.mts.map +1 -0
- package/dist/syncRegistration.mjs +159 -0
- package/dist/syncRegistration.mjs.map +1 -0
- package/dist/syncStateContract.cjs +19 -0
- package/dist/syncStateContract.cjs.map +1 -0
- package/dist/syncStateContract.d.mts +14 -0
- package/dist/syncStateContract.d.mts.map +1 -0
- package/dist/syncStateContract.mjs +16 -0
- package/dist/syncStateContract.mjs.map +1 -0
- package/dist/terminalPiChildSessionService.cjs +267 -0
- package/dist/terminalPiChildSessionService.cjs.map +1 -0
- package/dist/terminalPiChildSessionService.d.mts +42 -0
- package/dist/terminalPiChildSessionService.d.mts.map +1 -0
- package/dist/terminalPiChildSessionService.mjs +260 -0
- package/dist/terminalPiChildSessionService.mjs.map +1 -0
- package/dist/testing.cjs +11 -0
- package/dist/testing.d.mts +6 -0
- package/dist/testing.mjs +6 -0
- package/dist/toolInventory.cjs +136 -0
- package/dist/toolInventory.cjs.map +1 -0
- package/dist/toolInventory.d.mts +66 -0
- package/dist/toolInventory.d.mts.map +1 -0
- package/dist/toolInventory.mjs +133 -0
- package/dist/toolInventory.mjs.map +1 -0
- package/dist/toolNames.cjs +4 -0
- package/dist/toolNames.d.mts +2 -0
- package/dist/toolNames.mjs +2 -0
- package/dist/toolOverrides.cjs +7 -0
- package/dist/toolOverrides.d.mts +3 -0
- package/dist/toolOverrides.mjs +3 -0
- package/dist/toolSurface.cjs +7 -0
- package/dist/toolSurface.d.mts +3 -0
- package/dist/toolSurface.mjs +3 -0
- package/dist/transition.cjs +5 -0
- package/dist/transition.d.cjs +5 -0
- package/dist/transition.d.mts +2 -0
- package/dist/transition.mjs +2 -0
- package/dist/transitionClassifier.cjs +112 -0
- package/dist/transitionClassifier.cjs.map +1 -0
- package/dist/transitionClassifier.d.mts +18 -0
- package/dist/transitionClassifier.d.mts.map +1 -0
- package/dist/transitionClassifier.mjs +111 -0
- package/dist/transitionClassifier.mjs.map +1 -0
- package/dist/transitionCoordinator.cjs +131 -0
- package/dist/transitionCoordinator.cjs.map +1 -0
- package/dist/transitionCoordinator.d.mts +16 -0
- package/dist/transitionCoordinator.d.mts.map +1 -0
- package/dist/transitionCoordinator.mjs +130 -0
- package/dist/transitionCoordinator.mjs.map +1 -0
- package/dist/typesContextApi.cjs +0 -0
- package/dist/typesContextApi.d.mts +73 -0
- package/dist/typesContextApi.d.mts.map +1 -0
- package/dist/typesContextApi.mjs +1 -0
- package/dist/uiHub.cjs +5 -0
- package/dist/uiHub.d.mts +2 -0
- package/dist/uiHub.mjs +2 -0
- package/dist/v3Export.cjs +1004 -0
- package/dist/v3Export.cjs.map +1 -0
- package/dist/v3Export.d.mts +34 -0
- package/dist/v3Export.d.mts.map +1 -0
- package/dist/v3Export.mjs +1000 -0
- package/dist/v3Export.mjs.map +1 -0
- package/dist/voiceReloadHandoff.cjs +14 -0
- package/dist/voiceReloadHandoff.d.mts +4 -0
- package/dist/voiceReloadHandoff.mjs +4 -0
- package/dist/voiceTools.cjs +56 -0
- package/dist/voiceTools.d.mts +4 -0
- package/dist/voiceTools.mjs +4 -0
- package/dist/web.cjs +64 -0
- package/dist/web.d.mts +19 -0
- package/dist/web.mjs +13 -0
- package/dist/webCompositions.cjs +100 -0
- package/dist/webCompositions.cjs.map +1 -0
- package/dist/webCompositions.d.mts +20 -0
- package/dist/webCompositions.d.mts.map +1 -0
- package/dist/webCompositions.mjs +95 -0
- package/dist/webCompositions.mjs.map +1 -0
- package/dist/webTesting.cjs +14 -0
- package/dist/webTesting.d.mts +6 -0
- package/dist/webTesting.mjs +6 -0
- package/package.json +616 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/packageApiHarness/index.ts"],"sourcesContent":["import type { DoomDirectEventBus } from '../../schemas/hubChannel';\nimport {\n type DoomApi,\n type DoomApiContext,\n type DoomApiHandler,\n DOOM_API_ROUTE_PREFIX,\n type DoomApiScope,\n} from '../../schemas/packageApi';\n\n/**\n * A package's HTTP surface, mounted the way a host mounts it.\n *\n * A package tests its routes by calling its Hono app directly, which proves the\n * routes but not the mount: the host serves them under\n * `/api/plugins/<basePath>` and strips that prefix before the app sees the\n * request. A package whose routes are written absolute passes its own suite and\n * answers nothing in a running cockpit.\n *\n * This mounts the declared `DoomApi` the same way, so a test asks for the URL a\n * browser would ask for. Plain `Request` and `Response`; no HTTP framework and\n * no server.\n */\n\nexport interface MountPackageApiOptions {\n scope?: DoomApiScope;\n sessionId?: string;\n cwd?: string;\n directEvents?: DoomDirectEventBus;\n}\n\nexport interface MountedPackageApi {\n /** Where the host mounted it, for building a URL the way a client does. */\n readonly mountPath: string;\n /** What the API reported to its host; a package that notices nothing leaves this empty. */\n readonly notices: readonly string[];\n /**\n * Fetches one path.\n *\n * The path is host-absolute, so it carries the mount the client would send:\n * `/api/plugins/workflow/runs/repo/blog-4`. A path outside the mount is a 404\n * from this, exactly as it is from the host.\n */\n fetch(path: string, init?: RequestInit): Promise<Response>;\n close(): void;\n}\n\nconst DEFAULT_SCOPE: DoomApiScope = 'global';\nconst DEFAULT_CWD = '/repo';\n/** Any origin will do: the host routes on path, and a Request needs an absolute URL. */\nconst ORIGIN = 'http://host';\n\nexport function mountPackageApi(api: DoomApi, options: MountPackageApiOptions = {}): MountedPackageApi {\n const scope = options.scope ?? DEFAULT_SCOPE;\n const notices: string[] = [];\n const mountPath = `${DOOM_API_ROUTE_PREFIX}/${api.basePath}`;\n const context: DoomApiContext = {\n scope,\n // A session-scoped host knows both; a hub-scoped one knows neither, and an\n // API that reads them anyway should see the same undefined it would there.\n ...(scope === 'session' ? { sessionId: options.sessionId ?? 'test-session', cwd: options.cwd ?? DEFAULT_CWD } : {}),\n ...(options.directEvents ? { directEvents: options.directEvents } : {}),\n onNotice: (message) => notices.push(message),\n };\n const handler: DoomApiHandler = api.start(context);\n\n return {\n mountPath,\n notices,\n async fetch(path, init) {\n const url = new URL(path, ORIGIN);\n if (url.pathname !== mountPath && !url.pathname.startsWith(`${mountPath}/`)) {\n return new Response(`No package API is mounted at ${url.pathname}.`, { status: 404 });\n }\n // The host strips its own mount, so a package declares '/runs/:id' and\n // never repeats where it was mounted.\n url.pathname = url.pathname.slice(mountPath.length) || '/';\n return handler.fetch(new Request(url, init));\n },\n close: () => handler.close(),\n };\n}\n"],"mappings":";;AA8CA,MAAM,gBAA8B;AACpC,MAAM,cAAc;;AAEpB,MAAM,SAAS;AAEf,SAAgB,gBAAgB,KAAc,UAAkC,CAAC,GAAsB;CACrG,MAAM,QAAQ,QAAQ,SAAS;CAC/B,MAAM,UAAoB,CAAC;CAC3B,MAAM,YAAY,GAAG,sBAAsB,GAAG,IAAI;CAClD,MAAM,UAA0B;EAC9B;EAGA,GAAI,UAAU,YAAY;GAAE,WAAW,QAAQ,aAAa;GAAgB,KAAK,QAAQ,OAAO;EAAY,IAAI,CAAC;EACjH,GAAI,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;EACrE,WAAW,YAAY,QAAQ,KAAK,OAAO;CAC7C;CACA,MAAM,UAA0B,IAAI,MAAM,OAAO;CAEjD,OAAO;EACL;EACA;EACA,MAAM,MAAM,MAAM,MAAM;GACtB,MAAM,MAAM,IAAI,IAAI,MAAM,MAAM;GAChC,IAAI,IAAI,aAAa,aAAa,CAAC,IAAI,SAAS,WAAW,GAAG,UAAU,EAAE,GACxE,OAAO,IAAI,SAAS,gCAAgC,IAAI,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;GAItF,IAAI,WAAW,IAAI,SAAS,MAAM,UAAU,MAAM,KAAK;GACvD,OAAO,QAAQ,MAAM,IAAI,QAAQ,KAAK,IAAI,CAAC;EAC7C;EACA,aAAa,QAAQ,MAAM;CAC7B;AACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let node_fs = require("node:fs");
|
|
3
|
+
let node_path = require("node:path");
|
|
4
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
5
|
+
let node_fs_promises = require("node:fs/promises");
|
|
6
|
+
let node_url = require("node:url");
|
|
7
|
+
//#region src/services/packageResource/index.ts
|
|
8
|
+
/**
|
|
9
|
+
* Absolute path of a file shipped by the calling package.
|
|
10
|
+
*
|
|
11
|
+
* Anchored on the nearest ancestor holding a `package.json`, which is the only
|
|
12
|
+
* sentinel that is correct from `src/` and from `dist/` alike. Counting levels
|
|
13
|
+
* with a fixed `new URL('../../..', import.meta.url)` is not: a bundled entry
|
|
14
|
+
* sits at a different depth than its source, so the walk lands outside the
|
|
15
|
+
* package and every read misses.
|
|
16
|
+
*
|
|
17
|
+
* `moduleUrl` is required on purpose. A default of `import.meta.url` resolves to
|
|
18
|
+
* this package rather than the caller's, which is a silently wrong answer.
|
|
19
|
+
*/
|
|
20
|
+
function packageResourcePath(moduleUrl, file) {
|
|
21
|
+
let directory = node_path.default.dirname((0, node_url.fileURLToPath)(moduleUrl));
|
|
22
|
+
for (;;) {
|
|
23
|
+
if ((0, node_fs.existsSync)(node_path.default.join(directory, "package.json"))) {
|
|
24
|
+
const candidate = node_path.default.join(directory, file);
|
|
25
|
+
return (0, node_fs.existsSync)(candidate) ? candidate : void 0;
|
|
26
|
+
}
|
|
27
|
+
const parent = node_path.default.dirname(directory);
|
|
28
|
+
if (parent === directory) return void 0;
|
|
29
|
+
directory = parent;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Text of a file shipped by the calling package, or `''` when it is not there.
|
|
34
|
+
*
|
|
35
|
+
* Empty rather than a placeholder, and never a throw. A context resource's text
|
|
36
|
+
* is pasted into the system prompt, so `'(resource unavailable: README.md)'` is
|
|
37
|
+
* a string the model pays for and may act on; `''` is dropped by the prompt
|
|
38
|
+
* composer instead. A throw is worse still: it propagates out of resource
|
|
39
|
+
* resolution and fails the whole prompt build.
|
|
40
|
+
*/
|
|
41
|
+
async function readPackageResource(moduleUrl, file) {
|
|
42
|
+
const resolved = packageResourcePath(moduleUrl, file);
|
|
43
|
+
if (resolved === void 0) return "";
|
|
44
|
+
try {
|
|
45
|
+
return await (0, node_fs_promises.readFile)(resolved, "utf8");
|
|
46
|
+
} catch {
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
exports.packageResourcePath = packageResourcePath;
|
|
52
|
+
exports.readPackageResource = readPackageResource;
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["path","fileURLToPath","existsSync","readFile"],"sources":["../../../../src/services/packageResource/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Absolute path of a file shipped by the calling package.\n *\n * Anchored on the nearest ancestor holding a `package.json`, which is the only\n * sentinel that is correct from `src/` and from `dist/` alike. Counting levels\n * with a fixed `new URL('../../..', import.meta.url)` is not: a bundled entry\n * sits at a different depth than its source, so the walk lands outside the\n * package and every read misses.\n *\n * `moduleUrl` is required on purpose. A default of `import.meta.url` resolves to\n * this package rather than the caller's, which is a silently wrong answer.\n */\nexport function packageResourcePath(moduleUrl: string | URL, file: string): string | undefined {\n let directory = path.dirname(fileURLToPath(moduleUrl));\n for (;;) {\n if (existsSync(path.join(directory, 'package.json'))) {\n const candidate = path.join(directory, file);\n return existsSync(candidate) ? candidate : undefined;\n }\n const parent = path.dirname(directory);\n if (parent === directory) return undefined;\n directory = parent;\n }\n}\n\n/**\n * Text of a file shipped by the calling package, or `''` when it is not there.\n *\n * Empty rather than a placeholder, and never a throw. A context resource's text\n * is pasted into the system prompt, so `'(resource unavailable: README.md)'` is\n * a string the model pays for and may act on; `''` is dropped by the prompt\n * composer instead. A throw is worse still: it propagates out of resource\n * resolution and fails the whole prompt build.\n */\nexport async function readPackageResource(moduleUrl: string | URL, file: string): Promise<string> {\n const resolved = packageResourcePath(moduleUrl, file);\n if (resolved === undefined) return '';\n try {\n return await readFile(resolved, 'utf8');\n } catch {\n return '';\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiBA,SAAgB,oBAAoB,WAAyB,MAAkC;CAC7F,IAAI,YAAYA,UAAAA,QAAK,SAAA,GAAQC,SAAAA,cAAAA,CAAc,SAAS,CAAC;CACrD,SAAS;EACP,KAAA,GAAIC,QAAAA,WAAAA,CAAWF,UAAAA,QAAK,KAAK,WAAW,cAAc,CAAC,GAAG;GACpD,MAAM,YAAYA,UAAAA,QAAK,KAAK,WAAW,IAAI;GAC3C,QAAA,GAAOE,QAAAA,WAAAA,CAAW,SAAS,IAAI,YAAY,KAAA;EAC7C;EACA,MAAM,SAASF,UAAAA,QAAK,QAAQ,SAAS;EACrC,IAAI,WAAW,WAAW,OAAO,KAAA;EACjC,YAAY;CACd;AACF;;;;;;;;;;AAWA,eAAsB,oBAAoB,WAAyB,MAA+B;CAChG,MAAM,WAAW,oBAAoB,WAAW,IAAI;CACpD,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,IAAI;EACF,OAAO,OAAA,GAAMG,iBAAAA,SAAAA,CAAS,UAAU,MAAM;CACxC,QAAQ;EACN,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/services/packageResource/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Absolute path of a file shipped by the calling package.
|
|
4
|
+
*
|
|
5
|
+
* Anchored on the nearest ancestor holding a `package.json`, which is the only
|
|
6
|
+
* sentinel that is correct from `src/` and from `dist/` alike. Counting levels
|
|
7
|
+
* with a fixed `new URL('../../..', import.meta.url)` is not: a bundled entry
|
|
8
|
+
* sits at a different depth than its source, so the walk lands outside the
|
|
9
|
+
* package and every read misses.
|
|
10
|
+
*
|
|
11
|
+
* `moduleUrl` is required on purpose. A default of `import.meta.url` resolves to
|
|
12
|
+
* this package rather than the caller's, which is a silently wrong answer.
|
|
13
|
+
*/
|
|
14
|
+
export declare function packageResourcePath(moduleUrl: string | URL, file: string): string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Text of a file shipped by the calling package, or `''` when it is not there.
|
|
17
|
+
*
|
|
18
|
+
* Empty rather than a placeholder, and never a throw. A context resource's text
|
|
19
|
+
* is pasted into the system prompt, so `'(resource unavailable: README.md)'` is
|
|
20
|
+
* a string the model pays for and may act on; `''` is dropped by the prompt
|
|
21
|
+
* composer instead. A throw is worse still: it propagates out of resource
|
|
22
|
+
* resolution and fails the whole prompt build.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readPackageResource(moduleUrl: string | URL, file: string): Promise<string>;
|
|
25
|
+
//#endregion
|
|
26
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/packageResource/index.ts"],"mappings":";;;;;;;;;;;;;wBAiBgB,oBAAoB,oBAAoB,KAAK;;;;;;;;;;wBAsBvC,oBAAoB,oBAAoB,KAAK,eAAe"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { readFile } from "node:fs/promises";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
//#region src/services/packageResource/index.ts
|
|
6
|
+
/**
|
|
7
|
+
* Absolute path of a file shipped by the calling package.
|
|
8
|
+
*
|
|
9
|
+
* Anchored on the nearest ancestor holding a `package.json`, which is the only
|
|
10
|
+
* sentinel that is correct from `src/` and from `dist/` alike. Counting levels
|
|
11
|
+
* with a fixed `new URL('../../..', import.meta.url)` is not: a bundled entry
|
|
12
|
+
* sits at a different depth than its source, so the walk lands outside the
|
|
13
|
+
* package and every read misses.
|
|
14
|
+
*
|
|
15
|
+
* `moduleUrl` is required on purpose. A default of `import.meta.url` resolves to
|
|
16
|
+
* this package rather than the caller's, which is a silently wrong answer.
|
|
17
|
+
*/
|
|
18
|
+
function packageResourcePath(moduleUrl, file) {
|
|
19
|
+
let directory = path.dirname(fileURLToPath(moduleUrl));
|
|
20
|
+
for (;;) {
|
|
21
|
+
if (existsSync(path.join(directory, "package.json"))) {
|
|
22
|
+
const candidate = path.join(directory, file);
|
|
23
|
+
return existsSync(candidate) ? candidate : void 0;
|
|
24
|
+
}
|
|
25
|
+
const parent = path.dirname(directory);
|
|
26
|
+
if (parent === directory) return void 0;
|
|
27
|
+
directory = parent;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Text of a file shipped by the calling package, or `''` when it is not there.
|
|
32
|
+
*
|
|
33
|
+
* Empty rather than a placeholder, and never a throw. A context resource's text
|
|
34
|
+
* is pasted into the system prompt, so `'(resource unavailable: README.md)'` is
|
|
35
|
+
* a string the model pays for and may act on; `''` is dropped by the prompt
|
|
36
|
+
* composer instead. A throw is worse still: it propagates out of resource
|
|
37
|
+
* resolution and fails the whole prompt build.
|
|
38
|
+
*/
|
|
39
|
+
async function readPackageResource(moduleUrl, file) {
|
|
40
|
+
const resolved = packageResourcePath(moduleUrl, file);
|
|
41
|
+
if (resolved === void 0) return "";
|
|
42
|
+
try {
|
|
43
|
+
return await readFile(resolved, "utf8");
|
|
44
|
+
} catch {
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { packageResourcePath, readPackageResource };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/packageResource/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Absolute path of a file shipped by the calling package.\n *\n * Anchored on the nearest ancestor holding a `package.json`, which is the only\n * sentinel that is correct from `src/` and from `dist/` alike. Counting levels\n * with a fixed `new URL('../../..', import.meta.url)` is not: a bundled entry\n * sits at a different depth than its source, so the walk lands outside the\n * package and every read misses.\n *\n * `moduleUrl` is required on purpose. A default of `import.meta.url` resolves to\n * this package rather than the caller's, which is a silently wrong answer.\n */\nexport function packageResourcePath(moduleUrl: string | URL, file: string): string | undefined {\n let directory = path.dirname(fileURLToPath(moduleUrl));\n for (;;) {\n if (existsSync(path.join(directory, 'package.json'))) {\n const candidate = path.join(directory, file);\n return existsSync(candidate) ? candidate : undefined;\n }\n const parent = path.dirname(directory);\n if (parent === directory) return undefined;\n directory = parent;\n }\n}\n\n/**\n * Text of a file shipped by the calling package, or `''` when it is not there.\n *\n * Empty rather than a placeholder, and never a throw. A context resource's text\n * is pasted into the system prompt, so `'(resource unavailable: README.md)'` is\n * a string the model pays for and may act on; `''` is dropped by the prompt\n * composer instead. A throw is worse still: it propagates out of resource\n * resolution and fails the whole prompt build.\n */\nexport async function readPackageResource(moduleUrl: string | URL, file: string): Promise<string> {\n const resolved = packageResourcePath(moduleUrl, file);\n if (resolved === undefined) return '';\n try {\n return await readFile(resolved, 'utf8');\n } catch {\n return '';\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,SAAgB,oBAAoB,WAAyB,MAAkC;CAC7F,IAAI,YAAY,KAAK,QAAQ,cAAc,SAAS,CAAC;CACrD,SAAS;EACP,IAAI,WAAW,KAAK,KAAK,WAAW,cAAc,CAAC,GAAG;GACpD,MAAM,YAAY,KAAK,KAAK,WAAW,IAAI;GAC3C,OAAO,WAAW,SAAS,IAAI,YAAY,KAAA;EAC7C;EACA,MAAM,SAAS,KAAK,QAAQ,SAAS;EACrC,IAAI,WAAW,WAAW,OAAO,KAAA;EACjC,YAAY;CACd;AACF;;;;;;;;;;AAWA,eAAsB,oBAAoB,WAAyB,MAA+B;CAChG,MAAM,WAAW,oBAAoB,WAAW,IAAI;CACpD,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,IAAI;EACF,OAAO,MAAM,SAAS,UAAU,MAAM;CACxC,QAAQ;EACN,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
const require_remote = require("../../constants/remote.cjs");
|
|
2
|
+
const require_index = require("../deviceSessions/index.cjs");
|
|
3
|
+
//#region src/services/pairingFlow/index.ts
|
|
4
|
+
/**
|
|
5
|
+
* Pairing a device, as a state machine over injected randomness and time.
|
|
6
|
+
*
|
|
7
|
+
* code (120s) --claim--> pending (180s) --approve--> approved --consume--> consumed
|
|
8
|
+
* | \
|
|
9
|
+
* +----- deny -------+--> denied
|
|
10
|
+
*
|
|
11
|
+
* The host approval step is the point. A scanned code proves someone is
|
|
12
|
+
* standing where the screen is, but a screen is visible over a shoulder and in
|
|
13
|
+
* a screenshare, so the code alone is a single factor for a credential that
|
|
14
|
+
* ends in shell access. Approving on the machine is the second.
|
|
15
|
+
*
|
|
16
|
+
* Randomness and hashing arrive as functions so this file stays free of
|
|
17
|
+
* node:crypto and testable with a counter.
|
|
18
|
+
*/
|
|
19
|
+
/** Failed claims allowed per source inside one window before the endpoint starts refusing. */
|
|
20
|
+
const ATTEMPT_LIMIT = 10;
|
|
21
|
+
const ATTEMPT_WINDOW_MS = 6e4;
|
|
22
|
+
/** Caps throttle state even if many distinct peers reach the listener. */
|
|
23
|
+
const SOURCE_LIMIT = 1024;
|
|
24
|
+
/** How long a settled request stays readable, so a late approval is still collectable. */
|
|
25
|
+
const PAIRING_REQUEST_RETENTION_MS = require_remote.PAIRING_REQUEST_TTL_MS * 2;
|
|
26
|
+
function createPairingFlow(options) {
|
|
27
|
+
/** Only the newest code pair is live, so minting another retires both old codes. */
|
|
28
|
+
let liveCode;
|
|
29
|
+
const requests = /* @__PURE__ */ new Map();
|
|
30
|
+
const attemptsBySource = /* @__PURE__ */ new Map();
|
|
31
|
+
const notice = options.onNotice ?? (() => {});
|
|
32
|
+
const isExpired = (request, now) => request.status === "pending" && now - request.createdAt >= 18e4;
|
|
33
|
+
/** Derived rather than scheduled, so a stopped clock cannot leave a request live. */
|
|
34
|
+
const statusOf = (request, now) => isExpired(request, now) ? "expired" : request.status;
|
|
35
|
+
const countFailure = (sourceAddress, now) => {
|
|
36
|
+
const source = sourceAddress ?? "unknown";
|
|
37
|
+
let attempts = attemptsBySource.get(source);
|
|
38
|
+
if (attempts === void 0 || now - attempts.windowStartedAt >= ATTEMPT_WINDOW_MS) {
|
|
39
|
+
if (attempts === void 0 && attemptsBySource.size >= SOURCE_LIMIT) {
|
|
40
|
+
const oldest = attemptsBySource.keys().next().value;
|
|
41
|
+
if (oldest !== void 0) attemptsBySource.delete(oldest);
|
|
42
|
+
}
|
|
43
|
+
attempts = {
|
|
44
|
+
windowStartedAt: now,
|
|
45
|
+
failures: 0
|
|
46
|
+
};
|
|
47
|
+
attemptsBySource.set(source, attempts);
|
|
48
|
+
}
|
|
49
|
+
attempts.failures += 1;
|
|
50
|
+
if (attempts.failures === 11) notice(`pairing claim abuse detected from ${source}; throttling invalid attempts`);
|
|
51
|
+
return attempts.failures > ATTEMPT_LIMIT ? "rate_limited" : "ok";
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
mintCode() {
|
|
55
|
+
const code = options.randomToken();
|
|
56
|
+
const manualCode = options.randomManualCode();
|
|
57
|
+
const expiresAt = options.now() + require_remote.PAIRING_CODE_TTL_MS;
|
|
58
|
+
liveCode = {
|
|
59
|
+
hashes: [options.digest(code), options.digest(manualCode)],
|
|
60
|
+
expiresAt
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
code,
|
|
64
|
+
manualCode,
|
|
65
|
+
expiresAt
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
claim(input) {
|
|
69
|
+
const now = options.now();
|
|
70
|
+
const presented = options.digest(input.code);
|
|
71
|
+
if (liveCode === void 0 || now >= liveCode.expiresAt || !liveCode.hashes.includes(presented)) {
|
|
72
|
+
const limit = countFailure(input.sourceAddress, now);
|
|
73
|
+
if (limit !== "ok") return {
|
|
74
|
+
ok: false,
|
|
75
|
+
code: limit
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
ok: false,
|
|
79
|
+
code: "unknown_code"
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
liveCode = void 0;
|
|
83
|
+
const request = {
|
|
84
|
+
id: options.randomToken(),
|
|
85
|
+
userAgent: require_index.sanitizeUserAgent(input.userAgent),
|
|
86
|
+
edgeIp: require_index.sanitizeEdgeIp(input.edgeIp),
|
|
87
|
+
createdAt: now,
|
|
88
|
+
status: "pending"
|
|
89
|
+
};
|
|
90
|
+
requests.set(request.id, request);
|
|
91
|
+
notice(`pairing requested from ${request.userAgent} via ${request.edgeIp}`);
|
|
92
|
+
return {
|
|
93
|
+
ok: true,
|
|
94
|
+
requestId: request.id
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
status(requestId) {
|
|
98
|
+
const request = requests.get(requestId);
|
|
99
|
+
return request === void 0 ? void 0 : statusOf(request, options.now());
|
|
100
|
+
},
|
|
101
|
+
approve(requestId) {
|
|
102
|
+
const request = requests.get(requestId);
|
|
103
|
+
if (request === void 0) return "unknown";
|
|
104
|
+
const now = options.now();
|
|
105
|
+
if (isExpired(request, now)) return "expired";
|
|
106
|
+
if (request.status !== "pending") return "settled";
|
|
107
|
+
request.status = "approved";
|
|
108
|
+
notice(`pairing approved for ${request.userAgent}`);
|
|
109
|
+
return "approved";
|
|
110
|
+
},
|
|
111
|
+
deny(requestId) {
|
|
112
|
+
const request = requests.get(requestId);
|
|
113
|
+
if (request === void 0) return "unknown";
|
|
114
|
+
if (request.status !== "pending") return "settled";
|
|
115
|
+
request.status = "denied";
|
|
116
|
+
notice(`pairing denied for ${request.userAgent}`);
|
|
117
|
+
return "denied";
|
|
118
|
+
},
|
|
119
|
+
consume(requestId) {
|
|
120
|
+
const request = requests.get(requestId);
|
|
121
|
+
if (request === void 0 || request.status !== "approved") return void 0;
|
|
122
|
+
request.status = "consumed";
|
|
123
|
+
return { userAgent: request.userAgent };
|
|
124
|
+
},
|
|
125
|
+
pending() {
|
|
126
|
+
const now = options.now();
|
|
127
|
+
return [...requests.values()].filter((request) => statusOf(request, now) === "pending");
|
|
128
|
+
},
|
|
129
|
+
sweep() {
|
|
130
|
+
const now = options.now();
|
|
131
|
+
for (const [id, request] of requests) if (now - request.createdAt >= PAIRING_REQUEST_RETENTION_MS) requests.delete(id);
|
|
132
|
+
if (liveCode !== void 0 && now >= liveCode.expiresAt) liveCode = void 0;
|
|
133
|
+
for (const [source, attempts] of attemptsBySource) if (now - attempts.windowStartedAt >= ATTEMPT_WINDOW_MS) attemptsBySource.delete(source);
|
|
134
|
+
},
|
|
135
|
+
clear() {
|
|
136
|
+
requests.clear();
|
|
137
|
+
liveCode = void 0;
|
|
138
|
+
attemptsBySource.clear();
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//#endregion
|
|
143
|
+
exports.createPairingFlow = createPairingFlow;
|
|
144
|
+
|
|
145
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["PAIRING_REQUEST_TTL_MS","PAIRING_CODE_TTL_MS","sanitizeUserAgent","sanitizeEdgeIp"],"sources":["../../../../src/services/pairingFlow/index.ts"],"sourcesContent":["/**\n * Pairing a device, as a state machine over injected randomness and time.\n *\n * code (120s) --claim--> pending (180s) --approve--> approved --consume--> consumed\n * | \\\n * +----- deny -------+--> denied\n *\n * The host approval step is the point. A scanned code proves someone is\n * standing where the screen is, but a screen is visible over a shoulder and in\n * a screenshare, so the code alone is a single factor for a credential that\n * ends in shell access. Approving on the machine is the second.\n *\n * Randomness and hashing arrive as functions so this file stays free of\n * node:crypto and testable with a counter.\n */\n\nimport { PAIRING_CODE_TTL_MS, PAIRING_REQUEST_TTL_MS } from '../../constants/remote';\nimport { type PairingStatus } from '../../types/remote';\nimport { sanitizeEdgeIp, sanitizeUserAgent } from '../deviceSessions';\n\n/** Failed claims allowed per source inside one window before the endpoint starts refusing. */\nconst ATTEMPT_LIMIT = 10;\nconst ATTEMPT_WINDOW_MS = 60_000;\n/** Caps throttle state even if many distinct peers reach the listener. */\nconst SOURCE_LIMIT = 1024;\n/** How long a settled request stays readable, so a late approval is still collectable. */\nconst PAIRING_REQUEST_RETENTION_MS = PAIRING_REQUEST_TTL_MS * 2;\n\nexport interface PairingRequest {\n id: string;\n userAgent: string;\n edgeIp: string;\n createdAt: number;\n status: PairingStatus;\n}\n\nexport type ClaimOutcome = { ok: true; requestId: string } | { ok: false; code: 'unknown_code' | 'rate_limited' };\n\nexport interface PairingFlowOptions {\n /** Returns a fresh high-entropy token carried only by the QR fragment. */\n randomToken: () => string;\n /** Returns a short numeric code intended for manual entry. */\n randomManualCode: () => string;\n /** One-way digest of a token; only the digest is retained. */\n digest: (token: string) => string;\n now: () => number;\n onNotice?: (message: string) => void;\n}\n\nexport interface PairingFlow {\n /** Mints a QR token and a separate manual code. Replaces the previous pair. */\n mintCode(): { code: string; manualCode: string; expiresAt: number };\n claim(input: {\n code: string;\n userAgent: string | undefined;\n edgeIp: string | undefined;\n /** Source normalized by the adapter from trusted proxy metadata or the socket peer. */\n sourceAddress: string | undefined;\n }): ClaimOutcome;\n status(requestId: string): PairingStatus | undefined;\n approve(requestId: string): 'approved' | 'unknown' | 'expired' | 'settled';\n deny(requestId: string): 'denied' | 'unknown' | 'settled';\n /** Takes an approved request exactly once, returning what the device record needs. */\n consume(requestId: string): { userAgent: string } | undefined;\n pending(): readonly PairingRequest[];\n /** Drops what has aged out. Only reclaims memory; expiry is derived, not scheduled. */\n sweep(): void;\n clear(): void;\n}\n\nexport function createPairingFlow(options: PairingFlowOptions): PairingFlow {\n /** Only the newest code pair is live, so minting another retires both old codes. */\n let liveCode: { hashes: readonly [string, string]; expiresAt: number } | undefined;\n const requests = new Map<string, PairingRequest>();\n const attemptsBySource = new Map<string, { windowStartedAt: number; failures: number }>();\n\n const notice = options.onNotice ?? ((): void => {});\n\n const isExpired = (request: PairingRequest, now: number): boolean =>\n request.status === 'pending' && now - request.createdAt >= PAIRING_REQUEST_TTL_MS;\n\n /** Derived rather than scheduled, so a stopped clock cannot leave a request live. */\n const statusOf = (request: PairingRequest, now: number): PairingStatus =>\n isExpired(request, now) ? 'expired' : request.status;\n\n const countFailure = (sourceAddress: string | undefined, now: number): 'ok' | 'rate_limited' => {\n const source = sourceAddress ?? 'unknown';\n let attempts = attemptsBySource.get(source);\n if (attempts === undefined || now - attempts.windowStartedAt >= ATTEMPT_WINDOW_MS) {\n if (attempts === undefined && attemptsBySource.size >= SOURCE_LIMIT) {\n const oldest = attemptsBySource.keys().next().value as string | undefined;\n if (oldest !== undefined) attemptsBySource.delete(oldest);\n }\n attempts = { windowStartedAt: now, failures: 0 };\n attemptsBySource.set(source, attempts);\n }\n attempts.failures += 1;\n if (attempts.failures === ATTEMPT_LIMIT + 1) {\n notice(`pairing claim abuse detected from ${source}; throttling invalid attempts`);\n }\n return attempts.failures > ATTEMPT_LIMIT ? 'rate_limited' : 'ok';\n };\n\n return {\n mintCode() {\n const code = options.randomToken();\n const manualCode = options.randomManualCode();\n const expiresAt = options.now() + PAIRING_CODE_TTL_MS;\n liveCode = { hashes: [options.digest(code), options.digest(manualCode)], expiresAt };\n return { code, manualCode, expiresAt };\n },\n\n claim(input) {\n const now = options.now();\n const presented = options.digest(input.code);\n // The QR token and manual code are one logical credential. A successful\n // claim retires both so neither representation can be replayed.\n if (liveCode === undefined || now >= liveCode.expiresAt || !liveCode.hashes.includes(presented)) {\n const limit = countFailure(input.sourceAddress, now);\n if (limit !== 'ok') return { ok: false, code: limit };\n return { ok: false, code: 'unknown_code' };\n }\n liveCode = undefined;\n const request: PairingRequest = {\n id: options.randomToken(),\n userAgent: sanitizeUserAgent(input.userAgent),\n edgeIp: sanitizeEdgeIp(input.edgeIp),\n createdAt: now,\n status: 'pending',\n };\n requests.set(request.id, request);\n notice(`pairing requested from ${request.userAgent} via ${request.edgeIp}`);\n return { ok: true, requestId: request.id };\n },\n\n status(requestId) {\n const request = requests.get(requestId);\n return request === undefined ? undefined : statusOf(request, options.now());\n },\n\n approve(requestId) {\n const request = requests.get(requestId);\n if (request === undefined) return 'unknown';\n const now = options.now();\n if (isExpired(request, now)) return 'expired';\n if (request.status !== 'pending') return 'settled';\n request.status = 'approved';\n notice(`pairing approved for ${request.userAgent}`);\n return 'approved';\n },\n\n deny(requestId) {\n const request = requests.get(requestId);\n if (request === undefined) return 'unknown';\n if (request.status !== 'pending') return 'settled';\n request.status = 'denied';\n notice(`pairing denied for ${request.userAgent}`);\n return 'denied';\n },\n\n consume(requestId) {\n const request = requests.get(requestId);\n if (request === undefined || request.status !== 'approved') return undefined;\n // Single use with no grace window. If the response is lost in flight the\n // user rescans, which costs five seconds and removes any question about\n // who else might be holding this id.\n request.status = 'consumed';\n return { userAgent: request.userAgent };\n },\n\n pending() {\n const now = options.now();\n return [...requests.values()].filter((request) => statusOf(request, now) === 'pending');\n },\n\n sweep() {\n const now = options.now();\n for (const [id, request] of requests) {\n // A settled request is kept well past its window rather than dropped on\n // sight: an approval landing in the last second still has to be\n // collected by the phone's next poll, and a denied one should read as\n // denied rather than decay into \"no such request\".\n if (now - request.createdAt >= PAIRING_REQUEST_RETENTION_MS) requests.delete(id);\n }\n if (liveCode !== undefined && now >= liveCode.expiresAt) liveCode = undefined;\n for (const [source, attempts] of attemptsBySource) {\n if (now - attempts.windowStartedAt >= ATTEMPT_WINDOW_MS) attemptsBySource.delete(source);\n }\n },\n\n clear() {\n requests.clear();\n liveCode = undefined;\n attemptsBySource.clear();\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { PairingStatus } from "../../types/remote.mjs";
|
|
2
|
+
//#region src/services/pairingFlow/index.d.ts
|
|
3
|
+
export interface PairingRequest {
|
|
4
|
+
id: string;
|
|
5
|
+
userAgent: string;
|
|
6
|
+
edgeIp: string;
|
|
7
|
+
createdAt: number;
|
|
8
|
+
status: PairingStatus;
|
|
9
|
+
}
|
|
10
|
+
export type ClaimOutcome = {
|
|
11
|
+
ok: true;
|
|
12
|
+
requestId: string;
|
|
13
|
+
} | {
|
|
14
|
+
ok: false;
|
|
15
|
+
code: 'unknown_code' | 'rate_limited';
|
|
16
|
+
};
|
|
17
|
+
export interface PairingFlow {
|
|
18
|
+
/** Mints a QR token and a separate manual code. Replaces the previous pair. */
|
|
19
|
+
mintCode(): {
|
|
20
|
+
code: string;
|
|
21
|
+
manualCode: string;
|
|
22
|
+
expiresAt: number;
|
|
23
|
+
};
|
|
24
|
+
claim(input: {
|
|
25
|
+
code: string;
|
|
26
|
+
userAgent: string | undefined;
|
|
27
|
+
edgeIp: string | undefined;
|
|
28
|
+
/** Source normalized by the adapter from trusted proxy metadata or the socket peer. */
|
|
29
|
+
sourceAddress: string | undefined;
|
|
30
|
+
}): ClaimOutcome;
|
|
31
|
+
status(requestId: string): PairingStatus | undefined;
|
|
32
|
+
approve(requestId: string): 'approved' | 'unknown' | 'expired' | 'settled';
|
|
33
|
+
deny(requestId: string): 'denied' | 'unknown' | 'settled';
|
|
34
|
+
/** Takes an approved request exactly once, returning what the device record needs. */
|
|
35
|
+
consume(requestId: string): {
|
|
36
|
+
userAgent: string;
|
|
37
|
+
} | undefined;
|
|
38
|
+
pending(): readonly PairingRequest[];
|
|
39
|
+
/** Drops what has aged out. Only reclaims memory; expiry is derived, not scheduled. */
|
|
40
|
+
sweep(): void;
|
|
41
|
+
clear(): void;
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/pairingFlow/index.ts"],"mappings":";;iBA4BiB;EACf;EACA;EACA;EACA;EACA,QAAQ;;YAGE;EAAiB;EAAU;;EAAwB;EAAW;;iBAazD;;EAEf;IAAc;IAAc;IAAoB;;EAChD,MAAM;IACJ;IACA;IACA;;IAEA;MACE;EACJ,OAAO,oBAAoB;EAC3B,QAAQ;EACR,KAAK;;EAEL,QAAQ;IAAsB;;EAC9B,oBAAoB;;EAEpB;EACA"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { PAIRING_CODE_TTL_MS, PAIRING_REQUEST_TTL_MS } from "../../constants/remote.mjs";
|
|
2
|
+
import { sanitizeEdgeIp, sanitizeUserAgent } from "../deviceSessions/index.mjs";
|
|
3
|
+
//#region src/services/pairingFlow/index.ts
|
|
4
|
+
/**
|
|
5
|
+
* Pairing a device, as a state machine over injected randomness and time.
|
|
6
|
+
*
|
|
7
|
+
* code (120s) --claim--> pending (180s) --approve--> approved --consume--> consumed
|
|
8
|
+
* | \
|
|
9
|
+
* +----- deny -------+--> denied
|
|
10
|
+
*
|
|
11
|
+
* The host approval step is the point. A scanned code proves someone is
|
|
12
|
+
* standing where the screen is, but a screen is visible over a shoulder and in
|
|
13
|
+
* a screenshare, so the code alone is a single factor for a credential that
|
|
14
|
+
* ends in shell access. Approving on the machine is the second.
|
|
15
|
+
*
|
|
16
|
+
* Randomness and hashing arrive as functions so this file stays free of
|
|
17
|
+
* node:crypto and testable with a counter.
|
|
18
|
+
*/
|
|
19
|
+
/** Failed claims allowed per source inside one window before the endpoint starts refusing. */
|
|
20
|
+
const ATTEMPT_LIMIT = 10;
|
|
21
|
+
const ATTEMPT_WINDOW_MS = 6e4;
|
|
22
|
+
/** Caps throttle state even if many distinct peers reach the listener. */
|
|
23
|
+
const SOURCE_LIMIT = 1024;
|
|
24
|
+
/** How long a settled request stays readable, so a late approval is still collectable. */
|
|
25
|
+
const PAIRING_REQUEST_RETENTION_MS = PAIRING_REQUEST_TTL_MS * 2;
|
|
26
|
+
function createPairingFlow(options) {
|
|
27
|
+
/** Only the newest code pair is live, so minting another retires both old codes. */
|
|
28
|
+
let liveCode;
|
|
29
|
+
const requests = /* @__PURE__ */ new Map();
|
|
30
|
+
const attemptsBySource = /* @__PURE__ */ new Map();
|
|
31
|
+
const notice = options.onNotice ?? (() => {});
|
|
32
|
+
const isExpired = (request, now) => request.status === "pending" && now - request.createdAt >= 18e4;
|
|
33
|
+
/** Derived rather than scheduled, so a stopped clock cannot leave a request live. */
|
|
34
|
+
const statusOf = (request, now) => isExpired(request, now) ? "expired" : request.status;
|
|
35
|
+
const countFailure = (sourceAddress, now) => {
|
|
36
|
+
const source = sourceAddress ?? "unknown";
|
|
37
|
+
let attempts = attemptsBySource.get(source);
|
|
38
|
+
if (attempts === void 0 || now - attempts.windowStartedAt >= ATTEMPT_WINDOW_MS) {
|
|
39
|
+
if (attempts === void 0 && attemptsBySource.size >= SOURCE_LIMIT) {
|
|
40
|
+
const oldest = attemptsBySource.keys().next().value;
|
|
41
|
+
if (oldest !== void 0) attemptsBySource.delete(oldest);
|
|
42
|
+
}
|
|
43
|
+
attempts = {
|
|
44
|
+
windowStartedAt: now,
|
|
45
|
+
failures: 0
|
|
46
|
+
};
|
|
47
|
+
attemptsBySource.set(source, attempts);
|
|
48
|
+
}
|
|
49
|
+
attempts.failures += 1;
|
|
50
|
+
if (attempts.failures === 11) notice(`pairing claim abuse detected from ${source}; throttling invalid attempts`);
|
|
51
|
+
return attempts.failures > ATTEMPT_LIMIT ? "rate_limited" : "ok";
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
mintCode() {
|
|
55
|
+
const code = options.randomToken();
|
|
56
|
+
const manualCode = options.randomManualCode();
|
|
57
|
+
const expiresAt = options.now() + PAIRING_CODE_TTL_MS;
|
|
58
|
+
liveCode = {
|
|
59
|
+
hashes: [options.digest(code), options.digest(manualCode)],
|
|
60
|
+
expiresAt
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
code,
|
|
64
|
+
manualCode,
|
|
65
|
+
expiresAt
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
claim(input) {
|
|
69
|
+
const now = options.now();
|
|
70
|
+
const presented = options.digest(input.code);
|
|
71
|
+
if (liveCode === void 0 || now >= liveCode.expiresAt || !liveCode.hashes.includes(presented)) {
|
|
72
|
+
const limit = countFailure(input.sourceAddress, now);
|
|
73
|
+
if (limit !== "ok") return {
|
|
74
|
+
ok: false,
|
|
75
|
+
code: limit
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
ok: false,
|
|
79
|
+
code: "unknown_code"
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
liveCode = void 0;
|
|
83
|
+
const request = {
|
|
84
|
+
id: options.randomToken(),
|
|
85
|
+
userAgent: sanitizeUserAgent(input.userAgent),
|
|
86
|
+
edgeIp: sanitizeEdgeIp(input.edgeIp),
|
|
87
|
+
createdAt: now,
|
|
88
|
+
status: "pending"
|
|
89
|
+
};
|
|
90
|
+
requests.set(request.id, request);
|
|
91
|
+
notice(`pairing requested from ${request.userAgent} via ${request.edgeIp}`);
|
|
92
|
+
return {
|
|
93
|
+
ok: true,
|
|
94
|
+
requestId: request.id
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
status(requestId) {
|
|
98
|
+
const request = requests.get(requestId);
|
|
99
|
+
return request === void 0 ? void 0 : statusOf(request, options.now());
|
|
100
|
+
},
|
|
101
|
+
approve(requestId) {
|
|
102
|
+
const request = requests.get(requestId);
|
|
103
|
+
if (request === void 0) return "unknown";
|
|
104
|
+
const now = options.now();
|
|
105
|
+
if (isExpired(request, now)) return "expired";
|
|
106
|
+
if (request.status !== "pending") return "settled";
|
|
107
|
+
request.status = "approved";
|
|
108
|
+
notice(`pairing approved for ${request.userAgent}`);
|
|
109
|
+
return "approved";
|
|
110
|
+
},
|
|
111
|
+
deny(requestId) {
|
|
112
|
+
const request = requests.get(requestId);
|
|
113
|
+
if (request === void 0) return "unknown";
|
|
114
|
+
if (request.status !== "pending") return "settled";
|
|
115
|
+
request.status = "denied";
|
|
116
|
+
notice(`pairing denied for ${request.userAgent}`);
|
|
117
|
+
return "denied";
|
|
118
|
+
},
|
|
119
|
+
consume(requestId) {
|
|
120
|
+
const request = requests.get(requestId);
|
|
121
|
+
if (request === void 0 || request.status !== "approved") return void 0;
|
|
122
|
+
request.status = "consumed";
|
|
123
|
+
return { userAgent: request.userAgent };
|
|
124
|
+
},
|
|
125
|
+
pending() {
|
|
126
|
+
const now = options.now();
|
|
127
|
+
return [...requests.values()].filter((request) => statusOf(request, now) === "pending");
|
|
128
|
+
},
|
|
129
|
+
sweep() {
|
|
130
|
+
const now = options.now();
|
|
131
|
+
for (const [id, request] of requests) if (now - request.createdAt >= PAIRING_REQUEST_RETENTION_MS) requests.delete(id);
|
|
132
|
+
if (liveCode !== void 0 && now >= liveCode.expiresAt) liveCode = void 0;
|
|
133
|
+
for (const [source, attempts] of attemptsBySource) if (now - attempts.windowStartedAt >= ATTEMPT_WINDOW_MS) attemptsBySource.delete(source);
|
|
134
|
+
},
|
|
135
|
+
clear() {
|
|
136
|
+
requests.clear();
|
|
137
|
+
liveCode = void 0;
|
|
138
|
+
attemptsBySource.clear();
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//#endregion
|
|
143
|
+
export { createPairingFlow };
|
|
144
|
+
|
|
145
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/pairingFlow/index.ts"],"sourcesContent":["/**\n * Pairing a device, as a state machine over injected randomness and time.\n *\n * code (120s) --claim--> pending (180s) --approve--> approved --consume--> consumed\n * | \\\n * +----- deny -------+--> denied\n *\n * The host approval step is the point. A scanned code proves someone is\n * standing where the screen is, but a screen is visible over a shoulder and in\n * a screenshare, so the code alone is a single factor for a credential that\n * ends in shell access. Approving on the machine is the second.\n *\n * Randomness and hashing arrive as functions so this file stays free of\n * node:crypto and testable with a counter.\n */\n\nimport { PAIRING_CODE_TTL_MS, PAIRING_REQUEST_TTL_MS } from '../../constants/remote';\nimport { type PairingStatus } from '../../types/remote';\nimport { sanitizeEdgeIp, sanitizeUserAgent } from '../deviceSessions';\n\n/** Failed claims allowed per source inside one window before the endpoint starts refusing. */\nconst ATTEMPT_LIMIT = 10;\nconst ATTEMPT_WINDOW_MS = 60_000;\n/** Caps throttle state even if many distinct peers reach the listener. */\nconst SOURCE_LIMIT = 1024;\n/** How long a settled request stays readable, so a late approval is still collectable. */\nconst PAIRING_REQUEST_RETENTION_MS = PAIRING_REQUEST_TTL_MS * 2;\n\nexport interface PairingRequest {\n id: string;\n userAgent: string;\n edgeIp: string;\n createdAt: number;\n status: PairingStatus;\n}\n\nexport type ClaimOutcome = { ok: true; requestId: string } | { ok: false; code: 'unknown_code' | 'rate_limited' };\n\nexport interface PairingFlowOptions {\n /** Returns a fresh high-entropy token carried only by the QR fragment. */\n randomToken: () => string;\n /** Returns a short numeric code intended for manual entry. */\n randomManualCode: () => string;\n /** One-way digest of a token; only the digest is retained. */\n digest: (token: string) => string;\n now: () => number;\n onNotice?: (message: string) => void;\n}\n\nexport interface PairingFlow {\n /** Mints a QR token and a separate manual code. Replaces the previous pair. */\n mintCode(): { code: string; manualCode: string; expiresAt: number };\n claim(input: {\n code: string;\n userAgent: string | undefined;\n edgeIp: string | undefined;\n /** Source normalized by the adapter from trusted proxy metadata or the socket peer. */\n sourceAddress: string | undefined;\n }): ClaimOutcome;\n status(requestId: string): PairingStatus | undefined;\n approve(requestId: string): 'approved' | 'unknown' | 'expired' | 'settled';\n deny(requestId: string): 'denied' | 'unknown' | 'settled';\n /** Takes an approved request exactly once, returning what the device record needs. */\n consume(requestId: string): { userAgent: string } | undefined;\n pending(): readonly PairingRequest[];\n /** Drops what has aged out. Only reclaims memory; expiry is derived, not scheduled. */\n sweep(): void;\n clear(): void;\n}\n\nexport function createPairingFlow(options: PairingFlowOptions): PairingFlow {\n /** Only the newest code pair is live, so minting another retires both old codes. */\n let liveCode: { hashes: readonly [string, string]; expiresAt: number } | undefined;\n const requests = new Map<string, PairingRequest>();\n const attemptsBySource = new Map<string, { windowStartedAt: number; failures: number }>();\n\n const notice = options.onNotice ?? ((): void => {});\n\n const isExpired = (request: PairingRequest, now: number): boolean =>\n request.status === 'pending' && now - request.createdAt >= PAIRING_REQUEST_TTL_MS;\n\n /** Derived rather than scheduled, so a stopped clock cannot leave a request live. */\n const statusOf = (request: PairingRequest, now: number): PairingStatus =>\n isExpired(request, now) ? 'expired' : request.status;\n\n const countFailure = (sourceAddress: string | undefined, now: number): 'ok' | 'rate_limited' => {\n const source = sourceAddress ?? 'unknown';\n let attempts = attemptsBySource.get(source);\n if (attempts === undefined || now - attempts.windowStartedAt >= ATTEMPT_WINDOW_MS) {\n if (attempts === undefined && attemptsBySource.size >= SOURCE_LIMIT) {\n const oldest = attemptsBySource.keys().next().value as string | undefined;\n if (oldest !== undefined) attemptsBySource.delete(oldest);\n }\n attempts = { windowStartedAt: now, failures: 0 };\n attemptsBySource.set(source, attempts);\n }\n attempts.failures += 1;\n if (attempts.failures === ATTEMPT_LIMIT + 1) {\n notice(`pairing claim abuse detected from ${source}; throttling invalid attempts`);\n }\n return attempts.failures > ATTEMPT_LIMIT ? 'rate_limited' : 'ok';\n };\n\n return {\n mintCode() {\n const code = options.randomToken();\n const manualCode = options.randomManualCode();\n const expiresAt = options.now() + PAIRING_CODE_TTL_MS;\n liveCode = { hashes: [options.digest(code), options.digest(manualCode)], expiresAt };\n return { code, manualCode, expiresAt };\n },\n\n claim(input) {\n const now = options.now();\n const presented = options.digest(input.code);\n // The QR token and manual code are one logical credential. A successful\n // claim retires both so neither representation can be replayed.\n if (liveCode === undefined || now >= liveCode.expiresAt || !liveCode.hashes.includes(presented)) {\n const limit = countFailure(input.sourceAddress, now);\n if (limit !== 'ok') return { ok: false, code: limit };\n return { ok: false, code: 'unknown_code' };\n }\n liveCode = undefined;\n const request: PairingRequest = {\n id: options.randomToken(),\n userAgent: sanitizeUserAgent(input.userAgent),\n edgeIp: sanitizeEdgeIp(input.edgeIp),\n createdAt: now,\n status: 'pending',\n };\n requests.set(request.id, request);\n notice(`pairing requested from ${request.userAgent} via ${request.edgeIp}`);\n return { ok: true, requestId: request.id };\n },\n\n status(requestId) {\n const request = requests.get(requestId);\n return request === undefined ? undefined : statusOf(request, options.now());\n },\n\n approve(requestId) {\n const request = requests.get(requestId);\n if (request === undefined) return 'unknown';\n const now = options.now();\n if (isExpired(request, now)) return 'expired';\n if (request.status !== 'pending') return 'settled';\n request.status = 'approved';\n notice(`pairing approved for ${request.userAgent}`);\n return 'approved';\n },\n\n deny(requestId) {\n const request = requests.get(requestId);\n if (request === undefined) return 'unknown';\n if (request.status !== 'pending') return 'settled';\n request.status = 'denied';\n notice(`pairing denied for ${request.userAgent}`);\n return 'denied';\n },\n\n consume(requestId) {\n const request = requests.get(requestId);\n if (request === undefined || request.status !== 'approved') return undefined;\n // Single use with no grace window. If the response is lost in flight the\n // user rescans, which costs five seconds and removes any question about\n // who else might be holding this id.\n request.status = 'consumed';\n return { userAgent: request.userAgent };\n },\n\n pending() {\n const now = options.now();\n return [...requests.values()].filter((request) => statusOf(request, now) === 'pending');\n },\n\n sweep() {\n const now = options.now();\n for (const [id, request] of requests) {\n // A settled request is kept well past its window rather than dropped on\n // sight: an approval landing in the last second still has to be\n // collected by the phone's next poll, and a denied one should read as\n // denied rather than decay into \"no such request\".\n if (now - request.createdAt >= PAIRING_REQUEST_RETENTION_MS) requests.delete(id);\n }\n if (liveCode !== undefined && now >= liveCode.expiresAt) liveCode = undefined;\n for (const [source, attempts] of attemptsBySource) {\n if (now - attempts.windowStartedAt >= ATTEMPT_WINDOW_MS) attemptsBySource.delete(source);\n }\n },\n\n clear() {\n requests.clear();\n liveCode = undefined;\n attemptsBySource.clear();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqBA,MAAM,gBAAgB;AACtB,MAAM,oBAAoB;;AAE1B,MAAM,eAAe;;AAErB,MAAM,+BAA+B,yBAAyB;AA4C9D,SAAgB,kBAAkB,SAA0C;;CAE1E,IAAI;CACJ,MAAM,2BAAW,IAAI,IAA4B;CACjD,MAAM,mCAAmB,IAAI,IAA2D;CAExF,MAAM,SAAS,QAAQ,mBAAyB,CAAC;CAEjD,MAAM,aAAa,SAAyB,QAC1C,QAAQ,WAAW,aAAa,MAAM,QAAQ,aAAA;;CAGhD,MAAM,YAAY,SAAyB,QACzC,UAAU,SAAS,GAAG,IAAI,YAAY,QAAQ;CAEhD,MAAM,gBAAgB,eAAmC,QAAuC;EAC9F,MAAM,SAAS,iBAAiB;EAChC,IAAI,WAAW,iBAAiB,IAAI,MAAM;EAC1C,IAAI,aAAa,KAAA,KAAa,MAAM,SAAS,mBAAmB,mBAAmB;GACjF,IAAI,aAAa,KAAA,KAAa,iBAAiB,QAAQ,cAAc;IACnE,MAAM,SAAS,iBAAiB,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,WAAW,KAAA,GAAW,iBAAiB,OAAO,MAAM;GAC1D;GACA,WAAW;IAAE,iBAAiB;IAAK,UAAU;GAAE;GAC/C,iBAAiB,IAAI,QAAQ,QAAQ;EACvC;EACA,SAAS,YAAY;EACrB,IAAI,SAAS,aAAa,IACxB,OAAO,qCAAqC,OAAO,8BAA8B;EAEnF,OAAO,SAAS,WAAW,gBAAgB,iBAAiB;CAC9D;CAEA,OAAO;EACL,WAAW;GACT,MAAM,OAAO,QAAQ,YAAY;GACjC,MAAM,aAAa,QAAQ,iBAAiB;GAC5C,MAAM,YAAY,QAAQ,IAAI,IAAI;GAClC,WAAW;IAAE,QAAQ,CAAC,QAAQ,OAAO,IAAI,GAAG,QAAQ,OAAO,UAAU,CAAC;IAAG;GAAU;GACnF,OAAO;IAAE;IAAM;IAAY;GAAU;EACvC;EAEA,MAAM,OAAO;GACX,MAAM,MAAM,QAAQ,IAAI;GACxB,MAAM,YAAY,QAAQ,OAAO,MAAM,IAAI;GAG3C,IAAI,aAAa,KAAA,KAAa,OAAO,SAAS,aAAa,CAAC,SAAS,OAAO,SAAS,SAAS,GAAG;IAC/F,MAAM,QAAQ,aAAa,MAAM,eAAe,GAAG;IACnD,IAAI,UAAU,MAAM,OAAO;KAAE,IAAI;KAAO,MAAM;IAAM;IACpD,OAAO;KAAE,IAAI;KAAO,MAAM;IAAe;GAC3C;GACA,WAAW,KAAA;GACX,MAAM,UAA0B;IAC9B,IAAI,QAAQ,YAAY;IACxB,WAAW,kBAAkB,MAAM,SAAS;IAC5C,QAAQ,eAAe,MAAM,MAAM;IACnC,WAAW;IACX,QAAQ;GACV;GACA,SAAS,IAAI,QAAQ,IAAI,OAAO;GAChC,OAAO,0BAA0B,QAAQ,UAAU,OAAO,QAAQ,QAAQ;GAC1E,OAAO;IAAE,IAAI;IAAM,WAAW,QAAQ;GAAG;EAC3C;EAEA,OAAO,WAAW;GAChB,MAAM,UAAU,SAAS,IAAI,SAAS;GACtC,OAAO,YAAY,KAAA,IAAY,KAAA,IAAY,SAAS,SAAS,QAAQ,IAAI,CAAC;EAC5E;EAEA,QAAQ,WAAW;GACjB,MAAM,UAAU,SAAS,IAAI,SAAS;GACtC,IAAI,YAAY,KAAA,GAAW,OAAO;GAClC,MAAM,MAAM,QAAQ,IAAI;GACxB,IAAI,UAAU,SAAS,GAAG,GAAG,OAAO;GACpC,IAAI,QAAQ,WAAW,WAAW,OAAO;GACzC,QAAQ,SAAS;GACjB,OAAO,wBAAwB,QAAQ,WAAW;GAClD,OAAO;EACT;EAEA,KAAK,WAAW;GACd,MAAM,UAAU,SAAS,IAAI,SAAS;GACtC,IAAI,YAAY,KAAA,GAAW,OAAO;GAClC,IAAI,QAAQ,WAAW,WAAW,OAAO;GACzC,QAAQ,SAAS;GACjB,OAAO,sBAAsB,QAAQ,WAAW;GAChD,OAAO;EACT;EAEA,QAAQ,WAAW;GACjB,MAAM,UAAU,SAAS,IAAI,SAAS;GACtC,IAAI,YAAY,KAAA,KAAa,QAAQ,WAAW,YAAY,OAAO,KAAA;GAInE,QAAQ,SAAS;GACjB,OAAO,EAAE,WAAW,QAAQ,UAAU;EACxC;EAEA,UAAU;GACR,MAAM,MAAM,QAAQ,IAAI;GACxB,OAAO,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,CAAC,QAAQ,YAAY,SAAS,SAAS,GAAG,MAAM,SAAS;EACxF;EAEA,QAAQ;GACN,MAAM,MAAM,QAAQ,IAAI;GACxB,KAAK,MAAM,CAAC,IAAI,YAAY,UAK1B,IAAI,MAAM,QAAQ,aAAa,8BAA8B,SAAS,OAAO,EAAE;GAEjF,IAAI,aAAa,KAAA,KAAa,OAAO,SAAS,WAAW,WAAW,KAAA;GACpE,KAAK,MAAM,CAAC,QAAQ,aAAa,kBAC/B,IAAI,MAAM,SAAS,mBAAmB,mBAAmB,iBAAiB,OAAO,MAAM;EAE3F;EAEA,QAAQ;GACN,SAAS,MAAM;GACf,WAAW,KAAA;GACX,iBAAiB,MAAM;EACzB;CACF;AACF"}
|