@eldrforge/kodrdriv 0.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/application.js +25 -3
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +103 -18
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +28 -7
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +28 -7
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/commit.js +75 -18
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/development.js +264 -0
- package/dist/commands/development.js.map +1 -0
- package/dist/commands/link.js +356 -181
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +166 -32
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +78 -13
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +10 -6
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/tree.js +450 -24
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +267 -372
- package/dist/commands/unlink.js.map +1 -1
- package/dist/commands/versions.js +224 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/constants.js +29 -10
- package/dist/constants.js.map +1 -1
- package/dist/content/diff.js.map +1 -1
- package/dist/content/files.js +192 -0
- package/dist/content/files.js.map +1 -0
- package/dist/content/log.js +16 -0
- package/dist/content/log.js.map +1 -1
- package/dist/main.js +0 -0
- package/dist/prompt/commit.js +9 -2
- package/dist/prompt/commit.js.map +1 -1
- package/dist/prompt/instructions/commit.md +20 -2
- package/dist/prompt/instructions/release.md +27 -10
- package/dist/prompt/instructions/review.md +75 -8
- package/dist/prompt/release.js +13 -5
- package/dist/prompt/release.js.map +1 -1
- package/dist/types.js +21 -5
- package/dist/types.js.map +1 -1
- package/dist/util/child.js +112 -26
- package/dist/util/child.js.map +1 -1
- package/dist/util/countdown.js +215 -0
- package/dist/util/countdown.js.map +1 -0
- package/dist/util/general.js +31 -7
- package/dist/util/general.js.map +1 -1
- package/dist/util/git.js +587 -0
- package/dist/util/git.js.map +1 -0
- package/dist/util/github.js +519 -3
- package/dist/util/github.js.map +1 -1
- package/dist/util/interactive.js +245 -79
- package/dist/util/interactive.js.map +1 -1
- package/dist/util/openai.js +70 -22
- package/dist/util/openai.js.map +1 -1
- package/dist/util/performance.js +1 -69
- package/dist/util/performance.js.map +1 -1
- package/dist/util/storage.js +28 -1
- package/dist/util/storage.js.map +1 -1
- package/dist/util/validation.js +1 -25
- package/dist/util/validation.js.map +1 -1
- package/package.json +10 -8
- package/test-multiline/cli/package.json +8 -0
- package/test-multiline/core/package.json +5 -0
- package/test-multiline/mobile/package.json +8 -0
- package/test-multiline/web/package.json +8 -0
- package/dist/util/npmOptimizations.js +0 -174
- package/dist/util/npmOptimizations.js.map +0 -1
package/README.md
CHANGED
|
@@ -42,6 +42,7 @@ kodrdriv audio-commit # Record audio to generate commit messages
|
|
|
42
42
|
## Key Features
|
|
43
43
|
|
|
44
44
|
- **AI-Powered Analysis** - Uses OpenAI models to understand your code changes
|
|
45
|
+
- **GitHub Issues Integration** - Automatically analyzes recently closed issues to provide context for commit messages, prioritizing milestone-relevant issues
|
|
45
46
|
- **Adaptive Diff Management** - Automatically handles large diffs with intelligent truncation and retry logic to ensure reliable LLM processing
|
|
46
47
|
- **Comprehensive Release Automation** - Handles dependency updates, version bumping, PR creation, and GitHub releases
|
|
47
48
|
- **Audio-Driven Workflows** - Record audio to provide context for commits and reviews
|
package/dist/application.js
CHANGED
|
@@ -12,11 +12,24 @@ import { execute as execute$2 } from './commands/release.js';
|
|
|
12
12
|
import { execute as execute$9 } from './commands/review.js';
|
|
13
13
|
import { execute as execute$a } from './commands/select-audio.js';
|
|
14
14
|
import { execute as execute$6 } from './commands/unlink.js';
|
|
15
|
-
import {
|
|
15
|
+
import { execute as execute$b } from './commands/development.js';
|
|
16
|
+
import { execute as execute$c } from './commands/versions.js';
|
|
17
|
+
import { DEFAULT_CONFIG_DIR, VERSION, COMMAND_CHECK_CONFIG, COMMAND_INIT_CONFIG, COMMAND_COMMIT, COMMAND_AUDIO_COMMIT, COMMAND_RELEASE, COMMAND_PUBLISH, COMMAND_TREE, COMMAND_LINK, COMMAND_UNLINK, COMMAND_AUDIO_REVIEW, COMMAND_CLEAN, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_DEVELOPMENT, COMMAND_VERSIONS } from './constants.js';
|
|
16
18
|
import { getLogger, setLogLevel } from './logging.js';
|
|
17
19
|
import { ConfigSchema } from './types.js';
|
|
18
20
|
import { UserCancellationError } from './error/CommandErrors.js';
|
|
19
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Print debug information about the command being executed when debug flag is enabled.
|
|
24
|
+
*/ function printDebugCommandInfo(commandName, runConfig) {
|
|
25
|
+
if (runConfig.debug) {
|
|
26
|
+
const logger = getLogger();
|
|
27
|
+
logger.info('=== KODRDRIV DEBUG INFO ===');
|
|
28
|
+
logger.info('Command: %s', commandName);
|
|
29
|
+
logger.info('Version: %s', VERSION);
|
|
30
|
+
logger.info('===========================');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
20
33
|
/**
|
|
21
34
|
* Configure early logging based on command line flags.
|
|
22
35
|
*
|
|
@@ -95,7 +108,8 @@ async function runApplication() {
|
|
|
95
108
|
'commit',
|
|
96
109
|
'publish',
|
|
97
110
|
'link',
|
|
98
|
-
'unlink'
|
|
111
|
+
'unlink',
|
|
112
|
+
'development'
|
|
99
113
|
];
|
|
100
114
|
if (supportedBuiltInCommands.includes(treeBuiltInCommand)) {
|
|
101
115
|
// This is a tree command with built-in command, keep commandName as 'tree'
|
|
@@ -104,11 +118,15 @@ async function runApplication() {
|
|
|
104
118
|
// Unknown tree argument, let it fail naturally in tree.ts
|
|
105
119
|
commandName = 'tree';
|
|
106
120
|
}
|
|
107
|
-
} else if (command === 'commit' || command === 'audio-commit' || command === 'release' || command === 'publish' || command === 'tree' || command === 'link' || command === 'unlink' || command === 'audio-review' || command === 'clean' || command === 'review' || command === 'select-audio') {
|
|
121
|
+
} else if (command === 'commit' || command === 'audio-commit' || command === 'release' || command === 'publish' || command === 'tree' || command === 'link' || command === 'unlink' || command === 'audio-review' || command === 'clean' || command === 'review' || command === 'select-audio' || command === 'development' || command === 'versions') {
|
|
108
122
|
commandName = command;
|
|
109
123
|
}
|
|
110
124
|
let summary = '';
|
|
111
125
|
try {
|
|
126
|
+
// Print debug info at the start of command execution
|
|
127
|
+
if (commandName) {
|
|
128
|
+
printDebugCommandInfo(commandName, runConfig);
|
|
129
|
+
}
|
|
112
130
|
if (commandName === COMMAND_COMMIT) {
|
|
113
131
|
summary = await execute(runConfig);
|
|
114
132
|
} else if (commandName === COMMAND_AUDIO_COMMIT) {
|
|
@@ -147,6 +165,10 @@ async function runApplication() {
|
|
|
147
165
|
} else if (commandName === COMMAND_SELECT_AUDIO) {
|
|
148
166
|
await execute$a(runConfig);
|
|
149
167
|
summary = 'Audio selection completed successfully.';
|
|
168
|
+
} else if (commandName === COMMAND_DEVELOPMENT) {
|
|
169
|
+
summary = await execute$b(runConfig);
|
|
170
|
+
} else if (commandName === COMMAND_VERSIONS) {
|
|
171
|
+
summary = await execute$c(runConfig);
|
|
150
172
|
}
|
|
151
173
|
// eslint-disable-next-line no-console
|
|
152
174
|
console.log(`\n\n${summary}\n\n`);
|
package/dist/application.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sources":["../src/application.ts"],"sourcesContent":["import * as Cardigantime from '@theunwalked/cardigantime';\nimport 'dotenv/config';\nimport { CommandConfig } from 'types';\nimport * as Arguments from './arguments';\nimport * as AudioCommit from './commands/audio-commit';\nimport * as AudioReview from './commands/audio-review';\nimport * as Clean from './commands/clean';\nimport * as Commit from './commands/commit';\nimport * as Link from './commands/link';\nimport * as Publish from './commands/publish';\nimport * as Tree from './commands/tree';\nimport * as Release from './commands/release';\nimport * as Review from './commands/review';\nimport * as SelectAudio from './commands/select-audio';\nimport * as Unlink from './commands/unlink';\nimport { COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PUBLISH, COMMAND_TREE, COMMAND_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_UNLINK, DEFAULT_CONFIG_DIR } from './constants';\nimport { getLogger, setLogLevel } from './logging';\nimport { Config, ConfigSchema, SecureConfig } from './types';\nimport { UserCancellationError } from './error/CommandErrors';\nimport { VERSION } from './constants';\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 // Configure logging early, before CardiganTime initialization\n configureEarlyLogging();\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 // Move pathResolution INSIDE defaults\n pathResolution: {\n resolvePathArray: ['contextDirectories'], // Resolve contextDirectories array elements as paths\n },\n // Use fieldOverlaps instead of mergeStrategy, INSIDE defaults\n fieldOverlaps: {\n 'contextDirectories': 'prepend', // Use prepend strategy for contextDirectories array\n // Add other field overlap configurations as needed\n },\n },\n features: ['config', 'hierarchical'],\n configShape: ConfigSchema.shape, // No need for 'as any' now\n logger: getLogger(),\n }); // No need for 'as any' at the end\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 // Display version information\n logger.info('🚀 kodrdriv %s', VERSION);\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'];\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 === 'review' || command === 'select-audio') {\n commandName = command;\n }\n\n let summary: string = '';\n\n try {\n if (commandName === COMMAND_COMMIT) {\n summary = await Commit.execute(runConfig);\n } else if (commandName === COMMAND_AUDIO_COMMIT) {\n summary = await AudioCommit.execute(runConfig);\n } else if (commandName === COMMAND_RELEASE) {\n const releaseSummary = await Release.execute(runConfig);\n summary = `${releaseSummary.title}\\n\\n${releaseSummary.body}`;\n } else if (commandName === COMMAND_PUBLISH) {\n await Publish.execute(runConfig);\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?.excludedPatterns) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.excludedPatterns = runConfig.excludedPatterns;\n }\n summary = await Tree.execute(runConfig);\n } else if (commandName === COMMAND_LINK) {\n summary = await Link.execute(runConfig);\n } else if (commandName === COMMAND_UNLINK) {\n summary = await Unlink.execute(runConfig);\n } else if (commandName === COMMAND_AUDIO_REVIEW) {\n summary = await AudioReview.execute(runConfig);\n } else if (commandName === COMMAND_CLEAN) {\n await Clean.execute(runConfig);\n summary = 'Output directory cleaned successfully.';\n } else if (commandName === COMMAND_REVIEW) {\n summary = await Review.execute(runConfig);\n } else if (commandName === COMMAND_SELECT_AUDIO) {\n await SelectAudio.execute(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(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":["configureEarlyLogging","hasVerbose","process","argv","includes","hasDebug","setLogLevel","runApplication","cardigantimeModule","Cardigantime","createCardigantime","create","cardigantime","defaults","configDirectory","DEFAULT_CONFIG_DIR","pathResolution","resolvePathArray","fieldOverlaps","features","configShape","ConfigSchema","shape","logger","getLogger","runConfig","secureConfig","commandConfig","Arguments","verbose","debug","setLogger","info","VERSION","commandName","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","command","treeBuiltInCommand","supportedBuiltInCommands","summary","COMMAND_COMMIT","Commit","COMMAND_AUDIO_COMMIT","AudioCommit","COMMAND_RELEASE","releaseSummary","Release","title","body","COMMAND_PUBLISH","Publish","COMMAND_TREE","audioReview","directory","tree","directories","excludedPatterns","Tree","COMMAND_LINK","Link","COMMAND_UNLINK","Unlink","COMMAND_AUDIO_REVIEW","AudioReview","COMMAND_CLEAN","Clean","COMMAND_REVIEW","Review","COMMAND_SELECT_AUDIO","SelectAudio","console","log","error","UserCancellationError","message","exit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"application.js","sources":["../src/application.ts"],"sourcesContent":["import * as Cardigantime from '@theunwalked/cardigantime';\nimport 'dotenv/config';\nimport { CommandConfig } from 'types';\nimport * as Arguments from './arguments';\nimport * as AudioCommit from './commands/audio-commit';\nimport * as AudioReview from './commands/audio-review';\nimport * as Clean from './commands/clean';\nimport * as Commit from './commands/commit';\nimport * as Link from './commands/link';\nimport * as Publish from './commands/publish';\nimport * as Tree from './commands/tree';\nimport * as Release from './commands/release';\nimport * as Review from './commands/review';\nimport * as SelectAudio from './commands/select-audio';\nimport * as Unlink from './commands/unlink';\nimport * as Development from './commands/development';\nimport * as Versions from './commands/versions';\nimport { COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_DEVELOPMENT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PUBLISH, COMMAND_TREE, COMMAND_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_UNLINK, COMMAND_VERSIONS, DEFAULT_CONFIG_DIR } from './constants';\nimport { getLogger, setLogLevel } from './logging';\nimport { Config, ConfigSchema, SecureConfig } from './types';\nimport { UserCancellationError } from './error/CommandErrors';\nimport { VERSION } from './constants';\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('=== KODRDRIV DEBUG INFO ===');\n logger.info('Command: %s', commandName);\n logger.info('Version: %s', VERSION);\n logger.info('===========================');\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 // Configure logging early, before CardiganTime initialization\n configureEarlyLogging();\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 // Move pathResolution INSIDE defaults\n pathResolution: {\n resolvePathArray: ['contextDirectories'], // Resolve contextDirectories array elements as paths\n },\n // Use fieldOverlaps instead of mergeStrategy, INSIDE defaults\n fieldOverlaps: {\n 'contextDirectories': 'prepend', // Use prepend strategy for contextDirectories array\n // Add other field overlap configurations as needed\n },\n },\n features: ['config', 'hierarchical'],\n configShape: ConfigSchema.shape, // No need for 'as any' now\n logger: getLogger(),\n }); // No need for 'as any' at the end\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 // Display version information\n logger.info('🚀 kodrdriv %s', VERSION);\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'];\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 === 'review' || command === 'select-audio' || command === 'development' || command === 'versions') {\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 if (commandName === COMMAND_COMMIT) {\n summary = await Commit.execute(runConfig);\n } else if (commandName === COMMAND_AUDIO_COMMIT) {\n summary = await AudioCommit.execute(runConfig);\n } else if (commandName === COMMAND_RELEASE) {\n const releaseSummary = await Release.execute(runConfig);\n summary = `${releaseSummary.title}\\n\\n${releaseSummary.body}`;\n } else if (commandName === COMMAND_PUBLISH) {\n await Publish.execute(runConfig);\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?.excludedPatterns) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.excludedPatterns = runConfig.excludedPatterns;\n }\n summary = await Tree.execute(runConfig);\n } else if (commandName === COMMAND_LINK) {\n summary = await Link.execute(runConfig);\n } else if (commandName === COMMAND_UNLINK) {\n summary = await Unlink.execute(runConfig);\n } else if (commandName === COMMAND_AUDIO_REVIEW) {\n summary = await AudioReview.execute(runConfig);\n } else if (commandName === COMMAND_CLEAN) {\n await Clean.execute(runConfig);\n summary = 'Output directory cleaned successfully.';\n } else if (commandName === COMMAND_REVIEW) {\n summary = await Review.execute(runConfig);\n } else if (commandName === COMMAND_SELECT_AUDIO) {\n await SelectAudio.execute(runConfig);\n summary = 'Audio selection completed successfully.';\n } else if (commandName === COMMAND_DEVELOPMENT) {\n summary = await Development.execute(runConfig);\n } else if (commandName === COMMAND_VERSIONS) {\n summary = await Versions.execute(runConfig);\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(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":["printDebugCommandInfo","commandName","runConfig","debug","logger","getLogger","info","VERSION","configureEarlyLogging","hasVerbose","process","argv","includes","hasDebug","setLogLevel","runApplication","cardigantimeModule","Cardigantime","createCardigantime","create","cardigantime","defaults","configDirectory","DEFAULT_CONFIG_DIR","pathResolution","resolvePathArray","fieldOverlaps","features","configShape","ConfigSchema","shape","secureConfig","commandConfig","Arguments","verbose","setLogger","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","command","treeBuiltInCommand","supportedBuiltInCommands","summary","COMMAND_COMMIT","Commit","COMMAND_AUDIO_COMMIT","AudioCommit","COMMAND_RELEASE","releaseSummary","Release","title","body","COMMAND_PUBLISH","Publish","COMMAND_TREE","audioReview","directory","tree","directories","excludedPatterns","Tree","COMMAND_LINK","Link","COMMAND_UNLINK","Unlink","COMMAND_AUDIO_REVIEW","AudioReview","COMMAND_CLEAN","Clean","COMMAND_REVIEW","Review","COMMAND_SELECT_AUDIO","SelectAudio","COMMAND_DEVELOPMENT","Development","COMMAND_VERSIONS","Versions","console","log","error","UserCancellationError","message","exit"],"mappings":"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"}
|
package/dist/arguments.js
CHANGED
|
@@ -39,8 +39,12 @@ z.object({
|
|
|
39
39
|
'squash',
|
|
40
40
|
'rebase'
|
|
41
41
|
]).optional(),
|
|
42
|
+
syncTarget: z.boolean().optional(),
|
|
42
43
|
scopeRoots: z.string().optional(),
|
|
44
|
+
workspaceFile: z.string().optional(),
|
|
45
|
+
cleanNodeModules: z.boolean().optional(),
|
|
43
46
|
startFrom: z.string().optional(),
|
|
47
|
+
stopAt: z.string().optional(),
|
|
44
48
|
script: z.string().optional(),
|
|
45
49
|
cmd: z.string().optional(),
|
|
46
50
|
publish: z.boolean().optional(),
|
|
@@ -58,7 +62,9 @@ z.object({
|
|
|
58
62
|
file: z.string().optional(),
|
|
59
63
|
directory: z.string().optional(),
|
|
60
64
|
directories: z.array(z.string()).optional(),
|
|
61
|
-
keepTemp: z.boolean().optional()
|
|
65
|
+
keepTemp: z.boolean().optional(),
|
|
66
|
+
noMilestones: z.boolean().optional(),
|
|
67
|
+
subcommand: z.string().optional()
|
|
62
68
|
});
|
|
63
69
|
// Function to transform flat CLI args into nested Config structure
|
|
64
70
|
const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
@@ -97,7 +103,7 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
97
103
|
if (finalCliArgs.keepTemp !== undefined) transformedCliArgs.audioCommit.keepTemp = finalCliArgs.keepTemp;
|
|
98
104
|
}
|
|
99
105
|
// Nested mappings for 'release' options
|
|
100
|
-
if (finalCliArgs.from !== undefined || finalCliArgs.to !== undefined || finalCliArgs.maxDiffBytes !== undefined || finalCliArgs.interactive !== undefined) {
|
|
106
|
+
if (finalCliArgs.from !== undefined || finalCliArgs.to !== undefined || finalCliArgs.maxDiffBytes !== undefined || finalCliArgs.interactive !== undefined || finalCliArgs.noMilestones !== undefined) {
|
|
101
107
|
transformedCliArgs.release = {};
|
|
102
108
|
if (finalCliArgs.from !== undefined) transformedCliArgs.release.from = finalCliArgs.from;
|
|
103
109
|
if (finalCliArgs.to !== undefined) transformedCliArgs.release.to = finalCliArgs.to;
|
|
@@ -105,17 +111,21 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
105
111
|
if (finalCliArgs.interactive !== undefined) transformedCliArgs.release.interactive = finalCliArgs.interactive;
|
|
106
112
|
if (finalCliArgs.messageLimit !== undefined) transformedCliArgs.release.messageLimit = finalCliArgs.messageLimit;
|
|
107
113
|
if (finalCliArgs.maxDiffBytes !== undefined) transformedCliArgs.release.maxDiffBytes = finalCliArgs.maxDiffBytes;
|
|
114
|
+
if (finalCliArgs.noMilestones !== undefined) transformedCliArgs.release.noMilestones = finalCliArgs.noMilestones;
|
|
108
115
|
}
|
|
109
116
|
// Nested mappings for 'publish' options (only when it's actually a publish command or has publish-specific options)
|
|
110
|
-
if (finalCliArgs.mergeMethod !== undefined || finalCliArgs.targetVersion !== undefined || commandName === 'publish' && (finalCliArgs.from !== undefined || finalCliArgs.interactive !== undefined)) {
|
|
117
|
+
if (finalCliArgs.mergeMethod !== undefined || finalCliArgs.targetVersion !== undefined || finalCliArgs.syncTarget !== undefined || finalCliArgs.noMilestones !== undefined || commandName === 'publish' && (finalCliArgs.from !== undefined || finalCliArgs.interactive !== undefined)) {
|
|
111
118
|
transformedCliArgs.publish = {};
|
|
112
119
|
if (finalCliArgs.mergeMethod !== undefined) transformedCliArgs.publish.mergeMethod = finalCliArgs.mergeMethod;
|
|
113
120
|
if (finalCliArgs.from !== undefined) transformedCliArgs.publish.from = finalCliArgs.from;
|
|
114
121
|
if (finalCliArgs.targetVersion !== undefined) transformedCliArgs.publish.targetVersion = finalCliArgs.targetVersion;
|
|
115
122
|
if (finalCliArgs.interactive !== undefined) transformedCliArgs.publish.interactive = finalCliArgs.interactive;
|
|
123
|
+
if (finalCliArgs.syncTarget !== undefined) transformedCliArgs.publish.syncTarget = finalCliArgs.syncTarget;
|
|
124
|
+
if (finalCliArgs.noMilestones !== undefined) transformedCliArgs.publish.noMilestones = finalCliArgs.noMilestones;
|
|
116
125
|
}
|
|
117
|
-
// Nested mappings for 'link' and 'unlink' options
|
|
118
|
-
|
|
126
|
+
// Nested mappings for 'link' and 'unlink' options
|
|
127
|
+
const linkPackageArgument = finalCliArgs.packageArgument;
|
|
128
|
+
if (finalCliArgs.scopeRoots !== undefined || commandName === 'link' && linkPackageArgument !== undefined) {
|
|
119
129
|
transformedCliArgs.link = {};
|
|
120
130
|
if (finalCliArgs.scopeRoots !== undefined) {
|
|
121
131
|
try {
|
|
@@ -124,6 +134,26 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
124
134
|
throw new Error(`Invalid JSON for scope-roots: ${finalCliArgs.scopeRoots}`);
|
|
125
135
|
}
|
|
126
136
|
}
|
|
137
|
+
if (commandName === 'link' && linkPackageArgument !== undefined) {
|
|
138
|
+
transformedCliArgs.link.packageArgument = linkPackageArgument;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Nested mappings for 'unlink' options
|
|
142
|
+
const unlinkPackageArgument = finalCliArgs.packageArgument;
|
|
143
|
+
if (commandName === 'unlink' && (finalCliArgs.scopeRoots !== undefined || unlinkPackageArgument !== undefined || finalCliArgs.workspaceFile !== undefined || finalCliArgs.cleanNodeModules !== undefined)) {
|
|
144
|
+
transformedCliArgs.unlink = {};
|
|
145
|
+
if (finalCliArgs.scopeRoots !== undefined) {
|
|
146
|
+
try {
|
|
147
|
+
transformedCliArgs.unlink.scopeRoots = safeJsonParse(finalCliArgs.scopeRoots, 'scopeRoots CLI argument');
|
|
148
|
+
} catch (error) {
|
|
149
|
+
throw new Error(`Invalid JSON for scope-roots: ${finalCliArgs.scopeRoots}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (finalCliArgs.workspaceFile !== undefined) transformedCliArgs.unlink.workspaceFile = finalCliArgs.workspaceFile;
|
|
153
|
+
if (finalCliArgs.cleanNodeModules !== undefined) transformedCliArgs.unlink.cleanNodeModules = finalCliArgs.cleanNodeModules;
|
|
154
|
+
if (unlinkPackageArgument !== undefined) {
|
|
155
|
+
transformedCliArgs.unlink.packageArgument = unlinkPackageArgument;
|
|
156
|
+
}
|
|
127
157
|
}
|
|
128
158
|
// Nested mappings for 'audio-review' options (only when it's not a tree command)
|
|
129
159
|
if (commandName !== 'tree' && (finalCliArgs.includeCommitHistory !== undefined || finalCliArgs.includeRecentDiffs !== undefined || finalCliArgs.includeReleaseNotes !== undefined || finalCliArgs.includeGithubIssues !== undefined || finalCliArgs.commitHistoryLimit !== undefined || finalCliArgs.diffHistoryLimit !== undefined || finalCliArgs.releaseNotesLimit !== undefined || finalCliArgs.githubIssuesLimit !== undefined || finalCliArgs.file !== undefined || finalCliArgs.directories !== undefined || finalCliArgs.keepTemp !== undefined)) {
|
|
@@ -163,7 +193,8 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
163
193
|
if (commandName === 'tree') {
|
|
164
194
|
const treeExcludedPatterns = finalCliArgs.excludedPatterns || finalCliArgs.excludedPaths;
|
|
165
195
|
const builtInCommand = finalCliArgs.builtInCommand;
|
|
166
|
-
|
|
196
|
+
const packageArgument = finalCliArgs.packageArgument;
|
|
197
|
+
if (finalCliArgs.directory !== undefined || finalCliArgs.directories !== undefined || treeExcludedPatterns !== undefined || finalCliArgs.startFrom !== undefined || finalCliArgs.stopAt !== undefined || finalCliArgs.cmd !== undefined || finalCliArgs.parallel !== undefined || builtInCommand !== undefined || finalCliArgs.continue !== undefined || packageArgument !== undefined || finalCliArgs.cleanNodeModules !== undefined) {
|
|
167
198
|
transformedCliArgs.tree = {};
|
|
168
199
|
if (finalCliArgs.directories !== undefined) transformedCliArgs.tree.directories = finalCliArgs.directories;
|
|
169
200
|
else if (finalCliArgs.directory !== undefined) transformedCliArgs.tree.directories = [
|
|
@@ -171,12 +202,27 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
171
202
|
];
|
|
172
203
|
if (treeExcludedPatterns !== undefined) transformedCliArgs.tree.excludedPatterns = treeExcludedPatterns;
|
|
173
204
|
if (finalCliArgs.startFrom !== undefined) transformedCliArgs.tree.startFrom = finalCliArgs.startFrom;
|
|
205
|
+
if (finalCliArgs.stopAt !== undefined) transformedCliArgs.tree.stopAt = finalCliArgs.stopAt;
|
|
174
206
|
if (finalCliArgs.cmd !== undefined) transformedCliArgs.tree.cmd = finalCliArgs.cmd;
|
|
175
207
|
if (finalCliArgs.parallel !== undefined) transformedCliArgs.tree.parallel = finalCliArgs.parallel;
|
|
176
208
|
if (builtInCommand !== undefined) transformedCliArgs.tree.builtInCommand = builtInCommand;
|
|
177
209
|
if (finalCliArgs.continue !== undefined) transformedCliArgs.tree.continue = finalCliArgs.continue;
|
|
210
|
+
if (packageArgument !== undefined) transformedCliArgs.tree.packageArgument = packageArgument;
|
|
211
|
+
if (finalCliArgs.cleanNodeModules !== undefined) transformedCliArgs.tree.cleanNodeModules = finalCliArgs.cleanNodeModules;
|
|
178
212
|
}
|
|
179
213
|
}
|
|
214
|
+
// Nested mappings for 'development' options
|
|
215
|
+
if (commandName === 'development' && (finalCliArgs.targetVersion !== undefined || finalCliArgs.noMilestones !== undefined)) {
|
|
216
|
+
transformedCliArgs.development = {};
|
|
217
|
+
if (finalCliArgs.targetVersion !== undefined) transformedCliArgs.development.targetVersion = finalCliArgs.targetVersion;
|
|
218
|
+
if (finalCliArgs.noMilestones !== undefined) transformedCliArgs.development.noMilestones = finalCliArgs.noMilestones;
|
|
219
|
+
}
|
|
220
|
+
// Nested mappings for 'versions' options
|
|
221
|
+
if (commandName === 'versions' && (finalCliArgs.subcommand !== undefined || finalCliArgs.directories !== undefined)) {
|
|
222
|
+
transformedCliArgs.versions = {};
|
|
223
|
+
if (finalCliArgs.subcommand !== undefined) transformedCliArgs.versions.subcommand = finalCliArgs.subcommand;
|
|
224
|
+
if (finalCliArgs.directories !== undefined) transformedCliArgs.versions.directories = finalCliArgs.directories;
|
|
225
|
+
}
|
|
180
226
|
// Handle excluded patterns (Commander.js converts --excluded-paths to excludedPaths)
|
|
181
227
|
const excludedPatterns = finalCliArgs.excludedPatterns || finalCliArgs.excludedPaths;
|
|
182
228
|
if (excludedPatterns !== undefined) transformedCliArgs.excludedPatterns = excludedPatterns;
|
|
@@ -421,15 +467,15 @@ async function getCliConfig(program) {
|
|
|
421
467
|
});
|
|
422
468
|
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('--direction <direction>', 'direction or guidance for the commit message').option('--message-limit <messageLimit>', 'limit the number of messages to generate').option('--file <file>', 'audio file path').description('Record audio to provide context, then generate and optionally commit with AI-generated message');
|
|
423
469
|
addSharedOptions(audioCommitCommand);
|
|
424
|
-
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').option('--interactive', 'Present release notes for interactive review and editing').option('--max-diff-bytes <maxDiffBytes>', 'maximum bytes per file in diff (default: 2048)').description('Generate release notes');
|
|
470
|
+
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').option('--interactive', 'Present release notes for interactive review and editing').option('--max-diff-bytes <maxDiffBytes>', 'maximum bytes per file in diff (default: 2048)').option('--no-milestones', 'disable GitHub milestone integration').description('Generate release notes');
|
|
425
471
|
addSharedOptions(releaseCommand);
|
|
426
|
-
const publishCommand = program.command('publish').option('--merge-method <method>', 'method to merge PR (merge, squash, rebase)', 'squash').option('--from <from>', 'branch/tag to generate release notes from (default: main)').option('--target-version <targetVersion>', 'target version for release (explicit version like "4.30.0" or semantic bump: "patch", "minor", "major")').option('--interactive', 'present release notes for interactive review and editing').option('--sendit', 'skip all confirmation prompts and proceed automatically').description('Publish a release');
|
|
472
|
+
const publishCommand = program.command('publish').option('--merge-method <method>', 'method to merge PR (merge, squash, rebase)', 'squash').option('--from <from>', 'branch/tag to generate release notes from (default: main)').option('--target-version <targetVersion>', 'target version for release (explicit version like "4.30.0" or semantic bump: "patch", "minor", "major")').option('--interactive', 'present release notes for interactive review and editing').option('--sendit', 'skip all confirmation prompts and proceed automatically').option('--sync-target', 'attempt to automatically sync target branch with remote before publishing').option('--no-milestones', 'disable GitHub milestone integration').description('Publish a release');
|
|
427
473
|
addSharedOptions(publishCommand);
|
|
428
|
-
const treeCommand = program.command('tree [command]').option('--directory <directory>', 'target directory containing multiple packages (defaults to current directory)').option('--directories [directories...]', 'target directories containing multiple packages (defaults to current directory)').option('--start-from <startFrom>', 'resume execution from this package directory name (useful for restarting failed builds)').option('--cmd <cmd>', 'shell command to execute in each package directory (e.g., "npm install", "git status")').option('--parallel', 'execute packages in parallel when dependencies allow (packages with no interdependencies run simultaneously)').option('--excluded-patterns [excludedPatterns...]', 'patterns to exclude packages from processing (e.g., "**/node_modules/**", "dist/*")').option('--continue', 'continue from previous tree publish execution').description('Analyze package dependencies in workspace and execute commands in dependency order. Supports built-in commands: commit, publish, link, unlink');
|
|
474
|
+
const treeCommand = program.command('tree [command] [packageArgument]').option('--directory <directory>', 'target directory containing multiple packages (defaults to current directory)').option('--directories [directories...]', 'target directories containing multiple packages (defaults to current directory)').option('--start-from <startFrom>', 'resume execution from this package directory name (useful for restarting failed builds)').option('--stop-at <stopAt>', 'stop execution at this package directory name (the specified package will not be executed)').option('--cmd <cmd>', 'shell command to execute in each package directory (e.g., "npm install", "git status")').option('--parallel', 'execute packages in parallel when dependencies allow (packages with no interdependencies run simultaneously)').option('--excluded-patterns [excludedPatterns...]', 'patterns to exclude packages from processing (e.g., "**/node_modules/**", "dist/*")').option('--continue', 'continue from previous tree publish execution').option('--clean-node-modules', 'for unlink command: remove node_modules and package-lock.json, then reinstall dependencies').description('Analyze package dependencies in workspace and execute commands in dependency order. Supports built-in commands: commit, publish, link, unlink, development, branches');
|
|
429
475
|
addSharedOptions(treeCommand);
|
|
430
476
|
const linkCommand = program.command('link').option('--scope-roots <scopeRoots>', 'JSON mapping of scopes to root directories (e.g., \'{"@company": "../"}\')').description('Create npm file: dependencies for local development');
|
|
431
477
|
addSharedOptions(linkCommand);
|
|
432
|
-
const unlinkCommand = program.command('unlink').option('--scope-roots <scopeRoots>', 'JSON mapping of scopes to root directories (e.g., \'{"@company": "../"}\')').description('Restore original dependencies and rebuild node_modules');
|
|
478
|
+
const unlinkCommand = program.command('unlink').option('--scope-roots <scopeRoots>', 'JSON mapping of scopes to root directories (e.g., \'{"@company": "../"}\')').option('--clean-node-modules', 'remove node_modules and package-lock.json, then reinstall dependencies').description('Restore original dependencies and rebuild node_modules');
|
|
433
479
|
addSharedOptions(unlinkCommand);
|
|
434
480
|
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('--file <file>', 'audio file path').option('--directory <directory>', 'directory containing audio files to process').option('--max-recording-time <time>', 'maximum recording time in seconds', parseInt).option('--sendit', 'Create GitHub issues automatically without confirmation').description('Record audio, transcribe with Whisper, and analyze for project issues using AI');
|
|
435
481
|
addSharedOptions(audioReviewCommand);
|
|
@@ -558,6 +604,10 @@ async function getCliConfig(program) {
|
|
|
558
604
|
});
|
|
559
605
|
const cleanCommand = program.command('clean').description('Remove the output directory and all generated files');
|
|
560
606
|
addSharedOptions(cleanCommand);
|
|
607
|
+
const developmentCommand = program.command('development').option('--target-version <targetVersion>', 'target version bump type (patch, minor, major) or explicit version (e.g., "2.1.0")', 'patch').option('--no-milestones', 'disable GitHub milestone integration').description('Switch to working branch and set up development version');
|
|
608
|
+
addSharedOptions(developmentCommand);
|
|
609
|
+
const versionsCommand = program.command('versions <subcommand>').option('--directories [directories...]', 'directories to scan for packages (defaults to current directory)').description('Update dependency versions across packages. Subcommands: minor');
|
|
610
|
+
addSharedOptions(versionsCommand);
|
|
561
611
|
const selectAudioCommand = program.command('select-audio').description('Interactively select and save audio device for recording');
|
|
562
612
|
addSharedOptions(selectAudioCommand);
|
|
563
613
|
program.parse();
|
|
@@ -591,16 +641,30 @@ async function getCliConfig(program) {
|
|
|
591
641
|
commandOptions = publishCommand.opts();
|
|
592
642
|
} else if (commandName === 'tree' && treeCommand.opts) {
|
|
593
643
|
commandOptions = treeCommand.opts();
|
|
594
|
-
// Handle positional
|
|
644
|
+
// Handle positional arguments for built-in command and package argument
|
|
595
645
|
const args = treeCommand.args;
|
|
596
646
|
if (args && args.length > 0 && args[0]) {
|
|
597
647
|
// Store the built-in command for later processing
|
|
598
648
|
commandOptions.builtInCommand = args[0];
|
|
649
|
+
// For link/unlink commands, store additional arguments as package arguments
|
|
650
|
+
if ((args[0] === 'link' || args[0] === 'unlink') && args.length > 1 && args[1]) {
|
|
651
|
+
commandOptions.packageArgument = args[1];
|
|
652
|
+
}
|
|
599
653
|
}
|
|
600
654
|
} else if (commandName === 'link' && linkCommand.opts) {
|
|
601
655
|
commandOptions = linkCommand.opts();
|
|
656
|
+
// Handle positional argument for package specification
|
|
657
|
+
const args = linkCommand.args;
|
|
658
|
+
if (args && args.length > 0 && args[0]) {
|
|
659
|
+
commandOptions.packageArgument = args[0];
|
|
660
|
+
}
|
|
602
661
|
} else if (commandName === 'unlink' && unlinkCommand.opts) {
|
|
603
662
|
commandOptions = unlinkCommand.opts();
|
|
663
|
+
// Handle positional argument for package specification
|
|
664
|
+
const args = unlinkCommand.args;
|
|
665
|
+
if (args && args.length > 0 && args[0]) {
|
|
666
|
+
commandOptions.packageArgument = args[0];
|
|
667
|
+
}
|
|
604
668
|
} else if (commandName === 'audio-review' && audioReviewCommand.opts) {
|
|
605
669
|
commandOptions = audioReviewCommand.opts();
|
|
606
670
|
} else if (commandName === 'review' && reviewCommand.opts) {
|
|
@@ -617,6 +681,15 @@ async function getCliConfig(program) {
|
|
|
617
681
|
}
|
|
618
682
|
} else if (commandName === 'clean' && cleanCommand.opts) {
|
|
619
683
|
commandOptions = cleanCommand.opts();
|
|
684
|
+
} else if (commandName === 'development' && developmentCommand.opts) {
|
|
685
|
+
commandOptions = developmentCommand.opts();
|
|
686
|
+
} else if (commandName === 'versions' && versionsCommand.opts) {
|
|
687
|
+
commandOptions = versionsCommand.opts();
|
|
688
|
+
// Handle positional argument for subcommand
|
|
689
|
+
const args = versionsCommand.args;
|
|
690
|
+
if (args && args.length > 0 && args[0]) {
|
|
691
|
+
commandOptions.subcommand = args[0];
|
|
692
|
+
}
|
|
620
693
|
} else if (commandName === 'select-audio' && selectAudioCommand.opts) {
|
|
621
694
|
commandOptions = selectAudioCommand.opts();
|
|
622
695
|
}
|
|
@@ -675,31 +748,43 @@ async function validateAndProcessOptions(options) {
|
|
|
675
748
|
},
|
|
676
749
|
audioCommit: {
|
|
677
750
|
...KODRDRIV_DEFAULTS.audioCommit,
|
|
678
|
-
...options.audioCommit
|
|
751
|
+
...Object.fromEntries(Object.entries(options.audioCommit || {}).filter(([_, v])=>v !== undefined))
|
|
679
752
|
},
|
|
680
753
|
release: {
|
|
681
754
|
...KODRDRIV_DEFAULTS.release,
|
|
682
|
-
...options.release
|
|
755
|
+
...Object.fromEntries(Object.entries(options.release || {}).filter(([_, v])=>v !== undefined))
|
|
683
756
|
},
|
|
684
757
|
audioReview: {
|
|
685
758
|
...KODRDRIV_DEFAULTS.audioReview,
|
|
686
|
-
...options.audioReview
|
|
759
|
+
...Object.fromEntries(Object.entries(options.audioReview || {}).filter(([_, v])=>v !== undefined))
|
|
687
760
|
},
|
|
688
761
|
review: {
|
|
689
762
|
...KODRDRIV_DEFAULTS.review,
|
|
690
|
-
...options.review
|
|
763
|
+
...Object.fromEntries(Object.entries(options.review || {}).filter(([_, v])=>v !== undefined))
|
|
691
764
|
},
|
|
692
765
|
publish: {
|
|
693
766
|
...KODRDRIV_DEFAULTS.publish,
|
|
694
|
-
...options.publish
|
|
767
|
+
...Object.fromEntries(Object.entries(options.publish || {}).filter(([_, v])=>v !== undefined))
|
|
695
768
|
},
|
|
696
769
|
link: {
|
|
697
770
|
...KODRDRIV_DEFAULTS.link,
|
|
698
|
-
...options.link
|
|
771
|
+
...Object.fromEntries(Object.entries(options.link || {}).filter(([_, v])=>v !== undefined))
|
|
772
|
+
},
|
|
773
|
+
unlink: {
|
|
774
|
+
...KODRDRIV_DEFAULTS.unlink,
|
|
775
|
+
...Object.fromEntries(Object.entries(options.unlink || {}).filter(([_, v])=>v !== undefined))
|
|
699
776
|
},
|
|
700
777
|
tree: {
|
|
701
778
|
...KODRDRIV_DEFAULTS.tree,
|
|
702
|
-
...options.tree
|
|
779
|
+
...Object.fromEntries(Object.entries(options.tree || {}).filter(([_, v])=>v !== undefined))
|
|
780
|
+
},
|
|
781
|
+
development: {
|
|
782
|
+
...KODRDRIV_DEFAULTS.development,
|
|
783
|
+
...Object.fromEntries(Object.entries(options.development || {}).filter(([_, v])=>v !== undefined))
|
|
784
|
+
},
|
|
785
|
+
versions: {
|
|
786
|
+
...KODRDRIV_DEFAULTS.versions,
|
|
787
|
+
...Object.fromEntries(Object.entries(options.versions || {}).filter(([_, v])=>v !== undefined))
|
|
703
788
|
},
|
|
704
789
|
excludedPatterns: (_options_excludedPatterns = options.excludedPatterns) !== null && _options_excludedPatterns !== void 0 ? _options_excludedPatterns : KODRDRIV_DEFAULTS.excludedPatterns
|
|
705
790
|
};
|