@agimon-ai/po-core 0.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/agentModel.cjs +4 -0
- package/dist/agentModel.d.mts +2 -0
- package/dist/agentModel.mjs +2 -0
- package/dist/apiContracts.cjs +2094 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +1086 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +2074 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/askUser.cjs +8 -0
- package/dist/askUser.d.mts +2 -0
- package/dist/askUser.mjs +2 -0
- package/dist/authorTools.cjs +5 -0
- package/dist/authorTools.d.mts +2 -0
- package/dist/authorTools.mjs +2 -0
- package/dist/backgroundWork.cjs +9 -0
- package/dist/backgroundWork.d.mts +2 -0
- package/dist/backgroundWork.mjs +2 -0
- package/dist/bundleAssetPolicy.cjs +5 -0
- package/dist/bundleAssetPolicy.d.mts +2 -0
- package/dist/bundleAssetPolicy.mjs +2 -0
- package/dist/childProcess.cjs +15 -0
- package/dist/childProcess.d.mts +2 -0
- package/dist/childProcess.mjs +2 -0
- package/dist/childSession.cjs +9 -0
- package/dist/childSession.d.mts +3 -0
- package/dist/childSession.mjs +3 -0
- package/dist/cockpitContainer.cjs +4 -0
- package/dist/cockpitContainer.d.mts +2 -0
- package/dist/cockpitContainer.mjs +2 -0
- package/dist/config.cjs +13 -0
- package/dist/config.d.mts +3 -0
- package/dist/config.mjs +2 -0
- package/dist/contextApi.cjs +12 -0
- package/dist/contextApi.d.mts +4 -0
- package/dist/contextApi.mjs +3 -0
- package/dist/contextContributions.cjs +7 -0
- package/dist/contextContributions.d.mts +3 -0
- package/dist/contextContributions.mjs +3 -0
- package/dist/contextDetail.cjs +65 -0
- package/dist/contextDetail.cjs.map +1 -0
- package/dist/contextDetail.d.mts +19 -0
- package/dist/contextDetail.d.mts.map +1 -0
- package/dist/contextDetail.mjs +64 -0
- package/dist/contextDetail.mjs.map +1 -0
- package/dist/contextDetailStore.cjs +96 -0
- package/dist/contextDetailStore.cjs.map +1 -0
- package/dist/contextDetailStore.d.mts +21 -0
- package/dist/contextDetailStore.d.mts.map +1 -0
- package/dist/contextDetailStore.mjs +87 -0
- package/dist/contextDetailStore.mjs.map +1 -0
- package/dist/contextProjection.cjs +121 -0
- package/dist/contextProjection.cjs.map +1 -0
- package/dist/contextProjection.d.mts +130 -0
- package/dist/contextProjection.d.mts.map +1 -0
- package/dist/contextProjection.mjs +117 -0
- package/dist/contextProjection.mjs.map +1 -0
- package/dist/cordisHost.cjs +13 -0
- package/dist/cordisHost.d.mts +2 -0
- package/dist/cordisHost.mjs +2 -0
- package/dist/delegation.cjs +18 -0
- package/dist/delegation.d.mts +2 -0
- package/dist/delegation.mjs +2 -0
- package/dist/doomPackage.cjs +61 -0
- package/dist/doomPackage.cjs.map +1 -0
- package/dist/doomPackage.d.mts +17 -0
- package/dist/doomPackage.d.mts.map +1 -0
- package/dist/doomPackage.mjs +54 -0
- package/dist/doomPackage.mjs.map +1 -0
- package/dist/executionBudget.cjs +232 -0
- package/dist/executionBudget.cjs.map +1 -0
- package/dist/executionBudget.d.mts +11 -0
- package/dist/executionBudget.d.mts.map +1 -0
- package/dist/executionBudget.mjs +226 -0
- package/dist/executionBudget.mjs.map +1 -0
- package/dist/extensionFile.cjs +19 -0
- package/dist/extensionFile.d.mts +3 -0
- package/dist/extensionFile.mjs +2 -0
- package/dist/footer.cjs +6 -0
- package/dist/footer.d.mts +2 -0
- package/dist/footer.mjs +2 -0
- package/dist/headless.cjs +16 -0
- package/dist/headless.d.mts +2 -0
- package/dist/headless.mjs +2 -0
- package/dist/headlessHub.cjs +1008 -0
- package/dist/headlessHub.cjs.map +1 -0
- package/dist/headlessHub.d.mts +176 -0
- package/dist/headlessHub.d.mts.map +1 -0
- package/dist/headlessHub.mjs +1005 -0
- package/dist/headlessHub.mjs.map +1 -0
- package/dist/headlessServer.cjs +956 -0
- package/dist/headlessServer.cjs.map +1 -0
- package/dist/headlessServer.d.mts +66 -0
- package/dist/headlessServer.d.mts.map +1 -0
- package/dist/headlessServer.mjs +949 -0
- package/dist/headlessServer.mjs.map +1 -0
- package/dist/headlessSessionHost.cjs +0 -0
- package/dist/headlessSessionHost.d.mts +89 -0
- package/dist/headlessSessionHost.d.mts.map +1 -0
- package/dist/headlessSessionHost.mjs +1 -0
- package/dist/headlessSessionManager.cjs +51 -0
- package/dist/headlessSessionManager.cjs.map +1 -0
- package/dist/headlessSessionManager.d.mts +6 -0
- package/dist/headlessSessionManager.d.mts.map +1 -0
- package/dist/headlessSessionManager.mjs +50 -0
- package/dist/headlessSessionManager.mjs.map +1 -0
- package/dist/help.cjs +24 -0
- package/dist/help.d.mts +3 -0
- package/dist/help.mjs +3 -0
- package/dist/history.cjs +25 -0
- package/dist/history.d.mts +10 -0
- package/dist/history.mjs +10 -0
- package/dist/historyOwnership.cjs +253 -0
- package/dist/historyOwnership.cjs.map +1 -0
- package/dist/historyOwnership.d.mts +23 -0
- package/dist/historyOwnership.d.mts.map +1 -0
- package/dist/historyOwnership.mjs +247 -0
- package/dist/historyOwnership.mjs.map +1 -0
- package/dist/hubChannel.cjs +4 -0
- package/dist/hubChannel.d.mts +2 -0
- package/dist/hubChannel.mjs +2 -0
- package/dist/index.cjs +44 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +6 -0
- package/dist/json.cjs +6 -0
- package/dist/json.d.mts +2 -0
- package/dist/json.mjs +2 -0
- package/dist/jsonlSessionRepo.cjs +44 -0
- package/dist/jsonlSessionRepo.cjs.map +1 -0
- package/dist/jsonlSessionRepo.d.mts +7 -0
- package/dist/jsonlSessionRepo.d.mts.map +1 -0
- package/dist/jsonlSessionRepo.mjs +42 -0
- package/dist/jsonlSessionRepo.mjs.map +1 -0
- package/dist/kernel.cjs +3 -0
- package/dist/kernel.d.mts +3 -0
- package/dist/kernel.mjs +2 -0
- package/dist/leader.cjs +9 -0
- package/dist/leader.d.mts +2 -0
- package/dist/leader.mjs +2 -0
- package/dist/logSinkTelemetry.cjs +5 -0
- package/dist/logSinkTelemetry.d.mts +2 -0
- package/dist/logSinkTelemetry.mjs +2 -0
- package/dist/machineApi.cjs +92 -0
- package/dist/machineApi.cjs.map +1 -0
- package/dist/machineApi.d.mts +7 -0
- package/dist/machineApi.d.mts.map +1 -0
- package/dist/machineApi.mjs +88 -0
- package/dist/machineApi.mjs.map +1 -0
- package/dist/main.cjs +11 -0
- package/dist/main.d.mts +5 -0
- package/dist/main.mjs +4 -0
- package/dist/mcpFacet.cjs +9 -0
- package/dist/mcpFacet.d.mts +4 -0
- package/dist/mcpFacet.mjs +3 -0
- package/dist/mcpProjection.cjs +16 -0
- package/dist/mcpProjection.d.mts +2 -0
- package/dist/mcpProjection.mjs +2 -0
- package/dist/mcpSchemaCost.cjs +195 -0
- package/dist/mcpSchemaCost.cjs.map +1 -0
- package/dist/mcpSchemaCost.d.mts +35 -0
- package/dist/mcpSchemaCost.d.mts.map +1 -0
- package/dist/mcpSchemaCost.mjs +190 -0
- package/dist/mcpSchemaCost.mjs.map +1 -0
- package/dist/mcpSession.cjs +9 -0
- package/dist/mcpSession.d.mts +2 -0
- package/dist/mcpSession.mjs +2 -0
- package/dist/mcpStatus.cjs +7 -0
- package/dist/mcpStatus.d.mts +2 -0
- package/dist/mcpStatus.mjs +2 -0
- package/dist/mcpToolResolver.cjs +5 -0
- package/dist/mcpToolResolver.d.mts +2 -0
- package/dist/mcpToolResolver.mjs +2 -0
- package/dist/mcpWidget.cjs +0 -0
- package/dist/mcpWidget.d.mts +2 -0
- package/dist/mcpWidget.mjs +1 -0
- package/dist/moduleResolution.cjs +412 -0
- package/dist/moduleResolution.cjs.map +1 -0
- package/dist/moduleResolution.d.mts +72 -0
- package/dist/moduleResolution.d.mts.map +1 -0
- package/dist/moduleResolution.mjs +396 -0
- package/dist/moduleResolution.mjs.map +1 -0
- package/dist/narration.cjs +10 -0
- package/dist/narration.d.mts +2 -0
- package/dist/narration.mjs +2 -0
- package/dist/native.cjs +29 -0
- package/dist/native.d.mts +12 -0
- package/dist/native.mjs +8 -0
- package/dist/notification.cjs +17 -0
- package/dist/notification.d.mts +2 -0
- package/dist/notification.mjs +2 -0
- package/dist/packageApi.cjs +17 -0
- package/dist/packageApi.d.mts +3 -0
- package/dist/packageApi.mjs +3 -0
- package/dist/packageApiServer.cjs +196 -0
- package/dist/packageApiServer.cjs.map +1 -0
- package/dist/packageApiServer.d.mts +62 -0
- package/dist/packageApiServer.d.mts.map +1 -0
- package/dist/packageApiServer.mjs +194 -0
- package/dist/packageApiServer.mjs.map +1 -0
- package/dist/piSettings.cjs +20 -0
- package/dist/piSettings.d.mts +2 -0
- package/dist/piSettings.mjs +2 -0
- package/dist/pluginProtocol.cjs +10 -0
- package/dist/pluginProtocol.d.mts +2 -0
- package/dist/pluginProtocol.mjs +2 -0
- package/dist/profileIdentity.cjs +6 -0
- package/dist/profileIdentity.d.mts +2 -0
- package/dist/profileIdentity.mjs +2 -0
- package/dist/protocol.cjs +10 -0
- package/dist/protocol.d.mts +2 -0
- package/dist/protocol.mjs +2 -0
- package/dist/readiness.cjs +8 -0
- package/dist/readiness.d.mts +2 -0
- package/dist/readiness.mjs +2 -0
- package/dist/remoteApi.cjs +45 -0
- package/dist/remoteApi.cjs.map +1 -0
- package/dist/remoteApi.d.mts +7 -0
- package/dist/remoteApi.d.mts.map +1 -0
- package/dist/remoteApi.mjs +44 -0
- package/dist/remoteApi.mjs.map +1 -0
- package/dist/remoteRuntime.cjs +498 -0
- package/dist/remoteRuntime.cjs.map +1 -0
- package/dist/remoteRuntime.d.mts +36 -0
- package/dist/remoteRuntime.d.mts.map +1 -0
- package/dist/remoteRuntime.mjs +494 -0
- package/dist/remoteRuntime.mjs.map +1 -0
- package/dist/runtimeConfig.cjs +232 -0
- package/dist/runtimeConfig.cjs.map +1 -0
- package/dist/runtimeConfig.d.mts +313 -0
- package/dist/runtimeConfig.d.mts.map +1 -0
- package/dist/runtimeConfig.mjs +221 -0
- package/dist/runtimeConfig.mjs.map +1 -0
- package/dist/runtimeContextApi.cjs +64 -0
- package/dist/runtimeContextApi.cjs.map +1 -0
- package/dist/runtimeContextApi.d.mts +16 -0
- package/dist/runtimeContextApi.d.mts.map +1 -0
- package/dist/runtimeContextApi.mjs +62 -0
- package/dist/runtimeContextApi.mjs.map +1 -0
- package/dist/runtimeCordisHost.cjs +223 -0
- package/dist/runtimeCordisHost.cjs.map +1 -0
- package/dist/runtimeCordisHost.d.mts +78 -0
- package/dist/runtimeCordisHost.d.mts.map +1 -0
- package/dist/runtimeCordisHost.mjs +212 -0
- package/dist/runtimeCordisHost.mjs.map +1 -0
- package/dist/runtimeHeadlessSessionManager.cjs +0 -0
- package/dist/runtimeHeadlessSessionManager.d.mts +18 -0
- package/dist/runtimeHeadlessSessionManager.d.mts.map +1 -0
- package/dist/runtimeHeadlessSessionManager.mjs +1 -0
- package/dist/runtimeIdentity.cjs +26 -0
- package/dist/runtimeIdentity.cjs.map +1 -0
- package/dist/runtimeIdentity.d.mts +7 -0
- package/dist/runtimeIdentity.d.mts.map +1 -0
- package/dist/runtimeIdentity.mjs +21 -0
- package/dist/runtimeIdentity.mjs.map +1 -0
- package/dist/runtimeJson.cjs +46 -0
- package/dist/runtimeJson.cjs.map +1 -0
- package/dist/runtimeJson.d.mts +22 -0
- package/dist/runtimeJson.d.mts.map +1 -0
- package/dist/runtimeJson.mjs +39 -0
- package/dist/runtimeJson.mjs.map +1 -0
- package/dist/runtimeLogSinkTelemetry.cjs +102 -0
- package/dist/runtimeLogSinkTelemetry.cjs.map +1 -0
- package/dist/runtimeLogSinkTelemetry.d.mts +49 -0
- package/dist/runtimeLogSinkTelemetry.d.mts.map +1 -0
- package/dist/runtimeLogSinkTelemetry.mjs +99 -0
- package/dist/runtimeLogSinkTelemetry.mjs.map +1 -0
- package/dist/runtimePackages.cjs +120 -0
- package/dist/runtimePackages.cjs.map +1 -0
- package/dist/runtimePackages.d.mts +57 -0
- package/dist/runtimePackages.d.mts.map +1 -0
- package/dist/runtimePackages.mjs +110 -0
- package/dist/runtimePackages.mjs.map +1 -0
- package/dist/runtimePiSettings.cjs +257 -0
- package/dist/runtimePiSettings.cjs.map +1 -0
- package/dist/runtimePiSettings.d.mts +70 -0
- package/dist/runtimePiSettings.d.mts.map +1 -0
- package/dist/runtimePiSettings.mjs +235 -0
- package/dist/runtimePiSettings.mjs.map +1 -0
- package/dist/runtimeProtocol.cjs +228 -0
- package/dist/runtimeProtocol.cjs.map +1 -0
- package/dist/runtimeProtocol.d.mts +86 -0
- package/dist/runtimeProtocol.d.mts.map +1 -0
- package/dist/runtimeProtocol.mjs +219 -0
- package/dist/runtimeProtocol.mjs.map +1 -0
- package/dist/runtimeToolNames.cjs +51 -0
- package/dist/runtimeToolNames.cjs.map +1 -0
- package/dist/runtimeToolNames.d.mts +24 -0
- package/dist/runtimeToolNames.d.mts.map +1 -0
- package/dist/runtimeToolNames.mjs +49 -0
- package/dist/runtimeToolNames.mjs.map +1 -0
- package/dist/runtimeTransition.cjs +27 -0
- package/dist/runtimeTransition.cjs.map +1 -0
- package/dist/runtimeTransition.d.mts +114 -0
- package/dist/runtimeTransition.d.mts.map +1 -0
- package/dist/runtimeTransition.mjs +24 -0
- package/dist/runtimeTransition.mjs.map +1 -0
- package/dist/sandboxHarness.cjs +6 -0
- package/dist/sandboxHarness.d.mts +2 -0
- package/dist/sandboxHarness.mjs +2 -0
- package/dist/server.cjs +17 -0
- package/dist/server.d.mts +10 -0
- package/dist/server.mjs +7 -0
- package/dist/serverFacet.cjs +34 -0
- package/dist/serverFacet.d.mts +10 -0
- package/dist/serverFacet.mjs +9 -0
- package/dist/serverTelemetry.cjs +25 -0
- package/dist/serverTelemetry.cjs.map +1 -0
- package/dist/serverTelemetry.d.mts +12 -0
- package/dist/serverTelemetry.d.mts.map +1 -0
- package/dist/serverTelemetry.mjs +23 -0
- package/dist/serverTelemetry.mjs.map +1 -0
- package/dist/sessionFilesApi.cjs +96 -0
- package/dist/sessionFilesApi.cjs.map +1 -0
- package/dist/sessionFilesApi.d.mts +7 -0
- package/dist/sessionFilesApi.d.mts.map +1 -0
- package/dist/sessionFilesApi.mjs +91 -0
- package/dist/sessionFilesApi.mjs.map +1 -0
- package/dist/sessionMcp.cjs +6 -0
- package/dist/sessionMcp.d.mts +5 -0
- package/dist/sessionMcp.mjs +3 -0
- package/dist/sessionProtocol.cjs +8 -0
- package/dist/sessionProtocol.d.mts +3 -0
- package/dist/sessionProtocol.mjs +2 -0
- package/dist/skills.cjs +9 -0
- package/dist/skills.d.mts +2 -0
- package/dist/skills.mjs +2 -0
- package/dist/sqliteSessionStorage.cjs +168 -0
- package/dist/sqliteSessionStorage.cjs.map +1 -0
- package/dist/sqliteSessionStorage.d.mts +35 -0
- package/dist/sqliteSessionStorage.d.mts.map +1 -0
- package/dist/sqliteSessionStorage.mjs +158 -0
- package/dist/sqliteSessionStorage.mjs.map +1 -0
- package/dist/src/constants/authorTools.cjs +10 -0
- package/dist/src/constants/authorTools.cjs.map +1 -0
- package/dist/src/constants/authorTools.d.mts +6 -0
- package/dist/src/constants/authorTools.d.mts.map +1 -0
- package/dist/src/constants/authorTools.mjs +8 -0
- package/dist/src/constants/authorTools.mjs.map +1 -0
- package/dist/src/constants/contextApi.cjs +31 -0
- package/dist/src/constants/contextApi.cjs.map +1 -0
- package/dist/src/constants/contextApi.d.mts +23 -0
- package/dist/src/constants/contextApi.d.mts.map +1 -0
- package/dist/src/constants/contextApi.mjs +25 -0
- package/dist/src/constants/contextApi.mjs.map +1 -0
- package/dist/src/constants/nativeHost.cjs +56 -0
- package/dist/src/constants/nativeHost.cjs.map +1 -0
- package/dist/src/constants/nativeHost.d.mts +21 -0
- package/dist/src/constants/nativeHost.d.mts.map +1 -0
- package/dist/src/constants/nativeHost.mjs +53 -0
- package/dist/src/constants/nativeHost.mjs.map +1 -0
- package/dist/src/constants/remote.cjs +132 -0
- package/dist/src/constants/remote.cjs.map +1 -0
- package/dist/src/constants/remote.mjs +99 -0
- package/dist/src/constants/remote.mjs.map +1 -0
- package/dist/src/constants/sessionFiles.cjs +27 -0
- package/dist/src/constants/sessionFiles.cjs.map +1 -0
- package/dist/src/constants/sessionFiles.mjs +25 -0
- package/dist/src/constants/sessionFiles.mjs.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.cjs +12 -0
- package/dist/src/constants/voiceReloadHandoff.cjs.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.d.mts +7 -0
- package/dist/src/constants/voiceReloadHandoff.d.mts.map +1 -0
- package/dist/src/constants/voiceReloadHandoff.mjs +9 -0
- package/dist/src/constants/voiceReloadHandoff.mjs.map +1 -0
- package/dist/src/constants/voiceTools.cjs +96 -0
- package/dist/src/constants/voiceTools.cjs.map +1 -0
- package/dist/src/constants/voiceTools.d.mts +58 -0
- package/dist/src/constants/voiceTools.d.mts.map +1 -0
- package/dist/src/constants/voiceTools.mjs +60 -0
- package/dist/src/constants/voiceTools.mjs.map +1 -0
- package/dist/src/extensions/extensionFile.cjs +140 -0
- package/dist/src/extensions/extensionFile.cjs.map +1 -0
- package/dist/src/extensions/extensionFile.d.mts +69 -0
- package/dist/src/extensions/extensionFile.d.mts.map +1 -0
- package/dist/src/extensions/extensionFile.mjs +124 -0
- package/dist/src/extensions/extensionFile.mjs.map +1 -0
- package/dist/src/extensions/serverPlugin.cjs +107 -0
- package/dist/src/extensions/serverPlugin.cjs.map +1 -0
- package/dist/src/extensions/serverPlugin.d.mts +5 -0
- package/dist/src/extensions/serverPlugin.d.mts.map +1 -0
- package/dist/src/extensions/serverPlugin.mjs +107 -0
- package/dist/src/extensions/serverPlugin.mjs.map +1 -0
- package/dist/src/extensions/webPlugin.cjs +136 -0
- package/dist/src/extensions/webPlugin.cjs.map +1 -0
- package/dist/src/extensions/webPlugin.d.mts +68 -0
- package/dist/src/extensions/webPlugin.d.mts.map +1 -0
- package/dist/src/extensions/webPlugin.mjs +114 -0
- package/dist/src/extensions/webPlugin.mjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.cjs +625 -0
- package/dist/src/pi/piSessionRuntime.cjs.map +1 -0
- package/dist/src/pi/piSessionRuntime.d.mts +43 -0
- package/dist/src/pi/piSessionRuntime.d.mts.map +1 -0
- package/dist/src/pi/piSessionRuntime.mjs +624 -0
- package/dist/src/pi/piSessionRuntime.mjs.map +1 -0
- package/dist/src/pi/piWebSocketListener.cjs +115 -0
- package/dist/src/pi/piWebSocketListener.cjs.map +1 -0
- package/dist/src/pi/piWebSocketListener.mjs +115 -0
- package/dist/src/pi/piWebSocketListener.mjs.map +1 -0
- package/dist/src/schemas/agentModel.cjs +33 -0
- package/dist/src/schemas/agentModel.cjs.map +1 -0
- package/dist/src/schemas/agentModel.d.mts +26 -0
- package/dist/src/schemas/agentModel.d.mts.map +1 -0
- package/dist/src/schemas/agentModel.mjs +32 -0
- package/dist/src/schemas/agentModel.mjs.map +1 -0
- package/dist/src/schemas/apiContracts.d.mts +58 -0
- package/dist/src/schemas/apiContracts.d.mts.map +1 -0
- package/dist/src/schemas/askUser.cjs +42 -0
- package/dist/src/schemas/askUser.cjs.map +1 -0
- package/dist/src/schemas/askUser.d.mts +47 -0
- package/dist/src/schemas/askUser.d.mts.map +1 -0
- package/dist/src/schemas/askUser.mjs +37 -0
- package/dist/src/schemas/askUser.mjs.map +1 -0
- package/dist/src/schemas/backgroundWork.cjs +44 -0
- package/dist/src/schemas/backgroundWork.cjs.map +1 -0
- package/dist/src/schemas/backgroundWork.d.mts +76 -0
- package/dist/src/schemas/backgroundWork.d.mts.map +1 -0
- package/dist/src/schemas/backgroundWork.mjs +38 -0
- package/dist/src/schemas/backgroundWork.mjs.map +1 -0
- package/dist/src/schemas/childProcess.cjs +67 -0
- package/dist/src/schemas/childProcess.cjs.map +1 -0
- package/dist/src/schemas/childProcess.d.mts +30 -0
- package/dist/src/schemas/childProcess.d.mts.map +1 -0
- package/dist/src/schemas/childProcess.mjs +55 -0
- package/dist/src/schemas/childProcess.mjs.map +1 -0
- package/dist/src/schemas/cockpitContainer.cjs +31 -0
- package/dist/src/schemas/cockpitContainer.cjs.map +1 -0
- package/dist/src/schemas/cockpitContainer.d.mts +80 -0
- package/dist/src/schemas/cockpitContainer.d.mts.map +1 -0
- package/dist/src/schemas/cockpitContainer.mjs +30 -0
- package/dist/src/schemas/cockpitContainer.mjs.map +1 -0
- package/dist/src/schemas/contextContributions.cjs +17 -0
- package/dist/src/schemas/contextContributions.cjs.map +1 -0
- package/dist/src/schemas/contextContributions.d.mts +49 -0
- package/dist/src/schemas/contextContributions.d.mts.map +1 -0
- package/dist/src/schemas/contextContributions.mjs +15 -0
- package/dist/src/schemas/contextContributions.mjs.map +1 -0
- package/dist/src/schemas/delegation.cjs +91 -0
- package/dist/src/schemas/delegation.cjs.map +1 -0
- package/dist/src/schemas/delegation.d.mts +95 -0
- package/dist/src/schemas/delegation.d.mts.map +1 -0
- package/dist/src/schemas/delegation.mjs +76 -0
- package/dist/src/schemas/delegation.mjs.map +1 -0
- package/dist/src/schemas/extensionFile.d.mts +116 -0
- package/dist/src/schemas/extensionFile.d.mts.map +1 -0
- package/dist/src/schemas/footer.cjs +48 -0
- package/dist/src/schemas/footer.cjs.map +1 -0
- package/dist/src/schemas/footer.d.mts +48 -0
- package/dist/src/schemas/footer.d.mts.map +1 -0
- package/dist/src/schemas/footer.mjs +45 -0
- package/dist/src/schemas/footer.mjs.map +1 -0
- package/dist/src/schemas/headless.cjs +97 -0
- package/dist/src/schemas/headless.cjs.map +1 -0
- package/dist/src/schemas/headless.d.mts +472 -0
- package/dist/src/schemas/headless.d.mts.map +1 -0
- package/dist/src/schemas/headless.mjs +84 -0
- package/dist/src/schemas/headless.mjs.map +1 -0
- package/dist/src/schemas/help.cjs +281 -0
- package/dist/src/schemas/help.cjs.map +1 -0
- package/dist/src/schemas/help.d.mts +119 -0
- package/dist/src/schemas/help.d.mts.map +1 -0
- package/dist/src/schemas/help.mjs +262 -0
- package/dist/src/schemas/help.mjs.map +1 -0
- package/dist/src/schemas/hubChannel.cjs +20 -0
- package/dist/src/schemas/hubChannel.cjs.map +1 -0
- package/dist/src/schemas/hubChannel.d.mts +271 -0
- package/dist/src/schemas/hubChannel.d.mts.map +1 -0
- package/dist/src/schemas/hubChannel.mjs +19 -0
- package/dist/src/schemas/hubChannel.mjs.map +1 -0
- package/dist/src/schemas/leader.cjs +57 -0
- package/dist/src/schemas/leader.cjs.map +1 -0
- package/dist/src/schemas/leader.d.mts +107 -0
- package/dist/src/schemas/leader.d.mts.map +1 -0
- package/dist/src/schemas/leader.mjs +51 -0
- package/dist/src/schemas/leader.mjs.map +1 -0
- package/dist/src/schemas/mcpBundle.d.mts +13 -0
- package/dist/src/schemas/mcpBundle.d.mts.map +1 -0
- package/dist/src/schemas/mcpFacet.cjs +24 -0
- package/dist/src/schemas/mcpFacet.cjs.map +1 -0
- package/dist/src/schemas/mcpFacet.d.mts +91 -0
- package/dist/src/schemas/mcpFacet.d.mts.map +1 -0
- package/dist/src/schemas/mcpFacet.mjs +21 -0
- package/dist/src/schemas/mcpFacet.mjs.map +1 -0
- package/dist/src/schemas/mcpProjection.cjs +117 -0
- package/dist/src/schemas/mcpProjection.cjs.map +1 -0
- package/dist/src/schemas/mcpProjection.d.mts +124 -0
- package/dist/src/schemas/mcpProjection.d.mts.map +1 -0
- package/dist/src/schemas/mcpProjection.mjs +104 -0
- package/dist/src/schemas/mcpProjection.mjs.map +1 -0
- package/dist/src/schemas/mcpSession.cjs +57 -0
- package/dist/src/schemas/mcpSession.cjs.map +1 -0
- package/dist/src/schemas/mcpSession.d.mts +57 -0
- package/dist/src/schemas/mcpSession.d.mts.map +1 -0
- package/dist/src/schemas/mcpSession.mjs +51 -0
- package/dist/src/schemas/mcpSession.mjs.map +1 -0
- package/dist/src/schemas/mcpStatus.cjs +52 -0
- package/dist/src/schemas/mcpStatus.cjs.map +1 -0
- package/dist/src/schemas/mcpStatus.d.mts +73 -0
- package/dist/src/schemas/mcpStatus.d.mts.map +1 -0
- package/dist/src/schemas/mcpStatus.mjs +48 -0
- package/dist/src/schemas/mcpStatus.mjs.map +1 -0
- package/dist/src/schemas/mcpToolResolver.cjs +17 -0
- package/dist/src/schemas/mcpToolResolver.cjs.map +1 -0
- package/dist/src/schemas/mcpToolResolver.d.mts +24 -0
- package/dist/src/schemas/mcpToolResolver.d.mts.map +1 -0
- package/dist/src/schemas/mcpToolResolver.mjs +15 -0
- package/dist/src/schemas/mcpToolResolver.mjs.map +1 -0
- package/dist/src/schemas/narration.cjs +54 -0
- package/dist/src/schemas/narration.cjs.map +1 -0
- package/dist/src/schemas/narration.d.mts +29 -0
- package/dist/src/schemas/narration.d.mts.map +1 -0
- package/dist/src/schemas/narration.mjs +47 -0
- package/dist/src/schemas/narration.mjs.map +1 -0
- package/dist/src/schemas/notification.cjs +122 -0
- package/dist/src/schemas/notification.cjs.map +1 -0
- package/dist/src/schemas/notification.d.mts +48 -0
- package/dist/src/schemas/notification.d.mts.map +1 -0
- package/dist/src/schemas/notification.mjs +108 -0
- package/dist/src/schemas/notification.mjs.map +1 -0
- package/dist/src/schemas/packageApi.cjs +76 -0
- package/dist/src/schemas/packageApi.cjs.map +1 -0
- package/dist/src/schemas/packageApi.d.mts +302 -0
- package/dist/src/schemas/packageApi.d.mts.map +1 -0
- package/dist/src/schemas/packageApi.mjs +66 -0
- package/dist/src/schemas/packageApi.mjs.map +1 -0
- package/dist/src/schemas/pluginContributions.cjs +19 -0
- package/dist/src/schemas/pluginContributions.cjs.map +1 -0
- package/dist/src/schemas/pluginContributions.d.mts +56 -0
- package/dist/src/schemas/pluginContributions.d.mts.map +1 -0
- package/dist/src/schemas/pluginContributions.mjs +18 -0
- package/dist/src/schemas/pluginContributions.mjs.map +1 -0
- package/dist/src/schemas/pluginProtocol.cjs +103 -0
- package/dist/src/schemas/pluginProtocol.cjs.map +1 -0
- package/dist/src/schemas/pluginProtocol.d.mts +70 -0
- package/dist/src/schemas/pluginProtocol.d.mts.map +1 -0
- package/dist/src/schemas/pluginProtocol.mjs +96 -0
- package/dist/src/schemas/pluginProtocol.mjs.map +1 -0
- package/dist/src/schemas/profileIdentity.cjs +67 -0
- package/dist/src/schemas/profileIdentity.cjs.map +1 -0
- package/dist/src/schemas/profileIdentity.d.mts +50 -0
- package/dist/src/schemas/profileIdentity.d.mts.map +1 -0
- package/dist/src/schemas/profileIdentity.mjs +64 -0
- package/dist/src/schemas/profileIdentity.mjs.map +1 -0
- package/dist/src/schemas/readiness.cjs +251 -0
- package/dist/src/schemas/readiness.cjs.map +1 -0
- package/dist/src/schemas/readiness.d.mts +84 -0
- package/dist/src/schemas/readiness.d.mts.map +1 -0
- package/dist/src/schemas/readiness.mjs +246 -0
- package/dist/src/schemas/readiness.mjs.map +1 -0
- package/dist/src/schemas/sandboxHarness.cjs +29 -0
- package/dist/src/schemas/sandboxHarness.cjs.map +1 -0
- package/dist/src/schemas/sandboxHarness.d.mts +39 -0
- package/dist/src/schemas/sandboxHarness.d.mts.map +1 -0
- package/dist/src/schemas/sandboxHarness.mjs +26 -0
- package/dist/src/schemas/sandboxHarness.mjs.map +1 -0
- package/dist/src/schemas/serverBundle.d.mts +19 -0
- package/dist/src/schemas/serverBundle.d.mts.map +1 -0
- package/dist/src/schemas/serverFacet.cjs +111 -0
- package/dist/src/schemas/serverFacet.cjs.map +1 -0
- package/dist/src/schemas/serverFacet.d.mts +152 -0
- package/dist/src/schemas/serverFacet.d.mts.map +1 -0
- package/dist/src/schemas/serverFacet.mjs +101 -0
- package/dist/src/schemas/serverFacet.mjs.map +1 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts +47 -0
- package/dist/src/schemas/sessionMcpActivity.d.mts.map +1 -0
- package/dist/src/schemas/sessionProtocol.cjs +17 -0
- package/dist/src/schemas/sessionProtocol.cjs.map +1 -0
- package/dist/src/schemas/sessionProtocol.d.mts +313 -0
- package/dist/src/schemas/sessionProtocol.d.mts.map +1 -0
- package/dist/src/schemas/sessionProtocol.mjs +12 -0
- package/dist/src/schemas/sessionProtocol.mjs.map +1 -0
- package/dist/src/schemas/sessionUpdates.d.mts +34 -0
- package/dist/src/schemas/sessionUpdates.d.mts.map +1 -0
- package/dist/src/schemas/skills.cjs +115 -0
- package/dist/src/schemas/skills.cjs.map +1 -0
- package/dist/src/schemas/skills.d.mts +65 -0
- package/dist/src/schemas/skills.d.mts.map +1 -0
- package/dist/src/schemas/skills.mjs +109 -0
- package/dist/src/schemas/skills.mjs.map +1 -0
- package/dist/src/schemas/toolOverrides.cjs +17 -0
- package/dist/src/schemas/toolOverrides.cjs.map +1 -0
- package/dist/src/schemas/toolOverrides.d.mts +29 -0
- package/dist/src/schemas/toolOverrides.d.mts.map +1 -0
- package/dist/src/schemas/toolOverrides.mjs +15 -0
- package/dist/src/schemas/toolOverrides.mjs.map +1 -0
- package/dist/src/schemas/toolSurface.cjs +17 -0
- package/dist/src/schemas/toolSurface.cjs.map +1 -0
- package/dist/src/schemas/toolSurface.d.mts +70 -0
- package/dist/src/schemas/toolSurface.d.mts.map +1 -0
- package/dist/src/schemas/toolSurface.mjs +15 -0
- package/dist/src/schemas/toolSurface.mjs.map +1 -0
- package/dist/src/schemas/uiHub.cjs +17 -0
- package/dist/src/schemas/uiHub.cjs.map +1 -0
- package/dist/src/schemas/uiHub.d.mts +23 -0
- package/dist/src/schemas/uiHub.d.mts.map +1 -0
- package/dist/src/schemas/uiHub.mjs +15 -0
- package/dist/src/schemas/uiHub.mjs.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.cjs +78 -0
- package/dist/src/schemas/voiceReloadHandoff.cjs.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.d.mts +31 -0
- package/dist/src/schemas/voiceReloadHandoff.d.mts.map +1 -0
- package/dist/src/schemas/voiceReloadHandoff.mjs +75 -0
- package/dist/src/schemas/voiceReloadHandoff.mjs.map +1 -0
- package/dist/src/schemas/voiceTools.cjs +205 -0
- package/dist/src/schemas/voiceTools.cjs.map +1 -0
- package/dist/src/schemas/voiceTools.d.mts +120 -0
- package/dist/src/schemas/voiceTools.d.mts.map +1 -0
- package/dist/src/schemas/voiceTools.mjs +194 -0
- package/dist/src/schemas/voiceTools.mjs.map +1 -0
- package/dist/src/server/devProxyForward.cjs +141 -0
- package/dist/src/server/devProxyForward.cjs.map +1 -0
- package/dist/src/server/devProxyForward.mjs +139 -0
- package/dist/src/server/devProxyForward.mjs.map +1 -0
- package/dist/src/server/devProxyRoutes.cjs +97 -0
- package/dist/src/server/devProxyRoutes.cjs.map +1 -0
- package/dist/src/server/devProxyRoutes.mjs +97 -0
- package/dist/src/server/devProxyRoutes.mjs.map +1 -0
- package/dist/src/server/devProxySocket.cjs +93 -0
- package/dist/src/server/devProxySocket.cjs.map +1 -0
- package/dist/src/server/devProxySocket.d.mts +25 -0
- package/dist/src/server/devProxySocket.d.mts.map +1 -0
- package/dist/src/server/devProxySocket.mjs +93 -0
- package/dist/src/server/devProxySocket.mjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.cjs +2387 -0
- package/dist/src/server/directHarnessRuntime.cjs.map +1 -0
- package/dist/src/server/directHarnessRuntime.d.mts +4 -0
- package/dist/src/server/directHarnessRuntime.mjs +2384 -0
- package/dist/src/server/directHarnessRuntime.mjs.map +1 -0
- package/dist/src/server/harnessErrorMessage.cjs +13 -0
- package/dist/src/server/harnessErrorMessage.cjs.map +1 -0
- package/dist/src/server/harnessErrorMessage.mjs +13 -0
- package/dist/src/server/harnessErrorMessage.mjs.map +1 -0
- package/dist/src/server/headlessProtocol.cjs +382 -0
- package/dist/src/server/headlessProtocol.cjs.map +1 -0
- package/dist/src/server/headlessProtocol.mjs +382 -0
- package/dist/src/server/headlessProtocol.mjs.map +1 -0
- package/dist/src/server/liveImport.cjs +37 -0
- package/dist/src/server/liveImport.cjs.map +1 -0
- package/dist/src/server/liveImport.d.mts +27 -0
- package/dist/src/server/liveImport.d.mts.map +1 -0
- package/dist/src/server/liveImport.mjs +34 -0
- package/dist/src/server/liveImport.mjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.cjs +108 -0
- package/dist/src/server/mcpBundleLoader.cjs.map +1 -0
- package/dist/src/server/mcpBundleLoader.d.mts +46 -0
- package/dist/src/server/mcpBundleLoader.d.mts.map +1 -0
- package/dist/src/server/mcpBundleLoader.mjs +107 -0
- package/dist/src/server/mcpBundleLoader.mjs.map +1 -0
- package/dist/src/server/nativeChildTranscriptReader.cjs +20 -0
- package/dist/src/server/nativeChildTranscriptReader.cjs.map +1 -0
- package/dist/src/server/nativeChildTranscriptReader.mjs +18 -0
- package/dist/src/server/nativeChildTranscriptReader.mjs.map +1 -0
- package/dist/src/server/remoteRoutes.cjs +463 -0
- package/dist/src/server/remoteRoutes.cjs.map +1 -0
- package/dist/src/server/remoteRoutes.mjs +463 -0
- package/dist/src/server/remoteRoutes.mjs.map +1 -0
- package/dist/src/server/serverFacetLoader.cjs +214 -0
- package/dist/src/server/serverFacetLoader.cjs.map +1 -0
- package/dist/src/server/serverFacetLoader.d.mts +72 -0
- package/dist/src/server/serverFacetLoader.d.mts.map +1 -0
- package/dist/src/server/serverFacetLoader.mjs +212 -0
- package/dist/src/server/serverFacetLoader.mjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.cjs +585 -0
- package/dist/src/server/sessionMcpHandler.cjs.map +1 -0
- package/dist/src/server/sessionMcpHandler.d.mts +50 -0
- package/dist/src/server/sessionMcpHandler.d.mts.map +1 -0
- package/dist/src/server/sessionMcpHandler.mjs +582 -0
- package/dist/src/server/sessionMcpHandler.mjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.cjs +809 -0
- package/dist/src/server/sessionMcpRoutes.cjs.map +1 -0
- package/dist/src/server/sessionMcpRoutes.mjs +804 -0
- package/dist/src/server/sessionMcpRoutes.mjs.map +1 -0
- package/dist/src/server/threadJournals.cjs +172 -0
- package/dist/src/server/threadJournals.cjs.map +1 -0
- package/dist/src/server/threadJournals.mjs +169 -0
- package/dist/src/server/threadJournals.mjs.map +1 -0
- package/dist/src/services/acpSessionUpdates/index.cjs +129 -0
- package/dist/src/services/acpSessionUpdates/index.cjs.map +1 -0
- package/dist/src/services/acpSessionUpdates/index.mjs +129 -0
- package/dist/src/services/acpSessionUpdates/index.mjs.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.cjs +60 -0
- package/dist/src/services/apiSurfaceAssert/index.cjs.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.d.mts +24 -0
- package/dist/src/services/apiSurfaceAssert/index.d.mts.map +1 -0
- package/dist/src/services/apiSurfaceAssert/index.mjs +60 -0
- package/dist/src/services/apiSurfaceAssert/index.mjs.map +1 -0
- package/dist/src/services/bundlePublication/index.cjs +89 -0
- package/dist/src/services/bundlePublication/index.cjs.map +1 -0
- package/dist/src/services/bundlePublication/index.mjs +86 -0
- package/dist/src/services/bundlePublication/index.mjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.cjs +53 -0
- package/dist/src/services/contextApiUrls/index.cjs.map +1 -0
- package/dist/src/services/contextApiUrls/index.d.mts +8 -0
- package/dist/src/services/contextApiUrls/index.d.mts.map +1 -0
- package/dist/src/services/contextApiUrls/index.mjs +52 -0
- package/dist/src/services/contextApiUrls/index.mjs.map +1 -0
- package/dist/src/services/contextContributions/index.cjs +79 -0
- package/dist/src/services/contextContributions/index.cjs.map +1 -0
- package/dist/src/services/contextContributions/index.d.mts +6 -0
- package/dist/src/services/contextContributions/index.d.mts.map +1 -0
- package/dist/src/services/contextContributions/index.mjs +79 -0
- package/dist/src/services/contextContributions/index.mjs.map +1 -0
- package/dist/src/services/contextUsage/index.cjs +27 -0
- package/dist/src/services/contextUsage/index.cjs.map +1 -0
- package/dist/src/services/contextUsage/index.mjs +25 -0
- package/dist/src/services/contextUsage/index.mjs.map +1 -0
- package/dist/src/services/devProxyPolicy/index.cjs +168 -0
- package/dist/src/services/devProxyPolicy/index.cjs.map +1 -0
- package/dist/src/services/devProxyPolicy/index.mjs +165 -0
- package/dist/src/services/devProxyPolicy/index.mjs.map +1 -0
- package/dist/src/services/devProxyStore/index.cjs +107 -0
- package/dist/src/services/devProxyStore/index.cjs.map +1 -0
- package/dist/src/services/devProxyStore/index.mjs +104 -0
- package/dist/src/services/devProxyStore/index.mjs.map +1 -0
- package/dist/src/services/deviceAuth/index.cjs +146 -0
- package/dist/src/services/deviceAuth/index.cjs.map +1 -0
- package/dist/src/services/deviceAuth/index.d.mts +9 -0
- package/dist/src/services/deviceAuth/index.d.mts.map +1 -0
- package/dist/src/services/deviceAuth/index.mjs +146 -0
- package/dist/src/services/deviceAuth/index.mjs.map +1 -0
- package/dist/src/services/deviceSessions/index.cjs +147 -0
- package/dist/src/services/deviceSessions/index.cjs.map +1 -0
- package/dist/src/services/deviceSessions/index.d.mts +18 -0
- package/dist/src/services/deviceSessions/index.d.mts.map +1 -0
- package/dist/src/services/deviceSessions/index.mjs +141 -0
- package/dist/src/services/deviceSessions/index.mjs.map +1 -0
- package/dist/src/services/deviceTrust/index.cjs +294 -0
- package/dist/src/services/deviceTrust/index.cjs.map +1 -0
- package/dist/src/services/deviceTrust/index.mjs +282 -0
- package/dist/src/services/deviceTrust/index.mjs.map +1 -0
- package/dist/src/services/durableNavigation/index.cjs +46 -0
- package/dist/src/services/durableNavigation/index.cjs.map +1 -0
- package/dist/src/services/durableNavigation/index.mjs +45 -0
- package/dist/src/services/durableNavigation/index.mjs.map +1 -0
- package/dist/src/services/headlessClient/index.cjs +126 -0
- package/dist/src/services/headlessClient/index.cjs.map +1 -0
- package/dist/src/services/headlessClient/index.mjs +126 -0
- package/dist/src/services/headlessClient/index.mjs.map +1 -0
- package/dist/src/services/historyImport/index.cjs +8 -0
- package/dist/src/services/historyImport/index.cjs.map +1 -0
- package/dist/src/services/historyImport/index.d.mts +68 -0
- package/dist/src/services/historyImport/index.d.mts.map +1 -0
- package/dist/src/services/historyImport/index.mjs +8 -0
- package/dist/src/services/historyImport/index.mjs.map +1 -0
- package/dist/src/services/hubChannelHarness/index.cjs +50 -0
- package/dist/src/services/hubChannelHarness/index.cjs.map +1 -0
- package/dist/src/services/hubChannelHarness/index.d.mts +17 -0
- package/dist/src/services/hubChannelHarness/index.d.mts.map +1 -0
- package/dist/src/services/hubChannelHarness/index.mjs +50 -0
- package/dist/src/services/hubChannelHarness/index.mjs.map +1 -0
- package/dist/src/services/kernel/index.cjs +147 -0
- package/dist/src/services/kernel/index.cjs.map +1 -0
- package/dist/src/services/kernel/index.d.mts +9 -0
- package/dist/src/services/kernel/index.d.mts.map +1 -0
- package/dist/src/services/kernel/index.mjs +147 -0
- package/dist/src/services/kernel/index.mjs.map +1 -0
- package/dist/src/services/loginFlow/index.cjs +131 -0
- package/dist/src/services/loginFlow/index.cjs.map +1 -0
- package/dist/src/services/loginFlow/index.mjs +131 -0
- package/dist/src/services/loginFlow/index.mjs.map +1 -0
- package/dist/src/services/loopbackAddress/index.cjs +58 -0
- package/dist/src/services/loopbackAddress/index.cjs.map +1 -0
- package/dist/src/services/loopbackAddress/index.mjs +56 -0
- package/dist/src/services/loopbackAddress/index.mjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.cjs +134 -0
- package/dist/src/services/openSessionRegistry/index.cjs.map +1 -0
- package/dist/src/services/openSessionRegistry/index.d.mts +36 -0
- package/dist/src/services/openSessionRegistry/index.d.mts.map +1 -0
- package/dist/src/services/openSessionRegistry/index.mjs +131 -0
- package/dist/src/services/openSessionRegistry/index.mjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.cjs +36 -0
- package/dist/src/services/packageApiHarness/index.cjs.map +1 -0
- package/dist/src/services/packageApiHarness/index.d.mts +40 -0
- package/dist/src/services/packageApiHarness/index.d.mts.map +1 -0
- package/dist/src/services/packageApiHarness/index.mjs +36 -0
- package/dist/src/services/packageApiHarness/index.mjs.map +1 -0
- package/dist/src/services/packageResource/index.cjs +54 -0
- package/dist/src/services/packageResource/index.cjs.map +1 -0
- package/dist/src/services/packageResource/index.d.mts +26 -0
- package/dist/src/services/packageResource/index.d.mts.map +1 -0
- package/dist/src/services/packageResource/index.mjs +51 -0
- package/dist/src/services/packageResource/index.mjs.map +1 -0
- package/dist/src/services/pairingFlow/index.cjs +145 -0
- package/dist/src/services/pairingFlow/index.cjs.map +1 -0
- package/dist/src/services/pairingFlow/index.d.mts +44 -0
- package/dist/src/services/pairingFlow/index.d.mts.map +1 -0
- package/dist/src/services/pairingFlow/index.mjs +145 -0
- package/dist/src/services/pairingFlow/index.mjs.map +1 -0
- package/dist/src/services/pairingPage/index.cjs +450 -0
- package/dist/src/services/pairingPage/index.cjs.map +1 -0
- package/dist/src/services/pairingPage/index.mjs +447 -0
- package/dist/src/services/pairingPage/index.mjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.cjs +889 -0
- package/dist/src/services/piExtensionHost/index.cjs.map +1 -0
- package/dist/src/services/piExtensionHost/index.mjs +885 -0
- package/dist/src/services/piExtensionHost/index.mjs.map +1 -0
- package/dist/src/services/piHelpTools/index.cjs +68 -0
- package/dist/src/services/piHelpTools/index.cjs.map +1 -0
- package/dist/src/services/piHelpTools/index.d.mts +10 -0
- package/dist/src/services/piHelpTools/index.d.mts.map +1 -0
- package/dist/src/services/piHelpTools/index.mjs +68 -0
- package/dist/src/services/piHelpTools/index.mjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.cjs +121 -0
- package/dist/src/services/piSessionEntries/index.cjs.map +1 -0
- package/dist/src/services/piSessionEntries/index.mjs +117 -0
- package/dist/src/services/piSessionEntries/index.mjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.cjs +71 -0
- package/dist/src/services/pluginLifecycle/index.cjs.map +1 -0
- package/dist/src/services/pluginLifecycle/index.d.mts +8 -0
- package/dist/src/services/pluginLifecycle/index.d.mts.map +1 -0
- package/dist/src/services/pluginLifecycle/index.mjs +71 -0
- package/dist/src/services/pluginLifecycle/index.mjs.map +1 -0
- package/dist/src/services/providerAuth/index.cjs +156 -0
- package/dist/src/services/providerAuth/index.cjs.map +1 -0
- package/dist/src/services/providerAuth/index.mjs +154 -0
- package/dist/src/services/providerAuth/index.mjs.map +1 -0
- package/dist/src/services/publicFileShares/index.cjs +192 -0
- package/dist/src/services/publicFileShares/index.cjs.map +1 -0
- package/dist/src/services/publicFileShares/index.d.mts +16 -0
- package/dist/src/services/publicFileShares/index.d.mts.map +1 -0
- package/dist/src/services/publicFileShares/index.mjs +188 -0
- package/dist/src/services/publicFileShares/index.mjs.map +1 -0
- package/dist/src/services/remoteAccess/index.cjs +567 -0
- package/dist/src/services/remoteAccess/index.cjs.map +1 -0
- package/dist/src/services/remoteAccess/index.d.mts +121 -0
- package/dist/src/services/remoteAccess/index.d.mts.map +1 -0
- package/dist/src/services/remoteAccess/index.mjs +567 -0
- package/dist/src/services/remoteAccess/index.mjs.map +1 -0
- package/dist/src/services/remoteAccessSettings/index.cjs +151 -0
- package/dist/src/services/remoteAccessSettings/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessSettings/index.mjs +149 -0
- package/dist/src/services/remoteAccessSettings/index.mjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.cjs +197 -0
- package/dist/src/services/remoteAccessStore/index.cjs.map +1 -0
- package/dist/src/services/remoteAccessStore/index.mjs +192 -0
- package/dist/src/services/remoteAccessStore/index.mjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs +200 -0
- package/dist/src/services/remoteGuardPolicy/index.cjs.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.d.mts +7 -0
- package/dist/src/services/remoteGuardPolicy/index.d.mts.map +1 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs +196 -0
- package/dist/src/services/remoteGuardPolicy/index.mjs.map +1 -0
- package/dist/src/services/requestReceipts/index.cjs +167 -0
- package/dist/src/services/requestReceipts/index.cjs.map +1 -0
- package/dist/src/services/requestReceipts/index.d.mts +11 -0
- package/dist/src/services/requestReceipts/index.d.mts.map +1 -0
- package/dist/src/services/requestReceipts/index.mjs +167 -0
- package/dist/src/services/requestReceipts/index.mjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.cjs +633 -0
- package/dist/src/services/rpcTranscript/index.cjs.map +1 -0
- package/dist/src/services/rpcTranscript/index.d.mts +50 -0
- package/dist/src/services/rpcTranscript/index.d.mts.map +1 -0
- package/dist/src/services/rpcTranscript/index.mjs +632 -0
- package/dist/src/services/rpcTranscript/index.mjs.map +1 -0
- package/dist/src/services/serverFacet/index.cjs +197 -0
- package/dist/src/services/serverFacet/index.cjs.map +1 -0
- package/dist/src/services/serverFacet/index.d.mts +31 -0
- package/dist/src/services/serverFacet/index.d.mts.map +1 -0
- package/dist/src/services/serverFacet/index.mjs +197 -0
- package/dist/src/services/serverFacet/index.mjs.map +1 -0
- package/dist/src/services/sessionAttachments/index.cjs +111 -0
- package/dist/src/services/sessionAttachments/index.cjs.map +1 -0
- package/dist/src/services/sessionAttachments/index.d.mts +11 -0
- package/dist/src/services/sessionAttachments/index.d.mts.map +1 -0
- package/dist/src/services/sessionAttachments/index.mjs +107 -0
- package/dist/src/services/sessionAttachments/index.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.cjs +46 -0
- package/dist/src/services/sessionGitStatus/index.cjs.map +1 -0
- package/dist/src/services/sessionGitStatus/index.mjs +46 -0
- package/dist/src/services/sessionGitStatus/index.mjs.map +1 -0
- package/dist/src/services/sessionGitStatus/type.d.mts +8 -0
- package/dist/src/services/sessionGitStatus/type.d.mts.map +1 -0
- package/dist/src/services/sessionMcpActivity/index.cjs +115 -0
- package/dist/src/services/sessionMcpActivity/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpActivity/index.mjs +111 -0
- package/dist/src/services/sessionMcpActivity/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs +473 -0
- package/dist/src/services/sessionMcpAuthorization/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts +125 -0
- package/dist/src/services/sessionMcpAuthorization/index.d.mts.map +1 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs +469 -0
- package/dist/src/services/sessionMcpAuthorization/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpConversations/index.cjs +217 -0
- package/dist/src/services/sessionMcpConversations/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpConversations/index.mjs +212 -0
- package/dist/src/services/sessionMcpConversations/index.mjs.map +1 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.cjs +86 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.cjs.map +1 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.mjs +83 -0
- package/dist/src/services/sessionMcpRegistrationStore/index.mjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.cjs +120 -0
- package/dist/src/services/sessionPresentation/index.cjs.map +1 -0
- package/dist/src/services/sessionPresentation/index.mjs +120 -0
- package/dist/src/services/sessionPresentation/index.mjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs +97 -0
- package/dist/src/services/sqliteSessionHistory/index.cjs.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts +28 -0
- package/dist/src/services/sqliteSessionHistory/index.d.mts.map +1 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs +92 -0
- package/dist/src/services/sqliteSessionHistory/index.mjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs +67 -0
- package/dist/src/services/sqliteTranscriptReader/index.cjs.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.d.mts +14 -0
- package/dist/src/services/sqliteTranscriptReader/index.d.mts.map +1 -0
- package/dist/src/services/sqliteTranscriptReader/index.mjs +65 -0
- package/dist/src/services/sqliteTranscriptReader/index.mjs.map +1 -0
- package/dist/src/services/toolCost/index.cjs +47 -0
- package/dist/src/services/toolCost/index.cjs.map +1 -0
- package/dist/src/services/toolCost/index.d.mts +38 -0
- package/dist/src/services/toolCost/index.d.mts.map +1 -0
- package/dist/src/services/toolCost/index.mjs +46 -0
- package/dist/src/services/toolCost/index.mjs.map +1 -0
- package/dist/src/services/toolOverrides/index.cjs +45 -0
- package/dist/src/services/toolOverrides/index.cjs.map +1 -0
- package/dist/src/services/toolOverrides/index.d.mts +6 -0
- package/dist/src/services/toolOverrides/index.d.mts.map +1 -0
- package/dist/src/services/toolOverrides/index.mjs +45 -0
- package/dist/src/services/toolOverrides/index.mjs.map +1 -0
- package/dist/src/services/toolPrompt/index.cjs +13 -0
- package/dist/src/services/toolPrompt/index.cjs.map +1 -0
- package/dist/src/services/toolPrompt/index.mjs +13 -0
- package/dist/src/services/toolPrompt/index.mjs.map +1 -0
- package/dist/src/services/toolSurface/index.cjs +134 -0
- package/dist/src/services/toolSurface/index.cjs.map +1 -0
- package/dist/src/services/toolSurface/index.d.mts +19 -0
- package/dist/src/services/toolSurface/index.d.mts.map +1 -0
- package/dist/src/services/toolSurface/index.mjs +134 -0
- package/dist/src/services/toolSurface/index.mjs.map +1 -0
- package/dist/src/services/traceContext/index.cjs +13 -0
- package/dist/src/services/traceContext/index.cjs.map +1 -0
- package/dist/src/services/traceContext/index.mjs +13 -0
- package/dist/src/services/traceContext/index.mjs.map +1 -0
- package/dist/src/services/transcriptPages/index.cjs +117 -0
- package/dist/src/services/transcriptPages/index.cjs.map +1 -0
- package/dist/src/services/transcriptPages/index.mjs +115 -0
- package/dist/src/services/transcriptPages/index.mjs.map +1 -0
- package/dist/src/services/tunnelOutput/index.cjs +58 -0
- package/dist/src/services/tunnelOutput/index.cjs.map +1 -0
- package/dist/src/services/tunnelOutput/index.mjs +54 -0
- package/dist/src/services/tunnelOutput/index.mjs.map +1 -0
- package/dist/src/services/tunnelProcess/index.cjs +487 -0
- package/dist/src/services/tunnelProcess/index.cjs.map +1 -0
- package/dist/src/services/tunnelProcess/index.mjs +481 -0
- package/dist/src/services/tunnelProcess/index.mjs.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.cjs +136 -0
- package/dist/src/services/voiceReloadHandoff/index.cjs.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.d.mts +34 -0
- package/dist/src/services/voiceReloadHandoff/index.d.mts.map +1 -0
- package/dist/src/services/voiceReloadHandoff/index.mjs +135 -0
- package/dist/src/services/voiceReloadHandoff/index.mjs.map +1 -0
- package/dist/src/services/voiceToolsContract/index.cjs +26 -0
- package/dist/src/services/voiceToolsContract/index.cjs.map +1 -0
- package/dist/src/services/voiceToolsContract/index.d.mts +76 -0
- package/dist/src/services/voiceToolsContract/index.d.mts.map +1 -0
- package/dist/src/services/voiceToolsContract/index.mjs +24 -0
- package/dist/src/services/voiceToolsContract/index.mjs.map +1 -0
- package/dist/src/services/webauthn/index.cjs +262 -0
- package/dist/src/services/webauthn/index.cjs.map +1 -0
- package/dist/src/services/webauthn/index.d.mts +39 -0
- package/dist/src/services/webauthn/index.d.mts.map +1 -0
- package/dist/src/services/webauthn/index.mjs +262 -0
- package/dist/src/services/webauthn/index.mjs.map +1 -0
- package/dist/src/services/webauthnPolicy/index.cjs +174 -0
- package/dist/src/services/webauthnPolicy/index.cjs.map +1 -0
- package/dist/src/services/webauthnPolicy/index.d.mts +41 -0
- package/dist/src/services/webauthnPolicy/index.d.mts.map +1 -0
- package/dist/src/services/webauthnPolicy/index.mjs +167 -0
- package/dist/src/services/webauthnPolicy/index.mjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.cjs +187 -0
- package/dist/src/services/workspaceRegistry/index.cjs.map +1 -0
- package/dist/src/services/workspaceRegistry/index.d.mts +47 -0
- package/dist/src/services/workspaceRegistry/index.d.mts.map +1 -0
- package/dist/src/services/workspaceRegistry/index.mjs +179 -0
- package/dist/src/services/workspaceRegistry/index.mjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs +466 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.cjs.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts +36 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.d.mts.map +1 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs +457 -0
- package/dist/src/systems/child/adapters/headlessChildSessionService.mjs.map +1 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs +28 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.cjs.map +1 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs +25 -0
- package/dist/src/systems/child/adapters/nativeChildRuntimes.mjs.map +1 -0
- package/dist/src/systems/child/services/childSession/index.cjs +219 -0
- package/dist/src/systems/child/services/childSession/index.cjs.map +1 -0
- package/dist/src/systems/child/services/childSession/index.d.mts +14 -0
- package/dist/src/systems/child/services/childSession/index.d.mts.map +1 -0
- package/dist/src/systems/child/services/childSession/index.mjs +219 -0
- package/dist/src/systems/child/services/childSession/index.mjs.map +1 -0
- package/dist/src/systems/child/types/childSession.cjs +21 -0
- package/dist/src/systems/child/types/childSession.cjs.map +1 -0
- package/dist/src/systems/child/types/childSession.d.mts +182 -0
- package/dist/src/systems/child/types/childSession.d.mts.map +1 -0
- package/dist/src/systems/child/types/childSession.mjs +17 -0
- package/dist/src/systems/child/types/childSession.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs +597 -0
- package/dist/src/systems/main/adapters/headlessHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts +116 -0
- package/dist/src/systems/main/adapters/headlessHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs +595 -0
- package/dist/src/systems/main/adapters/headlessHost.mjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs +1668 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.cjs.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts +20 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.d.mts.map +1 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs +1663 -0
- package/dist/src/systems/main/adapters/headlessSessionHost.mjs.map +1 -0
- package/dist/src/systems/main/types/headlessHost.d.mts +37 -0
- package/dist/src/systems/main/types/headlessHost.d.mts.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.cjs +73 -0
- package/dist/src/testing/pi/extensionScenarios.cjs.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.d.mts +41 -0
- package/dist/src/testing/pi/extensionScenarios.d.mts.map +1 -0
- package/dist/src/testing/pi/extensionScenarios.mjs +73 -0
- package/dist/src/testing/pi/extensionScenarios.mjs.map +1 -0
- package/dist/src/testing/pi/testHost.cjs +399 -0
- package/dist/src/testing/pi/testHost.cjs.map +1 -0
- package/dist/src/testing/pi/testHost.d.mts +160 -0
- package/dist/src/testing/pi/testHost.d.mts.map +1 -0
- package/dist/src/testing/pi/testHost.mjs +399 -0
- package/dist/src/testing/pi/testHost.mjs.map +1 -0
- package/dist/src/types/config.d.mts +20 -0
- package/dist/src/types/config.d.mts.map +1 -0
- package/dist/src/types/kernel.d.mts +69 -0
- package/dist/src/types/kernel.d.mts.map +1 -0
- package/dist/src/types/remote.d.mts +152 -0
- package/dist/src/types/remote.d.mts.map +1 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts +526 -0
- package/dist/src/types/server/directHarnessRuntime.d.mts.map +1 -0
- package/dist/src/types/server/session.d.mts +5 -0
- package/dist/src/types/server/session.d.mts.map +1 -0
- package/dist/src/types/server/sessionToolSurface.d.mts +44 -0
- package/dist/src/types/server/sessionToolSurface.d.mts.map +1 -0
- package/dist/src/web/models/globalStore.cjs +23 -0
- package/dist/src/web/models/globalStore.cjs.map +1 -0
- package/dist/src/web/models/globalStore.d.mts +6 -0
- package/dist/src/web/models/globalStore.d.mts.map +1 -0
- package/dist/src/web/models/globalStore.mjs +23 -0
- package/dist/src/web/models/globalStore.mjs.map +1 -0
- package/dist/src/web/models/sessionStore.cjs +56 -0
- package/dist/src/web/models/sessionStore.cjs.map +1 -0
- package/dist/src/web/models/sessionStore.d.mts +14 -0
- package/dist/src/web/models/sessionStore.d.mts.map +1 -0
- package/dist/src/web/models/sessionStore.mjs +56 -0
- package/dist/src/web/models/sessionStore.mjs.map +1 -0
- package/dist/src/web/models/workspaceStore.cjs +50 -0
- package/dist/src/web/models/workspaceStore.cjs.map +1 -0
- package/dist/src/web/models/workspaceStore.d.mts +18 -0
- package/dist/src/web/models/workspaceStore.d.mts.map +1 -0
- package/dist/src/web/models/workspaceStore.mjs +50 -0
- package/dist/src/web/models/workspaceStore.mjs.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.cjs +20 -0
- package/dist/src/web/schemas/bundleAssetPolicy.cjs.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.d.mts +10 -0
- package/dist/src/web/schemas/bundleAssetPolicy.d.mts.map +1 -0
- package/dist/src/web/schemas/bundleAssetPolicy.mjs +18 -0
- package/dist/src/web/schemas/bundleAssetPolicy.mjs.map +1 -0
- package/dist/src/web/schemas/template.cjs +35 -0
- package/dist/src/web/schemas/template.cjs.map +1 -0
- package/dist/src/web/schemas/template.d.mts +9 -0
- package/dist/src/web/schemas/template.d.mts.map +1 -0
- package/dist/src/web/schemas/template.mjs +34 -0
- package/dist/src/web/schemas/template.mjs.map +1 -0
- package/dist/src/web/services/apiClient/index.cjs +156 -0
- package/dist/src/web/services/apiClient/index.cjs.map +1 -0
- package/dist/src/web/services/apiClient/index.d.mts +152 -0
- package/dist/src/web/services/apiClient/index.d.mts.map +1 -0
- package/dist/src/web/services/apiClient/index.mjs +154 -0
- package/dist/src/web/services/apiClient/index.mjs.map +1 -0
- package/dist/src/web/services/apiPaths/index.cjs +83 -0
- package/dist/src/web/services/apiPaths/index.cjs.map +1 -0
- package/dist/src/web/services/apiPaths/index.d.mts +81 -0
- package/dist/src/web/services/apiPaths/index.d.mts.map +1 -0
- package/dist/src/web/services/apiPaths/index.mjs +78 -0
- package/dist/src/web/services/apiPaths/index.mjs.map +1 -0
- package/dist/src/web/services/apiRoutes/index.cjs +47 -0
- package/dist/src/web/services/apiRoutes/index.cjs.map +1 -0
- package/dist/src/web/services/apiRoutes/index.d.mts +21 -0
- package/dist/src/web/services/apiRoutes/index.d.mts.map +1 -0
- package/dist/src/web/services/apiRoutes/index.mjs +43 -0
- package/dist/src/web/services/apiRoutes/index.mjs.map +1 -0
- package/dist/src/web/services/mcpWidget.cjs +9 -0
- package/dist/src/web/services/mcpWidget.cjs.map +1 -0
- package/dist/src/web/services/mcpWidget.d.mts +6 -0
- package/dist/src/web/services/mcpWidget.d.mts.map +1 -0
- package/dist/src/web/services/mcpWidget.mjs +9 -0
- package/dist/src/web/services/mcpWidget.mjs.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.cjs +70 -0
- package/dist/src/web/services/sessionRegistry/index.cjs.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.d.mts +29 -0
- package/dist/src/web/services/sessionRegistry/index.d.mts.map +1 -0
- package/dist/src/web/services/sessionRegistry/index.mjs +66 -0
- package/dist/src/web/services/sessionRegistry/index.mjs.map +1 -0
- package/dist/src/web/services/testing/channels.cjs +11 -0
- package/dist/src/web/services/testing/channels.cjs.map +1 -0
- package/dist/src/web/services/testing/channels.d.mts +8 -0
- package/dist/src/web/services/testing/channels.d.mts.map +1 -0
- package/dist/src/web/services/testing/channels.mjs +11 -0
- package/dist/src/web/services/testing/channels.mjs.map +1 -0
- package/dist/src/web/services/testing/index.cjs +27 -0
- package/dist/src/web/services/testing/index.cjs.map +1 -0
- package/dist/src/web/services/testing/index.d.mts +31 -0
- package/dist/src/web/services/testing/index.d.mts.map +1 -0
- package/dist/src/web/services/testing/index.mjs +27 -0
- package/dist/src/web/services/testing/index.mjs.map +1 -0
- package/dist/src/web/services/testing/rpcStub.cjs +58 -0
- package/dist/src/web/services/testing/rpcStub.cjs.map +1 -0
- package/dist/src/web/services/testing/rpcStub.d.mts +37 -0
- package/dist/src/web/services/testing/rpcStub.d.mts.map +1 -0
- package/dist/src/web/services/testing/rpcStub.mjs +58 -0
- package/dist/src/web/services/testing/rpcStub.mjs.map +1 -0
- package/dist/src/web/services/testing/slotProps.cjs +97 -0
- package/dist/src/web/services/testing/slotProps.cjs.map +1 -0
- package/dist/src/web/services/testing/slotProps.d.mts +69 -0
- package/dist/src/web/services/testing/slotProps.d.mts.map +1 -0
- package/dist/src/web/services/testing/slotProps.mjs +96 -0
- package/dist/src/web/services/testing/slotProps.mjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.cjs +156 -0
- package/dist/src/web/services/testing/templateRail.cjs.map +1 -0
- package/dist/src/web/services/testing/templateRail.d.mts +32 -0
- package/dist/src/web/services/testing/templateRail.d.mts.map +1 -0
- package/dist/src/web/services/testing/templateRail.mjs +154 -0
- package/dist/src/web/services/testing/templateRail.mjs.map +1 -0
- package/dist/src/web/services/toolResult/index.cjs +30 -0
- package/dist/src/web/services/toolResult/index.cjs.map +1 -0
- package/dist/src/web/services/toolResult/index.d.mts +14 -0
- package/dist/src/web/services/toolResult/index.d.mts.map +1 -0
- package/dist/src/web/services/toolResult/index.mjs +29 -0
- package/dist/src/web/services/toolResult/index.mjs.map +1 -0
- package/dist/src/web/types/extensionFile.d.mts +62 -0
- package/dist/src/web/types/extensionFile.d.mts.map +1 -0
- package/dist/src/web/types/mcpWidget.d.mts +14 -0
- package/dist/src/web/types/mcpWidget.d.mts.map +1 -0
- package/dist/src/web/types/modelContext.d.mts +43 -0
- package/dist/src/web/types/modelContext.d.mts.map +1 -0
- package/dist/src/web/types/nativeTemplate.d.mts +29 -0
- package/dist/src/web/types/nativeTemplate.d.mts.map +1 -0
- package/dist/src/web/types/sessionRegistry.d.mts +46 -0
- package/dist/src/web/types/sessionRegistry.d.mts.map +1 -0
- package/dist/src/web/types/template.d.mts +135 -0
- package/dist/src/web/types/template.d.mts.map +1 -0
- package/dist/src/web/types/webPlugin.d.mts +915 -0
- package/dist/src/web/types/webPlugin.d.mts.map +1 -0
- package/dist/terminalPiChildSessionService.cjs +324 -0
- package/dist/terminalPiChildSessionService.cjs.map +1 -0
- package/dist/terminalPiChildSessionService.d.mts +46 -0
- package/dist/terminalPiChildSessionService.d.mts.map +1 -0
- package/dist/terminalPiChildSessionService.mjs +318 -0
- package/dist/terminalPiChildSessionService.mjs.map +1 -0
- package/dist/testing.cjs +11 -0
- package/dist/testing.d.mts +6 -0
- package/dist/testing.mjs +6 -0
- package/dist/toolInventory.cjs +136 -0
- package/dist/toolInventory.cjs.map +1 -0
- package/dist/toolInventory.d.mts +66 -0
- package/dist/toolInventory.d.mts.map +1 -0
- package/dist/toolInventory.mjs +133 -0
- package/dist/toolInventory.mjs.map +1 -0
- package/dist/toolNames.cjs +4 -0
- package/dist/toolNames.d.mts +2 -0
- package/dist/toolNames.mjs +2 -0
- package/dist/toolOverrides.cjs +7 -0
- package/dist/toolOverrides.d.mts +3 -0
- package/dist/toolOverrides.mjs +3 -0
- package/dist/toolSurface.cjs +7 -0
- package/dist/toolSurface.d.mts +3 -0
- package/dist/toolSurface.mjs +3 -0
- package/dist/transition.cjs +5 -0
- package/dist/transition.d.cjs +5 -0
- package/dist/transition.d.mts +2 -0
- package/dist/transition.mjs +2 -0
- package/dist/transitionClassifier.cjs +112 -0
- package/dist/transitionClassifier.cjs.map +1 -0
- package/dist/transitionClassifier.d.mts +18 -0
- package/dist/transitionClassifier.d.mts.map +1 -0
- package/dist/transitionClassifier.mjs +111 -0
- package/dist/transitionClassifier.mjs.map +1 -0
- package/dist/transitionCoordinator.cjs +131 -0
- package/dist/transitionCoordinator.cjs.map +1 -0
- package/dist/transitionCoordinator.d.mts +16 -0
- package/dist/transitionCoordinator.d.mts.map +1 -0
- package/dist/transitionCoordinator.mjs +130 -0
- package/dist/transitionCoordinator.mjs.map +1 -0
- package/dist/typesContextApi.cjs +0 -0
- package/dist/typesContextApi.d.mts +79 -0
- package/dist/typesContextApi.d.mts.map +1 -0
- package/dist/typesContextApi.mjs +1 -0
- package/dist/uiHub.cjs +5 -0
- package/dist/uiHub.d.mts +2 -0
- package/dist/uiHub.mjs +2 -0
- package/dist/v3Export.cjs +10 -0
- package/dist/v3Export.cjs.map +1 -0
- package/dist/v3Export.d.mts +35 -0
- package/dist/v3Export.d.mts.map +1 -0
- package/dist/v3Export.mjs +9 -0
- package/dist/v3Export.mjs.map +1 -0
- package/dist/voiceReloadHandoff.cjs +14 -0
- package/dist/voiceReloadHandoff.d.mts +4 -0
- package/dist/voiceReloadHandoff.mjs +4 -0
- package/dist/voiceTools.cjs +56 -0
- package/dist/voiceTools.d.mts +4 -0
- package/dist/voiceTools.mjs +4 -0
- package/dist/web.cjs +65 -0
- package/dist/web.d.mts +20 -0
- package/dist/web.mjs +13 -0
- package/dist/webCompositions.cjs +181 -0
- package/dist/webCompositions.cjs.map +1 -0
- package/dist/webCompositions.d.mts +79 -0
- package/dist/webCompositions.d.mts.map +1 -0
- package/dist/webCompositions.mjs +174 -0
- package/dist/webCompositions.mjs.map +1 -0
- package/dist/webTesting.cjs +14 -0
- package/dist/webTesting.d.mts +6 -0
- package/dist/webTesting.mjs +6 -0
- package/package.json +586 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_packageApi = require("../../schemas/packageApi.cjs");
|
|
3
|
+
const require_sessionFiles = require("../../constants/sessionFiles.cjs");
|
|
4
|
+
const require_index = require("../sessionAttachments/index.cjs");
|
|
5
|
+
let node_crypto = require("node:crypto");
|
|
6
|
+
let node_fs = require("node:fs");
|
|
7
|
+
node_fs = require_runtime.__toESM(node_fs, 1);
|
|
8
|
+
let node_path = require("node:path");
|
|
9
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
10
|
+
let node_stream = require("node:stream");
|
|
11
|
+
//#region src/services/publicFileShares/index.ts
|
|
12
|
+
/**
|
|
13
|
+
* Short-lived public links to one session file, so a remote MCP server can fetch
|
|
14
|
+
* what the model was asked to hand it.
|
|
15
|
+
*
|
|
16
|
+
* The link is the only credential, so only its hash is kept, and every way a
|
|
17
|
+
* link can fail answers the same 404. A file is pinned by identity when the
|
|
18
|
+
* link is minted and reopened when it is served: a path that now names another
|
|
19
|
+
* file, or reaches it through a new symlink, is refused rather than followed.
|
|
20
|
+
*/
|
|
21
|
+
/** Public tunnel path prefix; the token is the only segment after it. */
|
|
22
|
+
const PUBLIC_FILE_SHARE_PREFIX = "/mcp-file/";
|
|
23
|
+
const TOKEN_BYTES = 32;
|
|
24
|
+
const TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/u;
|
|
25
|
+
const SHARE_TTL_MS = 6e5;
|
|
26
|
+
const SHARE_DOWNLOADS = 3;
|
|
27
|
+
const MAX_LIVE_SHARES_PER_SESSION = 16;
|
|
28
|
+
const OPEN_FLAGS = node_fs.default.constants.O_RDONLY | node_fs.default.constants.O_NOFOLLOW;
|
|
29
|
+
function tokenDigest(token) {
|
|
30
|
+
return (0, node_crypto.createHash)("sha256").update(token).digest("base64url");
|
|
31
|
+
}
|
|
32
|
+
function notFound() {
|
|
33
|
+
return Response.json({ error: "Not found." }, { status: 404 });
|
|
34
|
+
}
|
|
35
|
+
/** RFC 8187 value for `filename*`: encodeURIComponent leaves a few characters the grammar forbids. */
|
|
36
|
+
function contentDispositionName(fileName) {
|
|
37
|
+
return encodeURIComponent(fileName).replace(/['()*]/gu, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
38
|
+
}
|
|
39
|
+
/** True when filePath sits strictly below the real root with no segment that starts with a dot. */
|
|
40
|
+
async function containedIn(root, filePath) {
|
|
41
|
+
let realRoot;
|
|
42
|
+
try {
|
|
43
|
+
realRoot = await node_fs.default.promises.realpath(root);
|
|
44
|
+
} catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
const relative = node_path.default.relative(realRoot, filePath);
|
|
48
|
+
return relative !== "" && !node_path.default.isAbsolute(relative) && relative.split(node_path.default.sep).every((segment) => !segment.startsWith("."));
|
|
49
|
+
}
|
|
50
|
+
/** The real path of a shareable file: inside the session cwd or its attachment root, never through a dot segment. */
|
|
51
|
+
async function resolveShareable(request, environment) {
|
|
52
|
+
const refused = /* @__PURE__ */ new Error(`"${request.path}" is not a file in this session's working directory or attachments.`);
|
|
53
|
+
if (request.path === "" || request.path.includes("\0") || request.path.split(/[\\/]/u).some((segment) => segment === "." || segment === "..")) throw refused;
|
|
54
|
+
let filePath;
|
|
55
|
+
try {
|
|
56
|
+
filePath = await node_fs.default.promises.realpath(node_path.default.resolve(request.cwd, request.path));
|
|
57
|
+
} catch {
|
|
58
|
+
throw refused;
|
|
59
|
+
}
|
|
60
|
+
const roots = [request.cwd];
|
|
61
|
+
try {
|
|
62
|
+
roots.push(require_index.sessionAttachmentRoot(request.sessionId, environment));
|
|
63
|
+
} catch {}
|
|
64
|
+
for (const root of roots) if (await containedIn(root, filePath)) return filePath;
|
|
65
|
+
throw refused;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Opens a regular file without following a final symlink, then proves the handle is
|
|
69
|
+
* still the file at that real path: a parent swapped for a symlink changes the real
|
|
70
|
+
* path, and a replaced file changes the identity. Resolves undefined, with nothing
|
|
71
|
+
* left open, when either check fails.
|
|
72
|
+
*/
|
|
73
|
+
async function openPinned(filePath) {
|
|
74
|
+
let handle;
|
|
75
|
+
try {
|
|
76
|
+
handle = await node_fs.default.promises.open(filePath, OPEN_FLAGS);
|
|
77
|
+
} catch {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const stat = await handle.stat();
|
|
82
|
+
const named = await node_fs.default.promises.lstat(filePath);
|
|
83
|
+
if (stat.isFile() && named.dev === stat.dev && named.ino === stat.ino && await node_fs.default.promises.realpath(filePath) === filePath) return {
|
|
84
|
+
handle,
|
|
85
|
+
stat
|
|
86
|
+
};
|
|
87
|
+
} catch {}
|
|
88
|
+
await handle.close();
|
|
89
|
+
}
|
|
90
|
+
function createPublicFileShares(options) {
|
|
91
|
+
const environment = options.environment ?? process.env;
|
|
92
|
+
const shares = /* @__PURE__ */ new Map();
|
|
93
|
+
const authorized = (share) => !share.revoked && Date.now() < share.expiresAt && share.revision === options.publicOriginRevision() && options.publicOrigin() !== void 0;
|
|
94
|
+
const live = (share) => authorized(share) && share.downloadsLeft > 0;
|
|
95
|
+
return {
|
|
96
|
+
async mint(request) {
|
|
97
|
+
const origin = options.publicOrigin();
|
|
98
|
+
const revision = options.publicOriginRevision();
|
|
99
|
+
if (origin === void 0) throw new Error(require_packageApi.DOOM_SHARE_FILE_REMOTE_OFF_MESSAGE);
|
|
100
|
+
const filePath = await resolveShareable(request, environment);
|
|
101
|
+
const opened = await openPinned(filePath);
|
|
102
|
+
if (opened === void 0) throw new Error(`"${request.path}" is not a regular file Po can share.`);
|
|
103
|
+
const { stat } = opened;
|
|
104
|
+
await opened.handle.close();
|
|
105
|
+
if (stat.size > 26214400) throw new Error(`"${request.path}" is larger than the 25 MB file sharing limit.`);
|
|
106
|
+
for (const [key, share] of shares) if (!live(share)) shares.delete(key);
|
|
107
|
+
if ([...shares.values()].filter((share) => share.sessionId === request.sessionId).length >= MAX_LIVE_SHARES_PER_SESSION) throw new Error(`This session already shares ${String(MAX_LIVE_SHARES_PER_SESSION)} files. Retry after a tool call finishes.`);
|
|
108
|
+
const token = (0, node_crypto.randomBytes)(TOKEN_BYTES).toString("base64url");
|
|
109
|
+
const key = tokenDigest(token);
|
|
110
|
+
const fileName = node_path.default.basename(filePath);
|
|
111
|
+
const share = {
|
|
112
|
+
sessionId: request.sessionId,
|
|
113
|
+
filePath,
|
|
114
|
+
fileName,
|
|
115
|
+
dev: stat.dev,
|
|
116
|
+
ino: stat.ino,
|
|
117
|
+
size: stat.size,
|
|
118
|
+
mtimeMs: stat.mtimeMs,
|
|
119
|
+
revision,
|
|
120
|
+
expiresAt: Date.now() + SHARE_TTL_MS,
|
|
121
|
+
downloadsLeft: SHARE_DOWNLOADS,
|
|
122
|
+
revoked: false
|
|
123
|
+
};
|
|
124
|
+
shares.set(key, share);
|
|
125
|
+
options.onNotice(`file share: published "${fileName}" for ${request.label} on the remote-access tunnel.`);
|
|
126
|
+
return {
|
|
127
|
+
url: `${origin}${PUBLIC_FILE_SHARE_PREFIX}${token}`,
|
|
128
|
+
fileName,
|
|
129
|
+
mimeType: require_sessionFiles.SESSION_FILE_CONTENT_TYPES[node_path.default.extname(fileName).toLowerCase()] ?? "application/octet-stream",
|
|
130
|
+
size: stat.size,
|
|
131
|
+
expiresAt: share.expiresAt,
|
|
132
|
+
maxDownloads: SHARE_DOWNLOADS,
|
|
133
|
+
revoke: () => {
|
|
134
|
+
share.revoked = true;
|
|
135
|
+
shares.delete(key);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
async serve(token, method) {
|
|
140
|
+
if (method !== "GET" && method !== "HEAD" || !TOKEN_PATTERN.test(token)) return notFound();
|
|
141
|
+
const key = tokenDigest(token);
|
|
142
|
+
const share = shares.get(key);
|
|
143
|
+
if (share === void 0) return notFound();
|
|
144
|
+
if (!live(share)) {
|
|
145
|
+
shares.delete(key);
|
|
146
|
+
return notFound();
|
|
147
|
+
}
|
|
148
|
+
if (method === "GET") {
|
|
149
|
+
share.downloadsLeft -= 1;
|
|
150
|
+
if (share.downloadsLeft === 0) shares.delete(key);
|
|
151
|
+
}
|
|
152
|
+
const opened = await openPinned(share.filePath);
|
|
153
|
+
if (opened === void 0 || opened.stat.dev !== share.dev || opened.stat.ino !== share.ino || opened.stat.size !== share.size || opened.stat.mtimeMs !== share.mtimeMs) {
|
|
154
|
+
await opened?.handle.close();
|
|
155
|
+
shares.delete(key);
|
|
156
|
+
options.onNotice(`file share: refused "${share.fileName}" because the file changed after it was shared.`);
|
|
157
|
+
return notFound();
|
|
158
|
+
}
|
|
159
|
+
if (!authorized(share)) {
|
|
160
|
+
await opened.handle.close();
|
|
161
|
+
shares.delete(key);
|
|
162
|
+
return notFound();
|
|
163
|
+
}
|
|
164
|
+
const headers = {
|
|
165
|
+
"content-type": "application/octet-stream",
|
|
166
|
+
"content-length": String(share.size),
|
|
167
|
+
"content-disposition": `attachment; filename*=UTF-8''${contentDispositionName(share.fileName)}`,
|
|
168
|
+
"x-content-type-options": "nosniff",
|
|
169
|
+
"content-security-policy": "sandbox; default-src 'none'",
|
|
170
|
+
"cross-origin-resource-policy": "same-origin",
|
|
171
|
+
"cache-control": "no-store, private",
|
|
172
|
+
"referrer-policy": "no-referrer",
|
|
173
|
+
"accept-ranges": "none",
|
|
174
|
+
"x-robots-tag": "noindex"
|
|
175
|
+
};
|
|
176
|
+
if (method === "HEAD" || share.size === 0) {
|
|
177
|
+
await opened.handle.close();
|
|
178
|
+
return new Response(method === "HEAD" ? null : /* @__PURE__ */ new Uint8Array(), { headers });
|
|
179
|
+
}
|
|
180
|
+
const body = node_stream.Readable.toWeb(opened.handle.createReadStream({
|
|
181
|
+
start: 0,
|
|
182
|
+
end: share.size - 1
|
|
183
|
+
}));
|
|
184
|
+
return new Response(body, { headers });
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
//#endregion
|
|
189
|
+
exports.PUBLIC_FILE_SHARE_PREFIX = PUBLIC_FILE_SHARE_PREFIX;
|
|
190
|
+
exports.createPublicFileShares = createPublicFileShares;
|
|
191
|
+
|
|
192
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["fs","createHash","path","sessionAttachmentRoot","DOOM_SHARE_FILE_REMOTE_OFF_MESSAGE","randomBytes","SESSION_FILE_CONTENT_TYPES","Readable"],"sources":["../../../../src/services/publicFileShares/index.ts"],"sourcesContent":["import { createHash, randomBytes } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Readable } from 'node:stream';\n\nimport {\n MAX_SESSION_FILE_BYTES,\n SESSION_FILE_CONTENT_TYPES,\n SESSION_FILE_DEFAULT_CONTENT_TYPE,\n} from '../../constants/sessionFiles';\nimport { DOOM_SHARE_FILE_REMOTE_OFF_MESSAGE, type DoomSharedFile } from '../../schemas/packageApi';\nimport { sessionAttachmentRoot } from '../sessionAttachments';\n\n/**\n * Short-lived public links to one session file, so a remote MCP server can fetch\n * what the model was asked to hand it.\n *\n * The link is the only credential, so only its hash is kept, and every way a\n * link can fail answers the same 404. A file is pinned by identity when the\n * link is minted and reopened when it is served: a path that now names another\n * file, or reaches it through a new symlink, is refused rather than followed.\n */\n\n/** Public tunnel path prefix; the token is the only segment after it. */\nexport const PUBLIC_FILE_SHARE_PREFIX = '/mcp-file/';\n\nconst TOKEN_BYTES = 32;\nconst TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/u;\nconst SHARE_TTL_MS = 10 * 60 * 1000;\nconst SHARE_DOWNLOADS = 3;\nconst MAX_LIVE_SHARES_PER_SESSION = 16;\nconst OPEN_FLAGS = fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW;\n\nexport interface PublicFileShareRequest {\n sessionId: string;\n cwd: string;\n /** Relative to cwd, or absolute. */\n path: string;\n /** Who the file is for, for the host's notice. */\n label: string;\n}\n\nexport interface PublicFileShares {\n mint(request: PublicFileShareRequest): Promise<DoomSharedFile>;\n serve(token: string, method: string): Promise<Response>;\n}\n\nexport interface PublicFileSharesOptions {\n publicOrigin(): string | undefined;\n /** Bumped whenever the tunnel goes away; a link minted under another revision is dead. */\n publicOriginRevision(): number;\n /** Never receives a token or a link. */\n onNotice(message: string): void;\n /** Locates the attachment root; defaults to the process environment, as the upload route does. */\n environment?: Readonly<Record<string, string | undefined>>;\n}\n\ninterface Share {\n sessionId: string;\n filePath: string;\n fileName: string;\n dev: number;\n ino: number;\n size: number;\n mtimeMs: number;\n revision: number;\n expiresAt: number;\n downloadsLeft: number;\n revoked: boolean;\n}\n\nfunction tokenDigest(token: string): string {\n return createHash('sha256').update(token).digest('base64url');\n}\n\nfunction notFound(): Response {\n return Response.json({ error: 'Not found.' }, { status: 404 });\n}\n\n/** RFC 8187 value for `filename*`: encodeURIComponent leaves a few characters the grammar forbids. */\nfunction contentDispositionName(fileName: string): string {\n return encodeURIComponent(fileName).replace(\n /['()*]/gu,\n (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,\n );\n}\n\n/** True when filePath sits strictly below the real root with no segment that starts with a dot. */\nasync function containedIn(root: string, filePath: string): Promise<boolean> {\n let realRoot: string;\n try {\n realRoot = await fs.promises.realpath(root);\n } catch {\n return false;\n }\n const relative = path.relative(realRoot, filePath);\n return (\n relative !== '' &&\n !path.isAbsolute(relative) &&\n relative.split(path.sep).every((segment) => !segment.startsWith('.'))\n );\n}\n\n/** The real path of a shareable file: inside the session cwd or its attachment root, never through a dot segment. */\nasync function resolveShareable(\n request: PublicFileShareRequest,\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<string> {\n const refused = new Error(`\"${request.path}\" is not a file in this session's working directory or attachments.`);\n if (\n request.path === '' ||\n request.path.includes('\\0') ||\n request.path.split(/[\\\\/]/u).some((segment) => segment === '.' || segment === '..')\n )\n throw refused;\n let filePath: string;\n try {\n filePath = await fs.promises.realpath(path.resolve(request.cwd, request.path));\n } catch {\n throw refused;\n }\n const roots = [request.cwd];\n try {\n roots.push(sessionAttachmentRoot(request.sessionId, environment));\n } catch {\n // An id that cannot hold attachments only has its working directory.\n }\n for (const root of roots) if (await containedIn(root, filePath)) return filePath;\n throw refused;\n}\n\n/**\n * Opens a regular file without following a final symlink, then proves the handle is\n * still the file at that real path: a parent swapped for a symlink changes the real\n * path, and a replaced file changes the identity. Resolves undefined, with nothing\n * left open, when either check fails.\n */\nasync function openPinned(filePath: string): Promise<{ handle: fs.promises.FileHandle; stat: fs.Stats } | undefined> {\n let handle: fs.promises.FileHandle;\n try {\n handle = await fs.promises.open(filePath, OPEN_FLAGS);\n } catch {\n return undefined;\n }\n try {\n const stat = await handle.stat();\n const named = await fs.promises.lstat(filePath);\n if (\n stat.isFile() &&\n named.dev === stat.dev &&\n named.ino === stat.ino &&\n (await fs.promises.realpath(filePath)) === filePath\n )\n return { handle, stat };\n } catch {\n // Treated like a mismatch below.\n }\n await handle.close();\n return undefined;\n}\n\nexport function createPublicFileShares(options: PublicFileSharesOptions): PublicFileShares {\n const environment = options.environment ?? process.env;\n const shares = new Map<string, Share>();\n\n const authorized = (share: Share): boolean =>\n !share.revoked &&\n Date.now() < share.expiresAt &&\n share.revision === options.publicOriginRevision() &&\n options.publicOrigin() !== undefined;\n const live = (share: Share): boolean => authorized(share) && share.downloadsLeft > 0;\n\n return {\n async mint(request) {\n const origin = options.publicOrigin();\n const revision = options.publicOriginRevision();\n if (origin === undefined) throw new Error(DOOM_SHARE_FILE_REMOTE_OFF_MESSAGE);\n const filePath = await resolveShareable(request, environment);\n const opened = await openPinned(filePath);\n if (opened === undefined) throw new Error(`\"${request.path}\" is not a regular file Po can share.`);\n const { stat } = opened;\n await opened.handle.close();\n if (stat.size > MAX_SESSION_FILE_BYTES)\n throw new Error(`\"${request.path}\" is larger than the 25 MB file sharing limit.`);\n for (const [key, share] of shares) if (!live(share)) shares.delete(key);\n if (\n [...shares.values()].filter((share) => share.sessionId === request.sessionId).length >=\n MAX_LIVE_SHARES_PER_SESSION\n )\n throw new Error(\n `This session already shares ${String(MAX_LIVE_SHARES_PER_SESSION)} files. Retry after a tool call finishes.`,\n );\n const token = randomBytes(TOKEN_BYTES).toString('base64url');\n const key = tokenDigest(token);\n const fileName = path.basename(filePath);\n const share: Share = {\n sessionId: request.sessionId,\n filePath,\n fileName,\n dev: stat.dev,\n ino: stat.ino,\n size: stat.size,\n mtimeMs: stat.mtimeMs,\n revision,\n expiresAt: Date.now() + SHARE_TTL_MS,\n downloadsLeft: SHARE_DOWNLOADS,\n revoked: false,\n };\n shares.set(key, share);\n options.onNotice(`file share: published \"${fileName}\" for ${request.label} on the remote-access tunnel.`);\n return {\n url: `${origin}${PUBLIC_FILE_SHARE_PREFIX}${token}`,\n fileName,\n mimeType: SESSION_FILE_CONTENT_TYPES[path.extname(fileName).toLowerCase()] ?? SESSION_FILE_DEFAULT_CONTENT_TYPE,\n size: stat.size,\n expiresAt: share.expiresAt,\n maxDownloads: SHARE_DOWNLOADS,\n revoke: () => {\n share.revoked = true;\n shares.delete(key);\n },\n };\n },\n\n async serve(token, method) {\n if ((method !== 'GET' && method !== 'HEAD') || !TOKEN_PATTERN.test(token)) return notFound();\n const key = tokenDigest(token);\n const share = shares.get(key);\n if (share === undefined) return notFound();\n if (!live(share)) {\n shares.delete(key);\n return notFound();\n }\n // Counted before the first await, so concurrent downloads cannot outrun the limit.\n if (method === 'GET') {\n share.downloadsLeft -= 1;\n if (share.downloadsLeft === 0) shares.delete(key);\n }\n const opened = await openPinned(share.filePath);\n if (\n opened === undefined ||\n opened.stat.dev !== share.dev ||\n opened.stat.ino !== share.ino ||\n opened.stat.size !== share.size ||\n opened.stat.mtimeMs !== share.mtimeMs\n ) {\n await opened?.handle.close();\n shares.delete(key);\n options.onNotice(`file share: refused \"${share.fileName}\" because the file changed after it was shared.`);\n return notFound();\n }\n // Opening a file yields to revocation and tunnel changes. The download already\n // reserved its allowance, so this check must not reject the final permitted GET.\n if (!authorized(share)) {\n await opened.handle.close();\n shares.delete(key);\n return notFound();\n }\n const headers = {\n 'content-type': 'application/octet-stream',\n 'content-length': String(share.size),\n 'content-disposition': `attachment; filename*=UTF-8''${contentDispositionName(share.fileName)}`,\n 'x-content-type-options': 'nosniff',\n 'content-security-policy': \"sandbox; default-src 'none'\",\n 'cross-origin-resource-policy': 'same-origin',\n 'cache-control': 'no-store, private',\n 'referrer-policy': 'no-referrer',\n 'accept-ranges': 'none',\n 'x-robots-tag': 'noindex',\n };\n if (method === 'HEAD' || share.size === 0) {\n await opened.handle.close();\n return new Response(method === 'HEAD' ? null : new Uint8Array(), { headers });\n }\n // The stream closes the handle when it ends, fails, or is cancelled. Bounded to the\n // pinned size, so bytes appended after the identity check are never sent.\n const body = Readable.toWeb(opened.handle.createReadStream({ start: 0, end: share.size - 1 }));\n return new Response(body as ReadableStream<Uint8Array>, { headers });\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DoomSharedFile } from "../../schemas/packageApi.mjs";
|
|
2
|
+
//#region src/services/publicFileShares/index.d.ts
|
|
3
|
+
export interface PublicFileShareRequest {
|
|
4
|
+
sessionId: string;
|
|
5
|
+
cwd: string;
|
|
6
|
+
/** Relative to cwd, or absolute. */
|
|
7
|
+
path: string;
|
|
8
|
+
/** Who the file is for, for the host's notice. */
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PublicFileShares {
|
|
12
|
+
mint(request: PublicFileShareRequest): Promise<DoomSharedFile>;
|
|
13
|
+
serve(token: string, method: string): Promise<Response>;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/publicFileShares/index.ts"],"mappings":";;iBAiCiB;EACf;EACA;;EAEA;;EAEA;;iBAGe;EACf,KAAK,SAAS,yBAAyB,QAAQ;EAC/C,MAAM,eAAe,iBAAiB,QAAQ"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { DOOM_SHARE_FILE_REMOTE_OFF_MESSAGE } from "../../schemas/packageApi.mjs";
|
|
2
|
+
import { SESSION_FILE_CONTENT_TYPES } from "../../constants/sessionFiles.mjs";
|
|
3
|
+
import { sessionAttachmentRoot } from "../sessionAttachments/index.mjs";
|
|
4
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { Readable } from "node:stream";
|
|
8
|
+
//#region src/services/publicFileShares/index.ts
|
|
9
|
+
/**
|
|
10
|
+
* Short-lived public links to one session file, so a remote MCP server can fetch
|
|
11
|
+
* what the model was asked to hand it.
|
|
12
|
+
*
|
|
13
|
+
* The link is the only credential, so only its hash is kept, and every way a
|
|
14
|
+
* link can fail answers the same 404. A file is pinned by identity when the
|
|
15
|
+
* link is minted and reopened when it is served: a path that now names another
|
|
16
|
+
* file, or reaches it through a new symlink, is refused rather than followed.
|
|
17
|
+
*/
|
|
18
|
+
/** Public tunnel path prefix; the token is the only segment after it. */
|
|
19
|
+
const PUBLIC_FILE_SHARE_PREFIX = "/mcp-file/";
|
|
20
|
+
const TOKEN_BYTES = 32;
|
|
21
|
+
const TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/u;
|
|
22
|
+
const SHARE_TTL_MS = 6e5;
|
|
23
|
+
const SHARE_DOWNLOADS = 3;
|
|
24
|
+
const MAX_LIVE_SHARES_PER_SESSION = 16;
|
|
25
|
+
const OPEN_FLAGS = fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW;
|
|
26
|
+
function tokenDigest(token) {
|
|
27
|
+
return createHash("sha256").update(token).digest("base64url");
|
|
28
|
+
}
|
|
29
|
+
function notFound() {
|
|
30
|
+
return Response.json({ error: "Not found." }, { status: 404 });
|
|
31
|
+
}
|
|
32
|
+
/** RFC 8187 value for `filename*`: encodeURIComponent leaves a few characters the grammar forbids. */
|
|
33
|
+
function contentDispositionName(fileName) {
|
|
34
|
+
return encodeURIComponent(fileName).replace(/['()*]/gu, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
35
|
+
}
|
|
36
|
+
/** True when filePath sits strictly below the real root with no segment that starts with a dot. */
|
|
37
|
+
async function containedIn(root, filePath) {
|
|
38
|
+
let realRoot;
|
|
39
|
+
try {
|
|
40
|
+
realRoot = await fs.promises.realpath(root);
|
|
41
|
+
} catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const relative = path.relative(realRoot, filePath);
|
|
45
|
+
return relative !== "" && !path.isAbsolute(relative) && relative.split(path.sep).every((segment) => !segment.startsWith("."));
|
|
46
|
+
}
|
|
47
|
+
/** The real path of a shareable file: inside the session cwd or its attachment root, never through a dot segment. */
|
|
48
|
+
async function resolveShareable(request, environment) {
|
|
49
|
+
const refused = /* @__PURE__ */ new Error(`"${request.path}" is not a file in this session's working directory or attachments.`);
|
|
50
|
+
if (request.path === "" || request.path.includes("\0") || request.path.split(/[\\/]/u).some((segment) => segment === "." || segment === "..")) throw refused;
|
|
51
|
+
let filePath;
|
|
52
|
+
try {
|
|
53
|
+
filePath = await fs.promises.realpath(path.resolve(request.cwd, request.path));
|
|
54
|
+
} catch {
|
|
55
|
+
throw refused;
|
|
56
|
+
}
|
|
57
|
+
const roots = [request.cwd];
|
|
58
|
+
try {
|
|
59
|
+
roots.push(sessionAttachmentRoot(request.sessionId, environment));
|
|
60
|
+
} catch {}
|
|
61
|
+
for (const root of roots) if (await containedIn(root, filePath)) return filePath;
|
|
62
|
+
throw refused;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Opens a regular file without following a final symlink, then proves the handle is
|
|
66
|
+
* still the file at that real path: a parent swapped for a symlink changes the real
|
|
67
|
+
* path, and a replaced file changes the identity. Resolves undefined, with nothing
|
|
68
|
+
* left open, when either check fails.
|
|
69
|
+
*/
|
|
70
|
+
async function openPinned(filePath) {
|
|
71
|
+
let handle;
|
|
72
|
+
try {
|
|
73
|
+
handle = await fs.promises.open(filePath, OPEN_FLAGS);
|
|
74
|
+
} catch {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const stat = await handle.stat();
|
|
79
|
+
const named = await fs.promises.lstat(filePath);
|
|
80
|
+
if (stat.isFile() && named.dev === stat.dev && named.ino === stat.ino && await fs.promises.realpath(filePath) === filePath) return {
|
|
81
|
+
handle,
|
|
82
|
+
stat
|
|
83
|
+
};
|
|
84
|
+
} catch {}
|
|
85
|
+
await handle.close();
|
|
86
|
+
}
|
|
87
|
+
function createPublicFileShares(options) {
|
|
88
|
+
const environment = options.environment ?? process.env;
|
|
89
|
+
const shares = /* @__PURE__ */ new Map();
|
|
90
|
+
const authorized = (share) => !share.revoked && Date.now() < share.expiresAt && share.revision === options.publicOriginRevision() && options.publicOrigin() !== void 0;
|
|
91
|
+
const live = (share) => authorized(share) && share.downloadsLeft > 0;
|
|
92
|
+
return {
|
|
93
|
+
async mint(request) {
|
|
94
|
+
const origin = options.publicOrigin();
|
|
95
|
+
const revision = options.publicOriginRevision();
|
|
96
|
+
if (origin === void 0) throw new Error(DOOM_SHARE_FILE_REMOTE_OFF_MESSAGE);
|
|
97
|
+
const filePath = await resolveShareable(request, environment);
|
|
98
|
+
const opened = await openPinned(filePath);
|
|
99
|
+
if (opened === void 0) throw new Error(`"${request.path}" is not a regular file Po can share.`);
|
|
100
|
+
const { stat } = opened;
|
|
101
|
+
await opened.handle.close();
|
|
102
|
+
if (stat.size > 26214400) throw new Error(`"${request.path}" is larger than the 25 MB file sharing limit.`);
|
|
103
|
+
for (const [key, share] of shares) if (!live(share)) shares.delete(key);
|
|
104
|
+
if ([...shares.values()].filter((share) => share.sessionId === request.sessionId).length >= MAX_LIVE_SHARES_PER_SESSION) throw new Error(`This session already shares ${String(MAX_LIVE_SHARES_PER_SESSION)} files. Retry after a tool call finishes.`);
|
|
105
|
+
const token = randomBytes(TOKEN_BYTES).toString("base64url");
|
|
106
|
+
const key = tokenDigest(token);
|
|
107
|
+
const fileName = path.basename(filePath);
|
|
108
|
+
const share = {
|
|
109
|
+
sessionId: request.sessionId,
|
|
110
|
+
filePath,
|
|
111
|
+
fileName,
|
|
112
|
+
dev: stat.dev,
|
|
113
|
+
ino: stat.ino,
|
|
114
|
+
size: stat.size,
|
|
115
|
+
mtimeMs: stat.mtimeMs,
|
|
116
|
+
revision,
|
|
117
|
+
expiresAt: Date.now() + SHARE_TTL_MS,
|
|
118
|
+
downloadsLeft: SHARE_DOWNLOADS,
|
|
119
|
+
revoked: false
|
|
120
|
+
};
|
|
121
|
+
shares.set(key, share);
|
|
122
|
+
options.onNotice(`file share: published "${fileName}" for ${request.label} on the remote-access tunnel.`);
|
|
123
|
+
return {
|
|
124
|
+
url: `${origin}${PUBLIC_FILE_SHARE_PREFIX}${token}`,
|
|
125
|
+
fileName,
|
|
126
|
+
mimeType: SESSION_FILE_CONTENT_TYPES[path.extname(fileName).toLowerCase()] ?? "application/octet-stream",
|
|
127
|
+
size: stat.size,
|
|
128
|
+
expiresAt: share.expiresAt,
|
|
129
|
+
maxDownloads: SHARE_DOWNLOADS,
|
|
130
|
+
revoke: () => {
|
|
131
|
+
share.revoked = true;
|
|
132
|
+
shares.delete(key);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
},
|
|
136
|
+
async serve(token, method) {
|
|
137
|
+
if (method !== "GET" && method !== "HEAD" || !TOKEN_PATTERN.test(token)) return notFound();
|
|
138
|
+
const key = tokenDigest(token);
|
|
139
|
+
const share = shares.get(key);
|
|
140
|
+
if (share === void 0) return notFound();
|
|
141
|
+
if (!live(share)) {
|
|
142
|
+
shares.delete(key);
|
|
143
|
+
return notFound();
|
|
144
|
+
}
|
|
145
|
+
if (method === "GET") {
|
|
146
|
+
share.downloadsLeft -= 1;
|
|
147
|
+
if (share.downloadsLeft === 0) shares.delete(key);
|
|
148
|
+
}
|
|
149
|
+
const opened = await openPinned(share.filePath);
|
|
150
|
+
if (opened === void 0 || opened.stat.dev !== share.dev || opened.stat.ino !== share.ino || opened.stat.size !== share.size || opened.stat.mtimeMs !== share.mtimeMs) {
|
|
151
|
+
await opened?.handle.close();
|
|
152
|
+
shares.delete(key);
|
|
153
|
+
options.onNotice(`file share: refused "${share.fileName}" because the file changed after it was shared.`);
|
|
154
|
+
return notFound();
|
|
155
|
+
}
|
|
156
|
+
if (!authorized(share)) {
|
|
157
|
+
await opened.handle.close();
|
|
158
|
+
shares.delete(key);
|
|
159
|
+
return notFound();
|
|
160
|
+
}
|
|
161
|
+
const headers = {
|
|
162
|
+
"content-type": "application/octet-stream",
|
|
163
|
+
"content-length": String(share.size),
|
|
164
|
+
"content-disposition": `attachment; filename*=UTF-8''${contentDispositionName(share.fileName)}`,
|
|
165
|
+
"x-content-type-options": "nosniff",
|
|
166
|
+
"content-security-policy": "sandbox; default-src 'none'",
|
|
167
|
+
"cross-origin-resource-policy": "same-origin",
|
|
168
|
+
"cache-control": "no-store, private",
|
|
169
|
+
"referrer-policy": "no-referrer",
|
|
170
|
+
"accept-ranges": "none",
|
|
171
|
+
"x-robots-tag": "noindex"
|
|
172
|
+
};
|
|
173
|
+
if (method === "HEAD" || share.size === 0) {
|
|
174
|
+
await opened.handle.close();
|
|
175
|
+
return new Response(method === "HEAD" ? null : /* @__PURE__ */ new Uint8Array(), { headers });
|
|
176
|
+
}
|
|
177
|
+
const body = Readable.toWeb(opened.handle.createReadStream({
|
|
178
|
+
start: 0,
|
|
179
|
+
end: share.size - 1
|
|
180
|
+
}));
|
|
181
|
+
return new Response(body, { headers });
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//#endregion
|
|
186
|
+
export { PUBLIC_FILE_SHARE_PREFIX, createPublicFileShares };
|
|
187
|
+
|
|
188
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/publicFileShares/index.ts"],"sourcesContent":["import { createHash, randomBytes } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Readable } from 'node:stream';\n\nimport {\n MAX_SESSION_FILE_BYTES,\n SESSION_FILE_CONTENT_TYPES,\n SESSION_FILE_DEFAULT_CONTENT_TYPE,\n} from '../../constants/sessionFiles';\nimport { DOOM_SHARE_FILE_REMOTE_OFF_MESSAGE, type DoomSharedFile } from '../../schemas/packageApi';\nimport { sessionAttachmentRoot } from '../sessionAttachments';\n\n/**\n * Short-lived public links to one session file, so a remote MCP server can fetch\n * what the model was asked to hand it.\n *\n * The link is the only credential, so only its hash is kept, and every way a\n * link can fail answers the same 404. A file is pinned by identity when the\n * link is minted and reopened when it is served: a path that now names another\n * file, or reaches it through a new symlink, is refused rather than followed.\n */\n\n/** Public tunnel path prefix; the token is the only segment after it. */\nexport const PUBLIC_FILE_SHARE_PREFIX = '/mcp-file/';\n\nconst TOKEN_BYTES = 32;\nconst TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/u;\nconst SHARE_TTL_MS = 10 * 60 * 1000;\nconst SHARE_DOWNLOADS = 3;\nconst MAX_LIVE_SHARES_PER_SESSION = 16;\nconst OPEN_FLAGS = fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW;\n\nexport interface PublicFileShareRequest {\n sessionId: string;\n cwd: string;\n /** Relative to cwd, or absolute. */\n path: string;\n /** Who the file is for, for the host's notice. */\n label: string;\n}\n\nexport interface PublicFileShares {\n mint(request: PublicFileShareRequest): Promise<DoomSharedFile>;\n serve(token: string, method: string): Promise<Response>;\n}\n\nexport interface PublicFileSharesOptions {\n publicOrigin(): string | undefined;\n /** Bumped whenever the tunnel goes away; a link minted under another revision is dead. */\n publicOriginRevision(): number;\n /** Never receives a token or a link. */\n onNotice(message: string): void;\n /** Locates the attachment root; defaults to the process environment, as the upload route does. */\n environment?: Readonly<Record<string, string | undefined>>;\n}\n\ninterface Share {\n sessionId: string;\n filePath: string;\n fileName: string;\n dev: number;\n ino: number;\n size: number;\n mtimeMs: number;\n revision: number;\n expiresAt: number;\n downloadsLeft: number;\n revoked: boolean;\n}\n\nfunction tokenDigest(token: string): string {\n return createHash('sha256').update(token).digest('base64url');\n}\n\nfunction notFound(): Response {\n return Response.json({ error: 'Not found.' }, { status: 404 });\n}\n\n/** RFC 8187 value for `filename*`: encodeURIComponent leaves a few characters the grammar forbids. */\nfunction contentDispositionName(fileName: string): string {\n return encodeURIComponent(fileName).replace(\n /['()*]/gu,\n (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,\n );\n}\n\n/** True when filePath sits strictly below the real root with no segment that starts with a dot. */\nasync function containedIn(root: string, filePath: string): Promise<boolean> {\n let realRoot: string;\n try {\n realRoot = await fs.promises.realpath(root);\n } catch {\n return false;\n }\n const relative = path.relative(realRoot, filePath);\n return (\n relative !== '' &&\n !path.isAbsolute(relative) &&\n relative.split(path.sep).every((segment) => !segment.startsWith('.'))\n );\n}\n\n/** The real path of a shareable file: inside the session cwd or its attachment root, never through a dot segment. */\nasync function resolveShareable(\n request: PublicFileShareRequest,\n environment: Readonly<Record<string, string | undefined>>,\n): Promise<string> {\n const refused = new Error(`\"${request.path}\" is not a file in this session's working directory or attachments.`);\n if (\n request.path === '' ||\n request.path.includes('\\0') ||\n request.path.split(/[\\\\/]/u).some((segment) => segment === '.' || segment === '..')\n )\n throw refused;\n let filePath: string;\n try {\n filePath = await fs.promises.realpath(path.resolve(request.cwd, request.path));\n } catch {\n throw refused;\n }\n const roots = [request.cwd];\n try {\n roots.push(sessionAttachmentRoot(request.sessionId, environment));\n } catch {\n // An id that cannot hold attachments only has its working directory.\n }\n for (const root of roots) if (await containedIn(root, filePath)) return filePath;\n throw refused;\n}\n\n/**\n * Opens a regular file without following a final symlink, then proves the handle is\n * still the file at that real path: a parent swapped for a symlink changes the real\n * path, and a replaced file changes the identity. Resolves undefined, with nothing\n * left open, when either check fails.\n */\nasync function openPinned(filePath: string): Promise<{ handle: fs.promises.FileHandle; stat: fs.Stats } | undefined> {\n let handle: fs.promises.FileHandle;\n try {\n handle = await fs.promises.open(filePath, OPEN_FLAGS);\n } catch {\n return undefined;\n }\n try {\n const stat = await handle.stat();\n const named = await fs.promises.lstat(filePath);\n if (\n stat.isFile() &&\n named.dev === stat.dev &&\n named.ino === stat.ino &&\n (await fs.promises.realpath(filePath)) === filePath\n )\n return { handle, stat };\n } catch {\n // Treated like a mismatch below.\n }\n await handle.close();\n return undefined;\n}\n\nexport function createPublicFileShares(options: PublicFileSharesOptions): PublicFileShares {\n const environment = options.environment ?? process.env;\n const shares = new Map<string, Share>();\n\n const authorized = (share: Share): boolean =>\n !share.revoked &&\n Date.now() < share.expiresAt &&\n share.revision === options.publicOriginRevision() &&\n options.publicOrigin() !== undefined;\n const live = (share: Share): boolean => authorized(share) && share.downloadsLeft > 0;\n\n return {\n async mint(request) {\n const origin = options.publicOrigin();\n const revision = options.publicOriginRevision();\n if (origin === undefined) throw new Error(DOOM_SHARE_FILE_REMOTE_OFF_MESSAGE);\n const filePath = await resolveShareable(request, environment);\n const opened = await openPinned(filePath);\n if (opened === undefined) throw new Error(`\"${request.path}\" is not a regular file Po can share.`);\n const { stat } = opened;\n await opened.handle.close();\n if (stat.size > MAX_SESSION_FILE_BYTES)\n throw new Error(`\"${request.path}\" is larger than the 25 MB file sharing limit.`);\n for (const [key, share] of shares) if (!live(share)) shares.delete(key);\n if (\n [...shares.values()].filter((share) => share.sessionId === request.sessionId).length >=\n MAX_LIVE_SHARES_PER_SESSION\n )\n throw new Error(\n `This session already shares ${String(MAX_LIVE_SHARES_PER_SESSION)} files. Retry after a tool call finishes.`,\n );\n const token = randomBytes(TOKEN_BYTES).toString('base64url');\n const key = tokenDigest(token);\n const fileName = path.basename(filePath);\n const share: Share = {\n sessionId: request.sessionId,\n filePath,\n fileName,\n dev: stat.dev,\n ino: stat.ino,\n size: stat.size,\n mtimeMs: stat.mtimeMs,\n revision,\n expiresAt: Date.now() + SHARE_TTL_MS,\n downloadsLeft: SHARE_DOWNLOADS,\n revoked: false,\n };\n shares.set(key, share);\n options.onNotice(`file share: published \"${fileName}\" for ${request.label} on the remote-access tunnel.`);\n return {\n url: `${origin}${PUBLIC_FILE_SHARE_PREFIX}${token}`,\n fileName,\n mimeType: SESSION_FILE_CONTENT_TYPES[path.extname(fileName).toLowerCase()] ?? SESSION_FILE_DEFAULT_CONTENT_TYPE,\n size: stat.size,\n expiresAt: share.expiresAt,\n maxDownloads: SHARE_DOWNLOADS,\n revoke: () => {\n share.revoked = true;\n shares.delete(key);\n },\n };\n },\n\n async serve(token, method) {\n if ((method !== 'GET' && method !== 'HEAD') || !TOKEN_PATTERN.test(token)) return notFound();\n const key = tokenDigest(token);\n const share = shares.get(key);\n if (share === undefined) return notFound();\n if (!live(share)) {\n shares.delete(key);\n return notFound();\n }\n // Counted before the first await, so concurrent downloads cannot outrun the limit.\n if (method === 'GET') {\n share.downloadsLeft -= 1;\n if (share.downloadsLeft === 0) shares.delete(key);\n }\n const opened = await openPinned(share.filePath);\n if (\n opened === undefined ||\n opened.stat.dev !== share.dev ||\n opened.stat.ino !== share.ino ||\n opened.stat.size !== share.size ||\n opened.stat.mtimeMs !== share.mtimeMs\n ) {\n await opened?.handle.close();\n shares.delete(key);\n options.onNotice(`file share: refused \"${share.fileName}\" because the file changed after it was shared.`);\n return notFound();\n }\n // Opening a file yields to revocation and tunnel changes. The download already\n // reserved its allowance, so this check must not reject the final permitted GET.\n if (!authorized(share)) {\n await opened.handle.close();\n shares.delete(key);\n return notFound();\n }\n const headers = {\n 'content-type': 'application/octet-stream',\n 'content-length': String(share.size),\n 'content-disposition': `attachment; filename*=UTF-8''${contentDispositionName(share.fileName)}`,\n 'x-content-type-options': 'nosniff',\n 'content-security-policy': \"sandbox; default-src 'none'\",\n 'cross-origin-resource-policy': 'same-origin',\n 'cache-control': 'no-store, private',\n 'referrer-policy': 'no-referrer',\n 'accept-ranges': 'none',\n 'x-robots-tag': 'noindex',\n };\n if (method === 'HEAD' || share.size === 0) {\n await opened.handle.close();\n return new Response(method === 'HEAD' ? null : new Uint8Array(), { headers });\n }\n // The stream closes the handle when it ends, fails, or is cancelled. Bounded to the\n // pinned size, so bytes appended after the identity check are never sent.\n const body = Readable.toWeb(opened.handle.createReadStream({ start: 0, end: share.size - 1 }));\n return new Response(body as ReadableStream<Uint8Array>, { headers });\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAwBA,MAAa,2BAA2B;AAExC,MAAM,cAAc;AACpB,MAAM,gBAAgB;AACtB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,MAAM,8BAA8B;AACpC,MAAM,aAAa,GAAG,UAAU,WAAW,GAAG,UAAU;AAwCxD,SAAS,YAAY,OAAuB;CAC1C,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,WAAW;AAC9D;AAEA,SAAS,WAAqB;CAC5B,OAAO,SAAS,KAAK,EAAE,OAAO,aAAa,GAAG,EAAE,QAAQ,IAAI,CAAC;AAC/D;;AAGA,SAAS,uBAAuB,UAA0B;CACxD,OAAO,mBAAmB,QAAQ,CAAC,CAAC,QAClC,aACC,cAAc,IAAI,UAAU,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,YAAY,GACtE;AACF;;AAGA,eAAe,YAAY,MAAc,UAAoC;CAC3E,IAAI;CACJ,IAAI;EACF,WAAW,MAAM,GAAG,SAAS,SAAS,IAAI;CAC5C,QAAQ;EACN,OAAO;CACT;CACA,MAAM,WAAW,KAAK,SAAS,UAAU,QAAQ;CACjD,OACE,aAAa,MACb,CAAC,KAAK,WAAW,QAAQ,KACzB,SAAS,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,YAAY,CAAC,QAAQ,WAAW,GAAG,CAAC;AAExE;;AAGA,eAAe,iBACb,SACA,aACiB;CACjB,MAAM,0BAAU,IAAI,MAAM,IAAI,QAAQ,KAAK,oEAAoE;CAC/G,IACE,QAAQ,SAAS,MACjB,QAAQ,KAAK,SAAS,IAAI,KAC1B,QAAQ,KAAK,MAAM,QAAQ,CAAC,CAAC,MAAM,YAAY,YAAY,OAAO,YAAY,IAAI,GAElF,MAAM;CACR,IAAI;CACJ,IAAI;EACF,WAAW,MAAM,GAAG,SAAS,SAAS,KAAK,QAAQ,QAAQ,KAAK,QAAQ,IAAI,CAAC;CAC/E,QAAQ;EACN,MAAM;CACR;CACA,MAAM,QAAQ,CAAC,QAAQ,GAAG;CAC1B,IAAI;EACF,MAAM,KAAK,sBAAsB,QAAQ,WAAW,WAAW,CAAC;CAClE,QAAQ,CAER;CACA,KAAK,MAAM,QAAQ,OAAO,IAAI,MAAM,YAAY,MAAM,QAAQ,GAAG,OAAO;CACxE,MAAM;AACR;;;;;;;AAQA,eAAe,WAAW,UAA2F;CACnH,IAAI;CACJ,IAAI;EACF,SAAS,MAAM,GAAG,SAAS,KAAK,UAAU,UAAU;CACtD,QAAQ;EACN;CACF;CACA,IAAI;EACF,MAAM,OAAO,MAAM,OAAO,KAAK;EAC/B,MAAM,QAAQ,MAAM,GAAG,SAAS,MAAM,QAAQ;EAC9C,IACE,KAAK,OAAO,KACZ,MAAM,QAAQ,KAAK,OACnB,MAAM,QAAQ,KAAK,OAClB,MAAM,GAAG,SAAS,SAAS,QAAQ,MAAO,UAE3C,OAAO;GAAE;GAAQ;EAAK;CAC1B,QAAQ,CAER;CACA,MAAM,OAAO,MAAM;AAErB;AAEA,SAAgB,uBAAuB,SAAoD;CACzF,MAAM,cAAc,QAAQ,eAAe,QAAQ;CACnD,MAAM,yBAAS,IAAI,IAAmB;CAEtC,MAAM,cAAc,UAClB,CAAC,MAAM,WACP,KAAK,IAAI,IAAI,MAAM,aACnB,MAAM,aAAa,QAAQ,qBAAqB,KAChD,QAAQ,aAAa,MAAM,KAAA;CAC7B,MAAM,QAAQ,UAA0B,WAAW,KAAK,KAAK,MAAM,gBAAgB;CAEnF,OAAO;EACL,MAAM,KAAK,SAAS;GAClB,MAAM,SAAS,QAAQ,aAAa;GACpC,MAAM,WAAW,QAAQ,qBAAqB;GAC9C,IAAI,WAAW,KAAA,GAAW,MAAM,IAAI,MAAM,kCAAkC;GAC5E,MAAM,WAAW,MAAM,iBAAiB,SAAS,WAAW;GAC5D,MAAM,SAAS,MAAM,WAAW,QAAQ;GACxC,IAAI,WAAW,KAAA,GAAW,MAAM,IAAI,MAAM,IAAI,QAAQ,KAAK,sCAAsC;GACjG,MAAM,EAAE,SAAS;GACjB,MAAM,OAAO,OAAO,MAAM;GAC1B,IAAI,KAAK,OAAA,UACP,MAAM,IAAI,MAAM,IAAI,QAAQ,KAAK,+CAA+C;GAClF,KAAK,MAAM,CAAC,KAAK,UAAU,QAAQ,IAAI,CAAC,KAAK,KAAK,GAAG,OAAO,OAAO,GAAG;GACtE,IACE,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,UAAU,MAAM,cAAc,QAAQ,SAAS,CAAC,CAAC,UAC9E,6BAEA,MAAM,IAAI,MACR,+BAA+B,OAAO,2BAA2B,EAAE,0CACrE;GACF,MAAM,QAAQ,YAAY,WAAW,CAAC,CAAC,SAAS,WAAW;GAC3D,MAAM,MAAM,YAAY,KAAK;GAC7B,MAAM,WAAW,KAAK,SAAS,QAAQ;GACvC,MAAM,QAAe;IACnB,WAAW,QAAQ;IACnB;IACA;IACA,KAAK,KAAK;IACV,KAAK,KAAK;IACV,MAAM,KAAK;IACX,SAAS,KAAK;IACd;IACA,WAAW,KAAK,IAAI,IAAI;IACxB,eAAe;IACf,SAAS;GACX;GACA,OAAO,IAAI,KAAK,KAAK;GACrB,QAAQ,SAAS,0BAA0B,SAAS,QAAQ,QAAQ,MAAM,8BAA8B;GACxG,OAAO;IACL,KAAK,GAAG,SAAS,2BAA2B;IAC5C;IACA,UAAU,2BAA2B,KAAK,QAAQ,QAAQ,CAAC,CAAC,YAAY,MAAA;IACxE,MAAM,KAAK;IACX,WAAW,MAAM;IACjB,cAAc;IACd,cAAc;KACZ,MAAM,UAAU;KAChB,OAAO,OAAO,GAAG;IACnB;GACF;EACF;EAEA,MAAM,MAAM,OAAO,QAAQ;GACzB,IAAK,WAAW,SAAS,WAAW,UAAW,CAAC,cAAc,KAAK,KAAK,GAAG,OAAO,SAAS;GAC3F,MAAM,MAAM,YAAY,KAAK;GAC7B,MAAM,QAAQ,OAAO,IAAI,GAAG;GAC5B,IAAI,UAAU,KAAA,GAAW,OAAO,SAAS;GACzC,IAAI,CAAC,KAAK,KAAK,GAAG;IAChB,OAAO,OAAO,GAAG;IACjB,OAAO,SAAS;GAClB;GAEA,IAAI,WAAW,OAAO;IACpB,MAAM,iBAAiB;IACvB,IAAI,MAAM,kBAAkB,GAAG,OAAO,OAAO,GAAG;GAClD;GACA,MAAM,SAAS,MAAM,WAAW,MAAM,QAAQ;GAC9C,IACE,WAAW,KAAA,KACX,OAAO,KAAK,QAAQ,MAAM,OAC1B,OAAO,KAAK,QAAQ,MAAM,OAC1B,OAAO,KAAK,SAAS,MAAM,QAC3B,OAAO,KAAK,YAAY,MAAM,SAC9B;IACA,MAAM,QAAQ,OAAO,MAAM;IAC3B,OAAO,OAAO,GAAG;IACjB,QAAQ,SAAS,wBAAwB,MAAM,SAAS,gDAAgD;IACxG,OAAO,SAAS;GAClB;GAGA,IAAI,CAAC,WAAW,KAAK,GAAG;IACtB,MAAM,OAAO,OAAO,MAAM;IAC1B,OAAO,OAAO,GAAG;IACjB,OAAO,SAAS;GAClB;GACA,MAAM,UAAU;IACd,gBAAgB;IAChB,kBAAkB,OAAO,MAAM,IAAI;IACnC,uBAAuB,gCAAgC,uBAAuB,MAAM,QAAQ;IAC5F,0BAA0B;IAC1B,2BAA2B;IAC3B,gCAAgC;IAChC,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,gBAAgB;GAClB;GACA,IAAI,WAAW,UAAU,MAAM,SAAS,GAAG;IACzC,MAAM,OAAO,OAAO,MAAM;IAC1B,OAAO,IAAI,SAAS,WAAW,SAAS,uBAAO,IAAI,WAAW,GAAG,EAAE,QAAQ,CAAC;GAC9E;GAGA,MAAM,OAAO,SAAS,MAAM,OAAO,OAAO,iBAAiB;IAAE,OAAO;IAAG,KAAK,MAAM,OAAO;GAAE,CAAC,CAAC;GAC7F,OAAO,IAAI,SAAS,MAAoC,EAAE,QAAQ,CAAC;EACrE;CACF;AACF"}
|