@eldrforge/kodrdriv 1.2.1 → 1.2.3

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 (40) hide show
  1. package/dist/application.js +7 -19
  2. package/dist/application.js.map +1 -1
  3. package/dist/arguments.js +345 -96
  4. package/dist/arguments.js.map +1 -1
  5. package/dist/commands/clean.js +1 -1
  6. package/dist/commands/clean.js.map +1 -1
  7. package/dist/commands/commit.js +59 -14
  8. package/dist/commands/commit.js.map +1 -1
  9. package/dist/commands/link.js +200 -11
  10. package/dist/commands/link.js.map +1 -1
  11. package/dist/commands/release.js +9 -3
  12. package/dist/commands/release.js.map +1 -1
  13. package/dist/commands/review.js +356 -145
  14. package/dist/commands/review.js.map +1 -1
  15. package/dist/commands/tree.js +111 -250
  16. package/dist/commands/tree.js.map +1 -1
  17. package/dist/commands/unlink.js +238 -10
  18. package/dist/commands/unlink.js.map +1 -1
  19. package/dist/constants.js +28 -12
  20. package/dist/constants.js.map +1 -1
  21. package/dist/content/issues.js +1 -1
  22. package/dist/error/CommandErrors.js +8 -1
  23. package/dist/error/CommandErrors.js.map +1 -1
  24. package/dist/prompt/commit.js +6 -0
  25. package/dist/prompt/commit.js.map +1 -1
  26. package/dist/prompt/instructions/review.md +13 -3
  27. package/dist/util/openai.js +70 -9
  28. package/dist/util/openai.js.map +1 -1
  29. package/dist/util/validation.js +24 -1
  30. package/dist/util/validation.js.map +1 -1
  31. package/package.json +2 -2
  32. package/test-external-unlink/package.json +16 -0
  33. package/test-externals/package.json +8 -0
  34. package/test-review-flow.sh +15 -0
  35. package/test-sort-files/alpha.md +3 -0
  36. package/test-sort-files/middle.txt +3 -0
  37. package/test-sort-files/zebra.txt +3 -0
  38. package/test_output.txt +161 -0
  39. package/dist/types.js +0 -140
  40. package/dist/types.js.map +0 -1
@@ -5,19 +5,18 @@ import { execute as execute$1 } from './commands/audio-commit.js';
5
5
  import { execute as execute$7 } from './commands/audio-review.js';
6
6
  import { execute as execute$8 } from './commands/clean.js';
7
7
  import { execute } from './commands/commit.js';
8
+ import { execute as execute$b } from './commands/development.js';
8
9
  import { execute as execute$5 } from './commands/link.js';
9
10
  import { execute as execute$3 } from './commands/publish.js';
10
- import { execute as execute$4 } from './commands/tree.js';
11
11
  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
+ import { execute as execute$4 } from './commands/tree.js';
14
15
  import { execute as execute$6 } from './commands/unlink.js';
15
- import { execute as execute$b } from './commands/development.js';
16
16
  import { execute as execute$c } from './commands/versions.js';
17
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';
18
- import { getLogger, setLogLevel } from './logging.js';
19
- import { ConfigSchema } from './types.js';
20
18
  import { UserCancellationError } from './error/CommandErrors.js';
19
+ import { getLogger, setLogLevel } from './logging.js';
21
20
 
22
21
  /**
23
22
  * Print debug information about the command being executed when debug flag is enabled.
@@ -54,25 +53,14 @@ async function runApplication() {
54
53
  const createCardigantime = cardigantimeModule.create;
55
54
  const cardigantime = createCardigantime({
56
55
  defaults: {
57
- configDirectory: DEFAULT_CONFIG_DIR,
58
- // Move pathResolution INSIDE defaults
59
- pathResolution: {
60
- resolvePathArray: [
61
- 'contextDirectories'
62
- ]
63
- },
64
- // Use fieldOverlaps instead of mergeStrategy, INSIDE defaults
65
- fieldOverlaps: {
66
- 'contextDirectories': 'prepend'
67
- }
56
+ configDirectory: DEFAULT_CONFIG_DIR
68
57
  },
69
58
  features: [
70
59
  'config',
71
60
  'hierarchical'
72
61
  ],
73
- configShape: ConfigSchema.shape,
74
62
  logger: getLogger()
75
- }); // No need for 'as any' at the end
63
+ });
76
64
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
77
65
  const [runConfig, secureConfig, commandConfig] = await configure(cardigantime); // Pass cardigantime instance
78
66
  // Set log level based on verbose flag
@@ -146,9 +134,9 @@ async function runApplication() {
146
134
  ];
147
135
  }
148
136
  // Handle tree exclusion patterns - use global excludedPatterns for tree
149
- if (runConfig.excludedPatterns && !((_runConfig_tree1 = runConfig.tree) === null || _runConfig_tree1 === void 0 ? void 0 : _runConfig_tree1.excludedPatterns)) {
137
+ if (runConfig.excludedPatterns && !((_runConfig_tree1 = runConfig.tree) === null || _runConfig_tree1 === void 0 ? void 0 : _runConfig_tree1.exclude)) {
150
138
  runConfig.tree = runConfig.tree || {};
151
- runConfig.tree.excludedPatterns = runConfig.excludedPatterns;
139
+ runConfig.tree.exclude = runConfig.excludedPatterns;
152
140
  }
153
141
  summary = await execute$4(runConfig);
154
142
  } else if (commandName === COMMAND_LINK) {
@@ -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 * 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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"}
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 Development from './commands/development';\nimport * as Link from './commands/link';\nimport * as Publish from './commands/publish';\nimport * as Release from './commands/release';\nimport * as Review from './commands/review';\nimport * as SelectAudio from './commands/select-audio';\nimport * as Tree from './commands/tree';\nimport * as Unlink from './commands/unlink';\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_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_TREE, COMMAND_UNLINK, COMMAND_VERSIONS, DEFAULT_CONFIG_DIR, VERSION } from './constants';\nimport { UserCancellationError } from './error/CommandErrors';\nimport { getLogger, setLogLevel } from './logging';\nimport { Config, SecureConfig } from './types';\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 },\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 // 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?.exclude) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.exclude = 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","features","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","exclude","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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"}