@agimon-ai/doompi 0.0.1-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 +546 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/bin/cli.cjs +3 -0
- package/dist/bin/cli.cjs.map +1 -0
- package/dist/bin/cli.d.cts +1 -0
- package/dist/bin/cli.d.mts +1 -0
- package/dist/bin/cli.mjs +3 -0
- package/dist/bin/cli.mjs.map +1 -0
- package/dist/bin/doomRunner.cjs +3 -0
- package/dist/bin/doomRunner.cjs.map +1 -0
- package/dist/bin/doomRunner.d.cts +1 -0
- package/dist/bin/doomRunner.d.mts +1 -0
- package/dist/bin/doomRunner.mjs +3 -0
- package/dist/bin/doomRunner.mjs.map +1 -0
- package/dist/cli/cliApp.cjs +2 -0
- package/dist/cli/cliApp.cjs.map +1 -0
- package/dist/cli/cliApp.d.cts +50 -0
- package/dist/cli/cliApp.d.cts.map +1 -0
- package/dist/cli/cliApp.d.mts +50 -0
- package/dist/cli/cliApp.d.mts.map +1 -0
- package/dist/cli/cliApp.mjs +2 -0
- package/dist/cli/cliApp.mjs.map +1 -0
- package/dist/cli/compatibilityOptions.cjs +2 -0
- package/dist/cli/compatibilityOptions.cjs.map +1 -0
- package/dist/cli/compatibilityOptions.d.cts +15 -0
- package/dist/cli/compatibilityOptions.d.cts.map +1 -0
- package/dist/cli/compatibilityOptions.d.mts +15 -0
- package/dist/cli/compatibilityOptions.d.mts.map +1 -0
- package/dist/cli/compatibilityOptions.mjs +2 -0
- package/dist/cli/compatibilityOptions.mjs.map +1 -0
- package/dist/cli/help.cjs +61 -0
- package/dist/cli/help.cjs.map +1 -0
- package/dist/cli/help.d.cts +6 -0
- package/dist/cli/help.d.cts.map +1 -0
- package/dist/cli/help.d.mts +6 -0
- package/dist/cli/help.d.mts.map +1 -0
- package/dist/cli/help.mjs +61 -0
- package/dist/cli/help.mjs.map +1 -0
- package/dist/cli/index.cjs +1 -0
- package/dist/cli/index.d.cts +5 -0
- package/dist/cli/index.d.mts +5 -0
- package/dist/cli/index.mjs +1 -0
- package/dist/cli/matrixOptions.cjs +2 -0
- package/dist/cli/matrixOptions.cjs.map +1 -0
- package/dist/cli/matrixOptions.d.cts +99 -0
- package/dist/cli/matrixOptions.d.cts.map +1 -0
- package/dist/cli/matrixOptions.d.mts +99 -0
- package/dist/cli/matrixOptions.d.mts.map +1 -0
- package/dist/cli/matrixOptions.mjs +2 -0
- package/dist/cli/matrixOptions.mjs.map +1 -0
- package/dist/cli/options.cjs +2 -0
- package/dist/cli/options.cjs.map +1 -0
- package/dist/cli/options.d.cts +7 -0
- package/dist/cli/options.d.cts.map +1 -0
- package/dist/cli/options.d.mts +7 -0
- package/dist/cli/options.d.mts.map +1 -0
- package/dist/cli/options.mjs +2 -0
- package/dist/cli/options.mjs.map +1 -0
- package/dist/commands/baseCommand.cjs +2 -0
- package/dist/commands/baseCommand.cjs.map +1 -0
- package/dist/commands/baseCommand.d.cts +36 -0
- package/dist/commands/baseCommand.d.cts.map +1 -0
- package/dist/commands/baseCommand.d.mts +36 -0
- package/dist/commands/baseCommand.d.mts.map +1 -0
- package/dist/commands/baseCommand.mjs +2 -0
- package/dist/commands/baseCommand.mjs.map +1 -0
- package/dist/commands/compatibilityCommand.cjs +2 -0
- package/dist/commands/compatibilityCommand.cjs.map +1 -0
- package/dist/commands/compatibilityCommand.d.cts +14 -0
- package/dist/commands/compatibilityCommand.d.cts.map +1 -0
- package/dist/commands/compatibilityCommand.d.mts +14 -0
- package/dist/commands/compatibilityCommand.d.mts.map +1 -0
- package/dist/commands/compatibilityCommand.mjs +2 -0
- package/dist/commands/compatibilityCommand.mjs.map +1 -0
- package/dist/commands/emitMcpCommand.cjs +2 -0
- package/dist/commands/emitMcpCommand.cjs.map +1 -0
- package/dist/commands/emitMcpCommand.d.cts +19 -0
- package/dist/commands/emitMcpCommand.d.cts.map +1 -0
- package/dist/commands/emitMcpCommand.d.mts +19 -0
- package/dist/commands/emitMcpCommand.d.mts.map +1 -0
- package/dist/commands/emitMcpCommand.mjs +2 -0
- package/dist/commands/emitMcpCommand.mjs.map +1 -0
- package/dist/commands/explainCommand.cjs +21 -0
- package/dist/commands/explainCommand.cjs.map +1 -0
- package/dist/commands/explainCommand.d.cts +63 -0
- package/dist/commands/explainCommand.d.cts.map +1 -0
- package/dist/commands/explainCommand.d.mts +63 -0
- package/dist/commands/explainCommand.d.mts.map +1 -0
- package/dist/commands/explainCommand.mjs +21 -0
- package/dist/commands/explainCommand.mjs.map +1 -0
- package/dist/commands/index.cjs +1 -0
- package/dist/commands/index.d.cts +8 -0
- package/dist/commands/index.d.mts +8 -0
- package/dist/commands/index.mjs +1 -0
- package/dist/commands/initCommand.cjs +3 -0
- package/dist/commands/initCommand.cjs.map +1 -0
- package/dist/commands/initCommand.d.cts +11 -0
- package/dist/commands/initCommand.d.cts.map +1 -0
- package/dist/commands/initCommand.d.mts +11 -0
- package/dist/commands/initCommand.d.mts.map +1 -0
- package/dist/commands/initCommand.mjs +3 -0
- package/dist/commands/initCommand.mjs.map +1 -0
- package/dist/commands/launchCommand.cjs +2 -0
- package/dist/commands/launchCommand.cjs.map +1 -0
- package/dist/commands/launchCommand.d.cts +31 -0
- package/dist/commands/launchCommand.d.cts.map +1 -0
- package/dist/commands/launchCommand.d.mts +31 -0
- package/dist/commands/launchCommand.d.mts.map +1 -0
- package/dist/commands/launchCommand.mjs +2 -0
- package/dist/commands/launchCommand.mjs.map +1 -0
- package/dist/commands/syncCommand.cjs +6 -0
- package/dist/commands/syncCommand.cjs.map +1 -0
- package/dist/commands/syncCommand.d.cts +37 -0
- package/dist/commands/syncCommand.d.cts.map +1 -0
- package/dist/commands/syncCommand.d.mts +37 -0
- package/dist/commands/syncCommand.d.mts.map +1 -0
- package/dist/commands/syncCommand.mjs +6 -0
- package/dist/commands/syncCommand.mjs.map +1 -0
- package/dist/config/harnessState.cjs +2 -0
- package/dist/config/harnessState.cjs.map +1 -0
- package/dist/config/harnessState.d.cts +24 -0
- package/dist/config/harnessState.d.cts.map +1 -0
- package/dist/config/harnessState.d.mts +24 -0
- package/dist/config/harnessState.d.mts.map +1 -0
- package/dist/config/harnessState.mjs +2 -0
- package/dist/config/harnessState.mjs.map +1 -0
- package/dist/config/index.cjs +1 -0
- package/dist/config/index.d.cts +7 -0
- package/dist/config/index.d.mts +7 -0
- package/dist/config/index.mjs +1 -0
- package/dist/config/projectTrust.cjs +2 -0
- package/dist/config/projectTrust.cjs.map +1 -0
- package/dist/config/projectTrust.d.cts +14 -0
- package/dist/config/projectTrust.d.cts.map +1 -0
- package/dist/config/projectTrust.d.mts +14 -0
- package/dist/config/projectTrust.d.mts.map +1 -0
- package/dist/config/projectTrust.mjs +2 -0
- package/dist/config/projectTrust.mjs.map +1 -0
- package/dist/entries/autoStop.cjs +2 -0
- package/dist/entries/autoStop.cjs.map +1 -0
- package/dist/entries/autoStop.d.cts +6 -0
- package/dist/entries/autoStop.d.cts.map +1 -0
- package/dist/entries/autoStop.d.mts +7 -0
- package/dist/entries/autoStop.d.mts.map +1 -0
- package/dist/entries/autoStop.mjs +2 -0
- package/dist/entries/autoStop.mjs.map +1 -0
- package/dist/entries/components/matrixPicker.cjs +2 -0
- package/dist/entries/components/matrixPicker.cjs.map +1 -0
- package/dist/entries/components/matrixPicker.d.cts +55 -0
- package/dist/entries/components/matrixPicker.d.cts.map +1 -0
- package/dist/entries/components/matrixPicker.d.mts +55 -0
- package/dist/entries/components/matrixPicker.d.mts.map +1 -0
- package/dist/entries/components/matrixPicker.mjs +2 -0
- package/dist/entries/components/matrixPicker.mjs.map +1 -0
- package/dist/entries/components/skillsOverlay.cjs +4 -0
- package/dist/entries/components/skillsOverlay.cjs.map +1 -0
- package/dist/entries/components/skillsOverlay.d.cts +58 -0
- package/dist/entries/components/skillsOverlay.d.cts.map +1 -0
- package/dist/entries/components/skillsOverlay.d.mts +58 -0
- package/dist/entries/components/skillsOverlay.d.mts.map +1 -0
- package/dist/entries/components/skillsOverlay.mjs +4 -0
- package/dist/entries/components/skillsOverlay.mjs.map +1 -0
- package/dist/entries/domains.cjs +2 -0
- package/dist/entries/domains.cjs.map +1 -0
- package/dist/entries/domains.d.cts +10 -0
- package/dist/entries/domains.d.cts.map +1 -0
- package/dist/entries/domains.d.mts +10 -0
- package/dist/entries/domains.d.mts.map +1 -0
- package/dist/entries/domains.mjs +2 -0
- package/dist/entries/domains.mjs.map +1 -0
- package/dist/entries/doom.cjs +2 -0
- package/dist/entries/doom.cjs.map +1 -0
- package/dist/entries/doom.d.cts +13 -0
- package/dist/entries/doom.d.cts.map +1 -0
- package/dist/entries/doom.d.mts +14 -0
- package/dist/entries/doom.d.mts.map +1 -0
- package/dist/entries/doom.mjs +2 -0
- package/dist/entries/doom.mjs.map +1 -0
- package/dist/entries/effort.cjs +2 -0
- package/dist/entries/effort.cjs.map +1 -0
- package/dist/entries/effort.d.cts +10 -0
- package/dist/entries/effort.d.cts.map +1 -0
- package/dist/entries/effort.d.mts +10 -0
- package/dist/entries/effort.d.mts.map +1 -0
- package/dist/entries/effort.mjs +2 -0
- package/dist/entries/effort.mjs.map +1 -0
- package/dist/entries/majorMode.cjs +6 -0
- package/dist/entries/majorMode.cjs.map +1 -0
- package/dist/entries/majorMode.d.cts +29 -0
- package/dist/entries/majorMode.d.cts.map +1 -0
- package/dist/entries/majorMode.d.mts +29 -0
- package/dist/entries/majorMode.d.mts.map +1 -0
- package/dist/entries/majorMode.mjs +6 -0
- package/dist/entries/majorMode.mjs.map +1 -0
- package/dist/entries/notifications.cjs +2 -0
- package/dist/entries/notifications.cjs.map +1 -0
- package/dist/entries/notifications.d.cts +13 -0
- package/dist/entries/notifications.d.cts.map +1 -0
- package/dist/entries/notifications.d.mts +13 -0
- package/dist/entries/notifications.d.mts.map +1 -0
- package/dist/entries/notifications.mjs +2 -0
- package/dist/entries/notifications.mjs.map +1 -0
- package/dist/entries/ollamaProvider.cjs +2 -0
- package/dist/entries/ollamaProvider.cjs.map +1 -0
- package/dist/entries/ollamaProvider.d.cts +6 -0
- package/dist/entries/ollamaProvider.d.cts.map +1 -0
- package/dist/entries/ollamaProvider.d.mts +7 -0
- package/dist/entries/ollamaProvider.d.mts.map +1 -0
- package/dist/entries/ollamaProvider.mjs +2 -0
- package/dist/entries/ollamaProvider.mjs.map +1 -0
- package/dist/entries/persona.cjs +2 -0
- package/dist/entries/persona.cjs.map +1 -0
- package/dist/entries/persona.d.cts +14 -0
- package/dist/entries/persona.d.cts.map +1 -0
- package/dist/entries/persona.d.mts +15 -0
- package/dist/entries/persona.d.mts.map +1 -0
- package/dist/entries/persona.mjs +2 -0
- package/dist/entries/persona.mjs.map +1 -0
- package/dist/entries/profile.cjs +3 -0
- package/dist/entries/profile.cjs.map +1 -0
- package/dist/entries/profile.d.cts +16 -0
- package/dist/entries/profile.d.cts.map +1 -0
- package/dist/entries/profile.d.mts +16 -0
- package/dist/entries/profile.d.mts.map +1 -0
- package/dist/entries/profile.mjs +3 -0
- package/dist/entries/profile.mjs.map +1 -0
- package/dist/entries/repositoryHooks.cjs +9 -0
- package/dist/entries/repositoryHooks.cjs.map +1 -0
- package/dist/entries/repositoryHooks.d.cts +7 -0
- package/dist/entries/repositoryHooks.d.cts.map +1 -0
- package/dist/entries/repositoryHooks.d.mts +8 -0
- package/dist/entries/repositoryHooks.d.mts.map +1 -0
- package/dist/entries/repositoryHooks.mjs +9 -0
- package/dist/entries/repositoryHooks.mjs.map +1 -0
- package/dist/entries/skills.cjs +2 -0
- package/dist/entries/skills.cjs.map +1 -0
- package/dist/entries/skills.d.cts +34 -0
- package/dist/entries/skills.d.cts.map +1 -0
- package/dist/entries/skills.d.mts +34 -0
- package/dist/entries/skills.d.mts.map +1 -0
- package/dist/entries/skills.mjs +2 -0
- package/dist/entries/skills.mjs.map +1 -0
- package/dist/entries/styleSystem.cjs +4 -0
- package/dist/entries/styleSystem.cjs.map +1 -0
- package/dist/entries/styleSystem.d.cts +32 -0
- package/dist/entries/styleSystem.d.cts.map +1 -0
- package/dist/entries/styleSystem.d.mts +32 -0
- package/dist/entries/styleSystem.d.mts.map +1 -0
- package/dist/entries/styleSystem.mjs +4 -0
- package/dist/entries/styleSystem.mjs.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +34 -0
- package/dist/index.d.mts +34 -0
- package/dist/index.mjs +1 -0
- package/dist/interfaces/compatibility.d.cts +23 -0
- package/dist/interfaces/compatibility.d.cts.map +1 -0
- package/dist/interfaces/compatibility.d.mts +23 -0
- package/dist/interfaces/compatibility.d.mts.map +1 -0
- package/dist/interfaces/harness.d.cts +83 -0
- package/dist/interfaces/harness.d.cts.map +1 -0
- package/dist/interfaces/harness.d.mts +83 -0
- package/dist/interfaces/harness.d.mts.map +1 -0
- package/dist/logSinkTelemetry.cjs +2 -0
- package/dist/logSinkTelemetry.cjs.map +1 -0
- package/dist/logSinkTelemetry.d.cts +49 -0
- package/dist/logSinkTelemetry.d.cts.map +1 -0
- package/dist/logSinkTelemetry.d.mts +49 -0
- package/dist/logSinkTelemetry.d.mts.map +1 -0
- package/dist/logSinkTelemetry.mjs +2 -0
- package/dist/logSinkTelemetry.mjs.map +1 -0
- package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs +2 -0
- package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.cjs.map +1 -0
- package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs +2 -0
- package/dist/node_modules/.pnpm/@juicesharp_rpiv-ask-user-question@2.2.0_@earendil-works_pi-coding-agent@0.84.1_support_6ba1249e24a50b62791c1c91c9f324c6/node_modules/@juicesharp/rpiv-ask-user-question/events.mjs.map +1 -0
- package/dist/services/compatibility/antigravity.cjs +2 -0
- package/dist/services/compatibility/antigravity.cjs.map +1 -0
- package/dist/services/compatibility/antigravity.d.cts +11 -0
- package/dist/services/compatibility/antigravity.d.cts.map +1 -0
- package/dist/services/compatibility/antigravity.d.mts +11 -0
- package/dist/services/compatibility/antigravity.d.mts.map +1 -0
- package/dist/services/compatibility/antigravity.mjs +2 -0
- package/dist/services/compatibility/antigravity.mjs.map +1 -0
- package/dist/services/compatibility/codex.cjs +2 -0
- package/dist/services/compatibility/codex.cjs.map +1 -0
- package/dist/services/compatibility/codex.d.cts +19 -0
- package/dist/services/compatibility/codex.d.cts.map +1 -0
- package/dist/services/compatibility/codex.d.mts +19 -0
- package/dist/services/compatibility/codex.d.mts.map +1 -0
- package/dist/services/compatibility/codex.mjs +2 -0
- package/dist/services/compatibility/codex.mjs.map +1 -0
- package/dist/services/compatibility/index.cjs +2 -0
- package/dist/services/compatibility/index.cjs.map +1 -0
- package/dist/services/compatibility/index.d.cts +16 -0
- package/dist/services/compatibility/index.d.cts.map +1 -0
- package/dist/services/compatibility/index.d.mts +16 -0
- package/dist/services/compatibility/index.d.mts.map +1 -0
- package/dist/services/compatibility/index.mjs +2 -0
- package/dist/services/compatibility/index.mjs.map +1 -0
- package/dist/services/compatibility/process.cjs +2 -0
- package/dist/services/compatibility/process.cjs.map +1 -0
- package/dist/services/compatibility/process.d.cts +35 -0
- package/dist/services/compatibility/process.d.cts.map +1 -0
- package/dist/services/compatibility/process.d.mts +35 -0
- package/dist/services/compatibility/process.d.mts.map +1 -0
- package/dist/services/compatibility/process.mjs +2 -0
- package/dist/services/compatibility/process.mjs.map +1 -0
- package/dist/services/compatibility/shared.cjs +2 -0
- package/dist/services/compatibility/shared.cjs.map +1 -0
- package/dist/services/compatibility/shared.d.cts +33 -0
- package/dist/services/compatibility/shared.d.cts.map +1 -0
- package/dist/services/compatibility/shared.d.mts +33 -0
- package/dist/services/compatibility/shared.d.mts.map +1 -0
- package/dist/services/compatibility/shared.mjs +2 -0
- package/dist/services/compatibility/shared.mjs.map +1 -0
- package/dist/services/compatibilityContext.cjs +2 -0
- package/dist/services/compatibilityContext.cjs.map +1 -0
- package/dist/services/compatibilityContext.d.cts +23 -0
- package/dist/services/compatibilityContext.d.cts.map +1 -0
- package/dist/services/compatibilityContext.d.mts +23 -0
- package/dist/services/compatibilityContext.d.mts.map +1 -0
- package/dist/services/compatibilityContext.mjs +2 -0
- package/dist/services/compatibilityContext.mjs.map +1 -0
- package/dist/services/composer.cjs +2 -0
- package/dist/services/composer.cjs.map +1 -0
- package/dist/services/composer.d.cts +133 -0
- package/dist/services/composer.d.cts.map +1 -0
- package/dist/services/composer.d.mts +133 -0
- package/dist/services/composer.d.mts.map +1 -0
- package/dist/services/composer.mjs +2 -0
- package/dist/services/composer.mjs.map +1 -0
- package/dist/services/extensionAssembler.cjs +2 -0
- package/dist/services/extensionAssembler.cjs.map +1 -0
- package/dist/services/extensionAssembler.d.cts +72 -0
- package/dist/services/extensionAssembler.d.cts.map +1 -0
- package/dist/services/extensionAssembler.d.mts +72 -0
- package/dist/services/extensionAssembler.d.mts.map +1 -0
- package/dist/services/extensionAssembler.mjs +2 -0
- package/dist/services/extensionAssembler.mjs.map +1 -0
- package/dist/services/extensionCompiler.cjs +2 -0
- package/dist/services/extensionCompiler.cjs.map +1 -0
- package/dist/services/extensionCompiler.mjs +2 -0
- package/dist/services/extensionCompiler.mjs.map +1 -0
- package/dist/services/harnessContext.cjs +2 -0
- package/dist/services/harnessContext.cjs.map +1 -0
- package/dist/services/harnessContext.d.cts +61 -0
- package/dist/services/harnessContext.d.cts.map +1 -0
- package/dist/services/harnessContext.d.mts +61 -0
- package/dist/services/harnessContext.d.mts.map +1 -0
- package/dist/services/harnessContext.mjs +2 -0
- package/dist/services/harnessContext.mjs.map +1 -0
- package/dist/services/index.cjs +1 -0
- package/dist/services/index.d.cts +14 -0
- package/dist/services/index.d.mts +14 -0
- package/dist/services/index.mjs +1 -0
- package/dist/services/matrixSwitcher.cjs +2 -0
- package/dist/services/matrixSwitcher.cjs.map +1 -0
- package/dist/services/matrixSwitcher.d.cts +46 -0
- package/dist/services/matrixSwitcher.d.cts.map +1 -0
- package/dist/services/matrixSwitcher.d.mts +46 -0
- package/dist/services/matrixSwitcher.d.mts.map +1 -0
- package/dist/services/matrixSwitcher.mjs +2 -0
- package/dist/services/matrixSwitcher.mjs.map +1 -0
- package/dist/services/mcpFilter.cjs +3 -0
- package/dist/services/mcpFilter.cjs.map +1 -0
- package/dist/services/mcpFilter.d.cts +40 -0
- package/dist/services/mcpFilter.d.cts.map +1 -0
- package/dist/services/mcpFilter.d.mts +40 -0
- package/dist/services/mcpFilter.d.mts.map +1 -0
- package/dist/services/mcpFilter.mjs +3 -0
- package/dist/services/mcpFilter.mjs.map +1 -0
- package/dist/services/piSettings.cjs +2 -0
- package/dist/services/piSettings.cjs.map +1 -0
- package/dist/services/piSettings.d.cts +24 -0
- package/dist/services/piSettings.d.cts.map +1 -0
- package/dist/services/piSettings.d.mts +24 -0
- package/dist/services/piSettings.d.mts.map +1 -0
- package/dist/services/piSettings.mjs +2 -0
- package/dist/services/piSettings.mjs.map +1 -0
- package/dist/services/resourceCollector.cjs +3 -0
- package/dist/services/resourceCollector.cjs.map +1 -0
- package/dist/services/resourceCollector.d.cts +16 -0
- package/dist/services/resourceCollector.d.cts.map +1 -0
- package/dist/services/resourceCollector.d.mts +16 -0
- package/dist/services/resourceCollector.d.mts.map +1 -0
- package/dist/services/resourceCollector.mjs +3 -0
- package/dist/services/resourceCollector.mjs.map +1 -0
- package/dist/services/skillCatalog.cjs +2 -0
- package/dist/services/skillCatalog.cjs.map +1 -0
- package/dist/services/skillCatalog.d.cts +56 -0
- package/dist/services/skillCatalog.d.cts.map +1 -0
- package/dist/services/skillCatalog.d.mts +56 -0
- package/dist/services/skillCatalog.d.mts.map +1 -0
- package/dist/services/skillCatalog.mjs +2 -0
- package/dist/services/skillCatalog.mjs.map +1 -0
- package/dist/services/skillSources.cjs +2 -0
- package/dist/services/skillSources.cjs.map +1 -0
- package/dist/services/skillSources.d.cts +24 -0
- package/dist/services/skillSources.d.cts.map +1 -0
- package/dist/services/skillSources.d.mts +24 -0
- package/dist/services/skillSources.d.mts.map +1 -0
- package/dist/services/skillSources.mjs +2 -0
- package/dist/services/skillSources.mjs.map +1 -0
- package/dist/services/syncState.cjs +2 -0
- package/dist/services/syncState.cjs.map +1 -0
- package/dist/services/syncState.d.cts +130 -0
- package/dist/services/syncState.d.cts.map +1 -0
- package/dist/services/syncState.d.mts +130 -0
- package/dist/services/syncState.d.mts.map +1 -0
- package/dist/services/syncState.mjs +2 -0
- package/dist/services/syncState.mjs.map +1 -0
- package/dist/utils/index.cjs +1 -0
- package/dist/utils/index.d.cts +5 -0
- package/dist/utils/index.d.mts +5 -0
- package/dist/utils/index.mjs +1 -0
- package/dist/utils/json.cjs +2 -0
- package/dist/utils/json.cjs.map +1 -0
- package/dist/utils/json.d.cts +23 -0
- package/dist/utils/json.d.cts.map +1 -0
- package/dist/utils/json.d.mts +23 -0
- package/dist/utils/json.d.mts.map +1 -0
- package/dist/utils/json.mjs +2 -0
- package/dist/utils/json.mjs.map +1 -0
- package/dist/utils/moduleResolution.cjs +2 -0
- package/dist/utils/moduleResolution.cjs.map +1 -0
- package/dist/utils/moduleResolution.d.cts +56 -0
- package/dist/utils/moduleResolution.d.cts.map +1 -0
- package/dist/utils/moduleResolution.d.mts +56 -0
- package/dist/utils/moduleResolution.d.mts.map +1 -0
- package/dist/utils/moduleResolution.mjs +2 -0
- package/dist/utils/moduleResolution.mjs.map +1 -0
- package/dist/utils/repository.cjs +2 -0
- package/dist/utils/repository.cjs.map +1 -0
- package/dist/utils/repository.d.cts +21 -0
- package/dist/utils/repository.d.cts.map +1 -0
- package/dist/utils/repository.d.mts +21 -0
- package/dist/utils/repository.d.mts.map +1 -0
- package/dist/utils/repository.mjs +2 -0
- package/dist/utils/repository.mjs.map +1 -0
- package/dist/utils/toolNames.cjs +2 -0
- package/dist/utils/toolNames.cjs.map +1 -0
- package/dist/utils/toolNames.d.cts +25 -0
- package/dist/utils/toolNames.d.cts.map +1 -0
- package/dist/utils/toolNames.d.mts +25 -0
- package/dist/utils/toolNames.d.mts.map +1 -0
- package/dist/utils/toolNames.mjs +2 -0
- package/dist/utils/toolNames.mjs.map +1 -0
- package/package.json +369 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
//#region src/cli/matrixOptions.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Matrix selection shared by the Pi and compatibility parsers.
|
|
4
|
+
*
|
|
5
|
+
* Both frontends pick the same three axes (profile, domains, major mode) out of
|
|
6
|
+
* the same environment variables with the same defaults. They used to hold two
|
|
7
|
+
* copies of that logic, and the copies drifted: the inline `--name=value` forms
|
|
8
|
+
* and the strict value reader existed in the compatibility parser only, so
|
|
9
|
+
* `./pi.sh --profile=x` silently forwarded an unknown flag to Pi. One copy here
|
|
10
|
+
* is what keeps them honest.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* One variable per axis.
|
|
14
|
+
*
|
|
15
|
+
* These used to come in pairs, `DOOM_PI_*` for what the caller selected and
|
|
16
|
+
* `DOOMPI_*` for what the harness resolved and published, with the second
|
|
17
|
+
* outranking the first. A nested run still inherits its launcher's choice under
|
|
18
|
+
* one name, because the launcher projects into the child environment and
|
|
19
|
+
* overwrites the same key. Two names for one value only ever meant two ways to
|
|
20
|
+
* disagree.
|
|
21
|
+
*/
|
|
22
|
+
declare const DOOMPI_PROFILE_ENV = "DOOMPI_PROFILE";
|
|
23
|
+
declare const DOOMPI_DOMAINS_ENV = "DOOMPI_DOMAINS";
|
|
24
|
+
declare const DOOMPI_MAJOR_MODE_ENV = "DOOMPI_MAJOR_MODE";
|
|
25
|
+
declare const DOOMPI_ADDITIONAL_DIRECTORIES_ENV = "DOOMPI_ADDITIONAL_DIRS";
|
|
26
|
+
declare const DOOMPI_PRESET_ENV = "DOOMPI_PRESET";
|
|
27
|
+
/** Removed spelling of the major mode axis, reported rather than honored. */
|
|
28
|
+
declare const REMOVED_DOOMPI_LAYER_ENV = "DOOMPI_LAYER";
|
|
29
|
+
declare const PROFILE_OPTION = "--profile";
|
|
30
|
+
declare const DOMAIN_OPTION = "--domain";
|
|
31
|
+
declare const DOMAINS_OPTION = "--domains";
|
|
32
|
+
/**
|
|
33
|
+
* The major mode flag.
|
|
34
|
+
*
|
|
35
|
+
* Not `--mode`: Pi owns that one for its output mode, and for a value outside
|
|
36
|
+
* `text|json|rpc` it consumes both tokens and ignores them without a
|
|
37
|
+
* diagnostic. A synced `pi --mode dev` would have failed silently.
|
|
38
|
+
*/
|
|
39
|
+
declare const MAJOR_MODE_OPTION = "--major-mode";
|
|
40
|
+
declare const ADD_DIRECTORY_OPTION = "--add-dir";
|
|
41
|
+
declare const REMOVED_LAYER_OPTION = "--layer";
|
|
42
|
+
declare const REMOVED_LAYERS_OPTION = "--layers";
|
|
43
|
+
declare const REMOVED_TARGET_OPTION = "--target";
|
|
44
|
+
declare const DEFAULT_MAJOR_MODE = "copilot";
|
|
45
|
+
declare const DEFAULT_DOMAIN = "default";
|
|
46
|
+
interface OptionMatch {
|
|
47
|
+
value: string;
|
|
48
|
+
/** Index of the last argument consumed, for the caller's loop cursor. */
|
|
49
|
+
nextIndex: number;
|
|
50
|
+
/** True for `--name=value`. Callers that re-emit an option preserve the form. */
|
|
51
|
+
inline: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Reads `--name value` or `--name=value`, returning undefined for anything else.
|
|
55
|
+
*
|
|
56
|
+
* A value starting with `--` is rejected rather than consumed, so
|
|
57
|
+
* `--profile --explain` reports a missing value instead of swallowing the next
|
|
58
|
+
* flag. In compatibility mode this is also what stops the `--` provider
|
|
59
|
+
* delimiter being taken as a matrix value.
|
|
60
|
+
*/
|
|
61
|
+
declare function readOption(args: string[], index: number, name: string): OptionMatch | undefined;
|
|
62
|
+
/** Matches `--name` or `--name=value`, for reporting options that were removed. */
|
|
63
|
+
declare function matchesOption(arg: string, name: string): boolean;
|
|
64
|
+
declare function parseCsv(value: string): string[];
|
|
65
|
+
declare function parseRequiredCsv(value: string, option: string): string[];
|
|
66
|
+
declare function parseMajorMode(value: string, source: string): string;
|
|
67
|
+
declare function parseProfileValue(value: string, source: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Reports any variable left over from the retired `AGENT_HARNESS_*` namespace.
|
|
70
|
+
*
|
|
71
|
+
* Called before anything reads the environment, so a stale export fails the
|
|
72
|
+
* session instead of being quietly outvoted by a default. Both prefixes are
|
|
73
|
+
* built from the constants above rather than written inline, because a
|
|
74
|
+
* search-and-replace over this repository is exactly what retired the old one.
|
|
75
|
+
*/
|
|
76
|
+
declare function assertNoRetiredEnvironment(environment: NodeJS.ProcessEnv): void;
|
|
77
|
+
/**
|
|
78
|
+
* The major mode a nested run inherits from its launcher, or the default.
|
|
79
|
+
*
|
|
80
|
+
* The removed spelling throws rather than being ignored. A stale
|
|
81
|
+
* `export DOOMPI_LAYER=dev` left in a shell profile would otherwise silently
|
|
82
|
+
* select `copilot`, which is the exact confusion the rename removed.
|
|
83
|
+
*/
|
|
84
|
+
declare function resolveInheritedMajorMode(environment: NodeJS.ProcessEnv): string;
|
|
85
|
+
/** The profile a run inherits from its environment, validated once up front. */
|
|
86
|
+
declare function resolveInheritedProfile(environment: NodeJS.ProcessEnv): string | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Domains selected when the caller names none.
|
|
89
|
+
*
|
|
90
|
+
* The only point where the major mode axis influences the domain axis. It lives
|
|
91
|
+
* in one function so a new mode with a domain opinion is a single edit rather
|
|
92
|
+
* than a matching change in both parsers.
|
|
93
|
+
*/
|
|
94
|
+
declare function defaultDomainsForMajorMode(majorMode: string, environment: NodeJS.ProcessEnv): string[];
|
|
95
|
+
/** Directories inherited from the launcher environment. */
|
|
96
|
+
declare function resolveAdditionalDirectories(environment: NodeJS.ProcessEnv, baseDirectory: string): string[];
|
|
97
|
+
//#endregion
|
|
98
|
+
export { ADD_DIRECTORY_OPTION, DEFAULT_DOMAIN, DEFAULT_MAJOR_MODE, DOMAINS_OPTION, DOMAIN_OPTION, DOOMPI_ADDITIONAL_DIRECTORIES_ENV, DOOMPI_DOMAINS_ENV, DOOMPI_MAJOR_MODE_ENV, DOOMPI_PRESET_ENV, DOOMPI_PROFILE_ENV, MAJOR_MODE_OPTION, OptionMatch, PROFILE_OPTION, REMOVED_DOOMPI_LAYER_ENV, REMOVED_LAYERS_OPTION, REMOVED_LAYER_OPTION, REMOVED_TARGET_OPTION, assertNoRetiredEnvironment, defaultDomainsForMajorMode, matchesOption, parseCsv, parseMajorMode, parseProfileValue, parseRequiredCsv, readOption, resolveAdditionalDirectories, resolveInheritedMajorMode, resolveInheritedProfile };
|
|
99
|
+
//# sourceMappingURL=matrixOptions.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixOptions.d.mts","names":[],"sources":["../../src/cli/matrixOptions.ts"],"mappings":";;AAuBA;;;;;AACA;;;;;AACA;;;;;AACA;;;;cAHa,kBAAA;AAAA,cACA,kBAAA;AAAA,cACA,qBAAA;AAAA,cACA,iCAAA;AAAA,cACA,iBAAA;;cAGA,wBAAA;AAAA,cAaA,cAAA;AAAA,cACA,aAAA;AAAA,cACA,cAAA;;AAFb;;;;;AACA;cASa,iBAAA;AAAA,cACA,oBAAA;AAAA,cACA,oBAAA;AAAA,cACA,qBAAA;AAAA,cACA,qBAAA;AAAA,cAEA,kBAAA;AAAA,cACA,cAAA;AAAA,UAMI,WAAA;EACf,KAAA;EAdW;EAgBX,SAAA;;EAEA,MAAA;AAAA;AAjBF;;;;;AACA;;;AADA,iBA4BgB,UAAA,CAAW,IAAA,YAAgB,KAAA,UAAe,IAAA,WAAe,WAAA;;iBAgBzD,aAAA,CAAc,GAAA,UAAa,IAAA;AAAA,iBAI3B,QAAA,CAAS,KAAA;AAAA,iBAOT,gBAAA,CAAiB,KAAA,UAAe,MAAA;AAAA,iBAMhC,cAAA,CAAe,KAAA,UAAe,MAAA;AAAA,iBAO9B,iBAAA,CAAkB,KAAA,UAAe,MAAA;AAjEjD;;;;;AAEA;;;AAFA,iBA+EgB,0BAAA,CAA2B,WAAA,EAAa,MAAA,CAAO,UAAA;;AA5E/D;;;;;AAMA;iBAwFgB,yBAAA,CAA0B,WAAA,EAAa,MAAA,CAAO,UAAA;;iBAU9C,uBAAA,CAAwB,WAAA,EAAa,MAAA,CAAO,UAAA;;;;;;AAlF5D;;iBA+FgB,0BAAA,CAA2B,SAAA,UAAmB,WAAA,EAAa,MAAA,CAAO,UAAA;;iBASlE,4BAAA,CAA6B,WAAA,EAAa,MAAA,CAAO,UAAA,EAAY,aAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"node:path";const t=`DOOMPI_PROFILE`,n=`DOOMPI_DOMAINS`,r=`DOOMPI_MAJOR_MODE`,i=`DOOMPI_ADDITIONAL_DIRS`,a=`DOOMPI_PRESET`,o=`DOOMPI_LAYER`,s=`AGENT_HARNESS_`,c=`DOOMPI_`,l=`--profile`,u=`--domain`,d=`--domains`,f=`--major-mode`,p=`--add-dir`,m=`--layer`,h=`--layers`,g=`--target`,_=`copilot`,v=`default`,y=`marketing`;function b(e,t,n){let r=e[t];if(r===n){let r=e[t+1];if(!r||r.startsWith(`--`))throw Error(`${n} requires a value`);return{value:r,nextIndex:t+1,inline:!1}}let i=`${n}=`;if(!r.startsWith(i))return;let a=r.slice(i.length);if(!a)throw Error(`${n} requires a value`);return{value:a,nextIndex:t,inline:!0}}function x(e,t){return e===t||e.startsWith(`${t}=`)}function S(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function C(e,t){let n=S(e);if(n.length===0)throw Error(`${t} requires a value`);return n}function w(e,t){let n=e.trim();if(!n)throw Error(`${t} requires a value`);if(n.includes(`,`))throw Error(`${t} accepts one major mode name`);return n}function T(e,t){if(e.includes(`,`))throw Error(`${t} accepts one profile name`);if(!e.trim())throw Error(`${t} requires a value`);return e}function E(e){let t=Object.keys(e).filter(e=>e.startsWith(s)).sort();if(t.length===0)return;let n=t.map(e=>`${e} -> ${c}${e.slice(14)}`);throw Error(`The ${s}* environment was replaced by ${c}*. Unset or rename: ${n.join(`, `)}`)}function D(e){if(E(e),e.DOOMPI_LAYER)throw Error(`${o} was replaced by ${r}`);return w(e.DOOMPI_MAJOR_MODE||`copilot`,r)}function O(e){let n=e.DOOMPI_PROFILE||void 0;if(n?.includes(`,`))throw Error(`${t} accepts one profile name`);return n}function k(e,t){let r=t[n];return S(r===void 0?e===y?y:v:r)}function A(t,n){return(t.DOOMPI_ADDITIONAL_DIRS??``).split(e.delimiter).filter(Boolean).map(t=>e.resolve(n,t))}export{p as ADD_DIRECTORY_OPTION,v as DEFAULT_DOMAIN,_ as DEFAULT_MAJOR_MODE,d as DOMAINS_OPTION,u as DOMAIN_OPTION,i as DOOMPI_ADDITIONAL_DIRECTORIES_ENV,n as DOOMPI_DOMAINS_ENV,r as DOOMPI_MAJOR_MODE_ENV,a as DOOMPI_PRESET_ENV,t as DOOMPI_PROFILE_ENV,f as MAJOR_MODE_OPTION,l as PROFILE_OPTION,o as REMOVED_DOOMPI_LAYER_ENV,h as REMOVED_LAYERS_OPTION,m as REMOVED_LAYER_OPTION,g as REMOVED_TARGET_OPTION,E as assertNoRetiredEnvironment,k as defaultDomainsForMajorMode,x as matchesOption,S as parseCsv,w as parseMajorMode,T as parseProfileValue,C as parseRequiredCsv,b as readOption,A as resolveAdditionalDirectories,D as resolveInheritedMajorMode,O as resolveInheritedProfile};
|
|
2
|
+
//# sourceMappingURL=matrixOptions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixOptions.mjs","names":[],"sources":["../../src/cli/matrixOptions.ts"],"sourcesContent":["import path from 'node:path';\n\n/**\n * Matrix selection shared by the Pi and compatibility parsers.\n *\n * Both frontends pick the same three axes (profile, domains, major mode) out of\n * the same environment variables with the same defaults. They used to hold two\n * copies of that logic, and the copies drifted: the inline `--name=value` forms\n * and the strict value reader existed in the compatibility parser only, so\n * `./pi.sh --profile=x` silently forwarded an unknown flag to Pi. One copy here\n * is what keeps them honest.\n */\n\n/**\n * One variable per axis.\n *\n * These used to come in pairs, `DOOM_PI_*` for what the caller selected and\n * `DOOMPI_*` for what the harness resolved and published, with the second\n * outranking the first. A nested run still inherits its launcher's choice under\n * one name, because the launcher projects into the child environment and\n * overwrites the same key. Two names for one value only ever meant two ways to\n * disagree.\n */\nexport const DOOMPI_PROFILE_ENV = 'DOOMPI_PROFILE';\nexport const DOOMPI_DOMAINS_ENV = 'DOOMPI_DOMAINS';\nexport const DOOMPI_MAJOR_MODE_ENV = 'DOOMPI_MAJOR_MODE';\nexport const DOOMPI_ADDITIONAL_DIRECTORIES_ENV = 'DOOMPI_ADDITIONAL_DIRS';\nexport const DOOMPI_PRESET_ENV = 'DOOMPI_PRESET';\n\n/** Removed spelling of the major mode axis, reported rather than honored. */\nexport const REMOVED_DOOMPI_LAYER_ENV = 'DOOMPI_LAYER';\n\n/**\n * The whole retired namespace, reported rather than ignored.\n *\n * A prefix scan rather than a constant per variable: there were 28 of them, and\n * a list maintained by hand is a list that misses one. A stale\n * `export AGENT_HARNESS_MAJOR_MODE=dev` in a shell profile would otherwise\n * silently start the session on `copilot`.\n */\nconst RETIRED_ENV_PREFIX = 'AGENT_HARNESS_';\nconst CURRENT_ENV_PREFIX = 'DOOMPI_';\n\nexport const PROFILE_OPTION = '--profile';\nexport const DOMAIN_OPTION = '--domain';\nexport const DOMAINS_OPTION = '--domains';\n/**\n * The major mode flag.\n *\n * Not `--mode`: Pi owns that one for its output mode, and for a value outside\n * `text|json|rpc` it consumes both tokens and ignores them without a\n * diagnostic. A synced `pi --mode dev` would have failed silently.\n */\nexport const MAJOR_MODE_OPTION = '--major-mode';\nexport const ADD_DIRECTORY_OPTION = '--add-dir';\nexport const REMOVED_LAYER_OPTION = '--layer';\nexport const REMOVED_LAYERS_OPTION = '--layers';\nexport const REMOVED_TARGET_OPTION = '--target';\n\nexport const DEFAULT_MAJOR_MODE = 'copilot';\nexport const DEFAULT_DOMAIN = 'default';\n\nconst MARKETING_MAJOR_MODE = 'marketing';\nconst CSV_DELIMITER = ',';\nconst OPTION_PREFIX = '--';\n\nexport interface OptionMatch {\n value: string;\n /** Index of the last argument consumed, for the caller's loop cursor. */\n nextIndex: number;\n /** True for `--name=value`. Callers that re-emit an option preserve the form. */\n inline: boolean;\n}\n\n/**\n * Reads `--name value` or `--name=value`, returning undefined for anything else.\n *\n * A value starting with `--` is rejected rather than consumed, so\n * `--profile --explain` reports a missing value instead of swallowing the next\n * flag. In compatibility mode this is also what stops the `--` provider\n * delimiter being taken as a matrix value.\n */\nexport function readOption(args: string[], index: number, name: string): OptionMatch | undefined {\n // Callers walk `args` by index, so this is always in range.\n const arg = args[index]!;\n if (arg === name) {\n const value = args[index + 1];\n if (!value || value.startsWith(OPTION_PREFIX)) throw new Error(`${name} requires a value`);\n return { value, nextIndex: index + 1, inline: false };\n }\n const inlinePrefix = `${name}=`;\n if (!arg.startsWith(inlinePrefix)) return undefined;\n const value = arg.slice(inlinePrefix.length);\n if (!value) throw new Error(`${name} requires a value`);\n return { value, nextIndex: index, inline: true };\n}\n\n/** Matches `--name` or `--name=value`, for reporting options that were removed. */\nexport function matchesOption(arg: string, name: string): boolean {\n return arg === name || arg.startsWith(`${name}=`);\n}\n\nexport function parseCsv(value: string): string[] {\n return value\n .split(CSV_DELIMITER)\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\nexport function parseRequiredCsv(value: string, option: string): string[] {\n const values = parseCsv(value);\n if (values.length === 0) throw new Error(`${option} requires a value`);\n return values;\n}\n\nexport function parseMajorMode(value: string, source: string): string {\n const majorMode = value.trim();\n if (!majorMode) throw new Error(`${source} requires a value`);\n if (majorMode.includes(CSV_DELIMITER)) throw new Error(`${source} accepts one major mode name`);\n return majorMode;\n}\n\nexport function parseProfileValue(value: string, source: string): string {\n if (value.includes(CSV_DELIMITER)) throw new Error(`${source} accepts one profile name`);\n if (!value.trim()) throw new Error(`${source} requires a value`);\n return value;\n}\n\n/**\n * Reports any variable left over from the retired `AGENT_HARNESS_*` namespace.\n *\n * Called before anything reads the environment, so a stale export fails the\n * session instead of being quietly outvoted by a default. Both prefixes are\n * built from the constants above rather than written inline, because a\n * search-and-replace over this repository is exactly what retired the old one.\n */\nexport function assertNoRetiredEnvironment(environment: NodeJS.ProcessEnv): void {\n const stale = Object.keys(environment)\n .filter((key) => key.startsWith(RETIRED_ENV_PREFIX))\n .sort();\n if (stale.length === 0) return;\n const replacements = stale.map((key) => `${key} -> ${CURRENT_ENV_PREFIX}${key.slice(RETIRED_ENV_PREFIX.length)}`);\n throw new Error(\n `The ${RETIRED_ENV_PREFIX}* environment was replaced by ${CURRENT_ENV_PREFIX}*. Unset or rename: ${replacements.join(', ')}`,\n );\n}\n\n/**\n * The major mode a nested run inherits from its launcher, or the default.\n *\n * The removed spelling throws rather than being ignored. A stale\n * `export DOOMPI_LAYER=dev` left in a shell profile would otherwise silently\n * select `copilot`, which is the exact confusion the rename removed.\n */\nexport function resolveInheritedMajorMode(environment: NodeJS.ProcessEnv): string {\n assertNoRetiredEnvironment(environment);\n if (environment[REMOVED_DOOMPI_LAYER_ENV]) {\n throw new Error(`${REMOVED_DOOMPI_LAYER_ENV} was replaced by ${DOOMPI_MAJOR_MODE_ENV}`);\n }\n const inherited = environment[DOOMPI_MAJOR_MODE_ENV] || DEFAULT_MAJOR_MODE;\n return parseMajorMode(inherited, DOOMPI_MAJOR_MODE_ENV);\n}\n\n/** The profile a run inherits from its environment, validated once up front. */\nexport function resolveInheritedProfile(environment: NodeJS.ProcessEnv): string | undefined {\n const inherited = environment[DOOMPI_PROFILE_ENV] || undefined;\n if (inherited?.includes(CSV_DELIMITER)) throw new Error(`${DOOMPI_PROFILE_ENV} accepts one profile name`);\n return inherited;\n}\n\n/**\n * Domains selected when the caller names none.\n *\n * The only point where the major mode axis influences the domain axis. It lives\n * in one function so a new mode with a domain opinion is a single edit rather\n * than a matching change in both parsers.\n */\nexport function defaultDomainsForMajorMode(majorMode: string, environment: NodeJS.ProcessEnv): string[] {\n const configured = environment[DOOMPI_DOMAINS_ENV];\n // An explicitly empty variable means no domains, so this tests for the key\n // rather than for a truthy value.\n if (configured !== undefined) return parseCsv(configured);\n return parseCsv(majorMode === MARKETING_MAJOR_MODE ? MARKETING_MAJOR_MODE : DEFAULT_DOMAIN);\n}\n\n/** Directories inherited from the launcher environment. */\nexport function resolveAdditionalDirectories(environment: NodeJS.ProcessEnv, baseDirectory: string): string[] {\n return (environment[DOOMPI_ADDITIONAL_DIRECTORIES_ENV] ?? '')\n .split(path.delimiter)\n .filter(Boolean)\n .map((directory) => path.resolve(baseDirectory, directory));\n}\n"],"mappings":"yBAuBA,MAAa,EAAqB,iBACrB,EAAqB,iBACrB,EAAwB,oBACxB,EAAoC,yBACpC,EAAoB,gBAGpB,EAA2B,eAUlC,EAAqB,iBACrB,EAAqB,UAEd,EAAiB,YACjB,EAAgB,WAChB,EAAiB,YAQjB,EAAoB,eACpB,EAAuB,YACvB,EAAuB,UACvB,EAAwB,WACxB,EAAwB,WAExB,EAAqB,UACrB,EAAiB,UAExB,EAAuB,YAoB7B,SAAgB,EAAW,EAAgB,EAAe,EAAuC,CAE/F,IAAM,EAAM,EAAK,GACjB,GAAI,IAAQ,EAAM,CAChB,IAAM,EAAQ,EAAK,EAAQ,GAC3B,GAAI,CAAC,GAAS,EAAM,WAAW,KAAc,CAAE,MAAU,MAAM,GAAG,EAAK,mBAAmB,CAC1F,MAAO,CAAE,QAAO,UAAW,EAAQ,EAAG,OAAQ,GAAO,CAEvD,IAAM,EAAe,GAAG,EAAK,GAC7B,GAAI,CAAC,EAAI,WAAW,EAAa,CAAE,OACnC,IAAM,EAAQ,EAAI,MAAM,EAAa,OAAO,CAC5C,GAAI,CAAC,EAAO,MAAU,MAAM,GAAG,EAAK,mBAAmB,CACvD,MAAO,CAAE,QAAO,UAAW,EAAO,OAAQ,GAAM,CAIlD,SAAgB,EAAc,EAAa,EAAuB,CAChE,OAAO,IAAQ,GAAQ,EAAI,WAAW,GAAG,EAAK,GAAG,CAGnD,SAAgB,EAAS,EAAyB,CAChD,OAAO,EACJ,MAAM,IAAc,CACpB,IAAK,GAAS,EAAK,MAAM,CAAC,CAC1B,OAAO,QAAQ,CAGpB,SAAgB,EAAiB,EAAe,EAA0B,CACxE,IAAM,EAAS,EAAS,EAAM,CAC9B,GAAI,EAAO,SAAW,EAAG,MAAU,MAAM,GAAG,EAAO,mBAAmB,CACtE,OAAO,EAGT,SAAgB,EAAe,EAAe,EAAwB,CACpE,IAAM,EAAY,EAAM,MAAM,CAC9B,GAAI,CAAC,EAAW,MAAU,MAAM,GAAG,EAAO,mBAAmB,CAC7D,GAAI,EAAU,SAAS,IAAc,CAAE,MAAU,MAAM,GAAG,EAAO,8BAA8B,CAC/F,OAAO,EAGT,SAAgB,EAAkB,EAAe,EAAwB,CACvE,GAAI,EAAM,SAAS,IAAc,CAAE,MAAU,MAAM,GAAG,EAAO,2BAA2B,CACxF,GAAI,CAAC,EAAM,MAAM,CAAE,MAAU,MAAM,GAAG,EAAO,mBAAmB,CAChE,OAAO,EAWT,SAAgB,EAA2B,EAAsC,CAC/E,IAAM,EAAQ,OAAO,KAAK,EAAY,CACnC,OAAQ,GAAQ,EAAI,WAAW,EAAmB,CAAC,CACnD,MAAM,CACT,GAAI,EAAM,SAAW,EAAG,OACxB,IAAM,EAAe,EAAM,IAAK,GAAQ,GAAG,EAAI,MAAM,IAAqB,EAAI,MAAM,GAA0B,GAAG,CACjH,MAAU,MACR,OAAO,EAAmB,gCAAgC,EAAmB,sBAAsB,EAAa,KAAK,KAAK,GAC3H,CAUH,SAAgB,EAA0B,EAAwC,CAEhF,GADA,EAA2B,EAAY,CACnC,EAAA,aACF,MAAU,MAAM,GAAG,EAAyB,mBAAmB,IAAwB,CAGzF,OAAO,EADW,EAAA,mBAAA,UACe,EAAsB,CAIzD,SAAgB,EAAwB,EAAoD,CAC1F,IAAM,EAAY,EAAA,gBAAmC,IAAA,GACrD,GAAI,GAAW,SAAS,IAAc,CAAE,MAAU,MAAM,GAAG,EAAmB,2BAA2B,CACzG,OAAO,EAUT,SAAgB,EAA2B,EAAmB,EAA0C,CACtG,IAAM,EAAa,EAAY,GAI/B,OAAO,EADH,IAAe,IAAA,GACH,IAAc,EAAuB,EAAuB,EAD9B,EAAW,CAK3D,SAAgB,EAA6B,EAAgC,EAAiC,CAC5G,OAAQ,EAAA,wBAAkD,IACvD,MAAM,EAAK,UAAU,CACrB,OAAO,QAAQ,CACf,IAAK,GAAc,EAAK,QAAQ,EAAe,EAAU,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`./matrixOptions.cjs`);let n=require(`node:path`);n=e.__toESM(n,1);const r=`kimi-for-coding`,i=`kimi-for-coding-highspeed`,a=`kimi-k2.6`,o=`default`,s=`kimi`,c=`ollama`,l=`ollama/`,u=`native`,d=`--model`,f=`--mode`,p=`--thinking`,m=`--print`,h=`--approve`,g=`--profiles`,_=`--no-domains`,v=`vibe-lint`,y=`json`,b=`--auto-stop`,x=`--help`,S=`--version`,C=new Map([[`k2p5`,r],[`k2p6`,r],[`k2p7`,r],[`kimi-k2.5`,r],[a,r],[`kimi-k2.7-code`,r],[r,r],[i,i]]);function w(e){if(e===o||e===s||e===c)return e;throw Error(`Unsupported preset: ${e}`)}function T(e,...t){return e.some(e=>t.includes(e)||t.some(t=>e.startsWith(`${t}=`)))}function E(e){for(let t=0;t<e.length;t+=1){if(e[t]===d||e[t]===`-m`){let n=e[t+1];if(n)return{index:t,value:n,inline:!1}}if(e[t]?.startsWith(`${d}=`))return{index:t,value:e[t].slice(`${d}=`.length),inline:!0}}}function D(e,t){let n=E(e);n?n.inline?e[n.index]=`${d}=${t}`:e[n.index+1]=t:e.unshift(d,t)}function O(e,t,n){let i=E(t);if(e===s){let e=i?.value??n.KIMI_CODE_MODEL??r,a=e.includes(`/`)?e.slice(e.indexOf(`/`)+1):e;D(t,`kimi-coding/${C.get(a)??a}`)}if(e===c){let e=i?.value??n.OLLAMA_CLAUDE_MODEL??a,r=e.startsWith(l)?e.slice(7):e;D(t,`${l}${r.includes(`:`)?r:`${r}:cloud`}`)}}function k(e,n){let r=e.some(e=>e===x||e===`-h`),i=e.some(e=>e===S||e===`-v`);if(!(!r&&!i))return{options:{cwd:n,profile:void 0,domains:[],majorMode:t.DEFAULT_MAJOR_MODE,explain:!1,emitMcp:void 0,pluginDirectories:[],additionalDirectories:[],preset:o,outputFormat:u,mute:!1,automation:!1,autoStop:!1,allowProtectedWrites:!1,hooks:!0,mcp:!0,agents:!0,piArgs:[]},help:r,version:i}}function A(e,r=process.env,i=process.cwd()){let a=k(e,i);if(a)return a;let s=t.resolveInheritedProfile(r),c=!1,l=t.resolveInheritedMajorMode(r),d=!1,C=[],E=[],D=[],A=[],j=i,M=w(r.DOOMPI_PRESET??o),N=u,P=!1,F=!1,I=!1,L=!1,R=!1,z=!0,B=!0,V=!0,H=!1,U=!1,W=!1,G;for(let r=0;r<e.length;r+=1){let a=e[r];if(t.matchesOption(a,`--target`))throw Error(`${t.REMOVED_TARGET_OPTION} was replaced by ${t.MAJOR_MODE_OPTION}`);if(t.matchesOption(a,`--layer`))throw Error(`${t.REMOVED_LAYER_OPTION} was replaced by ${t.MAJOR_MODE_OPTION}`);if(t.matchesOption(a,`--layers`))throw Error(`${t.REMOVED_LAYERS_OPTION} was removed; select one major mode with ${t.MAJOR_MODE_OPTION}`);if(t.matchesOption(a,g))throw Error(`${g} was replaced by ${t.DOMAINS_OPTION}`);let o=t.readOption(e,r,t.MAJOR_MODE_OPTION);if(o){if(d)throw Error(`${t.MAJOR_MODE_OPTION} can only be provided once`);l=t.parseMajorMode(o.value,t.MAJOR_MODE_OPTION),d=!0,r=o.nextIndex;continue}let u=t.readOption(e,r,t.PROFILE_OPTION);if(u){if(c)throw Error(`${t.PROFILE_OPTION} can only be provided once`);s=t.parseProfileValue(u.value,t.PROFILE_OPTION),c=!0,r=u.nextIndex;continue}let m=t.readOption(e,r,`--domains`)??t.readOption(e,r,`--domain`);if(m){C.push(...t.parseCsv(m.value)),r=m.nextIndex;continue}let h=t.readOption(e,r,`--emit-mcp`);if(h){G=n.default.resolve(i,h.value),r=h.nextIndex;continue}let T=t.readOption(e,r,`--plugin-dir`);if(T){E.push(T.value),r=T.nextIndex;continue}let O=t.readOption(e,r,t.ADD_DIRECTORY_OPTION);if(O){D.push(O.value),r=O.nextIndex;continue}let k=t.readOption(e,r,`--preset`);if(k){M=w(k.value),r=k.nextIndex;continue}let K=t.readOption(e,r,`--cwd`)??t.readOption(e,r,`--cd`);if(K){j=n.default.resolve(i,K.value),r=K.nextIndex;continue}let q=t.readOption(e,r,`--effort`);if(q){q.inline?A.push(`${p}=${q.value}`):A.push(p,q.value),r=q.nextIndex;continue}let J=t.readOption(e,r,`--output-format`);if(J){let e=J.value;if(e===v)N=v;else{let t=e===`stream-json`?y:e;J.inline?A.push(`${f}=${t}`):A.push(f,t)}r=J.nextIndex;continue}a===_?P=!0:a===`--explain`?W=!0:a===`--automation`?I=!0:a===`--mute`?F=!0:a===b?L=!0:a===`--allow-protected-writes`?R=!0:a===`--hooks`?z=!0:a===`--mcp`?B=!0:a===`--agents`?V=!0:a===`--no-hooks`?z=!1:a===`--no-mcp`?B=!1:a===`--no-agents`?V=!1:a===x||a===`-h`?H=!0:a===S||a===`-v`?U=!0:a!==`--verbose`&&a!==`--dangerously-skip-permissions`&&A.push(a)}if(P&&C.length>0)throw Error(`${_} cannot be combined with ${t.DOMAINS_OPTION}`);if(!P&&C.length===0&&E.length===0&&C.push(...t.defaultDomainsForMajorMode(l,r)),I&&(T(A,m,`-p`)||A.unshift(m),T(A,f)||A.unshift(f,y),T(A,h,`-a`)||A.unshift(h)),L&&(I||N===v||T(A,m,`-p`,f)))throw Error(`${b} only supports interactive Pi mode`);return O(M,A,r),{options:{cwd:j,profile:s,domains:C,majorMode:l,explain:W,emitMcp:G,pluginDirectories:E.map(e=>n.default.resolve(i,e)),additionalDirectories:[...new Set([...t.resolveAdditionalDirectories(r,i),...D.map(e=>n.default.resolve(i,e))])],preset:M,outputFormat:N,mute:F,automation:I,autoStop:L,allowProtectedWrites:R,hooks:z,mcp:B,agents:V,piArgs:A},help:H,version:U}}exports.parseHarnessArgs=A;
|
|
2
|
+
//# sourceMappingURL=options.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.cjs","names":["DEFAULT_MAJOR_MODE","resolveInheritedProfile","resolveInheritedMajorMode","matchesOption","REMOVED_TARGET_OPTION","MAJOR_MODE_OPTION","REMOVED_LAYER_OPTION","REMOVED_LAYERS_OPTION","DOMAINS_OPTION","readOption","parseMajorMode","PROFILE_OPTION","parseProfileValue","parseCsv","path","ADD_DIRECTORY_OPTION","defaultDomainsForMajorMode","resolveAdditionalDirectories"],"sources":["../../src/cli/options.ts"],"sourcesContent":["import path from 'node:path';\nimport type { HarnessOutputFormat, HarnessPreset, ParsedHarnessArgs } from '../interfaces/index.ts';\nimport {\n ADD_DIRECTORY_OPTION,\n DEFAULT_MAJOR_MODE,\n DOMAIN_OPTION,\n DOMAINS_OPTION,\n DOOMPI_PRESET_ENV,\n MAJOR_MODE_OPTION,\n PROFILE_OPTION,\n REMOVED_LAYER_OPTION,\n REMOVED_LAYERS_OPTION,\n REMOVED_TARGET_OPTION,\n defaultDomainsForMajorMode,\n matchesOption,\n parseCsv,\n parseMajorMode,\n parseProfileValue,\n readOption,\n resolveAdditionalDirectories,\n resolveInheritedMajorMode,\n resolveInheritedProfile,\n} from './matrixOptions.ts';\n\nconst KIMI_FOR_CODING = 'kimi-for-coding';\nconst KIMI_FOR_CODING_HIGHSPEED = 'kimi-for-coding-highspeed';\nconst KIMI_K2_6 = 'kimi-k2.6';\nconst DEFAULT_PRESET = 'default';\nconst KIMI_PRESET = 'kimi';\nconst OLLAMA_PRESET = 'ollama';\nconst OLLAMA_PREFIX = 'ollama/';\nconst KIMI_CODING_PREFIX = 'kimi-coding/';\nconst CLOUD_SUFFIX = ':cloud';\nconst NATIVE_FORMAT = 'native';\nconst KIMI_CODE_MODEL_ENV = 'KIMI_CODE_MODEL';\nconst OLLAMA_CLAUDE_MODEL_ENV = 'OLLAMA_CLAUDE_MODEL';\nconst MODEL_OPTION = '--model';\nconst MODEL_SHORT_OPTION = '-m';\nconst MODE_OPTION = '--mode';\nconst THINKING_OPTION = '--thinking';\nconst PRINT_OPTION = '--print';\nconst PRINT_SHORT_OPTION = '-p';\nconst APPROVE_OPTION = '--approve';\nconst APPROVE_SHORT_OPTION = '-a';\nconst PROFILES_OPTION = '--profiles';\nconst NO_DOMAINS_OPTION = '--no-domains';\nconst PRESET_OPTION = '--preset';\nconst EFFORT_OPTION = '--effort';\nconst OUTPUT_FORMAT_OPTION = '--output-format';\nconst MUTE_OPTION = '--mute';\nconst VIBE_LINT_FORMAT = 'vibe-lint';\nconst STREAM_JSON_FORMAT = 'stream-json';\nconst JSON_FORMAT = 'json';\nconst EXPLAIN_OPTION = '--explain';\nconst EMIT_MCP_OPTION = '--emit-mcp';\nconst PLUGIN_DIRECTORY_OPTION = '--plugin-dir';\nconst CWD_OPTION = '--cwd';\nconst CD_OPTION = '--cd';\nconst AUTOMATION_OPTION = '--automation';\nconst AUTO_STOP_OPTION = '--auto-stop';\nconst ALLOW_PROTECTED_WRITES_OPTION = '--allow-protected-writes';\nconst HOOKS_OPTION = '--hooks';\nconst MCP_OPTION = '--mcp';\nconst AGENTS_OPTION = '--agents';\nconst NO_HOOKS_OPTION = '--no-hooks';\nconst NO_MCP_OPTION = '--no-mcp';\nconst NO_AGENTS_OPTION = '--no-agents';\nconst VERBOSE_OPTION = '--verbose';\nconst DANGEROUSLY_SKIP_PERMISSIONS_OPTION = '--dangerously-skip-permissions';\nconst HELP_OPTION = '--help';\nconst HELP_SHORT_OPTION = '-h';\nconst VERSION_OPTION = '--version';\nconst VERSION_SHORT_OPTION = '-v';\n\nconst KIMI_ALIASES = new Map([\n ['k2p5', KIMI_FOR_CODING],\n ['k2p6', KIMI_FOR_CODING],\n ['k2p7', KIMI_FOR_CODING],\n ['kimi-k2.5', KIMI_FOR_CODING],\n [KIMI_K2_6, KIMI_FOR_CODING],\n ['kimi-k2.7-code', KIMI_FOR_CODING],\n [KIMI_FOR_CODING, KIMI_FOR_CODING],\n [KIMI_FOR_CODING_HIGHSPEED, KIMI_FOR_CODING_HIGHSPEED],\n]);\n\nfunction parsePreset(value: string): HarnessPreset {\n if (value === DEFAULT_PRESET || value === KIMI_PRESET || value === OLLAMA_PRESET) return value;\n throw new Error(`Unsupported preset: ${value}`);\n}\n\nfunction hasOption(args: string[], ...names: string[]): boolean {\n return args.some((arg) => names.includes(arg) || names.some((name) => arg.startsWith(`${name}=`)));\n}\n\nfunction modelValue(args: string[]): { index: number; value: string; inline: boolean } | undefined {\n for (let index = 0; index < args.length; index += 1) {\n if (args[index] === MODEL_OPTION || args[index] === MODEL_SHORT_OPTION) {\n const value = args[index + 1];\n if (value) return { index, value, inline: false };\n }\n if (args[index]?.startsWith(`${MODEL_OPTION}=`)) {\n return { index, value: args[index].slice(`${MODEL_OPTION}=`.length), inline: true };\n }\n }\n return undefined;\n}\n\nfunction replaceModel(args: string[], value: string): void {\n const selected = modelValue(args);\n if (!selected) {\n args.unshift(MODEL_OPTION, value);\n } else if (selected.inline) {\n args[selected.index] = `${MODEL_OPTION}=${value}`;\n } else {\n args[selected.index + 1] = value;\n }\n}\n\nfunction normalizeProviderArgs(preset: HarnessPreset, piArgs: string[], environment: NodeJS.ProcessEnv): void {\n const selected = modelValue(piArgs);\n if (preset === KIMI_PRESET) {\n const value = selected?.value ?? environment[KIMI_CODE_MODEL_ENV] ?? KIMI_FOR_CODING;\n const unqualified = value.includes('/') ? value.slice(value.indexOf('/') + 1) : value;\n replaceModel(piArgs, `${KIMI_CODING_PREFIX}${KIMI_ALIASES.get(unqualified) ?? unqualified}`);\n }\n if (preset === OLLAMA_PRESET) {\n const value = selected?.value ?? environment[OLLAMA_CLAUDE_MODEL_ENV] ?? KIMI_K2_6;\n const unqualified = value.startsWith(OLLAMA_PREFIX) ? value.slice(OLLAMA_PREFIX.length) : value;\n replaceModel(\n piArgs,\n `${OLLAMA_PREFIX}${unqualified.includes(':') ? unqualified : `${unqualified}${CLOUD_SUFFIX}`}`,\n );\n }\n}\n\n/**\n * Answers `--help` and `--version` without reading the environment.\n *\n * The caller only looks at `help` and `version` for these, and never launches,\n * so the options carry defaults rather than a resolved matrix. This exists so a\n * stale export cannot break the one command that explains how to fix it.\n */\nfunction parseInformationalArgs(args: string[], currentDirectory: string): ParsedHarnessArgs | undefined {\n const help = args.some((arg) => arg === HELP_OPTION || arg === HELP_SHORT_OPTION);\n const version = args.some((arg) => arg === VERSION_OPTION || arg === VERSION_SHORT_OPTION);\n if (!help && !version) return undefined;\n return {\n options: {\n cwd: currentDirectory,\n profile: undefined,\n domains: [],\n majorMode: DEFAULT_MAJOR_MODE,\n explain: false,\n emitMcp: undefined,\n pluginDirectories: [],\n additionalDirectories: [],\n preset: DEFAULT_PRESET,\n outputFormat: NATIVE_FORMAT,\n mute: false,\n automation: false,\n autoStop: false,\n allowProtectedWrites: false,\n hooks: true,\n mcp: true,\n agents: true,\n piArgs: [],\n },\n help,\n version,\n };\n}\n\nexport function parseHarnessArgs(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n): ParsedHarnessArgs {\n const informational = parseInformationalArgs(args, currentDirectory);\n if (informational) return informational;\n\n let profile = resolveInheritedProfile(environment);\n let profileProvided = false;\n let majorMode = resolveInheritedMajorMode(environment);\n let majorModeProvided = false;\n const domains: string[] = [];\n // Directory options are collected verbatim and resolved once after the loop,\n // so a relative path means the same thing regardless of where --cwd appears\n // in the argument list.\n const pluginDirectoryValues: string[] = [];\n const additionalDirectoryValues: string[] = [];\n const piArgs: string[] = [];\n let cwd = currentDirectory;\n let preset = parsePreset(environment[DOOMPI_PRESET_ENV] ?? DEFAULT_PRESET);\n let outputFormat: HarnessOutputFormat = NATIVE_FORMAT;\n let domainsDisabled = false;\n let mute = false;\n let automation = false;\n let autoStop = false;\n let allowProtectedWrites = false;\n let hooks = true;\n let mcp = true;\n let agents = true;\n let help = false;\n let version = false;\n let explain = false;\n let emitMcp: string | undefined;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index]!;\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 if (matchesOption(arg, PROFILES_OPTION)) {\n throw new Error(`${PROFILES_OPTION} was replaced by ${DOMAINS_OPTION}`);\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(...parseCsv(domainMatch.value));\n index = domainMatch.nextIndex;\n continue;\n }\n\n const emitMcpMatch = readOption(args, index, EMIT_MCP_OPTION);\n if (emitMcpMatch) {\n emitMcp = path.resolve(currentDirectory, emitMcpMatch.value);\n index = emitMcpMatch.nextIndex;\n continue;\n }\n\n const pluginDirectoryMatch = readOption(args, index, PLUGIN_DIRECTORY_OPTION);\n if (pluginDirectoryMatch) {\n pluginDirectoryValues.push(pluginDirectoryMatch.value);\n index = pluginDirectoryMatch.nextIndex;\n continue;\n }\n\n const addDirectoryMatch = readOption(args, index, ADD_DIRECTORY_OPTION);\n if (addDirectoryMatch) {\n additionalDirectoryValues.push(addDirectoryMatch.value);\n index = addDirectoryMatch.nextIndex;\n continue;\n }\n\n const presetMatch = readOption(args, index, PRESET_OPTION);\n if (presetMatch) {\n preset = parsePreset(presetMatch.value);\n index = presetMatch.nextIndex;\n continue;\n }\n\n const cwdMatch = readOption(args, index, CWD_OPTION) ?? readOption(args, index, CD_OPTION);\n if (cwdMatch) {\n cwd = path.resolve(currentDirectory, cwdMatch.value);\n index = cwdMatch.nextIndex;\n continue;\n }\n\n const effortMatch = readOption(args, index, EFFORT_OPTION);\n if (effortMatch) {\n if (effortMatch.inline) piArgs.push(`${THINKING_OPTION}=${effortMatch.value}`);\n else piArgs.push(THINKING_OPTION, effortMatch.value);\n index = effortMatch.nextIndex;\n continue;\n }\n\n const outputFormatMatch = readOption(args, index, OUTPUT_FORMAT_OPTION);\n if (outputFormatMatch) {\n const requested = outputFormatMatch.value;\n if (requested === VIBE_LINT_FORMAT) {\n outputFormat = VIBE_LINT_FORMAT;\n } else {\n const mode = requested === STREAM_JSON_FORMAT ? JSON_FORMAT : requested;\n if (outputFormatMatch.inline) piArgs.push(`${MODE_OPTION}=${mode}`);\n else piArgs.push(MODE_OPTION, mode);\n }\n index = outputFormatMatch.nextIndex;\n continue;\n }\n\n if (arg === NO_DOMAINS_OPTION) domainsDisabled = true;\n else if (arg === EXPLAIN_OPTION) explain = true;\n else if (arg === AUTOMATION_OPTION) automation = true;\n else if (arg === MUTE_OPTION) mute = true;\n else if (arg === AUTO_STOP_OPTION) autoStop = true;\n else if (arg === ALLOW_PROTECTED_WRITES_OPTION) allowProtectedWrites = true;\n else if (arg === HOOKS_OPTION) hooks = true;\n else if (arg === MCP_OPTION) mcp = true;\n else if (arg === AGENTS_OPTION) agents = true;\n else if (arg === NO_HOOKS_OPTION) hooks = false;\n else if (arg === NO_MCP_OPTION) mcp = false;\n else if (arg === NO_AGENTS_OPTION) agents = false;\n else if (arg === HELP_OPTION || arg === HELP_SHORT_OPTION) help = true;\n else if (arg === VERSION_OPTION || arg === VERSION_SHORT_OPTION) version = true;\n // Accepted for Claude Code compatibility and deliberately not forwarded.\n else if (arg !== VERBOSE_OPTION && arg !== DANGEROUSLY_SKIP_PERMISSIONS_OPTION) piArgs.push(arg);\n }\n\n if (domainsDisabled && domains.length > 0) {\n throw new Error(`${NO_DOMAINS_OPTION} cannot be combined with ${DOMAINS_OPTION}`);\n }\n if (!domainsDisabled && domains.length === 0 && pluginDirectoryValues.length === 0) {\n domains.push(...defaultDomainsForMajorMode(majorMode, environment));\n }\n if (automation) {\n if (!hasOption(piArgs, PRINT_OPTION, PRINT_SHORT_OPTION)) piArgs.unshift(PRINT_OPTION);\n if (!hasOption(piArgs, MODE_OPTION)) piArgs.unshift(MODE_OPTION, JSON_FORMAT);\n if (!hasOption(piArgs, APPROVE_OPTION, APPROVE_SHORT_OPTION)) piArgs.unshift(APPROVE_OPTION);\n }\n if (\n autoStop &&\n (automation ||\n outputFormat === VIBE_LINT_FORMAT ||\n hasOption(piArgs, PRINT_OPTION, PRINT_SHORT_OPTION, MODE_OPTION))\n ) {\n throw new Error(`${AUTO_STOP_OPTION} only supports interactive Pi mode`);\n }\n normalizeProviderArgs(preset, piArgs, environment);\n\n return {\n options: {\n cwd,\n profile,\n domains,\n majorMode,\n explain,\n emitMcp,\n pluginDirectories: pluginDirectoryValues.map((value) => path.resolve(currentDirectory, value)),\n additionalDirectories: [\n ...new Set([\n ...resolveAdditionalDirectories(environment, currentDirectory),\n ...additionalDirectoryValues.map((value) => path.resolve(currentDirectory, value)),\n ]),\n ],\n preset,\n outputFormat,\n mute,\n automation,\n autoStop,\n allowProtectedWrites,\n hooks,\n mcp,\n agents,\n piArgs,\n },\n help,\n version,\n };\n}\n"],"mappings":"qMAwBA,MAAM,EAAkB,kBAClB,EAA4B,4BAC5B,EAAY,YACZ,EAAiB,UACjB,EAAc,OACd,EAAgB,SAChB,EAAgB,UAGhB,EAAgB,SAGhB,EAAe,UAEf,EAAc,SACd,EAAkB,aAClB,EAAe,UAEf,EAAiB,YAEjB,EAAkB,aAClB,EAAoB,eAKpB,EAAmB,YAEnB,EAAc,OAOd,EAAmB,cAUnB,EAAc,SAEd,EAAiB,YAGjB,EAAe,IAAI,IAAI,CAC3B,CAAC,OAAQ,EAAgB,CACzB,CAAC,OAAQ,EAAgB,CACzB,CAAC,OAAQ,EAAgB,CACzB,CAAC,YAAa,EAAgB,CAC9B,CAAC,EAAW,EAAgB,CAC5B,CAAC,iBAAkB,EAAgB,CACnC,CAAC,EAAiB,EAAgB,CAClC,CAAC,EAA2B,EAA0B,CACvD,CAAC,CAEF,SAAS,EAAY,EAA8B,CACjD,GAAI,IAAU,GAAkB,IAAU,GAAe,IAAU,EAAe,OAAO,EACzF,MAAU,MAAM,uBAAuB,IAAQ,CAGjD,SAAS,EAAU,EAAgB,GAAG,EAA0B,CAC9D,OAAO,EAAK,KAAM,GAAQ,EAAM,SAAS,EAAI,EAAI,EAAM,KAAM,GAAS,EAAI,WAAW,GAAG,EAAK,GAAG,CAAC,CAAC,CAGpG,SAAS,EAAW,EAA+E,CACjG,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAK,OAAQ,GAAS,EAAG,CACnD,GAAI,EAAK,KAAW,GAAgB,EAAK,KAAW,KAAoB,CACtE,IAAM,EAAQ,EAAK,EAAQ,GAC3B,GAAI,EAAO,MAAO,CAAE,QAAO,QAAO,OAAQ,GAAO,CAEnD,GAAI,EAAK,IAAQ,WAAW,GAAG,EAAa,GAAG,CAC7C,MAAO,CAAE,QAAO,MAAO,EAAK,GAAO,MAAM,GAAG,EAAa,GAAG,OAAO,CAAE,OAAQ,GAAM,EAMzF,SAAS,EAAa,EAAgB,EAAqB,CACzD,IAAM,EAAW,EAAW,EAAK,CAC5B,EAEM,EAAS,OAClB,EAAK,EAAS,OAAS,GAAG,EAAa,GAAG,IAE1C,EAAK,EAAS,MAAQ,GAAK,EAJ3B,EAAK,QAAQ,EAAc,EAAM,CAQrC,SAAS,EAAsB,EAAuB,EAAkB,EAAsC,CAC5G,IAAM,EAAW,EAAW,EAAO,CACnC,GAAI,IAAW,EAAa,CAC1B,IAAM,EAAQ,GAAU,OAAS,EAAY,iBAAwB,EAC/D,EAAc,EAAM,SAAS,IAAI,CAAG,EAAM,MAAM,EAAM,QAAQ,IAAI,CAAG,EAAE,CAAG,EAChF,EAAa,EAAQ,eAAwB,EAAa,IAAI,EAAY,EAAI,IAAc,CAE9F,GAAI,IAAW,EAAe,CAC5B,IAAM,EAAQ,GAAU,OAAS,EAAY,qBAA4B,EACnE,EAAc,EAAM,WAAW,EAAc,CAAG,EAAM,MAAM,EAAqB,CAAG,EAC1F,EACE,EACA,GAAG,IAAgB,EAAY,SAAS,IAAI,CAAG,EAAc,GAAG,YACjE,EAWL,SAAS,EAAuB,EAAgB,EAAyD,CACvG,IAAM,EAAO,EAAK,KAAM,GAAQ,IAAQ,GAAe,IAAQ,KAAkB,CAC3E,EAAU,EAAK,KAAM,GAAQ,IAAQ,GAAkB,IAAQ,KAAqB,CACtF,MAAC,GAAQ,CAAC,GACd,MAAO,CACL,QAAS,CACP,IAAK,EACL,QAAS,IAAA,GACT,QAAS,EAAE,CACX,UAAWA,EAAAA,mBACX,QAAS,GACT,QAAS,IAAA,GACT,kBAAmB,EAAE,CACrB,sBAAuB,EAAE,CACzB,OAAQ,EACR,aAAc,EACd,KAAM,GACN,WAAY,GACZ,SAAU,GACV,qBAAsB,GACtB,MAAO,GACP,IAAK,GACL,OAAQ,GACR,OAAQ,EAAE,CACX,CACD,OACA,UACD,CAGH,SAAgB,EACd,EACA,EAAiC,QAAQ,IACzC,EAAmB,QAAQ,KAAK,CACb,CACnB,IAAM,EAAgB,EAAuB,EAAM,EAAiB,CACpE,GAAI,EAAe,OAAO,EAE1B,IAAI,EAAUC,EAAAA,wBAAwB,EAAY,CAC9C,EAAkB,GAClB,EAAYC,EAAAA,0BAA0B,EAAY,CAClD,EAAoB,GAClB,EAAoB,EAAE,CAItB,EAAkC,EAAE,CACpC,EAAsC,EAAE,CACxC,EAAmB,EAAE,CACvB,EAAM,EACN,EAAS,EAAY,EAAA,eAAkC,EAAe,CACtE,EAAoC,EACpC,EAAkB,GAClB,EAAO,GACP,EAAa,GACb,EAAW,GACX,EAAuB,GACvB,EAAQ,GACR,EAAM,GACN,EAAS,GACT,EAAO,GACP,EAAU,GACV,EAAU,GACV,EAEJ,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAK,OAAQ,GAAS,EAAG,CACnD,IAAM,EAAM,EAAK,GAEjB,GAAIC,EAAAA,cAAc,EAAA,WAA2B,CAC3C,MAAU,MAAM,GAAGC,EAAAA,sBAAsB,mBAAmBC,EAAAA,oBAAoB,CAElF,GAAIF,EAAAA,cAAc,EAAA,UAA0B,CAC1C,MAAU,MAAM,GAAGG,EAAAA,qBAAqB,mBAAmBD,EAAAA,oBAAoB,CAEjF,GAAIF,EAAAA,cAAc,EAAA,WAA2B,CAC3C,MAAU,MAAM,GAAGI,EAAAA,sBAAsB,2CAA2CF,EAAAA,oBAAoB,CAE1G,GAAIF,EAAAA,cAAc,EAAK,EAAgB,CACrC,MAAU,MAAM,GAAG,EAAgB,mBAAmBK,EAAAA,iBAAiB,CAGzE,IAAM,EAAiBC,EAAAA,WAAW,EAAM,EAAOJ,EAAAA,kBAAkB,CACjE,GAAI,EAAgB,CAClB,GAAI,EAAmB,MAAU,MAAM,GAAGA,EAAAA,kBAAkB,4BAA4B,CACxF,EAAYK,EAAAA,eAAe,EAAe,MAAOL,EAAAA,kBAAkB,CACnE,EAAoB,GACpB,EAAQ,EAAe,UACvB,SAGF,IAAM,EAAeI,EAAAA,WAAW,EAAM,EAAOE,EAAAA,eAAe,CAC5D,GAAI,EAAc,CAChB,GAAI,EAAiB,MAAU,MAAM,GAAGA,EAAAA,eAAe,4BAA4B,CACnF,EAAUC,EAAAA,kBAAkB,EAAa,MAAOD,EAAAA,eAAe,CAC/D,EAAkB,GAClB,EAAQ,EAAa,UACrB,SAGF,IAAM,EAAcF,EAAAA,WAAW,EAAM,EAAA,YAAsB,EAAIA,EAAAA,WAAW,EAAM,EAAA,WAAqB,CACrG,GAAI,EAAa,CACf,EAAQ,KAAK,GAAGI,EAAAA,SAAS,EAAY,MAAM,CAAC,CAC5C,EAAQ,EAAY,UACpB,SAGF,IAAM,EAAeJ,EAAAA,WAAW,EAAM,EAAO,aAAgB,CAC7D,GAAI,EAAc,CAChB,EAAUK,EAAAA,QAAK,QAAQ,EAAkB,EAAa,MAAM,CAC5D,EAAQ,EAAa,UACrB,SAGF,IAAM,EAAuBL,EAAAA,WAAW,EAAM,EAAO,eAAwB,CAC7E,GAAI,EAAsB,CACxB,EAAsB,KAAK,EAAqB,MAAM,CACtD,EAAQ,EAAqB,UAC7B,SAGF,IAAM,EAAoBA,EAAAA,WAAW,EAAM,EAAOM,EAAAA,qBAAqB,CACvE,GAAI,EAAmB,CACrB,EAA0B,KAAK,EAAkB,MAAM,CACvD,EAAQ,EAAkB,UAC1B,SAGF,IAAM,EAAcN,EAAAA,WAAW,EAAM,EAAO,WAAc,CAC1D,GAAI,EAAa,CACf,EAAS,EAAY,EAAY,MAAM,CACvC,EAAQ,EAAY,UACpB,SAGF,IAAM,EAAWA,EAAAA,WAAW,EAAM,EAAO,QAAW,EAAIA,EAAAA,WAAW,EAAM,EAAO,OAAU,CAC1F,GAAI,EAAU,CACZ,EAAMK,EAAAA,QAAK,QAAQ,EAAkB,EAAS,MAAM,CACpD,EAAQ,EAAS,UACjB,SAGF,IAAM,EAAcL,EAAAA,WAAW,EAAM,EAAO,WAAc,CAC1D,GAAI,EAAa,CACX,EAAY,OAAQ,EAAO,KAAK,GAAG,EAAgB,GAAG,EAAY,QAAQ,CACzE,EAAO,KAAK,EAAiB,EAAY,MAAM,CACpD,EAAQ,EAAY,UACpB,SAGF,IAAM,EAAoBA,EAAAA,WAAW,EAAM,EAAO,kBAAqB,CACvE,GAAI,EAAmB,CACrB,IAAM,EAAY,EAAkB,MACpC,GAAI,IAAc,EAChB,EAAe,MACV,CACL,IAAM,EAAO,IAAc,cAAqB,EAAc,EAC1D,EAAkB,OAAQ,EAAO,KAAK,GAAG,EAAY,GAAG,IAAO,CAC9D,EAAO,KAAK,EAAa,EAAK,CAErC,EAAQ,EAAkB,UAC1B,SAGE,IAAQ,EAAmB,EAAkB,GACxC,IAAQ,YAAgB,EAAU,GAClC,IAAQ,eAAmB,EAAa,GACxC,IAAQ,SAAa,EAAO,GAC5B,IAAQ,EAAkB,EAAW,GACrC,IAAQ,2BAA+B,EAAuB,GAC9D,IAAQ,UAAc,EAAQ,GAC9B,IAAQ,QAAY,EAAM,GAC1B,IAAQ,WAAe,EAAS,GAChC,IAAQ,aAAiB,EAAQ,GACjC,IAAQ,WAAe,EAAM,GAC7B,IAAQ,cAAkB,EAAS,GACnC,IAAQ,GAAe,IAAQ,KAAmB,EAAO,GACzD,IAAQ,GAAkB,IAAQ,KAAsB,EAAU,GAElE,IAAQ,aAAkB,IAAQ,kCAAqC,EAAO,KAAK,EAAI,CAGlG,GAAI,GAAmB,EAAQ,OAAS,EACtC,MAAU,MAAM,GAAG,EAAkB,2BAA2BD,EAAAA,iBAAiB,CAUnF,GARI,CAAC,GAAmB,EAAQ,SAAW,GAAK,EAAsB,SAAW,GAC/E,EAAQ,KAAK,GAAGQ,EAAAA,2BAA2B,EAAW,EAAY,CAAC,CAEjE,IACG,EAAU,EAAQ,EAAc,KAAmB,EAAE,EAAO,QAAQ,EAAa,CACjF,EAAU,EAAQ,EAAY,EAAE,EAAO,QAAQ,EAAa,EAAY,CACxE,EAAU,EAAQ,EAAgB,KAAqB,EAAE,EAAO,QAAQ,EAAe,EAG5F,IACC,GACC,IAAiB,GACjB,EAAU,EAAQ,EAAc,KAAoB,EAAY,EAElE,MAAU,MAAM,GAAG,EAAiB,oCAAoC,CAI1E,OAFA,EAAsB,EAAQ,EAAQ,EAAY,CAE3C,CACL,QAAS,CACP,MACA,UACA,UACA,YACA,UACA,UACA,kBAAmB,EAAsB,IAAK,GAAUF,EAAAA,QAAK,QAAQ,EAAkB,EAAM,CAAC,CAC9F,sBAAuB,CACrB,GAAG,IAAI,IAAI,CACT,GAAGG,EAAAA,6BAA6B,EAAa,EAAiB,CAC9D,GAAG,EAA0B,IAAK,GAAUH,EAAAA,QAAK,QAAQ,EAAkB,EAAM,CAAC,CACnF,CAAC,CACH,CACD,SACA,eACA,OACA,aACA,WACA,uBACA,QACA,MACA,SACA,SACD,CACD,OACA,UACD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ParsedHarnessArgs } from "../interfaces/harness.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/cli/options.d.ts
|
|
4
|
+
declare function parseHarnessArgs(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string): ParsedHarnessArgs;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { parseHarnessArgs };
|
|
7
|
+
//# sourceMappingURL=options.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.cts","names":[],"sources":["../../src/cli/options.ts"],"mappings":";;;iBA4KgB,gBAAA,CACd,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,YACC,iBAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ParsedHarnessArgs } from "../interfaces/harness.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/cli/options.d.ts
|
|
4
|
+
declare function parseHarnessArgs(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string): ParsedHarnessArgs;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { parseHarnessArgs };
|
|
7
|
+
//# sourceMappingURL=options.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.mts","names":[],"sources":["../../src/cli/options.ts"],"mappings":";;;iBA4KgB,gBAAA,CACd,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,YACC,iBAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ADD_DIRECTORY_OPTION as e,DEFAULT_MAJOR_MODE as t,DOMAINS_OPTION as n,MAJOR_MODE_OPTION as r,PROFILE_OPTION as i,REMOVED_LAYERS_OPTION as ee,REMOVED_LAYER_OPTION as te,REMOVED_TARGET_OPTION as ne,defaultDomainsForMajorMode as a,matchesOption as o,parseCsv as re,parseMajorMode as ie,parseProfileValue as ae,readOption as s,resolveAdditionalDirectories as c,resolveInheritedMajorMode as l,resolveInheritedProfile as u}from"./matrixOptions.mjs";import d from"node:path";const f=`kimi-for-coding`,p=`kimi-for-coding-highspeed`,m=`kimi-k2.6`,h=`default`,g=`kimi`,_=`ollama`,v=`ollama/`,y=`native`,b=`--model`,x=`--mode`,S=`--thinking`,C=`--print`,w=`--approve`,T=`--profiles`,E=`--no-domains`,D=`vibe-lint`,O=`json`,k=`--auto-stop`,A=`--help`,j=`--version`,M=new Map([[`k2p5`,f],[`k2p6`,f],[`k2p7`,f],[`kimi-k2.5`,f],[m,f],[`kimi-k2.7-code`,f],[f,f],[p,p]]);function N(e){if(e===h||e===g||e===_)return e;throw Error(`Unsupported preset: ${e}`)}function P(e,...t){return e.some(e=>t.includes(e)||t.some(t=>e.startsWith(`${t}=`)))}function F(e){for(let t=0;t<e.length;t+=1){if(e[t]===b||e[t]===`-m`){let n=e[t+1];if(n)return{index:t,value:n,inline:!1}}if(e[t]?.startsWith(`${b}=`))return{index:t,value:e[t].slice(`${b}=`.length),inline:!0}}}function I(e,t){let n=F(e);n?n.inline?e[n.index]=`${b}=${t}`:e[n.index+1]=t:e.unshift(b,t)}function L(e,t,n){let r=F(t);if(e===g){let e=r?.value??n.KIMI_CODE_MODEL??f,i=e.includes(`/`)?e.slice(e.indexOf(`/`)+1):e;I(t,`kimi-coding/${M.get(i)??i}`)}if(e===_){let e=r?.value??n.OLLAMA_CLAUDE_MODEL??m,i=e.startsWith(v)?e.slice(7):e;I(t,`${v}${i.includes(`:`)?i:`${i}:cloud`}`)}}function oe(e,n){let r=e.some(e=>e===A||e===`-h`),i=e.some(e=>e===j||e===`-v`);if(!(!r&&!i))return{options:{cwd:n,profile:void 0,domains:[],majorMode:t,explain:!1,emitMcp:void 0,pluginDirectories:[],additionalDirectories:[],preset:h,outputFormat:y,mute:!1,automation:!1,autoStop:!1,allowProtectedWrites:!1,hooks:!0,mcp:!0,agents:!0,piArgs:[]},help:r,version:i}}function R(t,f=process.env,p=process.cwd()){let m=oe(t,p);if(m)return m;let g=u(f),_=!1,v=l(f),b=!1,M=[],F=[],I=[],R=[],z=p,B=N(f.DOOMPI_PRESET??h),V=y,H=!1,U=!1,W=!1,G=!1,K=!1,q=!0,J=!0,Y=!0,X=!1,Z=!1,Q=!1,$;for(let a=0;a<t.length;a+=1){let c=t[a];if(o(c,`--target`))throw Error(`${ne} was replaced by ${r}`);if(o(c,`--layer`))throw Error(`${te} was replaced by ${r}`);if(o(c,`--layers`))throw Error(`${ee} was removed; select one major mode with ${r}`);if(o(c,T))throw Error(`${T} was replaced by ${n}`);let l=s(t,a,r);if(l){if(b)throw Error(`${r} can only be provided once`);v=ie(l.value,r),b=!0,a=l.nextIndex;continue}let u=s(t,a,i);if(u){if(_)throw Error(`${i} can only be provided once`);g=ae(u.value,i),_=!0,a=u.nextIndex;continue}let f=s(t,a,`--domains`)??s(t,a,`--domain`);if(f){M.push(...re(f.value)),a=f.nextIndex;continue}let m=s(t,a,`--emit-mcp`);if(m){$=d.resolve(p,m.value),a=m.nextIndex;continue}let h=s(t,a,`--plugin-dir`);if(h){F.push(h.value),a=h.nextIndex;continue}let y=s(t,a,e);if(y){I.push(y.value),a=y.nextIndex;continue}let C=s(t,a,`--preset`);if(C){B=N(C.value),a=C.nextIndex;continue}let w=s(t,a,`--cwd`)??s(t,a,`--cd`);if(w){z=d.resolve(p,w.value),a=w.nextIndex;continue}let P=s(t,a,`--effort`);if(P){P.inline?R.push(`${S}=${P.value}`):R.push(S,P.value),a=P.nextIndex;continue}let L=s(t,a,`--output-format`);if(L){let e=L.value;if(e===D)V=D;else{let t=e===`stream-json`?O:e;L.inline?R.push(`${x}=${t}`):R.push(x,t)}a=L.nextIndex;continue}c===E?H=!0:c===`--explain`?Q=!0:c===`--automation`?W=!0:c===`--mute`?U=!0:c===k?G=!0:c===`--allow-protected-writes`?K=!0:c===`--hooks`?q=!0:c===`--mcp`?J=!0:c===`--agents`?Y=!0:c===`--no-hooks`?q=!1:c===`--no-mcp`?J=!1:c===`--no-agents`?Y=!1:c===A||c===`-h`?X=!0:c===j||c===`-v`?Z=!0:c!==`--verbose`&&c!==`--dangerously-skip-permissions`&&R.push(c)}if(H&&M.length>0)throw Error(`${E} cannot be combined with ${n}`);if(!H&&M.length===0&&F.length===0&&M.push(...a(v,f)),W&&(P(R,C,`-p`)||R.unshift(C),P(R,x)||R.unshift(x,O),P(R,w,`-a`)||R.unshift(w)),G&&(W||V===D||P(R,C,`-p`,x)))throw Error(`${k} only supports interactive Pi mode`);return L(B,R,f),{options:{cwd:z,profile:g,domains:M,majorMode:v,explain:Q,emitMcp:$,pluginDirectories:F.map(e=>d.resolve(p,e)),additionalDirectories:[...new Set([...c(f,p),...I.map(e=>d.resolve(p,e))])],preset:B,outputFormat:V,mute:U,automation:W,autoStop:G,allowProtectedWrites:K,hooks:q,mcp:J,agents:Y,piArgs:R},help:X,version:Z}}export{R as parseHarnessArgs};
|
|
2
|
+
//# sourceMappingURL=options.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.mjs","names":[],"sources":["../../src/cli/options.ts"],"sourcesContent":["import path from 'node:path';\nimport type { HarnessOutputFormat, HarnessPreset, ParsedHarnessArgs } from '../interfaces/index.ts';\nimport {\n ADD_DIRECTORY_OPTION,\n DEFAULT_MAJOR_MODE,\n DOMAIN_OPTION,\n DOMAINS_OPTION,\n DOOMPI_PRESET_ENV,\n MAJOR_MODE_OPTION,\n PROFILE_OPTION,\n REMOVED_LAYER_OPTION,\n REMOVED_LAYERS_OPTION,\n REMOVED_TARGET_OPTION,\n defaultDomainsForMajorMode,\n matchesOption,\n parseCsv,\n parseMajorMode,\n parseProfileValue,\n readOption,\n resolveAdditionalDirectories,\n resolveInheritedMajorMode,\n resolveInheritedProfile,\n} from './matrixOptions.ts';\n\nconst KIMI_FOR_CODING = 'kimi-for-coding';\nconst KIMI_FOR_CODING_HIGHSPEED = 'kimi-for-coding-highspeed';\nconst KIMI_K2_6 = 'kimi-k2.6';\nconst DEFAULT_PRESET = 'default';\nconst KIMI_PRESET = 'kimi';\nconst OLLAMA_PRESET = 'ollama';\nconst OLLAMA_PREFIX = 'ollama/';\nconst KIMI_CODING_PREFIX = 'kimi-coding/';\nconst CLOUD_SUFFIX = ':cloud';\nconst NATIVE_FORMAT = 'native';\nconst KIMI_CODE_MODEL_ENV = 'KIMI_CODE_MODEL';\nconst OLLAMA_CLAUDE_MODEL_ENV = 'OLLAMA_CLAUDE_MODEL';\nconst MODEL_OPTION = '--model';\nconst MODEL_SHORT_OPTION = '-m';\nconst MODE_OPTION = '--mode';\nconst THINKING_OPTION = '--thinking';\nconst PRINT_OPTION = '--print';\nconst PRINT_SHORT_OPTION = '-p';\nconst APPROVE_OPTION = '--approve';\nconst APPROVE_SHORT_OPTION = '-a';\nconst PROFILES_OPTION = '--profiles';\nconst NO_DOMAINS_OPTION = '--no-domains';\nconst PRESET_OPTION = '--preset';\nconst EFFORT_OPTION = '--effort';\nconst OUTPUT_FORMAT_OPTION = '--output-format';\nconst MUTE_OPTION = '--mute';\nconst VIBE_LINT_FORMAT = 'vibe-lint';\nconst STREAM_JSON_FORMAT = 'stream-json';\nconst JSON_FORMAT = 'json';\nconst EXPLAIN_OPTION = '--explain';\nconst EMIT_MCP_OPTION = '--emit-mcp';\nconst PLUGIN_DIRECTORY_OPTION = '--plugin-dir';\nconst CWD_OPTION = '--cwd';\nconst CD_OPTION = '--cd';\nconst AUTOMATION_OPTION = '--automation';\nconst AUTO_STOP_OPTION = '--auto-stop';\nconst ALLOW_PROTECTED_WRITES_OPTION = '--allow-protected-writes';\nconst HOOKS_OPTION = '--hooks';\nconst MCP_OPTION = '--mcp';\nconst AGENTS_OPTION = '--agents';\nconst NO_HOOKS_OPTION = '--no-hooks';\nconst NO_MCP_OPTION = '--no-mcp';\nconst NO_AGENTS_OPTION = '--no-agents';\nconst VERBOSE_OPTION = '--verbose';\nconst DANGEROUSLY_SKIP_PERMISSIONS_OPTION = '--dangerously-skip-permissions';\nconst HELP_OPTION = '--help';\nconst HELP_SHORT_OPTION = '-h';\nconst VERSION_OPTION = '--version';\nconst VERSION_SHORT_OPTION = '-v';\n\nconst KIMI_ALIASES = new Map([\n ['k2p5', KIMI_FOR_CODING],\n ['k2p6', KIMI_FOR_CODING],\n ['k2p7', KIMI_FOR_CODING],\n ['kimi-k2.5', KIMI_FOR_CODING],\n [KIMI_K2_6, KIMI_FOR_CODING],\n ['kimi-k2.7-code', KIMI_FOR_CODING],\n [KIMI_FOR_CODING, KIMI_FOR_CODING],\n [KIMI_FOR_CODING_HIGHSPEED, KIMI_FOR_CODING_HIGHSPEED],\n]);\n\nfunction parsePreset(value: string): HarnessPreset {\n if (value === DEFAULT_PRESET || value === KIMI_PRESET || value === OLLAMA_PRESET) return value;\n throw new Error(`Unsupported preset: ${value}`);\n}\n\nfunction hasOption(args: string[], ...names: string[]): boolean {\n return args.some((arg) => names.includes(arg) || names.some((name) => arg.startsWith(`${name}=`)));\n}\n\nfunction modelValue(args: string[]): { index: number; value: string; inline: boolean } | undefined {\n for (let index = 0; index < args.length; index += 1) {\n if (args[index] === MODEL_OPTION || args[index] === MODEL_SHORT_OPTION) {\n const value = args[index + 1];\n if (value) return { index, value, inline: false };\n }\n if (args[index]?.startsWith(`${MODEL_OPTION}=`)) {\n return { index, value: args[index].slice(`${MODEL_OPTION}=`.length), inline: true };\n }\n }\n return undefined;\n}\n\nfunction replaceModel(args: string[], value: string): void {\n const selected = modelValue(args);\n if (!selected) {\n args.unshift(MODEL_OPTION, value);\n } else if (selected.inline) {\n args[selected.index] = `${MODEL_OPTION}=${value}`;\n } else {\n args[selected.index + 1] = value;\n }\n}\n\nfunction normalizeProviderArgs(preset: HarnessPreset, piArgs: string[], environment: NodeJS.ProcessEnv): void {\n const selected = modelValue(piArgs);\n if (preset === KIMI_PRESET) {\n const value = selected?.value ?? environment[KIMI_CODE_MODEL_ENV] ?? KIMI_FOR_CODING;\n const unqualified = value.includes('/') ? value.slice(value.indexOf('/') + 1) : value;\n replaceModel(piArgs, `${KIMI_CODING_PREFIX}${KIMI_ALIASES.get(unqualified) ?? unqualified}`);\n }\n if (preset === OLLAMA_PRESET) {\n const value = selected?.value ?? environment[OLLAMA_CLAUDE_MODEL_ENV] ?? KIMI_K2_6;\n const unqualified = value.startsWith(OLLAMA_PREFIX) ? value.slice(OLLAMA_PREFIX.length) : value;\n replaceModel(\n piArgs,\n `${OLLAMA_PREFIX}${unqualified.includes(':') ? unqualified : `${unqualified}${CLOUD_SUFFIX}`}`,\n );\n }\n}\n\n/**\n * Answers `--help` and `--version` without reading the environment.\n *\n * The caller only looks at `help` and `version` for these, and never launches,\n * so the options carry defaults rather than a resolved matrix. This exists so a\n * stale export cannot break the one command that explains how to fix it.\n */\nfunction parseInformationalArgs(args: string[], currentDirectory: string): ParsedHarnessArgs | undefined {\n const help = args.some((arg) => arg === HELP_OPTION || arg === HELP_SHORT_OPTION);\n const version = args.some((arg) => arg === VERSION_OPTION || arg === VERSION_SHORT_OPTION);\n if (!help && !version) return undefined;\n return {\n options: {\n cwd: currentDirectory,\n profile: undefined,\n domains: [],\n majorMode: DEFAULT_MAJOR_MODE,\n explain: false,\n emitMcp: undefined,\n pluginDirectories: [],\n additionalDirectories: [],\n preset: DEFAULT_PRESET,\n outputFormat: NATIVE_FORMAT,\n mute: false,\n automation: false,\n autoStop: false,\n allowProtectedWrites: false,\n hooks: true,\n mcp: true,\n agents: true,\n piArgs: [],\n },\n help,\n version,\n };\n}\n\nexport function parseHarnessArgs(\n args: string[],\n environment: NodeJS.ProcessEnv = process.env,\n currentDirectory = process.cwd(),\n): ParsedHarnessArgs {\n const informational = parseInformationalArgs(args, currentDirectory);\n if (informational) return informational;\n\n let profile = resolveInheritedProfile(environment);\n let profileProvided = false;\n let majorMode = resolveInheritedMajorMode(environment);\n let majorModeProvided = false;\n const domains: string[] = [];\n // Directory options are collected verbatim and resolved once after the loop,\n // so a relative path means the same thing regardless of where --cwd appears\n // in the argument list.\n const pluginDirectoryValues: string[] = [];\n const additionalDirectoryValues: string[] = [];\n const piArgs: string[] = [];\n let cwd = currentDirectory;\n let preset = parsePreset(environment[DOOMPI_PRESET_ENV] ?? DEFAULT_PRESET);\n let outputFormat: HarnessOutputFormat = NATIVE_FORMAT;\n let domainsDisabled = false;\n let mute = false;\n let automation = false;\n let autoStop = false;\n let allowProtectedWrites = false;\n let hooks = true;\n let mcp = true;\n let agents = true;\n let help = false;\n let version = false;\n let explain = false;\n let emitMcp: string | undefined;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index]!;\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 if (matchesOption(arg, PROFILES_OPTION)) {\n throw new Error(`${PROFILES_OPTION} was replaced by ${DOMAINS_OPTION}`);\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(...parseCsv(domainMatch.value));\n index = domainMatch.nextIndex;\n continue;\n }\n\n const emitMcpMatch = readOption(args, index, EMIT_MCP_OPTION);\n if (emitMcpMatch) {\n emitMcp = path.resolve(currentDirectory, emitMcpMatch.value);\n index = emitMcpMatch.nextIndex;\n continue;\n }\n\n const pluginDirectoryMatch = readOption(args, index, PLUGIN_DIRECTORY_OPTION);\n if (pluginDirectoryMatch) {\n pluginDirectoryValues.push(pluginDirectoryMatch.value);\n index = pluginDirectoryMatch.nextIndex;\n continue;\n }\n\n const addDirectoryMatch = readOption(args, index, ADD_DIRECTORY_OPTION);\n if (addDirectoryMatch) {\n additionalDirectoryValues.push(addDirectoryMatch.value);\n index = addDirectoryMatch.nextIndex;\n continue;\n }\n\n const presetMatch = readOption(args, index, PRESET_OPTION);\n if (presetMatch) {\n preset = parsePreset(presetMatch.value);\n index = presetMatch.nextIndex;\n continue;\n }\n\n const cwdMatch = readOption(args, index, CWD_OPTION) ?? readOption(args, index, CD_OPTION);\n if (cwdMatch) {\n cwd = path.resolve(currentDirectory, cwdMatch.value);\n index = cwdMatch.nextIndex;\n continue;\n }\n\n const effortMatch = readOption(args, index, EFFORT_OPTION);\n if (effortMatch) {\n if (effortMatch.inline) piArgs.push(`${THINKING_OPTION}=${effortMatch.value}`);\n else piArgs.push(THINKING_OPTION, effortMatch.value);\n index = effortMatch.nextIndex;\n continue;\n }\n\n const outputFormatMatch = readOption(args, index, OUTPUT_FORMAT_OPTION);\n if (outputFormatMatch) {\n const requested = outputFormatMatch.value;\n if (requested === VIBE_LINT_FORMAT) {\n outputFormat = VIBE_LINT_FORMAT;\n } else {\n const mode = requested === STREAM_JSON_FORMAT ? JSON_FORMAT : requested;\n if (outputFormatMatch.inline) piArgs.push(`${MODE_OPTION}=${mode}`);\n else piArgs.push(MODE_OPTION, mode);\n }\n index = outputFormatMatch.nextIndex;\n continue;\n }\n\n if (arg === NO_DOMAINS_OPTION) domainsDisabled = true;\n else if (arg === EXPLAIN_OPTION) explain = true;\n else if (arg === AUTOMATION_OPTION) automation = true;\n else if (arg === MUTE_OPTION) mute = true;\n else if (arg === AUTO_STOP_OPTION) autoStop = true;\n else if (arg === ALLOW_PROTECTED_WRITES_OPTION) allowProtectedWrites = true;\n else if (arg === HOOKS_OPTION) hooks = true;\n else if (arg === MCP_OPTION) mcp = true;\n else if (arg === AGENTS_OPTION) agents = true;\n else if (arg === NO_HOOKS_OPTION) hooks = false;\n else if (arg === NO_MCP_OPTION) mcp = false;\n else if (arg === NO_AGENTS_OPTION) agents = false;\n else if (arg === HELP_OPTION || arg === HELP_SHORT_OPTION) help = true;\n else if (arg === VERSION_OPTION || arg === VERSION_SHORT_OPTION) version = true;\n // Accepted for Claude Code compatibility and deliberately not forwarded.\n else if (arg !== VERBOSE_OPTION && arg !== DANGEROUSLY_SKIP_PERMISSIONS_OPTION) piArgs.push(arg);\n }\n\n if (domainsDisabled && domains.length > 0) {\n throw new Error(`${NO_DOMAINS_OPTION} cannot be combined with ${DOMAINS_OPTION}`);\n }\n if (!domainsDisabled && domains.length === 0 && pluginDirectoryValues.length === 0) {\n domains.push(...defaultDomainsForMajorMode(majorMode, environment));\n }\n if (automation) {\n if (!hasOption(piArgs, PRINT_OPTION, PRINT_SHORT_OPTION)) piArgs.unshift(PRINT_OPTION);\n if (!hasOption(piArgs, MODE_OPTION)) piArgs.unshift(MODE_OPTION, JSON_FORMAT);\n if (!hasOption(piArgs, APPROVE_OPTION, APPROVE_SHORT_OPTION)) piArgs.unshift(APPROVE_OPTION);\n }\n if (\n autoStop &&\n (automation ||\n outputFormat === VIBE_LINT_FORMAT ||\n hasOption(piArgs, PRINT_OPTION, PRINT_SHORT_OPTION, MODE_OPTION))\n ) {\n throw new Error(`${AUTO_STOP_OPTION} only supports interactive Pi mode`);\n }\n normalizeProviderArgs(preset, piArgs, environment);\n\n return {\n options: {\n cwd,\n profile,\n domains,\n majorMode,\n explain,\n emitMcp,\n pluginDirectories: pluginDirectoryValues.map((value) => path.resolve(currentDirectory, value)),\n additionalDirectories: [\n ...new Set([\n ...resolveAdditionalDirectories(environment, currentDirectory),\n ...additionalDirectoryValues.map((value) => path.resolve(currentDirectory, value)),\n ]),\n ],\n preset,\n outputFormat,\n mute,\n automation,\n autoStop,\n allowProtectedWrites,\n hooks,\n mcp,\n agents,\n piArgs,\n },\n help,\n version,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseCommand.cjs","names":[],"sources":["../../src/commands/baseCommand.ts"],"sourcesContent":["import type { HarnessOptions } from '../interfaces/index.ts';\nimport type { HarnessTelemetry } from '../logSinkTelemetry.ts';\nimport type { HarnessContext } from '../services/index.ts';\n\n/**\n * Base Command\n *\n * All doom-pi commands extend this to keep a consistent shape.\n *\n * This deviates from the cli-lib template in one way: there is no\n * register(program) and no Commander.js. doom-pi is a passthrough launcher,\n * where every argument it does not recognise belongs to Pi, so a subcommand\n * parser would reject Pi's own flags. Commands are selected by inspecting the\n * already-parsed options instead, which keeps the Command pattern without\n * taking over argument parsing.\n */\nexport abstract class BaseCommand {\n /** Identifier used in diagnostics and tests. */\n abstract readonly name: string;\n\n /** True when the parsed options select this command. */\n abstract matches(options: HarnessOptions): boolean;\n\n /**\n * Runs the command and resolves to the process exit code.\n *\n * Telemetry is handed in rather than created per command so every stage of\n * one run reports under the same span.\n */\n abstract execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;\n\n /**\n * Handle errors consistently across all commands.\n */\n protected handleError(error: unknown): never {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] ${this.name}: ${message}\\n`);\n process.exit(1);\n }\n}\n"],"mappings":"mEAgBA,IAAsB,EAAtB,KAAkC,CAkBhC,YAAsB,EAAuB,CAC3C,IAAM,EAAU,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACtE,QAAQ,OAAO,MAAM,YAAY,KAAK,KAAK,IAAI,EAAQ,IAAI,CAC3D,QAAQ,KAAK,EAAE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { HarnessOptions } from "../interfaces/harness.cjs";
|
|
2
|
+
import { HarnessTelemetry } from "../logSinkTelemetry.cjs";
|
|
3
|
+
import { HarnessContext } from "../services/harnessContext.cjs";
|
|
4
|
+
//#region src/commands/baseCommand.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Base Command
|
|
7
|
+
*
|
|
8
|
+
* All doom-pi commands extend this to keep a consistent shape.
|
|
9
|
+
*
|
|
10
|
+
* This deviates from the cli-lib template in one way: there is no
|
|
11
|
+
* register(program) and no Commander.js. doom-pi is a passthrough launcher,
|
|
12
|
+
* where every argument it does not recognise belongs to Pi, so a subcommand
|
|
13
|
+
* parser would reject Pi's own flags. Commands are selected by inspecting the
|
|
14
|
+
* already-parsed options instead, which keeps the Command pattern without
|
|
15
|
+
* taking over argument parsing.
|
|
16
|
+
*/
|
|
17
|
+
declare abstract class BaseCommand {
|
|
18
|
+
/** Identifier used in diagnostics and tests. */
|
|
19
|
+
abstract readonly name: string;
|
|
20
|
+
/** True when the parsed options select this command. */
|
|
21
|
+
abstract matches(options: HarnessOptions): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Runs the command and resolves to the process exit code.
|
|
24
|
+
*
|
|
25
|
+
* Telemetry is handed in rather than created per command so every stage of
|
|
26
|
+
* one run reports under the same span.
|
|
27
|
+
*/
|
|
28
|
+
abstract execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;
|
|
29
|
+
/**
|
|
30
|
+
* Handle errors consistently across all commands.
|
|
31
|
+
*/
|
|
32
|
+
protected handleError(error: unknown): never;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { BaseCommand };
|
|
36
|
+
//# sourceMappingURL=baseCommand.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseCommand.d.cts","names":[],"sources":["../../src/commands/baseCommand.ts"],"mappings":";;;;;;;AAgBA;;;;;;;;;uBAAsB,WAAA;EAKX;EAAA,kBAHS,IAAA;EAGD;EAAA,SAAR,OAAA,CAAQ,OAAA,EAAS,cAAA;EAQA;;;;;;EAAA,SAAjB,OAAA,CAAQ,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,gBAAA,GAAmB,OAAA;EAKpC;;;EAAA,UAA1B,WAAA,CAAY,KAAA;AAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { HarnessOptions } from "../interfaces/harness.mjs";
|
|
2
|
+
import { HarnessTelemetry } from "../logSinkTelemetry.mjs";
|
|
3
|
+
import { HarnessContext } from "../services/harnessContext.mjs";
|
|
4
|
+
//#region src/commands/baseCommand.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Base Command
|
|
7
|
+
*
|
|
8
|
+
* All doom-pi commands extend this to keep a consistent shape.
|
|
9
|
+
*
|
|
10
|
+
* This deviates from the cli-lib template in one way: there is no
|
|
11
|
+
* register(program) and no Commander.js. doom-pi is a passthrough launcher,
|
|
12
|
+
* where every argument it does not recognise belongs to Pi, so a subcommand
|
|
13
|
+
* parser would reject Pi's own flags. Commands are selected by inspecting the
|
|
14
|
+
* already-parsed options instead, which keeps the Command pattern without
|
|
15
|
+
* taking over argument parsing.
|
|
16
|
+
*/
|
|
17
|
+
declare abstract class BaseCommand {
|
|
18
|
+
/** Identifier used in diagnostics and tests. */
|
|
19
|
+
abstract readonly name: string;
|
|
20
|
+
/** True when the parsed options select this command. */
|
|
21
|
+
abstract matches(options: HarnessOptions): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Runs the command and resolves to the process exit code.
|
|
24
|
+
*
|
|
25
|
+
* Telemetry is handed in rather than created per command so every stage of
|
|
26
|
+
* one run reports under the same span.
|
|
27
|
+
*/
|
|
28
|
+
abstract execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;
|
|
29
|
+
/**
|
|
30
|
+
* Handle errors consistently across all commands.
|
|
31
|
+
*/
|
|
32
|
+
protected handleError(error: unknown): never;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { BaseCommand };
|
|
36
|
+
//# sourceMappingURL=baseCommand.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseCommand.d.mts","names":[],"sources":["../../src/commands/baseCommand.ts"],"mappings":";;;;;;;AAgBA;;;;;;;;;uBAAsB,WAAA;EAKX;EAAA,kBAHS,IAAA;EAGD;EAAA,SAAR,OAAA,CAAQ,OAAA,EAAS,cAAA;EAQA;;;;;;EAAA,SAAjB,OAAA,CAAQ,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,gBAAA,GAAmB,OAAA;EAKpC;;;EAAA,UAA1B,WAAA,CAAY,KAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseCommand.mjs","names":[],"sources":["../../src/commands/baseCommand.ts"],"sourcesContent":["import type { HarnessOptions } from '../interfaces/index.ts';\nimport type { HarnessTelemetry } from '../logSinkTelemetry.ts';\nimport type { HarnessContext } from '../services/index.ts';\n\n/**\n * Base Command\n *\n * All doom-pi commands extend this to keep a consistent shape.\n *\n * This deviates from the cli-lib template in one way: there is no\n * register(program) and no Commander.js. doom-pi is a passthrough launcher,\n * where every argument it does not recognise belongs to Pi, so a subcommand\n * parser would reject Pi's own flags. Commands are selected by inspecting the\n * already-parsed options instead, which keeps the Command pattern without\n * taking over argument parsing.\n */\nexport abstract class BaseCommand {\n /** Identifier used in diagnostics and tests. */\n abstract readonly name: string;\n\n /** True when the parsed options select this command. */\n abstract matches(options: HarnessOptions): boolean;\n\n /**\n * Runs the command and resolves to the process exit code.\n *\n * Telemetry is handed in rather than created per command so every stage of\n * one run reports under the same span.\n */\n abstract execute(context: HarnessContext, telemetry: HarnessTelemetry): Promise<number>;\n\n /**\n * Handle errors consistently across all commands.\n */\n protected handleError(error: unknown): never {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[doompi] ${this.name}: ${message}\\n`);\n process.exit(1);\n }\n}\n"],"mappings":"AAgBA,IAAsB,EAAtB,KAAkC,CAkBhC,YAAsB,EAAuB,CAC3C,IAAM,EAAU,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CACtE,QAAQ,OAAO,MAAM,YAAY,KAAK,KAAK,IAAI,EAAQ,IAAI,CAC3D,QAAQ,KAAK,EAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../cli/compatibilityOptions.cjs`),n=require(`../logSinkTelemetry.cjs`),r=require(`../utils/repository.cjs`);require(`../utils/index.cjs`);const i=require(`../services/compatibilityContext.cjs`),a=require(`../services/compatibility/index.cjs`);require(`../services/index.cjs`);let o=require(`node:path`);o=e.__toESM(o,1);var s=class{name=`compat`;telemetry;constructor(e=n.createHarnessTelemetry()){this.telemetry=e}matches(e){return e[0]===this.name}async execute(e,s=process.env,c=process.cwd()){let l=t.parseCompatibilityProvider(e[1]),u=t.parseCompatibilityArgs(e.slice(2),s,c),d=s.DOOMPI_ROOT,f=d?o.default.resolve(d):r.findRepositoryRoot(c),p=Date.now();return this.telemetry.runInSpan(`doom_pi.compatibility`,{"harness.provider":l,"harness.mode":`compatibility`},async()=>{let e=await i.buildCompatibilityContext({repoRoot:f,provider:l,...u.options});try{let t=await a.launchCompatibility(e);return this.telemetry.recordEvent(n.HARNESS_EVENT.launchCompleted,{"harness.provider":l,"harness.exit_code":t,"harness.duration_ms":Date.now()-p}),t}catch(e){throw await this.telemetry.recordError(n.HARNESS_EVENT.compatibilityLaunchFailed,e,{"harness.provider":l,"harness.duration_ms":Date.now()-p}),e}finally{await e.cleanup()}})}};exports.CompatibilityCommand=s;
|
|
2
|
+
//# sourceMappingURL=compatibilityCommand.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibilityCommand.cjs","names":["createHarnessTelemetry","parseCompatibilityProvider","parseCompatibilityArgs","path","findRepositoryRoot","buildCompatibilityContext","launchCompatibility","HARNESS_EVENT"],"sources":["../../src/commands/compatibilityCommand.ts"],"sourcesContent":["import path from 'node:path';\nimport { parseCompatibilityArgs, parseCompatibilityProvider } from '../cli/compatibilityOptions.ts';\nimport { createHarnessTelemetry, HARNESS_EVENT, type HarnessTelemetry } from '../logSinkTelemetry.ts';\nimport { buildCompatibilityContext, launchCompatibility } from '../services/index.ts';\nimport { findRepositoryRoot } from '../utils/index.ts';\n\nconst COMPAT_COMMAND = 'compat';\nconst HARNESS_ROOT_ENV = 'DOOMPI_ROOT';\n\n/** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */\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 const provider = parseCompatibilityProvider(args[1]);\n const parsed = parseCompatibilityArgs(args.slice(2), environment, currentDirectory);\n const inheritedRoot = environment[HARNESS_ROOT_ENV];\n const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);\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 this.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 this.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 this.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"],"mappings":"mcAUA,IAAa,EAAb,KAAkC,CAChC,KAAgB,SAChB,UAKA,YAAY,EAA8BA,EAAAA,wBAAwB,CAAE,CAClE,KAAK,UAAY,EAGnB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QACJ,EACA,EAAiC,QAAQ,IACzC,EAAmB,QAAQ,KAAK,CACf,CACjB,IAAM,EAAWC,EAAAA,2BAA2B,EAAK,GAAG,CAC9C,EAASC,EAAAA,uBAAuB,EAAK,MAAM,EAAE,CAAE,EAAa,EAAiB,CAC7E,EAAgB,EAAY,YAC5B,EAAW,EAAgBC,EAAAA,QAAK,QAAQ,EAAc,CAAGC,EAAAA,mBAAmB,EAAiB,CAC7F,EAAY,KAAK,KAAK,CAI5B,OAAO,KAAK,UAAU,UACpB,wBACA,CAAE,mBAAoB,EAAU,eAAgB,gBAAiB,CACjE,SAAY,CACV,IAAM,EAAU,MAAMC,EAAAA,0BAA0B,CAAE,WAAU,WAAU,GAAG,EAAO,QAAS,CAAC,CAC1F,GAAI,CACF,IAAM,EAAW,MAAMC,EAAAA,oBAAoB,EAAQ,CAMnD,OALK,KAAK,UAAU,YAAYC,EAAAA,cAAc,gBAAiB,CAC7D,mBAAoB,EACpB,oBAAqB,EACrB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACK,QACA,EAAO,CAKd,MAJA,MAAM,KAAK,UAAU,YAAYA,EAAAA,cAAc,0BAA2B,EAAO,CAC/E,mBAAoB,EACpB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACI,SACE,CACR,MAAM,EAAQ,SAAS,GAG5B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HarnessTelemetry } from "../logSinkTelemetry.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/compatibilityCommand.d.ts
|
|
4
|
+
/** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */
|
|
5
|
+
declare class CompatibilityCommand {
|
|
6
|
+
readonly name = "compat";
|
|
7
|
+
private readonly telemetry;
|
|
8
|
+
constructor(telemetry?: HarnessTelemetry);
|
|
9
|
+
matches(args: string[]): boolean;
|
|
10
|
+
execute(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string): Promise<number>;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { CompatibilityCommand };
|
|
14
|
+
//# sourceMappingURL=compatibilityCommand.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibilityCommand.d.cts","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"mappings":";;;;cAUa,oBAAA;EAAA,SACF,IAAA;EAAA,iBACQ,SAAA;cAKL,SAAA,GAAW,gBAAA;EAIvB,OAAA,CAAQ,IAAA;EAIF,OAAA,CACJ,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,YACC,OAAA;AAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HarnessTelemetry } from "../logSinkTelemetry.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/compatibilityCommand.d.ts
|
|
4
|
+
/** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */
|
|
5
|
+
declare class CompatibilityCommand {
|
|
6
|
+
readonly name = "compat";
|
|
7
|
+
private readonly telemetry;
|
|
8
|
+
constructor(telemetry?: HarnessTelemetry);
|
|
9
|
+
matches(args: string[]): boolean;
|
|
10
|
+
execute(args: string[], environment?: NodeJS.ProcessEnv, currentDirectory?: string): Promise<number>;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { CompatibilityCommand };
|
|
14
|
+
//# sourceMappingURL=compatibilityCommand.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibilityCommand.d.mts","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"mappings":";;;;cAUa,oBAAA;EAAA,SACF,IAAA;EAAA,iBACQ,SAAA;cAKL,SAAA,GAAW,gBAAA;EAIvB,OAAA,CAAQ,IAAA;EAIF,OAAA,CACJ,IAAA,YACA,WAAA,GAAa,MAAA,CAAO,UAAA,EACpB,gBAAA,YACC,OAAA;AAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{parseCompatibilityArgs as e,parseCompatibilityProvider as t}from"../cli/compatibilityOptions.mjs";import{HARNESS_EVENT as n,createHarnessTelemetry as r}from"../logSinkTelemetry.mjs";import{findRepositoryRoot as i}from"../utils/repository.mjs";import"../utils/index.mjs";import{buildCompatibilityContext as a}from"../services/compatibilityContext.mjs";import{launchCompatibility as o}from"../services/compatibility/index.mjs";import"../services/index.mjs";import s from"node:path";var c=class{name=`compat`;telemetry;constructor(e=r()){this.telemetry=e}matches(e){return e[0]===this.name}async execute(r,c=process.env,l=process.cwd()){let u=t(r[1]),d=e(r.slice(2),c,l),f=c.DOOMPI_ROOT,p=f?s.resolve(f):i(l),m=Date.now();return this.telemetry.runInSpan(`doom_pi.compatibility`,{"harness.provider":u,"harness.mode":`compatibility`},async()=>{let e=await a({repoRoot:p,provider:u,...d.options});try{let t=await o(e);return this.telemetry.recordEvent(n.launchCompleted,{"harness.provider":u,"harness.exit_code":t,"harness.duration_ms":Date.now()-m}),t}catch(e){throw await this.telemetry.recordError(n.compatibilityLaunchFailed,e,{"harness.provider":u,"harness.duration_ms":Date.now()-m}),e}finally{await e.cleanup()}})}};export{c as CompatibilityCommand};
|
|
2
|
+
//# sourceMappingURL=compatibilityCommand.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibilityCommand.mjs","names":[],"sources":["../../src/commands/compatibilityCommand.ts"],"sourcesContent":["import path from 'node:path';\nimport { parseCompatibilityArgs, parseCompatibilityProvider } from '../cli/compatibilityOptions.ts';\nimport { createHarnessTelemetry, HARNESS_EVENT, type HarnessTelemetry } from '../logSinkTelemetry.ts';\nimport { buildCompatibilityContext, launchCompatibility } from '../services/index.ts';\nimport { findRepositoryRoot } from '../utils/index.ts';\n\nconst COMPAT_COMMAND = 'compat';\nconst HARNESS_ROOT_ENV = 'DOOMPI_ROOT';\n\n/** Launches a non-Pi frontend with the doom-pi matrix resolved for that run. */\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 const provider = parseCompatibilityProvider(args[1]);\n const parsed = parseCompatibilityArgs(args.slice(2), environment, currentDirectory);\n const inheritedRoot = environment[HARNESS_ROOT_ENV];\n const repoRoot = inheritedRoot ? path.resolve(inheritedRoot) : findRepositoryRoot(currentDirectory);\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 this.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 this.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 this.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"],"mappings":"ueAUA,IAAa,EAAb,KAAkC,CAChC,KAAgB,SAChB,UAKA,YAAY,EAA8B,GAAwB,CAAE,CAClE,KAAK,UAAY,EAGnB,QAAQ,EAAyB,CAC/B,OAAO,EAAK,KAAO,KAAK,KAG1B,MAAM,QACJ,EACA,EAAiC,QAAQ,IACzC,EAAmB,QAAQ,KAAK,CACf,CACjB,IAAM,EAAW,EAA2B,EAAK,GAAG,CAC9C,EAAS,EAAuB,EAAK,MAAM,EAAE,CAAE,EAAa,EAAiB,CAC7E,EAAgB,EAAY,YAC5B,EAAW,EAAgB,EAAK,QAAQ,EAAc,CAAG,EAAmB,EAAiB,CAC7F,EAAY,KAAK,KAAK,CAI5B,OAAO,KAAK,UAAU,UACpB,wBACA,CAAE,mBAAoB,EAAU,eAAgB,gBAAiB,CACjE,SAAY,CACV,IAAM,EAAU,MAAM,EAA0B,CAAE,WAAU,WAAU,GAAG,EAAO,QAAS,CAAC,CAC1F,GAAI,CACF,IAAM,EAAW,MAAM,EAAoB,EAAQ,CAMnD,OALK,KAAK,UAAU,YAAY,EAAc,gBAAiB,CAC7D,mBAAoB,EACpB,oBAAqB,EACrB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACK,QACA,EAAO,CAKd,MAJA,MAAM,KAAK,UAAU,YAAY,EAAc,0BAA2B,EAAO,CAC/E,mBAAoB,EACpB,sBAAuB,KAAK,KAAK,CAAG,EACrC,CAAC,CACI,SACE,CACR,MAAM,EAAQ,SAAS,GAG5B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./baseCommand.cjs`),t=require(`../services/mcpFilter.cjs`);require(`../services/index.cjs`);var n=class extends e.BaseCommand{name=`emit-mcp`;matches(e){return!!e.emitMcp}async execute(e){let{options:n,resources:r}=e;if(!n.emitMcp)throw Error(`--emit-mcp requires a target directory`);if(!r.mcpConfigPath)throw Error(`--emit-mcp requires MCP to be enabled`);let i=await t.persistMcpConfig(r.mcpConfigPath,r.temporaryDirectory,n.emitMcp);return process.stdout.write(`${i}\n`),0}};exports.EmitMcpCommand=n;
|
|
2
|
+
//# sourceMappingURL=emitMcpCommand.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitMcpCommand.cjs","names":["BaseCommand","persistMcpConfig"],"sources":["../../src/commands/emitMcpCommand.ts"],"sourcesContent":["import type { HarnessOptions } from '../interfaces/index.ts';\nimport { type HarnessContext, persistMcpConfig } from '../services/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * Writes the resolved MCP config to a directory and exits.\n *\n * Lets claude.sh and codex.sh reuse the same domain-scoped MCP surface instead\n * of reimplementing the filter in shell.\n */\nexport class EmitMcpCommand extends BaseCommand {\n readonly name = 'emit-mcp';\n\n matches(options: HarnessOptions): boolean {\n return Boolean(options.emitMcp);\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources } = context;\n if (!options.emitMcp) throw new Error('--emit-mcp requires a target directory');\n if (!resources.mcpConfigPath) throw new Error('--emit-mcp requires MCP to be enabled');\n\n const emitted = await persistMcpConfig(resources.mcpConfigPath, resources.temporaryDirectory, options.emitMcp);\n process.stdout.write(`${emitted}\\n`);\n return 0;\n }\n}\n"],"mappings":"gLAUA,IAAa,EAAb,cAAoCA,EAAAA,WAAY,CAC9C,KAAgB,WAEhB,QAAQ,EAAkC,CACxC,MAAO,EAAQ,EAAQ,QAGzB,MAAM,QAAQ,EAA0C,CACtD,GAAM,CAAE,UAAS,aAAc,EAC/B,GAAI,CAAC,EAAQ,QAAS,MAAU,MAAM,yCAAyC,CAC/E,GAAI,CAAC,EAAU,cAAe,MAAU,MAAM,wCAAwC,CAEtF,IAAM,EAAU,MAAMC,EAAAA,iBAAiB,EAAU,cAAe,EAAU,mBAAoB,EAAQ,QAAQ,CAE9G,OADA,QAAQ,OAAO,MAAM,GAAG,EAAQ,IAAI,CAC7B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { HarnessOptions } from "../interfaces/harness.cjs";
|
|
2
|
+
import { HarnessContext } from "../services/harnessContext.cjs";
|
|
3
|
+
import { BaseCommand } from "./baseCommand.cjs";
|
|
4
|
+
|
|
5
|
+
//#region src/commands/emitMcpCommand.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Writes the resolved MCP config to a directory and exits.
|
|
8
|
+
*
|
|
9
|
+
* Lets claude.sh and codex.sh reuse the same domain-scoped MCP surface instead
|
|
10
|
+
* of reimplementing the filter in shell.
|
|
11
|
+
*/
|
|
12
|
+
declare class EmitMcpCommand extends BaseCommand {
|
|
13
|
+
readonly name = "emit-mcp";
|
|
14
|
+
matches(options: HarnessOptions): boolean;
|
|
15
|
+
execute(context: HarnessContext): Promise<number>;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { EmitMcpCommand };
|
|
19
|
+
//# sourceMappingURL=emitMcpCommand.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitMcpCommand.d.cts","names":[],"sources":["../../src/commands/emitMcpCommand.ts"],"mappings":";;;;;;;;AAUA;;;cAAa,cAAA,SAAuB,WAAA;EAAA,SACzB,IAAA;EAET,OAAA,CAAQ,OAAA,EAAS,cAAA;EAIX,OAAA,CAAQ,OAAA,EAAS,cAAA,GAAiB,OAAA;AAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { HarnessOptions } from "../interfaces/harness.mjs";
|
|
2
|
+
import { HarnessContext } from "../services/harnessContext.mjs";
|
|
3
|
+
import { BaseCommand } from "./baseCommand.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/commands/emitMcpCommand.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Writes the resolved MCP config to a directory and exits.
|
|
8
|
+
*
|
|
9
|
+
* Lets claude.sh and codex.sh reuse the same domain-scoped MCP surface instead
|
|
10
|
+
* of reimplementing the filter in shell.
|
|
11
|
+
*/
|
|
12
|
+
declare class EmitMcpCommand extends BaseCommand {
|
|
13
|
+
readonly name = "emit-mcp";
|
|
14
|
+
matches(options: HarnessOptions): boolean;
|
|
15
|
+
execute(context: HarnessContext): Promise<number>;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { EmitMcpCommand };
|
|
19
|
+
//# sourceMappingURL=emitMcpCommand.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitMcpCommand.d.mts","names":[],"sources":["../../src/commands/emitMcpCommand.ts"],"mappings":";;;;;;;;AAUA;;;cAAa,cAAA,SAAuB,WAAA;EAAA,SACzB,IAAA;EAET,OAAA,CAAQ,OAAA,EAAS,cAAA;EAIX,OAAA,CAAQ,OAAA,EAAS,cAAA,GAAiB,OAAA;AAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{BaseCommand as e}from"./baseCommand.mjs";import{persistMcpConfig as t}from"../services/mcpFilter.mjs";import"../services/index.mjs";var n=class extends e{name=`emit-mcp`;matches(e){return!!e.emitMcp}async execute(e){let{options:n,resources:r}=e;if(!n.emitMcp)throw Error(`--emit-mcp requires a target directory`);if(!r.mcpConfigPath)throw Error(`--emit-mcp requires MCP to be enabled`);let i=await t(r.mcpConfigPath,r.temporaryDirectory,n.emitMcp);return process.stdout.write(`${i}\n`),0}};export{n as EmitMcpCommand};
|
|
2
|
+
//# sourceMappingURL=emitMcpCommand.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitMcpCommand.mjs","names":[],"sources":["../../src/commands/emitMcpCommand.ts"],"sourcesContent":["import type { HarnessOptions } from '../interfaces/index.ts';\nimport { type HarnessContext, persistMcpConfig } from '../services/index.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * Writes the resolved MCP config to a directory and exits.\n *\n * Lets claude.sh and codex.sh reuse the same domain-scoped MCP surface instead\n * of reimplementing the filter in shell.\n */\nexport class EmitMcpCommand extends BaseCommand {\n readonly name = 'emit-mcp';\n\n matches(options: HarnessOptions): boolean {\n return Boolean(options.emitMcp);\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources } = context;\n if (!options.emitMcp) throw new Error('--emit-mcp requires a target directory');\n if (!resources.mcpConfigPath) throw new Error('--emit-mcp requires MCP to be enabled');\n\n const emitted = await persistMcpConfig(resources.mcpConfigPath, resources.temporaryDirectory, options.emitMcp);\n process.stdout.write(`${emitted}\\n`);\n return 0;\n }\n}\n"],"mappings":"2IAUA,IAAa,EAAb,cAAoC,CAAY,CAC9C,KAAgB,WAEhB,QAAQ,EAAkC,CACxC,MAAO,EAAQ,EAAQ,QAGzB,MAAM,QAAQ,EAA0C,CACtD,GAAM,CAAE,UAAS,aAAc,EAC/B,GAAI,CAAC,EAAQ,QAAS,MAAU,MAAM,yCAAyC,CAC/E,GAAI,CAAC,EAAU,cAAe,MAAU,MAAM,wCAAwC,CAEtF,IAAM,EAAU,MAAM,EAAiB,EAAU,cAAe,EAAU,mBAAoB,EAAQ,QAAQ,CAE9G,OADA,QAAQ,OAAO,MAAM,GAAG,EAAQ,IAAI,CAC7B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`./baseCommand.cjs`),n=require(`../services/skillCatalog.cjs`);let r=require(`node:path`);r=e.__toESM(r,1);let i=require(`node:fs`);i=e.__toESM(i,1);let a=require(`@agimon-ai/doompi-config`);function o(e){return JSON.parse(i.default.readFileSync(e,`utf8`)).mcpServers??{}}function s(e){let t=(e,t,n=`(none)`)=>`${e}:\n${t.length===0?` ${n}`:t.map(e=>` ${e}`).join(`
|
|
2
|
+
`)}\n`;return[`doompi resolved matrix
|
|
3
|
+
|
|
4
|
+
`,`major mode: ${e.majorMode}\n\n`,t(`profile`,e.profile?[e.profile]:[],`(none)`),`
|
|
5
|
+
`,t(`persona`,e.persona?[e.persona]:[],`(none)`),`
|
|
6
|
+
`,t(`domains (content)`,e.domains),`
|
|
7
|
+
`,t(`layers (behavior, from the major mode)`,e.layers,`core only`),`
|
|
8
|
+
`,t(`hook groups from layers`,e.hookGroups,e.hooksEnabled?`(core groups only)`:`(hooks disabled)`),`
|
|
9
|
+
`,t(`plugins`,e.plugins.map(e=>r.default.basename(e))),`
|
|
10
|
+
`,t(`skill directories`,e.skillDirectories.map(e=>r.default.relative(process.cwd(),e))),`
|
|
11
|
+
`,t(e.mcpFiltered?`mcp servers (filtered by domain allowlist)`:`mcp servers (unfiltered)`,e.mcpServers,`(mcp disabled)`),`
|
|
12
|
+
`,e.mcpProxyUpstreams?t(`mcp proxy upstreams (filtered)`,e.mcpProxyUpstreams):`mcp proxy upstreams:
|
|
13
|
+
(unfiltered, every upstream in mcp-config.yaml)
|
|
14
|
+
`,`
|
|
15
|
+
`,`skills: ${e.skillCount} (from ${e.skillDirectories.length} directories)\n`,`agents: ${e.agentCount}\n`,`mcp config: ${e.mcpConfigPath??`(disabled)`}\n`,e.cost?l(e.cost):``].join(``)}function c(e,t,n=``){let r=` ${e.padEnd(16)}${t.toLocaleString(`en-US`).padStart(9)}`;return`${n?`${r} ${n}`:r}\n`}function l(e){let t=e.skillPromptTokens+e.personaTokens;return[`
|
|
16
|
+
context cost (tokens)
|
|
17
|
+
`,c(`skills prompt`,e.skillPromptTokens,`always on`),c(`persona`,e.personaTokens,`always on`),c(`startup total`,t),c(`skill bodies`,e.skillBodyTokens,`read on demand`),`
|
|
18
|
+
Excludes MCP tool schemas, which the servers only report once connected,
|
|
19
|
+
`,` and skills contributed by extensions, which register after startup.
|
|
20
|
+
`].join(``)}var u=class extends t.BaseCommand{name=`explain`;matches(e){return e.explain}async cost(e){let{options:t,resources:r}=e;try{let[i,o]=await Promise.all([n.buildSkillCatalog({repoRoot:t.repoRoot,activeSkillDirectories:r.skillDirectories,extensionSources:[]}),n.counter()]),s=e.personaDirectory?(0,a.buildPersonaPrompt)(e.personaRoot??t.repoRoot,e.personaDirectory):void 0;return{skillPromptTokens:i.promptTokens,skillBodyTokens:i.bodyTokens,personaTokens:s?o(s):0}}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[doompi] ${this.name}: could not price the selection: ${t}\n`);return}}async execute(e){let{options:t,resources:n,plugins:r,mcpAllowlist:i}=e,a=await this.cost(e);return process.stdout.write(s({cost:a,majorMode:t.majorMode,profile:e.profile,persona:e.personaDirectory,domains:t.domains,plugins:r.map(e=>e.directory),layers:e.selectedLayers,hookGroups:e.hookGroups,hooksEnabled:t.hooks,skillDirectories:n.skillDirectories,skillCount:n.skillCount,agentCount:n.agentCount,agentDirectories:n.agentDirectories,mcpConfigPath:n.mcpConfigPath,mcpServers:n.mcpConfigPath?Object.keys(o(n.mcpConfigPath)):[],mcpProxyUpstreams:i?.proxy,mcpFiltered:!!i})),0}};exports.ExplainCommand=u,exports.explainMatrix=s;
|
|
21
|
+
//# sourceMappingURL=explainCommand.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainCommand.cjs","names":["fs","path","BaseCommand","buildSkillCatalog","counter"],"sources":["../../src/commands/explainCommand.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { buildPersonaPrompt } from '@agimon-ai/doompi-config';\nimport type { HarnessOptions } from '../interfaces/index.ts';\nimport type { HarnessContext } from '../services/index.ts';\nimport { buildSkillCatalog, counter } from '../services/skillCatalog.ts';\nimport { BaseCommand } from './baseCommand.ts';\n\n/**\n * What the selection costs before the first prompt, in tokens.\n *\n * MCP tool schemas are deliberately absent: they come from the servers at\n * connect time, and pricing them here would mean spawning every configured\n * server and running a handshake on a command that is meant to be instant.\n * `startupTokens` is therefore a floor, not a total, and the rendering says so.\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}\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 `doompi 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 directories',\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} directories)\\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 * Every figure is derived from files on disk, so two runs of the same selection\n * print the same numbers and a reader can reproduce them without trusting this\n * output.\n */\nfunction renderCost(cost: MatrixCost): string {\n const startup = cost.skillPromptTokens + cost.personaTokens;\n return [\n '\\ncontext cost (tokens)\\n',\n tokenLine('skills prompt', cost.skillPromptTokens, 'always on'),\n tokenLine('persona', cost.personaTokens, 'always on'),\n tokenLine('startup total', startup),\n tokenLine('skill bodies', cost.skillBodyTokens, 'read on demand'),\n '\\n Excludes MCP tool schemas, which the servers only report once connected,\\n',\n ' and skills contributed by extensions, which register after startup.\\n',\n ].join('');\n}\n\n/** Prints the fully resolved matrix instead of launching Pi. */\nexport class ExplainCommand extends BaseCommand {\n readonly name = 'explain';\n\n matches(options: HarnessOptions): boolean {\n return options.explain;\n }\n\n /**\n * Prices the selection from files on disk.\n *\n * `extensionSources` is empty because extensions publish their skill\n * directories over the session event bus, which has not started here. The\n * rendering names that gap rather than presenting the figure as a total.\n */\n private async cost(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 return {\n skillPromptTokens: catalog.promptTokens,\n skillBodyTokens: catalog.bodyTokens,\n personaTokens: persona ? countTokens(persona) : 0,\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(`[doompi] ${this.name}: could not price the selection: ${detail}\\n`);\n return undefined;\n }\n }\n\n async execute(context: HarnessContext): Promise<number> {\n const { options, resources, plugins, mcpAllowlist } = context;\n const cost = await this.cost(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"],"mappings":"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"}
|