@eldrforge/kodrdriv 0.0.13 → 0.0.14

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 (38) hide show
  1. package/.kodrdriv/context/content.md +7 -1
  2. package/RELEASE_NOTES.md +14 -0
  3. package/dist/arguments.js +50 -3
  4. package/dist/arguments.js.map +1 -1
  5. package/dist/commands/audio-commit.js +275 -0
  6. package/dist/commands/audio-commit.js.map +1 -0
  7. package/dist/commands/audio-review.js +724 -0
  8. package/dist/commands/audio-review.js.map +1 -0
  9. package/dist/commands/clean.js +36 -0
  10. package/dist/commands/clean.js.map +1 -0
  11. package/dist/commands/commit.js +28 -3
  12. package/dist/commands/commit.js.map +1 -1
  13. package/dist/commands/publish.js +15 -7
  14. package/dist/commands/publish.js.map +1 -1
  15. package/dist/commands/release.js +31 -2
  16. package/dist/commands/release.js.map +1 -1
  17. package/dist/constants.js +25 -3
  18. package/dist/constants.js.map +1 -1
  19. package/dist/main.js +20 -10
  20. package/dist/main.js.map +1 -1
  21. package/dist/prompt/instructions/audio-review.md +102 -0
  22. package/dist/prompt/personas/reviewer.md +29 -0
  23. package/dist/prompt/prompts.js +31 -2
  24. package/dist/prompt/prompts.js.map +1 -1
  25. package/dist/types.js +13 -0
  26. package/dist/types.js.map +1 -1
  27. package/dist/util/general.js +29 -2
  28. package/dist/util/general.js.map +1 -1
  29. package/dist/util/github.js +54 -1
  30. package/dist/util/github.js.map +1 -1
  31. package/dist/util/openai.js +68 -4
  32. package/dist/util/openai.js.map +1 -1
  33. package/dist/util/storage.js +20 -1
  34. package/dist/util/storage.js.map +1 -1
  35. package/output/kodrdriv/250701-1442-release-notes.md +3 -0
  36. package/package.json +3 -2
  37. package/pnpm-workspace.yaml +2 -0
  38. package/vitest.config.ts +3 -3
@@ -1 +1,7 @@
1
- KodrDriv is a tool that is designed to help automate the creation of commit messages and release notes. It is also a tool that has been designed to support an opinionated approach to organizing related projects and conducting structured releases with Git. This initial version focuses on pnpm and GitHub, but there are plans to expand coverage over time.
1
+ KodrDriv is a tool that is designed to help automate the creation of commit messages and release notes. It is also a tool that has been designed to support an opinionated approach to organizing related projects and conducting structured releases with Git. This initial version focuses on pnpm and GitHub, but there are plans to expand coverage over time.
2
+
3
+ KodrDriv is available as an module on npmjs.org under @eldrforge/kodrdriv
4
+
5
+ The name sometimes sounds like "Coder Driv" or "Coder Riv" but that should be corrected to "KodrDriv"
6
+
7
+ Same with the name of the scope "Elder Forge" or "Elderforth" should be corrected to "Edlrforge"
@@ -0,0 +1,14 @@
1
+ This release updates workspace management and CI deployment for projects using pnpm with an opinionated structure. The changes restore explicit workspace scoping and local package link overrides, improving multi-package development while streamlining documentation deployment.
2
+
3
+ **Improvements**
4
+
5
+ * Restored exclusions for the `docs` directory and local dependency overrides in `pnpm-workspace.yaml` to clarify project boundaries and enable local development workflows for core packages.
6
+ * Simplified the `deploy-docs.yml` workflow by removing temporary renaming of the workspace file; documentation builds and deployments now work directly with the refined workspace configuration.
7
+
8
+ **Why these changes matter:**
9
+
10
+ * Empower clearer separation between core packages and documentation in the monorepo setup.
11
+ * Align local development processes and CI deployment behavior.
12
+ * Reduce special-casing and ad-hoc workarounds in documentation workflows.
13
+
14
+ _No breaking changes or new features are introduced for end users._
package/dist/arguments.js CHANGED
@@ -30,7 +30,15 @@ z.object({
30
30
  'rebase'
31
31
  ]).optional(),
