@eldrforge/kodrdriv 1.2.124 → 1.2.125

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/dist/constants.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import os__default from 'os';
2
2
  import path__default from 'path';
3
3
 
4
- const VERSION = '1.2.124 (HEAD/b29e979 T:v1.2.124 2025-12-24 18:48:20 -0800) linux x64 v22.21.1';
4
+ const VERSION = '1.2.125 (HEAD/8ac7fba T:v1.2.125 2025-12-25 13:26:28 -0800) linux x64 v22.21.1';
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';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["import { MergeMethod } from './types';\nimport os from 'os';\nimport path from 'path';\n\nexport const VERSION = '__VERSION__ (__GIT_BRANCH__/__GIT_COMMIT__ __GIT_TAGS__ __GIT_COMMIT_DATE__) __SYSTEM_INFO__';\nexport const PROGRAM_NAME = 'kodrdriv';\nexport const DEFAULT_CHARACTER_ENCODING = 'utf-8';\nexport const DEFAULT_BINARY_TO_TEXT_ENCODING = 'base64';\nexport const DEFAULT_DIFF = true;\nexport const DEFAULT_LOG = false;\nexport const DEFAULT_OVERRIDES = false;\nexport const DATE_FORMAT_MONTH_DAY = 'MM-DD';\nexport const DATE_FORMAT_YEAR = 'YYYY';\nexport const DATE_FORMAT_YEAR_MONTH = 'YYYY-MM';\nexport const DATE_FORMAT_YEAR_MONTH_DAY = 'YYYY-MM-DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_SLASH = 'YYYY/MM/DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES = 'YYYY-MM-DD-HHmm';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS = 'YYYY-MM-DD-HHmmss';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';\nexport const DATE_FORMAT_SHORT_TIMESTAMP = 'YYMMdd-HHmm';\nexport const DATE_FORMAT_MONTH = 'MM';\nexport const DATE_FORMAT_DAY = 'DD';\nexport const DATE_FORMAT_HOURS = 'HHmm';\nexport const DATE_FORMAT_MINUTES = 'mm';\nexport const DATE_FORMAT_SECONDS = 'ss';\nexport const DATE_FORMAT_MILLISECONDS = 'SSS';\nexport const DEFAULT_VERBOSE = false;\nexport const DEFAULT_DRY_RUN = false;\nexport const DEFAULT_DEBUG = false;\nexport const DEFAULT_MODEL = 'gpt-4o-mini';\nexport const DEFAULT_MODEL_STRONG = 'gpt-4o';\nexport const DEFAULT_OPENAI_REASONING = 'low';\nexport const DEFAULT_OPENAI_MAX_OUTPUT_TOKENS = 10000;\nexport const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';\n\n// Buffer size for git commands that may produce large output (like git log)\nexport const DEFAULT_GIT_COMMAND_MAX_BUFFER = 50 * 1024 * 1024; // 50MB\n\nexport const DEFAULT_CONTEXT_DIRECTORIES: string[] = [];\n\nexport const DEFAULT_CONFIG_DIR = '.kodrdriv';\nexport const DEFAULT_PREFERENCES_DIRECTORY = path.join(os.homedir(), '.kodrdriv');\n\nexport const DEFAULT_FROM_COMMIT_ALIAS = 'main';\nexport const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';\n\nexport const DEFAULT_ADD = false;\nexport const DEFAULT_CACHED = false;\nexport const DEFAULT_SENDIT_MODE = false;\nexport const DEFAULT_INTERACTIVE_MODE = false;\nexport const DEFAULT_AMEND_MODE = false;\n// CRITICAL: Keep this low (3-5) to prevent log context contamination.\n// The LLM tends to pattern-match against recent commits instead of describing\n// the actual diff when it sees too much commit history. Set to 0 to disable.\nexport const DEFAULT_MESSAGE_LIMIT = 3;\nexport const DEFAULT_MAX_DIFF_BYTES = 20480; // 20KB limit per file\n\nexport const DEFAULT_MERGE_METHOD: MergeMethod = 'squash';\n\nexport const DEFAULT_EXCLUDED_PATTERNS = [\n 'node_modules', 'package-lock.json', 'yarn.lock', 'bun.lockb',\n 'composer.lock', 'Cargo.lock', 'Gemfile.lock',\n 'dist', 'build', 'out', '.next', '.nuxt', 'coverage',\n '.vscode', '.idea', '.DS_Store', '.git', '.gitignore',\n 'logs', 'tmp', '.cache', '*.log', '.env', '.env.*',\n '*.pem', '*.crt', '*.key', '*.sqlite', '*.db',\n '*.zip', '*.tar', '*.gz', '*.exe', '*.bin'\n];\n\nexport const COMMAND_COMMIT = 'commit';\nexport const COMMAND_AUDIO_COMMIT = 'audio-commit';\nexport const COMMAND_SELECT_AUDIO = 'select-audio';\nexport const COMMAND_RELEASE = 'release';\nexport const COMMAND_REVIEW = 'review';\nexport const COMMAND_AUDIO_REVIEW = 'audio-review';\nexport const COMMAND_PUBLISH = 'publish';\nexport const COMMAND_TREE = 'tree';\nexport const COMMAND_LINK = 'link';\nexport const COMMAND_UNLINK = 'unlink';\nexport const COMMAND_CLEAN = 'clean';\nexport const COMMAND_PRECOMMIT = 'precommit';\nexport const COMMAND_DEVELOPMENT = 'development';\nexport const COMMAND_VERSIONS = 'versions';\nexport const COMMAND_UPDATES = 'updates';\nexport const COMMAND_CHECK_CONFIG = 'check-config';\nexport const COMMAND_INIT_CONFIG = 'init-config';\n\nexport const ALLOWED_COMMANDS = [\n COMMAND_COMMIT,\n COMMAND_AUDIO_COMMIT,\n COMMAND_SELECT_AUDIO,\n COMMAND_RELEASE,\n COMMAND_REVIEW,\n COMMAND_AUDIO_REVIEW,\n COMMAND_PUBLISH,\n COMMAND_TREE,\n COMMAND_LINK,\n COMMAND_UNLINK,\n COMMAND_CLEAN,\n COMMAND_PRECOMMIT,\n COMMAND_DEVELOPMENT,\n COMMAND_VERSIONS,\n COMMAND_UPDATES\n];\n\nexport const DEFAULT_COMMAND = COMMAND_COMMIT;\n\nexport const DEFAULT_INSTRUCTIONS_DIR = `instructions`;\n\nexport const DEFAULT_PERSONA_DIR = `personas`;\n\nexport const DEFAULT_INSTRUCTIONS_COMMIT_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/commit.md`;\nexport const DEFAULT_INSTRUCTIONS_RELEASE_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/release.md`;\nexport const DEFAULT_INSTRUCTIONS_REVIEW_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/review.md`;\n\nexport const DEFAULT_PERSONA_RELEASER_FILE = `${DEFAULT_PERSONA_DIR}/releaser.md`;\nexport const DEFAULT_PERSONA_YOU_FILE = `${DEFAULT_PERSONA_DIR}/you.md`;\n\n// Default instructions for each persona\nexport const DEFAULT_INSTRUCTIONS_MAP = {\n [COMMAND_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE, // Reuse commit instructions\n [COMMAND_RELEASE]: DEFAULT_INSTRUCTIONS_RELEASE_FILE,\n [COMMAND_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE, // Reuse audio-review instructions for now\n [COMMAND_AUDIO_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE,\n};\n\n// Default personas for each command\nexport const DEFAULT_PERSONA_MAP = {\n [COMMAND_COMMIT]: DEFAULT_PERSONA_YOU_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_RELEASE]: DEFAULT_PERSONA_RELEASER_FILE,\n [COMMAND_REVIEW]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_AUDIO_REVIEW]: DEFAULT_PERSONA_YOU_FILE,\n};\n\n// Used by child process to create paths\nexport const DEFAULT_PATH_SEPARATOR = '/';\n\n// Used by util/general for file filtering\nexport const DEFAULT_IGNORE_PATTERNS = [\n 'node_modules/**',\n '**/*.log',\n '.git/**',\n 'dist/**',\n 'build/**',\n 'coverage/**',\n '.DS_Store',\n '*.tmp',\n '*.cache',\n];\n\n// Used by util/storage for directory names\nexport const DEFAULT_DIRECTORY_PREFIX = '.kodrdriv';\n\n// Used by other commands but not exposed in CLI\nexport const INTERNAL_DEFAULT_OUTPUT_FILE = 'output.txt';\n\nexport const INTERNAL_DATETIME_FORMAT = 'YYYY-MM-DD_HH-mm-ss';\n\n// Define defaults in one place\nexport const KODRDRIV_DEFAULTS = {\n dryRun: DEFAULT_DRY_RUN,\n verbose: DEFAULT_VERBOSE,\n debug: DEFAULT_DEBUG,\n overrides: DEFAULT_OVERRIDES,\n model: DEFAULT_MODEL,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n contextDirectories: DEFAULT_CONTEXT_DIRECTORIES,\n commandName: DEFAULT_COMMAND,\n configDirectory: DEFAULT_CONFIG_DIR,\n outputDirectory: DEFAULT_OUTPUT_DIRECTORY,\n preferencesDirectory: DEFAULT_PREFERENCES_DIRECTORY,\n commit: {\n add: DEFAULT_ADD,\n cached: DEFAULT_CACHED,\n sendit: DEFAULT_SENDIT_MODE,\n interactive: DEFAULT_INTERACTIVE_MODE,\n amend: DEFAULT_AMEND_MODE,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n skipFileCheck: false,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n release: {\n from: DEFAULT_FROM_COMMIT_ALIAS,\n to: DEFAULT_TO_COMMIT_ALIAS,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n interactive: DEFAULT_INTERACTIVE_MODE,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n noMilestones: false,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n audioCommit: {\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n review: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n audioReview: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n directory: undefined, // No default directory\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n publish: {\n mergeMethod: DEFAULT_MERGE_METHOD,\n from: DEFAULT_FROM_COMMIT_ALIAS,\n targetVersion: 'patch',\n interactive: DEFAULT_INTERACTIVE_MODE,\n requiredEnvVars: ['GITHUB_TOKEN', 'OPENAI_API_KEY'],\n linkWorkspacePackages: true,\n unlinkWorkspacePackages: true,\n sendit: DEFAULT_SENDIT_MODE,\n targetBranch: 'main',\n noMilestones: false,\n checksTimeout: 3600000, // 1 hour default for PR checks\n releaseWorkflowsTimeout: 1800000, // 30 minutes default for release workflows\n },\n link: {\n scopeRoots: {},\n dryRun: false,\n packageArgument: undefined,\n externals: [],\n },\n unlink: {\n scopeRoots: {},\n workspaceFile: undefined,\n dryRun: false,\n cleanNodeModules: false,\n packageArgument: undefined,\n externals: [],\n },\n tree: {\n directories: undefined,\n exclude: undefined,\n startFrom: undefined,\n stopAt: undefined,\n cmd: undefined,\n\n builtInCommand: undefined,\n continue: false,\n packageArgument: undefined,\n cleanNodeModules: false,\n externals: [],\n },\n development: {\n targetVersion: 'patch',\n noMilestones: false,\n },\n versions: {\n subcommand: undefined,\n directories: undefined,\n },\n updates: {\n scope: undefined,\n directories: undefined,\n },\n excludedPatterns: DEFAULT_EXCLUDED_PATTERNS,\n branches: {\n working: {\n targetBranch: 'main',\n developmentBranch: true,\n version: {\n type: 'prerelease' as const,\n increment: true,\n incrementLevel: 'patch' as const,\n tag: 'dev'\n }\n },\n main: {\n version: {\n type: 'release' as const\n }\n }\n }\n};\n"],"names":["VERSION","PROGRAM_NAME","DEFAULT_OVERRIDES","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","DEFAULT_VERBOSE","DEFAULT_DRY_RUN","DEFAULT_DEBUG","DEFAULT_MODEL","DEFAULT_OPENAI_REASONING","DEFAULT_OPENAI_MAX_OUTPUT_TOKENS","DEFAULT_OUTPUT_DIRECTORY","DEFAULT_GIT_COMMAND_MAX_BUFFER","DEFAULT_CONTEXT_DIRECTORIES","DEFAULT_CONFIG_DIR","DEFAULT_PREFERENCES_DIRECTORY","path","join","os","homedir","DEFAULT_FROM_COMMIT_ALIAS","DEFAULT_TO_COMMIT_ALIAS","DEFAULT_ADD","DEFAULT_CACHED","DEFAULT_SENDIT_MODE","DEFAULT_INTERACTIVE_MODE","DEFAULT_AMEND_MODE","DEFAULT_MESSAGE_LIMIT","DEFAULT_MAX_DIFF_BYTES","DEFAULT_MERGE_METHOD","DEFAULT_EXCLUDED_PATTERNS","COMMAND_COMMIT","COMMAND_AUDIO_COMMIT","COMMAND_SELECT_AUDIO","COMMAND_RELEASE","COMMAND_REVIEW","COMMAND_AUDIO_REVIEW","COMMAND_PUBLISH","COMMAND_TREE","COMMAND_LINK","COMMAND_UNLINK","COMMAND_CLEAN","COMMAND_PRECOMMIT","COMMAND_DEVELOPMENT","COMMAND_VERSIONS","COMMAND_UPDATES","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","ALLOWED_COMMANDS","DEFAULT_COMMAND","KODRDRIV_DEFAULTS","dryRun","verbose","debug","overrides","model","openaiReasoning","openaiMaxOutputTokens","contextDirectories","commandName","configDirectory","outputDirectory","preferencesDirectory","commit","add","cached","sendit","interactive","amend","messageLimit","skipFileCheck","maxDiffBytes","release","from","to","noMilestones","audioCommit","maxRecordingTime","audioDevice","undefined","review","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","audioReview","directory","publish","mergeMethod","targetVersion","requiredEnvVars","linkWorkspacePackages","unlinkWorkspacePackages","targetBranch","checksTimeout","releaseWorkflowsTimeout","link","scopeRoots","packageArgument","externals","unlink","workspaceFile","cleanNodeModules","tree","directories","exclude","startFrom","stopAt","cmd","builtInCommand","continue","development","versions","subcommand","updates","scope","excludedPatterns","branches","working","developmentBranch","version","type","increment","incrementLevel","tag","main"],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["import { MergeMethod } from './types';\nimport os from 'os';\nimport path from 'path';\n\nexport const VERSION = '__VERSION__ (__GIT_BRANCH__/__GIT_COMMIT__ __GIT_TAGS__ __GIT_COMMIT_DATE__) __SYSTEM_INFO__';\nexport const PROGRAM_NAME = 'kodrdriv';\nexport const DEFAULT_CHARACTER_ENCODING = 'utf-8';\nexport const DEFAULT_BINARY_TO_TEXT_ENCODING = 'base64';\nexport const DEFAULT_DIFF = true;\nexport const DEFAULT_LOG = false;\nexport const DEFAULT_OVERRIDES = false;\nexport const DATE_FORMAT_MONTH_DAY = 'MM-DD';\nexport const DATE_FORMAT_YEAR = 'YYYY';\nexport const DATE_FORMAT_YEAR_MONTH = 'YYYY-MM';\nexport const DATE_FORMAT_YEAR_MONTH_DAY = 'YYYY-MM-DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_SLASH = 'YYYY/MM/DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES = 'YYYY-MM-DD-HHmm';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS = 'YYYY-MM-DD-HHmmss';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';\nexport const DATE_FORMAT_SHORT_TIMESTAMP = 'YYMMdd-HHmm';\nexport const DATE_FORMAT_MONTH = 'MM';\nexport const DATE_FORMAT_DAY = 'DD';\nexport const DATE_FORMAT_HOURS = 'HHmm';\nexport const DATE_FORMAT_MINUTES = 'mm';\nexport const DATE_FORMAT_SECONDS = 'ss';\nexport const DATE_FORMAT_MILLISECONDS = 'SSS';\nexport const DEFAULT_VERBOSE = false;\nexport const DEFAULT_DRY_RUN = false;\nexport const DEFAULT_DEBUG = false;\nexport const DEFAULT_MODEL = 'gpt-4o-mini';\nexport const DEFAULT_MODEL_STRONG = 'gpt-4o';\nexport const DEFAULT_OPENAI_REASONING = 'low';\nexport const DEFAULT_OPENAI_MAX_OUTPUT_TOKENS = 10000;\nexport const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';\n\n// Buffer size for git commands that may produce large output (like git log)\nexport const DEFAULT_GIT_COMMAND_MAX_BUFFER = 50 * 1024 * 1024; // 50MB\n\nexport const DEFAULT_CONTEXT_DIRECTORIES: string[] = [];\n\nexport const DEFAULT_CONFIG_DIR = '.kodrdriv';\nexport const DEFAULT_PREFERENCES_DIRECTORY = path.join(os.homedir(), '.kodrdriv');\n\nexport const DEFAULT_FROM_COMMIT_ALIAS = 'main';\nexport const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';\n\nexport const DEFAULT_ADD = false;\nexport const DEFAULT_CACHED = false;\nexport const DEFAULT_SENDIT_MODE = false;\nexport const DEFAULT_INTERACTIVE_MODE = false;\nexport const DEFAULT_AMEND_MODE = false;\n// CRITICAL: Keep this low (3-5) to prevent log context contamination.\n// The LLM tends to pattern-match against recent commits instead of describing\n// the actual diff when it sees too much commit history. Set to 0 to disable.\nexport const DEFAULT_MESSAGE_LIMIT = 3;\nexport const DEFAULT_MAX_DIFF_BYTES = 20480; // 20KB limit per file\n\nexport const DEFAULT_MERGE_METHOD: MergeMethod = 'squash';\n\nexport const DEFAULT_EXCLUDED_PATTERNS = [\n 'node_modules', 'package-lock.json', 'yarn.lock', 'bun.lockb',\n 'composer.lock', 'Cargo.lock', 'Gemfile.lock',\n 'dist', 'build', 'out', '.next', '.nuxt', 'coverage',\n '.vscode', '.idea', '.DS_Store', '.git', '.gitignore',\n 'logs', 'tmp', '.cache', '*.log', '.env', '.env.*',\n '*.pem', '*.crt', '*.key', '*.sqlite', '*.db',\n '*.zip', '*.tar', '*.gz', '*.exe', '*.bin'\n];\n\nexport const COMMAND_COMMIT = 'commit';\nexport const COMMAND_AUDIO_COMMIT = 'audio-commit';\nexport const COMMAND_SELECT_AUDIO = 'select-audio';\nexport const COMMAND_RELEASE = 'release';\nexport const COMMAND_REVIEW = 'review';\nexport const COMMAND_AUDIO_REVIEW = 'audio-review';\nexport const COMMAND_PUBLISH = 'publish';\nexport const COMMAND_TREE = 'tree';\nexport const COMMAND_LINK = 'link';\nexport const COMMAND_UNLINK = 'unlink';\nexport const COMMAND_CLEAN = 'clean';\nexport const COMMAND_PRECOMMIT = 'precommit';\nexport const COMMAND_DEVELOPMENT = 'development';\nexport const COMMAND_VERSIONS = 'versions';\nexport const COMMAND_UPDATES = 'updates';\nexport const COMMAND_CHECK_CONFIG = 'check-config';\nexport const COMMAND_INIT_CONFIG = 'init-config';\n\nexport const ALLOWED_COMMANDS = [\n COMMAND_COMMIT,\n COMMAND_AUDIO_COMMIT,\n COMMAND_SELECT_AUDIO,\n COMMAND_RELEASE,\n COMMAND_REVIEW,\n COMMAND_AUDIO_REVIEW,\n COMMAND_PUBLISH,\n COMMAND_TREE,\n COMMAND_LINK,\n COMMAND_UNLINK,\n COMMAND_CLEAN,\n COMMAND_PRECOMMIT,\n COMMAND_DEVELOPMENT,\n COMMAND_VERSIONS,\n COMMAND_UPDATES\n];\n\nexport const DEFAULT_COMMAND = COMMAND_COMMIT;\n\nexport const DEFAULT_INSTRUCTIONS_DIR = `instructions`;\n\nexport const DEFAULT_PERSONA_DIR = `personas`;\n\nexport const DEFAULT_INSTRUCTIONS_COMMIT_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/commit.md`;\nexport const DEFAULT_INSTRUCTIONS_RELEASE_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/release.md`;\nexport const DEFAULT_INSTRUCTIONS_REVIEW_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/review.md`;\n\nexport const DEFAULT_PERSONA_RELEASER_FILE = `${DEFAULT_PERSONA_DIR}/releaser.md`;\nexport const DEFAULT_PERSONA_YOU_FILE = `${DEFAULT_PERSONA_DIR}/you.md`;\n\n// Default instructions for each persona\nexport const DEFAULT_INSTRUCTIONS_MAP = {\n [COMMAND_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE, // Reuse commit instructions\n [COMMAND_RELEASE]: DEFAULT_INSTRUCTIONS_RELEASE_FILE,\n [COMMAND_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE, // Reuse audio-review instructions for now\n [COMMAND_AUDIO_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE,\n};\n\n// Default personas for each command\nexport const DEFAULT_PERSONA_MAP = {\n [COMMAND_COMMIT]: DEFAULT_PERSONA_YOU_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_RELEASE]: DEFAULT_PERSONA_RELEASER_FILE,\n [COMMAND_REVIEW]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_AUDIO_REVIEW]: DEFAULT_PERSONA_YOU_FILE,\n};\n\n// Used by child process to create paths\nexport const DEFAULT_PATH_SEPARATOR = '/';\n\n// Used by util/general for file filtering\nexport const DEFAULT_IGNORE_PATTERNS = [\n 'node_modules/**',\n '**/*.log',\n '.git/**',\n 'dist/**',\n 'build/**',\n 'coverage/**',\n 'output/**',\n '.DS_Store',\n '*.tmp',\n '*.cache',\n '**/.kodrdriv-*.json', // Internal kodrdriv cache and state files\n];\n\n// Used by util/storage for directory names\nexport const DEFAULT_DIRECTORY_PREFIX = '.kodrdriv';\n\n// Used by other commands but not exposed in CLI\nexport const INTERNAL_DEFAULT_OUTPUT_FILE = 'output.txt';\n\nexport const INTERNAL_DATETIME_FORMAT = 'YYYY-MM-DD_HH-mm-ss';\n\n// Define defaults in one place\nexport const KODRDRIV_DEFAULTS = {\n dryRun: DEFAULT_DRY_RUN,\n verbose: DEFAULT_VERBOSE,\n debug: DEFAULT_DEBUG,\n overrides: DEFAULT_OVERRIDES,\n model: DEFAULT_MODEL,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n contextDirectories: DEFAULT_CONTEXT_DIRECTORIES,\n commandName: DEFAULT_COMMAND,\n configDirectory: DEFAULT_CONFIG_DIR,\n outputDirectory: DEFAULT_OUTPUT_DIRECTORY,\n preferencesDirectory: DEFAULT_PREFERENCES_DIRECTORY,\n commit: {\n add: DEFAULT_ADD,\n cached: DEFAULT_CACHED,\n sendit: DEFAULT_SENDIT_MODE,\n interactive: DEFAULT_INTERACTIVE_MODE,\n amend: DEFAULT_AMEND_MODE,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n skipFileCheck: false,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n release: {\n from: DEFAULT_FROM_COMMIT_ALIAS,\n to: DEFAULT_TO_COMMIT_ALIAS,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n interactive: DEFAULT_INTERACTIVE_MODE,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n noMilestones: false,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n audioCommit: {\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n review: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n audioReview: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n directory: undefined, // No default directory\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n publish: {\n mergeMethod: DEFAULT_MERGE_METHOD,\n from: DEFAULT_FROM_COMMIT_ALIAS,\n targetVersion: 'patch',\n interactive: DEFAULT_INTERACTIVE_MODE,\n requiredEnvVars: ['GITHUB_TOKEN', 'OPENAI_API_KEY'],\n linkWorkspacePackages: true,\n unlinkWorkspacePackages: true,\n sendit: DEFAULT_SENDIT_MODE,\n targetBranch: 'main',\n noMilestones: false,\n checksTimeout: 3600000, // 1 hour default for PR checks\n releaseWorkflowsTimeout: 1800000, // 30 minutes default for release workflows\n },\n link: {\n scopeRoots: {},\n dryRun: false,\n packageArgument: undefined,\n externals: [],\n },\n unlink: {\n scopeRoots: {},\n workspaceFile: undefined,\n dryRun: false,\n cleanNodeModules: false,\n packageArgument: undefined,\n externals: [],\n },\n tree: {\n directories: undefined,\n exclude: undefined,\n startFrom: undefined,\n stopAt: undefined,\n cmd: undefined,\n\n builtInCommand: undefined,\n continue: false,\n packageArgument: undefined,\n cleanNodeModules: false,\n externals: [],\n },\n development: {\n targetVersion: 'patch',\n noMilestones: false,\n },\n versions: {\n subcommand: undefined,\n directories: undefined,\n },\n updates: {\n scope: undefined,\n directories: undefined,\n },\n excludedPatterns: DEFAULT_EXCLUDED_PATTERNS,\n branches: {\n working: {\n targetBranch: 'main',\n developmentBranch: true,\n version: {\n type: 'prerelease' as const,\n increment: true,\n incrementLevel: 'patch' as const,\n tag: 'dev'\n }\n },\n main: {\n version: {\n type: 'release' as const\n }\n }\n }\n};\n"],"names":["VERSION","PROGRAM_NAME","DEFAULT_OVERRIDES","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","DEFAULT_VERBOSE","DEFAULT_DRY_RUN","DEFAULT_DEBUG","DEFAULT_MODEL","DEFAULT_OPENAI_REASONING","DEFAULT_OPENAI_MAX_OUTPUT_TOKENS","DEFAULT_OUTPUT_DIRECTORY","DEFAULT_GIT_COMMAND_MAX_BUFFER","DEFAULT_CONTEXT_DIRECTORIES","DEFAULT_CONFIG_DIR","DEFAULT_PREFERENCES_DIRECTORY","path","join","os","homedir","DEFAULT_FROM_COMMIT_ALIAS","DEFAULT_TO_COMMIT_ALIAS","DEFAULT_ADD","DEFAULT_CACHED","DEFAULT_SENDIT_MODE","DEFAULT_INTERACTIVE_MODE","DEFAULT_AMEND_MODE","DEFAULT_MESSAGE_LIMIT","DEFAULT_MAX_DIFF_BYTES","DEFAULT_MERGE_METHOD","DEFAULT_EXCLUDED_PATTERNS","COMMAND_COMMIT","COMMAND_AUDIO_COMMIT","COMMAND_SELECT_AUDIO","COMMAND_RELEASE","COMMAND_REVIEW","COMMAND_AUDIO_REVIEW","COMMAND_PUBLISH","COMMAND_TREE","COMMAND_LINK","COMMAND_UNLINK","COMMAND_CLEAN","COMMAND_PRECOMMIT","COMMAND_DEVELOPMENT","COMMAND_VERSIONS","COMMAND_UPDATES","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","ALLOWED_COMMANDS","DEFAULT_COMMAND","KODRDRIV_DEFAULTS","dryRun","verbose","debug","overrides","model","openaiReasoning","openaiMaxOutputTokens","contextDirectories","commandName","configDirectory","outputDirectory","preferencesDirectory","commit","add","cached","sendit","interactive","amend","messageLimit","skipFileCheck","maxDiffBytes","release","from","to","noMilestones","audioCommit","maxRecordingTime","audioDevice","undefined","review","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","audioReview","directory","publish","mergeMethod","targetVersion","requiredEnvVars","linkWorkspacePackages","unlinkWorkspacePackages","targetBranch","checksTimeout","releaseWorkflowsTimeout","link","scopeRoots","packageArgument","externals","unlink","workspaceFile","cleanNodeModules","tree","directories","exclude","startFrom","stopAt","cmd","builtInCommand","continue","development","versions","subcommand","updates","scope","excludedPatterns","branches","working","developmentBranch","version","type","increment","incrementLevel","tag","main"],"mappings":"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"}
package/dist/logging.js CHANGED
@@ -48,7 +48,23 @@ const createTransports = (level)=>{
48
48
  const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';
49
49
  return `${dryRunPrefix}${String(message)}`;
50
50
  }
