@eldrforge/kodrdriv 1.2.137 → 1.2.138
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 +18 -0
- package/dist/application.js +42 -1
- package/dist/application.js.map +1 -1
- package/dist/constants.js +1 -1
- package/guide/quickstart.md +23 -0
- package/package.json +16 -13
package/README.md
CHANGED
|
@@ -14,6 +14,19 @@ Writing good commit messages and release notes is time-consuming and often done
|
|
|
14
14
|
|
|
15
15
|
KodrDriv reads your code changes and Git history to automatically generate contextual, meaningful documentation that reflects your actual work.
|
|
16
16
|
|
|
17
|
+
## Requirements
|
|
18
|
+
|
|
19
|
+
- **Node.js 24.0.0 or higher** - KodrDriv uses Vite 7+ which requires Node.js 24+
|
|
20
|
+
- Git installed and configured
|
|
21
|
+
- OpenAI API key (for AI-powered content generation)
|
|
22
|
+
|
|
23
|
+
To check your Node.js version:
|
|
24
|
+
```bash
|
|
25
|
+
node --version
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If you need to upgrade Node.js, visit [nodejs.org](https://nodejs.org/) or use a version manager like [nvm](https://github.com/nvm-sh/nvm).
|
|
29
|
+
|
|
17
30
|
## Installation
|
|
18
31
|
|
|
19
32
|
```bash
|
|
@@ -78,8 +91,13 @@ Set up your environment variables:
|
|
|
78
91
|
```bash
|
|
79
92
|
export OPENAI_API_KEY="your-openai-api-key"
|
|
80
93
|
export GITHUB_TOKEN="your-github-token" # Required for publish command
|
|
94
|
+
|
|
95
|
+
# If using a project-scoped API key (starts with sk-proj-):
|
|
96
|
+
export OPENAI_PROJECT_ID="proj-your-project-id"
|
|
81
97
|
```
|
|
82
98
|
|
|
99
|
+
**Note:** If your OpenAI API key starts with `sk-proj-`, you must also set `OPENAI_PROJECT_ID`. You can find your project ID in the [OpenAI dashboard](https://platform.openai.com/settings/organization/projects). Alternatively, create a legacy API key (starts with just `sk-`) to avoid needing the project ID.
|
|
100
|
+
|
|
83
101
|
Initialize configuration files:
|
|
84
102
|
```bash
|
|
85
103
|
kodrdriv --init-config
|
package/dist/application.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { config } from 'dotenv';
|
|
1
2
|
import * as Cardigantime from '@theunwalked/cardigantime';
|
|
2
|
-
import 'dotenv/config';
|
|
3
3
|
import { setLogger } from '@eldrforge/git-tools';
|
|
4
4
|
import { setLogger as setLogger$1, setPromptFunction } from '@eldrforge/github-tools';
|
|
5
5
|
import { promptConfirmation, UserCancellationError } from '@eldrforge/shared';
|
|
@@ -13,6 +13,30 @@ import { DEFAULT_CONFIG_DIR, VERSION, COMMAND_CHECK_CONFIG, COMMAND_INIT_CONFIG,
|
|
|
13
13
|
import { getLogger, setLogLevel } from './logging.js';
|
|
14
14
|
import { ConfigSchema } from './types.js';
|
|
15
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
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Check Node.js version and exit with clear error message if version is too old.
|
|
24
|
+
*/ function checkNodeVersion() {
|
|
25
|
+
const requiredMajorVersion = 24;
|
|
26
|
+
const currentVersion = process.version;
|
|
27
|
+
const majorVersion = parseInt(currentVersion.slice(1).split('.')[0], 10);
|
|
28
|
+
if (majorVersion < requiredMajorVersion) {
|
|
29
|
+
// eslint-disable-next-line no-console
|
|
30
|
+
console.error(`\n❌ ERROR: Node.js version ${requiredMajorVersion}.0.0 or higher is required.`);
|
|
31
|
+
// eslint-disable-next-line no-console
|
|
32
|
+
console.error(` Current version: ${currentVersion}`);
|
|
33
|
+
// eslint-disable-next-line no-console
|
|
34
|
+
console.error(` Please upgrade your Node.js version to continue.\n`);
|
|
35
|
+
// eslint-disable-next-line no-console
|
|
36
|
+
console.error(` This project uses Vite 7+ which requires Node.js ${requiredMajorVersion}+.\n`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
16
40
|
/**
|
|
17
41
|
* Print debug information about the command being executed when debug flag is enabled.
|
|
18
42
|
*/ function printDebugCommandInfo(commandName, runConfig) {
|
|
@@ -21,6 +45,21 @@ import { ConfigSchema } from './types.js';
|
|
|
21
45
|
logger.info('DEBUG_INFO_HEADER: KodrDriv debug information');
|
|
22
46
|
logger.info('DEBUG_INFO_COMMAND: Command being executed | Command: %s', commandName);
|
|
23
47
|
logger.info('DEBUG_INFO_VERSION: KodrDriv version | Version: %s', VERSION);
|
|
48
|
+
// Log last 4 characters of tokens for debugging permissions issues
|
|
49
|
+
const openaiToken = process.env.OPENAI_API_KEY;
|
|
50
|
+
const githubToken = process.env.GITHUB_TOKEN;
|
|
51
|
+
if (openaiToken) {
|
|
52
|
+
const tokenSuffix = openaiToken.slice(-4);
|
|
53
|
+
logger.info('DEBUG_INFO_TOKEN: OpenAI API Key | Suffix: ...%s', tokenSuffix);
|
|
54
|
+
} else {
|
|
55
|
+
logger.info('DEBUG_INFO_TOKEN: OpenAI API Key | Status: not set');
|
|
56
|
+
}
|
|
57
|
+
if (githubToken) {
|
|
58
|
+
const tokenSuffix = githubToken.slice(-4);
|
|
59
|
+
logger.info('DEBUG_INFO_TOKEN: GitHub Token | Suffix: ...%s', tokenSuffix);
|
|
60
|
+
} else {
|
|
61
|
+
logger.info('DEBUG_INFO_TOKEN: GitHub Token | Status: not set');
|
|
62
|
+
}
|
|
24
63
|
logger.info('DEBUG_INFO_FOOTER: End of debug information');
|
|
25
64
|
}
|
|
26
65
|
}
|
|
@@ -42,6 +81,8 @@ import { ConfigSchema } from './types.js';
|
|
|
42
81
|
}
|
|
43
82
|
}
|
|
44
83
|
async function runApplication() {
|
|
84
|
+
// Check Node.js version first, before doing anything else
|
|
85
|
+
checkNodeVersion();
|
|
45
86
|
// Configure logging early, before CardiganTime initialization
|
|
46
87
|
configureEarlyLogging();
|
|
47
88
|
// Initialize RiotPrompt templates for ai-service
|
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 { setLogger as setGitLogger } from '@eldrforge/git-tools';\nimport { setLogger as setGitHubLogger, setPromptFunction } from '@eldrforge/github-tools';\nimport { promptConfirmation } from '@eldrforge/shared';\nimport { initializeTemplates } from '@eldrforge/ai-service';\nimport { CommandConfig } from 'types';\nimport * as Arguments from './arguments';\n\n// Import commands from extracted packages\nimport * as CommandsGit from '@eldrforge/commands-git';\nimport * as CommandsTree from '@eldrforge/commands-tree';\nimport * as CommandsPublish from '@eldrforge/commands-publish';\nimport * as CommandsAudio from '@eldrforge/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_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_TREE, COMMAND_UNLINK, COMMAND_UPDATES, COMMAND_VERSIONS, DEFAULT_CONFIG_DIR, VERSION } from './constants';\nimport { UserCancellationError } from '@eldrforge/shared';\nimport { getLogger, setLogLevel } from './logging';\nimport { Config, SecureConfig, ConfigSchema } 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('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 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 // 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\n logger.info('APPLICATION_STARTING: KodrDriv application initializing | Version: %s | Status: starting', 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', 'updates'];\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 === '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 @eldrforge/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_REVIEW) {\n summary = await CommandsGit.review(runConfig);\n }\n // Tree commands (from @eldrforge/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 @eldrforge/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 @eldrforge/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":["printDebugCommandInfo","commandName","runConfig","debug","logger","getLogger","info","VERSION","configureEarlyLogging","hasVerbose","process","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","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","command","treeBuiltInCommand","supportedBuiltInCommands","summary","COMMAND_COMMIT","CommandsGit","commit","COMMAND_PRECOMMIT","precommit","COMMAND_CLEAN","clean","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","console","log","error","UserCancellationError","message","exit"],"mappings":"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"}
|
|
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 });\n\nimport * as Cardigantime from '@theunwalked/cardigantime';\nimport { setLogger as setGitLogger } from '@eldrforge/git-tools';\nimport { setLogger as setGitHubLogger, setPromptFunction } from '@eldrforge/github-tools';\nimport { promptConfirmation } from '@eldrforge/shared';\nimport { initializeTemplates } from '@eldrforge/ai-service';\nimport { CommandConfig } from 'types';\nimport * as Arguments from './arguments';\n\n// Import commands from extracted packages\nimport * as CommandsGit from '@eldrforge/commands-git';\nimport * as CommandsTree from '@eldrforge/commands-tree';\nimport * as CommandsPublish from '@eldrforge/commands-publish';\nimport * as CommandsAudio from '@eldrforge/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_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_TREE, COMMAND_UNLINK, COMMAND_UPDATES, COMMAND_VERSIONS, DEFAULT_CONFIG_DIR, VERSION } from './constants';\nimport { UserCancellationError } from '@eldrforge/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 * 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\n logger.info('APPLICATION_STARTING: KodrDriv application initializing | Version: %s | Status: starting', 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', 'updates'];\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 === '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 @eldrforge/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_REVIEW) {\n summary = await CommandsGit.review(runConfig);\n }\n // Tree commands (from @eldrforge/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 @eldrforge/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 @eldrforge/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","checkNodeVersion","requiredMajorVersion","currentVersion","process","version","majorVersion","parseInt","slice","split","console","error","exit","printDebugCommandInfo","commandName","runConfig","debug","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","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","command","treeBuiltInCommand","supportedBuiltInCommands","summary","COMMAND_COMMIT","CommandsGit","commit","COMMAND_PRECOMMIT","precommit","COMMAND_CLEAN","clean","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":"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"}
|
package/dist/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os from 'os';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
|
|
4
|
-
const VERSION = '1.2.
|
|
4
|
+
const VERSION = '1.2.138 (HEAD/53315d9 T:v1.2.138 2026-01-13 07:03:54 -0800) linux x64 v24.12.0';
|
|
5
5
|
const PROGRAM_NAME = 'kodrdriv';
|
|
6
6
|
const DEFAULT_OVERRIDES = false;
|
|
7
7
|
const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';
|
package/guide/quickstart.md
CHANGED
|
@@ -22,8 +22,13 @@ npm install -g @eldrforge/kodrdriv
|
|
|
22
22
|
```bash
|
|
23
23
|
export OPENAI_API_KEY="sk-your-openai-key-here"
|
|
24
24
|
export GITHUB_TOKEN="ghp-your-github-token-here" # Optional, for publish
|
|
25
|
+
|
|
26
|
+
# If your API key starts with sk-proj-, you must also set:
|
|
27
|
+
export OPENAI_PROJECT_ID="proj-your-project-id"
|
|
25
28
|
```
|
|
26
29
|
|
|
30
|
+
**Important:** Project-scoped API keys (starting with `sk-proj-`) require the `OPENAI_PROJECT_ID` environment variable. You can find your project ID at https://platform.openai.com/settings/organization/projects
|
|
31
|
+
|
|
27
32
|
Add to your shell profile (~/.zshrc, ~/.bashrc) to persist.
|
|
28
33
|
|
|
29
34
|
### 2. Initialize Configuration
|
|
@@ -181,6 +186,24 @@ echo $OPENAI_API_KEY
|
|
|
181
186
|
|
|
182
187
|
# Set it
|
|
183
188
|
export OPENAI_API_KEY="your-key"
|
|
189
|
+
|
|
190
|
+
# If using project-scoped key (sk-proj-*), also set:
|
|
191
|
+
export OPENAI_PROJECT_ID="proj-your-project-id"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### "401 You do not have access to the project tied to the API key"
|
|
195
|
+
|
|
196
|
+
This error occurs when using a project-scoped API key without setting `OPENAI_PROJECT_ID`:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Check if your key is project-scoped
|
|
200
|
+
echo $OPENAI_API_KEY | grep "sk-proj"
|
|
201
|
+
|
|
202
|
+
# If it is, set the project ID:
|
|
203
|
+
export OPENAI_PROJECT_ID="proj-your-project-id"
|
|
204
|
+
|
|
205
|
+
# Find your project ID at:
|
|
206
|
+
# https://platform.openai.com/settings/organization/projects
|
|
184
207
|
```
|
|
185
208
|
|
|
186
209
|
### "No changes to commit"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eldrforge/kodrdriv",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.138",
|
|
4
4
|
"description": "Create Intelligent Release Notes or Change Logs from Git",
|
|
5
5
|
"main": "dist/main.js",
|
|
6
6
|
"type": "module",
|
|
@@ -37,19 +37,22 @@
|
|
|
37
37
|
],
|
|
38
38
|
"author": "Tim O'Brien <tobrien@discursive.com>",
|
|
39
39
|
"license": "Apache-2.0",
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=24.0.0"
|
|
42
|
+
},
|
|
40
43
|
"dependencies": {
|
|
41
|
-
"@eldrforge/core": "^0.1.
|
|
42
|
-
"@eldrforge/commands-git": "^0.1.
|
|
43
|
-
"@eldrforge/commands-tree": "^0.1.
|
|
44
|
-
"@eldrforge/commands-publish": "^0.1.
|
|
45
|
-
"@eldrforge/commands-audio": "^0.1.
|
|
46
|
-
"@eldrforge/ai-service": "^0.1.
|
|
47
|
-
"@eldrforge/audio-tools": "^0.1.
|
|
48
|
-
"@eldrforge/git-tools": "^0.1.
|
|
49
|
-
"@eldrforge/github-tools": "^0.1.
|
|
50
|
-
"@eldrforge/shared": "^0.1.
|
|
51
|
-
"@eldrforge/tree-core": "^0.1.
|
|
52
|
-
"@eldrforge/tree-execution": "^0.1.
|
|
44
|
+
"@eldrforge/core": "^0.1.3",
|
|
45
|
+
"@eldrforge/commands-git": "^0.1.4",
|
|
46
|
+
"@eldrforge/commands-tree": "^0.1.3",
|
|
47
|
+
"@eldrforge/commands-publish": "^0.1.4",
|
|
48
|
+
"@eldrforge/commands-audio": "^0.1.3",
|
|
49
|
+
"@eldrforge/ai-service": "^0.1.21",
|
|
50
|
+
"@eldrforge/audio-tools": "^0.1.15",
|
|
51
|
+
"@eldrforge/git-tools": "^0.1.22",
|
|
52
|
+
"@eldrforge/github-tools": "^0.1.21",
|
|
53
|
+
"@eldrforge/shared": "^0.1.10",
|
|
54
|
+
"@eldrforge/tree-core": "^0.1.8",
|
|
55
|
+
"@eldrforge/tree-execution": "^0.1.8",
|
|
53
56
|
"@octokit/rest": "^22.0.0",
|
|
54
57
|
"@riotprompt/riotprompt": "^0.0.10",
|
|
55
58
|
"@theunwalked/cardigantime": "^0.0.16",
|