@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 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["fs","path","buildSkillCatalog","counter","buildPersonaPrompt","priceMcpToolSchemas","globalDoomConfigDirectory","BaseCommand"],"sources":["../../../../../src/cli/commands/explain/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { buildPersonaPrompt, globalDoomConfigDirectory } from '@agimon-ai/po-config';\nimport { type McpServerCost, priceMcpToolSchemas } from '@agimon-ai/po-core/mcpSchemaCost';\nimport { buildSkillCatalog, counter } from '@agimon-ai/po-skill/catalog';\n\nimport type { HarnessContext } from '../../../builders/cli/harnessContext';\nimport type { HarnessOptions } from '../../../composition/types/harness';\nimport { BaseCommand } from '../baseCommand';\n\n/**\n * What the selection costs before the first prompt, in tokens.\n *\n * Every figure is an estimate of what the provider will be sent, not a billed\n * total: skills are counted from files on disk and MCP tools from the schemas\n * their servers advertise, both with the same tokenizer.\n */\nexport interface MatrixCost {\n /** The always-on skill block Pi puts in the system prompt. */\n skillPromptTokens: number;\n /** Skill bodies on disk, read only when a skill is invoked. */\n skillBodyTokens: number;\n /** The persona prompt, when a profile selected one. */\n personaTokens: number;\n /** Always-on tool schemas, per configured MCP server. */\n mcpServers: McpServerCost[];\n mcpToolTokens: number;\n}\n\nexport interface MatrixExplanation {\n majorMode: string;\n profile?: string;\n persona?: string;\n domains: string[];\n plugins: string[];\n layers: string[];\n hookGroups: string[];\n hooksEnabled: boolean;\n skillDirectories: string[];\n skillCount: number;\n agentCount: number;\n agentDirectories: string[];\n mcpConfigPath?: string;\n mcpServers: string[];\n mcpProxyUpstreams?: string[];\n mcpFiltered: boolean;\n cost?: MatrixCost;\n}\n\nfunction readMcpServers(configPath: string): Record<string, unknown> {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8')) as { mcpServers?: Record<string, unknown> };\n return config.mcpServers ?? {};\n}\n\n/**\n * Renders the resolved matrix for --explain. Composition spans three config\n * files, so this answers \"why is that loaded\" in one command instead of a\n * manual trace through domains, major modes, and plugin subsets.\n */\nexport function explainMatrix(explanation: MatrixExplanation): string {\n const section = (label: string, values: string[], empty = '(none)'): string =>\n `${label}:\\n${values.length === 0 ? ` ${empty}` : values.map((value) => ` ${value}`).join('\\n')}\\n`;\n\n return [\n `po resolved matrix\\n\\n`,\n `major mode: ${explanation.majorMode}\\n\\n`,\n section('profile', explanation.profile ? [explanation.profile] : [], '(none)'),\n '\\n',\n section('persona', explanation.persona ? [explanation.persona] : [], '(none)'),\n '\\n',\n section('domains (content)', explanation.domains),\n '\\n',\n section('layers (behavior, from the major mode)', explanation.layers, 'core only'),\n '\\n',\n section(\n 'hook groups from layers',\n explanation.hookGroups,\n explanation.hooksEnabled ? '(core groups only)' : '(hooks disabled)',\n ),\n '\\n',\n section(\n 'plugins',\n explanation.plugins.map((directory) => path.basename(directory)),\n ),\n '\\n',\n section(\n 'skill paths',\n explanation.skillDirectories.map((directory) => path.relative(process.cwd(), directory)),\n ),\n '\\n',\n section(\n explanation.mcpFiltered ? 'mcp servers (filtered by domain allowlist)' : 'mcp servers (unfiltered)',\n explanation.mcpServers,\n '(mcp disabled)',\n ),\n '\\n',\n explanation.mcpProxyUpstreams\n ? section('mcp proxy upstreams (filtered)', explanation.mcpProxyUpstreams)\n : 'mcp proxy upstreams:\\n (unfiltered, every upstream in mcp-config.yaml)\\n',\n '\\n',\n `skills: ${explanation.skillCount} (from ${explanation.skillDirectories.length} paths)\\n`,\n `agents: ${explanation.agentCount}\\n`,\n `mcp config: ${explanation.mcpConfigPath ?? '(disabled)'}\\n`,\n explanation.cost ? renderCost(explanation.cost) : '',\n ].join('');\n}\n\nconst TOKEN_COLUMN = 9;\n\nfunction tokenLine(label: string, tokens: number, note = ''): string {\n const row = ` ${label.padEnd(16)}${tokens.toLocaleString('en-US').padStart(TOKEN_COLUMN)}`;\n return `${note ? `${row} ${note}` : row}\\n`;\n}\n\n/**\n * The bill, rendered last so the sections above keep their order.\n *\n * Skill and persona figures are derived from files on disk and MCP figures\n * from a cached handshake, so two runs of the same selection print the same\n * numbers and a reader can reproduce them without trusting this output.\n */\nfunction renderCost(cost: MatrixCost): string {\n const startup = cost.skillPromptTokens + cost.personaTokens + cost.mcpToolTokens;\n const unpriced = cost.mcpServers.filter((server) => server.unavailable);\n return [\n '\\ncontext cost (tokens)\\n',\n tokenLine('skills prompt', cost.skillPromptTokens, 'always on'),\n tokenLine('persona', cost.personaTokens, 'always on'),\n tokenLine('mcp tools', cost.mcpToolTokens, mcpNote(cost.mcpServers)),\n tokenLine('startup total', startup),\n tokenLine('skill bodies', cost.skillBodyTokens, 'read on demand'),\n ...cost.mcpServers.filter((server) => !server.unavailable).map(serverLine),\n unpriced.length > 0\n ? `\\n Not priced: ${unpriced.map((server) => `${server.name} (${server.unavailable})`).join(', ')}\\n`\n : '',\n '\\n Excludes skills contributed by extensions, which register after startup.\\n',\n ].join('');\n}\n\nfunction mcpNote(servers: McpServerCost[]): string {\n const priced = servers.filter((server) => !server.unavailable);\n if (priced.length === 0) return 'always on';\n const tools = priced.reduce((total, server) => total + server.toolCount, 0);\n return `always on, ${tools} tools from ${priced.length} server${priced.length === 1 ? '' : 's'}`;\n}\n\nfunction serverLine(server: McpServerCost): string {\n return tokenLine(` ${server.name}`, server.tokens, server.cached ? 'cached' : 'measured now');\n}\n\n/** Prints the fully resolved matrix instead of launching Pi. */\nasync function costExplain(context: HarnessContext): Promise<MatrixCost | undefined> {\n const { options, resources } = context;\n try {\n const [catalog, countTokens] = await Promise.all([\n buildSkillCatalog({\n repoRoot: options.repoRoot,\n activeSkillDirectories: resources.skillDirectories,\n extensionSources: [],\n }),\n counter(),\n ]);\n const persona = context.personaDirectory\n ? buildPersonaPrompt(context.personaRoot ?? options.repoRoot, context.personaDirectory)\n : undefined;\n const mcp = resources.mcpConfigPath\n ? await priceMcpToolSchemas({\n configPath: resources.mcpConfigPath,\n homeDoomDirectory: globalDoomConfigDirectory(),\n cwd: options.repoRoot,\n environment: context.environment,\n countTokens,\n })\n : { servers: [], totalTokens: 0 };\n return {\n skillPromptTokens: catalog.promptTokens,\n skillBodyTokens: catalog.bodyTokens,\n personaTokens: persona ? countTokens(persona) : 0,\n mcpServers: mcp.servers,\n mcpToolTokens: mcp.totalTokens,\n };\n } catch (error) {\n // Pricing reads the skill files, so an unreadable one must not take the\n // whole explanation down: the resolved matrix is the point, the bill is\n // the extra. Reported rather than swallowed.\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[po] ${'explain'}: could not price the selection: ${detail}\\n`);\n return undefined;\n }\n}\n\nexport async function runExplain(context: HarnessContext): Promise<number> {\n const { options, resources, plugins, mcpAllowlist } = context;\n const cost = await costExplain(context);\n\n process.stdout.write(\n explainMatrix({\n cost,\n majorMode: options.majorMode,\n profile: context.profile,\n persona: context.personaDirectory,\n domains: options.domains,\n plugins: plugins.map((entry) => entry.directory),\n layers: context.selectedLayers,\n hookGroups: context.hookGroups,\n hooksEnabled: options.hooks,\n skillDirectories: resources.skillDirectories,\n skillCount: resources.skillCount,\n agentCount: resources.agentCount,\n agentDirectories: resources.agentDirectories,\n mcpConfigPath: resources.mcpConfigPath,\n // Read back from the generated config so this reports what Pi will\n // actually load, not what the allowlist intended.\n mcpServers: resources.mcpConfigPath ? Object.keys(readMcpServers(resources.mcpConfigPath)) : [],\n mcpProxyUpstreams: mcpAllowlist?.proxy,\n mcpFiltered: Boolean(mcpAllowlist),\n }),\n );\n return 0;\n}\n\n/** Compatibility API. Executables call the command function directly. */\nexport class ExplainCommand extends BaseCommand {\n readonly name = 'explain';\n\n matches(options: HarnessOptions): boolean {\n return options.explain;\n }\n\n async execute(context: HarnessContext): Promise<number> {\n return runExplain(context);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { HarnessOptions } from "../../../composition/types/harness.mjs";
|
|
2
|
+
import { HarnessContext } from "../../../builders/cli/harnessContext.mjs";
|
|
3
|
+
import { BaseCommand } from "../baseCommand.mjs";
|
|
4
|
+
import { McpServerCost } from "@agimon-ai/po-core/mcpSchemaCost";
|
|
5
|
+
//#region src/cli/commands/explain/index.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* What the selection costs before the first prompt, in tokens.
|
|
8
|
+
*
|
|
9
|
+
* Every figure is an estimate of what the provider will be sent, not a billed
|
|
10
|
+
* total: skills are counted from files on disk and MCP tools from the schemas
|
|
11
|
+
* their servers advertise, both with the same tokenizer.
|
|
12
|
+
*/
|
|
13
|
+
export interface MatrixCost {
|
|
14
|
+
/** The always-on skill block Pi puts in the system prompt. */
|
|
15
|
+
skillPromptTokens: number;
|
|
16
|
+
/** Skill bodies on disk, read only when a skill is invoked. */
|
|
17
|
+
skillBodyTokens: number;
|
|
18
|
+
/** The persona prompt, when a profile selected one. */
|
|
19
|
+
personaTokens: number;
|
|
20
|
+
/** Always-on tool schemas, per configured MCP server. */
|
|
21
|
+
mcpServers: McpServerCost[];
|
|
22
|
+
mcpToolTokens: number;
|
|
23
|
+
}
|
|
24
|
+
export interface MatrixExplanation {
|
|
25
|
+
majorMode: string;
|
|
26
|
+
profile?: string;
|
|
27
|
+
persona?: string;
|
|
28
|
+
domains: string[];
|
|
29
|
+
plugins: string[];
|
|
30
|
+
layers: string[];
|
|
31
|
+
hookGroups: string[];
|
|
32
|
+
hooksEnabled: boolean;
|
|
33
|
+
skillDirectories: string[];
|
|
34
|
+
skillCount: number;
|
|
35
|
+
agentCount: number;
|
|
36
|
+
agentDirectories: string[];
|
|
37
|
+
mcpConfigPath?: string;
|
|
38
|
+
mcpServers: string[];
|
|
39
|
+
mcpProxyUpstreams?: string[];
|
|
40
|
+
mcpFiltered: boolean;
|
|
41
|
+
cost?: MatrixCost;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Renders the resolved matrix for --explain. Composition spans three config
|
|
45
|
+
* files, so this answers "why is that loaded" in one command instead of a
|
|
46
|
+
* manual trace through domains, major modes, and plugin subsets.
|
|
47
|
+
*/
|
|
48
|
+
export declare function explainMatrix(explanation: MatrixExplanation): string;
|
|
49
|
+
export declare function runExplain(context: HarnessContext): Promise<number>;
|
|
50
|
+
/** Compatibility API. Executables call the command function directly. */
|
|
51
|
+
export declare class ExplainCommand extends BaseCommand {
|
|
52
|
+
readonly name = "explain";
|
|
53
|
+
matches(options: HarnessOptions): boolean;
|
|
54
|
+
execute(context: HarnessContext): Promise<number>;
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/cli/commands/explain/index.ts"],"mappings":";;;;;;;;;;;;iBAkBiB;;EAEf;;EAEA;;EAEA;;EAEA,YAAY;EACZ;;iBAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO;;;;;;;wBAaO,cAAc,aAAa;wBAoIrB,WAAW,SAAS,iBAAiB;;qBA+B9C,uBAAuB;WACzB;EAET,QAAQ,SAAS;EAIX,QAAQ,SAAS,iBAAiB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { BaseCommand } from "../baseCommand.mjs";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { buildPersonaPrompt, globalDoomConfigDirectory } from "@agimon-ai/po-config";
|
|
5
|
+
import { priceMcpToolSchemas } from "@agimon-ai/po-core/mcpSchemaCost";
|
|
6
|
+
import { buildSkillCatalog, counter } from "@agimon-ai/po-skill/catalog";
|
|
7
|
+
//#region src/cli/commands/explain/index.ts
|
|
8
|
+
function readMcpServers(configPath) {
|
|
9
|
+
return JSON.parse(fs.readFileSync(configPath, "utf8")).mcpServers ?? {};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Renders the resolved matrix for --explain. Composition spans three config
|
|
13
|
+
* files, so this answers "why is that loaded" in one command instead of a
|
|
14
|
+
* manual trace through domains, major modes, and plugin subsets.
|
|
15
|
+
*/
|
|
16
|
+
function explainMatrix(explanation) {
|
|
17
|
+
const section = (label, values, empty = "(none)") => `${label}:\n${values.length === 0 ? ` ${empty}` : values.map((value) => ` ${value}`).join("\n")}\n`;
|
|
18
|
+
return [
|
|
19
|
+
`po resolved matrix\n\n`,
|
|
20
|
+
`major mode: ${explanation.majorMode}\n\n`,
|
|
21
|
+
section("profile", explanation.profile ? [explanation.profile] : [], "(none)"),
|
|
22
|
+
"\n",
|
|
23
|
+
section("persona", explanation.persona ? [explanation.persona] : [], "(none)"),
|
|
24
|
+
"\n",
|
|
25
|
+
section("domains (content)", explanation.domains),
|
|
26
|
+
"\n",
|
|
27
|
+
section("layers (behavior, from the major mode)", explanation.layers, "core only"),
|
|
28
|
+
"\n",
|
|
29
|
+
section("hook groups from layers", explanation.hookGroups, explanation.hooksEnabled ? "(core groups only)" : "(hooks disabled)"),
|
|
30
|
+
"\n",
|
|
31
|
+
section("plugins", explanation.plugins.map((directory) => path.basename(directory))),
|
|
32
|
+
"\n",
|
|
33
|
+
section("skill paths", explanation.skillDirectories.map((directory) => path.relative(process.cwd(), directory))),
|
|
34
|
+
"\n",
|
|
35
|
+
section(explanation.mcpFiltered ? "mcp servers (filtered by domain allowlist)" : "mcp servers (unfiltered)", explanation.mcpServers, "(mcp disabled)"),
|
|
36
|
+
"\n",
|
|
37
|
+
explanation.mcpProxyUpstreams ? section("mcp proxy upstreams (filtered)", explanation.mcpProxyUpstreams) : "mcp proxy upstreams:\n (unfiltered, every upstream in mcp-config.yaml)\n",
|
|
38
|
+
"\n",
|
|
39
|
+
`skills: ${explanation.skillCount} (from ${explanation.skillDirectories.length} paths)\n`,
|
|
40
|
+
`agents: ${explanation.agentCount}\n`,
|
|
41
|
+
`mcp config: ${explanation.mcpConfigPath ?? "(disabled)"}\n`,
|
|
42
|
+
explanation.cost ? renderCost(explanation.cost) : ""
|
|
43
|
+
].join("");
|
|
44
|
+
}
|
|
45
|
+
const TOKEN_COLUMN = 9;
|
|
46
|
+
function tokenLine(label, tokens, note = "") {
|
|
47
|
+
const row = ` ${label.padEnd(16)}${tokens.toLocaleString("en-US").padStart(TOKEN_COLUMN)}`;
|
|
48
|
+
return `${note ? `${row} ${note}` : row}\n`;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The bill, rendered last so the sections above keep their order.
|
|
52
|
+
*
|
|
53
|
+
* Skill and persona figures are derived from files on disk and MCP figures
|
|
54
|
+
* from a cached handshake, so two runs of the same selection print the same
|
|
55
|
+
* numbers and a reader can reproduce them without trusting this output.
|
|
56
|
+
*/
|
|
57
|
+
function renderCost(cost) {
|
|
58
|
+
const startup = cost.skillPromptTokens + cost.personaTokens + cost.mcpToolTokens;
|
|
59
|
+
const unpriced = cost.mcpServers.filter((server) => server.unavailable);
|
|
60
|
+
return [
|
|
61
|
+
"\ncontext cost (tokens)\n",
|
|
62
|
+
tokenLine("skills prompt", cost.skillPromptTokens, "always on"),
|
|
63
|
+
tokenLine("persona", cost.personaTokens, "always on"),
|
|
64
|
+
tokenLine("mcp tools", cost.mcpToolTokens, mcpNote(cost.mcpServers)),
|
|
65
|
+
tokenLine("startup total", startup),
|
|
66
|
+
tokenLine("skill bodies", cost.skillBodyTokens, "read on demand"),
|
|
67
|
+
...cost.mcpServers.filter((server) => !server.unavailable).map(serverLine),
|
|
68
|
+
unpriced.length > 0 ? `\n Not priced: ${unpriced.map((server) => `${server.name} (${server.unavailable})`).join(", ")}\n` : "",
|
|
69
|
+
"\n Excludes skills contributed by extensions, which register after startup.\n"
|
|
70
|
+
].join("");
|
|
71
|
+
}
|
|
72
|
+
function mcpNote(servers) {
|
|
73
|
+
const priced = servers.filter((server) => !server.unavailable);
|
|
74
|
+
if (priced.length === 0) return "always on";
|
|
75
|
+
return `always on, ${priced.reduce((total, server) => total + server.toolCount, 0)} tools from ${priced.length} server${priced.length === 1 ? "" : "s"}`;
|
|
76
|
+
}
|
|
77
|
+
function serverLine(server) {
|
|
78
|
+
return tokenLine(` ${server.name}`, server.tokens, server.cached ? "cached" : "measured now");
|
|
79
|
+
}
|
|
80
|
+
/** Prints the fully resolved matrix instead of launching Pi. */
|
|
81
|
+
async function costExplain(context) {
|
|
82
|
+
const { options, resources } = context;
|
|
83
|
+
try {
|
|
84
|
+
const [catalog, countTokens] = await Promise.all([buildSkillCatalog({
|
|
85
|
+
repoRoot: options.repoRoot,
|
|
86
|
+
activeSkillDirectories: resources.skillDirectories,
|
|
87
|
+
extensionSources: []
|
|
88
|
+
}), counter()]);
|
|
89
|
+
const persona = context.personaDirectory ? buildPersonaPrompt(context.personaRoot ?? options.repoRoot, context.personaDirectory) : void 0;
|
|
90
|
+
const mcp = resources.mcpConfigPath ? await priceMcpToolSchemas({
|
|
91
|
+
configPath: resources.mcpConfigPath,
|
|
92
|
+
homeDoomDirectory: globalDoomConfigDirectory(),
|
|
93
|
+
cwd: options.repoRoot,
|
|
94
|
+
environment: context.environment,
|
|
95
|
+
countTokens
|
|
96
|
+
}) : {
|
|
97
|
+
servers: [],
|
|
98
|
+
totalTokens: 0
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
skillPromptTokens: catalog.promptTokens,
|
|
102
|
+
skillBodyTokens: catalog.bodyTokens,
|
|
103
|
+
personaTokens: persona ? countTokens(persona) : 0,
|
|
104
|
+
mcpServers: mcp.servers,
|
|
105
|
+
mcpToolTokens: mcp.totalTokens
|
|
106
|
+
};
|
|
107
|
+
} catch (error) {
|
|
108
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
109
|
+
process.stderr.write(`[po] explain: could not price the selection: ${detail}\n`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function runExplain(context) {
|
|
114
|
+
const { options, resources, plugins, mcpAllowlist } = context;
|
|
115
|
+
const cost = await costExplain(context);
|
|
116
|
+
process.stdout.write(explainMatrix({
|
|
117
|
+
cost,
|
|
118
|
+
majorMode: options.majorMode,
|
|
119
|
+
profile: context.profile,
|
|
120
|
+
persona: context.personaDirectory,
|
|
121
|
+
domains: options.domains,
|
|
122
|
+
plugins: plugins.map((entry) => entry.directory),
|
|
123
|
+
layers: context.selectedLayers,
|
|
124
|
+
hookGroups: context.hookGroups,
|
|
125
|
+
hooksEnabled: options.hooks,
|
|
126
|
+
skillDirectories: resources.skillDirectories,
|
|
127
|
+
skillCount: resources.skillCount,
|
|
128
|
+
agentCount: resources.agentCount,
|
|
129
|
+
agentDirectories: resources.agentDirectories,
|
|
130
|
+
mcpConfigPath: resources.mcpConfigPath,
|
|
131
|
+
mcpServers: resources.mcpConfigPath ? Object.keys(readMcpServers(resources.mcpConfigPath)) : [],
|
|
132
|
+
mcpProxyUpstreams: mcpAllowlist?.proxy,
|
|
133
|
+
mcpFiltered: Boolean(mcpAllowlist)
|
|
134
|
+
}));
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
/** Compatibility API. Executables call the command function directly. */
|
|
138
|
+
var ExplainCommand = class extends BaseCommand {
|
|
139
|
+
name = "explain";
|
|
140
|
+
matches(options) {
|
|
141
|
+
return options.explain;
|
|
142
|
+
}
|
|
143
|
+
async execute(context) {
|
|
144
|
+
return runExplain(context);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
//#endregion
|
|
148
|
+
export { ExplainCommand, explainMatrix, runExplain };
|
|
149
|
+
|
|
150
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/cli/commands/explain/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { buildPersonaPrompt, globalDoomConfigDirectory } from '@agimon-ai/po-config';\nimport { type McpServerCost, priceMcpToolSchemas } from '@agimon-ai/po-core/mcpSchemaCost';\nimport { buildSkillCatalog, counter } from '@agimon-ai/po-skill/catalog';\n\nimport type { HarnessContext } from '../../../builders/cli/harnessContext';\nimport type { HarnessOptions } from '../../../composition/types/harness';\nimport { BaseCommand } from '../baseCommand';\n\n/**\n * What the selection costs before the first prompt, in tokens.\n *\n * Every figure is an estimate of what the provider will be sent, not a billed\n * total: skills are counted from files on disk and MCP tools from the schemas\n * their servers advertise, both with the same tokenizer.\n */\nexport interface MatrixCost {\n /** The always-on skill block Pi puts in the system prompt. */\n skillPromptTokens: number;\n /** Skill bodies on disk, read only when a skill is invoked. */\n skillBodyTokens: number;\n /** The persona prompt, when a profile selected one. */\n personaTokens: number;\n /** Always-on tool schemas, per configured MCP server. */\n mcpServers: McpServerCost[];\n mcpToolTokens: number;\n}\n\nexport interface MatrixExplanation {\n majorMode: string;\n profile?: string;\n persona?: string;\n domains: string[];\n plugins: string[];\n layers: string[];\n hookGroups: string[];\n hooksEnabled: boolean;\n skillDirectories: string[];\n skillCount: number;\n agentCount: number;\n agentDirectories: string[];\n mcpConfigPath?: string;\n mcpServers: string[];\n mcpProxyUpstreams?: string[];\n mcpFiltered: boolean;\n cost?: MatrixCost;\n}\n\nfunction readMcpServers(configPath: string): Record<string, unknown> {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8')) as { mcpServers?: Record<string, unknown> };\n return config.mcpServers ?? {};\n}\n\n/**\n * Renders the resolved matrix for --explain. Composition spans three config\n * files, so this answers \"why is that loaded\" in one command instead of a\n * manual trace through domains, major modes, and plugin subsets.\n */\nexport function explainMatrix(explanation: MatrixExplanation): string {\n const section = (label: string, values: string[], empty = '(none)'): string =>\n `${label}:\\n${values.length === 0 ? ` ${empty}` : values.map((value) => ` ${value}`).join('\\n')}\\n`;\n\n return [\n `po resolved matrix\\n\\n`,\n `major mode: ${explanation.majorMode}\\n\\n`,\n section('profile', explanation.profile ? [explanation.profile] : [], '(none)'),\n '\\n',\n section('persona', explanation.persona ? [explanation.persona] : [], '(none)'),\n '\\n',\n section('domains (content)', explanation.domains),\n '\\n',\n section('layers (behavior, from the major mode)', explanation.layers, 'core only'),\n '\\n',\n section(\n 'hook groups from layers',\n explanation.hookGroups,\n explanation.hooksEnabled ? '(core groups only)' : '(hooks disabled)',\n ),\n '\\n',\n section(\n 'plugins',\n explanation.plugins.map((directory) => path.basename(directory)),\n ),\n '\\n',\n section(\n 'skill paths',\n explanation.skillDirectories.map((directory) => path.relative(process.cwd(), directory)),\n ),\n '\\n',\n section(\n explanation.mcpFiltered ? 'mcp servers (filtered by domain allowlist)' : 'mcp servers (unfiltered)',\n explanation.mcpServers,\n '(mcp disabled)',\n ),\n '\\n',\n explanation.mcpProxyUpstreams\n ? section('mcp proxy upstreams (filtered)', explanation.mcpProxyUpstreams)\n : 'mcp proxy upstreams:\\n (unfiltered, every upstream in mcp-config.yaml)\\n',\n '\\n',\n `skills: ${explanation.skillCount} (from ${explanation.skillDirectories.length} paths)\\n`,\n `agents: ${explanation.agentCount}\\n`,\n `mcp config: ${explanation.mcpConfigPath ?? '(disabled)'}\\n`,\n explanation.cost ? renderCost(explanation.cost) : '',\n ].join('');\n}\n\nconst TOKEN_COLUMN = 9;\n\nfunction tokenLine(label: string, tokens: number, note = ''): string {\n const row = ` ${label.padEnd(16)}${tokens.toLocaleString('en-US').padStart(TOKEN_COLUMN)}`;\n return `${note ? `${row} ${note}` : row}\\n`;\n}\n\n/**\n * The bill, rendered last so the sections above keep their order.\n *\n * Skill and persona figures are derived from files on disk and MCP figures\n * from a cached handshake, so two runs of the same selection print the same\n * numbers and a reader can reproduce them without trusting this output.\n */\nfunction renderCost(cost: MatrixCost): string {\n const startup = cost.skillPromptTokens + cost.personaTokens + cost.mcpToolTokens;\n const unpriced = cost.mcpServers.filter((server) => server.unavailable);\n return [\n '\\ncontext cost (tokens)\\n',\n tokenLine('skills prompt', cost.skillPromptTokens, 'always on'),\n tokenLine('persona', cost.personaTokens, 'always on'),\n tokenLine('mcp tools', cost.mcpToolTokens, mcpNote(cost.mcpServers)),\n tokenLine('startup total', startup),\n tokenLine('skill bodies', cost.skillBodyTokens, 'read on demand'),\n ...cost.mcpServers.filter((server) => !server.unavailable).map(serverLine),\n unpriced.length > 0\n ? `\\n Not priced: ${unpriced.map((server) => `${server.name} (${server.unavailable})`).join(', ')}\\n`\n : '',\n '\\n Excludes skills contributed by extensions, which register after startup.\\n',\n ].join('');\n}\n\nfunction mcpNote(servers: McpServerCost[]): string {\n const priced = servers.filter((server) => !server.unavailable);\n if (priced.length === 0) return 'always on';\n const tools = priced.reduce((total, server) => total + server.toolCount, 0);\n return `always on, ${tools} tools from ${priced.length} server${priced.length === 1 ? '' : 's'}`;\n}\n\nfunction serverLine(server: McpServerCost): string {\n return tokenLine(` ${server.name}`, server.tokens, server.cached ? 'cached' : 'measured now');\n}\n\n/** Prints the fully resolved matrix instead of launching Pi. */\nasync function costExplain(context: HarnessContext): Promise<MatrixCost | undefined> {\n const { options, resources } = context;\n try {\n const [catalog, countTokens] = await Promise.all([\n buildSkillCatalog({\n repoRoot: options.repoRoot,\n activeSkillDirectories: resources.skillDirectories,\n extensionSources: [],\n }),\n counter(),\n ]);\n const persona = context.personaDirectory\n ? buildPersonaPrompt(context.personaRoot ?? options.repoRoot, context.personaDirectory)\n : undefined;\n const mcp = resources.mcpConfigPath\n ? await priceMcpToolSchemas({\n configPath: resources.mcpConfigPath,\n homeDoomDirectory: globalDoomConfigDirectory(),\n cwd: options.repoRoot,\n environment: context.environment,\n countTokens,\n })\n : { servers: [], totalTokens: 0 };\n return {\n skillPromptTokens: catalog.promptTokens,\n skillBodyTokens: catalog.bodyTokens,\n personaTokens: persona ? countTokens(persona) : 0,\n mcpServers: mcp.servers,\n mcpToolTokens: mcp.totalTokens,\n };\n } catch (error) {\n // Pricing reads the skill files, so an unreadable one must not take the\n // whole explanation down: the resolved matrix is the point, the bill is\n // the extra. Reported rather than swallowed.\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[po] ${'explain'}: could not price the selection: ${detail}\\n`);\n return undefined;\n }\n}\n\nexport async function runExplain(context: HarnessContext): Promise<number> {\n const { options, resources, plugins, mcpAllowlist } = context;\n const cost = await costExplain(context);\n\n process.stdout.write(\n explainMatrix({\n cost,\n majorMode: options.majorMode,\n profile: context.profile,\n persona: context.personaDirectory,\n domains: options.domains,\n plugins: plugins.map((entry) => entry.directory),\n layers: context.selectedLayers,\n hookGroups: context.hookGroups,\n hooksEnabled: options.hooks,\n skillDirectories: resources.skillDirectories,\n skillCount: resources.skillCount,\n agentCount: resources.agentCount,\n agentDirectories: resources.agentDirectories,\n mcpConfigPath: resources.mcpConfigPath,\n // Read back from the generated config so this reports what Pi will\n // actually load, not what the allowlist intended.\n mcpServers: resources.mcpConfigPath ? Object.keys(readMcpServers(resources.mcpConfigPath)) : [],\n mcpProxyUpstreams: mcpAllowlist?.proxy,\n mcpFiltered: Boolean(mcpAllowlist),\n }),\n );\n return 0;\n}\n\n/** Compatibility API. Executables call the command function directly. */\nexport class ExplainCommand extends BaseCommand {\n readonly name = 'explain';\n\n matches(options: HarnessOptions): boolean {\n return options.explain;\n }\n\n async execute(context: HarnessContext): Promise<number> {\n return runExplain(context);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/cli/commands/init/constants.ts
|
|
2
|
+
const SEED_FILE_GUIDANCE = {
|
|
3
|
+
"config.yaml": "project trust and optional voice defaults",
|
|
4
|
+
"modes.yaml": "layers, packages, and the default major mode",
|
|
5
|
+
"domains.yaml": "plugin catalog, domain groups, and aliases",
|
|
6
|
+
"profiles.yaml": "profile roots, personas, and string environment defaults"
|
|
7
|
+
};
|
|
8
|
+
//#endregion
|
|
9
|
+
exports.SEED_FILE_GUIDANCE = SEED_FILE_GUIDANCE;
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=constants.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.cjs","names":[],"sources":["../../../../../src/cli/commands/init/constants.ts"],"sourcesContent":["export const SEED_FILE_GUIDANCE = {\n 'config.yaml': 'project trust and optional voice defaults',\n 'modes.yaml': 'layers, packages, and the default major mode',\n 'domains.yaml': 'plugin catalog, domain groups, and aliases',\n 'profiles.yaml': 'profile roots, personas, and string environment defaults',\n} as const;\n"],"mappings":";AAAA,MAAa,qBAAqB;CAChC,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,iBAAiB;AACnB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/cli/commands/init/constants.ts
|
|
2
|
+
const SEED_FILE_GUIDANCE = {
|
|
3
|
+
"config.yaml": "project trust and optional voice defaults",
|
|
4
|
+
"modes.yaml": "layers, packages, and the default major mode",
|
|
5
|
+
"domains.yaml": "plugin catalog, domain groups, and aliases",
|
|
6
|
+
"profiles.yaml": "profile roots, personas, and string environment defaults"
|
|
7
|
+
};
|
|
8
|
+
//#endregion
|
|
9
|
+
export { SEED_FILE_GUIDANCE };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","names":[],"sources":["../../../../../src/cli/commands/init/constants.ts"],"sourcesContent":["export const SEED_FILE_GUIDANCE = {\n 'config.yaml': 'project trust and optional voice defaults',\n 'modes.yaml': 'layers, packages, and the default major mode',\n 'domains.yaml': 'plugin catalog, domain groups, and aliases',\n 'profiles.yaml': 'profile roots, personas, and string environment defaults',\n} as const;\n"],"mappings":";AAAA,MAAa,qBAAqB;CAChC,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,iBAAiB;AACnB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/cli/commands/init/help.ts
|
|
2
|
+
function initHelp() {
|
|
3
|
+
return `Usage: po init [--force]
|
|
4
|
+
|
|
5
|
+
Fills missing files in ~/.po and removes the Po entries and theme that
|
|
6
|
+
earlier versions registered in ~/.pi/agent/settings.json.
|
|
7
|
+
|
|
8
|
+
Options:
|
|
9
|
+
--force Replace the four personal .po files with current
|
|
10
|
+
templates instead of only filling missing ones
|
|
11
|
+
-h, --help Show this help
|
|
12
|
+
`;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
exports.initHelp = initHelp;
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=help.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.cjs","names":[],"sources":["../../../../../src/cli/commands/init/help.ts"],"sourcesContent":["export function initHelp(): string {\n return `Usage: po init [--force]\n\nFills missing files in ~/.po and removes the Po entries and theme that\nearlier versions registered in ~/.pi/agent/settings.json.\n\nOptions:\n --force Replace the four personal .po files with current\n templates instead of only filling missing ones\n -h, --help Show this help\n`;\n}\n"],"mappings":";AAAA,SAAgB,WAAmB;CACjC,OAAO;;;;;;;;;;AAUT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.mts","names":[],"sources":["../../../../../src/cli/commands/init/help.ts"],"mappings":";wBAAgB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/cli/commands/init/help.ts
|
|
2
|
+
function initHelp() {
|
|
3
|
+
return `Usage: po init [--force]
|
|
4
|
+
|
|
5
|
+
Fills missing files in ~/.po and removes the Po entries and theme that
|
|
6
|
+
earlier versions registered in ~/.pi/agent/settings.json.
|
|
7
|
+
|
|
8
|
+
Options:
|
|
9
|
+
--force Replace the four personal .po files with current
|
|
10
|
+
templates instead of only filling missing ones
|
|
11
|
+
-h, --help Show this help
|
|
12
|
+
`;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { initHelp };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=help.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.mjs","names":[],"sources":["../../../../../src/cli/commands/init/help.ts"],"sourcesContent":["export function initHelp(): string {\n return `Usage: po init [--force]\n\nFills missing files in ~/.po and removes the Po entries and theme that\nearlier versions registered in ~/.pi/agent/settings.json.\n\nOptions:\n --force Replace the four personal .po files with current\n templates instead of only filling missing ones\n -h, --help Show this help\n`;\n}\n"],"mappings":";AAAA,SAAgB,WAAmB;CACjC,OAAO;;;;;;;;;;AAUT"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const require_runtime = require("../../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_help = require("./help.cjs");
|
|
3
|
+
const require_router = require("../../router.cjs");
|
|
4
|
+
const require_presenter = require("./presenter.cjs");
|
|
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_core_piSettings = require("@agimon-ai/po-core/piSettings");
|
|
10
|
+
let _agimon_ai_po_config = require("@agimon-ai/po-config");
|
|
11
|
+
//#region src/cli/commands/init/index.ts
|
|
12
|
+
const INIT_COMMAND = "init";
|
|
13
|
+
const FORCE_FLAG = "--force";
|
|
14
|
+
const SETUP_STAGE_COUNT = 2;
|
|
15
|
+
function setupFailure(activity, target, error) {
|
|
16
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
17
|
+
return new Error(`po init failed while ${activity} at ${target}: ${detail}`, { cause: error });
|
|
18
|
+
}
|
|
19
|
+
/** Handles the repository-independent `po init` command. */
|
|
20
|
+
async function runInit(args, homeDirectory = node_os.default.homedir(), output = process.stdout, environment = process.env) {
|
|
21
|
+
const flags = args.slice(1);
|
|
22
|
+
const unknown = flags.find((flag) => flag !== FORCE_FLAG);
|
|
23
|
+
if (require_router.wantsHelp(args)) {
|
|
24
|
+
process.stdout.write(require_help.initHelp());
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
if (unknown !== void 0) throw new Error(`po init does not accept ${unknown}`);
|
|
28
|
+
const presenter = new require_presenter.InitPresenter(output, environment);
|
|
29
|
+
presenter.brand();
|
|
30
|
+
const configDirectory = (0, _agimon_ai_po_config.globalDoomConfigDirectory)(homeDirectory);
|
|
31
|
+
presenter.stage(1, SETUP_STAGE_COUNT, "WRITE CONFIGURATION", configDirectory);
|
|
32
|
+
let configResult;
|
|
33
|
+
try {
|
|
34
|
+
configResult = (0, _agimon_ai_po_config.initializeGlobalDoomConfig)(homeDirectory, { force: flags.includes(FORCE_FLAG) });
|
|
35
|
+
presenter.stageReady("Configuration files are ready.");
|
|
36
|
+
} catch (error) {
|
|
37
|
+
presenter.stageFailed("Configuration setup failed.", ["Fix the reported path or permissions, then run po init again."]);
|
|
38
|
+
throw setupFailure("writing configuration", configDirectory, error);
|
|
39
|
+
}
|
|
40
|
+
const agentDirectory = node_path.default.join(homeDirectory, ".pi", "agent");
|
|
41
|
+
presenter.stage(2, SETUP_STAGE_COUNT, "REMOVE PI REGISTRATION", agentDirectory);
|
|
42
|
+
let removed;
|
|
43
|
+
try {
|
|
44
|
+
removed = (0, _agimon_ai_po_core_piSettings.removePoPiSettings)(agentDirectory);
|
|
45
|
+
presenter.stageReady(removed.length > 0 ? "Removed Po entries from Pi." : "No Po entries in Pi.");
|
|
46
|
+
} catch (error) {
|
|
47
|
+
presenter.stageFailed("Pi cleanup failed.", [`Your Po configuration remains at ${configResult.directory}.`, "Fix the reported settings or filesystem issue, then run po init again."]);
|
|
48
|
+
throw setupFailure("removing Po from Pi settings", agentDirectory, error);
|
|
49
|
+
}
|
|
50
|
+
presenter.complete(configResult, removed);
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
/** Compatibility API. Executables call the command function directly. */
|
|
54
|
+
var InitCommand = class {
|
|
55
|
+
name = INIT_COMMAND;
|
|
56
|
+
matches(args) {
|
|
57
|
+
return args[0] === this.name;
|
|
58
|
+
}
|
|
59
|
+
async execute(args, homeDirectory = node_os.default.homedir(), output = process.stdout, environment = process.env) {
|
|
60
|
+
return runInit(args, homeDirectory, output, environment);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
//#endregion
|
|
64
|
+
exports.InitCommand = InitCommand;
|
|
65
|
+
exports.runInit = runInit;
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["os","wantsHelp","initHelp","InitPresenter","globalDoomConfigDirectory","initializeGlobalDoomConfig","path","removePoPiSettings"],"sources":["../../../../../src/cli/commands/init/index.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\n\nimport { type GlobalDoomInitResult, globalDoomConfigDirectory, initializeGlobalDoomConfig } from '@agimon-ai/po-config';\nimport { removePoPiSettings } from '@agimon-ai/po-core/piSettings';\n\nimport { wantsHelp } from '../../router';\nimport { initHelp } from './help';\nimport { InitPresenter, type InitOutput } from './presenter';\n\nconst INIT_COMMAND = 'init';\nconst FORCE_FLAG = '--force';\nconst SETUP_STAGE_COUNT = 2;\n\nfunction setupFailure(activity: string, target: string, error: unknown): Error {\n const detail = error instanceof Error ? error.message : String(error);\n return new Error(`po init failed while ${activity} at ${target}: ${detail}`, { cause: error });\n}\n\n/** Handles the repository-independent `po init` command. */\nexport async function runInit(\n args: string[],\n homeDirectory = os.homedir(),\n output: InitOutput = process.stdout,\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<number> {\n const flags = args.slice(1);\n const unknown = flags.find((flag) => flag !== FORCE_FLAG);\n if (wantsHelp(args)) {\n process.stdout.write(initHelp());\n return 0;\n }\n if (unknown !== undefined) throw new Error(`po init does not accept ${unknown}`);\n\n const presenter = new InitPresenter(output, environment);\n presenter.brand();\n\n const configDirectory = globalDoomConfigDirectory(homeDirectory);\n presenter.stage(1, SETUP_STAGE_COUNT, 'WRITE CONFIGURATION', configDirectory);\n let configResult: GlobalDoomInitResult;\n try {\n configResult = initializeGlobalDoomConfig(homeDirectory, { force: flags.includes(FORCE_FLAG) });\n presenter.stageReady('Configuration files are ready.');\n } catch (error) {\n presenter.stageFailed('Configuration setup failed.', [\n 'Fix the reported path or permissions, then run po init again.',\n ]);\n throw setupFailure('writing configuration', configDirectory, error);\n }\n\n // Po no longer registers with Pi; init only removes what earlier versions wrote.\n const agentDirectory = path.join(homeDirectory, '.pi', 'agent');\n presenter.stage(2, SETUP_STAGE_COUNT, 'REMOVE PI REGISTRATION', agentDirectory);\n let removed: string[];\n try {\n removed = removePoPiSettings(agentDirectory);\n presenter.stageReady(removed.length > 0 ? 'Removed Po entries from Pi.' : 'No Po entries in Pi.');\n } catch (error) {\n presenter.stageFailed('Pi cleanup failed.', [\n `Your Po configuration remains at ${configResult.directory}.`,\n 'Fix the reported settings or filesystem issue, then run po init again.',\n ]);\n throw setupFailure('removing Po from Pi settings', agentDirectory, error);\n }\n\n presenter.complete(configResult, removed);\n return 0;\n}\n\n/** Compatibility API. Executables call the command function directly. */\nexport class InitCommand {\n readonly name = INIT_COMMAND;\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n homeDirectory = os.homedir(),\n output: InitOutput = process.stdout,\n environment: NodeJS.ProcessEnv = process.env,\n ): Promise<number> {\n return runInit(args, homeDirectory, output, environment);\n }\n}\n"],"mappings":";;;;;;;;;;;AAUA,MAAM,eAAe;AACrB,MAAM,aAAa;AACnB,MAAM,oBAAoB;AAE1B,SAAS,aAAa,UAAkB,QAAgB,OAAuB;CAC7E,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;CACpE,OAAO,IAAI,MAAM,wBAAwB,SAAS,MAAM,OAAO,IAAI,UAAU,EAAE,OAAO,MAAM,CAAC;AAC/F;;AAGA,eAAsB,QACpB,MACA,gBAAgBA,QAAAA,QAAG,QAAQ,GAC3B,SAAqB,QAAQ,QAC7B,cAAiC,QAAQ,KACxB;CACjB,MAAM,QAAQ,KAAK,MAAM,CAAC;CAC1B,MAAM,UAAU,MAAM,MAAM,SAAS,SAAS,UAAU;CACxD,IAAIC,eAAAA,UAAU,IAAI,GAAG;EACnB,QAAQ,OAAO,MAAMC,aAAAA,SAAS,CAAC;EAC/B,OAAO;CACT;CACA,IAAI,YAAY,KAAA,GAAW,MAAM,IAAI,MAAM,2BAA2B,SAAS;CAE/E,MAAM,YAAY,IAAIC,kBAAAA,cAAc,QAAQ,WAAW;CACvD,UAAU,MAAM;CAEhB,MAAM,mBAAA,GAAkBC,qBAAAA,0BAAAA,CAA0B,aAAa;CAC/D,UAAU,MAAM,GAAG,mBAAmB,uBAAuB,eAAe;CAC5E,IAAI;CACJ,IAAI;EACF,gBAAA,GAAeC,qBAAAA,2BAAAA,CAA2B,eAAe,EAAE,OAAO,MAAM,SAAS,UAAU,EAAE,CAAC;EAC9F,UAAU,WAAW,gCAAgC;CACvD,SAAS,OAAO;EACd,UAAU,YAAY,+BAA+B,CACnD,+DACF,CAAC;EACD,MAAM,aAAa,yBAAyB,iBAAiB,KAAK;CACpE;CAGA,MAAM,iBAAiBC,UAAAA,QAAK,KAAK,eAAe,OAAO,OAAO;CAC9D,UAAU,MAAM,GAAG,mBAAmB,0BAA0B,cAAc;CAC9E,IAAI;CACJ,IAAI;EACF,WAAA,GAAUC,8BAAAA,mBAAAA,CAAmB,cAAc;EAC3C,UAAU,WAAW,QAAQ,SAAS,IAAI,gCAAgC,sBAAsB;CAClG,SAAS,OAAO;EACd,UAAU,YAAY,sBAAsB,CAC1C,oCAAoC,aAAa,UAAU,IAC3D,wEACF,CAAC;EACD,MAAM,aAAa,gCAAgC,gBAAgB,KAAK;CAC1E;CAEA,UAAU,SAAS,cAAc,OAAO;CACxC,OAAO;AACT;;AAGA,IAAa,cAAb,MAAyB;CACvB,OAAgB;CAEhB,QAAQ,MAAyB;EAC/B,OAAO,KAAK,OAAO,KAAK;CAC1B;CAEA,MAAM,QACJ,MACA,gBAAgBP,QAAAA,QAAG,QAAQ,GAC3B,SAAqB,QAAQ,QAC7B,cAAiC,QAAQ,KACxB;EACjB,OAAO,QAAQ,MAAM,eAAe,QAAQ,WAAW;CACzD;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { InitOutput } from "./presenter.mjs";
|
|
2
|
+
//#region src/cli/commands/init/index.d.ts
|
|
3
|
+
/** Handles the repository-independent `po init` command. */
|
|
4
|
+
export declare function runInit(args: string[], homeDirectory?: string, output?: InitOutput, environment?: NodeJS.ProcessEnv): Promise<number>;
|
|
5
|
+
/** Compatibility API. Executables call the command function directly. */
|
|
6
|
+
export declare class InitCommand {
|
|
7
|
+
readonly name = "init";
|
|
8
|
+
matches(args: string[]): boolean;
|
|
9
|
+
execute(args: string[], homeDirectory?: string, output?: InitOutput, environment?: NodeJS.ProcessEnv): Promise<number>;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/cli/commands/init/index.ts"],"mappings":";;;wBAoBsB,QACpB,gBACA,wBACA,SAAQ,YACR,cAAa,OAAO,aACnB;;qBA6CU;WACF;EAET,QAAQ;EAIF,QACJ,gBACA,wBACA,SAAQ,YACR,cAAa,OAAO,aACnB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { initHelp } from "./help.mjs";
|
|
2
|
+
import { wantsHelp } from "../../router.mjs";
|
|
3
|
+
import { InitPresenter } from "./presenter.mjs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import { removePoPiSettings } from "@agimon-ai/po-core/piSettings";
|
|
7
|
+
import { globalDoomConfigDirectory, initializeGlobalDoomConfig } from "@agimon-ai/po-config";
|
|
8
|
+
//#region src/cli/commands/init/index.ts
|
|
9
|
+
const INIT_COMMAND = "init";
|
|
10
|
+
const FORCE_FLAG = "--force";
|
|
11
|
+
const SETUP_STAGE_COUNT = 2;
|
|
12
|
+
function setupFailure(activity, target, error) {
|
|
13
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
14
|
+
return new Error(`po init failed while ${activity} at ${target}: ${detail}`, { cause: error });
|
|
15
|
+
}
|
|
16
|
+
/** Handles the repository-independent `po init` command. */
|
|
17
|
+
async function runInit(args, homeDirectory = os.homedir(), output = process.stdout, environment = process.env) {
|
|
18
|
+
const flags = args.slice(1);
|
|
19
|
+
const unknown = flags.find((flag) => flag !== FORCE_FLAG);
|
|
20
|
+
if (wantsHelp(args)) {
|
|
21
|
+
process.stdout.write(initHelp());
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
if (unknown !== void 0) throw new Error(`po init does not accept ${unknown}`);
|
|
25
|
+
const presenter = new InitPresenter(output, environment);
|
|
26
|
+
presenter.brand();
|
|
27
|
+
const configDirectory = globalDoomConfigDirectory(homeDirectory);
|
|
28
|
+
presenter.stage(1, SETUP_STAGE_COUNT, "WRITE CONFIGURATION", configDirectory);
|
|
29
|
+
let configResult;
|
|
30
|
+
try {
|
|
31
|
+
configResult = initializeGlobalDoomConfig(homeDirectory, { force: flags.includes(FORCE_FLAG) });
|
|
32
|
+
presenter.stageReady("Configuration files are ready.");
|
|
33
|
+
} catch (error) {
|
|
34
|
+
presenter.stageFailed("Configuration setup failed.", ["Fix the reported path or permissions, then run po init again."]);
|
|
35
|
+
throw setupFailure("writing configuration", configDirectory, error);
|
|
36
|
+
}
|
|
37
|
+
const agentDirectory = path.join(homeDirectory, ".pi", "agent");
|
|
38
|
+
presenter.stage(2, SETUP_STAGE_COUNT, "REMOVE PI REGISTRATION", agentDirectory);
|
|
39
|
+
let removed;
|
|
40
|
+
try {
|
|
41
|
+
removed = removePoPiSettings(agentDirectory);
|
|
42
|
+
presenter.stageReady(removed.length > 0 ? "Removed Po entries from Pi." : "No Po entries in Pi.");
|
|
43
|
+
} catch (error) {
|
|
44
|
+
presenter.stageFailed("Pi cleanup failed.", [`Your Po configuration remains at ${configResult.directory}.`, "Fix the reported settings or filesystem issue, then run po init again."]);
|
|
45
|
+
throw setupFailure("removing Po from Pi settings", agentDirectory, error);
|
|
46
|
+
}
|
|
47
|
+
presenter.complete(configResult, removed);
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
/** Compatibility API. Executables call the command function directly. */
|
|
51
|
+
var InitCommand = class {
|
|
52
|
+
name = INIT_COMMAND;
|
|
53
|
+
matches(args) {
|
|
54
|
+
return args[0] === this.name;
|
|
55
|
+
}
|
|
56
|
+
async execute(args, homeDirectory = os.homedir(), output = process.stdout, environment = process.env) {
|
|
57
|
+
return runInit(args, homeDirectory, output, environment);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
//#endregion
|
|
61
|
+
export { InitCommand, runInit };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/cli/commands/init/index.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\n\nimport { type GlobalDoomInitResult, globalDoomConfigDirectory, initializeGlobalDoomConfig } from '@agimon-ai/po-config';\nimport { removePoPiSettings } from '@agimon-ai/po-core/piSettings';\n\nimport { wantsHelp } from '../../router';\nimport { initHelp } from './help';\nimport { InitPresenter, type InitOutput } from './presenter';\n\nconst INIT_COMMAND = 'init';\nconst FORCE_FLAG = '--force';\nconst SETUP_STAGE_COUNT = 2;\n\nfunction setupFailure(activity: string, target: string, error: unknown): Error {\n const detail = error instanceof Error ? error.message : String(error);\n return new Error(`po init failed while ${activity} at ${target}: ${detail}`, { cause: error });\n}\n\n/** Handles the repository-independent `po init` command. */\nexport async function runInit(\n args: string[],\n homeDirectory = os.homedir(),\n output: InitOutput = process.stdout,\n environment: NodeJS.ProcessEnv = process.env,\n): Promise<number> {\n const flags = args.slice(1);\n const unknown = flags.find((flag) => flag !== FORCE_FLAG);\n if (wantsHelp(args)) {\n process.stdout.write(initHelp());\n return 0;\n }\n if (unknown !== undefined) throw new Error(`po init does not accept ${unknown}`);\n\n const presenter = new InitPresenter(output, environment);\n presenter.brand();\n\n const configDirectory = globalDoomConfigDirectory(homeDirectory);\n presenter.stage(1, SETUP_STAGE_COUNT, 'WRITE CONFIGURATION', configDirectory);\n let configResult: GlobalDoomInitResult;\n try {\n configResult = initializeGlobalDoomConfig(homeDirectory, { force: flags.includes(FORCE_FLAG) });\n presenter.stageReady('Configuration files are ready.');\n } catch (error) {\n presenter.stageFailed('Configuration setup failed.', [\n 'Fix the reported path or permissions, then run po init again.',\n ]);\n throw setupFailure('writing configuration', configDirectory, error);\n }\n\n // Po no longer registers with Pi; init only removes what earlier versions wrote.\n const agentDirectory = path.join(homeDirectory, '.pi', 'agent');\n presenter.stage(2, SETUP_STAGE_COUNT, 'REMOVE PI REGISTRATION', agentDirectory);\n let removed: string[];\n try {\n removed = removePoPiSettings(agentDirectory);\n presenter.stageReady(removed.length > 0 ? 'Removed Po entries from Pi.' : 'No Po entries in Pi.');\n } catch (error) {\n presenter.stageFailed('Pi cleanup failed.', [\n `Your Po configuration remains at ${configResult.directory}.`,\n 'Fix the reported settings or filesystem issue, then run po init again.',\n ]);\n throw setupFailure('removing Po from Pi settings', agentDirectory, error);\n }\n\n presenter.complete(configResult, removed);\n return 0;\n}\n\n/** Compatibility API. Executables call the command function directly. */\nexport class InitCommand {\n readonly name = INIT_COMMAND;\n\n matches(args: string[]): boolean {\n return args[0] === this.name;\n }\n\n async execute(\n args: string[],\n homeDirectory = os.homedir(),\n output: InitOutput = process.stdout,\n environment: NodeJS.ProcessEnv = process.env,\n ): Promise<number> {\n return runInit(args, homeDirectory, output, environment);\n }\n}\n"],"mappings":";;;;;;;;AAUA,MAAM,eAAe;AACrB,MAAM,aAAa;AACnB,MAAM,oBAAoB;AAE1B,SAAS,aAAa,UAAkB,QAAgB,OAAuB;CAC7E,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;CACpE,OAAO,IAAI,MAAM,wBAAwB,SAAS,MAAM,OAAO,IAAI,UAAU,EAAE,OAAO,MAAM,CAAC;AAC/F;;AAGA,eAAsB,QACpB,MACA,gBAAgB,GAAG,QAAQ,GAC3B,SAAqB,QAAQ,QAC7B,cAAiC,QAAQ,KACxB;CACjB,MAAM,QAAQ,KAAK,MAAM,CAAC;CAC1B,MAAM,UAAU,MAAM,MAAM,SAAS,SAAS,UAAU;CACxD,IAAI,UAAU,IAAI,GAAG;EACnB,QAAQ,OAAO,MAAM,SAAS,CAAC;EAC/B,OAAO;CACT;CACA,IAAI,YAAY,KAAA,GAAW,MAAM,IAAI,MAAM,2BAA2B,SAAS;CAE/E,MAAM,YAAY,IAAI,cAAc,QAAQ,WAAW;CACvD,UAAU,MAAM;CAEhB,MAAM,kBAAkB,0BAA0B,aAAa;CAC/D,UAAU,MAAM,GAAG,mBAAmB,uBAAuB,eAAe;CAC5E,IAAI;CACJ,IAAI;EACF,eAAe,2BAA2B,eAAe,EAAE,OAAO,MAAM,SAAS,UAAU,EAAE,CAAC;EAC9F,UAAU,WAAW,gCAAgC;CACvD,SAAS,OAAO;EACd,UAAU,YAAY,+BAA+B,CACnD,+DACF,CAAC;EACD,MAAM,aAAa,yBAAyB,iBAAiB,KAAK;CACpE;CAGA,MAAM,iBAAiB,KAAK,KAAK,eAAe,OAAO,OAAO;CAC9D,UAAU,MAAM,GAAG,mBAAmB,0BAA0B,cAAc;CAC9E,IAAI;CACJ,IAAI;EACF,UAAU,mBAAmB,cAAc;EAC3C,UAAU,WAAW,QAAQ,SAAS,IAAI,gCAAgC,sBAAsB;CAClG,SAAS,OAAO;EACd,UAAU,YAAY,sBAAsB,CAC1C,oCAAoC,aAAa,UAAU,IAC3D,wEACF,CAAC;EACD,MAAM,aAAa,gCAAgC,gBAAgB,KAAK;CAC1E;CAEA,UAAU,SAAS,cAAc,OAAO;CACxC,OAAO;AACT;;AAGA,IAAa,cAAb,MAAyB;CACvB,OAAgB;CAEhB,QAAQ,MAAyB;EAC/B,OAAO,KAAK,OAAO,KAAK;CAC1B;CAEA,MAAM,QACJ,MACA,gBAAgB,GAAG,QAAQ,GAC3B,SAAqB,QAAQ,QAC7B,cAAiC,QAAQ,KACxB;EACjB,OAAO,QAAQ,MAAM,eAAe,QAAQ,WAAW;CACzD;AACF"}
|