32
32
  scopeRoots: z.string().optional(),
33
- workspaceFile: z.string().optional()
33
+ workspaceFile: z.string().optional(),
34
+ includeCommitHistory: z.boolean().optional(),
35
+ includeRecentDiffs: z.boolean().optional(),
36
+ includeReleaseNotes: z.boolean().optional(),
37
+ includeGithubIssues: z.boolean().optional(),
38
+ commitHistoryLimit: z.number().optional(),
39
+ diffHistoryLimit: z.number().optional(),
40
+ releaseNotesLimit: z.number().optional(),
41
+ githubIssuesLimit: z.number().optional()
34
42
  });
35
43
  // Function to transform flat CLI args into nested Config structure
36
44
  const transformCliArgs = (finalCliArgs)=>{
@@ -80,6 +88,21 @@ const transformCliArgs = (finalCliArgs)=>{
80
88
  }
81
89
  if (finalCliArgs.workspaceFile !== undefined) transformedCliArgs.link.workspaceFile = finalCliArgs.workspaceFile;
82
90
  }
91
+ // Nested mappings for 'audio-review' options
92
+ if (finalCliArgs.includeCommitHistory !== undefined || finalCliArgs.includeRecentDiffs !== undefined || finalCliArgs.includeReleaseNotes !== undefined || finalCliArgs.includeGithubIssues !== undefined || finalCliArgs.commitHistoryLimit !== undefined || finalCliArgs.diffHistoryLimit !== undefined || finalCliArgs.releaseNotesLimit !== undefined || finalCliArgs.githubIssuesLimit !== undefined) {
93
+ transformedCliArgs.audioReview = {};
94
+ if (finalCliArgs.includeCommitHistory !== undefined) transformedCliArgs.audioReview.includeCommitHistory = finalCliArgs.includeCommitHistory;
95
+ if (finalCliArgs.includeRecentDiffs !== undefined) transformedCliArgs.audioReview.includeRecentDiffs = finalCliArgs.includeRecentDiffs;
96
+ if (finalCliArgs.includeReleaseNotes !== undefined) transformedCliArgs.audioReview.includeReleaseNotes = finalCliArgs.includeReleaseNotes;
97
+ if (finalCliArgs.includeGithubIssues !== undefined) transformedCliArgs.audioReview.includeGithubIssues = finalCliArgs.includeGithubIssues;
98
+ if (finalCliArgs.commitHistoryLimit !== undefined) transformedCliArgs.audioReview.commitHistoryLimit = finalCliArgs.commitHistoryLimit;
99
+ if (finalCliArgs.diffHistoryLimit !== undefined) transformedCliArgs.audioReview.diffHistoryLimit = finalCliArgs.diffHistoryLimit;
100
+ if (finalCliArgs.releaseNotesLimit !== undefined) transformedCliArgs.audioReview.releaseNotesLimit = finalCliArgs.releaseNotesLimit;
101
+ if (finalCliArgs.githubIssuesLimit !== undefined) transformedCliArgs.audioReview.githubIssuesLimit = finalCliArgs.githubIssuesLimit;
102
+ // Only add context and sendit if we already have an audioReview object from the specific properties above
103
+ if (finalCliArgs.context !== undefined) transformedCliArgs.audioReview.context = finalCliArgs.context;
104
+ if (finalCliArgs.sendit !== undefined) transformedCliArgs.audioReview.sendit = finalCliArgs.sendit;
105
+ }
83
106
  if (finalCliArgs.excludedPatterns !== undefined) transformedCliArgs.excludedPatterns = finalCliArgs.excludedPatterns;
