@grunnverk/kodrdriv 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/.cursor/rules/no-local-dependencies.md +6 -0
  3. package/.gitignore~ +23 -0
  4. package/.kodrdriv-example-branch-targeting.yaml +71 -0
  5. package/BUG_TREE_PUBLISH_CONFIG_DIR.md +79 -0
  6. package/LICENSE +190 -0
  7. package/README.md +218 -0
  8. package/dist/application.js +228 -0
  9. package/dist/application.js.map +1 -0
  10. package/dist/arguments.js +1307 -0
  11. package/dist/arguments.js.map +1 -0
  12. package/dist/constants.js +255 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/logging.js +176 -0
  15. package/dist/logging.js.map +1 -0
  16. package/dist/main.js +24 -0
  17. package/dist/main.js.map +1 -0
  18. package/dist/mcp/prompts/check_development.md +169 -0
  19. package/dist/mcp/prompts/dependency_update.md +62 -0
  20. package/dist/mcp/prompts/fix_and_commit.md +53 -0
  21. package/dist/mcp/prompts/publish.md +100 -0
  22. package/dist/mcp/prompts/tree_fix_and_commit.md +102 -0
  23. package/dist/mcp/prompts/tree_publish.md +118 -0
  24. package/dist/mcp-server.js +15601 -0
  25. package/dist/mcp-server.js.map +7 -0
  26. package/dist/types.js +303 -0
  27. package/dist/types.js.map +1 -0
  28. package/guide/ai-system.md +522 -0
  29. package/guide/architecture.md +349 -0
  30. package/guide/commands.md +383 -0
  31. package/guide/configuration.md +516 -0
  32. package/guide/debugging.md +587 -0
  33. package/guide/development.md +632 -0
  34. package/guide/index.md +224 -0
  35. package/guide/integration.md +510 -0
  36. package/guide/monorepo.md +533 -0
  37. package/guide/quickstart.md +249 -0
  38. package/guide/testing.md +463 -0
  39. package/guide/tree-operations.md +621 -0
  40. package/guide/usage.md +578 -0
  41. package/input/250509-kodrdriv-library-rules.m4a +0 -0
  42. package/package.json +105 -0
  43. package/packages/components/package.json +7 -0
  44. package/packages/tools/package.json +7 -0
  45. package/packages/utils/package.json +7 -0
  46. package/processed/250705-kodrdriv-confirm-editor-for-commit-and-release.m4a +0 -0
  47. package/processed/250705-kodrdriv-confirm-flag-release.m4a +0 -0
  48. package/processed/250705-kodrdriv-context-for-review.m4a +0 -0
  49. package/processed/250705-kodrdriv-feedback-on-publish-pipeline.m4a +0 -0
  50. package/processed/250705-kodrdriv-intelligent-eslint-style.m4a +0 -0
  51. package/processed/250705-kodrdriv-make-review-less-strict.m4a +0 -0
  52. package/processed/250705-kodrdriv-multilevel-transcription.m4a +0 -0
  53. package/processed/250705-kodrdriv-opinionated-review.m4a +0 -0
  54. package/processed/250705-kodrdriv-publish-next-version.m4a +0 -0
  55. package/processed/250705-kodrdriv-release-branches-and-milestones.m4a +0 -0
  56. package/processed/250705-kodrdriv-scope-check-fix-or-ignore.m4a +0 -0
  57. package/processed/250705-kodrdriv-scope-checker.m4a +0 -0
  58. package/processed/250705-kodrdriv-specify-a-release-note-for-publish.m4a +0 -0
  59. package/scripts/build-mcp.js +111 -0
  60. package/scripts/pre-commit-hook.sh +52 -0
  61. package/scripts/test-get-version-tool.js +102 -0
  62. package/scripts/test-mcp-compliance.js +254 -0
  63. package/scripts/update-test-log-assertions.js +73 -0
  64. package/temp-dist/arguments.js +817 -0
  65. package/temp-dist/constants.js +202 -0
  66. package/temp-dist/logging.js +130 -0
  67. package/temp-dist/types.js +112 -0
  68. package/temp-dist/util/stdin.js +132 -0
  69. package/temp-dist/util/storage.js +149 -0
  70. package/temp-dist/util/validation.js +110 -0
  71. package/test-external-unlink/package.json +16 -0
  72. package/test-externals/package.json +8 -0
  73. package/test-increment.js +0 -0
  74. package/test-multiline/cli/package.json +8 -0
  75. package/test-multiline/core/package.json +5 -0
  76. package/test-multiline/mobile/package.json +8 -0
  77. package/test-multiline/web/package.json +8 -0
  78. package/test-project/package-lock.json +21 -0
  79. package/test-project/package.json +1 -0
  80. package/test-review-flow.sh +15 -0
  81. package/test-sort-files/alpha.md +3 -0
  82. package/test-sort-files/middle.txt +3 -0
  83. package/test-sort-files/zebra.txt +3 -0
  84. package/test_output.txt +161 -0
