@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,61 @@
|
|
|
1
|
+
import { HarnessTelemetry } from "./telemetry/logSinkTelemetry.cjs";
|
|
2
|
+
import { HarnessOptions, HarnessResources } from "../types/interfaces/harness.cjs";
|
|
3
|
+
import { AgentProfile, DomainMcpAllowlist, MajorModesConfig, PluginEntry } from "../services/config/index.cjs";
|
|
4
|
+
|
|
5
|
+
//#region src/adapters/harnessContext.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Everything a command needs, resolved once.
|
|
8
|
+
*
|
|
9
|
+
* All three commands need the same expensive preparation (domains resolved,
|
|
10
|
+
* plugins collected into a temp directory, environment assembled), so it is
|
|
11
|
+
* built here and handed to whichever command runs.
|
|
12
|
+
*/
|
|
13
|
+
interface HarnessContext {
|
|
14
|
+
options: HarnessOptions;
|
|
15
|
+
environment: NodeJS.ProcessEnv;
|
|
16
|
+
resources: HarnessResources;
|
|
17
|
+
plugins: PluginEntry[];
|
|
18
|
+
profile?: string;
|
|
19
|
+
personaDirectory?: string;
|
|
20
|
+
/** Root personaDirectory resolves against, when a profile supplied one. */
|
|
21
|
+
personaRoot?: string;
|
|
22
|
+
mcpAllowlist?: DomainMcpAllowlist;
|
|
23
|
+
majorModesConfig: MajorModesConfig;
|
|
24
|
+
selectedLayers: string[];
|
|
25
|
+
hookGroups: string[];
|
|
26
|
+
mcpEntry?: string;
|
|
27
|
+
personaEntry?: string;
|
|
28
|
+
workflowExtension?: string;
|
|
29
|
+
defaultThemePath: string;
|
|
30
|
+
cleanup(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Applies the provider environment a preset needs.
|
|
34
|
+
*
|
|
35
|
+
* Exported because the synced Pi path has no launcher to do it: the doom-pi
|
|
36
|
+
* extension applies the same rules in-process before anything reads them.
|
|
37
|
+
* `piArgs` is only consulted to spot a selected cloud model.
|
|
38
|
+
*/
|
|
39
|
+
declare function configurePreset(options: Pick<HarnessOptions, 'preset' | 'piArgs'>, environment: NodeJS.ProcessEnv): void;
|
|
40
|
+
/**
|
|
41
|
+
* Describes this run's MCP configuration for the doom-mcp extension.
|
|
42
|
+
*
|
|
43
|
+
* The extension runs inside the Pi child process and reads the layers itself, so
|
|
44
|
+
* mcp-proxy owns discovery and merging. What travels here is only what the child
|
|
45
|
+
* cannot work out on its own: which plugins this run selected, and the domain
|
|
46
|
+
* allowlist. The merged config doom-pi writes is for external frontends.
|
|
47
|
+
*/
|
|
48
|
+
declare function mcpSessionEnvironment(options: Pick<HarnessOptions, 'repoRoot'>, resources: HarnessResources, allowlist: DomainMcpAllowlist | undefined): Record<string, string>;
|
|
49
|
+
/** Resolves the optional persona and environment profile selected for this run. */
|
|
50
|
+
declare function resolveHarnessProfile(options: HarnessOptions): AgentProfile | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Resolves the full matrix and stages every resource Pi will need.
|
|
53
|
+
*
|
|
54
|
+
* The caller owns the returned cleanup(): the temporary directory holding
|
|
55
|
+
* skills, agents, and the generated MCP config has to outlive this function
|
|
56
|
+
* and be removed once the selected command is done with it.
|
|
57
|
+
*/
|
|
58
|
+
declare function buildHarnessContext(options: HarnessOptions, telemetry?: HarnessTelemetry): Promise<HarnessContext>;
|
|
59
|
+
//#endregion
|
|
60
|
+
export { HarnessContext, buildHarnessContext, configurePreset, mcpSessionEnvironment, resolveHarnessProfile };
|
|
61
|
+
//# sourceMappingURL=harnessContext.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harnessContext.d.cts","names":[],"sources":["../../src/
|
|
1
|
+
{"version":3,"file":"harnessContext.d.cts","names":[],"sources":["../../src/adapters/harnessContext.ts"],"mappings":";;;;;;;AA+CA;;;;;UAAiB,cAAA;EACf,OAAA,EAAS,cAAA;EACT,WAAA,EAAa,MAAA,CAAO,UAAA;EACpB,SAAA,EAAW,gBAAA;EACX,OAAA,EAAS,WAAA;EACT,OAAA;EACA,gBAAA;EALA;EAOA,WAAA;EACA,YAAA,GAAe,kBAAA;EACf,gBAAA,EAAkB,gBAAA;EAClB,cAAA;EACA,UAAA;EACA,QAAA;EACA,YAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA,IAAW,OAAA;AAAA;;;;;;;;iBAUG,eAAA,CACd,OAAA,EAAS,IAAA,CAAK,cAAA,wBACd,WAAA,EAAa,MAAA,CAAO,UAAA;;;;;;;AAFtB;;iBAgCgB,qBAAA,CACd,OAAA,EAAS,IAAA,CAAK,cAAA,eACd,SAAA,EAAW,gBAAA,EACX,SAAA,EAAW,kBAAA,eACV,MAAA;;iBAUa,qBAAA,CAAsB,OAAA,EAAS,cAAA,GAAiB,YAAA;;;;;;;;iBAW1C,mBAAA,CACpB,OAAA,EAAS,cAAA,EACT,SAAA,GAAW,gBAAA,GACV,OAAA,CAAQ,cAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { HarnessTelemetry } from "./telemetry/logSinkTelemetry.mjs";
|
|
2
|
+
import { HarnessOptions, HarnessResources } from "../types/interfaces/harness.mjs";
|
|
3
|
+
import { AgentProfile, DomainMcpAllowlist, MajorModesConfig, PluginEntry } from "../services/config/index.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/adapters/harnessContext.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Everything a command needs, resolved once.
|
|
8
|
+
*
|
|
9
|
+
* All three commands need the same expensive preparation (domains resolved,
|
|
10
|
+
* plugins collected into a temp directory, environment assembled), so it is
|
|
11
|
+
* built here and handed to whichever command runs.
|
|
12
|
+
*/
|
|
13
|
+
interface HarnessContext {
|
|
14
|
+
options: HarnessOptions;
|
|
15
|
+
environment: NodeJS.ProcessEnv;
|
|
16
|
+
resources: HarnessResources;
|
|
17
|
+
plugins: PluginEntry[];
|
|
18
|
+
profile?: string;
|
|
19
|
+
personaDirectory?: string;
|
|
20
|
+
/** Root personaDirectory resolves against, when a profile supplied one. */
|
|
21
|
+
personaRoot?: string;
|
|
22
|
+
mcpAllowlist?: DomainMcpAllowlist;
|
|
23
|
+
majorModesConfig: MajorModesConfig;
|
|
24
|
+
selectedLayers: string[];
|
|
25
|
+
hookGroups: string[];
|
|
26
|
+
mcpEntry?: string;
|
|
27
|
+
personaEntry?: string;
|
|
28
|
+
workflowExtension?: string;
|
|
29
|
+
defaultThemePath: string;
|
|
30
|
+
cleanup(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Applies the provider environment a preset needs.
|
|
34
|
+
*
|
|
35
|
+
* Exported because the synced Pi path has no launcher to do it: the doom-pi
|
|
36
|
+
* extension applies the same rules in-process before anything reads them.
|
|
37
|
+
* `piArgs` is only consulted to spot a selected cloud model.
|
|
38
|
+
*/
|
|
39
|
+
declare function configurePreset(options: Pick<HarnessOptions, 'preset' | 'piArgs'>, environment: NodeJS.ProcessEnv): void;
|
|
40
|
+
/**
|
|
41
|
+
* Describes this run's MCP configuration for the doom-mcp extension.
|
|
42
|
+
*
|
|
43
|
+
* The extension runs inside the Pi child process and reads the layers itself, so
|
|
44
|
+
* mcp-proxy owns discovery and merging. What travels here is only what the child
|
|
45
|
+
* cannot work out on its own: which plugins this run selected, and the domain
|
|
46
|
+
* allowlist. The merged config doom-pi writes is for external frontends.
|
|
47
|
+
*/
|
|
48
|
+
declare function mcpSessionEnvironment(options: Pick<HarnessOptions, 'repoRoot'>, resources: HarnessResources, allowlist: DomainMcpAllowlist | undefined): Record<string, string>;
|
|
49
|
+
/** Resolves the optional persona and environment profile selected for this run. */
|
|
50
|
+
declare function resolveHarnessProfile(options: HarnessOptions): AgentProfile | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Resolves the full matrix and stages every resource Pi will need.
|
|
53
|
+
*
|
|
54
|
+
* The caller owns the returned cleanup(): the temporary directory holding
|
|
55
|
+
* skills, agents, and the generated MCP config has to outlive this function
|
|
56
|
+
* and be removed once the selected command is done with it.
|
|
57
|
+
*/
|
|
58
|
+
declare function buildHarnessContext(options: HarnessOptions, telemetry?: HarnessTelemetry): Promise<HarnessContext>;
|
|
59
|
+
//#endregion
|
|
60
|
+
export { HarnessContext, buildHarnessContext, configurePreset, mcpSessionEnvironment, resolveHarnessProfile };
|
|
61
|
+
//# sourceMappingURL=harnessContext.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harnessContext.d.mts","names":[],"sources":["../../src/
|
|
1
|
+
{"version":3,"file":"harnessContext.d.mts","names":[],"sources":["../../src/adapters/harnessContext.ts"],"mappings":";;;;;;;AA+CA;;;;;UAAiB,cAAA;EACf,OAAA,EAAS,cAAA;EACT,WAAA,EAAa,MAAA,CAAO,UAAA;EACpB,SAAA,EAAW,gBAAA;EACX,OAAA,EAAS,WAAA;EACT,OAAA;EACA,gBAAA;EALA;EAOA,WAAA;EACA,YAAA,GAAe,kBAAA;EACf,gBAAA,EAAkB,gBAAA;EAClB,cAAA;EACA,UAAA;EACA,QAAA;EACA,YAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA,IAAW,OAAA;AAAA;;;;;;;;iBAUG,eAAA,CACd,OAAA,EAAS,IAAA,CAAK,cAAA,wBACd,WAAA,EAAa,MAAA,CAAO,UAAA;;;;;;;AAFtB;;iBAgCgB,qBAAA,CACd,OAAA,EAAS,IAAA,CAAK,cAAA,eACd,SAAA,EAAW,gBAAA,EACX,SAAA,EAAW,kBAAA,eACV,MAAA;;iBAUa,qBAAA,CAAsB,OAAA,EAAS,cAAA,GAAiB,YAAA;;;;;;;;iBAW1C,mBAAA,CACpB,OAAA,EAAS,cAAA,EACT,SAAA,GAAW,gBAAA,GACV,OAAA,CAAQ,cAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{resolveSyncLocation as e}from"./syncLocation.mjs";import{optionalPackageEntry as t,ownEntry as n,packageEntry as r}from"./modules/moduleResolution.mjs";import"../utils/index.mjs";import{CONTEXT_PACKAGES as i,PERSONA_ENTRY as a,filterHookDisabledLayers as o}from"../services/extensionAssembler.mjs";import{HARNESS_EVENT as s,createHarnessTelemetry as c}from"./telemetry/logSinkTelemetry.mjs";import{createHarnessSession as l}from"./config/harnessState.mjs";import{DEFAULT_THEME_NAME as u,applyProfileEnvironment as d,buildPersonaPrompt as f,layerHookGroups as p,loadMajorModesConfig as m,resolveLayers as h,resolvePluginEntries as g,resolveProfile as _,resolveSharedSkills as v,writeDefaultTheme as y}from"../services/config/index.mjs";import{resolveMcpAllowlist as b}from"./mcpFilter.mjs";import{materializePluginEntries as x}from"./pluginMaterializer.mjs";import{collectResources as S,selectWorkflowExtensionForProcess as C}from"./resourceCollector.mjs";import w from"node:path";import T from"node:fs";import E from"node:os";import{sessionConfigEnvironment as D}from"@agimon-ai/doompi-mcp";const O=`ollama`,k=`resolve_config`,A=`collect_resources`;function j(e,t){if(e.preset===`kimi`&&(!t.KIMI_API_KEY&&t.KIMI_CODE_API_KEY&&(t.KIMI_API_KEY=t.KIMI_CODE_API_KEY),!t.KIMI_API_KEY))throw Error(`KIMI_API_KEY or KIMI_CODE_API_KEY is required for the kimi preset`);if(e.preset===O){if((e.piArgs.find(e=>e.startsWith(`${O}/`))?.endsWith(`:cloud`)??!1)&&!t.OLLAMA_API_KEY)throw Error(`OLLAMA_API_KEY is required for Ollama cloud models`);t.OLLAMA_API_KEY||=O,t.DOOMPI_OLLAMA_BASE_URL=t.OLLAMA_BASE_URL??t.ANTHROPIC_BASE_URL??`http://localhost:11434/v1`}}function M(e,t,n){return D({repoRoot:e.repoRoot,stagingDirectory:t.temporaryDirectory,...t.pluginMcpConfigPaths.length>0?{pluginConfigPaths:t.pluginMcpConfigPaths}:{},...n?{allowlist:n}:{}})}function N(e){return e.profile?_(e.repoRoot,e.profile):void 0}async function P(_,D=c()){let O=await D.runInSpan(`doom_pi.${k}`,{"harness.phase":k},async()=>{let e=m(_.repoRoot),t=o(h(e,_.majorMode),_.hooks),n=N(_);if(!T.existsSync(_.cwd)||!T.statSync(_.cwd).isDirectory())throw Error(`Working directory does not exist: ${_.cwd}`);return{majorModesConfig:e,selectedLayers:t,hookGroups:p(e,t),profile:n,plugins:await x(g(_.repoRoot,_.domains,_.pluginDirectories)),mcpAllowlist:b(_.repoRoot,_.domains),sharedSkills:v(_.repoRoot,_.domains)}}).catch(async e=>{throw await D.recordError(s.configLoadFailed,e,{"harness.phase":k,"harness.major_mode":_.majorMode,"harness.domain_count":_.domains.length}),e}),{majorModesConfig:P,selectedLayers:F,hookGroups:I,profile:L,plugins:R,mcpAllowlist:z}=O,B=L?.persona,V=L?.personaRoot??_.repoRoot,H=t(i.workflow),U=t(i.dispatcherWorkflow),W=await D.runInSpan(`doom_pi.${A}`,{"harness.plugin.count":R.length,"harness.agents":_.agents,"harness.mcp":_.mcp},()=>S(_.repoRoot,R,{agents:_.agents,mcp:_.mcp,temporaryDirectory:_.resourceDirectory,skillCacheDirectory:w.join(_.resourceDirectory??e(_.repoRoot,_.homeDirectory??E.homedir()).directory,`cache`,`skills`),workflowExtension:H,dispatcherWorkflowExtension:U,mcpAllowlist:z,sharedSkills:O.sharedSkills})).catch(async e=>{throw await D.recordError(s.resourceCollectionFailed,e,{"harness.phase":A,"harness.plugin.count":R.length}),e});try{let e=C(H,W.dispatcherWorkflowExtensionPath),t=await y(W.temporaryDirectory),o={...process.env},s=d(o,L?.env??{});j(_,o),o.NX_DAEMON??=`false`,o.DOOMPI_THEME||=u,o.CLAUDE_PROJECT_DIR=_.repoRoot,o.CODEX_REPO_ROOT=_.repoRoot,o.ORIGINAL_REPO_PATH||=_.repoRoot,o.MCP_UI_VIEWER=_.automation?`none`:o.MCP_UI_VIEWER??``;let c=n(a),p=B?f(V,B):void 0,m;p&&(m=w.join(W.temporaryDirectory,`persona.md`),await T.promises.writeFile(m,`${p}\n`,{mode:384}));let h=_.mcp?r(i.mcp):void 0;return h&&Object.assign(o,M(_,W,z)),l({root:_.repoRoot,majorMode:_.majorMode,temporaryDirectory:W.temporaryDirectory,domains:_.domains,layers:F,profile:L?.name,profileEnvironment:s,personaFile:m,skillDirectories:W.skillDirectories,agentDirectories:W.agentDirectories,additionalDirectories:_.additionalDirectories,childExtensions:[],pluginDirectories:_.pluginDirectories,pluginHooks:W.pluginHooks,hookGroups:I,hooks:_.hooks,agents:_.agents,mcp:_.mcp,mcpConfigPath:W.mcpConfigPath,allowProtectedWrites:_.allowProtectedWrites,workflowExtension:H},{directory:W.temporaryDirectory,environment:o}),_.agents&&(o.PI_SUBAGENT_EXTRA_AGENT_DIRS=W.agentDirectories.join(w.delimiter),o.PI_SUBAGENT_EXTRA_SKILL_DIRS=W.skillDirectories.join(w.delimiter),o.PI_SUBAGENT_PI_BINARY=w.join(_.repoRoot,`pi.sh`)),{options:_,environment:o,resources:W,plugins:R,profile:L?.name,personaDirectory:B,personaRoot:V,mcpAllowlist:z,majorModesConfig:P,selectedLayers:F,hookGroups:I,mcpEntry:h,personaEntry:c,workflowExtension:e,defaultThemePath:t,cleanup:W.cleanup.bind(W)}}catch(e){throw await D.recordError(s.contextBuildFailed,e,{"harness.phase":`build_context`,"harness.major_mode":_.majorMode,...L?.name?{"harness.profile":L.name}:{}}),await W.cleanup(),e}}export{P as buildHarnessContext,j as configurePreset,M as mcpSessionEnvironment,N as resolveHarnessProfile};
|
|
2
|
+
//# sourceMappingURL=harnessContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessContext.mjs","names":[],"sources":["../../src/adapters/harnessContext.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { sessionConfigEnvironment } from '@agimon-ai/doompi-mcp';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '../adapters/telemetry/logSinkTelemetry.ts';\nimport {\n type AgentProfile,\n applyProfileEnvironment,\n buildPersonaPrompt,\n createHarnessSession,\n DEFAULT_THEME_NAME,\n type DomainMcpAllowlist,\n layerHookGroups,\n loadMajorModesConfig,\n type MajorModesConfig,\n type PluginEntry,\n resolveLayers,\n resolvePluginEntries,\n resolveProfile,\n resolveSharedSkills,\n writeDefaultTheme,\n} from '../services/config/index.ts';\nimport { CONTEXT_PACKAGES, filterHookDisabledLayers, PERSONA_ENTRY } from '../services/extensionAssembler.ts';\nimport type { HarnessOptions, HarnessResources } from '../types/interfaces/index.ts';\nimport { optionalPackageEntry, ownEntry, packageEntry } from '../utils/index.ts';\nimport { resolveMcpAllowlist } from './mcpFilter.ts';\nimport { materializePluginEntries } from './pluginMaterializer.ts';\nimport { collectResources, selectWorkflowExtensionForProcess } from './resourceCollector.ts';\nimport { resolveSyncLocation } from './syncLocation.ts';\n\nconst OLLAMA_PRESET = 'ollama';\nconst PRIVATE_FILE_MODE = 0o600;\nconst RESOLVE_CONFIG_PHASE = 'resolve_config';\nconst COLLECT_RESOURCES_PHASE = 'collect_resources';\nconst BUILD_CONTEXT_PHASE = 'build_context';\n\n/**\n * Everything a command needs, resolved once.\n *\n * All three commands need the same expensive preparation (domains resolved,\n * plugins collected into a temp directory, environment assembled), so it is\n * built here and handed to whichever command runs.\n */\nexport interface HarnessContext {\n options: HarnessOptions;\n environment: NodeJS.ProcessEnv;\n resources: HarnessResources;\n plugins: PluginEntry[];\n profile?: string;\n personaDirectory?: string;\n /** Root personaDirectory resolves against, when a profile supplied one. */\n personaRoot?: string;\n mcpAllowlist?: DomainMcpAllowlist;\n majorModesConfig: MajorModesConfig;\n selectedLayers: string[];\n hookGroups: string[];\n mcpEntry?: string;\n personaEntry?: string;\n workflowExtension?: string;\n defaultThemePath: string;\n cleanup(): Promise<void>;\n}\n\n/**\n * Applies the provider environment a preset needs.\n *\n * Exported because the synced Pi path has no launcher to do it: the doom-pi\n * extension applies the same rules in-process before anything reads them.\n * `piArgs` is only consulted to spot a selected cloud model.\n */\nexport function configurePreset(\n options: Pick<HarnessOptions, 'preset' | 'piArgs'>,\n environment: NodeJS.ProcessEnv,\n): void {\n if (options.preset === 'kimi') {\n if (!environment.KIMI_API_KEY && environment.KIMI_CODE_API_KEY) {\n environment.KIMI_API_KEY = environment.KIMI_CODE_API_KEY;\n }\n if (!environment.KIMI_API_KEY) {\n throw new Error('KIMI_API_KEY or KIMI_CODE_API_KEY is required for the kimi preset');\n }\n }\n if (options.preset === OLLAMA_PRESET) {\n const selected = options.piArgs.find((argument) => argument.startsWith(`${OLLAMA_PRESET}/`));\n const cloud = selected?.endsWith(':cloud') ?? false;\n if (cloud && !environment.OLLAMA_API_KEY) {\n throw new Error('OLLAMA_API_KEY is required for Ollama cloud models');\n }\n environment.OLLAMA_API_KEY ||= OLLAMA_PRESET;\n environment.DOOMPI_OLLAMA_BASE_URL =\n environment.OLLAMA_BASE_URL ?? environment.ANTHROPIC_BASE_URL ?? 'http://localhost:11434/v1';\n }\n}\n\n/**\n * Describes this run's MCP configuration for the doom-mcp extension.\n *\n * The extension runs inside the Pi child process and reads the layers itself, so\n * mcp-proxy owns discovery and merging. What travels here is only what the child\n * cannot work out on its own: which plugins this run selected, and the domain\n * allowlist. The merged config doom-pi writes is for external frontends.\n */\nexport function mcpSessionEnvironment(\n options: Pick<HarnessOptions, 'repoRoot'>,\n resources: HarnessResources,\n allowlist: DomainMcpAllowlist | undefined,\n): Record<string, string> {\n return sessionConfigEnvironment({\n repoRoot: options.repoRoot,\n stagingDirectory: resources.temporaryDirectory,\n ...(resources.pluginMcpConfigPaths.length > 0 ? { pluginConfigPaths: resources.pluginMcpConfigPaths } : {}),\n ...(allowlist ? { allowlist } : {}),\n });\n}\n\n/** Resolves the optional persona and environment profile selected for this run. */\nexport function resolveHarnessProfile(options: HarnessOptions): AgentProfile | undefined {\n return options.profile ? resolveProfile(options.repoRoot, options.profile) : undefined;\n}\n\n/**\n * Resolves the full matrix and stages every resource Pi will need.\n *\n * The caller owns the returned cleanup(): the temporary directory holding\n * skills, agents, and the generated MCP config has to outlive this function\n * and be removed once the selected command is done with it.\n */\nexport async function buildHarnessContext(\n options: HarnessOptions,\n telemetry: HarnessTelemetry = createHarnessTelemetry(),\n): Promise<HarnessContext> {\n // Everything up to collectResources reads configuration off disk, so a single\n // malformed modes.yaml or profiles.yaml surfaces here as a failed launch\n // with no other record.\n const configured = await telemetry\n .runInSpan(`doom_pi.${RESOLVE_CONFIG_PHASE}`, { 'harness.phase': RESOLVE_CONFIG_PHASE }, async () => {\n const majorModesConfig = loadMajorModesConfig(options.repoRoot);\n const selectedLayers = filterHookDisabledLayers(\n resolveLayers(majorModesConfig, options.majorMode),\n options.hooks,\n );\n const profile = resolveHarnessProfile(options);\n if (!fs.existsSync(options.cwd) || !fs.statSync(options.cwd).isDirectory()) {\n throw new Error(`Working directory does not exist: ${options.cwd}`);\n }\n return {\n majorModesConfig,\n selectedLayers,\n hookGroups: layerHookGroups(majorModesConfig, selectedLayers),\n profile,\n plugins: await materializePluginEntries(\n resolvePluginEntries(options.repoRoot, options.domains, options.pluginDirectories),\n ),\n mcpAllowlist: resolveMcpAllowlist(options.repoRoot, options.domains),\n sharedSkills: resolveSharedSkills(options.repoRoot, options.domains),\n };\n })\n .catch(async (error: unknown) => {\n await telemetry.recordError(HARNESS_EVENT.configLoadFailed, error, {\n 'harness.phase': RESOLVE_CONFIG_PHASE,\n 'harness.major_mode': options.majorMode,\n 'harness.domain_count': options.domains.length,\n });\n throw error;\n });\n\n const { majorModesConfig, selectedLayers, hookGroups, profile, plugins, mcpAllowlist } = configured;\n const personaDirectory = profile?.persona;\n // A global profile's persona lives beside the global config, not in the repo.\n const personaRoot = profile?.personaRoot ?? options.repoRoot;\n const workflowExtension = optionalPackageEntry(CONTEXT_PACKAGES.workflow);\n const dispatcherWorkflowExtension = optionalPackageEntry(CONTEXT_PACKAGES.dispatcherWorkflow);\n const resources = await telemetry\n .runInSpan(\n `doom_pi.${COLLECT_RESOURCES_PHASE}`,\n { 'harness.plugin.count': plugins.length, 'harness.agents': options.agents, 'harness.mcp': options.mcp },\n () =>\n collectResources(options.repoRoot, plugins, {\n agents: options.agents,\n mcp: options.mcp,\n // Set by `doom-pi sync`, which stages into a directory that outlives\n // the process rather than a temporary one.\n temporaryDirectory: options.resourceDirectory,\n skillCacheDirectory: path.join(\n options.resourceDirectory ??\n resolveSyncLocation(options.repoRoot, options.homeDirectory ?? os.homedir()).directory,\n 'cache',\n 'skills',\n ),\n workflowExtension,\n dispatcherWorkflowExtension,\n mcpAllowlist,\n sharedSkills: configured.sharedSkills,\n }),\n )\n .catch(async (error: unknown) => {\n // Conflicting skills, agents, or MCP servers all fail here, and the plugin\n // that caused it is only identifiable from the message.\n await telemetry.recordError(HARNESS_EVENT.resourceCollectionFailed, error, {\n 'harness.phase': COLLECT_RESOURCES_PHASE,\n 'harness.plugin.count': plugins.length,\n });\n throw error;\n });\n\n try {\n const activeWorkflowExtension = selectWorkflowExtensionForProcess(\n workflowExtension,\n resources.dispatcherWorkflowExtensionPath,\n );\n const defaultThemePath = await writeDefaultTheme(resources.temporaryDirectory);\n const environment = { ...process.env };\n const profileEnvironment = applyProfileEnvironment(environment, profile?.env ?? {});\n\n configurePreset(options, environment);\n environment.NX_DAEMON ??= 'false';\n environment.DOOMPI_THEME ||= DEFAULT_THEME_NAME;\n environment.CLAUDE_PROJECT_DIR = options.repoRoot;\n environment.CODEX_REPO_ROOT = options.repoRoot;\n environment.ORIGINAL_REPO_PATH ||= options.repoRoot;\n environment.MCP_UI_VIEWER = options.automation ? 'none' : (environment.MCP_UI_VIEWER ?? '');\n\n // Always loaded, even with no persona at launch: the extension no-ops\n // without a persona file, and /profile needs it present to load one later.\n // Pi freezes the --extension list at startup, so it cannot be added on demand.\n const personaEntry = ownEntry(PERSONA_ENTRY);\n const personaPrompt = personaDirectory ? buildPersonaPrompt(personaRoot, personaDirectory) : undefined;\n let personaFile: string | undefined;\n if (personaPrompt) {\n personaFile = path.join(resources.temporaryDirectory, 'persona.md');\n await fs.promises.writeFile(personaFile, `${personaPrompt}\\n`, { mode: PRIVATE_FILE_MODE });\n }\n\n // doom-mcp is a normal package entry rather than generated code: it reads the\n // repository and plugin layers itself, so there is nothing to codegen a path\n // into. `--no-mcp` still gates by leaving the entry out of the list.\n const mcpEntry = options.mcp ? packageEntry(CONTEXT_PACKAGES.mcp) : undefined;\n if (mcpEntry) Object.assign(environment, mcpSessionEnvironment(options, resources, mcpAllowlist));\n\n // One write, describing the child rather than this process. The state file\n // is the child's authority and the environment is what it projects for the\n // hooks and packages that can only read an environment.\n createHarnessSession(\n {\n root: options.repoRoot,\n majorMode: options.majorMode,\n temporaryDirectory: resources.temporaryDirectory,\n domains: options.domains,\n layers: selectedLayers,\n profile: profile?.name,\n profileEnvironment,\n personaFile,\n skillDirectories: resources.skillDirectories,\n agentDirectories: resources.agentDirectories,\n additionalDirectories: options.additionalDirectories,\n childExtensions: [],\n pluginDirectories: options.pluginDirectories,\n pluginHooks: resources.pluginHooks,\n hookGroups,\n hooks: options.hooks,\n agents: options.agents,\n mcp: options.mcp,\n mcpConfigPath: resources.mcpConfigPath,\n allowProtectedWrites: options.allowProtectedWrites,\n workflowExtension,\n },\n { directory: resources.temporaryDirectory, environment },\n );\n if (options.agents) {\n environment.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(path.delimiter);\n environment.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(path.delimiter);\n environment.PI_SUBAGENT_PI_BINARY = path.join(options.repoRoot, 'pi.sh');\n }\n\n // Core hook groups load regardless; hookGroups selects the rest. The initial\n // state write includes an empty list deliberately: unset means every group.\n\n return {\n options,\n environment,\n resources,\n plugins,\n profile: profile?.name,\n personaDirectory,\n personaRoot,\n mcpAllowlist,\n majorModesConfig,\n selectedLayers,\n hookGroups,\n mcpEntry,\n personaEntry,\n workflowExtension: activeWorkflowExtension,\n defaultThemePath,\n cleanup: resources.cleanup.bind(resources),\n };\n } catch (error) {\n // Preparation failed after the temp directory existed, so nothing will be\n // handed back to clean it up.\n await telemetry.recordError(HARNESS_EVENT.contextBuildFailed, error, {\n 'harness.phase': BUILD_CONTEXT_PHASE,\n 'harness.major_mode': options.majorMode,\n ...(profile?.name ? { 'harness.profile': profile.name } : {}),\n });\n await resources.cleanup();\n throw error;\n }\n}\n"],"mappings":"0kCAkCA,MAAM,EAAgB,SAEhB,EAAuB,iBACvB,EAA0B,oBAqChC,SAAgB,EACd,EACA,EACM,CACN,GAAI,EAAQ,SAAW,SACjB,CAAC,EAAY,cAAgB,EAAY,oBAC3C,EAAY,aAAe,EAAY,mBAErC,CAAC,EAAY,cACf,MAAU,MAAM,oEAAoE,CAGxF,GAAI,EAAQ,SAAW,EAAe,CAGpC,IAFiB,EAAQ,OAAO,KAAM,GAAa,EAAS,WAAW,GAAG,EAAc,GAAG,CACrE,EAAE,SAAS,SAAS,EAAI,KACjC,CAAC,EAAY,eACxB,MAAU,MAAM,qDAAqD,CAEvE,EAAY,iBAAmB,EAC/B,EAAY,uBACV,EAAY,iBAAmB,EAAY,oBAAsB,6BAYvE,SAAgB,EACd,EACA,EACA,EACwB,CACxB,OAAO,EAAyB,CAC9B,SAAU,EAAQ,SAClB,iBAAkB,EAAU,mBAC5B,GAAI,EAAU,qBAAqB,OAAS,EAAI,CAAE,kBAAmB,EAAU,qBAAsB,CAAG,EAAE,CAC1G,GAAI,EAAY,CAAE,YAAW,CAAG,EAAE,CACnC,CAAC,CAIJ,SAAgB,EAAsB,EAAmD,CACvF,OAAO,EAAQ,QAAU,EAAe,EAAQ,SAAU,EAAQ,QAAQ,CAAG,IAAA,GAU/E,eAAsB,EACpB,EACA,EAA8B,GAAwB,CAC7B,CAIzB,IAAM,EAAa,MAAM,EACtB,UAAU,WAAW,IAAwB,CAAE,gBAAiB,EAAsB,CAAE,SAAY,CACnG,IAAM,EAAmB,EAAqB,EAAQ,SAAS,CACzD,EAAiB,EACrB,EAAc,EAAkB,EAAQ,UAAU,CAClD,EAAQ,MACT,CACK,EAAU,EAAsB,EAAQ,CAC9C,GAAI,CAAC,EAAG,WAAW,EAAQ,IAAI,EAAI,CAAC,EAAG,SAAS,EAAQ,IAAI,CAAC,aAAa,CACxE,MAAU,MAAM,qCAAqC,EAAQ,MAAM,CAErE,MAAO,CACL,mBACA,iBACA,WAAY,EAAgB,EAAkB,EAAe,CAC7D,UACA,QAAS,MAAM,EACb,EAAqB,EAAQ,SAAU,EAAQ,QAAS,EAAQ,kBAAkB,CACnF,CACD,aAAc,EAAoB,EAAQ,SAAU,EAAQ,QAAQ,CACpE,aAAc,EAAoB,EAAQ,SAAU,EAAQ,QAAQ,CACrE,EACD,CACD,MAAM,KAAO,IAAmB,CAM/B,MALA,MAAM,EAAU,YAAY,EAAc,iBAAkB,EAAO,CACjE,gBAAiB,EACjB,qBAAsB,EAAQ,UAC9B,uBAAwB,EAAQ,QAAQ,OACzC,CAAC,CACI,GACN,CAEE,CAAE,mBAAkB,iBAAgB,aAAY,UAAS,UAAS,gBAAiB,EACnF,EAAmB,GAAS,QAE5B,EAAc,GAAS,aAAe,EAAQ,SAC9C,EAAoB,EAAqB,EAAiB,SAAS,CACnE,EAA8B,EAAqB,EAAiB,mBAAmB,CACvF,EAAY,MAAM,EACrB,UACC,WAAW,IACX,CAAE,uBAAwB,EAAQ,OAAQ,iBAAkB,EAAQ,OAAQ,cAAe,EAAQ,IAAK,KAEtG,EAAiB,EAAQ,SAAU,EAAS,CAC1C,OAAQ,EAAQ,OAChB,IAAK,EAAQ,IAGb,mBAAoB,EAAQ,kBAC5B,oBAAqB,EAAK,KACxB,EAAQ,mBACN,EAAoB,EAAQ,SAAU,EAAQ,eAAiB,EAAG,SAAS,CAAC,CAAC,UAC/E,QACA,SACD,CACD,oBACA,8BACA,eACA,aAAc,EAAW,aAC1B,CAAC,CACL,CACA,MAAM,KAAO,IAAmB,CAO/B,MAJA,MAAM,EAAU,YAAY,EAAc,yBAA0B,EAAO,CACzE,gBAAiB,EACjB,uBAAwB,EAAQ,OACjC,CAAC,CACI,GACN,CAEJ,GAAI,CACF,IAAM,EAA0B,EAC9B,EACA,EAAU,gCACX,CACK,EAAmB,MAAM,EAAkB,EAAU,mBAAmB,CACxE,EAAc,CAAE,GAAG,QAAQ,IAAK,CAChC,EAAqB,EAAwB,EAAa,GAAS,KAAO,EAAE,CAAC,CAEnF,EAAgB,EAAS,EAAY,CACrC,EAAY,YAAc,QAC1B,EAAY,eAAiB,EAC7B,EAAY,mBAAqB,EAAQ,SACzC,EAAY,gBAAkB,EAAQ,SACtC,EAAY,qBAAuB,EAAQ,SAC3C,EAAY,cAAgB,EAAQ,WAAa,OAAU,EAAY,eAAiB,GAKxF,IAAM,EAAe,EAAS,EAAc,CACtC,EAAgB,EAAmB,EAAmB,EAAa,EAAiB,CAAG,IAAA,GACzF,EACA,IACF,EAAc,EAAK,KAAK,EAAU,mBAAoB,aAAa,CACnE,MAAM,EAAG,SAAS,UAAU,EAAa,GAAG,EAAc,IAAK,CAAE,KAAM,IAAmB,CAAC,EAM7F,IAAM,EAAW,EAAQ,IAAM,EAAa,EAAiB,IAAI,CAAG,IAAA,GAyCpE,OAxCI,GAAU,OAAO,OAAO,EAAa,EAAsB,EAAS,EAAW,EAAa,CAAC,CAKjG,EACE,CACE,KAAM,EAAQ,SACd,UAAW,EAAQ,UACnB,mBAAoB,EAAU,mBAC9B,QAAS,EAAQ,QACjB,OAAQ,EACR,QAAS,GAAS,KAClB,qBACA,cACA,iBAAkB,EAAU,iBAC5B,iBAAkB,EAAU,iBAC5B,sBAAuB,EAAQ,sBAC/B,gBAAiB,EAAE,CACnB,kBAAmB,EAAQ,kBAC3B,YAAa,EAAU,YACvB,aACA,MAAO,EAAQ,MACf,OAAQ,EAAQ,OAChB,IAAK,EAAQ,IACb,cAAe,EAAU,cACzB,qBAAsB,EAAQ,qBAC9B,oBACD,CACD,CAAE,UAAW,EAAU,mBAAoB,cAAa,CACzD,CACG,EAAQ,SACV,EAAY,6BAA+B,EAAU,iBAAiB,KAAK,EAAK,UAAU,CAC1F,EAAY,6BAA+B,EAAU,iBAAiB,KAAK,EAAK,UAAU,CAC1F,EAAY,sBAAwB,EAAK,KAAK,EAAQ,SAAU,QAAQ,EAMnE,CACL,UACA,cACA,YACA,UACA,QAAS,GAAS,KAClB,mBACA,cACA,eACA,mBACA,iBACA,aACA,WACA,eACA,kBAAmB,EACnB,mBACA,QAAS,EAAU,QAAQ,KAAK,EAAU,CAC3C,OACM,EAAO,CASd,MANA,MAAM,EAAU,YAAY,EAAc,mBAAoB,EAAO,CACnE,gBAAiB,gBACjB,qBAAsB,EAAQ,UAC9B,GAAI,GAAS,KAAO,CAAE,kBAAmB,EAAQ,KAAM,CAAG,EAAE,CAC7D,CAAC,CACF,MAAM,EAAU,SAAS,CACnB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`@earendil-works/pi-coding-agent`),t=require(`@agimon-ai/doompi-extension-contracts/help`);function n(e){return e.slice(0,t.DOOM_HELP_MAX_DIAGNOSTIC_LENGTH)}function r(t){return{name:t.name,description:t.description,filePath:t.filePath,baseDir:t.baseDir,sourceInfo:(0,e.createSyntheticSourceInfo)(t.filePath,{source:t.source,scope:`temporary`,origin:`package`,baseDir:t.baseDir}),disableModelInvocation:!1}}function i(e){return!e||e.activation===`inactive`?[]:[...e.skills].sort((e,t)=>e.source.localeCompare(t.source)||e.name.localeCompare(t.name)||e.filePath.localeCompare(t.filePath))}function a(e){return e?e.diagnostics.map(e=>n(`Help ${e.source??`host`} [${e.code}]: ${e.message}`)):[]}function o(e,o,s=[]){let c=new Set([...e.normalSkills.map(e=>e.name),...e.deferredSkills.map(e=>e.name),...e.normalSkillNames??[]]),l=[],u=[...a(o),...s.map(n)];for(let e of i(o)){if(c.has(e.name)){u.push(n(`Help ${e.source} [HELP_SKILL_COLLISION]: '${e.name}' was ignored because a normal skill wins.`));continue}c.add(e.name),l.push(r(e))}let d=u.slice(0,t.DOOM_HELP_MAX_DIAGNOSTICS),f=[...e.deferredSkills,...l];return{skills:[...e.normalSkills,...f],additionalSkills:f,helpSkills:l,diagnostics:d,diagnosticKey:`${o?.hostGeneration??`absent`}:${o?.revision??0}:${d.join(``)}`}}function s(e){let r=[],i=(0,t.createDoomHelpSnapshotClient)(e,{source:`@agimon-ai/doompi`,onError(e){let t=e instanceof Error?e.message:String(e);r.splice(0,r.length,n(`Help client [HELP_SNAPSHOT_FAILED]: ${t}`))}}),a=!1;return{merge(e){return o(e,i.getSnapshot(),r)},dispose(){a||(a=!0,i.dispose(),r.splice(0))}}}exports.createActiveHelpSkillView=s;
|
|
2
|
+
//# sourceMappingURL=helpSkills.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpSkills.cjs","names":["DOOM_HELP_MAX_DIAGNOSTIC_LENGTH","DOOM_HELP_MAX_DIAGNOSTICS"],"sources":["../../src/adapters/helpSkills.ts"],"sourcesContent":["import type { DoomExtensionHost } from '@agimon-ai/doompi-extension-contracts/config';\nimport {\n createDoomHelpSnapshotClient,\n DOOM_HELP_MAX_DIAGNOSTIC_LENGTH,\n DOOM_HELP_MAX_DIAGNOSTICS,\n type DoomHelpSkill,\n type DoomHelpSnapshot,\n type DoomHelpSnapshotClient,\n} from '@agimon-ai/doompi-extension-contracts/help';\nimport { createSyntheticSourceInfo, type ExtensionAPI, type Skill } from '@earendil-works/pi-coding-agent';\n\nconst HELP_CLIENT_SOURCE = '@agimon-ai/doompi';\n\nexport interface SkillInventoryInput {\n normalSkills: readonly Skill[];\n deferredSkills: readonly Skill[];\n /** Names from Pi's command catalog when full normal Skill records are unavailable. */\n normalSkillNames?: readonly string[];\n}\n\nexport interface MergedSkillInventory {\n /** Static, deferred, then accepted Help skills in invocation-precedence order. */\n skills: readonly Skill[];\n /** Deferred and Help skills that Doom Pi must append to Pi's existing prompt inventory. */\n additionalSkills: readonly Skill[];\n /** Accepted Help skills, retained separately for the Help catalog group. */\n helpSkills: readonly Skill[];\n diagnostics: readonly string[];\n diagnosticKey: string;\n}\n\nexport interface ActiveHelpSkillView {\n merge(input: SkillInventoryInput): MergedSkillInventory;\n dispose(): void;\n}\n\nfunction boundedDiagnostic(message: string): string {\n return message.slice(0, DOOM_HELP_MAX_DIAGNOSTIC_LENGTH);\n}\n\nfunction toSkill(skill: DoomHelpSkill): Skill {\n return {\n name: skill.name,\n description: skill.description,\n filePath: skill.filePath,\n baseDir: skill.baseDir,\n sourceInfo: createSyntheticSourceInfo(skill.filePath, {\n source: skill.source,\n scope: 'temporary',\n origin: 'package',\n baseDir: skill.baseDir,\n }),\n disableModelInvocation: false,\n };\n}\n\nfunction activeHelpSkills(snapshot: DoomHelpSnapshot | undefined): DoomHelpSkill[] {\n if (!snapshot || snapshot.activation === 'inactive') return [];\n return [...snapshot.skills].sort(\n (left, right) =>\n left.source.localeCompare(right.source) ||\n left.name.localeCompare(right.name) ||\n left.filePath.localeCompare(right.filePath),\n );\n}\n\nfunction snapshotDiagnostics(snapshot: DoomHelpSnapshot | undefined): string[] {\n if (!snapshot) return [];\n return snapshot.diagnostics.map((entry) =>\n boundedDiagnostic(`Help ${entry.source ?? 'host'} [${entry.code}]: ${entry.message}`),\n );\n}\n\nexport function mergeActiveHelpSkills(\n input: SkillInventoryInput,\n snapshot: DoomHelpSnapshot | undefined,\n clientDiagnostics: readonly string[] = [],\n): MergedSkillInventory {\n const occupiedNames = new Set([\n ...input.normalSkills.map((skill) => skill.name),\n ...input.deferredSkills.map((skill) => skill.name),\n ...(input.normalSkillNames ?? []),\n ]);\n const helpSkills: Skill[] = [];\n const diagnostics = [...snapshotDiagnostics(snapshot), ...clientDiagnostics.map(boundedDiagnostic)];\n\n for (const candidate of activeHelpSkills(snapshot)) {\n if (occupiedNames.has(candidate.name)) {\n diagnostics.push(\n boundedDiagnostic(\n `Help ${candidate.source} [HELP_SKILL_COLLISION]: '${candidate.name}' was ignored because a normal skill wins.`,\n ),\n );\n continue;\n }\n occupiedNames.add(candidate.name);\n helpSkills.push(toSkill(candidate));\n }\n\n const boundedDiagnostics = diagnostics.slice(0, DOOM_HELP_MAX_DIAGNOSTICS);\n const additionalSkills = [...input.deferredSkills, ...helpSkills];\n return {\n skills: [...input.normalSkills, ...additionalSkills],\n additionalSkills,\n helpSkills,\n diagnostics: boundedDiagnostics,\n diagnosticKey: `${snapshot?.hostGeneration ?? 'absent'}:${snapshot?.revision ?? 0}:${boundedDiagnostics.join('\\u0001')}`,\n };\n}\n\nexport function createActiveHelpSkillView(pi: Pick<ExtensionAPI, 'events' | 'on'>): ActiveHelpSkillView {\n const clientDiagnostics: string[] = [];\n const client: DoomHelpSnapshotClient = createDoomHelpSnapshotClient(pi as unknown as DoomExtensionHost, {\n source: HELP_CLIENT_SOURCE,\n onError(error) {\n const message = error instanceof Error ? error.message : String(error);\n clientDiagnostics.splice(\n 0,\n clientDiagnostics.length,\n boundedDiagnostic(`Help client [HELP_SNAPSHOT_FAILED]: ${message}`),\n );\n },\n });\n let disposed = false;\n return {\n merge(input) {\n return mergeActiveHelpSkills(input, client.getSnapshot(), clientDiagnostics);\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n client.dispose();\n clientDiagnostics.splice(0);\n },\n };\n}\n"],"mappings":"sJAoCA,SAAS,EAAkB,EAAyB,CAClD,OAAO,EAAQ,MAAM,EAAGA,EAAAA,gCAAgC,CAG1D,SAAS,EAAQ,EAA6B,CAC5C,MAAO,CACL,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,SAAU,EAAM,SAChB,QAAS,EAAM,QACf,YAAA,EAAA,EAAA,2BAAsC,EAAM,SAAU,CACpD,OAAQ,EAAM,OACd,MAAO,YACP,OAAQ,UACR,QAAS,EAAM,QAChB,CAAC,CACF,uBAAwB,GACzB,CAGH,SAAS,EAAiB,EAAyD,CAEjF,MADI,CAAC,GAAY,EAAS,aAAe,WAAmB,EAAE,CACvD,CAAC,GAAG,EAAS,OAAO,CAAC,MACzB,EAAM,IACL,EAAK,OAAO,cAAc,EAAM,OAAO,EACvC,EAAK,KAAK,cAAc,EAAM,KAAK,EACnC,EAAK,SAAS,cAAc,EAAM,SAAS,CAC9C,CAGH,SAAS,EAAoB,EAAkD,CAE7E,OADK,EACE,EAAS,YAAY,IAAK,GAC/B,EAAkB,QAAQ,EAAM,QAAU,OAAO,IAAI,EAAM,KAAK,KAAK,EAAM,UAAU,CACtF,CAHqB,EAAE,CAM1B,SAAgB,EACd,EACA,EACA,EAAuC,EAAE,CACnB,CACtB,IAAM,EAAgB,IAAI,IAAI,CAC5B,GAAG,EAAM,aAAa,IAAK,GAAU,EAAM,KAAK,CAChD,GAAG,EAAM,eAAe,IAAK,GAAU,EAAM,KAAK,CAClD,GAAI,EAAM,kBAAoB,EAAE,CACjC,CAAC,CACI,EAAsB,EAAE,CACxB,EAAc,CAAC,GAAG,EAAoB,EAAS,CAAE,GAAG,EAAkB,IAAI,EAAkB,CAAC,CAEnG,IAAK,IAAM,KAAa,EAAiB,EAAS,CAAE,CAClD,GAAI,EAAc,IAAI,EAAU,KAAK,CAAE,CACrC,EAAY,KACV,EACE,QAAQ,EAAU,OAAO,4BAA4B,EAAU,KAAK,4CACrE,CACF,CACD,SAEF,EAAc,IAAI,EAAU,KAAK,CACjC,EAAW,KAAK,EAAQ,EAAU,CAAC,CAGrC,IAAM,EAAqB,EAAY,MAAM,EAAGC,EAAAA,0BAA0B,CACpE,EAAmB,CAAC,GAAG,EAAM,eAAgB,GAAG,EAAW,CACjE,MAAO,CACL,OAAQ,CAAC,GAAG,EAAM,aAAc,GAAG,EAAiB,CACpD,mBACA,aACA,YAAa,EACb,cAAe,GAAG,GAAU,gBAAkB,SAAS,GAAG,GAAU,UAAY,EAAE,GAAG,EAAmB,KAAK,IAAS,GACvH,CAGH,SAAgB,EAA0B,EAA8D,CACtG,IAAM,EAA8B,EAAE,CAChC,GAAA,EAAA,EAAA,8BAA8D,EAAoC,CACtG,OAAQ,oBACR,QAAQ,EAAO,CACb,IAAM,EAAU,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACtE,EAAkB,OAChB,EACA,EAAkB,OAClB,EAAkB,uCAAuC,IAAU,CACpE,EAEJ,CAAC,CACE,EAAW,GACf,MAAO,CACL,MAAM,EAAO,CACX,OAAO,EAAsB,EAAO,EAAO,aAAa,CAAE,EAAkB,EAE9E,SAAU,CACJ,IACJ,EAAW,GACX,EAAO,SAAS,CAChB,EAAkB,OAAO,EAAE,GAE9B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createSyntheticSourceInfo as e}from"@earendil-works/pi-coding-agent";import{DOOM_HELP_MAX_DIAGNOSTICS as t,DOOM_HELP_MAX_DIAGNOSTIC_LENGTH as n,createDoomHelpSnapshotClient as r}from"@agimon-ai/doompi-extension-contracts/help";function i(e){return e.slice(0,n)}function a(t){return{name:t.name,description:t.description,filePath:t.filePath,baseDir:t.baseDir,sourceInfo:e(t.filePath,{source:t.source,scope:`temporary`,origin:`package`,baseDir:t.baseDir}),disableModelInvocation:!1}}function o(e){return!e||e.activation===`inactive`?[]:[...e.skills].sort((e,t)=>e.source.localeCompare(t.source)||e.name.localeCompare(t.name)||e.filePath.localeCompare(t.filePath))}function s(e){return e?e.diagnostics.map(e=>i(`Help ${e.source??`host`} [${e.code}]: ${e.message}`)):[]}function c(e,n,r=[]){let c=new Set([...e.normalSkills.map(e=>e.name),...e.deferredSkills.map(e=>e.name),...e.normalSkillNames??[]]),l=[],u=[...s(n),...r.map(i)];for(let e of o(n)){if(c.has(e.name)){u.push(i(`Help ${e.source} [HELP_SKILL_COLLISION]: '${e.name}' was ignored because a normal skill wins.`));continue}c.add(e.name),l.push(a(e))}let d=u.slice(0,t),f=[...e.deferredSkills,...l];return{skills:[...e.normalSkills,...f],additionalSkills:f,helpSkills:l,diagnostics:d,diagnosticKey:`${n?.hostGeneration??`absent`}:${n?.revision??0}:${d.join(``)}`}}function l(e){let t=[],n=r(e,{source:`@agimon-ai/doompi`,onError(e){let n=e instanceof Error?e.message:String(e);t.splice(0,t.length,i(`Help client [HELP_SNAPSHOT_FAILED]: ${n}`))}}),a=!1;return{merge(e){return c(e,n.getSnapshot(),t)},dispose(){a||(a=!0,n.dispose(),t.splice(0))}}}export{l as createActiveHelpSkillView};
|
|
2
|
+
//# sourceMappingURL=helpSkills.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpSkills.mjs","names":[],"sources":["../../src/adapters/helpSkills.ts"],"sourcesContent":["import type { DoomExtensionHost } from '@agimon-ai/doompi-extension-contracts/config';\nimport {\n createDoomHelpSnapshotClient,\n DOOM_HELP_MAX_DIAGNOSTIC_LENGTH,\n DOOM_HELP_MAX_DIAGNOSTICS,\n type DoomHelpSkill,\n type DoomHelpSnapshot,\n type DoomHelpSnapshotClient,\n} from '@agimon-ai/doompi-extension-contracts/help';\nimport { createSyntheticSourceInfo, type ExtensionAPI, type Skill } from '@earendil-works/pi-coding-agent';\n\nconst HELP_CLIENT_SOURCE = '@agimon-ai/doompi';\n\nexport interface SkillInventoryInput {\n normalSkills: readonly Skill[];\n deferredSkills: readonly Skill[];\n /** Names from Pi's command catalog when full normal Skill records are unavailable. */\n normalSkillNames?: readonly string[];\n}\n\nexport interface MergedSkillInventory {\n /** Static, deferred, then accepted Help skills in invocation-precedence order. */\n skills: readonly Skill[];\n /** Deferred and Help skills that Doom Pi must append to Pi's existing prompt inventory. */\n additionalSkills: readonly Skill[];\n /** Accepted Help skills, retained separately for the Help catalog group. */\n helpSkills: readonly Skill[];\n diagnostics: readonly string[];\n diagnosticKey: string;\n}\n\nexport interface ActiveHelpSkillView {\n merge(input: SkillInventoryInput): MergedSkillInventory;\n dispose(): void;\n}\n\nfunction boundedDiagnostic(message: string): string {\n return message.slice(0, DOOM_HELP_MAX_DIAGNOSTIC_LENGTH);\n}\n\nfunction toSkill(skill: DoomHelpSkill): Skill {\n return {\n name: skill.name,\n description: skill.description,\n filePath: skill.filePath,\n baseDir: skill.baseDir,\n sourceInfo: createSyntheticSourceInfo(skill.filePath, {\n source: skill.source,\n scope: 'temporary',\n origin: 'package',\n baseDir: skill.baseDir,\n }),\n disableModelInvocation: false,\n };\n}\n\nfunction activeHelpSkills(snapshot: DoomHelpSnapshot | undefined): DoomHelpSkill[] {\n if (!snapshot || snapshot.activation === 'inactive') return [];\n return [...snapshot.skills].sort(\n (left, right) =>\n left.source.localeCompare(right.source) ||\n left.name.localeCompare(right.name) ||\n left.filePath.localeCompare(right.filePath),\n );\n}\n\nfunction snapshotDiagnostics(snapshot: DoomHelpSnapshot | undefined): string[] {\n if (!snapshot) return [];\n return snapshot.diagnostics.map((entry) =>\n boundedDiagnostic(`Help ${entry.source ?? 'host'} [${entry.code}]: ${entry.message}`),\n );\n}\n\nexport function mergeActiveHelpSkills(\n input: SkillInventoryInput,\n snapshot: DoomHelpSnapshot | undefined,\n clientDiagnostics: readonly string[] = [],\n): MergedSkillInventory {\n const occupiedNames = new Set([\n ...input.normalSkills.map((skill) => skill.name),\n ...input.deferredSkills.map((skill) => skill.name),\n ...(input.normalSkillNames ?? []),\n ]);\n const helpSkills: Skill[] = [];\n const diagnostics = [...snapshotDiagnostics(snapshot), ...clientDiagnostics.map(boundedDiagnostic)];\n\n for (const candidate of activeHelpSkills(snapshot)) {\n if (occupiedNames.has(candidate.name)) {\n diagnostics.push(\n boundedDiagnostic(\n `Help ${candidate.source} [HELP_SKILL_COLLISION]: '${candidate.name}' was ignored because a normal skill wins.`,\n ),\n );\n continue;\n }\n occupiedNames.add(candidate.name);\n helpSkills.push(toSkill(candidate));\n }\n\n const boundedDiagnostics = diagnostics.slice(0, DOOM_HELP_MAX_DIAGNOSTICS);\n const additionalSkills = [...input.deferredSkills, ...helpSkills];\n return {\n skills: [...input.normalSkills, ...additionalSkills],\n additionalSkills,\n helpSkills,\n diagnostics: boundedDiagnostics,\n diagnosticKey: `${snapshot?.hostGeneration ?? 'absent'}:${snapshot?.revision ?? 0}:${boundedDiagnostics.join('\\u0001')}`,\n };\n}\n\nexport function createActiveHelpSkillView(pi: Pick<ExtensionAPI, 'events' | 'on'>): ActiveHelpSkillView {\n const clientDiagnostics: string[] = [];\n const client: DoomHelpSnapshotClient = createDoomHelpSnapshotClient(pi as unknown as DoomExtensionHost, {\n source: HELP_CLIENT_SOURCE,\n onError(error) {\n const message = error instanceof Error ? error.message : String(error);\n clientDiagnostics.splice(\n 0,\n clientDiagnostics.length,\n boundedDiagnostic(`Help client [HELP_SNAPSHOT_FAILED]: ${message}`),\n );\n },\n });\n let disposed = false;\n return {\n merge(input) {\n return mergeActiveHelpSkills(input, client.getSnapshot(), clientDiagnostics);\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n client.dispose();\n clientDiagnostics.splice(0);\n },\n };\n}\n"],"mappings":"0OAoCA,SAAS,EAAkB,EAAyB,CAClD,OAAO,EAAQ,MAAM,EAAG,EAAgC,CAG1D,SAAS,EAAQ,EAA6B,CAC5C,MAAO,CACL,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,SAAU,EAAM,SAChB,QAAS,EAAM,QACf,WAAY,EAA0B,EAAM,SAAU,CACpD,OAAQ,EAAM,OACd,MAAO,YACP,OAAQ,UACR,QAAS,EAAM,QAChB,CAAC,CACF,uBAAwB,GACzB,CAGH,SAAS,EAAiB,EAAyD,CAEjF,MADI,CAAC,GAAY,EAAS,aAAe,WAAmB,EAAE,CACvD,CAAC,GAAG,EAAS,OAAO,CAAC,MACzB,EAAM,IACL,EAAK,OAAO,cAAc,EAAM,OAAO,EACvC,EAAK,KAAK,cAAc,EAAM,KAAK,EACnC,EAAK,SAAS,cAAc,EAAM,SAAS,CAC9C,CAGH,SAAS,EAAoB,EAAkD,CAE7E,OADK,EACE,EAAS,YAAY,IAAK,GAC/B,EAAkB,QAAQ,EAAM,QAAU,OAAO,IAAI,EAAM,KAAK,KAAK,EAAM,UAAU,CACtF,CAHqB,EAAE,CAM1B,SAAgB,EACd,EACA,EACA,EAAuC,EAAE,CACnB,CACtB,IAAM,EAAgB,IAAI,IAAI,CAC5B,GAAG,EAAM,aAAa,IAAK,GAAU,EAAM,KAAK,CAChD,GAAG,EAAM,eAAe,IAAK,GAAU,EAAM,KAAK,CAClD,GAAI,EAAM,kBAAoB,EAAE,CACjC,CAAC,CACI,EAAsB,EAAE,CACxB,EAAc,CAAC,GAAG,EAAoB,EAAS,CAAE,GAAG,EAAkB,IAAI,EAAkB,CAAC,CAEnG,IAAK,IAAM,KAAa,EAAiB,EAAS,CAAE,CAClD,GAAI,EAAc,IAAI,EAAU,KAAK,CAAE,CACrC,EAAY,KACV,EACE,QAAQ,EAAU,OAAO,4BAA4B,EAAU,KAAK,4CACrE,CACF,CACD,SAEF,EAAc,IAAI,EAAU,KAAK,CACjC,EAAW,KAAK,EAAQ,EAAU,CAAC,CAGrC,IAAM,EAAqB,EAAY,MAAM,EAAG,EAA0B,CACpE,EAAmB,CAAC,GAAG,EAAM,eAAgB,GAAG,EAAW,CACjE,MAAO,CACL,OAAQ,CAAC,GAAG,EAAM,aAAc,GAAG,EAAiB,CACpD,mBACA,aACA,YAAa,EACb,cAAe,GAAG,GAAU,gBAAkB,SAAS,GAAG,GAAU,UAAY,EAAE,GAAG,EAAmB,KAAK,IAAS,GACvH,CAGH,SAAgB,EAA0B,EAA8D,CACtG,IAAM,EAA8B,EAAE,CAChC,EAAiC,EAA6B,EAAoC,CACtG,OAAQ,oBACR,QAAQ,EAAO,CACb,IAAM,EAAU,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACtE,EAAkB,OAChB,EACA,EAAkB,OAClB,EAAkB,uCAAuC,IAAU,CACpE,EAEJ,CAAC,CACE,EAAW,GACf,MAAO,CACL,MAAM,EAAO,CACX,OAAO,EAAsB,EAAO,EAAO,aAAa,CAAE,EAAkB,EAE9E,SAAU,CACJ,IACJ,EAAW,GACX,EAAO,SAAS,CAChB,EAAkB,OAAO,EAAE,GAE9B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./modules/moduleResolution.cjs`),t=require(`../services/extensionAssembler.cjs`),n=require(`./piSettings.cjs`);let r=require(`@agimon-ai/doompi-config/majorModes`),i=require(`@earendil-works/pi-coding-agent`);function a(e,t){let n=e.optionalPackageEntries?.(t);if(n!==void 0)return n;let r=e.optionalPackageEntry(t);return r?[r]:void 0}function o(e,t,n){let i=new Set;for(let o of t){let t=e.layers[o];if(!t)throw Error(`Unknown layer: ${o}`);for(let e of t.packages??[]){let t=typeof e==`string`?e:e.name;typeof e!=`string`&&e.optional===!0||(0,r.isLocalPackageSpecifier)(t)||a(n,t)===void 0&&i.add(t)}}return[...i]}function s(t){return[...new Set(t.map(t=>`npm:${e.splitPackageSpecifier(t).name}`))]}function c(e,t){let r=n.piAgentDirectory(t);return new i.DefaultPackageManager({cwd:e,agentDir:r,settingsManager:i.SettingsManager.create(e,r,{projectTrusted:!0})})}async function l(e,n={}){let r=e.environment??process.env,i=n.resolvers??t.createLayerResolvers(e.repoRoot),l=o(e.config,e.layers,i);if(l.length===0)return[];let u=s(l),d=n.packageManager??c(e.repoRoot,r);try{await d.resolveExtensionSources(u,{local:!0})}catch(e){throw Error(`Failed to install missing DoomPi layer package(s): ${u.join(`, `)}`,{cause:e})}let f=l.filter(e=>!a(i,e)?.length);if(f.length>0)throw Error(`Installed DoomPi layer package(s) did not expose the configured Pi extension: ${f.join(`, `)}`);return u}exports.ensureLayerPackages=l;
|
|
2
|
+
//# sourceMappingURL=layerPackageInstaller.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layerPackageInstaller.cjs","names":["splitPackageSpecifier","piAgentDirectory","DefaultPackageManager","SettingsManager","createLayerResolvers"],"sources":["../../src/adapters/layerPackageInstaller.ts"],"sourcesContent":["import { isLocalPackageSpecifier, type MajorModesConfig } from '@agimon-ai/doompi-config/majorModes';\nimport { DefaultPackageManager, type PackageManager, SettingsManager } from '@earendil-works/pi-coding-agent';\nimport { createLayerResolvers, type ExtensionLayerResolvers } from '../services/extensionAssembler.ts';\nimport { splitPackageSpecifier } from './modules/moduleResolution.ts';\nimport { piAgentDirectory } from './piSettings.ts';\n\nconst NPM_SOURCE_PREFIX = 'npm:';\n\ntype LayerPackageManager = Pick<PackageManager, 'resolveExtensionSources'>;\n\nexport interface EnsureLayerPackagesOptions {\n repoRoot: string;\n config: MajorModesConfig;\n layers: readonly string[];\n environment?: NodeJS.ProcessEnv;\n}\n\nexport interface LayerPackageInstallerDependencies {\n packageManager?: LayerPackageManager;\n resolvers?: ExtensionLayerResolvers;\n}\n\nfunction resolvePackageEntries(resolvers: ExtensionLayerResolvers, specifier: string): string[] | undefined {\n const entries = resolvers.optionalPackageEntries?.(specifier);\n if (entries !== undefined) return entries;\n const entry = resolvers.optionalPackageEntry(specifier);\n return entry ? [entry] : undefined;\n}\n\n/** Finds required npm packages selected by the active layers that are not installed anywhere DoomPi resolves. */\nexport function missingLayerPackageSpecifiers(\n config: MajorModesConfig,\n layers: readonly string[],\n resolvers: ExtensionLayerResolvers,\n): string[] {\n const missing = new Set<string>();\n for (const layerName of layers) {\n const layer = config.layers[layerName];\n if (!layer) throw new Error(`Unknown layer: ${layerName}`);\n for (const configured of layer.packages ?? []) {\n const specifier = typeof configured === 'string' ? configured : configured.name;\n const optional = typeof configured !== 'string' && configured.optional === true;\n if (optional || isLocalPackageSpecifier(specifier)) continue;\n // An empty entry list means the package exists but declares no usable Pi\n // extension. Leave that validation to the assembler rather than masking a\n // broken install with another copy from the registry.\n if (resolvePackageEntries(resolvers, specifier) === undefined) missing.add(specifier);\n }\n }\n return [...missing];\n}\n\nfunction npmSources(specifiers: readonly string[]): string[] {\n return [...new Set(specifiers.map((specifier) => `${NPM_SOURCE_PREFIX}${splitPackageSpecifier(specifier).name}`))];\n}\n\nfunction createPackageManager(repoRoot: string, environment: NodeJS.ProcessEnv): LayerPackageManager {\n const agentDirectory = piAgentDirectory(environment);\n const settingsManager = SettingsManager.create(repoRoot, agentDirectory, { projectTrusted: true });\n return new DefaultPackageManager({ cwd: repoRoot, agentDir: agentDirectory, settingsManager });\n}\n\n/** Installs missing selected layer packages into Pi's project-local `.pi/npm` store and verifies the retry. */\nexport async function ensureLayerPackages(\n options: EnsureLayerPackagesOptions,\n dependencies: LayerPackageInstallerDependencies = {},\n): Promise<string[]> {\n const environment = options.environment ?? process.env;\n const resolvers = dependencies.resolvers ?? createLayerResolvers(options.repoRoot);\n const missing = missingLayerPackageSpecifiers(options.config, options.layers, resolvers);\n if (missing.length === 0) return [];\n\n const sources = npmSources(missing);\n const packageManager = dependencies.packageManager ?? createPackageManager(options.repoRoot, environment);\n try {\n await packageManager.resolveExtensionSources(sources, { local: true });\n } catch (error) {\n throw new Error(`Failed to install missing DoomPi layer package(s): ${sources.join(', ')}`, { cause: error });\n }\n\n const unresolved = missing.filter((specifier) => !resolvePackageEntries(resolvers, specifier)?.length);\n if (unresolved.length > 0) {\n throw new Error(\n `Installed DoomPi layer package(s) did not expose the configured Pi extension: ${unresolved.join(', ')}`,\n );\n }\n return sources;\n}\n"],"mappings":"+QAsBA,SAAS,EAAsB,EAAoC,EAAyC,CAC1G,IAAM,EAAU,EAAU,yBAAyB,EAAU,CAC7D,GAAI,IAAY,IAAA,GAAW,OAAO,EAClC,IAAM,EAAQ,EAAU,qBAAqB,EAAU,CACvD,OAAO,EAAQ,CAAC,EAAM,CAAG,IAAA,GAI3B,SAAgB,EACd,EACA,EACA,EACU,CACV,IAAM,EAAU,IAAI,IACpB,IAAK,IAAM,KAAa,EAAQ,CAC9B,IAAM,EAAQ,EAAO,OAAO,GAC5B,GAAI,CAAC,EAAO,MAAU,MAAM,kBAAkB,IAAY,CAC1D,IAAK,IAAM,KAAc,EAAM,UAAY,EAAE,CAAE,CAC7C,IAAM,EAAY,OAAO,GAAe,SAAW,EAAa,EAAW,KAC1D,OAAO,GAAe,UAAY,EAAW,WAAa,KAAA,EAAA,EAAA,yBACnC,EAAU,EAI9C,EAAsB,EAAW,EAAU,GAAK,IAAA,IAAW,EAAQ,IAAI,EAAU,EAGzF,MAAO,CAAC,GAAG,EAAQ,CAGrB,SAAS,EAAW,EAAyC,CAC3D,MAAO,CAAC,GAAG,IAAI,IAAI,EAAW,IAAK,GAAc,OAAuBA,EAAAA,sBAAsB,EAAU,CAAC,OAAO,CAAC,CAAC,CAGpH,SAAS,EAAqB,EAAkB,EAAqD,CACnG,IAAM,EAAiBC,EAAAA,iBAAiB,EAAY,CAEpD,OAAO,IAAIC,EAAAA,sBAAsB,CAAE,IAAK,EAAU,SAAU,EAAgB,gBADpDC,EAAAA,gBAAgB,OAAO,EAAU,EAAgB,CAAE,eAAgB,GAAM,CACN,CAAE,CAAC,CAIhG,eAAsB,EACpB,EACA,EAAkD,EAAE,CACjC,CACnB,IAAM,EAAc,EAAQ,aAAe,QAAQ,IAC7C,EAAY,EAAa,WAAaC,EAAAA,qBAAqB,EAAQ,SAAS,CAC5E,EAAU,EAA8B,EAAQ,OAAQ,EAAQ,OAAQ,EAAU,CACxF,GAAI,EAAQ,SAAW,EAAG,MAAO,EAAE,CAEnC,IAAM,EAAU,EAAW,EAAQ,CAC7B,EAAiB,EAAa,gBAAkB,EAAqB,EAAQ,SAAU,EAAY,CACzG,GAAI,CACF,MAAM,EAAe,wBAAwB,EAAS,CAAE,MAAO,GAAM,CAAC,OAC/D,EAAO,CACd,MAAU,MAAM,sDAAsD,EAAQ,KAAK,KAAK,GAAI,CAAE,MAAO,EAAO,CAAC,CAG/G,IAAM,EAAa,EAAQ,OAAQ,GAAc,CAAC,EAAsB,EAAW,EAAU,EAAE,OAAO,CACtG,GAAI,EAAW,OAAS,EACtB,MAAU,MACR,iFAAiF,EAAW,KAAK,KAAK,GACvG,CAEH,OAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{splitPackageSpecifier as e}from"./modules/moduleResolution.mjs";import{createLayerResolvers as t}from"../services/extensionAssembler.mjs";import{piAgentDirectory as n}from"./piSettings.mjs";import{isLocalPackageSpecifier as r}from"@agimon-ai/doompi-config/majorModes";import{DefaultPackageManager as i,SettingsManager as a}from"@earendil-works/pi-coding-agent";function o(e,t){let n=e.optionalPackageEntries?.(t);if(n!==void 0)return n;let r=e.optionalPackageEntry(t);return r?[r]:void 0}function s(e,t,n){let i=new Set;for(let a of t){let t=e.layers[a];if(!t)throw Error(`Unknown layer: ${a}`);for(let e of t.packages??[]){let t=typeof e==`string`?e:e.name;typeof e!=`string`&&e.optional===!0||r(t)||o(n,t)===void 0&&i.add(t)}}return[...i]}function c(t){return[...new Set(t.map(t=>`npm:${e(t).name}`))]}function l(e,t){let r=n(t);return new i({cwd:e,agentDir:r,settingsManager:a.create(e,r,{projectTrusted:!0})})}async function u(e,n={}){let r=e.environment??process.env,i=n.resolvers??t(e.repoRoot),a=s(e.config,e.layers,i);if(a.length===0)return[];let u=c(a),d=n.packageManager??l(e.repoRoot,r);try{await d.resolveExtensionSources(u,{local:!0})}catch(e){throw Error(`Failed to install missing DoomPi layer package(s): ${u.join(`, `)}`,{cause:e})}let f=a.filter(e=>!o(i,e)?.length);if(f.length>0)throw Error(`Installed DoomPi layer package(s) did not expose the configured Pi extension: ${f.join(`, `)}`);return u}export{u as ensureLayerPackages};
|
|
2
|
+
//# sourceMappingURL=layerPackageInstaller.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layerPackageInstaller.mjs","names":[],"sources":["../../src/adapters/layerPackageInstaller.ts"],"sourcesContent":["import { isLocalPackageSpecifier, type MajorModesConfig } from '@agimon-ai/doompi-config/majorModes';\nimport { DefaultPackageManager, type PackageManager, SettingsManager } from '@earendil-works/pi-coding-agent';\nimport { createLayerResolvers, type ExtensionLayerResolvers } from '../services/extensionAssembler.ts';\nimport { splitPackageSpecifier } from './modules/moduleResolution.ts';\nimport { piAgentDirectory } from './piSettings.ts';\n\nconst NPM_SOURCE_PREFIX = 'npm:';\n\ntype LayerPackageManager = Pick<PackageManager, 'resolveExtensionSources'>;\n\nexport interface EnsureLayerPackagesOptions {\n repoRoot: string;\n config: MajorModesConfig;\n layers: readonly string[];\n environment?: NodeJS.ProcessEnv;\n}\n\nexport interface LayerPackageInstallerDependencies {\n packageManager?: LayerPackageManager;\n resolvers?: ExtensionLayerResolvers;\n}\n\nfunction resolvePackageEntries(resolvers: ExtensionLayerResolvers, specifier: string): string[] | undefined {\n const entries = resolvers.optionalPackageEntries?.(specifier);\n if (entries !== undefined) return entries;\n const entry = resolvers.optionalPackageEntry(specifier);\n return entry ? [entry] : undefined;\n}\n\n/** Finds required npm packages selected by the active layers that are not installed anywhere DoomPi resolves. */\nexport function missingLayerPackageSpecifiers(\n config: MajorModesConfig,\n layers: readonly string[],\n resolvers: ExtensionLayerResolvers,\n): string[] {\n const missing = new Set<string>();\n for (const layerName of layers) {\n const layer = config.layers[layerName];\n if (!layer) throw new Error(`Unknown layer: ${layerName}`);\n for (const configured of layer.packages ?? []) {\n const specifier = typeof configured === 'string' ? configured : configured.name;\n const optional = typeof configured !== 'string' && configured.optional === true;\n if (optional || isLocalPackageSpecifier(specifier)) continue;\n // An empty entry list means the package exists but declares no usable Pi\n // extension. Leave that validation to the assembler rather than masking a\n // broken install with another copy from the registry.\n if (resolvePackageEntries(resolvers, specifier) === undefined) missing.add(specifier);\n }\n }\n return [...missing];\n}\n\nfunction npmSources(specifiers: readonly string[]): string[] {\n return [...new Set(specifiers.map((specifier) => `${NPM_SOURCE_PREFIX}${splitPackageSpecifier(specifier).name}`))];\n}\n\nfunction createPackageManager(repoRoot: string, environment: NodeJS.ProcessEnv): LayerPackageManager {\n const agentDirectory = piAgentDirectory(environment);\n const settingsManager = SettingsManager.create(repoRoot, agentDirectory, { projectTrusted: true });\n return new DefaultPackageManager({ cwd: repoRoot, agentDir: agentDirectory, settingsManager });\n}\n\n/** Installs missing selected layer packages into Pi's project-local `.pi/npm` store and verifies the retry. */\nexport async function ensureLayerPackages(\n options: EnsureLayerPackagesOptions,\n dependencies: LayerPackageInstallerDependencies = {},\n): Promise<string[]> {\n const environment = options.environment ?? process.env;\n const resolvers = dependencies.resolvers ?? createLayerResolvers(options.repoRoot);\n const missing = missingLayerPackageSpecifiers(options.config, options.layers, resolvers);\n if (missing.length === 0) return [];\n\n const sources = npmSources(missing);\n const packageManager = dependencies.packageManager ?? createPackageManager(options.repoRoot, environment);\n try {\n await packageManager.resolveExtensionSources(sources, { local: true });\n } catch (error) {\n throw new Error(`Failed to install missing DoomPi layer package(s): ${sources.join(', ')}`, { cause: error });\n }\n\n const unresolved = missing.filter((specifier) => !resolvePackageEntries(resolvers, specifier)?.length);\n if (unresolved.length > 0) {\n throw new Error(\n `Installed DoomPi layer package(s) did not expose the configured Pi extension: ${unresolved.join(', ')}`,\n );\n }\n return sources;\n}\n"],"mappings":"gXAsBA,SAAS,EAAsB,EAAoC,EAAyC,CAC1G,IAAM,EAAU,EAAU,yBAAyB,EAAU,CAC7D,GAAI,IAAY,IAAA,GAAW,OAAO,EAClC,IAAM,EAAQ,EAAU,qBAAqB,EAAU,CACvD,OAAO,EAAQ,CAAC,EAAM,CAAG,IAAA,GAI3B,SAAgB,EACd,EACA,EACA,EACU,CACV,IAAM,EAAU,IAAI,IACpB,IAAK,IAAM,KAAa,EAAQ,CAC9B,IAAM,EAAQ,EAAO,OAAO,GAC5B,GAAI,CAAC,EAAO,MAAU,MAAM,kBAAkB,IAAY,CAC1D,IAAK,IAAM,KAAc,EAAM,UAAY,EAAE,CAAE,CAC7C,IAAM,EAAY,OAAO,GAAe,SAAW,EAAa,EAAW,KAC1D,OAAO,GAAe,UAAY,EAAW,WAAa,IAC3D,EAAwB,EAAU,EAI9C,EAAsB,EAAW,EAAU,GAAK,IAAA,IAAW,EAAQ,IAAI,EAAU,EAGzF,MAAO,CAAC,GAAG,EAAQ,CAGrB,SAAS,EAAW,EAAyC,CAC3D,MAAO,CAAC,GAAG,IAAI,IAAI,EAAW,IAAK,GAAc,OAAuB,EAAsB,EAAU,CAAC,OAAO,CAAC,CAAC,CAGpH,SAAS,EAAqB,EAAkB,EAAqD,CACnG,IAAM,EAAiB,EAAiB,EAAY,CAEpD,OAAO,IAAI,EAAsB,CAAE,IAAK,EAAU,SAAU,EAAgB,gBADpD,EAAgB,OAAO,EAAU,EAAgB,CAAE,eAAgB,GAAM,CACN,CAAE,CAAC,CAIhG,eAAsB,EACpB,EACA,EAAkD,EAAE,CACjC,CACnB,IAAM,EAAc,EAAQ,aAAe,QAAQ,IAC7C,EAAY,EAAa,WAAa,EAAqB,EAAQ,SAAS,CAC5E,EAAU,EAA8B,EAAQ,OAAQ,EAAQ,OAAQ,EAAU,CACxF,GAAI,EAAQ,SAAW,EAAG,MAAO,EAAE,CAEnC,IAAM,EAAU,EAAW,EAAQ,CAC7B,EAAiB,EAAa,gBAAkB,EAAqB,EAAQ,SAAU,EAAY,CACzG,GAAI,CACF,MAAM,EAAe,wBAAwB,EAAS,CAAE,MAAO,GAAM,CAAC,OAC/D,EAAO,CACd,MAAU,MAAM,sDAAsD,EAAQ,KAAK,KAAK,GAAI,CAAE,MAAO,EAAO,CAAC,CAG/G,IAAM,EAAa,EAAQ,OAAQ,GAAc,CAAC,EAAsB,EAAW,EAAU,EAAE,OAAO,CACtG,GAAI,EAAW,OAAS,EACtB,MAAU,MACR,iFAAiF,EAAW,KAAK,KAAK,GACvG,CAEH,OAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../services/extensionAssembler.cjs`),n=require(`./config/harnessState.cjs`),r=require(`./mcpFilter.cjs`),i=require(`./pluginMaterializer.cjs`),a=require(`./resourceCollector.cjs`);let o=require(`node:path`);o=e.__toESM(o,1);let s=require(`node:fs`);s=e.__toESM(s,1);let c=require(`@agimon-ai/doompi-config/domains`),l=require(`@agimon-ai/doompi-config/profiles`),u=require(`@agimon-ai/doompi-config/majorModes`),d=require(`@agimon-ai/doompi-config/harnessStore`);async function f(e,t){let{root:s,temporaryDirectory:l}=(0,d.requireHarnessPaths)(t),u=await a.collectResources(s,await i.materializePluginEntries((0,c.resolvePluginEntries)(s,e,[...t.pluginDirectories])),{agents:t.agents,mcp:t.mcp,temporaryDirectory:l,workflowExtension:t.workflowExtension,sharedSkills:(0,c.resolveSharedSkills)(s,e),mcpAllowlist:r.resolveMcpAllowlist(s,e)}),f=n.updateHarnessState({domains:e,skillDirectories:u.skillDirectories,pluginHooks:u.pluginHooks,mcpConfigPath:u.mcpConfigPath});return process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS=u.agentDirectories.join(o.default.delimiter),process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS=u.skillDirectories.join(o.default.delimiter),f}function p(e,r,i){let a=t.filterHookDisabledLayers((0,u.resolveLayers)(e,r),i.hooks);return n.updateHarnessState({majorMode:r,layers:a,hookGroups:(0,u.layerHookGroups)(e,a)})}function m(e,t){return t.filter(t=>{let n=e.layers[t];return!!(n&&((n.extensions?.length??0)>0||(n.packages?.length??0)>0))}).sort()}function h(e,t,n){return m(e,t).join(`,`)!==m(e,n).join(`,`)}async function g(e,t,r){let{root:i,temporaryDirectory:a}=(0,d.requireHarnessPaths)(t),c=(0,l.buildPersonaPrompt)(r??i,e);if(!c)return!1;let u=o.default.join(a,`persona.md`);return await s.default.promises.writeFile(u,`${c}\n`,{mode:384}),n.updateHarnessState({personaFile:u}),!0}async function _(e,t){if(!await g(e.persona,t,e.personaRoot))throw Error(`Profile ${e.name} has no readable persona files`);let r=(0,l.replaceProfileEnvironment)(process.env,t.profileEnvironment,e.env);n.updateHarnessState({profile:e.name,profileEnvironment:r});let i=Object.keys(e.env).sort(),a=i.length>0?`; env defaults ${i.join(`, `)}`:``;return`Loaded ${e.name}: persona ${e.persona}${a}.`}exports.applyDomains=f,exports.applyMajorMode=p,exports.applyPersona=g,exports.applyProfile=_,exports.extensionLayers=m,exports.needsRelaunch=h;
|
|
2
|
+
//# sourceMappingURL=matrixSwitcher.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixSwitcher.cjs","names":["collectResources","materializePluginEntries","resolveMcpAllowlist","updateHarnessState","path","filterHookDisabledLayers","fs"],"sources":["../../src/adapters/matrixSwitcher.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/doompi-config/domains';\nimport { layerHookGroups, type MajorModesConfig, resolveLayers } from '@agimon-ai/doompi-config/majorModes';\nimport { type AgentProfile, buildPersonaPrompt, replaceProfileEnvironment } from '@agimon-ai/doompi-config/profiles';\nimport type { DoomHarnessContext } from '@agimon-ai/doompi-config/types';\nimport { filterHookDisabledLayers } from '../services/extensionAssembler.ts';\nimport { type HarnessState, requireHarnessPaths, updateHarnessState } from './config/harnessState.ts';\nimport { resolveMcpAllowlist } from './mcpFilter.ts';\nimport { materializePluginEntries } from './pluginMaterializer.ts';\nimport { collectResources } from './resourceCollector.ts';\n\nconst PERSONA_FILE = 'persona.md';\n\n/**\n * Live matrix switching.\n *\n * Every axis writes through the harness state module and relies on Pi's reload\n * re-executing extension modules, which drops their module-level caches and\n * makes them re-read the environment. That is the same path /domains has always\n * used; major mode and profile persona changes now share it.\n *\n * What reload cannot do is change the SET of loaded extensions: Pi freezes the\n * CLI --extension list at construction (resource-loader.js:164) and re-resolves\n * that same array on every reload. Callers report those parts as needing a\n * relaunch instead of pretending they applied.\n */\n\n/** Domains: skills, plugin hooks, MCP config, and subagent directories. */\nexport async function applyDomains(domainNames: string[], state: DoomHarnessContext): Promise<HarnessState> {\n const { root, temporaryDirectory } = requireHarnessPaths(state);\n\n const pluginEntries = await materializePluginEntries(\n resolvePluginEntries(root, domainNames, [...state.pluginDirectories]),\n );\n const resources = await collectResources(root, pluginEntries, {\n agents: state.agents,\n mcp: state.mcp,\n temporaryDirectory,\n workflowExtension: state.workflowExtension,\n sharedSkills: resolveSharedSkills(root, domainNames),\n mcpAllowlist: resolveMcpAllowlist(root, domainNames),\n });\n\n const updated = updateHarnessState({\n domains: domainNames,\n skillDirectories: resources.skillDirectories,\n pluginHooks: resources.pluginHooks,\n mcpConfigPath: resources.mcpConfigPath,\n });\n process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(path.delimiter);\n process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(path.delimiter);\n return updated;\n}\n\n/** Applies one major mode and the hook groups its effective layers contribute. */\nexport function applyMajorMode(config: MajorModesConfig, majorMode: string, state: DoomHarnessContext): HarnessState {\n const selected = filterHookDisabledLayers(resolveLayers(config, majorMode), state.hooks);\n return updateHarnessState({ majorMode, layers: selected, hookGroups: layerHookGroups(config, selected) });\n}\n\n/** Layers that contribute extensions or packages, which reload cannot swap. */\nexport function extensionLayers(config: MajorModesConfig, names: string[]): string[] {\n return names\n .filter((name) => {\n const layer = config.layers[name];\n return Boolean(layer && ((layer.extensions?.length ?? 0) > 0 || (layer.packages?.length ?? 0) > 0));\n })\n .sort();\n}\n\n/** Whether a mode change alters the extension set, and so needs a relaunch. */\nexport function needsRelaunch(config: MajorModesConfig, before: string[], after: string[]): boolean {\n return extensionLayers(config, before).join(',') !== extensionLayers(config, after).join(',');\n}\n\n/**\n * Persona: rewrites the assembled prompt file that the persona extension reads.\n *\n * The extension re-reads the file on reload and appends its block to whatever\n * system prompt it is given, so the repository's own AGENTS.md keeps applying\n * underneath. Returns false when the directories hold no readable persona.\n */\nexport async function applyPersona(\n personaDirectory: string,\n state: DoomHarnessContext,\n personaRoot?: string,\n): Promise<boolean> {\n const { root, temporaryDirectory } = requireHarnessPaths(state);\n\n const prompt = buildPersonaPrompt(personaRoot ?? root, personaDirectory);\n if (!prompt) return false;\n\n const personaPath = path.join(temporaryDirectory, PERSONA_FILE);\n await fs.promises.writeFile(personaPath, `${prompt}\\n`, { mode: 0o600 });\n updateHarnessState({ personaFile: personaPath });\n return true;\n}\n\n/**\n * Profile: one persona plus the environment defaults it declares.\n *\n * Lives beside the other switchers rather than in the /profile command,\n * because the synced Pi path applies the same switch from its `--profile` flag\n * before any command exists to run it.\n */\nexport async function applyProfile(profile: AgentProfile, state: DoomHarnessContext): Promise<string> {\n const appliedPersona = await applyPersona(profile.persona, state, profile.personaRoot);\n if (!appliedPersona) throw new Error(`Profile ${profile.name} has no readable persona files`);\n\n const profileEnvironment = replaceProfileEnvironment(process.env, state.profileEnvironment, profile.env);\n updateHarnessState({ profile: profile.name, profileEnvironment });\n\n const environmentKeys = Object.keys(profile.env).sort();\n const environmentSummary = environmentKeys.length > 0 ? `; env defaults ${environmentKeys.join(', ')}` : '';\n return `Loaded ${profile.name}: persona ${profile.persona}${environmentSummary}.`;\n}\n"],"mappings":"+gBA6BA,eAAsB,EAAa,EAAuB,EAAkD,CAC1G,GAAM,CAAE,OAAM,uBAAA,EAAA,EAAA,qBAA2C,EAAM,CAKzD,EAAY,MAAMA,EAAAA,iBAAiB,EAAM,MAHnBC,EAAAA,0BAAAA,EAAAA,EAAAA,sBACL,EAAM,EAAa,CAAC,GAAG,EAAM,kBAAkB,CAAC,CACtE,CAC6D,CAC5D,OAAQ,EAAM,OACd,IAAK,EAAM,IACX,qBACA,kBAAmB,EAAM,kBACzB,cAAA,EAAA,EAAA,qBAAkC,EAAM,EAAY,CACpD,aAAcC,EAAAA,oBAAoB,EAAM,EAAY,CACrD,CAAC,CAEI,EAAUC,EAAAA,mBAAmB,CACjC,QAAS,EACT,iBAAkB,EAAU,iBAC5B,YAAa,EAAU,YACvB,cAAe,EAAU,cAC1B,CAAC,CAGF,MAFA,SAAQ,IAAI,6BAA+B,EAAU,iBAAiB,KAAKC,EAAAA,QAAK,UAAU,CAC1F,QAAQ,IAAI,6BAA+B,EAAU,iBAAiB,KAAKA,EAAAA,QAAK,UAAU,CACnF,EAIT,SAAgB,EAAe,EAA0B,EAAmB,EAAyC,CACnH,IAAM,EAAWC,EAAAA,0BAAAA,EAAAA,EAAAA,eAAuC,EAAQ,EAAU,CAAE,EAAM,MAAM,CACxF,OAAOF,EAAAA,mBAAmB,CAAE,YAAW,OAAQ,EAAU,YAAA,EAAA,EAAA,iBAA4B,EAAQ,EAAS,CAAE,CAAC,CAI3G,SAAgB,EAAgB,EAA0B,EAA2B,CACnF,OAAO,EACJ,OAAQ,GAAS,CAChB,IAAM,EAAQ,EAAO,OAAO,GAC5B,MAAO,GAAQ,KAAW,EAAM,YAAY,QAAU,GAAK,IAAM,EAAM,UAAU,QAAU,GAAK,KAChG,CACD,MAAM,CAIX,SAAgB,EAAc,EAA0B,EAAkB,EAA0B,CAClG,OAAO,EAAgB,EAAQ,EAAO,CAAC,KAAK,IAAI,GAAK,EAAgB,EAAQ,EAAM,CAAC,KAAK,IAAI,CAU/F,eAAsB,EACpB,EACA,EACA,EACkB,CAClB,GAAM,CAAE,OAAM,uBAAA,EAAA,EAAA,qBAA2C,EAAM,CAEzD,GAAA,EAAA,EAAA,oBAA4B,GAAe,EAAM,EAAiB,CACxE,GAAI,CAAC,EAAQ,MAAO,GAEpB,IAAM,EAAcC,EAAAA,QAAK,KAAK,EAAoB,aAAa,CAG/D,OAFA,MAAME,EAAAA,QAAG,SAAS,UAAU,EAAa,GAAG,EAAO,IAAK,CAAE,KAAM,IAAO,CAAC,CACxE,EAAA,mBAAmB,CAAE,YAAa,EAAa,CAAC,CACzC,GAUT,eAAsB,EAAa,EAAuB,EAA4C,CAEpG,GAAI,CAAC,MADwB,EAAa,EAAQ,QAAS,EAAO,EAAQ,YAAY,CACjE,MAAU,MAAM,WAAW,EAAQ,KAAK,gCAAgC,CAE7F,IAAM,GAAA,EAAA,EAAA,2BAA+C,QAAQ,IAAK,EAAM,mBAAoB,EAAQ,IAAI,CACxG,EAAA,mBAAmB,CAAE,QAAS,EAAQ,KAAM,qBAAoB,CAAC,CAEjE,IAAM,EAAkB,OAAO,KAAK,EAAQ,IAAI,CAAC,MAAM,CACjD,EAAqB,EAAgB,OAAS,EAAI,kBAAkB,EAAgB,KAAK,KAAK,GAAK,GACzG,MAAO,UAAU,EAAQ,KAAK,YAAY,EAAQ,UAAU,EAAmB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { HarnessState as HarnessState$1 } from "./config/harnessState.cjs";
|
|
2
|
+
import { MajorModesConfig } from "@agimon-ai/doompi-config/majorModes";
|
|
3
|
+
import { AgentProfile } from "@agimon-ai/doompi-config/profiles";
|
|
4
|
+
import { DoomHarnessContext } from "@agimon-ai/doompi-config/types";
|
|
5
|
+
|
|
6
|
+
//#region src/adapters/matrixSwitcher.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Live matrix switching.
|
|
9
|
+
*
|
|
10
|
+
* Every axis writes through the harness state module and relies on Pi's reload
|
|
11
|
+
* re-executing extension modules, which drops their module-level caches and
|
|
12
|
+
* makes them re-read the environment. That is the same path /domains has always
|
|
13
|
+
* used; major mode and profile persona changes now share it.
|
|
14
|
+
*
|
|
15
|
+
* What reload cannot do is change the SET of loaded extensions: Pi freezes the
|
|
16
|
+
* CLI --extension list at construction (resource-loader.js:164) and re-resolves
|
|
17
|
+
* that same array on every reload. Callers report those parts as needing a
|
|
18
|
+
* relaunch instead of pretending they applied.
|
|
19
|
+
*/
|
|
20
|
+
/** Domains: skills, plugin hooks, MCP config, and subagent directories. */
|
|
21
|
+
declare function applyDomains(domainNames: string[], state: DoomHarnessContext): Promise<HarnessState$1>;
|
|
22
|
+
/** Applies one major mode and the hook groups its effective layers contribute. */
|
|
23
|
+
declare function applyMajorMode(config: MajorModesConfig, majorMode: string, state: DoomHarnessContext): HarnessState$1;
|
|
24
|
+
/** Layers that contribute extensions or packages, which reload cannot swap. */
|
|
25
|
+
declare function extensionLayers(config: MajorModesConfig, names: string[]): string[];
|
|
26
|
+
/** Whether a mode change alters the extension set, and so needs a relaunch. */
|
|
27
|
+
declare function needsRelaunch(config: MajorModesConfig, before: string[], after: string[]): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Persona: rewrites the assembled prompt file that the persona extension reads.
|
|
30
|
+
*
|
|
31
|
+
* The extension re-reads the file on reload and appends its block to whatever
|
|
32
|
+
* system prompt it is given, so the repository's own AGENTS.md keeps applying
|
|
33
|
+
* underneath. Returns false when the directories hold no readable persona.
|
|
34
|
+
*/
|
|
35
|
+
declare function applyPersona(personaDirectory: string, state: DoomHarnessContext, personaRoot?: string): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Profile: one persona plus the environment defaults it declares.
|
|
38
|
+
*
|
|
39
|
+
* Lives beside the other switchers rather than in the /profile command,
|
|
40
|
+
* because the synced Pi path applies the same switch from its `--profile` flag
|
|
41
|
+
* before any command exists to run it.
|
|
42
|
+
*/
|
|
43
|
+
declare function applyProfile(profile: AgentProfile, state: DoomHarnessContext): Promise<string>;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { applyDomains, applyMajorMode, applyPersona, applyProfile, extensionLayers, needsRelaunch };
|
|
46
|
+
//# sourceMappingURL=matrixSwitcher.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrixSwitcher.d.cts","names":[],"sources":["../../src/
|
|
1
|
+
{"version":3,"file":"matrixSwitcher.d.cts","names":[],"sources":["../../src/adapters/matrixSwitcher.ts"],"mappings":";;;;;;;;AA6BA;;;;;;;;;;;;iBAAsB,YAAA,CAAa,WAAA,YAAuB,KAAA,EAAO,kBAAA,GAAqB,OAAA,CAAQ,cAAA;;iBA2B9E,cAAA,CAAe,MAAA,EAAQ,gBAAA,EAAkB,SAAA,UAAmB,KAAA,EAAO,kBAAA,GAAqB,cAAA;AAAxG;AAAA,iBAMgB,eAAA,CAAgB,MAAA,EAAQ,gBAAA,EAAkB,KAAA;;iBAU1C,aAAA,CAAc,MAAA,EAAQ,gBAAA,EAAkB,MAAA,YAAkB,KAAA;;;;;;;;iBAWpD,YAAA,CACpB,gBAAA,UACA,KAAA,EAAO,kBAAA,EACP,WAAA,YACC,OAAA;;;;;AAzBH;;;iBA4CsB,YAAA,CAAa,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,kBAAA,GAAqB,OAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { HarnessState as HarnessState$1 } from "./config/harnessState.mjs";
|
|
2
|
+
import { AgentProfile } from "@agimon-ai/doompi-config/profiles";
|
|
3
|
+
import { MajorModesConfig } from "@agimon-ai/doompi-config/majorModes";
|
|
4
|
+
import { DoomHarnessContext } from "@agimon-ai/doompi-config/types";
|
|
5
|
+
|
|
6
|
+
//#region src/adapters/matrixSwitcher.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Live matrix switching.
|
|
9
|
+
*
|
|
10
|
+
* Every axis writes through the harness state module and relies on Pi's reload
|
|
11
|
+
* re-executing extension modules, which drops their module-level caches and
|
|
12
|
+
* makes them re-read the environment. That is the same path /domains has always
|
|
13
|
+
* used; major mode and profile persona changes now share it.
|
|
14
|
+
*
|
|
15
|
+
* What reload cannot do is change the SET of loaded extensions: Pi freezes the
|
|
16
|
+
* CLI --extension list at construction (resource-loader.js:164) and re-resolves
|
|
17
|
+
* that same array on every reload. Callers report those parts as needing a
|
|
18
|
+
* relaunch instead of pretending they applied.
|
|
19
|
+
*/
|
|
20
|
+
/** Domains: skills, plugin hooks, MCP config, and subagent directories. */
|
|
21
|
+
declare function applyDomains(domainNames: string[], state: DoomHarnessContext): Promise<HarnessState$1>;
|
|
22
|
+
/** Applies one major mode and the hook groups its effective layers contribute. */
|
|
23
|
+
declare function applyMajorMode(config: MajorModesConfig, majorMode: string, state: DoomHarnessContext): HarnessState$1;
|
|
24
|
+
/** Layers that contribute extensions or packages, which reload cannot swap. */
|
|
25
|
+
declare function extensionLayers(config: MajorModesConfig, names: string[]): string[];
|
|
26
|
+
/** Whether a mode change alters the extension set, and so needs a relaunch. */
|
|
27
|
+
declare function needsRelaunch(config: MajorModesConfig, before: string[], after: string[]): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Persona: rewrites the assembled prompt file that the persona extension reads.
|
|
30
|
+
*
|
|
31
|
+
* The extension re-reads the file on reload and appends its block to whatever
|
|
32
|
+
* system prompt it is given, so the repository's own AGENTS.md keeps applying
|
|
33
|
+
* underneath. Returns false when the directories hold no readable persona.
|
|
34
|
+
*/
|
|
35
|
+
declare function applyPersona(personaDirectory: string, state: DoomHarnessContext, personaRoot?: string): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Profile: one persona plus the environment defaults it declares.
|
|
38
|
+
*
|
|
39
|
+
* Lives beside the other switchers rather than in the /profile command,
|
|
40
|
+
* because the synced Pi path applies the same switch from its `--profile` flag
|
|
41
|
+
* before any command exists to run it.
|
|
42
|
+
*/
|
|
43
|
+
declare function applyProfile(profile: AgentProfile, state: DoomHarnessContext): Promise<string>;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { applyDomains, applyMajorMode, applyPersona, applyProfile, extensionLayers, needsRelaunch };
|
|
46
|
+
//# sourceMappingURL=matrixSwitcher.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrixSwitcher.d.mts","names":[],"sources":["../../src/
|
|
1
|
+
{"version":3,"file":"matrixSwitcher.d.mts","names":[],"sources":["../../src/adapters/matrixSwitcher.ts"],"mappings":";;;;;;;;AA6BA;;;;;;;;;;;;iBAAsB,YAAA,CAAa,WAAA,YAAuB,KAAA,EAAO,kBAAA,GAAqB,OAAA,CAAQ,cAAA;;iBA2B9E,cAAA,CAAe,MAAA,EAAQ,gBAAA,EAAkB,SAAA,UAAmB,KAAA,EAAO,kBAAA,GAAqB,cAAA;AAAxG;AAAA,iBAMgB,eAAA,CAAgB,MAAA,EAAQ,gBAAA,EAAkB,KAAA;;iBAU1C,aAAA,CAAc,MAAA,EAAQ,gBAAA,EAAkB,MAAA,YAAkB,KAAA;;;;;;;;iBAWpD,YAAA,CACpB,gBAAA,UACA,KAAA,EAAO,kBAAA,EACP,WAAA,YACC,OAAA;;;;;AAzBH;;;iBA4CsB,YAAA,CAAa,OAAA,EAAS,YAAA,EAAc,KAAA,EAAO,kBAAA,GAAqB,OAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{filterHookDisabledLayers as e}from"../services/extensionAssembler.mjs";import{requireHarnessPaths as t,updateHarnessState as n}from"./config/harnessState.mjs";import{resolveMcpAllowlist as r}from"./mcpFilter.mjs";import{materializePluginEntries as i}from"./pluginMaterializer.mjs";import{collectResources as a}from"./resourceCollector.mjs";import o from"node:path";import s from"node:fs";import{resolvePluginEntries as c,resolveSharedSkills as l}from"@agimon-ai/doompi-config/domains";import{buildPersonaPrompt as u,replaceProfileEnvironment as d}from"@agimon-ai/doompi-config/profiles";import{layerHookGroups as f,resolveLayers as p}from"@agimon-ai/doompi-config/majorModes";async function m(e,s){let{root:u,temporaryDirectory:d}=t(s),f=await a(u,await i(c(u,e,[...s.pluginDirectories])),{agents:s.agents,mcp:s.mcp,temporaryDirectory:d,workflowExtension:s.workflowExtension,sharedSkills:l(u,e),mcpAllowlist:r(u,e)}),p=n({domains:e,skillDirectories:f.skillDirectories,pluginHooks:f.pluginHooks,mcpConfigPath:f.mcpConfigPath});return process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS=f.agentDirectories.join(o.delimiter),process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS=f.skillDirectories.join(o.delimiter),p}function h(t,r,i){let a=e(p(t,r),i.hooks);return n({majorMode:r,layers:a,hookGroups:f(t,a)})}function g(e,t){return t.filter(t=>{let n=e.layers[t];return!!(n&&((n.extensions?.length??0)>0||(n.packages?.length??0)>0))}).sort()}function _(e,t,n){return g(e,t).join(`,`)!==g(e,n).join(`,`)}async function v(e,r,i){let{root:a,temporaryDirectory:c}=t(r),l=u(i??a,e);if(!l)return!1;let d=o.join(c,`persona.md`);return await s.promises.writeFile(d,`${l}\n`,{mode:384}),n({personaFile:d}),!0}async function y(e,t){if(!await v(e.persona,t,e.personaRoot))throw Error(`Profile ${e.name} has no readable persona files`);let r=d(process.env,t.profileEnvironment,e.env);n({profile:e.name,profileEnvironment:r});let i=Object.keys(e.env).sort(),a=i.length>0?`; env defaults ${i.join(`, `)}`:``;return`Loaded ${e.name}: persona ${e.persona}${a}.`}export{m as applyDomains,h as applyMajorMode,v as applyPersona,y as applyProfile,g as extensionLayers,_ as needsRelaunch};
|
|
2
|
+
//# sourceMappingURL=matrixSwitcher.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixSwitcher.mjs","names":[],"sources":["../../src/adapters/matrixSwitcher.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/doompi-config/domains';\nimport { layerHookGroups, type MajorModesConfig, resolveLayers } from '@agimon-ai/doompi-config/majorModes';\nimport { type AgentProfile, buildPersonaPrompt, replaceProfileEnvironment } from '@agimon-ai/doompi-config/profiles';\nimport type { DoomHarnessContext } from '@agimon-ai/doompi-config/types';\nimport { filterHookDisabledLayers } from '../services/extensionAssembler.ts';\nimport { type HarnessState, requireHarnessPaths, updateHarnessState } from './config/harnessState.ts';\nimport { resolveMcpAllowlist } from './mcpFilter.ts';\nimport { materializePluginEntries } from './pluginMaterializer.ts';\nimport { collectResources } from './resourceCollector.ts';\n\nconst PERSONA_FILE = 'persona.md';\n\n/**\n * Live matrix switching.\n *\n * Every axis writes through the harness state module and relies on Pi's reload\n * re-executing extension modules, which drops their module-level caches and\n * makes them re-read the environment. That is the same path /domains has always\n * used; major mode and profile persona changes now share it.\n *\n * What reload cannot do is change the SET of loaded extensions: Pi freezes the\n * CLI --extension list at construction (resource-loader.js:164) and re-resolves\n * that same array on every reload. Callers report those parts as needing a\n * relaunch instead of pretending they applied.\n */\n\n/** Domains: skills, plugin hooks, MCP config, and subagent directories. */\nexport async function applyDomains(domainNames: string[], state: DoomHarnessContext): Promise<HarnessState> {\n const { root, temporaryDirectory } = requireHarnessPaths(state);\n\n const pluginEntries = await materializePluginEntries(\n resolvePluginEntries(root, domainNames, [...state.pluginDirectories]),\n );\n const resources = await collectResources(root, pluginEntries, {\n agents: state.agents,\n mcp: state.mcp,\n temporaryDirectory,\n workflowExtension: state.workflowExtension,\n sharedSkills: resolveSharedSkills(root, domainNames),\n mcpAllowlist: resolveMcpAllowlist(root, domainNames),\n });\n\n const updated = updateHarnessState({\n domains: domainNames,\n skillDirectories: resources.skillDirectories,\n pluginHooks: resources.pluginHooks,\n mcpConfigPath: resources.mcpConfigPath,\n });\n process.env.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(path.delimiter);\n process.env.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(path.delimiter);\n return updated;\n}\n\n/** Applies one major mode and the hook groups its effective layers contribute. */\nexport function applyMajorMode(config: MajorModesConfig, majorMode: string, state: DoomHarnessContext): HarnessState {\n const selected = filterHookDisabledLayers(resolveLayers(config, majorMode), state.hooks);\n return updateHarnessState({ majorMode, layers: selected, hookGroups: layerHookGroups(config, selected) });\n}\n\n/** Layers that contribute extensions or packages, which reload cannot swap. */\nexport function extensionLayers(config: MajorModesConfig, names: string[]): string[] {\n return names\n .filter((name) => {\n const layer = config.layers[name];\n return Boolean(layer && ((layer.extensions?.length ?? 0) > 0 || (layer.packages?.length ?? 0) > 0));\n })\n .sort();\n}\n\n/** Whether a mode change alters the extension set, and so needs a relaunch. */\nexport function needsRelaunch(config: MajorModesConfig, before: string[], after: string[]): boolean {\n return extensionLayers(config, before).join(',') !== extensionLayers(config, after).join(',');\n}\n\n/**\n * Persona: rewrites the assembled prompt file that the persona extension reads.\n *\n * The extension re-reads the file on reload and appends its block to whatever\n * system prompt it is given, so the repository's own AGENTS.md keeps applying\n * underneath. Returns false when the directories hold no readable persona.\n */\nexport async function applyPersona(\n personaDirectory: string,\n state: DoomHarnessContext,\n personaRoot?: string,\n): Promise<boolean> {\n const { root, temporaryDirectory } = requireHarnessPaths(state);\n\n const prompt = buildPersonaPrompt(personaRoot ?? root, personaDirectory);\n if (!prompt) return false;\n\n const personaPath = path.join(temporaryDirectory, PERSONA_FILE);\n await fs.promises.writeFile(personaPath, `${prompt}\\n`, { mode: 0o600 });\n updateHarnessState({ personaFile: personaPath });\n return true;\n}\n\n/**\n * Profile: one persona plus the environment defaults it declares.\n *\n * Lives beside the other switchers rather than in the /profile command,\n * because the synced Pi path applies the same switch from its `--profile` flag\n * before any command exists to run it.\n */\nexport async function applyProfile(profile: AgentProfile, state: DoomHarnessContext): Promise<string> {\n const appliedPersona = await applyPersona(profile.persona, state, profile.personaRoot);\n if (!appliedPersona) throw new Error(`Profile ${profile.name} has no readable persona files`);\n\n const profileEnvironment = replaceProfileEnvironment(process.env, state.profileEnvironment, profile.env);\n updateHarnessState({ profile: profile.name, profileEnvironment });\n\n const environmentKeys = Object.keys(profile.env).sort();\n const environmentSummary = environmentKeys.length > 0 ? `; env defaults ${environmentKeys.join(', ')}` : '';\n return `Loaded ${profile.name}: persona ${profile.persona}${environmentSummary}.`;\n}\n"],"mappings":"2qBA6BA,eAAsB,EAAa,EAAuB,EAAkD,CAC1G,GAAM,CAAE,OAAM,sBAAuB,EAAoB,EAAM,CAKzD,EAAY,MAAM,EAAiB,EAAM,MAHnB,EAC1B,EAAqB,EAAM,EAAa,CAAC,GAAG,EAAM,kBAAkB,CAAC,CACtE,CAC6D,CAC5D,OAAQ,EAAM,OACd,IAAK,EAAM,IACX,qBACA,kBAAmB,EAAM,kBACzB,aAAc,EAAoB,EAAM,EAAY,CACpD,aAAc,EAAoB,EAAM,EAAY,CACrD,CAAC,CAEI,EAAU,EAAmB,CACjC,QAAS,EACT,iBAAkB,EAAU,iBAC5B,YAAa,EAAU,YACvB,cAAe,EAAU,cAC1B,CAAC,CAGF,MAFA,SAAQ,IAAI,6BAA+B,EAAU,iBAAiB,KAAK,EAAK,UAAU,CAC1F,QAAQ,IAAI,6BAA+B,EAAU,iBAAiB,KAAK,EAAK,UAAU,CACnF,EAIT,SAAgB,EAAe,EAA0B,EAAmB,EAAyC,CACnH,IAAM,EAAW,EAAyB,EAAc,EAAQ,EAAU,CAAE,EAAM,MAAM,CACxF,OAAO,EAAmB,CAAE,YAAW,OAAQ,EAAU,WAAY,EAAgB,EAAQ,EAAS,CAAE,CAAC,CAI3G,SAAgB,EAAgB,EAA0B,EAA2B,CACnF,OAAO,EACJ,OAAQ,GAAS,CAChB,IAAM,EAAQ,EAAO,OAAO,GAC5B,MAAO,GAAQ,KAAW,EAAM,YAAY,QAAU,GAAK,IAAM,EAAM,UAAU,QAAU,GAAK,KAChG,CACD,MAAM,CAIX,SAAgB,EAAc,EAA0B,EAAkB,EAA0B,CAClG,OAAO,EAAgB,EAAQ,EAAO,CAAC,KAAK,IAAI,GAAK,EAAgB,EAAQ,EAAM,CAAC,KAAK,IAAI,CAU/F,eAAsB,EACpB,EACA,EACA,EACkB,CAClB,GAAM,CAAE,OAAM,sBAAuB,EAAoB,EAAM,CAEzD,EAAS,EAAmB,GAAe,EAAM,EAAiB,CACxE,GAAI,CAAC,EAAQ,MAAO,GAEpB,IAAM,EAAc,EAAK,KAAK,EAAoB,aAAa,CAG/D,OAFA,MAAM,EAAG,SAAS,UAAU,EAAa,GAAG,EAAO,IAAK,CAAE,KAAM,IAAO,CAAC,CACxE,EAAmB,CAAE,YAAa,EAAa,CAAC,CACzC,GAUT,eAAsB,EAAa,EAAuB,EAA4C,CAEpG,GAAI,CAAC,MADwB,EAAa,EAAQ,QAAS,EAAO,EAAQ,YAAY,CACjE,MAAU,MAAM,WAAW,EAAQ,KAAK,gCAAgC,CAE7F,IAAM,EAAqB,EAA0B,QAAQ,IAAK,EAAM,mBAAoB,EAAQ,IAAI,CACxG,EAAmB,CAAE,QAAS,EAAQ,KAAM,qBAAoB,CAAC,CAEjE,IAAM,EAAkB,OAAO,KAAK,EAAQ,IAAI,CAAC,MAAM,CACjD,EAAqB,EAAgB,OAAS,EAAI,kBAAkB,EAAgB,KAAK,KAAK,GAAK,GACzG,MAAO,UAAU,EAAQ,KAAK,YAAY,EAAQ,UAAU,EAAmB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`node:path`);t=e.__toESM(t,1);let n=require(`node:fs`);n=e.__toESM(n,1);let r=require(`@agimon-ai/doompi-config/domains`),i=require(`yaml`);const a=`agiflow-proxy`,o=`mcp-config.yaml`,s=`--config`;function c(e,t){let n=(0,r.loadDomains)(e),i=(0,r.expandDomainNames)(n,t);if(i.length===0)return;let a=new Set,o=new Set;for(let e of i){let t=n.domains[e]?.mcp;if(!t)return;for(let e of t.servers??[])a.add(e);for(let e of t.proxy??[])o.add(e)}return{servers:[...a],proxy:[...o]}}function l(e,t){if(!t||t.length===0)return e;let n=e.mcpServers??{},r={};for(let[e,i]of Object.entries(n))t.includes(e)&&(r[e]=i);return{...e,mcpServers:r}}function u(e,t){if(!t||t.length===0)return e;let n=(0,i.parse)(e)??{},r=n.mcpServers??{},a={},o=[];for(let[e,n]of Object.entries(r))t.includes(e)?a[e]=n:o.push(e);return`${[`# Generated by doompi for this run. Do not edit.`,`# Upstreams kept: ${Object.keys(a).join(`, `)||`(none)`}`,`# Upstreams removed by the domain allowlist: ${o.join(`, `)||`(none)`}`,``].join(`
|
|
2
|
+
`)}${(0,i.stringify)({...n,mcpServers:a})}`}async function d(e,t){try{return await n.default.promises.copyFile(e,t),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}async function f(e,r,i){await n.default.promises.mkdir(i,{recursive:!0});let c=JSON.parse(await n.default.promises.readFile(e,`utf8`)),l=c.mcpServers??{},u=l[a],f=t.default.join(r,o);if(u){let e=[...u.args??[]],n=e.indexOf(s);if(n!==-1){let r=t.default.join(i,o);await d(f,r)&&(e[n+1]=r,l[a]={...u,args:e})}}let p=t.default.join(i,`mcp.json`);return await n.default.promises.writeFile(p,`${JSON.stringify({...c,mcpServers:l},null,2)}\n`,{mode:384}),p}async function p(e,r,i,c){if(!r)return e;let d=l(e,r.servers),f=d.mcpServers??{},p=f[a];if(!p||!r.proxy||r.proxy.length===0)return d;let m=[...p.args??[]],h=m.indexOf(s);if(h===-1||!m[h+1])return d;let g=t.default.resolve(i,m[h+1]),_;try{_=await n.default.promises.readFile(g,`utf8`)}catch(e){if(e.code===`ENOENT`)return d;throw e}let v=t.default.join(c,o);return await n.default.promises.writeFile(v,u(_,r.proxy),{mode:384}),m[h+1]=v,{...d,mcpServers:{...f,[a]:{...p,args:m}}}}exports.PROXY_SERVER_NAME=a,exports.applyMcpAllowlist=p,exports.filterMcpServers=l,exports.filterProxyConfig=u,exports.persistMcpConfig=f,exports.resolveMcpAllowlist=c;
|
|
3
|
+
//# sourceMappingURL=mcpFilter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpFilter.cjs","names":["fs","path"],"sources":["../../src/adapters/mcpFilter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { type DomainMcpAllowlist, expandDomainNames, loadDomains } from '@agimon-ai/doompi-config/domains';\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml';\n\n/** Server name in .mcp.json whose upstreams are declared in mcp-config.yaml. */\nexport const PROXY_SERVER_NAME = 'agiflow-proxy';\nconst PROXY_CONFIG_FILE = 'mcp-config.yaml';\nconst CONFIG_ARGUMENT = '--config';\n\ntype JsonObject = Record<string, unknown>;\n\n/**\n * Unions the mcp allowlists of the selected domains.\n *\n * Returns undefined when any selected domain omits `mcp`, which means \"give me\n * everything\". Filtering only kicks in once every selected domain has opted in,\n * so a domain that has not been migrated yet cannot silently lose its tools.\n */\nexport function resolveMcpAllowlist(repoRoot: string, domainNames: string[]): DomainMcpAllowlist | undefined {\n const manifest = loadDomains(repoRoot);\n const expanded = expandDomainNames(manifest, domainNames);\n if (expanded.length === 0) return undefined;\n\n const servers = new Set<string>();\n const proxy = new Set<string>();\n for (const name of expanded) {\n const allowlist = manifest.domains[name]?.mcp;\n if (!allowlist) return undefined;\n for (const server of allowlist.servers ?? []) servers.add(server);\n for (const upstream of allowlist.proxy ?? []) proxy.add(upstream);\n }\n return { servers: [...servers], proxy: [...proxy] };\n}\n\n/** Drops servers that are not on the allowlist. An empty list means keep all. */\nexport function filterMcpServers(config: JsonObject, allowed?: string[]): JsonObject {\n if (!allowed || allowed.length === 0) return config;\n const servers = (config.mcpServers ?? {}) as Record<string, unknown>;\n const kept: Record<string, unknown> = {};\n for (const [name, definition] of Object.entries(servers)) {\n if (allowed.includes(name)) kept[name] = definition;\n }\n return { ...config, mcpServers: kept };\n}\n\n/**\n * Rewrites the proxy's upstream list, keeping only allowed servers.\n *\n * Entries are removed rather than marked disabled so a filtered upstream cannot\n * be reached even if the proxy ignores the disabled flag. Comments in the\n * source file are not preserved; the result is a per-run temporary file.\n */\nexport function filterProxyConfig(yamlText: string, allowed?: string[]): string {\n if (!allowed || allowed.length === 0) return yamlText;\n const config = (parseYaml(yamlText) ?? {}) as JsonObject;\n const servers = (config.mcpServers ?? {}) as Record<string, unknown>;\n const kept: Record<string, unknown> = {};\n const dropped: string[] = [];\n for (const [name, definition] of Object.entries(servers)) {\n if (allowed.includes(name)) kept[name] = definition;\n else dropped.push(name);\n }\n const header = [\n '# Generated by doompi for this run. Do not edit.',\n `# Upstreams kept: ${Object.keys(kept).join(', ') || '(none)'}`,\n `# Upstreams removed by the domain allowlist: ${dropped.join(', ') || '(none)'}`,\n '',\n ].join('\\n');\n return `${header}${stringifyYaml({ ...config, mcpServers: kept })}`;\n}\n\nasync function copyFileIfPresent(source: string, target: string): Promise<boolean> {\n try {\n await fs.promises.copyFile(source, target);\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return false;\n throw error;\n }\n}\n\n/**\n * Copies a generated MCP config out of the run directory so another frontend\n * can use it, keeping the proxy's --config pointing at the copy.\n *\n * The run directory is deleted when the harness exits, so emitting for\n * claude.sh or codex.sh has to relocate both files together.\n */\nexport async function persistMcpConfig(\n sourceConfigPath: string,\n temporaryDirectory: string,\n targetDirectory: string,\n): Promise<string> {\n await fs.promises.mkdir(targetDirectory, { recursive: true });\n const config = JSON.parse(await fs.promises.readFile(sourceConfigPath, 'utf8')) as JsonObject;\n const servers = (config.mcpServers ?? {}) as Record<string, JsonObject>;\n const proxy = servers[PROXY_SERVER_NAME];\n const generatedProxyConfig = path.join(temporaryDirectory, PROXY_CONFIG_FILE);\n\n if (proxy) {\n const args = [...((proxy.args ?? []) as string[])];\n const configIndex = args.indexOf(CONFIG_ARGUMENT);\n if (configIndex !== -1) {\n const targetProxyConfig = path.join(targetDirectory, PROXY_CONFIG_FILE);\n if (await copyFileIfPresent(generatedProxyConfig, targetProxyConfig)) {\n args[configIndex + 1] = targetProxyConfig;\n servers[PROXY_SERVER_NAME] = { ...proxy, args };\n }\n }\n }\n\n const targetPath = path.join(targetDirectory, 'mcp.json');\n await fs.promises.writeFile(targetPath, `${JSON.stringify({ ...config, mcpServers: servers }, null, 2)}\\n`, {\n mode: 0o600,\n });\n return targetPath;\n}\n\n/**\n * Applies the allowlist to a merged MCP config, writing a filtered proxy config\n * into the run directory and repointing the proxy at it when needed.\n */\nexport async function applyMcpAllowlist(\n config: JsonObject,\n allowlist: DomainMcpAllowlist | undefined,\n repoRoot: string,\n temporaryDirectory: string,\n): Promise<JsonObject> {\n if (!allowlist) return config;\n const filtered = filterMcpServers(config, allowlist.servers);\n const servers = (filtered.mcpServers ?? {}) as Record<string, JsonObject>;\n const proxy = servers[PROXY_SERVER_NAME];\n if (!proxy || !allowlist.proxy || allowlist.proxy.length === 0) return filtered;\n\n const args = [...((proxy.args ?? []) as string[])];\n const configIndex = args.indexOf(CONFIG_ARGUMENT);\n if (configIndex === -1 || !args[configIndex + 1]) return filtered;\n\n const sourcePath = path.resolve(repoRoot, args[configIndex + 1]);\n let sourceConfig: string;\n try {\n sourceConfig = await fs.promises.readFile(sourcePath, 'utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return filtered;\n throw error;\n }\n const targetPath = path.join(temporaryDirectory, PROXY_CONFIG_FILE);\n await fs.promises.writeFile(targetPath, filterProxyConfig(sourceConfig, allowlist.proxy), { mode: 0o600 });\n args[configIndex + 1] = targetPath;\n return { ...filtered, mcpServers: { ...servers, [PROXY_SERVER_NAME]: { ...proxy, args } } };\n}\n"],"mappings":"+MAMA,MAAa,EAAoB,gBAC3B,EAAoB,kBACpB,EAAkB,WAWxB,SAAgB,EAAoB,EAAkB,EAAuD,CAC3G,IAAM,GAAA,EAAA,EAAA,aAAuB,EAAS,CAChC,GAAA,EAAA,EAAA,mBAA6B,EAAU,EAAY,CACzD,GAAI,EAAS,SAAW,EAAG,OAE3B,IAAM,EAAU,IAAI,IACd,EAAQ,IAAI,IAClB,IAAK,IAAM,KAAQ,EAAU,CAC3B,IAAM,EAAY,EAAS,QAAQ,IAAO,IAC1C,GAAI,CAAC,EAAW,OAChB,IAAK,IAAM,KAAU,EAAU,SAAW,EAAE,CAAE,EAAQ,IAAI,EAAO,CACjE,IAAK,IAAM,KAAY,EAAU,OAAS,EAAE,CAAE,EAAM,IAAI,EAAS,CAEnE,MAAO,CAAE,QAAS,CAAC,GAAG,EAAQ,CAAE,MAAO,CAAC,GAAG,EAAM,CAAE,CAIrD,SAAgB,EAAiB,EAAoB,EAAgC,CACnF,GAAI,CAAC,GAAW,EAAQ,SAAW,EAAG,OAAO,EAC7C,IAAM,EAAW,EAAO,YAAc,EAAE,CAClC,EAAgC,EAAE,CACxC,IAAK,GAAM,CAAC,EAAM,KAAe,OAAO,QAAQ,EAAQ,CAClD,EAAQ,SAAS,EAAK,GAAE,EAAK,GAAQ,GAE3C,MAAO,CAAE,GAAG,EAAQ,WAAY,EAAM,CAUxC,SAAgB,EAAkB,EAAkB,EAA4B,CAC9E,GAAI,CAAC,GAAW,EAAQ,SAAW,EAAG,OAAO,EAC7C,IAAM,GAAA,EAAA,EAAA,OAAoB,EAAS,EAAI,EAAE,CACnC,EAAW,EAAO,YAAc,EAAE,CAClC,EAAgC,EAAE,CAClC,EAAoB,EAAE,CAC5B,IAAK,GAAM,CAAC,EAAM,KAAe,OAAO,QAAQ,EAAQ,CAClD,EAAQ,SAAS,EAAK,CAAE,EAAK,GAAQ,EACpC,EAAQ,KAAK,EAAK,CAQzB,MAAO,GANQ,CACb,mDACA,qBAAqB,OAAO,KAAK,EAAK,CAAC,KAAK,KAAK,EAAI,WACrD,gDAAgD,EAAQ,KAAK,KAAK,EAAI,WACtE,GACD,CAAC,KAAK;EACS,IAAA,EAAA,EAAA,WAAiB,CAAE,GAAG,EAAQ,WAAY,EAAM,CAAC,GAGnE,eAAe,EAAkB,EAAgB,EAAkC,CACjF,GAAI,CAEF,OADA,MAAMA,EAAAA,QAAG,SAAS,SAAS,EAAQ,EAAO,CACnC,SACA,EAAO,CACd,GAAK,EAAgC,OAAS,SAAU,MAAO,GAC/D,MAAM,GAWV,eAAsB,EACpB,EACA,EACA,EACiB,CACjB,MAAMA,EAAAA,QAAG,SAAS,MAAM,EAAiB,CAAE,UAAW,GAAM,CAAC,CAC7D,IAAM,EAAS,KAAK,MAAM,MAAMA,EAAAA,QAAG,SAAS,SAAS,EAAkB,OAAO,CAAC,CACzE,EAAW,EAAO,YAAc,EAAE,CAClC,EAAQ,EAAQ,GAChB,EAAuBC,EAAAA,QAAK,KAAK,EAAoB,EAAkB,CAE7E,GAAI,EAAO,CACT,IAAM,EAAO,CAAC,GAAK,EAAM,MAAQ,EAAE,CAAe,CAC5C,EAAc,EAAK,QAAQ,EAAgB,CACjD,GAAI,IAAgB,GAAI,CACtB,IAAM,EAAoBA,EAAAA,QAAK,KAAK,EAAiB,EAAkB,CACnE,MAAM,EAAkB,EAAsB,EAAkB,GAClE,EAAK,EAAc,GAAK,EACxB,EAAQ,GAAqB,CAAE,GAAG,EAAO,OAAM,GAKrD,IAAM,EAAaA,EAAAA,QAAK,KAAK,EAAiB,WAAW,CAIzD,OAHA,MAAMD,EAAAA,QAAG,SAAS,UAAU,EAAY,GAAG,KAAK,UAAU,CAAE,GAAG,EAAQ,WAAY,EAAS,CAAE,KAAM,EAAE,CAAC,IAAK,CAC1G,KAAM,IACP,CAAC,CACK,EAOT,eAAsB,EACpB,EACA,EACA,EACA,EACqB,CACrB,GAAI,CAAC,EAAW,OAAO,EACvB,IAAM,EAAW,EAAiB,EAAQ,EAAU,QAAQ,CACtD,EAAW,EAAS,YAAc,EAAE,CACpC,EAAQ,EAAQ,GACtB,GAAI,CAAC,GAAS,CAAC,EAAU,OAAS,EAAU,MAAM,SAAW,EAAG,OAAO,EAEvE,IAAM,EAAO,CAAC,GAAK,EAAM,MAAQ,EAAE,CAAe,CAC5C,EAAc,EAAK,QAAQ,EAAgB,CACjD,GAAI,IAAgB,IAAM,CAAC,EAAK,EAAc,GAAI,OAAO,EAEzD,IAAM,EAAaC,EAAAA,QAAK,QAAQ,EAAU,EAAK,EAAc,GAAG,CAC5D,EACJ,GAAI,CACF,EAAe,MAAMD,EAAAA,QAAG,SAAS,SAAS,EAAY,OAAO,OACtD,EAAO,CACd,GAAK,EAAgC,OAAS,SAAU,OAAO,EAC/D,MAAM,EAER,IAAM,EAAaC,EAAAA,QAAK,KAAK,EAAoB,EAAkB,CAGnE,OAFA,MAAMD,EAAAA,QAAG,SAAS,UAAU,EAAY,EAAkB,EAAc,EAAU,MAAM,CAAE,CAAE,KAAM,IAAO,CAAC,CAC1G,EAAK,EAAc,GAAK,EACjB,CAAE,GAAG,EAAU,WAAY,CAAE,GAAG,GAAU,GAAoB,CAAE,GAAG,EAAO,OAAM,CAAE,CAAE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DomainMcpAllowlist } from "@agimon-ai/doompi-config/domains";
|
|
2
|
+
|
|
3
|
+
//#region src/adapters/mcpFilter.d.ts
|
|
4
|
+
/** Server name in .mcp.json whose upstreams are declared in mcp-config.yaml. */
|
|
5
|
+
declare const PROXY_SERVER_NAME = "agiflow-proxy";
|
|
6
|
+
type JsonObject = Record<string, unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* Unions the mcp allowlists of the selected domains.
|
|
9
|
+
*
|
|
10
|
+
* Returns undefined when any selected domain omits `mcp`, which means "give me
|
|
11
|
+
* everything". Filtering only kicks in once every selected domain has opted in,
|
|
12
|
+
* so a domain that has not been migrated yet cannot silently lose its tools.
|
|
13
|
+
*/
|
|
14
|
+
declare function resolveMcpAllowlist(repoRoot: string, domainNames: string[]): DomainMcpAllowlist | undefined;
|
|
15
|
+
/** Drops servers that are not on the allowlist. An empty list means keep all. */
|
|
16
|
+
declare function filterMcpServers(config: JsonObject, allowed?: string[]): JsonObject;
|
|
17
|
+
/**
|
|
18
|
+
* Rewrites the proxy's upstream list, keeping only allowed servers.
|
|
19
|
+
*
|
|
20
|
+
* Entries are removed rather than marked disabled so a filtered upstream cannot
|
|
21
|
+
* be reached even if the proxy ignores the disabled flag. Comments in the
|
|
22
|
+
* source file are not preserved; the result is a per-run temporary file.
|
|
23
|
+
*/
|
|
24
|
+
declare function filterProxyConfig(yamlText: string, allowed?: string[]): string;
|
|
25
|
+
/**
|
|
26
|
+
* Copies a generated MCP config out of the run directory so another frontend
|
|
27
|
+
* can use it, keeping the proxy's --config pointing at the copy.
|
|
28
|
+
*
|
|
29
|
+
* The run directory is deleted when the harness exits, so emitting for
|
|
30
|
+
* claude.sh or codex.sh has to relocate both files together.
|
|
31
|
+
*/
|
|
32
|
+
declare function persistMcpConfig(sourceConfigPath: string, temporaryDirectory: string, targetDirectory: string): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Applies the allowlist to a merged MCP config, writing a filtered proxy config
|
|
35
|
+
* into the run directory and repointing the proxy at it when needed.
|
|
36
|
+
*/
|
|
37
|
+
declare function applyMcpAllowlist(config: JsonObject, allowlist: DomainMcpAllowlist | undefined, repoRoot: string, temporaryDirectory: string): Promise<JsonObject>;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { PROXY_SERVER_NAME, applyMcpAllowlist, filterMcpServers, filterProxyConfig, persistMcpConfig, resolveMcpAllowlist };
|
|
40
|
+
//# sourceMappingURL=mcpFilter.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpFilter.d.cts","names":[],"sources":["../../src/adapters/mcpFilter.ts"],"mappings":";;;;cAMa,iBAAA;AAAA,KAIR,UAAA,GAAa,MAAA;;;;;AAJ+B;;;iBAajC,mBAAA,CAAoB,QAAA,UAAkB,WAAA,aAAwB,kBAAA;;iBAiB9D,gBAAA,CAAiB,MAAA,EAAQ,UAAA,EAAY,OAAA,cAAqB,UAAA;;;;;;;;iBAiB1D,iBAAA,CAAkB,QAAA,UAAkB,OAAA;AAjBpD;;;;;;;AAAA,iBAqDsB,gBAAA,CACpB,gBAAA,UACA,kBAAA,UACA,eAAA,WACC,OAAA;;;AAxCH;;iBAsEsB,iBAAA,CACpB,MAAA,EAAQ,UAAA,EACR,SAAA,EAAW,kBAAA,cACX,QAAA,UACA,kBAAA,WACC,OAAA,CAAQ,UAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DomainMcpAllowlist } from "@agimon-ai/doompi-config/domains";
|
|
2
|
+
|
|
3
|
+
//#region src/adapters/mcpFilter.d.ts
|
|
4
|
+
/** Server name in .mcp.json whose upstreams are declared in mcp-config.yaml. */
|
|
5
|
+
declare const PROXY_SERVER_NAME = "agiflow-proxy";
|
|
6
|
+
type JsonObject = Record<string, unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* Unions the mcp allowlists of the selected domains.
|
|
9
|
+
*
|
|
10
|
+
* Returns undefined when any selected domain omits `mcp`, which means "give me
|
|
11
|
+
* everything". Filtering only kicks in once every selected domain has opted in,
|
|
12
|
+
* so a domain that has not been migrated yet cannot silently lose its tools.
|
|
13
|
+
*/
|
|
14
|
+
declare function resolveMcpAllowlist(repoRoot: string, domainNames: string[]): DomainMcpAllowlist | undefined;
|
|
15
|
+
/** Drops servers that are not on the allowlist. An empty list means keep all. */
|
|
16
|
+
declare function filterMcpServers(config: JsonObject, allowed?: string[]): JsonObject;
|
|
17
|
+
/**
|
|
18
|
+
* Rewrites the proxy's upstream list, keeping only allowed servers.
|
|
19
|
+
*
|
|
20
|
+
* Entries are removed rather than marked disabled so a filtered upstream cannot
|
|
21
|
+
* be reached even if the proxy ignores the disabled flag. Comments in the
|
|
22
|
+
* source file are not preserved; the result is a per-run temporary file.
|
|
23
|
+
*/
|
|
24
|
+
declare function filterProxyConfig(yamlText: string, allowed?: string[]): string;
|
|
25
|
+
/**
|
|
26
|
+
* Copies a generated MCP config out of the run directory so another frontend
|
|
27
|
+
* can use it, keeping the proxy's --config pointing at the copy.
|
|
28
|
+
*
|
|
29
|
+
* The run directory is deleted when the harness exits, so emitting for
|
|
30
|
+
* claude.sh or codex.sh has to relocate both files together.
|
|
31
|
+
*/
|
|
32
|
+
declare function persistMcpConfig(sourceConfigPath: string, temporaryDirectory: string, targetDirectory: string): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Applies the allowlist to a merged MCP config, writing a filtered proxy config
|
|
35
|
+
* into the run directory and repointing the proxy at it when needed.
|
|
36
|
+
*/
|
|
37
|
+
declare function applyMcpAllowlist(config: JsonObject, allowlist: DomainMcpAllowlist | undefined, repoRoot: string, temporaryDirectory: string): Promise<JsonObject>;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { PROXY_SERVER_NAME, applyMcpAllowlist, filterMcpServers, filterProxyConfig, persistMcpConfig, resolveMcpAllowlist };
|
|
40
|
+
//# sourceMappingURL=mcpFilter.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpFilter.d.mts","names":[],"sources":["../../src/adapters/mcpFilter.ts"],"mappings":";;;;cAMa,iBAAA;AAAA,KAIR,UAAA,GAAa,MAAA;;;;;AAJ+B;;;iBAajC,mBAAA,CAAoB,QAAA,UAAkB,WAAA,aAAwB,kBAAA;;iBAiB9D,gBAAA,CAAiB,MAAA,EAAQ,UAAA,EAAY,OAAA,cAAqB,UAAA;;;;;;;;iBAiB1D,iBAAA,CAAkB,QAAA,UAAkB,OAAA;AAjBpD;;;;;;;AAAA,iBAqDsB,gBAAA,CACpB,gBAAA,UACA,kBAAA,UACA,eAAA,WACC,OAAA;;;AAxCH;;iBAsEsB,iBAAA,CACpB,MAAA,EAAQ,UAAA,EACR,SAAA,EAAW,kBAAA,cACX,QAAA,UACA,kBAAA,WACC,OAAA,CAAQ,UAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import e from"node:path";import t from"node:fs";import{expandDomainNames as n,loadDomains as r}from"@agimon-ai/doompi-config/domains";import{parse as i,stringify as a}from"yaml";const o=`agiflow-proxy`,s=`mcp-config.yaml`,c=`--config`;function l(e,t){let i=r(e),a=n(i,t);if(a.length===0)return;let o=new Set,s=new Set;for(let e of a){let t=i.domains[e]?.mcp;if(!t)return;for(let e of t.servers??[])o.add(e);for(let e of t.proxy??[])s.add(e)}return{servers:[...o],proxy:[...s]}}function u(e,t){if(!t||t.length===0)return e;let n=e.mcpServers??{},r={};for(let[e,i]of Object.entries(n))t.includes(e)&&(r[e]=i);return{...e,mcpServers:r}}function d(e,t){if(!t||t.length===0)return e;let n=i(e)??{},r=n.mcpServers??{},o={},s=[];for(let[e,n]of Object.entries(r))t.includes(e)?o[e]=n:s.push(e);return`${[`# Generated by doompi for this run. Do not edit.`,`# Upstreams kept: ${Object.keys(o).join(`, `)||`(none)`}`,`# Upstreams removed by the domain allowlist: ${s.join(`, `)||`(none)`}`,``].join(`
|
|
2
|
+
`)}${a({...n,mcpServers:o})}`}async function f(e,n){try{return await t.promises.copyFile(e,n),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}async function p(n,r,i){await t.promises.mkdir(i,{recursive:!0});let a=JSON.parse(await t.promises.readFile(n,`utf8`)),l=a.mcpServers??{},u=l[o],d=e.join(r,s);if(u){let t=[...u.args??[]],n=t.indexOf(c);if(n!==-1){let r=e.join(i,s);await f(d,r)&&(t[n+1]=r,l[o]={...u,args:t})}}let p=e.join(i,`mcp.json`);return await t.promises.writeFile(p,`${JSON.stringify({...a,mcpServers:l},null,2)}\n`,{mode:384}),p}async function m(n,r,i,a){if(!r)return n;let l=u(n,r.servers),f=l.mcpServers??{},p=f[o];if(!p||!r.proxy||r.proxy.length===0)return l;let m=[...p.args??[]],h=m.indexOf(c);if(h===-1||!m[h+1])return l;let g=e.resolve(i,m[h+1]),_;try{_=await t.promises.readFile(g,`utf8`)}catch(e){if(e.code===`ENOENT`)return l;throw e}let v=e.join(a,s);return await t.promises.writeFile(v,d(_,r.proxy),{mode:384}),m[h+1]=v,{...l,mcpServers:{...f,[o]:{...p,args:m}}}}export{o as PROXY_SERVER_NAME,m as applyMcpAllowlist,u as filterMcpServers,d as filterProxyConfig,p as persistMcpConfig,l as resolveMcpAllowlist};
|
|
3
|
+
//# sourceMappingURL=mcpFilter.mjs.map
|