51
- const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
51
+ // Filter out winston internal metadata
52
+ const filteredMeta = Object.keys(meta).reduce((acc, key)=>{
53
+ if (![
54
+ 'level',
55
+ 'message',
56
+ 'timestamp',
57
+ 'dryRun',
58
+ 'service',
59
+ 'splat',
60
+ 'Symbol(level)',
61
+ 'Symbol(message)'
62
+ ].includes(key)) {
63
+ acc[key] = meta[key];
64
+ }
65
+ return acc;
66
+ }, {});
67
+ const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';
52
68
  const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';
53
69
  return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;
54
70
  }))
@@ -64,9 +80,25 @@ const createTransports = (level)=>{
64
80
  format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS
65
81
  }), winston.format.errors({
66
82
  stack: true
67
- }), winston.format.splat(), winston.format.printf(({ timestamp, level, message, ...meta })=>{
68
- const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
69
- return `${timestamp} ${level}: ${message}${metaStr}`;
83
+ }), winston.format.splat(), winston.format.printf(({ timestamp, level, message, service, ...meta })=>{
84
+ // Filter out winston internal metadata and properly format remaining meta
85
+ const filteredMeta = Object.keys(meta).reduce((acc, key)=>{
86
+ // Skip internal winston fields
87
+ if (![
88
+ 'level',
89
+ 'message',
90
+ 'timestamp',
91
+ 'splat',
92
+ 'Symbol(level)',
93
+ 'Symbol(message)'
94
+ ].includes(key)) {
95
+ acc[key] = meta[key];
96
+ }
97
+ return acc;
98
+ }, {});
99
+ const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';
100
+ const serviceStr = service ? ` [${service}]` : '';
101
+ return `${timestamp}${serviceStr} ${level}: ${message}${metaStr}`;
70
102
  }))