@@ -0,0 +1,228 @@
1
+ import { config } from 'dotenv';
2
+ import * as Cardigantime from '@theunwalked/cardigantime';
3
+ import { setLogger } from '@grunnverk/git-tools';
4
+ import { setLogger as setLogger$1, setPromptFunction } from '@grunnverk/github-tools';
5
+ import { promptConfirmation, UserCancellationError } from '@grunnverk/shared';
6
+ import { initializeTemplates } from '@grunnverk/ai-service';
7
+ import { configure } from './arguments.js';
8
+ import * as CommandsGit from '@grunnverk/commands-git';
9
+ import * as CommandsTree from '@grunnverk/commands-tree';
10
+ import * as CommandsPublish from '@grunnverk/commands-publish';
11
+ import * as CommandsAudio from '@grunnverk/commands-audio';
12
+ import { DEFAULT_CONFIG_DIR, VERSION, BUILD_HOSTNAME, BUILD_TIMESTAMP, COMMAND_CHECK_CONFIG, COMMAND_INIT_CONFIG, COMMAND_COMMIT, COMMAND_PRECOMMIT, COMMAND_CLEAN, COMMAND_PULL, COMMAND_REVIEW, COMMAND_TREE, COMMAND_LINK, COMMAND_UNLINK, COMMAND_UPDATES, COMMAND_VERSIONS, COMMAND_RELEASE, COMMAND_PUBLISH, COMMAND_DEVELOPMENT, COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_SELECT_AUDIO } from './constants.js';
13
+ import { getLogger, setLogLevel } from './logging.js';
14
+ import { ConfigSchema } from './types.js';
15
+
16
+ // Load .env file if it exists, but NEVER override existing environment variables
17
+ // This MUST be the first thing we do, before any other imports that might load dotenv
18
+ // This ensures that shell-exported variables like OPENAI_API_KEY take precedence
19
+ config({
20
+ override: false,
21
+ debug: false
22
+ });
23
+ /**
24
+ * Check Node.js version and exit with clear error message if version is too old.
25
+ */ function checkNodeVersion() {
26
+ const requiredMajorVersion = 24;
27
+ const currentVersion = process.version;
28
+ const majorVersion = parseInt(currentVersion.slice(1).split('.')[0], 10);
29
+ if (majorVersion < requiredMajorVersion) {
30
+ // eslint-disable-next-line no-console
31
+ console.error(`\n❌ ERROR: Node.js version ${requiredMajorVersion}.0.0 or higher is required.`);
32
+ // eslint-disable-next-line no-console
33
+ console.error(` Current version: ${currentVersion}`);
34
+ // eslint-disable-next-line no-console
35
+ console.error(` Please upgrade your Node.js version to continue.\n`);
36
+ // eslint-disable-next-line no-console
37
+ console.error(` This project uses Vite 7+ which requires Node.js ${requiredMajorVersion}+.\n`);
38
+ process.exit(1);
39
+ }
40
+ }
41
+ /**
42
+ * Print debug information about the command being executed when debug flag is enabled.
43
+ */ function printDebugCommandInfo(commandName, runConfig) {
44
+ if (runConfig.debug) {
45
+ const logger = getLogger();
46
+ logger.info('DEBUG_INFO_HEADER: KodrDriv debug information');
47
+ logger.info('DEBUG_INFO_COMMAND: Command being executed | Command: %s', commandName);
48
+ logger.info('DEBUG_INFO_VERSION: KodrDriv version | Version: %s', VERSION);
49
+ // Log last 4 characters of tokens for debugging permissions issues
50
+ const openaiToken = process.env.OPENAI_API_KEY;
51
+ const githubToken = process.env.GITHUB_TOKEN;
52
+ if (openaiToken) {
53
+ const tokenSuffix = openaiToken.slice(-4);
54
+ logger.info('DEBUG_INFO_TOKEN: OpenAI API Key | Suffix: ...%s', tokenSuffix);
55
+ } else {
56
+ logger.info('DEBUG_INFO_TOKEN: OpenAI API Key | Status: not set');
57
+ }
58
+ if (githubToken) {
59
+ const tokenSuffix = githubToken.slice(-4);
60
+ logger.info('DEBUG_INFO_TOKEN: GitHub Token | Suffix: ...%s', tokenSuffix);
61
+ } else {
62
+ logger.info('DEBUG_INFO_TOKEN: GitHub Token | Status: not set');
63
+ }
64
+ logger.info('DEBUG_INFO_FOOTER: End of debug information');
65
+ }
66
+ }
67
+ /**
68
+ * Configure early logging based on command line flags.
69
+ *
70
+ * Hey we need this because we need to be able to debug CardiganTime.
71
+ * This method checks for --verbose and --debug flags early in the process
72
+ * before CardiganTime is configured, allowing us to capture debug output
73
+ * from the CardiganTime initialization itself.
74
+ */ function configureEarlyLogging() {
75
+ const hasVerbose = process.argv.includes('--verbose');
76
+ const hasDebug = process.argv.includes('--debug');
77
+ // Set log level based on early flag detection
78
+ if (hasDebug) {
79
+ setLogLevel('debug');
80
+ } else if (hasVerbose) {
81
+ setLogLevel('verbose');
82
+ }
83
+ }
84
+ async function runApplication() {
85
+ // Check Node.js version first, before doing anything else
86
+ checkNodeVersion();
87
+ // Configure logging early, before CardiganTime initialization
88
+ configureEarlyLogging();
89
+ // Initialize RiotPrompt templates for ai-service
90
+ initializeTemplates();
91
+ const cardigantimeModule = Cardigantime;
92
+ const createCardigantime = cardigantimeModule.create;
93
+ const cardigantime = createCardigantime({
94
+ defaults: {
95
+ configDirectory: DEFAULT_CONFIG_DIR
96
+ },
97
+ configShape: ConfigSchema.shape,
98
+ features: [
99
+ 'config',
100
+ 'hierarchical'
101
+ ],
102
+ logger: getLogger()
103
+ });
104
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
105
+ const [runConfig, secureConfig, commandConfig] = await configure(cardigantime); // Pass cardigantime instance
106
+ // Set log level based on verbose flag
107
+ if (runConfig.verbose) {
108
+ setLogLevel('verbose');
109
+ }
110
+ if (runConfig.debug) {
111
+ setLogLevel('debug');
112
+ }
113
+ const logger = getLogger();
114
+ cardigantime.setLogger(logger);
115
+ // Configure external packages to use our logger and prompt
116
+ setLogger(logger);
117
+ setLogger$1(logger);
118
+ setPromptFunction(promptConfirmation);
119
+ // Display version information including build metadata
120
+ logger.info('APPLICATION_STARTING: KodrDriv application initializing | Version: %s | BuildHost: %s | BuildTime: %s | Status: starting', VERSION, BUILD_HOSTNAME, BUILD_TIMESTAMP);
121
+ // Handle check-config command first
122
+ if (commandConfig.commandName === COMMAND_CHECK_CONFIG) {
123
+ // CardiganTime's checkConfig has already been called in Arguments.configure()
124
+ // No additional processing needed here
125
+ return;
126
+ }
127
+ // Handle init-config command
128
+ if (commandConfig.commandName === COMMAND_INIT_CONFIG) {
129
+ // CardiganTime's initConfig has already been called in Arguments.configure()
130
+ // No additional processing needed here
131
+ return;
132
+ }
133
+ // Get the command from Commander
134
+ const command = process.argv[2];
135
+ let commandName = commandConfig.commandName;
136
+ // Handle special case for tree command with built-in command argument
137
+ if (command === 'tree' && process.argv[3]) {
138
+ const treeBuiltInCommand = process.argv[3];
139
+ const supportedBuiltInCommands = [
140
+ 'commit',
141
+ 'publish',
142
+ 'link',
143
+ 'unlink',
144
+ 'development',
145
+ 'updates',
146
+ 'pull'
147
+ ];
148
+ if (supportedBuiltInCommands.includes(treeBuiltInCommand)) {
149
+ // This is a tree command with built-in command, keep commandName as 'tree'
150
+ commandName = 'tree';
151
+ } else {
152
+ // Unknown tree argument, let it fail naturally in tree.ts
153
+ commandName = 'tree';
154
+ }
155
+ } else if (command === 'commit' || command === 'audio-commit' || command === 'release' || command === 'publish' || command === 'tree' || command === 'link' || command === 'unlink' || command === 'audio-review' || command === 'clean' || command === 'pull' || command === 'precommit' || command === 'review' || command === 'select-audio' || command === 'development' || command === 'versions' || command === 'updates') {
156
+ commandName = command;
157
+ }
158
+ let summary = '';
159
+ try {
160
+ // Print debug info at the start of command execution
161
+ if (commandName) {
162
+ printDebugCommandInfo(commandName, runConfig);
163
+ }
164
+ // Git commands (from @grunnverk/commands-git)
165
+ if (commandName === COMMAND_COMMIT) {
166
+ summary = await CommandsGit.commit(runConfig);
167
+ } else if (commandName === COMMAND_PRECOMMIT) {
168
+ summary = await CommandsGit.precommit(runConfig);
169
+ } else if (commandName === COMMAND_CLEAN) {
170
+ await CommandsGit.clean(runConfig);
171
+ summary = 'Output directory cleaned successfully.';
172
+ } else if (commandName === COMMAND_PULL) {
173
+ summary = await CommandsGit.pull(runConfig);
174
+ } else if (commandName === COMMAND_REVIEW) {
175
+ summary = await CommandsGit.review(runConfig);
176
+ } else if (commandName === COMMAND_TREE) {
177
+ var _runConfig_audioReview, _runConfig_tree, _runConfig_tree1;
178
+ // Handle tree directories mapping from command-specific arguments
179
+ if (((_runConfig_audioReview = runConfig.audioReview) === null || _runConfig_audioReview === void 0 ? void 0 : _runConfig_audioReview.directory) && !((_runConfig_tree = runConfig.tree) === null || _runConfig_tree === void 0 ? void 0 : _runConfig_tree.directories)) {
180
+ runConfig.tree = runConfig.tree || {};
181
+ runConfig.tree.directories = [
182
+ runConfig.audioReview.directory
183
+ ];
184
+ }
185
+ // Handle tree exclusion patterns - use global excludedPatterns for tree
186
+ if (runConfig.excludedPatterns && !((_runConfig_tree1 = runConfig.tree) === null || _runConfig_tree1 === void 0 ? void 0 : _runConfig_tree1.exclude)) {
187
+ runConfig.tree = runConfig.tree || {};
188
+ runConfig.tree.exclude = runConfig.excludedPatterns;
189
+ }
190
+ summary = await CommandsTree.tree(runConfig);
191
+ } else if (commandName === COMMAND_LINK) {
192
+ summary = await CommandsTree.link(runConfig);
193
+ } else if (commandName === COMMAND_UNLINK) {
194
+ summary = await CommandsTree.unlink(runConfig);
195
+ } else if (commandName === COMMAND_UPDATES) {
196
+ summary = await CommandsTree.updates(runConfig);
197
+ } else if (commandName === COMMAND_VERSIONS) {
198
+ summary = await CommandsTree.versions(runConfig);
199
+ } else if (commandName === COMMAND_RELEASE) {
200
+ const releaseSummary = await CommandsPublish.release(runConfig);
201
+ summary = `${releaseSummary.title}\n\n${releaseSummary.body}`;
202
+ } else if (commandName === COMMAND_PUBLISH) {
203
+ await CommandsPublish.publish(runConfig);
204
+ } else if (commandName === COMMAND_DEVELOPMENT) {
205
+ summary = await CommandsPublish.development(runConfig);
206
+ } else if (commandName === COMMAND_AUDIO_COMMIT) {
207
+ summary = await CommandsAudio.audioCommit(runConfig);
208
+ } else if (commandName === COMMAND_AUDIO_REVIEW) {
209
+ summary = await CommandsAudio.audioReview(runConfig);
210
+ } else if (commandName === COMMAND_SELECT_AUDIO) {
211
+ await CommandsAudio.selectAudio(runConfig);
212
+ summary = 'Audio selection completed successfully.';
213
+ }
214
+ // eslint-disable-next-line no-console
215
+ console.log(`\n\n${summary}\n\n`);
216
+ } catch (error) {
217
+ // Handle user cancellation gracefully
218
+ if (error instanceof UserCancellationError) {
219
+ logger.info('APPLICATION_ERROR: Application error occurred | Error: ' + error.message);
220
+ process.exit(0);
221
+ }
222
+ // Re-throw other errors to be handled by main.ts
223
+ throw error;
224
+ }
225
+ }
226
+
227
+ export { configureEarlyLogging, runApplication };
228
+ //# sourceMappingURL=application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.js","sources":["../src/application.ts"],"sourcesContent":["// Load .env file if it exists, but NEVER override existing environment variables\n// This MUST be the first thing we do, before any other imports that might load dotenv\n// This ensures that shell-exported variables like OPENAI_API_KEY take precedence\nimport { config as dotenvConfig } from 'dotenv';\ndotenvConfig({ override: false, debug: false });\n\nimport * as Cardigantime from '@theunwalked/cardigantime';\nimport { setLogger as setGitLogger } from '@grunnverk/git-tools';\nimport { setLogger as setGitHubLogger, setPromptFunction } from '@grunnverk/github-tools';\nimport { promptConfirmation } from '@grunnverk/shared';\nimport { initializeTemplates } from '@grunnverk/ai-service';\nimport { CommandConfig } from 'types';\nimport * as Arguments from './arguments';\n\n// Import commands from extracted packages\nimport * as CommandsGit from '@grunnverk/commands-git';\nimport * as CommandsTree from '@grunnverk/commands-tree';\nimport * as CommandsPublish from '@grunnverk/commands-publish';\nimport * as CommandsAudio from '@grunnverk/commands-audio';\nimport { COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_DEVELOPMENT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PRECOMMIT, COMMAND_PUBLISH, COMMAND_PULL, COMMAND_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_TREE, COMMAND_UNLINK, COMMAND_UPDATES, COMMAND_VERSIONS, DEFAULT_CONFIG_DIR, VERSION, BUILD_HOSTNAME, BUILD_TIMESTAMP } from './constants';\nimport { UserCancellationError } from '@grunnverk/shared';\nimport { getLogger, setLogLevel } from './logging';\nimport { Config, SecureConfig, ConfigSchema } from './types';\n\n/**\n * Check Node.js version and exit with clear error message if version is too old.\n */\nfunction checkNodeVersion(): void {\n const requiredMajorVersion = 24;\n const currentVersion = process.version;\n const majorVersion = parseInt(currentVersion.slice(1).split('.')[0], 10);\n\n if (majorVersion < requiredMajorVersion) {\n // eslint-disable-next-line no-console\n console.error(`\\n❌ ERROR: Node.js version ${requiredMajorVersion}.0.0 or higher is required.`);\n // eslint-disable-next-line no-console\n console.error(` Current version: ${currentVersion}`);\n // eslint-disable-next-line no-console\n console.error(` Please upgrade your Node.js version to continue.\\n`);\n // eslint-disable-next-line no-console\n console.error(` This project uses Vite 7+ which requires Node.js ${requiredMajorVersion}+.\\n`);\n process.exit(1);\n }\n}\n\n/**\n * Get formatted version information including build metadata.\n */\nexport function getVersionInfo(): { version: string; buildHostname: string; buildTimestamp: string; formatted: string } {\n return {\n version: VERSION,\n buildHostname: BUILD_HOSTNAME,\n buildTimestamp: BUILD_TIMESTAMP,\n formatted: `${VERSION}\\nBuilt on: ${BUILD_HOSTNAME}\\nBuild time: ${BUILD_TIMESTAMP}`\n };\n}\n\n/**\n * Print debug information about the command being executed when debug flag is enabled.\n */\nfunction printDebugCommandInfo(commandName: string, runConfig: Config): void {\n if (runConfig.debug) {\n const logger = getLogger();\n logger.info('DEBUG_INFO_HEADER: KodrDriv debug information');\n logger.info('DEBUG_INFO_COMMAND: Command being executed | Command: %s', commandName);\n logger.info('DEBUG_INFO_VERSION: KodrDriv version | Version: %s', VERSION);\n\n // Log last 4 characters of tokens for debugging permissions issues\n const openaiToken = process.env.OPENAI_API_KEY;\n const githubToken = process.env.GITHUB_TOKEN;\n\n if (openaiToken) {\n const tokenSuffix = openaiToken.slice(-4);\n logger.info('DEBUG_INFO_TOKEN: OpenAI API Key | Suffix: ...%s', tokenSuffix);\n } else {\n logger.info('DEBUG_INFO_TOKEN: OpenAI API Key | Status: not set');\n }\n\n if (githubToken) {\n const tokenSuffix = githubToken.slice(-4);\n logger.info('DEBUG_INFO_TOKEN: GitHub Token | Suffix: ...%s', tokenSuffix);\n } else {\n logger.info('DEBUG_INFO_TOKEN: GitHub Token | Status: not set');\n }\n\n logger.info('DEBUG_INFO_FOOTER: End of debug information');\n }\n}\n\n/**\n * Configure early logging based on command line flags.\n *\n * Hey we need this because we need to be able to debug CardiganTime.\n * This method checks for --verbose and --debug flags early in the process\n * before CardiganTime is configured, allowing us to capture debug output\n * from the CardiganTime initialization itself.\n */\nexport function configureEarlyLogging(): void {\n const hasVerbose = process.argv.includes('--verbose');\n const hasDebug = process.argv.includes('--debug');\n\n // Set log level based on early flag detection\n if (hasDebug) {\n setLogLevel('debug');\n } else if (hasVerbose) {\n setLogLevel('verbose');\n }\n}\n\nexport async function runApplication(): Promise<void> {\n // Check Node.js version first, before doing anything else\n checkNodeVersion();\n\n // Configure logging early, before CardiganTime initialization\n configureEarlyLogging();\n\n // Initialize RiotPrompt templates for ai-service\n initializeTemplates();\n\n // Use proper typing for CardiganTime create function\n interface CardigantimeCreateParams {\n defaults?: any;\n features?: string[];\n configShape?: any;\n logger?: any;\n }\n\n interface CardigantimeInstance {\n read: (args: any) => Promise<any>;\n checkConfig: () => Promise<void>;\n generateConfig: (dir: string) => Promise<void>;\n setLogger: (logger: any) => void;\n }\n\n const cardigantimeModule = Cardigantime as any;\n const createCardigantime = cardigantimeModule.create as (params: CardigantimeCreateParams) => CardigantimeInstance;\n\n const cardigantime = createCardigantime({\n defaults: {\n configDirectory: DEFAULT_CONFIG_DIR,\n },\n configShape: ConfigSchema.shape,\n features: ['config', 'hierarchical'],\n logger: getLogger(),\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [runConfig, secureConfig, commandConfig]: [Config, SecureConfig, CommandConfig] = await Arguments.configure(cardigantime); // Pass cardigantime instance\n\n // Set log level based on verbose flag\n if (runConfig.verbose) {\n setLogLevel('verbose');\n }\n if (runConfig.debug) {\n setLogLevel('debug');\n }\n\n const logger = getLogger();\n cardigantime.setLogger(logger);\n\n // Configure external packages to use our logger and prompt\n setGitLogger(logger);\n setGitHubLogger(logger);\n setPromptFunction(promptConfirmation);\n\n // Display version information including build metadata\n logger.info('APPLICATION_STARTING: KodrDriv application initializing | Version: %s | BuildHost: %s | BuildTime: %s | Status: starting',\n VERSION, BUILD_HOSTNAME, BUILD_TIMESTAMP);\n\n // Handle check-config command first\n if (commandConfig.commandName === COMMAND_CHECK_CONFIG) {\n // CardiganTime's checkConfig has already been called in Arguments.configure()\n // No additional processing needed here\n return;\n }\n\n // Handle init-config command\n if (commandConfig.commandName === COMMAND_INIT_CONFIG) {\n // CardiganTime's initConfig has already been called in Arguments.configure()\n // No additional processing needed here\n return;\n }\n\n // Get the command from Commander\n const command = process.argv[2];\n let commandName = commandConfig.commandName;\n\n // Handle special case for tree command with built-in command argument\n if (command === 'tree' && process.argv[3]) {\n const treeBuiltInCommand = process.argv[3];\n const supportedBuiltInCommands = ['commit', 'publish', 'link', 'unlink', 'development', 'updates', 'pull'];\n if (supportedBuiltInCommands.includes(treeBuiltInCommand)) {\n // This is a tree command with built-in command, keep commandName as 'tree'\n commandName = 'tree';\n } else {\n // Unknown tree argument, let it fail naturally in tree.ts\n commandName = 'tree';\n }\n }\n // If we have a specific command argument, use that\n else if (command === 'commit' || command === 'audio-commit' || command === 'release' || command === 'publish' || command === 'tree' || command === 'link' || command === 'unlink' || command === 'audio-review' || command === 'clean' || command === 'pull' || command === 'precommit' || command === 'review' || command === 'select-audio' || command === 'development' || command === 'versions' || command === 'updates') {\n commandName = command;\n }\n\n let summary: string = '';\n\n try {\n // Print debug info at the start of command execution\n if (commandName) {\n printDebugCommandInfo(commandName, runConfig);\n }\n\n // Git commands (from @grunnverk/commands-git)\n if (commandName === COMMAND_COMMIT) {\n summary = await CommandsGit.commit(runConfig);\n } else if (commandName === COMMAND_PRECOMMIT) {\n summary = await CommandsGit.precommit(runConfig);\n } else if (commandName === COMMAND_CLEAN) {\n await CommandsGit.clean(runConfig);\n summary = 'Output directory cleaned successfully.';\n } else if (commandName === COMMAND_PULL) {\n summary = await CommandsGit.pull(runConfig);\n } else if (commandName === COMMAND_REVIEW) {\n summary = await CommandsGit.review(runConfig);\n }\n // Tree commands (from @grunnverk/commands-tree)\n else if (commandName === COMMAND_TREE) {\n // Handle tree directories mapping from command-specific arguments\n if (runConfig.audioReview?.directory && !runConfig.tree?.directories) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.directories = [runConfig.audioReview.directory];\n }\n // Handle tree exclusion patterns - use global excludedPatterns for tree\n if (runConfig.excludedPatterns && !runConfig.tree?.exclude) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.exclude = runConfig.excludedPatterns;\n }\n summary = await CommandsTree.tree(runConfig);\n } else if (commandName === COMMAND_LINK) {\n summary = await CommandsTree.link(runConfig);\n } else if (commandName === COMMAND_UNLINK) {\n summary = await CommandsTree.unlink(runConfig);\n } else if (commandName === COMMAND_UPDATES) {\n summary = await CommandsTree.updates(runConfig);\n } else if (commandName === COMMAND_VERSIONS) {\n summary = await CommandsTree.versions(runConfig);\n }\n // Publish commands (from @grunnverk/commands-publish)\n else if (commandName === COMMAND_RELEASE) {\n const releaseSummary = await CommandsPublish.release(runConfig);\n summary = `${releaseSummary.title}\\n\\n${releaseSummary.body}`;\n } else if (commandName === COMMAND_PUBLISH) {\n await CommandsPublish.publish(runConfig);\n } else if (commandName === COMMAND_DEVELOPMENT) {\n summary = await CommandsPublish.development(runConfig);\n }\n // Audio commands (from @grunnverk/commands-audio)\n else if (commandName === COMMAND_AUDIO_COMMIT) {\n summary = await CommandsAudio.audioCommit(runConfig);\n } else if (commandName === COMMAND_AUDIO_REVIEW) {\n summary = await CommandsAudio.audioReview(runConfig);\n } else if (commandName === COMMAND_SELECT_AUDIO) {\n await CommandsAudio.selectAudio(runConfig);\n summary = 'Audio selection completed successfully.';\n }\n\n // eslint-disable-next-line no-console\n console.log(`\\n\\n${summary}\\n\\n`);\n } catch (error: any) {\n // Handle user cancellation gracefully\n if (error instanceof UserCancellationError) {\n logger.info('APPLICATION_ERROR: Application error occurred | Error: ' + error.message);\n process.exit(0);\n }\n\n // Re-throw other errors to be handled by main.ts\n throw error;\n }\n}\n"],"names":["dotenvConfig","override","debug","checkNodeVersion","requiredMajorVersion","currentVersion","process","version","majorVersion","parseInt","slice","split","console","error","exit","printDebugCommandInfo","commandName","runConfig","logger","getLogger","info","VERSION","openaiToken","env","OPENAI_API_KEY","githubToken","GITHUB_TOKEN","tokenSuffix","configureEarlyLogging","hasVerbose","argv","includes","hasDebug","setLogLevel","runApplication","initializeTemplates","cardigantimeModule","Cardigantime","createCardigantime","create","cardigantime","defaults","configDirectory","DEFAULT_CONFIG_DIR","configShape","ConfigSchema","shape","features","secureConfig","commandConfig","Arguments","verbose","setLogger","setGitLogger","setGitHubLogger","setPromptFunction","promptConfirmation","BUILD_HOSTNAME","BUILD_TIMESTAMP","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","command","treeBuiltInCommand","supportedBuiltInCommands","summary","COMMAND_COMMIT","CommandsGit","commit","COMMAND_PRECOMMIT","precommit","COMMAND_CLEAN","clean","COMMAND_PULL","pull","COMMAND_REVIEW","review","COMMAND_TREE","audioReview","directory","tree","directories","excludedPatterns","exclude","CommandsTree","COMMAND_LINK","link","COMMAND_UNLINK","unlink","COMMAND_UPDATES","updates","COMMAND_VERSIONS","versions","COMMAND_RELEASE","releaseSummary","CommandsPublish","release","title","body","COMMAND_PUBLISH","publish","COMMAND_DEVELOPMENT","development","COMMAND_AUDIO_COMMIT","CommandsAudio","audioCommit","COMMAND_AUDIO_REVIEW","COMMAND_SELECT_AUDIO","selectAudio","log","UserCancellationError","message"],"mappings":";;;;;;;;;;;;;;;AAAA;AACA;AACA;AAEAA,MAAAA,CAAa;IAAEC,QAAAA,EAAU,KAAA;IAAOC,KAAAA,EAAO;AAAM,CAAA,CAAA;AAoB7C;;AAEC,IACD,SAASC,gBAAAA,GAAAA;AACL,IAAA,MAAMC,oBAAAA,GAAuB,EAAA;IAC7B,MAAMC,cAAAA,GAAiBC,QAAQC,OAAO;IACtC,MAAMC,YAAAA,GAAeC,QAAAA,CAASJ,cAAAA,CAAeK,KAAK,CAAC,CAAA,CAAA,CAAGC,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE,EAAE,EAAA,CAAA;AAErE,IAAA,IAAIH,eAAeJ,oBAAAA,EAAsB;;AAErCQ,QAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,2BAA2B,EAAET,oBAAAA,CAAqB,2BAA2B,CAAC,CAAA;;AAE7FQ,QAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,oBAAoB,EAAER,cAAAA,CAAAA,CAAgB,CAAA;;AAErDO,QAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,qDAAqD,CAAC,CAAA;;AAErED,QAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,oDAAoD,EAAET,oBAAAA,CAAqB,IAAI,CAAC,CAAA;AAC/FE,QAAAA,OAAAA,CAAQQ,IAAI,CAAC,CAAA,CAAA;AACjB,IAAA;AACJ;AAcA;;AAEC,IACD,SAASC,qBAAAA,CAAsBC,WAAmB,EAAEC,SAAiB,EAAA;IACjE,IAAIA,SAAAA,CAAUf,KAAK,EAAE;AACjB,QAAA,MAAMgB,MAAAA,GAASC,SAAAA,EAAAA;AACfD,QAAAA,MAAAA,CAAOE,IAAI,CAAC,+CAAA,CAAA;QACZF,MAAAA,CAAOE,IAAI,CAAC,0DAAA,EAA4DJ,WAAAA,CAAAA;QACxEE,MAAAA,CAAOE,IAAI,CAAC,oDAAA,EAAsDC,OAAAA,CAAAA;;AAGlE,QAAA,MAAMC,WAAAA,GAAchB,OAAAA,CAAQiB,GAAG,CAACC,cAAc;AAC9C,QAAA,MAAMC,WAAAA,GAAcnB,OAAAA,CAAQiB,GAAG,CAACG,YAAY;AAE5C,QAAA,IAAIJ,WAAAA,EAAa;AACb,YAAA,MAAMK,WAAAA,GAAcL,WAAAA,CAAYZ,KAAK,CAAC,EAAC,CAAA;YACvCQ,MAAAA,CAAOE,IAAI,CAAC,kDAAA,EAAoDO,WAAAA,CAAAA;QACpE,CAAA,MAAO;AACHT,YAAAA,MAAAA,CAAOE,IAAI,CAAC,oDAAA,CAAA;AAChB,QAAA;AAEA,QAAA,IAAIK,WAAAA,EAAa;AACb,YAAA,MAAME,WAAAA,GAAcF,WAAAA,CAAYf,KAAK,CAAC,EAAC,CAAA;YACvCQ,MAAAA,CAAOE,IAAI,CAAC,gDAAA,EAAkDO,WAAAA,CAAAA;QAClE,CAAA,MAAO;AACHT,YAAAA,MAAAA,CAAOE,IAAI,CAAC,kDAAA,CAAA;AAChB,QAAA;AAEAF,QAAAA,MAAAA,CAAOE,IAAI,CAAC,6CAAA,CAAA;AAChB,IAAA;AACJ;AAEA;;;;;;;AAOC,IACM,SAASQ,qBAAAA,GAAAA;AACZ,IAAA,MAAMC,UAAAA,GAAavB,OAAAA,CAAQwB,IAAI,CAACC,QAAQ,CAAC,WAAA,CAAA;AACzC,IAAA,MAAMC,QAAAA,GAAW1B,OAAAA,CAAQwB,IAAI,CAACC,QAAQ,CAAC,SAAA,CAAA;;AAGvC,IAAA,IAAIC,QAAAA,EAAU;QACVC,WAAAA,CAAY,OAAA,CAAA;AAChB,IAAA,CAAA,MAAO,IAAIJ,UAAAA,EAAY;QACnBI,WAAAA,CAAY,SAAA,CAAA;AAChB,IAAA;AACJ;AAEO,eAAeC,cAAAA,GAAAA;;AAElB/B,IAAAA,gBAAAA,EAAAA;;AAGAyB,IAAAA,qBAAAA,EAAAA;;AAGAO,IAAAA,mBAAAA,EAAAA;AAiBA,IAAA,MAAMC,kBAAAA,GAAqBC,YAAAA;IAC3B,MAAMC,kBAAAA,GAAqBF,mBAAmBG,MAAM;AAEpD,IAAA,MAAMC,eAAeF,kBAAAA,CAAmB;QACpCG,QAAAA,EAAU;YACNC,eAAAA,EAAiBC;AACrB,SAAA;AACAC,QAAAA,WAAAA,EAAaC,aAAaC,KAAK;QAC/BC,QAAAA,EAAU;AAAC,YAAA,QAAA;AAAU,YAAA;AAAe,SAAA;QACpC7B,MAAAA,EAAQC,SAAAA;AACZ,KAAA,CAAA;;IAGA,MAAM,CAACF,SAAAA,EAAW+B,YAAAA,EAAcC,aAAAA,CAAc,GAA0C,MAAMC,SAAmB,CAACV,YAAAA,CAAAA,CAAAA;;IAGlH,IAAIvB,SAAAA,CAAUkC,OAAO,EAAE;QACnBlB,WAAAA,CAAY,SAAA,CAAA;AAChB,IAAA;IACA,IAAIhB,SAAAA,CAAUf,KAAK,EAAE;QACjB+B,WAAAA,CAAY,OAAA,CAAA;AAChB,IAAA;AAEA,IAAA,MAAMf,MAAAA,GAASC,SAAAA,EAAAA;AACfqB,IAAAA,YAAAA,CAAaY,SAAS,CAAClC,MAAAA,CAAAA;;IAGvBmC,SAAAA,CAAanC,MAAAA,CAAAA;IACboC,WAAAA,CAAgBpC,MAAAA,CAAAA;IAChBqC,iBAAAA,CAAkBC,kBAAAA,CAAAA;;AAGlBtC,IAAAA,MAAAA,CAAOE,IAAI,CAAC,0HAAA,EACRC,OAAAA,EAASoC,cAAAA,EAAgBC,eAAAA,CAAAA;;IAG7B,IAAIT,aAAAA,CAAcjC,WAAW,KAAK2C,oBAAAA,EAAsB;;;AAGpD,QAAA;AACJ,IAAA;;IAGA,IAAIV,aAAAA,CAAcjC,WAAW,KAAK4C,mBAAAA,EAAqB;;;AAGnD,QAAA;AACJ,IAAA;;AAGA,IAAA,MAAMC,OAAAA,GAAUvD,OAAAA,CAAQwB,IAAI,CAAC,CAAA,CAAE;IAC/B,IAAId,WAAAA,GAAciC,cAAcjC,WAAW;;AAG3C,IAAA,IAAI6C,YAAY,MAAA,IAAUvD,OAAAA,CAAQwB,IAAI,CAAC,EAAE,EAAE;AACvC,QAAA,MAAMgC,kBAAAA,GAAqBxD,OAAAA,CAAQwB,IAAI,CAAC,CAAA,CAAE;AAC1C,QAAA,MAAMiC,wBAAAA,GAA2B;AAAC,YAAA,QAAA;AAAU,YAAA,SAAA;AAAW,YAAA,MAAA;AAAQ,YAAA,QAAA;AAAU,YAAA,aAAA;AAAe,YAAA,SAAA;AAAW,YAAA;AAAO,SAAA;QAC1G,IAAIA,wBAAAA,CAAyBhC,QAAQ,CAAC+B,kBAAAA,CAAAA,EAAqB;;YAEvD9C,WAAAA,GAAc,MAAA;QAClB,CAAA,MAAO;;YAEHA,WAAAA,GAAc,MAAA;AAClB,QAAA;AACJ,IAAA,CAAA,MAEK,IAAI6C,OAAAA,KAAY,QAAA,IAAYA,OAAAA,KAAY,kBAAkBA,OAAAA,KAAY,SAAA,IAAaA,OAAAA,KAAY,SAAA,IAAaA,OAAAA,KAAY,MAAA,IAAUA,OAAAA,KAAY,MAAA,IAAUA,YAAY,QAAA,IAAYA,OAAAA,KAAY,cAAA,IAAkBA,OAAAA,KAAY,OAAA,IAAWA,OAAAA,KAAY,MAAA,IAAUA,OAAAA,KAAY,eAAeA,OAAAA,KAAY,QAAA,IAAYA,OAAAA,KAAY,cAAA,IAAkBA,OAAAA,KAAY,aAAA,IAAiBA,OAAAA,KAAY,UAAA,IAAcA,YAAY,SAAA,EAAW;QAC3Z7C,WAAAA,GAAc6C,OAAAA;AAClB,IAAA;AAEA,IAAA,IAAIG,OAAAA,GAAkB,EAAA;IAEtB,IAAI;;AAEA,QAAA,IAAIhD,WAAAA,EAAa;AACbD,YAAAA,qBAAAA,CAAsBC,WAAAA,EAAaC,SAAAA,CAAAA;AACvC,QAAA;;AAGA,QAAA,IAAID,gBAAgBiD,cAAAA,EAAgB;YAChCD,OAAAA,GAAU,MAAME,WAAAA,CAAYC,MAAM,CAAClD,SAAAA,CAAAA;QACvC,CAAA,MAAO,IAAID,gBAAgBoD,iBAAAA,EAAmB;YAC1CJ,OAAAA,GAAU,MAAME,WAAAA,CAAYG,SAAS,CAACpD,SAAAA,CAAAA;QAC1C,CAAA,MAAO,IAAID,gBAAgBsD,aAAAA,EAAe;YACtC,MAAMJ,WAAAA,CAAYK,KAAK,CAACtD,SAAAA,CAAAA;YACxB+C,OAAAA,GAAU,wCAAA;QACd,CAAA,MAAO,IAAIhD,gBAAgBwD,YAAAA,EAAc;YACrCR,OAAAA,GAAU,MAAME,WAAAA,CAAYO,IAAI,CAACxD,SAAAA,CAAAA;QACrC,CAAA,MAAO,IAAID,gBAAgB0D,cAAAA,EAAgB;YACvCV,OAAAA,GAAU,MAAME,WAAAA,CAAYS,MAAM,CAAC1D,SAAAA,CAAAA;QACvC,CAAA,MAEK,IAAID,gBAAgB4D,YAAAA,EAAc;AAE/B3D,YAAAA,IAAAA,sBAAAA,EAAqCA,eAAAA,EAKNA,gBAAAA;;AALnC,YAAA,IAAIA,EAAAA,sBAAAA,GAAAA,SAAAA,CAAU4D,WAAW,MAAA,IAAA,IAArB5D,6CAAAA,sBAAAA,CAAuB6D,SAAS,KAAI,EAAA,CAAC7D,kBAAAA,SAAAA,CAAU8D,IAAI,cAAd9D,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAAA,CAAgB+D,WAAW,CAAA,EAAE;AAClE/D,gBAAAA,SAAAA,CAAU8D,IAAI,GAAG9D,SAAAA,CAAU8D,IAAI,IAAI,EAAC;gBACpC9D,SAAAA,CAAU8D,IAAI,CAACC,WAAW,GAAG;oBAAC/D,SAAAA,CAAU4D,WAAW,CAACC;AAAU,iBAAA;AAClE,YAAA;;YAEA,IAAI7D,SAAAA,CAAUgE,gBAAgB,IAAI,EAAA,CAAChE,gBAAAA,GAAAA,SAAAA,CAAU8D,IAAI,MAAA,IAAA,IAAd9D,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAgBiE,OAAO,CAAA,EAAE;AACxDjE,gBAAAA,SAAAA,CAAU8D,IAAI,GAAG9D,SAAAA,CAAU8D,IAAI,IAAI,EAAC;AACpC9D,gBAAAA,SAAAA,CAAU8D,IAAI,CAACG,OAAO,GAAGjE,UAAUgE,gBAAgB;AACvD,YAAA;YACAjB,OAAAA,GAAU,MAAMmB,YAAAA,CAAaJ,IAAI,CAAC9D,SAAAA,CAAAA;QACtC,CAAA,MAAO,IAAID,gBAAgBoE,YAAAA,EAAc;YACrCpB,OAAAA,GAAU,MAAMmB,YAAAA,CAAaE,IAAI,CAACpE,SAAAA,CAAAA;QACtC,CAAA,MAAO,IAAID,gBAAgBsE,cAAAA,EAAgB;YACvCtB,OAAAA,GAAU,MAAMmB,YAAAA,CAAaI,MAAM,CAACtE,SAAAA,CAAAA;QACxC,CAAA,MAAO,IAAID,gBAAgBwE,eAAAA,EAAiB;YACxCxB,OAAAA,GAAU,MAAMmB,YAAAA,CAAaM,OAAO,CAACxE,SAAAA,CAAAA;QACzC,CAAA,MAAO,IAAID,gBAAgB0E,gBAAAA,EAAkB;YACzC1B,OAAAA,GAAU,MAAMmB,YAAAA,CAAaQ,QAAQ,CAAC1E,SAAAA,CAAAA;QAC1C,CAAA,MAEK,IAAID,gBAAgB4E,eAAAA,EAAiB;AACtC,YAAA,MAAMC,cAAAA,GAAiB,MAAMC,eAAAA,CAAgBC,OAAO,CAAC9E,SAAAA,CAAAA;YACrD+C,OAAAA,GAAU,CAAA,EAAG6B,eAAeG,KAAK,CAAC,IAAI,EAAEH,cAAAA,CAAeI,IAAI,CAAA,CAAE;QACjE,CAAA,MAAO,IAAIjF,gBAAgBkF,eAAAA,EAAiB;YACxC,MAAMJ,eAAAA,CAAgBK,OAAO,CAAClF,SAAAA,CAAAA;QAClC,CAAA,MAAO,IAAID,gBAAgBoF,mBAAAA,EAAqB;YAC5CpC,OAAAA,GAAU,MAAM8B,eAAAA,CAAgBO,WAAW,CAACpF,SAAAA,CAAAA;QAChD,CAAA,MAEK,IAAID,gBAAgBsF,oBAAAA,EAAsB;YAC3CtC,OAAAA,GAAU,MAAMuC,aAAAA,CAAcC,WAAW,CAACvF,SAAAA,CAAAA;QAC9C,CAAA,MAAO,IAAID,gBAAgByF,oBAAAA,EAAsB;YAC7CzC,OAAAA,GAAU,MAAMuC,aAAAA,CAAc1B,WAAW,CAAC5D,SAAAA,CAAAA;QAC9C,CAAA,MAAO,IAAID,gBAAgB0F,oBAAAA,EAAsB;YAC7C,MAAMH,aAAAA,CAAcI,WAAW,CAAC1F,SAAAA,CAAAA;YAChC+C,OAAAA,GAAU,yCAAA;AACd,QAAA;;AAGApD,QAAAA,OAAAA,CAAQgG,GAAG,CAAC,CAAC,IAAI,EAAE5C,OAAAA,CAAQ,IAAI,CAAC,CAAA;AACpC,IAAA,CAAA,CAAE,OAAOnD,KAAAA,EAAY;;AAEjB,QAAA,IAAIA,iBAAiBgG,qBAAAA,EAAuB;AACxC3F,YAAAA,MAAAA,CAAOE,IAAI,CAAC,yDAAA,GAA4DP,KAAAA,CAAMiG,OAAO,CAAA;AACrFxG,YAAAA,OAAAA,CAAQQ,IAAI,CAAC,CAAA,CAAA;AACjB,QAAA;;QAGA,MAAMD,KAAAA;AACV,IAAA;AACJ;;;;"}