@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,163 @@
|
|
|
1
|
+
//#region src/services/webauthnPolicy/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* What a passkey is allowed to prove, and for how long.
|
|
4
|
+
*
|
|
5
|
+
* A session cookie is a bearer token: whoever holds the bytes is you. A passkey
|
|
6
|
+
* is a private key in the device's secure enclave that never leaves it, so the
|
|
7
|
+
* cookie stops being the only thing between a stolen phone and this machine.
|
|
8
|
+
* The cookie does not go away, because a WebSocket cannot run a ceremony per
|
|
9
|
+
* frame; what changes is that the cookie is short-lived, re-mintable with a
|
|
10
|
+
* gesture rather than a QR, and insufficient on its own for the actions below.
|
|
11
|
+
*
|
|
12
|
+
* The crypto lives in the adapter. This file is the policy: which actions need
|
|
13
|
+
* a fresh signature, how long a challenge is good for, and when a counter says
|
|
14
|
+
* the credential has been cloned.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Actions that need a fresh gesture even from a live session.
|
|
18
|
+
*
|
|
19
|
+
* These are escalation paths rather than ordinary prompting or tool approval:
|
|
20
|
+
* credentials redirect machine traffic, sessions run code in a selected directory,
|
|
21
|
+
* repository writes change future sessions, and live MCP operations may start local
|
|
22
|
+
* processes or contact remote servers.
|
|
23
|
+
*/
|
|
24
|
+
const STEP_UP_ACTIONS = [
|
|
25
|
+
"provider.login",
|
|
26
|
+
"provider.logout",
|
|
27
|
+
"session.create",
|
|
28
|
+
"settings.write",
|
|
29
|
+
"mcp.discover",
|
|
30
|
+
"mcp.authorize",
|
|
31
|
+
"computer-use.activate"
|
|
32
|
+
];
|
|
33
|
+
/** Short enough that a captured challenge is useless, long enough for a slow Face ID. */
|
|
34
|
+
const STEP_UP_CHALLENGE_TTL_MS = 6e4;
|
|
35
|
+
/** A registration or sign-in ceremony the user has to complete. */
|
|
36
|
+
const CEREMONY_TTL_MS = 12e4;
|
|
37
|
+
/**
|
|
38
|
+
* Which action, if any, a request is attempting.
|
|
39
|
+
*
|
|
40
|
+
* Matched here rather than at each route so the list of gated operations is one
|
|
41
|
+
* readable table instead of three call sites that can drift apart. Anything not
|
|
42
|
+
* named is not gated, which is the safe default only because the gate is an
|
|
43
|
+
* addition to the session check rather than a replacement for it.
|
|
44
|
+
*/
|
|
45
|
+
const GATED_ROUTES = [
|
|
46
|
+
{
|
|
47
|
+
method: "POST",
|
|
48
|
+
pattern: /^\/api\/workspaces$/u,
|
|
49
|
+
action: "session.create"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
method: "POST",
|
|
53
|
+
pattern: /^\/api\/workspaces\/[^/]+\/(?:resume|sessions(?:\/[^/]+\/(?:resume|revive))?)$/u,
|
|
54
|
+
action: "session.create"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
method: "POST",
|
|
58
|
+
pattern: /^\/api\/workspaces\/[^/]+\/plugins\/git\/sessions$/u,
|
|
59
|
+
action: "session.create"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
method: "POST",
|
|
63
|
+
pattern: /^\/api\/plugins\/doompi\/logins(?:\/[^/]+\/answer)?$/u,
|
|
64
|
+
action: "provider.login"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
method: "DELETE",
|
|
68
|
+
pattern: /^\/api\/plugins\/doompi\/providers\/[^/]+$/u,
|
|
69
|
+
action: "provider.logout"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
method: "PUT",
|
|
73
|
+
pattern: /^\/api(?:\/workspaces\/[^/]+)?\/settings\/(?:value|repository\/selection|images)$/u,
|
|
74
|
+
action: "settings.write"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
method: "POST",
|
|
78
|
+
pattern: /^\/api\/workspaces\/[^/]+\/plugins\/mcp\/repository\/discover$/u,
|
|
79
|
+
action: "mcp.discover"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
method: "POST",
|
|
83
|
+
pattern: /^\/api\/workspaces\/[^/]+\/plugins\/mcp\/repository\/authorize$/u,
|
|
84
|
+
action: "mcp.authorize"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
method: "DELETE",
|
|
88
|
+
pattern: /^\/api\/workspaces\/[^/]+\/plugins\/mcp\/repository\/authorize\/[^/]+$/u,
|
|
89
|
+
action: "mcp.authorize"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
method: "POST",
|
|
93
|
+
pattern: /^\/api\/workspaces\/[^/]+\/sessions\/[^/]+\/plugins\/computer-use\/activate$/u,
|
|
94
|
+
action: "computer-use.activate"
|
|
95
|
+
}
|
|
96
|
+
];
|
|
97
|
+
function stepUpActionFor(method, path) {
|
|
98
|
+
const wanted = method.toUpperCase();
|
|
99
|
+
return GATED_ROUTES.find((route) => route.method === wanted && route.pattern.test(path))?.action;
|
|
100
|
+
}
|
|
101
|
+
function isStepUpAction(value) {
|
|
102
|
+
return typeof value === "string" && STEP_UP_ACTIONS.includes(value);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Whether a signature counter moved the way a real authenticator moves it.
|
|
106
|
+
*
|
|
107
|
+
* A counter that stays at zero means the authenticator does not implement one,
|
|
108
|
+
* which is common and not a signal. A counter that goes backwards or repeats
|
|
109
|
+
* while claiming to count means two things are signing with the same key, which
|
|
110
|
+
* is the definition of a cloned credential.
|
|
111
|
+
*/
|
|
112
|
+
function counterVerdict(stored, presented) {
|
|
113
|
+
if (stored === 0 && presented === 0) return "ok";
|
|
114
|
+
return presented > stored ? "ok" : "clone-suspected";
|
|
115
|
+
}
|
|
116
|
+
/** Whether a ceremony or step-up challenge is still live. */
|
|
117
|
+
function challengeIsFresh(issuedAt, now, ttlMs) {
|
|
118
|
+
return now - issuedAt < ttlMs;
|
|
119
|
+
}
|
|
120
|
+
/** A quick tunnel's domain; its hostname rotates on every start. */
|
|
121
|
+
const ROTATING_SUFFIX = ".trycloudflare.com";
|
|
122
|
+
/** Dotted-quad, and the bracketed form a URL uses for v6. */
|
|
123
|
+
const IPV4 = /^\d{1,3}(?:\.\d{1,3}){3}$/u;
|
|
124
|
+
/**
|
|
125
|
+
* The relying party id a passkey is bound to.
|
|
126
|
+
*
|
|
127
|
+
* Derived from the configured tunnel hostname and nothing else, never from a
|
|
128
|
+
* request header: `rpID` is the entire scope of a credential, so a caller who
|
|
129
|
+
* could influence it could mint credentials against somebody else's origin.
|
|
130
|
+
*
|
|
131
|
+
* Three things are refused rather than accepted and regretted later:
|
|
132
|
+
*
|
|
133
|
+
* - A quick tunnel, whose hostname rotates on every start, so a passkey
|
|
134
|
+
* registered now would silently stop working on the next one.
|
|
135
|
+
* - An IP address, which WebAuthn does not accept as a relying party id at all;
|
|
136
|
+
* registering against one fails in the browser rather than here, which is a
|
|
137
|
+
* much worse place to find out.
|
|
138
|
+
* - Anything without a dot, which cannot be a public tunnel hostname.
|
|
139
|
+
*/
|
|
140
|
+
function relyingPartyId(publicOrigin) {
|
|
141
|
+
if (publicOrigin === void 0) return void 0;
|
|
142
|
+
let host;
|
|
143
|
+
try {
|
|
144
|
+
host = new URL(publicOrigin).hostname.toLowerCase();
|
|
145
|
+
} catch {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (host.endsWith(ROTATING_SUFFIX)) return void 0;
|
|
149
|
+
if (IPV4.test(host) || host.startsWith("[")) return void 0;
|
|
150
|
+
if (!host.includes(".")) return void 0;
|
|
151
|
+
return host;
|
|
152
|
+
}
|
|
153
|
+
//#endregion
|
|
154
|
+
exports.CEREMONY_TTL_MS = CEREMONY_TTL_MS;
|
|
155
|
+
exports.STEP_UP_ACTIONS = STEP_UP_ACTIONS;
|
|
156
|
+
exports.STEP_UP_CHALLENGE_TTL_MS = STEP_UP_CHALLENGE_TTL_MS;
|
|
157
|
+
exports.challengeIsFresh = challengeIsFresh;
|
|
158
|
+
exports.counterVerdict = counterVerdict;
|
|
159
|
+
exports.isStepUpAction = isStepUpAction;
|
|
160
|
+
exports.relyingPartyId = relyingPartyId;
|
|
161
|
+
exports.stepUpActionFor = stepUpActionFor;
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/webauthnPolicy/index.ts"],"sourcesContent":["/**\n * What a passkey is allowed to prove, and for how long.\n *\n * A session cookie is a bearer token: whoever holds the bytes is you. A passkey\n * is a private key in the device's secure enclave that never leaves it, so the\n * cookie stops being the only thing between a stolen phone and this machine.\n * The cookie does not go away, because a WebSocket cannot run a ceremony per\n * frame; what changes is that the cookie is short-lived, re-mintable with a\n * gesture rather than a QR, and insufficient on its own for the actions below.\n *\n * The crypto lives in the adapter. This file is the policy: which actions need\n * a fresh signature, how long a challenge is good for, and when a counter says\n * the credential has been cloned.\n */\n\n/**\n * Actions that need a fresh gesture even from a live session.\n *\n * These are escalation paths rather than ordinary prompting or tool approval:\n * credentials redirect machine traffic, sessions run code in a selected directory,\n * repository writes change future sessions, and live MCP operations may start local\n * processes or contact remote servers.\n */\nexport const STEP_UP_ACTIONS = [\n 'provider.login',\n 'provider.logout',\n 'session.create',\n 'settings.write',\n 'mcp.discover',\n 'mcp.authorize',\n 'computer-use.activate',\n] as const;\n\nexport type StepUpAction = (typeof STEP_UP_ACTIONS)[number];\n\n/** Short enough that a captured challenge is useless, long enough for a slow Face ID. */\nexport const STEP_UP_CHALLENGE_TTL_MS = 60_000;\n/** A registration or sign-in ceremony the user has to complete. */\nexport const CEREMONY_TTL_MS = 120_000;\n\n/**\n * Which action, if any, a request is attempting.\n *\n * Matched here rather than at each route so the list of gated operations is one\n * readable table instead of three call sites that can drift apart. Anything not\n * named is not gated, which is the safe default only because the gate is an\n * addition to the session check rather than a replacement for it.\n */\nconst GATED_ROUTES: readonly { method: string; pattern: RegExp; action: StepUpAction }[] = [\n { method: 'POST', pattern: /^\\/api\\/workspaces$/u, action: 'session.create' },\n {\n method: 'POST',\n // Reviving a recorded session starts an agent in a directory, so it is gated\n // exactly as creating one is.\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/(?:resume|sessions(?:\\/[^/]+\\/(?:resume|revive))?)$/u,\n action: 'session.create',\n },\n // The git new-session dialog starts a worktree session, which runs code in a directory.\n { method: 'POST', pattern: /^\\/api\\/workspaces\\/[^/]+\\/plugins\\/git\\/sessions$/u, action: 'session.create' },\n { method: 'POST', pattern: /^\\/api\\/plugins\\/doompi\\/logins(?:\\/[^/]+\\/answer)?$/u, action: 'provider.login' },\n { method: 'DELETE', pattern: /^\\/api\\/plugins\\/doompi\\/providers\\/[^/]+$/u, action: 'provider.logout' },\n {\n method: 'PUT',\n pattern: /^\\/api(?:\\/workspaces\\/[^/]+)?\\/settings\\/(?:value|repository\\/selection|images)$/u,\n action: 'settings.write',\n },\n {\n method: 'POST',\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/plugins\\/mcp\\/repository\\/discover$/u,\n action: 'mcp.discover',\n },\n {\n method: 'POST',\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/plugins\\/mcp\\/repository\\/authorize$/u,\n action: 'mcp.authorize',\n },\n {\n method: 'DELETE',\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/plugins\\/mcp\\/repository\\/authorize\\/[^/]+$/u,\n action: 'mcp.authorize',\n },\n {\n method: 'POST',\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/sessions\\/[^/]+\\/plugins\\/computer-use\\/activate$/u,\n action: 'computer-use.activate',\n },\n];\nexport function stepUpActionFor(method: string, path: string): StepUpAction | undefined {\n const wanted = method.toUpperCase();\n return GATED_ROUTES.find((route) => route.method === wanted && route.pattern.test(path))?.action;\n}\n\nexport function isStepUpAction(value: unknown): value is StepUpAction {\n return typeof value === 'string' && (STEP_UP_ACTIONS as readonly string[]).includes(value);\n}\n\nexport interface StoredCredential {\n /** Opaque handle for display and revocation. */\n id: string;\n /** The authenticator's credential id, base64url, as WebAuthn reports it. */\n credentialId: string;\n /** Base64url public key; the private half never leaves the device. */\n publicKey: string;\n /** Signature counter, for clone detection. */\n counter: number;\n transports: string[];\n label: string;\n createdAt: number;\n lastUsedAt: number;\n}\n\nexport type CounterVerdict = 'ok' | 'clone-suspected';\n\n/**\n * Whether a signature counter moved the way a real authenticator moves it.\n *\n * A counter that stays at zero means the authenticator does not implement one,\n * which is common and not a signal. A counter that goes backwards or repeats\n * while claiming to count means two things are signing with the same key, which\n * is the definition of a cloned credential.\n */\nexport function counterVerdict(stored: number, presented: number): CounterVerdict {\n if (stored === 0 && presented === 0) return 'ok';\n return presented > stored ? 'ok' : 'clone-suspected';\n}\n\n/** Whether a ceremony or step-up challenge is still live. */\nexport function challengeIsFresh(issuedAt: number, now: number, ttlMs: number): boolean {\n return now - issuedAt < ttlMs;\n}\n\n/** A quick tunnel's domain; its hostname rotates on every start. */\nconst ROTATING_SUFFIX = '.trycloudflare.com';\n/** Dotted-quad, and the bracketed form a URL uses for v6. */\nconst IPV4 = /^\\d{1,3}(?:\\.\\d{1,3}){3}$/u;\n\n/**\n * The relying party id a passkey is bound to.\n *\n * Derived from the configured tunnel hostname and nothing else, never from a\n * request header: `rpID` is the entire scope of a credential, so a caller who\n * could influence it could mint credentials against somebody else's origin.\n *\n * Three things are refused rather than accepted and regretted later:\n *\n * - A quick tunnel, whose hostname rotates on every start, so a passkey\n * registered now would silently stop working on the next one.\n * - An IP address, which WebAuthn does not accept as a relying party id at all;\n * registering against one fails in the browser rather than here, which is a\n * much worse place to find out.\n * - Anything without a dot, which cannot be a public tunnel hostname.\n */\nexport function relyingPartyId(publicOrigin: string | undefined): string | undefined {\n if (publicOrigin === undefined) return undefined;\n let host: string;\n try {\n host = new URL(publicOrigin).hostname.toLowerCase();\n } catch {\n return undefined;\n }\n if (host.endsWith(ROTATING_SUFFIX)) return undefined;\n if (IPV4.test(host) || host.startsWith('[')) return undefined;\n if (!host.includes('.')) return undefined;\n return host;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,kBAAkB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAKA,MAAa,2BAA2B;;AAExC,MAAa,kBAAkB;;;;;;;;;AAU/B,MAAM,eAAqF;CACzF;EAAE,QAAQ;EAAQ,SAAS;EAAwB,QAAQ;CAAiB;CAC5E;EACE,QAAQ;EAGR,SAAS;EACT,QAAQ;CACV;CAEA;EAAE,QAAQ;EAAQ,SAAS;EAAuD,QAAQ;CAAiB;CAC3G;EAAE,QAAQ;EAAQ,SAAS;EAAyD,QAAQ;CAAiB;CAC7G;EAAE,QAAQ;EAAU,SAAS;EAA+C,QAAQ;CAAkB;CACtG;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;AACF;AACA,SAAgB,gBAAgB,QAAgB,MAAwC;CACtF,MAAM,SAAS,OAAO,YAAY;CAClC,OAAO,aAAa,MAAM,UAAU,MAAM,WAAW,UAAU,MAAM,QAAQ,KAAK,IAAI,CAAC,CAAC,EAAE;AAC5F;AAEA,SAAgB,eAAe,OAAuC;CACpE,OAAO,OAAO,UAAU,YAAa,gBAAsC,SAAS,KAAK;AAC3F;;;;;;;;;AA2BA,SAAgB,eAAe,QAAgB,WAAmC;CAChF,IAAI,WAAW,KAAK,cAAc,GAAG,OAAO;CAC5C,OAAO,YAAY,SAAS,OAAO;AACrC;;AAGA,SAAgB,iBAAiB,UAAkB,KAAa,OAAwB;CACtF,OAAO,MAAM,WAAW;AAC1B;;AAGA,MAAM,kBAAkB;;AAExB,MAAM,OAAO;;;;;;;;;;;;;;;;;AAkBb,SAAgB,eAAe,cAAsD;CACnF,IAAI,iBAAiB,KAAA,GAAW,OAAO,KAAA;CACvC,IAAI;CACJ,IAAI;EACF,OAAO,IAAI,IAAI,YAAY,CAAC,CAAC,SAAS,YAAY;CACpD,QAAQ;EACN;CACF;CACA,IAAI,KAAK,SAAS,eAAe,GAAG,OAAO,KAAA;CAC3C,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,WAAW,GAAG,GAAG,OAAO,KAAA;CACpD,IAAI,CAAC,KAAK,SAAS,GAAG,GAAG,OAAO,KAAA;CAChC,OAAO;AACT"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//#region src/services/webauthnPolicy/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* What a passkey is allowed to prove, and for how long.
|
|
4
|
+
*
|
|
5
|
+
* A session cookie is a bearer token: whoever holds the bytes is you. A passkey
|
|
6
|
+
* is a private key in the device's secure enclave that never leaves it, so the
|
|
7
|
+
* cookie stops being the only thing between a stolen phone and this machine.
|
|
8
|
+
* The cookie does not go away, because a WebSocket cannot run a ceremony per
|
|
9
|
+
* frame; what changes is that the cookie is short-lived, re-mintable with a
|
|
10
|
+
* gesture rather than a QR, and insufficient on its own for the actions below.
|
|
11
|
+
*
|
|
12
|
+
* The crypto lives in the adapter. This file is the policy: which actions need
|
|
13
|
+
* a fresh signature, how long a challenge is good for, and when a counter says
|
|
14
|
+
* the credential has been cloned.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Actions that need a fresh gesture even from a live session.
|
|
18
|
+
*
|
|
19
|
+
* These are escalation paths rather than ordinary prompting or tool approval:
|
|
20
|
+
* credentials redirect machine traffic, sessions run code in a selected directory,
|
|
21
|
+
* repository writes change future sessions, and live MCP operations may start local
|
|
22
|
+
* processes or contact remote servers.
|
|
23
|
+
*/
|
|
24
|
+
export declare const STEP_UP_ACTIONS: readonly ['provider.login', 'provider.logout', 'session.create', 'settings.write', 'mcp.discover', 'mcp.authorize', 'computer-use.activate'];
|
|
25
|
+
export type StepUpAction = (typeof STEP_UP_ACTIONS)[number];
|
|
26
|
+
export interface StoredCredential {
|
|
27
|
+
/** Opaque handle for display and revocation. */
|
|
28
|
+
id: string;
|
|
29
|
+
/** The authenticator's credential id, base64url, as WebAuthn reports it. */
|
|
30
|
+
credentialId: string;
|
|
31
|
+
/** Base64url public key; the private half never leaves the device. */
|
|
32
|
+
publicKey: string;
|
|
33
|
+
/** Signature counter, for clone detection. */
|
|
34
|
+
counter: number;
|
|
35
|
+
transports: string[];
|
|
36
|
+
label: string;
|
|
37
|
+
createdAt: number;
|
|
38
|
+
lastUsedAt: number;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/webauthnPolicy/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;qBAuBa;YAUD,uBAAuB;iBA+DlB;;EAEf;;EAEA;;EAEA;;EAEA;EACA;EACA;EACA;EACA"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
//#region src/services/webauthnPolicy/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* What a passkey is allowed to prove, and for how long.
|
|
4
|
+
*
|
|
5
|
+
* A session cookie is a bearer token: whoever holds the bytes is you. A passkey
|
|
6
|
+
* is a private key in the device's secure enclave that never leaves it, so the
|
|
7
|
+
* cookie stops being the only thing between a stolen phone and this machine.
|
|
8
|
+
* The cookie does not go away, because a WebSocket cannot run a ceremony per
|
|
9
|
+
* frame; what changes is that the cookie is short-lived, re-mintable with a
|
|
10
|
+
* gesture rather than a QR, and insufficient on its own for the actions below.
|
|
11
|
+
*
|
|
12
|
+
* The crypto lives in the adapter. This file is the policy: which actions need
|
|
13
|
+
* a fresh signature, how long a challenge is good for, and when a counter says
|
|
14
|
+
* the credential has been cloned.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Actions that need a fresh gesture even from a live session.
|
|
18
|
+
*
|
|
19
|
+
* These are escalation paths rather than ordinary prompting or tool approval:
|
|
20
|
+
* credentials redirect machine traffic, sessions run code in a selected directory,
|
|
21
|
+
* repository writes change future sessions, and live MCP operations may start local
|
|
22
|
+
* processes or contact remote servers.
|
|
23
|
+
*/
|
|
24
|
+
const STEP_UP_ACTIONS = [
|
|
25
|
+
"provider.login",
|
|
26
|
+
"provider.logout",
|
|
27
|
+
"session.create",
|
|
28
|
+
"settings.write",
|
|
29
|
+
"mcp.discover",
|
|
30
|
+
"mcp.authorize",
|
|
31
|
+
"computer-use.activate"
|
|
32
|
+
];
|
|
33
|
+
/** Short enough that a captured challenge is useless, long enough for a slow Face ID. */
|
|
34
|
+
const STEP_UP_CHALLENGE_TTL_MS = 6e4;
|
|
35
|
+
/** A registration or sign-in ceremony the user has to complete. */
|
|
36
|
+
const CEREMONY_TTL_MS = 12e4;
|
|
37
|
+
/**
|
|
38
|
+
* Which action, if any, a request is attempting.
|
|
39
|
+
*
|
|
40
|
+
* Matched here rather than at each route so the list of gated operations is one
|
|
41
|
+
* readable table instead of three call sites that can drift apart. Anything not
|
|
42
|
+
* named is not gated, which is the safe default only because the gate is an
|
|
43
|
+
* addition to the session check rather than a replacement for it.
|
|
44
|
+
*/
|
|
45
|
+
const GATED_ROUTES = [
|
|
46
|
+
{
|
|
47
|
+
method: "POST",
|
|
48
|
+
pattern: /^\/api\/workspaces$/u,
|
|
49
|
+
action: "session.create"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
method: "POST",
|
|
53
|
+
pattern: /^\/api\/workspaces\/[^/]+\/(?:resume|sessions(?:\/[^/]+\/(?:resume|revive))?)$/u,
|
|
54
|
+
action: "session.create"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
method: "POST",
|
|
58
|
+
pattern: /^\/api\/workspaces\/[^/]+\/plugins\/git\/sessions$/u,
|
|
59
|
+
action: "session.create"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
method: "POST",
|
|
63
|
+
pattern: /^\/api\/plugins\/doompi\/logins(?:\/[^/]+\/answer)?$/u,
|
|
64
|
+
action: "provider.login"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
method: "DELETE",
|
|
68
|
+
pattern: /^\/api\/plugins\/doompi\/providers\/[^/]+$/u,
|
|
69
|
+
action: "provider.logout"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
method: "PUT",
|
|
73
|
+
pattern: /^\/api(?:\/workspaces\/[^/]+)?\/settings\/(?:value|repository\/selection|images)$/u,
|
|
74
|
+
action: "settings.write"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
method: "POST",
|
|
78
|
+
pattern: /^\/api\/workspaces\/[^/]+\/plugins\/mcp\/repository\/discover$/u,
|
|
79
|
+
action: "mcp.discover"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
method: "POST",
|
|
83
|
+
pattern: /^\/api\/workspaces\/[^/]+\/plugins\/mcp\/repository\/authorize$/u,
|
|
84
|
+
action: "mcp.authorize"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
method: "DELETE",
|
|
88
|
+
pattern: /^\/api\/workspaces\/[^/]+\/plugins\/mcp\/repository\/authorize\/[^/]+$/u,
|
|
89
|
+
action: "mcp.authorize"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
method: "POST",
|
|
93
|
+
pattern: /^\/api\/workspaces\/[^/]+\/sessions\/[^/]+\/plugins\/computer-use\/activate$/u,
|
|
94
|
+
action: "computer-use.activate"
|
|
95
|
+
}
|
|
96
|
+
];
|
|
97
|
+
function stepUpActionFor(method, path) {
|
|
98
|
+
const wanted = method.toUpperCase();
|
|
99
|
+
return GATED_ROUTES.find((route) => route.method === wanted && route.pattern.test(path))?.action;
|
|
100
|
+
}
|
|
101
|
+
function isStepUpAction(value) {
|
|
102
|
+
return typeof value === "string" && STEP_UP_ACTIONS.includes(value);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Whether a signature counter moved the way a real authenticator moves it.
|
|
106
|
+
*
|
|
107
|
+
* A counter that stays at zero means the authenticator does not implement one,
|
|
108
|
+
* which is common and not a signal. A counter that goes backwards or repeats
|
|
109
|
+
* while claiming to count means two things are signing with the same key, which
|
|
110
|
+
* is the definition of a cloned credential.
|
|
111
|
+
*/
|
|
112
|
+
function counterVerdict(stored, presented) {
|
|
113
|
+
if (stored === 0 && presented === 0) return "ok";
|
|
114
|
+
return presented > stored ? "ok" : "clone-suspected";
|
|
115
|
+
}
|
|
116
|
+
/** Whether a ceremony or step-up challenge is still live. */
|
|
117
|
+
function challengeIsFresh(issuedAt, now, ttlMs) {
|
|
118
|
+
return now - issuedAt < ttlMs;
|
|
119
|
+
}
|
|
120
|
+
/** A quick tunnel's domain; its hostname rotates on every start. */
|
|
121
|
+
const ROTATING_SUFFIX = ".trycloudflare.com";
|
|
122
|
+
/** Dotted-quad, and the bracketed form a URL uses for v6. */
|
|
123
|
+
const IPV4 = /^\d{1,3}(?:\.\d{1,3}){3}$/u;
|
|
124
|
+
/**
|
|
125
|
+
* The relying party id a passkey is bound to.
|
|
126
|
+
*
|
|
127
|
+
* Derived from the configured tunnel hostname and nothing else, never from a
|
|
128
|
+
* request header: `rpID` is the entire scope of a credential, so a caller who
|
|
129
|
+
* could influence it could mint credentials against somebody else's origin.
|
|
130
|
+
*
|
|
131
|
+
* Three things are refused rather than accepted and regretted later:
|
|
132
|
+
*
|
|
133
|
+
* - A quick tunnel, whose hostname rotates on every start, so a passkey
|
|
134
|
+
* registered now would silently stop working on the next one.
|
|
135
|
+
* - An IP address, which WebAuthn does not accept as a relying party id at all;
|
|
136
|
+
* registering against one fails in the browser rather than here, which is a
|
|
137
|
+
* much worse place to find out.
|
|
138
|
+
* - Anything without a dot, which cannot be a public tunnel hostname.
|
|
139
|
+
*/
|
|
140
|
+
function relyingPartyId(publicOrigin) {
|
|
141
|
+
if (publicOrigin === void 0) return void 0;
|
|
142
|
+
let host;
|
|
143
|
+
try {
|
|
144
|
+
host = new URL(publicOrigin).hostname.toLowerCase();
|
|
145
|
+
} catch {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (host.endsWith(ROTATING_SUFFIX)) return void 0;
|
|
149
|
+
if (IPV4.test(host) || host.startsWith("[")) return void 0;
|
|
150
|
+
if (!host.includes(".")) return void 0;
|
|
151
|
+
return host;
|
|
152
|
+
}
|
|
153
|
+
//#endregion
|
|
154
|
+
export { CEREMONY_TTL_MS, STEP_UP_ACTIONS, STEP_UP_CHALLENGE_TTL_MS, challengeIsFresh, counterVerdict, isStepUpAction, relyingPartyId, stepUpActionFor };
|
|
155
|
+
|
|
156
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/webauthnPolicy/index.ts"],"sourcesContent":["/**\n * What a passkey is allowed to prove, and for how long.\n *\n * A session cookie is a bearer token: whoever holds the bytes is you. A passkey\n * is a private key in the device's secure enclave that never leaves it, so the\n * cookie stops being the only thing between a stolen phone and this machine.\n * The cookie does not go away, because a WebSocket cannot run a ceremony per\n * frame; what changes is that the cookie is short-lived, re-mintable with a\n * gesture rather than a QR, and insufficient on its own for the actions below.\n *\n * The crypto lives in the adapter. This file is the policy: which actions need\n * a fresh signature, how long a challenge is good for, and when a counter says\n * the credential has been cloned.\n */\n\n/**\n * Actions that need a fresh gesture even from a live session.\n *\n * These are escalation paths rather than ordinary prompting or tool approval:\n * credentials redirect machine traffic, sessions run code in a selected directory,\n * repository writes change future sessions, and live MCP operations may start local\n * processes or contact remote servers.\n */\nexport const STEP_UP_ACTIONS = [\n 'provider.login',\n 'provider.logout',\n 'session.create',\n 'settings.write',\n 'mcp.discover',\n 'mcp.authorize',\n 'computer-use.activate',\n] as const;\n\nexport type StepUpAction = (typeof STEP_UP_ACTIONS)[number];\n\n/** Short enough that a captured challenge is useless, long enough for a slow Face ID. */\nexport const STEP_UP_CHALLENGE_TTL_MS = 60_000;\n/** A registration or sign-in ceremony the user has to complete. */\nexport const CEREMONY_TTL_MS = 120_000;\n\n/**\n * Which action, if any, a request is attempting.\n *\n * Matched here rather than at each route so the list of gated operations is one\n * readable table instead of three call sites that can drift apart. Anything not\n * named is not gated, which is the safe default only because the gate is an\n * addition to the session check rather than a replacement for it.\n */\nconst GATED_ROUTES: readonly { method: string; pattern: RegExp; action: StepUpAction }[] = [\n { method: 'POST', pattern: /^\\/api\\/workspaces$/u, action: 'session.create' },\n {\n method: 'POST',\n // Reviving a recorded session starts an agent in a directory, so it is gated\n // exactly as creating one is.\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/(?:resume|sessions(?:\\/[^/]+\\/(?:resume|revive))?)$/u,\n action: 'session.create',\n },\n // The git new-session dialog starts a worktree session, which runs code in a directory.\n { method: 'POST', pattern: /^\\/api\\/workspaces\\/[^/]+\\/plugins\\/git\\/sessions$/u, action: 'session.create' },\n { method: 'POST', pattern: /^\\/api\\/plugins\\/doompi\\/logins(?:\\/[^/]+\\/answer)?$/u, action: 'provider.login' },\n { method: 'DELETE', pattern: /^\\/api\\/plugins\\/doompi\\/providers\\/[^/]+$/u, action: 'provider.logout' },\n {\n method: 'PUT',\n pattern: /^\\/api(?:\\/workspaces\\/[^/]+)?\\/settings\\/(?:value|repository\\/selection|images)$/u,\n action: 'settings.write',\n },\n {\n method: 'POST',\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/plugins\\/mcp\\/repository\\/discover$/u,\n action: 'mcp.discover',\n },\n {\n method: 'POST',\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/plugins\\/mcp\\/repository\\/authorize$/u,\n action: 'mcp.authorize',\n },\n {\n method: 'DELETE',\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/plugins\\/mcp\\/repository\\/authorize\\/[^/]+$/u,\n action: 'mcp.authorize',\n },\n {\n method: 'POST',\n pattern: /^\\/api\\/workspaces\\/[^/]+\\/sessions\\/[^/]+\\/plugins\\/computer-use\\/activate$/u,\n action: 'computer-use.activate',\n },\n];\nexport function stepUpActionFor(method: string, path: string): StepUpAction | undefined {\n const wanted = method.toUpperCase();\n return GATED_ROUTES.find((route) => route.method === wanted && route.pattern.test(path))?.action;\n}\n\nexport function isStepUpAction(value: unknown): value is StepUpAction {\n return typeof value === 'string' && (STEP_UP_ACTIONS as readonly string[]).includes(value);\n}\n\nexport interface StoredCredential {\n /** Opaque handle for display and revocation. */\n id: string;\n /** The authenticator's credential id, base64url, as WebAuthn reports it. */\n credentialId: string;\n /** Base64url public key; the private half never leaves the device. */\n publicKey: string;\n /** Signature counter, for clone detection. */\n counter: number;\n transports: string[];\n label: string;\n createdAt: number;\n lastUsedAt: number;\n}\n\nexport type CounterVerdict = 'ok' | 'clone-suspected';\n\n/**\n * Whether a signature counter moved the way a real authenticator moves it.\n *\n * A counter that stays at zero means the authenticator does not implement one,\n * which is common and not a signal. A counter that goes backwards or repeats\n * while claiming to count means two things are signing with the same key, which\n * is the definition of a cloned credential.\n */\nexport function counterVerdict(stored: number, presented: number): CounterVerdict {\n if (stored === 0 && presented === 0) return 'ok';\n return presented > stored ? 'ok' : 'clone-suspected';\n}\n\n/** Whether a ceremony or step-up challenge is still live. */\nexport function challengeIsFresh(issuedAt: number, now: number, ttlMs: number): boolean {\n return now - issuedAt < ttlMs;\n}\n\n/** A quick tunnel's domain; its hostname rotates on every start. */\nconst ROTATING_SUFFIX = '.trycloudflare.com';\n/** Dotted-quad, and the bracketed form a URL uses for v6. */\nconst IPV4 = /^\\d{1,3}(?:\\.\\d{1,3}){3}$/u;\n\n/**\n * The relying party id a passkey is bound to.\n *\n * Derived from the configured tunnel hostname and nothing else, never from a\n * request header: `rpID` is the entire scope of a credential, so a caller who\n * could influence it could mint credentials against somebody else's origin.\n *\n * Three things are refused rather than accepted and regretted later:\n *\n * - A quick tunnel, whose hostname rotates on every start, so a passkey\n * registered now would silently stop working on the next one.\n * - An IP address, which WebAuthn does not accept as a relying party id at all;\n * registering against one fails in the browser rather than here, which is a\n * much worse place to find out.\n * - Anything without a dot, which cannot be a public tunnel hostname.\n */\nexport function relyingPartyId(publicOrigin: string | undefined): string | undefined {\n if (publicOrigin === undefined) return undefined;\n let host: string;\n try {\n host = new URL(publicOrigin).hostname.toLowerCase();\n } catch {\n return undefined;\n }\n if (host.endsWith(ROTATING_SUFFIX)) return undefined;\n if (IPV4.test(host) || host.startsWith('[')) return undefined;\n if (!host.includes('.')) return undefined;\n return host;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,kBAAkB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAKA,MAAa,2BAA2B;;AAExC,MAAa,kBAAkB;;;;;;;;;AAU/B,MAAM,eAAqF;CACzF;EAAE,QAAQ;EAAQ,SAAS;EAAwB,QAAQ;CAAiB;CAC5E;EACE,QAAQ;EAGR,SAAS;EACT,QAAQ;CACV;CAEA;EAAE,QAAQ;EAAQ,SAAS;EAAuD,QAAQ;CAAiB;CAC3G;EAAE,QAAQ;EAAQ,SAAS;EAAyD,QAAQ;CAAiB;CAC7G;EAAE,QAAQ;EAAU,SAAS;EAA+C,QAAQ;CAAkB;CACtG;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;CACA;EACE,QAAQ;EACR,SAAS;EACT,QAAQ;CACV;AACF;AACA,SAAgB,gBAAgB,QAAgB,MAAwC;CACtF,MAAM,SAAS,OAAO,YAAY;CAClC,OAAO,aAAa,MAAM,UAAU,MAAM,WAAW,UAAU,MAAM,QAAQ,KAAK,IAAI,CAAC,CAAC,EAAE;AAC5F;AAEA,SAAgB,eAAe,OAAuC;CACpE,OAAO,OAAO,UAAU,YAAa,gBAAsC,SAAS,KAAK;AAC3F;;;;;;;;;AA2BA,SAAgB,eAAe,QAAgB,WAAmC;CAChF,IAAI,WAAW,KAAK,cAAc,GAAG,OAAO;CAC5C,OAAO,YAAY,SAAS,OAAO;AACrC;;AAGA,SAAgB,iBAAiB,UAAkB,KAAa,OAAwB;CACtF,OAAO,MAAM,WAAW;AAC1B;;AAGA,MAAM,kBAAkB;;AAExB,MAAM,OAAO;;;;;;;;;;;;;;;;;AAkBb,SAAgB,eAAe,cAAsD;CACnF,IAAI,iBAAiB,KAAA,GAAW,OAAO,KAAA;CACvC,IAAI;CACJ,IAAI;EACF,OAAO,IAAI,IAAI,YAAY,CAAC,CAAC,SAAS,YAAY;CACpD,QAAQ;EACN;CACF;CACA,IAAI,KAAK,SAAS,eAAe,GAAG,OAAO,KAAA;CAC3C,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,WAAW,GAAG,GAAG,OAAO,KAAA;CACpD,IAAI,CAAC,KAAK,SAAS,GAAG,GAAG,OAAO,KAAA;CAChC,OAAO;AACT"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_syncLocation = require("../../../syncLocation.cjs");
|
|
3
|
+
let node_crypto = require("node:crypto");
|
|
4
|
+
node_crypto = require_runtime.__toESM(node_crypto, 1);
|
|
5
|
+
let node_fs = require("node:fs");
|
|
6
|
+
node_fs = require_runtime.__toESM(node_fs, 1);
|
|
7
|
+
let node_path = require("node:path");
|
|
8
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
9
|
+
//#region src/services/workspaceRegistry/index.ts
|
|
10
|
+
const REGISTRY_FILE = "workspaces.json";
|
|
11
|
+
/** Kept in the repository's git data, which moves with the checkout and is shared by its worktrees. */
|
|
12
|
+
const WORKSPACE_MARKER_FILE = "doompi-workspace-id";
|
|
13
|
+
const DIRECTORY_MODE = 448;
|
|
14
|
+
const FILE_MODE = 384;
|
|
15
|
+
function parseRecord(value) {
|
|
16
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
17
|
+
const record = value;
|
|
18
|
+
if (typeof record.id !== "string" || record.id === "") return void 0;
|
|
19
|
+
if (typeof record.root !== "string" || !node_path.default.isAbsolute(record.root)) return void 0;
|
|
20
|
+
const name = typeof record.name === "string" && record.name.trim() !== "" ? record.name : void 0;
|
|
21
|
+
return {
|
|
22
|
+
id: record.id,
|
|
23
|
+
root: record.root,
|
|
24
|
+
...name === void 0 ? {} : { name }
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Durable workspace membership, independent of whether a workspace can currently mount. */
|
|
28
|
+
function createWorkspaceRegistry(options) {
|
|
29
|
+
const notice = options.onNotice ?? (() => {});
|
|
30
|
+
const filePath = node_path.default.join(options.directory, REGISTRY_FILE);
|
|
31
|
+
const load = () => {
|
|
32
|
+
let raw;
|
|
33
|
+
try {
|
|
34
|
+
raw = node_fs.default.readFileSync(filePath, "utf8");
|
|
35
|
+
} catch (error) {
|
|
36
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") return [];
|
|
37
|
+
notice(`${filePath} could not be read: ${error instanceof Error ? error.message : String(error)}`);
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
let parsed;
|
|
41
|
+
try {
|
|
42
|
+
parsed = JSON.parse(raw);
|
|
43
|
+
} catch {
|
|
44
|
+
notice(`workspaces at ${filePath} are not valid JSON; none will be restored`);
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
if (!Array.isArray(parsed)) {
|
|
48
|
+
notice(`workspaces at ${filePath} are not a list; none will be restored`);
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
const records = [];
|
|
52
|
+
for (const entry of parsed) {
|
|
53
|
+
const record = parseRecord(entry);
|
|
54
|
+
if (record === void 0) notice(`workspaces at ${filePath} contain an unusable entry; skipping it`);
|
|
55
|
+
else if (!records.some((candidate) => candidate.id === record.id)) records.push(record);
|
|
56
|
+
}
|
|
57
|
+
return records;
|
|
58
|
+
};
|
|
59
|
+
let current = load();
|
|
60
|
+
const persist = (next) => {
|
|
61
|
+
const temporary = `${filePath}.${String(process.pid)}.tmp`;
|
|
62
|
+
try {
|
|
63
|
+
node_fs.default.mkdirSync(options.directory, {
|
|
64
|
+
recursive: true,
|
|
65
|
+
mode: DIRECTORY_MODE
|
|
66
|
+
});
|
|
67
|
+
node_fs.default.writeFileSync(temporary, `${JSON.stringify(next, void 0, 2)}\n`, { mode: FILE_MODE });
|
|
68
|
+
node_fs.default.renameSync(temporary, filePath);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
try {
|
|
71
|
+
node_fs.default.rmSync(temporary, { force: true });
|
|
72
|
+
} catch (cleanupError) {
|
|
73
|
+
notice(`${temporary} could not be removed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`);
|
|
74
|
+
}
|
|
75
|
+
throw new Error(`${filePath} could not be saved`, { cause: error });
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
return {
|
|
79
|
+
list: () => current,
|
|
80
|
+
add(record) {
|
|
81
|
+
if (record.id === "" || !node_path.default.isAbsolute(record.root)) throw new Error("Invalid workspace record.");
|
|
82
|
+
const next = current.some((held) => held.id === record.id) ? current.map((held) => held.id === record.id ? record : held) : [...current, record];
|
|
83
|
+
persist(next);
|
|
84
|
+
current = next;
|
|
85
|
+
},
|
|
86
|
+
remove(id) {
|
|
87
|
+
const next = current.filter((held) => held.id !== id);
|
|
88
|
+
if (next.length === current.length) return;
|
|
89
|
+
persist(next);
|
|
90
|
+
current = next;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** The workspace id recorded in a checkout's git data, if any. */
|
|
95
|
+
function readWorkspaceMarker(checkoutRoot) {
|
|
96
|
+
const commonDirectory = require_syncLocation.gitCommonDirectory(checkoutRoot);
|
|
97
|
+
if (commonDirectory === void 0) return void 0;
|
|
98
|
+
try {
|
|
99
|
+
const id = node_fs.default.readFileSync(node_path.default.join(commonDirectory, WORKSPACE_MARKER_FILE), "utf8").trim();
|
|
100
|
+
return id === "" ? void 0 : id;
|
|
101
|
+
} catch (error) {
|
|
102
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") return void 0;
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Records a workspace id in a checkout's git data so the workspace keeps its id when the
|
|
108
|
+
* repository moves. A checkout without git data has nowhere to keep it; returns false.
|
|
109
|
+
*/
|
|
110
|
+
function writeWorkspaceMarker(checkoutRoot, id) {
|
|
111
|
+
const commonDirectory = require_syncLocation.gitCommonDirectory(checkoutRoot);
|
|
112
|
+
if (commonDirectory === void 0) return false;
|
|
113
|
+
node_fs.default.writeFileSync(node_path.default.join(commonDirectory, WORKSPACE_MARKER_FILE), `${id}\n`, { mode: FILE_MODE });
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id
|
|
118
|
+
* in the repository's git data names the workspace: a checkout of a workspace whose root still
|
|
119
|
+
* exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else
|
|
120
|
+
* is a new workspace.
|
|
121
|
+
*/
|
|
122
|
+
function identifyWorkspace(input) {
|
|
123
|
+
const exact = input.records.find((record) => record.root === input.checkoutRoot);
|
|
124
|
+
if (exact !== void 0) return {
|
|
125
|
+
id: exact.id,
|
|
126
|
+
root: exact.root,
|
|
127
|
+
moved: false
|
|
128
|
+
};
|
|
129
|
+
const owner = input.marker === void 0 ? void 0 : input.records.find((record) => record.id === input.marker);
|
|
130
|
+
if (owner !== void 0) return (input.exists ?? node_fs.default.existsSync)(owner.root) ? {
|
|
131
|
+
id: owner.id,
|
|
132
|
+
root: owner.root,
|
|
133
|
+
moved: false
|
|
134
|
+
} : {
|
|
135
|
+
id: owner.id,
|
|
136
|
+
root: input.checkoutRoot,
|
|
137
|
+
moved: true
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
id: input.marker ?? (input.newId ?? node_crypto.default.randomUUID)(),
|
|
141
|
+
root: input.checkoutRoot,
|
|
142
|
+
moved: false
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//#endregion
|
|
146
|
+
exports.createWorkspaceRegistry = createWorkspaceRegistry;
|
|
147
|
+
exports.identifyWorkspace = identifyWorkspace;
|
|
148
|
+
exports.readWorkspaceMarker = readWorkspaceMarker;
|
|
149
|
+
exports.writeWorkspaceMarker = writeWorkspaceMarker;
|
|
150
|
+
|
|
151
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["path","fs","gitCommonDirectory","crypto"],"sources":["../../../../src/services/workspaceRegistry/index.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { gitCommonDirectory } from '../syncLocation';\n\nconst REGISTRY_FILE = 'workspaces.json';\n/** Kept in the repository's git data, which moves with the checkout and is shared by its worktrees. */\nconst WORKSPACE_MARKER_FILE = 'doompi-workspace-id';\nconst DIRECTORY_MODE = 0o700;\nconst FILE_MODE = 0o600;\n\nexport interface WorkspaceRecord {\n id: string;\n root: string;\n /** Display name chosen when the workspace was added; the folder basename stands in when absent. */\n name?: string;\n}\n\nexport interface WorkspaceRegistry {\n list(): readonly WorkspaceRecord[];\n add(record: WorkspaceRecord): void;\n remove(id: string): void;\n}\n\nexport interface WorkspaceRegistryOptions {\n directory: string;\n onNotice?: (message: string) => void;\n}\n\nfunction parseRecord(value: unknown): WorkspaceRecord | undefined {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n if (typeof record.id !== 'string' || record.id === '') return undefined;\n if (typeof record.root !== 'string' || !path.isAbsolute(record.root)) return undefined;\n const name = typeof record.name === 'string' && record.name.trim() !== '' ? record.name : undefined;\n return { id: record.id, root: record.root, ...(name === undefined ? {} : { name }) };\n}\n\n/** Durable workspace membership, independent of whether a workspace can currently mount. */\nexport function createWorkspaceRegistry(options: WorkspaceRegistryOptions): WorkspaceRegistry {\n const notice = options.onNotice ?? ((): void => {});\n const filePath = path.join(options.directory, REGISTRY_FILE);\n\n const load = (): WorkspaceRecord[] => {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return [];\n notice(`${filePath} could not be read: ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n notice(`workspaces at ${filePath} are not valid JSON; none will be restored`);\n return [];\n }\n if (!Array.isArray(parsed)) {\n notice(`workspaces at ${filePath} are not a list; none will be restored`);\n return [];\n }\n const records: WorkspaceRecord[] = [];\n for (const entry of parsed) {\n const record = parseRecord(entry);\n if (record === undefined) notice(`workspaces at ${filePath} contain an unusable entry; skipping it`);\n else if (!records.some((candidate) => candidate.id === record.id)) records.push(record);\n }\n return records;\n };\n\n let current = load();\n\n const persist = (next: readonly WorkspaceRecord[]): void => {\n const temporary = `${filePath}.${String(process.pid)}.tmp`;\n try {\n fs.mkdirSync(options.directory, { recursive: true, mode: DIRECTORY_MODE });\n fs.writeFileSync(temporary, `${JSON.stringify(next, undefined, 2)}\\n`, { mode: FILE_MODE });\n fs.renameSync(temporary, filePath);\n } catch (error) {\n try {\n fs.rmSync(temporary, { force: true });\n } catch (cleanupError) {\n notice(\n `${temporary} could not be removed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`,\n );\n }\n throw new Error(`${filePath} could not be saved`, { cause: error });\n }\n };\n\n return {\n list: () => current,\n add(record) {\n if (record.id === '' || !path.isAbsolute(record.root)) throw new Error('Invalid workspace record.');\n // Replaced in place: registry order is the tie-break when checkouts are matched to workspaces.\n const next = current.some((held) => held.id === record.id)\n ? current.map((held) => (held.id === record.id ? record : held))\n : [...current, record];\n persist(next);\n current = next;\n },\n remove(id) {\n const next = current.filter((held) => held.id !== id);\n if (next.length === current.length) return;\n persist(next);\n current = next;\n },\n };\n}\n\n/** The workspace id recorded in a checkout's git data, if any. */\nexport function readWorkspaceMarker(checkoutRoot: string): string | undefined {\n const commonDirectory = gitCommonDirectory(checkoutRoot);\n if (commonDirectory === undefined) return undefined;\n try {\n const id = fs.readFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), 'utf8').trim();\n return id === '' ? undefined : id;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return undefined;\n throw error;\n }\n}\n\n/**\n * Records a workspace id in a checkout's git data so the workspace keeps its id when the\n * repository moves. A checkout without git data has nowhere to keep it; returns false.\n */\nexport function writeWorkspaceMarker(checkoutRoot: string, id: string): boolean {\n const commonDirectory = gitCommonDirectory(checkoutRoot);\n if (commonDirectory === undefined) return false;\n fs.writeFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), `${id}\\n`, { mode: FILE_MODE });\n return true;\n}\n\nexport interface WorkspaceIdentity {\n readonly id: string;\n /** The workspace root. Differs from the checkout when the checkout joins an existing workspace. */\n readonly root: string;\n /** The recorded root no longer exists and this checkout takes its place. */\n readonly moved: boolean;\n}\n\n/**\n * Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id\n * in the repository's git data names the workspace: a checkout of a workspace whose root still\n * exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else\n * is a new workspace.\n */\nexport function identifyWorkspace(input: {\n readonly records: readonly WorkspaceRecord[];\n readonly checkoutRoot: string;\n readonly marker?: string;\n readonly exists?: (root: string) => boolean;\n readonly newId?: () => string;\n}): WorkspaceIdentity {\n const exact = input.records.find((record) => record.root === input.checkoutRoot);\n if (exact !== undefined) return { id: exact.id, root: exact.root, moved: false };\n const owner = input.marker === undefined ? undefined : input.records.find((record) => record.id === input.marker);\n if (owner !== undefined) {\n const exists = input.exists ?? fs.existsSync;\n return exists(owner.root)\n ? { id: owner.id, root: owner.root, moved: false }\n : { id: owner.id, root: input.checkoutRoot, moved: true };\n }\n return { id: input.marker ?? (input.newId ?? crypto.randomUUID)(), root: input.checkoutRoot, moved: false };\n}\n"],"mappings":";;;;;;;;;AAMA,MAAM,gBAAgB;;AAEtB,MAAM,wBAAwB;AAC9B,MAAM,iBAAiB;AACvB,MAAM,YAAY;AAoBlB,SAAS,YAAY,OAA6C;CAChE,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG,OAAO,KAAA;CAChF,MAAM,SAAS;CACf,IAAI,OAAO,OAAO,OAAO,YAAY,OAAO,OAAO,IAAI,OAAO,KAAA;CAC9D,IAAI,OAAO,OAAO,SAAS,YAAY,CAACA,UAAAA,QAAK,WAAW,OAAO,IAAI,GAAG,OAAO,KAAA;CAC7E,MAAM,OAAO,OAAO,OAAO,SAAS,YAAY,OAAO,KAAK,KAAK,MAAM,KAAK,OAAO,OAAO,KAAA;CAC1F,OAAO;EAAE,IAAI,OAAO;EAAI,MAAM,OAAO;EAAM,GAAI,SAAS,KAAA,IAAY,CAAC,IAAI,EAAE,KAAK;CAAG;AACrF;;AAGA,SAAgB,wBAAwB,SAAsD;CAC5F,MAAM,SAAS,QAAQ,mBAAyB,CAAC;CACjD,MAAM,WAAWA,UAAAA,QAAK,KAAK,QAAQ,WAAW,aAAa;CAE3D,MAAM,aAAgC;EACpC,IAAI;EACJ,IAAI;GACF,MAAMC,QAAAA,QAAG,aAAa,UAAU,MAAM;EACxC,SAAS,OAAO;GACd,IAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS,UAAU,OAAO,CAAC;GAClF,OAAO,GAAG,SAAS,sBAAsB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;GACjG,OAAO,CAAC;EACV;EACA,IAAI;EACJ,IAAI;GACF,SAAS,KAAK,MAAM,GAAG;EACzB,QAAQ;GACN,OAAO,iBAAiB,SAAS,2CAA2C;GAC5E,OAAO,CAAC;EACV;EACA,IAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;GAC1B,OAAO,iBAAiB,SAAS,uCAAuC;GACxE,OAAO,CAAC;EACV;EACA,MAAM,UAA6B,CAAC;EACpC,KAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,SAAS,YAAY,KAAK;GAChC,IAAI,WAAW,KAAA,GAAW,OAAO,iBAAiB,SAAS,wCAAwC;QAC9F,IAAI,CAAC,QAAQ,MAAM,cAAc,UAAU,OAAO,OAAO,EAAE,GAAG,QAAQ,KAAK,MAAM;EACxF;EACA,OAAO;CACT;CAEA,IAAI,UAAU,KAAK;CAEnB,MAAM,WAAW,SAA2C;EAC1D,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,QAAQ,GAAG,EAAE;EACrD,IAAI;GACF,QAAA,QAAG,UAAU,QAAQ,WAAW;IAAE,WAAW;IAAM,MAAM;GAAe,CAAC;GACzE,QAAA,QAAG,cAAc,WAAW,GAAG,KAAK,UAAU,MAAM,KAAA,GAAW,CAAC,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;GAC1F,QAAA,QAAG,WAAW,WAAW,QAAQ;EACnC,SAAS,OAAO;GACd,IAAI;IACF,QAAA,QAAG,OAAO,WAAW,EAAE,OAAO,KAAK,CAAC;GACtC,SAAS,cAAc;IACrB,OACE,GAAG,UAAU,yBAAyB,wBAAwB,QAAQ,aAAa,UAAU,OAAO,YAAY,GAClH;GACF;GACA,MAAM,IAAI,MAAM,GAAG,SAAS,sBAAsB,EAAE,OAAO,MAAM,CAAC;EACpE;CACF;CAEA,OAAO;EACL,YAAY;EACZ,IAAI,QAAQ;GACV,IAAI,OAAO,OAAO,MAAM,CAACD,UAAAA,QAAK,WAAW,OAAO,IAAI,GAAG,MAAM,IAAI,MAAM,2BAA2B;GAElG,MAAM,OAAO,QAAQ,MAAM,SAAS,KAAK,OAAO,OAAO,EAAE,IACrD,QAAQ,KAAK,SAAU,KAAK,OAAO,OAAO,KAAK,SAAS,IAAK,IAC7D,CAAC,GAAG,SAAS,MAAM;GACvB,QAAQ,IAAI;GACZ,UAAU;EACZ;EACA,OAAO,IAAI;GACT,MAAM,OAAO,QAAQ,QAAQ,SAAS,KAAK,OAAO,EAAE;GACpD,IAAI,KAAK,WAAW,QAAQ,QAAQ;GACpC,QAAQ,IAAI;GACZ,UAAU;EACZ;CACF;AACF;;AAGA,SAAgB,oBAAoB,cAA0C;CAC5E,MAAM,kBAAkBE,qBAAAA,mBAAmB,YAAY;CACvD,IAAI,oBAAoB,KAAA,GAAW,OAAO,KAAA;CAC1C,IAAI;EACF,MAAM,KAAKD,QAAAA,QAAG,aAAaD,UAAAA,QAAK,KAAK,iBAAiB,qBAAqB,GAAG,MAAM,CAAC,CAAC,KAAK;EAC3F,OAAO,OAAO,KAAK,KAAA,IAAY;CACjC,SAAS,OAAO;EACd,IAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS,UAAU,OAAO,KAAA;EACjF,MAAM;CACR;AACF;;;;;AAMA,SAAgB,qBAAqB,cAAsB,IAAqB;CAC9E,MAAM,kBAAkBE,qBAAAA,mBAAmB,YAAY;CACvD,IAAI,oBAAoB,KAAA,GAAW,OAAO;CAC1C,QAAA,QAAG,cAAcF,UAAAA,QAAK,KAAK,iBAAiB,qBAAqB,GAAG,GAAG,GAAG,KAAK,EAAE,MAAM,UAAU,CAAC;CAClG,OAAO;AACT;;;;;;;AAgBA,SAAgB,kBAAkB,OAMZ;CACpB,MAAM,QAAQ,MAAM,QAAQ,MAAM,WAAW,OAAO,SAAS,MAAM,YAAY;CAC/E,IAAI,UAAU,KAAA,GAAW,OAAO;EAAE,IAAI,MAAM;EAAI,MAAM,MAAM;EAAM,OAAO;CAAM;CAC/E,MAAM,QAAQ,MAAM,WAAW,KAAA,IAAY,KAAA,IAAY,MAAM,QAAQ,MAAM,WAAW,OAAO,OAAO,MAAM,MAAM;CAChH,IAAI,UAAU,KAAA,GAEZ,QADe,MAAM,UAAUC,QAAAA,QAAG,WAAA,CACpB,MAAM,IAAI,IACpB;EAAE,IAAI,MAAM;EAAI,MAAM,MAAM;EAAM,OAAO;CAAM,IAC/C;EAAE,IAAI,MAAM;EAAI,MAAM,MAAM;EAAc,OAAO;CAAK;CAE5D,OAAO;EAAE,IAAI,MAAM,WAAW,MAAM,SAASE,YAAAA,QAAO,WAAA,CAAY;EAAG,MAAM,MAAM;EAAc,OAAO;CAAM;AAC5G"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//#region src/services/workspaceRegistry/index.d.ts
|
|
2
|
+
export interface WorkspaceRecord {
|
|
3
|
+
id: string;
|
|
4
|
+
root: string;
|
|
5
|
+
/** Display name chosen when the workspace was added; the folder basename stands in when absent. */
|
|
6
|
+
name?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface WorkspaceRegistry {
|
|
9
|
+
list(): readonly WorkspaceRecord[];
|
|
10
|
+
add(record: WorkspaceRecord): void;
|
|
11
|
+
remove(id: string): void;
|
|
12
|
+
}
|
|
13
|
+
export interface WorkspaceRegistryOptions {
|
|
14
|
+
directory: string;
|
|
15
|
+
onNotice?: (message: string) => void;
|
|
16
|
+
}
|
|
17
|
+
/** Durable workspace membership, independent of whether a workspace can currently mount. */
|
|
18
|
+
export declare function createWorkspaceRegistry(options: WorkspaceRegistryOptions): WorkspaceRegistry;
|
|
19
|
+
/** The workspace id recorded in a checkout's git data, if any. */
|
|
20
|
+
export declare function readWorkspaceMarker(checkoutRoot: string): string | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Records a workspace id in a checkout's git data so the workspace keeps its id when the
|
|
23
|
+
* repository moves. A checkout without git data has nowhere to keep it; returns false.
|
|
24
|
+
*/
|
|
25
|
+
export declare function writeWorkspaceMarker(checkoutRoot: string, id: string): boolean;
|
|
26
|
+
export interface WorkspaceIdentity {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
/** The workspace root. Differs from the checkout when the checkout joins an existing workspace. */
|
|
29
|
+
readonly root: string;
|
|
30
|
+
/** The recorded root no longer exists and this checkout takes its place. */
|
|
31
|
+
readonly moved: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id
|
|
35
|
+
* in the repository's git data names the workspace: a checkout of a workspace whose root still
|
|
36
|
+
* exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else
|
|
37
|
+
* is a new workspace.
|
|
38
|
+
*/
|
|
39
|
+
export declare function identifyWorkspace(input: {
|
|
40
|
+
readonly records: readonly WorkspaceRecord[];
|
|
41
|
+
readonly checkoutRoot: string;
|
|
42
|
+
readonly marker?: string;
|
|
43
|
+
readonly exists?: (root: string) => boolean;
|
|
44
|
+
readonly newId?: () => string;
|
|
45
|
+
}): WorkspaceIdentity;
|
|
46
|
+
//#endregion
|
|
47
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/workspaceRegistry/index.ts"],"mappings":";iBAYiB;EACf;EACA;;EAEA;;iBAGe;EACf,iBAAiB;EACjB,IAAI,QAAQ;EACZ,OAAO;;iBAGQ;EACf;EACA,YAAY;;;wBAaE,wBAAwB,SAAS,2BAA2B;;wBA0E5D,oBAAoB;;;;;wBAgBpB,qBAAqB,sBAAsB;iBAO1C;WACN;;WAEA;;WAEA;;;;;;;;wBASK,kBAAkB;WACvB,kBAAkB;WAClB;WACA;WACA,UAAU;WACV;IACP"}
|