@agimon-ai/doompi 0.0.1-alpha.2 → 0.0.1-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +437 -452
- package/assets/doompi-tui.png +0 -0
- package/dist/adapters/bootstrapClaim.cjs +2 -0
- package/dist/adapters/bootstrapClaim.cjs.map +1 -0
- package/dist/adapters/bootstrapClaim.mjs +2 -0
- package/dist/adapters/bootstrapClaim.mjs.map +1 -0
- package/dist/adapters/bootstrapLocator.cjs +2 -0
- package/dist/adapters/bootstrapLocator.cjs.map +1 -0
- package/dist/adapters/bootstrapLocator.d.cts +6 -0
- package/dist/adapters/bootstrapLocator.d.cts.map +1 -0
- package/dist/adapters/bootstrapLocator.d.mts +6 -0
- package/dist/adapters/bootstrapLocator.d.mts.map +1 -0
- package/dist/adapters/bootstrapLocator.mjs +2 -0
- package/dist/adapters/bootstrapLocator.mjs.map +1 -0
- package/dist/adapters/compatibility/antigravity.cjs +2 -0
- package/dist/{services → adapters}/compatibility/antigravity.cjs.map +1 -1
- package/dist/adapters/compatibility/antigravity.d.cts +11 -0
- package/dist/{services → adapters}/compatibility/antigravity.d.cts.map +1 -1
- package/dist/adapters/compatibility/antigravity.d.mts +11 -0
- package/dist/{services → adapters}/compatibility/antigravity.d.mts.map +1 -1
- package/dist/adapters/compatibility/antigravity.mjs +2 -0
- package/dist/{services → adapters}/compatibility/antigravity.mjs.map +1 -1
- package/dist/adapters/compatibility/codex.cjs +2 -0
- package/dist/{services → adapters}/compatibility/codex.cjs.map +1 -1
- package/dist/adapters/compatibility/codex.d.cts +19 -0
- package/dist/{services → adapters}/compatibility/codex.d.cts.map +1 -1
- package/dist/adapters/compatibility/codex.d.mts +19 -0
- package/dist/{services → adapters}/compatibility/codex.d.mts.map +1 -1
- package/dist/adapters/compatibility/codex.mjs +2 -0
- package/dist/{services → adapters}/compatibility/codex.mjs.map +1 -1
- package/dist/adapters/compatibility/index.cjs +2 -0
- package/dist/adapters/compatibility/index.cjs.map +1 -0
- package/dist/adapters/compatibility/index.d.cts +16 -0
- package/dist/{services → adapters}/compatibility/index.d.cts.map +1 -1
- package/dist/adapters/compatibility/index.d.mts +16 -0
- package/dist/{services → adapters}/compatibility/index.d.mts.map +1 -1
- package/dist/adapters/compatibility/index.mjs +2 -0
- package/dist/adapters/compatibility/index.mjs.map +1 -0
- package/dist/adapters/compatibility/process.cjs +2 -0
- package/dist/{services → adapters}/compatibility/process.cjs.map +1 -1
- package/dist/adapters/compatibility/process.d.cts +35 -0
- package/dist/{services → adapters}/compatibility/process.d.cts.map +1 -1
- package/dist/adapters/compatibility/process.d.mts +35 -0
- package/dist/{services → adapters}/compatibility/process.d.mts.map +1 -1
- package/dist/adapters/compatibility/process.mjs +2 -0
- package/dist/{services → adapters}/compatibility/process.mjs.map +1 -1
- package/dist/adapters/compatibility/shared.cjs +2 -0
- package/dist/{services → adapters}/compatibility/shared.cjs.map +1 -1
- package/dist/adapters/compatibility/shared.d.cts +33 -0
- package/dist/{services → adapters}/compatibility/shared.d.cts.map +1 -1
- package/dist/adapters/compatibility/shared.d.mts +33 -0
- package/dist/{services → adapters}/compatibility/shared.d.mts.map +1 -1
- package/dist/adapters/compatibility/shared.mjs +2 -0
- package/dist/{services → adapters}/compatibility/shared.mjs.map +1 -1
- package/dist/adapters/compatibilityContext.cjs +2 -0
- package/dist/adapters/compatibilityContext.cjs.map +1 -0
- package/dist/adapters/compatibilityContext.d.cts +23 -0
- package/dist/{services → adapters}/compatibilityContext.d.cts.map +1 -1
- package/dist/adapters/compatibilityContext.d.mts +23 -0
- package/dist/{services → adapters}/compatibilityContext.d.mts.map +1 -1
- package/dist/adapters/compatibilityContext.mjs +2 -0
- package/dist/adapters/compatibilityContext.mjs.map +1 -0
- package/dist/adapters/composer.cjs +2 -0
- package/dist/adapters/composer.cjs.map +1 -0
- package/dist/adapters/composer.d.cts +113 -0
- package/dist/adapters/composer.d.cts.map +1 -0
- package/dist/adapters/composer.d.mts +113 -0
- package/dist/adapters/composer.d.mts.map +1 -0
- package/dist/adapters/composer.mjs +2 -0
- package/dist/adapters/composer.mjs.map +1 -0
- package/dist/adapters/compositionState.cjs +2 -0
- package/dist/adapters/compositionState.cjs.map +1 -0
- package/dist/adapters/compositionState.d.cts +12 -0
- package/dist/adapters/compositionState.d.cts.map +1 -0
- package/dist/adapters/compositionState.d.mts +12 -0
- package/dist/adapters/compositionState.d.mts.map +1 -0
- package/dist/adapters/compositionState.mjs +2 -0
- package/dist/adapters/compositionState.mjs.map +1 -0
- package/dist/adapters/config/harnessState.cjs +2 -0
- package/dist/adapters/config/harnessState.cjs.map +1 -0
- package/dist/adapters/config/harnessState.d.cts +26 -0
- package/dist/adapters/config/harnessState.d.cts.map +1 -0
- package/dist/adapters/config/harnessState.d.mts +26 -0
- package/dist/adapters/config/harnessState.d.mts.map +1 -0
- package/dist/adapters/config/harnessState.mjs +2 -0
- package/dist/adapters/config/harnessState.mjs.map +1 -0
- package/dist/adapters/deferredSkills.cjs +12 -0
- package/dist/adapters/deferredSkills.cjs.map +1 -0
- package/dist/adapters/deferredSkills.mjs +12 -0
- package/dist/adapters/deferredSkills.mjs.map +1 -0
- package/dist/adapters/doomPackage.cjs +2 -0
- package/dist/adapters/doomPackage.cjs.map +1 -0
- package/dist/adapters/doomPackage.mjs +2 -0
- package/dist/adapters/doomPackage.mjs.map +1 -0
- package/dist/adapters/dpiRunner.cjs +3 -0
- package/dist/adapters/dpiRunner.cjs.map +1 -0
- package/dist/adapters/dpiRunner.mjs +3 -0
- package/dist/adapters/dpiRunner.mjs.map +1 -0
- package/dist/adapters/dpiSettings.cjs +2 -0
- package/dist/adapters/dpiSettings.cjs.map +1 -0
- package/dist/adapters/dpiSettings.mjs +2 -0
- package/dist/adapters/dpiSettings.mjs.map +1 -0
- package/dist/adapters/extensionCompiler.cjs +3 -0
- package/dist/adapters/extensionCompiler.cjs.map +1 -0
- package/dist/adapters/extensionCompiler.mjs +3 -0
- package/dist/adapters/extensionCompiler.mjs.map +1 -0
- package/dist/adapters/harnessContext.cjs +2 -0
- package/dist/adapters/harnessContext.cjs.map +1 -0
- package/dist/adapters/harnessContext.d.cts +61 -0
- package/dist/{services → adapters}/harnessContext.d.cts.map +1 -1
- package/dist/adapters/harnessContext.d.mts +61 -0
- package/dist/{services → adapters}/harnessContext.d.mts.map +1 -1
- package/dist/adapters/harnessContext.mjs +2 -0
- package/dist/adapters/harnessContext.mjs.map +1 -0
- package/dist/adapters/helpSkills.cjs +2 -0
- package/dist/adapters/helpSkills.cjs.map +1 -0
- package/dist/adapters/helpSkills.mjs +2 -0
- package/dist/adapters/helpSkills.mjs.map +1 -0
- package/dist/adapters/layerPackageInstaller.cjs +2 -0
- package/dist/adapters/layerPackageInstaller.cjs.map +1 -0
- package/dist/adapters/layerPackageInstaller.mjs +2 -0
- package/dist/adapters/layerPackageInstaller.mjs.map +1 -0
- package/dist/adapters/matrixSwitcher.cjs +2 -0
- package/dist/adapters/matrixSwitcher.cjs.map +1 -0
- package/dist/adapters/matrixSwitcher.d.cts +46 -0
- package/dist/{services → adapters}/matrixSwitcher.d.cts.map +1 -1
- package/dist/adapters/matrixSwitcher.d.mts +46 -0
- package/dist/{services → adapters}/matrixSwitcher.d.mts.map +1 -1
- package/dist/adapters/matrixSwitcher.mjs +2 -0
- package/dist/adapters/matrixSwitcher.mjs.map +1 -0
- package/dist/adapters/mcpFilter.cjs +3 -0
- package/dist/adapters/mcpFilter.cjs.map +1 -0
- package/dist/adapters/mcpFilter.d.cts +40 -0
- package/dist/adapters/mcpFilter.d.cts.map +1 -0
- package/dist/adapters/mcpFilter.d.mts +40 -0
- package/dist/adapters/mcpFilter.d.mts.map +1 -0
- package/dist/adapters/mcpFilter.mjs +3 -0
- package/dist/adapters/mcpFilter.mjs.map +1 -0
- package/dist/adapters/modules/moduleResolution.cjs +2 -0
- package/dist/adapters/modules/moduleResolution.cjs.map +1 -0
- package/dist/adapters/modules/moduleResolution.d.cts +69 -0
- package/dist/adapters/modules/moduleResolution.d.cts.map +1 -0
- package/dist/adapters/modules/moduleResolution.d.mts +69 -0
- package/dist/adapters/modules/moduleResolution.d.mts.map +1 -0
- package/dist/adapters/modules/moduleResolution.mjs +2 -0
- package/dist/adapters/modules/moduleResolution.mjs.map +1 -0
- package/dist/adapters/packageBootstrap.cjs +2 -0
- package/dist/adapters/packageBootstrap.cjs.map +1 -0
- package/dist/adapters/packageBootstrap.d.cts +8 -0
- package/dist/adapters/packageBootstrap.d.cts.map +1 -0
- package/dist/adapters/packageBootstrap.d.mts +8 -0
- package/dist/adapters/packageBootstrap.d.mts.map +1 -0
- package/dist/adapters/packageBootstrap.mjs +2 -0
- package/dist/adapters/packageBootstrap.mjs.map +1 -0
- package/dist/adapters/piExtensionAlias.cjs +2 -0
- package/dist/adapters/piExtensionAlias.cjs.map +1 -0
- package/dist/adapters/piExtensionAlias.mjs +2 -0
- package/dist/adapters/piExtensionAlias.mjs.map +1 -0
- package/dist/adapters/piSettings.cjs +2 -0
- package/dist/adapters/piSettings.cjs.map +1 -0
- package/dist/adapters/piSettings.d.cts +25 -0
- package/dist/adapters/piSettings.d.cts.map +1 -0
- package/dist/adapters/piSettings.d.mts +25 -0
- package/dist/adapters/piSettings.d.mts.map +1 -0
- package/dist/adapters/piSettings.mjs +2 -0
- package/dist/adapters/piSettings.mjs.map +1 -0
- package/dist/adapters/pluginMaterializer.cjs +2 -0
- package/dist/adapters/pluginMaterializer.cjs.map +1 -0
- package/dist/adapters/pluginMaterializer.mjs +2 -0
- package/dist/adapters/pluginMaterializer.mjs.map +1 -0
- package/dist/adapters/projectPiSettings.cjs +2 -0
- package/dist/adapters/projectPiSettings.cjs.map +1 -0
- package/dist/adapters/projectPiSettings.d.cts +29 -0
- package/dist/adapters/projectPiSettings.d.cts.map +1 -0
- package/dist/adapters/projectPiSettings.d.mts +29 -0
- package/dist/adapters/projectPiSettings.d.mts.map +1 -0
- package/dist/adapters/projectPiSettings.mjs +2 -0
- package/dist/adapters/projectPiSettings.mjs.map +1 -0
- package/dist/adapters/repository/repository.cjs +2 -0
- package/dist/adapters/repository/repository.cjs.map +1 -0
- package/dist/adapters/repository/repository.d.cts +21 -0
- package/dist/adapters/repository/repository.d.cts.map +1 -0
- package/dist/adapters/repository/repository.d.mts +21 -0
- package/dist/adapters/repository/repository.d.mts.map +1 -0
- package/dist/adapters/repository/repository.mjs +2 -0
- package/dist/adapters/repository/repository.mjs.map +1 -0
- package/dist/adapters/resourceCollector.cjs +3 -0
- package/dist/adapters/resourceCollector.cjs.map +1 -0
- package/dist/adapters/resourceCollector.d.cts +25 -0
- package/dist/adapters/resourceCollector.d.cts.map +1 -0
- package/dist/adapters/resourceCollector.d.mts +25 -0
- package/dist/adapters/resourceCollector.d.mts.map +1 -0
- package/dist/adapters/resourceCollector.mjs +3 -0
- package/dist/adapters/resourceCollector.mjs.map +1 -0
- package/dist/adapters/runtimeBundle.cjs +2 -0
- package/dist/adapters/runtimeBundle.cjs.map +1 -0
- package/dist/{services → adapters}/runtimeBundle.d.cts +4 -2
- package/dist/adapters/runtimeBundle.d.cts.map +1 -0
- package/dist/{services → adapters}/runtimeBundle.d.mts +4 -2
- package/dist/adapters/runtimeBundle.d.mts.map +1 -0
- package/dist/adapters/runtimeBundle.mjs +2 -0
- package/dist/adapters/runtimeBundle.mjs.map +1 -0
- package/dist/adapters/serialization/json.cjs +2 -0
- package/dist/adapters/serialization/json.cjs.map +1 -0
- package/dist/adapters/serialization/json.d.cts +23 -0
- package/dist/adapters/serialization/json.d.cts.map +1 -0
- package/dist/adapters/serialization/json.d.mts +23 -0
- package/dist/adapters/serialization/json.d.mts.map +1 -0
- package/dist/adapters/serialization/json.mjs +2 -0
- package/dist/adapters/serialization/json.mjs.map +1 -0
- package/dist/adapters/sharedBuildCache.cjs +2 -0
- package/dist/adapters/sharedBuildCache.cjs.map +1 -0
- package/dist/adapters/sharedBuildCache.mjs +2 -0
- package/dist/adapters/sharedBuildCache.mjs.map +1 -0
- package/dist/adapters/skillCatalog.cjs +2 -0
- package/dist/adapters/skillCatalog.cjs.map +1 -0
- package/dist/adapters/skillCatalog.d.cts +61 -0
- package/dist/adapters/skillCatalog.d.cts.map +1 -0
- package/dist/adapters/skillCatalog.d.mts +61 -0
- package/dist/adapters/skillCatalog.d.mts.map +1 -0
- package/dist/adapters/skillCatalog.mjs +2 -0
- package/dist/adapters/skillCatalog.mjs.map +1 -0
- package/dist/adapters/skillSources.cjs +2 -0
- package/dist/{services → adapters}/skillSources.cjs.map +1 -1
- package/dist/adapters/skillSources.d.cts +24 -0
- package/dist/{services → adapters}/skillSources.d.cts.map +1 -1
- package/dist/adapters/skillSources.d.mts +24 -0
- package/dist/{services → adapters}/skillSources.d.mts.map +1 -1
- package/dist/adapters/skillSources.mjs +2 -0
- package/dist/{services → adapters}/skillSources.mjs.map +1 -1
- package/dist/adapters/startupPrecompiler.cjs +2 -0
- package/dist/adapters/startupPrecompiler.cjs.map +1 -0
- package/dist/adapters/startupPrecompiler.d.cts +13 -0
- package/dist/adapters/startupPrecompiler.d.cts.map +1 -0
- package/dist/adapters/startupPrecompiler.d.mts +13 -0
- package/dist/adapters/startupPrecompiler.d.mts.map +1 -0
- package/dist/adapters/startupPrecompiler.mjs +2 -0
- package/dist/adapters/startupPrecompiler.mjs.map +1 -0
- package/dist/adapters/syncLocation.cjs +2 -0
- package/dist/adapters/syncLocation.cjs.map +1 -0
- package/dist/adapters/syncLocation.d.cts +19 -0
- package/dist/adapters/syncLocation.d.cts.map +1 -0
- package/dist/adapters/syncLocation.d.mts +19 -0
- package/dist/adapters/syncLocation.d.mts.map +1 -0
- package/dist/adapters/syncLocation.mjs +2 -0
- package/dist/adapters/syncLocation.mjs.map +1 -0
- package/dist/adapters/syncState.cjs +2 -0
- package/dist/adapters/syncState.cjs.map +1 -0
- package/dist/adapters/syncState.d.cts +153 -0
- package/dist/adapters/syncState.d.cts.map +1 -0
- package/dist/adapters/syncState.d.mts +153 -0
- package/dist/adapters/syncState.d.mts.map +1 -0
- package/dist/adapters/syncState.mjs +2 -0
- package/dist/adapters/syncState.mjs.map +1 -0
- package/dist/adapters/syncStateContract.cjs +2 -0
- package/dist/adapters/syncStateContract.cjs.map +1 -0
- package/dist/adapters/syncStateContract.d.cts +13 -0
- package/dist/adapters/syncStateContract.d.cts.map +1 -0
- package/dist/adapters/syncStateContract.d.mts +13 -0
- package/dist/adapters/syncStateContract.d.mts.map +1 -0
- package/dist/adapters/syncStateContract.mjs +2 -0
- package/dist/adapters/syncStateContract.mjs.map +1 -0
- package/dist/adapters/syncedRuntimeBuilder.cjs +2 -0
- package/dist/adapters/syncedRuntimeBuilder.cjs.map +1 -0
- package/dist/adapters/syncedRuntimeBuilder.d.cts +11 -0
- package/dist/adapters/syncedRuntimeBuilder.d.cts.map +1 -0
- package/dist/adapters/syncedRuntimeBuilder.d.mts +11 -0
- package/dist/adapters/syncedRuntimeBuilder.d.mts.map +1 -0
- package/dist/adapters/syncedRuntimeBuilder.mjs +2 -0
- package/dist/adapters/syncedRuntimeBuilder.mjs.map +1 -0
- package/dist/adapters/telemetry/logSinkTelemetry.cjs +2 -0
- package/dist/adapters/telemetry/logSinkTelemetry.cjs.map +1 -0
- package/dist/adapters/telemetry/logSinkTelemetry.d.cts +51 -0
- package/dist/adapters/telemetry/logSinkTelemetry.d.cts.map +1 -0
- package/dist/adapters/telemetry/logSinkTelemetry.d.mts +51 -0
- package/dist/adapters/telemetry/logSinkTelemetry.d.mts.map +1 -0
- package/dist/adapters/telemetry/logSinkTelemetry.mjs +2 -0
- package/dist/adapters/telemetry/logSinkTelemetry.mjs.map +1 -0
- package/dist/bin/cli.cjs +1 -1
- package/dist/bin/cli.cjs.map +1 -1
- package/dist/bin/cli.mjs +1 -1
- package/dist/bin/cli.mjs.map +1 -1
- package/dist/bin/dpi.cjs +3 -0
- package/dist/bin/dpi.cjs.map +1 -0
- package/dist/bin/dpi.d.cts +1 -0
- package/dist/bin/dpi.d.mts +1 -0
- package/dist/bin/dpi.mjs +3 -0
- package/dist/bin/dpi.mjs.map +1 -0
- package/dist/cli/cliApp.cjs +1 -2
- package/dist/cli/cliApp.d.cts +2 -45
- package/dist/cli/cliApp.d.mts +2 -45
- package/dist/cli/cliApp.mjs +1 -2
- package/dist/cli/compatibilityOptions.cjs +1 -2
- package/dist/cli/compatibilityOptions.d.cts +2 -15
- package/dist/cli/compatibilityOptions.d.mts +2 -15
- package/dist/cli/compatibilityOptions.mjs +1 -2
- package/dist/cli/help.cjs +1 -63
- package/dist/cli/help.d.cts +2 -6
- package/dist/cli/help.d.mts +2 -6
- package/dist/cli/help.mjs +1 -63
- package/dist/cli/index.cjs +1 -1
- package/dist/cli/index.d.cts +4 -4
- package/dist/cli/index.d.mts +4 -4
- package/dist/cli/index.mjs +1 -1
- package/dist/cli/matrixOptions.cjs +1 -2
- package/dist/cli/matrixOptions.d.cts +2 -99
- package/dist/cli/matrixOptions.d.mts +2 -99
- package/dist/cli/matrixOptions.mjs +1 -2
- package/dist/cli/options.cjs +1 -2
- package/dist/cli/options.d.cts +2 -7
- package/dist/cli/options.d.mts +2 -7
- package/dist/cli/options.mjs +1 -2
- package/dist/commands/baseCommand.cjs.map +1 -1
- package/dist/commands/baseCommand.d.cts +3 -3
- package/dist/commands/baseCommand.d.mts +3 -3
- package/dist/commands/baseCommand.mjs.map +1 -1
- package/dist/commands/buildCommand.cjs +2 -2
- package/dist/commands/buildCommand.cjs.map +1 -1
- package/dist/commands/buildCommand.mjs +2 -2
- package/dist/commands/buildCommand.mjs.map +1 -1
- package/dist/commands/cli/cliApp.cjs +2 -0
- package/dist/commands/cli/cliApp.cjs.map +1 -0
- package/dist/commands/cli/cliApp.d.cts +45 -0
- package/dist/commands/cli/cliApp.d.cts.map +1 -0
- package/dist/commands/cli/cliApp.d.mts +45 -0
- package/dist/commands/cli/cliApp.d.mts.map +1 -0
- package/dist/commands/cli/cliApp.mjs +2 -0
- package/dist/commands/cli/cliApp.mjs.map +1 -0
- package/dist/commands/cli/compatibilityOptions.cjs +2 -0
- package/dist/commands/cli/compatibilityOptions.cjs.map +1 -0
- package/dist/commands/cli/compatibilityOptions.d.cts +15 -0
- package/dist/commands/cli/compatibilityOptions.d.cts.map +1 -0
- package/dist/commands/cli/compatibilityOptions.d.mts +15 -0
- package/dist/commands/cli/compatibilityOptions.d.mts.map +1 -0
- package/dist/commands/cli/compatibilityOptions.mjs +2 -0
- package/dist/commands/cli/compatibilityOptions.mjs.map +1 -0
- package/dist/commands/cli/help.cjs +68 -0
- package/dist/{cli → commands/cli}/help.cjs.map +1 -1
- package/dist/commands/cli/help.d.cts +6 -0
- package/dist/commands/cli/help.d.cts.map +1 -0
- package/dist/commands/cli/help.d.mts +6 -0
- package/dist/commands/cli/help.d.mts.map +1 -0
- package/dist/commands/cli/help.mjs +68 -0
- package/dist/{cli → commands/cli}/help.mjs.map +1 -1
- package/dist/commands/cli/index.cjs +1 -0
- package/dist/commands/cli/index.d.cts +4 -0
- package/dist/commands/cli/index.d.mts +4 -0
- package/dist/commands/cli/index.mjs +1 -0
- package/dist/commands/cli/matrixOptions.cjs +2 -0
- package/dist/commands/cli/matrixOptions.cjs.map +1 -0
- package/dist/commands/cli/matrixOptions.d.cts +99 -0
- package/dist/commands/cli/matrixOptions.d.cts.map +1 -0
- package/dist/commands/cli/matrixOptions.d.mts +99 -0
- package/dist/commands/cli/matrixOptions.d.mts.map +1 -0
- package/dist/commands/cli/matrixOptions.mjs +2 -0
- package/dist/commands/cli/matrixOptions.mjs.map +1 -0
- package/dist/commands/cli/options.cjs +2 -0
- package/dist/commands/cli/options.cjs.map +1 -0
- package/dist/commands/cli/options.d.cts +7 -0
- package/dist/commands/cli/options.d.cts.map +1 -0
- package/dist/commands/cli/options.d.mts +7 -0
- package/dist/commands/cli/options.d.mts.map +1 -0
- package/dist/commands/cli/options.mjs +2 -0
- package/dist/commands/cli/options.mjs.map +1 -0
- package/dist/commands/compatibilityCommand.cjs +1 -1
- package/dist/commands/compatibilityCommand.cjs.map +1 -1
- package/dist/commands/compatibilityCommand.d.cts +1 -1
- package/dist/commands/compatibilityCommand.d.cts.map +1 -1
- package/dist/commands/compatibilityCommand.d.mts +1 -1
- package/dist/commands/compatibilityCommand.d.mts.map +1 -1
- package/dist/commands/compatibilityCommand.mjs +1 -1
- package/dist/commands/compatibilityCommand.mjs.map +1 -1
- package/dist/commands/emitMcpCommand.cjs +1 -1
- package/dist/commands/emitMcpCommand.cjs.map +1 -1
- package/dist/commands/emitMcpCommand.d.cts +2 -2
- package/dist/commands/emitMcpCommand.d.mts +2 -2
- package/dist/commands/emitMcpCommand.mjs +1 -1
- package/dist/commands/emitMcpCommand.mjs.map +1 -1
- package/dist/commands/explainCommand.cjs +2 -2
- package/dist/commands/explainCommand.cjs.map +1 -1
- package/dist/commands/explainCommand.d.cts +2 -2
- package/dist/commands/explainCommand.d.mts +2 -2
- package/dist/commands/explainCommand.mjs +2 -2
- package/dist/commands/explainCommand.mjs.map +1 -1
- package/dist/commands/index.cjs +1 -1
- package/dist/commands/index.d.cts +2 -3
- package/dist/commands/index.d.mts +2 -3
- package/dist/commands/index.mjs +1 -1
- package/dist/commands/initCommand.cjs +1 -2
- package/dist/commands/initCommand.cjs.map +1 -1
- package/dist/commands/initCommand.d.cts +4 -3
- package/dist/commands/initCommand.d.cts.map +1 -1
- package/dist/commands/initCommand.d.mts +4 -3
- package/dist/commands/initCommand.d.mts.map +1 -1
- package/dist/commands/initCommand.mjs +1 -2
- package/dist/commands/initCommand.mjs.map +1 -1
- package/dist/commands/initPresenter.cjs +3 -0
- package/dist/commands/initPresenter.cjs.map +1 -0
- package/dist/commands/initPresenter.d.cts +8 -0
- package/dist/commands/initPresenter.d.cts.map +1 -0
- package/dist/commands/initPresenter.d.mts +8 -0
- package/dist/commands/initPresenter.d.mts.map +1 -0
- package/dist/commands/initPresenter.mjs +3 -0
- package/dist/commands/initPresenter.mjs.map +1 -0
- package/dist/commands/launchCommand.cjs +1 -1
- package/dist/commands/launchCommand.cjs.map +1 -1
- package/dist/commands/launchCommand.d.cts +6 -4
- package/dist/commands/launchCommand.d.cts.map +1 -1
- package/dist/commands/launchCommand.d.mts +6 -4
- package/dist/commands/launchCommand.d.mts.map +1 -1
- package/dist/commands/launchCommand.mjs +1 -1
- package/dist/commands/launchCommand.mjs.map +1 -1
- package/dist/commands/syncCommand.cjs +5 -5
- package/dist/commands/syncCommand.cjs.map +1 -1
- package/dist/commands/syncCommand.d.cts +19 -7
- package/dist/commands/syncCommand.d.cts.map +1 -1
- package/dist/commands/syncCommand.d.mts +19 -7
- package/dist/commands/syncCommand.d.mts.map +1 -1
- package/dist/commands/syncCommand.mjs +5 -5
- package/dist/commands/syncCommand.mjs.map +1 -1
- package/dist/commands/syncPipeline.cjs +2 -0
- package/dist/commands/syncPipeline.cjs.map +1 -0
- package/dist/commands/syncPipeline.mjs +2 -0
- package/dist/commands/syncPipeline.mjs.map +1 -0
- package/dist/config/harnessState.cjs +1 -2
- package/dist/config/harnessState.d.cts +2 -24
- package/dist/config/harnessState.d.mts +2 -24
- package/dist/config/harnessState.mjs +1 -2
- package/dist/config/index.cjs +1 -1
- package/dist/config/index.d.cts +4 -7
- package/dist/config/index.d.mts +4 -7
- package/dist/config/index.mjs +1 -1
- package/dist/config/projectTrust.cjs +1 -2
- package/dist/config/projectTrust.d.cts +2 -14
- package/dist/config/projectTrust.d.mts +2 -14
- package/dist/config/projectTrust.mjs +1 -2
- package/dist/entries/autoStop.cjs +1 -2
- package/dist/entries/autoStop.d.cts +2 -6
- package/dist/entries/autoStop.d.mts +2 -7
- package/dist/entries/autoStop.mjs +1 -2
- package/dist/entries/components/matrixPicker.cjs +1 -2
- package/dist/entries/components/matrixPicker.d.cts +2 -55
- package/dist/entries/components/matrixPicker.d.mts +2 -55
- package/dist/entries/components/matrixPicker.mjs +1 -2
- package/dist/entries/components/skillsOverlay.cjs +1 -4
- package/dist/entries/components/skillsOverlay.d.cts +2 -58
- package/dist/entries/components/skillsOverlay.d.mts +2 -58
- package/dist/entries/components/skillsOverlay.mjs +1 -4
- package/dist/entries/domains.cjs +1 -2
- package/dist/entries/domains.d.cts +2 -10
- package/dist/entries/domains.d.mts +2 -10
- package/dist/entries/domains.mjs +1 -2
- package/dist/entries/doom.cjs +1 -2
- package/dist/entries/doom.d.cts +2 -13
- package/dist/entries/doom.d.mts +2 -14
- package/dist/entries/doom.mjs +1 -2
- package/dist/entries/effort.cjs +1 -2
- package/dist/entries/effort.d.cts +2 -10
- package/dist/entries/effort.d.mts +2 -10
- package/dist/entries/effort.mjs +1 -2
- package/dist/entries/majorMode.cjs +1 -6
- package/dist/entries/majorMode.d.cts +2 -29
- package/dist/entries/majorMode.d.mts +2 -29
- package/dist/entries/majorMode.mjs +1 -6
- package/dist/entries/modeCatalog.cjs +1 -0
- package/dist/entries/modeCatalog.d.cts +2 -0
- package/dist/entries/modeCatalog.d.mts +2 -0
- package/dist/entries/modeCatalog.mjs +1 -0
- package/dist/entries/notifications.cjs +1 -2
- package/dist/entries/notifications.d.cts +2 -13
- package/dist/entries/notifications.d.mts +2 -13
- package/dist/entries/notifications.mjs +1 -2
- package/dist/entries/ollamaProvider.cjs +1 -2
- package/dist/entries/ollamaProvider.d.cts +2 -6
- package/dist/entries/ollamaProvider.d.mts +2 -7
- package/dist/entries/ollamaProvider.mjs +1 -2
- package/dist/entries/persona.cjs +1 -2
- package/dist/entries/persona.d.cts +2 -14
- package/dist/entries/persona.d.mts +2 -15
- package/dist/entries/persona.mjs +1 -2
- package/dist/entries/profile.cjs +1 -3
- package/dist/entries/profile.d.cts +2 -16
- package/dist/entries/profile.d.mts +2 -16
- package/dist/entries/profile.mjs +1 -3
- package/dist/entries/repositoryHooks.cjs +1 -9
- package/dist/entries/repositoryHooks.d.cts +2 -7
- package/dist/entries/repositoryHooks.d.mts +2 -8
- package/dist/entries/repositoryHooks.mjs +1 -9
- package/dist/entries/skills.cjs +1 -2
- package/dist/entries/skills.d.cts +2 -34
- package/dist/entries/skills.d.mts +2 -34
- package/dist/entries/skills.mjs +1 -2
- package/dist/entries/styleSystem.cjs +1 -4
- package/dist/entries/styleSystem.d.cts +2 -32
- package/dist/entries/styleSystem.d.mts +2 -32
- package/dist/entries/styleSystem.mjs +1 -4
- package/dist/extensions/entries/autoStop.cjs +2 -0
- package/dist/extensions/entries/autoStop.cjs.map +1 -0
- package/dist/extensions/entries/autoStop.d.cts +7 -0
- package/dist/extensions/entries/autoStop.d.cts.map +1 -0
- package/dist/extensions/entries/autoStop.d.mts +7 -0
- package/dist/extensions/entries/autoStop.d.mts.map +1 -0
- package/dist/extensions/entries/autoStop.mjs +2 -0
- package/dist/extensions/entries/autoStop.mjs.map +1 -0
- package/dist/extensions/entries/cacheOptimizer.mjs +2 -0
- package/dist/extensions/entries/cacheOptimizer.mjs.map +1 -0
- package/dist/extensions/entries/components/matrixPicker.cjs +2 -0
- package/dist/extensions/entries/components/matrixPicker.cjs.map +1 -0
- package/dist/extensions/entries/components/matrixPicker.d.cts +55 -0
- package/dist/extensions/entries/components/matrixPicker.d.cts.map +1 -0
- package/dist/extensions/entries/components/matrixPicker.d.mts +55 -0
- package/dist/extensions/entries/components/matrixPicker.d.mts.map +1 -0
- package/dist/extensions/entries/components/matrixPicker.mjs +2 -0
- package/dist/extensions/entries/components/matrixPicker.mjs.map +1 -0
- package/dist/extensions/entries/components/skillsOverlay.cjs +4 -0
- package/dist/extensions/entries/components/skillsOverlay.cjs.map +1 -0
- package/dist/extensions/entries/components/skillsOverlay.d.cts +58 -0
- package/dist/extensions/entries/components/skillsOverlay.d.cts.map +1 -0
- package/dist/extensions/entries/components/skillsOverlay.d.mts +58 -0
- package/dist/extensions/entries/components/skillsOverlay.d.mts.map +1 -0
- package/dist/extensions/entries/components/skillsOverlay.mjs +4 -0
- package/dist/extensions/entries/components/skillsOverlay.mjs.map +1 -0
- package/dist/extensions/entries/domains.cjs +2 -0
- package/dist/extensions/entries/domains.cjs.map +1 -0
- package/dist/extensions/entries/domains.d.cts +18 -0
- package/dist/extensions/entries/domains.d.cts.map +1 -0
- package/dist/extensions/entries/domains.d.mts +18 -0
- package/dist/extensions/entries/domains.d.mts.map +1 -0
- package/dist/extensions/entries/domains.mjs +2 -0
- package/dist/extensions/entries/domains.mjs.map +1 -0
- package/dist/extensions/entries/doom.cjs +2 -0
- package/dist/extensions/entries/doom.cjs.map +1 -0
- package/dist/extensions/entries/doom.d.cts +14 -0
- package/dist/extensions/entries/doom.d.cts.map +1 -0
- package/dist/extensions/entries/doom.d.mts +14 -0
- package/dist/extensions/entries/doom.d.mts.map +1 -0
- package/dist/extensions/entries/doom.mjs +2 -0
- package/dist/extensions/entries/doom.mjs.map +1 -0
- package/dist/extensions/entries/effort.cjs +2 -0
- package/dist/extensions/entries/effort.cjs.map +1 -0
- package/dist/extensions/entries/effort.d.cts +10 -0
- package/dist/extensions/entries/effort.d.cts.map +1 -0
- package/dist/extensions/entries/effort.d.mts +10 -0
- package/dist/extensions/entries/effort.d.mts.map +1 -0
- package/dist/extensions/entries/effort.mjs +2 -0
- package/dist/extensions/entries/effort.mjs.map +1 -0
- package/dist/extensions/entries/majorMode.cjs +6 -0
- package/dist/extensions/entries/majorMode.cjs.map +1 -0
- package/dist/extensions/entries/majorMode.d.cts +27 -0
- package/dist/extensions/entries/majorMode.d.cts.map +1 -0
- package/dist/extensions/entries/majorMode.d.mts +27 -0
- package/dist/extensions/entries/majorMode.d.mts.map +1 -0
- package/dist/extensions/entries/majorMode.mjs +6 -0
- package/dist/extensions/entries/majorMode.mjs.map +1 -0
- package/dist/extensions/entries/modeCatalog.cjs +2 -0
- package/dist/extensions/entries/modeCatalog.cjs.map +1 -0
- package/dist/extensions/entries/modeCatalog.d.cts +7 -0
- package/dist/extensions/entries/modeCatalog.d.cts.map +1 -0
- package/dist/extensions/entries/modeCatalog.d.mts +7 -0
- package/dist/extensions/entries/modeCatalog.d.mts.map +1 -0
- package/dist/extensions/entries/modeCatalog.mjs +2 -0
- package/dist/extensions/entries/modeCatalog.mjs.map +1 -0
- package/dist/extensions/entries/notifications.cjs +2 -0
- package/dist/extensions/entries/notifications.cjs.map +1 -0
- package/dist/extensions/entries/notifications.d.cts +14 -0
- package/dist/extensions/entries/notifications.d.cts.map +1 -0
- package/dist/extensions/entries/notifications.d.mts +14 -0
- package/dist/extensions/entries/notifications.d.mts.map +1 -0
- package/dist/extensions/entries/notifications.mjs +2 -0
- package/dist/extensions/entries/notifications.mjs.map +1 -0
- package/dist/extensions/entries/ollamaProvider.cjs +2 -0
- package/dist/extensions/entries/ollamaProvider.cjs.map +1 -0
- package/dist/extensions/entries/ollamaProvider.d.cts +7 -0
- package/dist/extensions/entries/ollamaProvider.d.cts.map +1 -0
- package/dist/extensions/entries/ollamaProvider.d.mts +7 -0
- package/dist/extensions/entries/ollamaProvider.d.mts.map +1 -0
- package/dist/extensions/entries/ollamaProvider.mjs +2 -0
- package/dist/extensions/entries/ollamaProvider.mjs.map +1 -0
- package/dist/extensions/entries/persona.cjs +2 -0
- package/dist/extensions/entries/persona.cjs.map +1 -0
- package/dist/extensions/entries/persona.d.cts +15 -0
- package/dist/extensions/entries/persona.d.cts.map +1 -0
- package/dist/extensions/entries/persona.d.mts +15 -0
- package/dist/extensions/entries/persona.d.mts.map +1 -0
- package/dist/extensions/entries/persona.mjs +2 -0
- package/dist/extensions/entries/persona.mjs.map +1 -0
- package/dist/extensions/entries/profile.cjs +3 -0
- package/dist/extensions/entries/profile.cjs.map +1 -0
- package/dist/extensions/entries/profile.d.cts +18 -0
- package/dist/extensions/entries/profile.d.cts.map +1 -0
- package/dist/extensions/entries/profile.d.mts +18 -0
- package/dist/extensions/entries/profile.d.mts.map +1 -0
- package/dist/extensions/entries/profile.mjs +3 -0
- package/dist/extensions/entries/profile.mjs.map +1 -0
- package/dist/extensions/entries/repositoryHooks.cjs +9 -0
- package/dist/extensions/entries/repositoryHooks.cjs.map +1 -0
- package/dist/extensions/entries/repositoryHooks.d.cts +8 -0
- package/dist/extensions/entries/repositoryHooks.d.cts.map +1 -0
- package/dist/extensions/entries/repositoryHooks.d.mts +8 -0
- package/dist/extensions/entries/repositoryHooks.d.mts.map +1 -0
- package/dist/extensions/entries/repositoryHooks.mjs +9 -0
- package/dist/extensions/entries/repositoryHooks.mjs.map +1 -0
- package/dist/extensions/entries/shellTitleController.cjs +27 -0
- package/dist/extensions/entries/shellTitleController.cjs.map +1 -0
- package/dist/extensions/entries/shellTitleController.d.cts +11 -0
- package/dist/extensions/entries/shellTitleController.d.cts.map +1 -0
- package/dist/extensions/entries/shellTitleController.d.mts +11 -0
- package/dist/extensions/entries/shellTitleController.d.mts.map +1 -0
- package/dist/extensions/entries/shellTitleController.mjs +27 -0
- package/dist/extensions/entries/shellTitleController.mjs.map +1 -0
- package/dist/extensions/entries/skills.cjs +4 -0
- package/dist/extensions/entries/skills.cjs.map +1 -0
- package/dist/extensions/entries/skills.d.cts +34 -0
- package/dist/extensions/entries/skills.d.cts.map +1 -0
- package/dist/extensions/entries/skills.d.mts +34 -0
- package/dist/extensions/entries/skills.d.mts.map +1 -0
- package/dist/extensions/entries/skills.mjs +4 -0
- package/dist/extensions/entries/skills.mjs.map +1 -0
- package/dist/extensions/entries/styleSystem.cjs +4 -0
- package/dist/extensions/entries/styleSystem.cjs.map +1 -0
- package/dist/extensions/entries/styleSystem.d.cts +32 -0
- package/dist/extensions/entries/styleSystem.d.cts.map +1 -0
- package/dist/extensions/entries/styleSystem.d.mts +32 -0
- package/dist/extensions/entries/styleSystem.d.mts.map +1 -0
- package/dist/extensions/entries/styleSystem.mjs +4 -0
- package/dist/{entries/styleSystem.cjs.map → extensions/entries/styleSystem.mjs.map} +1 -1
- package/dist/extensions/pi.cjs +1 -0
- package/dist/extensions/pi.d.cts +2 -0
- package/dist/extensions/pi.d.mts +2 -0
- package/dist/extensions/pi.mjs +1 -0
- package/dist/extensions/services/domainSwitchHandoff.cjs +2 -0
- package/dist/extensions/services/domainSwitchHandoff.cjs.map +1 -0
- package/dist/extensions/services/domainSwitchHandoff.mjs +2 -0
- package/dist/extensions/services/domainSwitchHandoff.mjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +33 -29
- package/dist/index.d.mts +33 -29
- package/dist/index.mjs +1 -1
- package/dist/logSinkTelemetry.cjs +1 -2
- package/dist/logSinkTelemetry.d.cts +2 -51
- package/dist/logSinkTelemetry.d.mts +2 -51
- package/dist/logSinkTelemetry.mjs +1 -2
- package/dist/pi-cache-optimizer-D9beVnnH.mjs +50 -0
- package/dist/pi-cache-optimizer-D9beVnnH.mjs.map +1 -0
- package/dist/schemas/domainVoiceTools.cjs +2 -0
- package/dist/schemas/domainVoiceTools.cjs.map +1 -0
- package/dist/schemas/domainVoiceTools.mjs +2 -0
- package/dist/schemas/domainVoiceTools.mjs.map +1 -0
- package/dist/schemas/majorModeVoiceTools.cjs +2 -0
- package/dist/schemas/majorModeVoiceTools.cjs.map +1 -0
- package/dist/schemas/majorModeVoiceTools.mjs +2 -0
- package/dist/schemas/majorModeVoiceTools.mjs.map +1 -0
- package/dist/services/compatibility/antigravity.cjs +1 -2
- package/dist/services/compatibility/antigravity.d.cts +2 -11
- package/dist/services/compatibility/antigravity.d.mts +2 -11
- package/dist/services/compatibility/antigravity.mjs +1 -2
- package/dist/services/compatibility/codex.cjs +1 -2
- package/dist/services/compatibility/codex.d.cts +2 -19
- package/dist/services/compatibility/codex.d.mts +2 -19
- package/dist/services/compatibility/codex.mjs +1 -2
- package/dist/services/compatibility/index.cjs +1 -2
- package/dist/services/compatibility/index.d.cts +6 -16
- package/dist/services/compatibility/index.d.mts +6 -16
- package/dist/services/compatibility/index.mjs +1 -2
- package/dist/services/compatibility/process.cjs +1 -2
- package/dist/services/compatibility/process.d.cts +2 -35
- package/dist/services/compatibility/process.d.mts +2 -35
- package/dist/services/compatibility/process.mjs +1 -2
- package/dist/services/compatibility/shared.cjs +1 -2
- package/dist/services/compatibility/shared.d.cts +2 -33
- package/dist/services/compatibility/shared.d.mts +2 -33
- package/dist/services/compatibility/shared.mjs +1 -2
- package/dist/services/compatibilityContext.cjs +1 -2
- package/dist/services/compatibilityContext.d.cts +2 -23
- package/dist/services/compatibilityContext.d.mts +2 -23
- package/dist/services/compatibilityContext.mjs +1 -2
- package/dist/services/composer.cjs +1 -2
- package/dist/services/composer.d.cts +4 -135
- package/dist/services/composer.d.mts +4 -135
- package/dist/services/composer.mjs +1 -2
- package/dist/services/config/index.cjs +1 -0
- package/dist/services/config/index.d.cts +7 -0
- package/dist/services/config/index.d.mts +7 -0
- package/dist/services/config/index.mjs +1 -0
- package/dist/services/config/projectTrust.cjs +2 -0
- package/dist/services/config/projectTrust.cjs.map +1 -0
- package/dist/services/config/projectTrust.d.cts +14 -0
- package/dist/services/config/projectTrust.d.cts.map +1 -0
- package/dist/services/config/projectTrust.d.mts +14 -0
- package/dist/services/config/projectTrust.d.mts.map +1 -0
- package/dist/services/config/projectTrust.mjs +2 -0
- package/dist/services/config/projectTrust.mjs.map +1 -0
- package/dist/services/extensionAssembler.cjs +1 -1
- package/dist/services/extensionAssembler.cjs.map +1 -1
- package/dist/services/extensionAssembler.d.cts +13 -6
- package/dist/services/extensionAssembler.d.cts.map +1 -1
- package/dist/services/extensionAssembler.d.mts +13 -6
- package/dist/services/extensionAssembler.d.mts.map +1 -1
- package/dist/services/extensionAssembler.mjs +1 -1
- package/dist/services/extensionAssembler.mjs.map +1 -1
- package/dist/services/harnessContext.cjs +1 -2
- package/dist/services/harnessContext.d.cts +2 -61
- package/dist/services/harnessContext.d.mts +2 -61
- package/dist/services/harnessContext.mjs +1 -2
- package/dist/services/index.cjs +1 -1
- package/dist/services/index.d.cts +18 -14
- package/dist/services/index.d.mts +18 -14
- package/dist/services/index.mjs +1 -1
- package/dist/services/matrixSwitcher.cjs +1 -2
- package/dist/services/matrixSwitcher.d.cts +2 -46
- package/dist/services/matrixSwitcher.d.mts +2 -46
- package/dist/services/matrixSwitcher.mjs +1 -2
- package/dist/services/mcpFilter.cjs +1 -3
- package/dist/services/mcpFilter.d.cts +2 -40
- package/dist/services/mcpFilter.d.mts +2 -40
- package/dist/services/mcpFilter.mjs +1 -3
- package/dist/services/modeCatalog.cjs +2 -0
- package/dist/services/modeCatalog.cjs.map +1 -0
- package/dist/services/modeCatalog.d.cts +18 -0
- package/dist/services/modeCatalog.d.cts.map +1 -0
- package/dist/services/modeCatalog.d.mts +18 -0
- package/dist/services/modeCatalog.d.mts.map +1 -0
- package/dist/services/modeCatalog.mjs +2 -0
- package/dist/services/modeCatalog.mjs.map +1 -0
- package/dist/services/piSettings.cjs +1 -2
- package/dist/services/piSettings.d.cts +2 -24
- package/dist/services/piSettings.d.mts +2 -24
- package/dist/services/piSettings.mjs +1 -2
- package/dist/services/resourceCollector.cjs +1 -3
- package/dist/services/resourceCollector.d.cts +2 -23
- package/dist/services/resourceCollector.d.mts +2 -23
- package/dist/services/resourceCollector.mjs +1 -3
- package/dist/services/skillCatalog.cjs +1 -2
- package/dist/services/skillCatalog.d.cts +2 -56
- package/dist/services/skillCatalog.d.mts +2 -56
- package/dist/services/skillCatalog.mjs +1 -2
- package/dist/services/skillSources.cjs +1 -2
- package/dist/services/skillSources.d.cts +2 -24
- package/dist/services/skillSources.d.mts +2 -24
- package/dist/services/skillSources.mjs +1 -2
- package/dist/services/syncState.cjs +1 -2
- package/dist/services/syncState.d.cts +3 -133
- package/dist/services/syncState.d.mts +3 -133
- package/dist/services/syncState.mjs +1 -2
- package/dist/services/tools/toolNames.cjs +2 -0
- package/dist/services/tools/toolNames.cjs.map +1 -0
- package/dist/services/tools/toolNames.d.cts +25 -0
- package/dist/services/tools/toolNames.d.cts.map +1 -0
- package/dist/services/tools/toolNames.d.mts +25 -0
- package/dist/services/tools/toolNames.d.mts.map +1 -0
- package/dist/services/tools/toolNames.mjs +2 -0
- package/dist/services/tools/toolNames.mjs.map +1 -0
- package/dist/{interfaces → types/interfaces}/compatibility.d.cts +1 -1
- package/dist/types/interfaces/compatibility.d.cts.map +1 -0
- package/dist/{interfaces → types/interfaces}/compatibility.d.mts +1 -1
- package/dist/types/interfaces/compatibility.d.mts.map +1 -0
- package/dist/{interfaces → types/interfaces}/harness.d.cts +6 -2
- package/dist/types/interfaces/harness.d.cts.map +1 -0
- package/dist/{interfaces → types/interfaces}/harness.d.mts +6 -2
- package/dist/types/interfaces/harness.d.mts.map +1 -0
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.d.cts +5 -5
- package/dist/utils/index.d.mts +5 -5
- package/dist/utils/index.mjs +1 -1
- package/dist/utils/json.cjs +1 -2
- package/dist/utils/json.d.cts +2 -23
- package/dist/utils/json.d.mts +2 -23
- package/dist/utils/json.mjs +1 -2
- package/dist/utils/moduleResolution.cjs +1 -2
- package/dist/utils/moduleResolution.d.cts +2 -56
- package/dist/utils/moduleResolution.d.mts +2 -56
- package/dist/utils/moduleResolution.mjs +1 -2
- package/dist/utils/repository.cjs +1 -2
- package/dist/utils/repository.d.cts +2 -21
- package/dist/utils/repository.d.mts +2 -21
- package/dist/utils/repository.mjs +1 -2
- package/dist/utils/toolNames.cjs +1 -2
- package/dist/utils/toolNames.d.cts +2 -25
- package/dist/utils/toolNames.d.mts +2 -25
- package/dist/utils/toolNames.mjs +1 -2
- package/package.json +59 -37
- package/dist/cli/cliApp.cjs.map +0 -1
- package/dist/cli/cliApp.d.cts.map +0 -1
- package/dist/cli/cliApp.d.mts.map +0 -1
- package/dist/cli/cliApp.mjs.map +0 -1
- package/dist/cli/compatibilityOptions.cjs.map +0 -1
- package/dist/cli/compatibilityOptions.d.cts.map +0 -1
- package/dist/cli/compatibilityOptions.d.mts.map +0 -1
- package/dist/cli/compatibilityOptions.mjs.map +0 -1
- package/dist/cli/help.d.cts.map +0 -1
- package/dist/cli/help.d.mts.map +0 -1
- package/dist/cli/matrixOptions.cjs.map +0 -1
- package/dist/cli/matrixOptions.d.cts.map +0 -1
- package/dist/cli/matrixOptions.d.mts.map +0 -1
- package/dist/cli/matrixOptions.mjs.map +0 -1
- package/dist/cli/options.cjs.map +0 -1
- package/dist/cli/options.d.cts.map +0 -1
- package/dist/cli/options.d.mts.map +0 -1
- package/dist/cli/options.mjs.map +0 -1
- package/dist/commands/buildCommand.d.cts +0 -23
- package/dist/commands/buildCommand.d.cts.map +0 -1
- package/dist/commands/buildCommand.d.mts +0 -23
- package/dist/commands/buildCommand.d.mts.map +0 -1
- package/dist/config/harnessState.cjs.map +0 -1
- package/dist/config/harnessState.d.cts.map +0 -1
- package/dist/config/harnessState.d.mts.map +0 -1
- package/dist/config/harnessState.mjs.map +0 -1
- package/dist/config/projectTrust.cjs.map +0 -1
- package/dist/config/projectTrust.d.cts.map +0 -1
- package/dist/config/projectTrust.d.mts.map +0 -1
- package/dist/config/projectTrust.mjs.map +0 -1
- package/dist/entries/addDirCompatibility.cjs +0 -2
- package/dist/entries/addDirCompatibility.cjs.map +0 -1
- package/dist/entries/addDirCompatibility.d.cts +0 -13
- package/dist/entries/addDirCompatibility.d.cts.map +0 -1
- package/dist/entries/addDirCompatibility.d.mts +0 -14
- package/dist/entries/addDirCompatibility.d.mts.map +0 -1
- package/dist/entries/addDirCompatibility.mjs +0 -2
- package/dist/entries/addDirCompatibility.mjs.map +0 -1
- package/dist/entries/autoStop.cjs.map +0 -1
- package/dist/entries/autoStop.d.cts.map +0 -1
- package/dist/entries/autoStop.d.mts.map +0 -1
- package/dist/entries/autoStop.mjs.map +0 -1
- package/dist/entries/components/matrixPicker.cjs.map +0 -1
- package/dist/entries/components/matrixPicker.d.cts.map +0 -1
- package/dist/entries/components/matrixPicker.d.mts.map +0 -1
- package/dist/entries/components/matrixPicker.mjs.map +0 -1
- package/dist/entries/components/skillsOverlay.cjs.map +0 -1
- package/dist/entries/components/skillsOverlay.d.cts.map +0 -1
- package/dist/entries/components/skillsOverlay.d.mts.map +0 -1
- package/dist/entries/components/skillsOverlay.mjs.map +0 -1
- package/dist/entries/domains.cjs.map +0 -1
- package/dist/entries/domains.d.cts.map +0 -1
- package/dist/entries/domains.d.mts.map +0 -1
- package/dist/entries/domains.mjs.map +0 -1
- package/dist/entries/doom.cjs.map +0 -1
- package/dist/entries/doom.d.cts.map +0 -1
- package/dist/entries/doom.d.mts.map +0 -1
- package/dist/entries/doom.mjs.map +0 -1
- package/dist/entries/effort.cjs.map +0 -1
- package/dist/entries/effort.d.cts.map +0 -1
- package/dist/entries/effort.d.mts.map +0 -1
- package/dist/entries/effort.mjs.map +0 -1
- package/dist/entries/majorMode.cjs.map +0 -1
- package/dist/entries/majorMode.d.cts.map +0 -1
- package/dist/entries/majorMode.d.mts.map +0 -1
- package/dist/entries/majorMode.mjs.map +0 -1
- package/dist/entries/notifications.cjs.map +0 -1
- package/dist/entries/notifications.d.cts.map +0 -1
- package/dist/entries/notifications.d.mts.map +0 -1
- package/dist/entries/notifications.mjs.map +0 -1
- package/dist/entries/ollamaProvider.cjs.map +0 -1
- package/dist/entries/ollamaProvider.d.cts.map +0 -1
- package/dist/entries/ollamaProvider.d.mts.map +0 -1
- package/dist/entries/ollamaProvider.mjs.map +0 -1
- package/dist/entries/persona.cjs.map +0 -1
- package/dist/entries/persona.d.cts.map +0 -1
- package/dist/entries/persona.d.mts.map +0 -1
- package/dist/entries/persona.mjs.map +0 -1
- package/dist/entries/profile.cjs.map +0 -1
- package/dist/entries/profile.d.cts.map +0 -1
- package/dist/entries/profile.d.mts.map +0 -1
- package/dist/entries/profile.mjs.map +0 -1
- package/dist/entries/repositoryHooks.cjs.map +0 -1
- package/dist/entries/repositoryHooks.d.cts.map +0 -1
- package/dist/entries/repositoryHooks.d.mts.map +0 -1
- package/dist/entries/repositoryHooks.mjs.map +0 -1
- package/dist/entries/skills.cjs.map +0 -1
- package/dist/entries/skills.d.cts.map +0 -1
- package/dist/entries/skills.d.mts.map +0 -1
- package/dist/entries/skills.mjs.map +0 -1
- package/dist/entries/styleSystem.d.cts.map +0 -1
- package/dist/entries/styleSystem.d.mts.map +0 -1
- package/dist/entries/styleSystem.mjs.map +0 -1
- package/dist/interfaces/compatibility.d.cts.map +0 -1
- package/dist/interfaces/compatibility.d.mts.map +0 -1
- package/dist/interfaces/harness.d.cts.map +0 -1
- package/dist/interfaces/harness.d.mts.map +0 -1
- package/dist/logSinkTelemetry.cjs.map +0 -1
- package/dist/logSinkTelemetry.d.cts.map +0 -1
- package/dist/logSinkTelemetry.d.mts.map +0 -1
- package/dist/logSinkTelemetry.mjs.map +0 -1
- package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs +0 -2
- package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs.map +0 -1
- package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs +0 -2
- package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs.map +0 -1
- package/dist/services/compatibility/index.cjs.map +0 -1
- package/dist/services/compatibility/index.mjs.map +0 -1
- package/dist/services/compatibilityContext.cjs.map +0 -1
- package/dist/services/compatibilityContext.mjs.map +0 -1
- package/dist/services/composer.cjs.map +0 -1
- package/dist/services/composer.d.cts.map +0 -1
- package/dist/services/composer.d.mts.map +0 -1
- package/dist/services/composer.mjs.map +0 -1
- package/dist/services/extensionCompiler.cjs +0 -3
- package/dist/services/extensionCompiler.cjs.map +0 -1
- package/dist/services/extensionCompiler.mjs +0 -3
- package/dist/services/extensionCompiler.mjs.map +0 -1
- package/dist/services/harnessContext.cjs.map +0 -1
- package/dist/services/harnessContext.mjs.map +0 -1
- package/dist/services/matrixSwitcher.cjs.map +0 -1
- package/dist/services/matrixSwitcher.mjs.map +0 -1
- package/dist/services/mcpFilter.cjs.map +0 -1
- package/dist/services/mcpFilter.d.cts.map +0 -1
- package/dist/services/mcpFilter.d.mts.map +0 -1
- package/dist/services/mcpFilter.mjs.map +0 -1
- package/dist/services/piSettings.cjs.map +0 -1
- package/dist/services/piSettings.d.cts.map +0 -1
- package/dist/services/piSettings.d.mts.map +0 -1
- package/dist/services/piSettings.mjs.map +0 -1
- package/dist/services/resourceCollector.cjs.map +0 -1
- package/dist/services/resourceCollector.d.cts.map +0 -1
- package/dist/services/resourceCollector.d.mts.map +0 -1
- package/dist/services/resourceCollector.mjs.map +0 -1
- package/dist/services/runtimeBundle.cjs +0 -2
- package/dist/services/runtimeBundle.cjs.map +0 -1
- package/dist/services/runtimeBundle.d.cts.map +0 -1
- package/dist/services/runtimeBundle.d.mts.map +0 -1
- package/dist/services/runtimeBundle.mjs +0 -2
- package/dist/services/runtimeBundle.mjs.map +0 -1
- package/dist/services/skillCatalog.cjs.map +0 -1
- package/dist/services/skillCatalog.d.cts.map +0 -1
- package/dist/services/skillCatalog.d.mts.map +0 -1
- package/dist/services/skillCatalog.mjs.map +0 -1
- package/dist/services/syncState.cjs.map +0 -1
- package/dist/services/syncState.d.cts.map +0 -1
- package/dist/services/syncState.d.mts.map +0 -1
- package/dist/services/syncState.mjs.map +0 -1
- package/dist/utils/json.cjs.map +0 -1
- package/dist/utils/json.d.cts.map +0 -1
- package/dist/utils/json.d.mts.map +0 -1
- package/dist/utils/json.mjs.map +0 -1
- package/dist/utils/moduleResolution.cjs.map +0 -1
- package/dist/utils/moduleResolution.d.cts.map +0 -1
- package/dist/utils/moduleResolution.d.mts.map +0 -1
- package/dist/utils/moduleResolution.mjs.map +0 -1
- package/dist/utils/repository.cjs.map +0 -1
- package/dist/utils/repository.d.cts.map +0 -1
- package/dist/utils/repository.d.mts.map +0 -1
- package/dist/utils/repository.mjs.map +0 -1
- package/dist/utils/toolNames.cjs.map +0 -1
- package/dist/utils/toolNames.d.cts.map +0 -1
- package/dist/utils/toolNames.d.mts.map +0 -1
- package/dist/utils/toolNames.mjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../services/extensionAssembler.cjs`),n=require(`./syncState.cjs`),r=require(`./bootstrapLocator.cjs`),i=require(`./config/harnessState.cjs`),a=require(`./resourceCollector.cjs`),o=require(`./compositionState.cjs`),s=require(`./extensionCompiler.cjs`),c=require(`./harnessContext.cjs`);let l=require(`node:url`),u=require(`node:path`);u=e.__toESM(u,1);let d=require(`node:fs`);d=e.__toESM(d,1);let f=require(`node:os`);f=e.__toESM(f,1);let p=require(`@agimon-ai/doompi-config/majorModes`),m=require(`@agimon-ai/doompi-ui/extensionName`),h=require(`@earendil-works/pi-coding-agent`),g=require(`@agimon-ai/doompi-config/harnessStore`);const _=`./matrixSwitcher.ts`,v=`doompi is configured for Pi but this repository was never synced. Run doompi sync.`,y=process.env.DOOMPI_TIMING===`1`||process.env.PI_TIMING===`1`,b={majorMode:`major-mode`,domains:`domains`,profile:`profile`,mute:`mute`},x=`layer`;function S(e){return e instanceof Error?e.message:String(e)}function C(e){try{return d.default.realpathSync(e)}catch{return u.default.resolve(e)}}function w(e,t){let{extensions:n}=(0,h.parseArgs)(e);if(!n||n.length===0)return!1;let r=new Set(Object.values(t).map(C));return n.some(e=>r.has(C(e)))}async function T(e,t,n=process.env){let r=await k(t,n),a={...i.readHarnessState({...e.env,...n}),...e.fileState,temporaryDirectory:r};(0,g.createHarnessSession)(a,{directory:r,environment:n});for(let[e,t]of Object.entries(a.profileEnvironment))n[e]===void 0&&(n[e]=t);return a}function E(e){let{unknownFlags:t}=(0,h.parseArgs)(e),n=e=>{let n=t.get(e);return typeof n==`string`&&n.trim()?n.trim():void 0},r=n(b.domains);return{majorMode:n(b.majorMode),domains:r?.split(`,`).map(e=>e.trim()).filter(Boolean),profile:n(b.profile),mute:t.get(b.mute)!==void 0,removedLayer:t.get(x)!==void 0}}function D(e){e.registerFlag(b.majorMode,{type:`string`,description:`Named major mode from .doom/modes.yaml`}),e.registerFlag(b.domains,{type:`string`,description:`Comma-separated content domains`}),e.registerFlag(b.profile,{type:`string`,description:`Persona and env from .doom/profiles.yaml`}),e.registerFlag(b.mute,{type:`boolean`,description:`Disable the notification extension`})}async function O(e,t,n,r){if(e.removedLayer&&r.push(`--${x} was replaced by --${b.majorMode}`),e.majorMode)try{let{applyMajorMode:n}=await import(_);n(t,e.majorMode,i.getHarnessState())}catch(t){r.push(`--${b.majorMode} ${e.majorMode}: ${S(t)}`)}if(e.domains&&e.domains.length>0)try{let{applyDomains:t}=await import(_);await t(e.domains,i.getHarnessState())}catch(t){r.push(`--domains ${e.domains.join(`,`)}: ${S(t)}`)}if(e.profile)try{let[{applyProfile:t},{resolveProfile:r}]=await Promise.all([import(_),import(`@agimon-ai/doompi-config/profiles`)]);await t(r(n,e.profile),i.getHarnessState())}catch(t){r.push(`--profile ${e.profile}: ${S(t)}`)}}async function k(e,t=process.env){let r=n.runDirectory(e,process.pid,t.HOME??f.default.homedir());return await d.default.promises.mkdir(r,{mode:448,recursive:!0}),i.updateHarnessState({temporaryDirectory:r},t),r}async function A(e,t=process.env){await d.default.promises.rm(n.runDirectory(e,process.pid,t.HOME??f.default.homedir()),{recursive:!0,force:!0})}async function j(e,r=i.getHarnessState(),c=process.env){let l=r.root??e.root,d=n.createMapResolvers(e.resolved,e.compiled),f=r.mcp?d.optionalPackageEntry(t.CONTEXT_PACKAGES.mcp):void 0,m={agents:r.agents,autoStop:!1,preset:e.selection.preset,mcpEntry:f,personaEntry:d.ownEntry(t.PERSONA_ENTRY),workflowExtension:a.selectWorkflowExtensionForProcess(d.optionalPackageEntry(t.CONTEXT_PACKAGES.workflow),d.optionalPackageEntry(t.CONTEXT_PACKAGES.dispatcherWorkflow),c),layers:[...r.layers],majorModesConfig:(0,p.loadMajorModesConfig)(l),resolvers:d};i.updateHarnessState({childExtensions:t.assembleChildExtensions({...m,agents:!1,mute:!0})},c),r.agents&&(c.PI_SUBAGENT_EXTRA_AGENT_DIRS=r.agentDirectories.join(u.default.delimiter),c.PI_SUBAGENT_EXTRA_SKILL_DIRS=r.skillDirectories.join(u.default.delimiter));let h=[...t.assembleExtensions({...m,mute:c[o.MUTE_ENV]===`1`})].reverse(),g=e.bundles?.[s.extensionSetKey(h)];return g?[g]:h}async function M(e,t,n){let r=[];for(let i of t){let t=performance.now(),a;try{a=await import((0,l.pathToFileURL)(i).href),y&&process.stderr.write(`[doompi:timing] import ${(performance.now()-t).toFixed(1)}ms ${i}\n`)}catch(e){n.push(`${i}: ${S(e)}`);continue}if(typeof a.default!=`function`){n.push(`${i}: does not export an extension factory`);continue}let o=performance.now();try{await a.default((0,m.withExtensionSource)(e,i)),y&&process.stderr.write(`[doompi:timing] factory ${(performance.now()-o).toFixed(1)}ms ${i}\n`),r.push(i)}catch(e){n.push(`${i}: ${S(e)}`)}}return r}async function N(e,t={}){let i=t.environment??process.env,a=[],s=i.HOME??f.default.homedir(),l=r.findSyncedRoot(t.cwd??process.cwd(),s);if(!l)return{problems:[v],stale:!1,loaded:[]};let u;try{u=n.readSyncState(l,s)}catch(e){return{problems:[S(e)],stale:!1,loaded:[]}}if(!u)return{problems:[v],stale:!1,loaded:[]};let d=t.argv??process.argv.slice(2);if(i[o.EXTERNAL_EXTENSIONS_ENV]===`1`||w(d,{...u.resolved,...u.bundles}))return{problems:[],stale:!1,loaded:[]};if(c.configurePreset({preset:u.selection.preset,piArgs:[]},i),!o.alreadyComposed(i)){i[o.COMPOSED_ENV]=`1`,await T(u,l,i);let e=E(d);e.mute&&(i[o.MUTE_ENV]=`1`),await O(e,(0,p.loadMajorModesConfig)(l),l,a)}let m;try{m=await j(u,(0,g.loadHarnessState)(i).state,i)}catch(e){return{problems:[...a,S(e)],stale:!1,loaded:[]}}let h=await M(e,m,a);return{problems:a,stale:n.computeInputsHash(l,u.selection,s)!==u.inputsHash,loaded:h}}exports.DOOM_FLAGS=b,exports.REMOVED_LAYER_FLAG=x,exports.applyStartupFlags=O,exports.cleanupRunDirectory=A,exports.composeDoomSession=N,exports.composeLoadOrder=j,exports.extensionsProvidedExternally=w,exports.loadComposedExtensions=M,exports.prepareRunDirectory=k,exports.readStartupFlags=E,exports.registerDoomFlags=D,exports.startSyncedSession=T;
|
|
2
|
+
//# sourceMappingURL=composer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.cjs","names":["fs","path","readHarnessState","getHarnessState","runDirectory","os","createMapResolvers","CONTEXT_PACKAGES","PERSONA_ENTRY","selectWorkflowExtensionForProcess","assembleChildExtensions","assembleExtensions","MUTE_ENV","extensionSetKey","findSyncedRoot","readSyncState","EXTERNAL_EXTENSIONS_ENV","alreadyComposed","COMPOSED_ENV","computeInputsHash"],"sources":["../../src/adapters/composer.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { loadMajorModesConfig, type MajorModesConfig } from '@agimon-ai/doompi-config/majorModes';\nimport { withExtensionSource } from '@agimon-ai/doompi-ui/extensionName';\nimport { type ExtensionAPI, parseArgs } from '@earendil-works/pi-coding-agent';\nimport {\n assembleChildExtensions,\n assembleExtensions,\n CONTEXT_PACKAGES,\n PERSONA_ENTRY,\n} from '../services/extensionAssembler.ts';\nimport type { HarnessPreset } from '../types/interfaces/index.ts';\nimport { findSyncedRoot } from './bootstrapLocator.ts';\nimport { alreadyComposed, COMPOSED_ENV, EXTERNAL_EXTENSIONS_ENV, MUTE_ENV } from './compositionState.ts';\nimport {\n createHarnessSession,\n getHarnessState,\n type HarnessState,\n loadHarnessState,\n readHarnessState,\n updateHarnessState,\n} from './config/harnessState.ts';\nimport { extensionSetKey } from './extensionCompiler.ts';\nimport { configurePreset } from './harnessContext.ts';\nimport { selectWorkflowExtensionForProcess } from './resourceCollector.ts';\nimport { computeInputsHash, createMapResolvers, readSyncState, runDirectory, type SyncState } from './syncState.ts';\n\nexport { findSyncedRoot } from './bootstrapLocator.ts';\nexport { alreadyComposed, COMPOSED_ENV, EXTERNAL_EXTENSIONS_ENV, MUTE_ENV } from './compositionState.ts';\n\n/**\n * The runtime half of `doom-pi sync`.\n *\n * Pi's own config carries a single entry, the doom-pi extension, and this is\n * what that entry runs: hydrate the harness environment, apply the startup\n * flags, then load the extension set the matrix selects. It runs again on every\n * `/reload`, which is what lets `/mode` swap the set without a restart,\n * since Pi rebuilds its extension runner from whatever a reload produced.\n */\n\nconst ENABLED_FLAG = '1';\nconst SUBAGENT_AGENT_DIRS_ENV = 'PI_SUBAGENT_EXTRA_AGENT_DIRS';\nconst SUBAGENT_SKILL_DIRS_ENV = 'PI_SUBAGENT_EXTRA_SKILL_DIRS';\nconst DOMAIN_SEPARATOR = ',';\nconst PRIVATE_DIRECTORY_MODE = 0o700;\nconst MATRIX_SWITCHER_MODULE = './matrixSwitcher.ts';\nconst NOT_SYNCED = 'doompi is configured for Pi but this repository was never synced. Run doompi sync.';\nconst TIMING_ENABLED = process.env.DOOMPI_TIMING === ENABLED_FLAG || process.env.PI_TIMING === ENABLED_FLAG;\n\nexport const DOOM_FLAGS = {\n majorMode: 'major-mode',\n domains: 'domains',\n profile: 'profile',\n mute: 'mute',\n} as const;\n\n/** Removed flag, reported rather than ignored when a synced session passes it. */\nexport const REMOVED_LAYER_FLAG = 'layer';\n\nexport interface StartupFlags {\n majorMode?: string;\n domains?: string[];\n profile?: string;\n mute: boolean;\n /** True when the caller passed the removed `--layer` flag. */\n removedLayer: boolean;\n}\n\nexport interface ComposeOutcome {\n /** Everything that went wrong, reported once the session can show messages. */\n problems: string[];\n /** Config changed since the last sync, which is a prompt to re-sync. */\n stale: boolean;\n loaded: string[];\n}\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction realPath(target: string): string {\n try {\n return fs.realpathSync(target);\n } catch {\n return path.resolve(target);\n }\n}\n\n/**\n * True when this process was handed the doom extension set on the command line.\n *\n * The launcher and detached Doom Team children both pass the composed list as\n * `--extension` arguments, and Pi merges those with whatever project settings\n * declare. Composing again here would load every extension twice, which Pi\n * reports as each tool and flag conflicting with itself.\n *\n * Matching against the synced paths rather than the mere presence of\n * `--extension` keeps an unrelated one-off, `pi -e ./debug.ts`, from silently\n * costing the user their whole setup.\n */\nexport function extensionsProvidedExternally(argv: string[], resolved: Record<string, string>): boolean {\n const { extensions } = parseArgs(argv);\n if (!extensions || extensions.length === 0) return false;\n const composed = new Set(Object.values(resolved).map(realPath));\n return extensions.some((entry) => composed.has(realPath(entry)));\n}\n\n/**\n * Opens this process's session from what sync pinned.\n *\n * The synced record is decoded underneath the live environment, so an inherited\n * value still wins: a launcher run, a nested session, or a CI override is more\n * specific than anything sync wrote. The result becomes the session's state\n * file, which is the authority from here on; the environment it publishes is\n * for the bash hooks and the packages that can only read one.\n */\nexport async function startSyncedSession(\n state: SyncState,\n repoRoot: string,\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<HarnessState> {\n const directory = await prepareRunDirectory(repoRoot, environment);\n const harness: HarnessState = {\n ...readHarnessState({ ...state.env, ...environment }),\n // Recorded separately because no variable carries them.\n ...state.fileState,\n temporaryDirectory: directory,\n };\n createHarnessSession(harness, { directory, environment });\n // The profile's own defaults, which the launcher applies at spawn. They are\n // recorded as a map rather than as variables so /profile can tell which ones\n // it owns when it swaps them out later.\n for (const [key, value] of Object.entries(harness.profileEnvironment)) {\n if (environment[key] === undefined) environment[key] = value;\n }\n return harness;\n}\n\n/**\n * Reads the doom flags off the command line.\n *\n * Pi collects unrecognized flags for extensions but hands their values back\n * only after every extension has loaded, which is too late to decide what to\n * load. Parsing argv with Pi's own parser keeps the value rules identical.\n */\nexport function readStartupFlags(argv: string[]): StartupFlags {\n const { unknownFlags } = parseArgs(argv);\n const text = (name: string): string | undefined => {\n const value = unknownFlags.get(name);\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n };\n const domains = text(DOOM_FLAGS.domains);\n return {\n majorMode: text(DOOM_FLAGS.majorMode),\n domains: domains\n ?.split(DOMAIN_SEPARATOR)\n .map((name) => name.trim())\n .filter(Boolean),\n profile: text(DOOM_FLAGS.profile),\n mute: unknownFlags.get(DOOM_FLAGS.mute) !== undefined,\n removedLayer: unknownFlags.get(REMOVED_LAYER_FLAG) !== undefined,\n };\n}\n\n/** Registers the flags so Pi accepts them and lists them in `pi --help`. */\nexport function registerDoomFlags(pi: Pick<ExtensionAPI, 'registerFlag'>): void {\n pi.registerFlag(DOOM_FLAGS.majorMode, {\n type: 'string',\n description: 'Named major mode from .doom/modes.yaml',\n });\n pi.registerFlag(DOOM_FLAGS.domains, { type: 'string', description: 'Comma-separated content domains' });\n pi.registerFlag(DOOM_FLAGS.profile, { type: 'string', description: 'Persona and env from .doom/profiles.yaml' });\n pi.registerFlag(DOOM_FLAGS.mute, { type: 'boolean', description: 'Disable the notification extension' });\n}\n\n/**\n * Applies the startup flags through the same switchers the slash commands use.\n *\n * A bad value is collected rather than thrown: a factory that throws takes the\n * whole doom setup down with it, which is far worse than one unapplied flag.\n */\nexport async function applyStartupFlags(\n flags: StartupFlags,\n majorModesConfig: MajorModesConfig,\n repoRoot: string,\n problems: string[],\n): Promise<void> {\n // Reported rather than ignored: Pi hands unrecognized flags to extensions, so\n // a stale `--layer dev` would otherwise start a session on the wrong mode\n // without saying anything.\n if (flags.removedLayer) problems.push(`--${REMOVED_LAYER_FLAG} was replaced by --${DOOM_FLAGS.majorMode}`);\n if (flags.majorMode) {\n try {\n const { applyMajorMode } = await import(MATRIX_SWITCHER_MODULE);\n applyMajorMode(majorModesConfig, flags.majorMode, getHarnessState());\n } catch (error) {\n problems.push(`--${DOOM_FLAGS.majorMode} ${flags.majorMode}: ${message(error)}`);\n }\n }\n if (flags.domains && flags.domains.length > 0) {\n try {\n const { applyDomains } = await import(MATRIX_SWITCHER_MODULE);\n await applyDomains(flags.domains, getHarnessState());\n } catch (error) {\n problems.push(`--domains ${flags.domains.join(DOMAIN_SEPARATOR)}: ${message(error)}`);\n }\n }\n if (flags.profile) {\n try {\n const [{ applyProfile }, { resolveProfile }] = await Promise.all([\n import(MATRIX_SWITCHER_MODULE),\n import('@agimon-ai/doompi-config/profiles'),\n ]);\n await applyProfile(resolveProfile(repoRoot, flags.profile), getHarnessState());\n } catch (error) {\n problems.push(`--profile ${flags.profile}: ${message(error)}`);\n }\n }\n}\n\n/**\n * Points harness state at a per-process directory before anything writes there.\n *\n * The synced directory is a baseline that every session reads; live switches\n * materialize into this one instead, so a second session in the same repository\n * cannot overwrite what the first is using.\n */\nexport async function prepareRunDirectory(\n repoRoot: string,\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<string> {\n const directory = runDirectory(repoRoot, process.pid, environment.HOME ?? os.homedir());\n await fs.promises.mkdir(directory, { mode: PRIVATE_DIRECTORY_MODE, recursive: true });\n // Through the store rather than the environment: the state file is the\n // authority, and a switcher reading a stale directory would write a live\n // session's resources into the wrong place.\n updateHarnessState({ temporaryDirectory: directory }, environment);\n return directory;\n}\n\n/** Removes this session's scratch directory. */\nexport async function cleanupRunDirectory(\n repoRoot: string,\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<void> {\n await fs.promises.rm(runDirectory(repoRoot, process.pid, environment.HOME ?? os.homedir()), {\n recursive: true,\n force: true,\n });\n}\n\n/**\n * Builds the ordered list of extensions to load for the current state.\n *\n * Returns them in Pi load order. `assembleExtensions` produces the order the\n * launcher passes to Pi, where the last element becomes the first `--extension`\n * argument, so reversing here keeps that rule stated in exactly one place.\n */\nexport async function composeLoadOrder(\n state: SyncState,\n harness: HarnessState = getHarnessState(),\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<string[]> {\n const repoRoot = harness.root ?? state.root;\n const resolvers = createMapResolvers(state.resolved, state.compiled);\n // Resolved from the sync map rather than generated: doom-mcp reads the\n // repository and plugin layers itself, and the environment the launcher wrote\n // already tells it which plugins and allowlist this session selected.\n const mcpEntry = harness.mcp ? resolvers.optionalPackageEntry(CONTEXT_PACKAGES.mcp) : undefined;\n const context = {\n agents: harness.agents,\n // Exiting when the agent settles is a launcher decision with no synced\n // equivalent: a session started by hand is meant to stay open.\n autoStop: false,\n preset: state.selection.preset,\n mcpEntry,\n personaEntry: resolvers.ownEntry(PERSONA_ENTRY),\n workflowExtension: selectWorkflowExtensionForProcess(\n resolvers.optionalPackageEntry(CONTEXT_PACKAGES.workflow),\n resolvers.optionalPackageEntry(CONTEXT_PACKAGES.dispatcherWorkflow),\n environment,\n ),\n layers: [...harness.layers],\n majorModesConfig: loadMajorModesConfig(repoRoot),\n resolvers,\n };\n\n // A state field, so it goes through the store: Doom Team reads it from the\n // environment the store publishes when it builds a child's spawn snapshot.\n updateHarnessState(\n { childExtensions: assembleChildExtensions({ ...context, agents: false, mute: true }) },\n environment,\n );\n if (harness.agents) {\n environment[SUBAGENT_AGENT_DIRS_ENV] = harness.agentDirectories.join(path.delimiter);\n environment[SUBAGENT_SKILL_DIRS_ENV] = harness.skillDirectories.join(path.delimiter);\n }\n const entries = [...assembleExtensions({ ...context, mute: environment[MUTE_ENV] === ENABLED_FLAG })].reverse();\n const bundle = state.bundles?.[extensionSetKey(entries)];\n return bundle ? [bundle] : entries;\n}\n\n/**\n * Imports each extension and hands it a source-aware view of the Pi API.\n *\n * Every Pi extension entry is a factory of the same shape, so one extension can\n * activate the rest. The view delegates to the same host API while retaining the\n * entry path for tools registered through a composed loader. Failures are per\n * entry: one unloadable module must not cost the session everything after it.\n */\nexport async function loadComposedExtensions(\n pi: ExtensionAPI,\n entries: string[],\n problems: string[],\n): Promise<string[]> {\n const loaded: string[] = [];\n for (const entry of entries) {\n const importStartedAt = performance.now();\n let module: { default?: unknown };\n try {\n module = (await import(pathToFileURL(entry).href)) as { default?: unknown };\n if (TIMING_ENABLED) {\n process.stderr.write(`[doompi:timing] import ${(performance.now() - importStartedAt).toFixed(1)}ms ${entry}\\n`);\n }\n } catch (error) {\n problems.push(`${entry}: ${message(error)}`);\n continue;\n }\n if (typeof module.default !== 'function') {\n problems.push(`${entry}: does not export an extension factory`);\n continue;\n }\n const factoryStartedAt = performance.now();\n try {\n await (module.default as (api: ExtensionAPI) => void | Promise<void>)(withExtensionSource(pi, entry));\n if (TIMING_ENABLED) {\n process.stderr.write(\n `[doompi:timing] factory ${(performance.now() - factoryStartedAt).toFixed(1)}ms ${entry}\\n`,\n );\n }\n loaded.push(entry);\n } catch (error) {\n problems.push(`${entry}: ${message(error)}`);\n }\n }\n return loaded;\n}\n\nexport interface ComposeOptions {\n cwd?: string;\n argv?: string[];\n environment?: NodeJS.ProcessEnv;\n}\n\n/**\n * Runs the whole synced startup for one Pi session.\n *\n * Never throws: whatever fails is reported through the outcome so the session\n * still starts and can say what is wrong.\n */\nexport async function composeDoomSession(pi: ExtensionAPI, options: ComposeOptions = {}): Promise<ComposeOutcome> {\n const environment = options.environment ?? process.env;\n const problems: string[] = [];\n const homeDirectory = environment.HOME ?? os.homedir();\n const repoRoot = findSyncedRoot(options.cwd ?? process.cwd(), homeDirectory);\n if (!repoRoot) return { problems: [NOT_SYNCED], stale: false, loaded: [] };\n\n let state: SyncState | undefined;\n try {\n state = readSyncState(repoRoot, homeDirectory);\n } catch (error) {\n return { problems: [message(error)], stale: false, loaded: [] };\n }\n if (!state) return { problems: [NOT_SYNCED], stale: false, loaded: [] };\n\n const argv = options.argv ?? process.argv.slice(2);\n // The launcher and Doom Team children compose the set themselves and pass it\n // in, so this entry has nothing left to do but stay out of the way.\n if (\n environment[EXTERNAL_EXTENSIONS_ENV] === ENABLED_FLAG ||\n extensionsProvidedExternally(argv, { ...state.resolved, ...state.bundles })\n ) {\n return { problems: [], stale: false, loaded: [] };\n }\n\n configurePreset({ preset: state.selection.preset as HarnessPreset, piArgs: [] }, environment);\n\n // Only the first load opens a session. A reload finds the pointer this set\n // and reads the file back, which is what carries a live /domains or /profile\n // switch across the reload instead of resetting it to what sync pinned.\n if (!alreadyComposed(environment)) {\n environment[COMPOSED_ENV] = ENABLED_FLAG;\n await startSyncedSession(state, repoRoot, environment);\n const flags = readStartupFlags(argv);\n if (flags.mute) environment[MUTE_ENV] = ENABLED_FLAG;\n await applyStartupFlags(flags, loadMajorModesConfig(repoRoot), repoRoot, problems);\n }\n\n let entries: string[];\n try {\n // Read back through the store rather than from this process: the startup\n // flags may have switched the layer or the domains a moment ago, and the\n // environment being managed is not always this process's own.\n entries = await composeLoadOrder(state, loadHarnessState(environment).state, environment);\n } catch (error) {\n return { problems: [...problems, message(error)], stale: false, loaded: [] };\n }\n\n const loaded = await loadComposedExtensions(pi, entries, problems);\n return {\n problems,\n stale: computeInputsHash(repoRoot, state.selection, homeDirectory) !== state.inputsHash,\n loaded,\n };\n}\n"],"mappings":"wrBA0CA,MAKM,EAAyB,sBACzB,EAAa,qFACb,EAAiB,QAAQ,IAAI,gBAAkB,KAAgB,QAAQ,IAAI,YAAc,IAElF,EAAa,CACxB,UAAW,aACX,QAAS,UACT,QAAS,UACT,KAAM,OACP,CAGY,EAAqB,QAmBlC,SAAS,EAAQ,EAAwB,CACvC,OAAO,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAG/D,SAAS,EAAS,EAAwB,CACxC,GAAI,CACF,OAAOA,EAAAA,QAAG,aAAa,EAAO,MACxB,CACN,OAAOC,EAAAA,QAAK,QAAQ,EAAO,EAgB/B,SAAgB,EAA6B,EAAgB,EAA2C,CACtG,GAAM,CAAE,eAAA,EAAA,EAAA,WAAyB,EAAK,CACtC,GAAI,CAAC,GAAc,EAAW,SAAW,EAAG,MAAO,GACnD,IAAM,EAAW,IAAI,IAAI,OAAO,OAAO,EAAS,CAAC,IAAI,EAAS,CAAC,CAC/D,OAAO,EAAW,KAAM,GAAU,EAAS,IAAI,EAAS,EAAM,CAAC,CAAC,CAYlE,eAAsB,EACpB,EACA,EACA,EAAiC,QAAQ,IAClB,CACvB,IAAM,EAAY,MAAM,EAAoB,EAAU,EAAY,CAC5D,EAAwB,CAC5B,GAAGC,EAAAA,iBAAiB,CAAE,GAAG,EAAM,IAAK,GAAG,EAAa,CAAC,CAErD,GAAG,EAAM,UACT,mBAAoB,EACrB,EACD,EAAA,EAAA,sBAAqB,EAAS,CAAE,YAAW,cAAa,CAAC,CAIzD,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAQ,mBAAmB,CAC/D,EAAY,KAAS,IAAA,KAAW,EAAY,GAAO,GAEzD,OAAO,EAUT,SAAgB,EAAiB,EAA8B,CAC7D,GAAM,CAAE,iBAAA,EAAA,EAAA,WAA2B,EAAK,CAClC,EAAQ,GAAqC,CACjD,IAAM,EAAQ,EAAa,IAAI,EAAK,CACpC,OAAO,OAAO,GAAU,UAAY,EAAM,MAAM,CAAG,EAAM,MAAM,CAAG,IAAA,IAE9D,EAAU,EAAK,EAAW,QAAQ,CACxC,MAAO,CACL,UAAW,EAAK,EAAW,UAAU,CACrC,QAAS,GACL,MAAM,IAAiB,CACxB,IAAK,GAAS,EAAK,MAAM,CAAC,CAC1B,OAAO,QAAQ,CAClB,QAAS,EAAK,EAAW,QAAQ,CACjC,KAAM,EAAa,IAAI,EAAW,KAAK,GAAK,IAAA,GAC5C,aAAc,EAAa,IAAI,EAAmB,GAAK,IAAA,GACxD,CAIH,SAAgB,EAAkB,EAA8C,CAC9E,EAAG,aAAa,EAAW,UAAW,CACpC,KAAM,SACN,YAAa,yCACd,CAAC,CACF,EAAG,aAAa,EAAW,QAAS,CAAE,KAAM,SAAU,YAAa,kCAAmC,CAAC,CACvG,EAAG,aAAa,EAAW,QAAS,CAAE,KAAM,SAAU,YAAa,2CAA4C,CAAC,CAChH,EAAG,aAAa,EAAW,KAAM,CAAE,KAAM,UAAW,YAAa,qCAAsC,CAAC,CAS1G,eAAsB,EACpB,EACA,EACA,EACA,EACe,CAKf,GADI,EAAM,cAAc,EAAS,KAAK,KAAK,EAAmB,qBAAqB,EAAW,YAAY,CACtG,EAAM,UACR,GAAI,CACF,GAAM,CAAE,kBAAmB,MAAM,OAAO,GACxC,EAAe,EAAkB,EAAM,UAAWC,EAAAA,iBAAiB,CAAC,OAC7D,EAAO,CACd,EAAS,KAAK,KAAK,EAAW,UAAU,GAAG,EAAM,UAAU,IAAI,EAAQ,EAAM,GAAG,CAGpF,GAAI,EAAM,SAAW,EAAM,QAAQ,OAAS,EAC1C,GAAI,CACF,GAAM,CAAE,gBAAiB,MAAM,OAAO,GACtC,MAAM,EAAa,EAAM,QAASA,EAAAA,iBAAiB,CAAC,OAC7C,EAAO,CACd,EAAS,KAAK,aAAa,EAAM,QAAQ,KAAK,IAAiB,CAAC,IAAI,EAAQ,EAAM,GAAG,CAGzF,GAAI,EAAM,QACR,GAAI,CACF,GAAM,CAAC,CAAE,gBAAgB,CAAE,mBAAoB,MAAM,QAAQ,IAAI,CAC/D,OAAO,GACP,OAAO,qCACR,CAAC,CACF,MAAM,EAAa,EAAe,EAAU,EAAM,QAAQ,CAAEA,EAAAA,iBAAiB,CAAC,OACvE,EAAO,CACd,EAAS,KAAK,aAAa,EAAM,QAAQ,IAAI,EAAQ,EAAM,GAAG,EAYpE,eAAsB,EACpB,EACA,EAAiC,QAAQ,IACxB,CACjB,IAAM,EAAYC,EAAAA,aAAa,EAAU,QAAQ,IAAK,EAAY,MAAQC,EAAAA,QAAG,SAAS,CAAC,CAMvF,OALA,MAAML,EAAAA,QAAG,SAAS,MAAM,EAAW,CAAE,KAAM,IAAwB,UAAW,GAAM,CAAC,CAIrF,EAAA,mBAAmB,CAAE,mBAAoB,EAAW,CAAE,EAAY,CAC3D,EAIT,eAAsB,EACpB,EACA,EAAiC,QAAQ,IAC1B,CACf,MAAMA,EAAAA,QAAG,SAAS,GAAGI,EAAAA,aAAa,EAAU,QAAQ,IAAK,EAAY,MAAQC,EAAAA,QAAG,SAAS,CAAC,CAAE,CAC1F,UAAW,GACX,MAAO,GACR,CAAC,CAUJ,eAAsB,EACpB,EACA,EAAwBF,EAAAA,iBAAiB,CACzC,EAAiC,QAAQ,IACtB,CACnB,IAAM,EAAW,EAAQ,MAAQ,EAAM,KACjC,EAAYG,EAAAA,mBAAmB,EAAM,SAAU,EAAM,SAAS,CAI9D,EAAW,EAAQ,IAAM,EAAU,qBAAqBC,EAAAA,iBAAiB,IAAI,CAAG,IAAA,GAChF,EAAU,CACd,OAAQ,EAAQ,OAGhB,SAAU,GACV,OAAQ,EAAM,UAAU,OACxB,WACA,aAAc,EAAU,SAASC,EAAAA,cAAc,CAC/C,kBAAmBC,EAAAA,kCACjB,EAAU,qBAAqBF,EAAAA,iBAAiB,SAAS,CACzD,EAAU,qBAAqBA,EAAAA,iBAAiB,mBAAmB,CACnE,EACD,CACD,OAAQ,CAAC,GAAG,EAAQ,OAAO,CAC3B,kBAAA,EAAA,EAAA,sBAAuC,EAAS,CAChD,YACD,CAID,EAAA,mBACE,CAAE,gBAAiBG,EAAAA,wBAAwB,CAAE,GAAG,EAAS,OAAQ,GAAO,KAAM,GAAM,CAAC,CAAE,CACvF,EACD,CACG,EAAQ,SACV,EAAY,6BAA2B,EAAQ,iBAAiB,KAAKT,EAAAA,QAAK,UAAU,CACpF,EAAY,6BAA2B,EAAQ,iBAAiB,KAAKA,EAAAA,QAAK,UAAU,EAEtF,IAAM,EAAU,CAAC,GAAGU,EAAAA,mBAAmB,CAAE,GAAG,EAAS,KAAM,EAAYC,EAAAA,YAAc,IAAc,CAAC,CAAC,CAAC,SAAS,CACzG,EAAS,EAAM,UAAUC,EAAAA,gBAAgB,EAAQ,EACvD,OAAO,EAAS,CAAC,EAAO,CAAG,EAW7B,eAAsB,EACpB,EACA,EACA,EACmB,CACnB,IAAM,EAAmB,EAAE,CAC3B,IAAK,IAAM,KAAS,EAAS,CAC3B,IAAM,EAAkB,YAAY,KAAK,CACrC,EACJ,GAAI,CACF,EAAU,MAAM,QAAA,EAAA,EAAA,eAAqB,EAAM,CAAC,MACxC,GACF,QAAQ,OAAO,MAAM,2BAA2B,YAAY,KAAK,CAAG,GAAiB,QAAQ,EAAE,CAAC,KAAK,EAAM,IAAI,OAE1G,EAAO,CACd,EAAS,KAAK,GAAG,EAAM,IAAI,EAAQ,EAAM,GAAG,CAC5C,SAEF,GAAI,OAAO,EAAO,SAAY,WAAY,CACxC,EAAS,KAAK,GAAG,EAAM,wCAAwC,CAC/D,SAEF,IAAM,EAAmB,YAAY,KAAK,CAC1C,GAAI,CACF,MAAO,EAAO,SAAA,EAAA,EAAA,qBAA4E,EAAI,EAAM,CAAC,CACjG,GACF,QAAQ,OAAO,MACb,4BAA4B,YAAY,KAAK,CAAG,GAAkB,QAAQ,EAAE,CAAC,KAAK,EAAM,IACzF,CAEH,EAAO,KAAK,EAAM,OACX,EAAO,CACd,EAAS,KAAK,GAAG,EAAM,IAAI,EAAQ,EAAM,GAAG,EAGhD,OAAO,EAeT,eAAsB,EAAmB,EAAkB,EAA0B,EAAE,CAA2B,CAChH,IAAM,EAAc,EAAQ,aAAe,QAAQ,IAC7C,EAAqB,EAAE,CACvB,EAAgB,EAAY,MAAQR,EAAAA,QAAG,SAAS,CAChD,EAAWS,EAAAA,eAAe,EAAQ,KAAO,QAAQ,KAAK,CAAE,EAAc,CAC5E,GAAI,CAAC,EAAU,MAAO,CAAE,SAAU,CAAC,EAAW,CAAE,MAAO,GAAO,OAAQ,EAAE,CAAE,CAE1E,IAAI,EACJ,GAAI,CACF,EAAQC,EAAAA,cAAc,EAAU,EAAc,OACvC,EAAO,CACd,MAAO,CAAE,SAAU,CAAC,EAAQ,EAAM,CAAC,CAAE,MAAO,GAAO,OAAQ,EAAE,CAAE,CAEjE,GAAI,CAAC,EAAO,MAAO,CAAE,SAAU,CAAC,EAAW,CAAE,MAAO,GAAO,OAAQ,EAAE,CAAE,CAEvE,IAAM,EAAO,EAAQ,MAAQ,QAAQ,KAAK,MAAM,EAAE,CAGlD,GACE,EAAYC,EAAAA,2BAA6B,KACzC,EAA6B,EAAM,CAAE,GAAG,EAAM,SAAU,GAAG,EAAM,QAAS,CAAC,CAE3E,MAAO,CAAE,SAAU,EAAE,CAAE,MAAO,GAAO,OAAQ,EAAE,CAAE,CAQnD,GALA,EAAA,gBAAgB,CAAE,OAAQ,EAAM,UAAU,OAAyB,OAAQ,EAAE,CAAE,CAAE,EAAY,CAKzF,CAACC,EAAAA,gBAAgB,EAAY,CAAE,CACjC,EAAYC,EAAAA,cAAgB,IAC5B,MAAM,EAAmB,EAAO,EAAU,EAAY,CACtD,IAAM,EAAQ,EAAiB,EAAK,CAChC,EAAM,OAAM,EAAYN,EAAAA,UAAY,KACxC,MAAM,EAAkB,GAAA,EAAA,EAAA,sBAA4B,EAAS,CAAE,EAAU,EAAS,CAGpF,IAAI,EACJ,GAAI,CAIF,EAAU,MAAM,EAAiB,GAAA,EAAA,EAAA,kBAAwB,EAAY,CAAC,MAAO,EAAY,OAClF,EAAO,CACd,MAAO,CAAE,SAAU,CAAC,GAAG,EAAU,EAAQ,EAAM,CAAC,CAAE,MAAO,GAAO,OAAQ,EAAE,CAAE,CAG9E,IAAM,EAAS,MAAM,EAAuB,EAAI,EAAS,EAAS,CAClE,MAAO,CACL,WACA,MAAOO,EAAAA,kBAAkB,EAAU,EAAM,UAAW,EAAc,GAAK,EAAM,WAC7E,SACD"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { HarnessState } from "./config/harnessState.cjs";
|
|
2
|
+
import { SyncState } from "./syncState.cjs";
|
|
3
|
+
import { findSyncedRoot } from "./bootstrapLocator.cjs";
|
|
4
|
+
import { COMPOSED_ENV, EXTERNAL_EXTENSIONS_ENV, MUTE_ENV, alreadyComposed } from "./compositionState.cjs";
|
|
5
|
+
import { MajorModesConfig } from "@agimon-ai/doompi-config/majorModes";
|
|
6
|
+
import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
7
|
+
|
|
8
|
+
//#region src/adapters/composer.d.ts
|
|
9
|
+
declare const DOOM_FLAGS: {
|
|
10
|
+
readonly majorMode: "major-mode";
|
|
11
|
+
readonly domains: "domains";
|
|
12
|
+
readonly profile: "profile";
|
|
13
|
+
readonly mute: "mute";
|
|
14
|
+
};
|
|
15
|
+
/** Removed flag, reported rather than ignored when a synced session passes it. */
|
|
16
|
+
declare const REMOVED_LAYER_FLAG = "layer";
|
|
17
|
+
interface StartupFlags {
|
|
18
|
+
majorMode?: string;
|
|
19
|
+
domains?: string[];
|
|
20
|
+
profile?: string;
|
|
21
|
+
mute: boolean;
|
|
22
|
+
/** True when the caller passed the removed `--layer` flag. */
|
|
23
|
+
removedLayer: boolean;
|
|
24
|
+
}
|
|
25
|
+
interface ComposeOutcome {
|
|
26
|
+
/** Everything that went wrong, reported once the session can show messages. */
|
|
27
|
+
problems: string[];
|
|
28
|
+
/** Config changed since the last sync, which is a prompt to re-sync. */
|
|
29
|
+
stale: boolean;
|
|
30
|
+
loaded: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* True when this process was handed the doom extension set on the command line.
|
|
34
|
+
*
|
|
35
|
+
* The launcher and detached Doom Team children both pass the composed list as
|
|
36
|
+
* `--extension` arguments, and Pi merges those with whatever project settings
|
|
37
|
+
* declare. Composing again here would load every extension twice, which Pi
|
|
38
|
+
* reports as each tool and flag conflicting with itself.
|
|
39
|
+
*
|
|
40
|
+
* Matching against the synced paths rather than the mere presence of
|
|
41
|
+
* `--extension` keeps an unrelated one-off, `pi -e ./debug.ts`, from silently
|
|
42
|
+
* costing the user their whole setup.
|
|
43
|
+
*/
|
|
44
|
+
declare function extensionsProvidedExternally(argv: string[], resolved: Record<string, string>): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Opens this process's session from what sync pinned.
|
|
47
|
+
*
|
|
48
|
+
* The synced record is decoded underneath the live environment, so an inherited
|
|
49
|
+
* value still wins: a launcher run, a nested session, or a CI override is more
|
|
50
|
+
* specific than anything sync wrote. The result becomes the session's state
|
|
51
|
+
* file, which is the authority from here on; the environment it publishes is
|
|
52
|
+
* for the bash hooks and the packages that can only read one.
|
|
53
|
+
*/
|
|
54
|
+
declare function startSyncedSession(state: SyncState, repoRoot: string, environment?: NodeJS.ProcessEnv): Promise<HarnessState>;
|
|
55
|
+
/**
|
|
56
|
+
* Reads the doom flags off the command line.
|
|
57
|
+
*
|
|
58
|
+
* Pi collects unrecognized flags for extensions but hands their values back
|
|
59
|
+
* only after every extension has loaded, which is too late to decide what to
|
|
60
|
+
* load. Parsing argv with Pi's own parser keeps the value rules identical.
|
|
61
|
+
*/
|
|
62
|
+
declare function readStartupFlags(argv: string[]): StartupFlags;
|
|
63
|
+
/** Registers the flags so Pi accepts them and lists them in `pi --help`. */
|
|
64
|
+
declare function registerDoomFlags(pi: Pick<ExtensionAPI, 'registerFlag'>): void;
|
|
65
|
+
/**
|
|
66
|
+
* Applies the startup flags through the same switchers the slash commands use.
|
|
67
|
+
*
|
|
68
|
+
* A bad value is collected rather than thrown: a factory that throws takes the
|
|
69
|
+
* whole doom setup down with it, which is far worse than one unapplied flag.
|
|
70
|
+
*/
|
|
71
|
+
declare function applyStartupFlags(flags: StartupFlags, majorModesConfig: MajorModesConfig, repoRoot: string, problems: string[]): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Points harness state at a per-process directory before anything writes there.
|
|
74
|
+
*
|
|
75
|
+
* The synced directory is a baseline that every session reads; live switches
|
|
76
|
+
* materialize into this one instead, so a second session in the same repository
|
|
77
|
+
* cannot overwrite what the first is using.
|
|
78
|
+
*/
|
|
79
|
+
declare function prepareRunDirectory(repoRoot: string, environment?: NodeJS.ProcessEnv): Promise<string>;
|
|
80
|
+
/** Removes this session's scratch directory. */
|
|
81
|
+
declare function cleanupRunDirectory(repoRoot: string, environment?: NodeJS.ProcessEnv): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Builds the ordered list of extensions to load for the current state.
|
|
84
|
+
*
|
|
85
|
+
* Returns them in Pi load order. `assembleExtensions` produces the order the
|
|
86
|
+
* launcher passes to Pi, where the last element becomes the first `--extension`
|
|
87
|
+
* argument, so reversing here keeps that rule stated in exactly one place.
|
|
88
|
+
*/
|
|
89
|
+
declare function composeLoadOrder(state: SyncState, harness?: HarnessState, environment?: NodeJS.ProcessEnv): Promise<string[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Imports each extension and hands it a source-aware view of the Pi API.
|
|
92
|
+
*
|
|
93
|
+
* Every Pi extension entry is a factory of the same shape, so one extension can
|
|
94
|
+
* activate the rest. The view delegates to the same host API while retaining the
|
|
95
|
+
* entry path for tools registered through a composed loader. Failures are per
|
|
96
|
+
* entry: one unloadable module must not cost the session everything after it.
|
|
97
|
+
*/
|
|
98
|
+
declare function loadComposedExtensions(pi: ExtensionAPI, entries: string[], problems: string[]): Promise<string[]>;
|
|
99
|
+
interface ComposeOptions {
|
|
100
|
+
cwd?: string;
|
|
101
|
+
argv?: string[];
|
|
102
|
+
environment?: NodeJS.ProcessEnv;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Runs the whole synced startup for one Pi session.
|
|
106
|
+
*
|
|
107
|
+
* Never throws: whatever fails is reported through the outcome so the session
|
|
108
|
+
* still starts and can say what is wrong.
|
|
109
|
+
*/
|
|
110
|
+
declare function composeDoomSession(pi: ExtensionAPI, options?: ComposeOptions): Promise<ComposeOutcome>;
|
|
111
|
+
//#endregion
|
|
112
|
+
export { ComposeOptions, ComposeOutcome, DOOM_FLAGS, REMOVED_LAYER_FLAG, StartupFlags, applyStartupFlags, cleanupRunDirectory, composeDoomSession, composeLoadOrder, extensionsProvidedExternally, loadComposedExtensions, prepareRunDirectory, readStartupFlags, registerDoomFlags, startSyncedSession };
|
|
113
|
+
//# sourceMappingURL=composer.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.d.cts","names":[],"sources":["../../src/adapters/composer.ts"],"mappings":";;;;;;;;cAmDa,UAAA;EAAA;;;;;;cAQA,kBAAA;AAAA,UAEI,YAAA;EACf,SAAA;EACA,OAAA;EACA,OAAA;EACA,IAAA;EAN6B;EAQ7B,YAAA;AAAA;AAAA,UAGe,cAAA;EATA;EAWf,QAAA;;EAEA,KAAA;EACA,MAAA;AAAA;;;;;;AALF;;;;;;;iBAgCgB,4BAAA,CAA6B,IAAA,YAAgB,QAAA,EAAU,MAAA;;AAAvE;;;;;;;;iBAgBsB,kBAAA,CACpB,KAAA,EAAO,SAAA,EACP,QAAA,UACA,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA,CAAQ,YAAA;AAJX;;;;;;;AAAA,iBA6BgB,gBAAA,CAAiB,IAAA,aAAiB,YAAA;;iBAoBlC,iBAAA,CAAkB,EAAA,EAAI,IAAA,CAAK,YAAA;;;;;;;iBAgBrB,iBAAA,CACpB,KAAA,EAAO,YAAA,EACP,gBAAA,EAAkB,gBAAA,EAClB,QAAA,UACA,QAAA,aACC,OAAA;;;AAzCH;;;;;iBAkFsB,mBAAA,CACpB,QAAA,UACA,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA;;iBAWmB,mBAAA,CACpB,QAAA,UACA,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA;;;;;;;AA/DH;iBA6EsB,gBAAA,CACpB,KAAA,EAAO,SAAA,EACP,OAAA,GAAS,YAAA,EACT,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA;;;;;;;;;iBAgDmB,sBAAA,CACpB,EAAA,EAAI,YAAA,EACJ,OAAA,YACA,QAAA,aACC,OAAA;AAAA,UAkCc,cAAA;EACf,GAAA;EACA,IAAA;EACA,WAAA,GAAc,MAAA,CAAO,UAAA;AAAA;;AA5HvB;;;;;iBAqIsB,kBAAA,CAAmB,EAAA,EAAI,YAAA,EAAc,OAAA,GAAS,cAAA,GAAsB,OAAA,CAAQ,cAAA"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { HarnessState } from "./config/harnessState.mjs";
|
|
2
|
+
import { SyncState } from "./syncState.mjs";
|
|
3
|
+
import { findSyncedRoot } from "./bootstrapLocator.mjs";
|
|
4
|
+
import { COMPOSED_ENV, EXTERNAL_EXTENSIONS_ENV, MUTE_ENV, alreadyComposed } from "./compositionState.mjs";
|
|
5
|
+
import { MajorModesConfig } from "@agimon-ai/doompi-config/majorModes";
|
|
6
|
+
import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
7
|
+
|
|
8
|
+
//#region src/adapters/composer.d.ts
|
|
9
|
+
declare const DOOM_FLAGS: {
|
|
10
|
+
readonly majorMode: "major-mode";
|
|
11
|
+
readonly domains: "domains";
|
|
12
|
+
readonly profile: "profile";
|
|
13
|
+
readonly mute: "mute";
|
|
14
|
+
};
|
|
15
|
+
/** Removed flag, reported rather than ignored when a synced session passes it. */
|
|
16
|
+
declare const REMOVED_LAYER_FLAG = "layer";
|
|
17
|
+
interface StartupFlags {
|
|
18
|
+
majorMode?: string;
|
|
19
|
+
domains?: string[];
|
|
20
|
+
profile?: string;
|
|
21
|
+
mute: boolean;
|
|
22
|
+
/** True when the caller passed the removed `--layer` flag. */
|
|
23
|
+
removedLayer: boolean;
|
|
24
|
+
}
|
|
25
|
+
interface ComposeOutcome {
|
|
26
|
+
/** Everything that went wrong, reported once the session can show messages. */
|
|
27
|
+
problems: string[];
|
|
28
|
+
/** Config changed since the last sync, which is a prompt to re-sync. */
|
|
29
|
+
stale: boolean;
|
|
30
|
+
loaded: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* True when this process was handed the doom extension set on the command line.
|
|
34
|
+
*
|
|
35
|
+
* The launcher and detached Doom Team children both pass the composed list as
|
|
36
|
+
* `--extension` arguments, and Pi merges those with whatever project settings
|
|
37
|
+
* declare. Composing again here would load every extension twice, which Pi
|
|
38
|
+
* reports as each tool and flag conflicting with itself.
|
|
39
|
+
*
|
|
40
|
+
* Matching against the synced paths rather than the mere presence of
|
|
41
|
+
* `--extension` keeps an unrelated one-off, `pi -e ./debug.ts`, from silently
|
|
42
|
+
* costing the user their whole setup.
|
|
43
|
+
*/
|
|
44
|
+
declare function extensionsProvidedExternally(argv: string[], resolved: Record<string, string>): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Opens this process's session from what sync pinned.
|
|
47
|
+
*
|
|
48
|
+
* The synced record is decoded underneath the live environment, so an inherited
|
|
49
|
+
* value still wins: a launcher run, a nested session, or a CI override is more
|
|
50
|
+
* specific than anything sync wrote. The result becomes the session's state
|
|
51
|
+
* file, which is the authority from here on; the environment it publishes is
|
|
52
|
+
* for the bash hooks and the packages that can only read one.
|
|
53
|
+
*/
|
|
54
|
+
declare function startSyncedSession(state: SyncState, repoRoot: string, environment?: NodeJS.ProcessEnv): Promise<HarnessState>;
|
|
55
|
+
/**
|
|
56
|
+
* Reads the doom flags off the command line.
|
|
57
|
+
*
|
|
58
|
+
* Pi collects unrecognized flags for extensions but hands their values back
|
|
59
|
+
* only after every extension has loaded, which is too late to decide what to
|
|
60
|
+
* load. Parsing argv with Pi's own parser keeps the value rules identical.
|
|
61
|
+
*/
|
|
62
|
+
declare function readStartupFlags(argv: string[]): StartupFlags;
|
|
63
|
+
/** Registers the flags so Pi accepts them and lists them in `pi --help`. */
|
|
64
|
+
declare function registerDoomFlags(pi: Pick<ExtensionAPI, 'registerFlag'>): void;
|
|
65
|
+
/**
|
|
66
|
+
* Applies the startup flags through the same switchers the slash commands use.
|
|
67
|
+
*
|
|
68
|
+
* A bad value is collected rather than thrown: a factory that throws takes the
|
|
69
|
+
* whole doom setup down with it, which is far worse than one unapplied flag.
|
|
70
|
+
*/
|
|
71
|
+
declare function applyStartupFlags(flags: StartupFlags, majorModesConfig: MajorModesConfig, repoRoot: string, problems: string[]): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Points harness state at a per-process directory before anything writes there.
|
|
74
|
+
*
|
|
75
|
+
* The synced directory is a baseline that every session reads; live switches
|
|
76
|
+
* materialize into this one instead, so a second session in the same repository
|
|
77
|
+
* cannot overwrite what the first is using.
|
|
78
|
+
*/
|
|
79
|
+
declare function prepareRunDirectory(repoRoot: string, environment?: NodeJS.ProcessEnv): Promise<string>;
|
|
80
|
+
/** Removes this session's scratch directory. */
|
|
81
|
+
declare function cleanupRunDirectory(repoRoot: string, environment?: NodeJS.ProcessEnv): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Builds the ordered list of extensions to load for the current state.
|
|
84
|
+
*
|
|
85
|
+
* Returns them in Pi load order. `assembleExtensions` produces the order the
|
|
86
|
+
* launcher passes to Pi, where the last element becomes the first `--extension`
|
|
87
|
+
* argument, so reversing here keeps that rule stated in exactly one place.
|
|
88
|
+
*/
|
|
89
|
+
declare function composeLoadOrder(state: SyncState, harness?: HarnessState, environment?: NodeJS.ProcessEnv): Promise<string[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Imports each extension and hands it a source-aware view of the Pi API.
|
|
92
|
+
*
|
|
93
|
+
* Every Pi extension entry is a factory of the same shape, so one extension can
|
|
94
|
+
* activate the rest. The view delegates to the same host API while retaining the
|
|
95
|
+
* entry path for tools registered through a composed loader. Failures are per
|
|
96
|
+
* entry: one unloadable module must not cost the session everything after it.
|
|
97
|
+
*/
|
|
98
|
+
declare function loadComposedExtensions(pi: ExtensionAPI, entries: string[], problems: string[]): Promise<string[]>;
|
|
99
|
+
interface ComposeOptions {
|
|
100
|
+
cwd?: string;
|
|
101
|
+
argv?: string[];
|
|
102
|
+
environment?: NodeJS.ProcessEnv;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Runs the whole synced startup for one Pi session.
|
|
106
|
+
*
|
|
107
|
+
* Never throws: whatever fails is reported through the outcome so the session
|
|
108
|
+
* still starts and can say what is wrong.
|
|
109
|
+
*/
|
|
110
|
+
declare function composeDoomSession(pi: ExtensionAPI, options?: ComposeOptions): Promise<ComposeOutcome>;
|
|
111
|
+
//#endregion
|
|
112
|
+
export { ComposeOptions, ComposeOutcome, DOOM_FLAGS, REMOVED_LAYER_FLAG, StartupFlags, applyStartupFlags, cleanupRunDirectory, composeDoomSession, composeLoadOrder, extensionsProvidedExternally, loadComposedExtensions, prepareRunDirectory, readStartupFlags, registerDoomFlags, startSyncedSession };
|
|
113
|
+
//# sourceMappingURL=composer.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.d.mts","names":[],"sources":["../../src/adapters/composer.ts"],"mappings":";;;;;;;;cAmDa,UAAA;EAAA;;;;;;cAQA,kBAAA;AAAA,UAEI,YAAA;EACf,SAAA;EACA,OAAA;EACA,OAAA;EACA,IAAA;EAN6B;EAQ7B,YAAA;AAAA;AAAA,UAGe,cAAA;EATA;EAWf,QAAA;;EAEA,KAAA;EACA,MAAA;AAAA;;;;;;AALF;;;;;;;iBAgCgB,4BAAA,CAA6B,IAAA,YAAgB,QAAA,EAAU,MAAA;;AAAvE;;;;;;;;iBAgBsB,kBAAA,CACpB,KAAA,EAAO,SAAA,EACP,QAAA,UACA,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA,CAAQ,YAAA;AAJX;;;;;;;AAAA,iBA6BgB,gBAAA,CAAiB,IAAA,aAAiB,YAAA;;iBAoBlC,iBAAA,CAAkB,EAAA,EAAI,IAAA,CAAK,YAAA;;;;;;;iBAgBrB,iBAAA,CACpB,KAAA,EAAO,YAAA,EACP,gBAAA,EAAkB,gBAAA,EAClB,QAAA,UACA,QAAA,aACC,OAAA;;;AAzCH;;;;;iBAkFsB,mBAAA,CACpB,QAAA,UACA,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA;;iBAWmB,mBAAA,CACpB,QAAA,UACA,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA;;;;;;;AA/DH;iBA6EsB,gBAAA,CACpB,KAAA,EAAO,SAAA,EACP,OAAA,GAAS,YAAA,EACT,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,OAAA;;;;;;;;;iBAgDmB,sBAAA,CACpB,EAAA,EAAI,YAAA,EACJ,OAAA,YACA,QAAA,aACC,OAAA;AAAA,UAkCc,cAAA;EACf,GAAA;EACA,IAAA;EACA,WAAA,GAAc,MAAA,CAAO,UAAA;AAAA;;AA5HvB;;;;;iBAqIsB,kBAAA,CAAmB,EAAA,EAAI,YAAA,EAAc,OAAA,GAAS,cAAA,GAAsB,OAAA,CAAQ,cAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{CONTEXT_PACKAGES as e,PERSONA_ENTRY as t,assembleChildExtensions as n,assembleExtensions as r}from"../services/extensionAssembler.mjs";import{computeInputsHash as i,createMapResolvers as a,readSyncState as o,runDirectory as s}from"./syncState.mjs";import{findSyncedRoot as c}from"./bootstrapLocator.mjs";import{createHarnessSession as l,getHarnessState as u,loadHarnessState as d,readHarnessState as f,updateHarnessState as p}from"./config/harnessState.mjs";import{selectWorkflowExtensionForProcess as m}from"./resourceCollector.mjs";import{COMPOSED_ENV as h,EXTERNAL_EXTENSIONS_ENV as g,MUTE_ENV as _,alreadyComposed as v}from"./compositionState.mjs";import{extensionSetKey as y}from"./extensionCompiler.mjs";import{configurePreset as b}from"./harnessContext.mjs";import{pathToFileURL as x}from"node:url";import S from"node:path";import C from"node:fs";import w from"node:os";import{loadMajorModesConfig as T}from"@agimon-ai/doompi-config/majorModes";import{withExtensionSource as E}from"@agimon-ai/doompi-ui/extensionName";import{parseArgs as D}from"@earendil-works/pi-coding-agent";const O=`./matrixSwitcher.ts`,k=`doompi is configured for Pi but this repository was never synced. Run doompi sync.`,A=process.env.DOOMPI_TIMING===`1`||process.env.PI_TIMING===`1`,j={majorMode:`major-mode`,domains:`domains`,profile:`profile`,mute:`mute`},M=`layer`;function N(e){return e instanceof Error?e.message:String(e)}function P(e){try{return C.realpathSync(e)}catch{return S.resolve(e)}}function F(e,t){let{extensions:n}=D(e);if(!n||n.length===0)return!1;let r=new Set(Object.values(t).map(P));return n.some(e=>r.has(P(e)))}async function I(e,t,n=process.env){let r=await B(t,n),i={...f({...e.env,...n}),...e.fileState,temporaryDirectory:r};l(i,{directory:r,environment:n});for(let[e,t]of Object.entries(i.profileEnvironment))n[e]===void 0&&(n[e]=t);return i}function L(e){let{unknownFlags:t}=D(e),n=e=>{let n=t.get(e);return typeof n==`string`&&n.trim()?n.trim():void 0},r=n(j.domains);return{majorMode:n(j.majorMode),domains:r?.split(`,`).map(e=>e.trim()).filter(Boolean),profile:n(j.profile),mute:t.get(j.mute)!==void 0,removedLayer:t.get(M)!==void 0}}function R(e){e.registerFlag(j.majorMode,{type:`string`,description:`Named major mode from .doom/modes.yaml`}),e.registerFlag(j.domains,{type:`string`,description:`Comma-separated content domains`}),e.registerFlag(j.profile,{type:`string`,description:`Persona and env from .doom/profiles.yaml`}),e.registerFlag(j.mute,{type:`boolean`,description:`Disable the notification extension`})}async function z(e,t,n,r){if(e.removedLayer&&r.push(`--${M} was replaced by --${j.majorMode}`),e.majorMode)try{let{applyMajorMode:n}=await import(O);n(t,e.majorMode,u())}catch(t){r.push(`--${j.majorMode} ${e.majorMode}: ${N(t)}`)}if(e.domains&&e.domains.length>0)try{let{applyDomains:t}=await import(O);await t(e.domains,u())}catch(t){r.push(`--domains ${e.domains.join(`,`)}: ${N(t)}`)}if(e.profile)try{let[{applyProfile:t},{resolveProfile:r}]=await Promise.all([import(O),import(`@agimon-ai/doompi-config/profiles`)]);await t(r(n,e.profile),u())}catch(t){r.push(`--profile ${e.profile}: ${N(t)}`)}}async function B(e,t=process.env){let n=s(e,process.pid,t.HOME??w.homedir());return await C.promises.mkdir(n,{mode:448,recursive:!0}),p({temporaryDirectory:n},t),n}async function V(e,t=process.env){await C.promises.rm(s(e,process.pid,t.HOME??w.homedir()),{recursive:!0,force:!0})}async function H(i,o=u(),s=process.env){let c=o.root??i.root,l=a(i.resolved,i.compiled),d=o.mcp?l.optionalPackageEntry(e.mcp):void 0,f={agents:o.agents,autoStop:!1,preset:i.selection.preset,mcpEntry:d,personaEntry:l.ownEntry(t),workflowExtension:m(l.optionalPackageEntry(e.workflow),l.optionalPackageEntry(e.dispatcherWorkflow),s),layers:[...o.layers],majorModesConfig:T(c),resolvers:l};p({childExtensions:n({...f,agents:!1,mute:!0})},s),o.agents&&(s.PI_SUBAGENT_EXTRA_AGENT_DIRS=o.agentDirectories.join(S.delimiter),s.PI_SUBAGENT_EXTRA_SKILL_DIRS=o.skillDirectories.join(S.delimiter));let h=[...r({...f,mute:s[_]===`1`})].reverse(),g=i.bundles?.[y(h)];return g?[g]:h}async function U(e,t,n){let r=[];for(let i of t){let t=performance.now(),a;try{a=await import(x(i).href),A&&process.stderr.write(`[doompi:timing] import ${(performance.now()-t).toFixed(1)}ms ${i}\n`)}catch(e){n.push(`${i}: ${N(e)}`);continue}if(typeof a.default!=`function`){n.push(`${i}: does not export an extension factory`);continue}let o=performance.now();try{await a.default(E(e,i)),A&&process.stderr.write(`[doompi:timing] factory ${(performance.now()-o).toFixed(1)}ms ${i}\n`),r.push(i)}catch(e){n.push(`${i}: ${N(e)}`)}}return r}async function W(e,t={}){let n=t.environment??process.env,r=[],a=n.HOME??w.homedir(),s=c(t.cwd??process.cwd(),a);if(!s)return{problems:[k],stale:!1,loaded:[]};let l;try{l=o(s,a)}catch(e){return{problems:[N(e)],stale:!1,loaded:[]}}if(!l)return{problems:[k],stale:!1,loaded:[]};let u=t.argv??process.argv.slice(2);if(n[g]===`1`||F(u,{...l.resolved,...l.bundles}))return{problems:[],stale:!1,loaded:[]};if(b({preset:l.selection.preset,piArgs:[]},n),!v(n)){n[h]=`1`,await I(l,s,n);let e=L(u);e.mute&&(n[_]=`1`),await z(e,T(s),s,r)}let f;try{f=await H(l,d(n).state,n)}catch(e){return{problems:[...r,N(e)],stale:!1,loaded:[]}}let p=await U(e,f,r);return{problems:r,stale:i(s,l.selection,a)!==l.inputsHash,loaded:p}}export{j as DOOM_FLAGS,M as REMOVED_LAYER_FLAG,z as applyStartupFlags,V as cleanupRunDirectory,W as composeDoomSession,H as composeLoadOrder,F as extensionsProvidedExternally,U as loadComposedExtensions,B as prepareRunDirectory,L as readStartupFlags,R as registerDoomFlags,I as startSyncedSession};
|
|
2
|
+
//# sourceMappingURL=composer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.mjs","names":[],"sources":["../../src/adapters/composer.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { loadMajorModesConfig, type MajorModesConfig } from '@agimon-ai/doompi-config/majorModes';\nimport { withExtensionSource } from '@agimon-ai/doompi-ui/extensionName';\nimport { type ExtensionAPI, parseArgs } from '@earendil-works/pi-coding-agent';\nimport {\n assembleChildExtensions,\n assembleExtensions,\n CONTEXT_PACKAGES,\n PERSONA_ENTRY,\n} from '../services/extensionAssembler.ts';\nimport type { HarnessPreset } from '../types/interfaces/index.ts';\nimport { findSyncedRoot } from './bootstrapLocator.ts';\nimport { alreadyComposed, COMPOSED_ENV, EXTERNAL_EXTENSIONS_ENV, MUTE_ENV } from './compositionState.ts';\nimport {\n createHarnessSession,\n getHarnessState,\n type HarnessState,\n loadHarnessState,\n readHarnessState,\n updateHarnessState,\n} from './config/harnessState.ts';\nimport { extensionSetKey } from './extensionCompiler.ts';\nimport { configurePreset } from './harnessContext.ts';\nimport { selectWorkflowExtensionForProcess } from './resourceCollector.ts';\nimport { computeInputsHash, createMapResolvers, readSyncState, runDirectory, type SyncState } from './syncState.ts';\n\nexport { findSyncedRoot } from './bootstrapLocator.ts';\nexport { alreadyComposed, COMPOSED_ENV, EXTERNAL_EXTENSIONS_ENV, MUTE_ENV } from './compositionState.ts';\n\n/**\n * The runtime half of `doom-pi sync`.\n *\n * Pi's own config carries a single entry, the doom-pi extension, and this is\n * what that entry runs: hydrate the harness environment, apply the startup\n * flags, then load the extension set the matrix selects. It runs again on every\n * `/reload`, which is what lets `/mode` swap the set without a restart,\n * since Pi rebuilds its extension runner from whatever a reload produced.\n */\n\nconst ENABLED_FLAG = '1';\nconst SUBAGENT_AGENT_DIRS_ENV = 'PI_SUBAGENT_EXTRA_AGENT_DIRS';\nconst SUBAGENT_SKILL_DIRS_ENV = 'PI_SUBAGENT_EXTRA_SKILL_DIRS';\nconst DOMAIN_SEPARATOR = ',';\nconst PRIVATE_DIRECTORY_MODE = 0o700;\nconst MATRIX_SWITCHER_MODULE = './matrixSwitcher.ts';\nconst NOT_SYNCED = 'doompi is configured for Pi but this repository was never synced. Run doompi sync.';\nconst TIMING_ENABLED = process.env.DOOMPI_TIMING === ENABLED_FLAG || process.env.PI_TIMING === ENABLED_FLAG;\n\nexport const DOOM_FLAGS = {\n majorMode: 'major-mode',\n domains: 'domains',\n profile: 'profile',\n mute: 'mute',\n} as const;\n\n/** Removed flag, reported rather than ignored when a synced session passes it. */\nexport const REMOVED_LAYER_FLAG = 'layer';\n\nexport interface StartupFlags {\n majorMode?: string;\n domains?: string[];\n profile?: string;\n mute: boolean;\n /** True when the caller passed the removed `--layer` flag. */\n removedLayer: boolean;\n}\n\nexport interface ComposeOutcome {\n /** Everything that went wrong, reported once the session can show messages. */\n problems: string[];\n /** Config changed since the last sync, which is a prompt to re-sync. */\n stale: boolean;\n loaded: string[];\n}\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction realPath(target: string): string {\n try {\n return fs.realpathSync(target);\n } catch {\n return path.resolve(target);\n }\n}\n\n/**\n * True when this process was handed the doom extension set on the command line.\n *\n * The launcher and detached Doom Team children both pass the composed list as\n * `--extension` arguments, and Pi merges those with whatever project settings\n * declare. Composing again here would load every extension twice, which Pi\n * reports as each tool and flag conflicting with itself.\n *\n * Matching against the synced paths rather than the mere presence of\n * `--extension` keeps an unrelated one-off, `pi -e ./debug.ts`, from silently\n * costing the user their whole setup.\n */\nexport function extensionsProvidedExternally(argv: string[], resolved: Record<string, string>): boolean {\n const { extensions } = parseArgs(argv);\n if (!extensions || extensions.length === 0) return false;\n const composed = new Set(Object.values(resolved).map(realPath));\n return extensions.some((entry) => composed.has(realPath(entry)));\n}\n\n/**\n * Opens this process's session from what sync pinned.\n *\n * The synced record is decoded underneath the live environment, so an inherited\n * value still wins: a launcher run, a nested session, or a CI override is more\n * specific than anything sync wrote. The result becomes the session's state\n * file, which is the authority from here on; the environment it publishes is\n * for the bash hooks and the packages that can only read one.\n */\nexport async function startSyncedSession(\n state: SyncState,\n repoRoot: string,\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<HarnessState> {\n const directory = await prepareRunDirectory(repoRoot, environment);\n const harness: HarnessState = {\n ...readHarnessState({ ...state.env, ...environment }),\n // Recorded separately because no variable carries them.\n ...state.fileState,\n temporaryDirectory: directory,\n };\n createHarnessSession(harness, { directory, environment });\n // The profile's own defaults, which the launcher applies at spawn. They are\n // recorded as a map rather than as variables so /profile can tell which ones\n // it owns when it swaps them out later.\n for (const [key, value] of Object.entries(harness.profileEnvironment)) {\n if (environment[key] === undefined) environment[key] = value;\n }\n return harness;\n}\n\n/**\n * Reads the doom flags off the command line.\n *\n * Pi collects unrecognized flags for extensions but hands their values back\n * only after every extension has loaded, which is too late to decide what to\n * load. Parsing argv with Pi's own parser keeps the value rules identical.\n */\nexport function readStartupFlags(argv: string[]): StartupFlags {\n const { unknownFlags } = parseArgs(argv);\n const text = (name: string): string | undefined => {\n const value = unknownFlags.get(name);\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n };\n const domains = text(DOOM_FLAGS.domains);\n return {\n majorMode: text(DOOM_FLAGS.majorMode),\n domains: domains\n ?.split(DOMAIN_SEPARATOR)\n .map((name) => name.trim())\n .filter(Boolean),\n profile: text(DOOM_FLAGS.profile),\n mute: unknownFlags.get(DOOM_FLAGS.mute) !== undefined,\n removedLayer: unknownFlags.get(REMOVED_LAYER_FLAG) !== undefined,\n };\n}\n\n/** Registers the flags so Pi accepts them and lists them in `pi --help`. */\nexport function registerDoomFlags(pi: Pick<ExtensionAPI, 'registerFlag'>): void {\n pi.registerFlag(DOOM_FLAGS.majorMode, {\n type: 'string',\n description: 'Named major mode from .doom/modes.yaml',\n });\n pi.registerFlag(DOOM_FLAGS.domains, { type: 'string', description: 'Comma-separated content domains' });\n pi.registerFlag(DOOM_FLAGS.profile, { type: 'string', description: 'Persona and env from .doom/profiles.yaml' });\n pi.registerFlag(DOOM_FLAGS.mute, { type: 'boolean', description: 'Disable the notification extension' });\n}\n\n/**\n * Applies the startup flags through the same switchers the slash commands use.\n *\n * A bad value is collected rather than thrown: a factory that throws takes the\n * whole doom setup down with it, which is far worse than one unapplied flag.\n */\nexport async function applyStartupFlags(\n flags: StartupFlags,\n majorModesConfig: MajorModesConfig,\n repoRoot: string,\n problems: string[],\n): Promise<void> {\n // Reported rather than ignored: Pi hands unrecognized flags to extensions, so\n // a stale `--layer dev` would otherwise start a session on the wrong mode\n // without saying anything.\n if (flags.removedLayer) problems.push(`--${REMOVED_LAYER_FLAG} was replaced by --${DOOM_FLAGS.majorMode}`);\n if (flags.majorMode) {\n try {\n const { applyMajorMode } = await import(MATRIX_SWITCHER_MODULE);\n applyMajorMode(majorModesConfig, flags.majorMode, getHarnessState());\n } catch (error) {\n problems.push(`--${DOOM_FLAGS.majorMode} ${flags.majorMode}: ${message(error)}`);\n }\n }\n if (flags.domains && flags.domains.length > 0) {\n try {\n const { applyDomains } = await import(MATRIX_SWITCHER_MODULE);\n await applyDomains(flags.domains, getHarnessState());\n } catch (error) {\n problems.push(`--domains ${flags.domains.join(DOMAIN_SEPARATOR)}: ${message(error)}`);\n }\n }\n if (flags.profile) {\n try {\n const [{ applyProfile }, { resolveProfile }] = await Promise.all([\n import(MATRIX_SWITCHER_MODULE),\n import('@agimon-ai/doompi-config/profiles'),\n ]);\n await applyProfile(resolveProfile(repoRoot, flags.profile), getHarnessState());\n } catch (error) {\n problems.push(`--profile ${flags.profile}: ${message(error)}`);\n }\n }\n}\n\n/**\n * Points harness state at a per-process directory before anything writes there.\n *\n * The synced directory is a baseline that every session reads; live switches\n * materialize into this one instead, so a second session in the same repository\n * cannot overwrite what the first is using.\n */\nexport async function prepareRunDirectory(\n repoRoot: string,\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<string> {\n const directory = runDirectory(repoRoot, process.pid, environment.HOME ?? os.homedir());\n await fs.promises.mkdir(directory, { mode: PRIVATE_DIRECTORY_MODE, recursive: true });\n // Through the store rather than the environment: the state file is the\n // authority, and a switcher reading a stale directory would write a live\n // session's resources into the wrong place.\n updateHarnessState({ temporaryDirectory: directory }, environment);\n return directory;\n}\n\n/** Removes this session's scratch directory. */\nexport async function cleanupRunDirectory(\n repoRoot: string,\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<void> {\n await fs.promises.rm(runDirectory(repoRoot, process.pid, environment.HOME ?? os.homedir()), {\n recursive: true,\n force: true,\n });\n}\n\n/**\n * Builds the ordered list of extensions to load for the current state.\n *\n * Returns them in Pi load order. `assembleExtensions` produces the order the\n * launcher passes to Pi, where the last element becomes the first `--extension`\n * argument, so reversing here keeps that rule stated in exactly one place.\n */\nexport async function composeLoadOrder(\n state: SyncState,\n harness: HarnessState = getHarnessState(),\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<string[]> {\n const repoRoot = harness.root ?? state.root;\n const resolvers = createMapResolvers(state.resolved, state.compiled);\n // Resolved from the sync map rather than generated: doom-mcp reads the\n // repository and plugin layers itself, and the environment the launcher wrote\n // already tells it which plugins and allowlist this session selected.\n const mcpEntry = harness.mcp ? resolvers.optionalPackageEntry(CONTEXT_PACKAGES.mcp) : undefined;\n const context = {\n agents: harness.agents,\n // Exiting when the agent settles is a launcher decision with no synced\n // equivalent: a session started by hand is meant to stay open.\n autoStop: false,\n preset: state.selection.preset,\n mcpEntry,\n personaEntry: resolvers.ownEntry(PERSONA_ENTRY),\n workflowExtension: selectWorkflowExtensionForProcess(\n resolvers.optionalPackageEntry(CONTEXT_PACKAGES.workflow),\n resolvers.optionalPackageEntry(CONTEXT_PACKAGES.dispatcherWorkflow),\n environment,\n ),\n layers: [...harness.layers],\n majorModesConfig: loadMajorModesConfig(repoRoot),\n resolvers,\n };\n\n // A state field, so it goes through the store: Doom Team reads it from the\n // environment the store publishes when it builds a child's spawn snapshot.\n updateHarnessState(\n { childExtensions: assembleChildExtensions({ ...context, agents: false, mute: true }) },\n environment,\n );\n if (harness.agents) {\n environment[SUBAGENT_AGENT_DIRS_ENV] = harness.agentDirectories.join(path.delimiter);\n environment[SUBAGENT_SKILL_DIRS_ENV] = harness.skillDirectories.join(path.delimiter);\n }\n const entries = [...assembleExtensions({ ...context, mute: environment[MUTE_ENV] === ENABLED_FLAG })].reverse();\n const bundle = state.bundles?.[extensionSetKey(entries)];\n return bundle ? [bundle] : entries;\n}\n\n/**\n * Imports each extension and hands it a source-aware view of the Pi API.\n *\n * Every Pi extension entry is a factory of the same shape, so one extension can\n * activate the rest. The view delegates to the same host API while retaining the\n * entry path for tools registered through a composed loader. Failures are per\n * entry: one unloadable module must not cost the session everything after it.\n */\nexport async function loadComposedExtensions(\n pi: ExtensionAPI,\n entries: string[],\n problems: string[],\n): Promise<string[]> {\n const loaded: string[] = [];\n for (const entry of entries) {\n const importStartedAt = performance.now();\n let module: { default?: unknown };\n try {\n module = (await import(pathToFileURL(entry).href)) as { default?: unknown };\n if (TIMING_ENABLED) {\n process.stderr.write(`[doompi:timing] import ${(performance.now() - importStartedAt).toFixed(1)}ms ${entry}\\n`);\n }\n } catch (error) {\n problems.push(`${entry}: ${message(error)}`);\n continue;\n }\n if (typeof module.default !== 'function') {\n problems.push(`${entry}: does not export an extension factory`);\n continue;\n }\n const factoryStartedAt = performance.now();\n try {\n await (module.default as (api: ExtensionAPI) => void | Promise<void>)(withExtensionSource(pi, entry));\n if (TIMING_ENABLED) {\n process.stderr.write(\n `[doompi:timing] factory ${(performance.now() - factoryStartedAt).toFixed(1)}ms ${entry}\\n`,\n );\n }\n loaded.push(entry);\n } catch (error) {\n problems.push(`${entry}: ${message(error)}`);\n }\n }\n return loaded;\n}\n\nexport interface ComposeOptions {\n cwd?: string;\n argv?: string[];\n environment?: NodeJS.ProcessEnv;\n}\n\n/**\n * Runs the whole synced startup for one Pi session.\n *\n * Never throws: whatever fails is reported through the outcome so the session\n * still starts and can say what is wrong.\n */\nexport async function composeDoomSession(pi: ExtensionAPI, options: ComposeOptions = {}): Promise<ComposeOutcome> {\n const environment = options.environment ?? process.env;\n const problems: string[] = [];\n const homeDirectory = environment.HOME ?? os.homedir();\n const repoRoot = findSyncedRoot(options.cwd ?? process.cwd(), homeDirectory);\n if (!repoRoot) return { problems: [NOT_SYNCED], stale: false, loaded: [] };\n\n let state: SyncState | undefined;\n try {\n state = readSyncState(repoRoot, homeDirectory);\n } catch (error) {\n return { problems: [message(error)], stale: false, loaded: [] };\n }\n if (!state) return { problems: [NOT_SYNCED], stale: false, loaded: [] };\n\n const argv = options.argv ?? process.argv.slice(2);\n // The launcher and Doom Team children compose the set themselves and pass it\n // in, so this entry has nothing left to do but stay out of the way.\n if (\n environment[EXTERNAL_EXTENSIONS_ENV] === ENABLED_FLAG ||\n extensionsProvidedExternally(argv, { ...state.resolved, ...state.bundles })\n ) {\n return { problems: [], stale: false, loaded: [] };\n }\n\n configurePreset({ preset: state.selection.preset as HarnessPreset, piArgs: [] }, environment);\n\n // Only the first load opens a session. A reload finds the pointer this set\n // and reads the file back, which is what carries a live /domains or /profile\n // switch across the reload instead of resetting it to what sync pinned.\n if (!alreadyComposed(environment)) {\n environment[COMPOSED_ENV] = ENABLED_FLAG;\n await startSyncedSession(state, repoRoot, environment);\n const flags = readStartupFlags(argv);\n if (flags.mute) environment[MUTE_ENV] = ENABLED_FLAG;\n await applyStartupFlags(flags, loadMajorModesConfig(repoRoot), repoRoot, problems);\n }\n\n let entries: string[];\n try {\n // Read back through the store rather than from this process: the startup\n // flags may have switched the layer or the domains a moment ago, and the\n // environment being managed is not always this process's own.\n entries = await composeLoadOrder(state, loadHarnessState(environment).state, environment);\n } catch (error) {\n return { problems: [...problems, message(error)], stale: false, loaded: [] };\n }\n\n const loaded = await loadComposedExtensions(pi, entries, problems);\n return {\n problems,\n stale: computeInputsHash(repoRoot, state.selection, homeDirectory) !== state.inputsHash,\n loaded,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`@agimon-ai/doompi-extension-contracts/child-process`);const t=`DOOMPI_COMPOSED`,n=e.DOOMPI_EXTENSIONS_PROVIDED_ENV,r=Symbol.for(`@agimon-ai/doompi:composition-claim`);function i(){if(Reflect.get(globalThis,r)!==void 0)return;let e=Symbol(`doompi-composition`);return Reflect.set(globalThis,r,e),()=>{Reflect.get(globalThis,r)===e&&Reflect.deleteProperty(globalThis,r)}}function a(e=process.env){return e[t]===`1`}exports.COMPOSED_ENV=t,exports.EXTERNAL_EXTENSIONS_ENV=n,exports.MUTE_ENV=`DOOMPI_MUTE`,exports.acquireCompositionClaim=i,exports.alreadyComposed=a;
|
|
2
|
+
//# sourceMappingURL=compositionState.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compositionState.cjs","names":["DOOMPI_EXTENSIONS_PROVIDED_ENV"],"sources":["../../src/adapters/compositionState.ts"],"sourcesContent":["import { DOOMPI_EXTENSIONS_PROVIDED_ENV } from '@agimon-ai/doompi-extension-contracts/child-process';\n\n/** Marks a process whose extensions this module composed. */\nexport const COMPOSED_ENV = 'DOOMPI_COMPOSED';\n/** Set by the launcher when it passes one precomposed aggregate to Pi. */\nexport const EXTERNAL_EXTENSIONS_ENV = DOOMPI_EXTENSIONS_PROVIDED_ENV;\n/** Survives reload, where argv is re-read but the startup flags must not be. */\nexport const MUTE_ENV = 'DOOMPI_MUTE';\n\nconst ENABLED_FLAG = '1';\nconst COMPOSITION_CLAIM_KEY = Symbol.for('@agimon-ai/doompi:composition-claim');\n\nexport type ReleaseCompositionClaim = () => void;\n\n/**\n * Owns composition until Pi starts the freshly loaded extension runner.\n *\n * Pi resolves project resources before user resources, so the first DoomPi\n * factory is the repository-local one when both scopes register the package.\n * A process-global symbol survives distinct installed module URLs and lets that\n * first factory own the load cycle. Releasing on `session_start` leaves a later\n * `/reload` free to compose a new runner.\n */\nexport function acquireCompositionClaim(): ReleaseCompositionClaim | undefined {\n if (Reflect.get(globalThis, COMPOSITION_CLAIM_KEY) !== undefined) return undefined;\n\n const claim = Symbol('doompi-composition');\n Reflect.set(globalThis, COMPOSITION_CLAIM_KEY, claim);\n return () => {\n if (Reflect.get(globalThis, COMPOSITION_CLAIM_KEY) === claim) {\n Reflect.deleteProperty(globalThis, COMPOSITION_CLAIM_KEY);\n }\n };\n}\n\n/** True when this process already applied the command line, so a reload does not. */\nexport function alreadyComposed(environment: NodeJS.ProcessEnv = process.env): boolean {\n return environment[COMPOSED_ENV] === ENABLED_FLAG;\n}\n"],"mappings":"kHAGA,MAAa,EAAe,kBAEf,EAA0BA,EAAAA,+BAKjC,EAAwB,OAAO,IAAI,sCAAsC,CAa/E,SAAgB,GAA+D,CAC7E,GAAI,QAAQ,IAAI,WAAY,EAAsB,GAAK,IAAA,GAAW,OAElE,IAAM,EAAQ,OAAO,qBAAqB,CAE1C,OADA,QAAQ,IAAI,WAAY,EAAuB,EAAM,KACxC,CACP,QAAQ,IAAI,WAAY,EAAsB,GAAK,GACrD,QAAQ,eAAe,WAAY,EAAsB,EAM/D,SAAgB,EAAgB,EAAiC,QAAQ,IAAc,CACrF,OAAO,EAAY,KAAkB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/adapters/compositionState.d.ts
|
|
2
|
+
/** Marks a process whose extensions this module composed. */
|
|
3
|
+
declare const COMPOSED_ENV = "DOOMPI_COMPOSED";
|
|
4
|
+
/** Set by the launcher when it passes one precomposed aggregate to Pi. */
|
|
5
|
+
declare const EXTERNAL_EXTENSIONS_ENV = "DOOMPI_EXTENSIONS_PROVIDED";
|
|
6
|
+
/** Survives reload, where argv is re-read but the startup flags must not be. */
|
|
7
|
+
declare const MUTE_ENV = "DOOMPI_MUTE";
|
|
8
|
+
/** True when this process already applied the command line, so a reload does not. */
|
|
9
|
+
declare function alreadyComposed(environment?: NodeJS.ProcessEnv): boolean;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { COMPOSED_ENV, EXTERNAL_EXTENSIONS_ENV, MUTE_ENV, alreadyComposed };
|
|
12
|
+
//# sourceMappingURL=compositionState.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compositionState.d.cts","names":[],"sources":["../../src/adapters/compositionState.ts"],"mappings":";;cAGa,YAAA;;cAEA,uBAAA;;cAEA,QAAA;;iBA6BG,eAAA,CAAgB,WAAA,GAAa,MAAA,CAAO,UAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/adapters/compositionState.d.ts
|
|
2
|
+
/** Marks a process whose extensions this module composed. */
|
|
3
|
+
declare const COMPOSED_ENV = "DOOMPI_COMPOSED";
|
|
4
|
+
/** Set by the launcher when it passes one precomposed aggregate to Pi. */
|
|
5
|
+
declare const EXTERNAL_EXTENSIONS_ENV = "DOOMPI_EXTENSIONS_PROVIDED";
|
|
6
|
+
/** Survives reload, where argv is re-read but the startup flags must not be. */
|
|
7
|
+
declare const MUTE_ENV = "DOOMPI_MUTE";
|
|
8
|
+
/** True when this process already applied the command line, so a reload does not. */
|
|
9
|
+
declare function alreadyComposed(environment?: NodeJS.ProcessEnv): boolean;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { COMPOSED_ENV, EXTERNAL_EXTENSIONS_ENV, MUTE_ENV, alreadyComposed };
|
|
12
|
+
//# sourceMappingURL=compositionState.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compositionState.d.mts","names":[],"sources":["../../src/adapters/compositionState.ts"],"mappings":";;cAGa,YAAA;;cAEA,uBAAA;;cAEA,QAAA;;iBA6BG,eAAA,CAAgB,WAAA,GAAa,MAAA,CAAO,UAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{DOOMPI_EXTENSIONS_PROVIDED_ENV as e}from"@agimon-ai/doompi-extension-contracts/child-process";const t=`DOOMPI_COMPOSED`,n=e,r=`DOOMPI_MUTE`,i=Symbol.for(`@agimon-ai/doompi:composition-claim`);function a(){if(Reflect.get(globalThis,i)!==void 0)return;let e=Symbol(`doompi-composition`);return Reflect.set(globalThis,i,e),()=>{Reflect.get(globalThis,i)===e&&Reflect.deleteProperty(globalThis,i)}}function o(e=process.env){return e[t]===`1`}export{t as COMPOSED_ENV,n as EXTERNAL_EXTENSIONS_ENV,r as MUTE_ENV,a as acquireCompositionClaim,o as alreadyComposed};
|
|
2
|
+
//# sourceMappingURL=compositionState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compositionState.mjs","names":[],"sources":["../../src/adapters/compositionState.ts"],"sourcesContent":["import { DOOMPI_EXTENSIONS_PROVIDED_ENV } from '@agimon-ai/doompi-extension-contracts/child-process';\n\n/** Marks a process whose extensions this module composed. */\nexport const COMPOSED_ENV = 'DOOMPI_COMPOSED';\n/** Set by the launcher when it passes one precomposed aggregate to Pi. */\nexport const EXTERNAL_EXTENSIONS_ENV = DOOMPI_EXTENSIONS_PROVIDED_ENV;\n/** Survives reload, where argv is re-read but the startup flags must not be. */\nexport const MUTE_ENV = 'DOOMPI_MUTE';\n\nconst ENABLED_FLAG = '1';\nconst COMPOSITION_CLAIM_KEY = Symbol.for('@agimon-ai/doompi:composition-claim');\n\nexport type ReleaseCompositionClaim = () => void;\n\n/**\n * Owns composition until Pi starts the freshly loaded extension runner.\n *\n * Pi resolves project resources before user resources, so the first DoomPi\n * factory is the repository-local one when both scopes register the package.\n * A process-global symbol survives distinct installed module URLs and lets that\n * first factory own the load cycle. Releasing on `session_start` leaves a later\n * `/reload` free to compose a new runner.\n */\nexport function acquireCompositionClaim(): ReleaseCompositionClaim | undefined {\n if (Reflect.get(globalThis, COMPOSITION_CLAIM_KEY) !== undefined) return undefined;\n\n const claim = Symbol('doompi-composition');\n Reflect.set(globalThis, COMPOSITION_CLAIM_KEY, claim);\n return () => {\n if (Reflect.get(globalThis, COMPOSITION_CLAIM_KEY) === claim) {\n Reflect.deleteProperty(globalThis, COMPOSITION_CLAIM_KEY);\n }\n };\n}\n\n/** True when this process already applied the command line, so a reload does not. */\nexport function alreadyComposed(environment: NodeJS.ProcessEnv = process.env): boolean {\n return environment[COMPOSED_ENV] === ENABLED_FLAG;\n}\n"],"mappings":"qGAGA,MAAa,EAAe,kBAEf,EAA0B,EAE1B,EAAW,cAGlB,EAAwB,OAAO,IAAI,sCAAsC,CAa/E,SAAgB,GAA+D,CAC7E,GAAI,QAAQ,IAAI,WAAY,EAAsB,GAAK,IAAA,GAAW,OAElE,IAAM,EAAQ,OAAO,qBAAqB,CAE1C,OADA,QAAQ,IAAI,WAAY,EAAuB,EAAM,KACxC,CACP,QAAQ,IAAI,WAAY,EAAsB,GAAK,GACrD,QAAQ,eAAe,WAAY,EAAsB,EAM/D,SAAgB,EAAgB,EAAiC,QAAQ,IAAc,CACrF,OAAO,EAAY,KAAkB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../telemetry/logSinkTelemetry.cjs`);let t=require(`@agimon-ai/doompi-config/harnessState`),n=require(`@agimon-ai/doompi-config/harnessStore`),r=require(`@agimon-ai/doompi-config/piContext`);function i(t){if(t)return(n,r)=>{t.warn(e.HARNESS_EVENT.harnessStateParseFailed,r,{"harness.state.key":n})}}function a(e=process.env,n){return(0,t.readHarnessState)(e,i(n))}function o(e){return(0,n.getHarnessState)(i(e))}function s(e){return(0,n.resetHarnessStore)(),o(e)}function c(e,t=process.env){return(0,n.updateHarnessState)(e,t)}function l(e,t=o()){(0,r.appendDoomConfigSelection)(e,{version:1,majorMode:t.majorMode,domains:t.domains,profile:t.profile})}exports.HARNESS_STATE_KEYS=t.HARNESS_STATE_KEYS,exports.HARNESS_STATE_POINTER=n.HARNESS_STATE_POINTER,exports.createHarnessSession=n.createHarnessSession,exports.getHarnessState=o,exports.harnessRoot=n.harnessRoot,exports.loadHarnessState=n.loadHarnessState,exports.persistHarnessSelection=l,exports.projectHarnessEnvironment=t.projectHarnessEnvironment,exports.readHarnessState=a,exports.refreshHarnessState=s,exports.requireHarnessPaths=n.requireHarnessPaths,exports.requireHarnessRoot=n.requireHarnessRoot,exports.resetHarnessStore=n.resetHarnessStore,exports.updateHarnessState=c;
|
|
2
|
+
//# sourceMappingURL=harnessState.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessState.cjs","names":["HARNESS_EVENT"],"sources":["../../../src/adapters/config/harnessState.ts"],"sourcesContent":["import {\n HARNESS_STATE_KEYS,\n projectHarnessEnvironment,\n readHarnessState as readSharedHarnessState,\n} from '@agimon-ai/doompi-config/harnessState';\nimport {\n createHarnessSession,\n getHarnessState as getSharedHarnessState,\n HARNESS_STATE_POINTER,\n harnessRoot,\n loadHarnessState,\n requireHarnessPaths,\n requireHarnessRoot,\n resetHarnessStore,\n updateHarnessState as updateSharedHarnessState,\n} from '@agimon-ai/doompi-config/harnessStore';\nimport { appendDoomConfigSelection } from '@agimon-ai/doompi-config/piContext';\nimport type { HarnessState } from '@agimon-ai/doompi-config/types';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport { HARNESS_EVENT, type HarnessFailureReporter } from '../../adapters/telemetry/logSinkTelemetry.ts';\n\nexport type { DoomHarnessContext, HarnessState } from '@agimon-ai/doompi-config/types';\nexport {\n createHarnessSession,\n HARNESS_STATE_KEYS,\n HARNESS_STATE_POINTER,\n harnessRoot,\n loadHarnessState,\n projectHarnessEnvironment,\n requireHarnessPaths,\n requireHarnessRoot,\n resetHarnessStore,\n};\n\nfunction telemetryReporter(report?: HarnessFailureReporter): ((key: string, error: unknown) => void) | undefined {\n if (!report) return undefined;\n return (key, error) => {\n report.warn(HARNESS_EVENT.harnessStateParseFailed, error, { 'harness.state.key': key });\n };\n}\n\nexport function readHarnessState(\n environment: NodeJS.ProcessEnv = process.env,\n report?: HarnessFailureReporter,\n): HarnessState {\n return readSharedHarnessState(environment, telemetryReporter(report));\n}\n\nexport function getHarnessState(report?: HarnessFailureReporter): HarnessState {\n return getSharedHarnessState(telemetryReporter(report));\n}\n\n/**\n * Re-reads the state, dropping what this process had cached.\n *\n * The store caches for the life of a process because nothing else writes the\n * file it owns. A test suite and a Pi reload are the two places that outlive\n * that assumption, so both come through here.\n */\nexport function refreshHarnessState(report?: HarnessFailureReporter): HarnessState {\n resetHarnessStore();\n return getHarnessState(report);\n}\n\nexport function updateHarnessState(\n patch: Partial<HarnessState>,\n environment: NodeJS.ProcessEnv = process.env,\n): HarnessState {\n return updateSharedHarnessState(patch, environment);\n}\n\nexport function persistHarnessSelection(\n pi: Pick<ExtensionAPI, 'appendEntry'>,\n state: {\n readonly majorMode: string;\n readonly domains: readonly string[];\n readonly profile?: string;\n } = getHarnessState(),\n): void {\n appendDoomConfigSelection(pi, {\n version: 1,\n majorMode: state.majorMode,\n domains: state.domains,\n profile: state.profile,\n });\n}\n"],"mappings":"+PAkCA,SAAS,EAAkB,EAAsF,CAC1G,KACL,OAAQ,EAAK,IAAU,CACrB,EAAO,KAAKA,EAAAA,cAAc,wBAAyB,EAAO,CAAE,oBAAqB,EAAK,CAAC,EAI3F,SAAgB,EACd,EAAiC,QAAQ,IACzC,EACc,CACd,OAAA,EAAA,EAAA,kBAA8B,EAAa,EAAkB,EAAO,CAAC,CAGvE,SAAgB,EAAgB,EAA+C,CAC7E,OAAA,EAAA,EAAA,iBAA6B,EAAkB,EAAO,CAAC,CAUzD,SAAgB,EAAoB,EAA+C,CAEjF,OADA,EAAA,EAAA,oBAAmB,CACZ,EAAgB,EAAO,CAGhC,SAAgB,EACd,EACA,EAAiC,QAAQ,IAC3B,CACd,OAAA,EAAA,EAAA,oBAAgC,EAAO,EAAY,CAGrD,SAAgB,EACd,EACA,EAII,GAAiB,CACf,EACN,EAAA,EAAA,2BAA0B,EAAI,CAC5B,QAAS,EACT,UAAW,EAAM,UACjB,QAAS,EAAM,QACf,QAAS,EAAM,QAChB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { HarnessFailureReporter } from "../telemetry/logSinkTelemetry.cjs";
|
|
2
|
+
import { HARNESS_STATE_KEYS, projectHarnessEnvironment } from "@agimon-ai/doompi-config/harnessState";
|
|
3
|
+
import { HARNESS_STATE_POINTER, createHarnessSession, harnessRoot, loadHarnessState, requireHarnessPaths, requireHarnessRoot, resetHarnessStore } from "@agimon-ai/doompi-config/harnessStore";
|
|
4
|
+
import { DoomHarnessContext as DoomHarnessContext$1, HarnessState, HarnessState as HarnessState$1 } from "@agimon-ai/doompi-config/types";
|
|
5
|
+
import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
|
|
7
|
+
//#region src/adapters/config/harnessState.d.ts
|
|
8
|
+
declare function readHarnessState(environment?: NodeJS.ProcessEnv, report?: HarnessFailureReporter): HarnessState;
|
|
9
|
+
declare function getHarnessState(report?: HarnessFailureReporter): HarnessState;
|
|
10
|
+
/**
|
|
11
|
+
* Re-reads the state, dropping what this process had cached.
|
|
12
|
+
*
|
|
13
|
+
* The store caches for the life of a process because nothing else writes the
|
|
14
|
+
* file it owns. A test suite and a Pi reload are the two places that outlive
|
|
15
|
+
* that assumption, so both come through here.
|
|
16
|
+
*/
|
|
17
|
+
declare function refreshHarnessState(report?: HarnessFailureReporter): HarnessState;
|
|
18
|
+
declare function updateHarnessState(patch: Partial<HarnessState>, environment?: NodeJS.ProcessEnv): HarnessState;
|
|
19
|
+
declare function persistHarnessSelection(pi: Pick<ExtensionAPI, 'appendEntry'>, state?: {
|
|
20
|
+
readonly majorMode: string;
|
|
21
|
+
readonly domains: readonly string[];
|
|
22
|
+
readonly profile?: string;
|
|
23
|
+
}): void;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { type DoomHarnessContext$1 as DoomHarnessContext, HARNESS_STATE_KEYS, HARNESS_STATE_POINTER, type HarnessState$1 as HarnessState, createHarnessSession, getHarnessState, harnessRoot, loadHarnessState, persistHarnessSelection, projectHarnessEnvironment, readHarnessState, refreshHarnessState, requireHarnessPaths, requireHarnessRoot, resetHarnessStore, updateHarnessState };
|
|
26
|
+
//# sourceMappingURL=harnessState.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessState.d.cts","names":[],"sources":["../../../src/adapters/config/harnessState.ts"],"mappings":";;;;;;;iBAyCgB,gBAAA,CACd,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,MAAA,GAAS,sBAAA,GACR,YAAA;AAAA,iBAIa,eAAA,CAAgB,MAAA,GAAS,sBAAA,GAAyB,YAAA;;;;;;;;iBAWlD,mBAAA,CAAoB,MAAA,GAAS,sBAAA,GAAyB,YAAA;AAAA,iBAKtD,kBAAA,CACd,KAAA,EAAO,OAAA,CAAQ,YAAA,GACf,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,YAAA;AAAA,iBAIa,uBAAA,CACd,EAAA,EAAI,IAAA,CAAK,YAAA,kBACT,KAAA;EAAA,SACW,SAAA;EAAA,SACA,OAAA;EAAA,SACA,OAAA;AAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { HarnessFailureReporter } from "../telemetry/logSinkTelemetry.mjs";
|
|
2
|
+
import { HARNESS_STATE_KEYS, projectHarnessEnvironment } from "@agimon-ai/doompi-config/harnessState";
|
|
3
|
+
import { HARNESS_STATE_POINTER, createHarnessSession, harnessRoot, loadHarnessState, requireHarnessPaths, requireHarnessRoot, resetHarnessStore } from "@agimon-ai/doompi-config/harnessStore";
|
|
4
|
+
import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
5
|
+
import { DoomHarnessContext as DoomHarnessContext$1, HarnessState, HarnessState as HarnessState$1 } from "@agimon-ai/doompi-config/types";
|
|
6
|
+
|
|
7
|
+
//#region src/adapters/config/harnessState.d.ts
|
|
8
|
+
declare function readHarnessState$1(environment?: NodeJS.ProcessEnv, report?: HarnessFailureReporter): HarnessState;
|
|
9
|
+
declare function getHarnessState$1(report?: HarnessFailureReporter): HarnessState;
|
|
10
|
+
/**
|
|
11
|
+
* Re-reads the state, dropping what this process had cached.
|
|
12
|
+
*
|
|
13
|
+
* The store caches for the life of a process because nothing else writes the
|
|
14
|
+
* file it owns. A test suite and a Pi reload are the two places that outlive
|
|
15
|
+
* that assumption, so both come through here.
|
|
16
|
+
*/
|
|
17
|
+
declare function refreshHarnessState(report?: HarnessFailureReporter): HarnessState;
|
|
18
|
+
declare function updateHarnessState$1(patch: Partial<HarnessState>, environment?: NodeJS.ProcessEnv): HarnessState;
|
|
19
|
+
declare function persistHarnessSelection(pi: Pick<ExtensionAPI, 'appendEntry'>, state?: {
|
|
20
|
+
readonly majorMode: string;
|
|
21
|
+
readonly domains: readonly string[];
|
|
22
|
+
readonly profile?: string;
|
|
23
|
+
}): void;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { type DoomHarnessContext$1 as DoomHarnessContext, HARNESS_STATE_KEYS, HARNESS_STATE_POINTER, type HarnessState$1 as HarnessState, createHarnessSession, getHarnessState$1 as getHarnessState, harnessRoot, loadHarnessState, persistHarnessSelection, projectHarnessEnvironment, readHarnessState$1 as readHarnessState, refreshHarnessState, requireHarnessPaths, requireHarnessRoot, resetHarnessStore, updateHarnessState$1 as updateHarnessState };
|
|
26
|
+
//# sourceMappingURL=harnessState.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessState.d.mts","names":[],"sources":["../../../src/adapters/config/harnessState.ts"],"mappings":";;;;;;;iBAyCgB,kBAAA,CACd,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,MAAA,GAAS,sBAAA,GACR,YAAA;AAAA,iBAIa,iBAAA,CAAgB,MAAA,GAAS,sBAAA,GAAyB,YAAA;;;;;;;;iBAWlD,mBAAA,CAAoB,MAAA,GAAS,sBAAA,GAAyB,YAAA;AAAA,iBAKtD,oBAAA,CACd,KAAA,EAAO,OAAA,CAAQ,YAAA,GACf,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,YAAA;AAAA,iBAIa,uBAAA,CACd,EAAA,EAAI,IAAA,CAAK,YAAA,kBACT,KAAA;EAAA,SACW,SAAA;EAAA,SACA,OAAA;EAAA,SACA,OAAA;AAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{HARNESS_EVENT as e}from"../telemetry/logSinkTelemetry.mjs";import{HARNESS_STATE_KEYS as t,projectHarnessEnvironment as n,readHarnessState as r}from"@agimon-ai/doompi-config/harnessState";import{HARNESS_STATE_POINTER as i,createHarnessSession as a,getHarnessState as o,harnessRoot as s,loadHarnessState as c,requireHarnessPaths as l,requireHarnessRoot as u,resetHarnessStore as d,updateHarnessState as f}from"@agimon-ai/doompi-config/harnessStore";import{appendDoomConfigSelection as p}from"@agimon-ai/doompi-config/piContext";function m(t){if(t)return(n,r)=>{t.warn(e.harnessStateParseFailed,r,{"harness.state.key":n})}}function h(e=process.env,t){return r(e,m(t))}function g(e){return o(m(e))}function _(e){return d(),g(e)}function v(e,t=process.env){return f(e,t)}function y(e,t=g()){p(e,{version:1,majorMode:t.majorMode,domains:t.domains,profile:t.profile})}export{t as HARNESS_STATE_KEYS,i as HARNESS_STATE_POINTER,a as createHarnessSession,g as getHarnessState,s as harnessRoot,c as loadHarnessState,y as persistHarnessSelection,n as projectHarnessEnvironment,h as readHarnessState,_ as refreshHarnessState,l as requireHarnessPaths,u as requireHarnessRoot,d as resetHarnessStore,v as updateHarnessState};
|
|
2
|
+
//# sourceMappingURL=harnessState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessState.mjs","names":["readSharedHarnessState","getSharedHarnessState","updateSharedHarnessState"],"sources":["../../../src/adapters/config/harnessState.ts"],"sourcesContent":["import {\n HARNESS_STATE_KEYS,\n projectHarnessEnvironment,\n readHarnessState as readSharedHarnessState,\n} from '@agimon-ai/doompi-config/harnessState';\nimport {\n createHarnessSession,\n getHarnessState as getSharedHarnessState,\n HARNESS_STATE_POINTER,\n harnessRoot,\n loadHarnessState,\n requireHarnessPaths,\n requireHarnessRoot,\n resetHarnessStore,\n updateHarnessState as updateSharedHarnessState,\n} from '@agimon-ai/doompi-config/harnessStore';\nimport { appendDoomConfigSelection } from '@agimon-ai/doompi-config/piContext';\nimport type { HarnessState } from '@agimon-ai/doompi-config/types';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport { HARNESS_EVENT, type HarnessFailureReporter } from '../../adapters/telemetry/logSinkTelemetry.ts';\n\nexport type { DoomHarnessContext, HarnessState } from '@agimon-ai/doompi-config/types';\nexport {\n createHarnessSession,\n HARNESS_STATE_KEYS,\n HARNESS_STATE_POINTER,\n harnessRoot,\n loadHarnessState,\n projectHarnessEnvironment,\n requireHarnessPaths,\n requireHarnessRoot,\n resetHarnessStore,\n};\n\nfunction telemetryReporter(report?: HarnessFailureReporter): ((key: string, error: unknown) => void) | undefined {\n if (!report) return undefined;\n return (key, error) => {\n report.warn(HARNESS_EVENT.harnessStateParseFailed, error, { 'harness.state.key': key });\n };\n}\n\nexport function readHarnessState(\n environment: NodeJS.ProcessEnv = process.env,\n report?: HarnessFailureReporter,\n): HarnessState {\n return readSharedHarnessState(environment, telemetryReporter(report));\n}\n\nexport function getHarnessState(report?: HarnessFailureReporter): HarnessState {\n return getSharedHarnessState(telemetryReporter(report));\n}\n\n/**\n * Re-reads the state, dropping what this process had cached.\n *\n * The store caches for the life of a process because nothing else writes the\n * file it owns. A test suite and a Pi reload are the two places that outlive\n * that assumption, so both come through here.\n */\nexport function refreshHarnessState(report?: HarnessFailureReporter): HarnessState {\n resetHarnessStore();\n return getHarnessState(report);\n}\n\nexport function updateHarnessState(\n patch: Partial<HarnessState>,\n environment: NodeJS.ProcessEnv = process.env,\n): HarnessState {\n return updateSharedHarnessState(patch, environment);\n}\n\nexport function persistHarnessSelection(\n pi: Pick<ExtensionAPI, 'appendEntry'>,\n state: {\n readonly majorMode: string;\n readonly domains: readonly string[];\n readonly profile?: string;\n } = getHarnessState(),\n): void {\n appendDoomConfigSelection(pi, {\n version: 1,\n majorMode: state.majorMode,\n domains: state.domains,\n profile: state.profile,\n });\n}\n"],"mappings":"qhBAkCA,SAAS,EAAkB,EAAsF,CAC1G,KACL,OAAQ,EAAK,IAAU,CACrB,EAAO,KAAK,EAAc,wBAAyB,EAAO,CAAE,oBAAqB,EAAK,CAAC,EAI3F,SAAgB,EACd,EAAiC,QAAQ,IACzC,EACc,CACd,OAAOA,EAAuB,EAAa,EAAkB,EAAO,CAAC,CAGvE,SAAgB,EAAgB,EAA+C,CAC7E,OAAOC,EAAsB,EAAkB,EAAO,CAAC,CAUzD,SAAgB,EAAoB,EAA+C,CAEjF,OADA,GAAmB,CACZ,EAAgB,EAAO,CAGhC,SAAgB,EACd,EACA,EAAiC,QAAQ,IAC3B,CACd,OAAOC,EAAyB,EAAO,EAAY,CAGrD,SAAgB,EACd,EACA,EAII,GAAiB,CACf,CACN,EAA0B,EAAI,CAC5B,QAAS,EACT,UAAW,EAAM,UACjB,QAAS,EAAM,QACf,QAAS,EAAM,QAChB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`node:url`),n=require(`node:path`);n=e.__toESM(n,1);let r=require(`node:fs`);r=e.__toESM(r,1);let i=require(`@earendil-works/pi-coding-agent`),a=require(`node:worker_threads`);const o=`@earendil-works/pi-coding-agent`,s=`package.json`;function c(){let e=[process.argv[1],(0,t.fileURLToPath)(require(`url`).pathToFileURL(__filename).href),n.default.join(process.cwd(),s)];for(let i of e){if(!i)continue;let e=n.default.dirname(n.default.resolve(i));for(;;){let i=n.default.join(e,`node_modules`,o),a=n.default.join(i,s);try{let e=JSON.parse(r.default.readFileSync(a,`utf8`));if(typeof e.main==`string`){let a=n.default.resolve(i,e.main);if(r.default.existsSync(a))return(0,t.pathToFileURL)(a).href}}catch{}let c=n.default.dirname(e);if(c===e)break;e=c}}throw Error(`Cannot resolve ${o} from the DoomPi or host module trees`)}var l=class{#e;#t;constructor(e){this.#e=e}start(){if(this.#t)return this.#t;if(!this.#e.schedule&&!this.#e.load)return this.#t=this.#o(),this.#t;let e=this.#e.schedule??(e=>setImmediate(e));return this.#t=new Promise(t=>{let n=e=>{t(this.#i(e))};try{e(()=>{try{t(this.#a())}catch(e){n(e)}})}catch(e){n(e)}}),this.#t}ready(){return this.start()}#n(){return{cwd:this.#e.cwd,agentDir:this.#e.agentDir??(0,i.getAgentDir)(),skillPaths:[...this.#e.skillPaths],includeDefaults:!1}}#r(e){return{skills:e.skills,diagnostics:e.diagnostics.map(e=>`${e.path??this.#e.cwd}: ${e.message}`)}}#i(e){return{skills:[],diagnostics:[`${this.#e.cwd}: ${e instanceof Error?e.message:String(e)}`]}}#a(){return this.#r((this.#e.load??i.loadSkills)(this.#n()))}#o(){return new Promise(e=>{let t=!1,n=n=>{t||(t=!0,e(n))},r;try{r=new a.Worker(`
|
|
2
|
+
const { parentPort, workerData } = require('node:worker_threads');
|
|
3
|
+
void (async () => {
|
|
4
|
+
try {
|
|
5
|
+
const { loadSkills } = await import(workerData.piModuleUrl);
|
|
6
|
+
parentPort.postMessage({ ok: true, result: loadSkills(workerData.loadOptions) });
|
|
7
|
+
} catch (error) {
|
|
8
|
+
parentPort.postMessage({ ok: false, error: error instanceof Error ? error.message : String(error) });
|
|
9
|
+
}
|
|
10
|
+
})();
|
|
11
|
+
`,{eval:!0,workerData:{piModuleUrl:this.#e.piModuleUrl??c(),loadOptions:this.#n()}})}catch(e){n(this.#i(e));return}r.unref(),r.once(`message`,e=>{if(!e.ok||!e.result){n(this.#i(e.error??`Skill worker failed`));return}n(this.#r(e.result))}),r.once(`error`,e=>n(this.#i(e))),r.once(`exit`,e=>{e!==0&&n(this.#i(`Skill worker exited with code ${e}`))})})}};function u(e,t,n){return t.selectedTools&&!t.selectedTools.includes(`read`)?e:`${e}${(0,i.formatSkillsForPrompt)(n)}`}function d(e,t){if(!e.startsWith(`/skill:`))return e;let n=e.indexOf(` `),a=n===-1?e.slice(7):e.slice(7,n),o=t.find(e=>e.name===a);if(!o)return e;try{let t=n===-1?``:e.slice(n+1).trim(),a=(0,i.stripFrontmatter)(r.default.readFileSync(o.filePath,`utf8`)).trim(),s=`<skill name="${o.name}" location="${o.filePath}">\nReferences are relative to ${o.baseDir}.\n\n${a}\n</skill>`;return t?`${s}\n\n${t}`:s}catch{return e}}exports.DeferredSkillLoader=l,exports.buildPromptWithDeferredSkills=u,exports.expandDeferredSkillCommand=d;
|
|
12
|
+
//# sourceMappingURL=deferredSkills.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deferredSkills.cjs","names":["path","fs","#options","#promise","#loadInWorker","#failure","#load","#snapshot","loadSkills","#loadOptions","Worker"],"sources":["../../src/adapters/deferredSkills.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { Worker } from 'node:worker_threads';\nimport {\n type BuildSystemPromptOptions,\n formatSkillsForPrompt,\n getAgentDir,\n loadSkills,\n type Skill,\n stripFrontmatter,\n} from '@earendil-works/pi-coding-agent';\n\nexport interface DeferredSkillSnapshot {\n skills: Skill[];\n diagnostics: string[];\n}\n\nconst PI_PACKAGE = '@earendil-works/pi-coding-agent';\nconst PACKAGE_MANIFEST = 'package.json';\nconst SKILL_WORKER_SOURCE = `\nconst { parentPort, workerData } = require('node:worker_threads');\nvoid (async () => {\n try {\n const { loadSkills } = await import(workerData.piModuleUrl);\n parentPort.postMessage({ ok: true, result: loadSkills(workerData.loadOptions) });\n } catch (error) {\n parentPort.postMessage({ ok: false, error: error instanceof Error ? error.message : String(error) });\n }\n})();\n`;\n\nfunction installedPiModuleUrl(): string {\n const anchors = [process.argv[1], fileURLToPath(import.meta.url), path.join(process.cwd(), PACKAGE_MANIFEST)];\n for (const anchor of anchors) {\n if (!anchor) continue;\n let directory = path.dirname(path.resolve(anchor));\n while (true) {\n const packageRoot = path.join(directory, 'node_modules', PI_PACKAGE);\n const manifestPath = path.join(packageRoot, PACKAGE_MANIFEST);\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as { main?: unknown };\n if (typeof manifest.main === 'string') {\n const entry = path.resolve(packageRoot, manifest.main);\n if (fs.existsSync(entry)) return pathToFileURL(entry).href;\n }\n } catch {\n // This anchor does not expose Pi at this level; continue up its module chain.\n }\n const parent = path.dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n }\n throw new Error(`Cannot resolve ${PI_PACKAGE} from the DoomPi or host module trees`);\n}\n\ninterface SkillWorkerResult {\n ok: boolean;\n result?: { skills: Skill[]; diagnostics: Array<{ path?: string; message: string }> };\n error?: string;\n}\n\nexport interface DeferredSkillLoaderOptions {\n cwd: string;\n skillPaths: readonly string[];\n agentDir?: string;\n piModuleUrl?: string;\n schedule?: (load: () => void) => void;\n load?: (options: { cwd: string; agentDir: string; skillPaths: string[]; includeDefaults: boolean }) => {\n skills: Skill[];\n diagnostics: Array<{ path?: string; message: string }>;\n };\n}\n\n/**\n * One session's Doom-selected skill inventory.\n *\n * Construction is deliberately cheap. `start()` schedules the synchronous Pi\n * walker after session_start returns, while `ready()` is the single promise the\n * first input awaits before Pi expands `/skill:name`.\n */\nexport class DeferredSkillLoader {\n readonly #options: DeferredSkillLoaderOptions;\n #promise: Promise<DeferredSkillSnapshot> | undefined;\n\n constructor(options: DeferredSkillLoaderOptions) {\n this.#options = options;\n }\n\n start(): Promise<DeferredSkillSnapshot> {\n if (this.#promise) return this.#promise;\n\n if (!this.#options.schedule && !this.#options.load) {\n this.#promise = this.#loadInWorker();\n return this.#promise;\n }\n\n const schedule = this.#options.schedule ?? ((load: () => void) => setImmediate(load));\n this.#promise = new Promise((resolve) => {\n const fail = (error: unknown): void => {\n resolve(this.#failure(error));\n };\n try {\n schedule(() => {\n try {\n resolve(this.#load());\n } catch (error) {\n fail(error);\n }\n });\n } catch (error) {\n fail(error);\n }\n });\n return this.#promise;\n }\n\n ready(): Promise<DeferredSkillSnapshot> {\n return this.start();\n }\n\n #loadOptions(): { cwd: string; agentDir: string; skillPaths: string[]; includeDefaults: boolean } {\n return {\n cwd: this.#options.cwd,\n agentDir: this.#options.agentDir ?? getAgentDir(),\n skillPaths: [...this.#options.skillPaths],\n includeDefaults: false,\n };\n }\n\n #snapshot(result: {\n skills: Skill[];\n diagnostics: Array<{ path?: string; message: string }>;\n }): DeferredSkillSnapshot {\n return {\n skills: result.skills,\n diagnostics: result.diagnostics.map(\n (diagnostic) => `${diagnostic.path ?? this.#options.cwd}: ${diagnostic.message}`,\n ),\n };\n }\n\n #failure(error: unknown): DeferredSkillSnapshot {\n return {\n skills: [],\n diagnostics: [`${this.#options.cwd}: ${error instanceof Error ? error.message : String(error)}`],\n };\n }\n\n #load(): DeferredSkillSnapshot {\n return this.#snapshot((this.#options.load ?? loadSkills)(this.#loadOptions()));\n }\n\n #loadInWorker(): Promise<DeferredSkillSnapshot> {\n return new Promise((resolve) => {\n let settled = false;\n const settle = (snapshot: DeferredSkillSnapshot): void => {\n if (settled) return;\n settled = true;\n resolve(snapshot);\n };\n let worker: Worker;\n try {\n worker = new Worker(SKILL_WORKER_SOURCE, {\n eval: true,\n workerData: {\n piModuleUrl: this.#options.piModuleUrl ?? installedPiModuleUrl(),\n loadOptions: this.#loadOptions(),\n },\n });\n } catch (error) {\n settle(this.#failure(error));\n return;\n }\n worker.unref();\n worker.once('message', (message: SkillWorkerResult) => {\n if (!message.ok || !message.result) {\n settle(this.#failure(message.error ?? 'Skill worker failed'));\n return;\n }\n settle(this.#snapshot(message.result));\n });\n worker.once('error', (error) => settle(this.#failure(error)));\n worker.once('exit', (code) => {\n if (code !== 0) settle(this.#failure(`Skill worker exited with code ${code}`));\n });\n });\n }\n}\n\n/** Appends only the inventory Pi would append for these deferred skills. */\nexport function buildPromptWithDeferredSkills(\n systemPrompt: string,\n options: BuildSystemPromptOptions,\n skills: Skill[],\n): string {\n if (options.selectedTools && !options.selectedTools.includes('read')) return systemPrompt;\n return `${systemPrompt}${formatSkillsForPrompt(skills)}`;\n}\n\n/** Expands a deferred `/skill:name` before Pi consults its synchronous inventory. */\nexport function expandDeferredSkillCommand(text: string, skills: readonly Skill[]): string {\n if (!text.startsWith('/skill:')) return text;\n const spaceIndex = text.indexOf(' ');\n const skillName = spaceIndex === -1 ? text.slice(7) : text.slice(7, spaceIndex);\n const skill = skills.find((candidate) => candidate.name === skillName);\n if (!skill) return text;\n\n try {\n const args = spaceIndex === -1 ? '' : text.slice(spaceIndex + 1).trim();\n const body = stripFrontmatter(fs.readFileSync(skill.filePath, 'utf8')).trim();\n const skillBlock = `<skill name=\"${skill.name}\" location=\"${skill.filePath}\">\\nReferences are relative to ${skill.baseDir}.\\n\\n${body}\\n</skill>`;\n return args ? `${skillBlock}\\n\\n${args}` : skillBlock;\n } catch {\n // Pi uses the same literal-text fallback if a skill disappears between\n // discovery and submission; the agent can still respond to the command.\n return text;\n }\n}\n"],"mappings":"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"}
|