@eldrforge/kodrdriv 0.0.9 → 0.0.11

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.
Files changed (48) hide show
  1. package/README.md +65 -707
  2. package/dist/arguments.js +79 -55
  3. package/dist/arguments.js.map +1 -1
  4. package/dist/commands/commit.js +28 -16
  5. package/dist/commands/commit.js.map +1 -1
  6. package/dist/commands/link.js +18 -18
  7. package/dist/commands/link.js.map +1 -1
  8. package/dist/commands/publish.js +170 -93
  9. package/dist/commands/publish.js.map +1 -1
  10. package/dist/commands/release.js +8 -0
  11. package/dist/commands/release.js.map +1 -1
  12. package/dist/commands/unlink.js +20 -20
  13. package/dist/commands/unlink.js.map +1 -1
  14. package/dist/constants.js +4 -2
  15. package/dist/constants.js.map +1 -1
  16. package/dist/logging.js +35 -23
  17. package/dist/logging.js.map +1 -1
  18. package/dist/main.js +49 -3
  19. package/dist/main.js.map +1 -1
  20. package/dist/util/child.js +13 -1
  21. package/dist/util/child.js.map +1 -1
  22. package/docs/index.html +17 -0
  23. package/docs/package.json +36 -0
  24. package/docs/public/README.md +132 -0
  25. package/docs/public/advanced-usage.md +188 -0
  26. package/docs/public/code-icon.svg +4 -0
  27. package/docs/public/commands.md +116 -0
  28. package/docs/public/configuration.md +274 -0
  29. package/docs/public/examples.md +352 -0
  30. package/docs/public/kodrdriv-logo.svg +62 -0
  31. package/docs/src/App.css +387 -0
  32. package/docs/src/App.tsx +60 -0
  33. package/docs/src/components/DocumentPage.tsx +56 -0
  34. package/docs/src/components/ErrorMessage.tsx +15 -0
  35. package/docs/src/components/LoadingSpinner.tsx +14 -0
  36. package/docs/src/components/MarkdownRenderer.tsx +56 -0
  37. package/docs/src/components/Navigation.css +73 -0
  38. package/docs/src/components/Navigation.tsx +36 -0
  39. package/docs/src/index.css +61 -0
  40. package/docs/src/main.tsx +10 -0
  41. package/docs/src/test/setup.ts +1 -0
  42. package/docs/src/vite-env.d.ts +10 -0
  43. package/docs/tsconfig.node.json +13 -0
  44. package/docs/vite.config.ts +15 -0
  45. package/docs/vitest.config.ts +15 -0
  46. package/eslint.config.mjs +1 -0
  47. package/package.json +10 -5
  48. package/vitest.config.ts +3 -3
package/dist/arguments.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { Command } from 'commander';
2
- import path from 'path';
3
2
  import { z } from 'zod';
4
- import { PROGRAM_NAME, VERSION, ALLOWED_COMMANDS, DEFAULT_COMMAND, KODRDRIV_DEFAULTS, DEFAULT_CHARACTER_ENCODING, DEFAULT_INSTRUCTIONS_DIR } from './constants.js';
3
+ import { PROGRAM_NAME, VERSION, KODRDRIV_DEFAULTS, ALLOWED_COMMANDS, DEFAULT_COMMAND, DEFAULT_CHARACTER_ENCODING, DEFAULT_INSTRUCTIONS_DIR } from './constants.js';
5
4
  import { getLogger } from './logging.js';
6
5
  import { create } from './util/storage.js';
7
6
 