71
103
  }));
72
104
  }
@@ -92,7 +124,23 @@ const createFormat = (level)=>{
92
124
  return winston.format.combine(winston.format.timestamp({
93
125
  format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS
94
126
  }), ...baseFormats, winston.format.printf(({ timestamp, level, message, dryRun, ...meta })=>{
95
- const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
127
+ // Filter out winston internal metadata
128
+ const filteredMeta = Object.keys(meta).reduce((acc, key)=>{
129
+ if (![
130
+ 'level',
131
+ 'message',
132
+ 'timestamp',
133
+ 'dryRun',
134
+ 'service',
135
+ 'splat',
136
+ 'Symbol(level)',
137
+ 'Symbol(message)'
138
+ ].includes(key)) {
139
+ acc[key] = meta[key];
140
+ }
141
+ return acc;
142
+ }, {});
143
+ const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';
96
144
  const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';
97
145
  return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;
98
146
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sources":["../src/logging.ts"],"sourcesContent":["import winston from 'winston';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\nimport path from 'path';\nimport { DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS, PROGRAM_NAME, DEFAULT_OUTPUT_DIRECTORY } from './constants';\n\nexport interface LogContext {\n [key: string]: any;\n}\n\n// Track if debug directory has been ensured for this session\nlet debugDirectoryEnsured = false;\n\nconst ensureDebugDirectory = () => {\n if (debugDirectoryEnsured) return;\n\n const debugDir = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug');\n\n try {\n fs.mkdirSync(debugDir, { recursive: true });\n debugDirectoryEnsured = true;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Failed to create debug directory ${debugDir}:`, error);\n }\n};\n\nconst generateDebugLogFilename = () => {\n const now = new Date();\n const timestamp = now.toISOString()\n .replace(/[-:]/g, '')\n .replace(/\\./g, '')\n .replace('T', '-')\n .replace('Z', '');\n\n return `${timestamp}-debug.log`;\n};\n\nconst createTransports = (level: string) => {\n const transports: winston.transport[] = [];\n\n // Always add console transport for info level and above\n if (level === 'info') {\n transports.push(\n new winston.transports.Console({\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ level, message, dryRun }): string => {\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n // For info level messages, don't show the level prefix\n if (level.includes('info')) {\n return `${dryRunPrefix}${String(message)}`;\n }\n // For warn, error, etc., show the level prefix\n return `${level}: ${dryRunPrefix}${String(message)}`;\n })\n )\n })\n );\n } else {\n // For debug/verbose levels, add console transport that shows info and above\n transports.push(\n new winston.transports.Console({\n level: 'info', // Show info, warn, and error on console\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // For info level messages, use simpler format without timestamp\n if (level.includes('info')) {\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${dryRunPrefix}${String(message)}`;\n }\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n )\n })\n );\n\n // Add file transport for debug levels (debug and silly)\n if (level === 'debug' || level === 'silly') {\n ensureDebugDirectory();\n\n const debugLogPath = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug', generateDebugLogFilename());\n\n transports.push(\n new winston.transports.File({\n filename: debugLogPath,\n level: 'debug', // Capture debug and above in the file\n format: winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.printf(({ timestamp, level, message, ...meta }) => {\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n return `${timestamp} ${level}: ${message}${metaStr}`;\n })\n )\n })\n );\n }\n }\n\n return transports;\n};\n\nconst createFormat = (level: string) => {\n const baseFormats = [\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n ];\n\n if (level === 'info') {\n return winston.format.combine(\n ...baseFormats,\n winston.format.printf(({ message, dryRun, ..._meta }): string => {\n // Auto-format dry-run messages\n if (dryRun) {\n return `🔍 DRY RUN: ${message}`;\n }\n return String(message);\n })\n );\n }\n\n return winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n ...baseFormats,\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n );\n};\n\n// Create the logger instance once\nconst logger = winston.createLogger({\n level: 'info',\n format: createFormat('info'),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports('info'),\n});\n\nexport const setLogLevel = (level: string) => {\n // Reconfigure the existing logger instead of creating a new one\n logger.configure({\n level,\n format: createFormat(level),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports(level),\n });\n};\n\nexport const getLogger = () => logger;\n\n/**\n * Get a logger that automatically formats messages for dry-run mode\n */\nexport const getDryRunLogger = (isDryRun: boolean) => {\n if (!isDryRun) {\n return logger;\n }\n\n // Return a wrapper that adds dry-run context to all log calls\n return {\n info: (message: string, ...args: any[]) => logger.info(message, { dryRun: true }, ...args),\n warn: (message: string, ...args: any[]) => logger.warn(message, { dryRun: true }, ...args),\n error: (message: string, ...args: any[]) => logger.error(message, { dryRun: true }, ...args),\n debug: (message: string, ...args: any[]) => logger.debug(message, { dryRun: true }, ...args),\n verbose: (message: string, ...args: any[]) => logger.verbose(message, { dryRun: true }, ...args),\n silly: (message: string, ...args: any[]) => logger.silly(message, { dryRun: true }, ...args),\n };\n};\n"],"names":["debugDirectoryEnsured","ensureDebugDirectory","debugDir","path","join","DEFAULT_OUTPUT_DIRECTORY","fs","mkdirSync","recursive","error","console","generateDebugLogFilename","now","Date","timestamp","toISOString","replace","createTransports","level","transports","push","winston","Console","format","combine","colorize","printf","message","dryRun","dryRunPrefix","includes","String","meta","metaStr","Object","keys","length","JSON","stringify","debugLogPath","File","filename","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","errors","stack","splat","createFormat","baseFormats","_meta","logger","createLogger","defaultMeta","service","PROGRAM_NAME","setLogLevel","configure","getLogger","getDryRunLogger","isDryRun","info","args","warn","debug","verbose","silly"],"mappings":"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"}
1
+ {"version":3,"file":"logging.js","sources":["../src/logging.ts"],"sourcesContent":["import winston from 'winston';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\nimport path from 'path';\nimport { DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS, PROGRAM_NAME, DEFAULT_OUTPUT_DIRECTORY } from './constants';\n\nexport interface LogContext {\n [key: string]: any;\n}\n\n// Track if debug directory has been ensured for this session\nlet debugDirectoryEnsured = false;\n\nconst ensureDebugDirectory = () => {\n if (debugDirectoryEnsured) return;\n\n const debugDir = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug');\n\n try {\n fs.mkdirSync(debugDir, { recursive: true });\n debugDirectoryEnsured = true;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Failed to create debug directory ${debugDir}:`, error);\n }\n};\n\nconst generateDebugLogFilename = () => {\n const now = new Date();\n const timestamp = now.toISOString()\n .replace(/[-:]/g, '')\n .replace(/\\./g, '')\n .replace('T', '-')\n .replace('Z', '');\n\n return `${timestamp}-debug.log`;\n};\n\nconst createTransports = (level: string) => {\n const transports: winston.transport[] = [];\n\n // Always add console transport for info level and above\n if (level === 'info') {\n transports.push(\n new winston.transports.Console({\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ level, message, dryRun }): string => {\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n // For info level messages, don't show the level prefix\n if (level.includes('info')) {\n return `${dryRunPrefix}${String(message)}`;\n }\n // For warn, error, etc., show the level prefix\n return `${level}: ${dryRunPrefix}${String(message)}`;\n })\n )\n })\n );\n } else {\n // For debug/verbose levels, add console transport that shows info and above\n transports.push(\n new winston.transports.Console({\n level: 'info', // Show info, warn, and error on console\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // For info level messages, use simpler format without timestamp\n if (level.includes('info')) {\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${dryRunPrefix}${String(message)}`;\n }\n\n // Filter out winston internal metadata\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n if (!['level', 'message', 'timestamp', 'dryRun', 'service', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n )\n })\n );\n\n // Add file transport for debug levels (debug and silly)\n if (level === 'debug' || level === 'silly') {\n ensureDebugDirectory();\n\n const debugLogPath = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug', generateDebugLogFilename());\n\n transports.push(\n new winston.transports.File({\n filename: debugLogPath,\n level: 'debug', // Capture debug and above in the file\n format: winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.printf(({ timestamp, level, message, service, ...meta }) => {\n // Filter out winston internal metadata and properly format remaining meta\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n // Skip internal winston fields\n if (!['level', 'message', 'timestamp', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length\n ? ` ${JSON.stringify(filteredMeta, null, 2)}`\n : '';\n const serviceStr = service ? ` [${service}]` : '';\n return `${timestamp}${serviceStr} ${level}: ${message}${metaStr}`;\n })\n )\n })\n );\n }\n }\n\n return transports;\n};\n\nconst createFormat = (level: string) => {\n const baseFormats = [\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n ];\n\n if (level === 'info') {\n return winston.format.combine(\n ...baseFormats,\n winston.format.printf(({ message, dryRun, ..._meta }): string => {\n // Auto-format dry-run messages\n if (dryRun) {\n return `🔍 DRY RUN: ${message}`;\n }\n return String(message);\n })\n );\n }\n\n return winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n ...baseFormats,\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // Filter out winston internal metadata\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n if (!['level', 'message', 'timestamp', 'dryRun', 'service', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n );\n};\n\n// Create the logger instance once\nconst logger = winston.createLogger({\n level: 'info',\n format: createFormat('info'),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports('info'),\n});\n\nexport const setLogLevel = (level: string) => {\n // Reconfigure the existing logger instead of creating a new one\n logger.configure({\n level,\n format: createFormat(level),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports(level),\n });\n};\n\nexport const getLogger = () => logger;\n\n/**\n * Get a logger that automatically formats messages for dry-run mode\n */\nexport const getDryRunLogger = (isDryRun: boolean) => {\n if (!isDryRun) {\n return logger;\n }\n\n // Return a wrapper that adds dry-run context to all log calls\n return {\n info: (message: string, ...args: any[]) => logger.info(message, { dryRun: true }, ...args),\n warn: (message: string, ...args: any[]) => logger.warn(message, { dryRun: true }, ...args),\n error: (message: string, ...args: any[]) => logger.error(message, { dryRun: true }, ...args),\n debug: (message: string, ...args: any[]) => logger.debug(message, { dryRun: true }, ...args),\n verbose: (message: string, ...args: any[]) => logger.verbose(message, { dryRun: true }, ...args),\n silly: (message: string, ...args: any[]) => logger.silly(message, { dryRun: true }, ...args),\n };\n};\n"],"names":["debugDirectoryEnsured","ensureDebugDirectory","debugDir","path","join","DEFAULT_OUTPUT_DIRECTORY","fs","mkdirSync","recursive","error","console","generateDebugLogFilename","now","Date","timestamp","toISOString","replace","createTransports","level","transports","push","winston","Console","format","combine","colorize","printf","message","dryRun","dryRunPrefix","includes","String","meta","filteredMeta","Object","keys","reduce","acc","key","metaStr","length","JSON","stringify","debugLogPath","File","filename","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","errors","stack","splat","service","serviceStr","createFormat","baseFormats","_meta","logger","createLogger","defaultMeta","PROGRAM_NAME","setLogLevel","configure","getLogger","getDryRunLogger","isDryRun","info","args","warn","debug","verbose","silly"],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import { getLogger } from '../logging.js';
2
+
3
+ /**
4
+ * Compile stop-context configuration into efficient filter rules
5
+ */ function compileFilters(config) {
6
+ const filters = [];
7
+ const replacement = config.replacement || '[REDACTED]';
8
+ var _config_caseSensitive;
9
+ const caseSensitive = (_config_caseSensitive = config.caseSensitive) !== null && _config_caseSensitive !== void 0 ? _config_caseSensitive : false;
10
+ // Compile literal string filters
11
+ if (config.strings && config.strings.length > 0) {
12
+ for (const str of config.strings){
13
+ filters.push({
14
+ type: 'string',
15
+ value: str,
16
+ replacement,
17
+ caseSensitive
18
+ });
19
+ }
20
+ }
21
+ // Compile regex pattern filters
22
+ if (config.patterns && config.patterns.length > 0) {
23
+ for (const pattern of config.patterns){
24
+ try {
25
+ const flags = pattern.flags || (caseSensitive ? 'g' : 'gi');
26
+ const regex = new RegExp(pattern.regex, flags);
27
+ filters.push({
28
+ type: 'pattern',
29
+ value: regex,
30
+ replacement,
31
+ caseSensitive
32
+ });
33
+ } catch (error) {
34
+ const logger = getLogger();
35
+ logger.warn(`STOP_CONTEXT_INVALID_PATTERN: Failed to compile regex pattern | Pattern: ${pattern.regex} | Error: ${error instanceof Error ? error.message : String(error)} | Action: Skipping pattern`);
36
+ }
37
+ }
38
+ }
39
+ return filters;
40
+ }
41
+ /**
42
+ * Apply a single filter to text and track matches
43
+ */ function applyFilter(text, filter, matches) {
44
+ if (filter.type === 'string') {
45
+ const searchStr = filter.value;
46
+ const flags = filter.caseSensitive ? 'g' : 'gi';
47
+ const regex = new RegExp(escapeRegExp(searchStr), flags);
48
+ let match;
49
+ while((match = regex.exec(text)) !== null){
50
+ matches.push({
51
+ type: 'string',
52
+ matched: match[0],
53
+ position: match.index,
54
+ replacement: filter.replacement
55
+ });
56
+ }
57
+ return text.replace(regex, filter.replacement);
58
+ } else {
59
+ // Pattern filter
60
+ const regex = filter.value;
61
+ let match;
62
+ // Reset regex lastIndex to ensure we start from beginning
63
+ regex.lastIndex = 0;
64
+ while((match = regex.exec(text)) !== null){
65
+ matches.push({
66
+ type: 'pattern',
67
+ matched: match[0],
68
+ position: match.index,
69
+ replacement: filter.replacement
70
+ });
71
+ }
72
+ // Reset regex lastIndex again before replace
73
+ regex.lastIndex = 0;
74
+ return text.replace(regex, filter.replacement);
75
+ }
76
+ }
77
+ /**
78
+ * Escape special regex characters in a string
79
+ */ function escapeRegExp(str) {
80
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
81
+ }
82
+ /**
83
+ * Filter content based on stop-context configuration
84
+ *
85
+ * @param text - The text to filter
86
+ * @param config - The stop-context configuration
87
+ * @returns FilterResult with filtered text and metadata
88
+ */ function filterContent(text, config) {
89
+ const logger = getLogger();
90
+ // If no config or disabled, return original text
91
+ if (!config || config.enabled === false) {
92
+ return {
93
+ filtered: text,
94
+ originalLength: text.length,
95
+ filteredLength: text.length,
96
+ matchCount: 0,
97
+ matches: []
98
+ };
99
+ }
100
+ const filters = compileFilters(config);
101
+ // If no filters configured, return original text
102
+ if (filters.length === 0) {
103
+ return {
104
+ filtered: text,
105
+ originalLength: text.length,
106
+ filteredLength: text.length,
107
+ matchCount: 0,
108
+ matches: []
109
+ };
110
+ }
111
+ let filtered = text;
112
+ const allMatches = [];
113
+ // Apply each filter in sequence
114
+ for (const filter of filters){
115
+ filtered = applyFilter(filtered, filter, allMatches);
116
+ }
117
+ const result = {
118
+ filtered,
119
+ originalLength: text.length,
120
+ filteredLength: filtered.length,
121
+ matchCount: allMatches.length,
122
+ matches: allMatches
123
+ };
124
+ // Log warning if filters were applied and warnOnFilter is enabled
125
+ if (config.warnOnFilter !== false && allMatches.length > 0) {
126
+ logger.warn(`STOP_CONTEXT_FILTERED: Sensitive content filtered from generated text | Matches: ${allMatches.length} | Original Length: ${text.length} | Filtered Length: ${filtered.length} | Action: Review filtered content`);
127
+ // Log verbose details if logger level is verbose or debug
128
+ if (logger.level === 'verbose' || logger.level === 'debug') {
129
+ logger.verbose('STOP_CONTEXT_DETAILS: Filter details:');
130
+ const stringMatches = allMatches.filter((m)=>m.type === 'string').length;
131
+ const patternMatches = allMatches.filter((m)=>m.type === 'pattern').length;
132
+ logger.verbose(` - String matches: ${stringMatches}`);
133
+ logger.verbose(` - Pattern matches: ${patternMatches}`);
134
+ logger.verbose(` - Character change: ${text.length - filtered.length} characters removed`);
135
+ }
136
+ }
137
+ // Warn if too much content was filtered
138
+ const percentFiltered = (text.length - filtered.length) / text.length * 100;
139
+ if (percentFiltered > 50) {
140
+ logger.warn(`STOP_CONTEXT_HIGH_FILTER: High percentage of content filtered | Percentage: ${percentFiltered.toFixed(1)}% | Impact: Generated content may be incomplete | Action: Review stop-context configuration`);
141
+ }
142
+ return result;
143
+ }
144
+
145
+ export { filterContent };
146
+ //# sourceMappingURL=stopContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stopContext.js","sources":["../../src/util/stopContext.ts"],"sourcesContent":["import { StopContextConfig } from '../types';\nimport { getLogger } from '../logging';\n\nexport interface FilterResult {\n filtered: string;\n originalLength: number;\n filteredLength: number;\n matchCount: number;\n matches: FilterMatch[];\n}\n\nexport interface FilterMatch {\n type: 'string' | 'pattern';\n matched: string;\n position: number;\n replacement: string;\n}\n\ninterface CompiledFilter {\n type: 'string' | 'pattern';\n value: string | RegExp;\n replacement: string;\n caseSensitive: boolean;\n}\n\n/**\n * Compile stop-context configuration into efficient filter rules\n */\nfunction compileFilters(config: StopContextConfig): CompiledFilter[] {\n const filters: CompiledFilter[] = [];\n const replacement = config.replacement || '[REDACTED]';\n const caseSensitive = config.caseSensitive ?? false;\n\n // Compile literal string filters\n if (config.strings && config.strings.length > 0) {\n for (const str of config.strings) {\n filters.push({\n type: 'string',\n value: str,\n replacement,\n caseSensitive,\n });\n }\n }\n\n // Compile regex pattern filters\n if (config.patterns && config.patterns.length > 0) {\n for (const pattern of config.patterns) {\n try {\n const flags = pattern.flags || (caseSensitive ? 'g' : 'gi');\n const regex = new RegExp(pattern.regex, flags);\n filters.push({\n type: 'pattern',\n value: regex,\n replacement,\n caseSensitive,\n });\n } catch (error) {\n const logger = getLogger();\n logger.warn(`STOP_CONTEXT_INVALID_PATTERN: Failed to compile regex pattern | Pattern: ${pattern.regex} | Error: ${error instanceof Error ? error.message : String(error)} | Action: Skipping pattern`);\n }\n }\n }\n\n return filters;\n}\n\n/**\n * Apply a single filter to text and track matches\n */\nfunction applyFilter(\n text: string,\n filter: CompiledFilter,\n matches: FilterMatch[]\n): string {\n if (filter.type === 'string') {\n const searchStr = filter.value as string;\n const flags = filter.caseSensitive ? 'g' : 'gi';\n const regex = new RegExp(escapeRegExp(searchStr), flags);\n\n let match: RegExpExecArray | null;\n while ((match = regex.exec(text)) !== null) {\n matches.push({\n type: 'string',\n matched: match[0],\n position: match.index,\n replacement: filter.replacement,\n });\n }\n\n return text.replace(regex, filter.replacement);\n } else {\n // Pattern filter\n const regex = filter.value as RegExp;\n let match: RegExpExecArray | null;\n\n // Reset regex lastIndex to ensure we start from beginning\n regex.lastIndex = 0;\n\n while ((match = regex.exec(text)) !== null) {\n matches.push({\n type: 'pattern',\n matched: match[0],\n position: match.index,\n replacement: filter.replacement,\n });\n }\n\n // Reset regex lastIndex again before replace\n regex.lastIndex = 0;\n return text.replace(regex, filter.replacement);\n }\n}\n\n/**\n * Escape special regex characters in a string\n */\nfunction escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Filter content based on stop-context configuration\n *\n * @param text - The text to filter\n * @param config - The stop-context configuration\n * @returns FilterResult with filtered text and metadata\n */\nexport function filterContent(text: string, config: StopContextConfig | undefined): FilterResult {\n const logger = getLogger();\n\n // If no config or disabled, return original text\n if (!config || config.enabled === false) {\n return {\n filtered: text,\n originalLength: text.length,\n filteredLength: text.length,\n matchCount: 0,\n matches: [],\n };\n }\n\n const filters = compileFilters(config);\n\n // If no filters configured, return original text\n if (filters.length === 0) {\n return {\n filtered: text,\n originalLength: text.length,\n filteredLength: text.length,\n matchCount: 0,\n matches: [],\n };\n }\n\n let filtered = text;\n const allMatches: FilterMatch[] = [];\n\n // Apply each filter in sequence\n for (const filter of filters) {\n filtered = applyFilter(filtered, filter, allMatches);\n }\n\n const result: FilterResult = {\n filtered,\n originalLength: text.length,\n filteredLength: filtered.length,\n matchCount: allMatches.length,\n matches: allMatches,\n };\n\n // Log warning if filters were applied and warnOnFilter is enabled\n if (config.warnOnFilter !== false && allMatches.length > 0) {\n logger.warn(`STOP_CONTEXT_FILTERED: Sensitive content filtered from generated text | Matches: ${allMatches.length} | Original Length: ${text.length} | Filtered Length: ${filtered.length} | Action: Review filtered content`);\n\n // Log verbose details if logger level is verbose or debug\n if (logger.level === 'verbose' || logger.level === 'debug') {\n logger.verbose('STOP_CONTEXT_DETAILS: Filter details:');\n const stringMatches = allMatches.filter(m => m.type === 'string').length;\n const patternMatches = allMatches.filter(m => m.type === 'pattern').length;\n logger.verbose(` - String matches: ${stringMatches}`);\n logger.verbose(` - Pattern matches: ${patternMatches}`);\n logger.verbose(` - Character change: ${text.length - filtered.length} characters removed`);\n }\n }\n\n // Warn if too much content was filtered\n const percentFiltered = ((text.length - filtered.length) / text.length) * 100;\n if (percentFiltered > 50) {\n logger.warn(`STOP_CONTEXT_HIGH_FILTER: High percentage of content filtered | Percentage: ${percentFiltered.toFixed(1)}% | Impact: Generated content may be incomplete | Action: Review stop-context configuration`);\n }\n\n return result;\n}\n\n/**\n * Check if stop-context filtering is enabled in config\n */\nexport function isStopContextEnabled(config: StopContextConfig | undefined): boolean {\n if (!config) {\n return false;\n }\n\n const hasFilters = (config.strings && config.strings.length > 0) ||\n (config.patterns && config.patterns.length > 0);\n\n return Boolean(config.enabled !== false && hasFilters);\n}\n\n"],"names":["compileFilters","config","filters","replacement","caseSensitive","strings","length","str","push","type","value","patterns","pattern","flags","regex","RegExp","error","logger","getLogger","warn","Error","message","String","applyFilter","text","filter","matches","searchStr","escapeRegExp","match","exec","matched","position","index","replace","lastIndex","filterContent","enabled","filtered","originalLength","filteredLength","matchCount","allMatches","result","warnOnFilter","level","verbose","stringMatches","m","patternMatches","percentFiltered","toFixed"],"mappings":"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"}
@@ -13,6 +13,9 @@ import { createStorage } from '@eldrforge/shared';
13
13
  },
14
14
  async writeTemp (fileName, content) {
15
15
  await storage.writeFile(fileName, content, 'utf8');
16
+ },
17
+ async readFile (fileName, encoding = 'utf8') {
18
+ return await storage.readFile(fileName, encoding);
16
19
  }
17
20
  };
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storageAdapter.js","sources":["../../src/util/storageAdapter.ts"],"sourcesContent":["/**\n * Adapter for ai-service StorageAdapter using kodrdriv Storage\n */\n\nimport type { StorageAdapter } from '@eldrforge/ai-service';\nimport { createStorage } from '@eldrforge/shared';\n\n/**\n * Create a StorageAdapter implementation using kodrdriv Storage\n */\nexport function createStorageAdapter(): StorageAdapter {\n const storage = createStorage();\n\n return {\n async writeOutput(fileName: string, content: string): Promise<void> {\n await storage.writeFile(fileName, content, 'utf8');\n },\n\n async readTemp(fileName: string): Promise<string> {\n return await storage.readFile(fileName, 'utf8');\n },\n\n async writeTemp(fileName: string, content: string): Promise<void> {\n await storage.writeFile(fileName, content, 'utf8');\n },\n };\n}\n\n"],"names":["createStorageAdapter","storage","createStorage","writeOutput","fileName","content","writeFile","readTemp","readFile","writeTemp"],"mappings":";;AAOA;;AAEC,IACM,SAASA,oBAAAA,GAAAA;AACZ,IAAA,MAAMC,OAAAA,GAAUC,aAAAA,EAAAA;IAEhB,OAAO;QACH,MAAMC,WAAAA,CAAAA,CAAYC,QAAgB,EAAEC,OAAe,EAAA;AAC/C,YAAA,MAAMJ,OAAAA,CAAQK,SAAS,CAACF,QAAAA,EAAUC,OAAAA,EAAS,MAAA,CAAA;AAC/C,QAAA,CAAA;AAEA,QAAA,MAAME,UAASH,QAAgB,EAAA;AAC3B,YAAA,OAAO,MAAMH,OAAAA,CAAQO,QAAQ,CAACJ,QAAAA,EAAU,MAAA,CAAA;AAC5C,QAAA,CAAA;QAEA,MAAMK,SAAAA,CAAAA,CAAUL,QAAgB,EAAEC,OAAe,EAAA;AAC7C,YAAA,MAAMJ,OAAAA,CAAQK,SAAS,CAACF,QAAAA,EAAUC,OAAAA,EAAS,MAAA,CAAA;AAC/C,QAAA;AACJ,KAAA;AACJ;;;;"}
1
+ {"version":3,"file":"storageAdapter.js","sources":["../../src/util/storageAdapter.ts"],"sourcesContent":["/**\n * Adapter for ai-service StorageAdapter using kodrdriv Storage\n */\n\nimport type { StorageAdapter } from '@eldrforge/ai-service';\nimport { createStorage } from '@eldrforge/shared';\n\n/**\n * Create a StorageAdapter implementation using kodrdriv Storage\n */\nexport function createStorageAdapter(): StorageAdapter {\n const storage = createStorage();\n\n return {\n async writeOutput(fileName: string, content: string): Promise<void> {\n await storage.writeFile(fileName, content, 'utf8');\n },\n\n async readTemp(fileName: string): Promise<string> {\n return await storage.readFile(fileName, 'utf8');\n },\n\n async writeTemp(fileName: string, content: string): Promise<void> {\n await storage.writeFile(fileName, content, 'utf8');\n },\n\n async readFile(fileName: string, encoding: string = 'utf8'): Promise<string> {\n return await storage.readFile(fileName, encoding);\n },\n };\n}\n\n"],"names":["createStorageAdapter","storage","createStorage","writeOutput","fileName","content","writeFile","readTemp","readFile","writeTemp","encoding"],"mappings":";;AAOA;;AAEC,IACM,SAASA,oBAAAA,GAAAA;AACZ,IAAA,MAAMC,OAAAA,GAAUC,aAAAA,EAAAA;IAEhB,OAAO;QACH,MAAMC,WAAAA,CAAAA,CAAYC,QAAgB,EAAEC,OAAe,EAAA;AAC/C,YAAA,MAAMJ,OAAAA,CAAQK,SAAS,CAACF,QAAAA,EAAUC,OAAAA,EAAS,MAAA,CAAA;AAC/C,QAAA,CAAA;AAEA,QAAA,MAAME,UAASH,QAAgB,EAAA;AAC3B,YAAA,OAAO,MAAMH,OAAAA,CAAQO,QAAQ,CAACJ,QAAAA,EAAU,MAAA,CAAA;AAC5C,QAAA,CAAA;QAEA,MAAMK,SAAAA,CAAAA,CAAUL,QAAgB,EAAEC,OAAe,EAAA;AAC7C,YAAA,MAAMJ,OAAAA,CAAQK,SAAS,CAACF,QAAAA,EAAUC,OAAAA,EAAS,MAAA,CAAA;AAC/C,QAAA,CAAA;AAEA,QAAA,MAAMG,QAAAA,CAAAA,CAASJ,QAAgB,EAAEM,QAAAA,GAAmB,MAAM,EAAA;AACtD,YAAA,OAAO,MAAMT,OAAAA,CAAQO,QAAQ,CAACJ,QAAAA,EAAUM,QAAAA,CAAAA;AAC5C,QAAA;AACJ,KAAA;AACJ;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eldrforge/kodrdriv",
3
- "version": "1.2.124",
3
+ "version": "1.2.125",
4
4
  "description": "Create Intelligent Release Notes or Change Logs from Git",
5
5
  "main": "dist/main.js",
6
6
  "type": "module",
@@ -38,7 +38,7 @@
38
38
  "author": "Calen Varek <calenvarek@gmail.com>",
39
39
  "license": "Apache-2.0",
40
40
  "dependencies": {
41
- "@eldrforge/ai-service": "^0.1.9",
41
+ "@eldrforge/ai-service": "^0.1.10",
42
42
  "@eldrforge/git-tools": "^0.1.11",
43
43
  "@eldrforge/github-tools": "^0.1.14",
44
44
  "@eldrforge/shared": "^0.1.1",