@eldrforge/kodrdriv 0.0.3 → 0.0.6
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/.kodrdriv/config.yaml +13 -5
- package/.kodrdriv/context/content.md +1 -0
- package/README.md +361 -1
- package/dist/arguments.js +93 -16
- package/dist/arguments.js.map +1 -1
- package/dist/commands/commit.js +15 -8
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/link.js +166 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/publish.js +212 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/unlink.js +177 -0
- package/dist/commands/unlink.js.map +1 -0
- package/dist/constants.js +24 -3
- package/dist/constants.js.map +1 -1
- package/dist/content/diff.js.map +1 -1
- package/dist/content/log.js.map +1 -1
- package/dist/error/ExitError.js.map +1 -1
- package/dist/logging.js.map +1 -1
- package/dist/main.js +11 -2
- package/dist/main.js.map +1 -1
- package/dist/prompt/prompts.js.map +1 -1
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -1
- package/dist/util/child.js.map +1 -1
- package/dist/util/general.js +13 -1
- package/dist/util/general.js.map +1 -1
- package/dist/util/github.js +144 -0
- package/dist/util/github.js.map +1 -0
- package/dist/util/openai.js.map +1 -1
- package/dist/util/storage.js +4 -0
- package/dist/util/storage.js.map +1 -1
- package/package.json +19 -18
- package/vitest.config.ts +7 -4
- package/.kodrdriv/context/people/context.md +0 -5
- package/.kodrdriv/context/projects/context.md +0 -3
- package/.kodrdriv/instructions/INACTIVE-release-pre.md +0 -1
package/dist/arguments.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.js","sources":["../src/arguments.ts"],"sourcesContent":["import * as Cardigantime from '@theunwalked/cardigantime';\nimport { Command } from \"commander\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { ALLOWED_COMMANDS, DEFAULT_CHARACTER_ENCODING, DEFAULT_COMMAND, DEFAULT_INSTRUCTIONS_DIR, KODRDRIV_DEFAULTS, PROGRAM_NAME, VERSION } from \"./constants\";\nimport { getLogger } from \"./logging\";\nimport { CommandConfig, Config, ConfigSchema, SecureConfig } from './types'; // Import the Config type from main.ts\nimport * as Storage from \"./util/storage\";\n\nexport const InputSchema = z.object({\n dryRun: z.boolean().optional(),\n verbose: z.boolean().optional(),\n debug: z.boolean().optional(),\n overrides: z.boolean().optional(),\n openaiApiKey: z.string().optional(),\n model: z.string().optional(),\n contextDirectories: z.array(z.string()).optional(),\n instructions: z.string().optional(),\n configDir: z.string().optional(),\n cached: z.boolean().optional(),\n sendit: z.boolean().optional(),\n from: z.string().optional(),\n to: z.string().optional(),\n excludedPatterns: z.array(z.string()).optional(),\n context: z.string().optional(),\n messageLimit: z.number().optional(),\n});\n\nexport type Input = z.infer<typeof InputSchema>;\n\n// Function to transform flat CLI args into nested Config structure\nexport const transformCliArgs = (finalCliArgs: Input): Partial<Config> => {\n const transformedCliArgs: Partial<Config> = {};\n\n // Direct mappings from Input to Config\n if (finalCliArgs.dryRun !== undefined) transformedCliArgs.dryRun = finalCliArgs.dryRun;\n if (finalCliArgs.verbose !== undefined) transformedCliArgs.verbose = finalCliArgs.verbose;\n if (finalCliArgs.debug !== undefined) transformedCliArgs.debug = finalCliArgs.debug;\n if (finalCliArgs.overrides !== undefined) transformedCliArgs.overrides = finalCliArgs.overrides;\n if (finalCliArgs.model !== undefined) transformedCliArgs.model = finalCliArgs.model;\n if (finalCliArgs.contextDirectories !== undefined) transformedCliArgs.contextDirectories = finalCliArgs.contextDirectories;\n if (finalCliArgs.instructions !== undefined) transformedCliArgs.instructions = finalCliArgs.instructions;\n\n // Map configDir (CLI) to configDirectory (Cardigantime standard)\n if (finalCliArgs.configDir !== undefined) transformedCliArgs.configDirectory = finalCliArgs.configDir;\n\n // Nested mappings for 'commit' options\n if (finalCliArgs.cached !== undefined || finalCliArgs.sendit !== undefined) {\n transformedCliArgs.commit = {};\n if (finalCliArgs.cached !== undefined) transformedCliArgs.commit.cached = finalCliArgs.cached;\n if (finalCliArgs.sendit !== undefined) transformedCliArgs.commit.sendit = finalCliArgs.sendit;\n if (finalCliArgs.messageLimit !== undefined) transformedCliArgs.commit.messageLimit = finalCliArgs.messageLimit;\n if (finalCliArgs.context !== undefined) transformedCliArgs.commit.context = finalCliArgs.context;\n }\n\n // Nested mappings for 'release' options\n if (finalCliArgs.from !== undefined || finalCliArgs.to !== undefined) {\n transformedCliArgs.release = {};\n if (finalCliArgs.from !== undefined) transformedCliArgs.release.from = finalCliArgs.from;\n if (finalCliArgs.to !== undefined) transformedCliArgs.release.to = finalCliArgs.to;\n if (finalCliArgs.context !== undefined) transformedCliArgs.release.context = finalCliArgs.context;\n if (finalCliArgs.messageLimit !== undefined) transformedCliArgs.release.messageLimit = finalCliArgs.messageLimit;\n }\n\n if (finalCliArgs.excludedPatterns !== undefined) transformedCliArgs.excludedPatterns = finalCliArgs.excludedPatterns;\n\n\n // Note: finalCliArgs.openaiApiKey is intentionally omitted here as it belongs to SecureConfig\n\n return transformedCliArgs;\n}\n\n// Update configure signature to accept cardigantime\nexport const configure = async (cardigantime: Cardigantime.Cardigantime<typeof ConfigSchema.shape>): Promise<[Config, SecureConfig, CommandConfig]> => {\n const logger = getLogger();\n let program = new Command();\n\n // Configure program basics\n program\n .name(PROGRAM_NAME)\n .summary('Create Intelligent Release Notes or Change Logs from Git')\n .description('Create Intelligent Release Notes or Change Logs from Git')\n .version(VERSION);\n\n // Let cardigantime add its arguments first\n program = await cardigantime.configure(program);\n\n // Get CLI arguments using the new function\n const [finalCliArgs, commandConfig]: [Input, CommandConfig] = getCliConfig(program);\n logger.debug('Loaded Command Line Options: %s', JSON.stringify(finalCliArgs, null, 2));\n\n // Transform the flat CLI args using the new function\n const transformedCliArgs: Partial<Config> = transformCliArgs(finalCliArgs);\n logger.debug('Transformed CLI Args for merging: %s', JSON.stringify(transformedCliArgs, null, 2));\n\n // Get values from config file\n const fileValues: Config = await cardigantime.read(finalCliArgs);\n await cardigantime.validate(fileValues); // Validate file config against the shape\n\n // Merge configurations: Defaults -> File -> CLI\n const partialConfig: Partial<Config> = {\n ...KODRDRIV_DEFAULTS, // Start with Kodrdriv defaults\n ...fileValues, // Apply file values (overwrites defaults)\n ...transformedCliArgs, // Apply CLI args last (highest precedence)\n } as Partial<Config>; // Cast to Partial<MainConfig> initially\n\n // Specific validation and processing after merge\n const config: Config = await validateAndProcessOptions(partialConfig);\n\n logger.verbose('Final configuration: %s', JSON.stringify(config, null, 2));\n\n const secureConfig: SecureConfig = await validateAndProcessSecureOptions();\n\n return [config, secureConfig, commandConfig];\n}\n\n// Function to handle CLI argument parsing and processing\nfunction getCliConfig(program: Command): [Input, CommandConfig] {\n\n const addSharedOptions = (command: Command) => {\n command\n .option('--dry-run', 'perform a dry run without saving files') // Removed default, will be handled by merging\n .option('--verbose', 'enable verbose logging')\n .option('--debug', 'enable debug logging')\n .option('--overrides', 'enable overrides')\n .option('--model <model>', 'OpenAI model to use')\n .option('-d, --context-directories [contextDirectories...]', 'directories to scan for context')\n .option('-i, --instructions <file>', 'instructions for the AI')\n .option('--config-dir <configDir>', 'configuration directory') // Keep config-dir for specifying location\n .option('--excluded-paths [excludedPatterns...]', 'paths to exclude from the diff');\n }\n\n // Add subcommands\n const commitCommand = program\n .command('commit')\n .option('--cached', 'use cached diff')\n .option('--sendit', 'Commit with the message generated. No review.')\n .option('--context <context>', 'context for the commit message')\n .option('--message-limit <messageLimit>', 'limit the number of messages to generate')\n .description('Generate commit notes');\n addSharedOptions(commitCommand);\n\n const releaseCommand = program\n .command('release')\n .option('--from <from>', 'branch to generate release notes from')\n .option('--to <to>', 'branch to generate release notes to')\n .option('--context <context>', 'context for the commit message')\n .description('Generate release notes');\n addSharedOptions(releaseCommand);\n\n program.parse();\n\n const cliArgs: Input = program.opts<Input>(); // Get all opts initially\n\n // Determine which command is being run\n let commandName = DEFAULT_COMMAND;\n let commandOptions: Partial<Input> = {}; // Store specific command options\n\n if (program.args.length > 0 && ALLOWED_COMMANDS.includes(program.args[0])) {\n commandName = program.args[0];\n if (commandName === 'commit' && commitCommand.opts) {\n commandOptions = commitCommand.opts<Partial<Input>>();\n } else if (commandName === 'release' && releaseCommand.opts) {\n commandOptions = releaseCommand.opts<Partial<Input>>();\n }\n }\n\n validateCommand(commandName);\n\n // Include command name in CLI args for merging\n const finalCliArgs = { ...cliArgs, ...commandOptions };\n const commandConfig = { commandName };\n return [finalCliArgs, commandConfig];\n}\n\nasync function validateAndProcessSecureOptions(): Promise<SecureConfig> {\n if (!process.env.OPENAI_API_KEY) {\n throw new Error('OpenAI API key is required, set OPENAI_API_KEY environment variable or provide --openai-api-key');\n }\n // Prefer CLI key if provided, otherwise use env var\n const openaiApiKey = process.env.OPENAI_API_KEY as string;\n\n const secureConfig: SecureConfig = {\n openaiApiKey: openaiApiKey,\n };\n\n return secureConfig;\n}\n\n// Renamed validation function to reflect its broader role\nasync function validateAndProcessOptions(options: Partial<Config>): Promise<Config> {\n\n const contextDirectories = await validateContextDirectories(options.contextDirectories || KODRDRIV_DEFAULTS.contextDirectories);\n const instructionsPathOrContent = options.instructions || KODRDRIV_DEFAULTS.instructions;\n const instructions = await validateAndReadInstructions(instructionsPathOrContent);\n const configDir = options.configDirectory || KODRDRIV_DEFAULTS.configDirectory;\n await validateConfigDir(configDir); // Keep validation, but maybe remove return if not used elsewhere\n\n // Ensure all required fields are present and have correct types after merging\n const finalConfig: Config = {\n dryRun: options.dryRun ?? KODRDRIV_DEFAULTS.dryRun,\n verbose: options.verbose ?? KODRDRIV_DEFAULTS.verbose,\n debug: options.debug ?? KODRDRIV_DEFAULTS.debug,\n overrides: options.overrides ?? KODRDRIV_DEFAULTS.overrides,\n model: options.model ?? KODRDRIV_DEFAULTS.model,\n instructions: instructions, // Use processed instructions content\n contextDirectories: contextDirectories,\n configDirectory: configDir,\n // Command-specific options with defaults\n commit: {\n cached: options.commit?.cached ?? KODRDRIV_DEFAULTS.commit.cached, // Might be undefined if not commit command\n sendit: options.commit?.sendit ?? KODRDRIV_DEFAULTS.commit.sendit,\n messageLimit: options.commit?.messageLimit ?? KODRDRIV_DEFAULTS.commit.messageLimit,\n context: options.commit?.context,\n },\n release: {\n from: options.release?.from ?? KODRDRIV_DEFAULTS.release.from,\n to: options.release?.to ?? KODRDRIV_DEFAULTS.release.to,\n messageLimit: options.release?.messageLimit ?? KODRDRIV_DEFAULTS.release.messageLimit,\n context: options.release?.context,\n },\n excludedPatterns: options.excludedPatterns ?? KODRDRIV_DEFAULTS.excludedPatterns,\n };\n\n // Final validation against the MainConfig shape (optional, cardigantime might handle it)\n // You could potentially use ConfigShape.parse(finalConfig) here if needed\n\n return finalConfig;\n}\n\n// Export for testing\nexport function validateCommand(commandName: string): string {\n if (!ALLOWED_COMMANDS.includes(commandName)) {\n throw new Error(`Invalid command: ${commandName}, allowed commands: ${ALLOWED_COMMANDS.join(', ')}`);\n }\n return commandName;\n}\n\nasync function validateConfigDir(configDir: string): Promise<string> {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.info });\n\n // Make sure the config directory is absolute\n const absoluteConfigDir = path.isAbsolute(configDir) ?\n configDir :\n path.resolve(process.cwd(), configDir);\n\n // Create the config directory if it doesn't exist\n try {\n if (!(await storage.exists(absoluteConfigDir))) {\n logger.info(`Creating config directory: ${absoluteConfigDir}`);\n await storage.createDirectory(absoluteConfigDir);\n } else if (!(await storage.isDirectory(absoluteConfigDir))) {\n throw new Error(`Config directory is not a directory: ${absoluteConfigDir}`);\n } else if (!(await storage.isDirectoryWritable(absoluteConfigDir))) {\n throw new Error(`Config directory is not writable: ${absoluteConfigDir}`);\n }\n } catch (error: any) {\n logger.error(`Failed to validate or create config directory: ${absoluteConfigDir}`, error);\n throw new Error(`Failed to validate or create config directory: ${absoluteConfigDir}: ${error.message}`);\n }\n\n return absoluteConfigDir;\n}\n\n// Export for testing\nexport async function validateContextDirectories(contextDirectories: string[]): Promise<string[]> {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.info });\n\n // Filter out directories that don't exist\n const validDirectories = [];\n\n for (const dir of contextDirectories) {\n try {\n if (await storage.isDirectoryReadable(dir)) {\n validDirectories.push(dir);\n } else {\n logger.warn(`Directory not readable: ${dir}`);\n }\n } catch (error: any) {\n logger.warn(`Error validating directory ${dir}: ${error.message}`);\n }\n }\n\n return validDirectories;\n}\n\n// Updated to handle reading the file content\n// Export for testing\nexport async function validateAndReadInstructions(instructionsPath: string): Promise<string> {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.info });\n try {\n // Assume it's a file path first\n if (await storage.isFileReadable(instructionsPath)) {\n logger.debug(`Reading instructions from file: ${instructionsPath}`);\n return storage.readFile(instructionsPath, DEFAULT_CHARACTER_ENCODING);\n } else {\n // If not a readable file, assume it might be the content itself (e.g., from config file)\n logger.debug(`Using provided instructions string directly.`);\n return instructionsPath; // Return the string as is\n }\n } catch (error: any) {\n logger.error('Error reading instructions file %s: %s', instructionsPath, error.message);\n // Decide how to handle error: throw, return default, etc.\n // Returning default for now, but might need adjustment\n logger.warn('Falling back to default instructions path due to error.');\n // Re-read the default file path if the provided one failed\n if (DEFAULT_INSTRUCTIONS_DIR && await storage.isFileReadable(DEFAULT_INSTRUCTIONS_DIR)) {\n return storage.readFile(DEFAULT_INSTRUCTIONS_DIR, DEFAULT_CHARACTER_ENCODING);\n }\n throw new Error(`Failed to read instructions from ${instructionsPath} or default location.`);\n }\n}"],"names":["z","object","dryRun","boolean","optional","verbose","debug","overrides","openaiApiKey","string","model","contextDirectories","array","instructions","configDir","cached","sendit","from","to","excludedPatterns","context","messageLimit","number","transformCliArgs","finalCliArgs","transformedCliArgs","undefined","configDirectory","commit","release","configure","cardigantime","logger","getLogger","program","Command","name","PROGRAM_NAME","summary","description","version","VERSION","commandConfig","getCliConfig","JSON","stringify","fileValues","read","validate","partialConfig","KODRDRIV_DEFAULTS","config","validateAndProcessOptions","secureConfig","validateAndProcessSecureOptions","addSharedOptions","command","option","commitCommand","releaseCommand","parse","cliArgs","opts","commandName","DEFAULT_COMMAND","commandOptions","args","length","ALLOWED_COMMANDS","includes","validateCommand","process","env","OPENAI_API_KEY","Error","options","validateContextDirectories","instructionsPathOrContent","validateAndReadInstructions","validateConfigDir","finalConfig","join","storage","Storage","log","info","absoluteConfigDir","path","isAbsolute","resolve","cwd","exists","createDirectory","isDirectory","isDirectoryWritable","error","message","validDirectories","dir","isDirectoryReadable","push","warn","instructionsPath","isFileReadable","readFile","DEFAULT_CHARACTER_ENCODING","DEFAULT_INSTRUCTIONS_DIR"],"mappings":";;;;;;;AAS2BA,CAAEC,CAAAA,MAAM,CAAC;IAChCC,MAAQF,EAAAA,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC5BC,OAASL,EAAAA,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC7BE,KAAON,EAAAA,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC3BG,SAAWP,EAAAA,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC/BI,YAAcR,EAAAA,CAAAA,CAAES,MAAM,EAAA,CAAGL,QAAQ,EAAA;IACjCM,KAAOV,EAAAA,CAAAA,CAAES,MAAM,EAAA,CAAGL,QAAQ,EAAA;AAC1BO,IAAAA,kBAAAA,EAAoBX,EAAEY,KAAK,CAACZ,CAAES,CAAAA,MAAM,IAAIL,QAAQ,EAAA;IAChDS,YAAcb,EAAAA,CAAAA,CAAES,MAAM,EAAA,CAAGL,QAAQ,EAAA;IACjCU,SAAWd,EAAAA,CAAAA,CAAES,MAAM,EAAA,CAAGL,QAAQ,EAAA;IAC9BW,MAAQf,EAAAA,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC5BY,MAAQhB,EAAAA,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC5Ba,IAAMjB,EAAAA,CAAAA,CAAES,MAAM,EAAA,CAAGL,QAAQ,EAAA;IACzBc,EAAIlB,EAAAA,CAAAA,CAAES,MAAM,EAAA,CAAGL,QAAQ,EAAA;AACvBe,IAAAA,gBAAAA,EAAkBnB,EAAEY,KAAK,CAACZ,CAAES,CAAAA,MAAM,IAAIL,QAAQ,EAAA;IAC9CgB,OAASpB,EAAAA,CAAAA,CAAES,MAAM,EAAA,CAAGL,QAAQ,EAAA;IAC5BiB,YAAcrB,EAAAA,CAAAA,CAAEsB,MAAM,EAAA,CAAGlB,QAAQ;AACrC,CAAG;AAIH;AACO,MAAMmB,mBAAmB,CAACC,YAAAA,GAAAA;AAC7B,IAAA,MAAMC,qBAAsC,EAAC;;IAG7C,IAAID,YAAAA,CAAatB,MAAM,KAAKwB,SAAAA,EAAWD,mBAAmBvB,MAAM,GAAGsB,aAAatB,MAAM;IACtF,IAAIsB,YAAAA,CAAanB,OAAO,KAAKqB,SAAAA,EAAWD,mBAAmBpB,OAAO,GAAGmB,aAAanB,OAAO;IACzF,IAAImB,YAAAA,CAAalB,KAAK,KAAKoB,SAAAA,EAAWD,mBAAmBnB,KAAK,GAAGkB,aAAalB,KAAK;IACnF,IAAIkB,YAAAA,CAAajB,SAAS,KAAKmB,SAAAA,EAAWD,mBAAmBlB,SAAS,GAAGiB,aAAajB,SAAS;IAC/F,IAAIiB,YAAAA,CAAad,KAAK,KAAKgB,SAAAA,EAAWD,mBAAmBf,KAAK,GAAGc,aAAad,KAAK;IACnF,IAAIc,YAAAA,CAAab,kBAAkB,KAAKe,SAAAA,EAAWD,mBAAmBd,kBAAkB,GAAGa,aAAab,kBAAkB;IAC1H,IAAIa,YAAAA,CAAaX,YAAY,KAAKa,SAAAA,EAAWD,mBAAmBZ,YAAY,GAAGW,aAAaX,YAAY;;IAGxG,IAAIW,YAAAA,CAAaV,SAAS,KAAKY,SAAAA,EAAWD,mBAAmBE,eAAe,GAAGH,aAAaV,SAAS;;AAGrG,IAAA,IAAIU,aAAaT,MAAM,KAAKW,aAAaF,YAAaR,CAAAA,MAAM,KAAKU,SAAW,EAAA;QACxED,kBAAmBG,CAAAA,MAAM,GAAG,EAAC;QAC7B,IAAIJ,YAAAA,CAAaT,MAAM,KAAKW,SAAWD,EAAAA,kBAAAA,CAAmBG,MAAM,CAACb,MAAM,GAAGS,YAAAA,CAAaT,MAAM;QAC7F,IAAIS,YAAAA,CAAaR,MAAM,KAAKU,SAAWD,EAAAA,kBAAAA,CAAmBG,MAAM,CAACZ,MAAM,GAAGQ,YAAAA,CAAaR,MAAM;QAC7F,IAAIQ,YAAAA,CAAaH,YAAY,KAAKK,SAAWD,EAAAA,kBAAAA,CAAmBG,MAAM,CAACP,YAAY,GAAGG,YAAAA,CAAaH,YAAY;QAC/G,IAAIG,YAAAA,CAAaJ,OAAO,KAAKM,SAAWD,EAAAA,kBAAAA,CAAmBG,MAAM,CAACR,OAAO,GAAGI,YAAAA,CAAaJ,OAAO;AACpG;;AAGA,IAAA,IAAII,aAAaP,IAAI,KAAKS,aAAaF,YAAaN,CAAAA,EAAE,KAAKQ,SAAW,EAAA;QAClED,kBAAmBI,CAAAA,OAAO,GAAG,EAAC;QAC9B,IAAIL,YAAAA,CAAaP,IAAI,KAAKS,SAAWD,EAAAA,kBAAAA,CAAmBI,OAAO,CAACZ,IAAI,GAAGO,YAAAA,CAAaP,IAAI;QACxF,IAAIO,YAAAA,CAAaN,EAAE,KAAKQ,SAAWD,EAAAA,kBAAAA,CAAmBI,OAAO,CAACX,EAAE,GAAGM,YAAAA,CAAaN,EAAE;QAClF,IAAIM,YAAAA,CAAaJ,OAAO,KAAKM,SAAWD,EAAAA,kBAAAA,CAAmBI,OAAO,CAACT,OAAO,GAAGI,YAAAA,CAAaJ,OAAO;QACjG,IAAII,YAAAA,CAAaH,YAAY,KAAKK,SAAWD,EAAAA,kBAAAA,CAAmBI,OAAO,CAACR,YAAY,GAAGG,YAAAA,CAAaH,YAAY;AACpH;IAEA,IAAIG,YAAAA,CAAaL,gBAAgB,KAAKO,SAAAA,EAAWD,mBAAmBN,gBAAgB,GAAGK,aAAaL,gBAAgB;;IAKpH,OAAOM,kBAAAA;AACX;AAEA;AACO,MAAMK,YAAY,OAAOC,YAAAA,GAAAA;AAC5B,IAAA,MAAMC,MAASC,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAIC,UAAU,IAAIC,OAAAA,EAAAA;;IAGlBD,OACKE,CAAAA,IAAI,CAACC,YAAAA,CAAAA,CACLC,OAAO,CAAC,4DACRC,WAAW,CAAC,0DACZC,CAAAA,CAAAA,OAAO,CAACC,OAAAA,CAAAA;;IAGbP,OAAU,GAAA,MAAMH,YAAaD,CAAAA,SAAS,CAACI,OAAAA,CAAAA;;AAGvC,IAAA,MAAM,CAACV,YAAAA,EAAckB,aAAc,CAAA,GAA2BC,YAAaT,CAAAA,OAAAA,CAAAA;AAC3EF,IAAAA,MAAAA,CAAO1B,KAAK,CAAC,iCAAA,EAAmCsC,KAAKC,SAAS,CAACrB,cAAc,IAAM,EAAA,CAAA,CAAA,CAAA;;AAGnF,IAAA,MAAMC,qBAAsCF,gBAAiBC,CAAAA,YAAAA,CAAAA;AAC7DQ,IAAAA,MAAAA,CAAO1B,KAAK,CAAC,sCAAA,EAAwCsC,KAAKC,SAAS,CAACpB,oBAAoB,IAAM,EAAA,CAAA,CAAA,CAAA;;AAG9F,IAAA,MAAMqB,UAAqB,GAAA,MAAMf,YAAagB,CAAAA,IAAI,CAACvB,YAAAA,CAAAA;AACnD,IAAA,MAAMO,YAAaiB,CAAAA,QAAQ,CAACF,UAAAA,CAAAA,CAAAA;;AAG5B,IAAA,MAAMG,aAAiC,GAAA;AACnC,QAAA,GAAGC,iBAAiB;AACpB,QAAA,GAAGJ,UAAU;AACb,QAAA,GAAGrB;AACP,KAAA,CAAA;;IAGA,MAAM0B,MAAAA,GAAiB,MAAMC,yBAA0BH,CAAAA,aAAAA,CAAAA;AAEvDjB,IAAAA,MAAAA,CAAO3B,OAAO,CAAC,yBAAA,EAA2BuC,KAAKC,SAAS,CAACM,QAAQ,IAAM,EAAA,CAAA,CAAA,CAAA;AAEvE,IAAA,MAAME,eAA6B,MAAMC,+BAAAA,EAAAA;IAEzC,OAAO;AAACH,QAAAA,MAAAA;AAAQE,QAAAA,YAAAA;AAAcX,QAAAA;AAAc,KAAA;AAChD;AAEA;AACA,SAASC,aAAaT,OAAgB,EAAA;AAElC,IAAA,MAAMqB,mBAAmB,CAACC,OAAAA,GAAAA;AACtBA,QAAAA,OAAAA,CACKC,MAAM,CAAC,WAAa,EAAA,wCAAA,CAAA;SACpBA,MAAM,CAAC,WAAa,EAAA,wBAAA,CAAA,CACpBA,MAAM,CAAC,SAAW,EAAA,sBAAA,CAAA,CAClBA,MAAM,CAAC,aAAe,EAAA,kBAAA,CAAA,CACtBA,MAAM,CAAC,iBAAmB,EAAA,qBAAA,CAAA,CAC1BA,MAAM,CAAC,mDAAqD,EAAA,iCAAA,CAAA,CAC5DA,MAAM,CAAC,2BAA6B,EAAA,yBAAA,CAAA,CACpCA,MAAM,CAAC,0BAA4B,EAAA,yBAAA,CAAA;AACnCA,SAAAA,MAAM,CAAC,wCAA0C,EAAA,gCAAA,CAAA;AAC1D,KAAA;;IAGA,MAAMC,aAAAA,GAAgBxB,QACjBsB,OAAO,CAAC,UACRC,MAAM,CAAC,UAAY,EAAA,iBAAA,CAAA,CACnBA,MAAM,CAAC,YAAY,+CACnBA,CAAAA,CAAAA,MAAM,CAAC,qBAAuB,EAAA,gCAAA,CAAA,CAC9BA,MAAM,CAAC,gCAAA,EAAkC,0CACzClB,CAAAA,CAAAA,WAAW,CAAC,uBAAA,CAAA;IACjBgB,gBAAiBG,CAAAA,aAAAA,CAAAA;AAEjB,IAAA,MAAMC,iBAAiBzB,OAClBsB,CAAAA,OAAO,CAAC,SACRC,CAAAA,CAAAA,MAAM,CAAC,eAAiB,EAAA,uCAAA,CAAA,CACxBA,MAAM,CAAC,aAAa,qCACpBA,CAAAA,CAAAA,MAAM,CAAC,qBAAuB,EAAA,gCAAA,CAAA,CAC9BlB,WAAW,CAAC,wBAAA,CAAA;IACjBgB,gBAAiBI,CAAAA,cAAAA,CAAAA;AAEjBzB,IAAAA,OAAAA,CAAQ0B,KAAK,EAAA;AAEb,IAAA,MAAMC,OAAiB3B,GAAAA,OAAAA,CAAQ4B,IAAI,EAAA,CAAA;;AAGnC,IAAA,IAAIC,WAAcC,GAAAA,eAAAA;IAClB,IAAIC,cAAAA,GAAiC,EAAC,CAAA;AAEtC,IAAA,IAAI/B,OAAQgC,CAAAA,IAAI,CAACC,MAAM,GAAG,CAAA,IAAKC,gBAAiBC,CAAAA,QAAQ,CAACnC,OAAAA,CAAQgC,IAAI,CAAC,EAAE,CAAG,EAAA;QACvEH,WAAc7B,GAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAE,CAAA;AAC7B,QAAA,IAAIH,WAAgB,KAAA,QAAA,IAAYL,aAAcI,CAAAA,IAAI,EAAE;AAChDG,YAAAA,cAAAA,GAAiBP,cAAcI,IAAI,EAAA;AACvC,SAAA,MAAO,IAAIC,WAAAA,KAAgB,SAAaJ,IAAAA,cAAAA,CAAeG,IAAI,EAAE;AACzDG,YAAAA,cAAAA,GAAiBN,eAAeG,IAAI,EAAA;AACxC;AACJ;IAEAQ,eAAgBP,CAAAA,WAAAA,CAAAA;;AAGhB,IAAA,MAAMvC,YAAe,GAAA;AAAE,QAAA,GAAGqC,OAAO;AAAE,QAAA,GAAGI;AAAe,KAAA;AACrD,IAAA,MAAMvB,aAAgB,GAAA;AAAEqB,QAAAA;AAAY,KAAA;IACpC,OAAO;AAACvC,QAAAA,YAAAA;AAAckB,QAAAA;AAAc,KAAA;AACxC;AAEA,eAAeY,+BAAAA,GAAAA;AACX,IAAA,IAAI,CAACiB,OAAAA,CAAQC,GAAG,CAACC,cAAc,EAAE;AAC7B,QAAA,MAAM,IAAIC,KAAM,CAAA,iGAAA,CAAA;AACpB;;AAEA,IAAA,MAAMlE,YAAe+D,GAAAA,OAAAA,CAAQC,GAAG,CAACC,cAAc;AAE/C,IAAA,MAAMpB,YAA6B,GAAA;QAC/B7C,YAAcA,EAAAA;AAClB,KAAA;IAEA,OAAO6C,YAAAA;AACX;AAEA;AACA,eAAeD,0BAA0BuB,OAAwB,EAAA;AAoB7CA,IAAAA,IAAAA,eAAAA,EACAA,gBACMA,EAAAA,gBAAAA,EACLA,gBAGHA,EAAAA,gBAAAA,EACFA,mBACUA,iBACLA,EAAAA,iBAAAA;AA3BjB,IAAA,MAAMhE,qBAAqB,MAAMiE,0BAAAA,CAA2BD,QAAQhE,kBAAkB,IAAIuC,kBAAkBvC,kBAAkB,CAAA;AAC9H,IAAA,MAAMkE,yBAA4BF,GAAAA,OAAAA,CAAQ9D,YAAY,IAAIqC,kBAAkBrC,YAAY;IACxF,MAAMA,YAAAA,GAAe,MAAMiE,2BAA4BD,CAAAA,yBAAAA,CAAAA;AACvD,IAAA,MAAM/D,SAAY6D,GAAAA,OAAAA,CAAQhD,eAAe,IAAIuB,kBAAkBvB,eAAe;IAC9E,MAAMoD,iBAAAA,CAAkBjE;QAIZ6D,eACCA,EAAAA,gBAAAA,EACFA,gBACIA,kBACJA,EAAAA,cAAAA,EAMKA,wBACAA,sBACMA,EAAAA,4BAAAA,EAIRA,qBACFA,EAAAA,mBAAAA,EACUA,6BAGAA,EAAAA,yBAAAA;;AAtBtB,IAAA,MAAMK,WAAsB,GAAA;QACxB9E,MAAQyE,EAAAA,CAAAA,kBAAAA,OAAQzE,CAAAA,MAAM,cAAdyE,eAAAA,KAAAA,MAAAA,GAAAA,eAAAA,GAAkBzB,kBAAkBhD,MAAM;QAClDG,OAASsE,EAAAA,CAAAA,mBAAAA,OAAQtE,CAAAA,OAAO,cAAfsE,gBAAAA,KAAAA,MAAAA,GAAAA,gBAAAA,GAAmBzB,kBAAkB7C,OAAO;QACrDC,KAAOqE,EAAAA,CAAAA,iBAAAA,OAAQrE,CAAAA,KAAK,cAAbqE,cAAAA,KAAAA,MAAAA,GAAAA,cAAAA,GAAiBzB,kBAAkB5C,KAAK;QAC/CC,SAAWoE,EAAAA,CAAAA,qBAAAA,OAAQpE,CAAAA,SAAS,cAAjBoE,kBAAAA,KAAAA,MAAAA,GAAAA,kBAAAA,GAAqBzB,kBAAkB3C,SAAS;QAC3DG,KAAOiE,EAAAA,CAAAA,iBAAAA,OAAQjE,CAAAA,KAAK,cAAbiE,cAAAA,KAAAA,MAAAA,GAAAA,cAAAA,GAAiBzB,kBAAkBxC,KAAK;QAC/CG,YAAcA,EAAAA,YAAAA;QACdF,kBAAoBA,EAAAA,kBAAAA;QACpBgB,eAAiBb,EAAAA,SAAAA;;QAEjBc,MAAQ,EAAA;AACJb,YAAAA,MAAAA,EAAQ4D,CAAAA,sBAAAA,GAAAA,CAAAA,eAAAA,GAAAA,OAAAA,CAAQ/C,MAAM,MAAd+C,IAAAA,IAAAA,eAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,eAAgB5D,CAAAA,MAAM,cAAtB4D,sBAAAA,KAAAA,MAAAA,GAAAA,sBAAAA,GAA0BzB,iBAAkBtB,CAAAA,MAAM,CAACb,MAAM;AACjEC,YAAAA,MAAAA,EAAQ2D,CAAAA,sBAAAA,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQ/C,MAAM,MAAd+C,IAAAA,IAAAA,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,gBAAgB3D,CAAAA,MAAM,cAAtB2D,sBAAAA,KAAAA,MAAAA,GAAAA,sBAAAA,GAA0BzB,iBAAkBtB,CAAAA,MAAM,CAACZ,MAAM;AACjEK,YAAAA,YAAAA,EAAcsD,CAAAA,4BAAAA,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQ/C,MAAM,MAAd+C,IAAAA,IAAAA,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,gBAAgBtD,CAAAA,YAAY,cAA5BsD,4BAAAA,KAAAA,MAAAA,GAAAA,4BAAAA,GAAgCzB,iBAAkBtB,CAAAA,MAAM,CAACP,YAAY;AACnFD,YAAAA,OAAO,GAAEuD,gBAAAA,GAAAA,OAAAA,CAAQ/C,MAAM,MAAd+C,IAAAA,IAAAA,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAgBvD;AAC7B,SAAA;QACAS,OAAS,EAAA;AACLZ,YAAAA,IAAAA,EAAM0D,CAAAA,qBAAAA,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQ9C,OAAO,MAAf8C,IAAAA,IAAAA,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,gBAAiB1D,CAAAA,IAAI,cAArB0D,qBAAAA,KAAAA,MAAAA,GAAAA,qBAAAA,GAAyBzB,iBAAkBrB,CAAAA,OAAO,CAACZ,IAAI;AAC7DC,YAAAA,EAAAA,EAAIyD,CAAAA,mBAAAA,GAAAA,CAAAA,iBAAAA,GAAAA,OAAAA,CAAQ9C,OAAO,MAAf8C,IAAAA,IAAAA,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAiBzD,CAAAA,EAAE,cAAnByD,mBAAAA,KAAAA,MAAAA,GAAAA,mBAAAA,GAAuBzB,iBAAkBrB,CAAAA,OAAO,CAACX,EAAE;AACvDG,YAAAA,YAAAA,EAAcsD,CAAAA,6BAAAA,GAAAA,CAAAA,iBAAAA,GAAAA,OAAAA,CAAQ9C,OAAO,MAAf8C,IAAAA,IAAAA,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAiBtD,CAAAA,YAAY,cAA7BsD,6BAAAA,KAAAA,MAAAA,GAAAA,6BAAAA,GAAiCzB,iBAAkBrB,CAAAA,OAAO,CAACR,YAAY;AACrFD,YAAAA,OAAO,GAAEuD,iBAAAA,GAAAA,OAAAA,CAAQ9C,OAAO,MAAf8C,IAAAA,IAAAA,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,kBAAiBvD;AAC9B,SAAA;QACAD,gBAAkBwD,EAAAA,CAAAA,4BAAAA,OAAQxD,CAAAA,gBAAgB,cAAxBwD,yBAAAA,KAAAA,MAAAA,GAAAA,yBAAAA,GAA4BzB,kBAAkB/B;AACpE,KAAA;;;IAKA,OAAO6D,WAAAA;AACX;AAEA;AACO,SAASV,gBAAgBP,WAAmB,EAAA;AAC/C,IAAA,IAAI,CAACK,gBAAAA,CAAiBC,QAAQ,CAACN,WAAc,CAAA,EAAA;QACzC,MAAM,IAAIW,KAAM,CAAA,CAAC,iBAAiB,EAAEX,WAAY,CAAA,oBAAoB,EAAEK,gBAAAA,CAAiBa,IAAI,CAAC,IAAO,CAAA,CAAA,CAAA,CAAA;AACvG;IACA,OAAOlB,WAAAA;AACX;AAEA,eAAegB,kBAAkBjE,SAAiB,EAAA;AAC9C,IAAA,MAAMkB,MAASC,GAAAA,SAAAA,EAAAA;IACf,MAAMiD,OAAAA,GAAUC,MAAc,CAAC;AAAEC,QAAAA,GAAAA,EAAKpD,OAAOqD;AAAK,KAAA,CAAA;;IAGlD,MAAMC,iBAAAA,GAAoBC,IAAKC,CAAAA,UAAU,CAAC1E,SAAAA,CAAAA,GACtCA,SACAyE,GAAAA,IAAAA,CAAKE,OAAO,CAAClB,OAAQmB,CAAAA,GAAG,EAAI5E,EAAAA,SAAAA,CAAAA;;IAGhC,IAAI;AACA,QAAA,IAAI,CAAE,MAAMoE,OAAQS,CAAAA,MAAM,CAACL,iBAAqB,CAAA,EAAA;AAC5CtD,YAAAA,MAAAA,CAAOqD,IAAI,CAAC,CAAC,2BAA2B,EAAEC,iBAAmB,CAAA,CAAA,CAAA;YAC7D,MAAMJ,OAAAA,CAAQU,eAAe,CAACN,iBAAAA,CAAAA;AAClC,SAAA,MAAO,IAAI,CAAE,MAAMJ,OAAQW,CAAAA,WAAW,CAACP,iBAAqB,CAAA,EAAA;AACxD,YAAA,MAAM,IAAIZ,KAAAA,CAAM,CAAC,qCAAqC,EAAEY,iBAAmB,CAAA,CAAA,CAAA;AAC/E,SAAA,MAAO,IAAI,CAAE,MAAMJ,OAAQY,CAAAA,mBAAmB,CAACR,iBAAqB,CAAA,EAAA;AAChE,YAAA,MAAM,IAAIZ,KAAAA,CAAM,CAAC,kCAAkC,EAAEY,iBAAmB,CAAA,CAAA,CAAA;AAC5E;AACJ,KAAA,CAAE,OAAOS,KAAY,EAAA;AACjB/D,QAAAA,MAAAA,CAAO+D,KAAK,CAAC,CAAC,+CAA+C,EAAET,mBAAmB,EAAES,KAAAA,CAAAA;QACpF,MAAM,IAAIrB,KAAM,CAAA,CAAC,+CAA+C,EAAEY,kBAAkB,EAAE,EAAES,KAAMC,CAAAA,OAAO,CAAE,CAAA,CAAA;AAC3G;IAEA,OAAOV,iBAAAA;AACX;AAEA;AACO,eAAeV,2BAA2BjE,kBAA4B,EAAA;AACzE,IAAA,MAAMqB,MAASC,GAAAA,SAAAA,EAAAA;IACf,MAAMiD,OAAAA,GAAUC,MAAc,CAAC;AAAEC,QAAAA,GAAAA,EAAKpD,OAAOqD;AAAK,KAAA,CAAA;;AAGlD,IAAA,MAAMY,mBAAmB,EAAE;IAE3B,KAAK,MAAMC,OAAOvF,kBAAoB,CAAA;QAClC,IAAI;AACA,YAAA,IAAI,MAAMuE,OAAAA,CAAQiB,mBAAmB,CAACD,GAAM,CAAA,EAAA;AACxCD,gBAAAA,gBAAAA,CAAiBG,IAAI,CAACF,GAAAA,CAAAA;aACnB,MAAA;AACHlE,gBAAAA,MAAAA,CAAOqE,IAAI,CAAC,CAAC,wBAAwB,EAAEH,GAAK,CAAA,CAAA,CAAA;AAChD;AACJ,SAAA,CAAE,OAAOH,KAAY,EAAA;YACjB/D,MAAOqE,CAAAA,IAAI,CAAC,CAAC,2BAA2B,EAAEH,IAAI,EAAE,EAAEH,KAAMC,CAAAA,OAAO,CAAE,CAAA,CAAA;AACrE;AACJ;IAEA,OAAOC,gBAAAA;AACX;AAEA;AACA;AACO,eAAenB,4BAA4BwB,gBAAwB,EAAA;AACtE,IAAA,MAAMtE,MAASC,GAAAA,SAAAA,EAAAA;IACf,MAAMiD,OAAAA,GAAUC,MAAc,CAAC;AAAEC,QAAAA,GAAAA,EAAKpD,OAAOqD;AAAK,KAAA,CAAA;IAClD,IAAI;;AAEA,QAAA,IAAI,MAAMH,OAAAA,CAAQqB,cAAc,CAACD,gBAAmB,CAAA,EAAA;AAChDtE,YAAAA,MAAAA,CAAO1B,KAAK,CAAC,CAAC,gCAAgC,EAAEgG,gBAAkB,CAAA,CAAA,CAAA;YAClE,OAAOpB,OAAAA,CAAQsB,QAAQ,CAACF,gBAAkBG,EAAAA,0BAAAA,CAAAA;SACvC,MAAA;;AAEHzE,YAAAA,MAAAA,CAAO1B,KAAK,CAAC,CAAC,4CAA4C,CAAC,CAAA;AAC3D,YAAA,OAAOgG;AACX;AACJ,KAAA,CAAE,OAAOP,KAAY,EAAA;AACjB/D,QAAAA,MAAAA,CAAO+D,KAAK,CAAC,wCAA0CO,EAAAA,gBAAAA,EAAkBP,MAAMC,OAAO,CAAA;;;AAGtFhE,QAAAA,MAAAA,CAAOqE,IAAI,CAAC,yDAAA,CAAA;;AAEZ,QAAA,IAAgC,MAAMnB,OAAQqB,CAAAA,cAAc,CAACG,wBAA2B,CAAA,EAAA;YACpF,OAAOxB,OAAAA,CAAQsB,QAAQ,CAACE,wBAA0BD,EAAAA,0BAAAA,CAAAA;AACtD;AACA,QAAA,MAAM,IAAI/B,KAAM,CAAA,CAAC,iCAAiC,EAAE4B,gBAAAA,CAAiB,qBAAqB,CAAC,CAAA;AAC/F;AACJ;;;;"}
|
|
1
|
+
{"version":3,"file":"arguments.js","sources":["../src/arguments.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { ALLOWED_COMMANDS, DEFAULT_CHARACTER_ENCODING, DEFAULT_COMMAND, DEFAULT_INSTRUCTIONS_DIR, KODRDRIV_DEFAULTS, PROGRAM_NAME, VERSION } from \"./constants\";\nimport { getLogger } from \"./logging\";\nimport { CommandConfig, Config, SecureConfig } from './types'; // Import the Config type from main.ts\nimport * as Storage from \"./util/storage\";\n\nexport const InputSchema = z.object({\n dryRun: z.boolean().optional(),\n verbose: z.boolean().optional(),\n debug: z.boolean().optional(),\n overrides: z.boolean().optional(),\n openaiApiKey: z.string().optional(),\n model: z.string().optional(),\n contextDirectories: z.array(z.string()).optional(),\n instructions: z.string().optional(),\n configDir: z.string().optional(),\n cached: z.boolean().optional(),\n add: z.boolean().optional(),\n sendit: z.boolean().optional(),\n from: z.string().optional(),\n to: z.string().optional(),\n excludedPatterns: z.array(z.string()).optional(),\n context: z.string().optional(),\n messageLimit: z.number().optional(),\n mergeMethod: z.enum(['merge', 'squash', 'rebase']).optional(),\n scopeRoots: z.string().optional(),\n workspaceFile: z.string().optional(),\n});\n\nexport type Input = z.infer<typeof InputSchema>;\n\n// Function to transform flat CLI args into nested Config structure\nexport const transformCliArgs = (finalCliArgs: Input): Partial<Config> => {\n const transformedCliArgs: Partial<Config> = {};\n\n // Direct mappings from Input to Config\n if (finalCliArgs.dryRun !== undefined) transformedCliArgs.dryRun = finalCliArgs.dryRun;\n if (finalCliArgs.verbose !== undefined) transformedCliArgs.verbose = finalCliArgs.verbose;\n if (finalCliArgs.debug !== undefined) transformedCliArgs.debug = finalCliArgs.debug;\n if (finalCliArgs.overrides !== undefined) transformedCliArgs.overrides = finalCliArgs.overrides;\n if (finalCliArgs.model !== undefined) transformedCliArgs.model = finalCliArgs.model;\n if (finalCliArgs.contextDirectories !== undefined) transformedCliArgs.contextDirectories = finalCliArgs.contextDirectories;\n if (finalCliArgs.instructions !== undefined) transformedCliArgs.instructions = finalCliArgs.instructions;\n\n // Map configDir (CLI) to configDirectory (Cardigantime standard)\n if (finalCliArgs.configDir !== undefined) transformedCliArgs.configDirectory = finalCliArgs.configDir;\n\n // Nested mappings for 'commit' options\n if (finalCliArgs.cached !== undefined || finalCliArgs.sendit !== undefined || finalCliArgs.add !== undefined) {\n transformedCliArgs.commit = {};\n if (finalCliArgs.add !== undefined) transformedCliArgs.commit.add = finalCliArgs.add;\n if (finalCliArgs.cached !== undefined) transformedCliArgs.commit.cached = finalCliArgs.cached;\n if (finalCliArgs.sendit !== undefined) transformedCliArgs.commit.sendit = finalCliArgs.sendit;\n if (finalCliArgs.messageLimit !== undefined) transformedCliArgs.commit.messageLimit = finalCliArgs.messageLimit;\n if (finalCliArgs.context !== undefined) transformedCliArgs.commit.context = finalCliArgs.context;\n }\n\n // Nested mappings for 'release' options\n if (finalCliArgs.from !== undefined || finalCliArgs.to !== undefined) {\n transformedCliArgs.release = {};\n if (finalCliArgs.from !== undefined) transformedCliArgs.release.from = finalCliArgs.from;\n if (finalCliArgs.to !== undefined) transformedCliArgs.release.to = finalCliArgs.to;\n if (finalCliArgs.context !== undefined) transformedCliArgs.release.context = finalCliArgs.context;\n if (finalCliArgs.messageLimit !== undefined) transformedCliArgs.release.messageLimit = finalCliArgs.messageLimit;\n }\n\n // Nested mappings for 'publish' options\n if (finalCliArgs.mergeMethod !== undefined) {\n transformedCliArgs.publish = {};\n if (finalCliArgs.mergeMethod !== undefined) transformedCliArgs.publish.mergeMethod = finalCliArgs.mergeMethod;\n }\n\n // Nested mappings for 'link' and 'unlink' options (both use the same configuration)\n if (finalCliArgs.scopeRoots !== undefined || finalCliArgs.workspaceFile !== undefined) {\n transformedCliArgs.link = {};\n if (finalCliArgs.scopeRoots !== undefined) {\n try {\n transformedCliArgs.link.scopeRoots = JSON.parse(finalCliArgs.scopeRoots);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n throw new Error(`Invalid JSON for scope-roots: ${finalCliArgs.scopeRoots}`);\n }\n }\n if (finalCliArgs.workspaceFile !== undefined) transformedCliArgs.link.workspaceFile = finalCliArgs.workspaceFile;\n }\n\n if (finalCliArgs.excludedPatterns !== undefined) transformedCliArgs.excludedPatterns = finalCliArgs.excludedPatterns;\n\n\n // Note: finalCliArgs.openaiApiKey is intentionally omitted here as it belongs to SecureConfig\n\n return transformedCliArgs;\n}\n\n// Update configure signature to accept cardigantime\nexport const configure = async (cardigantime: any): Promise<[Config, SecureConfig, CommandConfig]> => {\n const logger = getLogger();\n let program = new Command();\n\n // Configure program basics\n program\n .name(PROGRAM_NAME)\n .summary('Create Intelligent Release Notes or Change Logs from Git')\n .description('Create Intelligent Release Notes or Change Logs from Git')\n .version(VERSION);\n\n // Let cardigantime add its arguments first\n program = await cardigantime.configure(program);\n\n // Get CLI arguments using the new function\n const [finalCliArgs, commandConfig]: [Input, CommandConfig] = getCliConfig(program);\n logger.debug('Loaded Command Line Options: %s', JSON.stringify(finalCliArgs, null, 2));\n\n // Transform the flat CLI args using the new function\n const transformedCliArgs: Partial<Config> = transformCliArgs(finalCliArgs);\n logger.debug('Transformed CLI Args for merging: %s', JSON.stringify(transformedCliArgs, null, 2));\n\n // Get values from config file\n // Temporary workaround: Read config file manually due to cardigantime parsing issue\n let fileValues: Partial<Config> = {};\n\n // Force manual config reading for now\n const configPath = path.join(process.cwd(), '.kodrdriv', 'config.yaml');\n const storage = Storage.create({ log: logger.info });\n const exists = await storage.exists(configPath);\n if (exists) {\n const yaml = await import('js-yaml');\n const configContent = await storage.readFile(configPath, 'utf-8');\n fileValues = yaml.load(configContent) as Partial<Config>;\n // Add the configDirectory since it's not in the config file but is required\n if (!fileValues.configDirectory) {\n fileValues.configDirectory = '.kodrdriv';\n }\n }\n\n // Temporarily skip cardigantime validation due to parsing issues\n // await cardigantime.validate(fileValues);\n\n // Merge configurations: Defaults -> File -> CLI\n // Properly merge the link section to preserve scope roots from config file\n const mergedLink = {\n ...KODRDRIV_DEFAULTS.link,\n ...fileValues.link,\n ...transformedCliArgs.link,\n };\n\n const partialConfig: Partial<Config> = {\n ...KODRDRIV_DEFAULTS, // Start with Kodrdriv defaults\n ...fileValues, // Apply file values (overwrites defaults)\n ...transformedCliArgs, // Apply CLI args last (highest precedence)\n link: mergedLink, // Override with properly merged link section\n } as Partial<Config>; // Cast to Partial<Config> initially\n\n // Specific validation and processing after merge\n const config: Config = await validateAndProcessOptions(partialConfig);\n\n logger.verbose('Final configuration: %s', JSON.stringify(config, null, 2));\n\n const secureConfig: SecureConfig = await validateAndProcessSecureOptions();\n\n return [config, secureConfig, commandConfig];\n}\n\n// Function to handle CLI argument parsing and processing\nexport function getCliConfig(program: Command): [Input, CommandConfig] {\n\n const addSharedOptions = (command: Command) => {\n command\n .option('--dry-run', 'perform a dry run without saving files') // Removed default, will be handled by merging\n .option('--verbose', 'enable verbose logging')\n .option('--debug', 'enable debug logging')\n .option('--overrides', 'enable overrides')\n .option('--model <model>', 'OpenAI model to use')\n .option('-d, --context-directories [contextDirectories...]', 'directories to scan for context')\n .option('-i, --instructions <file>', 'instructions for the AI')\n .option('--config-dir <configDir>', 'configuration directory') // Keep config-dir for specifying location\n .option('--excluded-paths [excludedPatterns...]', 'paths to exclude from the diff');\n }\n\n // Add subcommands\n const commitCommand = program\n .command('commit')\n .option('--cached', 'use cached diff')\n .option('--add', 'add all changes before committing')\n .option('--sendit', 'Commit with the message generated. No review.')\n .option('--context <context>', 'context for the commit message')\n .option('--message-limit <messageLimit>', 'limit the number of messages to generate')\n .description('Generate commit notes');\n addSharedOptions(commitCommand);\n\n const releaseCommand = program\n .command('release')\n .option('--from <from>', 'branch to generate release notes from')\n .option('--to <to>', 'branch to generate release notes to')\n .option('--context <context>', 'context for the commit message')\n .description('Generate release notes');\n addSharedOptions(releaseCommand);\n\n const publishCommand = program\n .command('publish')\n .option('--merge-method <method>', 'method to merge PR (merge, squash, rebase)', 'squash')\n .description('Publish a release');\n addSharedOptions(publishCommand);\n\n const linkCommand = program\n .command('link')\n .option('--scope-roots <scopeRoots>', 'JSON mapping of scopes to root directories (e.g., \\'{\"@company\": \"../\"}\\')')\n .option('--workspace-file <workspaceFile>', 'path to workspace file', 'pnpm-workspace.yaml')\n .description('Manage pnpm workspace links for local development');\n addSharedOptions(linkCommand);\n\n const unlinkCommand = program\n .command('unlink')\n .option('--scope-roots <scopeRoots>', 'JSON mapping of scopes to root directories (e.g., \\'{\"@company\": \"../\"}\\')')\n .option('--workspace-file <workspaceFile>', 'path to workspace file', 'pnpm-workspace.yaml')\n .description('Remove pnpm workspace links and rebuild dependencies');\n addSharedOptions(unlinkCommand);\n\n program.parse();\n\n const cliArgs: Input = program.opts<Input>(); // Get all opts initially\n\n // Determine which command is being run\n let commandName = DEFAULT_COMMAND;\n let commandOptions: Partial<Input> = {}; // Store specific command options\n\n if (program.args.length > 0) {\n commandName = program.args[0];\n }\n\n validateCommand(commandName);\n\n // Only proceed with command-specific options if validation passed\n if (ALLOWED_COMMANDS.includes(commandName)) {\n if (commandName === 'commit' && commitCommand.opts) {\n commandOptions = commitCommand.opts<Partial<Input>>();\n } else if (commandName === 'release' && releaseCommand.opts) {\n commandOptions = releaseCommand.opts<Partial<Input>>();\n } else if (commandName === 'publish' && publishCommand.opts) {\n commandOptions = publishCommand.opts<Partial<Input>>();\n } else if (commandName === 'link' && linkCommand.opts) {\n commandOptions = linkCommand.opts<Partial<Input>>();\n } else if (commandName === 'unlink' && unlinkCommand.opts) {\n commandOptions = unlinkCommand.opts<Partial<Input>>();\n }\n }\n\n // Include command name in CLI args for merging\n const finalCliArgs = { ...cliArgs, ...commandOptions };\n const commandConfig = { commandName };\n return [finalCliArgs, commandConfig];\n}\n\nexport async function validateAndProcessSecureOptions(): Promise<SecureConfig> {\n if (!process.env.OPENAI_API_KEY) {\n throw new Error('OpenAI API key is required, set OPENAI_API_KEY environment variable or provide --openai-api-key');\n }\n // Prefer CLI key if provided, otherwise use env var\n const openaiApiKey = process.env.OPENAI_API_KEY as string;\n\n const secureConfig: SecureConfig = {\n openaiApiKey: openaiApiKey,\n };\n\n return secureConfig;\n}\n\n// Renamed validation function to reflect its broader role\nexport async function validateAndProcessOptions(options: Partial<Config>): Promise<Config> {\n\n const contextDirectories = await validateContextDirectories(options.contextDirectories || KODRDRIV_DEFAULTS.contextDirectories);\n const instructionsPathOrContent = options.instructions || KODRDRIV_DEFAULTS.instructions;\n const instructions = await validateAndReadInstructions(instructionsPathOrContent);\n const configDir = options.configDirectory || KODRDRIV_DEFAULTS.configDirectory;\n await validateConfigDir(configDir); // Keep validation, but maybe remove return if not used elsewhere\n\n // Ensure all required fields are present and have correct types after merging\n const finalConfig: Config = {\n dryRun: options.dryRun ?? KODRDRIV_DEFAULTS.dryRun,\n verbose: options.verbose ?? KODRDRIV_DEFAULTS.verbose,\n debug: options.debug ?? KODRDRIV_DEFAULTS.debug,\n overrides: options.overrides ?? KODRDRIV_DEFAULTS.overrides,\n model: options.model ?? KODRDRIV_DEFAULTS.model,\n instructions: instructions, // Use processed instructions content\n contextDirectories: contextDirectories,\n configDirectory: configDir,\n // Command-specific options with defaults\n commit: {\n add: options.commit?.add ?? KODRDRIV_DEFAULTS.commit.add,\n cached: options.commit?.cached ?? KODRDRIV_DEFAULTS.commit.cached, // Might be undefined if not commit command\n sendit: options.commit?.sendit ?? KODRDRIV_DEFAULTS.commit.sendit,\n messageLimit: options.commit?.messageLimit ?? KODRDRIV_DEFAULTS.commit.messageLimit,\n context: options.commit?.context,\n },\n release: {\n from: options.release?.from ?? KODRDRIV_DEFAULTS.release.from,\n to: options.release?.to ?? KODRDRIV_DEFAULTS.release.to,\n messageLimit: options.release?.messageLimit ?? KODRDRIV_DEFAULTS.release.messageLimit,\n context: options.release?.context,\n },\n publish: {\n mergeMethod: options.publish?.mergeMethod ?? KODRDRIV_DEFAULTS.publish.mergeMethod,\n dependencyUpdatePatterns: options.publish?.dependencyUpdatePatterns,\n requiredEnvVars: options.publish?.requiredEnvVars ?? KODRDRIV_DEFAULTS.publish.requiredEnvVars,\n },\n link: {\n scopeRoots: options.link?.scopeRoots ?? KODRDRIV_DEFAULTS.link.scopeRoots,\n workspaceFile: options.link?.workspaceFile ?? KODRDRIV_DEFAULTS.link.workspaceFile,\n dryRun: options.link?.dryRun ?? KODRDRIV_DEFAULTS.link.dryRun,\n },\n excludedPatterns: options.excludedPatterns ?? KODRDRIV_DEFAULTS.excludedPatterns,\n };\n\n // Final validation against the MainConfig shape (optional, cardigantime might handle it)\n // You could potentially use ConfigShape.parse(finalConfig) here if needed\n\n return finalConfig;\n}\n\n// Export for testing\nexport function validateCommand(commandName: string): string {\n if (!ALLOWED_COMMANDS.includes(commandName)) {\n throw new Error(`Invalid command: ${commandName}, allowed commands: ${ALLOWED_COMMANDS.join(', ')}`);\n }\n return commandName;\n}\n\nexport async function validateConfigDir(configDir: string): Promise<string> {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.info });\n\n // Make sure the config directory is absolute\n const absoluteConfigDir = path.isAbsolute(configDir) ?\n configDir :\n path.resolve(process.cwd(), configDir);\n\n // Create the config directory if it doesn't exist\n try {\n if (!(await storage.exists(absoluteConfigDir))) {\n logger.info(`Creating config directory: ${absoluteConfigDir}`);\n await storage.createDirectory(absoluteConfigDir);\n } else if (!(await storage.isDirectory(absoluteConfigDir))) {\n throw new Error(`Config directory is not a directory: ${absoluteConfigDir}`);\n } else if (!(await storage.isDirectoryWritable(absoluteConfigDir))) {\n throw new Error(`Config directory is not writable: ${absoluteConfigDir}`);\n }\n } catch (error: any) {\n logger.error(`Failed to validate or create config directory: ${absoluteConfigDir}`, error);\n throw new Error(`Failed to validate or create config directory: ${absoluteConfigDir}: ${error.message}`);\n }\n\n return absoluteConfigDir;\n}\n\n// Export for testing\nexport async function validateContextDirectories(contextDirectories: string[]): Promise<string[]> {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.info });\n\n // Filter out directories that don't exist\n const validDirectories = [];\n\n for (const dir of contextDirectories) {\n try {\n if (await storage.isDirectoryReadable(dir)) {\n validDirectories.push(dir);\n } else {\n logger.warn(`Directory not readable: ${dir}`);\n }\n } catch (error: any) {\n logger.warn(`Error validating directory ${dir}: ${error.message}`);\n }\n }\n\n return validDirectories;\n}\n\n// Updated to handle reading the file content\n// Export for testing\nexport async function validateAndReadInstructions(instructionsPath: string): Promise<string> {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.info });\n try {\n // Assume it's a file path first\n if (await storage.isFileReadable(instructionsPath)) {\n logger.debug(`Reading instructions from file: ${instructionsPath}`);\n return storage.readFile(instructionsPath, DEFAULT_CHARACTER_ENCODING);\n } else {\n // If not a readable file, assume it might be the content itself (e.g., from config file)\n logger.debug(`Using provided instructions string directly.`);\n return instructionsPath; // Return the string as is\n }\n } catch (error: any) {\n logger.error('Error reading instructions file %s: %s', instructionsPath, error.message);\n // Decide how to handle error: throw, return default, etc.\n // Returning default for now, but might need adjustment\n logger.warn('Falling back to default instructions path due to error.');\n // Re-read the default file path if the provided one failed\n if (DEFAULT_INSTRUCTIONS_DIR && await storage.isFileReadable(DEFAULT_INSTRUCTIONS_DIR)) {\n return storage.readFile(DEFAULT_INSTRUCTIONS_DIR, DEFAULT_CHARACTER_ENCODING);\n }\n throw new Error(`Failed to read instructions from ${instructionsPath} or default location.`);\n }\n}"],"names":["z","object","dryRun","boolean","optional","verbose","debug","overrides","openaiApiKey","string","model","contextDirectories","array","instructions","configDir","cached","add","sendit","from","to","excludedPatterns","context","messageLimit","number","mergeMethod","enum","scopeRoots","workspaceFile","transformCliArgs","finalCliArgs","transformedCliArgs","undefined","configDirectory","commit","release","publish","link","JSON","parse","error","Error","configure","cardigantime","logger","getLogger","program","Command","name","PROGRAM_NAME","summary","description","version","VERSION","commandConfig","getCliConfig","stringify","fileValues","configPath","path","join","process","cwd","storage","Storage","log","info","exists","yaml","configContent","readFile","load","mergedLink","KODRDRIV_DEFAULTS","partialConfig","config","validateAndProcessOptions","secureConfig","validateAndProcessSecureOptions","addSharedOptions","command","option","commitCommand","releaseCommand","publishCommand","linkCommand","unlinkCommand","cliArgs","opts","commandName","DEFAULT_COMMAND","commandOptions","args","length","validateCommand","ALLOWED_COMMANDS","includes","env","OPENAI_API_KEY","options","validateContextDirectories","instructionsPathOrContent","validateAndReadInstructions","validateConfigDir","finalConfig","dependencyUpdatePatterns","requiredEnvVars","absoluteConfigDir","isAbsolute","resolve","createDirectory","isDirectory","isDirectoryWritable","message","validDirectories","dir","isDirectoryReadable","push","warn","instructionsPath","isFileReadable","DEFAULT_CHARACTER_ENCODING","DEFAULT_INSTRUCTIONS_DIR"],"mappings":"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"}
|
package/dist/commands/commit.js
CHANGED
|
@@ -12,17 +12,24 @@ import { createCompletion } from '../util/openai.js';
|
|
|
12
12
|
import { stringifyJSON } from '../util/general.js';
|
|
13
13
|
|
|
14
14
|
const execute = async (runConfig)=>{
|
|
15
|
-
var _runConfig_commit, _runConfig_commit1, _runConfig_commit2, _runConfig_commit3, _runConfig_commit4, _runConfig_commit5;
|
|
15
|
+
var _runConfig_commit, _runConfig_commit1, _runConfig_commit2, _runConfig_commit3, _runConfig_commit4, _runConfig_commit5, _runConfig_commit6;
|
|
16
16
|
const logger = getLogger();
|
|
17
17
|
const prompts = create(runConfig.model, runConfig);
|
|
18
|
+
if ((_runConfig_commit = runConfig.commit) === null || _runConfig_commit === void 0 ? void 0 : _runConfig_commit.add) {
|
|
19
|
+
logger.info('Adding all changes to the index...');
|
|
20
|
+
await run('git add -A');
|
|
21
|
+
}
|
|
18
22
|
let diffContent = '';
|
|
19
|
-
let cached = (
|
|
20
|
-
// If
|
|
21
|
-
if ((
|
|
23
|
+
let cached = (_runConfig_commit1 = runConfig.commit) === null || _runConfig_commit1 === void 0 ? void 0 : _runConfig_commit1.cached;
|
|
24
|
+
// If `add` is used, we should always look at staged changes.
|
|
25
|
+
if ((_runConfig_commit2 = runConfig.commit) === null || _runConfig_commit2 === void 0 ? void 0 : _runConfig_commit2.add) {
|
|
26
|
+
cached = true;
|
|
27
|
+
} else if (cached === undefined) {
|
|
28
|
+
// If cached is undefined? We're going to look for a staged commit; otherwise, we'll use the supplied setting.
|
|
22
29
|
cached = await hasStagedChanges();
|
|
23
30
|
}
|
|
24
31
|
// Fix: Exit early if sendit is true but no changes are staged
|
|
25
|
-
if (((
|
|
32
|
+
if (((_runConfig_commit3 = runConfig.commit) === null || _runConfig_commit3 === void 0 ? void 0 : _runConfig_commit3.sendit) && !cached) {
|
|
26
33
|
logger.warn('SendIt mode enabled, but no changes to commit.');
|
|
27
34
|
process.exit(1);
|
|
28
35
|
}
|
|
@@ -34,11 +41,11 @@ const execute = async (runConfig)=>{
|
|
|
34
41
|
const diff = await create$1(options);
|
|
35
42
|
diffContent = await diff.get();
|
|
36
43
|
const logOptions = {
|
|
37
|
-
limit: (
|
|
44
|
+
limit: (_runConfig_commit4 = runConfig.commit) === null || _runConfig_commit4 === void 0 ? void 0 : _runConfig_commit4.messageLimit
|
|
38
45
|
};
|
|
39
46
|
const log = await create$2(logOptions);
|
|
40
47
|
const logContent = await log.get();
|
|
41
|
-
const prompt = await prompts.createCommitPrompt(diffContent, logContent, (
|
|
48
|
+
const prompt = await prompts.createCommitPrompt(diffContent, logContent, (_runConfig_commit5 = runConfig.commit) === null || _runConfig_commit5 === void 0 ? void 0 : _runConfig_commit5.context);
|
|
42
49
|
if (runConfig.debug) {
|
|
43
50
|
const formattedPrompt = Formatter.create({
|
|
44
51
|
logger
|
|
@@ -49,7 +56,7 @@ const execute = async (runConfig)=>{
|
|
|
49
56
|
const summary = await createCompletion(request.messages, {
|
|
50
57
|
model: runConfig.model
|
|
51
58
|
});
|
|
52
|
-
if ((
|
|
59
|
+
if ((_runConfig_commit6 = runConfig.commit) === null || _runConfig_commit6 === void 0 ? void 0 : _runConfig_commit6.sendit) {
|
|
53
60
|
if (!cached) {
|
|
54
61
|
logger.error('SendIt mode enabled, but no changes to commit. Message: \n\n%s\n\n', summary);
|
|
55
62
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.js","sources":["../../src/commands/commit.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Model, Request, Formatter } from '@riotprompt/riotprompt';\nimport 'dotenv/config';\nimport { ChatCompletionMessageParam } from 'openai/resources';\nimport shellescape from 'shell-escape';\nimport { DEFAULT_EXCLUDED_PATTERNS } from '../constants';\nimport * as Diff from '../content/diff';\nimport * as Log from '../content/log';\nimport { getLogger } from '../logging';\nimport * as Prompts from '../prompt/prompts';\nimport { Config } from '../types';\nimport { run } from '../util/child';\nimport { createCompletion } from '../util/openai';\nimport { stringifyJSON } from '../util/general';\n\nexport const execute = async (runConfig: Config) => {\n const logger = getLogger();\n const prompts = Prompts.create(runConfig.model as Model, runConfig);\n\n let diffContent = '';\n\n let cached = runConfig.commit?.cached;\n // If cached is undefined? We're going to look for a staged commit; otherwise, we'll use the supplied setting.\n if (runConfig.commit?.cached === undefined) {\n cached = await Diff.hasStagedChanges();\n }\n\n // Fix: Exit early if sendit is true but no changes are staged\n if (runConfig.commit?.sendit && !cached) {\n logger.warn('SendIt mode enabled, but no changes to commit.');\n process.exit(1);\n }\n\n const options = { cached, excludedPatterns: runConfig.excludedPatterns ?? DEFAULT_EXCLUDED_PATTERNS };\n const diff = await Diff.create(options);\n diffContent = await diff.get();\n\n const logOptions = {\n limit: runConfig.commit?.messageLimit,\n };\n const log = await Log.create(logOptions);\n const logContent = await log.get();\n\n const prompt = await prompts.createCommitPrompt(diffContent, logContent, runConfig.commit?.context);\n\n if (runConfig.debug) {\n const formattedPrompt = Formatter.create({ logger }).formatPrompt(\"gpt-4o-mini\", prompt);\n logger.debug('Formatted Prompt: %s', stringifyJSON(formattedPrompt));\n }\n\n const request: Request = prompts.format(prompt);\n\n const summary = await createCompletion(request.messages as ChatCompletionMessageParam[], { model: runConfig.model });\n\n if (runConfig.commit?.sendit) {\n if (!cached) {\n logger.error('SendIt mode enabled, but no changes to commit. Message: \\n\\n%s\\n\\n', summary);\n process.exit(1);\n }\n\n logger.info('SendIt mode enabled. Committing with message: \\n\\n%s\\n\\n', summary);\n try {\n const escapedSummary = shellescape([summary]);\n await run(`git commit -m ${escapedSummary}`);\n logger.info('Commit successful!');\n } catch (error) {\n logger.error('Failed to commit:', error);\n process.exit(1);\n }\n }\n\n return summary;\n}\n"],"names":["execute","runConfig","logger","getLogger","prompts","Prompts","model","diffContent","cached","commit","undefined","Diff","sendit","warn","process","exit","options","excludedPatterns","DEFAULT_EXCLUDED_PATTERNS","diff","get","logOptions","limit","messageLimit","log","Log","logContent","prompt","createCommitPrompt","context","debug","formattedPrompt","Formatter","create","formatPrompt","stringifyJSON","request","format","summary","createCompletion","messages","error","info","escapedSummary","shellescape","run"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commit.js","sources":["../../src/commands/commit.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Model, Request, Formatter } from '@riotprompt/riotprompt';\nimport 'dotenv/config';\nimport { ChatCompletionMessageParam } from 'openai/resources';\nimport shellescape from 'shell-escape';\nimport { DEFAULT_EXCLUDED_PATTERNS } from '../constants';\nimport * as Diff from '../content/diff';\nimport * as Log from '../content/log';\nimport { getLogger } from '../logging';\nimport * as Prompts from '../prompt/prompts';\nimport { Config } from '../types';\nimport { run } from '../util/child';\nimport { createCompletion } from '../util/openai';\nimport { stringifyJSON } from '../util/general';\n\nexport const execute = async (runConfig: Config) => {\n const logger = getLogger();\n const prompts = Prompts.create(runConfig.model as Model, runConfig);\n\n if (runConfig.commit?.add) {\n logger.info('Adding all changes to the index...');\n await run('git add -A');\n }\n\n let diffContent = '';\n\n let cached = runConfig.commit?.cached;\n // If `add` is used, we should always look at staged changes.\n if (runConfig.commit?.add) {\n cached = true;\n } else if (cached === undefined) {\n // If cached is undefined? We're going to look for a staged commit; otherwise, we'll use the supplied setting.\n cached = await Diff.hasStagedChanges();\n }\n\n // Fix: Exit early if sendit is true but no changes are staged\n if (runConfig.commit?.sendit && !cached) {\n logger.warn('SendIt mode enabled, but no changes to commit.');\n process.exit(1);\n }\n\n const options = { cached, excludedPatterns: runConfig.excludedPatterns ?? DEFAULT_EXCLUDED_PATTERNS };\n const diff = await Diff.create(options);\n diffContent = await diff.get();\n\n const logOptions = {\n limit: runConfig.commit?.messageLimit,\n };\n const log = await Log.create(logOptions);\n const logContent = await log.get();\n\n const prompt = await prompts.createCommitPrompt(diffContent, logContent, runConfig.commit?.context);\n\n if (runConfig.debug) {\n const formattedPrompt = Formatter.create({ logger }).formatPrompt(\"gpt-4o-mini\", prompt);\n logger.debug('Formatted Prompt: %s', stringifyJSON(formattedPrompt));\n }\n\n const request: Request = prompts.format(prompt);\n\n const summary = await createCompletion(request.messages as ChatCompletionMessageParam[], { model: runConfig.model });\n\n if (runConfig.commit?.sendit) {\n if (!cached) {\n logger.error('SendIt mode enabled, but no changes to commit. Message: \\n\\n%s\\n\\n', summary);\n process.exit(1);\n }\n\n logger.info('SendIt mode enabled. Committing with message: \\n\\n%s\\n\\n', summary);\n try {\n const escapedSummary = shellescape([summary]);\n await run(`git commit -m ${escapedSummary}`);\n logger.info('Commit successful!');\n } catch (error) {\n logger.error('Failed to commit:', error);\n process.exit(1);\n }\n }\n\n return summary;\n}\n"],"names":["execute","runConfig","logger","getLogger","prompts","Prompts","model","commit","add","info","run","diffContent","cached","undefined","Diff","sendit","warn","process","exit","options","excludedPatterns","DEFAULT_EXCLUDED_PATTERNS","diff","get","logOptions","limit","messageLimit","log","Log","logContent","prompt","createCommitPrompt","context","debug","formattedPrompt","Formatter","create","formatPrompt","stringifyJSON","request","format","summary","createCompletion","messages","error","escapedSummary","shellescape"],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import yaml from 'js-yaml';
|
|
3
|
+
import { getLogger } from '../logging.js';
|
|
4
|
+
import { create } from '../util/storage.js';
|
|
5
|
+
|
|
6
|
+
const scanDirectoryForPackages = async (rootDir, storage)=>{
|
|
7
|
+
const logger = getLogger();
|
|
8
|
+
const packageMap = new Map(); // packageName -> relativePath
|
|
9
|
+
const absoluteRootDir = path.resolve(process.cwd(), rootDir);
|
|
10
|
+
logger.debug(`Scanning directory for packages: ${absoluteRootDir}`);
|
|
11
|
+
if (!await storage.exists(absoluteRootDir) || !await storage.isDirectory(absoluteRootDir)) {
|
|
12
|
+
logger.debug(`Root directory does not exist or is not a directory: ${absoluteRootDir}`);
|
|
13
|
+
return packageMap;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
// Get all subdirectories in the root directory
|
|
17
|
+
const items = await storage.listFiles(absoluteRootDir);
|
|
18
|
+
for (const item of items){
|
|
19
|
+
const itemPath = path.join(absoluteRootDir, item);
|
|
20
|
+
if (await storage.isDirectory(itemPath)) {
|
|
21
|
+
const packageJsonPath = path.join(itemPath, 'package.json');
|
|
22
|
+
if (await storage.exists(packageJsonPath)) {
|
|
23
|
+
try {
|
|
24
|
+
const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');
|
|
25
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
26
|
+
if (packageJson.name) {
|
|
27
|
+
const relativePath = path.relative(process.cwd(), itemPath);
|
|
28
|
+
packageMap.set(packageJson.name, relativePath);
|
|
29
|
+
logger.debug(`Found package: ${packageJson.name} at ${relativePath}`);
|
|
30
|
+
}
|
|
31
|
+
} catch (error) {
|
|
32
|
+
logger.debug(`Failed to parse package.json at ${packageJsonPath}: ${error}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
} catch (error) {
|
|
38
|
+
logger.warn(`Failed to read directory ${absoluteRootDir}: ${error}`);
|
|
39
|
+
}
|
|
40
|
+
return packageMap;
|
|
41
|
+
};
|
|
42
|
+
const findPackagesByScope = async (dependencies, scopeRoots, storage)=>{
|
|
43
|
+
const logger = getLogger();
|
|
44
|
+
const workspacePackages = [];
|
|
45
|
+
logger.debug(`Checking dependencies against scope roots: ${JSON.stringify(scopeRoots)}`);
|
|
46
|
+
// First, scan all scope roots to build a comprehensive map of available packages
|
|
47
|
+
const allPackages = new Map(); // packageName -> relativePath
|
|
48
|
+
for (const [scope, rootDir] of Object.entries(scopeRoots)){
|
|
49
|
+
logger.debug(`Scanning scope ${scope} at root directory: ${rootDir}`);
|
|
50
|
+
const scopePackages = await scanDirectoryForPackages(rootDir, storage);
|
|
51
|
+
// Add packages from this scope to the overall map
|
|
52
|
+
for (const [packageName, packagePath] of scopePackages){
|
|
53
|
+
if (packageName.startsWith(scope)) {
|
|
54
|
+
allPackages.set(packageName, packagePath);
|
|
55
|
+
logger.debug(`Registered package: ${packageName} -> ${packagePath}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Now check each dependency against our discovered packages
|
|
60
|
+
for (const [depName, depVersion] of Object.entries(dependencies)){
|
|
61
|
+
logger.debug(`Processing dependency: ${depName}@${depVersion}`);
|
|
62
|
+
if (allPackages.has(depName)) {
|
|
63
|
+
const packagePath = allPackages.get(depName);
|
|
64
|
+
workspacePackages.push(packagePath);
|
|
65
|
+
logger.info(`Found sibling package: ${depName} at ${packagePath}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return workspacePackages;
|
|
69
|
+
};
|
|
70
|
+
const readCurrentWorkspaceFile = async (workspaceFilePath, storage)=>{
|
|
71
|
+
if (await storage.exists(workspaceFilePath)) {
|
|
72
|
+
try {
|
|
73
|
+
const content = await storage.readFile(workspaceFilePath, 'utf-8');
|
|
74
|
+
return yaml.load(content);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
throw new Error(`Failed to parse existing workspace file: ${error}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
packages: []
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
const writeWorkspaceFile = async (workspaceFilePath, config, storage)=>{
|
|
84
|
+
const yamlContent = yaml.dump(config, {
|
|
85
|
+
indent: 2,
|
|
86
|
+
lineWidth: -1,
|
|
87
|
+
noRefs: true,
|
|
88
|
+
sortKeys: false
|
|
89
|
+
});
|
|
90
|
+
await storage.writeFile(workspaceFilePath, yamlContent, 'utf-8');
|
|
91
|
+
};
|
|
92
|
+
const execute = async (runConfig)=>{
|
|
93
|
+
var _runConfig_link, _runConfig_link1, _runConfig_link2;
|
|
94
|
+
const logger = getLogger();
|
|
95
|
+
const storage = create({
|
|
96
|
+
log: logger.info
|
|
97
|
+
});
|
|
98
|
+
logger.info('Starting pnpm workspace link management...');
|
|
99
|
+
// Read current package.json
|
|
100
|
+
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
|
101
|
+
if (!await storage.exists(packageJsonPath)) {
|
|
102
|
+
throw new Error('package.json not found in current directory.');
|
|
103
|
+
}
|
|
104
|
+
let packageJson;
|
|
105
|
+
try {
|
|
106
|
+
const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');
|
|
107
|
+
packageJson = JSON.parse(packageJsonContent);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
throw new Error(`Failed to parse package.json: ${error}`);
|
|
110
|
+
}
|
|
111
|
+
logger.info(`Processing package: ${packageJson.name || 'unnamed'}`);
|
|
112
|
+
// Get configuration
|
|
113
|
+
const scopeRoots = ((_runConfig_link = runConfig.link) === null || _runConfig_link === void 0 ? void 0 : _runConfig_link.scopeRoots) || {};
|
|
114
|
+
const workspaceFileName = ((_runConfig_link1 = runConfig.link) === null || _runConfig_link1 === void 0 ? void 0 : _runConfig_link1.workspaceFile) || 'pnpm-workspace.yaml';
|
|
115
|
+
const isDryRun = runConfig.dryRun || ((_runConfig_link2 = runConfig.link) === null || _runConfig_link2 === void 0 ? void 0 : _runConfig_link2.dryRun) || false;
|
|
116
|
+
logger.debug('Extracted scopeRoots:', JSON.stringify(scopeRoots));
|
|
117
|
+
logger.debug('Extracted workspaceFileName:', workspaceFileName);
|
|
118
|
+
logger.debug('Extracted isDryRun:', isDryRun);
|
|
119
|
+
if (Object.keys(scopeRoots).length === 0) {
|
|
120
|
+
throw new Error('No scope roots configured. Please configure scope roots in your config file or via --scope-roots CLI option.');
|
|
121
|
+
}
|
|
122
|
+
logger.info(`Configured scope roots: ${JSON.stringify(scopeRoots)}`);
|
|
123
|
+
// Collect all dependencies
|
|
124
|
+
const allDependencies = {
|
|
125
|
+
...packageJson.dependencies,
|
|
126
|
+
...packageJson.devDependencies,
|
|
127
|
+
...packageJson.peerDependencies
|
|
128
|
+
};
|
|
129
|
+
logger.info(`Found ${Object.keys(allDependencies).length} total dependencies`);
|
|
130
|
+
// Find matching sibling packages
|
|
131
|
+
const workspacePackages = await findPackagesByScope(allDependencies, scopeRoots, storage);
|
|
132
|
+
if (workspacePackages.length === 0) {
|
|
133
|
+
logger.info('No matching sibling packages found for linking.');
|
|
134
|
+
return 'No matching sibling packages found for linking.';
|
|
135
|
+
}
|
|
136
|
+
logger.info(`Found ${workspacePackages.length} packages to link: ${workspacePackages.join(', ')}`);
|
|
137
|
+
// Read existing workspace configuration
|
|
138
|
+
const workspaceFilePath = path.join(process.cwd(), workspaceFileName);
|
|
139
|
+
const workspaceConfig = await readCurrentWorkspaceFile(workspaceFilePath, storage);
|
|
140
|
+
// Merge with existing packages (avoid duplicates)
|
|
141
|
+
const existingPackages = workspaceConfig.packages || [];
|
|
142
|
+
const allPackages = [
|
|
143
|
+
...new Set([
|
|
144
|
+
...existingPackages,
|
|
145
|
+
...workspacePackages
|
|
146
|
+
])
|
|
147
|
+
];
|
|
148
|
+
const updatedConfig = {
|
|
149
|
+
packages: allPackages.sort()
|
|
150
|
+
};
|
|
151
|
+
// Write the updated workspace file
|
|
152
|
+
if (isDryRun) {
|
|
153
|
+
logger.info('DRY RUN: Would write the following workspace configuration:');
|
|
154
|
+
logger.info(yaml.dump(updatedConfig, {
|
|
155
|
+
indent: 2
|
|
156
|
+
}));
|
|
157
|
+
} else {
|
|
158
|
+
await writeWorkspaceFile(workspaceFilePath, updatedConfig, storage);
|
|
159
|
+
logger.info(`Updated ${workspaceFileName} with ${workspacePackages.length} linked packages`);
|
|
160
|
+
}
|
|
161
|
+
const summary = `Successfully linked ${workspacePackages.length} sibling packages:\n${workspacePackages.map((pkg)=>` - ${pkg}`).join('\n')}`;
|
|
162
|
+
return summary;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export { execute };
|
|
166
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sources":["../../src/commands/link.ts"],"sourcesContent":["import path from 'path';\nimport yaml from 'js-yaml';\nimport { getLogger } from '../logging';\nimport { Config } from '../types';\nimport { create as createStorage } from '../util/storage';\n\ninterface PackageJson {\n name?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n}\n\ninterface WorkspaceConfig {\n packages?: string[];\n}\n\nconst scanDirectoryForPackages = async (rootDir: string, storage: any): Promise<Map<string, string>> => {\n const logger = getLogger();\n const packageMap = new Map<string, string>(); // packageName -> relativePath\n\n const absoluteRootDir = path.resolve(process.cwd(), rootDir);\n logger.debug(`Scanning directory for packages: ${absoluteRootDir}`);\n\n if (!await storage.exists(absoluteRootDir) || !await storage.isDirectory(absoluteRootDir)) {\n logger.debug(`Root directory does not exist or is not a directory: ${absoluteRootDir}`);\n return packageMap;\n }\n\n try {\n // Get all subdirectories in the root directory\n const items = await storage.listFiles(absoluteRootDir);\n\n for (const item of items) {\n const itemPath = path.join(absoluteRootDir, item);\n\n if (await storage.isDirectory(itemPath)) {\n const packageJsonPath = path.join(itemPath, 'package.json');\n\n if (await storage.exists(packageJsonPath)) {\n try {\n const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageJsonContent) as PackageJson;\n\n if (packageJson.name) {\n const relativePath = path.relative(process.cwd(), itemPath);\n packageMap.set(packageJson.name, relativePath);\n logger.debug(`Found package: ${packageJson.name} at ${relativePath}`);\n }\n } catch (error) {\n logger.debug(`Failed to parse package.json at ${packageJsonPath}: ${error}`);\n }\n }\n }\n }\n } catch (error) {\n logger.warn(`Failed to read directory ${absoluteRootDir}: ${error}`);\n }\n\n return packageMap;\n};\n\nconst findPackagesByScope = async (dependencies: Record<string, string>, scopeRoots: Record<string, string>, storage: any): Promise<string[]> => {\n const logger = getLogger();\n const workspacePackages: string[] = [];\n\n logger.debug(`Checking dependencies against scope roots: ${JSON.stringify(scopeRoots)}`);\n\n // First, scan all scope roots to build a comprehensive map of available packages\n const allPackages = new Map<string, string>(); // packageName -> relativePath\n\n for (const [scope, rootDir] of Object.entries(scopeRoots)) {\n logger.debug(`Scanning scope ${scope} at root directory: ${rootDir}`);\n const scopePackages = await scanDirectoryForPackages(rootDir, storage);\n\n // Add packages from this scope to the overall map\n for (const [packageName, packagePath] of scopePackages) {\n if (packageName.startsWith(scope)) {\n allPackages.set(packageName, packagePath);\n logger.debug(`Registered package: ${packageName} -> ${packagePath}`);\n }\n }\n }\n\n // Now check each dependency against our discovered packages\n for (const [depName, depVersion] of Object.entries(dependencies)) {\n logger.debug(`Processing dependency: ${depName}@${depVersion}`);\n\n if (allPackages.has(depName)) {\n const packagePath = allPackages.get(depName)!;\n workspacePackages.push(packagePath);\n logger.info(`Found sibling package: ${depName} at ${packagePath}`);\n }\n }\n\n return workspacePackages;\n};\n\nconst readCurrentWorkspaceFile = async (workspaceFilePath: string, storage: any): Promise<WorkspaceConfig> => {\n if (await storage.exists(workspaceFilePath)) {\n try {\n const content = await storage.readFile(workspaceFilePath, 'utf-8');\n return yaml.load(content) as WorkspaceConfig;\n } catch (error) {\n throw new Error(`Failed to parse existing workspace file: ${error}`);\n }\n }\n return { packages: [] };\n};\n\nconst writeWorkspaceFile = async (workspaceFilePath: string, config: WorkspaceConfig, storage: any): Promise<void> => {\n const yamlContent = yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n sortKeys: false\n });\n await storage.writeFile(workspaceFilePath, yamlContent, 'utf-8');\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const logger = getLogger();\n const storage = createStorage({ log: logger.info });\n\n logger.info('Starting pnpm workspace link management...');\n\n // Read current package.json\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n if (!await storage.exists(packageJsonPath)) {\n throw new Error('package.json not found in current directory.');\n }\n\n let packageJson: PackageJson;\n try {\n const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');\n packageJson = JSON.parse(packageJsonContent);\n } catch (error) {\n throw new Error(`Failed to parse package.json: ${error}`);\n }\n\n logger.info(`Processing package: ${packageJson.name || 'unnamed'}`);\n\n // Get configuration\n const scopeRoots = runConfig.link?.scopeRoots || {};\n const workspaceFileName = runConfig.link?.workspaceFile || 'pnpm-workspace.yaml';\n const isDryRun = runConfig.dryRun || runConfig.link?.dryRun || false;\n\n logger.debug('Extracted scopeRoots:', JSON.stringify(scopeRoots));\n logger.debug('Extracted workspaceFileName:', workspaceFileName);\n logger.debug('Extracted isDryRun:', isDryRun);\n\n if (Object.keys(scopeRoots).length === 0) {\n throw new Error('No scope roots configured. Please configure scope roots in your config file or via --scope-roots CLI option.');\n }\n\n logger.info(`Configured scope roots: ${JSON.stringify(scopeRoots)}`);\n\n // Collect all dependencies\n const allDependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies\n };\n\n logger.info(`Found ${Object.keys(allDependencies).length} total dependencies`);\n\n // Find matching sibling packages\n const workspacePackages = await findPackagesByScope(allDependencies, scopeRoots, storage);\n\n if (workspacePackages.length === 0) {\n logger.info('No matching sibling packages found for linking.');\n return 'No matching sibling packages found for linking.';\n }\n\n logger.info(`Found ${workspacePackages.length} packages to link: ${workspacePackages.join(', ')}`);\n\n // Read existing workspace configuration\n const workspaceFilePath = path.join(process.cwd(), workspaceFileName);\n const workspaceConfig = await readCurrentWorkspaceFile(workspaceFilePath, storage);\n\n // Merge with existing packages (avoid duplicates)\n const existingPackages = workspaceConfig.packages || [];\n const allPackages = [...new Set([...existingPackages, ...workspacePackages])];\n\n const updatedConfig: WorkspaceConfig = {\n packages: allPackages.sort()\n };\n\n // Write the updated workspace file\n if (isDryRun) {\n logger.info('DRY RUN: Would write the following workspace configuration:');\n logger.info(yaml.dump(updatedConfig, { indent: 2 }));\n } else {\n await writeWorkspaceFile(workspaceFilePath, updatedConfig, storage);\n logger.info(`Updated ${workspaceFileName} with ${workspacePackages.length} linked packages`);\n }\n\n const summary = `Successfully linked ${workspacePackages.length} sibling packages:\\n${workspacePackages.map(pkg => ` - ${pkg}`).join('\\n')}`;\n\n return summary;\n}; "],"names":["scanDirectoryForPackages","rootDir","storage","logger","getLogger","packageMap","Map","absoluteRootDir","path","resolve","process","cwd","debug","exists","isDirectory","items","listFiles","item","itemPath","join","packageJsonPath","packageJsonContent","readFile","packageJson","JSON","parse","name","relativePath","relative","set","error","warn","findPackagesByScope","dependencies","scopeRoots","workspacePackages","stringify","allPackages","scope","Object","entries","scopePackages","packageName","packagePath","startsWith","depName","depVersion","has","get","push","info","readCurrentWorkspaceFile","workspaceFilePath","content","yaml","load","Error","packages","writeWorkspaceFile","config","yamlContent","dump","indent","lineWidth","noRefs","sortKeys","writeFile","execute","runConfig","createStorage","log","link","workspaceFileName","workspaceFile","isDryRun","dryRun","keys","length","allDependencies","devDependencies","peerDependencies","workspaceConfig","existingPackages","Set","updatedConfig","sort","summary","map","pkg"],"mappings":"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"}
|