84
107
  // Note: finalCliArgs.openaiApiKey is intentionally omitted here as it belongs to SecureConfig
85
108
  return transformedCliArgs;
@@ -194,6 +217,8 @@ function getCliConfig(program) {
194
217
  // Add subcommands
195
218
  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');
196
219
  addSharedOptions(commitCommand);
220
+ const audioCommitCommand = program.command('audio-commit').option('--cached', 'use cached diff').option('--add', 'add all changes before committing').option('--sendit', 'Commit with the message generated. No review.').option('--message-limit <messageLimit>', 'limit the number of messages to generate').description('Record audio to provide context, then generate and optionally commit with AI-generated message');
221
+ addSharedOptions(audioCommitCommand);
197
222
  const releaseCommand = program.command('release').option('--from <from>', 'branch to generate release notes from').option('--to <to>', 'branch to generate release notes to').option('--context <context>', 'context for the commit message').description('Generate release notes');
198
223
  addSharedOptions(releaseCommand);
199
224
  const publishCommand = program.command('publish').option('--merge-method <method>', 'method to merge PR (merge, squash, rebase)', 'squash').description('Publish a release');
@@ -202,6 +227,10 @@ function getCliConfig(program) {
202
227
  addSharedOptions(linkCommand);
203
228
  const unlinkCommand = program.command('unlink').option('--scope-roots <scopeRoots>', 'JSON mapping of scopes to root directories (e.g., \'{"@company": "../"}\')').option('--workspace-file <workspaceFile>', 'path to workspace file', 'pnpm-workspace.yaml').description('Remove pnpm workspace links and rebuild dependencies');
204
229
  addSharedOptions(unlinkCommand);
230
+ const audioReviewCommand = program.command('audio-review').option('--include-commit-history', 'include recent commit log messages in context (default: true)').option('--no-include-commit-history', 'exclude commit log messages from context').option('--include-recent-diffs', 'include recent commit diffs in context (default: true)').option('--no-include-recent-diffs', 'exclude recent diffs from context').option('--include-release-notes', 'include recent release notes in context (default: false)').option('--no-include-release-notes', 'exclude release notes from context').option('--include-github-issues', 'include open GitHub issues in context (default: true)').option('--no-include-github-issues', 'exclude GitHub issues from context').option('--commit-history-limit <limit>', 'number of recent commits to include', parseInt).option('--diff-history-limit <limit>', 'number of recent commit diffs to include', parseInt).option('--release-notes-limit <limit>', 'number of recent release notes to include', parseInt).option('--github-issues-limit <limit>', 'number of open GitHub issues to include (max 20)', parseInt).option('--context <context>', 'additional context for the audio review').option('--sendit', 'Create GitHub issues automatically without confirmation').description('Record audio, transcribe with Whisper, and analyze for project issues using AI');
231
+ addSharedOptions(audioReviewCommand);
232
+ const cleanCommand = program.command('clean').description('Remove the output directory and all generated files');
233
+ addSharedOptions(cleanCommand);
205
234
  program.parse();
206
235
  const cliArgs = program.opts(); // Get all opts initially
207
236
  // Determine which command is being run
@@ -215,6 +244,8 @@ function getCliConfig(program) {
215
244
  if (ALLOWED_COMMANDS.includes(commandName)) {
216
245
  if (commandName === 'commit' && commitCommand.opts) {
217
246
  commandOptions = commitCommand.opts();
247
+ } else if (commandName === 'audio-commit' && audioCommitCommand.opts) {
248
+ commandOptions = audioCommitCommand.opts();
218
249
  } else if (commandName === 'release' && releaseCommand.opts) {
219
250
  commandOptions = releaseCommand.opts();
220
251
  } else if (commandName === 'publish' && publishCommand.opts) {
@@ -223,6 +254,10 @@ function getCliConfig(program) {
223
254
  commandOptions = linkCommand.opts();
224
255
  } else if (commandName === 'unlink' && unlinkCommand.opts) {
225
256
  commandOptions = unlinkCommand.opts();
257
+ } else if (commandName === 'audio-review' && audioReviewCommand.opts) {
258
+ commandOptions = audioReviewCommand.opts();
259
+ } else if (commandName === 'clean' && cleanCommand.opts) {
260
+ commandOptions = cleanCommand.opts();
226
261
  }
227
262
  }
228
263
  // Include command name in CLI args for merging
@@ -254,12 +289,12 @@ async function validateAndProcessSecureOptions() {
254
289
  }
255
290
  // Renamed validation function to reflect its broader role
256
291
  async function validateAndProcessOptions(options) {
257
- var _options_commit, _options_commit1, _options_commit2, _options_commit3, _options_commit4, _options_release, _options_release1, _options_release2, _options_release3, _options_publish, _options_publish1, _options_publish2, _options_link, _options_link1, _options_link2;
292
+ var _options_commit, _options_commit1, _options_commit2, _options_commit3, _options_commit4, _options_release, _options_release1, _options_release2, _options_release3, _options_audioReview, _options_audioReview1, _options_audioReview2, _options_audioReview3, _options_audioReview4, _options_audioReview5, _options_audioReview6, _options_audioReview7, _options_audioReview8, _options_audioReview9, _options_publish, _options_publish1, _options_publish2, _options_link, _options_link1, _options_link2;
258
293
  const contextDirectories = await validateContextDirectories(options.contextDirectories || KODRDRIV_DEFAULTS.contextDirectories);
259
294
  const instructionsPathOrContent = options.instructions || KODRDRIV_DEFAULTS.instructions;
260
295
  const instructions = await validateAndReadInstructions(instructionsPathOrContent);
261
296
  const configDir = options.configDirectory || KODRDRIV_DEFAULTS.configDirectory;
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;
297
+ 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_audioReview_includeCommitHistory, _options_audioReview_includeRecentDiffs, _options_audioReview_includeReleaseNotes, _options_audioReview_includeGithubIssues, _options_audioReview_commitHistoryLimit, _options_audioReview_diffHistoryLimit, _options_audioReview_releaseNotesLimit, _options_audioReview_githubIssuesLimit, _options_audioReview_sendit, _options_publish_mergeMethod, _options_publish_requiredEnvVars, _options_link_scopeRoots, _options_link_workspaceFile, _options_link_dryRun, _options_excludedPatterns;
263
298
  // Skip config directory validation since Cardigantime handles hierarchical lookup
264
299
  // Ensure all required fields are present and have correct types after merging
265
300
  const finalConfig = {
@@ -285,6 +320,18 @@ async function validateAndProcessOptions(options) {
285
320
  messageLimit: (_options_release_messageLimit = (_options_release2 = options.release) === null || _options_release2 === void 0 ? void 0 : _options_release2.messageLimit) !== null && _options_release_messageLimit !== void 0 ? _options_release_messageLimit : KODRDRIV_DEFAULTS.release.messageLimit,
286
321
  context: (_options_release3 = options.release) === null || _options_release3 === void 0 ? void 0 : _options_release3.context
287
322
  },
323
+ audioReview: {
324
+ includeCommitHistory: (_options_audioReview_includeCommitHistory = (_options_audioReview = options.audioReview) === null || _options_audioReview === void 0 ? void 0 : _options_audioReview.includeCommitHistory) !== null && _options_audioReview_includeCommitHistory !== void 0 ? _options_audioReview_includeCommitHistory : KODRDRIV_DEFAULTS.audioReview.includeCommitHistory,
325
+ includeRecentDiffs: (_options_audioReview_includeRecentDiffs = (_options_audioReview1 = options.audioReview) === null || _options_audioReview1 === void 0 ? void 0 : _options_audioReview1.includeRecentDiffs) !== null && _options_audioReview_includeRecentDiffs !== void 0 ? _options_audioReview_includeRecentDiffs : KODRDRIV_DEFAULTS.audioReview.includeRecentDiffs,
326
+ includeReleaseNotes: (_options_audioReview_includeReleaseNotes = (_options_audioReview2 = options.audioReview) === null || _options_audioReview2 === void 0 ? void 0 : _options_audioReview2.includeReleaseNotes) !== null && _options_audioReview_includeReleaseNotes !== void 0 ? _options_audioReview_includeReleaseNotes : KODRDRIV_DEFAULTS.audioReview.includeReleaseNotes,
327
+ includeGithubIssues: (_options_audioReview_includeGithubIssues = (_options_audioReview3 = options.audioReview) === null || _options_audioReview3 === void 0 ? void 0 : _options_audioReview3.includeGithubIssues) !== null && _options_audioReview_includeGithubIssues !== void 0 ? _options_audioReview_includeGithubIssues : KODRDRIV_DEFAULTS.audioReview.includeGithubIssues,
328
+ commitHistoryLimit: (_options_audioReview_commitHistoryLimit = (_options_audioReview4 = options.audioReview) === null || _options_audioReview4 === void 0 ? void 0 : _options_audioReview4.commitHistoryLimit) !== null && _options_audioReview_commitHistoryLimit !== void 0 ? _options_audioReview_commitHistoryLimit : KODRDRIV_DEFAULTS.audioReview.commitHistoryLimit,
329
+ diffHistoryLimit: (_options_audioReview_diffHistoryLimit = (_options_audioReview5 = options.audioReview) === null || _options_audioReview5 === void 0 ? void 0 : _options_audioReview5.diffHistoryLimit) !== null && _options_audioReview_diffHistoryLimit !== void 0 ? _options_audioReview_diffHistoryLimit : KODRDRIV_DEFAULTS.audioReview.diffHistoryLimit,
330
+ releaseNotesLimit: (_options_audioReview_releaseNotesLimit = (_options_audioReview6 = options.audioReview) === null || _options_audioReview6 === void 0 ? void 0 : _options_audioReview6.releaseNotesLimit) !== null && _options_audioReview_releaseNotesLimit !== void 0 ? _options_audioReview_releaseNotesLimit : KODRDRIV_DEFAULTS.audioReview.releaseNotesLimit,
331
+ githubIssuesLimit: (_options_audioReview_githubIssuesLimit = (_options_audioReview7 = options.audioReview) === null || _options_audioReview7 === void 0 ? void 0 : _options_audioReview7.githubIssuesLimit) !== null && _options_audioReview_githubIssuesLimit !== void 0 ? _options_audioReview_githubIssuesLimit : KODRDRIV_DEFAULTS.audioReview.githubIssuesLimit,
332
+ context: (_options_audioReview8 = options.audioReview) === null || _options_audioReview8 === void 0 ? void 0 : _options_audioReview8.context,
333
+ sendit: (_options_audioReview_sendit = (_options_audioReview9 = options.audioReview) === null || _options_audioReview9 === void 0 ? void 0 : _options_audioReview9.sendit) !== null && _options_audioReview_sendit !== void 0 ? _options_audioReview_sendit : KODRDRIV_DEFAULTS.audioReview.sendit
334
+ },
288
335
  publish: {
289
336
  mergeMethod: (_options_publish_mergeMethod = (_options_publish = options.publish) === null || _options_publish === void 0 ? void 0 : _options_publish.mergeMethod) !== null && _options_publish_mergeMethod !== void 0 ? _options_publish_mergeMethod : KODRDRIV_DEFAULTS.publish.mergeMethod,
290
337
  dependencyUpdatePatterns: (_options_publish1 = options.publish) === null || _options_publish1 === void 0 ? void 0 : _options_publish1.dependencyUpdatePatterns,
@@ -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 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":"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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 includeCommitHistory: z.boolean().optional(),\n includeRecentDiffs: z.boolean().optional(),\n includeReleaseNotes: z.boolean().optional(),\n includeGithubIssues: z.boolean().optional(),\n commitHistoryLimit: z.number().optional(),\n diffHistoryLimit: z.number().optional(),\n releaseNotesLimit: z.number().optional(),\n githubIssuesLimit: z.number().optional(),\n});\n\nexport type Input = z.infer<typeof InputSchema>;\n\n// Function to transform flat CLI args into nested Config structure\nexport const transformCliArgs = (finalCliArgs: Input): Partial<Config> => {\n const transformedCliArgs: Partial<Config> = {};\n\n // Direct mappings from Input to Config\n if (finalCliArgs.dryRun !== undefined) transformedCliArgs.dryRun = finalCliArgs.dryRun;\n if (finalCliArgs.verbose !== undefined) transformedCliArgs.verbose = finalCliArgs.verbose;\n if (finalCliArgs.debug !== undefined) transformedCliArgs.debug = finalCliArgs.debug;\n if (finalCliArgs.overrides !== undefined) transformedCliArgs.overrides = finalCliArgs.overrides;\n if (finalCliArgs.model !== undefined) transformedCliArgs.model = finalCliArgs.model;\n if (finalCliArgs.contextDirectories !== undefined) transformedCliArgs.contextDirectories = finalCliArgs.contextDirectories;\n if (finalCliArgs.instructions !== undefined) transformedCliArgs.instructions = finalCliArgs.instructions;\n\n // Map configDir (CLI) to configDirectory (Cardigantime standard)\n if (finalCliArgs.configDir !== undefined) transformedCliArgs.configDirectory = finalCliArgs.configDir;\n\n // Nested mappings for 'commit' options\n if (finalCliArgs.cached !== undefined || finalCliArgs.sendit !== undefined || 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 // Nested mappings for 'audio-review' options\n if (finalCliArgs.includeCommitHistory !== undefined ||\n finalCliArgs.includeRecentDiffs !== undefined ||\n finalCliArgs.includeReleaseNotes !== undefined ||\n finalCliArgs.includeGithubIssues !== undefined ||\n finalCliArgs.commitHistoryLimit !== undefined ||\n finalCliArgs.diffHistoryLimit !== undefined ||\n finalCliArgs.releaseNotesLimit !== undefined ||\n finalCliArgs.githubIssuesLimit !== undefined) {\n transformedCliArgs.audioReview = {};\n if (finalCliArgs.includeCommitHistory !== undefined) transformedCliArgs.audioReview.includeCommitHistory = finalCliArgs.includeCommitHistory;\n if (finalCliArgs.includeRecentDiffs !== undefined) transformedCliArgs.audioReview.includeRecentDiffs = finalCliArgs.includeRecentDiffs;\n if (finalCliArgs.includeReleaseNotes !== undefined) transformedCliArgs.audioReview.includeReleaseNotes = finalCliArgs.includeReleaseNotes;\n if (finalCliArgs.includeGithubIssues !== undefined) transformedCliArgs.audioReview.includeGithubIssues = finalCliArgs.includeGithubIssues;\n if (finalCliArgs.commitHistoryLimit !== undefined) transformedCliArgs.audioReview.commitHistoryLimit = finalCliArgs.commitHistoryLimit;\n if (finalCliArgs.diffHistoryLimit !== undefined) transformedCliArgs.audioReview.diffHistoryLimit = finalCliArgs.diffHistoryLimit;\n if (finalCliArgs.releaseNotesLimit !== undefined) transformedCliArgs.audioReview.releaseNotesLimit = finalCliArgs.releaseNotesLimit;\n if (finalCliArgs.githubIssuesLimit !== undefined) transformedCliArgs.audioReview.githubIssuesLimit = finalCliArgs.githubIssuesLimit;\n // Only add context and sendit if we already have an audioReview object from the specific properties above\n if (finalCliArgs.context !== undefined) transformedCliArgs.audioReview.context = finalCliArgs.context;\n if (finalCliArgs.sendit !== undefined) transformedCliArgs.audioReview.sendit = finalCliArgs.sendit;\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 audioCommitCommand = program\n .command('audio-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('--message-limit <messageLimit>', 'limit the number of messages to generate')\n .description('Record audio to provide context, then generate and optionally commit with AI-generated message');\n addSharedOptions(audioCommitCommand);\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 const audioReviewCommand = program\n .command('audio-review')\n .option('--include-commit-history', 'include recent commit log messages in context (default: true)')\n .option('--no-include-commit-history', 'exclude commit log messages from context')\n .option('--include-recent-diffs', 'include recent commit diffs in context (default: true)')\n .option('--no-include-recent-diffs', 'exclude recent diffs from context')\n .option('--include-release-notes', 'include recent release notes in context (default: false)')\n .option('--no-include-release-notes', 'exclude release notes from context')\n .option('--include-github-issues', 'include open GitHub issues in context (default: true)')\n .option('--no-include-github-issues', 'exclude GitHub issues from context')\n .option('--commit-history-limit <limit>', 'number of recent commits to include', parseInt)\n .option('--diff-history-limit <limit>', 'number of recent commit diffs to include', parseInt)\n .option('--release-notes-limit <limit>', 'number of recent release notes to include', parseInt)\n .option('--github-issues-limit <limit>', 'number of open GitHub issues to include (max 20)', parseInt)\n .option('--context <context>', 'additional context for the audio review')\n .option('--sendit', 'Create GitHub issues automatically without confirmation')\n .description('Record audio, transcribe with Whisper, and analyze for project issues using AI');\n addSharedOptions(audioReviewCommand);\n\n const cleanCommand = program\n .command('clean')\n .description('Remove the output directory and all generated files');\n addSharedOptions(cleanCommand);\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 === 'audio-commit' && audioCommitCommand.opts) {\n commandOptions = audioCommitCommand.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 } else if (commandName === 'audio-review' && audioReviewCommand.opts) {\n commandOptions = audioReviewCommand.opts<Partial<Input>>();\n } else if (commandName === 'clean' && cleanCommand.opts) {\n commandOptions = cleanCommand.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 audioReview: {\n includeCommitHistory: options.audioReview?.includeCommitHistory ?? KODRDRIV_DEFAULTS.audioReview.includeCommitHistory,\n includeRecentDiffs: options.audioReview?.includeRecentDiffs ?? KODRDRIV_DEFAULTS.audioReview.includeRecentDiffs,\n includeReleaseNotes: options.audioReview?.includeReleaseNotes ?? KODRDRIV_DEFAULTS.audioReview.includeReleaseNotes,\n includeGithubIssues: options.audioReview?.includeGithubIssues ?? KODRDRIV_DEFAULTS.audioReview.includeGithubIssues,\n commitHistoryLimit: options.audioReview?.commitHistoryLimit ?? KODRDRIV_DEFAULTS.audioReview.commitHistoryLimit,\n diffHistoryLimit: options.audioReview?.diffHistoryLimit ?? KODRDRIV_DEFAULTS.audioReview.diffHistoryLimit,\n releaseNotesLimit: options.audioReview?.releaseNotesLimit ?? KODRDRIV_DEFAULTS.audioReview.releaseNotesLimit,\n githubIssuesLimit: options.audioReview?.githubIssuesLimit ?? KODRDRIV_DEFAULTS.audioReview.githubIssuesLimit,\n context: options.audioReview?.context,\n sendit: options.audioReview?.sendit ?? KODRDRIV_DEFAULTS.audioReview.sendit,\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","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","transformCliArgs","finalCliArgs","transformedCliArgs","undefined","configDirectory","commit","release","publish","link","JSON","parse","error","Error","audioReview","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","audioCommitCommand","releaseCommand","publishCommand","linkCommand","unlinkCommand","audioReviewCommand","parseInt","cleanCommand","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":"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"}