@agimon-ai/po-core 0.0.0-alpha.2 → 0.0.0-alpha.21
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 +149 -21
- package/NOTICE +41 -0
- package/dist/agentModel.cjs +1 -1
- package/dist/agentModel.d.mts +2 -2
- package/dist/agentModel.mjs +1 -2
- package/dist/apiContracts.cjs +623 -802
- package/dist/apiContracts.cjs.map +1 -1
- package/dist/apiContracts.d.mts +277 -615
- package/dist/apiContracts.d.mts.map +1 -1
- package/dist/apiContracts.mjs +617 -794
- package/dist/apiContracts.mjs.map +1 -1
- package/dist/askUser.cjs +2 -2
- package/dist/askUser.d.mts +2 -2
- package/dist/askUser.mjs +1 -2
- package/dist/authorTools.mjs +1 -2
- package/dist/backgroundWork.cjs +3 -3
- package/dist/backgroundWork.d.mts +2 -2
- package/dist/backgroundWork.mjs +1 -2
- package/dist/bundleAssetPolicy.mjs +1 -2
- package/dist/chatgptAuth.cjs +3 -2
- package/dist/chatgptAuth.d.mts +3 -2
- package/dist/chatgptAuth.mjs +2 -1
- package/dist/childProcess.cjs +1 -1
- package/dist/childProcess.d.mts +2 -2
- package/dist/childProcess.mjs +1 -2
- package/dist/childSession.cjs +11 -6
- package/dist/childSession.d.mts +3 -3
- package/dist/childSession.mjs +3 -3
- package/dist/cockpitContainer.mjs +1 -2
- package/dist/config.cjs +1 -1
- package/dist/config.d.mts +3 -3
- package/dist/config.mjs +1 -2
- package/dist/contextApi.cjs +1 -0
- package/dist/contextApi.d.mts +2 -2
- package/dist/contextApi.mjs +2 -2
- package/dist/contextContributions.cjs +4 -4
- package/dist/contextContributions.d.mts +3 -3
- package/dist/contextContributions.mjs +3 -3
- package/dist/contextDetailStore.cjs +7 -5
- package/dist/contextDetailStore.cjs.map +1 -1
- package/dist/contextDetailStore.d.mts +2 -1
- package/dist/contextDetailStore.d.mts.map +1 -1
- package/dist/contextDetailStore.mjs +6 -4
- package/dist/contextDetailStore.mjs.map +1 -1
- package/dist/contextProjection.cjs +7 -2
- package/dist/contextProjection.cjs.map +1 -1
- package/dist/contextProjection.d.mts +4 -1
- package/dist/contextProjection.d.mts.map +1 -1
- package/dist/contextProjection.mjs +5 -2
- package/dist/contextProjection.mjs.map +1 -1
- package/dist/cordisHost.cjs +11 -11
- package/dist/cordisHost.d.mts +2 -2
- package/dist/cordisHost.mjs +1 -2
- package/dist/delegation.cjs +8 -8
- package/dist/delegation.d.mts +2 -2
- package/dist/delegation.mjs +1 -2
- package/dist/executionBudget.cjs +4 -3
- package/dist/executionBudget.cjs.map +1 -1
- package/dist/executionBudget.d.mts +2 -2
- package/dist/executionBudget.d.mts.map +1 -1
- package/dist/executionBudget.mjs +4 -3
- package/dist/executionBudget.mjs.map +1 -1
- package/dist/extensionFile.cjs +5 -0
- package/dist/extensionFile.d.mts +4 -2
- package/dist/extensionFile.mjs +4 -2
- package/dist/footer.d.mts +2 -2
- package/dist/footer.mjs +1 -2
- package/dist/headless.cjs +14 -14
- package/dist/headless.d.mts +2 -2
- package/dist/headless.mjs +1 -2
- package/dist/headlessHub.cjs +308 -109
- package/dist/headlessHub.cjs.map +1 -1
- package/dist/headlessHub.d.mts +71 -36
- package/dist/headlessHub.d.mts.map +1 -1
- package/dist/headlessHub.mjs +309 -110
- package/dist/headlessHub.mjs.map +1 -1
- package/dist/headlessProtocol.cjs +327 -0
- package/dist/headlessProtocol.cjs.map +1 -0
- package/dist/headlessProtocol.d.mts +30 -0
- package/dist/headlessProtocol.d.mts.map +1 -0
- package/dist/headlessProtocol.mjs +326 -0
- package/dist/headlessProtocol.mjs.map +1 -0
- package/dist/headlessServer.cjs +166 -151
- package/dist/headlessServer.cjs.map +1 -1
- package/dist/headlessServer.d.mts +13 -5
- package/dist/headlessServer.d.mts.map +1 -1
- package/dist/headlessServer.mjs +166 -151
- package/dist/headlessServer.mjs.map +1 -1
- package/dist/headlessSessionHost.d.mts +58 -21
- package/dist/headlessSessionHost.d.mts.map +1 -1
- package/dist/help.cjs +20 -20
- package/dist/help.d.mts +2 -2
- package/dist/help.mjs +2 -2
- package/dist/history.cjs +16 -20
- package/dist/history.d.mts +9 -7
- package/dist/history.mjs +6 -7
- package/dist/historyOwnership.cjs.map +1 -1
- package/dist/historyOwnership.d.mts +1 -1
- package/dist/historyOwnership.mjs.map +1 -1
- package/dist/hubChannel.cjs +9 -0
- package/dist/hubChannel.d.mts +3 -2
- package/dist/hubChannel.mjs +3 -2
- package/dist/index.cjs +26 -28
- package/dist/index.d.mts +6 -6
- package/dist/index.mjs +6 -6
- package/dist/interop/chord.mjs +1 -0
- package/dist/interop/chordContext.mjs +1 -0
- package/dist/json.cjs +11 -5
- package/dist/json.d.mts +4 -2
- package/dist/json.mjs +4 -2
- package/dist/kernel.cjs +1 -1
- package/dist/kernel.d.mts +3 -3
- package/dist/kernel.mjs +1 -2
- package/dist/leader.d.mts +2 -2
- package/dist/leader.mjs +1 -2
- package/dist/logSinkTelemetry.mjs +1 -2
- package/dist/machineApi.cjs +80 -74
- package/dist/machineApi.cjs.map +1 -1
- package/dist/machineApi.d.mts +5 -2
- package/dist/machineApi.d.mts.map +1 -1
- package/dist/machineApi.mjs +78 -71
- package/dist/machineApi.mjs.map +1 -1
- package/dist/main.cjs +2 -1
- package/dist/main.d.mts +2 -1
- package/dist/main.mjs +2 -1
- package/dist/mcpFacet.d.mts +3 -3
- package/dist/mcpProjection.cjs +13 -13
- package/dist/mcpProjection.d.mts +2 -2
- package/dist/mcpProjection.mjs +1 -2
- package/dist/mcpSchemaCost.cjs +4 -4
- package/dist/mcpSchemaCost.cjs.map +1 -1
- package/dist/mcpSchemaCost.d.mts +2 -2
- package/dist/mcpSchemaCost.mjs +4 -4
- package/dist/mcpSchemaCost.mjs.map +1 -1
- package/dist/mcpSession.cjs +7 -7
- package/dist/mcpSession.d.mts +2 -2
- package/dist/mcpSession.mjs +1 -2
- package/dist/mcpStatus.cjs +2 -2
- package/dist/mcpStatus.d.mts +2 -2
- package/dist/mcpStatus.mjs +1 -2
- package/dist/mcpToolResolver.cjs +3 -3
- package/dist/mcpToolResolver.d.mts +2 -2
- package/dist/mcpToolResolver.mjs +1 -2
- package/dist/mcpWidget.d.mts +2 -2
- package/dist/moduleResolution.cjs +43 -8
- package/dist/moduleResolution.cjs.map +1 -1
- package/dist/moduleResolution.d.mts +10 -1
- package/dist/moduleResolution.d.mts.map +1 -1
- package/dist/moduleResolution.mjs +40 -7
- package/dist/moduleResolution.mjs.map +1 -1
- package/dist/narration.cjs +3 -3
- package/dist/narration.d.mts +2 -2
- package/dist/narration.mjs +1 -2
- package/dist/native.cjs +9 -0
- package/dist/native.d.mts +4 -3
- package/dist/native.mjs +3 -2
- package/dist/nodePlatform.cjs +77 -0
- package/dist/nodePlatform.cjs.map +1 -0
- package/dist/nodePlatform.d.mts +17 -0
- package/dist/nodePlatform.d.mts.map +1 -0
- package/dist/nodePlatform.mjs +72 -0
- package/dist/nodePlatform.mjs.map +1 -0
- package/dist/notification.cjs +15 -15
- package/dist/notification.d.mts +2 -2
- package/dist/notification.mjs +1 -2
- package/dist/packageApi.cjs +11 -11
- package/dist/packageApi.d.mts +2 -2
- package/dist/packageApi.mjs +2 -2
- package/dist/packageApiServer.cjs +45 -27
- package/dist/packageApiServer.cjs.map +1 -1
- package/dist/packageApiServer.d.mts +36 -26
- package/dist/packageApiServer.d.mts.map +1 -1
- package/dist/packageApiServer.mjs +44 -26
- package/dist/packageApiServer.mjs.map +1 -1
- package/dist/piSettings.cjs +41 -20
- package/dist/piSettings.d.mts +4 -2
- package/dist/piSettings.mjs +4 -2
- package/dist/platform.cjs +62 -0
- package/dist/platform.d.mts +10 -0
- package/dist/platform.mjs +10 -0
- package/dist/pluginProtocol.cjs +7 -8
- package/dist/pluginProtocol.d.mts +2 -2
- package/dist/pluginProtocol.mjs +1 -2
- package/dist/poPackage.cjs +12 -0
- package/dist/poPackage.d.mts +3 -0
- package/dist/poPackage.mjs +3 -0
- package/dist/profileIdentity.cjs +1 -1
- package/dist/profileIdentity.d.mts +2 -2
- package/dist/profileIdentity.mjs +1 -2
- package/dist/protocol.cjs +3 -3
- package/dist/protocol.d.mts +2 -2
- package/dist/protocol.mjs +1 -2
- package/dist/readiness.cjs +6 -6
- package/dist/readiness.d.mts +2 -2
- package/dist/readiness.mjs +1 -2
- package/dist/remoteApi.cjs.map +1 -1
- package/dist/remoteApi.d.mts +2 -2
- package/dist/remoteApi.mjs.map +1 -1
- package/dist/remoteRuntime.cjs +42 -65
- package/dist/remoteRuntime.cjs.map +1 -1
- package/dist/remoteRuntime.d.mts +3 -2
- package/dist/remoteRuntime.d.mts.map +1 -1
- package/dist/remoteRuntime.mjs +41 -62
- package/dist/remoteRuntime.mjs.map +1 -1
- package/dist/runtimeConfig.cjs +4 -4
- package/dist/runtimeConfig.cjs.map +1 -1
- package/dist/runtimeConfig.d.mts +10 -9
- package/dist/runtimeConfig.d.mts.map +1 -1
- package/dist/runtimeConfig.mjs +4 -4
- package/dist/runtimeConfig.mjs.map +1 -1
- package/dist/runtimeContextApi.cjs +10 -3
- package/dist/runtimeContextApi.cjs.map +1 -1
- package/dist/runtimeContextApi.d.mts +3 -3
- package/dist/runtimeContextApi.d.mts.map +1 -1
- package/dist/runtimeContextApi.mjs +10 -3
- package/dist/runtimeContextApi.mjs.map +1 -1
- package/dist/runtimeCordisHost.cjs +46 -46
- package/dist/runtimeCordisHost.cjs.map +1 -1
- package/dist/runtimeCordisHost.d.mts +29 -28
- package/dist/runtimeCordisHost.d.mts.map +1 -1
- package/dist/runtimeCordisHost.mjs +42 -42
- package/dist/runtimeCordisHost.mjs.map +1 -1
- package/dist/runtimeIdentity.cjs +6 -9
- package/dist/runtimeIdentity.cjs.map +1 -1
- package/dist/runtimeIdentity.d.mts +5 -1
- package/dist/runtimeIdentity.d.mts.map +1 -1
- package/dist/runtimeIdentity.mjs +5 -8
- package/dist/runtimeIdentity.mjs.map +1 -1
- package/dist/runtimeJson.cjs +10 -45
- package/dist/runtimeJson.d.mts +3 -22
- package/dist/runtimeJson.mjs +3 -39
- package/dist/runtimeLogSinkTelemetry.cjs +19 -19
- package/dist/runtimeLogSinkTelemetry.cjs.map +1 -1
- package/dist/runtimeLogSinkTelemetry.d.mts +19 -19
- package/dist/runtimeLogSinkTelemetry.mjs +19 -19
- package/dist/runtimeLogSinkTelemetry.mjs.map +1 -1
- package/dist/runtimePackages.cjs +7 -2
- package/dist/runtimePackages.cjs.map +1 -1
- package/dist/runtimePackages.d.mts +4 -1
- package/dist/runtimePackages.d.mts.map +1 -1
- package/dist/runtimePackages.mjs +7 -2
- package/dist/runtimePackages.mjs.map +1 -1
- package/dist/runtimePiSettings.cjs +40 -263
- package/dist/runtimePiSettings.d.mts +3 -72
- package/dist/runtimePiSettings.mjs +3 -241
- package/dist/runtimeProtocol.cjs +19 -19
- package/dist/runtimeProtocol.cjs.map +1 -1
- package/dist/runtimeProtocol.d.mts +7 -7
- package/dist/runtimeProtocol.d.mts.map +1 -1
- package/dist/runtimeProtocol.mjs +17 -17
- package/dist/runtimeProtocol.mjs.map +1 -1
- package/dist/runtimeTransition.cjs +9 -9
- package/dist/runtimeTransition.cjs.map +1 -1
- package/dist/runtimeTransition.d.mts +10 -10
- package/dist/runtimeTransition.d.mts.map +1 -1
- package/dist/runtimeTransition.mjs +7 -7
- package/dist/runtimeTransition.mjs.map +1 -1
- package/dist/sandboxHarness.mjs +1 -2
- package/dist/server.cjs +3 -7
- package/dist/server.d.mts +6 -6
- package/dist/server.mjs +3 -4
- package/dist/serverPlugin.cjs +39 -0
- package/dist/serverPlugin.d.mts +12 -0
- package/dist/serverPlugin.mjs +11 -0
- package/dist/serverTelemetry.cjs +1 -1
- package/dist/serverTelemetry.cjs.map +1 -1
- package/dist/serverTelemetry.d.mts +2 -2
- package/dist/serverTelemetry.mjs +2 -2
- package/dist/serverTelemetry.mjs.map +1 -1
- package/dist/sessionFilesApi.cjs +41 -37
- package/dist/sessionFilesApi.cjs.map +1 -1
- package/dist/sessionFilesApi.d.mts +6 -3
- package/dist/sessionFilesApi.d.mts.map +1 -1
- package/dist/sessionFilesApi.mjs +41 -36
- package/dist/sessionFilesApi.mjs.map +1 -1
- package/dist/sessionProtocol.cjs +31 -6
- package/dist/sessionProtocol.d.mts +8 -3
- package/dist/sessionProtocol.mjs +8 -2
- package/dist/skills.cjs +5 -5
- package/dist/skills.d.mts +2 -2
- package/dist/skills.mjs +1 -2
- package/dist/sqliteSessionStorage.cjs +28 -50
- package/dist/sqliteSessionStorage.cjs.map +1 -1
- package/dist/sqliteSessionStorage.d.mts +13 -20
- package/dist/sqliteSessionStorage.d.mts.map +1 -1
- package/dist/sqliteSessionStorage.mjs +25 -48
- package/dist/sqliteSessionStorage.mjs.map +1 -1
- package/dist/src/constants/agentSettled.cjs +7 -0
- package/dist/src/constants/agentSettled.cjs.map +1 -0
- package/dist/src/constants/agentSettled.mjs +7 -0
- package/dist/src/constants/agentSettled.mjs.map +1 -0
- package/dist/src/constants/contextApi.cjs +3 -1
- package/dist/src/constants/contextApi.cjs.map +1 -1
- package/dist/src/constants/contextApi.d.mts +2 -1
- package/dist/src/constants/contextApi.d.mts.map +1 -1
- package/dist/src/constants/contextApi.mjs +3 -2
- package/dist/src/constants/contextApi.mjs.map +1 -1
- package/dist/src/constants/voiceTools.cjs +6 -6
- package/dist/src/constants/voiceTools.cjs.map +1 -1
- package/dist/src/constants/voiceTools.d.mts +3 -3
- package/dist/src/constants/voiceTools.mjs +4 -4
- package/dist/src/constants/voiceTools.mjs.map +1 -1
- package/dist/src/extensions/extensionFile.cjs +22 -5
- package/dist/src/extensions/extensionFile.cjs.map +1 -1
- package/dist/src/extensions/extensionFile.d.mts +17 -4
- package/dist/src/extensions/extensionFile.d.mts.map +1 -1
- package/dist/src/extensions/extensionFile.mjs +22 -6
- package/dist/src/extensions/extensionFile.mjs.map +1 -1
- package/dist/src/extensions/serverPlugin.cjs +231 -92
- package/dist/src/extensions/serverPlugin.cjs.map +1 -1
- package/dist/src/extensions/serverPlugin.d.mts +2 -2
- package/dist/src/extensions/serverPlugin.d.mts.map +1 -1
- package/dist/src/extensions/serverPlugin.mjs +232 -93
- package/dist/src/extensions/serverPlugin.mjs.map +1 -1
- package/dist/src/pi/piSessionRuntime.cjs +349 -142
- package/dist/src/pi/piSessionRuntime.cjs.map +1 -1
- package/dist/src/pi/piSessionRuntime.d.mts +18 -17
- package/dist/src/pi/piSessionRuntime.d.mts.map +1 -1
- package/dist/src/pi/piSessionRuntime.mjs +342 -135
- package/dist/src/pi/piSessionRuntime.mjs.map +1 -1
- package/dist/src/schemas/agentModel.cjs +2 -2
- package/dist/src/schemas/agentModel.cjs.map +1 -1
- package/dist/src/schemas/agentModel.d.mts +1 -1
- package/dist/src/schemas/agentModel.mjs +2 -2
- package/dist/src/schemas/agentModel.mjs.map +1 -1
- package/dist/src/schemas/apiContracts.d.mts +2 -2
- package/dist/src/schemas/apiContracts.d.mts.map +1 -1
- package/dist/src/schemas/askUser.cjs +4 -4
- package/dist/src/schemas/askUser.cjs.map +1 -1
- package/dist/src/schemas/askUser.d.mts +4 -4
- package/dist/src/schemas/askUser.d.mts.map +1 -1
- package/dist/src/schemas/askUser.mjs +3 -3
- package/dist/src/schemas/askUser.mjs.map +1 -1
- package/dist/src/schemas/backgroundWork.cjs +10 -10
- package/dist/src/schemas/backgroundWork.cjs.map +1 -1
- package/dist/src/schemas/backgroundWork.d.mts +9 -9
- package/dist/src/schemas/backgroundWork.d.mts.map +1 -1
- package/dist/src/schemas/backgroundWork.mjs +8 -8
- package/dist/src/schemas/backgroundWork.mjs.map +1 -1
- package/dist/src/schemas/childProcess.cjs +5 -5
- package/dist/src/schemas/childProcess.cjs.map +1 -1
- package/dist/src/schemas/childProcess.d.mts +2 -2
- package/dist/src/schemas/childProcess.mjs +5 -5
- package/dist/src/schemas/childProcess.mjs.map +1 -1
- package/dist/src/schemas/contextContributions.cjs +10 -10
- package/dist/src/schemas/contextContributions.cjs.map +1 -1
- package/dist/src/schemas/contextContributions.d.mts +16 -16
- package/dist/src/schemas/contextContributions.d.mts.map +1 -1
- package/dist/src/schemas/contextContributions.mjs +8 -8
- package/dist/src/schemas/contextContributions.mjs.map +1 -1
- package/dist/src/schemas/delegation.cjs +17 -17
- package/dist/src/schemas/delegation.cjs.map +1 -1
- package/dist/src/schemas/delegation.d.mts +16 -16
- package/dist/src/schemas/delegation.d.mts.map +1 -1
- package/dist/src/schemas/delegation.mjs +10 -10
- package/dist/src/schemas/delegation.mjs.map +1 -1
- package/dist/src/schemas/extensionFile.d.mts +23 -19
- package/dist/src/schemas/extensionFile.d.mts.map +1 -1
- package/dist/src/schemas/footer.cjs.map +1 -1
- package/dist/src/schemas/footer.d.mts +5 -5
- package/dist/src/schemas/footer.d.mts.map +1 -1
- package/dist/src/schemas/footer.mjs.map +1 -1
- package/dist/src/schemas/headless.cjs +37 -37
- package/dist/src/schemas/headless.cjs.map +1 -1
- package/dist/src/schemas/headless.d.mts +100 -101
- package/dist/src/schemas/headless.d.mts.map +1 -1
- package/dist/src/schemas/headless.mjs +24 -24
- package/dist/src/schemas/headless.mjs.map +1 -1
- package/dist/src/schemas/help.cjs +60 -60
- package/dist/src/schemas/help.cjs.map +1 -1
- package/dist/src/schemas/help.d.mts +43 -43
- package/dist/src/schemas/help.d.mts.map +1 -1
- package/dist/src/schemas/help.mjs +41 -41
- package/dist/src/schemas/help.mjs.map +1 -1
- package/dist/src/schemas/home.cjs +127 -0
- package/dist/src/schemas/home.cjs.map +1 -0
- package/dist/src/schemas/home.d.mts +63 -0
- package/dist/src/schemas/home.d.mts.map +1 -0
- package/dist/src/schemas/home.mjs +121 -0
- package/dist/src/schemas/home.mjs.map +1 -0
- package/dist/src/schemas/httpApiContracts.cjs +441 -0
- package/dist/src/schemas/httpApiContracts.cjs.map +1 -0
- package/dist/src/schemas/httpApiContracts.d.mts +78 -0
- package/dist/src/schemas/httpApiContracts.d.mts.map +1 -0
- package/dist/src/schemas/httpApiContracts.mjs +434 -0
- package/dist/src/schemas/httpApiContracts.mjs.map +1 -0
- package/dist/src/schemas/hubChannel.cjs +3 -0
- package/dist/src/schemas/hubChannel.cjs.map +1 -1
- package/dist/src/schemas/hubChannel.d.mts +84 -60
- package/dist/src/schemas/hubChannel.d.mts.map +1 -1
- package/dist/src/schemas/hubChannel.mjs +3 -1
- package/dist/src/schemas/hubChannel.mjs.map +1 -1
- package/dist/src/schemas/leader.cjs.map +1 -1
- package/dist/src/schemas/leader.d.mts +3 -3
- package/dist/src/schemas/leader.d.mts.map +1 -1
- package/dist/src/schemas/leader.mjs.map +1 -1
- package/dist/src/schemas/mcpBundle.d.mts +3 -3
- package/dist/src/schemas/mcpFacet.cjs.map +1 -1
- package/dist/src/schemas/mcpFacet.d.mts +22 -22
- package/dist/src/schemas/mcpFacet.d.mts.map +1 -1
- package/dist/src/schemas/mcpFacet.mjs.map +1 -1
- package/dist/src/schemas/mcpProjection.cjs +41 -41
- package/dist/src/schemas/mcpProjection.cjs.map +1 -1
- package/dist/src/schemas/mcpProjection.d.mts +31 -30
- package/dist/src/schemas/mcpProjection.d.mts.map +1 -1
- package/dist/src/schemas/mcpProjection.mjs +29 -29
- package/dist/src/schemas/mcpProjection.mjs.map +1 -1
- package/dist/src/schemas/mcpSession.cjs +23 -23
- package/dist/src/schemas/mcpSession.cjs.map +1 -1
- package/dist/src/schemas/mcpSession.d.mts +12 -12
- package/dist/src/schemas/mcpSession.d.mts.map +1 -1
- package/dist/src/schemas/mcpSession.mjs +18 -18
- package/dist/src/schemas/mcpSession.mjs.map +1 -1
- package/dist/src/schemas/mcpStatus.cjs +5 -5
- package/dist/src/schemas/mcpStatus.cjs.map +1 -1
- package/dist/src/schemas/mcpStatus.d.mts +4 -4
- package/dist/src/schemas/mcpStatus.d.mts.map +1 -1
- package/dist/src/schemas/mcpStatus.mjs +4 -4
- package/dist/src/schemas/mcpStatus.mjs.map +1 -1
- package/dist/src/schemas/mcpToolResolver.cjs +9 -9
- package/dist/src/schemas/mcpToolResolver.cjs.map +1 -1
- package/dist/src/schemas/mcpToolResolver.d.mts +7 -7
- package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -1
- package/dist/src/schemas/mcpToolResolver.mjs +7 -7
- package/dist/src/schemas/mcpToolResolver.mjs.map +1 -1
- package/dist/src/schemas/narration.cjs +9 -9
- package/dist/src/schemas/narration.cjs.map +1 -1
- package/dist/src/schemas/narration.d.mts +5 -5
- package/dist/src/schemas/narration.d.mts.map +1 -1
- package/dist/src/schemas/narration.mjs +7 -7
- package/dist/src/schemas/narration.mjs.map +1 -1
- package/dist/src/schemas/notification.cjs +45 -45
- package/dist/src/schemas/notification.cjs.map +1 -1
- package/dist/src/schemas/notification.d.mts +22 -22
- package/dist/src/schemas/notification.d.mts.map +1 -1
- package/dist/src/schemas/notification.mjs +31 -31
- package/dist/src/schemas/notification.mjs.map +1 -1
- package/dist/src/schemas/packageApi.cjs +28 -28
- package/dist/src/schemas/packageApi.cjs.map +1 -1
- package/dist/src/schemas/packageApi.d.mts +91 -65
- package/dist/src/schemas/packageApi.d.mts.map +1 -1
- package/dist/src/schemas/packageApi.mjs +18 -18
- package/dist/src/schemas/packageApi.mjs.map +1 -1
- package/dist/src/schemas/platform.cjs +34 -0
- package/dist/src/schemas/platform.cjs.map +1 -0
- package/dist/src/schemas/platform.d.mts +75 -0
- package/dist/src/schemas/platform.d.mts.map +1 -0
- package/dist/src/schemas/platform.mjs +27 -0
- package/dist/src/schemas/platform.mjs.map +1 -0
- package/dist/src/schemas/pluginContributions.cjs.map +1 -1
- package/dist/src/schemas/pluginContributions.d.mts +12 -12
- package/dist/src/schemas/pluginContributions.d.mts.map +1 -1
- package/dist/src/schemas/pluginContributions.mjs.map +1 -1
- package/dist/src/schemas/pluginProtocol.cjs +24 -27
- package/dist/src/schemas/pluginProtocol.cjs.map +1 -1
- package/dist/src/schemas/pluginProtocol.d.mts +21 -21
- package/dist/src/schemas/pluginProtocol.d.mts.map +1 -1
- package/dist/src/schemas/pluginProtocol.mjs +18 -20
- package/dist/src/schemas/pluginProtocol.mjs.map +1 -1
- package/dist/src/schemas/profileIdentity.cjs +2 -2
- package/dist/src/schemas/profileIdentity.cjs.map +1 -1
- package/dist/src/schemas/profileIdentity.d.mts +1 -1
- package/dist/src/schemas/profileIdentity.mjs +2 -2
- package/dist/src/schemas/profileIdentity.mjs.map +1 -1
- package/dist/src/schemas/protocolChannelsContract.cjs +27 -0
- package/dist/src/schemas/protocolChannelsContract.cjs.map +1 -0
- package/dist/src/schemas/protocolChannelsContract.d.mts +37 -0
- package/dist/src/schemas/protocolChannelsContract.d.mts.map +1 -0
- package/dist/src/schemas/protocolChannelsContract.mjs +25 -0
- package/dist/src/schemas/protocolChannelsContract.mjs.map +1 -0
- package/dist/src/schemas/protocolContracts.cjs +168 -0
- package/dist/src/schemas/protocolContracts.cjs.map +1 -0
- package/dist/src/schemas/protocolContracts.d.mts +69 -0
- package/dist/src/schemas/protocolContracts.d.mts.map +1 -0
- package/dist/src/schemas/protocolContracts.mjs +164 -0
- package/dist/src/schemas/protocolContracts.mjs.map +1 -0
- package/dist/src/schemas/protocolHubContract.cjs +51 -0
- package/dist/src/schemas/protocolHubContract.cjs.map +1 -0
- package/dist/src/schemas/protocolHubContract.d.mts +218 -0
- package/dist/src/schemas/protocolHubContract.d.mts.map +1 -0
- package/dist/src/schemas/protocolHubContract.mjs +49 -0
- package/dist/src/schemas/protocolHubContract.mjs.map +1 -0
- package/dist/src/schemas/protocolSessionContract.cjs +22 -0
- package/dist/src/schemas/protocolSessionContract.cjs.map +1 -0
- package/dist/src/schemas/protocolSessionContract.d.mts +324 -0
- package/dist/src/schemas/protocolSessionContract.d.mts.map +1 -0
- package/dist/src/schemas/protocolSessionContract.mjs +22 -0
- package/dist/src/schemas/protocolSessionContract.mjs.map +1 -0
- package/dist/src/schemas/protocolThreadContract.cjs +21 -0
- package/dist/src/schemas/protocolThreadContract.cjs.map +1 -0
- package/dist/src/schemas/protocolThreadContract.d.mts +29 -0
- package/dist/src/schemas/protocolThreadContract.d.mts.map +1 -0
- package/dist/src/schemas/protocolThreadContract.mjs +20 -0
- package/dist/src/schemas/protocolThreadContract.mjs.map +1 -0
- package/dist/src/schemas/readiness.cjs +36 -36
- package/dist/src/schemas/readiness.cjs.map +1 -1
- package/dist/src/schemas/readiness.d.mts +37 -37
- package/dist/src/schemas/readiness.d.mts.map +1 -1
- package/dist/src/schemas/readiness.mjs +31 -31
- package/dist/src/schemas/readiness.mjs.map +1 -1
- package/dist/src/schemas/serverBundle.d.mts +5 -5
- package/dist/src/schemas/serverPlugin.cjs +103 -0
- package/dist/src/schemas/serverPlugin.cjs.map +1 -0
- package/dist/src/schemas/serverPlugin.d.mts +176 -0
- package/dist/src/schemas/serverPlugin.d.mts.map +1 -0
- package/dist/src/schemas/serverPlugin.mjs +95 -0
- package/dist/src/schemas/serverPlugin.mjs.map +1 -0
- package/dist/src/schemas/serverScope.cjs +37 -0
- package/dist/src/schemas/serverScope.cjs.map +1 -0
- package/dist/src/schemas/serverScope.d.mts +77 -0
- package/dist/src/schemas/serverScope.d.mts.map +1 -0
- package/dist/src/schemas/serverScope.mjs +33 -0
- package/dist/src/schemas/serverScope.mjs.map +1 -0
- package/dist/src/schemas/sessionApiContracts.cjs +320 -0
- package/dist/src/schemas/sessionApiContracts.cjs.map +1 -0
- package/dist/src/schemas/sessionApiContracts.mjs +318 -0
- package/dist/src/schemas/sessionApiContracts.mjs.map +1 -0
- package/dist/src/schemas/sessionProtocol.cjs +20 -13
- package/dist/src/schemas/sessionProtocol.cjs.map +1 -1
- package/dist/src/schemas/sessionProtocol.d.mts +37 -54
- package/dist/src/schemas/sessionProtocol.d.mts.map +1 -1
- package/dist/src/schemas/sessionProtocol.mjs +17 -8
- package/dist/src/schemas/sessionProtocol.mjs.map +1 -1
- package/dist/src/schemas/skills.cjs +16 -16
- package/dist/src/schemas/skills.cjs.map +1 -1
- package/dist/src/schemas/skills.d.mts +7 -7
- package/dist/src/schemas/skills.d.mts.map +1 -1
- package/dist/src/schemas/skills.mjs +12 -12
- package/dist/src/schemas/skills.mjs.map +1 -1
- package/dist/src/schemas/toolOverrides.cjs +9 -9
- package/dist/src/schemas/toolOverrides.cjs.map +1 -1
- package/dist/src/schemas/toolOverrides.d.mts +8 -8
- package/dist/src/schemas/toolOverrides.d.mts.map +1 -1
- package/dist/src/schemas/toolOverrides.mjs +7 -7
- package/dist/src/schemas/toolOverrides.mjs.map +1 -1
- package/dist/src/schemas/toolSurface.cjs +9 -9
- package/dist/src/schemas/toolSurface.cjs.map +1 -1
- package/dist/src/schemas/toolSurface.d.mts +13 -13
- package/dist/src/schemas/toolSurface.d.mts.map +1 -1
- package/dist/src/schemas/toolSurface.mjs +7 -7
- package/dist/src/schemas/toolSurface.mjs.map +1 -1
- package/dist/src/schemas/uiHub.cjs +9 -9
- package/dist/src/schemas/uiHub.cjs.map +1 -1
- package/dist/src/schemas/uiHub.d.mts +12 -12
- package/dist/src/schemas/uiHub.d.mts.map +1 -1
- package/dist/src/schemas/uiHub.mjs +7 -7
- package/dist/src/schemas/uiHub.mjs.map +1 -1
- package/dist/src/server/directHarnessRuntime.cjs +691 -775
- package/dist/src/server/directHarnessRuntime.cjs.map +1 -1
- package/dist/src/server/directHarnessRuntime.d.mts +5 -1
- package/dist/src/server/directHarnessRuntime.d.mts.map +1 -0
- package/dist/src/server/directHarnessRuntime.mjs +671 -754
- package/dist/src/server/directHarnessRuntime.mjs.map +1 -1
- package/dist/src/server/largeFrameLink.cjs +47 -0
- package/dist/src/server/largeFrameLink.cjs.map +1 -0
- package/dist/src/server/largeFrameLink.mjs +47 -0
- package/dist/src/server/largeFrameLink.mjs.map +1 -0
- package/dist/src/server/liveImport.cjs +1 -1
- package/dist/src/server/liveImport.cjs.map +1 -1
- package/dist/src/server/liveImport.d.mts +1 -1
- package/dist/src/server/liveImport.mjs +1 -1
- package/dist/src/server/liveImport.mjs.map +1 -1
- package/dist/src/server/mcpBundleLoader.cjs.map +1 -1
- package/dist/src/server/mcpBundleLoader.d.mts +6 -6
- package/dist/src/server/mcpBundleLoader.d.mts.map +1 -1
- package/dist/src/server/mcpBundleLoader.mjs.map +1 -1
- package/dist/src/server/serverPackages.cjs +60 -0
- package/dist/src/server/serverPackages.cjs.map +1 -0
- package/dist/src/server/serverPackages.d.mts +44 -0
- package/dist/src/server/serverPackages.d.mts.map +1 -0
- package/dist/src/server/serverPackages.mjs +59 -0
- package/dist/src/server/serverPackages.mjs.map +1 -0
- package/dist/src/server/serverScope.cjs +510 -0
- package/dist/src/server/serverScope.cjs.map +1 -0
- package/dist/src/server/serverScope.d.mts +123 -0
- package/dist/src/server/serverScope.d.mts.map +1 -0
- package/dist/src/server/serverScope.mjs +510 -0
- package/dist/src/server/serverScope.mjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.cjs +3 -3
- package/dist/src/server/sessionMcpHandler.cjs.map +1 -1
- package/dist/src/server/sessionMcpHandler.mjs +4 -4
- package/dist/src/server/sessionMcpHandler.mjs.map +1 -1
- package/dist/src/server/sessionMcpRoutes.cjs +2 -1
- package/dist/src/server/sessionMcpRoutes.cjs.map +1 -1
- package/dist/src/server/sessionMcpRoutes.mjs +2 -1
- package/dist/src/server/sessionMcpRoutes.mjs.map +1 -1
- package/dist/src/server/threadJournals.cjs +38 -107
- package/dist/src/server/threadJournals.cjs.map +1 -1
- package/dist/src/server/threadJournals.mjs +38 -104
- package/dist/src/server/threadJournals.mjs.map +1 -1
- package/dist/src/services/apiSurfaceAssert/index.cjs +1 -1
- package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -1
- package/dist/src/services/apiSurfaceAssert/index.d.mts +6 -6
- package/dist/src/services/apiSurfaceAssert/index.mjs +1 -1
- package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -1
- package/dist/src/services/chatgptAuth/index.cjs +1 -220
- package/dist/src/services/chatgptAuth/index.cjs.map +1 -1
- package/dist/src/services/chatgptAuth/index.d.mts +0 -18
- package/dist/src/services/chatgptAuth/index.d.mts.map +1 -1
- package/dist/src/services/chatgptAuth/index.mjs +1 -217
- package/dist/src/services/chatgptAuth/index.mjs.map +1 -1
- package/dist/src/services/chatgptImages/index.cjs +1 -1
- package/dist/src/services/chatgptImages/index.cjs.map +1 -1
- package/dist/src/services/chatgptImages/index.mjs +1 -1
- package/dist/src/services/chatgptImages/index.mjs.map +1 -1
- package/dist/src/services/chatgptLogin/index.cjs +230 -0
- package/dist/src/services/chatgptLogin/index.cjs.map +1 -0
- package/dist/src/services/chatgptLogin/index.d.mts +21 -0
- package/dist/src/services/chatgptLogin/index.d.mts.map +1 -0
- package/dist/src/services/chatgptLogin/index.mjs +227 -0
- package/dist/src/services/chatgptLogin/index.mjs.map +1 -0
- package/dist/src/services/chatgptWebSearch/index.cjs +1 -1
- package/dist/src/services/chatgptWebSearch/index.cjs.map +1 -1
- package/dist/src/services/chatgptWebSearch/index.mjs +1 -1
- package/dist/src/services/chatgptWebSearch/index.mjs.map +1 -1
- package/dist/src/services/contextContributions/index.cjs +8 -8
- package/dist/src/services/contextContributions/index.cjs.map +1 -1
- package/dist/src/services/contextContributions/index.d.mts +3 -3
- package/dist/src/services/contextContributions/index.d.mts.map +1 -1
- package/dist/src/services/contextContributions/index.mjs +8 -8
- package/dist/src/services/contextContributions/index.mjs.map +1 -1
- package/dist/src/services/devProxyStore/devProxyRecords.cjs +59 -0
- package/dist/src/services/devProxyStore/devProxyRecords.cjs.map +1 -0
- package/dist/src/services/devProxyStore/devProxyRecords.mjs +56 -0
- package/dist/src/services/devProxyStore/devProxyRecords.mjs.map +1 -0
- package/dist/src/services/devProxyStore/index.cjs +7 -101
- package/dist/src/services/devProxyStore/index.cjs.map +1 -1
- package/dist/src/services/devProxyStore/index.mjs +7 -101
- package/dist/src/services/devProxyStore/index.mjs.map +1 -1
- package/dist/src/services/devProxyStore/sync.cjs +66 -0
- package/dist/src/services/devProxyStore/sync.cjs.map +1 -0
- package/dist/src/services/devProxyStore/sync.mjs +63 -0
- package/dist/src/services/devProxyStore/sync.mjs.map +1 -0
- package/dist/src/services/durableNavigation/docs.cjs +15 -0
- package/dist/src/services/durableNavigation/docs.cjs.map +1 -0
- package/dist/src/services/durableNavigation/docs.mjs +16 -0
- package/dist/src/services/durableNavigation/docs.mjs.map +1 -0
- package/dist/src/services/durableNavigation/index.cjs +3 -18
- package/dist/src/services/durableNavigation/index.cjs.map +1 -1
- package/dist/src/services/durableNavigation/index.mjs +2 -17
- package/dist/src/services/durableNavigation/index.mjs.map +1 -1
- package/dist/src/services/durableQueue/docs.cjs +12 -0
- package/dist/src/services/durableQueue/docs.cjs.map +1 -0
- package/dist/src/services/durableQueue/docs.mjs +13 -0
- package/dist/src/services/durableQueue/docs.mjs.map +1 -0
- package/dist/src/services/durableQueue/index.cjs +151 -0
- package/dist/src/services/durableQueue/index.cjs.map +1 -0
- package/dist/src/services/durableQueue/index.mjs +149 -0
- package/dist/src/services/durableQueue/index.mjs.map +1 -0
- package/dist/src/services/durableRequestReceipts/docs.cjs +11 -0
- package/dist/src/services/durableRequestReceipts/docs.cjs.map +1 -0
- package/dist/src/services/durableRequestReceipts/docs.mjs +12 -0
- package/dist/src/services/durableRequestReceipts/docs.mjs.map +1 -0
- package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.cjs +10 -16
- package/dist/src/services/durableRequestReceipts/index.cjs.map +1 -0
- package/dist/src/services/durableRequestReceipts/index.d.mts +12 -0
- package/dist/src/services/durableRequestReceipts/index.d.mts.map +1 -0
- package/dist/src/services/{requestReceipts → durableRequestReceipts}/index.mjs +7 -13
- package/dist/src/services/durableRequestReceipts/index.mjs.map +1 -0
- package/dist/src/services/durableSession/docs.cjs +65 -0
- package/dist/src/services/durableSession/docs.cjs.map +1 -0
- package/dist/src/services/durableSession/docs.d.mts +17 -0
- package/dist/src/services/durableSession/docs.d.mts.map +1 -0
- package/dist/src/services/durableSession/docs.mjs +60 -0
- package/dist/src/services/durableSession/docs.mjs.map +1 -0
- package/dist/src/services/durableSession/index.cjs +21 -0
- package/dist/src/services/durableSession/index.cjs.map +1 -0
- package/dist/src/services/durableSession/index.d.mts +13 -0
- package/dist/src/services/durableSession/index.d.mts.map +1 -0
- package/dist/src/services/durableSession/index.mjs +20 -0
- package/dist/src/services/durableSession/index.mjs.map +1 -0
- package/dist/src/services/durableSubagents/docs.cjs +15 -0
- package/dist/src/services/durableSubagents/docs.cjs.map +1 -0
- package/dist/src/services/durableSubagents/docs.mjs +16 -0
- package/dist/src/services/durableSubagents/docs.mjs.map +1 -0
- package/dist/src/services/durableSubagents/extension.cjs +11 -0
- package/dist/src/services/durableSubagents/extension.cjs.map +1 -0
- package/dist/src/services/durableSubagents/extension.mjs +12 -0
- package/dist/src/services/durableSubagents/extension.mjs.map +1 -0
- package/dist/src/services/durableSubagents/index.cjs +95 -0
- package/dist/src/services/durableSubagents/index.cjs.map +1 -0
- package/dist/src/services/durableSubagents/index.mjs +90 -0
- package/dist/src/services/durableSubagents/index.mjs.map +1 -0
- package/dist/src/services/durableSubagents/tasks.cjs +25 -0
- package/dist/src/services/durableSubagents/tasks.cjs.map +1 -0
- package/dist/src/services/durableSubagents/tasks.mjs +26 -0
- package/dist/src/services/durableSubagents/tasks.mjs.map +1 -0
- package/dist/src/services/headlessClient/index.cjs +20 -13
- package/dist/src/services/headlessClient/index.cjs.map +1 -1
- package/dist/src/services/headlessClient/index.mjs +21 -14
- package/dist/src/services/headlessClient/index.mjs.map +1 -1
- package/dist/src/services/historyOwnership/type.d.mts +15 -0
- package/dist/src/services/historyOwnership/type.d.mts.map +1 -0
- package/dist/src/services/hubChannelHarness/index.cjs +2 -2
- package/dist/src/services/hubChannelHarness/index.cjs.map +1 -1
- package/dist/src/services/hubChannelHarness/index.d.mts +8 -8
- package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -1
- package/dist/src/services/hubChannelHarness/index.mjs +2 -2
- package/dist/src/services/hubChannelHarness/index.mjs.map +1 -1
- package/dist/src/services/json/core.cjs +30 -0
- package/dist/src/services/json/core.cjs.map +1 -0
- package/dist/src/services/json/core.d.mts +21 -0
- package/dist/src/services/json/core.d.mts.map +1 -0
- package/dist/src/services/json/core.mjs +26 -0
- package/dist/src/services/json/core.mjs.map +1 -0
- package/dist/src/services/json/sync.cjs +48 -0
- package/dist/src/services/json/sync.cjs.map +1 -0
- package/dist/src/services/json/sync.d.mts +22 -0
- package/dist/src/services/json/sync.d.mts.map +1 -0
- package/dist/src/services/json/sync.mjs +43 -0
- package/dist/src/services/json/sync.mjs.map +1 -0
- package/dist/src/services/kernel/index.cjs +2 -2
- package/dist/src/services/kernel/index.cjs.map +1 -1
- package/dist/src/services/kernel/index.d.mts +3 -3
- package/dist/src/services/kernel/index.d.mts.map +1 -1
- package/dist/src/services/kernel/index.mjs +2 -2
- package/dist/src/services/kernel/index.mjs.map +1 -1
- package/dist/src/services/nativeChildTools/index.cjs +16 -0
- package/dist/src/services/nativeChildTools/index.cjs.map +1 -0
- package/dist/src/services/nativeChildTools/index.mjs +16 -0
- package/dist/src/services/nativeChildTools/index.mjs.map +1 -0
- package/dist/src/services/nodeHost/index.cjs +30 -0
- package/dist/src/services/nodeHost/index.cjs.map +1 -0
- package/dist/src/services/nodeHost/index.d.mts +16 -0
- package/dist/src/services/nodeHost/index.d.mts.map +1 -0
- package/dist/src/services/nodeHost/index.mjs +27 -0
- package/dist/src/services/nodeHost/index.mjs.map +1 -0
- package/dist/src/services/nodeModelDependencies/index.cjs +89 -0
- package/dist/src/services/nodeModelDependencies/index.cjs.map +1 -0
- package/dist/src/services/nodeModelDependencies/index.mjs +86 -0
- package/dist/src/services/nodeModelDependencies/index.mjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.cjs +6 -128
- package/dist/src/services/openSessionRegistry/index.cjs.map +1 -1
- package/dist/src/services/openSessionRegistry/index.d.mts +5 -36
- package/dist/src/services/openSessionRegistry/index.mjs +6 -128
- package/dist/src/services/openSessionRegistry/index.mjs.map +1 -1
- package/dist/src/services/openSessionRegistry/openSessionRecords.cjs +87 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts +30 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.mjs +81 -0
- package/dist/src/services/openSessionRegistry/openSessionRecords.mjs.map +1 -0
- package/dist/src/services/openSessionRegistry/sync.cjs +71 -0
- package/dist/src/services/openSessionRegistry/sync.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/sync.d.mts +14 -0
- package/dist/src/services/openSessionRegistry/sync.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/sync.mjs +68 -0
- package/dist/src/services/openSessionRegistry/sync.mjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.cjs +1 -1
- package/dist/src/services/packageApiHarness/index.cjs.map +1 -1
- package/dist/src/services/packageApiHarness/index.d.mts +6 -6
- package/dist/src/services/packageApiHarness/index.d.mts.map +1 -1
- package/dist/src/services/packageApiHarness/index.mjs +2 -2
- package/dist/src/services/packageApiHarness/index.mjs.map +1 -1
- package/dist/src/services/piArgs/index.cjs +53 -0
- package/dist/src/services/piArgs/index.cjs.map +1 -0
- package/dist/src/services/piArgs/index.d.mts +6 -0
- package/dist/src/services/piArgs/index.d.mts.map +1 -0
- package/dist/src/services/piArgs/index.mjs +53 -0
- package/dist/src/services/piArgs/index.mjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.cjs +47 -39
- package/dist/src/services/piExtensionHost/index.cjs.map +1 -1
- package/dist/src/services/piExtensionHost/index.d.mts +83 -0
- package/dist/src/services/piExtensionHost/index.d.mts.map +1 -0
- package/dist/src/services/piExtensionHost/index.mjs +47 -38
- package/dist/src/services/piExtensionHost/index.mjs.map +1 -1
- package/dist/src/services/piHelpTools/index.cjs +5 -5
- package/dist/src/services/piHelpTools/index.cjs.map +1 -1
- package/dist/src/services/piHelpTools/index.d.mts.map +1 -1
- package/dist/src/services/piHelpTools/index.mjs +7 -7
- package/dist/src/services/piHelpTools/index.mjs.map +1 -1
- package/dist/src/services/piMessages/index.cjs +106 -0
- package/dist/src/services/piMessages/index.cjs.map +1 -0
- package/dist/src/services/piMessages/index.mjs +105 -0
- package/dist/src/services/piMessages/index.mjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.cjs +4 -4
- package/dist/src/services/piSessionEntries/index.cjs.map +1 -1
- package/dist/src/services/piSessionEntries/index.mjs +3 -3
- package/dist/src/services/piSessionEntries/index.mjs.map +1 -1
- package/dist/src/services/piSettings/core.cjs +308 -0
- package/dist/src/services/piSettings/core.cjs.map +1 -0
- package/dist/src/services/piSettings/core.d.mts +102 -0
- package/dist/src/services/piSettings/core.d.mts.map +1 -0
- package/dist/src/services/piSettings/core.mjs +276 -0
- package/dist/src/services/piSettings/core.mjs.map +1 -0
- package/dist/src/services/piSettings/sync.cjs +119 -0
- package/dist/src/services/piSettings/sync.cjs.map +1 -0
- package/dist/src/services/piSettings/sync.d.mts +44 -0
- package/dist/src/services/piSettings/sync.d.mts.map +1 -0
- package/dist/src/services/piSettings/sync.mjs +110 -0
- package/dist/src/services/piSettings/sync.mjs.map +1 -0
- package/dist/src/services/piSummary/index.cjs +7 -0
- package/dist/src/services/piSummary/index.cjs.map +1 -0
- package/dist/src/services/piSummary/index.mjs +7 -0
- package/dist/src/services/piSummary/index.mjs.map +1 -0
- package/dist/src/services/platformFiles/index.cjs +44 -0
- package/dist/src/services/platformFiles/index.cjs.map +1 -0
- package/dist/src/services/platformFiles/index.d.mts +16 -0
- package/dist/src/services/platformFiles/index.d.mts.map +1 -0
- package/dist/src/services/platformFiles/index.mjs +39 -0
- package/dist/src/services/platformFiles/index.mjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.cjs +19 -13
- package/dist/src/services/pluginLifecycle/index.cjs.map +1 -1
- package/dist/src/services/pluginLifecycle/index.d.mts +2 -0
- package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -1
- package/dist/src/services/pluginLifecycle/index.mjs +19 -14
- package/dist/src/services/pluginLifecycle/index.mjs.map +1 -1
- package/dist/src/services/poPackage/core.cjs +73 -0
- package/dist/src/services/poPackage/core.cjs.map +1 -0
- package/dist/src/services/poPackage/core.d.mts +32 -0
- package/dist/src/services/poPackage/core.d.mts.map +1 -0
- package/dist/src/services/poPackage/core.mjs +66 -0
- package/dist/src/services/poPackage/core.mjs.map +1 -0
- package/dist/src/services/poPackage/sync.cjs +55 -0
- package/dist/src/services/poPackage/sync.cjs.map +1 -0
- package/dist/src/services/poPackage/sync.d.mts +21 -0
- package/dist/src/services/poPackage/sync.d.mts.map +1 -0
- package/dist/src/services/poPackage/sync.mjs +50 -0
- package/dist/src/services/poPackage/sync.mjs.map +1 -0
- package/dist/src/services/providerAuth/index.cjs +11 -7
- package/dist/src/services/providerAuth/index.cjs.map +1 -1
- package/dist/src/services/providerAuth/index.mjs +11 -7
- package/dist/src/services/providerAuth/index.mjs.map +1 -1
- package/dist/src/services/publicFileShares/index.cjs +1 -1
- package/dist/src/services/publicFileShares/index.cjs.map +1 -1
- package/dist/src/services/publicFileShares/index.d.mts +2 -2
- package/dist/src/services/publicFileShares/index.mjs +2 -2
- package/dist/src/services/publicFileShares/index.mjs.map +1 -1
- package/dist/src/services/remoteAccess/index.d.mts +1 -0
- package/dist/src/services/remoteAccess/index.d.mts.map +1 -1
- package/dist/src/services/remoteAccessStore/index.cjs +8 -190
- package/dist/src/services/remoteAccessStore/index.cjs.map +1 -1
- package/dist/src/services/remoteAccessStore/index.d.mts +2 -0
- package/dist/src/services/remoteAccessStore/index.mjs +7 -187
- package/dist/src/services/remoteAccessStore/index.mjs.map +1 -1
- package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs +98 -0
- package/dist/src/services/remoteAccessStore/remoteAccessRecords.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs +88 -0
- package/dist/src/services/remoteAccessStore/remoteAccessRecords.mjs.map +1 -0
- package/dist/src/services/remoteAccessStore/sync.cjs +111 -0
- package/dist/src/services/remoteAccessStore/sync.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/sync.mjs +108 -0
- package/dist/src/services/remoteAccessStore/sync.mjs.map +1 -0
- package/dist/src/services/runtimeIdentity/sync.cjs +23 -0
- package/dist/src/services/runtimeIdentity/sync.cjs.map +1 -0
- package/dist/src/services/runtimeIdentity/sync.d.mts +9 -0
- package/dist/src/services/runtimeIdentity/sync.d.mts.map +1 -0
- package/dist/src/services/runtimeIdentity/sync.mjs +20 -0
- package/dist/src/services/runtimeIdentity/sync.mjs.map +1 -0
- package/dist/src/services/serialRunner/index.cjs +25 -0
- package/dist/src/services/serialRunner/index.cjs.map +1 -0
- package/dist/src/services/serialRunner/index.d.mts +10 -0
- package/dist/src/services/serialRunner/index.d.mts.map +1 -0
- package/dist/src/services/serialRunner/index.mjs +25 -0
- package/dist/src/services/serialRunner/index.mjs.map +1 -0
- package/dist/src/services/{serverFacet → serverHost}/index.cjs +5 -5
- package/dist/src/services/serverHost/index.cjs.map +1 -0
- package/dist/src/services/serverHost/index.d.mts +31 -0
- package/dist/src/services/serverHost/index.d.mts.map +1 -0
- package/dist/src/services/{serverFacet → serverHost}/index.mjs +5 -5
- package/dist/src/services/serverHost/index.mjs.map +1 -0
- package/dist/src/services/sessionAttachments/index.cjs +4 -3
- package/dist/src/services/sessionAttachments/index.cjs.map +1 -1
- package/dist/src/services/sessionAttachments/index.d.mts +1 -6
- package/dist/src/services/sessionAttachments/index.d.mts.map +1 -1
- package/dist/src/services/sessionAttachments/index.mjs +3 -2
- package/dist/src/services/sessionAttachments/index.mjs.map +1 -1
- package/dist/src/services/sessionAttachments/type.d.mts +9 -0
- package/dist/src/services/sessionAttachments/type.d.mts.map +1 -0
- package/dist/src/services/sessionFiles/index.cjs +96 -0
- package/dist/src/services/sessionFiles/index.cjs.map +1 -0
- package/dist/src/services/sessionFiles/index.d.mts +33 -0
- package/dist/src/services/sessionFiles/index.d.mts.map +1 -0
- package/dist/src/services/sessionFiles/index.mjs +89 -0
- package/dist/src/services/sessionFiles/index.mjs.map +1 -0
- package/dist/src/services/sessionFiles/sessionDirectory.cjs +66 -0
- package/dist/src/services/sessionFiles/sessionDirectory.cjs.map +1 -0
- package/dist/src/services/sessionFiles/sessionDirectory.mjs +62 -0
- package/dist/src/services/sessionFiles/sessionDirectory.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.cjs +31 -33
- package/dist/src/services/sessionGitStatus/index.cjs.map +1 -1
- package/dist/src/services/sessionGitStatus/index.mjs +31 -33
- package/dist/src/services/sessionGitStatus/index.mjs.map +1 -1
- package/dist/src/services/sessionPresentation/index.cjs +3 -27
- package/dist/src/services/sessionPresentation/index.cjs.map +1 -1
- package/dist/src/services/sessionPresentation/index.mjs +3 -27
- package/dist/src/services/sessionPresentation/index.mjs.map +1 -1
- package/dist/src/services/skillPrompt/index.cjs +11 -0
- package/dist/src/services/skillPrompt/index.cjs.map +1 -0
- package/dist/src/services/skillPrompt/index.mjs +11 -0
- package/dist/src/services/skillPrompt/index.mjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs +44 -30
- package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -1
- package/dist/src/services/sqliteSessionHistory/index.d.mts +7 -4
- package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -1
- package/dist/src/services/sqliteSessionHistory/index.mjs +43 -28
- package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -1
- package/dist/src/services/sqliteTranscriptReader/index.cjs +21 -45
- package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -1
- package/dist/src/services/sqliteTranscriptReader/index.d.mts +3 -2
- package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -1
- package/dist/src/services/sqliteTranscriptReader/index.mjs +16 -38
- package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -1
- package/dist/src/services/testMode/index.cjs +162 -0
- package/dist/src/services/testMode/index.cjs.map +1 -0
- package/dist/src/services/testMode/index.d.mts +17 -0
- package/dist/src/services/testMode/index.d.mts.map +1 -0
- package/dist/src/services/testMode/index.mjs +155 -0
- package/dist/src/services/testMode/index.mjs.map +1 -0
- package/dist/src/services/toolOverrides/index.cjs +6 -6
- package/dist/src/services/toolOverrides/index.cjs.map +1 -1
- package/dist/src/services/toolOverrides/index.d.mts +3 -3
- package/dist/src/services/toolOverrides/index.d.mts.map +1 -1
- package/dist/src/services/toolOverrides/index.mjs +6 -6
- package/dist/src/services/toolOverrides/index.mjs.map +1 -1
- package/dist/src/services/toolPrompt/index.d.mts +17 -0
- package/dist/src/services/toolPrompt/index.d.mts.map +1 -0
- package/dist/src/services/toolSurface/index.cjs +3 -3
- package/dist/src/services/toolSurface/index.cjs.map +1 -1
- package/dist/src/services/toolSurface/index.d.mts +3 -3
- package/dist/src/services/toolSurface/index.d.mts.map +1 -1
- package/dist/src/services/toolSurface/index.mjs +4 -4
- package/dist/src/services/toolSurface/index.mjs.map +1 -1
- package/dist/src/services/traceContext/index.cjs.map +1 -1
- package/dist/src/services/traceContext/index.mjs.map +1 -1
- package/dist/src/services/transcriptPages/index.cjs +159 -33
- package/dist/src/services/transcriptPages/index.cjs.map +1 -1
- package/dist/src/services/transcriptPages/index.mjs +158 -34
- package/dist/src/services/transcriptPages/index.mjs.map +1 -1
- package/dist/src/services/voiceToolsContract/index.cjs +7 -7
- package/dist/src/services/voiceToolsContract/index.cjs.map +1 -1
- package/dist/src/services/voiceToolsContract/index.d.mts +4 -4
- package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -1
- package/dist/src/services/voiceToolsContract/index.mjs +7 -7
- package/dist/src/services/voiceToolsContract/index.mjs.map +1 -1
- package/dist/src/services/workspaceRegistry/index.cjs +9 -179
- package/dist/src/services/workspaceRegistry/index.cjs.map +1 -1
- package/dist/src/services/workspaceRegistry/index.d.mts +5 -47
- package/dist/src/services/workspaceRegistry/index.mjs +7 -176
- package/dist/src/services/workspaceRegistry/index.mjs.map +1 -1
- package/dist/src/services/workspaceRegistry/sync.cjs +148 -0
- package/dist/src/services/workspaceRegistry/sync.cjs.map +1 -0
- package/dist/src/services/workspaceRegistry/sync.d.mts +34 -0
- package/dist/src/services/workspaceRegistry/sync.d.mts.map +1 -0
- package/dist/src/services/workspaceRegistry/sync.mjs +140 -0
- package/dist/src/services/workspaceRegistry/sync.mjs.map +1 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.cjs +114 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.cjs.map +1 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts +31 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.d.mts.map +1 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.mjs +101 -0
- package/dist/src/services/workspaceRegistry/workspaceRecords.mjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +339 -202
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -1
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +16 -21
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -1
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +329 -191
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -1
- package/dist/src/systems/child/services/childSession/index.cjs +94 -20
- package/dist/src/systems/child/services/childSession/index.cjs.map +1 -1
- package/dist/src/systems/child/services/childSession/index.d.mts +12 -3
- package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -1
- package/dist/src/systems/child/services/childSession/index.mjs +94 -20
- package/dist/src/systems/child/services/childSession/index.mjs.map +1 -1
- package/dist/src/systems/child/types/childSession.cjs +33 -13
- package/dist/src/systems/child/types/childSession.cjs.map +1 -1
- package/dist/src/systems/child/types/childSession.d.mts +143 -80
- package/dist/src/systems/child/types/childSession.d.mts.map +1 -1
- package/dist/src/systems/child/types/childSession.mjs +24 -9
- package/dist/src/systems/child/types/childSession.mjs.map +1 -1
- package/dist/src/systems/main/adapters/headlessHost.cjs +30 -27
- package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -1
- package/dist/src/systems/main/adapters/headlessHost.d.mts +22 -22
- package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -1
- package/dist/src/systems/main/adapters/headlessHost.mjs +33 -30
- package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -1
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs +248 -229
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -1
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +4 -5
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -1
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs +239 -219
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -1
- package/dist/src/systems/main/types/headlessHost.d.mts +16 -14
- package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -1
- package/dist/src/testing/pi/testHost.cjs +2 -2
- package/dist/src/testing/pi/testHost.cjs.map +1 -1
- package/dist/src/testing/pi/testHost.d.mts +3 -2
- package/dist/src/testing/pi/testHost.mjs +3 -3
- package/dist/src/testing/pi/testHost.mjs.map +1 -1
- package/dist/src/types/config.d.mts +1 -1
- package/dist/src/types/config.d.mts.map +1 -1
- package/dist/src/types/kernel.d.mts +3 -3
- package/dist/src/types/server/directHarnessRuntime.d.mts +54 -25
- package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -1
- package/dist/src/types/server/sessionToolSurface.d.mts +9 -9
- package/dist/src/web/services/apiClient/index.d.mts +1 -0
- package/dist/src/web/services/apiPaths/index.cjs.map +1 -1
- package/dist/src/web/services/apiPaths/index.d.mts +1 -1
- package/dist/src/web/services/apiPaths/index.mjs.map +1 -1
- package/dist/src/web/services/mcpWidget.cjs.map +1 -1
- package/dist/src/web/services/mcpWidget.d.mts +2 -2
- package/dist/src/web/services/mcpWidget.d.mts.map +1 -1
- package/dist/src/web/services/mcpWidget.mjs.map +1 -1
- package/dist/src/web/services/testing/templateRail.cjs +3 -0
- package/dist/src/web/services/testing/templateRail.cjs.map +1 -1
- package/dist/src/web/services/testing/templateRail.mjs +3 -0
- package/dist/src/web/services/testing/templateRail.mjs.map +1 -1
- package/dist/src/web/types/mcpWidget.d.mts +1 -1
- package/dist/src/web/types/nativeTemplate.d.mts +1 -1
- package/dist/src/web/types/nativeTemplate.d.mts.map +1 -1
- package/dist/src/web/types/template.d.mts +8 -0
- package/dist/src/web/types/template.d.mts.map +1 -1
- package/dist/src/web/types/webPlugin.d.mts +17 -5
- package/dist/src/web/types/webPlugin.d.mts.map +1 -1
- package/dist/testMode.cjs +4 -0
- package/dist/testMode.d.mts +2 -0
- package/dist/testMode.mjs +1 -0
- package/dist/testing.cjs +1 -1
- package/dist/testing.d.mts +2 -2
- package/dist/testing.mjs +2 -2
- package/dist/toolInventory.cjs.map +1 -1
- package/dist/toolInventory.mjs.map +1 -1
- package/dist/toolNames.mjs +1 -2
- package/dist/toolOverrides.cjs +4 -4
- package/dist/toolOverrides.d.mts +3 -3
- package/dist/toolOverrides.mjs +3 -3
- package/dist/toolSurface.cjs +4 -4
- package/dist/toolSurface.d.mts +3 -3
- package/dist/toolSurface.mjs +3 -3
- package/dist/transition.cjs +3 -3
- package/dist/transition.d.cjs +3 -3
- package/dist/transition.d.mts +2 -2
- package/dist/transition.mjs +1 -2
- package/dist/transitionClassifier.cjs.map +1 -1
- package/dist/transitionClassifier.d.mts +2 -2
- package/dist/transitionClassifier.d.mts.map +1 -1
- package/dist/transitionClassifier.mjs.map +1 -1
- package/dist/transitionCoordinator.cjs +3 -3
- package/dist/transitionCoordinator.cjs.map +1 -1
- package/dist/transitionCoordinator.d.mts +4 -4
- package/dist/transitionCoordinator.d.mts.map +1 -1
- package/dist/transitionCoordinator.mjs +3 -3
- package/dist/transitionCoordinator.mjs.map +1 -1
- package/dist/typesContextApi.d.mts +2 -1
- package/dist/typesContextApi.d.mts.map +1 -1
- package/dist/uiHub.cjs +3 -3
- package/dist/uiHub.d.mts +2 -2
- package/dist/uiHub.mjs +1 -2
- package/dist/voiceTools.cjs +5 -5
- package/dist/voiceTools.d.mts +3 -3
- package/dist/voiceTools.mjs +3 -3
- package/dist/web.cjs +8 -0
- package/dist/web.d.mts +3 -2
- package/dist/web.mjs +2 -1
- package/dist/webCompositions.cjs.map +1 -1
- package/dist/webCompositions.d.mts +7 -7
- package/dist/webCompositions.d.mts.map +1 -1
- package/dist/webCompositions.mjs.map +1 -1
- package/licenses/Codex-Apache-2.0.txt +201 -0
- package/package.json +58 -53
- package/dist/doomPackage.cjs +0 -61
- package/dist/doomPackage.cjs.map +0 -1
- package/dist/doomPackage.d.mts +0 -17
- package/dist/doomPackage.d.mts.map +0 -1
- package/dist/doomPackage.mjs +0 -54
- package/dist/doomPackage.mjs.map +0 -1
- package/dist/jsonlSessionRepo.cjs +0 -44
- package/dist/jsonlSessionRepo.cjs.map +0 -1
- package/dist/jsonlSessionRepo.d.mts +0 -7
- package/dist/jsonlSessionRepo.d.mts.map +0 -1
- package/dist/jsonlSessionRepo.mjs +0 -42
- package/dist/jsonlSessionRepo.mjs.map +0 -1
- package/dist/runtimeJson.cjs.map +0 -1
- package/dist/runtimeJson.d.mts.map +0 -1
- package/dist/runtimeJson.mjs.map +0 -1
- package/dist/runtimePiSettings.cjs.map +0 -1
- package/dist/runtimePiSettings.d.mts.map +0 -1
- package/dist/runtimePiSettings.mjs.map +0 -1
- package/dist/serverFacet.cjs +0 -34
- package/dist/serverFacet.d.mts +0 -10
- package/dist/serverFacet.mjs +0 -9
- package/dist/src/pi/piWebSocketListener.cjs +0 -115
- package/dist/src/pi/piWebSocketListener.cjs.map +0 -1
- package/dist/src/pi/piWebSocketListener.mjs +0 -115
- package/dist/src/pi/piWebSocketListener.mjs.map +0 -1
- package/dist/src/schemas/serverFacet.cjs +0 -111
- package/dist/src/schemas/serverFacet.cjs.map +0 -1
- package/dist/src/schemas/serverFacet.d.mts +0 -152
- package/dist/src/schemas/serverFacet.d.mts.map +0 -1
- package/dist/src/schemas/serverFacet.mjs +0 -101
- package/dist/src/schemas/serverFacet.mjs.map +0 -1
- package/dist/src/schemas/sessionUpdates.d.mts +0 -34
- package/dist/src/schemas/sessionUpdates.d.mts.map +0 -1
- package/dist/src/server/headlessProtocol.cjs +0 -382
- package/dist/src/server/headlessProtocol.cjs.map +0 -1
- package/dist/src/server/headlessProtocol.mjs +0 -382
- package/dist/src/server/headlessProtocol.mjs.map +0 -1
- package/dist/src/server/nativeChildTranscriptReader.cjs +0 -20
- package/dist/src/server/nativeChildTranscriptReader.cjs.map +0 -1
- package/dist/src/server/nativeChildTranscriptReader.mjs +0 -18
- package/dist/src/server/nativeChildTranscriptReader.mjs.map +0 -1
- package/dist/src/server/serverFacetLoader.cjs +0 -214
- package/dist/src/server/serverFacetLoader.cjs.map +0 -1
- package/dist/src/server/serverFacetLoader.d.mts +0 -72
- package/dist/src/server/serverFacetLoader.d.mts.map +0 -1
- package/dist/src/server/serverFacetLoader.mjs +0 -212
- package/dist/src/server/serverFacetLoader.mjs.map +0 -1
- package/dist/src/services/acpSessionUpdates/index.cjs +0 -129
- package/dist/src/services/acpSessionUpdates/index.cjs.map +0 -1
- package/dist/src/services/acpSessionUpdates/index.mjs +0 -129
- package/dist/src/services/acpSessionUpdates/index.mjs.map +0 -1
- package/dist/src/services/historyImport/index.cjs +0 -8
- package/dist/src/services/historyImport/index.cjs.map +0 -1
- package/dist/src/services/historyImport/index.d.mts +0 -68
- package/dist/src/services/historyImport/index.d.mts.map +0 -1
- package/dist/src/services/historyImport/index.mjs +0 -8
- package/dist/src/services/historyImport/index.mjs.map +0 -1
- package/dist/src/services/openSessionRegistry/index.d.mts.map +0 -1
- package/dist/src/services/requestReceipts/index.cjs.map +0 -1
- package/dist/src/services/requestReceipts/index.d.mts +0 -11
- package/dist/src/services/requestReceipts/index.d.mts.map +0 -1
- package/dist/src/services/requestReceipts/index.mjs.map +0 -1
- package/dist/src/services/rpcTranscript/index.cjs +0 -633
- package/dist/src/services/rpcTranscript/index.cjs.map +0 -1
- package/dist/src/services/rpcTranscript/index.d.mts +0 -50
- package/dist/src/services/rpcTranscript/index.d.mts.map +0 -1
- package/dist/src/services/rpcTranscript/index.mjs +0 -632
- package/dist/src/services/rpcTranscript/index.mjs.map +0 -1
- package/dist/src/services/serverFacet/index.cjs.map +0 -1
- package/dist/src/services/serverFacet/index.d.mts +0 -31
- package/dist/src/services/serverFacet/index.d.mts.map +0 -1
- package/dist/src/services/serverFacet/index.mjs.map +0 -1
- package/dist/src/services/workspaceRegistry/index.d.mts.map +0 -1
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +0 -28
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +0 -1
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +0 -25
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +0 -1
- package/dist/terminalPiChildSessionService.cjs +0 -324
- package/dist/terminalPiChildSessionService.cjs.map +0 -1
- package/dist/terminalPiChildSessionService.d.mts +0 -46
- package/dist/terminalPiChildSessionService.d.mts.map +0 -1
- package/dist/terminalPiChildSessionService.mjs +0 -318
- package/dist/terminalPiChildSessionService.mjs.map +0 -1
- package/dist/v3Export.cjs +0 -10
- package/dist/v3Export.cjs.map +0 -1
- package/dist/v3Export.d.mts +0 -35
- package/dist/v3Export.d.mts.map +0 -1
- package/dist/v3Export.mjs +0 -9
- package/dist/v3Export.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["path","fs","crypto"],"sources":["../../../../src/services/workspaceRegistry/index.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst REGISTRY_FILE = 'workspaces.json';\nconst GIT_DIRECTORY = '.git';\nconst COMMON_DIRECTORY_FILE = 'commondir';\n\nfunction canonicalPath(target: string): string {\n const absolute = path.resolve(target);\n try {\n return fs.realpathSync.native(absolute);\n } catch {\n const parent = path.dirname(absolute);\n if (parent === absolute) return absolute;\n return path.join(canonicalPath(parent), path.basename(absolute));\n }\n}\n\nfunction readGitDirectory(repositoryRoot: string): string | undefined {\n const gitPath = path.join(repositoryRoot, GIT_DIRECTORY);\n try {\n const stat = fs.statSync(gitPath);\n if (stat.isDirectory()) return canonicalPath(gitPath);\n if (!stat.isFile()) return undefined;\n const match = /^gitdir:\\s*(.+)$/imu.exec(fs.readFileSync(gitPath, 'utf8').trim());\n return match?.[1] ? canonicalPath(path.resolve(repositoryRoot, match[1].trim())) : undefined;\n } catch {\n // Not a git checkout, or one this process cannot read: it has no git data to share.\n return undefined;\n }\n}\n\n/** The git data directory shared by every worktree of a repository, if the root is a git checkout. */\nexport function gitCommonDirectory(repositoryRoot: string): string | undefined {\n const gitDirectory = readGitDirectory(repositoryRoot);\n if (!gitDirectory) return undefined;\n try {\n const relative = fs.readFileSync(path.join(gitDirectory, COMMON_DIRECTORY_FILE), 'utf8').trim();\n return relative ? canonicalPath(path.resolve(gitDirectory, relative)) : gitDirectory;\n } catch {\n // A plain checkout has no commondir file; its own git directory is the common one.\n return gitDirectory;\n }\n}\n/** Kept in the repository's git data, which moves with the checkout and is shared by its worktrees. */\nconst WORKSPACE_MARKER_FILE = 'po-workspace-id';\nconst DIRECTORY_MODE = 0o700;\nconst FILE_MODE = 0o600;\n\nexport interface WorkspaceRecord {\n id: string;\n root: string;\n /** Display name chosen when the workspace was added; the folder basename stands in when absent. */\n name?: string;\n}\n\nexport interface WorkspaceRegistry {\n list(): readonly WorkspaceRecord[];\n add(record: WorkspaceRecord): void;\n remove(id: string): void;\n}\n\nexport interface WorkspaceRegistryOptions {\n directory: string;\n onNotice?: (message: string) => void;\n}\n\nfunction parseRecord(value: unknown): WorkspaceRecord | undefined {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n if (typeof record.id !== 'string' || record.id === '') return undefined;\n if (typeof record.root !== 'string' || !path.isAbsolute(record.root)) return undefined;\n const name = typeof record.name === 'string' && record.name.trim() !== '' ? record.name : undefined;\n return { id: record.id, root: record.root, ...(name === undefined ? {} : { name }) };\n}\n\n/** Durable workspace membership, independent of whether a workspace can currently mount. */\nexport function createWorkspaceRegistry(options: WorkspaceRegistryOptions): WorkspaceRegistry {\n const notice = options.onNotice ?? ((): void => {});\n const filePath = path.join(options.directory, REGISTRY_FILE);\n\n const load = (): WorkspaceRecord[] => {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return [];\n notice(`${filePath} could not be read: ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n notice(`workspaces at ${filePath} are not valid JSON; none will be restored`);\n return [];\n }\n if (!Array.isArray(parsed)) {\n notice(`workspaces at ${filePath} are not a list; none will be restored`);\n return [];\n }\n const records: WorkspaceRecord[] = [];\n for (const entry of parsed) {\n const record = parseRecord(entry);\n if (record === undefined) notice(`workspaces at ${filePath} contain an unusable entry; skipping it`);\n else if (!records.some((candidate) => candidate.id === record.id)) records.push(record);\n }\n return records;\n };\n\n let current = load();\n\n const persist = (next: readonly WorkspaceRecord[]): void => {\n const temporary = `${filePath}.${String(process.pid)}.tmp`;\n try {\n fs.mkdirSync(options.directory, { recursive: true, mode: DIRECTORY_MODE });\n fs.writeFileSync(temporary, `${JSON.stringify(next, undefined, 2)}\\n`, { mode: FILE_MODE });\n fs.renameSync(temporary, filePath);\n } catch (error) {\n try {\n fs.rmSync(temporary, { force: true });\n } catch (cleanupError) {\n notice(\n `${temporary} could not be removed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`,\n );\n }\n throw new Error(`${filePath} could not be saved`, { cause: error });\n }\n };\n\n return {\n list: () => current,\n // Each write starts from the file, not from memory: another process (a sync, a second\n // server) may have changed it since this one last read, and its entries must survive.\n add(record) {\n if (record.id === '' || !path.isAbsolute(record.root)) throw new Error('Invalid workspace record.');\n const latest = load();\n // Replaced in place: registry order is the tie-break when checkouts are matched to workspaces.\n const next = latest.some((held) => held.id === record.id)\n ? latest.map((held) => (held.id === record.id ? record : held))\n : [...latest, record];\n persist(next);\n current = next;\n },\n remove(id) {\n const latest = load();\n const next = latest.filter((held) => held.id !== id);\n if (next.length !== latest.length) persist(next);\n current = next;\n },\n };\n}\n\n/** The workspace id recorded in a checkout's git data, if any. */\nexport function readWorkspaceMarker(checkoutRoot: string): string | undefined {\n const commonDirectory = gitCommonDirectory(checkoutRoot);\n if (commonDirectory === undefined) return undefined;\n try {\n const id = fs.readFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), 'utf8').trim();\n return id === '' ? undefined : id;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return undefined;\n throw error;\n }\n}\n\n/**\n * Records a workspace id in a checkout's git data so the workspace keeps its id when the\n * repository moves. A checkout without git data has nowhere to keep it; returns false.\n */\nexport function writeWorkspaceMarker(checkoutRoot: string, id: string): boolean {\n const commonDirectory = gitCommonDirectory(checkoutRoot);\n if (commonDirectory === undefined) return false;\n fs.writeFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), `${id}\\n`, { mode: FILE_MODE });\n return true;\n}\n\nexport interface WorkspaceIdentity {\n readonly id: string;\n /** The workspace root. Differs from the checkout when the checkout joins an existing workspace. */\n readonly root: string;\n /** The recorded root no longer exists and this checkout takes its place. */\n readonly moved: boolean;\n}\n\n/**\n * Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id\n * in the repository's git data names the workspace: a checkout of a workspace whose root still\n * exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else\n * is a new workspace.\n */\nexport function identifyWorkspace(input: {\n readonly records: readonly WorkspaceRecord[];\n readonly checkoutRoot: string;\n readonly marker?: string;\n readonly exists?: (root: string) => boolean;\n readonly newId?: () => string;\n}): WorkspaceIdentity {\n const exact = input.records.find((record) => record.root === input.checkoutRoot);\n if (exact !== undefined) return { id: exact.id, root: exact.root, moved: false };\n const owner = input.marker === undefined ? undefined : input.records.find((record) => record.id === input.marker);\n if (owner !== undefined) {\n const exists = input.exists ?? fs.existsSync;\n return exists(owner.root)\n ? { id: owner.id, root: owner.root, moved: false }\n : { id: owner.id, root: input.checkoutRoot, moved: true };\n }\n return { id: input.marker ?? (input.newId ?? crypto.randomUUID)(), root: input.checkoutRoot, moved: false };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["createSerialRunner"],"sources":["../../../../src/services/workspaceRegistry/index.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport path from 'node:path';\n\nimport type { Context } from '@earendil-works/chord';\nimport { getOrThrow, type FileSystem } from '@earendil-works/pi-durable/env';\n\nimport { nodeHost } from '../nodeHost';\nimport { readTextIfExists, writeFileAtomic } from '../platformFiles';\nimport { createSerialRunner } from '../serialRunner';\nimport {\n assertWorkspaceRecord,\n COMMON_DIRECTORY_FILE,\n DIRECTORY_MODE,\n FILE_MODE,\n GIT_DIRECTORY,\n gitFileTarget,\n matchWorkspace,\n parseWorkspaceMarker,\n parseWorkspaceRecords,\n REGISTRY_FILE,\n resolveWorkspaceIdentity,\n serializeWorkspaceRecords,\n withWorkspaceRecord,\n WORKSPACE_MARKER_FILE,\n type WorkspaceIdentity,\n type WorkspaceIdentityInput,\n type WorkspaceRecord,\n type WorkspaceRegistryOptions,\n} from './workspaceRecords';\n\nexport type {\n WorkspaceIdentity,\n WorkspaceIdentityInput,\n WorkspaceRecord,\n WorkspaceRegistry,\n WorkspaceRegistryOptions,\n} from './workspaceRecords';\nexport {\n createWorkspaceRegistry,\n gitCommonDirectory,\n identifyWorkspace,\n readWorkspaceMarker,\n writeWorkspaceMarker,\n} from './sync';\n\n/** One queue per registry file, so concurrent read-modify-write cycles in this process never interleave. */\nconst registryWrites = createSerialRunner();\n\nexport interface WorkspaceRegistryAsync {\n list(): readonly WorkspaceRecord[];\n add(record: WorkspaceRecord): Promise<void>;\n remove(id: string): Promise<void>;\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nasync function canonicalPathAsync(fs: FileSystem, target: string, context: Context): Promise<string> {\n const absolute = path.resolve(target);\n const resolved = await fs.canonicalPath(absolute, context);\n if (resolved.ok) return resolved.value;\n const parent = path.dirname(absolute);\n if (parent === absolute) return absolute;\n return path.join(await canonicalPathAsync(fs, parent, context), path.basename(absolute));\n}\n\nasync function readGitDirectoryAsync(\n fs: FileSystem,\n repositoryRoot: string,\n context: Context,\n): Promise<string | undefined> {\n const gitPath = path.join(repositoryRoot, GIT_DIRECTORY);\n try {\n // fileInfo does not follow links; the canonical path does, as statSync did.\n const info = await fs.fileInfo(await canonicalPathAsync(fs, gitPath, context), context);\n if (!info.ok) return undefined;\n if (info.value.kind === 'directory') return await canonicalPathAsync(fs, gitPath, context);\n if (info.value.kind !== 'file') return undefined;\n const content = await fs.readTextFile(gitPath, context);\n if (!content.ok) return undefined;\n const target = gitFileTarget(repositoryRoot, content.value);\n return target === undefined ? undefined : await canonicalPathAsync(fs, target, context);\n } catch {\n // Not a git checkout, or one this process cannot read: it has no git data to share.\n return undefined;\n }\n}\n\n/** The git data directory shared by every worktree of a repository, if the root is a git checkout. */\nexport async function gitCommonDirectoryAsync(\n fs: FileSystem,\n repositoryRoot: string,\n context: Context,\n): Promise<string | undefined> {\n const gitDirectory = await readGitDirectoryAsync(fs, repositoryRoot, context);\n if (!gitDirectory) return undefined;\n const content = await fs.readTextFile(path.join(gitDirectory, COMMON_DIRECTORY_FILE), context);\n // A plain checkout has no commondir file; its own git directory is the common one.\n if (!content.ok) return gitDirectory;\n const relative = content.value.trim();\n return relative ? canonicalPathAsync(fs, path.resolve(gitDirectory, relative), context) : gitDirectory;\n}\n\n/**\n * Durable workspace membership, independent of whether a workspace can currently mount.\n * Writes in this process serialise per registry file and publish through a uniquely named\n * temporary file, so concurrent adds and removes never lose an entry or tear the file.\n */\nexport async function createWorkspaceRegistryAsync(\n fs: FileSystem,\n options: WorkspaceRegistryOptions,\n context: Context,\n): Promise<WorkspaceRegistryAsync> {\n const notice = options.onNotice ?? ((): void => {});\n const filePath = path.join(options.directory, REGISTRY_FILE);\n const serial = registryWrites.forKey(filePath);\n\n const load = async (): Promise<WorkspaceRecord[]> => {\n let raw: string | undefined;\n try {\n raw = await readTextIfExists(fs, filePath, context);\n } catch (error) {\n notice(`${filePath} could not be read: ${errorText(error)}`);\n return [];\n }\n return raw === undefined ? [] : parseWorkspaceRecords(raw, filePath, notice);\n };\n\n let current = await load();\n\n const persist = async (next: readonly WorkspaceRecord[]): Promise<void> => {\n try {\n const existed = getOrThrow(await fs.exists(options.directory, context));\n if (!existed) {\n getOrThrow(await fs.createDir(options.directory, { recursive: true }, context));\n await nodeHost.setMode(options.directory, DIRECTORY_MODE);\n }\n await writeFileAtomic(fs, filePath, serializeWorkspaceRecords(next), context);\n await nodeHost.setMode(filePath, FILE_MODE);\n } catch (error) {\n throw new Error(`${filePath} could not be saved`, { cause: error });\n }\n };\n\n return {\n list: () => current,\n // Each write starts from the file, not from memory: another process (a sync, a second\n // server) may have changed it since this one last read, and its entries must survive.\n add: (record) =>\n serial(async () => {\n assertWorkspaceRecord(record);\n const next = withWorkspaceRecord(await load(), record);\n await persist(next);\n current = next;\n }),\n remove: (id) =>\n serial(async () => {\n const latest = await load();\n const next = latest.filter((held) => held.id !== id);\n if (next.length !== latest.length) await persist(next);\n current = next;\n }),\n };\n}\n\n/** The workspace id recorded in a checkout's git data, if any. */\nexport async function readWorkspaceMarkerAsync(\n fs: FileSystem,\n checkoutRoot: string,\n context: Context,\n): Promise<string | undefined> {\n const commonDirectory = await gitCommonDirectoryAsync(fs, checkoutRoot, context);\n if (commonDirectory === undefined) return undefined;\n const content = await readTextIfExists(fs, path.join(commonDirectory, WORKSPACE_MARKER_FILE), context);\n return content === undefined ? undefined : parseWorkspaceMarker(content);\n}\n\n/**\n * Records a workspace id in a checkout's git data so the workspace keeps its id when the\n * repository moves. A checkout without git data has nowhere to keep it; returns false.\n */\nexport async function writeWorkspaceMarkerAsync(\n fs: FileSystem,\n checkoutRoot: string,\n id: string,\n context: Context,\n): Promise<boolean> {\n const commonDirectory = await gitCommonDirectoryAsync(fs, checkoutRoot, context);\n if (commonDirectory === undefined) return false;\n const markerPath = path.join(commonDirectory, WORKSPACE_MARKER_FILE);\n getOrThrow(await fs.writeFile(markerPath, `${id}\\n`, context));\n await nodeHost.setMode(markerPath, FILE_MODE);\n return true;\n}\n\n/**\n * Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id\n * in the repository's git data names the workspace: a checkout of a workspace whose root still\n * exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else\n * is a new workspace.\n */\nexport async function identifyWorkspaceAsync(\n fs: FileSystem,\n input: WorkspaceIdentityInput,\n context: Context,\n): Promise<WorkspaceIdentity> {\n const match = matchWorkspace(input);\n const ownerExists = match?.kind === 'owner' && getOrThrow(await fs.exists(match.record.root, context));\n return resolveWorkspaceIdentity(input, match, ownerExists, crypto.randomUUID);\n}\n"],"mappings":";;;;;;;;;AA8CuBA,gBAAAA,mBAAmB"}
|
|
@@ -1,47 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
name?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface WorkspaceRegistry {
|
|
9
|
-
list(): readonly WorkspaceRecord[];
|
|
10
|
-
add(record: WorkspaceRecord): void;
|
|
11
|
-
remove(id: string): void;
|
|
12
|
-
}
|
|
13
|
-
export interface WorkspaceRegistryOptions {
|
|
14
|
-
directory: string;
|
|
15
|
-
onNotice?: (message: string) => void;
|
|
16
|
-
}
|
|
17
|
-
/** Durable workspace membership, independent of whether a workspace can currently mount. */
|
|
18
|
-
export declare function createWorkspaceRegistry(options: WorkspaceRegistryOptions): WorkspaceRegistry;
|
|
19
|
-
/** The workspace id recorded in a checkout's git data, if any. */
|
|
20
|
-
export declare function readWorkspaceMarker(checkoutRoot: string): string | undefined;
|
|
21
|
-
/**
|
|
22
|
-
* Records a workspace id in a checkout's git data so the workspace keeps its id when the
|
|
23
|
-
* repository moves. A checkout without git data has nowhere to keep it; returns false.
|
|
24
|
-
*/
|
|
25
|
-
export declare function writeWorkspaceMarker(checkoutRoot: string, id: string): boolean;
|
|
26
|
-
export interface WorkspaceIdentity {
|
|
27
|
-
readonly id: string;
|
|
28
|
-
/** The workspace root. Differs from the checkout when the checkout joins an existing workspace. */
|
|
29
|
-
readonly root: string;
|
|
30
|
-
/** The recorded root no longer exists and this checkout takes its place. */
|
|
31
|
-
readonly moved: boolean;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id
|
|
35
|
-
* in the repository's git data names the workspace: a checkout of a workspace whose root still
|
|
36
|
-
* exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else
|
|
37
|
-
* is a new workspace.
|
|
38
|
-
*/
|
|
39
|
-
export declare function identifyWorkspace(input: {
|
|
40
|
-
readonly records: readonly WorkspaceRecord[];
|
|
41
|
-
readonly checkoutRoot: string;
|
|
42
|
-
readonly marker?: string;
|
|
43
|
-
readonly exists?: (root: string) => boolean;
|
|
44
|
-
readonly newId?: () => string;
|
|
45
|
-
}): WorkspaceIdentity;
|
|
46
|
-
//#endregion
|
|
47
|
-
//# sourceMappingURL=index.d.mts.map
|
|
1
|
+
import { WorkspaceIdentity, WorkspaceIdentityInput, WorkspaceRecord, WorkspaceRegistry, WorkspaceRegistryOptions } from "./workspaceRecords.mjs";
|
|
2
|
+
import { createWorkspaceRegistry, identifyWorkspace, readWorkspaceMarker, writeWorkspaceMarker } from "./sync.mjs";
|
|
3
|
+
import { FileSystem } from "@earendil-works/pi-durable/env";
|
|
4
|
+
import { Context } from "@earendil-works/chord";
|
|
5
|
+
export { type WorkspaceIdentity, type WorkspaceRecord, type WorkspaceRegistry, type WorkspaceRegistryOptions, createWorkspaceRegistry, identifyWorkspace, readWorkspaceMarker, writeWorkspaceMarker };
|
|
@@ -1,179 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
//#region src/services/workspaceRegistry/index.ts
|
|
5
|
-
const REGISTRY_FILE = "workspaces.json";
|
|
6
|
-
const GIT_DIRECTORY = ".git";
|
|
7
|
-
const COMMON_DIRECTORY_FILE = "commondir";
|
|
8
|
-
function canonicalPath(target) {
|
|
9
|
-
const absolute = path.resolve(target);
|
|
10
|
-
try {
|
|
11
|
-
return fs.realpathSync.native(absolute);
|
|
12
|
-
} catch {
|
|
13
|
-
const parent = path.dirname(absolute);
|
|
14
|
-
if (parent === absolute) return absolute;
|
|
15
|
-
return path.join(canonicalPath(parent), path.basename(absolute));
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
function readGitDirectory(repositoryRoot) {
|
|
19
|
-
const gitPath = path.join(repositoryRoot, GIT_DIRECTORY);
|
|
20
|
-
try {
|
|
21
|
-
const stat = fs.statSync(gitPath);
|
|
22
|
-
if (stat.isDirectory()) return canonicalPath(gitPath);
|
|
23
|
-
if (!stat.isFile()) return void 0;
|
|
24
|
-
const match = /^gitdir:\s*(.+)$/imu.exec(fs.readFileSync(gitPath, "utf8").trim());
|
|
25
|
-
return match?.[1] ? canonicalPath(path.resolve(repositoryRoot, match[1].trim())) : void 0;
|
|
26
|
-
} catch {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/** The git data directory shared by every worktree of a repository, if the root is a git checkout. */
|
|
31
|
-
function gitCommonDirectory(repositoryRoot) {
|
|
32
|
-
const gitDirectory = readGitDirectory(repositoryRoot);
|
|
33
|
-
if (!gitDirectory) return void 0;
|
|
34
|
-
try {
|
|
35
|
-
const relative = fs.readFileSync(path.join(gitDirectory, COMMON_DIRECTORY_FILE), "utf8").trim();
|
|
36
|
-
return relative ? canonicalPath(path.resolve(gitDirectory, relative)) : gitDirectory;
|
|
37
|
-
} catch {
|
|
38
|
-
return gitDirectory;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/** Kept in the repository's git data, which moves with the checkout and is shared by its worktrees. */
|
|
42
|
-
const WORKSPACE_MARKER_FILE = "po-workspace-id";
|
|
43
|
-
const DIRECTORY_MODE = 448;
|
|
44
|
-
const FILE_MODE = 384;
|
|
45
|
-
function parseRecord(value) {
|
|
46
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
47
|
-
const record = value;
|
|
48
|
-
if (typeof record.id !== "string" || record.id === "") return void 0;
|
|
49
|
-
if (typeof record.root !== "string" || !path.isAbsolute(record.root)) return void 0;
|
|
50
|
-
const name = typeof record.name === "string" && record.name.trim() !== "" ? record.name : void 0;
|
|
51
|
-
return {
|
|
52
|
-
id: record.id,
|
|
53
|
-
root: record.root,
|
|
54
|
-
...name === void 0 ? {} : { name }
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/** Durable workspace membership, independent of whether a workspace can currently mount. */
|
|
58
|
-
function createWorkspaceRegistry(options) {
|
|
59
|
-
const notice = options.onNotice ?? (() => {});
|
|
60
|
-
const filePath = path.join(options.directory, REGISTRY_FILE);
|
|
61
|
-
const load = () => {
|
|
62
|
-
let raw;
|
|
63
|
-
try {
|
|
64
|
-
raw = fs.readFileSync(filePath, "utf8");
|
|
65
|
-
} catch (error) {
|
|
66
|
-
if (error instanceof Error && "code" in error && error.code === "ENOENT") return [];
|
|
67
|
-
notice(`${filePath} could not be read: ${error instanceof Error ? error.message : String(error)}`);
|
|
68
|
-
return [];
|
|
69
|
-
}
|
|
70
|
-
let parsed;
|
|
71
|
-
try {
|
|
72
|
-
parsed = JSON.parse(raw);
|
|
73
|
-
} catch {
|
|
74
|
-
notice(`workspaces at ${filePath} are not valid JSON; none will be restored`);
|
|
75
|
-
return [];
|
|
76
|
-
}
|
|
77
|
-
if (!Array.isArray(parsed)) {
|
|
78
|
-
notice(`workspaces at ${filePath} are not a list; none will be restored`);
|
|
79
|
-
return [];
|
|
80
|
-
}
|
|
81
|
-
const records = [];
|
|
82
|
-
for (const entry of parsed) {
|
|
83
|
-
const record = parseRecord(entry);
|
|
84
|
-
if (record === void 0) notice(`workspaces at ${filePath} contain an unusable entry; skipping it`);
|
|
85
|
-
else if (!records.some((candidate) => candidate.id === record.id)) records.push(record);
|
|
86
|
-
}
|
|
87
|
-
return records;
|
|
88
|
-
};
|
|
89
|
-
let current = load();
|
|
90
|
-
const persist = (next) => {
|
|
91
|
-
const temporary = `${filePath}.${String(process.pid)}.tmp`;
|
|
92
|
-
try {
|
|
93
|
-
fs.mkdirSync(options.directory, {
|
|
94
|
-
recursive: true,
|
|
95
|
-
mode: DIRECTORY_MODE
|
|
96
|
-
});
|
|
97
|
-
fs.writeFileSync(temporary, `${JSON.stringify(next, void 0, 2)}\n`, { mode: FILE_MODE });
|
|
98
|
-
fs.renameSync(temporary, filePath);
|
|
99
|
-
} catch (error) {
|
|
100
|
-
try {
|
|
101
|
-
fs.rmSync(temporary, { force: true });
|
|
102
|
-
} catch (cleanupError) {
|
|
103
|
-
notice(`${temporary} could not be removed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`);
|
|
104
|
-
}
|
|
105
|
-
throw new Error(`${filePath} could not be saved`, { cause: error });
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
return {
|
|
109
|
-
list: () => current,
|
|
110
|
-
add(record) {
|
|
111
|
-
if (record.id === "" || !path.isAbsolute(record.root)) throw new Error("Invalid workspace record.");
|
|
112
|
-
const latest = load();
|
|
113
|
-
const next = latest.some((held) => held.id === record.id) ? latest.map((held) => held.id === record.id ? record : held) : [...latest, record];
|
|
114
|
-
persist(next);
|
|
115
|
-
current = next;
|
|
116
|
-
},
|
|
117
|
-
remove(id) {
|
|
118
|
-
const latest = load();
|
|
119
|
-
const next = latest.filter((held) => held.id !== id);
|
|
120
|
-
if (next.length !== latest.length) persist(next);
|
|
121
|
-
current = next;
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
/** The workspace id recorded in a checkout's git data, if any. */
|
|
126
|
-
function readWorkspaceMarker(checkoutRoot) {
|
|
127
|
-
const commonDirectory = gitCommonDirectory(checkoutRoot);
|
|
128
|
-
if (commonDirectory === void 0) return void 0;
|
|
129
|
-
try {
|
|
130
|
-
const id = fs.readFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), "utf8").trim();
|
|
131
|
-
return id === "" ? void 0 : id;
|
|
132
|
-
} catch (error) {
|
|
133
|
-
if (error instanceof Error && "code" in error && error.code === "ENOENT") return void 0;
|
|
134
|
-
throw error;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Records a workspace id in a checkout's git data so the workspace keeps its id when the
|
|
139
|
-
* repository moves. A checkout without git data has nowhere to keep it; returns false.
|
|
140
|
-
*/
|
|
141
|
-
function writeWorkspaceMarker(checkoutRoot, id) {
|
|
142
|
-
const commonDirectory = gitCommonDirectory(checkoutRoot);
|
|
143
|
-
if (commonDirectory === void 0) return false;
|
|
144
|
-
fs.writeFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), `${id}\n`, { mode: FILE_MODE });
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id
|
|
149
|
-
* in the repository's git data names the workspace: a checkout of a workspace whose root still
|
|
150
|
-
* exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else
|
|
151
|
-
* is a new workspace.
|
|
152
|
-
*/
|
|
153
|
-
function identifyWorkspace(input) {
|
|
154
|
-
const exact = input.records.find((record) => record.root === input.checkoutRoot);
|
|
155
|
-
if (exact !== void 0) return {
|
|
156
|
-
id: exact.id,
|
|
157
|
-
root: exact.root,
|
|
158
|
-
moved: false
|
|
159
|
-
};
|
|
160
|
-
const owner = input.marker === void 0 ? void 0 : input.records.find((record) => record.id === input.marker);
|
|
161
|
-
if (owner !== void 0) return (input.exists ?? fs.existsSync)(owner.root) ? {
|
|
162
|
-
id: owner.id,
|
|
163
|
-
root: owner.root,
|
|
164
|
-
moved: false
|
|
165
|
-
} : {
|
|
166
|
-
id: owner.id,
|
|
167
|
-
root: input.checkoutRoot,
|
|
168
|
-
moved: true
|
|
169
|
-
};
|
|
170
|
-
return {
|
|
171
|
-
id: input.marker ?? (input.newId ?? crypto.randomUUID)(),
|
|
172
|
-
root: input.checkoutRoot,
|
|
173
|
-
moved: false
|
|
174
|
-
};
|
|
175
|
-
}
|
|
1
|
+
import "../platformFiles/index.mjs";
|
|
2
|
+
import { createSerialRunner } from "../serialRunner/index.mjs";
|
|
176
3
|
//#endregion
|
|
177
|
-
export { createWorkspaceRegistry,
|
|
4
|
+
export { createWorkspaceRegistry, identifyWorkspace, readWorkspaceMarker, writeWorkspaceMarker } from "./sync.mjs";
|
|
5
|
+
import "node:crypto";
|
|
6
|
+
import "node:path";
|
|
7
|
+
import "@earendil-works/pi-durable/env";
|
|
8
|
+
createSerialRunner();
|
|
178
9
|
|
|
179
10
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/workspaceRegistry/index.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst REGISTRY_FILE = 'workspaces.json';\nconst GIT_DIRECTORY = '.git';\nconst COMMON_DIRECTORY_FILE = 'commondir';\n\nfunction canonicalPath(target: string): string {\n const absolute = path.resolve(target);\n try {\n return fs.realpathSync.native(absolute);\n } catch {\n const parent = path.dirname(absolute);\n if (parent === absolute) return absolute;\n return path.join(canonicalPath(parent), path.basename(absolute));\n }\n}\n\nfunction readGitDirectory(repositoryRoot: string): string | undefined {\n const gitPath = path.join(repositoryRoot, GIT_DIRECTORY);\n try {\n const stat = fs.statSync(gitPath);\n if (stat.isDirectory()) return canonicalPath(gitPath);\n if (!stat.isFile()) return undefined;\n const match = /^gitdir:\\s*(.+)$/imu.exec(fs.readFileSync(gitPath, 'utf8').trim());\n return match?.[1] ? canonicalPath(path.resolve(repositoryRoot, match[1].trim())) : undefined;\n } catch {\n // Not a git checkout, or one this process cannot read: it has no git data to share.\n return undefined;\n }\n}\n\n/** The git data directory shared by every worktree of a repository, if the root is a git checkout. */\nexport function gitCommonDirectory(repositoryRoot: string): string | undefined {\n const gitDirectory = readGitDirectory(repositoryRoot);\n if (!gitDirectory) return undefined;\n try {\n const relative = fs.readFileSync(path.join(gitDirectory, COMMON_DIRECTORY_FILE), 'utf8').trim();\n return relative ? canonicalPath(path.resolve(gitDirectory, relative)) : gitDirectory;\n } catch {\n // A plain checkout has no commondir file; its own git directory is the common one.\n return gitDirectory;\n }\n}\n/** Kept in the repository's git data, which moves with the checkout and is shared by its worktrees. */\nconst WORKSPACE_MARKER_FILE = 'po-workspace-id';\nconst DIRECTORY_MODE = 0o700;\nconst FILE_MODE = 0o600;\n\nexport interface WorkspaceRecord {\n id: string;\n root: string;\n /** Display name chosen when the workspace was added; the folder basename stands in when absent. */\n name?: string;\n}\n\nexport interface WorkspaceRegistry {\n list(): readonly WorkspaceRecord[];\n add(record: WorkspaceRecord): void;\n remove(id: string): void;\n}\n\nexport interface WorkspaceRegistryOptions {\n directory: string;\n onNotice?: (message: string) => void;\n}\n\nfunction parseRecord(value: unknown): WorkspaceRecord | undefined {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n if (typeof record.id !== 'string' || record.id === '') return undefined;\n if (typeof record.root !== 'string' || !path.isAbsolute(record.root)) return undefined;\n const name = typeof record.name === 'string' && record.name.trim() !== '' ? record.name : undefined;\n return { id: record.id, root: record.root, ...(name === undefined ? {} : { name }) };\n}\n\n/** Durable workspace membership, independent of whether a workspace can currently mount. */\nexport function createWorkspaceRegistry(options: WorkspaceRegistryOptions): WorkspaceRegistry {\n const notice = options.onNotice ?? ((): void => {});\n const filePath = path.join(options.directory, REGISTRY_FILE);\n\n const load = (): WorkspaceRecord[] => {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return [];\n notice(`${filePath} could not be read: ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n notice(`workspaces at ${filePath} are not valid JSON; none will be restored`);\n return [];\n }\n if (!Array.isArray(parsed)) {\n notice(`workspaces at ${filePath} are not a list; none will be restored`);\n return [];\n }\n const records: WorkspaceRecord[] = [];\n for (const entry of parsed) {\n const record = parseRecord(entry);\n if (record === undefined) notice(`workspaces at ${filePath} contain an unusable entry; skipping it`);\n else if (!records.some((candidate) => candidate.id === record.id)) records.push(record);\n }\n return records;\n };\n\n let current = load();\n\n const persist = (next: readonly WorkspaceRecord[]): void => {\n const temporary = `${filePath}.${String(process.pid)}.tmp`;\n try {\n fs.mkdirSync(options.directory, { recursive: true, mode: DIRECTORY_MODE });\n fs.writeFileSync(temporary, `${JSON.stringify(next, undefined, 2)}\\n`, { mode: FILE_MODE });\n fs.renameSync(temporary, filePath);\n } catch (error) {\n try {\n fs.rmSync(temporary, { force: true });\n } catch (cleanupError) {\n notice(\n `${temporary} could not be removed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`,\n );\n }\n throw new Error(`${filePath} could not be saved`, { cause: error });\n }\n };\n\n return {\n list: () => current,\n // Each write starts from the file, not from memory: another process (a sync, a second\n // server) may have changed it since this one last read, and its entries must survive.\n add(record) {\n if (record.id === '' || !path.isAbsolute(record.root)) throw new Error('Invalid workspace record.');\n const latest = load();\n // Replaced in place: registry order is the tie-break when checkouts are matched to workspaces.\n const next = latest.some((held) => held.id === record.id)\n ? latest.map((held) => (held.id === record.id ? record : held))\n : [...latest, record];\n persist(next);\n current = next;\n },\n remove(id) {\n const latest = load();\n const next = latest.filter((held) => held.id !== id);\n if (next.length !== latest.length) persist(next);\n current = next;\n },\n };\n}\n\n/** The workspace id recorded in a checkout's git data, if any. */\nexport function readWorkspaceMarker(checkoutRoot: string): string | undefined {\n const commonDirectory = gitCommonDirectory(checkoutRoot);\n if (commonDirectory === undefined) return undefined;\n try {\n const id = fs.readFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), 'utf8').trim();\n return id === '' ? undefined : id;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return undefined;\n throw error;\n }\n}\n\n/**\n * Records a workspace id in a checkout's git data so the workspace keeps its id when the\n * repository moves. A checkout without git data has nowhere to keep it; returns false.\n */\nexport function writeWorkspaceMarker(checkoutRoot: string, id: string): boolean {\n const commonDirectory = gitCommonDirectory(checkoutRoot);\n if (commonDirectory === undefined) return false;\n fs.writeFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), `${id}\\n`, { mode: FILE_MODE });\n return true;\n}\n\nexport interface WorkspaceIdentity {\n readonly id: string;\n /** The workspace root. Differs from the checkout when the checkout joins an existing workspace. */\n readonly root: string;\n /** The recorded root no longer exists and this checkout takes its place. */\n readonly moved: boolean;\n}\n\n/**\n * Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id\n * in the repository's git data names the workspace: a checkout of a workspace whose root still\n * exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else\n * is a new workspace.\n */\nexport function identifyWorkspace(input: {\n readonly records: readonly WorkspaceRecord[];\n readonly checkoutRoot: string;\n readonly marker?: string;\n readonly exists?: (root: string) => boolean;\n readonly newId?: () => string;\n}): WorkspaceIdentity {\n const exact = input.records.find((record) => record.root === input.checkoutRoot);\n if (exact !== undefined) return { id: exact.id, root: exact.root, moved: false };\n const owner = input.marker === undefined ? undefined : input.records.find((record) => record.id === input.marker);\n if (owner !== undefined) {\n const exists = input.exists ?? fs.existsSync;\n return exists(owner.root)\n ? { id: owner.id, root: owner.root, moved: false }\n : { id: owner.id, root: input.checkoutRoot, moved: true };\n }\n return { id: input.marker ?? (input.newId ?? crypto.randomUUID)(), root: input.checkoutRoot, moved: false };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/workspaceRegistry/index.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport path from 'node:path';\n\nimport type { Context } from '@earendil-works/chord';\nimport { getOrThrow, type FileSystem } from '@earendil-works/pi-durable/env';\n\nimport { nodeHost } from '../nodeHost';\nimport { readTextIfExists, writeFileAtomic } from '../platformFiles';\nimport { createSerialRunner } from '../serialRunner';\nimport {\n assertWorkspaceRecord,\n COMMON_DIRECTORY_FILE,\n DIRECTORY_MODE,\n FILE_MODE,\n GIT_DIRECTORY,\n gitFileTarget,\n matchWorkspace,\n parseWorkspaceMarker,\n parseWorkspaceRecords,\n REGISTRY_FILE,\n resolveWorkspaceIdentity,\n serializeWorkspaceRecords,\n withWorkspaceRecord,\n WORKSPACE_MARKER_FILE,\n type WorkspaceIdentity,\n type WorkspaceIdentityInput,\n type WorkspaceRecord,\n type WorkspaceRegistryOptions,\n} from './workspaceRecords';\n\nexport type {\n WorkspaceIdentity,\n WorkspaceIdentityInput,\n WorkspaceRecord,\n WorkspaceRegistry,\n WorkspaceRegistryOptions,\n} from './workspaceRecords';\nexport {\n createWorkspaceRegistry,\n gitCommonDirectory,\n identifyWorkspace,\n readWorkspaceMarker,\n writeWorkspaceMarker,\n} from './sync';\n\n/** One queue per registry file, so concurrent read-modify-write cycles in this process never interleave. */\nconst registryWrites = createSerialRunner();\n\nexport interface WorkspaceRegistryAsync {\n list(): readonly WorkspaceRecord[];\n add(record: WorkspaceRecord): Promise<void>;\n remove(id: string): Promise<void>;\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nasync function canonicalPathAsync(fs: FileSystem, target: string, context: Context): Promise<string> {\n const absolute = path.resolve(target);\n const resolved = await fs.canonicalPath(absolute, context);\n if (resolved.ok) return resolved.value;\n const parent = path.dirname(absolute);\n if (parent === absolute) return absolute;\n return path.join(await canonicalPathAsync(fs, parent, context), path.basename(absolute));\n}\n\nasync function readGitDirectoryAsync(\n fs: FileSystem,\n repositoryRoot: string,\n context: Context,\n): Promise<string | undefined> {\n const gitPath = path.join(repositoryRoot, GIT_DIRECTORY);\n try {\n // fileInfo does not follow links; the canonical path does, as statSync did.\n const info = await fs.fileInfo(await canonicalPathAsync(fs, gitPath, context), context);\n if (!info.ok) return undefined;\n if (info.value.kind === 'directory') return await canonicalPathAsync(fs, gitPath, context);\n if (info.value.kind !== 'file') return undefined;\n const content = await fs.readTextFile(gitPath, context);\n if (!content.ok) return undefined;\n const target = gitFileTarget(repositoryRoot, content.value);\n return target === undefined ? undefined : await canonicalPathAsync(fs, target, context);\n } catch {\n // Not a git checkout, or one this process cannot read: it has no git data to share.\n return undefined;\n }\n}\n\n/** The git data directory shared by every worktree of a repository, if the root is a git checkout. */\nexport async function gitCommonDirectoryAsync(\n fs: FileSystem,\n repositoryRoot: string,\n context: Context,\n): Promise<string | undefined> {\n const gitDirectory = await readGitDirectoryAsync(fs, repositoryRoot, context);\n if (!gitDirectory) return undefined;\n const content = await fs.readTextFile(path.join(gitDirectory, COMMON_DIRECTORY_FILE), context);\n // A plain checkout has no commondir file; its own git directory is the common one.\n if (!content.ok) return gitDirectory;\n const relative = content.value.trim();\n return relative ? canonicalPathAsync(fs, path.resolve(gitDirectory, relative), context) : gitDirectory;\n}\n\n/**\n * Durable workspace membership, independent of whether a workspace can currently mount.\n * Writes in this process serialise per registry file and publish through a uniquely named\n * temporary file, so concurrent adds and removes never lose an entry or tear the file.\n */\nexport async function createWorkspaceRegistryAsync(\n fs: FileSystem,\n options: WorkspaceRegistryOptions,\n context: Context,\n): Promise<WorkspaceRegistryAsync> {\n const notice = options.onNotice ?? ((): void => {});\n const filePath = path.join(options.directory, REGISTRY_FILE);\n const serial = registryWrites.forKey(filePath);\n\n const load = async (): Promise<WorkspaceRecord[]> => {\n let raw: string | undefined;\n try {\n raw = await readTextIfExists(fs, filePath, context);\n } catch (error) {\n notice(`${filePath} could not be read: ${errorText(error)}`);\n return [];\n }\n return raw === undefined ? [] : parseWorkspaceRecords(raw, filePath, notice);\n };\n\n let current = await load();\n\n const persist = async (next: readonly WorkspaceRecord[]): Promise<void> => {\n try {\n const existed = getOrThrow(await fs.exists(options.directory, context));\n if (!existed) {\n getOrThrow(await fs.createDir(options.directory, { recursive: true }, context));\n await nodeHost.setMode(options.directory, DIRECTORY_MODE);\n }\n await writeFileAtomic(fs, filePath, serializeWorkspaceRecords(next), context);\n await nodeHost.setMode(filePath, FILE_MODE);\n } catch (error) {\n throw new Error(`${filePath} could not be saved`, { cause: error });\n }\n };\n\n return {\n list: () => current,\n // Each write starts from the file, not from memory: another process (a sync, a second\n // server) may have changed it since this one last read, and its entries must survive.\n add: (record) =>\n serial(async () => {\n assertWorkspaceRecord(record);\n const next = withWorkspaceRecord(await load(), record);\n await persist(next);\n current = next;\n }),\n remove: (id) =>\n serial(async () => {\n const latest = await load();\n const next = latest.filter((held) => held.id !== id);\n if (next.length !== latest.length) await persist(next);\n current = next;\n }),\n };\n}\n\n/** The workspace id recorded in a checkout's git data, if any. */\nexport async function readWorkspaceMarkerAsync(\n fs: FileSystem,\n checkoutRoot: string,\n context: Context,\n): Promise<string | undefined> {\n const commonDirectory = await gitCommonDirectoryAsync(fs, checkoutRoot, context);\n if (commonDirectory === undefined) return undefined;\n const content = await readTextIfExists(fs, path.join(commonDirectory, WORKSPACE_MARKER_FILE), context);\n return content === undefined ? undefined : parseWorkspaceMarker(content);\n}\n\n/**\n * Records a workspace id in a checkout's git data so the workspace keeps its id when the\n * repository moves. A checkout without git data has nowhere to keep it; returns false.\n */\nexport async function writeWorkspaceMarkerAsync(\n fs: FileSystem,\n checkoutRoot: string,\n id: string,\n context: Context,\n): Promise<boolean> {\n const commonDirectory = await gitCommonDirectoryAsync(fs, checkoutRoot, context);\n if (commonDirectory === undefined) return false;\n const markerPath = path.join(commonDirectory, WORKSPACE_MARKER_FILE);\n getOrThrow(await fs.writeFile(markerPath, `${id}\\n`, context));\n await nodeHost.setMode(markerPath, FILE_MODE);\n return true;\n}\n\n/**\n * Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id\n * in the repository's git data names the workspace: a checkout of a workspace whose root still\n * exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else\n * is a new workspace.\n */\nexport async function identifyWorkspaceAsync(\n fs: FileSystem,\n input: WorkspaceIdentityInput,\n context: Context,\n): Promise<WorkspaceIdentity> {\n const match = matchWorkspace(input);\n const ownerExists = match?.kind === 'owner' && getOrThrow(await fs.exists(match.record.root, context));\n return resolveWorkspaceIdentity(input, match, ownerExists, crypto.randomUUID);\n}\n"],"mappings":";;;;;;;AA8CuB,mBAAmB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_workspaceRecords = require("./workspaceRecords.cjs");
|
|
3
|
+
let node_crypto = require("node:crypto");
|
|
4
|
+
node_crypto = require_runtime.__toESM(node_crypto, 1);
|
|
5
|
+
let node_fs = require("node:fs");
|
|
6
|
+
node_fs = require_runtime.__toESM(node_fs, 1);
|
|
7
|
+
let node_path = require("node:path");
|
|
8
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
9
|
+
//#region src/services/workspaceRegistry/sync.ts
|
|
10
|
+
function canonicalPath(target) {
|
|
11
|
+
const absolute = node_path.default.resolve(target);
|
|
12
|
+
try {
|
|
13
|
+
return node_fs.default.realpathSync.native(absolute);
|
|
14
|
+
} catch {
|
|
15
|
+
const parent = node_path.default.dirname(absolute);
|
|
16
|
+
if (parent === absolute) return absolute;
|
|
17
|
+
return node_path.default.join(canonicalPath(parent), node_path.default.basename(absolute));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function readGitDirectory(repositoryRoot) {
|
|
21
|
+
const gitPath = node_path.default.join(repositoryRoot, require_workspaceRecords.GIT_DIRECTORY);
|
|
22
|
+
try {
|
|
23
|
+
const stat = node_fs.default.statSync(gitPath);
|
|
24
|
+
if (stat.isDirectory()) return canonicalPath(gitPath);
|
|
25
|
+
if (!stat.isFile()) return void 0;
|
|
26
|
+
const target = require_workspaceRecords.gitFileTarget(repositoryRoot, node_fs.default.readFileSync(gitPath, "utf8"));
|
|
27
|
+
return target === void 0 ? void 0 : canonicalPath(target);
|
|
28
|
+
} catch {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The git data directory shared by every worktree of a repository, if the root is a git checkout.
|
|
34
|
+
*
|
|
35
|
+
* @deprecated Node-only sync shim; use gitCommonDirectoryAsync. Removed in M2.
|
|
36
|
+
*/
|
|
37
|
+
function gitCommonDirectory(repositoryRoot) {
|
|
38
|
+
const gitDirectory = readGitDirectory(repositoryRoot);
|
|
39
|
+
if (!gitDirectory) return void 0;
|
|
40
|
+
try {
|
|
41
|
+
const relative = node_fs.default.readFileSync(node_path.default.join(gitDirectory, require_workspaceRecords.COMMON_DIRECTORY_FILE), "utf8").trim();
|
|
42
|
+
return relative ? canonicalPath(node_path.default.resolve(gitDirectory, relative)) : gitDirectory;
|
|
43
|
+
} catch {
|
|
44
|
+
return gitDirectory;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Durable workspace membership, independent of whether a workspace can currently mount.
|
|
49
|
+
*
|
|
50
|
+
* @deprecated Node-only sync shim; use createWorkspaceRegistryAsync. Removed in M2.
|
|
51
|
+
*/
|
|
52
|
+
function createWorkspaceRegistry(options) {
|
|
53
|
+
const notice = options.onNotice ?? (() => {});
|
|
54
|
+
const filePath = node_path.default.join(options.directory, require_workspaceRecords.REGISTRY_FILE);
|
|
55
|
+
const load = () => {
|
|
56
|
+
let raw;
|
|
57
|
+
try {
|
|
58
|
+
raw = node_fs.default.readFileSync(filePath, "utf8");
|
|
59
|
+
} catch (error) {
|
|
60
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") return [];
|
|
61
|
+
notice(`${filePath} could not be read: ${error instanceof Error ? error.message : String(error)}`);
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
return require_workspaceRecords.parseWorkspaceRecords(raw, filePath, notice);
|
|
65
|
+
};
|
|
66
|
+
let current = load();
|
|
67
|
+
const persist = (next) => {
|
|
68
|
+
const temporary = `${filePath}.${String(process.pid)}.tmp`;
|
|
69
|
+
try {
|
|
70
|
+
node_fs.default.mkdirSync(options.directory, {
|
|
71
|
+
recursive: true,
|
|
72
|
+
mode: 448
|
|
73
|
+
});
|
|
74
|
+
node_fs.default.writeFileSync(temporary, require_workspaceRecords.serializeWorkspaceRecords(next), { mode: 384 });
|
|
75
|
+
node_fs.default.renameSync(temporary, filePath);
|
|
76
|
+
} catch (error) {
|
|
77
|
+
try {
|
|
78
|
+
node_fs.default.rmSync(temporary, { force: true });
|
|
79
|
+
} catch (cleanupError) {
|
|
80
|
+
notice(`${temporary} could not be removed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`);
|
|
81
|
+
}
|
|
82
|
+
throw new Error(`${filePath} could not be saved`, { cause: error });
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
return {
|
|
86
|
+
list: () => current,
|
|
87
|
+
add(record) {
|
|
88
|
+
require_workspaceRecords.assertWorkspaceRecord(record);
|
|
89
|
+
const next = require_workspaceRecords.withWorkspaceRecord(load(), record);
|
|
90
|
+
persist(next);
|
|
91
|
+
current = next;
|
|
92
|
+
},
|
|
93
|
+
remove(id) {
|
|
94
|
+
const latest = load();
|
|
95
|
+
const next = latest.filter((held) => held.id !== id);
|
|
96
|
+
if (next.length !== latest.length) persist(next);
|
|
97
|
+
current = next;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The workspace id recorded in a checkout's git data, if any.
|
|
103
|
+
*
|
|
104
|
+
* @deprecated Node-only sync shim; use readWorkspaceMarkerAsync. Removed in M2.
|
|
105
|
+
*/
|
|
106
|
+
function readWorkspaceMarker(checkoutRoot) {
|
|
107
|
+
const commonDirectory = gitCommonDirectory(checkoutRoot);
|
|
108
|
+
if (commonDirectory === void 0) return void 0;
|
|
109
|
+
try {
|
|
110
|
+
return require_workspaceRecords.parseWorkspaceMarker(node_fs.default.readFileSync(node_path.default.join(commonDirectory, require_workspaceRecords.WORKSPACE_MARKER_FILE), "utf8"));
|
|
111
|
+
} catch (error) {
|
|
112
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") return void 0;
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Records a workspace id in a checkout's git data so the workspace keeps its id when the
|
|
118
|
+
* repository moves. A checkout without git data has nowhere to keep it; returns false.
|
|
119
|
+
*
|
|
120
|
+
* @deprecated Node-only sync shim; use writeWorkspaceMarkerAsync. Removed in M2.
|
|
121
|
+
*/
|
|
122
|
+
function writeWorkspaceMarker(checkoutRoot, id) {
|
|
123
|
+
const commonDirectory = gitCommonDirectory(checkoutRoot);
|
|
124
|
+
if (commonDirectory === void 0) return false;
|
|
125
|
+
node_fs.default.writeFileSync(node_path.default.join(commonDirectory, require_workspaceRecords.WORKSPACE_MARKER_FILE), `${id}\n`, { mode: 384 });
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id
|
|
130
|
+
* in the repository's git data names the workspace: a checkout of a workspace whose root still
|
|
131
|
+
* exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else
|
|
132
|
+
* is a new workspace.
|
|
133
|
+
*
|
|
134
|
+
* @deprecated Node-only sync shim; use identifyWorkspaceAsync. Removed in M2.
|
|
135
|
+
*/
|
|
136
|
+
function identifyWorkspace(input) {
|
|
137
|
+
const match = require_workspaceRecords.matchWorkspace(input);
|
|
138
|
+
const exists = input.exists ?? node_fs.default.existsSync;
|
|
139
|
+
return require_workspaceRecords.resolveWorkspaceIdentity(input, match, match?.kind === "owner" && exists(match.record.root), node_crypto.default.randomUUID);
|
|
140
|
+
}
|
|
141
|
+
//#endregion
|
|
142
|
+
exports.createWorkspaceRegistry = createWorkspaceRegistry;
|
|
143
|
+
exports.gitCommonDirectory = gitCommonDirectory;
|
|
144
|
+
exports.identifyWorkspace = identifyWorkspace;
|
|
145
|
+
exports.readWorkspaceMarker = readWorkspaceMarker;
|
|
146
|
+
exports.writeWorkspaceMarker = writeWorkspaceMarker;
|
|
147
|
+
|
|
148
|
+
//# sourceMappingURL=sync.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.cjs","names":["path","fs","GIT_DIRECTORY","gitFileTarget","COMMON_DIRECTORY_FILE","REGISTRY_FILE","parseWorkspaceRecords","serializeWorkspaceRecords","withWorkspaceRecord","parseWorkspaceMarker","WORKSPACE_MARKER_FILE","matchWorkspace","resolveWorkspaceIdentity","crypto"],"sources":["../../../../src/services/workspaceRegistry/sync.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport {\n assertWorkspaceRecord,\n COMMON_DIRECTORY_FILE,\n DIRECTORY_MODE,\n FILE_MODE,\n GIT_DIRECTORY,\n gitFileTarget,\n matchWorkspace,\n parseWorkspaceMarker,\n parseWorkspaceRecords,\n REGISTRY_FILE,\n resolveWorkspaceIdentity,\n serializeWorkspaceRecords,\n withWorkspaceRecord,\n WORKSPACE_MARKER_FILE,\n type WorkspaceIdentity,\n type WorkspaceIdentityInput,\n type WorkspaceRecord,\n type WorkspaceRegistry,\n type WorkspaceRegistryOptions,\n} from './workspaceRecords';\n\nfunction canonicalPath(target: string): string {\n const absolute = path.resolve(target);\n try {\n return fs.realpathSync.native(absolute);\n } catch {\n const parent = path.dirname(absolute);\n if (parent === absolute) return absolute;\n return path.join(canonicalPath(parent), path.basename(absolute));\n }\n}\n\nfunction readGitDirectory(repositoryRoot: string): string | undefined {\n const gitPath = path.join(repositoryRoot, GIT_DIRECTORY);\n try {\n const stat = fs.statSync(gitPath);\n if (stat.isDirectory()) return canonicalPath(gitPath);\n if (!stat.isFile()) return undefined;\n const target = gitFileTarget(repositoryRoot, fs.readFileSync(gitPath, 'utf8'));\n return target === undefined ? undefined : canonicalPath(target);\n } catch {\n // Not a git checkout, or one this process cannot read: it has no git data to share.\n return undefined;\n }\n}\n\n/**\n * The git data directory shared by every worktree of a repository, if the root is a git checkout.\n *\n * @deprecated Node-only sync shim; use gitCommonDirectoryAsync. Removed in M2.\n */\nexport function gitCommonDirectory(repositoryRoot: string): string | undefined {\n const gitDirectory = readGitDirectory(repositoryRoot);\n if (!gitDirectory) return undefined;\n try {\n const relative = fs.readFileSync(path.join(gitDirectory, COMMON_DIRECTORY_FILE), 'utf8').trim();\n return relative ? canonicalPath(path.resolve(gitDirectory, relative)) : gitDirectory;\n } catch {\n // A plain checkout has no commondir file; its own git directory is the common one.\n return gitDirectory;\n }\n}\n\n/**\n * Durable workspace membership, independent of whether a workspace can currently mount.\n *\n * @deprecated Node-only sync shim; use createWorkspaceRegistryAsync. Removed in M2.\n */\nexport function createWorkspaceRegistry(options: WorkspaceRegistryOptions): WorkspaceRegistry {\n const notice = options.onNotice ?? ((): void => {});\n const filePath = path.join(options.directory, REGISTRY_FILE);\n\n const load = (): WorkspaceRecord[] => {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return [];\n notice(`${filePath} could not be read: ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n return parseWorkspaceRecords(raw, filePath, notice);\n };\n\n let current = load();\n\n const persist = (next: readonly WorkspaceRecord[]): void => {\n const temporary = `${filePath}.${String(process.pid)}.tmp`;\n try {\n fs.mkdirSync(options.directory, { recursive: true, mode: DIRECTORY_MODE });\n fs.writeFileSync(temporary, serializeWorkspaceRecords(next), { mode: FILE_MODE });\n fs.renameSync(temporary, filePath);\n } catch (error) {\n try {\n fs.rmSync(temporary, { force: true });\n } catch (cleanupError) {\n notice(\n `${temporary} could not be removed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`,\n );\n }\n throw new Error(`${filePath} could not be saved`, { cause: error });\n }\n };\n\n return {\n list: () => current,\n // Each write starts from the file, not from memory: another process (a sync, a second\n // server) may have changed it since this one last read, and its entries must survive.\n add(record) {\n assertWorkspaceRecord(record);\n const next = withWorkspaceRecord(load(), record);\n persist(next);\n current = next;\n },\n remove(id) {\n const latest = load();\n const next = latest.filter((held) => held.id !== id);\n if (next.length !== latest.length) persist(next);\n current = next;\n },\n };\n}\n\n/**\n * The workspace id recorded in a checkout's git data, if any.\n *\n * @deprecated Node-only sync shim; use readWorkspaceMarkerAsync. Removed in M2.\n */\nexport function readWorkspaceMarker(checkoutRoot: string): string | undefined {\n const commonDirectory = gitCommonDirectory(checkoutRoot);\n if (commonDirectory === undefined) return undefined;\n try {\n return parseWorkspaceMarker(fs.readFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), 'utf8'));\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return undefined;\n throw error;\n }\n}\n\n/**\n * Records a workspace id in a checkout's git data so the workspace keeps its id when the\n * repository moves. A checkout without git data has nowhere to keep it; returns false.\n *\n * @deprecated Node-only sync shim; use writeWorkspaceMarkerAsync. Removed in M2.\n */\nexport function writeWorkspaceMarker(checkoutRoot: string, id: string): boolean {\n const commonDirectory = gitCommonDirectory(checkoutRoot);\n if (commonDirectory === undefined) return false;\n fs.writeFileSync(path.join(commonDirectory, WORKSPACE_MARKER_FILE), `${id}\\n`, { mode: FILE_MODE });\n return true;\n}\n\n/**\n * Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id\n * in the repository's git data names the workspace: a checkout of a workspace whose root still\n * exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else\n * is a new workspace.\n *\n * @deprecated Node-only sync shim; use identifyWorkspaceAsync. Removed in M2.\n */\nexport function identifyWorkspace(\n input: WorkspaceIdentityInput & { readonly exists?: (root: string) => boolean },\n): WorkspaceIdentity {\n const match = matchWorkspace(input);\n const exists = input.exists ?? fs.existsSync;\n return resolveWorkspaceIdentity(\n input,\n match,\n match?.kind === 'owner' && exists(match.record.root),\n crypto.randomUUID,\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { WorkspaceIdentity, WorkspaceIdentityInput, WorkspaceRegistry, WorkspaceRegistryOptions } from "./workspaceRecords.mjs";
|
|
2
|
+
//#region src/services/workspaceRegistry/sync.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Durable workspace membership, independent of whether a workspace can currently mount.
|
|
5
|
+
*
|
|
6
|
+
* @deprecated Node-only sync shim; use createWorkspaceRegistryAsync. Removed in M2.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createWorkspaceRegistry(options: WorkspaceRegistryOptions): WorkspaceRegistry;
|
|
9
|
+
/**
|
|
10
|
+
* The workspace id recorded in a checkout's git data, if any.
|
|
11
|
+
*
|
|
12
|
+
* @deprecated Node-only sync shim; use readWorkspaceMarkerAsync. Removed in M2.
|
|
13
|
+
*/
|
|
14
|
+
export declare function readWorkspaceMarker(checkoutRoot: string): string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Records a workspace id in a checkout's git data so the workspace keeps its id when the
|
|
17
|
+
* repository moves. A checkout without git data has nowhere to keep it; returns false.
|
|
18
|
+
*
|
|
19
|
+
* @deprecated Node-only sync shim; use writeWorkspaceMarkerAsync. Removed in M2.
|
|
20
|
+
*/
|
|
21
|
+
export declare function writeWorkspaceMarker(checkoutRoot: string, id: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Decides which workspace a checkout belongs to. An exact root match wins. Otherwise the id
|
|
24
|
+
* in the repository's git data names the workspace: a checkout of a workspace whose root still
|
|
25
|
+
* exists joins it, and one whose recorded root is gone is that workspace, moved. Anything else
|
|
26
|
+
* is a new workspace.
|
|
27
|
+
*
|
|
28
|
+
* @deprecated Node-only sync shim; use identifyWorkspaceAsync. Removed in M2.
|
|
29
|
+
*/
|
|
30
|
+
export declare function identifyWorkspace(input: WorkspaceIdentityInput & {
|
|
31
|
+
readonly exists?: (root: string) => boolean;
|
|
32
|
+
}): WorkspaceIdentity;
|
|
33
|
+
//#endregion
|
|
34
|
+
//# sourceMappingURL=sync.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.mts","names":[],"sources":["../../../../src/services/workspaceRegistry/sync.ts"],"mappings":";;;;;;;wBAyEgB,wBAAwB,SAAS,2BAA2B;;;;;;wBA4D5D,oBAAoB;;;;;;;wBAiBpB,qBAAqB,sBAAsB;;;;;;;;;wBAe3C,kBACd,OAAO;WAAoC,UAAU;IACpD"}
|