@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,110 @@
|
|
|
1
|
+
import { projectHarnessEnvironment } 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 { layerHookGroups, loadMajorModesConfig, resolveLayers } from "@agimon-ai/po-config/majorModes";
|
|
7
|
+
import { applyProfileEnvironment, buildPersonaPrompt, resolveProfile } from "@agimon-ai/po-config/profiles";
|
|
8
|
+
import { PROXY_SERVER_NAME, resolveMcpAllowlist } from "@agimon-ai/po-domain/mcp";
|
|
9
|
+
import { materializePluginEntries } from "@agimon-ai/po-domain/plugins";
|
|
10
|
+
import { stageMcpResources } from "@agimon-ai/po-domain/resources";
|
|
11
|
+
//#region src/cli/commands/compat/context.ts
|
|
12
|
+
const GENERATED_MCP_CONFIG_FILENAME = "mcp.json";
|
|
13
|
+
const PROXY_CONFIG_FILENAME = "mcp-config.yaml";
|
|
14
|
+
const PERSONA_FILENAME = "persona.md";
|
|
15
|
+
const PRIVATE_FILE_MODE = 384;
|
|
16
|
+
const PRIVATE_DIRECTORY_MODE = 448;
|
|
17
|
+
const CONFIG_OPTION = "--config";
|
|
18
|
+
const TEMPORARY_DIRECTORY_PREFIX = "po-compat-";
|
|
19
|
+
const ADDITIONAL_DIRS_ENV = "PO_ADDITIONAL_DIRS";
|
|
20
|
+
const CLAUDE_PROJECT_DIR_ENV = "CLAUDE_PROJECT_DIR";
|
|
21
|
+
const CODEX_REPO_ROOT_ENV = "CODEX_REPO_ROOT";
|
|
22
|
+
const AGY_REPO_ROOT_ENV = "AGY_REPO_ROOT";
|
|
23
|
+
const ORIGINAL_REPO_PATH_ENV = "ORIGINAL_REPO_PATH";
|
|
24
|
+
function resolveProxyConfigPath(config, repoRoot) {
|
|
25
|
+
const proxy = (config.mcpServers ?? {})[PROXY_SERVER_NAME];
|
|
26
|
+
const args = Array.isArray(proxy?.args) ? proxy.args.map(String) : [];
|
|
27
|
+
const configIndex = args.indexOf(CONFIG_OPTION);
|
|
28
|
+
const selected = configIndex === -1 ? void 0 : args[configIndex + 1];
|
|
29
|
+
return selected ? path.resolve(repoRoot, selected) : path.join(repoRoot, PROXY_CONFIG_FILENAME);
|
|
30
|
+
}
|
|
31
|
+
async function writeCompatibilityMcpConfig(repoRoot, plugins, allowlist, temporaryDirectory) {
|
|
32
|
+
const mcpConfigPath = (await stageMcpResources(repoRoot, plugins, {
|
|
33
|
+
enabled: true,
|
|
34
|
+
temporaryDirectory,
|
|
35
|
+
...allowlist ? { mcpAllowlist: allowlist } : {}
|
|
36
|
+
})).mcpConfigPath ?? path.join(temporaryDirectory, GENERATED_MCP_CONFIG_FILENAME);
|
|
37
|
+
return {
|
|
38
|
+
mcpConfigPath,
|
|
39
|
+
proxyConfigPath: resolveProxyConfigPath(JSON.parse(await fs.promises.readFile(mcpConfigPath, "utf8")), repoRoot)
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** Resolves only the resources shared by Pi and compatibility frontends. */
|
|
43
|
+
async function buildCompatibilityContext(options) {
|
|
44
|
+
const majorModesConfig = loadMajorModesConfig(options.repoRoot);
|
|
45
|
+
const selectedLayers = resolveLayers(majorModesConfig, options.majorMode);
|
|
46
|
+
const hookGroups = layerHookGroups(majorModesConfig, selectedLayers);
|
|
47
|
+
const temporaryDirectory = await fs.promises.mkdtemp(path.join(os.tmpdir(), TEMPORARY_DIRECTORY_PREFIX));
|
|
48
|
+
await fs.promises.chmod(temporaryDirectory, PRIVATE_DIRECTORY_MODE);
|
|
49
|
+
try {
|
|
50
|
+
const profile = options.profile ? resolveProfile(options.repoRoot, options.profile) : void 0;
|
|
51
|
+
const plugins = await materializePluginEntries(resolvePluginEntries(options.repoRoot, options.domains, []));
|
|
52
|
+
const mcpAllowlist = resolveMcpAllowlist(options.repoRoot, options.domains);
|
|
53
|
+
const mcp = await writeCompatibilityMcpConfig(options.repoRoot, plugins, mcpAllowlist, temporaryDirectory);
|
|
54
|
+
const environment = { ...process.env };
|
|
55
|
+
environment.NX_DAEMON ??= "false";
|
|
56
|
+
const profileEnvironment = applyProfileEnvironment(environment, profile?.env ?? {});
|
|
57
|
+
const personaPrompt = profile?.persona ? buildPersonaPrompt(profile.personaRoot, profile.persona) : void 0;
|
|
58
|
+
let personaFile;
|
|
59
|
+
if (personaPrompt) {
|
|
60
|
+
personaFile = path.join(temporaryDirectory, PERSONA_FILENAME);
|
|
61
|
+
await fs.promises.writeFile(personaFile, `${personaPrompt}\n`, { mode: PRIVATE_FILE_MODE });
|
|
62
|
+
}
|
|
63
|
+
projectHarnessEnvironment({
|
|
64
|
+
root: options.repoRoot,
|
|
65
|
+
majorMode: options.majorMode,
|
|
66
|
+
temporaryDirectory,
|
|
67
|
+
domains: options.domains,
|
|
68
|
+
layers: selectedLayers,
|
|
69
|
+
profile: profile?.name,
|
|
70
|
+
profileEnvironment,
|
|
71
|
+
hookGroups,
|
|
72
|
+
mcpConfigPath: mcp.mcpConfigPath,
|
|
73
|
+
personaFile,
|
|
74
|
+
additionalDirectories: options.additionalDirectories,
|
|
75
|
+
hooks: true
|
|
76
|
+
}, environment);
|
|
77
|
+
environment[ADDITIONAL_DIRS_ENV] = options.additionalDirectories.join(path.delimiter);
|
|
78
|
+
environment[CLAUDE_PROJECT_DIR_ENV] = options.repoRoot;
|
|
79
|
+
environment[CODEX_REPO_ROOT_ENV] = options.repoRoot;
|
|
80
|
+
environment[AGY_REPO_ROOT_ENV] = options.repoRoot;
|
|
81
|
+
environment[ORIGINAL_REPO_PATH_ENV] ||= options.repoRoot;
|
|
82
|
+
return {
|
|
83
|
+
options,
|
|
84
|
+
environment,
|
|
85
|
+
plugins,
|
|
86
|
+
profile,
|
|
87
|
+
personaFile,
|
|
88
|
+
mcpAllowlist,
|
|
89
|
+
mcpConfigPath: mcp.mcpConfigPath,
|
|
90
|
+
proxyConfigPath: mcp.proxyConfigPath,
|
|
91
|
+
selectedLayers,
|
|
92
|
+
hookGroups,
|
|
93
|
+
sharedSkills: resolveSharedSkills(options.repoRoot, options.domains),
|
|
94
|
+
cleanup: () => fs.promises.rm(temporaryDirectory, {
|
|
95
|
+
recursive: true,
|
|
96
|
+
force: true
|
|
97
|
+
})
|
|
98
|
+
};
|
|
99
|
+
} catch (error) {
|
|
100
|
+
await fs.promises.rm(temporaryDirectory, {
|
|
101
|
+
recursive: true,
|
|
102
|
+
force: true
|
|
103
|
+
});
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//#endregion
|
|
108
|
+
export { buildCompatibilityContext };
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=context.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.mjs","names":[],"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,26 @@
|
|
|
1
|
+
//#region src/cli/commands/compat/help.ts
|
|
2
|
+
const COMPATIBILITY_MATRIX_OPTIONS = `Compatibility matrix options:
|
|
3
|
+
--profile <name> Persona and env from .po/profiles.yaml
|
|
4
|
+
--domains <names> Comma-separated content domains
|
|
5
|
+
--major-mode <name> Named major mode from .po/modes.yaml
|
|
6
|
+
--skip-permissions Disable the launched frontend's approval prompts
|
|
7
|
+
for this run. Off by default; the run warns when on.
|
|
8
|
+
-- Pass following matrix-named flags to the provider
|
|
9
|
+
`;
|
|
10
|
+
function compatHelp() {
|
|
11
|
+
return `Usage: po compat <codex|claude|antigravity> [matrix options] [provider arguments]
|
|
12
|
+
|
|
13
|
+
Resolves the Po matrix and launches the named compatibility frontend.
|
|
14
|
+
|
|
15
|
+
${COMPATIBILITY_MATRIX_OPTIONS}
|
|
16
|
+
Options:
|
|
17
|
+
-h, --help Show this help
|
|
18
|
+
|
|
19
|
+
All other compatibility arguments pass to the provider unchanged.
|
|
20
|
+
`;
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.COMPATIBILITY_MATRIX_OPTIONS = COMPATIBILITY_MATRIX_OPTIONS;
|
|
24
|
+
exports.compatHelp = compatHelp;
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=help.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.cjs","names":[],"sources":["../../../../../src/cli/commands/compat/help.ts"],"sourcesContent":["export const COMPATIBILITY_MATRIX_OPTIONS = `Compatibility matrix options:\n --profile <name> Persona and env from .po/profiles.yaml\n --domains <names> Comma-separated content domains\n --major-mode <name> Named major mode from .po/modes.yaml\n --skip-permissions Disable the launched frontend's approval prompts\n for this run. Off by default; the run warns when on.\n -- Pass following matrix-named flags to the provider\n`;\n\nexport function compatHelp(): string {\n return `Usage: po compat <codex|claude|antigravity> [matrix options] [provider arguments]\n\nResolves the Po matrix and launches the named compatibility frontend.\n\n${COMPATIBILITY_MATRIX_OPTIONS}\nOptions:\n -h, --help Show this help\n\nAll other compatibility arguments pass to the provider unchanged.\n`;\n}\n"],"mappings":";AAAA,MAAa,+BAA+B;;;;;;;;AAS5C,SAAgB,aAAqB;CACnC,OAAO;;;;EAIP,6BAA6B;;;;;;AAM/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.mts","names":[],"sources":["../../../../../src/cli/commands/compat/help.ts"],"mappings":";wBASgB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/cli/commands/compat/help.ts
|
|
2
|
+
const COMPATIBILITY_MATRIX_OPTIONS = `Compatibility matrix options:
|
|
3
|
+
--profile <name> Persona and env from .po/profiles.yaml
|
|
4
|
+
--domains <names> Comma-separated content domains
|
|
5
|
+
--major-mode <name> Named major mode from .po/modes.yaml
|
|
6
|
+
--skip-permissions Disable the launched frontend's approval prompts
|
|
7
|
+
for this run. Off by default; the run warns when on.
|
|
8
|
+
-- Pass following matrix-named flags to the provider
|
|
9
|
+
`;
|
|
10
|
+
function compatHelp() {
|
|
11
|
+
return `Usage: po compat <codex|claude|antigravity> [matrix options] [provider arguments]
|
|
12
|
+
|
|
13
|
+
Resolves the Po matrix and launches the named compatibility frontend.
|
|
14
|
+
|
|
15
|
+
${COMPATIBILITY_MATRIX_OPTIONS}
|
|
16
|
+
Options:
|
|
17
|
+
-h, --help Show this help
|
|
18
|
+
|
|
19
|
+
All other compatibility arguments pass to the provider unchanged.
|
|
20
|
+
`;
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { COMPATIBILITY_MATRIX_OPTIONS, compatHelp };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=help.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.mjs","names":[],"sources":["../../../../../src/cli/commands/compat/help.ts"],"sourcesContent":["export const COMPATIBILITY_MATRIX_OPTIONS = `Compatibility matrix options:\n --profile <name> Persona and env from .po/profiles.yaml\n --domains <names> Comma-separated content domains\n --major-mode <name> Named major mode from .po/modes.yaml\n --skip-permissions Disable the launched frontend's approval prompts\n for this run. Off by default; the run warns when on.\n -- Pass following matrix-named flags to the provider\n`;\n\nexport function compatHelp(): string {\n return `Usage: po compat <codex|claude|antigravity> [matrix options] [provider arguments]\n\nResolves the Po matrix and launches the named compatibility frontend.\n\n${COMPATIBILITY_MATRIX_OPTIONS}\nOptions:\n -h, --help Show this help\n\nAll other compatibility arguments pass to the provider unchanged.\n`;\n}\n"],"mappings":";AAAA,MAAa,+BAA+B;;;;;;;;AAS5C,SAAgB,aAAqB;CACnC,OAAO;;;;EAIP,6BAA6B;;;;;;AAM/B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const require_runtime = require("../../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_help = require("./help.cjs");
|
|
3
|
+
const require_options = require("./options.cjs");
|
|
4
|
+
const require_index = require("../../../composition/repository/index.cjs");
|
|
5
|
+
const require_router = require("../../router.cjs");
|
|
6
|
+
const require_context = require("./context.cjs");
|
|
7
|
+
const require_index$1 = require("./providers/index.cjs");
|
|
8
|
+
let node_path = require("node:path");
|
|
9
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
10
|
+
let _agimon_ai_po_config_domains = require("@agimon-ai/po-config/domains");
|
|
11
|
+
let _agimon_ai_po_config_majorModes = require("@agimon-ai/po-config/majorModes");
|
|
12
|
+
let _agimon_ai_po_core_runtimeLogSinkTelemetry = require("@agimon-ai/po-core/runtimeLogSinkTelemetry");
|
|
13
|
+
//#region src/cli/commands/compat/index.ts
|
|
14
|
+
const COMPAT_COMMAND = "compat";
|
|
15
|
+
const HARNESS_ROOT_ENV = "PO_ROOT";
|
|
16
|
+
/** Launches a non-Pi frontend with the po matrix resolved for that run. */
|
|
17
|
+
async function runCompatibility(args, environment = process.env, currentDirectory = process.cwd(), telemetry = (0, _agimon_ai_po_core_runtimeLogSinkTelemetry.createHarnessTelemetry)()) {
|
|
18
|
+
if (!require_options.isCompatibilityProvider(args[1]) && require_router.wantsHelp(args.slice(1))) {
|
|
19
|
+
process.stdout.write(require_help.compatHelp());
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
const provider = require_options.parseCompatibilityProvider(args[1]);
|
|
23
|
+
const inheritedRoot = environment[HARNESS_ROOT_ENV];
|
|
24
|
+
const repoRoot = inheritedRoot ? node_path.default.resolve(inheritedRoot) : require_index.findRepositoryRoot(currentDirectory);
|
|
25
|
+
const parsed = require_options.parseCompatibilityArgs(args.slice(2), environment, currentDirectory, (0, _agimon_ai_po_config_majorModes.loadMajorModesConfig)(repoRoot).defaultMajorMode, (0, _agimon_ai_po_config_domains.loadDomains)(repoRoot).defaultDomains);
|
|
26
|
+
const startedAt = Date.now();
|
|
27
|
+
return telemetry.runInSpan("doom_pi.compatibility", {
|
|
28
|
+
"harness.provider": provider,
|
|
29
|
+
"harness.mode": "compatibility"
|
|
30
|
+
}, async () => {
|
|
31
|
+
const context = await require_context.buildCompatibilityContext({
|
|
32
|
+
repoRoot,
|
|
33
|
+
provider,
|
|
34
|
+
...parsed.options
|
|
35
|
+
});
|
|
36
|
+
try {
|
|
37
|
+
const exitCode = await require_index$1.launchCompatibility(context);
|
|
38
|
+
telemetry.recordEvent(_agimon_ai_po_core_runtimeLogSinkTelemetry.HARNESS_EVENT.launchCompleted, {
|
|
39
|
+
"harness.provider": provider,
|
|
40
|
+
"harness.exit_code": exitCode,
|
|
41
|
+
"harness.duration_ms": Date.now() - startedAt
|
|
42
|
+
});
|
|
43
|
+
return exitCode;
|
|
44
|
+
} catch (error) {
|
|
45
|
+
await telemetry.recordError(_agimon_ai_po_core_runtimeLogSinkTelemetry.HARNESS_EVENT.compatibilityLaunchFailed, error, {
|
|
46
|
+
"harness.provider": provider,
|
|
47
|
+
"harness.duration_ms": Date.now() - startedAt
|
|
48
|
+
});
|
|
49
|
+
throw error;
|
|
50
|
+
} finally {
|
|
51
|
+
await context.cleanup();
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/** Compatibility API. Executables call the command function directly. */
|
|
56
|
+
var CompatibilityCommand = class {
|
|
57
|
+
name = COMPAT_COMMAND;
|
|
58
|
+
telemetry;
|
|
59
|
+
constructor(telemetry = (0, _agimon_ai_po_core_runtimeLogSinkTelemetry.createHarnessTelemetry)()) {
|
|
60
|
+
this.telemetry = telemetry;
|
|
61
|
+
}
|
|
62
|
+
matches(args) {
|
|
63
|
+
return args[0] === this.name;
|
|
64
|
+
}
|
|
65
|
+
async execute(args, environment = process.env, currentDirectory = process.cwd()) {
|
|
66
|
+
return runCompatibility(args, environment, currentDirectory, this.telemetry);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
//#endregion
|
|
70
|
+
exports.CompatibilityCommand = CompatibilityCommand;
|
|
71
|
+
exports.runCompatibility = runCompatibility;
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["createHarnessTelemetry","isCompatibilityProvider","wantsHelp","compatHelp","parseCompatibilityProvider","path","findRepositoryRoot","parseCompatibilityArgs","loadMajorModesConfig","loadDomains","buildCompatibilityContext","launchCompatibility","HARNESS_EVENT"],"sources":["../../../../../src/cli/commands/compat/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { loadDomains } from '@agimon-ai/po-config/domains';\nimport { loadMajorModesConfig } from '@agimon-ai/po-config/majorModes';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '@agimon-ai/po-core/runtimeLogSinkTelemetry';\n\nimport { findRepositoryRoot } from '../../../composition/repository';\nimport { wantsHelp } from '../../router';\nimport { buildCompatibilityContext } from './context';\nimport { compatHelp } from './help';\nimport { isCompatibilityProvider, parseCompatibilityArgs, parseCompatibilityProvider } from './options';\nimport { launchCompatibility } from './providers';\n\nconst COMPAT_COMMAND = 'compat';\nconst HARNESS_ROOT_ENV = 'PO_ROOT';\n\n/** Launches a non-Pi frontend with the po matrix resolved for that run. */\nexport async function runCompatibility(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n telemetry: HarnessTelemetry = createHarnessTelemetry(),\n): Promise<number> {\n // Only when no provider was named. Once one is, every remaining argument\n // belongs to that frontend, so `compat claude --help` is Claude's help.\n if (!isCompatibilityProvider(args[1]) && wantsHelp(args.slice(1))) {\n process.stdout.write(compatHelp());\n return 0;\n }\n const provider = parseCompatibilityProvider(args[1]);\n const inheritedRoot = environment[HARNESS_ROOT_ENV];\n const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);\n const parsed = parseCompatibilityArgs(\n args.slice(2),\n environment,\n currentDirectory,\n loadMajorModesConfig(repoRoot).defaultMajorMode,\n loadDomains(repoRoot).defaultDomains,\n );\n const startedAt = Date.now();\n\n // Compatibility launches shell out to a third-party CLI and to state-sync\n // scripts, so most of what can go wrong here is invisible to Pi entirely.\n return telemetry.runInSpan(\n 'doom_pi.compatibility',\n { 'harness.provider': provider, 'harness.mode': 'compatibility' },\n async () => {\n const context = await buildCompatibilityContext({ repoRoot, provider, ...parsed.options });\n try {\n const exitCode = await launchCompatibility(context);\n void telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.provider': provider,\n 'harness.exit_code': exitCode,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError(HARNESS_EVENT.compatibilityLaunchFailed, error, {\n 'harness.provider': provider,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n } finally {\n await context.cleanup();\n }\n },\n );\n}\n\n/** Compatibility API. Executables call the command function directly. */\nexport class CompatibilityCommand {\n readonly name = COMPAT_COMMAND;\n private readonly telemetry: HarnessTelemetry;\n\n // Not a constructor parameter property: the launcher scripts run this file\n // straight from source under Node's strip-only TypeScript mode, which\n // rejects them.\n constructor(telemetry: HarnessTelemetry = createHarnessTelemetry()) {\n this.telemetry = telemetry;\n }\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n ): Promise<number> {\n return runCompatibility(args, environment, currentDirectory, this.telemetry);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;;AAGzB,eAAsB,iBACpB,MACA,cAAiC,QAAQ,KACzC,mBAAmB,QAAQ,IAAI,GAC/B,aAAA,GAA8BA,2CAAAA,uBAAAA,CAAuB,GACpC;CAGjB,IAAI,CAACC,gBAAAA,wBAAwB,KAAK,EAAE,KAAKC,eAAAA,UAAU,KAAK,MAAM,CAAC,CAAC,GAAG;EACjE,QAAQ,OAAO,MAAMC,aAAAA,WAAW,CAAC;EACjC,OAAO;CACT;CACA,MAAM,WAAWC,gBAAAA,2BAA2B,KAAK,EAAE;CACnD,MAAM,gBAAgB,YAAY;CAClC,MAAM,WAAW,gBAAgBC,UAAAA,QAAK,QAAQ,aAAa,IAAIC,cAAAA,mBAAmB,gBAAgB;CAClG,MAAM,SAASC,gBAAAA,uBACb,KAAK,MAAM,CAAC,GACZ,aACA,mBAAA,GACAC,gCAAAA,qBAAAA,CAAqB,QAAQ,CAAC,CAAC,mBAAA,GAC/BC,6BAAAA,YAAAA,CAAY,QAAQ,CAAC,CAAC,cACxB;CACA,MAAM,YAAY,KAAK,IAAI;CAI3B,OAAO,UAAU,UACf,yBACA;EAAE,oBAAoB;EAAU,gBAAgB;CAAgB,GAChE,YAAY;EACV,MAAM,UAAU,MAAMC,gBAAAA,0BAA0B;GAAE;GAAU;GAAU,GAAG,OAAO;EAAQ,CAAC;EACzF,IAAI;GACF,MAAM,WAAW,MAAMC,gBAAAA,oBAAoB,OAAO;GAClD,UAAe,YAAYC,2CAAAA,cAAc,iBAAiB;IACxD,oBAAoB;IACpB,qBAAqB;IACrB,uBAAuB,KAAK,IAAI,IAAI;GACtC,CAAC;GACD,OAAO;EACT,SAAS,OAAO;GACd,MAAM,UAAU,YAAYA,2CAAAA,cAAc,2BAA2B,OAAO;IAC1E,oBAAoB;IACpB,uBAAuB,KAAK,IAAI,IAAI;GACtC,CAAC;GACD,MAAM;EACR,UAAU;GACR,MAAM,QAAQ,QAAQ;EACxB;CACF,CACF;AACF;;AAGA,IAAa,uBAAb,MAAkC;CAChC,OAAgB;CAChB;CAKA,YAAY,aAAA,GAA8BZ,2CAAAA,uBAAAA,CAAuB,GAAG;EAClE,KAAK,YAAY;CACnB;CAEA,QAAQ,MAAyB;EAC/B,OAAO,KAAK,OAAO,KAAK;CAC1B;CAEA,MAAM,QACJ,MACA,cAAiC,QAAQ,KACzC,mBAAmB,QAAQ,IAAI,GACd;EACjB,OAAO,iBAAiB,MAAM,aAAa,kBAAkB,KAAK,SAAS;CAC7E;AACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HarnessTelemetry } from "@agimon-ai/po-core/runtimeLogSinkTelemetry";
|
|
2
|
+
//#region src/cli/commands/compat/index.d.ts
|
|
3
|
+
/** Launches a non-Pi frontend with the po matrix resolved for that run. */
|
|
4
|
+
export declare function runCompatibility(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string, telemetry?: HarnessTelemetry): Promise<number>;
|
|
5
|
+
/** Compatibility API. Executables call the command function directly. */
|
|
6
|
+
export declare class CompatibilityCommand {
|
|
7
|
+
readonly name = "compat";
|
|
8
|
+
private readonly telemetry;
|
|
9
|
+
constructor(telemetry?: HarnessTelemetry);
|
|
10
|
+
matches(args: string[]): boolean;
|
|
11
|
+
execute(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string): Promise<number>;
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/cli/commands/compat/index.ts"],"mappings":";;;wBAqBsB,iBACpB,gBACA,cAAa,OAAO,YACpB,2BACA,YAAW,mBACV;;qBAgDU;WACF;mBACQ;EAKjB,YAAY,YAAW;EAIvB,QAAQ;EAIF,QACJ,gBACA,cAAa,OAAO,YACpB,4BACC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { compatHelp } from "./help.mjs";
|
|
2
|
+
import { isCompatibilityProvider, parseCompatibilityArgs, parseCompatibilityProvider } from "./options.mjs";
|
|
3
|
+
import { findRepositoryRoot } from "../../../composition/repository/index.mjs";
|
|
4
|
+
import { wantsHelp } from "../../router.mjs";
|
|
5
|
+
import { buildCompatibilityContext } from "./context.mjs";
|
|
6
|
+
import { launchCompatibility } from "./providers/index.mjs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { loadDomains } from "@agimon-ai/po-config/domains";
|
|
9
|
+
import { loadMajorModesConfig } from "@agimon-ai/po-config/majorModes";
|
|
10
|
+
import { HARNESS_EVENT, createHarnessTelemetry } from "@agimon-ai/po-core/runtimeLogSinkTelemetry";
|
|
11
|
+
//#region src/cli/commands/compat/index.ts
|
|
12
|
+
const COMPAT_COMMAND = "compat";
|
|
13
|
+
const HARNESS_ROOT_ENV = "PO_ROOT";
|
|
14
|
+
/** Launches a non-Pi frontend with the po matrix resolved for that run. */
|
|
15
|
+
async function runCompatibility(args, environment = process.env, currentDirectory = process.cwd(), telemetry = createHarnessTelemetry()) {
|
|
16
|
+
if (!isCompatibilityProvider(args[1]) && wantsHelp(args.slice(1))) {
|
|
17
|
+
process.stdout.write(compatHelp());
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
const provider = parseCompatibilityProvider(args[1]);
|
|
21
|
+
const inheritedRoot = environment[HARNESS_ROOT_ENV];
|
|
22
|
+
const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);
|
|
23
|
+
const parsed = parseCompatibilityArgs(args.slice(2), environment, currentDirectory, loadMajorModesConfig(repoRoot).defaultMajorMode, loadDomains(repoRoot).defaultDomains);
|
|
24
|
+
const startedAt = Date.now();
|
|
25
|
+
return telemetry.runInSpan("doom_pi.compatibility", {
|
|
26
|
+
"harness.provider": provider,
|
|
27
|
+
"harness.mode": "compatibility"
|
|
28
|
+
}, async () => {
|
|
29
|
+
const context = await buildCompatibilityContext({
|
|
30
|
+
repoRoot,
|
|
31
|
+
provider,
|
|
32
|
+
...parsed.options
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
const exitCode = await launchCompatibility(context);
|
|
36
|
+
telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {
|
|
37
|
+
"harness.provider": provider,
|
|
38
|
+
"harness.exit_code": exitCode,
|
|
39
|
+
"harness.duration_ms": Date.now() - startedAt
|
|
40
|
+
});
|
|
41
|
+
return exitCode;
|
|
42
|
+
} catch (error) {
|
|
43
|
+
await telemetry.recordError(HARNESS_EVENT.compatibilityLaunchFailed, error, {
|
|
44
|
+
"harness.provider": provider,
|
|
45
|
+
"harness.duration_ms": Date.now() - startedAt
|
|
46
|
+
});
|
|
47
|
+
throw error;
|
|
48
|
+
} finally {
|
|
49
|
+
await context.cleanup();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/** Compatibility API. Executables call the command function directly. */
|
|
54
|
+
var CompatibilityCommand = class {
|
|
55
|
+
name = COMPAT_COMMAND;
|
|
56
|
+
telemetry;
|
|
57
|
+
constructor(telemetry = createHarnessTelemetry()) {
|
|
58
|
+
this.telemetry = telemetry;
|
|
59
|
+
}
|
|
60
|
+
matches(args) {
|
|
61
|
+
return args[0] === this.name;
|
|
62
|
+
}
|
|
63
|
+
async execute(args, environment = process.env, currentDirectory = process.cwd()) {
|
|
64
|
+
return runCompatibility(args, environment, currentDirectory, this.telemetry);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { CompatibilityCommand, runCompatibility };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/cli/commands/compat/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { loadDomains } from '@agimon-ai/po-config/domains';\nimport { loadMajorModesConfig } from '@agimon-ai/po-config/majorModes';\nimport {\n createHarnessTelemetry,\n HARNESS_EVENT,\n type HarnessTelemetry,\n} from '@agimon-ai/po-core/runtimeLogSinkTelemetry';\n\nimport { findRepositoryRoot } from '../../../composition/repository';\nimport { wantsHelp } from '../../router';\nimport { buildCompatibilityContext } from './context';\nimport { compatHelp } from './help';\nimport { isCompatibilityProvider, parseCompatibilityArgs, parseCompatibilityProvider } from './options';\nimport { launchCompatibility } from './providers';\n\nconst COMPAT_COMMAND = 'compat';\nconst HARNESS_ROOT_ENV = 'PO_ROOT';\n\n/** Launches a non-Pi frontend with the po matrix resolved for that run. */\nexport async function runCompatibility(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n telemetry: HarnessTelemetry = createHarnessTelemetry(),\n): Promise<number> {\n // Only when no provider was named. Once one is, every remaining argument\n // belongs to that frontend, so `compat claude --help` is Claude's help.\n if (!isCompatibilityProvider(args[1]) && wantsHelp(args.slice(1))) {\n process.stdout.write(compatHelp());\n return 0;\n }\n const provider = parseCompatibilityProvider(args[1]);\n const inheritedRoot = environment[HARNESS_ROOT_ENV];\n const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);\n const parsed = parseCompatibilityArgs(\n args.slice(2),\n environment,\n currentDirectory,\n loadMajorModesConfig(repoRoot).defaultMajorMode,\n loadDomains(repoRoot).defaultDomains,\n );\n const startedAt = Date.now();\n\n // Compatibility launches shell out to a third-party CLI and to state-sync\n // scripts, so most of what can go wrong here is invisible to Pi entirely.\n return telemetry.runInSpan(\n 'doom_pi.compatibility',\n { 'harness.provider': provider, 'harness.mode': 'compatibility' },\n async () => {\n const context = await buildCompatibilityContext({ repoRoot, provider, ...parsed.options });\n try {\n const exitCode = await launchCompatibility(context);\n void telemetry.recordEvent(HARNESS_EVENT.launchCompleted, {\n 'harness.provider': provider,\n 'harness.exit_code': exitCode,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError(HARNESS_EVENT.compatibilityLaunchFailed, error, {\n 'harness.provider': provider,\n 'harness.duration_ms': Date.now() - startedAt,\n });\n throw error;\n } finally {\n await context.cleanup();\n }\n },\n );\n}\n\n/** Compatibility API. Executables call the command function directly. */\nexport class CompatibilityCommand {\n readonly name = COMPAT_COMMAND;\n private readonly telemetry: HarnessTelemetry;\n\n // Not a constructor parameter property: the launcher scripts run this file\n // straight from source under Node's strip-only TypeScript mode, which\n // rejects them.\n constructor(telemetry: HarnessTelemetry = createHarnessTelemetry()) {\n this.telemetry = telemetry;\n }\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n ): Promise<number> {\n return runCompatibility(args, environment, currentDirectory, this.telemetry);\n }\n}\n"],"mappings":";;;;;;;;;;;AAiBA,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;;AAGzB,eAAsB,iBACpB,MACA,cAAiC,QAAQ,KACzC,mBAAmB,QAAQ,IAAI,GAC/B,YAA8B,uBAAuB,GACpC;CAGjB,IAAI,CAAC,wBAAwB,KAAK,EAAE,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC,GAAG;EACjE,QAAQ,OAAO,MAAM,WAAW,CAAC;EACjC,OAAO;CACT;CACA,MAAM,WAAW,2BAA2B,KAAK,EAAE;CACnD,MAAM,gBAAgB,YAAY;CAClC,MAAM,WAAW,gBAAgB,KAAK,QAAQ,aAAa,IAAI,mBAAmB,gBAAgB;CAClG,MAAM,SAAS,uBACb,KAAK,MAAM,CAAC,GACZ,aACA,kBACA,qBAAqB,QAAQ,CAAC,CAAC,kBAC/B,YAAY,QAAQ,CAAC,CAAC,cACxB;CACA,MAAM,YAAY,KAAK,IAAI;CAI3B,OAAO,UAAU,UACf,yBACA;EAAE,oBAAoB;EAAU,gBAAgB;CAAgB,GAChE,YAAY;EACV,MAAM,UAAU,MAAM,0BAA0B;GAAE;GAAU;GAAU,GAAG,OAAO;EAAQ,CAAC;EACzF,IAAI;GACF,MAAM,WAAW,MAAM,oBAAoB,OAAO;GAClD,UAAe,YAAY,cAAc,iBAAiB;IACxD,oBAAoB;IACpB,qBAAqB;IACrB,uBAAuB,KAAK,IAAI,IAAI;GACtC,CAAC;GACD,OAAO;EACT,SAAS,OAAO;GACd,MAAM,UAAU,YAAY,cAAc,2BAA2B,OAAO;IAC1E,oBAAoB;IACpB,uBAAuB,KAAK,IAAI,IAAI;GACtC,CAAC;GACD,MAAM;EACR,UAAU;GACR,MAAM,QAAQ,QAAQ;EACxB;CACF,CACF;AACF;;AAGA,IAAa,uBAAb,MAAkC;CAChC,OAAgB;CAChB;CAKA,YAAY,YAA8B,uBAAuB,GAAG;EAClE,KAAK,YAAY;CACnB;CAEA,QAAQ,MAAyB;EAC/B,OAAO,KAAK,OAAO,KAAK;CAC1B;CAEA,MAAM,QACJ,MACA,cAAiC,QAAQ,KACzC,mBAAmB,QAAQ,IAAI,GACd;EACjB,OAAO,iBAAiB,MAAM,aAAa,kBAAkB,KAAK,SAAS;CAC7E;AACF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
const require_matrixOptions = require("../../matrixOptions.cjs");
|
|
2
|
+
let _agimon_ai_po_config_domains = require("@agimon-ai/po-config/domains");
|
|
3
|
+
//#region src/cli/commands/compat/options.ts
|
|
4
|
+
const COMPATIBILITY_PROVIDERS = /* @__PURE__ */ new Set([
|
|
5
|
+
"antigravity",
|
|
6
|
+
"claude",
|
|
7
|
+
"codex"
|
|
8
|
+
]);
|
|
9
|
+
/** Whether a token names a provider, without throwing the way parsing does. */
|
|
10
|
+
function isCompatibilityProvider(value) {
|
|
11
|
+
return value !== void 0 && COMPATIBILITY_PROVIDERS.has(value);
|
|
12
|
+
}
|
|
13
|
+
const PROVIDER_ARGUMENT_SEPARATOR = "--";
|
|
14
|
+
const SKIP_PERMISSIONS_OPTION = "--skip-permissions";
|
|
15
|
+
function parseCompatibilityProvider(value) {
|
|
16
|
+
if (!value || !COMPATIBILITY_PROVIDERS.has(value)) throw new Error(`compat requires one of: ${[...COMPATIBILITY_PROVIDERS].join(", ")}`);
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parses only the matrix options shared by every frontend.
|
|
21
|
+
*
|
|
22
|
+
* Every other argument remains untouched for the selected provider. In
|
|
23
|
+
* particular, Pi aliases such as --effort and --output-format are not rewritten.
|
|
24
|
+
* Use -- to pass a provider-native --profile, --domain, or --major-mode option.
|
|
25
|
+
*/
|
|
26
|
+
function parseCompatibilityArgs(args, environment = process.env, currentDirectory = process.cwd(), defaultMajorMode, defaultDomains) {
|
|
27
|
+
let profile = require_matrixOptions.resolveInheritedProfile(environment);
|
|
28
|
+
let profileProvided = false;
|
|
29
|
+
let majorMode = require_matrixOptions.resolveInheritedMajorMode(environment, defaultMajorMode);
|
|
30
|
+
let majorModeProvided = false;
|
|
31
|
+
const domains = [];
|
|
32
|
+
const providerArgs = [];
|
|
33
|
+
let skipPermissions = false;
|
|
34
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
35
|
+
const arg = args[index];
|
|
36
|
+
if (arg === PROVIDER_ARGUMENT_SEPARATOR) {
|
|
37
|
+
providerArgs.push(...args.slice(index + 1));
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
if (require_matrixOptions.matchesOption(arg, "--target")) throw new Error(`${require_matrixOptions.REMOVED_TARGET_OPTION} was replaced by ${require_matrixOptions.MAJOR_MODE_OPTION}`);
|
|
41
|
+
if (require_matrixOptions.matchesOption(arg, "--layer")) throw new Error(`${require_matrixOptions.REMOVED_LAYER_OPTION} was replaced by ${require_matrixOptions.MAJOR_MODE_OPTION}`);
|
|
42
|
+
if (require_matrixOptions.matchesOption(arg, "--layers")) throw new Error(`${require_matrixOptions.REMOVED_LAYERS_OPTION} was removed; select one major mode with ${require_matrixOptions.MAJOR_MODE_OPTION}`);
|
|
43
|
+
if (require_matrixOptions.matchesOption(arg, SKIP_PERMISSIONS_OPTION)) {
|
|
44
|
+
if (arg !== SKIP_PERMISSIONS_OPTION) throw new Error(`${SKIP_PERMISSIONS_OPTION} does not take a value`);
|
|
45
|
+
skipPermissions = true;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const majorModeMatch = require_matrixOptions.readOption(args, index, require_matrixOptions.MAJOR_MODE_OPTION);
|
|
49
|
+
if (majorModeMatch) {
|
|
50
|
+
if (majorModeProvided) throw new Error(`${require_matrixOptions.MAJOR_MODE_OPTION} can only be provided once`);
|
|
51
|
+
majorMode = require_matrixOptions.parseMajorMode(majorModeMatch.value, require_matrixOptions.MAJOR_MODE_OPTION);
|
|
52
|
+
majorModeProvided = true;
|
|
53
|
+
index = majorModeMatch.nextIndex;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const profileMatch = require_matrixOptions.readOption(args, index, require_matrixOptions.PROFILE_OPTION);
|
|
57
|
+
if (profileMatch) {
|
|
58
|
+
if (profileProvided) throw new Error(`${require_matrixOptions.PROFILE_OPTION} can only be provided once`);
|
|
59
|
+
profile = require_matrixOptions.parseProfileValue(profileMatch.value, require_matrixOptions.PROFILE_OPTION);
|
|
60
|
+
profileProvided = true;
|
|
61
|
+
index = profileMatch.nextIndex;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const domainMatch = require_matrixOptions.readOption(args, index, "--domains") ?? require_matrixOptions.readOption(args, index, "--domain");
|
|
65
|
+
if (domainMatch) {
|
|
66
|
+
domains.push(...require_matrixOptions.parseRequiredCsv(domainMatch.value, require_matrixOptions.matchesOption(arg, "--domains") ? require_matrixOptions.DOMAINS_OPTION : require_matrixOptions.DOMAIN_OPTION));
|
|
67
|
+
index = domainMatch.nextIndex;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
providerArgs.push(arg);
|
|
71
|
+
}
|
|
72
|
+
if (domains.length === 0) domains.push(...(0, _agimon_ai_po_config_domains.defaultDomainsForMajorMode)(majorMode, environment, defaultDomains));
|
|
73
|
+
return { options: {
|
|
74
|
+
currentDirectory,
|
|
75
|
+
profile,
|
|
76
|
+
domains,
|
|
77
|
+
majorMode,
|
|
78
|
+
providerArgs,
|
|
79
|
+
additionalDirectories: [...new Set(require_matrixOptions.resolveAdditionalDirectories(environment, currentDirectory))],
|
|
80
|
+
skipPermissions
|
|
81
|
+
} };
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
exports.isCompatibilityProvider = isCompatibilityProvider;
|
|
85
|
+
exports.parseCompatibilityArgs = parseCompatibilityArgs;
|
|
86
|
+
exports.parseCompatibilityProvider = parseCompatibilityProvider;
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=options.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.cjs","names":["resolveInheritedProfile","resolveInheritedMajorMode","matchesOption","REMOVED_TARGET_OPTION","MAJOR_MODE_OPTION","REMOVED_LAYER_OPTION","REMOVED_LAYERS_OPTION","readOption","parseMajorMode","PROFILE_OPTION","parseProfileValue","parseRequiredCsv","DOMAINS_OPTION","DOMAIN_OPTION","defaultDomainsForMajorMode","resolveAdditionalDirectories"],"sources":["../../../../../src/cli/commands/compat/options.ts"],"sourcesContent":["import { defaultDomainsForMajorMode } from '@agimon-ai/po-config/domains';\n\nimport {\n DOMAIN_OPTION,\n DOMAINS_OPTION,\n MAJOR_MODE_OPTION,\n matchesOption,\n PROFILE_OPTION,\n parseMajorMode,\n parseProfileValue,\n parseRequiredCsv,\n REMOVED_LAYER_OPTION,\n REMOVED_LAYERS_OPTION,\n REMOVED_TARGET_OPTION,\n readOption,\n resolveAdditionalDirectories,\n resolveInheritedMajorMode,\n resolveInheritedProfile,\n} from '../../matrixOptions';\nimport type { CompatibilityProvider, ParsedCompatibilityArgs } from './types';\n\nconst COMPATIBILITY_PROVIDERS = new Set<CompatibilityProvider>(['antigravity', 'claude', 'codex']);\n\n/** Whether a token names a provider, without throwing the way parsing does. */\nexport function isCompatibilityProvider(value: string | undefined): value is CompatibilityProvider {\n return value !== undefined && COMPATIBILITY_PROVIDERS.has(value as CompatibilityProvider);\n}\nconst PROVIDER_ARGUMENT_SEPARATOR = '--';\nconst SKIP_PERMISSIONS_OPTION = '--skip-permissions';\n\nexport function parseCompatibilityProvider(value: string | undefined): CompatibilityProvider {\n if (!value || !COMPATIBILITY_PROVIDERS.has(value as CompatibilityProvider)) {\n throw new Error(`compat requires one of: ${[...COMPATIBILITY_PROVIDERS].join(', ')}`);\n }\n return value as CompatibilityProvider;\n}\n\n/**\n * Parses only the matrix options shared by every frontend.\n *\n * Every other argument remains untouched for the selected provider. In\n * particular, Pi aliases such as --effort and --output-format are not rewritten.\n * Use -- to pass a provider-native --profile, --domain, or --major-mode option.\n */\nexport function parseCompatibilityArgs(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n defaultMajorMode?: string,\n defaultDomains?: readonly string[],\n): ParsedCompatibilityArgs {\n let profile = resolveInheritedProfile(environment);\n let profileProvided = false;\n let majorMode = resolveInheritedMajorMode(environment, defaultMajorMode);\n let majorModeProvided = false;\n const domains: string[] = [];\n const providerArgs: string[] = [];\n let skipPermissions = false;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index]!;\n if (arg === PROVIDER_ARGUMENT_SEPARATOR) {\n providerArgs.push(...args.slice(index + 1));\n break;\n }\n if (matchesOption(arg, REMOVED_TARGET_OPTION)) {\n throw new Error(`${REMOVED_TARGET_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, REMOVED_LAYER_OPTION)) {\n throw new Error(`${REMOVED_LAYER_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, REMOVED_LAYERS_OPTION)) {\n throw new Error(`${REMOVED_LAYERS_OPTION} was removed; select one major mode with ${MAJOR_MODE_OPTION}`);\n }\n\n if (matchesOption(arg, SKIP_PERMISSIONS_OPTION)) {\n if (arg !== SKIP_PERMISSIONS_OPTION) throw new Error(`${SKIP_PERMISSIONS_OPTION} does not take a value`);\n skipPermissions = true;\n continue;\n }\n\n const majorModeMatch = readOption(args, index, MAJOR_MODE_OPTION);\n if (majorModeMatch) {\n if (majorModeProvided) throw new Error(`${MAJOR_MODE_OPTION} can only be provided once`);\n majorMode = parseMajorMode(majorModeMatch.value, MAJOR_MODE_OPTION);\n majorModeProvided = true;\n index = majorModeMatch.nextIndex;\n continue;\n }\n\n const profileMatch = readOption(args, index, PROFILE_OPTION);\n if (profileMatch) {\n if (profileProvided) throw new Error(`${PROFILE_OPTION} can only be provided once`);\n profile = parseProfileValue(profileMatch.value, PROFILE_OPTION);\n profileProvided = true;\n index = profileMatch.nextIndex;\n continue;\n }\n\n const domainMatch = readOption(args, index, DOMAINS_OPTION) ?? readOption(args, index, DOMAIN_OPTION);\n if (domainMatch) {\n domains.push(\n ...parseRequiredCsv(domainMatch.value, matchesOption(arg, DOMAINS_OPTION) ? DOMAINS_OPTION : DOMAIN_OPTION),\n );\n index = domainMatch.nextIndex;\n continue;\n }\n\n providerArgs.push(arg);\n }\n\n if (domains.length === 0) domains.push(...defaultDomainsForMajorMode(majorMode, environment, defaultDomains));\n\n return {\n options: {\n currentDirectory,\n profile,\n domains,\n majorMode,\n providerArgs,\n additionalDirectories: [...new Set(resolveAdditionalDirectories(environment, currentDirectory))],\n skipPermissions,\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CompatibilityProvider, ParsedCompatibilityArgs } from "./types.mjs";
|
|
2
|
+
//#region src/cli/commands/compat/options.d.ts
|
|
3
|
+
/** Whether a token names a provider, without throwing the way parsing does. */
|
|
4
|
+
export declare function isCompatibilityProvider(value: string | undefined): value is CompatibilityProvider;
|
|
5
|
+
export declare function parseCompatibilityProvider(value: string | undefined): CompatibilityProvider;
|
|
6
|
+
/**
|
|
7
|
+
* Parses only the matrix options shared by every frontend.
|
|
8
|
+
*
|
|
9
|
+
* Every other argument remains untouched for the selected provider. In
|
|
10
|
+
* particular, Pi aliases such as --effort and --output-format are not rewritten.
|
|
11
|
+
* Use -- to pass a provider-native --profile, --domain, or --major-mode option.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseCompatibilityArgs(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string, defaultMajorMode?: string, defaultDomains?: readonly string[]): ParsedCompatibilityArgs;
|
|
14
|
+
//#endregion
|
|
15
|
+
//# sourceMappingURL=options.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.mts","names":[],"sources":["../../../../../src/cli/commands/compat/options.ts"],"mappings":";;;wBAwBgB,wBAAwB,4BAA4B,SAAS;wBAM7D,2BAA2B,4BAA4B;;;;;;;;wBAcvD,uBACd,gBACA,cAAa,OAAO,YACpB,2BACA,2BACA,qCACC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { DOMAINS_OPTION, DOMAIN_OPTION, MAJOR_MODE_OPTION, PROFILE_OPTION, REMOVED_LAYERS_OPTION, REMOVED_LAYER_OPTION, REMOVED_TARGET_OPTION, matchesOption, parseMajorMode, parseProfileValue, parseRequiredCsv, readOption, resolveAdditionalDirectories, resolveInheritedMajorMode, resolveInheritedProfile } from "../../matrixOptions.mjs";
|
|
2
|
+
import { defaultDomainsForMajorMode } from "@agimon-ai/po-config/domains";
|
|
3
|
+
//#region src/cli/commands/compat/options.ts
|
|
4
|
+
const COMPATIBILITY_PROVIDERS = /* @__PURE__ */ new Set([
|
|
5
|
+
"antigravity",
|
|
6
|
+
"claude",
|
|
7
|
+
"codex"
|
|
8
|
+
]);
|
|
9
|
+
/** Whether a token names a provider, without throwing the way parsing does. */
|
|
10
|
+
function isCompatibilityProvider(value) {
|
|
11
|
+
return value !== void 0 && COMPATIBILITY_PROVIDERS.has(value);
|
|
12
|
+
}
|
|
13
|
+
const PROVIDER_ARGUMENT_SEPARATOR = "--";
|
|
14
|
+
const SKIP_PERMISSIONS_OPTION = "--skip-permissions";
|
|
15
|
+
function parseCompatibilityProvider(value) {
|
|
16
|
+
if (!value || !COMPATIBILITY_PROVIDERS.has(value)) throw new Error(`compat requires one of: ${[...COMPATIBILITY_PROVIDERS].join(", ")}`);
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parses only the matrix options shared by every frontend.
|
|
21
|
+
*
|
|
22
|
+
* Every other argument remains untouched for the selected provider. In
|
|
23
|
+
* particular, Pi aliases such as --effort and --output-format are not rewritten.
|
|
24
|
+
* Use -- to pass a provider-native --profile, --domain, or --major-mode option.
|
|
25
|
+
*/
|
|
26
|
+
function parseCompatibilityArgs(args, environment = process.env, currentDirectory = process.cwd(), defaultMajorMode, defaultDomains) {
|
|
27
|
+
let profile = resolveInheritedProfile(environment);
|
|
28
|
+
let profileProvided = false;
|
|
29
|
+
let majorMode = resolveInheritedMajorMode(environment, defaultMajorMode);
|
|
30
|
+
let majorModeProvided = false;
|
|
31
|
+
const domains = [];
|
|
32
|
+
const providerArgs = [];
|
|
33
|
+
let skipPermissions = false;
|
|
34
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
35
|
+
const arg = args[index];
|
|
36
|
+
if (arg === PROVIDER_ARGUMENT_SEPARATOR) {
|
|
37
|
+
providerArgs.push(...args.slice(index + 1));
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
if (matchesOption(arg, "--target")) throw new Error(`${REMOVED_TARGET_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);
|
|
41
|
+
if (matchesOption(arg, "--layer")) throw new Error(`${REMOVED_LAYER_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);
|
|
42
|
+
if (matchesOption(arg, "--layers")) throw new Error(`${REMOVED_LAYERS_OPTION} was removed; select one major mode with ${MAJOR_MODE_OPTION}`);
|
|
43
|
+
if (matchesOption(arg, SKIP_PERMISSIONS_OPTION)) {
|
|
44
|
+
if (arg !== SKIP_PERMISSIONS_OPTION) throw new Error(`${SKIP_PERMISSIONS_OPTION} does not take a value`);
|
|
45
|
+
skipPermissions = true;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const majorModeMatch = readOption(args, index, MAJOR_MODE_OPTION);
|
|
49
|
+
if (majorModeMatch) {
|
|
50
|
+
if (majorModeProvided) throw new Error(`${MAJOR_MODE_OPTION} can only be provided once`);
|
|
51
|
+
majorMode = parseMajorMode(majorModeMatch.value, MAJOR_MODE_OPTION);
|
|
52
|
+
majorModeProvided = true;
|
|
53
|
+
index = majorModeMatch.nextIndex;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const profileMatch = readOption(args, index, PROFILE_OPTION);
|
|
57
|
+
if (profileMatch) {
|
|
58
|
+
if (profileProvided) throw new Error(`${PROFILE_OPTION} can only be provided once`);
|
|
59
|
+
profile = parseProfileValue(profileMatch.value, PROFILE_OPTION);
|
|
60
|
+
profileProvided = true;
|
|
61
|
+
index = profileMatch.nextIndex;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const domainMatch = readOption(args, index, "--domains") ?? readOption(args, index, "--domain");
|
|
65
|
+
if (domainMatch) {
|
|
66
|
+
domains.push(...parseRequiredCsv(domainMatch.value, matchesOption(arg, "--domains") ? DOMAINS_OPTION : DOMAIN_OPTION));
|
|
67
|
+
index = domainMatch.nextIndex;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
providerArgs.push(arg);
|
|
71
|
+
}
|
|
72
|
+
if (domains.length === 0) domains.push(...defaultDomainsForMajorMode(majorMode, environment, defaultDomains));
|
|
73
|
+
return { options: {
|
|
74
|
+
currentDirectory,
|
|
75
|
+
profile,
|
|
76
|
+
domains,
|
|
77
|
+
majorMode,
|
|
78
|
+
providerArgs,
|
|
79
|
+
additionalDirectories: [...new Set(resolveAdditionalDirectories(environment, currentDirectory))],
|
|
80
|
+
skipPermissions
|
|
81
|
+
} };
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
export { isCompatibilityProvider, parseCompatibilityArgs, parseCompatibilityProvider };
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=options.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.mjs","names":[],"sources":["../../../../../src/cli/commands/compat/options.ts"],"sourcesContent":["import { defaultDomainsForMajorMode } from '@agimon-ai/po-config/domains';\n\nimport {\n DOMAIN_OPTION,\n DOMAINS_OPTION,\n MAJOR_MODE_OPTION,\n matchesOption,\n PROFILE_OPTION,\n parseMajorMode,\n parseProfileValue,\n parseRequiredCsv,\n REMOVED_LAYER_OPTION,\n REMOVED_LAYERS_OPTION,\n REMOVED_TARGET_OPTION,\n readOption,\n resolveAdditionalDirectories,\n resolveInheritedMajorMode,\n resolveInheritedProfile,\n} from '../../matrixOptions';\nimport type { CompatibilityProvider, ParsedCompatibilityArgs } from './types';\n\nconst COMPATIBILITY_PROVIDERS = new Set<CompatibilityProvider>(['antigravity', 'claude', 'codex']);\n\n/** Whether a token names a provider, without throwing the way parsing does. */\nexport function isCompatibilityProvider(value: string | undefined): value is CompatibilityProvider {\n return value !== undefined && COMPATIBILITY_PROVIDERS.has(value as CompatibilityProvider);\n}\nconst PROVIDER_ARGUMENT_SEPARATOR = '--';\nconst SKIP_PERMISSIONS_OPTION = '--skip-permissions';\n\nexport function parseCompatibilityProvider(value: string | undefined): CompatibilityProvider {\n if (!value || !COMPATIBILITY_PROVIDERS.has(value as CompatibilityProvider)) {\n throw new Error(`compat requires one of: ${[...COMPATIBILITY_PROVIDERS].join(', ')}`);\n }\n return value as CompatibilityProvider;\n}\n\n/**\n * Parses only the matrix options shared by every frontend.\n *\n * Every other argument remains untouched for the selected provider. In\n * particular, Pi aliases such as --effort and --output-format are not rewritten.\n * Use -- to pass a provider-native --profile, --domain, or --major-mode option.\n */\nexport function parseCompatibilityArgs(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n defaultMajorMode?: string,\n defaultDomains?: readonly string[],\n): ParsedCompatibilityArgs {\n let profile = resolveInheritedProfile(environment);\n let profileProvided = false;\n let majorMode = resolveInheritedMajorMode(environment, defaultMajorMode);\n let majorModeProvided = false;\n const domains: string[] = [];\n const providerArgs: string[] = [];\n let skipPermissions = false;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index]!;\n if (arg === PROVIDER_ARGUMENT_SEPARATOR) {\n providerArgs.push(...args.slice(index + 1));\n break;\n }\n if (matchesOption(arg, REMOVED_TARGET_OPTION)) {\n throw new Error(`${REMOVED_TARGET_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, REMOVED_LAYER_OPTION)) {\n throw new Error(`${REMOVED_LAYER_OPTION} was replaced by ${MAJOR_MODE_OPTION}`);\n }\n if (matchesOption(arg, REMOVED_LAYERS_OPTION)) {\n throw new Error(`${REMOVED_LAYERS_OPTION} was removed; select one major mode with ${MAJOR_MODE_OPTION}`);\n }\n\n if (matchesOption(arg, SKIP_PERMISSIONS_OPTION)) {\n if (arg !== SKIP_PERMISSIONS_OPTION) throw new Error(`${SKIP_PERMISSIONS_OPTION} does not take a value`);\n skipPermissions = true;\n continue;\n }\n\n const majorModeMatch = readOption(args, index, MAJOR_MODE_OPTION);\n if (majorModeMatch) {\n if (majorModeProvided) throw new Error(`${MAJOR_MODE_OPTION} can only be provided once`);\n majorMode = parseMajorMode(majorModeMatch.value, MAJOR_MODE_OPTION);\n majorModeProvided = true;\n index = majorModeMatch.nextIndex;\n continue;\n }\n\n const profileMatch = readOption(args, index, PROFILE_OPTION);\n if (profileMatch) {\n if (profileProvided) throw new Error(`${PROFILE_OPTION} can only be provided once`);\n profile = parseProfileValue(profileMatch.value, PROFILE_OPTION);\n profileProvided = true;\n index = profileMatch.nextIndex;\n continue;\n }\n\n const domainMatch = readOption(args, index, DOMAINS_OPTION) ?? readOption(args, index, DOMAIN_OPTION);\n if (domainMatch) {\n domains.push(\n ...parseRequiredCsv(domainMatch.value, matchesOption(arg, DOMAINS_OPTION) ? DOMAINS_OPTION : DOMAIN_OPTION),\n );\n index = domainMatch.nextIndex;\n continue;\n }\n\n providerArgs.push(arg);\n }\n\n if (domains.length === 0) domains.push(...defaultDomainsForMajorMode(majorMode, environment, defaultDomains));\n\n return {\n options: {\n currentDirectory,\n profile,\n domains,\n majorMode,\n providerArgs,\n additionalDirectories: [...new Set(resolveAdditionalDirectories(environment, currentDirectory))],\n skipPermissions,\n },\n };\n}\n"],"mappings":";;;AAqBA,MAAM,0CAA0B,IAAI,IAA2B;CAAC;CAAe;CAAU;AAAO,CAAC;;AAGjG,SAAgB,wBAAwB,OAA2D;CACjG,OAAO,UAAU,KAAA,KAAa,wBAAwB,IAAI,KAA8B;AAC1F;AACA,MAAM,8BAA8B;AACpC,MAAM,0BAA0B;AAEhC,SAAgB,2BAA2B,OAAkD;CAC3F,IAAI,CAAC,SAAS,CAAC,wBAAwB,IAAI,KAA8B,GACvE,MAAM,IAAI,MAAM,2BAA2B,CAAC,GAAG,uBAAuB,CAAC,CAAC,KAAK,IAAI,GAAG;CAEtF,OAAO;AACT;;;;;;;;AASA,SAAgB,uBACd,MACA,cAAiC,QAAQ,KACzC,mBAAmB,QAAQ,IAAI,GAC/B,kBACA,gBACyB;CACzB,IAAI,UAAU,wBAAwB,WAAW;CACjD,IAAI,kBAAkB;CACtB,IAAI,YAAY,0BAA0B,aAAa,gBAAgB;CACvE,IAAI,oBAAoB;CACxB,MAAM,UAAoB,CAAC;CAC3B,MAAM,eAAyB,CAAC;CAChC,IAAI,kBAAkB;CAEtB,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,MAAM,KAAK;EACjB,IAAI,QAAQ,6BAA6B;GACvC,aAAa,KAAK,GAAG,KAAK,MAAM,QAAQ,CAAC,CAAC;GAC1C;EACF;EACA,IAAI,cAAc,KAAA,UAA0B,GAC1C,MAAM,IAAI,MAAM,GAAG,sBAAsB,mBAAmB,mBAAmB;EAEjF,IAAI,cAAc,KAAA,SAAyB,GACzC,MAAM,IAAI,MAAM,GAAG,qBAAqB,mBAAmB,mBAAmB;EAEhF,IAAI,cAAc,KAAA,UAA0B,GAC1C,MAAM,IAAI,MAAM,GAAG,sBAAsB,2CAA2C,mBAAmB;EAGzG,IAAI,cAAc,KAAK,uBAAuB,GAAG;GAC/C,IAAI,QAAQ,yBAAyB,MAAM,IAAI,MAAM,GAAG,wBAAwB,uBAAuB;GACvG,kBAAkB;GAClB;EACF;EAEA,MAAM,iBAAiB,WAAW,MAAM,OAAO,iBAAiB;EAChE,IAAI,gBAAgB;GAClB,IAAI,mBAAmB,MAAM,IAAI,MAAM,GAAG,kBAAkB,2BAA2B;GACvF,YAAY,eAAe,eAAe,OAAO,iBAAiB;GAClE,oBAAoB;GACpB,QAAQ,eAAe;GACvB;EACF;EAEA,MAAM,eAAe,WAAW,MAAM,OAAO,cAAc;EAC3D,IAAI,cAAc;GAChB,IAAI,iBAAiB,MAAM,IAAI,MAAM,GAAG,eAAe,2BAA2B;GAClF,UAAU,kBAAkB,aAAa,OAAO,cAAc;GAC9D,kBAAkB;GAClB,QAAQ,aAAa;GACrB;EACF;EAEA,MAAM,cAAc,WAAW,MAAM,OAAA,WAAqB,KAAK,WAAW,MAAM,OAAA,UAAoB;EACpG,IAAI,aAAa;GACf,QAAQ,KACN,GAAG,iBAAiB,YAAY,OAAO,cAAc,KAAA,WAAmB,IAAI,iBAAiB,aAAa,CAC5G;GACA,QAAQ,YAAY;GACpB;EACF;EAEA,aAAa,KAAK,GAAG;CACvB;CAEA,IAAI,QAAQ,WAAW,GAAG,QAAQ,KAAK,GAAG,2BAA2B,WAAW,aAAa,cAAc,CAAC;CAE5G,OAAO,EACL,SAAS;EACP;EACA;EACA;EACA;EACA;EACA,uBAAuB,CAAC,GAAG,IAAI,IAAI,6BAA6B,aAAa,gBAAgB,CAAC,CAAC;EAC/F;CACF,EACF;AACF"}
|