@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,32 @@
|
|
|
1
|
+
import { HarnessOptions } from "../composition/types/harness.mjs";
|
|
2
|
+
import { HarnessContext } from "../builders/cli/harnessContext.mjs";
|
|
3
|
+
import { BaseCommand } from "./commands/baseCommand.mjs";
|
|
4
|
+
import { HarnessTelemetry } from "@agimon-ai/po-core/runtimeLogSinkTelemetry";
|
|
5
|
+
//#region src/cli/cliApp.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* The terminal app reads only what sync prepared. Packages the selected layers name that do not
|
|
8
|
+
* resolve yet start a detached background sync from the repository, which registers it as a
|
|
9
|
+
* workspace so sync covers its packages, and they arrive on the next launch.
|
|
10
|
+
*/
|
|
11
|
+
export declare function requestUnsyncedPackages(repoRoot: string, context: Pick<HarnessContext, 'majorModesConfig' | 'selectedLayers' | 'environment'>): Promise<void>;
|
|
12
|
+
/** Public compatibility API; execution is implemented by the application functions. */
|
|
13
|
+
export declare class CliApp {
|
|
14
|
+
private readonly app;
|
|
15
|
+
constructor(telemetry?: HarnessTelemetry);
|
|
16
|
+
selectCommand(options: HarnessOptions): Promise<BaseCommand>;
|
|
17
|
+
runHarness(options: HarnessOptions): Promise<number>;
|
|
18
|
+
run(args: string[]): Promise<number>;
|
|
19
|
+
shutdown(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convenience wrapper kept so the binary and tests need no CliApp knowledge.
|
|
23
|
+
*
|
|
24
|
+
* Telemetry is shut down here rather than inside runHarness, because this is
|
|
25
|
+
* the only scope that owns the process: flushing earlier would drop the records
|
|
26
|
+
* a later command still emits.
|
|
27
|
+
*/
|
|
28
|
+
export declare function runCli(args: string[]): Promise<number>;
|
|
29
|
+
/** Runs an already-resolved option set, skipping argument parsing. */
|
|
30
|
+
export declare function runHarness(options: HarnessOptions): Promise<number>;
|
|
31
|
+
//#endregion
|
|
32
|
+
//# sourceMappingURL=cliApp.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliApp.d.mts","names":["_$___builders_cli_harnessContext0.HarnessContext"],"sources":["../../../src/cli/cliApp.ts"],"mappings":";;;;;;;;;;wBAwCsB,wBACpB,kBACA,SAAS,KAFWA,yEAMnB;;qBAoIU;mBACM;EACjB,YAAY,YAAY;EAGxB,cAAc,SAAS,iBAAiB,QAAQ;EAGhD,WAAW,SAAS,iBAAiB;EAGrC,IAAI,iBAAiB;EAGrB,YAAY;;;;;;;;;wBAYQ,OAAO,iBAAiB;;wBAUxB,WAAW,SAAS,iBAAiB"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { HARNESS_VERSION, printHelp } from "./help.mjs";
|
|
2
|
+
import { parseHarnessArgs } from "./options.mjs";
|
|
3
|
+
//#region src/cli/cliApp.ts
|
|
4
|
+
const NO_HARNESS_COMMAND = "No harness command selected: pass --explain or --emit-mcp, or run po to start po-web.";
|
|
5
|
+
/**
|
|
6
|
+
* Main CLI Application
|
|
7
|
+
*
|
|
8
|
+
* Owns command registration and dispatch. Preparation is shared: the context
|
|
9
|
+
* is built once and handed to whichever command claims the run.
|
|
10
|
+
*/
|
|
11
|
+
async function selectHarnessCommand(options) {
|
|
12
|
+
if (options.emitMcp) return (await import("./commands/emit-mcp/index.mjs")).runEmitMcp;
|
|
13
|
+
if (options.explain) return (await import("./commands/explain/index.mjs")).runExplain;
|
|
14
|
+
throw new Error(NO_HARNESS_COMMAND);
|
|
15
|
+
}
|
|
16
|
+
async function selectLegacyCommand(options) {
|
|
17
|
+
if (options.emitMcp) {
|
|
18
|
+
const { EmitMcpCommand } = await import("./commands/emit-mcp/index.mjs");
|
|
19
|
+
return new EmitMcpCommand();
|
|
20
|
+
}
|
|
21
|
+
if (options.explain) {
|
|
22
|
+
const { ExplainCommand } = await import("./commands/explain/index.mjs");
|
|
23
|
+
return new ExplainCommand();
|
|
24
|
+
}
|
|
25
|
+
throw new Error(NO_HARNESS_COMMAND);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The terminal app reads only what sync prepared. Packages the selected layers name that do not
|
|
29
|
+
* resolve yet start a detached background sync from the repository, which registers it as a
|
|
30
|
+
* workspace so sync covers its packages, and they arrive on the next launch.
|
|
31
|
+
*/
|
|
32
|
+
async function requestUnsyncedPackages(repoRoot, context) {
|
|
33
|
+
const [{ missingLayerPackageSpecifiers }, { createLayerResolvers }, { createBackgroundSync }] = await Promise.all([
|
|
34
|
+
import("../composition/layerPackageInstaller/index.mjs"),
|
|
35
|
+
import("../../builders/cli/extensionAssembler/index.mjs"),
|
|
36
|
+
import("../builders/server/backgroundSync.mjs")
|
|
37
|
+
]);
|
|
38
|
+
const missing = missingLayerPackageSpecifiers(context.majorModesConfig, context.selectedLayers, createLayerResolvers(repoRoot, context.environment));
|
|
39
|
+
if (missing.length === 0) return;
|
|
40
|
+
const notice = (message) => {
|
|
41
|
+
process.stderr.write(`${message}\n`);
|
|
42
|
+
};
|
|
43
|
+
notice(createBackgroundSync({
|
|
44
|
+
environment: context.environment,
|
|
45
|
+
onNotice: notice,
|
|
46
|
+
detached: true,
|
|
47
|
+
repoRoot
|
|
48
|
+
}).request("the terminal app found unsynced packages") ? `Po is syncing ${missing.join(", ")} in the background; they arrive on the next launch.` : `${missing.join(", ")} ${missing.length === 1 ? "is" : "are"} not synced; run po sync to prepare them.`);
|
|
49
|
+
}
|
|
50
|
+
/** Only the diagnostic commands consume a harness context; bare `po` runs po-web. */
|
|
51
|
+
function wantsHarnessCommand(options) {
|
|
52
|
+
return Boolean(options.emitMcp) || options.explain;
|
|
53
|
+
}
|
|
54
|
+
function createCliApplication(initialTelemetry) {
|
|
55
|
+
let telemetry = initialTelemetry;
|
|
56
|
+
let ownsTelemetry = false;
|
|
57
|
+
async function getTelemetry() {
|
|
58
|
+
if (telemetry) return telemetry;
|
|
59
|
+
const { createHarnessTelemetry } = await import("@agimon-ai/po-core/runtimeLogSinkTelemetry");
|
|
60
|
+
telemetry = createHarnessTelemetry({ deferSpans: true });
|
|
61
|
+
ownsTelemetry = true;
|
|
62
|
+
return telemetry;
|
|
63
|
+
}
|
|
64
|
+
async function runHarness(options) {
|
|
65
|
+
const telemetry = await getTelemetry();
|
|
66
|
+
const [{ buildHarnessContext }, { HARNESS_EVENT }] = await Promise.all([import("../builders/cli/harnessContext.mjs"), import("@agimon-ai/po-core/runtimeLogSinkTelemetry")]);
|
|
67
|
+
return telemetry.runInSpan("doom_pi.run", {
|
|
68
|
+
"harness.major_mode": options.majorMode,
|
|
69
|
+
"harness.domain_count": options.domains.length,
|
|
70
|
+
"harness.agents": options.agents,
|
|
71
|
+
"harness.mcp": options.mcp,
|
|
72
|
+
"harness.hooks": options.hooks,
|
|
73
|
+
...options.profile ? { "harness.profile": options.profile } : {},
|
|
74
|
+
...options.preset ? { "harness.preset": options.preset } : {}
|
|
75
|
+
}, async () => {
|
|
76
|
+
const context = await buildHarnessContext(options, telemetry);
|
|
77
|
+
try {
|
|
78
|
+
await requestUnsyncedPackages(options.repoRoot, context);
|
|
79
|
+
return await (await selectHarnessCommand(context.options))(context, telemetry);
|
|
80
|
+
} catch (error) {
|
|
81
|
+
await telemetry.recordError(HARNESS_EVENT.cliFailed, error);
|
|
82
|
+
throw error;
|
|
83
|
+
} finally {
|
|
84
|
+
await context.cleanup();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
async function run(args) {
|
|
89
|
+
if (args[0] === "init") {
|
|
90
|
+
const { runInit } = await import("./commands/init/index.mjs");
|
|
91
|
+
return runInit(args);
|
|
92
|
+
}
|
|
93
|
+
if (args[0] === "sync") {
|
|
94
|
+
const { runSync } = await import("./commands/sync/workflow.mjs");
|
|
95
|
+
return runSync(args);
|
|
96
|
+
}
|
|
97
|
+
if (args[0] === "api-export") {
|
|
98
|
+
const { runApiExport } = await import("./commands/api-export/index.mjs");
|
|
99
|
+
return runApiExport(args);
|
|
100
|
+
}
|
|
101
|
+
if (args[0] === "doctor") {
|
|
102
|
+
const { runDoctor } = await import("./commands/doctor/index.mjs");
|
|
103
|
+
return runDoctor(args);
|
|
104
|
+
}
|
|
105
|
+
if (args[0] === "compat") {
|
|
106
|
+
const [{ runCompatibility }, telemetry] = await Promise.all([import("./commands/compat/index.mjs"), getTelemetry()]);
|
|
107
|
+
return runCompatibility(args, void 0, void 0, telemetry);
|
|
108
|
+
}
|
|
109
|
+
const initial = parseHarnessArgs(args);
|
|
110
|
+
if (initial.help) {
|
|
111
|
+
printHelp();
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
if (initial.version) {
|
|
115
|
+
process.stdout.write(`${HARNESS_VERSION}\n`);
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
if (!wantsHarnessCommand(initial.options)) {
|
|
119
|
+
const { runPoWeb } = await import("./commands/web/index.mjs");
|
|
120
|
+
return runPoWeb(args);
|
|
121
|
+
}
|
|
122
|
+
const telemetry = await getTelemetry();
|
|
123
|
+
const [{ resolveHarnessOptions }, { toFailureReporter }] = await Promise.all([import("./harnessOptions.mjs"), import("@agimon-ai/po-core/runtimeLogSinkTelemetry")]);
|
|
124
|
+
return runHarness(resolveHarnessOptions({
|
|
125
|
+
args,
|
|
126
|
+
report: toFailureReporter(telemetry)
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
async function shutdown() {
|
|
130
|
+
if (ownsTelemetry) await telemetry?.shutdown();
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
run,
|
|
134
|
+
runHarness,
|
|
135
|
+
shutdown
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/** Public compatibility API; execution is implemented by the application functions. */
|
|
139
|
+
var CliApp = class {
|
|
140
|
+
app;
|
|
141
|
+
constructor(telemetry) {
|
|
142
|
+
this.app = createCliApplication(telemetry);
|
|
143
|
+
}
|
|
144
|
+
selectCommand(options) {
|
|
145
|
+
return selectLegacyCommand(options);
|
|
146
|
+
}
|
|
147
|
+
runHarness(options) {
|
|
148
|
+
return this.app.runHarness(options);
|
|
149
|
+
}
|
|
150
|
+
run(args) {
|
|
151
|
+
return this.app.run(args);
|
|
152
|
+
}
|
|
153
|
+
shutdown() {
|
|
154
|
+
return this.app.shutdown();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Convenience wrapper kept so the binary and tests need no CliApp knowledge.
|
|
159
|
+
*
|
|
160
|
+
* Telemetry is shut down here rather than inside runHarness, because this is
|
|
161
|
+
* the only scope that owns the process: flushing earlier would drop the records
|
|
162
|
+
* a later command still emits.
|
|
163
|
+
*/
|
|
164
|
+
async function runCli(args) {
|
|
165
|
+
const app = createCliApplication();
|
|
166
|
+
try {
|
|
167
|
+
return await app.run(args);
|
|
168
|
+
} finally {
|
|
169
|
+
await app.shutdown();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/** Runs an already-resolved option set, skipping argument parsing. */
|
|
173
|
+
async function runHarness(options) {
|
|
174
|
+
const app = createCliApplication();
|
|
175
|
+
try {
|
|
176
|
+
return await app.runHarness(options);
|
|
177
|
+
} finally {
|
|
178
|
+
await app.shutdown();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//#endregion
|
|
182
|
+
export { CliApp, requestUnsyncedPackages, runCli, runHarness };
|
|
183
|
+
|
|
184
|
+
//# sourceMappingURL=cliApp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliApp.mjs","names":[],"sources":["../../../src/cli/cliApp.ts"],"sourcesContent":["import type { HarnessTelemetry } from '@agimon-ai/po-core/runtimeLogSinkTelemetry';\n\nimport type { HarnessOptions } from '../composition/types/harness';\nimport type { BaseCommand } from './commands/baseCommand';\nimport { HARNESS_VERSION, printHelp } from './help';\nimport { parseHarnessArgs } from './options';\n\nconst NO_HARNESS_COMMAND = 'No harness command selected: pass --explain or --emit-mcp, or run po to start po-web.';\n\n/**\n * Main CLI Application\n *\n * Owns command registration and dispatch. Preparation is shared: the context\n * is built once and handed to whichever command claims the run.\n */\nasync function selectHarnessCommand(\n options: HarnessOptions,\n): Promise<\n (context: import('../builders/cli/harnessContext').HarnessContext, telemetry: HarnessTelemetry) => Promise<number>\n> {\n if (options.emitMcp) return (await import('./commands/emit-mcp')).runEmitMcp;\n if (options.explain) return (await import('./commands/explain')).runExplain;\n throw new Error(NO_HARNESS_COMMAND);\n}\nasync function selectLegacyCommand(options: HarnessOptions): Promise<BaseCommand> {\n if (options.emitMcp) {\n const { EmitMcpCommand } = await import('./commands/emit-mcp');\n return new EmitMcpCommand();\n }\n if (options.explain) {\n const { ExplainCommand } = await import('./commands/explain');\n return new ExplainCommand();\n }\n throw new Error(NO_HARNESS_COMMAND);\n}\n/**\n * The terminal app reads only what sync prepared. Packages the selected layers name that do not\n * resolve yet start a detached background sync from the repository, which registers it as a\n * workspace so sync covers its packages, and they arrive on the next launch.\n */\nexport async function requestUnsyncedPackages(\n repoRoot: string,\n context: Pick<\n import('../builders/cli/harnessContext').HarnessContext,\n 'majorModesConfig' | 'selectedLayers' | 'environment'\n >,\n): Promise<void> {\n const [{ missingLayerPackageSpecifiers }, { createLayerResolvers }, { createBackgroundSync }] = await Promise.all([\n import('../composition/layerPackageInstaller'),\n import('../builders/cli/extensionAssembler'),\n import('../builders/server/backgroundSync'),\n ]);\n const missing = missingLayerPackageSpecifiers(\n context.majorModesConfig,\n context.selectedLayers,\n createLayerResolvers(repoRoot, context.environment),\n );\n if (missing.length === 0) return;\n const notice = (message: string): void => {\n process.stderr.write(`${message}\\n`);\n };\n const started = createBackgroundSync({\n environment: context.environment,\n onNotice: notice,\n detached: true,\n repoRoot,\n }).request('the terminal app found unsynced packages');\n notice(\n started\n ? `Po is syncing ${missing.join(', ')} in the background; they arrive on the next launch.`\n : `${missing.join(', ')} ${missing.length === 1 ? 'is' : 'are'} not synced; run po sync to prepare them.`,\n );\n}\n/** Only the diagnostic commands consume a harness context; bare `po` runs po-web. */\nfunction wantsHarnessCommand(options: Pick<HarnessOptions, 'emitMcp' | 'explain'>): boolean {\n return Boolean(options.emitMcp) || options.explain;\n}\nfunction createCliApplication(initialTelemetry?: HarnessTelemetry) {\n let telemetry = initialTelemetry;\n let ownsTelemetry = false;\n async function getTelemetry(): Promise<HarnessTelemetry> {\n if (telemetry) return telemetry;\n const { createHarnessTelemetry } = await import('@agimon-ai/po-core/runtimeLogSinkTelemetry');\n // Telemetry's transport graph costs roughly one launcher budget slice by\n // itself. Startup callbacks and lifecycle events buffer until shutdown, so\n // transport initialization cannot compete with the Pi child for input.\n telemetry = createHarnessTelemetry({ deferSpans: true });\n ownsTelemetry = true;\n return telemetry;\n }\n\n async function runHarness(options: HarnessOptions): Promise<number> {\n const telemetry = await getTelemetry();\n const [{ buildHarnessContext }, { HARNESS_EVENT }] = await Promise.all([\n import('../builders/cli/harnessContext'),\n import('@agimon-ai/po-core/runtimeLogSinkTelemetry'),\n ]);\n return telemetry.runInSpan(\n 'doom_pi.run',\n {\n 'harness.major_mode': options.majorMode,\n 'harness.domain_count': options.domains.length,\n 'harness.agents': options.agents,\n 'harness.mcp': options.mcp,\n 'harness.hooks': options.hooks,\n ...(options.profile ? { 'harness.profile': options.profile } : {}),\n ...(options.preset ? { 'harness.preset': options.preset } : {}),\n },\n async () => {\n const context = await buildHarnessContext(options, telemetry);\n try {\n await requestUnsyncedPackages(options.repoRoot, context);\n const command = await selectHarnessCommand(context.options);\n // Selection uses the same resolved options used to build the context.\n return await command(context, telemetry);\n } catch (error) {\n await telemetry.recordError(HARNESS_EVENT.cliFailed, error);\n throw error;\n } finally {\n await context.cleanup();\n }\n },\n );\n }\n\n async function run(args: string[]): Promise<number> {\n if (args[0] === 'init') {\n const { runInit } = await import('./commands/init');\n return runInit(args);\n }\n if (args[0] === 'sync') {\n const { runSync } = await import('./commands/sync/workflow');\n return runSync(args);\n }\n if (args[0] === 'api-export') {\n const { runApiExport } = await import('./commands/api-export');\n return runApiExport(args);\n }\n if (args[0] === 'doctor') {\n const { runDoctor } = await import('./commands/doctor');\n return runDoctor(args);\n }\n if (args[0] === 'compat') {\n const [{ runCompatibility }, telemetry] = await Promise.all([import('./commands/compat'), getTelemetry()]);\n return runCompatibility(args, undefined, undefined, telemetry);\n }\n\n // The first pass resolves --cwd without touching repository configuration,\n // which keeps help and version available even when modes.yaml is malformed.\n const initial = parseHarnessArgs(args);\n if (initial.help) {\n printHelp();\n return 0;\n }\n if (initial.version) {\n process.stdout.write(`${HARNESS_VERSION}\\n`);\n return 0;\n }\n // Bare `po` serves the web console. po-web owns its own arguments, so they\n // pass through untouched and never reach repository configuration here.\n if (!wantsHarnessCommand(initial.options)) {\n const { runPoWeb } = await import('./commands/web');\n return runPoWeb(args);\n }\n const telemetry = await getTelemetry();\n const [{ resolveHarnessOptions }, { toFailureReporter }] = await Promise.all([\n import('./harnessOptions'),\n import('@agimon-ai/po-core/runtimeLogSinkTelemetry'),\n ]);\n return runHarness(resolveHarnessOptions({ args, report: toFailureReporter(telemetry) }));\n }\n\n async function shutdown(): Promise<void> {\n if (ownsTelemetry) await telemetry?.shutdown();\n }\n return { run, runHarness, shutdown };\n}\n/** Public compatibility API; execution is implemented by the application functions. */\nexport class CliApp {\n private readonly app: ReturnType<typeof createCliApplication>;\n constructor(telemetry?: HarnessTelemetry) {\n this.app = createCliApplication(telemetry);\n }\n selectCommand(options: HarnessOptions): Promise<BaseCommand> {\n return selectLegacyCommand(options);\n }\n runHarness(options: HarnessOptions): Promise<number> {\n return this.app.runHarness(options);\n }\n run(args: string[]): Promise<number> {\n return this.app.run(args);\n }\n shutdown(): Promise<void> {\n return this.app.shutdown();\n }\n}\n\n/**\n * Convenience wrapper kept so the binary and tests need no CliApp knowledge.\n *\n * Telemetry is shut down here rather than inside runHarness, because this is\n * the only scope that owns the process: flushing earlier would drop the records\n * a later command still emits.\n */\nexport async function runCli(args: string[]): Promise<number> {\n const app = createCliApplication();\n try {\n return await app.run(args);\n } finally {\n await app.shutdown();\n }\n}\n\n/** Runs an already-resolved option set, skipping argument parsing. */\nexport async function runHarness(options: HarnessOptions): Promise<number> {\n const app = createCliApplication();\n try {\n return await app.runHarness(options);\n } finally {\n await app.shutdown();\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
const require_runtime = require("../../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_router = require("../../router.cjs");
|
|
3
|
+
const require_index = require("../../../builders/apiContractExport/index.cjs");
|
|
4
|
+
let node_path = require("node:path");
|
|
5
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
6
|
+
let node_os = require("node:os");
|
|
7
|
+
node_os = require_runtime.__toESM(node_os, 1);
|
|
8
|
+
//#region src/cli/commands/api-export/index.ts
|
|
9
|
+
function apiExportHelp() {
|
|
10
|
+
return `Usage: po api-export --out <directory> [--major-mode <name>] [--strict]
|
|
11
|
+
|
|
12
|
+
Export OpenAPI, AsyncAPI, and a coverage manifest from synced global and workspace
|
|
13
|
+
API generations. No packages are installed and no services are started.
|
|
14
|
+
|
|
15
|
+
--out <directory> Destination for openapi.json, asyncapi.json, manifest.json
|
|
16
|
+
--major-mode <name> Session mode (defaults to the workspace default)
|
|
17
|
+
--strict Exit nonzero when selected contract coverage is incomplete
|
|
18
|
+
-h, --help Show this help
|
|
19
|
+
`;
|
|
20
|
+
}
|
|
21
|
+
async function runApiExport(args, environment = process.env, cwd = process.cwd(), output = process.stdout) {
|
|
22
|
+
if (require_router.wantsHelp(args.slice(1))) {
|
|
23
|
+
output.write(apiExportHelp());
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
let destination;
|
|
27
|
+
let majorMode;
|
|
28
|
+
let strict = false;
|
|
29
|
+
for (let index = 1; index < args.length; index += 1) {
|
|
30
|
+
const option = args[index];
|
|
31
|
+
if (option === "--strict") {
|
|
32
|
+
strict = true;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (option !== "--out" && option !== "--major-mode") throw new Error(`Unknown api-export argument: ${option}`);
|
|
36
|
+
const value = args[++index];
|
|
37
|
+
if (!value || value.startsWith("--")) throw new Error(`${option} requires a value`);
|
|
38
|
+
if (option === "--out") {
|
|
39
|
+
if (destination !== void 0) throw new Error("--out was specified more than once");
|
|
40
|
+
destination = value;
|
|
41
|
+
} else {
|
|
42
|
+
if (majorMode !== void 0) throw new Error("--major-mode was specified more than once");
|
|
43
|
+
majorMode = value;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (!destination) throw new Error("api-export requires --out <directory>");
|
|
47
|
+
const outputDirectory = node_path.default.resolve(cwd, destination);
|
|
48
|
+
const manifest = await require_index.exportApiContracts({
|
|
49
|
+
cwd,
|
|
50
|
+
environment,
|
|
51
|
+
homeDirectory: environment.HOME ?? node_os.default.homedir(),
|
|
52
|
+
outputDirectory,
|
|
53
|
+
majorMode
|
|
54
|
+
});
|
|
55
|
+
output.write(`${JSON.stringify({
|
|
56
|
+
directory: outputDirectory,
|
|
57
|
+
complete: manifest.complete,
|
|
58
|
+
gaps: manifest.gaps
|
|
59
|
+
})}\n`);
|
|
60
|
+
return strict && !manifest.complete ? 1 : 0;
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
exports.apiExportHelp = apiExportHelp;
|
|
64
|
+
exports.runApiExport = runApiExport;
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["wantsHelp","path","exportApiContracts","os"],"sources":["../../../../../src/cli/commands/api-export/index.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\n\nimport { exportApiContracts } from '../../../builders/apiContractExport';\nimport { wantsHelp } from '../../router';\n\nexport function apiExportHelp(): string {\n return `Usage: po api-export --out <directory> [--major-mode <name>] [--strict]\n\nExport OpenAPI, AsyncAPI, and a coverage manifest from synced global and workspace\nAPI generations. No packages are installed and no services are started.\n\n --out <directory> Destination for openapi.json, asyncapi.json, manifest.json\n --major-mode <name> Session mode (defaults to the workspace default)\n --strict Exit nonzero when selected contract coverage is incomplete\n -h, --help Show this help\n`;\n}\n\nexport async function runApiExport(\n args: readonly string[],\n environment: NodeJS.ProcessEnv = process.env,\n cwd = process.cwd(),\n output: { write(chunk: string): void } = process.stdout,\n): Promise<number> {\n if (wantsHelp(args.slice(1))) {\n output.write(apiExportHelp());\n return 0;\n }\n let destination: string | undefined;\n let majorMode: string | undefined;\n let strict = false;\n for (let index = 1; index < args.length; index += 1) {\n const option = args[index];\n if (option === '--strict') {\n strict = true;\n continue;\n }\n if (option !== '--out' && option !== '--major-mode') throw new Error(`Unknown api-export argument: ${option}`);\n const value = args[++index];\n if (!value || value.startsWith('--')) throw new Error(`${option} requires a value`);\n if (option === '--out') {\n if (destination !== undefined) throw new Error('--out was specified more than once');\n destination = value;\n } else {\n if (majorMode !== undefined) throw new Error('--major-mode was specified more than once');\n majorMode = value;\n }\n }\n if (!destination) throw new Error('api-export requires --out <directory>');\n const outputDirectory = path.resolve(cwd, destination);\n const manifest = await exportApiContracts({\n cwd,\n environment,\n homeDirectory: environment.HOME ?? os.homedir(),\n outputDirectory,\n majorMode,\n });\n output.write(`${JSON.stringify({ directory: outputDirectory, complete: manifest.complete, gaps: manifest.gaps })}\\n`);\n return strict && !manifest.complete ? 1 : 0;\n}\n"],"mappings":";;;;;;;;AAMA,SAAgB,gBAAwB;CACtC,OAAO;;;;;;;;;;AAUT;AAEA,eAAsB,aACpB,MACA,cAAiC,QAAQ,KACzC,MAAM,QAAQ,IAAI,GAClB,SAAyC,QAAQ,QAChC;CACjB,IAAIA,eAAAA,UAAU,KAAK,MAAM,CAAC,CAAC,GAAG;EAC5B,OAAO,MAAM,cAAc,CAAC;EAC5B,OAAO;CACT;CACA,IAAI;CACJ,IAAI;CACJ,IAAI,SAAS;CACb,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,SAAS,KAAK;EACpB,IAAI,WAAW,YAAY;GACzB,SAAS;GACT;EACF;EACA,IAAI,WAAW,WAAW,WAAW,gBAAgB,MAAM,IAAI,MAAM,gCAAgC,QAAQ;EAC7G,MAAM,QAAQ,KAAK,EAAE;EACrB,IAAI,CAAC,SAAS,MAAM,WAAW,IAAI,GAAG,MAAM,IAAI,MAAM,GAAG,OAAO,kBAAkB;EAClF,IAAI,WAAW,SAAS;GACtB,IAAI,gBAAgB,KAAA,GAAW,MAAM,IAAI,MAAM,oCAAoC;GACnF,cAAc;EAChB,OAAO;GACL,IAAI,cAAc,KAAA,GAAW,MAAM,IAAI,MAAM,2CAA2C;GACxF,YAAY;EACd;CACF;CACA,IAAI,CAAC,aAAa,MAAM,IAAI,MAAM,uCAAuC;CACzE,MAAM,kBAAkBC,UAAAA,QAAK,QAAQ,KAAK,WAAW;CACrD,MAAM,WAAW,MAAMC,cAAAA,mBAAmB;EACxC;EACA;EACA,eAAe,YAAY,QAAQC,QAAAA,QAAG,QAAQ;EAC9C;EACA;CACF,CAAC;CACD,OAAO,MAAM,GAAG,KAAK,UAAU;EAAE,WAAW;EAAiB,UAAU,SAAS;EAAU,MAAM,SAAS;CAAK,CAAC,EAAE,GAAG;CACpH,OAAO,UAAU,CAAC,SAAS,WAAW,IAAI;AAC5C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { wantsHelp } from "../../router.mjs";
|
|
2
|
+
import { exportApiContracts } from "../../../builders/apiContractExport/index.mjs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
//#region src/cli/commands/api-export/index.ts
|
|
6
|
+
function apiExportHelp() {
|
|
7
|
+
return `Usage: po api-export --out <directory> [--major-mode <name>] [--strict]
|
|
8
|
+
|
|
9
|
+
Export OpenAPI, AsyncAPI, and a coverage manifest from synced global and workspace
|
|
10
|
+
API generations. No packages are installed and no services are started.
|
|
11
|
+
|
|
12
|
+
--out <directory> Destination for openapi.json, asyncapi.json, manifest.json
|
|
13
|
+
--major-mode <name> Session mode (defaults to the workspace default)
|
|
14
|
+
--strict Exit nonzero when selected contract coverage is incomplete
|
|
15
|
+
-h, --help Show this help
|
|
16
|
+
`;
|
|
17
|
+
}
|
|
18
|
+
async function runApiExport(args, environment = process.env, cwd = process.cwd(), output = process.stdout) {
|
|
19
|
+
if (wantsHelp(args.slice(1))) {
|
|
20
|
+
output.write(apiExportHelp());
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
let destination;
|
|
24
|
+
let majorMode;
|
|
25
|
+
let strict = false;
|
|
26
|
+
for (let index = 1; index < args.length; index += 1) {
|
|
27
|
+
const option = args[index];
|
|
28
|
+
if (option === "--strict") {
|
|
29
|
+
strict = true;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (option !== "--out" && option !== "--major-mode") throw new Error(`Unknown api-export argument: ${option}`);
|
|
33
|
+
const value = args[++index];
|
|
34
|
+
if (!value || value.startsWith("--")) throw new Error(`${option} requires a value`);
|
|
35
|
+
if (option === "--out") {
|
|
36
|
+
if (destination !== void 0) throw new Error("--out was specified more than once");
|
|
37
|
+
destination = value;
|
|
38
|
+
} else {
|
|
39
|
+
if (majorMode !== void 0) throw new Error("--major-mode was specified more than once");
|
|
40
|
+
majorMode = value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!destination) throw new Error("api-export requires --out <directory>");
|
|
44
|
+
const outputDirectory = path.resolve(cwd, destination);
|
|
45
|
+
const manifest = await exportApiContracts({
|
|
46
|
+
cwd,
|
|
47
|
+
environment,
|
|
48
|
+
homeDirectory: environment.HOME ?? os.homedir(),
|
|
49
|
+
outputDirectory,
|
|
50
|
+
majorMode
|
|
51
|
+
});
|
|
52
|
+
output.write(`${JSON.stringify({
|
|
53
|
+
directory: outputDirectory,
|
|
54
|
+
complete: manifest.complete,
|
|
55
|
+
gaps: manifest.gaps
|
|
56
|
+
})}\n`);
|
|
57
|
+
return strict && !manifest.complete ? 1 : 0;
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { apiExportHelp, runApiExport };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/cli/commands/api-export/index.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\n\nimport { exportApiContracts } from '../../../builders/apiContractExport';\nimport { wantsHelp } from '../../router';\n\nexport function apiExportHelp(): string {\n return `Usage: po api-export --out <directory> [--major-mode <name>] [--strict]\n\nExport OpenAPI, AsyncAPI, and a coverage manifest from synced global and workspace\nAPI generations. No packages are installed and no services are started.\n\n --out <directory> Destination for openapi.json, asyncapi.json, manifest.json\n --major-mode <name> Session mode (defaults to the workspace default)\n --strict Exit nonzero when selected contract coverage is incomplete\n -h, --help Show this help\n`;\n}\n\nexport async function runApiExport(\n args: readonly string[],\n environment: NodeJS.ProcessEnv = process.env,\n cwd = process.cwd(),\n output: { write(chunk: string): void } = process.stdout,\n): Promise<number> {\n if (wantsHelp(args.slice(1))) {\n output.write(apiExportHelp());\n return 0;\n }\n let destination: string | undefined;\n let majorMode: string | undefined;\n let strict = false;\n for (let index = 1; index < args.length; index += 1) {\n const option = args[index];\n if (option === '--strict') {\n strict = true;\n continue;\n }\n if (option !== '--out' && option !== '--major-mode') throw new Error(`Unknown api-export argument: ${option}`);\n const value = args[++index];\n if (!value || value.startsWith('--')) throw new Error(`${option} requires a value`);\n if (option === '--out') {\n if (destination !== undefined) throw new Error('--out was specified more than once');\n destination = value;\n } else {\n if (majorMode !== undefined) throw new Error('--major-mode was specified more than once');\n majorMode = value;\n }\n }\n if (!destination) throw new Error('api-export requires --out <directory>');\n const outputDirectory = path.resolve(cwd, destination);\n const manifest = await exportApiContracts({\n cwd,\n environment,\n homeDirectory: environment.HOME ?? os.homedir(),\n outputDirectory,\n majorMode,\n });\n output.write(`${JSON.stringify({ directory: outputDirectory, complete: manifest.complete, gaps: manifest.gaps })}\\n`);\n return strict && !manifest.complete ? 1 : 0;\n}\n"],"mappings":";;;;;AAMA,SAAgB,gBAAwB;CACtC,OAAO;;;;;;;;;;AAUT;AAEA,eAAsB,aACpB,MACA,cAAiC,QAAQ,KACzC,MAAM,QAAQ,IAAI,GAClB,SAAyC,QAAQ,QAChC;CACjB,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,GAAG;EAC5B,OAAO,MAAM,cAAc,CAAC;EAC5B,OAAO;CACT;CACA,IAAI;CACJ,IAAI;CACJ,IAAI,SAAS;CACb,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,SAAS,KAAK;EACpB,IAAI,WAAW,YAAY;GACzB,SAAS;GACT;EACF;EACA,IAAI,WAAW,WAAW,WAAW,gBAAgB,MAAM,IAAI,MAAM,gCAAgC,QAAQ;EAC7G,MAAM,QAAQ,KAAK,EAAE;EACrB,IAAI,CAAC,SAAS,MAAM,WAAW,IAAI,GAAG,MAAM,IAAI,MAAM,GAAG,OAAO,kBAAkB;EAClF,IAAI,WAAW,SAAS;GACtB,IAAI,gBAAgB,KAAA,GAAW,MAAM,IAAI,MAAM,oCAAoC;GACnF,cAAc;EAChB,OAAO;GACL,IAAI,cAAc,KAAA,GAAW,MAAM,IAAI,MAAM,2CAA2C;GACxF,YAAY;EACd;CACF;CACA,IAAI,CAAC,aAAa,MAAM,IAAI,MAAM,uCAAuC;CACzE,MAAM,kBAAkB,KAAK,QAAQ,KAAK,WAAW;CACrD,MAAM,WAAW,MAAM,mBAAmB;EACxC;EACA;EACA,eAAe,YAAY,QAAQ,GAAG,QAAQ;EAC9C;EACA;CACF,CAAC;CACD,OAAO,MAAM,GAAG,KAAK,UAAU;EAAE,WAAW;EAAiB,UAAU,SAAS;EAAU,MAAM,SAAS;CAAK,CAAC,EAAE,GAAG;CACpH,OAAO,UAAU,CAAC,SAAS,WAAW,IAAI;AAC5C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/cli/commands/baseCommand.ts
|
|
2
|
+
/** Public compatibility contract for callers that use command classes. */
|
|
3
|
+
var BaseCommand = class {
|
|
4
|
+
/**
|
|
5
|
+
* Handle errors consistently across all commands.
|
|
6
|
+
*/
|
|
7
|
+
handleError(error) {
|
|
8
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
9
|
+
process.stderr.write(`[po] ${this.name}: ${message}\n`);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
exports.BaseCommand = BaseCommand;
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=baseCommand.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseCommand.cjs","names":[],"sources":["../../../../src/cli/commands/baseCommand.ts"],"sourcesContent":["import type { HarnessTelemetry } from '@agimon-ai/po-core/runtimeLogSinkTelemetry';\n\nimport type { HarnessContext } from '../../builders/cli/harnessContext';\nimport type { HarnessOptions } from '../../composition/types/harness';\n\n/** Public compatibility contract for callers that use command classes. */\nexport abstract class BaseCommand {\n /** Identifier used in diagnostics and tests. */\n abstract readonly name: string;\n\n /** True when the parsed options select this command. */\n abstract matches(options: HarnessOptions): boolean;\n\n /**\n * Runs the command and resolves to the process exit code.\n *\n * Telemetry is handed in rather than created per command so every stage of\n * one run reports under the same span.\n */\n abstract execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;\n\n /**\n * Handle errors consistently across all commands.\n */\n protected handleError(error: unknown): never {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[po] ${this.name}: ${message}\\n`);\n process.exit(1);\n }\n}\n"],"mappings":";;AAMA,IAAsB,cAAtB,MAAkC;;;;CAkBhC,YAAsB,OAAuB;EAC3C,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EACrE,QAAQ,OAAO,MAAM,QAAQ,KAAK,KAAK,IAAI,QAAQ,GAAG;EACtD,QAAQ,KAAK,CAAC;CAChB;AACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { HarnessOptions } from "../../composition/types/harness.mjs";
|
|
2
|
+
import { HarnessContext } from "../../builders/cli/harnessContext.mjs";
|
|
3
|
+
import { HarnessTelemetry } from "@agimon-ai/po-core/runtimeLogSinkTelemetry";
|
|
4
|
+
//#region src/cli/commands/baseCommand.d.ts
|
|
5
|
+
/** Public compatibility contract for callers that use command classes. */
|
|
6
|
+
export declare abstract class BaseCommand {
|
|
7
|
+
/** Identifier used in diagnostics and tests. */
|
|
8
|
+
abstract readonly name: string;
|
|
9
|
+
/** True when the parsed options select this command. */
|
|
10
|
+
abstract matches(options: HarnessOptions): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Runs the command and resolves to the process exit code.
|
|
13
|
+
*
|
|
14
|
+
* Telemetry is handed in rather than created per command so every stage of
|
|
15
|
+
* one run reports under the same span.
|
|
16
|
+
*/
|
|
17
|
+
abstract execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;
|
|
18
|
+
/**
|
|
19
|
+
* Handle errors consistently across all commands.
|
|
20
|
+
*/
|
|
21
|
+
protected handleError(error: unknown): never;
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
//# sourceMappingURL=baseCommand.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseCommand.d.mts","names":[],"sources":["../../../../src/cli/commands/baseCommand.ts"],"mappings":";;;;;8BAMsB;;oBAEF;;WAGT,QAAQ,SAAS;;;;;;;WAQjB,QAAQ,SAAS,gBAAgB,WAAW,mBAAmB;;;;YAK9D,YAAY"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/cli/commands/baseCommand.ts
|
|
2
|
+
/** Public compatibility contract for callers that use command classes. */
|
|
3
|
+
var BaseCommand = class {
|
|
4
|
+
/**
|
|
5
|
+
* Handle errors consistently across all commands.
|
|
6
|
+
*/
|
|
7
|
+
handleError(error) {
|
|
8
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
9
|
+
process.stderr.write(`[po] ${this.name}: ${message}\n`);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { BaseCommand };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=baseCommand.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseCommand.mjs","names":[],"sources":["../../../../src/cli/commands/baseCommand.ts"],"sourcesContent":["import type { HarnessTelemetry } from '@agimon-ai/po-core/runtimeLogSinkTelemetry';\n\nimport type { HarnessContext } from '../../builders/cli/harnessContext';\nimport type { HarnessOptions } from '../../composition/types/harness';\n\n/** Public compatibility contract for callers that use command classes. */\nexport abstract class BaseCommand {\n /** Identifier used in diagnostics and tests. */\n abstract readonly name: string;\n\n /** True when the parsed options select this command. */\n abstract matches(options: HarnessOptions): boolean;\n\n /**\n * Runs the command and resolves to the process exit code.\n *\n * Telemetry is handed in rather than created per command so every stage of\n * one run reports under the same span.\n */\n abstract execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;\n\n /**\n * Handle errors consistently across all commands.\n */\n protected handleError(error: unknown): never {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[po] ${this.name}: ${message}\\n`);\n process.exit(1);\n }\n}\n"],"mappings":";;AAMA,IAAsB,cAAtB,MAAkC;;;;CAkBhC,YAAsB,OAAuB;EAC3C,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EACrE,QAAQ,OAAO,MAAM,QAAQ,KAAK,KAAK,IAAI,QAAQ,GAAG;EACtD,QAAQ,KAAK,CAAC;CAChB;AACF"}
|
|
@@ -0,0 +1,115 @@
|
|
|
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_majorModes = require("@agimon-ai/po-config/majorModes");
|
|
11
|
+
let _agimon_ai_po_config_profiles = require("@agimon-ai/po-config/profiles");
|
|
12
|
+
let _agimon_ai_po_domain_mcp = require("@agimon-ai/po-domain/mcp");
|
|
13
|
+
let _agimon_ai_po_domain_plugins = require("@agimon-ai/po-domain/plugins");
|
|
14
|
+
let _agimon_ai_po_domain_resources = require("@agimon-ai/po-domain/resources");
|
|
15
|
+
let _agimon_ai_po_config_harnessState = require("@agimon-ai/po-config/harnessState");
|
|
16
|
+
//#region src/cli/commands/compat/context.ts
|
|
17
|
+
const GENERATED_MCP_CONFIG_FILENAME = "mcp.json";
|
|
18
|
+
const PROXY_CONFIG_FILENAME = "mcp-config.yaml";
|
|
19
|
+
const PERSONA_FILENAME = "persona.md";
|
|
20
|
+
const PRIVATE_FILE_MODE = 384;
|
|
21
|
+
const PRIVATE_DIRECTORY_MODE = 448;
|
|
22
|
+
const CONFIG_OPTION = "--config";
|
|
23
|
+
const TEMPORARY_DIRECTORY_PREFIX = "po-compat-";
|
|
24
|
+
const ADDITIONAL_DIRS_ENV = "PO_ADDITIONAL_DIRS";
|
|
25
|
+
const CLAUDE_PROJECT_DIR_ENV = "CLAUDE_PROJECT_DIR";
|
|
26
|
+
const CODEX_REPO_ROOT_ENV = "CODEX_REPO_ROOT";
|
|
27
|
+
const AGY_REPO_ROOT_ENV = "AGY_REPO_ROOT";
|
|
28
|
+
const ORIGINAL_REPO_PATH_ENV = "ORIGINAL_REPO_PATH";
|
|
29
|
+
function resolveProxyConfigPath(config, repoRoot) {
|
|
30
|
+
const proxy = (config.mcpServers ?? {})[_agimon_ai_po_domain_mcp.PROXY_SERVER_NAME];
|
|
31
|
+
const args = Array.isArray(proxy?.args) ? proxy.args.map(String) : [];
|
|
32
|
+
const configIndex = args.indexOf(CONFIG_OPTION);
|
|
33
|
+
const selected = configIndex === -1 ? void 0 : args[configIndex + 1];
|
|
34
|
+
return selected ? node_path.default.resolve(repoRoot, selected) : node_path.default.join(repoRoot, PROXY_CONFIG_FILENAME);
|
|
35
|
+
}
|
|
36
|
+
async function writeCompatibilityMcpConfig(repoRoot, plugins, allowlist, temporaryDirectory) {
|
|
37
|
+
const mcpConfigPath = (await (0, _agimon_ai_po_domain_resources.stageMcpResources)(repoRoot, plugins, {
|
|
38
|
+
enabled: true,
|
|
39
|
+
temporaryDirectory,
|
|
40
|
+
...allowlist ? { mcpAllowlist: allowlist } : {}
|
|
41
|
+
})).mcpConfigPath ?? node_path.default.join(temporaryDirectory, GENERATED_MCP_CONFIG_FILENAME);
|
|
42
|
+
return {
|
|
43
|
+
mcpConfigPath,
|
|
44
|
+
proxyConfigPath: resolveProxyConfigPath(JSON.parse(await node_fs.default.promises.readFile(mcpConfigPath, "utf8")), repoRoot)
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Resolves only the resources shared by Pi and compatibility frontends. */
|
|
48
|
+
async function buildCompatibilityContext(options) {
|
|
49
|
+
const majorModesConfig = (0, _agimon_ai_po_config_majorModes.loadMajorModesConfig)(options.repoRoot);
|
|
50
|
+
const selectedLayers = (0, _agimon_ai_po_config_majorModes.resolveLayers)(majorModesConfig, options.majorMode);
|
|
51
|
+
const hookGroups = (0, _agimon_ai_po_config_majorModes.layerHookGroups)(majorModesConfig, selectedLayers);
|
|
52
|
+
const temporaryDirectory = await node_fs.default.promises.mkdtemp(node_path.default.join(node_os.default.tmpdir(), TEMPORARY_DIRECTORY_PREFIX));
|
|
53
|
+
await node_fs.default.promises.chmod(temporaryDirectory, PRIVATE_DIRECTORY_MODE);
|
|
54
|
+
try {
|
|
55
|
+
const profile = options.profile ? (0, _agimon_ai_po_config_profiles.resolveProfile)(options.repoRoot, options.profile) : void 0;
|
|
56
|
+
const plugins = await (0, _agimon_ai_po_domain_plugins.materializePluginEntries)((0, _agimon_ai_po_config_domains.resolvePluginEntries)(options.repoRoot, options.domains, []));
|
|
57
|
+
const mcpAllowlist = (0, _agimon_ai_po_domain_mcp.resolveMcpAllowlist)(options.repoRoot, options.domains);
|
|
58
|
+
const mcp = await writeCompatibilityMcpConfig(options.repoRoot, plugins, mcpAllowlist, temporaryDirectory);
|
|
59
|
+
const environment = { ...process.env };
|
|
60
|
+
environment.NX_DAEMON ??= "false";
|
|
61
|
+
const profileEnvironment = (0, _agimon_ai_po_config_profiles.applyProfileEnvironment)(environment, profile?.env ?? {});
|
|
62
|
+
const personaPrompt = profile?.persona ? (0, _agimon_ai_po_config_profiles.buildPersonaPrompt)(profile.personaRoot, profile.persona) : void 0;
|
|
63
|
+
let personaFile;
|
|
64
|
+
if (personaPrompt) {
|
|
65
|
+
personaFile = node_path.default.join(temporaryDirectory, PERSONA_FILENAME);
|
|
66
|
+
await node_fs.default.promises.writeFile(personaFile, `${personaPrompt}\n`, { mode: PRIVATE_FILE_MODE });
|
|
67
|
+
}
|
|
68
|
+
(0, _agimon_ai_po_config_harnessState.projectHarnessEnvironment)({
|
|
69
|
+
root: options.repoRoot,
|
|
70
|
+
majorMode: options.majorMode,
|
|
71
|
+
temporaryDirectory,
|
|
72
|
+
domains: options.domains,
|
|
73
|
+
layers: selectedLayers,
|
|
74
|
+
profile: profile?.name,
|
|
75
|
+
profileEnvironment,
|
|
76
|
+
hookGroups,
|
|
77
|
+
mcpConfigPath: mcp.mcpConfigPath,
|
|
78
|
+
personaFile,
|
|
79
|
+
additionalDirectories: options.additionalDirectories,
|
|
80
|
+
hooks: true
|
|
81
|
+
}, environment);
|
|
82
|
+
environment[ADDITIONAL_DIRS_ENV] = options.additionalDirectories.join(node_path.default.delimiter);
|
|
83
|
+
environment[CLAUDE_PROJECT_DIR_ENV] = options.repoRoot;
|
|
84
|
+
environment[CODEX_REPO_ROOT_ENV] = options.repoRoot;
|
|
85
|
+
environment[AGY_REPO_ROOT_ENV] = options.repoRoot;
|
|
86
|
+
environment[ORIGINAL_REPO_PATH_ENV] ||= options.repoRoot;
|
|
87
|
+
return {
|
|
88
|
+
options,
|
|
89
|
+
environment,
|
|
90
|
+
plugins,
|
|
91
|
+
profile,
|
|
92
|
+
personaFile,
|
|
93
|
+
mcpAllowlist,
|
|
94
|
+
mcpConfigPath: mcp.mcpConfigPath,
|
|
95
|
+
proxyConfigPath: mcp.proxyConfigPath,
|
|
96
|
+
selectedLayers,
|
|
97
|
+
hookGroups,
|
|
98
|
+
sharedSkills: (0, _agimon_ai_po_config_domains.resolveSharedSkills)(options.repoRoot, options.domains),
|
|
99
|
+
cleanup: () => node_fs.default.promises.rm(temporaryDirectory, {
|
|
100
|
+
recursive: true,
|
|
101
|
+
force: true
|
|
102
|
+
})
|
|
103
|
+
};
|
|
104
|
+
} catch (error) {
|
|
105
|
+
await node_fs.default.promises.rm(temporaryDirectory, {
|
|
106
|
+
recursive: true,
|
|
107
|
+
force: true
|
|
108
|
+
});
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
exports.buildCompatibilityContext = buildCompatibilityContext;
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=context.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.cjs","names":["PROXY_SERVER_NAME","path","stageMcpResources","fs","loadMajorModesConfig","resolveLayers","layerHookGroups","os","resolveProfile","materializePluginEntries","resolvePluginEntries","resolveMcpAllowlist","applyProfileEnvironment","buildPersonaPrompt","resolveSharedSkills"],"sources":["../../../../../src/cli/commands/compat/context.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { resolvePluginEntries, resolveSharedSkills } from '@agimon-ai/po-config/domains';\nimport type { DomainMcpAllowlist, PluginEntry } from '@agimon-ai/po-config/domains';\nimport { layerHookGroups, loadMajorModesConfig, resolveLayers } 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 { PROXY_SERVER_NAME, resolveMcpAllowlist } from '@agimon-ai/po-domain/mcp';\nimport { materializePluginEntries } from '@agimon-ai/po-domain/plugins';\nimport { stageMcpResources } from '@agimon-ai/po-domain/resources';\n\nimport { projectHarnessEnvironment } from '../../../composition/harnessState';\nimport type { CompatibilityOptions } from './types';\n\ntype JsonObject = Record<string, unknown>;\n\nconst GENERATED_MCP_CONFIG_FILENAME = 'mcp.json';\nconst PROXY_CONFIG_FILENAME = 'mcp-config.yaml';\nconst PERSONA_FILENAME = 'persona.md';\nconst PRIVATE_FILE_MODE = 0o600;\nconst PRIVATE_DIRECTORY_MODE = 0o700;\nconst CONFIG_OPTION = '--config';\nconst TEMPORARY_DIRECTORY_PREFIX = 'po-compat-';\nconst ADDITIONAL_DIRS_ENV = 'PO_ADDITIONAL_DIRS';\nconst CLAUDE_PROJECT_DIR_ENV = 'CLAUDE_PROJECT_DIR';\nconst CODEX_REPO_ROOT_ENV = 'CODEX_REPO_ROOT';\nconst AGY_REPO_ROOT_ENV = 'AGY_REPO_ROOT';\nconst ORIGINAL_REPO_PATH_ENV = 'ORIGINAL_REPO_PATH';\n\nexport interface CompatibilityContext {\n options: CompatibilityOptions;\n environment: NodeJS.ProcessEnv;\n plugins: PluginEntry[];\n profile?: AgentProfile;\n personaFile?: string;\n mcpAllowlist?: DomainMcpAllowlist;\n mcpConfigPath: string;\n proxyConfigPath: string;\n selectedLayers: string[];\n hookGroups: string[];\n sharedSkills: boolean;\n cleanup(): Promise<void>;\n}\n\nfunction resolveProxyConfigPath(config: JsonObject, repoRoot: string): string {\n const servers = (config.mcpServers ?? {}) as Record<string, JsonObject>;\n const proxy = servers[PROXY_SERVER_NAME];\n const args = Array.isArray(proxy?.args) ? proxy.args.map(String) : [];\n const configIndex = args.indexOf(CONFIG_OPTION);\n const selected = configIndex === -1 ? undefined : args[configIndex + 1];\n return selected ? path.resolve(repoRoot, selected) : path.join(repoRoot, PROXY_CONFIG_FILENAME);\n}\n\nasync function writeCompatibilityMcpConfig(\n repoRoot: string,\n plugins: PluginEntry[],\n allowlist: DomainMcpAllowlist | undefined,\n temporaryDirectory: string,\n): Promise<{ mcpConfigPath: string; proxyConfigPath: string }> {\n const resources = await stageMcpResources(repoRoot, plugins, {\n enabled: true,\n temporaryDirectory,\n ...(allowlist ? { mcpAllowlist: allowlist } : {}),\n });\n const mcpConfigPath = resources.mcpConfigPath ?? path.join(temporaryDirectory, GENERATED_MCP_CONFIG_FILENAME);\n const config = JSON.parse(await fs.promises.readFile(mcpConfigPath, 'utf8')) as JsonObject;\n return { mcpConfigPath, proxyConfigPath: resolveProxyConfigPath(config, repoRoot) };\n}\n\n/** Resolves only the resources shared by Pi and compatibility frontends. */\nexport async function buildCompatibilityContext(options: CompatibilityOptions): Promise<CompatibilityContext> {\n const majorModesConfig = loadMajorModesConfig(options.repoRoot);\n const selectedLayers = resolveLayers(majorModesConfig, options.majorMode);\n const hookGroups = layerHookGroups(majorModesConfig, selectedLayers);\n const temporaryDirectory = await fs.promises.mkdtemp(path.join(os.tmpdir(), TEMPORARY_DIRECTORY_PREFIX));\n await fs.promises.chmod(temporaryDirectory, PRIVATE_DIRECTORY_MODE);\n\n try {\n const profile = options.profile ? resolveProfile(options.repoRoot, options.profile) : undefined;\n const plugins = await materializePluginEntries(resolvePluginEntries(options.repoRoot, options.domains, []));\n const mcpAllowlist = resolveMcpAllowlist(options.repoRoot, options.domains);\n const mcp = await writeCompatibilityMcpConfig(options.repoRoot, plugins, mcpAllowlist, temporaryDirectory);\n const environment = { ...process.env };\n environment.NX_DAEMON ??= 'false';\n const profileEnvironment = applyProfileEnvironment(environment, profile?.env ?? {});\n const personaPrompt = profile?.persona ? buildPersonaPrompt(profile.personaRoot, profile.persona) : undefined;\n let personaFile: string | undefined;\n\n if (personaPrompt) {\n personaFile = path.join(temporaryDirectory, PERSONA_FILENAME);\n await fs.promises.writeFile(personaFile, `${personaPrompt}\\n`, { mode: PRIVATE_FILE_MODE });\n }\n\n // Projection only, with no state file: Claude, Codex and Antigravity read\n // an environment and never the store.\n projectHarnessEnvironment(\n {\n root: options.repoRoot,\n majorMode: options.majorMode,\n temporaryDirectory,\n domains: options.domains,\n layers: selectedLayers,\n profile: profile?.name,\n profileEnvironment,\n hookGroups,\n mcpConfigPath: mcp.mcpConfigPath,\n personaFile,\n additionalDirectories: options.additionalDirectories,\n hooks: true,\n },\n environment,\n );\n environment[ADDITIONAL_DIRS_ENV] = options.additionalDirectories.join(path.delimiter);\n environment[CLAUDE_PROJECT_DIR_ENV] = options.repoRoot;\n environment[CODEX_REPO_ROOT_ENV] = options.repoRoot;\n environment[AGY_REPO_ROOT_ENV] = options.repoRoot;\n environment[ORIGINAL_REPO_PATH_ENV] ||= options.repoRoot;\n\n return {\n options,\n environment,\n plugins,\n profile,\n personaFile,\n mcpAllowlist,\n mcpConfigPath: mcp.mcpConfigPath,\n proxyConfigPath: mcp.proxyConfigPath,\n selectedLayers,\n hookGroups,\n sharedSkills: resolveSharedSkills(options.repoRoot, options.domains),\n cleanup: () => fs.promises.rm(temporaryDirectory, { recursive: true, force: true }),\n };\n } catch (error) {\n await fs.promises.rm(temporaryDirectory, { recursive: true, force: true });\n throw error;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CompatibilityOptions } from "./types.mjs";
|
|
2
|
+
import { DomainMcpAllowlist, PluginEntry } from "@agimon-ai/po-config/domains";
|
|
3
|
+
import { AgentProfile } from "@agimon-ai/po-config/profiles";
|
|
4
|
+
//#region src/cli/commands/compat/context.d.ts
|
|
5
|
+
export interface CompatibilityContext {
|
|
6
|
+
options: CompatibilityOptions;
|
|
7
|
+
environment: NodeJS.ProcessEnv;
|
|
8
|
+
plugins: PluginEntry[];
|
|
9
|
+
profile?: AgentProfile;
|
|
10
|
+
personaFile?: string;
|
|
11
|
+
mcpAllowlist?: DomainMcpAllowlist;
|
|
12
|
+
mcpConfigPath: string;
|
|
13
|
+
proxyConfigPath: string;
|
|
14
|
+
selectedLayers: string[];
|
|
15
|
+
hookGroups: string[];
|
|
16
|
+
sharedSkills: boolean;
|
|
17
|
+
cleanup(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/** Resolves only the resources shared by Pi and compatibility frontends. */
|
|
20
|
+
export declare function buildCompatibilityContext(options: CompatibilityOptions): Promise<CompatibilityContext>;
|
|
21
|
+
//#endregion
|
|
22
|
+
//# sourceMappingURL=context.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.mts","names":[],"sources":["../../../../../src/cli/commands/compat/context.ts"],"mappings":";;;;iBA+BiB;EACf,SAAS;EACT,aAAa,OAAO;EACpB,SAAS;EACT,UAAU;EACV;EACA,eAAe;EACf;EACA;EACA;EACA;EACA;EACA,WAAW;;;wBA6BS,0BAA0B,SAAS,uBAAuB,QAAQ"}
|