@agimon-ai/doompi-core 0.0.1-alpha.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/agentModel.cjs +4 -0
- package/dist/agentModel.d.mts +2 -0
- package/dist/agentModel.mjs +2 -0
- package/dist/apiContracts.cjs +2009 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +1018 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +1989 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/askUser.cjs +8 -0
- package/dist/askUser.d.mts +2 -0
- package/dist/askUser.mjs +2 -0
- package/dist/authorTools.cjs +5 -0
- package/dist/authorTools.d.mts +2 -0
- package/dist/authorTools.mjs +2 -0
- package/dist/backgroundWork.cjs +7 -0
- package/dist/backgroundWork.d.mts +2 -0
- package/dist/backgroundWork.mjs +2 -0
- package/dist/bundleAssetPolicy.cjs +5 -0
- package/dist/bundleAssetPolicy.d.mts +2 -0
- package/dist/bundleAssetPolicy.mjs +2 -0
- package/dist/childProcess.cjs +15 -0
- package/dist/childProcess.d.mts +2 -0
- package/dist/childProcess.mjs +2 -0
- package/dist/childSession.cjs +8 -0
- package/dist/childSession.d.mts +3 -0
- package/dist/childSession.mjs +3 -0
- package/dist/cockpitContainer.cjs +4 -0
- package/dist/cockpitContainer.d.mts +2 -0
- package/dist/cockpitContainer.mjs +2 -0
- package/dist/config.cjs +13 -0
- package/dist/config.d.mts +3 -0
- package/dist/config.mjs +2 -0
- package/dist/contextApi.cjs +10 -0
- package/dist/contextApi.d.mts +4 -0
- package/dist/contextApi.mjs +3 -0
- package/dist/contextContributions.cjs +7 -0
- package/dist/contextContributions.d.mts +3 -0
- package/dist/contextContributions.mjs +3 -0
- package/dist/contextDetail.cjs +65 -0
- package/dist/contextDetail.cjs.map +1 -0
- package/dist/contextDetail.d.mts +19 -0
- package/dist/contextDetail.d.mts.map +1 -0
- package/dist/contextDetail.mjs +64 -0
- package/dist/contextDetail.mjs.map +1 -0
- package/dist/contextDetailStore.cjs +100 -0
- package/dist/contextDetailStore.cjs.map +1 -0
- package/dist/contextDetailStore.d.mts +19 -0
- package/dist/contextDetailStore.d.mts.map +1 -0
- package/dist/contextDetailStore.mjs +91 -0
- package/dist/contextDetailStore.mjs.map +1 -0
- package/dist/contextProjection.cjs +121 -0
- package/dist/contextProjection.cjs.map +1 -0
- package/dist/contextProjection.d.mts +130 -0
- package/dist/contextProjection.d.mts.map +1 -0
- package/dist/contextProjection.mjs +117 -0
- package/dist/contextProjection.mjs.map +1 -0
- package/dist/cordisHost.cjs +11 -0
- package/dist/cordisHost.d.mts +2 -0
- package/dist/cordisHost.mjs +2 -0
- package/dist/delegation.cjs +18 -0
- package/dist/delegation.d.mts +2 -0
- package/dist/delegation.mjs +2 -0
- package/dist/doomPackage.cjs +61 -0
- package/dist/doomPackage.cjs.map +1 -0
- package/dist/doomPackage.d.mts +17 -0
- package/dist/doomPackage.d.mts.map +1 -0
- package/dist/doomPackage.mjs +54 -0
- package/dist/doomPackage.mjs.map +1 -0
- package/dist/executionBudget.cjs +231 -0
- package/dist/executionBudget.cjs.map +1 -0
- package/dist/executionBudget.d.mts +11 -0
- package/dist/executionBudget.d.mts.map +1 -0
- package/dist/executionBudget.mjs +225 -0
- package/dist/executionBudget.mjs.map +1 -0
- package/dist/extensionFile.cjs +24 -0
- package/dist/extensionFile.d.mts +3 -0
- package/dist/extensionFile.mjs +2 -0
- package/dist/footer.cjs +6 -0
- package/dist/footer.d.mts +2 -0
- package/dist/footer.mjs +2 -0
- package/dist/headless.cjs +9 -0
- package/dist/headless.d.mts +2 -0
- package/dist/headless.mjs +2 -0
- package/dist/headlessHub.cjs +914 -0
- package/dist/headlessHub.cjs.map +1 -0
- package/dist/headlessHub.d.mts +157 -0
- package/dist/headlessHub.d.mts.map +1 -0
- package/dist/headlessHub.mjs +911 -0
- package/dist/headlessHub.mjs.map +1 -0
- package/dist/headlessServer.cjs +910 -0
- package/dist/headlessServer.cjs.map +1 -0
- package/dist/headlessServer.d.mts +64 -0
- package/dist/headlessServer.d.mts.map +1 -0
- package/dist/headlessServer.mjs +904 -0
- package/dist/headlessServer.mjs.map +1 -0
- package/dist/headlessSessionHost.cjs +0 -0
- package/dist/headlessSessionHost.d.mts +71 -0
- package/dist/headlessSessionHost.d.mts.map +1 -0
- package/dist/headlessSessionHost.mjs +1 -0
- package/dist/headlessSessionManager.cjs +51 -0
- package/dist/headlessSessionManager.cjs.map +1 -0
- package/dist/headlessSessionManager.d.mts +6 -0
- package/dist/headlessSessionManager.d.mts.map +1 -0
- package/dist/headlessSessionManager.mjs +50 -0
- package/dist/headlessSessionManager.mjs.map +1 -0
- package/dist/help.cjs +24 -0
- package/dist/help.d.mts +3 -0
- package/dist/help.mjs +3 -0
- package/dist/history.cjs +25 -0
- package/dist/history.d.mts +10 -0
- package/dist/history.mjs +10 -0
- package/dist/historyImport.cjs +553 -0
- package/dist/historyImport.cjs.map +1 -0
- package/dist/historyImport.d.mts +76 -0
- package/dist/historyImport.d.mts.map +1 -0
- package/dist/historyImport.mjs +547 -0
- package/dist/historyImport.mjs.map +1 -0
- package/dist/historyOwnership.cjs +253 -0
- package/dist/historyOwnership.cjs.map +1 -0
- package/dist/historyOwnership.d.mts +23 -0
- package/dist/historyOwnership.d.mts.map +1 -0
- package/dist/historyOwnership.mjs +247 -0
- package/dist/historyOwnership.mjs.map +1 -0
- package/dist/hubChannel.cjs +4 -0
- package/dist/hubChannel.d.mts +2 -0
- package/dist/hubChannel.mjs +2 -0
- package/dist/index.cjs +44 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +6 -0
- package/dist/json.cjs +6 -0
- package/dist/json.d.mts +2 -0
- package/dist/json.mjs +2 -0
- package/dist/jsonlSessionRepo.cjs +217 -0
- package/dist/jsonlSessionRepo.cjs.map +1 -0
- package/dist/jsonlSessionRepo.d.mts +7 -0
- package/dist/jsonlSessionRepo.d.mts.map +1 -0
- package/dist/jsonlSessionRepo.mjs +212 -0
- package/dist/jsonlSessionRepo.mjs.map +1 -0
- package/dist/kernel.cjs +3 -0
- package/dist/kernel.d.mts +3 -0
- package/dist/kernel.mjs +2 -0
- package/dist/leader.cjs +9 -0
- package/dist/leader.d.mts +2 -0
- package/dist/leader.mjs +2 -0
- package/dist/logSinkTelemetry.cjs +5 -0
- package/dist/logSinkTelemetry.d.mts +2 -0
- package/dist/logSinkTelemetry.mjs +2 -0
- package/dist/machineApi.cjs +92 -0
- package/dist/machineApi.cjs.map +1 -0
- package/dist/machineApi.d.mts +7 -0
- package/dist/machineApi.d.mts.map +1 -0
- package/dist/machineApi.mjs +88 -0
- package/dist/machineApi.mjs.map +1 -0
- package/dist/main.cjs +11 -0
- package/dist/main.d.mts +5 -0
- package/dist/main.mjs +4 -0
- package/dist/mcpFacet.cjs +12 -0
- package/dist/mcpFacet.d.mts +4 -0
- package/dist/mcpFacet.mjs +4 -0
- package/dist/mcpProjection.cjs +16 -0
- package/dist/mcpProjection.d.mts +2 -0
- package/dist/mcpProjection.mjs +2 -0
- package/dist/mcpSchemaCost.cjs +195 -0
- package/dist/mcpSchemaCost.cjs.map +1 -0
- package/dist/mcpSchemaCost.d.mts +35 -0
- package/dist/mcpSchemaCost.d.mts.map +1 -0
- package/dist/mcpSchemaCost.mjs +190 -0
- package/dist/mcpSchemaCost.mjs.map +1 -0
- package/dist/mcpSession.cjs +9 -0
- package/dist/mcpSession.d.mts +2 -0
- package/dist/mcpSession.mjs +2 -0
- package/dist/mcpStatus.cjs +7 -0
- package/dist/mcpStatus.d.mts +2 -0
- package/dist/mcpStatus.mjs +2 -0
- package/dist/mcpToolResolver.cjs +5 -0
- package/dist/mcpToolResolver.d.mts +2 -0
- package/dist/mcpToolResolver.mjs +2 -0
- package/dist/mcpWidget.cjs +0 -0
- package/dist/mcpWidget.d.mts +2 -0
- package/dist/mcpWidget.mjs +1 -0
- package/dist/moduleResolution.cjs +405 -0
- package/dist/moduleResolution.cjs.map +1 -0
- package/dist/moduleResolution.d.mts +67 -0
- package/dist/moduleResolution.d.mts.map +1 -0
- package/dist/moduleResolution.mjs +389 -0
- package/dist/moduleResolution.mjs.map +1 -0
- package/dist/narration.cjs +10 -0
- package/dist/narration.d.mts +2 -0
- package/dist/narration.mjs +2 -0
- package/dist/notification.cjs +17 -0
- package/dist/notification.d.mts +2 -0
- package/dist/notification.mjs +2 -0
- package/dist/packageApi.cjs +16 -0
- package/dist/packageApi.d.mts +3 -0
- package/dist/packageApi.mjs +3 -0
- package/dist/packageApiServer.cjs +191 -0
- package/dist/packageApiServer.cjs.map +1 -0
- package/dist/packageApiServer.d.mts +57 -0
- package/dist/packageApiServer.d.mts.map +1 -0
- package/dist/packageApiServer.mjs +189 -0
- package/dist/packageApiServer.mjs.map +1 -0
- package/dist/piExtension.cjs +13 -0
- package/dist/piExtension.d.mts +5 -0
- package/dist/piExtension.mjs +4 -0
- package/dist/piSettings.cjs +12 -0
- package/dist/piSettings.d.mts +2 -0
- package/dist/piSettings.mjs +2 -0
- package/dist/pluginProtocol.cjs +10 -0
- package/dist/pluginProtocol.d.mts +2 -0
- package/dist/pluginProtocol.mjs +2 -0
- package/dist/profileIdentity.cjs +6 -0
- package/dist/profileIdentity.d.mts +2 -0
- package/dist/profileIdentity.mjs +2 -0
- package/dist/protocol.cjs +10 -0
- package/dist/protocol.d.mts +2 -0
- package/dist/protocol.mjs +2 -0
- package/dist/readiness.cjs +8 -0
- package/dist/readiness.d.mts +2 -0
- package/dist/readiness.mjs +2 -0
- package/dist/relaunchHandoff.cjs +6 -0
- package/dist/relaunchHandoff.d.mts +2 -0
- package/dist/relaunchHandoff.mjs +2 -0
- package/dist/remoteApi.cjs +42 -0
- package/dist/remoteApi.cjs.map +1 -0
- package/dist/remoteApi.d.mts +7 -0
- package/dist/remoteApi.d.mts.map +1 -0
- package/dist/remoteApi.mjs +41 -0
- package/dist/remoteApi.mjs.map +1 -0
- package/dist/remoteRuntime.cjs +460 -0
- package/dist/remoteRuntime.cjs.map +1 -0
- package/dist/remoteRuntime.d.mts +28 -0
- package/dist/remoteRuntime.d.mts.map +1 -0
- package/dist/remoteRuntime.mjs +456 -0
- package/dist/remoteRuntime.mjs.map +1 -0
- package/dist/runtimeConfig.cjs +232 -0
- package/dist/runtimeConfig.cjs.map +1 -0
- package/dist/runtimeConfig.d.mts +313 -0
- package/dist/runtimeConfig.d.mts.map +1 -0
- package/dist/runtimeConfig.mjs +221 -0
- package/dist/runtimeConfig.mjs.map +1 -0
- package/dist/runtimeContextApi.cjs +64 -0
- package/dist/runtimeContextApi.cjs.map +1 -0
- package/dist/runtimeContextApi.d.mts +16 -0
- package/dist/runtimeContextApi.d.mts.map +1 -0
- package/dist/runtimeContextApi.mjs +62 -0
- package/dist/runtimeContextApi.mjs.map +1 -0
- package/dist/runtimeCordisHost.cjs +193 -0
- package/dist/runtimeCordisHost.cjs.map +1 -0
- package/dist/runtimeCordisHost.d.mts +63 -0
- package/dist/runtimeCordisHost.d.mts.map +1 -0
- package/dist/runtimeCordisHost.mjs +184 -0
- package/dist/runtimeCordisHost.mjs.map +1 -0
- package/dist/runtimeHeadlessSessionManager.cjs +0 -0
- package/dist/runtimeHeadlessSessionManager.d.mts +18 -0
- package/dist/runtimeHeadlessSessionManager.d.mts.map +1 -0
- package/dist/runtimeHeadlessSessionManager.mjs +1 -0
- package/dist/runtimeIdentity.cjs +26 -0
- package/dist/runtimeIdentity.cjs.map +1 -0
- package/dist/runtimeIdentity.d.mts +7 -0
- package/dist/runtimeIdentity.d.mts.map +1 -0
- package/dist/runtimeIdentity.mjs +21 -0
- package/dist/runtimeIdentity.mjs.map +1 -0
- package/dist/runtimeJson.cjs +46 -0
- package/dist/runtimeJson.cjs.map +1 -0
- package/dist/runtimeJson.d.mts +22 -0
- package/dist/runtimeJson.d.mts.map +1 -0
- package/dist/runtimeJson.mjs +39 -0
- package/dist/runtimeJson.mjs.map +1 -0
- package/dist/runtimeLogSinkTelemetry.cjs +102 -0
- package/dist/runtimeLogSinkTelemetry.cjs.map +1 -0
- package/dist/runtimeLogSinkTelemetry.d.mts +49 -0
- package/dist/runtimeLogSinkTelemetry.d.mts.map +1 -0
- package/dist/runtimeLogSinkTelemetry.mjs +99 -0
- package/dist/runtimeLogSinkTelemetry.mjs.map +1 -0
- package/dist/runtimePiExtension.cjs +339 -0
- package/dist/runtimePiExtension.cjs.map +1 -0
- package/dist/runtimePiExtension.d.mts +160 -0
- package/dist/runtimePiExtension.d.mts.map +1 -0
- package/dist/runtimePiExtension.mjs +333 -0
- package/dist/runtimePiExtension.mjs.map +1 -0
- package/dist/runtimePiSettings.cjs +116 -0
- package/dist/runtimePiSettings.cjs.map +1 -0
- package/dist/runtimePiSettings.d.mts +29 -0
- package/dist/runtimePiSettings.d.mts.map +1 -0
- package/dist/runtimePiSettings.mjs +103 -0
- package/dist/runtimePiSettings.mjs.map +1 -0
- package/dist/runtimeProtocol.cjs +223 -0
- package/dist/runtimeProtocol.cjs.map +1 -0
- package/dist/runtimeProtocol.d.mts +84 -0
- package/dist/runtimeProtocol.d.mts.map +1 -0
- package/dist/runtimeProtocol.mjs +215 -0
- package/dist/runtimeProtocol.mjs.map +1 -0
- package/dist/runtimeToolNames.cjs +51 -0
- package/dist/runtimeToolNames.cjs.map +1 -0
- package/dist/runtimeToolNames.d.mts +24 -0
- package/dist/runtimeToolNames.d.mts.map +1 -0
- package/dist/runtimeToolNames.mjs +49 -0
- package/dist/runtimeToolNames.mjs.map +1 -0
- package/dist/runtimeTransition.cjs +27 -0
- package/dist/runtimeTransition.cjs.map +1 -0
- package/dist/runtimeTransition.d.mts +114 -0
- package/dist/runtimeTransition.d.mts.map +1 -0
- package/dist/runtimeTransition.mjs +24 -0
- package/dist/runtimeTransition.mjs.map +1 -0
- package/dist/sandboxHarness.cjs +6 -0
- package/dist/sandboxHarness.d.mts +2 -0
- package/dist/sandboxHarness.mjs +2 -0
- package/dist/server.cjs +17 -0
- package/dist/server.d.mts +10 -0
- package/dist/server.mjs +7 -0
- package/dist/serverFacet.cjs +30 -0
- package/dist/serverFacet.d.mts +8 -0
- package/dist/serverFacet.mjs +8 -0
- package/dist/serverTelemetry.cjs +25 -0
- package/dist/serverTelemetry.cjs.map +1 -0
- package/dist/serverTelemetry.d.mts +12 -0
- package/dist/serverTelemetry.d.mts.map +1 -0
- package/dist/serverTelemetry.mjs +23 -0
- package/dist/serverTelemetry.mjs.map +1 -0
- package/dist/sessionFilesApi.cjs +96 -0
- package/dist/sessionFilesApi.cjs.map +1 -0
- package/dist/sessionFilesApi.d.mts +7 -0
- package/dist/sessionFilesApi.d.mts.map +1 -0
- package/dist/sessionFilesApi.mjs +91 -0
- package/dist/sessionFilesApi.mjs.map +1 -0
- package/dist/sessionMcp.cjs +6 -0
- package/dist/sessionMcp.d.mts +5 -0
- package/dist/sessionMcp.mjs +3 -0
- package/dist/sessionProtocol.cjs +8 -0
- package/dist/sessionProtocol.d.mts +3 -0
- package/dist/sessionProtocol.mjs +2 -0
- package/dist/skills.cjs +9 -0
- package/dist/skills.d.mts +2 -0
- package/dist/skills.mjs +2 -0
- package/dist/sqliteHistoryImport.cjs +151 -0
- package/dist/sqliteHistoryImport.cjs.map +1 -0
- package/dist/sqliteHistoryImport.d.mts +8 -0
- package/dist/sqliteHistoryImport.d.mts.map +1 -0
- package/dist/sqliteHistoryImport.mjs +146 -0
- package/dist/sqliteHistoryImport.mjs.map +1 -0
- package/dist/sqliteSessionStorage.cjs +53 -0
- package/dist/sqliteSessionStorage.cjs.map +1 -0
- package/dist/sqliteSessionStorage.d.mts +7 -0
- package/dist/sqliteSessionStorage.d.mts.map +1 -0
- package/dist/sqliteSessionStorage.mjs +49 -0
- package/dist/sqliteSessionStorage.mjs.map +1 -0
- package/dist/src/constants/authorTools.cjs +10 -0
- package/dist/src/constants/authorTools.cjs.map +1 -0
- package/dist/src/constants/authorTools.d.mts +6 -0
- package/dist/src/constants/authorTools.d.mts.map +1 -0
- package/dist/src/constants/authorTools.mjs +8 -0
- package/dist/src/constants/authorTools.mjs.map +1 -0
- package/dist/src/constants/contextApi.cjs +28 -0
- package/dist/src/constants/contextApi.cjs.map +1 -0
- package/dist/src/constants/contextApi.d.mts +21 -0
- package/dist/src/constants/contextApi.d.mts.map +1 -0
- package/dist/src/constants/contextApi.mjs +23 -0
- package/dist/src/constants/contextApi.mjs.map +1 -0
- package/dist/src/constants/remote.cjs +90 -0
- package/dist/src/constants/remote.cjs.map +1 -0
- package/dist/src/constants/remote.mjs +69 -0
- package/dist/src/constants/remote.mjs.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.cjs +12 -0
- package/dist/src/constants/voiceReloadHandoff.cjs.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.d.mts +7 -0
- package/dist/src/constants/voiceReloadHandoff.d.mts.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.mjs +9 -0
- package/dist/src/constants/voiceReloadHandoff.mjs.map +1 -0
- package/dist/src/constants/voiceTools.cjs +96 -0
- package/dist/src/constants/voiceTools.cjs.map +1 -0
- package/dist/src/constants/voiceTools.d.mts +58 -0
- package/dist/src/constants/voiceTools.d.mts.map +1 -0
- package/dist/src/constants/voiceTools.mjs +60 -0
- package/dist/src/constants/voiceTools.mjs.map +1 -0
- package/dist/src/extensions/extensionFile.cjs +165 -0
- package/dist/src/extensions/extensionFile.cjs.map +1 -0
- package/dist/src/extensions/extensionFile.d.mts +79 -0
- package/dist/src/extensions/extensionFile.d.mts.map +1 -0
- package/dist/src/extensions/extensionFile.mjs +144 -0
- package/dist/src/extensions/extensionFile.mjs.map +1 -0
- package/dist/src/extensions/serverPlugin.cjs +106 -0
- package/dist/src/extensions/serverPlugin.cjs.map +1 -0
- package/dist/src/extensions/serverPlugin.d.mts +5 -0
- package/dist/src/extensions/serverPlugin.d.mts.map +1 -0
- package/dist/src/extensions/serverPlugin.mjs +106 -0
- package/dist/src/extensions/serverPlugin.mjs.map +1 -0
- package/dist/src/extensions/webPlugin.cjs +131 -0
- package/dist/src/extensions/webPlugin.cjs.map +1 -0
- package/dist/src/extensions/webPlugin.d.mts +66 -0
- package/dist/src/extensions/webPlugin.d.mts.map +1 -0
- package/dist/src/extensions/webPlugin.mjs +110 -0
- package/dist/src/extensions/webPlugin.mjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.cjs +572 -0
- package/dist/src/pi/piSessionRuntime.cjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.d.mts +43 -0
- package/dist/src/pi/piSessionRuntime.d.mts.map +1 -0
- package/dist/src/pi/piSessionRuntime.mjs +571 -0
- package/dist/src/pi/piSessionRuntime.mjs.map +1 -0
- package/dist/src/pi/piWebSocketListener.cjs +115 -0
- package/dist/src/pi/piWebSocketListener.cjs.map +1 -0
- package/dist/src/pi/piWebSocketListener.mjs +115 -0
- package/dist/src/pi/piWebSocketListener.mjs.map +1 -0
- package/dist/src/schemas/agentModel.cjs +33 -0
- package/dist/src/schemas/agentModel.cjs.map +1 -0
- package/dist/src/schemas/agentModel.d.mts +26 -0
- package/dist/src/schemas/agentModel.d.mts.map +1 -0
- package/dist/src/schemas/agentModel.mjs +32 -0
- package/dist/src/schemas/agentModel.mjs.map +1 -0
- package/dist/src/schemas/apiContracts.d.mts +58 -0
- package/dist/src/schemas/apiContracts.d.mts.map +1 -0
- package/dist/src/schemas/askUser.cjs +42 -0
- package/dist/src/schemas/askUser.cjs.map +1 -0
- package/dist/src/schemas/askUser.d.mts +47 -0
- package/dist/src/schemas/askUser.d.mts.map +1 -0
- package/dist/src/schemas/askUser.mjs +37 -0
- package/dist/src/schemas/askUser.mjs.map +1 -0
- package/dist/src/schemas/backgroundWork.cjs +31 -0
- package/dist/src/schemas/backgroundWork.cjs.map +1 -0
- package/dist/src/schemas/backgroundWork.d.mts +72 -0
- package/dist/src/schemas/backgroundWork.d.mts.map +1 -0
- package/dist/src/schemas/backgroundWork.mjs +27 -0
- package/dist/src/schemas/backgroundWork.mjs.map +1 -0
- package/dist/src/schemas/childProcess.cjs +67 -0
- package/dist/src/schemas/childProcess.cjs.map +1 -0
- package/dist/src/schemas/childProcess.d.mts +30 -0
- package/dist/src/schemas/childProcess.d.mts.map +1 -0
- package/dist/src/schemas/childProcess.mjs +55 -0
- package/dist/src/schemas/childProcess.mjs.map +1 -0
- package/dist/src/schemas/cockpitContainer.cjs +31 -0
- package/dist/src/schemas/cockpitContainer.cjs.map +1 -0
- package/dist/src/schemas/cockpitContainer.d.mts +80 -0
- package/dist/src/schemas/cockpitContainer.d.mts.map +1 -0
- package/dist/src/schemas/cockpitContainer.mjs +30 -0
- package/dist/src/schemas/cockpitContainer.mjs.map +1 -0
- package/dist/src/schemas/contextContributions.cjs +17 -0
- package/dist/src/schemas/contextContributions.cjs.map +1 -0
- package/dist/src/schemas/contextContributions.d.mts +49 -0
- package/dist/src/schemas/contextContributions.d.mts.map +1 -0
- package/dist/src/schemas/contextContributions.mjs +15 -0
- package/dist/src/schemas/contextContributions.mjs.map +1 -0
- package/dist/src/schemas/delegation.cjs +91 -0
- package/dist/src/schemas/delegation.cjs.map +1 -0
- package/dist/src/schemas/delegation.d.mts +95 -0
- package/dist/src/schemas/delegation.d.mts.map +1 -0
- package/dist/src/schemas/delegation.mjs +76 -0
- package/dist/src/schemas/delegation.mjs.map +1 -0
- package/dist/src/schemas/extensionFile.d.mts +136 -0
- package/dist/src/schemas/extensionFile.d.mts.map +1 -0
- package/dist/src/schemas/footer.cjs +48 -0
- package/dist/src/schemas/footer.cjs.map +1 -0
- package/dist/src/schemas/footer.d.mts +48 -0
- package/dist/src/schemas/footer.d.mts.map +1 -0
- package/dist/src/schemas/footer.mjs +45 -0
- package/dist/src/schemas/footer.mjs.map +1 -0
- package/dist/src/schemas/headless.cjs +44 -0
- package/dist/src/schemas/headless.cjs.map +1 -0
- package/dist/src/schemas/headless.d.mts +370 -0
- package/dist/src/schemas/headless.d.mts.map +1 -0
- package/dist/src/schemas/headless.mjs +38 -0
- package/dist/src/schemas/headless.mjs.map +1 -0
- package/dist/src/schemas/help.cjs +281 -0
- package/dist/src/schemas/help.cjs.map +1 -0
- package/dist/src/schemas/help.d.mts +119 -0
- package/dist/src/schemas/help.d.mts.map +1 -0
- package/dist/src/schemas/help.mjs +262 -0
- package/dist/src/schemas/help.mjs.map +1 -0
- package/dist/src/schemas/hubChannel.cjs +20 -0
- package/dist/src/schemas/hubChannel.cjs.map +1 -0
- package/dist/src/schemas/hubChannel.d.mts +236 -0
- package/dist/src/schemas/hubChannel.d.mts.map +1 -0
- package/dist/src/schemas/hubChannel.mjs +19 -0
- package/dist/src/schemas/hubChannel.mjs.map +1 -0
- package/dist/src/schemas/leader.cjs +57 -0
- package/dist/src/schemas/leader.cjs.map +1 -0
- package/dist/src/schemas/leader.d.mts +107 -0
- package/dist/src/schemas/leader.d.mts.map +1 -0
- package/dist/src/schemas/leader.mjs +51 -0
- package/dist/src/schemas/leader.mjs.map +1 -0
- package/dist/src/schemas/mcpBundle.cjs +92 -0
- package/dist/src/schemas/mcpBundle.cjs.map +1 -0
- package/dist/src/schemas/mcpBundle.d.mts +33 -0
- package/dist/src/schemas/mcpBundle.d.mts.map +1 -0
- package/dist/src/schemas/mcpBundle.mjs +90 -0
- package/dist/src/schemas/mcpBundle.mjs.map +1 -0
- package/dist/src/schemas/mcpFacet.cjs +24 -0
- package/dist/src/schemas/mcpFacet.cjs.map +1 -0
- package/dist/src/schemas/mcpFacet.d.mts +91 -0
- package/dist/src/schemas/mcpFacet.d.mts.map +1 -0
- package/dist/src/schemas/mcpFacet.mjs +21 -0
- package/dist/src/schemas/mcpFacet.mjs.map +1 -0
- package/dist/src/schemas/mcpProjection.cjs +117 -0
- package/dist/src/schemas/mcpProjection.cjs.map +1 -0
- package/dist/src/schemas/mcpProjection.d.mts +124 -0
- package/dist/src/schemas/mcpProjection.d.mts.map +1 -0
- package/dist/src/schemas/mcpProjection.mjs +104 -0
- package/dist/src/schemas/mcpProjection.mjs.map +1 -0
- package/dist/src/schemas/mcpSession.cjs +57 -0
- package/dist/src/schemas/mcpSession.cjs.map +1 -0
- package/dist/src/schemas/mcpSession.d.mts +57 -0
- package/dist/src/schemas/mcpSession.d.mts.map +1 -0
- package/dist/src/schemas/mcpSession.mjs +51 -0
- package/dist/src/schemas/mcpSession.mjs.map +1 -0
- package/dist/src/schemas/mcpStatus.cjs +52 -0
- package/dist/src/schemas/mcpStatus.cjs.map +1 -0
- package/dist/src/schemas/mcpStatus.d.mts +73 -0
- package/dist/src/schemas/mcpStatus.d.mts.map +1 -0
- package/dist/src/schemas/mcpStatus.mjs +48 -0
- package/dist/src/schemas/mcpStatus.mjs.map +1 -0
- package/dist/src/schemas/mcpToolResolver.cjs +17 -0
- package/dist/src/schemas/mcpToolResolver.cjs.map +1 -0
- package/dist/src/schemas/mcpToolResolver.d.mts +24 -0
- package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -0
- package/dist/src/schemas/mcpToolResolver.mjs +15 -0
- package/dist/src/schemas/mcpToolResolver.mjs.map +1 -0
- package/dist/src/schemas/narration.cjs +54 -0
- package/dist/src/schemas/narration.cjs.map +1 -0
- package/dist/src/schemas/narration.d.mts +29 -0
- package/dist/src/schemas/narration.d.mts.map +1 -0
- package/dist/src/schemas/narration.mjs +47 -0
- package/dist/src/schemas/narration.mjs.map +1 -0
- package/dist/src/schemas/notification.cjs +122 -0
- package/dist/src/schemas/notification.cjs.map +1 -0
- package/dist/src/schemas/notification.d.mts +48 -0
- package/dist/src/schemas/notification.d.mts.map +1 -0
- package/dist/src/schemas/notification.mjs +108 -0
- package/dist/src/schemas/notification.mjs.map +1 -0
- package/dist/src/schemas/packageApi.cjs +73 -0
- package/dist/src/schemas/packageApi.cjs.map +1 -0
- package/dist/src/schemas/packageApi.d.mts +249 -0
- package/dist/src/schemas/packageApi.d.mts.map +1 -0
- package/dist/src/schemas/packageApi.mjs +64 -0
- package/dist/src/schemas/packageApi.mjs.map +1 -0
- package/dist/src/schemas/piTool.cjs +26 -0
- package/dist/src/schemas/piTool.cjs.map +1 -0
- package/dist/src/schemas/piTool.d.mts +25 -0
- package/dist/src/schemas/piTool.d.mts.map +1 -0
- package/dist/src/schemas/piTool.mjs +26 -0
- package/dist/src/schemas/piTool.mjs.map +1 -0
- package/dist/src/schemas/pluginContributions.cjs +19 -0
- package/dist/src/schemas/pluginContributions.cjs.map +1 -0
- package/dist/src/schemas/pluginContributions.d.mts +56 -0
- package/dist/src/schemas/pluginContributions.d.mts.map +1 -0
- package/dist/src/schemas/pluginContributions.mjs +18 -0
- package/dist/src/schemas/pluginContributions.mjs.map +1 -0
- package/dist/src/schemas/pluginProtocol.cjs +103 -0
- package/dist/src/schemas/pluginProtocol.cjs.map +1 -0
- package/dist/src/schemas/pluginProtocol.d.mts +68 -0
- package/dist/src/schemas/pluginProtocol.d.mts.map +1 -0
- package/dist/src/schemas/pluginProtocol.mjs +96 -0
- package/dist/src/schemas/pluginProtocol.mjs.map +1 -0
- package/dist/src/schemas/profileIdentity.cjs +67 -0
- package/dist/src/schemas/profileIdentity.cjs.map +1 -0
- package/dist/src/schemas/profileIdentity.d.mts +50 -0
- package/dist/src/schemas/profileIdentity.d.mts.map +1 -0
- package/dist/src/schemas/profileIdentity.mjs +64 -0
- package/dist/src/schemas/profileIdentity.mjs.map +1 -0
- package/dist/src/schemas/readiness.cjs +251 -0
- package/dist/src/schemas/readiness.cjs.map +1 -0
- package/dist/src/schemas/readiness.d.mts +84 -0
- package/dist/src/schemas/readiness.d.mts.map +1 -0
- package/dist/src/schemas/readiness.mjs +246 -0
- package/dist/src/schemas/readiness.mjs.map +1 -0
- package/dist/src/schemas/relaunchHandoff.cjs +47 -0
- package/dist/src/schemas/relaunchHandoff.cjs.map +1 -0
- package/dist/src/schemas/relaunchHandoff.d.mts +25 -0
- package/dist/src/schemas/relaunchHandoff.d.mts.map +1 -0
- package/dist/src/schemas/relaunchHandoff.mjs +44 -0
- package/dist/src/schemas/relaunchHandoff.mjs.map +1 -0
- package/dist/src/schemas/sandboxHarness.cjs +29 -0
- package/dist/src/schemas/sandboxHarness.cjs.map +1 -0
- package/dist/src/schemas/sandboxHarness.d.mts +39 -0
- package/dist/src/schemas/sandboxHarness.d.mts.map +1 -0
- package/dist/src/schemas/sandboxHarness.mjs +26 -0
- package/dist/src/schemas/sandboxHarness.mjs.map +1 -0
- package/dist/src/schemas/serverBundle.cjs +79 -0
- package/dist/src/schemas/serverBundle.cjs.map +1 -0
- package/dist/src/schemas/serverBundle.d.mts +34 -0
- package/dist/src/schemas/serverBundle.d.mts.map +1 -0
- package/dist/src/schemas/serverBundle.mjs +77 -0
- package/dist/src/schemas/serverBundle.mjs.map +1 -0
- package/dist/src/schemas/serverFacet.cjs +102 -0
- package/dist/src/schemas/serverFacet.cjs.map +1 -0
- package/dist/src/schemas/serverFacet.d.mts +141 -0
- package/dist/src/schemas/serverFacet.d.mts.map +1 -0
- package/dist/src/schemas/serverFacet.mjs +93 -0
- package/dist/src/schemas/serverFacet.mjs.map +1 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts +45 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts.map +1 -0
- package/dist/src/schemas/sessionProtocol.cjs +17 -0
- package/dist/src/schemas/sessionProtocol.cjs.map +1 -0
- package/dist/src/schemas/sessionProtocol.d.mts +308 -0
- package/dist/src/schemas/sessionProtocol.d.mts.map +1 -0
- package/dist/src/schemas/sessionProtocol.mjs +12 -0
- package/dist/src/schemas/sessionProtocol.mjs.map +1 -0
- package/dist/src/schemas/sessionUpdates.d.mts +34 -0
- package/dist/src/schemas/sessionUpdates.d.mts.map +1 -0
- package/dist/src/schemas/skills.cjs +115 -0
- package/dist/src/schemas/skills.cjs.map +1 -0
- package/dist/src/schemas/skills.d.mts +65 -0
- package/dist/src/schemas/skills.d.mts.map +1 -0
- package/dist/src/schemas/skills.mjs +109 -0
- package/dist/src/schemas/skills.mjs.map +1 -0
- package/dist/src/schemas/toolOverrides.cjs +17 -0
- package/dist/src/schemas/toolOverrides.cjs.map +1 -0
- package/dist/src/schemas/toolOverrides.d.mts +29 -0
- package/dist/src/schemas/toolOverrides.d.mts.map +1 -0
- package/dist/src/schemas/toolOverrides.mjs +15 -0
- package/dist/src/schemas/toolOverrides.mjs.map +1 -0
- package/dist/src/schemas/toolSurface.cjs +17 -0
- package/dist/src/schemas/toolSurface.cjs.map +1 -0
- package/dist/src/schemas/toolSurface.d.mts +70 -0
- package/dist/src/schemas/toolSurface.d.mts.map +1 -0
- package/dist/src/schemas/toolSurface.mjs +15 -0
- package/dist/src/schemas/toolSurface.mjs.map +1 -0
- package/dist/src/schemas/uiHub.cjs +17 -0
- package/dist/src/schemas/uiHub.cjs.map +1 -0
- package/dist/src/schemas/uiHub.d.mts +23 -0
- package/dist/src/schemas/uiHub.d.mts.map +1 -0
- package/dist/src/schemas/uiHub.mjs +15 -0
- package/dist/src/schemas/uiHub.mjs.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.cjs +78 -0
- package/dist/src/schemas/voiceReloadHandoff.cjs.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.d.mts +31 -0
- package/dist/src/schemas/voiceReloadHandoff.d.mts.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.mjs +75 -0
- package/dist/src/schemas/voiceReloadHandoff.mjs.map +1 -0
- package/dist/src/schemas/voiceTools.cjs +205 -0
- package/dist/src/schemas/voiceTools.cjs.map +1 -0
- package/dist/src/schemas/voiceTools.d.mts +120 -0
- package/dist/src/schemas/voiceTools.d.mts.map +1 -0
- package/dist/src/schemas/voiceTools.mjs +194 -0
- package/dist/src/schemas/voiceTools.mjs.map +1 -0
- package/dist/src/server/devProxyForward.cjs +141 -0
- package/dist/src/server/devProxyForward.cjs.map +1 -0
- package/dist/src/server/devProxyForward.mjs +139 -0
- package/dist/src/server/devProxyForward.mjs.map +1 -0
- package/dist/src/server/devProxyRoutes.cjs +97 -0
- package/dist/src/server/devProxyRoutes.cjs.map +1 -0
- package/dist/src/server/devProxyRoutes.mjs +97 -0
- package/dist/src/server/devProxyRoutes.mjs.map +1 -0
- package/dist/src/server/devProxySocket.cjs +87 -0
- package/dist/src/server/devProxySocket.cjs.map +1 -0
- package/dist/src/server/devProxySocket.mjs +87 -0
- package/dist/src/server/devProxySocket.mjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.cjs +1964 -0
- package/dist/src/server/directHarnessRuntime.cjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.d.mts +3 -0
- package/dist/src/server/directHarnessRuntime.mjs +1958 -0
- package/dist/src/server/directHarnessRuntime.mjs.map +1 -0
- package/dist/src/server/harnessErrorMessage.cjs +13 -0
- package/dist/src/server/harnessErrorMessage.cjs.map +1 -0
- package/dist/src/server/harnessErrorMessage.mjs +13 -0
- package/dist/src/server/harnessErrorMessage.mjs.map +1 -0
- package/dist/src/server/headlessProtocol.cjs +366 -0
- package/dist/src/server/headlessProtocol.cjs.map +1 -0
- package/dist/src/server/headlessProtocol.mjs +366 -0
- package/dist/src/server/headlessProtocol.mjs.map +1 -0
- package/dist/src/server/jsonlTranscriptReader.cjs +85 -0
- package/dist/src/server/jsonlTranscriptReader.cjs.map +1 -0
- package/dist/src/server/jsonlTranscriptReader.mjs +83 -0
- package/dist/src/server/jsonlTranscriptReader.mjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.cjs +115 -0
- package/dist/src/server/mcpBundleLoader.cjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.d.mts +27 -0
- package/dist/src/server/mcpBundleLoader.d.mts.map +1 -0
- package/dist/src/server/mcpBundleLoader.mjs +111 -0
- package/dist/src/server/mcpBundleLoader.mjs.map +1 -0
- package/dist/src/server/nativeChildTranscriptReader.cjs +20 -0
- package/dist/src/server/nativeChildTranscriptReader.cjs.map +1 -0
- package/dist/src/server/nativeChildTranscriptReader.mjs +18 -0
- package/dist/src/server/nativeChildTranscriptReader.mjs.map +1 -0
- package/dist/src/server/remoteRoutes.cjs +386 -0
- package/dist/src/server/remoteRoutes.cjs.map +1 -0
- package/dist/src/server/remoteRoutes.mjs +386 -0
- package/dist/src/server/remoteRoutes.mjs.map +1 -0
- package/dist/src/server/serverFacetLoader.cjs +220 -0
- package/dist/src/server/serverFacetLoader.cjs.map +1 -0
- package/dist/src/server/serverFacetLoader.d.mts +77 -0
- package/dist/src/server/serverFacetLoader.d.mts.map +1 -0
- package/dist/src/server/serverFacetLoader.mjs +215 -0
- package/dist/src/server/serverFacetLoader.mjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.cjs +494 -0
- package/dist/src/server/sessionMcpHandler.cjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.d.mts +47 -0
- package/dist/src/server/sessionMcpHandler.d.mts.map +1 -0
- package/dist/src/server/sessionMcpHandler.mjs +493 -0
- package/dist/src/server/sessionMcpHandler.mjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.cjs +780 -0
- package/dist/src/server/sessionMcpRoutes.cjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.mjs +775 -0
- package/dist/src/server/sessionMcpRoutes.mjs.map +1 -0
- package/dist/src/server/threadJournals.cjs +172 -0
- package/dist/src/server/threadJournals.cjs.map +1 -0
- package/dist/src/server/threadJournals.mjs +169 -0
- package/dist/src/server/threadJournals.mjs.map +1 -0
- package/dist/src/services/acpSessionUpdates/index.cjs +129 -0
- package/dist/src/services/acpSessionUpdates/index.cjs.map +1 -0
- package/dist/src/services/acpSessionUpdates/index.mjs +129 -0
- package/dist/src/services/acpSessionUpdates/index.mjs.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.cjs +60 -0
- package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.d.mts +24 -0
- package/dist/src/services/apiSurfaceAssert/index.d.mts.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.mjs +60 -0
- package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -0
- package/dist/src/services/bundlePublication/index.cjs +88 -0
- package/dist/src/services/bundlePublication/index.cjs.map +1 -0
- package/dist/src/services/bundlePublication/index.mjs +85 -0
- package/dist/src/services/bundlePublication/index.mjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.cjs +14 -0
- package/dist/src/services/contextApiUrls/index.cjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.d.mts +6 -0
- package/dist/src/services/contextApiUrls/index.d.mts.map +1 -0
- package/dist/src/services/contextApiUrls/index.mjs +14 -0
- package/dist/src/services/contextApiUrls/index.mjs.map +1 -0
- package/dist/src/services/contextContributions/index.cjs +79 -0
- package/dist/src/services/contextContributions/index.cjs.map +1 -0
- package/dist/src/services/contextContributions/index.d.mts +6 -0
- package/dist/src/services/contextContributions/index.d.mts.map +1 -0
- package/dist/src/services/contextContributions/index.mjs +79 -0
- package/dist/src/services/contextContributions/index.mjs.map +1 -0
- package/dist/src/services/contextUsage/index.cjs +27 -0
- package/dist/src/services/contextUsage/index.cjs.map +1 -0
- package/dist/src/services/contextUsage/index.mjs +25 -0
- package/dist/src/services/contextUsage/index.mjs.map +1 -0
- package/dist/src/services/devProxyPolicy/index.cjs +168 -0
- package/dist/src/services/devProxyPolicy/index.cjs.map +1 -0
- package/dist/src/services/devProxyPolicy/index.mjs +165 -0
- package/dist/src/services/devProxyPolicy/index.mjs.map +1 -0
- package/dist/src/services/devProxyStore/index.cjs +107 -0
- package/dist/src/services/devProxyStore/index.cjs.map +1 -0
- package/dist/src/services/devProxyStore/index.mjs +104 -0
- package/dist/src/services/devProxyStore/index.mjs.map +1 -0
- package/dist/src/services/deviceAuth/index.cjs +125 -0
- package/dist/src/services/deviceAuth/index.cjs.map +1 -0
- package/dist/src/services/deviceAuth/index.d.mts +9 -0
- package/dist/src/services/deviceAuth/index.d.mts.map +1 -0
- package/dist/src/services/deviceAuth/index.mjs +125 -0
- package/dist/src/services/deviceAuth/index.mjs.map +1 -0
- package/dist/src/services/deviceSessions/index.cjs +147 -0
- package/dist/src/services/deviceSessions/index.cjs.map +1 -0
- package/dist/src/services/deviceSessions/index.d.mts +15 -0
- package/dist/src/services/deviceSessions/index.d.mts.map +1 -0
- package/dist/src/services/deviceSessions/index.mjs +141 -0
- package/dist/src/services/deviceSessions/index.mjs.map +1 -0
- package/dist/src/services/headlessClient/index.cjs +125 -0
- package/dist/src/services/headlessClient/index.cjs.map +1 -0
- package/dist/src/services/headlessClient/index.mjs +125 -0
- package/dist/src/services/headlessClient/index.mjs.map +1 -0
- package/dist/src/services/historyCreationFileSystem/index.cjs +115 -0
- package/dist/src/services/historyCreationFileSystem/index.cjs.map +1 -0
- package/dist/src/services/historyCreationFileSystem/index.mjs +115 -0
- package/dist/src/services/historyCreationFileSystem/index.mjs.map +1 -0
- package/dist/src/services/hubChannelHarness/index.cjs +50 -0
- package/dist/src/services/hubChannelHarness/index.cjs.map +1 -0
- package/dist/src/services/hubChannelHarness/index.d.mts +17 -0
- package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -0
- package/dist/src/services/hubChannelHarness/index.mjs +50 -0
- package/dist/src/services/hubChannelHarness/index.mjs.map +1 -0
- package/dist/src/services/kernel/index.cjs +147 -0
- package/dist/src/services/kernel/index.cjs.map +1 -0
- package/dist/src/services/kernel/index.d.mts +9 -0
- package/dist/src/services/kernel/index.d.mts.map +1 -0
- package/dist/src/services/kernel/index.mjs +147 -0
- package/dist/src/services/kernel/index.mjs.map +1 -0
- package/dist/src/services/loginFlow/index.cjs +131 -0
- package/dist/src/services/loginFlow/index.cjs.map +1 -0
- package/dist/src/services/loginFlow/index.mjs +131 -0
- package/dist/src/services/loginFlow/index.mjs.map +1 -0
- package/dist/src/services/loopbackAddress/index.cjs +58 -0
- package/dist/src/services/loopbackAddress/index.cjs.map +1 -0
- package/dist/src/services/loopbackAddress/index.mjs +56 -0
- package/dist/src/services/loopbackAddress/index.mjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.cjs +144 -0
- package/dist/src/services/openSessionRegistry/index.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.d.mts +40 -0
- package/dist/src/services/openSessionRegistry/index.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/index.mjs +141 -0
- package/dist/src/services/openSessionRegistry/index.mjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.cjs +36 -0
- package/dist/src/services/packageApiHarness/index.cjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.d.mts +40 -0
- package/dist/src/services/packageApiHarness/index.d.mts.map +1 -0
- package/dist/src/services/packageApiHarness/index.mjs +36 -0
- package/dist/src/services/packageApiHarness/index.mjs.map +1 -0
- package/dist/src/services/packageResource/index.cjs +54 -0
- package/dist/src/services/packageResource/index.cjs.map +1 -0
- package/dist/src/services/packageResource/index.d.mts +26 -0
- package/dist/src/services/packageResource/index.d.mts.map +1 -0
- package/dist/src/services/packageResource/index.mjs +51 -0
- package/dist/src/services/packageResource/index.mjs.map +1 -0
- package/dist/src/services/pairingFlow/index.cjs +145 -0
- package/dist/src/services/pairingFlow/index.cjs.map +1 -0
- package/dist/src/services/pairingFlow/index.d.mts +44 -0
- package/dist/src/services/pairingFlow/index.d.mts.map +1 -0
- package/dist/src/services/pairingFlow/index.mjs +145 -0
- package/dist/src/services/pairingFlow/index.mjs.map +1 -0
- package/dist/src/services/pairingPage/index.cjs +450 -0
- package/dist/src/services/pairingPage/index.cjs.map +1 -0
- package/dist/src/services/pairingPage/index.mjs +447 -0
- package/dist/src/services/pairingPage/index.mjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.cjs +821 -0
- package/dist/src/services/piExtensionHost/index.cjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.mjs +817 -0
- package/dist/src/services/piExtensionHost/index.mjs.map +1 -0
- package/dist/src/services/piHelpTools/index.cjs +68 -0
- package/dist/src/services/piHelpTools/index.cjs.map +1 -0
- package/dist/src/services/piHelpTools/index.d.mts +10 -0
- package/dist/src/services/piHelpTools/index.d.mts.map +1 -0
- package/dist/src/services/piHelpTools/index.mjs +68 -0
- package/dist/src/services/piHelpTools/index.mjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.cjs +112 -0
- package/dist/src/services/piSessionEntries/index.cjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.mjs +108 -0
- package/dist/src/services/piSessionEntries/index.mjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.cjs +71 -0
- package/dist/src/services/pluginLifecycle/index.cjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.d.mts +11 -0
- package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -0
- package/dist/src/services/pluginLifecycle/index.mjs +71 -0
- package/dist/src/services/pluginLifecycle/index.mjs.map +1 -0
- package/dist/src/services/providerAuth/index.cjs +156 -0
- package/dist/src/services/providerAuth/index.cjs.map +1 -0
- package/dist/src/services/providerAuth/index.mjs +154 -0
- package/dist/src/services/providerAuth/index.mjs.map +1 -0
- package/dist/src/services/remoteAccess/index.cjs +396 -0
- package/dist/src/services/remoteAccess/index.cjs.map +1 -0
- package/dist/src/services/remoteAccess/index.d.mts +81 -0
- package/dist/src/services/remoteAccess/index.d.mts.map +1 -0
- package/dist/src/services/remoteAccess/index.mjs +396 -0
- package/dist/src/services/remoteAccess/index.mjs.map +1 -0
- package/dist/src/services/remoteAccessSettings/index.cjs +151 -0
- package/dist/src/services/remoteAccessSettings/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessSettings/index.mjs +149 -0
- package/dist/src/services/remoteAccessSettings/index.mjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.cjs +126 -0
- package/dist/src/services/remoteAccessStore/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.mjs +121 -0
- package/dist/src/services/remoteAccessStore/index.mjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs +190 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.d.mts +7 -0
- package/dist/src/services/remoteGuardPolicy/index.d.mts.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs +186 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs.map +1 -0
- package/dist/src/services/requestReceipts/index.cjs +161 -0
- package/dist/src/services/requestReceipts/index.cjs.map +1 -0
- package/dist/src/services/requestReceipts/index.d.mts +11 -0
- package/dist/src/services/requestReceipts/index.d.mts.map +1 -0
- package/dist/src/services/requestReceipts/index.mjs +161 -0
- package/dist/src/services/requestReceipts/index.mjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.cjs +590 -0
- package/dist/src/services/rpcTranscript/index.cjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.d.mts +50 -0
- package/dist/src/services/rpcTranscript/index.d.mts.map +1 -0
- package/dist/src/services/rpcTranscript/index.mjs +589 -0
- package/dist/src/services/rpcTranscript/index.mjs.map +1 -0
- package/dist/src/services/serverFacet/index.cjs +197 -0
- package/dist/src/services/serverFacet/index.cjs.map +1 -0
- package/dist/src/services/serverFacet/index.d.mts +31 -0
- package/dist/src/services/serverFacet/index.d.mts.map +1 -0
- package/dist/src/services/serverFacet/index.mjs +197 -0
- package/dist/src/services/serverFacet/index.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.cjs +46 -0
- package/dist/src/services/sessionGitStatus/index.cjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.mjs +46 -0
- package/dist/src/services/sessionGitStatus/index.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/type.d.mts +8 -0
- package/dist/src/services/sessionGitStatus/type.d.mts.map +1 -0
- package/dist/src/services/sessionMcpActivity/index.cjs +115 -0
- package/dist/src/services/sessionMcpActivity/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpActivity/index.mjs +111 -0
- package/dist/src/services/sessionMcpActivity/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs +432 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts +123 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs +430 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpConversations/index.cjs +217 -0
- package/dist/src/services/sessionMcpConversations/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpConversations/index.mjs +212 -0
- package/dist/src/services/sessionMcpConversations/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.cjs +86 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.mjs +83 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.mjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.cjs +119 -0
- package/dist/src/services/sessionPresentation/index.cjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.mjs +119 -0
- package/dist/src/services/sessionPresentation/index.mjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs +105 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts +29 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs +100 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs +70 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.d.mts +14 -0
- package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.mjs +67 -0
- package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -0
- package/dist/src/services/toolCost/index.cjs +47 -0
- package/dist/src/services/toolCost/index.cjs.map +1 -0
- package/dist/src/services/toolCost/index.d.mts +38 -0
- package/dist/src/services/toolCost/index.d.mts.map +1 -0
- package/dist/src/services/toolCost/index.mjs +46 -0
- package/dist/src/services/toolCost/index.mjs.map +1 -0
- package/dist/src/services/toolOverrides/index.cjs +45 -0
- package/dist/src/services/toolOverrides/index.cjs.map +1 -0
- package/dist/src/services/toolOverrides/index.d.mts +6 -0
- package/dist/src/services/toolOverrides/index.d.mts.map +1 -0
- package/dist/src/services/toolOverrides/index.mjs +45 -0
- package/dist/src/services/toolOverrides/index.mjs.map +1 -0
- package/dist/src/services/toolPrompt/index.cjs +13 -0
- package/dist/src/services/toolPrompt/index.cjs.map +1 -0
- package/dist/src/services/toolPrompt/index.mjs +13 -0
- package/dist/src/services/toolPrompt/index.mjs.map +1 -0
- package/dist/src/services/toolSurface/index.cjs +134 -0
- package/dist/src/services/toolSurface/index.cjs.map +1 -0
- package/dist/src/services/toolSurface/index.d.mts +19 -0
- package/dist/src/services/toolSurface/index.d.mts.map +1 -0
- package/dist/src/services/toolSurface/index.mjs +134 -0
- package/dist/src/services/toolSurface/index.mjs.map +1 -0
- package/dist/src/services/traceContext/index.cjs +13 -0
- package/dist/src/services/traceContext/index.cjs.map +1 -0
- package/dist/src/services/traceContext/index.mjs +13 -0
- package/dist/src/services/traceContext/index.mjs.map +1 -0
- package/dist/src/services/transcriptPages/index.cjs +74 -0
- package/dist/src/services/transcriptPages/index.cjs.map +1 -0
- package/dist/src/services/transcriptPages/index.mjs +73 -0
- package/dist/src/services/transcriptPages/index.mjs.map +1 -0
- package/dist/src/services/tunnelOutput/index.cjs +58 -0
- package/dist/src/services/tunnelOutput/index.cjs.map +1 -0
- package/dist/src/services/tunnelOutput/index.mjs +54 -0
- package/dist/src/services/tunnelOutput/index.mjs.map +1 -0
- package/dist/src/services/tunnelProcess/index.cjs +487 -0
- package/dist/src/services/tunnelProcess/index.cjs.map +1 -0
- package/dist/src/services/tunnelProcess/index.mjs +481 -0
- package/dist/src/services/tunnelProcess/index.mjs.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.cjs +136 -0
- package/dist/src/services/voiceReloadHandoff/index.cjs.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.d.mts +34 -0
- package/dist/src/services/voiceReloadHandoff/index.d.mts.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.mjs +135 -0
- package/dist/src/services/voiceReloadHandoff/index.mjs.map +1 -0
- package/dist/src/services/voiceToolsContract/index.cjs +26 -0
- package/dist/src/services/voiceToolsContract/index.cjs.map +1 -0
- package/dist/src/services/voiceToolsContract/index.d.mts +76 -0
- package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -0
- package/dist/src/services/voiceToolsContract/index.mjs +24 -0
- package/dist/src/services/voiceToolsContract/index.mjs.map +1 -0
- package/dist/src/services/webauthn/index.cjs +262 -0
- package/dist/src/services/webauthn/index.cjs.map +1 -0
- package/dist/src/services/webauthn/index.d.mts +39 -0
- package/dist/src/services/webauthn/index.d.mts.map +1 -0
- package/dist/src/services/webauthn/index.mjs +262 -0
- package/dist/src/services/webauthn/index.mjs.map +1 -0
- package/dist/src/services/webauthnPolicy/index.cjs +163 -0
- package/dist/src/services/webauthnPolicy/index.cjs.map +1 -0
- package/dist/src/services/webauthnPolicy/index.d.mts +41 -0
- package/dist/src/services/webauthnPolicy/index.d.mts.map +1 -0
- package/dist/src/services/webauthnPolicy/index.mjs +156 -0
- package/dist/src/services/webauthnPolicy/index.mjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.cjs +151 -0
- package/dist/src/services/workspaceRegistry/index.cjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.d.mts +47 -0
- package/dist/src/services/workspaceRegistry/index.d.mts.map +1 -0
- package/dist/src/services/workspaceRegistry/index.mjs +144 -0
- package/dist/src/services/workspaceRegistry/index.mjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +261 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +32 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +254 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +28 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +1 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +25 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +1 -0
- package/dist/src/systems/child/services/childSession/index.cjs +219 -0
- package/dist/src/systems/child/services/childSession/index.cjs.map +1 -0
- package/dist/src/systems/child/services/childSession/index.d.mts +14 -0
- package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -0
- package/dist/src/systems/child/services/childSession/index.mjs +219 -0
- package/dist/src/systems/child/services/childSession/index.mjs.map +1 -0
- package/dist/src/systems/child/types/childSession.cjs +19 -0
- package/dist/src/systems/child/types/childSession.cjs.map +1 -0
- package/dist/src/systems/child/types/childSession.d.mts +148 -0
- package/dist/src/systems/child/types/childSession.d.mts.map +1 -0
- package/dist/src/systems/child/types/childSession.mjs +16 -0
- package/dist/src/systems/child/types/childSession.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs +554 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts +111 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs +552 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs +1293 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +14 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs +1288 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -0
- package/dist/src/systems/main/types/headlessHost.d.mts +36 -0
- package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.cjs +73 -0
- package/dist/src/testing/pi/extensionScenarios.cjs.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.d.mts +41 -0
- package/dist/src/testing/pi/extensionScenarios.d.mts.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.mjs +73 -0
- package/dist/src/testing/pi/extensionScenarios.mjs.map +1 -0
- package/dist/src/testing/pi/testHost.cjs +398 -0
- package/dist/src/testing/pi/testHost.cjs.map +1 -0
- package/dist/src/testing/pi/testHost.d.mts +160 -0
- package/dist/src/testing/pi/testHost.d.mts.map +1 -0
- package/dist/src/testing/pi/testHost.mjs +398 -0
- package/dist/src/testing/pi/testHost.mjs.map +1 -0
- package/dist/src/types/config.d.mts +20 -0
- package/dist/src/types/config.d.mts.map +1 -0
- package/dist/src/types/kernel.d.mts +69 -0
- package/dist/src/types/kernel.d.mts.map +1 -0
- package/dist/src/types/remote.d.mts +124 -0
- package/dist/src/types/remote.d.mts.map +1 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts +209 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -0
- package/dist/src/types/server/session.d.mts +5 -0
- package/dist/src/types/server/session.d.mts.map +1 -0
- package/dist/src/types/server/sessionToolSurface.d.mts +44 -0
- package/dist/src/types/server/sessionToolSurface.d.mts.map +1 -0
- package/dist/src/web/models/globalStore.cjs +23 -0
- package/dist/src/web/models/globalStore.cjs.map +1 -0
- package/dist/src/web/models/globalStore.d.mts +6 -0
- package/dist/src/web/models/globalStore.d.mts.map +1 -0
- package/dist/src/web/models/globalStore.mjs +23 -0
- package/dist/src/web/models/globalStore.mjs.map +1 -0
- package/dist/src/web/models/sessionStore.cjs +56 -0
- package/dist/src/web/models/sessionStore.cjs.map +1 -0
- package/dist/src/web/models/sessionStore.d.mts +14 -0
- package/dist/src/web/models/sessionStore.d.mts.map +1 -0
- package/dist/src/web/models/sessionStore.mjs +56 -0
- package/dist/src/web/models/sessionStore.mjs.map +1 -0
- package/dist/src/web/models/workspaceStore.cjs +50 -0
- package/dist/src/web/models/workspaceStore.cjs.map +1 -0
- package/dist/src/web/models/workspaceStore.d.mts +18 -0
- package/dist/src/web/models/workspaceStore.d.mts.map +1 -0
- package/dist/src/web/models/workspaceStore.mjs +50 -0
- package/dist/src/web/models/workspaceStore.mjs.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.cjs +20 -0
- package/dist/src/web/schemas/bundleAssetPolicy.cjs.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.d.mts +10 -0
- package/dist/src/web/schemas/bundleAssetPolicy.d.mts.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.mjs +18 -0
- package/dist/src/web/schemas/bundleAssetPolicy.mjs.map +1 -0
- package/dist/src/web/schemas/template.cjs +15 -0
- package/dist/src/web/schemas/template.cjs.map +1 -0
- package/dist/src/web/schemas/template.d.mts +6 -0
- package/dist/src/web/schemas/template.d.mts.map +1 -0
- package/dist/src/web/schemas/template.mjs +15 -0
- package/dist/src/web/schemas/template.mjs.map +1 -0
- package/dist/src/web/services/apiClient/index.cjs +156 -0
- package/dist/src/web/services/apiClient/index.cjs.map +1 -0
- package/dist/src/web/services/apiClient/index.d.mts +152 -0
- package/dist/src/web/services/apiClient/index.d.mts.map +1 -0
- package/dist/src/web/services/apiClient/index.mjs +154 -0
- package/dist/src/web/services/apiClient/index.mjs.map +1 -0
- package/dist/src/web/services/apiPaths/index.cjs +83 -0
- package/dist/src/web/services/apiPaths/index.cjs.map +1 -0
- package/dist/src/web/services/apiPaths/index.d.mts +81 -0
- package/dist/src/web/services/apiPaths/index.d.mts.map +1 -0
- package/dist/src/web/services/apiPaths/index.mjs +78 -0
- package/dist/src/web/services/apiPaths/index.mjs.map +1 -0
- package/dist/src/web/services/apiRoutes/index.cjs +47 -0
- package/dist/src/web/services/apiRoutes/index.cjs.map +1 -0
- package/dist/src/web/services/apiRoutes/index.d.mts +21 -0
- package/dist/src/web/services/apiRoutes/index.d.mts.map +1 -0
- package/dist/src/web/services/apiRoutes/index.mjs +43 -0
- package/dist/src/web/services/apiRoutes/index.mjs.map +1 -0
- package/dist/src/web/services/mcpWidget.cjs +9 -0
- package/dist/src/web/services/mcpWidget.cjs.map +1 -0
- package/dist/src/web/services/mcpWidget.d.mts +6 -0
- package/dist/src/web/services/mcpWidget.d.mts.map +1 -0
- package/dist/src/web/services/mcpWidget.mjs +9 -0
- package/dist/src/web/services/mcpWidget.mjs.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.cjs +70 -0
- package/dist/src/web/services/sessionRegistry/index.cjs.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.d.mts +29 -0
- package/dist/src/web/services/sessionRegistry/index.d.mts.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.mjs +66 -0
- package/dist/src/web/services/sessionRegistry/index.mjs.map +1 -0
- package/dist/src/web/services/testing/channels.cjs +11 -0
- package/dist/src/web/services/testing/channels.cjs.map +1 -0
- package/dist/src/web/services/testing/channels.d.mts +8 -0
- package/dist/src/web/services/testing/channels.d.mts.map +1 -0
- package/dist/src/web/services/testing/channels.mjs +11 -0
- package/dist/src/web/services/testing/channels.mjs.map +1 -0
- package/dist/src/web/services/testing/index.cjs +27 -0
- package/dist/src/web/services/testing/index.cjs.map +1 -0
- package/dist/src/web/services/testing/index.d.mts +31 -0
- package/dist/src/web/services/testing/index.d.mts.map +1 -0
- package/dist/src/web/services/testing/index.mjs +27 -0
- package/dist/src/web/services/testing/index.mjs.map +1 -0
- package/dist/src/web/services/testing/rpcStub.cjs +58 -0
- package/dist/src/web/services/testing/rpcStub.cjs.map +1 -0
- package/dist/src/web/services/testing/rpcStub.d.mts +37 -0
- package/dist/src/web/services/testing/rpcStub.d.mts.map +1 -0
- package/dist/src/web/services/testing/rpcStub.mjs +58 -0
- package/dist/src/web/services/testing/rpcStub.mjs.map +1 -0
- package/dist/src/web/services/testing/slotProps.cjs +91 -0
- package/dist/src/web/services/testing/slotProps.cjs.map +1 -0
- package/dist/src/web/services/testing/slotProps.d.mts +69 -0
- package/dist/src/web/services/testing/slotProps.d.mts.map +1 -0
- package/dist/src/web/services/testing/slotProps.mjs +90 -0
- package/dist/src/web/services/testing/slotProps.mjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.cjs +128 -0
- package/dist/src/web/services/testing/templateRail.cjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.d.mts +31 -0
- package/dist/src/web/services/testing/templateRail.d.mts.map +1 -0
- package/dist/src/web/services/testing/templateRail.mjs +126 -0
- package/dist/src/web/services/testing/templateRail.mjs.map +1 -0
- package/dist/src/web/services/toolResult/index.cjs +30 -0
- package/dist/src/web/services/toolResult/index.cjs.map +1 -0
- package/dist/src/web/services/toolResult/index.d.mts +14 -0
- package/dist/src/web/services/toolResult/index.d.mts.map +1 -0
- package/dist/src/web/services/toolResult/index.mjs +29 -0
- package/dist/src/web/services/toolResult/index.mjs.map +1 -0
- package/dist/src/web/types/extensionFile.d.mts +59 -0
- package/dist/src/web/types/extensionFile.d.mts.map +1 -0
- package/dist/src/web/types/mcpWidget.d.mts +14 -0
- package/dist/src/web/types/mcpWidget.d.mts.map +1 -0
- package/dist/src/web/types/modelContext.d.mts +43 -0
- package/dist/src/web/types/modelContext.d.mts.map +1 -0
- package/dist/src/web/types/sessionRegistry.d.mts +43 -0
- package/dist/src/web/types/sessionRegistry.d.mts.map +1 -0
- package/dist/src/web/types/template.d.mts +155 -0
- package/dist/src/web/types/template.d.mts.map +1 -0
- package/dist/src/web/types/webPlugin.d.mts +896 -0
- package/dist/src/web/types/webPlugin.d.mts.map +1 -0
- package/dist/syncLocation.cjs +244 -0
- package/dist/syncLocation.cjs.map +1 -0
- package/dist/syncLocation.d.mts +37 -0
- package/dist/syncLocation.d.mts.map +1 -0
- package/dist/syncLocation.mjs +231 -0
- package/dist/syncLocation.mjs.map +1 -0
- package/dist/syncRegistration.cjs +171 -0
- package/dist/syncRegistration.cjs.map +1 -0
- package/dist/syncRegistration.d.mts +48 -0
- package/dist/syncRegistration.d.mts.map +1 -0
- package/dist/syncRegistration.mjs +159 -0
- package/dist/syncRegistration.mjs.map +1 -0
- package/dist/syncStateContract.cjs +19 -0
- package/dist/syncStateContract.cjs.map +1 -0
- package/dist/syncStateContract.d.mts +14 -0
- package/dist/syncStateContract.d.mts.map +1 -0
- package/dist/syncStateContract.mjs +16 -0
- package/dist/syncStateContract.mjs.map +1 -0
- package/dist/terminalPiChildSessionService.cjs +267 -0
- package/dist/terminalPiChildSessionService.cjs.map +1 -0
- package/dist/terminalPiChildSessionService.d.mts +42 -0
- package/dist/terminalPiChildSessionService.d.mts.map +1 -0
- package/dist/terminalPiChildSessionService.mjs +260 -0
- package/dist/terminalPiChildSessionService.mjs.map +1 -0
- package/dist/testing.cjs +11 -0
- package/dist/testing.d.mts +6 -0
- package/dist/testing.mjs +6 -0
- package/dist/toolInventory.cjs +136 -0
- package/dist/toolInventory.cjs.map +1 -0
- package/dist/toolInventory.d.mts +66 -0
- package/dist/toolInventory.d.mts.map +1 -0
- package/dist/toolInventory.mjs +133 -0
- package/dist/toolInventory.mjs.map +1 -0
- package/dist/toolNames.cjs +4 -0
- package/dist/toolNames.d.mts +2 -0
- package/dist/toolNames.mjs +2 -0
- package/dist/toolOverrides.cjs +7 -0
- package/dist/toolOverrides.d.mts +3 -0
- package/dist/toolOverrides.mjs +3 -0
- package/dist/toolSurface.cjs +7 -0
- package/dist/toolSurface.d.mts +3 -0
- package/dist/toolSurface.mjs +3 -0
- package/dist/transition.cjs +5 -0
- package/dist/transition.d.cjs +5 -0
- package/dist/transition.d.mts +2 -0
- package/dist/transition.mjs +2 -0
- package/dist/transitionClassifier.cjs +112 -0
- package/dist/transitionClassifier.cjs.map +1 -0
- package/dist/transitionClassifier.d.mts +18 -0
- package/dist/transitionClassifier.d.mts.map +1 -0
- package/dist/transitionClassifier.mjs +111 -0
- package/dist/transitionClassifier.mjs.map +1 -0
- package/dist/transitionCoordinator.cjs +131 -0
- package/dist/transitionCoordinator.cjs.map +1 -0
- package/dist/transitionCoordinator.d.mts +16 -0
- package/dist/transitionCoordinator.d.mts.map +1 -0
- package/dist/transitionCoordinator.mjs +130 -0
- package/dist/transitionCoordinator.mjs.map +1 -0
- package/dist/typesContextApi.cjs +0 -0
- package/dist/typesContextApi.d.mts +73 -0
- package/dist/typesContextApi.d.mts.map +1 -0
- package/dist/typesContextApi.mjs +1 -0
- package/dist/uiHub.cjs +5 -0
- package/dist/uiHub.d.mts +2 -0
- package/dist/uiHub.mjs +2 -0
- package/dist/v3Export.cjs +1004 -0
- package/dist/v3Export.cjs.map +1 -0
- package/dist/v3Export.d.mts +34 -0
- package/dist/v3Export.d.mts.map +1 -0
- package/dist/v3Export.mjs +1000 -0
- package/dist/v3Export.mjs.map +1 -0
- package/dist/voiceReloadHandoff.cjs +14 -0
- package/dist/voiceReloadHandoff.d.mts +4 -0
- package/dist/voiceReloadHandoff.mjs +4 -0
- package/dist/voiceTools.cjs +56 -0
- package/dist/voiceTools.d.mts +4 -0
- package/dist/voiceTools.mjs +4 -0
- package/dist/web.cjs +64 -0
- package/dist/web.d.mts +19 -0
- package/dist/web.mjs +13 -0
- package/dist/webCompositions.cjs +100 -0
- package/dist/webCompositions.cjs.map +1 -0
- package/dist/webCompositions.d.mts +20 -0
- package/dist/webCompositions.d.mts.map +1 -0
- package/dist/webCompositions.mjs +95 -0
- package/dist/webCompositions.mjs.map +1 -0
- package/dist/webTesting.cjs +14 -0
- package/dist/webTesting.d.mts +6 -0
- package/dist/webTesting.mjs +6 -0
- package/package.json +616 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historyImport.mjs","names":[],"sources":["../src/services/historyImport/index.ts"],"sourcesContent":["import { createHash, randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { writeFileAtomic } from '../json';\nimport { importV3WithPinnedUpstream } from '../jsonlSessionRepo';\n\nexport interface HistoryOwnershipLease {\n assertQuiescent(): void | Promise<void>;\n release(): void | Promise<void>;\n}\n\n/**\n * The caller must establish ownership and stop all managed writers before this\n * adapter reads or publishes a session. A filesystem lock cannot prove that an\n * unmanaged Pi process has stopped, so the boundary stays explicit.\n */\nexport interface HistoryOwnership {\n acquire(sourcePath: string): HistoryOwnershipLease | Promise<HistoryOwnershipLease>;\n}\n\nexport interface HistoryEntryProof {\n sourceId: string;\n importedId: string;\n sourceParentId: string | null;\n importedParentId: string | null;\n sourceContentHash: string;\n importedContentHash: string;\n}\n\nexport interface HistoryBranchProof {\n sourceTipId: string | null;\n importedTipId: string | null;\n branch?: string;\n}\n\nexport interface HistoryImportVerification {\n entries: readonly HistoryEntryProof[];\n branches: readonly HistoryBranchProof[];\n /** Source records projected into upstream values rather than physical entries. */\n projectedSourceIds?: readonly string[];\n}\n\nexport interface HistorySourceIdentity {\n path: string;\n realPath: string;\n device: number;\n inode: number;\n size: number;\n mtimeMs: number;\n sha256: string;\n}\n\nexport interface HistoryStagingImportInput {\n sourcePath: string;\n stagingPath: string;\n originalPath: string;\n sourceIdentity: HistorySourceIdentity;\n}\n\nexport interface HistoryImportOptions {\n sourcePath: string;\n destinationPath: string;\n owner: HistoryOwnership;\n importStaging?: (input: HistoryStagingImportInput) => HistoryImportVerification | Promise<HistoryImportVerification>;\n verifyStaging?: (stagingPath: string, proof: HistoryImportVerification) => Promise<HistoryImportVerification>;\n originalPath?: string;\n statePath?: string;\n}\n\nexport interface ProtectedHistoryImportResult {\n status: 'published' | 'already-published';\n sourceIdentity: HistorySourceIdentity;\n originalPath: string;\n destinationPath: string;\n statePath: string;\n verification: HistoryImportVerification;\n stagedSha256: string;\n}\n\nexport interface RestoreProtectedHistoryOptions {\n sourcePath: string;\n originalPath: string;\n owner: HistoryOwnership;\n}\n\ninterface ImportState {\n version: 1;\n operation: 'protected-history-import';\n phase: 'prepared' | 'staged' | 'verified' | 'published';\n sourcePath: string;\n destinationPath: string;\n originalPath: string;\n stagingPath: string;\n sourceIdentity: HistorySourceIdentity;\n verification?: HistoryImportVerification;\n stagedSha256?: string;\n}\n\nconst IMPORT_STATE_VERSION = 1;\nconst IMPORT_OPERATION = 'protected-history-import';\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction requireString(value: unknown, field: string): string {\n if (typeof value !== 'string' || value.length === 0) throw new Error(`Invalid history import ${field}`);\n return value;\n}\n\nfunction requireNullableString(value: unknown, field: string): string | null {\n if (value !== null && typeof value !== 'string') throw new Error(`Invalid history import ${field}`);\n return value;\n}\n\nfunction requireHash(value: unknown, field: string): string {\n const hash = requireString(value, field);\n if (!/^[a-f0-9]{64}$/.test(hash)) throw new Error(`Invalid history import ${field}`);\n return hash;\n}\n\nfunction sha256(content: Uint8Array): string {\n return createHash('sha256').update(content).digest('hex');\n}\n\nfunction readSource(sourcePath: string): { content: Buffer; identity: HistorySourceIdentity } {\n const before = fs.statSync(sourcePath);\n const content = fs.readFileSync(sourcePath);\n const after = fs.statSync(sourcePath);\n if (\n before.dev !== after.dev ||\n before.ino !== after.ino ||\n before.size !== after.size ||\n before.mtimeMs !== after.mtimeMs ||\n after.size !== content.byteLength\n ) {\n throw new Error('Protected history source changed while it was being read');\n }\n return {\n content,\n identity: {\n path: path.resolve(sourcePath),\n realPath: fs.realpathSync(sourcePath),\n device: after.dev,\n inode: after.ino,\n size: after.size,\n mtimeMs: after.mtimeMs,\n sha256: sha256(content),\n },\n };\n}\n\nfunction sameIdentity(left: HistorySourceIdentity, right: HistorySourceIdentity): boolean {\n return (\n left.path === right.path &&\n left.realPath === right.realPath &&\n left.device === right.device &&\n left.inode === right.inode &&\n left.size === right.size &&\n left.mtimeMs === right.mtimeMs &&\n left.sha256 === right.sha256\n );\n}\n\nfunction ensureOwnerOnly(filePath: string): void {\n fs.chmodSync(filePath, 0o600);\n}\n\nfunction writeExclusive(filePath: string, content: Uint8Array): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n let fd: number | undefined;\n try {\n fd = fs.openSync(filePath, 'wx', 0o600);\n fs.writeFileSync(fd, content);\n fs.fsyncSync(fd);\n } catch (error) {\n if (fd !== undefined) {\n fs.closeSync(fd);\n fs.rmSync(filePath, { force: true });\n }\n throw error;\n }\n fs.closeSync(fd);\n ensureOwnerOnly(filePath);\n const directoryFd = fs.openSync(path.dirname(filePath), 'r');\n try {\n fs.fsyncSync(directoryFd);\n } finally {\n fs.closeSync(directoryFd);\n }\n}\n\nfunction ensureOriginal(originalPath: string, content: Uint8Array): void {\n if (fs.existsSync(originalPath)) {\n const stat = fs.lstatSync(originalPath);\n if (!stat.isFile() || stat.nlink !== 1)\n throw new Error(`Protected history original must be an independent file: ${originalPath}`);\n const existing = fs.readFileSync(originalPath);\n if (sha256(existing) !== sha256(content)) throw new Error(`Protected history original differs: ${originalPath}`);\n ensureOwnerOnly(originalPath);\n return;\n }\n try {\n writeExclusive(originalPath, content);\n } catch (error) {\n if (!isFileSystemError(error) || error.code !== 'EEXIST') throw error;\n const stat = fs.lstatSync(originalPath);\n if (!stat.isFile() || stat.nlink !== 1)\n throw new Error(`Protected history original must be an independent file: ${originalPath}`);\n const existing = fs.readFileSync(originalPath);\n if (sha256(existing) !== sha256(content)) throw new Error(`Protected history original differs: ${originalPath}`);\n ensureOwnerOnly(originalPath);\n }\n}\n\n/** Preserve exact bytes before upstream open is allowed to repair a native journal. */\nexport async function preserveHistoryBeforeOpen(sourcePath: string, lease: HistoryOwnershipLease): Promise<string> {\n await lease.assertQuiescent();\n const source = readSource(sourcePath);\n const originalPath = `${source.identity.realPath}.recovery-${source.identity.sha256}.original`;\n ensureOriginal(originalPath, source.content);\n const recordPath = `${originalPath}.json`;\n if (!fs.existsSync(recordPath)) {\n writeExclusive(\n recordPath,\n Buffer.from(`${JSON.stringify({ version: 1, source: source.identity, originalPath })}\\n`),\n );\n } else {\n const record = asRecord(JSON.parse(fs.readFileSync(recordPath, 'utf8')));\n const identity = asRecord(record?.source);\n if (\n record?.originalPath !== originalPath ||\n identity?.sha256 !== source.identity.sha256 ||\n identity.realPath !== source.identity.realPath\n ) {\n throw new Error('Existing recovery provenance does not match the protected journal');\n }\n }\n await lease.assertQuiescent();\n if (!sameIdentity(source.identity, readSource(sourcePath).identity))\n throw new Error('Journal changed during recovery preservation');\n return originalPath;\n}\n\nfunction writeBinaryAtomically(filePath: string, content: Uint8Array): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const temporaryPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;\n try {\n writeExclusive(temporaryPath, content);\n fs.renameSync(temporaryPath, filePath);\n } catch (error) {\n fs.rmSync(temporaryPath, { force: true });\n throw error;\n }\n}\n\nfunction publishDistinct(stagingPath: string, destinationPath: string): void {\n if (fs.existsSync(destinationPath)) throw new Error(`Refusing to overwrite derived history: ${destinationPath}`);\n fs.mkdirSync(path.dirname(destinationPath), { recursive: true });\n fs.linkSync(stagingPath, destinationPath);\n fs.unlinkSync(stagingPath);\n}\n\nfunction writeState(statePath: string, state: ImportState): void {\n writeFileAtomic(statePath, `${JSON.stringify(state, null, 2)}\\n`);\n ensureOwnerOnly(statePath);\n}\n\nfunction readState(statePath: string): ImportState | undefined {\n if (!fs.existsSync(statePath)) return undefined;\n ensureOwnerOnly(statePath);\n const value = asRecord(JSON.parse(fs.readFileSync(statePath, 'utf8')));\n if (value?.version !== IMPORT_STATE_VERSION || value.operation !== IMPORT_OPERATION) {\n throw new Error(`Invalid protected history state: ${statePath}`);\n }\n const phase = value.phase;\n if (phase !== 'prepared' && phase !== 'staged' && phase !== 'verified' && phase !== 'published') {\n throw new Error(`Invalid protected history state phase: ${String(phase)}`);\n }\n const sourceIdentity = asRecord(value.sourceIdentity);\n const verification = value.verification === undefined ? undefined : parseVerification(value.verification);\n return {\n version: 1,\n operation: IMPORT_OPERATION,\n phase,\n sourcePath: requireString(value.sourcePath, 'state source path'),\n destinationPath: requireString(value.destinationPath, 'state destination path'),\n originalPath: requireString(value.originalPath, 'state original path'),\n stagingPath: requireString(value.stagingPath, 'state staging path'),\n sourceIdentity: parseSourceIdentity(sourceIdentity),\n verification,\n stagedSha256: value.stagedSha256 === undefined ? undefined : requireHash(value.stagedSha256, 'staged checksum'),\n };\n}\n\nfunction parseSourceIdentity(value: Record<string, unknown> | undefined): HistorySourceIdentity {\n if (value === undefined) throw new Error('Invalid protected history source identity');\n const numeric = (field: string): number => {\n const number = value[field];\n if (typeof number !== 'number' || !Number.isSafeInteger(number) || number < 0)\n throw new Error(`Invalid history import ${field}`);\n return number;\n };\n const mtimeMs = value.mtimeMs;\n if (typeof mtimeMs !== 'number' || !Number.isFinite(mtimeMs) || mtimeMs < 0) {\n throw new Error('Invalid history import mtimeMs');\n }\n return {\n path: requireString(value.path, 'source path'),\n realPath: requireString(value.realPath, 'source real path'),\n device: numeric('device'),\n inode: numeric('inode'),\n size: numeric('size'),\n mtimeMs,\n sha256: requireHash(value.sha256, 'source checksum'),\n };\n}\n\nfunction parseVerification(value: unknown): HistoryImportVerification {\n const record = asRecord(value);\n if (record === undefined || !Array.isArray(record.entries) || !Array.isArray(record.branches)) {\n throw new Error('Invalid protected history verification');\n }\n const entries = record.entries.map((entry, index) => {\n const item = asRecord(entry);\n if (item === undefined) throw new Error(`Invalid history entry proof at index ${index}`);\n return {\n sourceId: requireString(item.sourceId, 'entry source id'),\n importedId: requireString(item.importedId, 'entry imported id'),\n sourceParentId: requireNullableString(item.sourceParentId, 'entry source parent id'),\n importedParentId: requireNullableString(item.importedParentId, 'entry imported parent id'),\n sourceContentHash: requireHash(item.sourceContentHash, 'entry source content hash'),\n importedContentHash: requireHash(item.importedContentHash, 'entry imported content hash'),\n };\n });\n const branches = record.branches.map((branch, index) => {\n const item = asRecord(branch);\n if (item === undefined) throw new Error(`Invalid history branch proof at index ${index}`);\n const name = item.branch === undefined ? undefined : requireString(item.branch, `branch name at index ${index}`);\n return {\n sourceTipId: requireNullableString(item.sourceTipId, `branch source tip id at index ${index}`),\n importedTipId: requireNullableString(item.importedTipId, `branch imported tip id at index ${index}`),\n ...(name === undefined ? {} : { branch: name }),\n };\n });\n const projectedSourceIds = record.projectedSourceIds;\n if (\n projectedSourceIds !== undefined &&\n (!Array.isArray(projectedSourceIds) || projectedSourceIds.some((id) => typeof id !== 'string' || id.length === 0))\n ) {\n throw new Error('Invalid projected protected history source ids');\n }\n const projected = projectedSourceIds as string[] | undefined;\n if (projected !== undefined && new Set(projected).size !== projected.length) {\n throw new Error('Duplicate projected protected history source id');\n }\n return { entries, branches, ...(projected === undefined ? {} : { projectedSourceIds: projected }) };\n}\n\ninterface ParsedHistory {\n header: Record<string, unknown>;\n labels: Map<string, unknown>;\n sessionName: unknown;\n records: Record<string, unknown>[];\n byId: Map<string, Record<string, unknown>>;\n branchTips: Map<string, string | null>;\n}\n\nfunction parseHistory(content: Uint8Array, expected: 'v3' | 'v4' | 'auto'): ParsedHistory {\n const text = Buffer.from(content).toString('utf8');\n if (Buffer.from(text).compare(Buffer.from(content)) !== 0 || !text.endsWith('\\n')) {\n throw new Error('Protected history JSONL is truncated or not valid UTF-8');\n }\n const lines = text.slice(0, -1).split('\\n');\n const first = lines[0];\n if (first === undefined || first.length === 0) throw new Error('Protected history is empty');\n const header = asRecord(JSON.parse(first));\n const actual =\n header?.type === 'session' && header.version === 3\n ? 'v3'\n : header?.kind === 'header' && header.v === 4\n ? 'v4'\n : undefined;\n if (actual === undefined || (expected !== 'auto' && actual !== expected)) {\n throw new Error(expected === 'v3' ? 'Protected history source is not v3' : 'Protected history staging is not v4');\n }\n const records: Record<string, unknown>[] = [];\n const byId = new Map<string, Record<string, unknown>>();\n const branchTips = new Map<string, string | null>();\n const labels = new Map<string, unknown>();\n let sessionName: unknown;\n for (const [index, line] of lines.slice(1).entries()) {\n if (line.length === 0) throw new Error(`Invalid protected history JSONL at line ${index + 2}`);\n let value: unknown;\n try {\n value = JSON.parse(line);\n } catch (error) {\n throw new Error(`Invalid protected history JSONL at line ${index + 2}`, { cause: error });\n }\n const values = actual === 'v4' && Array.isArray(value) ? value : [value];\n for (const item of values) {\n const record = asRecord(item);\n if (record === undefined) throw new Error(`Invalid protected history record at line ${index + 2}`);\n if (actual === 'v4') {\n if (record.kind === 'value' && typeof record.key === 'string') {\n if (record.namespace === 'pi.entry.label') {\n if (record.op === 'delete') labels.delete(record.key);\n else labels.set(record.key, record.value);\n } else if (record.namespace === 'pi.session.name' && record.key === '') {\n sessionName = record.op === 'delete' ? undefined : record.value;\n }\n }\n if (record.kind === 'entry') {\n const entry =\n asRecord(record.entry) ??\n (() => {\n const { kind: _kind, seq: _seq, ...flat } = record;\n return flat;\n })();\n records.push(entry);\n const id = requireString(entry.id, 'imported entry id');\n if (byId.has(id)) throw new Error(`Duplicate protected history entry id: ${id}`);\n byId.set(id, entry);\n } else if (record.kind === 'value' && record.namespace === 'pi.branch.tip' && typeof record.key === 'string') {\n const tip = record.op === 'delete' ? null : requireNullableString(record.value, 'imported branch tip');\n branchTips.set(record.key, tip);\n }\n } else {\n if (record.id === undefined) throw new Error(`Protected history record at line ${index + 2} has no id`);\n const id = requireString(record.id, 'source entry id');\n if (byId.has(id)) throw new Error(`Duplicate protected history entry id: ${id}`);\n records.push(record);\n byId.set(id, record);\n }\n }\n }\n return { header: header!, records, byId, branchTips, labels, sessionName };\n}\n\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`;\n const record = asRecord(value);\n if (record === undefined) return JSON.stringify(value);\n return `{${Object.keys(record)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableJson(record[key])}`)\n .join(',')}}`;\n}\n\nfunction contentHash(record: Record<string, unknown>): string {\n const { id: _id, parentId: _parentId, timestamp: _timestamp, kind: _kind, seq: _seq, ...content } = record;\n if (content.type === 'custom_message') {\n content.type = 'message';\n content.message = {\n role: 'custom',\n customType: content.customType,\n content: content.content,\n details: content.details,\n display: content.display,\n };\n delete content.customType;\n delete content.content;\n delete content.details;\n delete content.display;\n }\n if (content.type === 'branch_summary' && content.fromId === 'root') content.fromId = null;\n if (content.type === 'compaction') {\n delete content.firstKeptEntryId;\n delete content.retainedTail;\n }\n return sha256(Buffer.from(stableJson(content)));\n}\n\nfunction sourceParentId(record: Record<string, unknown>, field: string): string | null {\n return requireNullableString(record.parentId, field);\n}\n\nfunction resolveMappedParent(\n sourceId: string | null,\n source: ParsedHistory,\n mappings: Map<string, HistoryEntryProof>,\n): string | null {\n const visited = new Set<string>();\n let current = sourceId;\n while (current !== null) {\n if (visited.has(current)) throw new Error(`Cycle in protected history parent chain: ${current}`);\n visited.add(current);\n const mapped = mappings.get(current);\n if (mapped !== undefined) return mapped.importedId;\n const parent = source.byId.get(current);\n if (parent === undefined) throw new Error(`Protected history parent references unknown entry: ${current}`);\n current = sourceParentId(parent, 'source parent id');\n }\n return null;\n}\n\nfunction historyTimestamp(value: unknown): number {\n const timestamp = typeof value === 'number' ? value : typeof value === 'string' ? Date.parse(value) : NaN;\n if (!Number.isFinite(timestamp)) throw new Error('Invalid protected history timestamp');\n return timestamp;\n}\n\nfunction verifyImport(\n sourceContent: Uint8Array,\n importedContent: Uint8Array,\n verification: HistoryImportVerification,\n): HistoryImportVerification {\n const source = parseHistory(sourceContent, 'v3');\n const imported = parseHistory(importedContent, 'v4');\n if (\n imported.header.id !== requireString(source.header.id, 'session identity') ||\n imported.header.cwd !== requireString(source.header.cwd, 'session cwd identity') ||\n historyTimestamp(imported.header.createdAt) !== historyTimestamp(source.header.timestamp)\n ) {\n throw new Error('Imported history session identity mismatch');\n }\n const importedIds = new Set(imported.byId.keys());\n const mappedSourceIds = new Set<string>();\n const mappings = new Map<string, HistoryEntryProof>();\n for (const entry of verification.entries) {\n if (!source.byId.has(entry.sourceId))\n throw new Error(`Imported proof references unknown source entry: ${entry.sourceId}`);\n if (mappedSourceIds.has(entry.sourceId))\n throw new Error(`Duplicate imported source entry proof: ${entry.sourceId}`);\n if (mappings.has(entry.sourceId) || !importedIds.has(entry.importedId))\n throw new Error(`Imported proof references unknown imported entry: ${entry.importedId}`);\n if (entry.sourceContentHash !== entry.importedContentHash)\n throw new Error(`Imported history content mismatch: ${entry.sourceId}`);\n if (entry.sourceContentHash !== contentHash(source.byId.get(entry.sourceId)!))\n throw new Error(`Imported source content proof mismatch: ${entry.sourceId}`);\n if (entry.importedContentHash !== contentHash(imported.byId.get(entry.importedId)!))\n throw new Error(`Imported content proof mismatch: ${entry.importedId}`);\n mappedSourceIds.add(entry.sourceId);\n mappings.set(entry.sourceId, entry);\n }\n const projected = new Set(verification.projectedSourceIds ?? []);\n for (const id of projected) {\n if (!source.byId.has(id)) throw new Error(`Imported proof references unknown projected source entry: ${id}`);\n }\n for (const id of source.byId.keys()) {\n if (!mappedSourceIds.has(id) && !projected.has(id)) throw new Error(`Imported proof omits source entry: ${id}`);\n if (projected.has(id) && mappedSourceIds.has(id))\n throw new Error(`Imported proof maps and projects source entry: ${id}`);\n if (projected.has(id)) {\n const type = source.byId.get(id)?.type;\n if (\n type !== 'model_change' &&\n type !== 'thinking_level_change' &&\n type !== 'active_tools_change' &&\n type !== 'session_info' &&\n type !== 'label'\n ) {\n throw new Error(`Protected history cannot project source entry: ${id}`);\n }\n }\n }\n const importedProofIds = new Set<string>();\n for (const entry of verification.entries) {\n if (importedProofIds.has(entry.importedId)) throw new Error(`Duplicate imported entry proof: ${entry.importedId}`);\n importedProofIds.add(entry.importedId);\n }\n for (const id of imported.byId.keys()) {\n if (!importedProofIds.has(id)) throw new Error(`Imported proof omits imported entry: ${id}`);\n }\n for (const entry of verification.entries) {\n const sourceEntry = source.byId.get(entry.sourceId)!;\n const importedEntry = imported.byId.get(entry.importedId)!;\n if (historyTimestamp(sourceEntry.timestamp) !== historyTimestamp(importedEntry.timestamp)) {\n throw new Error(`Imported history timestamp mismatch: ${entry.sourceId}`);\n }\n if (entry.sourceParentId !== sourceParentId(sourceEntry, 'source parent id')) {\n throw new Error(`Imported source parent proof mismatch: ${entry.sourceId}`);\n }\n const expectedParent = resolveMappedParent(sourceParentId(sourceEntry, 'source parent id'), source, mappings);\n const actualParent = sourceParentId(importedEntry, 'imported parent id');\n if (expectedParent !== actualParent || entry.importedParentId !== actualParent)\n throw new Error(`Imported history parent mismatch: ${entry.sourceId}`);\n }\n const expectedLabels = new Map<string, unknown>();\n for (const record of source.records) {\n if (record.type !== 'label') continue;\n const target = resolveMappedParent(requireString(record.targetId, 'label target'), source, mappings);\n if (target === null) continue;\n if (record.label) expectedLabels.set(target, record.label);\n else expectedLabels.delete(target);\n }\n if (\n expectedLabels.size !== imported.labels.size ||\n [...expectedLabels].some(([id, label]) => imported.labels.get(id) !== label)\n ) {\n throw new Error('Imported history label projection mismatch');\n }\n const expectedName = source.records.findLast((record) => record.type === 'session_info')?.name || undefined;\n if (imported.sessionName !== expectedName) throw new Error('Imported history session name projection mismatch');\n const selectedSourceId = source.records.at(-1)?.id;\n const expectedMainTip = resolveMappedParent(\n selectedSourceId === undefined ? null : requireString(selectedSourceId, 'selected source id'),\n source,\n mappings,\n );\n if (imported.branchTips.get('main') !== expectedMainTip) {\n throw new Error('Imported history selected branch mismatch');\n }\n const seenBranches = new Set<string>();\n for (const branch of verification.branches) {\n const branchKey = branch.branch ?? `#${seenBranches.size}`;\n if (seenBranches.has(branchKey)) throw new Error(`Duplicate imported history branch proof: ${branchKey}`);\n seenBranches.add(branchKey);\n if (branch.sourceTipId === null || branch.importedTipId === null) {\n if (branch.sourceTipId !== branch.importedTipId) throw new Error('Imported history branch root mismatch');\n } else {\n const mapping = mappings.get(branch.sourceTipId);\n if (mapping === undefined || mapping.importedId !== branch.importedTipId)\n throw new Error(`Imported history branch mismatch: ${branch.sourceTipId}`);\n }\n if (branch.branch !== undefined && imported.branchTips.get(branch.branch) !== branch.importedTipId) {\n throw new Error(`Imported history branch tip mismatch: ${branch.branch}`);\n }\n }\n for (const [branch, tip] of imported.branchTips) {\n const proof = verification.branches.find((item) => item.branch === branch);\n if (proof === undefined || proof.importedTipId !== tip) throw new Error(`Imported proof omits branch: ${branch}`);\n }\n return verification;\n}\n\nfunction isFileSystemError(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && typeof (error as NodeJS.ErrnoException).code === 'string';\n}\n\nfunction assertPaths(options: HistoryImportOptions, originalPath: string, statePath: string): void {\n const sourcePath = path.resolve(options.sourcePath);\n const destinationPath = path.resolve(options.destinationPath);\n if (sourcePath === destinationPath) throw new Error('Protected history destination must differ from source');\n if (sourcePath === path.resolve(originalPath) || sourcePath === path.resolve(statePath)) {\n throw new Error('Protected history sidecars must differ from source');\n }\n if (destinationPath === path.resolve(originalPath) || destinationPath === path.resolve(statePath)) {\n throw new Error('Protected history destination must differ from sidecars');\n }\n}\n\nexport async function protectAndImportHistory(options: HistoryImportOptions): Promise<ProtectedHistoryImportResult> {\n const sourcePath = path.resolve(options.sourcePath);\n const destinationPath = path.resolve(options.destinationPath);\n const originalPath = path.resolve(options.originalPath ?? `${sourcePath}.original`);\n const statePath = path.resolve(options.statePath ?? `${destinationPath}.import-state.json`);\n assertPaths(options, originalPath, statePath);\n\n const lease = await options.owner.acquire(sourcePath);\n try {\n await lease.assertQuiescent();\n const source = readSource(sourcePath);\n const existingState = readState(statePath);\n if (existingState !== undefined) {\n if (\n existingState.sourcePath !== source.identity.path ||\n existingState.destinationPath !== destinationPath ||\n existingState.originalPath !== originalPath ||\n !sameIdentity(existingState.sourceIdentity, source.identity)\n ) {\n throw new Error('Protected history state does not match current source');\n }\n ensureOriginal(originalPath, source.content);\n if (existingState.phase === 'published') {\n if (!fs.existsSync(destinationPath)) throw new Error('Published protected history is missing its destination');\n if (existingState.stagedSha256 === undefined)\n throw new Error('Published protected history has no destination checksum');\n if (sha256(fs.readFileSync(destinationPath)) !== existingState.stagedSha256) {\n throw new Error('Published protected history destination was modified');\n }\n if (existingState.verification === undefined)\n throw new Error('Published protected history has no verification proof');\n return {\n status: 'already-published',\n sourceIdentity: source.identity,\n originalPath,\n destinationPath,\n statePath,\n verification: existingState.verification,\n stagedSha256: existingState.stagedSha256,\n };\n }\n } else {\n ensureOriginal(originalPath, source.content);\n }\n\n let state: ImportState;\n if (existingState === undefined) {\n state = {\n version: IMPORT_STATE_VERSION,\n operation: IMPORT_OPERATION,\n phase: 'prepared',\n sourcePath: source.identity.path,\n destinationPath,\n originalPath,\n stagingPath: `${destinationPath}.${process.pid}.${randomUUID()}.staging`,\n sourceIdentity: source.identity,\n };\n writeState(statePath, state);\n } else {\n state = existingState;\n }\n\n if (fs.existsSync(destinationPath)) {\n const stagedSha256 = state.stagedSha256;\n if (stagedSha256 !== undefined && sha256(fs.readFileSync(destinationPath)) === stagedSha256) {\n state = { ...state, phase: 'published' };\n writeState(statePath, state);\n return {\n status: 'already-published',\n sourceIdentity: source.identity,\n originalPath,\n destinationPath,\n statePath,\n verification: state.verification ?? { entries: [], branches: [] },\n stagedSha256,\n };\n }\n throw new Error(`Refusing to overwrite derived history: ${destinationPath}`);\n }\n\n if (state.phase === 'prepared') {\n if (fs.existsSync(state.stagingPath)) fs.rmSync(state.stagingPath, { force: true });\n fs.copyFileSync(originalPath, state.stagingPath, fs.constants.COPYFILE_EXCL);\n ensureOwnerOnly(state.stagingPath);\n const importedVerification = await (options.importStaging ?? importV3WithPinnedUpstream)({\n sourcePath,\n stagingPath: state.stagingPath,\n originalPath,\n sourceIdentity: source.identity,\n });\n state = {\n ...state,\n phase: 'staged',\n verification: importedVerification,\n stagedSha256: sha256(fs.readFileSync(state.stagingPath)),\n };\n writeState(statePath, state);\n }\n if (state.verification === undefined) throw new Error('Protected history staging has no verification proof');\n const verification = state.verification;\n if (state.phase === 'staged') {\n state = {\n ...state,\n phase: 'verified',\n verification: options.verifyStaging\n ? await options.verifyStaging(state.stagingPath, verification)\n : verifyImport(source.content, fs.readFileSync(state.stagingPath), verification),\n };\n writeState(statePath, state);\n }\n await lease.assertQuiescent();\n const current = readSource(sourcePath);\n if (!sameIdentity(current.identity, source.identity))\n throw new Error('Protected history source changed during import');\n if (!fs.existsSync(state.stagingPath)) throw new Error('Protected history staging copy is missing');\n if (state.stagedSha256 !== undefined && sha256(fs.readFileSync(state.stagingPath)) !== state.stagedSha256) {\n throw new Error('Protected history staging copy changed during import');\n }\n publishDistinct(state.stagingPath, destinationPath);\n state = { ...state, phase: 'published' };\n writeState(statePath, state);\n return {\n status: 'published',\n sourceIdentity: source.identity,\n originalPath,\n destinationPath,\n statePath,\n verification,\n stagedSha256: state.stagedSha256 ?? sha256(fs.readFileSync(destinationPath)),\n };\n } finally {\n await lease.release();\n }\n}\n\nexport async function restoreProtectedHistory(options: RestoreProtectedHistoryOptions): Promise<void> {\n const sourcePath = path.resolve(options.sourcePath);\n const originalPath = path.resolve(options.originalPath);\n const lease = await options.owner.acquire(sourcePath);\n try {\n await lease.assertQuiescent();\n const original = fs.readFileSync(originalPath);\n const current = fs.existsSync(sourcePath) ? fs.readFileSync(sourcePath) : undefined;\n if (current !== undefined && sha256(current) === sha256(original)) return;\n writeBinaryAtomically(sourcePath, original);\n ensureOwnerOnly(sourcePath);\n } finally {\n await lease.release();\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
let node_crypto = require("node:crypto");
|
|
4
|
+
let node_fs = require("node:fs");
|
|
5
|
+
node_fs = require_runtime.__toESM(node_fs, 1);
|
|
6
|
+
let node_path = require("node:path");
|
|
7
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
8
|
+
//#region src/services/historyOwnership/index.ts
|
|
9
|
+
const LOCK_SUFFIX = ".doompi-v4.lock";
|
|
10
|
+
const LOCK_VERSION = 1;
|
|
11
|
+
const LOCK_FORMAT = "doompi-v4-history-ownership";
|
|
12
|
+
function canonicalSourcePath(sourcePath) {
|
|
13
|
+
const absolute = node_path.default.resolve(sourcePath);
|
|
14
|
+
if (node_fs.default.existsSync(absolute)) return node_fs.default.realpathSync(absolute);
|
|
15
|
+
const segments = [node_path.default.basename(absolute)];
|
|
16
|
+
let parent = node_path.default.dirname(absolute);
|
|
17
|
+
while (!node_fs.default.existsSync(parent)) {
|
|
18
|
+
segments.unshift(node_path.default.basename(parent));
|
|
19
|
+
parent = node_path.default.dirname(parent);
|
|
20
|
+
}
|
|
21
|
+
return node_path.default.join(node_fs.default.realpathSync(parent), ...segments);
|
|
22
|
+
}
|
|
23
|
+
/** Resolve aliases so every writer and exporter contends for the same lock. */
|
|
24
|
+
function historyOwnershipLockPath(sourcePath) {
|
|
25
|
+
return `${canonicalSourcePath(sourcePath)}${LOCK_SUFFIX}`;
|
|
26
|
+
}
|
|
27
|
+
function isHistoryObject(value) {
|
|
28
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
29
|
+
}
|
|
30
|
+
function isV4Header(value) {
|
|
31
|
+
return isHistoryObject(value) && value.kind === "header" && value.v === 4;
|
|
32
|
+
}
|
|
33
|
+
function isV3Header(value) {
|
|
34
|
+
return isHistoryObject(value) && value.type === "session" && value.version === 3;
|
|
35
|
+
}
|
|
36
|
+
function readHeader(sourcePath, format) {
|
|
37
|
+
const firstLine = node_fs.default.readFileSync(sourcePath, "utf8").split("\n", 1)[0] ?? "";
|
|
38
|
+
try {
|
|
39
|
+
return JSON.parse(firstLine);
|
|
40
|
+
} catch (error) {
|
|
41
|
+
const message = format === "v4" ? `History ownership source is not canonical v4 JSONL: ${sourcePath}` : `Offline history source is not canonical v3 JSONL: ${sourcePath}`;
|
|
42
|
+
throw new Error(message, { cause: error });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function assertIndependentRegularFile(sourcePath, label) {
|
|
46
|
+
const stat = node_fs.default.statSync(sourcePath);
|
|
47
|
+
if (!stat.isFile() || stat.nlink !== 1) throw new Error(`${label} must be an independent regular file`);
|
|
48
|
+
}
|
|
49
|
+
function assertV4Source(sourcePath) {
|
|
50
|
+
if (!node_fs.default.existsSync(sourcePath)) return;
|
|
51
|
+
assertIndependentRegularFile(sourcePath, "Canonical history");
|
|
52
|
+
if (!isV4Header(readHeader(sourcePath, "v4"))) throw new Error(`History ownership only supports canonical v4 sources: ${sourcePath}`);
|
|
53
|
+
}
|
|
54
|
+
function assertV3Source(sourcePath) {
|
|
55
|
+
if (!node_fs.default.existsSync(sourcePath)) return;
|
|
56
|
+
assertIndependentRegularFile(sourcePath, "Offline v3 history source");
|
|
57
|
+
if (!isV3Header(readHeader(sourcePath, "v3"))) throw new Error(`Offline history import only supports v3 sources: ${sourcePath}`);
|
|
58
|
+
}
|
|
59
|
+
function assertSqliteSource(sourcePath) {
|
|
60
|
+
if (!node_fs.default.existsSync(sourcePath)) return;
|
|
61
|
+
assertIndependentRegularFile(sourcePath, "SQLite history");
|
|
62
|
+
const descriptor = node_fs.default.openSync(sourcePath, "r");
|
|
63
|
+
try {
|
|
64
|
+
const header = Buffer.alloc(16);
|
|
65
|
+
if (node_fs.default.readSync(descriptor, header, 0, header.length, 0) !== header.length || header.toString("utf8") !== "SQLite format 3\0") throw new Error(`History ownership source is not SQLite: ${sourcePath}`);
|
|
66
|
+
} finally {
|
|
67
|
+
node_fs.default.closeSync(descriptor);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function isFileSystemError(error) {
|
|
71
|
+
return error instanceof Error && typeof error.code === "string";
|
|
72
|
+
}
|
|
73
|
+
function readToken(lockPath) {
|
|
74
|
+
try {
|
|
75
|
+
const value = JSON.parse(node_fs.default.readFileSync(lockPath, "utf8"));
|
|
76
|
+
return typeof value.token === "string" ? value.token : void 0;
|
|
77
|
+
} catch {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** A dead owner is recoverable only when the entire lock record is recognizable. */
|
|
82
|
+
function readRecoverableLock(lockPath, sourcePath) {
|
|
83
|
+
try {
|
|
84
|
+
const stat = node_fs.default.lstatSync(lockPath);
|
|
85
|
+
if (!stat.isFile() || stat.nlink !== 1) return void 0;
|
|
86
|
+
const value = JSON.parse(node_fs.default.readFileSync(lockPath, "utf8"));
|
|
87
|
+
if (!isHistoryObject(value) || value.version !== LOCK_VERSION || value.format !== LOCK_FORMAT || value.sourcePath !== sourcePath || !Number.isSafeInteger(value.pid) || value.pid <= 0 || typeof value.token !== "string" || !/^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$/iu.test(value.token)) return void 0;
|
|
88
|
+
return value;
|
|
89
|
+
} catch {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function ownerMayBeAlive(pid) {
|
|
94
|
+
try {
|
|
95
|
+
process.kill(pid, 0);
|
|
96
|
+
return true;
|
|
97
|
+
} catch (error) {
|
|
98
|
+
return !(isFileSystemError(error) && error.code === "ESRCH");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** A guard left by a dead acquirer can be retired without touching its source lock. */
|
|
102
|
+
function retireDeadGuard(guard) {
|
|
103
|
+
try {
|
|
104
|
+
if (!node_fs.default.lstatSync(guard).isDirectory()) return false;
|
|
105
|
+
const entries = node_fs.default.readdirSync(guard);
|
|
106
|
+
if (entries.length !== 1 || !/^owner-[\da-f-]{36}\.json$/iu.test(entries[0])) return false;
|
|
107
|
+
const marker = node_path.default.join(guard, entries[0]);
|
|
108
|
+
const markerStat = node_fs.default.lstatSync(marker);
|
|
109
|
+
if (!markerStat.isFile() || markerStat.nlink !== 1) return false;
|
|
110
|
+
const owner = JSON.parse(node_fs.default.readFileSync(marker, "utf8"));
|
|
111
|
+
if (!isHistoryObject(owner) || !Number.isSafeInteger(owner.pid) || owner.pid <= 0) return false;
|
|
112
|
+
if (ownerMayBeAlive(owner.pid)) return false;
|
|
113
|
+
node_fs.default.unlinkSync(marker);
|
|
114
|
+
node_fs.default.rmdirSync(guard);
|
|
115
|
+
return true;
|
|
116
|
+
} catch {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** All new acquirers hold this guard until their ownership record is durable. */
|
|
121
|
+
function withAcquisitionGuard(lockPath, acquire) {
|
|
122
|
+
const guard = `${lockPath}.recovery`;
|
|
123
|
+
try {
|
|
124
|
+
node_fs.default.mkdirSync(guard, { mode: 448 });
|
|
125
|
+
} catch (error) {
|
|
126
|
+
if (!isFileSystemError(error) || error.code !== "EEXIST" || !retireDeadGuard(guard)) throw error;
|
|
127
|
+
node_fs.default.mkdirSync(guard, { mode: 448 });
|
|
128
|
+
}
|
|
129
|
+
const marker = node_path.default.join(guard, `owner-${(0, node_crypto.randomUUID)()}.json`);
|
|
130
|
+
try {
|
|
131
|
+
node_fs.default.writeFileSync(marker, JSON.stringify({ pid: process.pid }), {
|
|
132
|
+
flag: "wx",
|
|
133
|
+
mode: 384
|
|
134
|
+
});
|
|
135
|
+
return acquire();
|
|
136
|
+
} finally {
|
|
137
|
+
node_fs.default.rmSync(marker, { force: true });
|
|
138
|
+
node_fs.default.rmdirSync(guard);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Called only under the acquisition guard, before publishing a new owner. */
|
|
142
|
+
function recoverDeadOwner(lockPath, sourcePath) {
|
|
143
|
+
try {
|
|
144
|
+
const record = readRecoverableLock(lockPath, sourcePath);
|
|
145
|
+
if (!record || ownerMayBeAlive(record.pid)) return false;
|
|
146
|
+
const before = node_fs.default.lstatSync(lockPath);
|
|
147
|
+
if (readRecoverableLock(lockPath, sourcePath)?.token !== record.token || ownerMayBeAlive(record.pid)) return false;
|
|
148
|
+
const current = node_fs.default.lstatSync(lockPath);
|
|
149
|
+
if (before.dev !== current.dev || before.ino !== current.ino) return false;
|
|
150
|
+
node_fs.default.unlinkSync(lockPath);
|
|
151
|
+
return true;
|
|
152
|
+
} catch (error) {
|
|
153
|
+
if (isFileSystemError(error) && error.code === "ENOENT") return false;
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function releaseLock(lockPath, token, handle) {
|
|
158
|
+
node_fs.default.closeSync(handle);
|
|
159
|
+
if (readToken(lockPath) === token) node_fs.default.rmSync(lockPath, { force: true });
|
|
160
|
+
}
|
|
161
|
+
function createLease(locks, sourcePath, assertQuiescent) {
|
|
162
|
+
let released = false;
|
|
163
|
+
return {
|
|
164
|
+
assertQuiescent: () => {
|
|
165
|
+
if (released) throw new Error("History ownership lease has been released");
|
|
166
|
+
for (const lock of locks) {
|
|
167
|
+
const held = node_fs.default.fstatSync(lock.handle);
|
|
168
|
+
const current = node_fs.default.statSync(lock.lockPath);
|
|
169
|
+
if (held.dev !== current.dev || held.ino !== current.ino || readToken(lock.lockPath) !== lock.token) throw new Error("History ownership lock was replaced");
|
|
170
|
+
}
|
|
171
|
+
return assertQuiescent(sourcePath);
|
|
172
|
+
},
|
|
173
|
+
release: () => {
|
|
174
|
+
if (released) return;
|
|
175
|
+
released = true;
|
|
176
|
+
let firstError;
|
|
177
|
+
for (const lock of [...locks].reverse()) try {
|
|
178
|
+
releaseLock(lock.lockPath, lock.token, lock.handle);
|
|
179
|
+
} catch (error) {
|
|
180
|
+
firstError ??= error;
|
|
181
|
+
}
|
|
182
|
+
if (firstError !== void 0) throw firstError;
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Creates the canonical history owner used by runtime writers, export CLI, and
|
|
188
|
+
* the explicit offline importer. The default source boundary remains v4.
|
|
189
|
+
* Complete locks left by a dead process are recovered under an exclusive guard.
|
|
190
|
+
* A live owner or an ambiguous sidecar still blocks acquisition.
|
|
191
|
+
*/
|
|
192
|
+
function createHistoryOwnership(options = {}) {
|
|
193
|
+
const assertQuiescent = options.assertQuiescent ?? (() => void 0);
|
|
194
|
+
const assertSource = options.sourceFormat === "sqlite" ? assertSqliteSource : options.sourceFormat === "v3" ? assertV3Source : assertV4Source;
|
|
195
|
+
return { async acquire(sourcePath) {
|
|
196
|
+
const absoluteSourcePath = canonicalSourcePath(sourcePath);
|
|
197
|
+
const paths = [absoluteSourcePath, ...options.additionalPaths ?? []].map(canonicalSourcePath);
|
|
198
|
+
const canonicalPaths = [...new Set(paths)].sort((left, right) => left.localeCompare(right));
|
|
199
|
+
const locks = [];
|
|
200
|
+
let conflictingLockPath = historyOwnershipLockPath(absoluteSourcePath);
|
|
201
|
+
try {
|
|
202
|
+
for (const lockedPath of canonicalPaths) {
|
|
203
|
+
const lockPath = historyOwnershipLockPath(lockedPath);
|
|
204
|
+
conflictingLockPath = lockPath;
|
|
205
|
+
const token = (0, node_crypto.randomUUID)();
|
|
206
|
+
const record = {
|
|
207
|
+
version: LOCK_VERSION,
|
|
208
|
+
format: LOCK_FORMAT,
|
|
209
|
+
pid: process.pid,
|
|
210
|
+
sourcePath: lockedPath,
|
|
211
|
+
token
|
|
212
|
+
};
|
|
213
|
+
node_fs.default.mkdirSync(node_path.default.dirname(lockPath), {
|
|
214
|
+
recursive: true,
|
|
215
|
+
mode: 448
|
|
216
|
+
});
|
|
217
|
+
withAcquisitionGuard(lockPath, () => {
|
|
218
|
+
let handle;
|
|
219
|
+
try {
|
|
220
|
+
handle = node_fs.default.openSync(lockPath, "wx", 384);
|
|
221
|
+
} catch (error) {
|
|
222
|
+
if (!isFileSystemError(error) || error.code !== "EEXIST" || !recoverDeadOwner(lockPath, lockedPath)) throw error;
|
|
223
|
+
handle = node_fs.default.openSync(lockPath, "wx", 384);
|
|
224
|
+
}
|
|
225
|
+
const lock = {
|
|
226
|
+
lockPath,
|
|
227
|
+
token,
|
|
228
|
+
handle
|
|
229
|
+
};
|
|
230
|
+
locks.push(lock);
|
|
231
|
+
node_fs.default.writeFileSync(handle, `${JSON.stringify(record)}\n`, "utf8");
|
|
232
|
+
node_fs.default.fsyncSync(handle);
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
assertSource(absoluteSourcePath);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
for (const lock of [...locks].reverse()) try {
|
|
238
|
+
releaseLock(lock.lockPath, lock.token, lock.handle);
|
|
239
|
+
} catch {}
|
|
240
|
+
if (isFileSystemError(error) && error.code === "EEXIST") throw new Error(`History ownership lock already exists or is ambiguous: ${conflictingLockPath}`, { cause: error });
|
|
241
|
+
throw error;
|
|
242
|
+
}
|
|
243
|
+
return createLease(locks, absoluteSourcePath, assertQuiescent);
|
|
244
|
+
} };
|
|
245
|
+
}
|
|
246
|
+
/** Explicitly named alias for hosts that want to document the v4 boundary. */
|
|
247
|
+
const createV4HistoryOwnership = createHistoryOwnership;
|
|
248
|
+
//#endregion
|
|
249
|
+
exports.createHistoryOwnership = createHistoryOwnership;
|
|
250
|
+
exports.createV4HistoryOwnership = createV4HistoryOwnership;
|
|
251
|
+
exports.historyOwnershipLockPath = historyOwnershipLockPath;
|
|
252
|
+
|
|
253
|
+
//# sourceMappingURL=historyOwnership.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historyOwnership.cjs","names":["path","fs","randomUUID"],"sources":["../src/services/historyOwnership/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { HistoryOwnership, HistoryOwnershipLease } from '../historyImport';\n\nconst LOCK_SUFFIX = '.doompi-v4.lock';\nconst LOCK_VERSION = 1;\nconst LOCK_FORMAT = 'doompi-v4-history-ownership';\n\ninterface HistoryLockRecord {\n version: 1;\n format: 'doompi-v4-history-ownership';\n pid: number;\n sourcePath: string;\n token: string;\n}\n\ninterface HeldHistoryLock {\n lockPath: string;\n token: string;\n handle: number;\n}\n\nexport interface HistoryOwnershipOptions {\n /** Checks managed writers; this cannot account for an unmanaged Pi process. */\n assertQuiescent?: (sourcePath: string) => void | Promise<void>;\n /** The source format admitted by this owner. Defaults to canonical v4. */\n sourceFormat?: 'v3' | 'v4' | 'sqlite';\n /** Additional paths to lock for the lifetime of each acquired source lease. */\n additionalPaths?: readonly string[];\n}\n\nfunction canonicalSourcePath(sourcePath: string): string {\n const absolute = path.resolve(sourcePath);\n if (fs.existsSync(absolute)) return fs.realpathSync(absolute);\n const segments = [path.basename(absolute)];\n let parent = path.dirname(absolute);\n while (!fs.existsSync(parent)) {\n segments.unshift(path.basename(parent));\n parent = path.dirname(parent);\n }\n return path.join(fs.realpathSync(parent), ...segments);\n}\n\n/** Resolve aliases so every writer and exporter contends for the same lock. */\nexport function historyOwnershipLockPath(sourcePath: string): string {\n return `${canonicalSourcePath(sourcePath)}${LOCK_SUFFIX}`;\n}\n\nfunction isHistoryObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isV4Header(value: unknown): boolean {\n return isHistoryObject(value) && value.kind === 'header' && value.v === 4;\n}\n\nfunction isV3Header(value: unknown): boolean {\n return isHistoryObject(value) && value.type === 'session' && value.version === 3;\n}\n\nfunction readHeader(sourcePath: string, format: 'v3' | 'v4'): unknown {\n const firstLine = fs.readFileSync(sourcePath, 'utf8').split('\\n', 1)[0] ?? '';\n try {\n return JSON.parse(firstLine);\n } catch (error) {\n const message =\n format === 'v4'\n ? `History ownership source is not canonical v4 JSONL: ${sourcePath}`\n : `Offline history source is not canonical v3 JSONL: ${sourcePath}`;\n throw new Error(message, { cause: error });\n }\n}\n\nfunction assertIndependentRegularFile(sourcePath: string, label: string): void {\n const stat = fs.statSync(sourcePath);\n if (!stat.isFile() || stat.nlink !== 1) throw new Error(`${label} must be an independent regular file`);\n}\n\nfunction assertV4Source(sourcePath: string): void {\n if (!fs.existsSync(sourcePath)) return;\n assertIndependentRegularFile(sourcePath, 'Canonical history');\n if (!isV4Header(readHeader(sourcePath, 'v4')))\n throw new Error(`History ownership only supports canonical v4 sources: ${sourcePath}`);\n}\n\nfunction assertV3Source(sourcePath: string): void {\n if (!fs.existsSync(sourcePath)) return;\n assertIndependentRegularFile(sourcePath, 'Offline v3 history source');\n if (!isV3Header(readHeader(sourcePath, 'v3')))\n throw new Error(`Offline history import only supports v3 sources: ${sourcePath}`);\n}\n\nfunction assertSqliteSource(sourcePath: string): void {\n if (!fs.existsSync(sourcePath)) return;\n assertIndependentRegularFile(sourcePath, 'SQLite history');\n const descriptor = fs.openSync(sourcePath, 'r');\n try {\n const header = Buffer.alloc(16);\n if (\n fs.readSync(descriptor, header, 0, header.length, 0) !== header.length ||\n header.toString('utf8') !== 'SQLite format 3\\u0000'\n )\n throw new Error(`History ownership source is not SQLite: ${sourcePath}`);\n } finally {\n fs.closeSync(descriptor);\n }\n}\n\nfunction isFileSystemError(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && typeof (error as NodeJS.ErrnoException).code === 'string';\n}\n\nfunction readToken(lockPath: string): string | undefined {\n try {\n const value = JSON.parse(fs.readFileSync(lockPath, 'utf8')) as Partial<HistoryLockRecord>;\n return typeof value.token === 'string' ? value.token : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** A dead owner is recoverable only when the entire lock record is recognizable. */\nfunction readRecoverableLock(lockPath: string, sourcePath: string): HistoryLockRecord | undefined {\n try {\n const stat = fs.lstatSync(lockPath);\n if (!stat.isFile() || stat.nlink !== 1) return undefined;\n const value: unknown = JSON.parse(fs.readFileSync(lockPath, 'utf8'));\n if (\n !isHistoryObject(value) ||\n value.version !== LOCK_VERSION ||\n value.format !== LOCK_FORMAT ||\n value.sourcePath !== sourcePath ||\n !Number.isSafeInteger(value.pid) ||\n (value.pid as number) <= 0 ||\n typeof value.token !== 'string' ||\n !/^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$/iu.test(value.token)\n )\n return undefined;\n return value as unknown as HistoryLockRecord;\n } catch {\n return undefined;\n }\n}\n\nfunction ownerMayBeAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return !(isFileSystemError(error) && error.code === 'ESRCH');\n }\n}\n/** A guard left by a dead acquirer can be retired without touching its source lock. */\nfunction retireDeadGuard(guard: string): boolean {\n try {\n const stat = fs.lstatSync(guard);\n if (!stat.isDirectory()) return false;\n const entries = fs.readdirSync(guard);\n // An empty guard might still belong to a process killed between mkdir and\n // publishing its marker. Fail closed rather than race a new acquirer.\n if (entries.length !== 1 || !/^owner-[\\da-f-]{36}\\.json$/iu.test(entries[0]!)) return false;\n const marker = path.join(guard, entries[0]!);\n const markerStat = fs.lstatSync(marker);\n if (!markerStat.isFile() || markerStat.nlink !== 1) return false;\n const owner: unknown = JSON.parse(fs.readFileSync(marker, 'utf8'));\n if (!isHistoryObject(owner) || !Number.isSafeInteger(owner.pid) || (owner.pid as number) <= 0) return false;\n if (ownerMayBeAlive(owner.pid as number)) return false;\n // Only the process that unlinks this unique marker may retire the directory.\n // Other cleaners see a newly empty guard and refuse to remove it.\n fs.unlinkSync(marker);\n fs.rmdirSync(guard);\n return true;\n } catch {\n return false;\n }\n}\n\n/** All new acquirers hold this guard until their ownership record is durable. */\nfunction withAcquisitionGuard<T>(lockPath: string, acquire: () => T): T {\n const guard = `${lockPath}.recovery`;\n try {\n fs.mkdirSync(guard, { mode: 0o700 });\n } catch (error) {\n if (!isFileSystemError(error) || error.code !== 'EEXIST' || !retireDeadGuard(guard)) throw error;\n fs.mkdirSync(guard, { mode: 0o700 });\n }\n const marker = path.join(guard, `owner-${randomUUID()}.json`);\n try {\n fs.writeFileSync(marker, JSON.stringify({ pid: process.pid }), { flag: 'wx', mode: 0o600 });\n return acquire();\n } finally {\n fs.rmSync(marker, { force: true });\n fs.rmdirSync(guard);\n }\n}\n\n/** Called only under the acquisition guard, before publishing a new owner. */\nfunction recoverDeadOwner(lockPath: string, sourcePath: string): boolean {\n try {\n const record = readRecoverableLock(lockPath, sourcePath);\n if (!record || ownerMayBeAlive(record.pid)) return false;\n const before = fs.lstatSync(lockPath);\n if (readRecoverableLock(lockPath, sourcePath)?.token !== record.token || ownerMayBeAlive(record.pid)) return false;\n const current = fs.lstatSync(lockPath);\n if (before.dev !== current.dev || before.ino !== current.ino) return false;\n // The owner is gone, and other recoverers cannot remove this lock while\n // the guard is held. Legacy writers still contend on the exclusive wx open.\n fs.unlinkSync(lockPath);\n return true;\n } catch (error) {\n if (isFileSystemError(error) && error.code === 'ENOENT') return false;\n throw error;\n }\n}\n\nfunction releaseLock(lockPath: string, token: string, handle: number): void {\n fs.closeSync(handle);\n // Recovery only retires a lock after its recorded owner has exited, so that\n // owner cannot be here releasing it concurrently. A replaced lock is ambiguous.\n if (readToken(lockPath) === token) fs.rmSync(lockPath, { force: true });\n}\n\nfunction createLease(\n locks: readonly HeldHistoryLock[],\n sourcePath: string,\n assertQuiescent: (sourcePath: string) => void | Promise<void>,\n): HistoryOwnershipLease {\n let released = false;\n return {\n assertQuiescent: () => {\n if (released) throw new Error('History ownership lease has been released');\n for (const lock of locks) {\n const held = fs.fstatSync(lock.handle);\n const current = fs.statSync(lock.lockPath);\n if (held.dev !== current.dev || held.ino !== current.ino || readToken(lock.lockPath) !== lock.token) {\n throw new Error('History ownership lock was replaced');\n }\n }\n return assertQuiescent(sourcePath);\n },\n release: () => {\n if (released) return;\n released = true;\n let firstError: unknown;\n for (const lock of [...locks].reverse()) {\n try {\n releaseLock(lock.lockPath, lock.token, lock.handle);\n } catch (error) {\n firstError ??= error;\n }\n }\n if (firstError !== undefined) throw firstError;\n },\n };\n}\n\n/**\n * Creates the canonical history owner used by runtime writers, export CLI, and\n * the explicit offline importer. The default source boundary remains v4.\n * Complete locks left by a dead process are recovered under an exclusive guard.\n * A live owner or an ambiguous sidecar still blocks acquisition.\n */\nexport function createHistoryOwnership(options: HistoryOwnershipOptions = {}): HistoryOwnership {\n const assertQuiescent = options.assertQuiescent ?? (() => undefined);\n const assertSource =\n options.sourceFormat === 'sqlite'\n ? assertSqliteSource\n : options.sourceFormat === 'v3'\n ? assertV3Source\n : assertV4Source;\n return {\n async acquire(sourcePath: string): Promise<HistoryOwnershipLease> {\n const absoluteSourcePath = canonicalSourcePath(sourcePath);\n const paths = [absoluteSourcePath, ...(options.additionalPaths ?? [])].map(canonicalSourcePath);\n const canonicalPaths = [...new Set(paths)].sort((left, right) => left.localeCompare(right));\n const locks: HeldHistoryLock[] = [];\n let conflictingLockPath = historyOwnershipLockPath(absoluteSourcePath);\n try {\n for (const lockedPath of canonicalPaths) {\n const lockPath = historyOwnershipLockPath(lockedPath);\n conflictingLockPath = lockPath;\n const token = randomUUID();\n const record: HistoryLockRecord = {\n version: LOCK_VERSION,\n format: LOCK_FORMAT,\n pid: process.pid,\n sourcePath: lockedPath,\n token,\n };\n fs.mkdirSync(path.dirname(lockPath), { recursive: true, mode: 0o700 });\n withAcquisitionGuard(lockPath, () => {\n let handle: number;\n try {\n handle = fs.openSync(lockPath, 'wx', 0o600);\n } catch (error) {\n if (!isFileSystemError(error) || error.code !== 'EEXIST' || !recoverDeadOwner(lockPath, lockedPath))\n throw error;\n handle = fs.openSync(lockPath, 'wx', 0o600);\n }\n const lock = { lockPath, token, handle };\n locks.push(lock);\n fs.writeFileSync(handle, `${JSON.stringify(record)}\\n`, 'utf8');\n fs.fsyncSync(handle);\n });\n }\n assertSource(absoluteSourcePath);\n } catch (error) {\n for (const lock of [...locks].reverse()) {\n try {\n releaseLock(lock.lockPath, lock.token, lock.handle);\n } catch {\n // Preserve the acquisition failure and never remove a replaced lock.\n }\n }\n if (isFileSystemError(error) && error.code === 'EEXIST') {\n throw new Error(`History ownership lock already exists or is ambiguous: ${conflictingLockPath}`, {\n cause: error,\n });\n }\n throw error;\n }\n return createLease(locks, absoluteSourcePath, assertQuiescent);\n },\n };\n}\n\n/** Explicitly named alias for hosts that want to document the v4 boundary. */\nexport const createV4HistoryOwnership = createHistoryOwnership;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { HistoryOwnership } from "./historyImport.mjs";
|
|
2
|
+
//#region src/services/historyOwnership/index.d.ts
|
|
3
|
+
export interface HistoryOwnershipOptions {
|
|
4
|
+
/** Checks managed writers; this cannot account for an unmanaged Pi process. */
|
|
5
|
+
assertQuiescent?: (sourcePath: string) => void | Promise<void>;
|
|
6
|
+
/** The source format admitted by this owner. Defaults to canonical v4. */
|
|
7
|
+
sourceFormat?: 'v3' | 'v4' | 'sqlite';
|
|
8
|
+
/** Additional paths to lock for the lifetime of each acquired source lease. */
|
|
9
|
+
additionalPaths?: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
/** Resolve aliases so every writer and exporter contends for the same lock. */
|
|
12
|
+
export declare function historyOwnershipLockPath(sourcePath: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Creates the canonical history owner used by runtime writers, export CLI, and
|
|
15
|
+
* the explicit offline importer. The default source boundary remains v4.
|
|
16
|
+
* Complete locks left by a dead process are recovered under an exclusive guard.
|
|
17
|
+
* A live owner or an ambiguous sidecar still blocks acquisition.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createHistoryOwnership(options?: HistoryOwnershipOptions): HistoryOwnership;
|
|
20
|
+
/** Explicitly named alias for hosts that want to document the v4 boundary. */
|
|
21
|
+
export declare const createV4HistoryOwnership: typeof createHistoryOwnership;
|
|
22
|
+
//#endregion
|
|
23
|
+
//# sourceMappingURL=historyOwnership.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historyOwnership.d.mts","names":[],"sources":["../src/services/historyOwnership/index.ts"],"mappings":";;iBAwBiB;;EAEf,mBAAmB,8BAA8B;;EAEjD;;EAEA;;;wBAgBc,yBAAyB;;;;;;;wBA0NzB,uBAAuB,UAAS,0BAA+B;;qBAiElE,iCAAwB"}
|