@agimon-ai/po 0.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +755 -0
- package/assets/banner.png +0 -0
- package/assets/banner.svg +25 -0
- package/assets/favicon.svg +15 -0
- package/assets/logo-light.png +0 -0
- package/assets/logo-light.svg +25 -0
- package/assets/logo.png +0 -0
- package/assets/logo.svg +25 -0
- package/assets/mascot.png +0 -0
- package/assets/mascot.svg +25 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/antigravity.cjs +5 -0
- package/dist/antigravity.d.mts +2 -0
- package/dist/antigravity.mjs +2 -0
- package/dist/apiContracts.cjs +11 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +52 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +7 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/baseCommand.cjs +3 -0
- package/dist/baseCommand.d.mts +2 -0
- package/dist/baseCommand.mjs +2 -0
- package/dist/bin/cli.cjs +24 -0
- package/dist/bin/cli.cjs.map +1 -0
- package/dist/bin/cli.d.mts +1 -0
- package/dist/bin/cli.mjs +25 -0
- package/dist/bin/cli.mjs.map +1 -0
- package/dist/bin/doomRunner.cjs +33 -0
- package/dist/bin/doomRunner.cjs.map +1 -0
- package/dist/bin/doomRunner.d.mts +4 -0
- package/dist/bin/doomRunner.d.mts.map +1 -0
- package/dist/bin/doomRunner.mjs +32 -0
- package/dist/bin/doomRunner.mjs.map +1 -0
- package/dist/bin/serve.cjs +30 -0
- package/dist/bin/serve.cjs.map +1 -0
- package/dist/bin/serve.d.mts +1 -0
- package/dist/bin/serve.mjs +31 -0
- package/dist/bin/serve.mjs.map +1 -0
- package/dist/builders/cli/extensionAssembler/index.cjs +342 -0
- package/dist/builders/cli/extensionAssembler/index.cjs.map +1 -0
- package/dist/builders/cli/extensionAssembler/index.d.mts +85 -0
- package/dist/builders/cli/extensionAssembler/index.d.mts.map +1 -0
- package/dist/builders/cli/extensionAssembler/index.mjs +335 -0
- package/dist/builders/cli/extensionAssembler/index.mjs.map +1 -0
- package/dist/catalog/index.json +430 -0
- package/dist/cli.cjs +28 -0
- package/dist/cli.d.mts +11 -0
- package/dist/cli.mjs +11 -0
- package/dist/cliApp.cjs +6 -0
- package/dist/cliApp.d.mts +2 -0
- package/dist/cliApp.mjs +2 -0
- package/dist/codex.cjs +8 -0
- package/dist/codex.d.mts +2 -0
- package/dist/codex.mjs +2 -0
- package/dist/commands.cjs +18 -0
- package/dist/commands.d.mts +9 -0
- package/dist/commands.mjs +9 -0
- package/dist/compatibility.cjs +27 -0
- package/dist/compatibility.d.mts +6 -0
- package/dist/compatibility.mjs +6 -0
- package/dist/compatibilityCommand.cjs +4 -0
- package/dist/compatibilityCommand.d.mts +2 -0
- package/dist/compatibilityCommand.mjs +2 -0
- package/dist/compatibilityContext.cjs +3 -0
- package/dist/compatibilityContext.d.mts +2 -0
- package/dist/compatibilityContext.mjs +2 -0
- package/dist/compatibilityOptions.cjs +5 -0
- package/dist/compatibilityOptions.d.mts +2 -0
- package/dist/compatibilityOptions.mjs +2 -0
- package/dist/config.cjs +163 -0
- package/dist/config.d.mts +7 -0
- package/dist/config.mjs +7 -0
- package/dist/doctorCommand.cjs +5 -0
- package/dist/doctorCommand.d.mts +2 -0
- package/dist/doctorCommand.mjs +2 -0
- package/dist/emitMcpCommand.cjs +4 -0
- package/dist/emitMcpCommand.d.mts +2 -0
- package/dist/emitMcpCommand.mjs +2 -0
- package/dist/explainCommand.cjs +5 -0
- package/dist/explainCommand.d.mts +2 -0
- package/dist/explainCommand.mjs +2 -0
- package/dist/extensions/server.cjs +39 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +34 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/harnessContext.cjs +5 -0
- package/dist/harnessContext.d.mts +2 -0
- package/dist/harnessContext.mjs +2 -0
- package/dist/harnessState.cjs +19 -0
- package/dist/harnessState.d.mts +2 -0
- package/dist/harnessState.mjs +2 -0
- package/dist/help.cjs +12 -0
- package/dist/help.d.mts +6 -0
- package/dist/help.mjs +6 -0
- package/dist/index.cjs +306 -0
- package/dist/index.d.mts +40 -0
- package/dist/index.mjs +37 -0
- package/dist/initCommand.cjs +4 -0
- package/dist/initCommand.d.mts +2 -0
- package/dist/initCommand.mjs +2 -0
- package/dist/matrixOptions.cjs +28 -0
- package/dist/matrixOptions.d.mts +2 -0
- package/dist/matrixOptions.mjs +2 -0
- package/dist/matrixSwitcher.cjs +11 -0
- package/dist/matrixSwitcher.d.mts +3 -0
- package/dist/matrixSwitcher.mjs +3 -0
- package/dist/mcpFilter.cjs +9 -0
- package/dist/mcpFilter.d.mts +1 -0
- package/dist/mcpFilter.mjs +2 -0
- package/dist/options.cjs +3 -0
- package/dist/options.d.mts +2 -0
- package/dist/options.mjs +2 -0
- package/dist/process.cjs +12 -0
- package/dist/process.d.mts +2 -0
- package/dist/process.mjs +2 -0
- package/dist/projectTrust.cjs +6 -0
- package/dist/projectTrust.d.mts +2 -0
- package/dist/projectTrust.mjs +2 -0
- package/dist/repository.cjs +5 -0
- package/dist/repository.d.mts +2 -0
- package/dist/repository.mjs +2 -0
- package/dist/resourceCollector.cjs +9 -0
- package/dist/resourceCollector.d.mts +1 -0
- package/dist/resourceCollector.mjs +2 -0
- package/dist/router.cjs +6 -0
- package/dist/router.d.mts +2 -0
- package/dist/router.mjs +2 -0
- package/dist/services.cjs +97 -0
- package/dist/services.d.mts +12 -0
- package/dist/services.mjs +12 -0
- package/dist/shared.cjs +18 -0
- package/dist/shared.d.mts +2 -0
- package/dist/shared.mjs +2 -0
- package/dist/src/bin/agentDirectory.cjs +27 -0
- package/dist/src/bin/agentDirectory.cjs.map +1 -0
- package/dist/src/bin/agentDirectory.mjs +26 -0
- package/dist/src/bin/agentDirectory.mjs.map +1 -0
- package/dist/src/builders/apiContractExport/index.cjs +126 -0
- package/dist/src/builders/apiContractExport/index.cjs.map +1 -0
- package/dist/src/builders/apiContractExport/index.mjs +123 -0
- package/dist/src/builders/apiContractExport/index.mjs.map +1 -0
- package/dist/src/builders/cli/entryResolution.cjs +39 -0
- package/dist/src/builders/cli/entryResolution.cjs.map +1 -0
- package/dist/src/builders/cli/entryResolution.mjs +35 -0
- package/dist/src/builders/cli/entryResolution.mjs.map +1 -0
- package/dist/src/builders/cli/harnessContext.cjs +175 -0
- package/dist/src/builders/cli/harnessContext.cjs.map +1 -0
- package/dist/src/builders/cli/harnessContext.d.mts +48 -0
- package/dist/src/builders/cli/harnessContext.d.mts.map +1 -0
- package/dist/src/builders/cli/harnessContext.mjs +167 -0
- package/dist/src/builders/cli/harnessContext.mjs.map +1 -0
- package/dist/src/builders/cli/sessionComposition.cjs +27 -0
- package/dist/src/builders/cli/sessionComposition.cjs.map +1 -0
- package/dist/src/builders/cli/sessionComposition.mjs +26 -0
- package/dist/src/builders/cli/sessionComposition.mjs.map +1 -0
- package/dist/src/builders/hooks/index.cjs +238 -0
- package/dist/src/builders/hooks/index.cjs.map +1 -0
- package/dist/src/builders/hooks/index.mjs +231 -0
- package/dist/src/builders/hooks/index.mjs.map +1 -0
- package/dist/src/builders/native/index.cjs +176 -0
- package/dist/src/builders/native/index.cjs.map +1 -0
- package/dist/src/builders/native/index.d.mts +36 -0
- package/dist/src/builders/native/index.d.mts.map +1 -0
- package/dist/src/builders/native/index.mjs +170 -0
- package/dist/src/builders/native/index.mjs.map +1 -0
- package/dist/src/builders/server/backgroundSync.cjs +333 -0
- package/dist/src/builders/server/backgroundSync.cjs.map +1 -0
- package/dist/src/builders/server/backgroundSync.mjs +320 -0
- package/dist/src/builders/server/backgroundSync.mjs.map +1 -0
- package/dist/src/builders/server/computerUseBinding.cjs +273 -0
- package/dist/src/builders/server/computerUseBinding.cjs.map +1 -0
- package/dist/src/builders/server/computerUseBinding.mjs +269 -0
- package/dist/src/builders/server/computerUseBinding.mjs.map +1 -0
- package/dist/src/builders/server/computerUseRecordings.cjs +188 -0
- package/dist/src/builders/server/computerUseRecordings.cjs.map +1 -0
- package/dist/src/builders/server/computerUseRecordings.mjs +184 -0
- package/dist/src/builders/server/computerUseRecordings.mjs.map +1 -0
- package/dist/src/builders/server/defaultWorkspace.cjs +38 -0
- package/dist/src/builders/server/defaultWorkspace.cjs.map +1 -0
- package/dist/src/builders/server/defaultWorkspace.mjs +35 -0
- package/dist/src/builders/server/defaultWorkspace.mjs.map +1 -0
- package/dist/src/builders/server/idleRestart.cjs +149 -0
- package/dist/src/builders/server/idleRestart.cjs.map +1 -0
- package/dist/src/builders/server/idleRestart.mjs +136 -0
- package/dist/src/builders/server/idleRestart.mjs.map +1 -0
- package/dist/src/builders/server/index.cjs +63 -0
- package/dist/src/builders/server/index.cjs.map +1 -0
- package/dist/src/builders/server/index.mjs +60 -0
- package/dist/src/builders/server/index.mjs.map +1 -0
- package/dist/src/builders/server/logSink.cjs +57 -0
- package/dist/src/builders/server/logSink.cjs.map +1 -0
- package/dist/src/builders/server/logSink.mjs +57 -0
- package/dist/src/builders/server/logSink.mjs.map +1 -0
- package/dist/src/builders/server/mcpApp.cjs +152 -0
- package/dist/src/builders/server/mcpApp.cjs.map +1 -0
- package/dist/src/builders/server/mcpApp.d.mts +18 -0
- package/dist/src/builders/server/mcpApp.d.mts.map +1 -0
- package/dist/src/builders/server/mcpApp.mjs +147 -0
- package/dist/src/builders/server/mcpApp.mjs.map +1 -0
- package/dist/src/builders/server/mcpAppBuild.cjs +111 -0
- package/dist/src/builders/server/mcpAppBuild.cjs.map +1 -0
- package/dist/src/builders/server/mcpAppBuild.d.mts +24 -0
- package/dist/src/builders/server/mcpAppBuild.d.mts.map +1 -0
- package/dist/src/builders/server/mcpAppBuild.mjs +105 -0
- package/dist/src/builders/server/mcpAppBuild.mjs.map +1 -0
- package/dist/src/builders/server/mcpBundle.cjs +87 -0
- package/dist/src/builders/server/mcpBundle.cjs.map +1 -0
- package/dist/src/builders/server/mcpBundle.d.mts +23 -0
- package/dist/src/builders/server/mcpBundle.d.mts.map +1 -0
- package/dist/src/builders/server/mcpBundle.mjs +84 -0
- package/dist/src/builders/server/mcpBundle.mjs.map +1 -0
- package/dist/src/builders/server/packageReloadCheck.cjs +62 -0
- package/dist/src/builders/server/packageReloadCheck.cjs.map +1 -0
- package/dist/src/builders/server/packageReloadCheck.mjs +61 -0
- package/dist/src/builders/server/packageReloadCheck.mjs.map +1 -0
- package/dist/src/builders/server/packageUrl.cjs +210 -0
- package/dist/src/builders/server/packageUrl.cjs.map +1 -0
- package/dist/src/builders/server/packageUrl.mjs +203 -0
- package/dist/src/builders/server/packageUrl.mjs.map +1 -0
- package/dist/src/builders/server/runtime.cjs +1428 -0
- package/dist/src/builders/server/runtime.cjs.map +1 -0
- package/dist/src/builders/server/runtime.mjs +1420 -0
- package/dist/src/builders/server/runtime.mjs.map +1 -0
- package/dist/src/builders/server/runtimeResources.cjs +72 -0
- package/dist/src/builders/server/runtimeResources.cjs.map +1 -0
- package/dist/src/builders/server/runtimeResources.mjs +71 -0
- package/dist/src/builders/server/runtimeResources.mjs.map +1 -0
- package/dist/src/builders/server/selectionStatus.cjs +12 -0
- package/dist/src/builders/server/selectionStatus.cjs.map +1 -0
- package/dist/src/builders/server/selectionStatus.mjs +12 -0
- package/dist/src/builders/server/selectionStatus.mjs.map +1 -0
- package/dist/src/builders/server/sessionArguments.cjs +63 -0
- package/dist/src/builders/server/sessionArguments.cjs.map +1 -0
- package/dist/src/builders/server/sessionArguments.mjs +62 -0
- package/dist/src/builders/server/sessionArguments.mjs.map +1 -0
- package/dist/src/builders/server/shutdown.cjs +16 -0
- package/dist/src/builders/server/shutdown.cjs.map +1 -0
- package/dist/src/builders/server/shutdown.mjs +16 -0
- package/dist/src/builders/server/shutdown.mjs.map +1 -0
- package/dist/src/builders/server/webTemplateDecision.cjs +34 -0
- package/dist/src/builders/server/webTemplateDecision.cjs.map +1 -0
- package/dist/src/builders/server/webTemplateDecision.mjs +32 -0
- package/dist/src/builders/server/webTemplateDecision.mjs.map +1 -0
- package/dist/src/builders/server/workspaceCheckout.cjs +31 -0
- package/dist/src/builders/server/workspaceCheckout.cjs.map +1 -0
- package/dist/src/builders/server/workspaceCheckout.mjs +29 -0
- package/dist/src/builders/server/workspaceCheckout.mjs.map +1 -0
- package/dist/src/builders/web/bundle.cjs +225 -0
- package/dist/src/builders/web/bundle.cjs.map +1 -0
- package/dist/src/builders/web/bundle.d.mts +65 -0
- package/dist/src/builders/web/bundle.d.mts.map +1 -0
- package/dist/src/builders/web/bundle.mjs +221 -0
- package/dist/src/builders/web/bundle.mjs.map +1 -0
- package/dist/src/builders/web/bundleAssetPolicy.cjs +96 -0
- package/dist/src/builders/web/bundleAssetPolicy.cjs.map +1 -0
- package/dist/src/builders/web/bundleAssetPolicy.d.mts +22 -0
- package/dist/src/builders/web/bundleAssetPolicy.d.mts.map +1 -0
- package/dist/src/builders/web/bundleAssetPolicy.mjs +95 -0
- package/dist/src/builders/web/bundleAssetPolicy.mjs.map +1 -0
- package/dist/src/builders/web/index.cjs +361 -0
- package/dist/src/builders/web/index.cjs.map +1 -0
- package/dist/src/builders/web/index.d.mts +109 -0
- package/dist/src/builders/web/index.d.mts.map +1 -0
- package/dist/src/builders/web/index.mjs +342 -0
- package/dist/src/builders/web/index.mjs.map +1 -0
- package/dist/src/builders/web/webDevRoots.cjs +27 -0
- package/dist/src/builders/web/webDevRoots.cjs.map +1 -0
- package/dist/src/builders/web/webDevRoots.d.mts +22 -0
- package/dist/src/builders/web/webDevRoots.d.mts.map +1 -0
- package/dist/src/builders/web/webDevRoots.mjs +25 -0
- package/dist/src/builders/web/webDevRoots.mjs.map +1 -0
- package/dist/src/builders/web/webPluginGenerate.cjs +188 -0
- package/dist/src/builders/web/webPluginGenerate.cjs.map +1 -0
- package/dist/src/builders/web/webPluginGenerate.d.mts +56 -0
- package/dist/src/builders/web/webPluginGenerate.d.mts.map +1 -0
- package/dist/src/builders/web/webPluginGenerate.mjs +178 -0
- package/dist/src/builders/web/webPluginGenerate.mjs.map +1 -0
- package/dist/src/builders/web/webPluginManifest.cjs +128 -0
- package/dist/src/builders/web/webPluginManifest.cjs.map +1 -0
- package/dist/src/builders/web/webPluginManifest.d.mts +64 -0
- package/dist/src/builders/web/webPluginManifest.d.mts.map +1 -0
- package/dist/src/builders/web/webPluginManifest.mjs +118 -0
- package/dist/src/builders/web/webPluginManifest.mjs.map +1 -0
- package/dist/src/builders/web/webPluginScan.cjs +57 -0
- package/dist/src/builders/web/webPluginScan.cjs.map +1 -0
- package/dist/src/builders/web/webPluginScan.d.mts +19 -0
- package/dist/src/builders/web/webPluginScan.d.mts.map +1 -0
- package/dist/src/builders/web/webPluginScan.mjs +54 -0
- package/dist/src/builders/web/webPluginScan.mjs.map +1 -0
- package/dist/src/builders/web/webPluginVite.cjs +255 -0
- package/dist/src/builders/web/webPluginVite.cjs.map +1 -0
- package/dist/src/builders/web/webPluginVite.d.mts +64 -0
- package/dist/src/builders/web/webPluginVite.d.mts.map +1 -0
- package/dist/src/builders/web/webPluginVite.mjs +242 -0
- package/dist/src/builders/web/webPluginVite.mjs.map +1 -0
- package/dist/src/cli/cliApp.cjs +187 -0
- package/dist/src/cli/cliApp.cjs.map +1 -0
- package/dist/src/cli/cliApp.d.mts +32 -0
- package/dist/src/cli/cliApp.d.mts.map +1 -0
- package/dist/src/cli/cliApp.mjs +184 -0
- package/dist/src/cli/cliApp.mjs.map +1 -0
- package/dist/src/cli/commands/api-export/index.cjs +66 -0
- package/dist/src/cli/commands/api-export/index.cjs.map +1 -0
- package/dist/src/cli/commands/api-export/index.mjs +62 -0
- package/dist/src/cli/commands/api-export/index.mjs.map +1 -0
- package/dist/src/cli/commands/baseCommand.cjs +16 -0
- package/dist/src/cli/commands/baseCommand.cjs.map +1 -0
- package/dist/src/cli/commands/baseCommand.d.mts +24 -0
- package/dist/src/cli/commands/baseCommand.d.mts.map +1 -0
- package/dist/src/cli/commands/baseCommand.mjs +16 -0
- package/dist/src/cli/commands/baseCommand.mjs.map +1 -0
- package/dist/src/cli/commands/compat/context.cjs +115 -0
- package/dist/src/cli/commands/compat/context.cjs.map +1 -0
- package/dist/src/cli/commands/compat/context.d.mts +22 -0
- package/dist/src/cli/commands/compat/context.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/context.mjs +110 -0
- package/dist/src/cli/commands/compat/context.mjs.map +1 -0
- package/dist/src/cli/commands/compat/help.cjs +26 -0
- package/dist/src/cli/commands/compat/help.cjs.map +1 -0
- package/dist/src/cli/commands/compat/help.d.mts +4 -0
- package/dist/src/cli/commands/compat/help.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/help.mjs +25 -0
- package/dist/src/cli/commands/compat/help.mjs.map +1 -0
- package/dist/src/cli/commands/compat/index.cjs +73 -0
- package/dist/src/cli/commands/compat/index.cjs.map +1 -0
- package/dist/src/cli/commands/compat/index.d.mts +14 -0
- package/dist/src/cli/commands/compat/index.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/index.mjs +70 -0
- package/dist/src/cli/commands/compat/index.mjs.map +1 -0
- package/dist/src/cli/commands/compat/options.cjs +88 -0
- package/dist/src/cli/commands/compat/options.cjs.map +1 -0
- package/dist/src/cli/commands/compat/options.d.mts +15 -0
- package/dist/src/cli/commands/compat/options.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/options.mjs +86 -0
- package/dist/src/cli/commands/compat/options.mjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/antigravity.cjs +294 -0
- package/dist/src/cli/commands/compat/providers/antigravity.cjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/antigravity.d.mts +9 -0
- package/dist/src/cli/commands/compat/providers/antigravity.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/providers/antigravity.mjs +289 -0
- package/dist/src/cli/commands/compat/providers/antigravity.mjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/codex.cjs +178 -0
- package/dist/src/cli/commands/compat/providers/codex.cjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/codex.d.mts +17 -0
- package/dist/src/cli/commands/compat/providers/codex.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/providers/codex.mjs +170 -0
- package/dist/src/cli/commands/compat/providers/codex.mjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/index.cjs +65 -0
- package/dist/src/cli/commands/compat/providers/index.cjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/index.d.mts +15 -0
- package/dist/src/cli/commands/compat/providers/index.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/providers/index.mjs +45 -0
- package/dist/src/cli/commands/compat/providers/index.mjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/process.cjs +172 -0
- package/dist/src/cli/commands/compat/providers/process.cjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/process.d.mts +33 -0
- package/dist/src/cli/commands/compat/providers/process.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/providers/process.mjs +159 -0
- package/dist/src/cli/commands/compat/providers/process.mjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/shared.cjs +76 -0
- package/dist/src/cli/commands/compat/providers/shared.cjs.map +1 -0
- package/dist/src/cli/commands/compat/providers/shared.d.mts +40 -0
- package/dist/src/cli/commands/compat/providers/shared.d.mts.map +1 -0
- package/dist/src/cli/commands/compat/providers/shared.mjs +61 -0
- package/dist/src/cli/commands/compat/providers/shared.mjs.map +1 -0
- package/dist/src/cli/commands/compat/types.d.mts +31 -0
- package/dist/src/cli/commands/compat/types.d.mts.map +1 -0
- package/dist/src/cli/commands/doctor/help.cjs +19 -0
- package/dist/src/cli/commands/doctor/help.cjs.map +1 -0
- package/dist/src/cli/commands/doctor/help.d.mts +4 -0
- package/dist/src/cli/commands/doctor/help.d.mts.map +1 -0
- package/dist/src/cli/commands/doctor/help.mjs +19 -0
- package/dist/src/cli/commands/doctor/help.mjs.map +1 -0
- package/dist/src/cli/commands/doctor/index.cjs +118 -0
- package/dist/src/cli/commands/doctor/index.cjs.map +1 -0
- package/dist/src/cli/commands/doctor/index.d.mts +33 -0
- package/dist/src/cli/commands/doctor/index.d.mts.map +1 -0
- package/dist/src/cli/commands/doctor/index.mjs +113 -0
- package/dist/src/cli/commands/doctor/index.mjs.map +1 -0
- package/dist/src/cli/commands/emit-mcp/index.cjs +32 -0
- package/dist/src/cli/commands/emit-mcp/index.cjs.map +1 -0
- package/dist/src/cli/commands/emit-mcp/index.d.mts +19 -0
- package/dist/src/cli/commands/emit-mcp/index.d.mts.map +1 -0
- package/dist/src/cli/commands/emit-mcp/index.mjs +31 -0
- package/dist/src/cli/commands/emit-mcp/index.mjs.map +1 -0
- package/dist/src/cli/commands/explain/index.cjs +155 -0
- package/dist/src/cli/commands/explain/index.cjs.map +1 -0
- package/dist/src/cli/commands/explain/index.d.mts +57 -0
- package/dist/src/cli/commands/explain/index.d.mts.map +1 -0
- package/dist/src/cli/commands/explain/index.mjs +150 -0
- package/dist/src/cli/commands/explain/index.mjs.map +1 -0
- package/dist/src/cli/commands/init/constants.cjs +11 -0
- package/dist/src/cli/commands/init/constants.cjs.map +1 -0
- package/dist/src/cli/commands/init/constants.mjs +11 -0
- package/dist/src/cli/commands/init/constants.mjs.map +1 -0
- package/dist/src/cli/commands/init/help.cjs +17 -0
- package/dist/src/cli/commands/init/help.cjs.map +1 -0
- package/dist/src/cli/commands/init/help.d.mts +4 -0
- package/dist/src/cli/commands/init/help.d.mts.map +1 -0
- package/dist/src/cli/commands/init/help.mjs +17 -0
- package/dist/src/cli/commands/init/help.mjs.map +1 -0
- package/dist/src/cli/commands/init/index.cjs +67 -0
- package/dist/src/cli/commands/init/index.cjs.map +1 -0
- package/dist/src/cli/commands/init/index.d.mts +12 -0
- package/dist/src/cli/commands/init/index.d.mts.map +1 -0
- package/dist/src/cli/commands/init/index.mjs +63 -0
- package/dist/src/cli/commands/init/index.mjs.map +1 -0
- package/dist/src/cli/commands/init/presenter.cjs +140 -0
- package/dist/src/cli/commands/init/presenter.cjs.map +1 -0
- package/dist/src/cli/commands/init/presenter.d.mts +8 -0
- package/dist/src/cli/commands/init/presenter.d.mts.map +1 -0
- package/dist/src/cli/commands/init/presenter.mjs +140 -0
- package/dist/src/cli/commands/init/presenter.mjs.map +1 -0
- package/dist/src/cli/commands/sync/help.cjs +34 -0
- package/dist/src/cli/commands/sync/help.cjs.map +1 -0
- package/dist/src/cli/commands/sync/help.d.mts +4 -0
- package/dist/src/cli/commands/sync/help.d.mts.map +1 -0
- package/dist/src/cli/commands/sync/help.mjs +34 -0
- package/dist/src/cli/commands/sync/help.mjs.map +1 -0
- package/dist/src/cli/commands/sync/index.cjs +215 -0
- package/dist/src/cli/commands/sync/index.cjs.map +1 -0
- package/dist/src/cli/commands/sync/index.d.mts +20 -0
- package/dist/src/cli/commands/sync/index.d.mts.map +1 -0
- package/dist/src/cli/commands/sync/index.mjs +206 -0
- package/dist/src/cli/commands/sync/index.mjs.map +1 -0
- package/dist/src/cli/commands/sync/presenter.cjs +58 -0
- package/dist/src/cli/commands/sync/presenter.cjs.map +1 -0
- package/dist/src/cli/commands/sync/presenter.d.mts +16 -0
- package/dist/src/cli/commands/sync/presenter.d.mts.map +1 -0
- package/dist/src/cli/commands/sync/presenter.mjs +57 -0
- package/dist/src/cli/commands/sync/presenter.mjs.map +1 -0
- package/dist/src/cli/commands/sync/workflow.cjs +16 -0
- package/dist/src/cli/commands/sync/workflow.cjs.map +1 -0
- package/dist/src/cli/commands/sync/workflow.mjs +16 -0
- package/dist/src/cli/commands/sync/workflow.mjs.map +1 -0
- package/dist/src/cli/commands/web/index.cjs +88 -0
- package/dist/src/cli/commands/web/index.cjs.map +1 -0
- package/dist/src/cli/commands/web/index.mjs +85 -0
- package/dist/src/cli/commands/web/index.mjs.map +1 -0
- package/dist/src/cli/harnessOptions.cjs +70 -0
- package/dist/src/cli/harnessOptions.cjs.map +1 -0
- package/dist/src/cli/harnessOptions.d.mts +26 -0
- package/dist/src/cli/harnessOptions.d.mts.map +1 -0
- package/dist/src/cli/harnessOptions.mjs +66 -0
- package/dist/src/cli/harnessOptions.mjs.map +1 -0
- package/dist/src/cli/help.cjs +82 -0
- package/dist/src/cli/help.cjs.map +1 -0
- package/dist/src/cli/help.d.mts +10 -0
- package/dist/src/cli/help.d.mts.map +1 -0
- package/dist/src/cli/help.mjs +78 -0
- package/dist/src/cli/help.mjs.map +1 -0
- package/dist/src/cli/matrixOptions.cjs +178 -0
- package/dist/src/cli/matrixOptions.cjs.map +1 -0
- package/dist/src/cli/matrixOptions.d.mts +90 -0
- package/dist/src/cli/matrixOptions.d.mts.map +1 -0
- package/dist/src/cli/matrixOptions.mjs +151 -0
- package/dist/src/cli/matrixOptions.mjs.map +1 -0
- package/dist/src/cli/options.cjs +281 -0
- package/dist/src/cli/options.cjs.map +1 -0
- package/dist/src/cli/options.d.mts +5 -0
- package/dist/src/cli/options.d.mts.map +1 -0
- package/dist/src/cli/options.mjs +279 -0
- package/dist/src/cli/options.mjs.map +1 -0
- package/dist/src/cli/router.cjs +57 -0
- package/dist/src/cli/router.cjs.map +1 -0
- package/dist/src/cli/router.d.mts +32 -0
- package/dist/src/cli/router.d.mts.map +1 -0
- package/dist/src/cli/router.mjs +54 -0
- package/dist/src/cli/router.mjs.map +1 -0
- package/dist/src/cli/server/options.cjs +71 -0
- package/dist/src/cli/server/options.cjs.map +1 -0
- package/dist/src/cli/server/options.mjs +70 -0
- package/dist/src/cli/server/options.mjs.map +1 -0
- package/dist/src/cli/server/processGuards.cjs +83 -0
- package/dist/src/cli/server/processGuards.cjs.map +1 -0
- package/dist/src/cli/server/processGuards.mjs +79 -0
- package/dist/src/cli/server/processGuards.mjs.map +1 -0
- package/dist/src/cli/server/run.cjs +69 -0
- package/dist/src/cli/server/run.cjs.map +1 -0
- package/dist/src/cli/server/run.mjs +66 -0
- package/dist/src/cli/server/run.mjs.map +1 -0
- package/dist/src/composition/harnessState/index.cjs +48 -0
- package/dist/src/composition/harnessState/index.cjs.map +1 -0
- package/dist/src/composition/harnessState/index.d.mts +19 -0
- package/dist/src/composition/harnessState/index.d.mts.map +1 -0
- package/dist/src/composition/harnessState/index.mjs +34 -0
- package/dist/src/composition/harnessState/index.mjs.map +1 -0
- package/dist/src/composition/layerPackageInstaller/index.cjs +651 -0
- package/dist/src/composition/layerPackageInstaller/index.cjs.map +1 -0
- package/dist/src/composition/layerPackageInstaller/index.d.mts +74 -0
- package/dist/src/composition/layerPackageInstaller/index.d.mts.map +1 -0
- package/dist/src/composition/layerPackageInstaller/index.mjs +637 -0
- package/dist/src/composition/layerPackageInstaller/index.mjs.map +1 -0
- package/dist/src/composition/poHomeMigration/index.cjs +234 -0
- package/dist/src/composition/poHomeMigration/index.cjs.map +1 -0
- package/dist/src/composition/poHomeMigration/index.d.mts +12 -0
- package/dist/src/composition/poHomeMigration/index.d.mts.map +1 -0
- package/dist/src/composition/poHomeMigration/index.mjs +226 -0
- package/dist/src/composition/poHomeMigration/index.mjs.map +1 -0
- package/dist/src/composition/projectTrust/index.cjs +51 -0
- package/dist/src/composition/projectTrust/index.cjs.map +1 -0
- package/dist/src/composition/projectTrust/index.d.mts +22 -0
- package/dist/src/composition/projectTrust/index.d.mts.map +1 -0
- package/dist/src/composition/projectTrust/index.mjs +48 -0
- package/dist/src/composition/projectTrust/index.mjs.map +1 -0
- package/dist/src/composition/repository/index.cjs +68 -0
- package/dist/src/composition/repository/index.cjs.map +1 -0
- package/dist/src/composition/repository/index.d.mts +22 -0
- package/dist/src/composition/repository/index.d.mts.map +1 -0
- package/dist/src/composition/repository/index.mjs +63 -0
- package/dist/src/composition/repository/index.mjs.map +1 -0
- package/dist/src/composition/syncPrune/index.cjs +85 -0
- package/dist/src/composition/syncPrune/index.cjs.map +1 -0
- package/dist/src/composition/syncPrune/index.d.mts +33 -0
- package/dist/src/composition/syncPrune/index.d.mts.map +1 -0
- package/dist/src/composition/syncPrune/index.mjs +82 -0
- package/dist/src/composition/syncPrune/index.mjs.map +1 -0
- package/dist/src/composition/syncService/index.cjs +808 -0
- package/dist/src/composition/syncService/index.cjs.map +1 -0
- package/dist/src/composition/syncService/index.d.mts +65 -0
- package/dist/src/composition/syncService/index.d.mts.map +1 -0
- package/dist/src/composition/syncService/index.mjs +792 -0
- package/dist/src/composition/syncService/index.mjs.map +1 -0
- package/dist/src/composition/syncService/localBuilds.cjs +367 -0
- package/dist/src/composition/syncService/localBuilds.cjs.map +1 -0
- package/dist/src/composition/syncService/localBuilds.mjs +358 -0
- package/dist/src/composition/syncService/localBuilds.mjs.map +1 -0
- package/dist/src/composition/transitionLayers.cjs +17 -0
- package/dist/src/composition/transitionLayers.cjs.map +1 -0
- package/dist/src/composition/transitionLayers.d.mts +6 -0
- package/dist/src/composition/transitionLayers.d.mts.map +1 -0
- package/dist/src/composition/transitionLayers.mjs +16 -0
- package/dist/src/composition/transitionLayers.mjs.map +1 -0
- package/dist/src/composition/types/harness.d.mts +52 -0
- package/dist/src/composition/types/harness.d.mts.map +1 -0
- package/dist/src/extensions/setupDiagnostics.cjs +65 -0
- package/dist/src/extensions/setupDiagnostics.cjs.map +1 -0
- package/dist/src/extensions/setupDiagnostics.mjs +64 -0
- package/dist/src/extensions/setupDiagnostics.mjs.map +1 -0
- package/dist/utils.cjs +4 -0
- package/dist/utils.d.mts +2 -0
- package/dist/utils.mjs +2 -0
- package/dist/webBuilder.cjs +59 -0
- package/dist/webBuilder.d.mts +9 -0
- package/dist/webBuilder.mjs +9 -0
- package/docs/server/api-export.md +86 -0
- package/docs/server/api.md +144 -0
- package/docs/server/getting-started.md +114 -0
- package/docs/server/index.md +67 -0
- package/docs/server/ipc.md +97 -0
- package/docs/server/lifecycle.md +108 -0
- package/docs/server/security.md +101 -0
- package/llms.txt +12 -0
- package/package.json +295 -0
- package/src/prompts/po-author-extension/SKILL.md +35 -0
- package/src/prompts/po-author-extension/references/extension-contract.md +134 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
require("../../composition/harnessState/index.cjs");
|
|
3
|
+
let node_fs = require("node:fs");
|
|
4
|
+
node_fs = require_runtime.__toESM(node_fs, 1);
|
|
5
|
+
let node_path = require("node:path");
|
|
6
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
7
|
+
let node_os = require("node:os");
|
|
8
|
+
node_os = require_runtime.__toESM(node_os, 1);
|
|
9
|
+
let _agimon_ai_po_config_domains = require("@agimon-ai/po-config/domains");
|
|
10
|
+
let _agimon_ai_po_config_config = require("@agimon-ai/po-config/config");
|
|
11
|
+
let _agimon_ai_po_config_majorModes = require("@agimon-ai/po-config/majorModes");
|
|
12
|
+
let _agimon_ai_po_config_profiles = require("@agimon-ai/po-config/profiles");
|
|
13
|
+
let _agimon_ai_po_core_runtimeLogSinkTelemetry = require("@agimon-ai/po-core/runtimeLogSinkTelemetry");
|
|
14
|
+
let _agimon_ai_po_domain_mcp = require("@agimon-ai/po-domain/mcp");
|
|
15
|
+
let _agimon_ai_po_domain_plugins = require("@agimon-ai/po-domain/plugins");
|
|
16
|
+
let _agimon_ai_po_domain_resources = require("@agimon-ai/po-domain/resources");
|
|
17
|
+
let node_crypto = require("node:crypto");
|
|
18
|
+
node_crypto = require_runtime.__toESM(node_crypto, 1);
|
|
19
|
+
let _agimon_ai_po_ui_theme = require("@agimon-ai/po-ui/theme");
|
|
20
|
+
let _agimon_ai_po_core_mcpSession = require("@agimon-ai/po-core/mcpSession");
|
|
21
|
+
let _agimon_ai_po_config_harnessStore = require("@agimon-ai/po-config/harnessStore");
|
|
22
|
+
//#region src/builders/cli/harnessContext.ts
|
|
23
|
+
const PRIVATE_FILE_MODE = 384;
|
|
24
|
+
const RESOLVE_CONFIG_PHASE = "resolve_config";
|
|
25
|
+
const COLLECT_RESOURCES_PHASE = "collect_resources";
|
|
26
|
+
const BUILD_CONTEXT_PHASE = "build_context";
|
|
27
|
+
/**
|
|
28
|
+
* Applies the provider environment a preset needs.
|
|
29
|
+
*
|
|
30
|
+
* Exported so a session server can apply the same rules before anything reads them.
|
|
31
|
+
*/
|
|
32
|
+
function configurePreset(options, environment) {
|
|
33
|
+
if (options.preset === "kimi") {
|
|
34
|
+
if (!environment.KIMI_API_KEY && environment.KIMI_CODE_API_KEY) environment.KIMI_API_KEY = environment.KIMI_CODE_API_KEY;
|
|
35
|
+
if (!environment.KIMI_API_KEY) throw new Error("KIMI_API_KEY or KIMI_CODE_API_KEY is required for the kimi preset");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Resolves the optional persona and environment profile selected for this run. */
|
|
39
|
+
function resolveHarnessProfile(options) {
|
|
40
|
+
return options.profile ? (0, _agimon_ai_po_config_profiles.resolveProfile)(options.configRoot ?? options.repoRoot, options.profile) : void 0;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolves the full matrix and stages every resource Pi will need.
|
|
44
|
+
*
|
|
45
|
+
* The caller owns the returned cleanup(): the temporary directory holding
|
|
46
|
+
* skills, agents, and the generated MCP config has to outlive this function
|
|
47
|
+
* and be removed once the selected command is done with it.
|
|
48
|
+
*/
|
|
49
|
+
async function buildHarnessContext(options, telemetry = (0, _agimon_ai_po_core_runtimeLogSinkTelemetry.createHarnessTelemetry)()) {
|
|
50
|
+
const configRoot = options.configRoot ?? options.repoRoot;
|
|
51
|
+
const configured = await telemetry.runInSpan(`doom_pi.${RESOLVE_CONFIG_PHASE}`, { "harness.phase": RESOLVE_CONFIG_PHASE }, async () => {
|
|
52
|
+
const majorModesConfig = (0, _agimon_ai_po_config_majorModes.loadMajorModesConfig)(configRoot, options.homeDirectory, options.environment);
|
|
53
|
+
const selectedLayers = (0, _agimon_ai_po_config_majorModes.filterHookDisabledLayers)(majorModesConfig, (0, _agimon_ai_po_config_majorModes.resolveLayers)(majorModesConfig, options.majorMode), options.hooks);
|
|
54
|
+
const profile = resolveHarnessProfile(options);
|
|
55
|
+
if (!node_fs.default.existsSync(options.cwd) || !node_fs.default.statSync(options.cwd).isDirectory()) throw new Error(`Working directory does not exist: ${options.cwd}`);
|
|
56
|
+
return {
|
|
57
|
+
majorModesConfig,
|
|
58
|
+
selectedLayers,
|
|
59
|
+
hookGroups: (0, _agimon_ai_po_config_majorModes.layerHookGroups)(majorModesConfig, selectedLayers),
|
|
60
|
+
profile,
|
|
61
|
+
plugins: await (0, _agimon_ai_po_domain_plugins.materializePluginEntries)((0, _agimon_ai_po_config_domains.resolvePluginEntries)(configRoot, options.domains, options.pluginDirectories)),
|
|
62
|
+
mcpAllowlist: (0, _agimon_ai_po_domain_mcp.resolveMcpAllowlist)(configRoot, options.domains),
|
|
63
|
+
sharedSkills: (0, _agimon_ai_po_config_domains.resolveSharedSkills)(configRoot, options.domains)
|
|
64
|
+
};
|
|
65
|
+
}).catch(async (error) => {
|
|
66
|
+
await telemetry.recordError(_agimon_ai_po_core_runtimeLogSinkTelemetry.HARNESS_EVENT.configLoadFailed, error, {
|
|
67
|
+
"harness.phase": RESOLVE_CONFIG_PHASE,
|
|
68
|
+
"harness.major_mode": options.majorMode,
|
|
69
|
+
"harness.domain_count": options.domains.length
|
|
70
|
+
});
|
|
71
|
+
throw error;
|
|
72
|
+
});
|
|
73
|
+
const { majorModesConfig, selectedLayers, hookGroups, profile, plugins, mcpAllowlist } = configured;
|
|
74
|
+
const personaDirectory = profile?.persona;
|
|
75
|
+
const personaRoot = profile?.personaRoot ?? configRoot;
|
|
76
|
+
const resources = await telemetry.runInSpan(`doom_pi.${COLLECT_RESOURCES_PHASE}`, {
|
|
77
|
+
"harness.plugin.count": plugins.length,
|
|
78
|
+
"harness.agents": options.agents,
|
|
79
|
+
"harness.mcp": options.mcp
|
|
80
|
+
}, () => (0, _agimon_ai_po_domain_resources.collectResources)(options.repoRoot, plugins, {
|
|
81
|
+
agents: options.agents,
|
|
82
|
+
mcp: options.mcp,
|
|
83
|
+
temporaryDirectory: options.resourceDirectory,
|
|
84
|
+
skillCacheDirectory: options.resourceDirectory === void 0 ? node_path.default.join((0, _agimon_ai_po_config_config.globalDoomConfigDirectory)(options.homeDirectory ?? node_os.default.homedir()), "cache", "skills", node_crypto.default.createHash("sha256").update(node_path.default.resolve(options.repoRoot)).digest("hex").slice(0, 32)) : node_path.default.join(options.resourceDirectory, "cache", "skills"),
|
|
85
|
+
mcpAllowlist,
|
|
86
|
+
sharedSkills: configured.sharedSkills,
|
|
87
|
+
pluginDataRoot: node_path.default.join((0, _agimon_ai_po_config_config.globalDoomConfigDirectory)(options.homeDirectory ?? node_os.default.homedir()), "plugin-data")
|
|
88
|
+
})).catch(async (error) => {
|
|
89
|
+
await telemetry.recordError(_agimon_ai_po_core_runtimeLogSinkTelemetry.HARNESS_EVENT.resourceCollectionFailed, error, {
|
|
90
|
+
"harness.phase": COLLECT_RESOURCES_PHASE,
|
|
91
|
+
"harness.plugin.count": plugins.length
|
|
92
|
+
});
|
|
93
|
+
throw error;
|
|
94
|
+
});
|
|
95
|
+
try {
|
|
96
|
+
const defaultThemePath = await (0, _agimon_ai_po_ui_theme.writeDefaultTheme)(resources.temporaryDirectory);
|
|
97
|
+
const environment = { ...options.environment ?? process.env };
|
|
98
|
+
delete environment[_agimon_ai_po_core_mcpSession.DOOM_MCP_SESSION_ENV_VAR];
|
|
99
|
+
const profileEnvironment = (0, _agimon_ai_po_config_profiles.applyProfileEnvironment)(environment, profile?.env ?? {});
|
|
100
|
+
configurePreset(options, environment);
|
|
101
|
+
environment.NX_DAEMON ??= "false";
|
|
102
|
+
environment.PO_THEME ||= _agimon_ai_po_ui_theme.DEFAULT_THEME_NAME;
|
|
103
|
+
environment.CLAUDE_PROJECT_DIR = options.repoRoot;
|
|
104
|
+
environment.CODEX_REPO_ROOT = options.repoRoot;
|
|
105
|
+
environment.ORIGINAL_REPO_PATH ||= options.repoRoot;
|
|
106
|
+
environment.MCP_UI_VIEWER = options.automation ? "none" : environment.MCP_UI_VIEWER ?? "";
|
|
107
|
+
const personaPrompt = personaDirectory ? (0, _agimon_ai_po_config_profiles.buildPersonaPrompt)(personaRoot, personaDirectory) : void 0;
|
|
108
|
+
let personaFile;
|
|
109
|
+
if (personaPrompt) {
|
|
110
|
+
personaFile = node_path.default.join(resources.temporaryDirectory, "persona.md");
|
|
111
|
+
await node_fs.default.promises.writeFile(personaFile, `${personaPrompt}\n`, { mode: PRIVATE_FILE_MODE });
|
|
112
|
+
}
|
|
113
|
+
(0, _agimon_ai_po_config_harnessStore.createHarnessSession)({
|
|
114
|
+
root: options.repoRoot,
|
|
115
|
+
majorMode: options.majorMode,
|
|
116
|
+
temporaryDirectory: resources.temporaryDirectory,
|
|
117
|
+
domains: options.domains,
|
|
118
|
+
layers: selectedLayers,
|
|
119
|
+
profile: profile?.name,
|
|
120
|
+
profileIdentity: profile?.identity,
|
|
121
|
+
profileVoice: profile?.voice,
|
|
122
|
+
profileEnvironment,
|
|
123
|
+
personaFile,
|
|
124
|
+
skillDirectories: resources.skillDirectories,
|
|
125
|
+
agentDirectories: resources.agentDirectories,
|
|
126
|
+
additionalDirectories: options.additionalDirectories,
|
|
127
|
+
childExtensions: [],
|
|
128
|
+
pluginDirectories: options.pluginDirectories,
|
|
129
|
+
pluginHooks: resources.pluginHooks,
|
|
130
|
+
hookGroups,
|
|
131
|
+
hooks: options.hooks,
|
|
132
|
+
agents: options.agents,
|
|
133
|
+
mcp: options.mcp,
|
|
134
|
+
mcpConfigPath: resources.mcpConfigPath,
|
|
135
|
+
mcpProjection: resources.mcpProjection,
|
|
136
|
+
allowProtectedWrites: options.allowProtectedWrites
|
|
137
|
+
}, {
|
|
138
|
+
directory: resources.temporaryDirectory,
|
|
139
|
+
environment
|
|
140
|
+
});
|
|
141
|
+
if (options.agents) {
|
|
142
|
+
environment.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(node_path.default.delimiter);
|
|
143
|
+
environment.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(node_path.default.delimiter);
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
options,
|
|
147
|
+
environment,
|
|
148
|
+
resources,
|
|
149
|
+
plugins,
|
|
150
|
+
profile: profile?.name,
|
|
151
|
+
personaDirectory,
|
|
152
|
+
personaRoot,
|
|
153
|
+
mcpAllowlist,
|
|
154
|
+
majorModesConfig,
|
|
155
|
+
selectedLayers,
|
|
156
|
+
hookGroups,
|
|
157
|
+
defaultThemePath,
|
|
158
|
+
cleanup: resources.cleanup.bind(resources)
|
|
159
|
+
};
|
|
160
|
+
} catch (error) {
|
|
161
|
+
await telemetry.recordError(_agimon_ai_po_core_runtimeLogSinkTelemetry.HARNESS_EVENT.contextBuildFailed, error, {
|
|
162
|
+
"harness.phase": BUILD_CONTEXT_PHASE,
|
|
163
|
+
"harness.major_mode": options.majorMode,
|
|
164
|
+
...profile?.name ? { "harness.profile": profile.name } : {}
|
|
165
|
+
});
|
|
166
|
+
await resources.cleanup();
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//#endregion
|
|
171
|
+
exports.buildHarnessContext = buildHarnessContext;
|
|
172
|
+
exports.configurePreset = configurePreset;
|
|
173
|
+
exports.resolveHarnessProfile = resolveHarnessProfile;
|
|
174
|
+
|
|
175
|
+
//# sourceMappingURL=harnessContext.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessContext.cjs","names":["resolveProfile","createHarnessTelemetry","loadMajorModesConfig","filterHookDisabledLayers","resolveLayers","fs","layerHookGroups","materializePluginEntries","resolvePluginEntries","resolveMcpAllowlist","resolveSharedSkills","HARNESS_EVENT","collectResources","path","globalDoomConfigDirectory","os","crypto","writeDefaultTheme","DOOM_MCP_SESSION_ENV_VAR","applyProfileEnvironment","DEFAULT_THEME_NAME","buildPersonaPrompt"],"sources":["../../../../src/builders/cli/harnessContext.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { globalDoomConfigDirectory } from '@agimon-ai/po-config/config';\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/po-config/domains';\nimport type { DomainMcpAllowlist, PluginEntry } from '@agimon-ai/po-config/domains';\nimport {\n filterHookDisabledLayers,\n layerHookGroups,\n loadMajorModesConfig,\n resolveLayers,\n} from '@agimon-ai/po-config/majorModes';\nimport type { MajorModesConfig } from '@agimon-ai/po-config/majorModes';\nimport { applyProfileEnvironment, buildPersonaPrompt, resolveProfile } from '@agimon-ai/po-config/profiles';\nimport type { AgentProfile } from '@agimon-ai/po-config/profiles';\nimport { DOOM_MCP_SESSION_ENV_VAR } from '@agimon-ai/po-core/mcpSession';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '@agimon-ai/po-core/runtimeLogSinkTelemetry';\nimport { resolveMcpAllowlist } from '@agimon-ai/po-domain/mcp';\nimport { materializePluginEntries } from '@agimon-ai/po-domain/plugins';\nimport { collectResources, type HarnessResources } from '@agimon-ai/po-domain/resources';\nimport { DEFAULT_THEME_NAME, writeDefaultTheme } from '@agimon-ai/po-ui/theme';\n\nimport { createHarnessSession } from '../../composition/harnessState';\nimport type { HarnessOptions } from '../../composition/types/harness';\n\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 defaultThemePath: string;\n cleanup(): Promise<void>;\n}\n\n/**\n * Applies the provider environment a preset needs.\n *\n * Exported so a session server can apply the same rules before anything reads them.\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}\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.configRoot ?? 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 // A worktree reads its workspace's configuration; resources still come from the checkout.\n const configRoot = options.configRoot ?? options.repoRoot;\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(configRoot, options.homeDirectory, options.environment);\n const selectedLayers = filterHookDisabledLayers(\n majorModesConfig,\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(configRoot, options.domains, options.pluginDirectories),\n ),\n mcpAllowlist: resolveMcpAllowlist(configRoot, options.domains),\n sharedSkills: resolveSharedSkills(configRoot, 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 ?? configRoot;\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 a caller that stages into a directory it owns.\n temporaryDirectory: options.resourceDirectory,\n // Per repository, under the global home, so it outlives this process's resources.\n skillCacheDirectory:\n options.resourceDirectory === undefined\n ? path.join(\n globalDoomConfigDirectory(options.homeDirectory ?? os.homedir()),\n 'cache',\n 'skills',\n crypto.createHash('sha256').update(path.resolve(options.repoRoot)).digest('hex').slice(0, 32),\n )\n : path.join(options.resourceDirectory, 'cache', 'skills'),\n mcpAllowlist,\n sharedSkills: configured.sharedSkills,\n pluginDataRoot: path.join(globalDoomConfigDirectory(options.homeDirectory ?? os.homedir()), 'plugin-data'),\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 defaultThemePath = await writeDefaultTheme(resources.temporaryDirectory);\n const environment = { ...(options.environment ?? process.env) };\n // The file-backed projection published through Cordis is authoritative.\n // Never let a legacy parent-process projection leak into this Doom session.\n delete environment[DOOM_MCP_SESSION_ENV_VAR];\n const profileEnvironment = applyProfileEnvironment(environment, profile?.env ?? {});\n\n configurePreset(options, environment);\n environment.NX_DAEMON ??= 'false';\n environment.PO_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 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 // 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 profileIdentity: profile?.identity,\n profileVoice: profile?.voice,\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 mcpProjection: resources.mcpProjection,\n allowProtectedWrites: options.allowProtectedWrites,\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 }\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 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":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { HarnessOptions } from "../../composition/types/harness.mjs";
|
|
2
|
+
import { DomainMcpAllowlist, PluginEntry } from "@agimon-ai/po-config/domains";
|
|
3
|
+
import { MajorModesConfig } from "@agimon-ai/po-config/majorModes";
|
|
4
|
+
import { AgentProfile } from "@agimon-ai/po-config/profiles";
|
|
5
|
+
import { HarnessTelemetry } from "@agimon-ai/po-core/runtimeLogSinkTelemetry";
|
|
6
|
+
import { HarnessResources } from "@agimon-ai/po-domain/resources";
|
|
7
|
+
//#region src/builders/cli/harnessContext.d.ts
|
|
8
|
+
/**
|
|
9
|
+
* Everything a command needs, resolved once.
|
|
10
|
+
*
|
|
11
|
+
* All three commands need the same expensive preparation (domains resolved,
|
|
12
|
+
* plugins collected into a temp directory, environment assembled), so it is
|
|
13
|
+
* built here and handed to whichever command runs.
|
|
14
|
+
*/
|
|
15
|
+
export interface HarnessContext {
|
|
16
|
+
options: HarnessOptions;
|
|
17
|
+
environment: NodeJS.ProcessEnv;
|
|
18
|
+
resources: HarnessResources;
|
|
19
|
+
plugins: PluginEntry[];
|
|
20
|
+
profile?: string;
|
|
21
|
+
personaDirectory?: string;
|
|
22
|
+
/** Root personaDirectory resolves against, when a profile supplied one. */
|
|
23
|
+
personaRoot?: string;
|
|
24
|
+
mcpAllowlist?: DomainMcpAllowlist;
|
|
25
|
+
majorModesConfig: MajorModesConfig;
|
|
26
|
+
selectedLayers: string[];
|
|
27
|
+
hookGroups: string[];
|
|
28
|
+
defaultThemePath: string;
|
|
29
|
+
cleanup(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Applies the provider environment a preset needs.
|
|
33
|
+
*
|
|
34
|
+
* Exported so a session server can apply the same rules before anything reads them.
|
|
35
|
+
*/
|
|
36
|
+
export declare function configurePreset(options: Pick<HarnessOptions, 'preset' | 'piArgs'>, environment: NodeJS.ProcessEnv): void;
|
|
37
|
+
/** Resolves the optional persona and environment profile selected for this run. */
|
|
38
|
+
export declare function resolveHarnessProfile(options: HarnessOptions): AgentProfile | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Resolves the full matrix and stages every resource Pi will need.
|
|
41
|
+
*
|
|
42
|
+
* The caller owns the returned cleanup(): the temporary directory holding
|
|
43
|
+
* skills, agents, and the generated MCP config has to outlive this function
|
|
44
|
+
* and be removed once the selected command is done with it.
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildHarnessContext(options: HarnessOptions, telemetry?: HarnessTelemetry): Promise<HarnessContext>;
|
|
47
|
+
//#endregion
|
|
48
|
+
//# sourceMappingURL=harnessContext.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessContext.d.mts","names":[],"sources":["../../../../src/builders/cli/harnessContext.ts"],"mappings":";;;;;;;;;;;;;;iBA2CiB;EACf,SAAS;EACT,aAAa,OAAO;EACpB,WAAW;EACX,SAAS;EACT;EACA;;EAEA;EACA,eAAe;EACf,kBAAkB;EAClB;EACA;EACA;EACA,WAAW;;;;;;;wBAQG,gBACd,SAAS,KAAK,sCACd,aAAa,OAAO;;wBAaN,sBAAsB,SAAS,iBAAiB;;;;;;;;wBAW1C,oBACpB,SAAS,gBACT,YAAW,mBACV,QAAQ"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { createHarnessSession } from "../../composition/harnessState/index.mjs";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import { resolvePluginEntries, resolveSharedSkills } from "@agimon-ai/po-config/domains";
|
|
6
|
+
import { globalDoomConfigDirectory } from "@agimon-ai/po-config/config";
|
|
7
|
+
import { filterHookDisabledLayers, layerHookGroups, loadMajorModesConfig, resolveLayers } from "@agimon-ai/po-config/majorModes";
|
|
8
|
+
import { applyProfileEnvironment, buildPersonaPrompt, resolveProfile } from "@agimon-ai/po-config/profiles";
|
|
9
|
+
import { HARNESS_EVENT, createHarnessTelemetry } from "@agimon-ai/po-core/runtimeLogSinkTelemetry";
|
|
10
|
+
import { resolveMcpAllowlist } from "@agimon-ai/po-domain/mcp";
|
|
11
|
+
import { materializePluginEntries } from "@agimon-ai/po-domain/plugins";
|
|
12
|
+
import { collectResources } from "@agimon-ai/po-domain/resources";
|
|
13
|
+
import crypto from "node:crypto";
|
|
14
|
+
import { DEFAULT_THEME_NAME, writeDefaultTheme } from "@agimon-ai/po-ui/theme";
|
|
15
|
+
import { DOOM_MCP_SESSION_ENV_VAR } from "@agimon-ai/po-core/mcpSession";
|
|
16
|
+
//#region src/builders/cli/harnessContext.ts
|
|
17
|
+
const PRIVATE_FILE_MODE = 384;
|
|
18
|
+
const RESOLVE_CONFIG_PHASE = "resolve_config";
|
|
19
|
+
const COLLECT_RESOURCES_PHASE = "collect_resources";
|
|
20
|
+
const BUILD_CONTEXT_PHASE = "build_context";
|
|
21
|
+
/**
|
|
22
|
+
* Applies the provider environment a preset needs.
|
|
23
|
+
*
|
|
24
|
+
* Exported so a session server can apply the same rules before anything reads them.
|
|
25
|
+
*/
|
|
26
|
+
function configurePreset(options, environment) {
|
|
27
|
+
if (options.preset === "kimi") {
|
|
28
|
+
if (!environment.KIMI_API_KEY && environment.KIMI_CODE_API_KEY) environment.KIMI_API_KEY = environment.KIMI_CODE_API_KEY;
|
|
29
|
+
if (!environment.KIMI_API_KEY) throw new Error("KIMI_API_KEY or KIMI_CODE_API_KEY is required for the kimi preset");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Resolves the optional persona and environment profile selected for this run. */
|
|
33
|
+
function resolveHarnessProfile(options) {
|
|
34
|
+
return options.profile ? resolveProfile(options.configRoot ?? options.repoRoot, options.profile) : void 0;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolves the full matrix and stages every resource Pi will need.
|
|
38
|
+
*
|
|
39
|
+
* The caller owns the returned cleanup(): the temporary directory holding
|
|
40
|
+
* skills, agents, and the generated MCP config has to outlive this function
|
|
41
|
+
* and be removed once the selected command is done with it.
|
|
42
|
+
*/
|
|
43
|
+
async function buildHarnessContext(options, telemetry = createHarnessTelemetry()) {
|
|
44
|
+
const configRoot = options.configRoot ?? options.repoRoot;
|
|
45
|
+
const configured = await telemetry.runInSpan(`doom_pi.${RESOLVE_CONFIG_PHASE}`, { "harness.phase": RESOLVE_CONFIG_PHASE }, async () => {
|
|
46
|
+
const majorModesConfig = loadMajorModesConfig(configRoot, options.homeDirectory, options.environment);
|
|
47
|
+
const selectedLayers = filterHookDisabledLayers(majorModesConfig, resolveLayers(majorModesConfig, options.majorMode), options.hooks);
|
|
48
|
+
const profile = resolveHarnessProfile(options);
|
|
49
|
+
if (!fs.existsSync(options.cwd) || !fs.statSync(options.cwd).isDirectory()) throw new Error(`Working directory does not exist: ${options.cwd}`);
|
|
50
|
+
return {
|
|
51
|
+
majorModesConfig,
|
|
52
|
+
selectedLayers,
|
|
53
|
+
hookGroups: layerHookGroups(majorModesConfig, selectedLayers),
|
|
54
|
+
profile,
|
|
55
|
+
plugins: await materializePluginEntries(resolvePluginEntries(configRoot, options.domains, options.pluginDirectories)),
|
|
56
|
+
mcpAllowlist: resolveMcpAllowlist(configRoot, options.domains),
|
|
57
|
+
sharedSkills: resolveSharedSkills(configRoot, options.domains)
|
|
58
|
+
};
|
|
59
|
+
}).catch(async (error) => {
|
|
60
|
+
await telemetry.recordError(HARNESS_EVENT.configLoadFailed, error, {
|
|
61
|
+
"harness.phase": RESOLVE_CONFIG_PHASE,
|
|
62
|
+
"harness.major_mode": options.majorMode,
|
|
63
|
+
"harness.domain_count": options.domains.length
|
|
64
|
+
});
|
|
65
|
+
throw error;
|
|
66
|
+
});
|
|
67
|
+
const { majorModesConfig, selectedLayers, hookGroups, profile, plugins, mcpAllowlist } = configured;
|
|
68
|
+
const personaDirectory = profile?.persona;
|
|
69
|
+
const personaRoot = profile?.personaRoot ?? configRoot;
|
|
70
|
+
const resources = await telemetry.runInSpan(`doom_pi.${COLLECT_RESOURCES_PHASE}`, {
|
|
71
|
+
"harness.plugin.count": plugins.length,
|
|
72
|
+
"harness.agents": options.agents,
|
|
73
|
+
"harness.mcp": options.mcp
|
|
74
|
+
}, () => collectResources(options.repoRoot, plugins, {
|
|
75
|
+
agents: options.agents,
|
|
76
|
+
mcp: options.mcp,
|
|
77
|
+
temporaryDirectory: options.resourceDirectory,
|
|
78
|
+
skillCacheDirectory: options.resourceDirectory === void 0 ? path.join(globalDoomConfigDirectory(options.homeDirectory ?? os.homedir()), "cache", "skills", crypto.createHash("sha256").update(path.resolve(options.repoRoot)).digest("hex").slice(0, 32)) : path.join(options.resourceDirectory, "cache", "skills"),
|
|
79
|
+
mcpAllowlist,
|
|
80
|
+
sharedSkills: configured.sharedSkills,
|
|
81
|
+
pluginDataRoot: path.join(globalDoomConfigDirectory(options.homeDirectory ?? os.homedir()), "plugin-data")
|
|
82
|
+
})).catch(async (error) => {
|
|
83
|
+
await telemetry.recordError(HARNESS_EVENT.resourceCollectionFailed, error, {
|
|
84
|
+
"harness.phase": COLLECT_RESOURCES_PHASE,
|
|
85
|
+
"harness.plugin.count": plugins.length
|
|
86
|
+
});
|
|
87
|
+
throw error;
|
|
88
|
+
});
|
|
89
|
+
try {
|
|
90
|
+
const defaultThemePath = await writeDefaultTheme(resources.temporaryDirectory);
|
|
91
|
+
const environment = { ...options.environment ?? process.env };
|
|
92
|
+
delete environment[DOOM_MCP_SESSION_ENV_VAR];
|
|
93
|
+
const profileEnvironment = applyProfileEnvironment(environment, profile?.env ?? {});
|
|
94
|
+
configurePreset(options, environment);
|
|
95
|
+
environment.NX_DAEMON ??= "false";
|
|
96
|
+
environment.PO_THEME ||= DEFAULT_THEME_NAME;
|
|
97
|
+
environment.CLAUDE_PROJECT_DIR = options.repoRoot;
|
|
98
|
+
environment.CODEX_REPO_ROOT = options.repoRoot;
|
|
99
|
+
environment.ORIGINAL_REPO_PATH ||= options.repoRoot;
|
|
100
|
+
environment.MCP_UI_VIEWER = options.automation ? "none" : environment.MCP_UI_VIEWER ?? "";
|
|
101
|
+
const personaPrompt = personaDirectory ? buildPersonaPrompt(personaRoot, personaDirectory) : void 0;
|
|
102
|
+
let personaFile;
|
|
103
|
+
if (personaPrompt) {
|
|
104
|
+
personaFile = path.join(resources.temporaryDirectory, "persona.md");
|
|
105
|
+
await fs.promises.writeFile(personaFile, `${personaPrompt}\n`, { mode: PRIVATE_FILE_MODE });
|
|
106
|
+
}
|
|
107
|
+
createHarnessSession({
|
|
108
|
+
root: options.repoRoot,
|
|
109
|
+
majorMode: options.majorMode,
|
|
110
|
+
temporaryDirectory: resources.temporaryDirectory,
|
|
111
|
+
domains: options.domains,
|
|
112
|
+
layers: selectedLayers,
|
|
113
|
+
profile: profile?.name,
|
|
114
|
+
profileIdentity: profile?.identity,
|
|
115
|
+
profileVoice: profile?.voice,
|
|
116
|
+
profileEnvironment,
|
|
117
|
+
personaFile,
|
|
118
|
+
skillDirectories: resources.skillDirectories,
|
|
119
|
+
agentDirectories: resources.agentDirectories,
|
|
120
|
+
additionalDirectories: options.additionalDirectories,
|
|
121
|
+
childExtensions: [],
|
|
122
|
+
pluginDirectories: options.pluginDirectories,
|
|
123
|
+
pluginHooks: resources.pluginHooks,
|
|
124
|
+
hookGroups,
|
|
125
|
+
hooks: options.hooks,
|
|
126
|
+
agents: options.agents,
|
|
127
|
+
mcp: options.mcp,
|
|
128
|
+
mcpConfigPath: resources.mcpConfigPath,
|
|
129
|
+
mcpProjection: resources.mcpProjection,
|
|
130
|
+
allowProtectedWrites: options.allowProtectedWrites
|
|
131
|
+
}, {
|
|
132
|
+
directory: resources.temporaryDirectory,
|
|
133
|
+
environment
|
|
134
|
+
});
|
|
135
|
+
if (options.agents) {
|
|
136
|
+
environment.PI_SUBAGENT_EXTRA_AGENT_DIRS = resources.agentDirectories.join(path.delimiter);
|
|
137
|
+
environment.PI_SUBAGENT_EXTRA_SKILL_DIRS = resources.skillDirectories.join(path.delimiter);
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
options,
|
|
141
|
+
environment,
|
|
142
|
+
resources,
|
|
143
|
+
plugins,
|
|
144
|
+
profile: profile?.name,
|
|
145
|
+
personaDirectory,
|
|
146
|
+
personaRoot,
|
|
147
|
+
mcpAllowlist,
|
|
148
|
+
majorModesConfig,
|
|
149
|
+
selectedLayers,
|
|
150
|
+
hookGroups,
|
|
151
|
+
defaultThemePath,
|
|
152
|
+
cleanup: resources.cleanup.bind(resources)
|
|
153
|
+
};
|
|
154
|
+
} catch (error) {
|
|
155
|
+
await telemetry.recordError(HARNESS_EVENT.contextBuildFailed, error, {
|
|
156
|
+
"harness.phase": BUILD_CONTEXT_PHASE,
|
|
157
|
+
"harness.major_mode": options.majorMode,
|
|
158
|
+
...profile?.name ? { "harness.profile": profile.name } : {}
|
|
159
|
+
});
|
|
160
|
+
await resources.cleanup();
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//#endregion
|
|
165
|
+
export { buildHarnessContext, configurePreset, resolveHarnessProfile };
|
|
166
|
+
|
|
167
|
+
//# sourceMappingURL=harnessContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessContext.mjs","names":[],"sources":["../../../../src/builders/cli/harnessContext.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { globalDoomConfigDirectory } from '@agimon-ai/po-config/config';\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/po-config/domains';\nimport type { DomainMcpAllowlist, PluginEntry } from '@agimon-ai/po-config/domains';\nimport {\n filterHookDisabledLayers,\n layerHookGroups,\n loadMajorModesConfig,\n resolveLayers,\n} from '@agimon-ai/po-config/majorModes';\nimport type { MajorModesConfig } from '@agimon-ai/po-config/majorModes';\nimport { applyProfileEnvironment, buildPersonaPrompt, resolveProfile } from '@agimon-ai/po-config/profiles';\nimport type { AgentProfile } from '@agimon-ai/po-config/profiles';\nimport { DOOM_MCP_SESSION_ENV_VAR } from '@agimon-ai/po-core/mcpSession';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '@agimon-ai/po-core/runtimeLogSinkTelemetry';\nimport { resolveMcpAllowlist } from '@agimon-ai/po-domain/mcp';\nimport { materializePluginEntries } from '@agimon-ai/po-domain/plugins';\nimport { collectResources, type HarnessResources } from '@agimon-ai/po-domain/resources';\nimport { DEFAULT_THEME_NAME, writeDefaultTheme } from '@agimon-ai/po-ui/theme';\n\nimport { createHarnessSession } from '../../composition/harnessState';\nimport type { HarnessOptions } from '../../composition/types/harness';\n\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 defaultThemePath: string;\n cleanup(): Promise<void>;\n}\n\n/**\n * Applies the provider environment a preset needs.\n *\n * Exported so a session server can apply the same rules before anything reads them.\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}\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.configRoot ?? 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 // A worktree reads its workspace's configuration; resources still come from the checkout.\n const configRoot = options.configRoot ?? options.repoRoot;\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(configRoot, options.homeDirectory, options.environment);\n const selectedLayers = filterHookDisabledLayers(\n majorModesConfig,\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(configRoot, options.domains, options.pluginDirectories),\n ),\n mcpAllowlist: resolveMcpAllowlist(configRoot, options.domains),\n sharedSkills: resolveSharedSkills(configRoot, 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 ?? configRoot;\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 a caller that stages into a directory it owns.\n temporaryDirectory: options.resourceDirectory,\n // Per repository, under the global home, so it outlives this process's resources.\n skillCacheDirectory:\n options.resourceDirectory === undefined\n ? path.join(\n globalDoomConfigDirectory(options.homeDirectory ?? os.homedir()),\n 'cache',\n 'skills',\n crypto.createHash('sha256').update(path.resolve(options.repoRoot)).digest('hex').slice(0, 32),\n )\n : path.join(options.resourceDirectory, 'cache', 'skills'),\n mcpAllowlist,\n sharedSkills: configured.sharedSkills,\n pluginDataRoot: path.join(globalDoomConfigDirectory(options.homeDirectory ?? os.homedir()), 'plugin-data'),\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 defaultThemePath = await writeDefaultTheme(resources.temporaryDirectory);\n const environment = { ...(options.environment ?? process.env) };\n // The file-backed projection published through Cordis is authoritative.\n // Never let a legacy parent-process projection leak into this Doom session.\n delete environment[DOOM_MCP_SESSION_ENV_VAR];\n const profileEnvironment = applyProfileEnvironment(environment, profile?.env ?? {});\n\n configurePreset(options, environment);\n environment.NX_DAEMON ??= 'false';\n environment.PO_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 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 // 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 profileIdentity: profile?.identity,\n profileVoice: profile?.voice,\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 mcpProjection: resources.mcpProjection,\n allowProtectedWrites: options.allowProtectedWrites,\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 }\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 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":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require("../../composition/harnessState/index.cjs");
|
|
2
|
+
const require_builders_cli_extensionAssembler_index = require("../../../builders/cli/extensionAssembler/index.cjs");
|
|
3
|
+
let _agimon_ai_po_config_majorModes = require("@agimon-ai/po-config/majorModes");
|
|
4
|
+
let _agimon_ai_po_config_harnessStore = require("@agimon-ai/po-config/harnessStore");
|
|
5
|
+
//#region src/builders/cli/sessionComposition.ts
|
|
6
|
+
/**
|
|
7
|
+
* Every composition a root's config can select, one per major mode.
|
|
8
|
+
*
|
|
9
|
+
* Resolved live, so a mode added to the config reaches the next read with no sync. Hooks
|
|
10
|
+
* come from the harness state of `environment`.
|
|
11
|
+
*/
|
|
12
|
+
function rootCompositions(input) {
|
|
13
|
+
const config = (0, _agimon_ai_po_config_majorModes.loadMajorModesConfig)(input.root, input.homeDirectory, input.environment);
|
|
14
|
+
const harness = (0, _agimon_ai_po_config_harnessStore.loadHarnessState)(input.environment).state;
|
|
15
|
+
const resolvers = require_builders_cli_extensionAssembler_index.createLayerResolvers(input.root, input.environment);
|
|
16
|
+
return Object.keys(config.majorMode).map((majorMode) => require_builders_cli_extensionAssembler_index.resolveExtensionComposition({
|
|
17
|
+
majorMode,
|
|
18
|
+
layers: (0, _agimon_ai_po_config_majorModes.filterHookDisabledLayers)(config, (0, _agimon_ai_po_config_majorModes.resolveLayers)(config, majorMode), harness.hooks),
|
|
19
|
+
majorModesConfig: config,
|
|
20
|
+
resolvers,
|
|
21
|
+
...input.tolerateUnsynced === true ? { tolerateUnsynced: true } : {}
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
exports.rootCompositions = rootCompositions;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=sessionComposition.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionComposition.cjs","names":["loadMajorModesConfig","loadHarnessState","createLayerResolvers","resolveExtensionComposition","filterHookDisabledLayers","resolveLayers"],"sources":["../../../../src/builders/cli/sessionComposition.ts"],"sourcesContent":["import { filterHookDisabledLayers, loadMajorModesConfig, resolveLayers } from '@agimon-ai/po-config/majorModes';\n\nimport { loadHarnessState } from '../../composition/harnessState';\nimport { createLayerResolvers, type ExtensionComposition, resolveExtensionComposition } from './extensionAssembler';\n\n/**\n * Every composition a root's config can select, one per major mode.\n *\n * Resolved live, so a mode added to the config reaches the next read with no sync. Hooks\n * come from the harness state of `environment`.\n */\nexport function rootCompositions(input: {\n readonly root: string;\n readonly homeDirectory: string;\n readonly environment: NodeJS.ProcessEnv;\n /** Leaves a package that does not resolve yet out with a diagnostic; see `ExtensionContext`. */\n readonly tolerateUnsynced?: boolean;\n}): ExtensionComposition[] {\n const config = loadMajorModesConfig(input.root, input.homeDirectory, input.environment);\n const harness = loadHarnessState(input.environment).state;\n const resolvers = createLayerResolvers(input.root, input.environment);\n return Object.keys(config.majorMode).map((majorMode) =>\n resolveExtensionComposition({\n majorMode,\n layers: filterHookDisabledLayers(config, resolveLayers(config, majorMode), harness.hooks),\n majorModesConfig: config,\n resolvers,\n ...(input.tolerateUnsynced === true ? { tolerateUnsynced: true } : {}),\n }),\n );\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,iBAAiB,OAMN;CACzB,MAAM,UAAA,GAASA,gCAAAA,qBAAAA,CAAqB,MAAM,MAAM,MAAM,eAAe,MAAM,WAAW;CACtF,MAAM,WAAA,GAAUC,kCAAAA,iBAAAA,CAAiB,MAAM,WAAW,CAAC,CAAC;CACpD,MAAM,YAAYC,8CAAAA,qBAAqB,MAAM,MAAM,MAAM,WAAW;CACpE,OAAO,OAAO,KAAK,OAAO,SAAS,CAAC,CAAC,KAAK,cACxCC,8CAAAA,4BAA4B;EAC1B;EACA,SAAA,GAAQC,gCAAAA,yBAAAA,CAAyB,SAAA,GAAQC,gCAAAA,cAAAA,CAAc,QAAQ,SAAS,GAAG,QAAQ,KAAK;EACxF,kBAAkB;EAClB;EACA,GAAI,MAAM,qBAAqB,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACtE,CAAC,CACH;AACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { loadHarnessState } from "../../composition/harnessState/index.mjs";
|
|
2
|
+
import { createLayerResolvers, resolveExtensionComposition } from "../../../builders/cli/extensionAssembler/index.mjs";
|
|
3
|
+
import { filterHookDisabledLayers, loadMajorModesConfig, resolveLayers } from "@agimon-ai/po-config/majorModes";
|
|
4
|
+
//#region src/builders/cli/sessionComposition.ts
|
|
5
|
+
/**
|
|
6
|
+
* Every composition a root's config can select, one per major mode.
|
|
7
|
+
*
|
|
8
|
+
* Resolved live, so a mode added to the config reaches the next read with no sync. Hooks
|
|
9
|
+
* come from the harness state of `environment`.
|
|
10
|
+
*/
|
|
11
|
+
function rootCompositions(input) {
|
|
12
|
+
const config = loadMajorModesConfig(input.root, input.homeDirectory, input.environment);
|
|
13
|
+
const harness = loadHarnessState(input.environment).state;
|
|
14
|
+
const resolvers = createLayerResolvers(input.root, input.environment);
|
|
15
|
+
return Object.keys(config.majorMode).map((majorMode) => resolveExtensionComposition({
|
|
16
|
+
majorMode,
|
|
17
|
+
layers: filterHookDisabledLayers(config, resolveLayers(config, majorMode), harness.hooks),
|
|
18
|
+
majorModesConfig: config,
|
|
19
|
+
resolvers,
|
|
20
|
+
...input.tolerateUnsynced === true ? { tolerateUnsynced: true } : {}
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { rootCompositions };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=sessionComposition.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionComposition.mjs","names":[],"sources":["../../../../src/builders/cli/sessionComposition.ts"],"sourcesContent":["import { filterHookDisabledLayers, loadMajorModesConfig, resolveLayers } from '@agimon-ai/po-config/majorModes';\n\nimport { loadHarnessState } from '../../composition/harnessState';\nimport { createLayerResolvers, type ExtensionComposition, resolveExtensionComposition } from './extensionAssembler';\n\n/**\n * Every composition a root's config can select, one per major mode.\n *\n * Resolved live, so a mode added to the config reaches the next read with no sync. Hooks\n * come from the harness state of `environment`.\n */\nexport function rootCompositions(input: {\n readonly root: string;\n readonly homeDirectory: string;\n readonly environment: NodeJS.ProcessEnv;\n /** Leaves a package that does not resolve yet out with a diagnostic; see `ExtensionContext`. */\n readonly tolerateUnsynced?: boolean;\n}): ExtensionComposition[] {\n const config = loadMajorModesConfig(input.root, input.homeDirectory, input.environment);\n const harness = loadHarnessState(input.environment).state;\n const resolvers = createLayerResolvers(input.root, input.environment);\n return Object.keys(config.majorMode).map((majorMode) =>\n resolveExtensionComposition({\n majorMode,\n layers: filterHookDisabledLayers(config, resolveLayers(config, majorMode), harness.hooks),\n majorModesConfig: config,\n resolvers,\n ...(input.tolerateUnsynced === true ? { tolerateUnsynced: true } : {}),\n }),\n );\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,iBAAiB,OAMN;CACzB,MAAM,SAAS,qBAAqB,MAAM,MAAM,MAAM,eAAe,MAAM,WAAW;CACtF,MAAM,UAAU,iBAAiB,MAAM,WAAW,CAAC,CAAC;CACpD,MAAM,YAAY,qBAAqB,MAAM,MAAM,MAAM,WAAW;CACpE,OAAO,OAAO,KAAK,OAAO,SAAS,CAAC,CAAC,KAAK,cACxC,4BAA4B;EAC1B;EACA,QAAQ,yBAAyB,QAAQ,cAAc,QAAQ,SAAS,GAAG,QAAQ,KAAK;EACxF,kBAAkB;EAClB;EACA,GAAI,MAAM,qBAAqB,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACtE,CAAC,CACH;AACF"}
|