@@ -10,6 +9,8 @@ z.object({
10
9
  verbose: z.boolean().optional(),
11
10
  debug: z.boolean().optional(),
12
11
  overrides: z.boolean().optional(),
12
+ checkConfig: z.boolean().optional(),
13
+ initConfig: z.boolean().optional(),
13
14
  openaiApiKey: z.string().optional(),
14
15
  model: z.string().optional(),
15
16
  contextDirectories: z.array(z.string()).optional(),
@@ -85,38 +86,64 @@ const transformCliArgs = (finalCliArgs)=>{
85
86
  };
86
87
  // Update configure signature to accept cardigantime
87
88
  const configure = async (cardigantime)=>{
89
+ var _config_contextDirectories, _config_link;
88
90
  const logger = getLogger();
89
91
  let program = new Command();
90
92
  // Configure program basics
91
93
  program.name(PROGRAM_NAME).summary('Create Intelligent Release Notes or Change Logs from Git').description('Create Intelligent Release Notes or Change Logs from Git').version(VERSION);
92
94
  // Let cardigantime add its arguments first
93
95
  program = await cardigantime.configure(program);
96
+ // Check if --check-config is in process.argv early
97
+ if (process.argv.includes('--check-config')) {
98
+ // For check-config, use CardiganTime's built-in checkConfig method
99
+ program.parse();
100
+ const cliArgs = program.opts();
101
+ // Transform the flat CLI args
102
+ const transformedCliArgs = transformCliArgs(cliArgs);
103
+ // Use CardiganTime's built-in checkConfig method which displays
104
+ // hierarchical configuration information in a well-formatted way
105
+ await cardigantime.checkConfig(transformedCliArgs);
106
+ // Return minimal config for consistency, but main processing is done
107
+ const config = await validateAndProcessOptions({});
108
+ const secureConfig = await validateAndProcessSecureOptions();
109
+ const commandConfig = {
110
+ commandName: 'check-config'
111
+ };
112
+ return [
113
+ config,
114
+ secureConfig,
115
+ commandConfig
116
+ ];
117
+ }
118
+ // Check if --init-config is in process.argv early
119
+ if (process.argv.includes('--init-config')) {
120
+ // For init-config, use CardiganTime's built-in generateConfig method
121
+ program.parse();
122
+ const cliArgs = program.opts();
123
+ // Transform the flat CLI args
124
+ const transformedCliArgs = transformCliArgs(cliArgs);
125
+ // Use CardiganTime's built-in generateConfig method
126
+ await cardigantime.generateConfig(transformedCliArgs.configDirectory || KODRDRIV_DEFAULTS.configDirectory);
127
+ // Return minimal config for consistency, but main processing is done
128
+ const config = await validateAndProcessOptions({});
129
+ const secureConfig = await validateAndProcessSecureOptions();
130
+ const commandConfig = {
131
+ commandName: 'init-config'
132
+ };
133
+ return [
134
+ config,
135
+ secureConfig,
136
+ commandConfig
137
+ ];
138
+ }
94
139
  // Get CLI arguments using the new function
95
140
  const [finalCliArgs, commandConfig] = getCliConfig(program);
96
- logger.debug('Loaded Command Line Options: %s', JSON.stringify(finalCliArgs, null, 2));
141
+ logger.silly('Loaded Command Line Options: %s', JSON.stringify(finalCliArgs, null, 2));
97
142
  // Transform the flat CLI args using the new function
98
143
  const transformedCliArgs = transformCliArgs(finalCliArgs);
99
- logger.debug('Transformed CLI Args for merging: %s', JSON.stringify(transformedCliArgs, null, 2));
100
- // Get values from config file
101
- // Temporary workaround: Read config file manually due to cardigantime parsing issue
102
- let fileValues = {};
103
- // Force manual config reading for now
104
- const configPath = path.join(process.cwd(), '.kodrdriv', 'config.yaml');
105
- const storage = create({
106
- log: logger.info
107
- });
108
- const exists = await storage.exists(configPath);
109
- if (exists) {
110
- const yaml = await import('js-yaml');
111
- const configContent = await storage.readFile(configPath, 'utf-8');
112
- fileValues = yaml.load(configContent);
113
- // Add the configDirectory since it's not in the config file but is required
114
- if (!fileValues.configDirectory) {
115
- fileValues.configDirectory = '.kodrdriv';
116
- }
117
- }
118
- // Temporarily skip cardigantime validation due to parsing issues
119
- // await cardigantime.validate(fileValues);
144
+ logger.silly('Transformed CLI Args for merging: %s', JSON.stringify(transformedCliArgs, null, 2));
145
+ // Get values from config file using Cardigantime's hierarchical configuration
146
+ const fileValues = await cardigantime.read(transformedCliArgs);
120
147
  // Merge configurations: Defaults -> File -> CLI
121
148
  // Properly merge the link section to preserve scope roots from config file
122
149
  const mergedLink = {
@@ -132,7 +159,22 @@ const configure = async (cardigantime)=>{
132
159
  }; // Cast to Partial<Config> initially
133
160
  // Specific validation and processing after merge
134
161
  const config = await validateAndProcessOptions(partialConfig);
135
- logger.verbose('Final configuration: %s', JSON.stringify(config, null, 2));
162
+ // Log effective configuration summary at verbose level
163
+ logger.verbose('Configuration complete. Effective settings:');
164
+ logger.verbose(` Command: ${commandConfig.commandName}`);
165
+ logger.verbose(` Model: ${config.model}`);
166
+ logger.verbose(` Dry run: ${config.dryRun}`);
167
+ logger.verbose(` Debug: ${config.debug}`);
168
+ logger.verbose(` Verbose: ${config.verbose}`);
169
+ logger.verbose(` Config directory: ${config.configDirectory}`);
170
+ logger.verbose(` Context directories: ${((_config_contextDirectories = config.contextDirectories) === null || _config_contextDirectories === void 0 ? void 0 : _config_contextDirectories.join(', ')) || 'none'}`);
171
+ if (config.excludedPatterns && config.excludedPatterns.length > 0) {
172
+ logger.verbose(` Excluded patterns: ${config.excludedPatterns.join(', ')}`);
173
+ }
174
+ if (Object.keys(((_config_link = config.link) === null || _config_link === void 0 ? void 0 : _config_link.scopeRoots) || {}).length > 0) {
175
+ logger.verbose(` Link scope roots: ${Object.keys(config.link.scopeRoots).join(', ')}`);
176
+ }
177
+ logger.silly('Final configuration: %s', JSON.stringify(config, null, 2));
136
178
  const secureConfig = await validateAndProcessSecureOptions();
137
179
  return [
138
180
  config,
@@ -147,6 +189,8 @@ function getCliConfig(program) {
147
189
  .option('--verbose', 'enable verbose logging').option('--debug', 'enable debug logging').option('--overrides', 'enable overrides').option('--model <model>', 'OpenAI model to use').option('-d, --context-directories [contextDirectories...]', 'directories to scan for context').option('-i, --instructions <file>', 'instructions for the AI').option('--config-dir <configDir>', 'configuration directory') // Keep config-dir for specifying location
148
190
  .option('--excluded-paths [excludedPatterns...]', 'paths to exclude from the diff');
149
191
  };
192
+ // Add global options to the main program
193
+ // (cardigantime already adds most global options like --verbose, --debug, --config-dir)
150
194
  // Add subcommands
151
195
  const commitCommand = program.command('commit').option('--cached', 'use cached diff').option('--add', 'add all changes before committing').option('--sendit', 'Commit with the message generated. No review.').option('--context <context>', 'context for the commit message').option('--message-limit <messageLimit>', 'limit the number of messages to generate').description('Generate commit notes');
152
196
  addSharedOptions(commitCommand);
@@ -165,8 +209,8 @@ function getCliConfig(program) {
165
209
  let commandOptions = {}; // Store specific command options
166
210
  if (program.args.length > 0) {
167
211
  commandName = program.args[0];
212
+ validateCommand(commandName);
168
213
  }
169
- validateCommand(commandName);
170
214
  // Only proceed with command-specific options if validation passed
171
215
  if (ALLOWED_COMMANDS.includes(commandName)) {
172
216
  if (commandName === 'commit' && commitCommand.opts) {
@@ -195,10 +239,13 @@ function getCliConfig(program) {
195
239
  ];
196
240
  }
197
241
  async function validateAndProcessSecureOptions() {
198
- if (!process.env.OPENAI_API_KEY) {
242
+ // For check-config and init-config commands, we don't want to throw an error for missing API key
243
+ const isCheckConfig = process.argv.includes('--check-config');
244
+ const isInitConfig = process.argv.includes('--init-config');
245
+ if (!process.env.OPENAI_API_KEY && !isCheckConfig && !isInitConfig) {
199
246
  throw new Error('OpenAI API key is required, set OPENAI_API_KEY environment variable or provide --openai-api-key');
200
247
  }
201
- // Prefer CLI key if provided, otherwise use env var
248
+ // Prefer CLI key if provided, otherwise use env var (might be undefined for check-config/init-config)
202
249
  const openaiApiKey = process.env.OPENAI_API_KEY;
203
250
  const secureConfig = {
204
251
  openaiApiKey: openaiApiKey
@@ -212,8 +259,8 @@ async function validateAndProcessOptions(options) {
212
259
  const instructionsPathOrContent = options.instructions || KODRDRIV_DEFAULTS.instructions;
213
260
  const instructions = await validateAndReadInstructions(instructionsPathOrContent);
214
261
  const configDir = options.configDirectory || KODRDRIV_DEFAULTS.configDirectory;
215
- await validateConfigDir(configDir); // Keep validation, but maybe remove return if not used elsewhere
216
262
  var _options_dryRun, _options_verbose, _options_debug, _options_overrides, _options_model, _options_commit_add, _options_commit_cached, _options_commit_sendit, _options_commit_messageLimit, _options_release_from, _options_release_to, _options_release_messageLimit, _options_publish_mergeMethod, _options_publish_requiredEnvVars, _options_link_scopeRoots, _options_link_workspaceFile, _options_link_dryRun, _options_excludedPatterns;
263
+ // Skip config directory validation since Cardigantime handles hierarchical lookup
217
264
  // Ensure all required fields are present and have correct types after merging
218
265
  const finalConfig = {
219
266
  dryRun: (_options_dryRun = options.dryRun) !== null && _options_dryRun !== void 0 ? _options_dryRun : KODRDRIV_DEFAULTS.dryRun,
@@ -261,29 +308,6 @@ function validateCommand(commandName) {
261
308
  }
262
309
  return commandName;
263
310
  }
264
- async function validateConfigDir(configDir) {
265
- const logger = getLogger();
266
- const storage = create({
267
- log: logger.info
268
- });
269
- // Make sure the config directory is absolute
270
- const absoluteConfigDir = path.isAbsolute(configDir) ? configDir : path.resolve(process.cwd(), configDir);
271
- // Create the config directory if it doesn't exist
272
- try {
273
- if (!await storage.exists(absoluteConfigDir)) {
274
- logger.info(`Creating config directory: ${absoluteConfigDir}`);
275
- await storage.createDirectory(absoluteConfigDir);
276
- } else if (!await storage.isDirectory(absoluteConfigDir)) {
277
- throw new Error(`Config directory is not a directory: ${absoluteConfigDir}`);
278
- } else if (!await storage.isDirectoryWritable(absoluteConfigDir)) {
279
- throw new Error(`Config directory is not writable: ${absoluteConfigDir}`);
280
- }
281
- } catch (error) {
282
- logger.error(`Failed to validate or create config directory: ${absoluteConfigDir}`, error);
283
- throw new Error(`Failed to validate or create config directory: ${absoluteConfigDir}: ${error.message}`);
284
- }
285
- return absoluteConfigDir;
286
- }
287
311
  // Export for testing
288
312
  async function validateContextDirectories(contextDirectories) {
289
313
  const logger = getLogger();
@@ -315,11 +339,11 @@ async function validateAndReadInstructions(instructionsPath) {
315
339
  try {
316
340
  // Assume it's a file path first
317
341
  if (await storage.isFileReadable(instructionsPath)) {
318
- logger.debug(`Reading instructions from file: ${instructionsPath}`);
342
+ logger.verbose(`Reading instructions from file: ${instructionsPath}`);
319
343
  return storage.readFile(instructionsPath, DEFAULT_CHARACTER_ENCODING);
320
344
  } else {
321
345
  // If not a readable file, assume it might be the content itself (e.g., from config file)
322
- logger.debug(`Using provided instructions string directly.`);
346
+ logger.verbose(`Using provided instructions string directly.`);
323
347
  return instructionsPath; // Return the string as is
324
348
  }
325
349
  } catch (error) {
@@ -335,5 +359,5 @@ async function validateAndReadInstructions(instructionsPath) {
335
359
  }
336
360
  }
337
361
 
338
- export { configure, getCliConfig, transformCliArgs, validateAndProcessOptions, validateAndProcessSecureOptions, validateAndReadInstructions, validateCommand, validateConfigDir, validateContextDirectories };
362
+ export { configure, getCliConfig, transformCliArgs, validateAndProcessOptions, validateAndProcessSecureOptions, validateAndReadInstructions, validateCommand, validateContextDirectories };
339
363
  //# sourceMappingURL=arguments.js.map
@@ -1 +1 @@
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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"}
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 checkConfig: z.boolean().optional(),\n initConfig: 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\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 // Check if --check-config is in process.argv early\n if (process.argv.includes('--check-config')) {\n // For check-config, use CardiganTime's built-in checkConfig method\n program.parse();\n const cliArgs: Input = program.opts<Input>();\n\n // Transform the flat CLI args\n const transformedCliArgs: Partial<Config> = transformCliArgs(cliArgs);\n\n // Use CardiganTime's built-in checkConfig method which displays\n // hierarchical configuration information in a well-formatted way\n await cardigantime.checkConfig(transformedCliArgs);\n\n // Return minimal config for consistency, but main processing is done\n const config: Config = await validateAndProcessOptions({});\n const secureConfig: SecureConfig = await validateAndProcessSecureOptions();\n const commandConfig: CommandConfig = { commandName: 'check-config' };\n\n return [config, secureConfig, commandConfig];\n }\n\n // Check if --init-config is in process.argv early\n if (process.argv.includes('--init-config')) {\n // For init-config, use CardiganTime's built-in generateConfig method\n program.parse();\n const cliArgs: Input = program.opts<Input>();\n\n // Transform the flat CLI args\n const transformedCliArgs: Partial<Config> = transformCliArgs(cliArgs);\n\n\n // Use CardiganTime's built-in generateConfig method\n await cardigantime.generateConfig(transformedCliArgs.configDirectory || KODRDRIV_DEFAULTS.configDirectory);\n\n // Return minimal config for consistency, but main processing is done\n const config: Config = await validateAndProcessOptions({});\n const secureConfig: SecureConfig = await validateAndProcessSecureOptions();\n const commandConfig: CommandConfig = { commandName: 'init-config' };\n\n return [config, secureConfig, commandConfig];\n }\n\n // Get CLI arguments using the new function\n const [finalCliArgs, commandConfig]: [Input, CommandConfig] = getCliConfig(program);\n logger.silly('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.silly('Transformed CLI Args for merging: %s', JSON.stringify(transformedCliArgs, null, 2));\n\n // Get values from config file using Cardigantime's hierarchical configuration\n const fileValues: Partial<Config> = await cardigantime.read(transformedCliArgs) as Partial<Config>;\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 // Log effective configuration summary at verbose level\n logger.verbose('Configuration complete. Effective settings:');\n logger.verbose(` Command: ${commandConfig.commandName}`);\n logger.verbose(` Model: ${config.model}`);\n logger.verbose(` Dry run: ${config.dryRun}`);\n logger.verbose(` Debug: ${config.debug}`);\n logger.verbose(` Verbose: ${config.verbose}`);\n logger.verbose(` Config directory: ${config.configDirectory}`);\n logger.verbose(` Context directories: ${config.contextDirectories?.join(', ') || 'none'}`);\n if (config.excludedPatterns && config.excludedPatterns.length > 0) {\n logger.verbose(` Excluded patterns: ${config.excludedPatterns.join(', ')}`);\n }\n if (Object.keys(config.link?.scopeRoots || {}).length > 0) {\n logger.verbose(` Link scope roots: ${Object.keys(config.link!.scopeRoots!).join(', ')}`);\n }\n\n logger.silly('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 global options to the main program\n // (cardigantime already adds most global options like --verbose, --debug, --config-dir)\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 validateCommand(commandName);\n }\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 // For check-config and init-config commands, we don't want to throw an error for missing API key\n const isCheckConfig = process.argv.includes('--check-config');\n const isInitConfig = process.argv.includes('--init-config');\n\n if (!process.env.OPENAI_API_KEY && !isCheckConfig && !isInitConfig) {\n throw new Error('OpenAI API key is required, set OPENAI_API_KEY environment variable or provide --openai-api-key');\n }\n\n // Prefer CLI key if provided, otherwise use env var (might be undefined for check-config/init-config)\n const openaiApiKey = process.env.OPENAI_API_KEY;\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 // Skip config directory validation since Cardigantime handles hierarchical lookup\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 try {\n // Check if the path exists\n if (!(await storage.exists(absoluteConfigDir))) {\n // Directory doesn't exist, warn and fall back to defaults\n logger.warn(`Config directory does not exist: ${absoluteConfigDir}. Using default configuration.`);\n return absoluteConfigDir; // Return the path anyway, app will use defaults\n }\n\n // Path exists, check if it's a directory\n if (!(await storage.isDirectory(absoluteConfigDir))) {\n throw new Error(`Config directory is not a directory: ${absoluteConfigDir}`);\n }\n\n // Check if it's writable\n 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 config directory: ${absoluteConfigDir}`, error);\n throw new Error(`Failed to validate 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.verbose(`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.verbose(`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","checkConfig","initConfig","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","config","logger","getLogger","program","Command","name","PROGRAM_NAME","summary","description","version","VERSION","process","argv","includes","cliArgs","opts","validateAndProcessOptions","secureConfig","validateAndProcessSecureOptions","commandConfig","commandName","generateConfig","KODRDRIV_DEFAULTS","getCliConfig","silly","stringify","fileValues","read","mergedLink","partialConfig","join","length","Object","keys","addSharedOptions","command","option","commitCommand","releaseCommand","publishCommand","linkCommand","unlinkCommand","DEFAULT_COMMAND","commandOptions","args","validateCommand","ALLOWED_COMMANDS","isCheckConfig","isInitConfig","env","OPENAI_API_KEY","options","validateContextDirectories","instructionsPathOrContent","validateAndReadInstructions","finalConfig","dependencyUpdatePatterns","requiredEnvVars","storage","Storage","log","info","validDirectories","dir","isDirectoryReadable","push","warn","message","instructionsPath","isFileReadable","readFile","DEFAULT_CHARACTER_ENCODING","DEFAULT_INSTRUCTIONS_DIR"],"mappings":";;;;;;AAQ2BA,CAAAA,CAAEC,MAAM,CAAC;IAChCC,MAAAA,EAAQF,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC5BC,OAAAA,EAASL,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC7BE,KAAAA,EAAON,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC3BG,SAAAA,EAAWP,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC/BI,WAAAA,EAAaR,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IACjCK,UAAAA,EAAYT,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAChCM,YAAAA,EAAcV,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ,EAAA;IACjCQ,KAAAA,EAAOZ,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ,EAAA;AAC1BS,IAAAA,kBAAAA,EAAoBb,EAAEc,KAAK,CAACd,CAAAA,CAAEW,MAAM,IAAIP,QAAQ,EAAA;IAChDW,YAAAA,EAAcf,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ,EAAA;IACjCY,SAAAA,EAAWhB,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ,EAAA;IAC9Ba,MAAAA,EAAQjB,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC5Bc,GAAAA,EAAKlB,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IACzBe,MAAAA,EAAQnB,CAAAA,CAAEG,OAAO,EAAA,CAAGC,QAAQ,EAAA;IAC5BgB,IAAAA,EAAMpB,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ,EAAA;IACzBiB,EAAAA,EAAIrB,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ,EAAA;AACvBkB,IAAAA,gBAAAA,EAAkBtB,EAAEc,KAAK,CAACd,CAAAA,CAAEW,MAAM,IAAIP,QAAQ,EAAA;IAC9CmB,OAAAA,EAASvB,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ,EAAA;IAC5BoB,YAAAA,EAAcxB,CAAAA,CAAEyB,MAAM,EAAA,CAAGrB,QAAQ,EAAA;IACjCsB,WAAAA,EAAa1B,CAAAA,CAAE2B,IAAI,CAAC;AAAC,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA,CAAA,CAAEvB,QAAQ,EAAA;IAC3DwB,UAAAA,EAAY5B,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ,EAAA;IAC/ByB,aAAAA,EAAe7B,CAAAA,CAAEW,MAAM,EAAA,CAAGP,QAAQ;AACtC,CAAA;AAIA;AACO,MAAM0B,mBAAmB,CAACC,YAAAA,GAAAA;AAC7B,IAAA,MAAMC,qBAAsC,EAAC;;IAG7C,IAAID,YAAAA,CAAa7B,MAAM,KAAK+B,SAAAA,EAAWD,mBAAmB9B,MAAM,GAAG6B,aAAa7B,MAAM;IACtF,IAAI6B,YAAAA,CAAa1B,OAAO,KAAK4B,SAAAA,EAAWD,mBAAmB3B,OAAO,GAAG0B,aAAa1B,OAAO;IACzF,IAAI0B,YAAAA,CAAazB,KAAK,KAAK2B,SAAAA,EAAWD,mBAAmB1B,KAAK,GAAGyB,aAAazB,KAAK;IACnF,IAAIyB,YAAAA,CAAaxB,SAAS,KAAK0B,SAAAA,EAAWD,mBAAmBzB,SAAS,GAAGwB,aAAaxB,SAAS;IAC/F,IAAIwB,YAAAA,CAAanB,KAAK,KAAKqB,SAAAA,EAAWD,mBAAmBpB,KAAK,GAAGmB,aAAanB,KAAK;IACnF,IAAImB,YAAAA,CAAalB,kBAAkB,KAAKoB,SAAAA,EAAWD,mBAAmBnB,kBAAkB,GAAGkB,aAAalB,kBAAkB;IAC1H,IAAIkB,YAAAA,CAAahB,YAAY,KAAKkB,SAAAA,EAAWD,mBAAmBjB,YAAY,GAAGgB,aAAahB,YAAY;;IAGxG,IAAIgB,YAAAA,CAAaf,SAAS,KAAKiB,SAAAA,EAAWD,mBAAmBE,eAAe,GAAGH,aAAaf,SAAS;;IAGrG,IAAIe,YAAAA,CAAad,MAAM,KAAKgB,SAAAA,IAAaF,YAAAA,CAAaZ,MAAM,KAAKc,SAAAA,IAAaF,YAAAA,CAAab,GAAG,KAAKe,SAAAA,EAAW;QAC1GD,kBAAAA,CAAmBG,MAAM,GAAG,EAAC;QAC7B,IAAIJ,YAAAA,CAAab,GAAG,KAAKe,SAAAA,EAAWD,kBAAAA,CAAmBG,MAAM,CAACjB,GAAG,GAAGa,YAAAA,CAAab,GAAG;QACpF,IAAIa,YAAAA,CAAad,MAAM,KAAKgB,SAAAA,EAAWD,kBAAAA,CAAmBG,MAAM,CAAClB,MAAM,GAAGc,YAAAA,CAAad,MAAM;QAC7F,IAAIc,YAAAA,CAAaZ,MAAM,KAAKc,SAAAA,EAAWD,kBAAAA,CAAmBG,MAAM,CAAChB,MAAM,GAAGY,YAAAA,CAAaZ,MAAM;QAC7F,IAAIY,YAAAA,CAAaP,YAAY,KAAKS,SAAAA,EAAWD,kBAAAA,CAAmBG,MAAM,CAACX,YAAY,GAAGO,YAAAA,CAAaP,YAAY;QAC/G,IAAIO,YAAAA,CAAaR,OAAO,KAAKU,SAAAA,EAAWD,kBAAAA,CAAmBG,MAAM,CAACZ,OAAO,GAAGQ,YAAAA,CAAaR,OAAO;AACpG;;AAGA,IAAA,IAAIQ,aAAaX,IAAI,KAAKa,aAAaF,YAAAA,CAAaV,EAAE,KAAKY,SAAAA,EAAW;QAClED,kBAAAA,CAAmBI,OAAO,GAAG,EAAC;QAC9B,IAAIL,YAAAA,CAAaX,IAAI,KAAKa,SAAAA,EAAWD,kBAAAA,CAAmBI,OAAO,CAAChB,IAAI,GAAGW,YAAAA,CAAaX,IAAI;QACxF,IAAIW,YAAAA,CAAaV,EAAE,KAAKY,SAAAA,EAAWD,kBAAAA,CAAmBI,OAAO,CAACf,EAAE,GAAGU,YAAAA,CAAaV,EAAE;QAClF,IAAIU,YAAAA,CAAaR,OAAO,KAAKU,SAAAA,EAAWD,kBAAAA,CAAmBI,OAAO,CAACb,OAAO,GAAGQ,YAAAA,CAAaR,OAAO;QACjG,IAAIQ,YAAAA,CAAaP,YAAY,KAAKS,SAAAA,EAAWD,kBAAAA,CAAmBI,OAAO,CAACZ,YAAY,GAAGO,YAAAA,CAAaP,YAAY;AACpH;;IAGA,IAAIO,YAAAA,CAAaL,WAAW,KAAKO,SAAAA,EAAW;QACxCD,kBAAAA,CAAmBK,OAAO,GAAG,EAAC;QAC9B,IAAIN,YAAAA,CAAaL,WAAW,KAAKO,SAAAA,EAAWD,kBAAAA,CAAmBK,OAAO,CAACX,WAAW,GAAGK,YAAAA,CAAaL,WAAW;AACjH;;AAGA,IAAA,IAAIK,aAAaH,UAAU,KAAKK,aAAaF,YAAAA,CAAaF,aAAa,KAAKI,SAAAA,EAAW;QACnFD,kBAAAA,CAAmBM,IAAI,GAAG,EAAC;QAC3B,IAAIP,YAAAA,CAAaH,UAAU,KAAKK,SAAAA,EAAW;YACvC,IAAI;gBACAD,kBAAAA,CAAmBM,IAAI,CAACV,UAAU,GAAGW,KAAKC,KAAK,CAACT,aAAaH,UAAU,CAAA;;AAE3E,aAAA,CAAE,OAAOa,KAAAA,EAAO;AACZ,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,8BAA8B,EAAEX,YAAAA,CAAaH,UAAU,CAAA,CAAE,CAAA;AAC9E;AACJ;QACA,IAAIG,YAAAA,CAAaF,aAAa,KAAKI,SAAAA,EAAWD,kBAAAA,CAAmBM,IAAI,CAACT,aAAa,GAAGE,YAAAA,CAAaF,aAAa;AACpH;IAEA,IAAIE,YAAAA,CAAaT,gBAAgB,KAAKW,SAAAA,EAAWD,mBAAmBV,gBAAgB,GAAGS,aAAaT,gBAAgB;;IAKpH,OAAOU,kBAAAA;AACX;AAIA;AACO,MAAMW,YAAY,OAAOC,YAAAA,GAAAA;QA6FaC,0BAAAA,EAIzBA,YAAAA;AAhGhB,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,IAAIC,UAAU,IAAIC,OAAAA,EAAAA;;IAGlBD,OAAAA,CACKE,IAAI,CAACC,YAAAA,CAAAA,CACLC,OAAO,CAAC,4DACRC,WAAW,CAAC,0DAAA,CAAA,CACZC,OAAO,CAACC,OAAAA,CAAAA;;IAGbP,OAAAA,GAAU,MAAMJ,YAAAA,CAAaD,SAAS,CAACK,OAAAA,CAAAA;;AAGvC,IAAA,IAAIQ,OAAAA,CAAQC,IAAI,CAACC,QAAQ,CAAC,gBAAA,CAAA,EAAmB;;AAEzCV,QAAAA,OAAAA,CAAQR,KAAK,EAAA;QACb,MAAMmB,OAAAA,GAAiBX,QAAQY,IAAI,EAAA;;AAGnC,QAAA,MAAM5B,qBAAsCF,gBAAAA,CAAiB6B,OAAAA,CAAAA;;;QAI7D,MAAMf,YAAAA,CAAapC,WAAW,CAACwB,kBAAAA,CAAAA;;QAG/B,MAAMa,MAAAA,GAAiB,MAAMgB,yBAAAA,CAA0B,EAAC,CAAA;AACxD,QAAA,MAAMC,eAA6B,MAAMC,+BAAAA,EAAAA;AACzC,QAAA,MAAMC,aAAAA,GAA+B;YAAEC,WAAAA,EAAa;AAAe,SAAA;QAEnE,OAAO;AAACpB,YAAAA,MAAAA;AAAQiB,YAAAA,YAAAA;AAAcE,YAAAA;AAAc,SAAA;AAChD;;AAGA,IAAA,IAAIR,OAAAA,CAAQC,IAAI,CAACC,QAAQ,CAAC,eAAA,CAAA,EAAkB;;AAExCV,QAAAA,OAAAA,CAAQR,KAAK,EAAA;QACb,MAAMmB,OAAAA,GAAiBX,QAAQY,IAAI,EAAA;;AAGnC,QAAA,MAAM5B,qBAAsCF,gBAAAA,CAAiB6B,OAAAA,CAAAA;;AAI7D,QAAA,MAAMf,aAAasB,cAAc,CAAClC,mBAAmBE,eAAe,IAAIiC,kBAAkBjC,eAAe,CAAA;;QAGzG,MAAMW,MAAAA,GAAiB,MAAMgB,yBAAAA,CAA0B,EAAC,CAAA;AACxD,QAAA,MAAMC,eAA6B,MAAMC,+BAAAA,EAAAA;AACzC,QAAA,MAAMC,aAAAA,GAA+B;YAAEC,WAAAA,EAAa;AAAc,SAAA;QAElE,OAAO;AAACpB,YAAAA,MAAAA;AAAQiB,YAAAA,YAAAA;AAAcE,YAAAA;AAAc,SAAA;AAChD;;AAGA,IAAA,MAAM,CAACjC,YAAAA,EAAciC,aAAAA,CAAc,GAA2BI,YAAAA,CAAapB,OAAAA,CAAAA;AAC3EF,IAAAA,MAAAA,CAAOuB,KAAK,CAAC,iCAAA,EAAmC9B,KAAK+B,SAAS,CAACvC,cAAc,IAAA,EAAM,CAAA,CAAA,CAAA;;AAGnF,IAAA,MAAMC,qBAAsCF,gBAAAA,CAAiBC,YAAAA,CAAAA;AAC7De,IAAAA,MAAAA,CAAOuB,KAAK,CAAC,sCAAA,EAAwC9B,KAAK+B,SAAS,CAACtC,oBAAoB,IAAA,EAAM,CAAA,CAAA,CAAA;;AAG9F,IAAA,MAAMuC,UAAAA,GAA8B,MAAM3B,YAAAA,CAAa4B,IAAI,CAACxC,kBAAAA,CAAAA;;;AAI5D,IAAA,MAAMyC,UAAAA,GAAa;AACf,QAAA,GAAGN,kBAAkB7B,IAAI;AACzB,QAAA,GAAGiC,WAAWjC,IAAI;AAClB,QAAA,GAAGN,mBAAmBM;AAC1B,KAAA;AAEA,IAAA,MAAMoC,aAAAA,GAAiC;AACnC,QAAA,GAAGP,iBAAiB;AACpB,QAAA,GAAGI,UAAU;AACb,QAAA,GAAGvC,kBAAkB;QACrBM,IAAAA,EAAMmC;AACV,KAAA,CAAA;;IAGA,MAAM5B,MAAAA,GAAiB,MAAMgB,yBAAAA,CAA0Ba,aAAAA,CAAAA;;AAGvD5B,IAAAA,MAAAA,CAAOzC,OAAO,CAAC,6CAAA,CAAA;AACfyC,IAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,WAAW,EAAE2D,aAAAA,CAAcC,WAAW,CAAA,CAAE,CAAA;AACxDnB,IAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,SAAS,EAAEwC,MAAAA,CAAOjC,KAAK,CAAA,CAAE,CAAA;AACzCkC,IAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,WAAW,EAAEwC,MAAAA,CAAO3C,MAAM,CAAA,CAAE,CAAA;AAC5C4C,IAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,SAAS,EAAEwC,MAAAA,CAAOvC,KAAK,CAAA,CAAE,CAAA;AACzCwC,IAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,WAAW,EAAEwC,MAAAA,CAAOxC,OAAO,CAAA,CAAE,CAAA;AAC7CyC,IAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,oBAAoB,EAAEwC,MAAAA,CAAOX,eAAe,CAAA,CAAE,CAAA;AAC9DY,IAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,uBAAuB,EAAEwC,CAAAA,CAAAA,0BAAAA,GAAAA,MAAAA,CAAOhC,kBAAkB,cAAzBgC,0BAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,0BAAAA,CAA2B8B,IAAI,CAAC,UAAS,MAAA,CAAA,CAAQ,CAAA;IAC1F,IAAI9B,MAAAA,CAAOvB,gBAAgB,IAAIuB,MAAAA,CAAOvB,gBAAgB,CAACsD,MAAM,GAAG,CAAA,EAAG;QAC/D9B,MAAAA,CAAOzC,OAAO,CAAC,CAAC,qBAAqB,EAAEwC,OAAOvB,gBAAgB,CAACqD,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AAC/E;AACA,IAAA,IAAIE,OAAOC,IAAI,CAACjC,CAAAA,CAAAA,YAAAA,GAAAA,OAAOP,IAAI,MAAA,IAAA,IAAXO,YAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,YAAAA,CAAajB,UAAU,KAAI,EAAC,CAAA,CAAGgD,MAAM,GAAG,CAAA,EAAG;AACvD9B,QAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,oBAAoB,EAAEwE,MAAAA,CAAOC,IAAI,CAACjC,MAAAA,CAAOP,IAAI,CAAEV,UAAU,CAAA,CAAG+C,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AAC5F;AAEA7B,IAAAA,MAAAA,CAAOuB,KAAK,CAAC,yBAAA,EAA2B9B,KAAK+B,SAAS,CAACzB,QAAQ,IAAA,EAAM,CAAA,CAAA,CAAA;AAErE,IAAA,MAAMiB,eAA6B,MAAMC,+BAAAA,EAAAA;IAEzC,OAAO;AAAClB,QAAAA,MAAAA;AAAQiB,QAAAA,YAAAA;AAAcE,QAAAA;AAAc,KAAA;AAChD;AAEA;AACO,SAASI,aAAapB,OAAgB,EAAA;AAEzC,IAAA,MAAM+B,mBAAmB,CAACC,OAAAA,GAAAA;AACtBA,QAAAA,OAAAA,CACKC,MAAM,CAAC,WAAA,EAAa,wCAAA,CAAA;SACpBA,MAAM,CAAC,WAAA,EAAa,wBAAA,CAAA,CACpBA,MAAM,CAAC,SAAA,EAAW,sBAAA,CAAA,CAClBA,MAAM,CAAC,aAAA,EAAe,kBAAA,CAAA,CACtBA,MAAM,CAAC,iBAAA,EAAmB,qBAAA,CAAA,CAC1BA,MAAM,CAAC,mDAAA,EAAqD,iCAAA,CAAA,CAC5DA,MAAM,CAAC,2BAAA,EAA6B,yBAAA,CAAA,CACpCA,MAAM,CAAC,0BAAA,EAA4B,yBAAA,CAAA;AACnCA,SAAAA,MAAM,CAAC,wCAAA,EAA0C,gCAAA,CAAA;AAC1D,KAAA;;;;IAMA,MAAMC,aAAAA,GAAgBlC,OAAAA,CACjBgC,OAAO,CAAC,QAAA,CAAA,CACRC,MAAM,CAAC,UAAA,EAAY,iBAAA,CAAA,CACnBA,MAAM,CAAC,OAAA,EAAS,mCAAA,CAAA,CAChBA,MAAM,CAAC,UAAA,EAAY,+CAAA,CAAA,CACnBA,MAAM,CAAC,qBAAA,EAAuB,gCAAA,CAAA,CAC9BA,MAAM,CAAC,gCAAA,EAAkC,0CAAA,CAAA,CACzC5B,WAAW,CAAC,uBAAA,CAAA;IACjB0B,gBAAAA,CAAiBG,aAAAA,CAAAA;AAEjB,IAAA,MAAMC,iBAAiBnC,OAAAA,CAClBgC,OAAO,CAAC,SAAA,CAAA,CACRC,MAAM,CAAC,eAAA,EAAiB,uCAAA,CAAA,CACxBA,MAAM,CAAC,aAAa,qCAAA,CAAA,CACpBA,MAAM,CAAC,qBAAA,EAAuB,gCAAA,CAAA,CAC9B5B,WAAW,CAAC,wBAAA,CAAA;IACjB0B,gBAAAA,CAAiBI,cAAAA,CAAAA;IAEjB,MAAMC,cAAAA,GAAiBpC,OAAAA,CAClBgC,OAAO,CAAC,SAAA,CAAA,CACRC,MAAM,CAAC,yBAAA,EAA2B,4CAAA,EAA8C,QAAA,CAAA,CAChF5B,WAAW,CAAC,mBAAA,CAAA;IACjB0B,gBAAAA,CAAiBK,cAAAA,CAAAA;AAEjB,IAAA,MAAMC,WAAAA,GAAcrC,OAAAA,CACfgC,OAAO,CAAC,QACRC,MAAM,CAAC,4BAAA,EAA8B,4EAAA,CAAA,CACrCA,MAAM,CAAC,kCAAA,EAAoC,wBAAA,EAA0B,qBAAA,CAAA,CACrE5B,WAAW,CAAC,mDAAA,CAAA;IACjB0B,gBAAAA,CAAiBM,WAAAA,CAAAA;AAEjB,IAAA,MAAMC,aAAAA,GAAgBtC,OAAAA,CACjBgC,OAAO,CAAC,UACRC,MAAM,CAAC,4BAAA,EAA8B,4EAAA,CAAA,CACrCA,MAAM,CAAC,kCAAA,EAAoC,wBAAA,EAA0B,qBAAA,CAAA,CACrE5B,WAAW,CAAC,sDAAA,CAAA;IACjB0B,gBAAAA,CAAiBO,aAAAA,CAAAA;AAEjBtC,IAAAA,OAAAA,CAAQR,KAAK,EAAA;AAEb,IAAA,MAAMmB,OAAAA,GAAiBX,OAAAA,CAAQY,IAAI,EAAA,CAAA;;AAGnC,IAAA,IAAIK,WAAAA,GAAcsB,eAAAA;IAClB,IAAIC,cAAAA,GAAiC,EAAC,CAAA;AAEtC,IAAA,IAAIxC,OAAAA,CAAQyC,IAAI,CAACb,MAAM,GAAG,CAAA,EAAG;QACzBX,WAAAA,GAAcjB,OAAAA,CAAQyC,IAAI,CAAC,CAAA,CAAE;QAC7BC,eAAAA,CAAgBzB,WAAAA,CAAAA;AACpB;;IAGA,IAAI0B,gBAAAA,CAAiBjC,QAAQ,CAACO,WAAAA,CAAAA,EAAc;AACxC,QAAA,IAAIA,WAAAA,KAAgB,QAAA,IAAYiB,aAAAA,CAActB,IAAI,EAAE;AAChD4B,YAAAA,cAAAA,GAAiBN,cAActB,IAAI,EAAA;AACvC,SAAA,MAAO,IAAIK,WAAAA,KAAgB,SAAA,IAAakB,cAAAA,CAAevB,IAAI,EAAE;AACzD4B,YAAAA,cAAAA,GAAiBL,eAAevB,IAAI,EAAA;AACxC,SAAA,MAAO,IAAIK,WAAAA,KAAgB,SAAA,IAAamB,cAAAA,CAAexB,IAAI,EAAE;AACzD4B,YAAAA,cAAAA,GAAiBJ,eAAexB,IAAI,EAAA;AACxC,SAAA,MAAO,IAAIK,WAAAA,KAAgB,MAAA,IAAUoB,WAAAA,CAAYzB,IAAI,EAAE;AACnD4B,YAAAA,cAAAA,GAAiBH,YAAYzB,IAAI,EAAA;AACrC,SAAA,MAAO,IAAIK,WAAAA,KAAgB,QAAA,IAAYqB,aAAAA,CAAc1B,IAAI,EAAE;AACvD4B,YAAAA,cAAAA,GAAiBF,cAAc1B,IAAI,EAAA;AACvC;AACJ;;AAGA,IAAA,MAAM7B,YAAAA,GAAe;AAAE,QAAA,GAAG4B,OAAO;AAAE,QAAA,GAAG6B;AAAe,KAAA;AACrD,IAAA,MAAMxB,aAAAA,GAAgB;AAAEC,QAAAA;AAAY,KAAA;IACpC,OAAO;AAAClC,QAAAA,YAAAA;AAAciC,QAAAA;AAAc,KAAA;AACxC;AAEO,eAAeD,+BAAAA,GAAAA;;AAElB,IAAA,MAAM6B,aAAAA,GAAgBpC,OAAAA,CAAQC,IAAI,CAACC,QAAQ,CAAC,gBAAA,CAAA;AAC5C,IAAA,MAAMmC,YAAAA,GAAerC,OAAAA,CAAQC,IAAI,CAACC,QAAQ,CAAC,eAAA,CAAA;IAE3C,IAAI,CAACF,QAAQsC,GAAG,CAACC,cAAc,IAAI,CAACH,aAAAA,IAAiB,CAACC,YAAAA,EAAc;AAChE,QAAA,MAAM,IAAInD,KAAAA,CAAM,iGAAA,CAAA;AACpB;;AAGA,IAAA,MAAMhC,YAAAA,GAAe8C,OAAAA,CAAQsC,GAAG,CAACC,cAAc;AAE/C,IAAA,MAAMjC,YAAAA,GAA6B;QAC/BpD,YAAAA,EAAcA;AAClB,KAAA;IAEA,OAAOoD,YAAAA;AACX;AAEA;AACO,eAAeD,0BAA0BmC,OAAwB,EAAA;AAoBvDA,IAAAA,IAAAA,eAAAA,EACGA,gBAAAA,EACAA,gBAAAA,EACMA,gBAAAA,EACLA,gBAAAA,EAGHA,gBAAAA,EACFA,iBAAAA,EACUA,iBAAAA,EACLA,iBAAAA,EAGIA,gBAAAA,EACaA,iBAAAA,EACTA,iBAAAA,EAGLA,aAAAA,EACGA,cAAAA,EACPA,cAAAA;AAtChB,IAAA,MAAMnF,qBAAqB,MAAMoF,0BAAAA,CAA2BD,QAAQnF,kBAAkB,IAAIsD,kBAAkBtD,kBAAkB,CAAA;AAC9H,IAAA,MAAMqF,yBAAAA,GAA4BF,OAAAA,CAAQjF,YAAY,IAAIoD,kBAAkBpD,YAAY;IACxF,MAAMA,YAAAA,GAAe,MAAMoF,2BAAAA,CAA4BD,yBAAAA,CAAAA;AACvD,IAAA,MAAMlF,SAAAA,GAAYgF,OAAAA,CAAQ9D,eAAe,IAAIiC,kBAAkBjC,eAAe;AAKlE8D,IAAAA,IAAAA,eAAAA,EACCA,gBAAAA,EACFA,cAAAA,EACIA,kBAAAA,EACJA,cAAAA,EAMEA,qBACGA,sBAAAA,EACAA,sBAAAA,EACMA,4BAAAA,EAIRA,qBAAAA,EACFA,qBACUA,6BAAAA,EAIDA,4BAAAA,EAEIA,gCAAAA,EAGLA,wBAAAA,EACGA,6BACPA,oBAAAA,EAEMA,yBAAAA;;;AAjCtB,IAAA,MAAMI,WAAAA,GAAsB;QACxBlG,MAAAA,EAAQ8F,CAAAA,kBAAAA,OAAAA,CAAQ9F,MAAM,cAAd8F,eAAAA,KAAAA,MAAAA,GAAAA,eAAAA,GAAkB7B,kBAAkBjE,MAAM;QAClDG,OAAAA,EAAS2F,CAAAA,mBAAAA,OAAAA,CAAQ3F,OAAO,cAAf2F,gBAAAA,KAAAA,MAAAA,GAAAA,gBAAAA,GAAmB7B,kBAAkB9D,OAAO;QACrDC,KAAAA,EAAO0F,CAAAA,iBAAAA,OAAAA,CAAQ1F,KAAK,cAAb0F,cAAAA,KAAAA,MAAAA,GAAAA,cAAAA,GAAiB7B,kBAAkB7D,KAAK;QAC/CC,SAAAA,EAAWyF,CAAAA,qBAAAA,OAAAA,CAAQzF,SAAS,cAAjByF,kBAAAA,KAAAA,MAAAA,GAAAA,kBAAAA,GAAqB7B,kBAAkB5D,SAAS;QAC3DK,KAAAA,EAAOoF,CAAAA,iBAAAA,OAAAA,CAAQpF,KAAK,cAAboF,cAAAA,KAAAA,MAAAA,GAAAA,cAAAA,GAAiB7B,kBAAkBvD,KAAK;QAC/CG,YAAAA,EAAcA,YAAAA;QACdF,kBAAAA,EAAoBA,kBAAAA;QACpBqB,eAAAA,EAAiBlB,SAAAA;;QAEjBmB,MAAAA,EAAQ;AACJjB,YAAAA,GAAAA,EAAK8E,CAAAA,mBAAAA,GAAAA,CAAAA,eAAAA,GAAAA,OAAAA,CAAQ7D,MAAM,MAAA,IAAA,IAAd6D,eAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,eAAAA,CAAgB9E,GAAG,cAAnB8E,mBAAAA,KAAAA,MAAAA,GAAAA,mBAAAA,GAAuB7B,iBAAAA,CAAkBhC,MAAM,CAACjB,GAAG;AACxDD,YAAAA,MAAAA,EAAQ+E,CAAAA,sBAAAA,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQ7D,MAAM,MAAA,IAAA,IAAd6D,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,gBAAAA,CAAgB/E,MAAM,cAAtB+E,sBAAAA,KAAAA,MAAAA,GAAAA,sBAAAA,GAA0B7B,iBAAAA,CAAkBhC,MAAM,CAAClB,MAAM;AACjEE,YAAAA,MAAAA,EAAQ6E,CAAAA,sBAAAA,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQ7D,MAAM,MAAA,IAAA,IAAd6D,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,gBAAAA,CAAgB7E,MAAM,cAAtB6E,sBAAAA,KAAAA,MAAAA,GAAAA,sBAAAA,GAA0B7B,iBAAAA,CAAkBhC,MAAM,CAAChB,MAAM;AACjEK,YAAAA,YAAAA,EAAcwE,CAAAA,4BAAAA,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQ7D,MAAM,MAAA,IAAA,IAAd6D,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,gBAAAA,CAAgBxE,YAAY,cAA5BwE,4BAAAA,KAAAA,MAAAA,GAAAA,4BAAAA,GAAgC7B,iBAAAA,CAAkBhC,MAAM,CAACX,YAAY;AACnFD,YAAAA,OAAO,GAAEyE,gBAAAA,GAAAA,OAAAA,CAAQ7D,MAAM,MAAA,IAAA,IAAd6D,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAgBzE;AAC7B,SAAA;QACAa,OAAAA,EAAS;AACLhB,YAAAA,IAAAA,EAAM4E,CAAAA,qBAAAA,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQ5D,OAAO,MAAA,IAAA,IAAf4D,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,gBAAAA,CAAiB5E,IAAI,cAArB4E,qBAAAA,KAAAA,MAAAA,GAAAA,qBAAAA,GAAyB7B,iBAAAA,CAAkB/B,OAAO,CAAChB,IAAI;AAC7DC,YAAAA,EAAAA,EAAI2E,CAAAA,mBAAAA,GAAAA,CAAAA,iBAAAA,GAAAA,OAAAA,CAAQ5D,OAAO,MAAA,IAAA,IAAf4D,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAAA,CAAiB3E,EAAE,cAAnB2E,mBAAAA,KAAAA,MAAAA,GAAAA,mBAAAA,GAAuB7B,iBAAAA,CAAkB/B,OAAO,CAACf,EAAE;AACvDG,YAAAA,YAAAA,EAAcwE,CAAAA,6BAAAA,GAAAA,CAAAA,iBAAAA,GAAAA,OAAAA,CAAQ5D,OAAO,MAAA,IAAA,IAAf4D,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAAA,CAAiBxE,YAAY,cAA7BwE,6BAAAA,KAAAA,MAAAA,GAAAA,6BAAAA,GAAiC7B,iBAAAA,CAAkB/B,OAAO,CAACZ,YAAY;AACrFD,YAAAA,OAAO,GAAEyE,iBAAAA,GAAAA,OAAAA,CAAQ5D,OAAO,MAAA,IAAA,IAAf4D,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,kBAAiBzE;AAC9B,SAAA;QACAc,OAAAA,EAAS;AACLX,YAAAA,WAAAA,EAAasE,CAAAA,4BAAAA,GAAAA,CAAAA,gBAAAA,GAAAA,OAAAA,CAAQ3D,OAAO,MAAA,IAAA,IAAf2D,gBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,gBAAAA,CAAiBtE,WAAW,cAA5BsE,4BAAAA,KAAAA,MAAAA,GAAAA,4BAAAA,GAAgC7B,iBAAAA,CAAkB9B,OAAO,CAACX,WAAW;AAClF2E,YAAAA,wBAAwB,GAAEL,iBAAAA,GAAAA,OAAAA,CAAQ3D,OAAO,MAAA,IAAA,IAAf2D,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,kBAAiBK,wBAAwB;AACnEC,YAAAA,eAAAA,EAAiBN,CAAAA,gCAAAA,GAAAA,CAAAA,iBAAAA,GAAAA,OAAAA,CAAQ3D,OAAO,MAAA,IAAA,IAAf2D,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAAA,CAAiBM,eAAe,cAAhCN,gCAAAA,KAAAA,MAAAA,GAAAA,gCAAAA,GAAoC7B,iBAAAA,CAAkB9B,OAAO,CAACiE;AACnF,SAAA;QACAhE,IAAAA,EAAM;AACFV,YAAAA,UAAAA,EAAYoE,CAAAA,wBAAAA,GAAAA,CAAAA,aAAAA,GAAAA,OAAAA,CAAQ1D,IAAI,MAAA,IAAA,IAAZ0D,aAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,aAAAA,CAAcpE,UAAU,cAAxBoE,wBAAAA,KAAAA,MAAAA,GAAAA,wBAAAA,GAA4B7B,iBAAAA,CAAkB7B,IAAI,CAACV,UAAU;AACzEC,YAAAA,aAAAA,EAAemE,CAAAA,2BAAAA,GAAAA,CAAAA,cAAAA,GAAAA,OAAAA,CAAQ1D,IAAI,MAAA,IAAA,IAAZ0D,cAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,cAAAA,CAAcnE,aAAa,cAA3BmE,2BAAAA,KAAAA,MAAAA,GAAAA,2BAAAA,GAA+B7B,iBAAAA,CAAkB7B,IAAI,CAACT,aAAa;AAClF3B,YAAAA,MAAAA,EAAQ8F,CAAAA,oBAAAA,GAAAA,CAAAA,cAAAA,GAAAA,OAAAA,CAAQ1D,IAAI,MAAA,IAAA,IAAZ0D,cAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,cAAAA,CAAc9F,MAAM,cAApB8F,oBAAAA,KAAAA,MAAAA,GAAAA,oBAAAA,GAAwB7B,iBAAAA,CAAkB7B,IAAI,CAACpC;AAC3D,SAAA;QACAoB,gBAAAA,EAAkB0E,CAAAA,4BAAAA,OAAAA,CAAQ1E,gBAAgB,cAAxB0E,yBAAAA,KAAAA,MAAAA,GAAAA,yBAAAA,GAA4B7B,kBAAkB7C;AACpE,KAAA;;;IAKA,OAAO8E,WAAAA;AACX;AAEA;AACO,SAASV,gBAAgBzB,WAAmB,EAAA;AAC/C,IAAA,IAAI,CAAC0B,gBAAAA,CAAiBjC,QAAQ,CAACO,WAAAA,CAAAA,EAAc;QACzC,MAAM,IAAIvB,KAAAA,CAAM,CAAC,iBAAiB,EAAEuB,WAAAA,CAAY,oBAAoB,EAAE0B,gBAAAA,CAAiBhB,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AACvG;IACA,OAAOV,WAAAA;AACX;AAoCA;AACO,eAAegC,2BAA2BpF,kBAA4B,EAAA;AACzE,IAAA,MAAMiC,MAAAA,GAASC,SAAAA,EAAAA;IACf,MAAMwD,OAAAA,GAAUC,MAAc,CAAC;AAAEC,QAAAA,GAAAA,EAAK3D,OAAO4D;AAAK,KAAA,CAAA;;AAGlD,IAAA,MAAMC,mBAAmB,EAAE;IAE3B,KAAK,MAAMC,OAAO/F,kBAAAA,CAAoB;QAClC,IAAI;AACA,YAAA,IAAI,MAAM0F,OAAAA,CAAQM,mBAAmB,CAACD,GAAAA,CAAAA,EAAM;AACxCD,gBAAAA,gBAAAA,CAAiBG,IAAI,CAACF,GAAAA,CAAAA;aAC1B,MAAO;AACH9D,gBAAAA,MAAAA,CAAOiE,IAAI,CAAC,CAAC,wBAAwB,EAAEH,GAAAA,CAAAA,CAAK,CAAA;AAChD;AACJ,SAAA,CAAE,OAAOnE,KAAAA,EAAY;YACjBK,MAAAA,CAAOiE,IAAI,CAAC,CAAC,2BAA2B,EAAEH,IAAI,EAAE,EAAEnE,KAAAA,CAAMuE,OAAO,CAAA,CAAE,CAAA;AACrE;AACJ;IAEA,OAAOL,gBAAAA;AACX;AAEA;AACA;AACO,eAAeR,4BAA4Bc,gBAAwB,EAAA;AACtE,IAAA,MAAMnE,MAAAA,GAASC,SAAAA,EAAAA;IACf,MAAMwD,OAAAA,GAAUC,MAAc,CAAC;AAAEC,QAAAA,GAAAA,EAAK3D,OAAO4D;AAAK,KAAA,CAAA;IAClD,IAAI;;AAEA,QAAA,IAAI,MAAMH,OAAAA,CAAQW,cAAc,CAACD,gBAAAA,CAAAA,EAAmB;AAChDnE,YAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,gCAAgC,EAAE4G,gBAAAA,CAAAA,CAAkB,CAAA;YACpE,OAAOV,OAAAA,CAAQY,QAAQ,CAACF,gBAAAA,EAAkBG,0BAAAA,CAAAA;SAC9C,MAAO;;AAEHtE,YAAAA,MAAAA,CAAOzC,OAAO,CAAC,CAAC,4CAA4C,CAAC,CAAA;AAC7D,YAAA,OAAO4G;AACX;AACJ,KAAA,CAAE,OAAOxE,KAAAA,EAAY;AACjBK,QAAAA,MAAAA,CAAOL,KAAK,CAAC,wCAAA,EAA0CwE,gBAAAA,EAAkBxE,MAAMuE,OAAO,CAAA;;;AAGtFlE,QAAAA,MAAAA,CAAOiE,IAAI,CAAC,yDAAA,CAAA;;AAEZ,QAAA,IAAgC,MAAMR,OAAAA,CAAQW,cAAc,CAACG,wBAAAA,CAAAA,EAA2B;YACpF,OAAOd,OAAAA,CAAQY,QAAQ,CAACE,wBAAAA,EAA0BD,0BAAAA,CAAAA;AACtD;AACA,QAAA,MAAM,IAAI1E,KAAAA,CAAM,CAAC,iCAAiC,EAAEuE,gBAAAA,CAAiB,qBAAqB,CAAC,CAAA;AAC/F;AACJ;;;;"}
@@ -8,16 +8,21 @@ import { create as create$2 } from '../content/log.js';
8
8
  import { getLogger } from '../logging.js';
9
9
  import { create } from '../prompt/prompts.js';
10
10
  import { run } from '../util/child.js';
11
- import { createCompletion } from '../util/openai.js';
12
11
  import { stringifyJSON } from '../util/general.js';
12
+ import { createCompletion } from '../util/openai.js';
13
13
 
14
14
  const execute = async (runConfig)=>{
15
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
+ const isDryRun = runConfig.dryRun || false;
18
19
  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');
20
+ if (isDryRun) {
21
+ logger.info('DRY RUN: Would add all changes to the index with: git add -A');
22
+ } else {
23
+ logger.verbose('Adding all changes to the index...');
24
+ await run('git add -A');
25
+ }
21
26
  }
22
27
  let diffContent = '';
23
28
  let cached = (_runConfig_commit1 = runConfig.commit) === null || _runConfig_commit1 === void 0 ? void 0 : _runConfig_commit1.cached;
@@ -29,7 +34,7 @@ const execute = async (runConfig)=>{
29
34
  cached = await hasStagedChanges();
30
35
  }
31
36
  // Fix: Exit early if sendit is true but no changes are staged
32
- if (((_runConfig_commit3 = runConfig.commit) === null || _runConfig_commit3 === void 0 ? void 0 : _runConfig_commit3.sendit) && !cached) {
37
+ if (((_runConfig_commit3 = runConfig.commit) === null || _runConfig_commit3 === void 0 ? void 0 : _runConfig_commit3.sendit) && !cached && !isDryRun) {
33
38
  logger.warn('SendIt mode enabled, but no changes to commit.');
34
39
  process.exit(1);
35
40
  }
@@ -50,28 +55,35 @@ const execute = async (runConfig)=>{
50
55
  const formattedPrompt = Formatter.create({
51
56
  logger
52
57
  }).formatPrompt("gpt-4o-mini", prompt);
53
- logger.debug('Formatted Prompt: %s', stringifyJSON(formattedPrompt));
58
+ logger.silly('Formatted Prompt: %s', stringifyJSON(formattedPrompt));
54
59
  }
55
60
  const request = prompts.format(prompt);
56
61
  const summary = await createCompletion(request.messages, {
57
62
  model: runConfig.model
58
63
  });
59
64
  if ((_runConfig_commit6 = runConfig.commit) === null || _runConfig_commit6 === void 0 ? void 0 : _runConfig_commit6.sendit) {
60
- if (!cached) {
65
+ if (!cached && !isDryRun) {
61
66
  logger.error('SendIt mode enabled, but no changes to commit. Message: \n\n%s\n\n', summary);
62
67
  process.exit(1);
63
68
  }
64
- logger.info('SendIt mode enabled. Committing with message: \n\n%s\n\n', summary);
65
- try {
66
- const escapedSummary = shellescape([
67
- summary
68
- ]);
69
- await run(`git commit -m ${escapedSummary}`);
70
- logger.info('Commit successful!');
71
- } catch (error) {
72
- logger.error('Failed to commit:', error);
73
- process.exit(1);
69
+ if (isDryRun) {
70
+ logger.info('DRY RUN: Would commit with message: \n\n%s\n\n', summary);
71
+ logger.info('DRY RUN: Would execute: git commit -m <generated-message>');
72
+ } else {
73
+ logger.info('SendIt mode enabled. Committing with message: \n\n%s\n\n', summary);
74
+ try {
75
+ const escapedSummary = shellescape([
76
+ summary
77
+ ]);
78
+ await run(`git commit -m ${escapedSummary}`);
79
+ logger.info('Commit successful!');
80
+ } catch (error) {
81
+ logger.error('Failed to commit:', error);
82
+ process.exit(1);
83
+ }
74
84
  }
85
+ } else if (isDryRun) {
86
+ logger.info('DRY RUN: Generated commit message: \n\n%s\n\n', summary);
75
87
  }
76
88
  return summary;
77
89
  };
@@ -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 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":";;;;;;;;;;;;;AAeO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAItBA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAOSA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAETA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAQAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAUOA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAK8DA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAWrEA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AA9CJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAUC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAc,CAACJ,SAAAA,CAAUK,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAA,CAAWL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAEzD,CAAA,CAAA,CAAA,CAAA,IAAA,CAAIA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUM,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,SAAhBN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAkBO,GAAG,CAAA,CAAE,CAAA;AACvBN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOO,CAAAA,CAAAA,CAAAA,CAAI,CAAC,oCAAA,CAAA,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAAA,CAAAA,CAAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAc,CAAA,CAAA,CAAA;AAElB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIC,UAASX,kBAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAhBN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAkBW,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CAAA;;AAErC,CAAA,CAAA,CAAA,CAAA,IAAA,CAAIX,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUM,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,SAAhBN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAkBO,GAAG,CAAA,CAAE,CAAA;QACvBI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAS,CAAA,CAAA,CAAA,CAAA,CAAA;KACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAIA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAWC,SAAAA,CAAAA,CAAW,CAAA;;QAE7BD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAME,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAqB,CAAA,CAAA,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA;;IAGA,CAAA,CAAA,CAAA,CAAIb,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAhBN,yCAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAkBc,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAACH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAAA;AACrCV,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOc,CAAAA,CAAAA,CAAAA,CAAI,CAAC,gDAAA,CAAA,CAAA;AACZC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQC,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA;AAE4CjB,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAA5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMkB,OAAAA,CAAAA,CAAAA,CAAU,CAAA;AAAEP,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAQQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,gBAAAA,CAAAA,CAAkBnB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,CAAUmB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAA1BnB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,eAAAA,2BAAAA,CAAAA,CAAAA,CAA8BoB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACpG,CAAA,CAAA,CAAA,CAAA,MAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,MAAMR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAW,CAACK,OAAAA,CAAAA,CAAAA;IAC/BR,WAAAA,CAAAA,CAAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMW,CAAAA,CAAAA,CAAAA,EAAKC,GAAG,CAAA,CAAA,CAAA;AAE5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,UAAAA,CAAAA,CAAAA,CAAa,CAAA;AACfC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,KAAK,CAAA,EAAExB,kBAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAhBN,kBAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,mBAAkByB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,MAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,MAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAACJ,UAAAA,CAAAA,CAAAA;IAC7B,MAAMK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAa,MAAMF,CAAAA,CAAAA,CAAAA,CAAIJ,GAAG,CAAA,CAAA,CAAA;AAEhC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM1B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ2B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAkB,CAACpB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAakB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY5B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAhBN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAkB+B,OAAO,CAAA,CAAA;IAElG,CAAA,CAAA,CAAA,CAAI/B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUgC,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAA,CAAE,CAAA;QACjB,MAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAkBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUC,MAAM,CAAC,CAAA;AAAElC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;SAAO,CAAA,CAAGmC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAeP,MAAAA,CAAAA,CAAAA;QACjF5B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO+B,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAwBK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAcJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACvD,CAAA,CAAA,CAAA,CAAA,CAAA;IAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMK,OAAAA,CAAAA,CAAAA,CAAmBnC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQoC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CAACV,MAAAA,CAAAA,CAAAA;AAExC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMW,OAAAA,CAAAA,CAAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,gBAAAA,CAAiBH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAAA,CAAkC,CAAA;AAAErC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAUK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAElH,CAAA,CAAA,CAAA,CAAA,IAAA,CAAIL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUM,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,SAAhBN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAkBc,MAAM,CAAA,CAAE,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAACH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAAA;YACTV,MAAAA,CAAO0C,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsEH,OAAAA,CAAAA,CAAAA;AACnFxB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQC,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAEAhB,MAAAA,CAAOO,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4DgC,OAAAA,CAAAA,CAAAA;QACxE,CAAA,CAAA,CAAA,CAAI,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAiBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,CAAA;AAACL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM/B,GAAAA,CAAI,CAAC,cAAc,CAAA,CAAEmC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAgB,CAAA,CAAA;AAC3C3C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOO,CAAAA,CAAAA,CAAAA,CAAI,CAAC,oBAAA,CAAA,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOmC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,CAAA;YACZ1C,MAAAA,CAAO0C,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqBA,KAAAA,CAAAA,CAAAA;AAClC3B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQC,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAA,CAAA,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA,CAAA,CAAA,CAAA;IAEA,OAAOuB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACX,CAAA,CAAA;;"}
1
+ {"version":3,"file":"commit.js","sources":["../../src/commands/commit.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Formatter, Model, Request } 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 { stringifyJSON } from '../util/general';\nimport { createCompletion } from '../util/openai';\n\nexport const execute = async (runConfig: Config) => {\n const logger = getLogger();\n const prompts = Prompts.create(runConfig.model as Model, runConfig);\n const isDryRun = runConfig.dryRun || false;\n\n if (runConfig.commit?.add) {\n if (isDryRun) {\n logger.info('DRY RUN: Would add all changes to the index with: git add -A');\n } else {\n logger.verbose('Adding all changes to the index...');\n await run('git add -A');\n }\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 && !isDryRun) {\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.silly('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 && !isDryRun) {\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 if (isDryRun) {\n logger.info('DRY RUN: Would commit with message: \\n\\n%s\\n\\n', summary);\n logger.info('DRY RUN: Would execute: git commit -m <generated-message>');\n } else {\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 } else if (isDryRun) {\n logger.info('DRY RUN: Generated commit message: \\n\\n%s\\n\\n', summary);\n }\n\n return summary;\n}\n"],"names":["execute","runConfig","logger","getLogger","prompts","Prompts","model","isDryRun","dryRun","commit","add","info","verbose","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","silly","stringifyJSON","request","format","summary","createCompletion","messages","error","escapedSummary","shellescape"],"mappings":"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"}