@eldrforge/commands-git 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/commands/commit.ts","../src/util/precommitOptimizations.ts","../src/util/performance.ts","../src/commands/precommit.ts","../src/commands/clean.ts","../src/commands/review.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Formatter, Model } from '@riotprompt/riotprompt';\nimport 'dotenv/config';\nimport type { ChatCompletionMessageParam } from 'openai/resources';\nimport shellescape from 'shell-escape';\nimport {\n DEFAULT_EXCLUDED_PATTERNS,\n DEFAULT_OUTPUT_DIRECTORY,\n DEFAULT_MAX_DIFF_BYTES,\n Diff,\n Log,\n Files,\n getDryRunLogger,\n Config,\n sanitizeDirection,\n filterContent,\n getOutputPath,\n getTimestampedRequestFilename,\n getTimestampedResponseFilename,\n getTimestampedCommitFilename,\n improveContentWithLLM,\n type LLMImprovementConfig,\n toAIConfig,\n createStorageAdapter,\n createLoggerAdapter,\n} from '@eldrforge/core';\nimport { CommandError, ValidationError, ExternalDependencyError, checkForFileDependencies, logFileDependencyWarning, logFileDependencySuggestions, createStorage } from '@eldrforge/shared';\nimport { run, validateString, stageFiles, unstageAll, getStagedFiles, verifyStagedFiles, safeJsonParse, validatePackageJson } from '@eldrforge/git-tools';\nimport { getRecentClosedIssuesForCommit } from '@eldrforge/github-tools';\nimport {\n createCompletionWithRetry,\n getUserChoice,\n editContentInEditor,\n getLLMFeedbackInEditor,\n requireTTY,\n STANDARD_CHOICES,\n CommitContent,\n CommitContext,\n runAgenticCommit,\n generateReflectionReport,\n createCommitPrompt,\n} from '@eldrforge/ai-service';\n\n// Helper function to read context files\nasync function readContextFiles(contextFiles: string[] | undefined, logger: any): Promise<string> {\n if (!contextFiles || contextFiles.length === 0) {\n return '';\n }\n\n const storage = createStorage();\n const contextParts: string[] = [];\n\n for (const filePath of contextFiles) {\n try {\n const content = await storage.readFile(filePath, 'utf8');\n contextParts.push(`## Context from ${filePath}\\n\\n${content}\\n`);\n logger.debug(`Read context from file: ${filePath}`);\n } catch (error: any) {\n logger.warn(`Failed to read context file ${filePath}: ${error.message}`);\n }\n }\n\n return contextParts.join('\\n---\\n\\n');\n}\n\n// Helper function to generate self-reflection output using observability module\nasync function generateSelfReflection(\n agenticResult: any,\n outputDirectory: string,\n storage: any,\n logger: any\n): Promise<void> {\n try {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('.')[0];\n const reflectionPath = getOutputPath(outputDirectory, `agentic-reflection-commit-${timestamp}.md`);\n\n // Use new observability reflection generator\n const report = await generateReflectionReport({\n iterations: agenticResult.iterations || 0,\n toolCallsExecuted: agenticResult.toolCallsExecuted || 0,\n maxIterations: agenticResult.maxIterations || 10,\n toolMetrics: agenticResult.toolMetrics || [],\n conversationHistory: agenticResult.conversationHistory || [],\n commitMessage: agenticResult.commitMessage,\n suggestedSplits: agenticResult.suggestedSplits || [],\n logger\n });\n\n // Save the report to output directory\n await storage.writeFile(reflectionPath, report, 'utf8');\n\n logger.info('');\n logger.info('═'.repeat(80));\n logger.info('šŸ“Š SELF-REFLECTION REPORT GENERATED');\n logger.info('═'.repeat(80));\n logger.info('');\n logger.info('šŸ“ Location: %s', reflectionPath);\n logger.info('');\n logger.info('šŸ“ˆ Report Summary:');\n const iterations = agenticResult.iterations || 0;\n const toolCalls = agenticResult.toolCallsExecuted || 0;\n const uniqueTools = new Set((agenticResult.toolMetrics || []).map((m: any) => m.name)).size;\n logger.info(` • ${iterations} iterations completed`);\n logger.info(` • ${toolCalls} tool calls executed`);\n logger.info(` • ${uniqueTools} unique tools used`);\n logger.info('');\n logger.info('šŸ’” Use this report to:');\n logger.info(' • Understand which tools were most effective');\n logger.info(' • Identify performance bottlenecks');\n logger.info(' • Review the complete agentic conversation');\n logger.info(' • Improve tool implementation based on metrics');\n logger.info('');\n logger.info('═'.repeat(80));\n\n } catch (error: any) {\n logger.warn('Failed to generate self-reflection output: %s', error.message);\n logger.debug('Self-reflection error details:', error);\n }\n}\n\n// Helper function to get current version from package.json\nasync function getCurrentVersion(storage: any): Promise<string | undefined> {\n try {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const packageJson = safeJsonParse(packageJsonContents, 'package.json');\n const validated = validatePackageJson(packageJson, 'package.json');\n return validated.version;\n } catch {\n // Return undefined if we can't read the version (not a critical failure)\n return undefined;\n }\n}\n\n// Helper function to edit commit message using editor\nasync function editCommitMessageInteractively(commitMessage: string): Promise<string> {\n const templateLines = [\n '# Edit your commit message below. Lines starting with \"#\" will be ignored.',\n '# Save and close the editor when you are done.'\n ];\n\n const result = await editContentInEditor(commitMessage, templateLines, '.txt');\n return result.content;\n}\n\n// Helper function to improve commit message using LLM\nasync function improveCommitMessageWithLLM(\n commitMessage: string,\n runConfig: Config,\n promptConfig: any,\n promptContext: any,\n outputDirectory: string,\n diffContent: string\n): Promise<string> {\n // Get user feedback on what to improve using the editor\n const userFeedback = await getLLMFeedbackInEditor('commit message', commitMessage);\n\n // Create AI config from kodrdriv config\n const aiConfig = toAIConfig(runConfig);\n const aiStorageAdapter = createStorageAdapter(outputDirectory);\n const aiLogger = createLoggerAdapter(false);\n\n const improvementConfig: LLMImprovementConfig = {\n contentType: 'commit message',\n createImprovedPrompt: async (promptConfig, currentMessage, promptContext) => {\n const improvementPromptContent: CommitContent = {\n diffContent: diffContent, // Include the original diff for context\n userDirection: `Please improve this commit message based on the user's feedback: \"${userFeedback}\".\n\nCurrent commit message: \"${currentMessage}\"\n\nPlease revise the commit message according to the user's feedback while maintaining accuracy and following conventional commit standards if appropriate.`,\n };\n const prompt = await createCommitPrompt(promptConfig, improvementPromptContent, promptContext);\n // Format the prompt into a proper request with messages\n const modelToUse = aiConfig.commands?.commit?.model || aiConfig.model || 'gpt-4o-mini';\n return Formatter.create({ logger: getDryRunLogger(false) }).formatPrompt(modelToUse as Model, prompt);\n },\n callLLM: async (request, runConfig, outputDirectory) => {\n return await createCompletionWithRetry(\n request.messages as ChatCompletionMessageParam[],\n {\n model: aiConfig.commands?.commit?.model || aiConfig.model,\n openaiReasoning: aiConfig.commands?.commit?.reasoning || aiConfig.reasoning,\n debug: runConfig.debug,\n debugRequestFile: getOutputPath(outputDirectory, getTimestampedRequestFilename('commit-improve')),\n debugResponseFile: getOutputPath(outputDirectory, getTimestampedResponseFilename('commit-improve')),\n storage: aiStorageAdapter,\n logger: aiLogger,\n }\n );\n }\n };\n\n return await improveContentWithLLM(\n commitMessage,\n runConfig,\n promptConfig,\n promptContext,\n outputDirectory,\n improvementConfig\n );\n}\n\n// Interactive feedback loop for commit message\nasync function handleInteractiveCommitFeedback(\n commitMessage: string,\n runConfig: Config,\n promptConfig: any,\n promptContext: any,\n outputDirectory: string,\n storage: any,\n diffContent: string,\n hasActualChanges: boolean,\n cached: boolean\n): Promise<{ action: 'commit' | 'skip', finalMessage: string }> {\n const logger = getDryRunLogger(false);\n let currentMessage = commitMessage;\n\n // Determine what the confirm action will do based on configuration\n const senditEnabled = runConfig.commit?.sendit;\n const willActuallyCommit = senditEnabled && hasActualChanges && cached;\n\n // Create dynamic confirm choice based on configuration\n const isAmendMode = runConfig.commit?.amend;\n const confirmChoice = willActuallyCommit\n ? { key: 'c', label: isAmendMode ? 'Amend last commit with this message (sendit enabled)' : 'Commit changes with this message (sendit enabled)' }\n : { key: 'c', label: 'Accept message (you will need to commit manually)' };\n\n while (true) {\n // Display the current commit message\n logger.info('\\nšŸ“ Generated Commit Message:');\n logger.info('─'.repeat(50));\n logger.info(currentMessage);\n logger.info('─'.repeat(50));\n\n // Show configuration status\n if (senditEnabled) {\n if (willActuallyCommit) {\n logger.info('\\nSENDIT_MODE_ACTIVE: SendIt mode enabled | Action: Commit choice will execute git commit automatically | Staged Changes: Available');\n } else {\n logger.info('\\nSENDIT_MODE_NO_CHANGES: SendIt mode configured but no staged changes | Action: Only message save available | Staged Changes: None');\n }\n } else {\n logger.info('\\nSENDIT_MODE_INACTIVE: SendIt mode not active | Action: Accept choice will only save message | Commit: Manual');\n }\n\n // Get user choice\n const userChoice = await getUserChoice(\n '\\nWhat would you like to do with this commit message?',\n [\n confirmChoice,\n STANDARD_CHOICES.EDIT,\n STANDARD_CHOICES.SKIP,\n STANDARD_CHOICES.IMPROVE\n ],\n {\n nonTtyErrorSuggestions: ['Use --sendit flag to auto-commit without review']\n }\n );\n\n switch (userChoice) {\n case 'c':\n return { action: 'commit', finalMessage: currentMessage };\n\n case 'e':\n try {\n currentMessage = await editCommitMessageInteractively(currentMessage);\n } catch (error: any) {\n logger.error(`Failed to edit commit message: ${error.message}`);\n // Continue the loop to show options again\n }\n break;\n\n case 's':\n return { action: 'skip', finalMessage: currentMessage };\n\n case 'i':\n try {\n currentMessage = await improveCommitMessageWithLLM(\n currentMessage,\n runConfig,\n promptConfig,\n promptContext,\n outputDirectory,\n diffContent\n );\n } catch (error: any) {\n logger.error(`Failed to improve commit message: ${error.message}`);\n // Continue the loop to show options again\n }\n break;\n\n default:\n // This shouldn't happen, but continue the loop\n break;\n }\n }\n}\n\n// Helper function to check if there are any commits in the repository\nconst hasCommits = async (): Promise<boolean> => {\n try {\n await run('git rev-parse HEAD');\n return true;\n } catch {\n // No commits found or not a git repository\n return false;\n }\n};\n\n// Helper function to push the commit\nconst pushCommit = async (pushConfig: boolean | string | undefined, logger: any, isDryRun: boolean): Promise<void> => {\n if (!pushConfig) {\n return; // No push requested\n }\n\n // Determine the remote to push to\n let remote = 'origin';\n if (typeof pushConfig === 'string') {\n remote = pushConfig;\n }\n\n const pushCommand = `git push ${remote}`;\n\n if (isDryRun) {\n logger.info('Would push to %s with: %s', remote, pushCommand);\n } else {\n logger.info('šŸš€ Pushing to %s...', remote);\n try {\n await run(pushCommand);\n logger.info('āœ… Push successful!');\n } catch (error: any) {\n logger.error('Failed to push to %s: %s', remote, error.message);\n throw new ExternalDependencyError(`Failed to push to ${remote}`, 'git', error);\n }\n }\n};\n\n// Simplified cached determination with single check\nconst determineCachedState = async (config: Config): Promise<boolean> => {\n // If amend is used, we use staged changes (since we're amending the last commit)\n if (config.commit?.amend) {\n // For amend mode, check that there's a previous commit to amend\n const hasAnyCommits = await hasCommits();\n if (!hasAnyCommits) {\n throw new ValidationError('Cannot use --amend: no commits found in repository. Create an initial commit first.');\n }\n return true;\n }\n\n // If add is used, we always look at staged changes after add\n if (config.commit?.add) {\n return true;\n }\n\n // If explicitly set, use that value\n if (config.commit?.cached !== undefined) {\n return config.commit.cached;\n }\n\n // Otherwise, check if there are staged changes\n return await Diff.hasStagedChanges();\n};\n\n// Single validation of sendit + cached state\nconst validateSenditState = (config: Config, cached: boolean, isDryRun: boolean, logger: any): boolean => {\n if (config.commit?.sendit && !cached && !isDryRun) {\n const message = 'SendIt mode enabled, but no changes to commit.';\n logger.warn(message);\n return false; // Return false to indicate no changes to commit\n }\n return true; // Return true to indicate we can proceed\n};\n\n// Better file save handling with fallbacks\nconst saveCommitMessage = async (outputDirectory: string, summary: string, storage: any, logger: any): Promise<void> => {\n const timestampedFilename = getTimestampedCommitFilename();\n const primaryPath = getOutputPath(outputDirectory, timestampedFilename);\n\n try {\n await storage.writeFile(primaryPath, summary, 'utf-8');\n logger.debug('Saved timestamped commit message: %s', primaryPath);\n return; // Success, no fallback needed\n } catch (error: any) {\n logger.warn('Failed to save commit message to primary location (%s): %s', primaryPath, error.message);\n logger.debug('Primary save error details:', error);\n\n // First fallback: try output directory root (in case subdirectory has issues)\n try {\n const outputRootPath = getOutputPath('output', timestampedFilename);\n await storage.writeFile(outputRootPath, summary, 'utf-8');\n logger.info('COMMIT_MESSAGE_SAVED_FALLBACK: Saved commit message to fallback location | Path: %s | Purpose: Preserve message for later use', outputRootPath);\n return;\n } catch (outputError: any) {\n logger.warn('Failed to save to output directory fallback: %s', outputError.message);\n }\n\n // Last resort fallback: save to current directory (this creates the clutter!)\n try {\n const fallbackPath = `commit-message-${Date.now()}.txt`;\n await storage.writeFile(fallbackPath, summary, 'utf-8');\n logger.warn('āš ļø Saved commit message to current directory as last resort: %s', fallbackPath);\n logger.warn('āš ļø This file should be moved to the output directory and may clutter your workspace');\n } catch (fallbackError: any) {\n logger.error('Failed to save commit message anywhere: %s', fallbackError.message);\n logger.error('Commit message will only be available in console output');\n // Continue execution - commit message is still returned\n }\n }\n};\n\n// ===================================================================\n// COMMIT SPLITTING TYPES AND FUNCTIONS\n// ===================================================================\n\ninterface CommitSplit {\n files: string[];\n message: string;\n rationale: string;\n}\n\ninterface SplitCommitOptions {\n splits: CommitSplit[];\n runConfig: Config;\n isDryRun: boolean;\n interactive: boolean;\n logger: any;\n storage: any;\n}\n\ninterface SplitCommitResult {\n success: boolean;\n commitsCreated: number;\n commits: Array<{\n message: string;\n files: string[];\n sha?: string;\n }>;\n error?: Error;\n skipped: number;\n}\n\n/**\n * Interactive review of a single split before committing\n */\nasync function reviewSplitInteractively(\n split: CommitSplit,\n index: number,\n total: number,\n logger: any\n): Promise<{\n action: 'commit' | 'edit' | 'skip' | 'stop';\n modifiedMessage?: string;\n}> {\n logger.info('');\n logger.info('═'.repeat(80));\n logger.info(`šŸ“‹ Commit ${index + 1} of ${total}`);\n logger.info('═'.repeat(80));\n logger.info('');\n logger.info('Files (%d):', split.files.length);\n split.files.forEach((f: string) => logger.info(` - ${f}`));\n logger.info('');\n logger.info('Rationale:');\n logger.info(` ${split.rationale}`);\n logger.info('');\n logger.info('Proposed Message:');\n logger.info('─'.repeat(50));\n logger.info(split.message);\n logger.info('─'.repeat(50));\n logger.info('');\n\n const choices = [\n { key: 'c', label: 'Commit with this message' },\n { key: 'e', label: 'Edit message before committing' },\n { key: 's', label: 'Skip this commit' },\n { key: 't', label: 'Stop - no more commits' }\n ];\n\n const choice = await getUserChoice(\n 'What would you like to do?',\n choices,\n { nonTtyErrorSuggestions: ['Use --sendit to auto-commit without review'] }\n );\n\n if (choice === 'e') {\n // Edit the message\n const edited = await editCommitMessageInteractively(split.message);\n return { action: 'commit', modifiedMessage: edited };\n } else if (choice === 'c') {\n return { action: 'commit' };\n } else if (choice === 's') {\n return { action: 'skip' };\n } else {\n return { action: 'stop' };\n }\n}\n\n/**\n * Create a single commit from a split\n */\nasync function createSingleSplitCommit(\n split: CommitSplit,\n commitMessage: string,\n isDryRun: boolean,\n logger: any\n): Promise<string | undefined> {\n // Stage the files for this split\n if (isDryRun) {\n logger.debug(`[DRY RUN] Would stage: ${split.files.join(', ')}`);\n } else {\n await stageFiles(split.files);\n\n // Verify files were staged correctly\n const verification = await verifyStagedFiles(split.files);\n if (!verification.allPresent) {\n throw new ValidationError(\n `Stage verification failed. Missing: ${verification.missing.join(', ')}. ` +\n `Unexpected: ${verification.unexpected.join(', ')}`\n );\n }\n }\n\n // Create the commit\n if (isDryRun) {\n logger.debug(`[DRY RUN] Would commit with message: ${commitMessage}`);\n return undefined;\n } else {\n const validatedMessage = validateString(commitMessage, 'commit message');\n const escapedMessage = shellescape([validatedMessage]);\n await run(`git commit -m ${escapedMessage}`);\n\n // Get the SHA of the commit we just created\n const result = await run('git rev-parse HEAD');\n const sha = (typeof result === 'string' ? result : result.stdout).trim();\n\n logger.debug(`Created commit: ${sha}`);\n return sha;\n }\n}\n\n/**\n * Execute a series of split commits\n */\nasync function executeSplitCommits(\n options: SplitCommitOptions\n): Promise<SplitCommitResult> {\n const { splits, runConfig, isDryRun, interactive, logger, storage } = options;\n\n const result: SplitCommitResult = {\n success: false,\n commitsCreated: 0,\n commits: [],\n skipped: 0\n };\n\n try {\n logger.debug('Preparing to create split commits...');\n\n logger.info('');\n logger.info('═'.repeat(80));\n logger.info(`šŸ”€ Creating ${splits.length} commits from staged changes`);\n logger.info('═'.repeat(80));\n\n // Process each split\n for (let i = 0; i < splits.length; i++) {\n const split = splits[i];\n\n logger.info('');\n logger.info(`Processing commit ${i + 1} of ${splits.length}...`);\n\n // Interactive review if enabled\n let commitMessage = split.message;\n if (interactive && !isDryRun) {\n const review = await reviewSplitInteractively(split, i, splits.length, logger);\n\n if (review.action === 'stop') {\n logger.info('User stopped split commit process');\n logger.info(`Created ${result.commitsCreated} commits before stopping`);\n result.success = false;\n return result;\n } else if (review.action === 'skip') {\n logger.info(`Skipped commit ${i + 1}`);\n result.skipped++;\n continue;\n } else if (review.action === 'edit') {\n commitMessage = review.modifiedMessage!;\n }\n }\n\n try {\n // Unstage everything first\n if (!isDryRun) {\n await unstageAll();\n }\n\n // Create this split's commit\n const sha = await createSingleSplitCommit(\n split,\n commitMessage,\n isDryRun,\n logger\n );\n\n result.commits.push({\n message: commitMessage,\n files: split.files,\n sha\n });\n result.commitsCreated++;\n\n if (isDryRun) {\n logger.info(`[DRY RUN] Would create commit ${i + 1}: ${commitMessage.split('\\n')[0]}`);\n } else {\n logger.info(`āœ… Created commit ${i + 1}: ${sha?.substring(0, 7)} - ${commitMessage.split('\\n')[0]}`);\n }\n\n } catch (error: any) {\n logger.error(`Failed to create commit ${i + 1}: ${error.message}`);\n logger.info(`Successfully created ${result.commitsCreated} commits before error`);\n\n // Re-stage remaining files for user\n if (!isDryRun) {\n const remainingFiles = splits.slice(i).flatMap((s: CommitSplit) => s.files);\n try {\n await stageFiles(remainingFiles);\n logger.info(`Remaining ${remainingFiles.length} files are staged for manual commit`);\n } catch (restageError: any) {\n logger.error(`Failed to re-stage remaining files: ${restageError.message}`);\n }\n }\n\n result.success = false;\n result.error = error;\n return result;\n }\n }\n\n result.success = true;\n return result;\n\n } catch (error: any) {\n logger.error(`Split commit process failed: ${error.message}`);\n result.success = false;\n result.error = error;\n return result;\n }\n}\n\n/**\n * Format a summary message for split commits\n */\nfunction formatSplitCommitSummary(result: SplitCommitResult): string {\n const lines: string[] = [];\n\n lines.push('');\n lines.push('═'.repeat(80));\n lines.push('āœ… COMMIT SPLITTING COMPLETE');\n lines.push('═'.repeat(80));\n lines.push('');\n lines.push(`Total commits created: ${result.commitsCreated}`);\n if (result.skipped > 0) {\n lines.push(`Commits skipped: ${result.skipped}`);\n }\n lines.push('');\n\n if (result.commits.length > 0) {\n lines.push('Commits:');\n lines.push('');\n result.commits.forEach((commit, idx) => {\n const sha = commit.sha ? `${commit.sha.substring(0, 7)} ` : '';\n const firstLine = commit.message.split('\\n')[0];\n lines.push(` ${idx + 1}. ${sha}${firstLine}`);\n lines.push(` Files: ${commit.files.length}`);\n });\n }\n\n lines.push('');\n lines.push('═'.repeat(80));\n\n return lines.join('\\n');\n}\n\nconst executeInternal = async (runConfig: Config) => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n // Track if user explicitly chose to skip in interactive mode\n let userSkippedCommit = false;\n\n if (runConfig.commit?.add) {\n if (isDryRun) {\n logger.info('GIT_ADD_DRY_RUN: Would stage all changes | Mode: dry-run | Command: git add -A');\n } else {\n logger.info('GIT_ADD_STAGING: Adding all changes to index | Command: git add -A | Scope: all files | Purpose: Stage for commit');\n await run('git add -A');\n logger.info('GIT_ADD_SUCCESS: Successfully staged all changes | Command: git add -A | Status: completed');\n }\n }\n\n // Determine cached state with single, clear logic\n const cached = await determineCachedState(runConfig);\n\n // Validate sendit state early - now returns boolean instead of throwing\n validateSenditState(runConfig, cached, isDryRun, logger);\n\n let diffContent = '';\n let isUsingFileContent = false;\n const maxDiffBytes = runConfig.commit?.maxDiffBytes ?? DEFAULT_MAX_DIFF_BYTES;\n const options = {\n cached,\n excludedPatterns: runConfig.excludedPatterns ?? DEFAULT_EXCLUDED_PATTERNS,\n maxDiffBytes\n };\n const diff = await Diff.create(options);\n diffContent = await diff.get();\n\n // Check if there are actually any changes in the diff\n let hasActualChanges = diffContent.trim().length > 0;\n\n // If no changes found with current patterns, check for critical excluded files\n if (!hasActualChanges) {\n const criticalChanges = await Diff.hasCriticalExcludedChanges();\n\n if (criticalChanges.hasChanges) {\n logger.info('CRITICAL_FILES_DETECTED: No changes with exclusion patterns, but critical files modified | Files: %s | Action: May need to include critical files',\n criticalChanges.files.join(', '));\n\n if (runConfig.commit?.sendit && !isDryRun) {\n // In sendit mode, automatically include critical files\n logger.info('SENDIT_INCLUDING_CRITICAL: SendIt mode including critical files in diff | Purpose: Ensure all important changes are captured');\n const minimalPatterns = Diff.getMinimalExcludedPatterns(runConfig.excludedPatterns ?? DEFAULT_EXCLUDED_PATTERNS);\n const updatedOptions = { ...options, excludedPatterns: minimalPatterns };\n const updatedDiff = await Diff.create(updatedOptions);\n diffContent = await updatedDiff.get();\n\n if (diffContent.trim().length > 0) {\n logger.info('CRITICAL_FILES_INCLUDED: Successfully added critical files to diff | Status: ready for commit message generation');\n // Update hasActualChanges since we now have content after including critical files\n hasActualChanges = true;\n } else {\n logger.warn('No changes detected even after including critical files.');\n return 'No changes to commit.';\n }\n } else {\n // In non-sendit mode, suggest including the files\n logger.warn('Consider including these files by using:');\n logger.warn(' kodrdriv commit --excluded-paths %s',\n (runConfig.excludedPatterns ?? DEFAULT_EXCLUDED_PATTERNS)\n .filter(p => !criticalChanges.files.some(f => p.includes(f.split('/').pop() || '')))\n .map(p => `\"${p}\"`)\n .join(' '));\n logger.warn('Or run with --sendit to automatically include critical files.');\n\n if (!isDryRun) {\n return 'No changes to commit. Use suggestions above to include critical files.';\n } else {\n logger.info('Generating commit message template for future use...');\n }\n }\n } else {\n // No changes at all - try fallback to file content for new repositories\n logger.info('NO_CHANGES_DETECTED: No changes found in working directory | Status: clean | Action: Nothing to commit');\n\n if (runConfig.commit?.sendit && !isDryRun) {\n logger.warn('No changes detected to commit. Skipping commit operation.');\n return 'No changes to commit.';\n } else {\n logger.info('NO_DIFF_FALLBACK: No diff content available | Action: Attempting to generate commit message from file content | Strategy: fallback');\n\n // Create file content collector as fallback\n const fileOptions = {\n excludedPatterns: runConfig.excludedPatterns ?? DEFAULT_EXCLUDED_PATTERNS,\n maxTotalBytes: maxDiffBytes * 5, // Allow more content since we're not looking at diffs\n workingDirectory: process.cwd()\n };\n const files = await Files.create(fileOptions);\n const fileContent = await files.get();\n\n if (fileContent && fileContent.trim().length > 0) {\n logger.info('FILE_CONTENT_USING: Using file content for commit message generation | Content Length: %d characters | Source: file content', fileContent.length);\n diffContent = fileContent;\n isUsingFileContent = true;\n hasActualChanges = true; // We have content to work with\n } else {\n if (runConfig.commit?.sendit) {\n logger.info('COMMIT_SKIPPED: Skipping commit operation | Reason: No changes detected | Action: None');\n return 'No changes to commit.';\n } else {\n logger.info('COMMIT_TEMPLATE_GENERATING: Creating commit message template for future use | Reason: No changes | Purpose: Provide template');\n }\n }\n }\n }\n }\n\n const logOptions = {\n limit: runConfig.commit?.messageLimit,\n };\n const log = await Log.create(logOptions);\n const logContext = await log.get();\n\n // Always ensure output directory exists for request/response files and GitHub issues lookup\n const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\n const storage = createStorage();\n await storage.ensureDirectory(outputDirectory);\n\n // Get GitHub issues context for large commits [[memory:5887795]]\n let githubIssuesContext = '';\n try {\n const currentVersion = await getCurrentVersion(storage);\n if (currentVersion) {\n logger.debug(`Found current version: ${currentVersion}, fetching related GitHub issues...`);\n githubIssuesContext = await getRecentClosedIssuesForCommit(currentVersion, 10);\n if (githubIssuesContext) {\n logger.debug(`Fetched GitHub issues context (${githubIssuesContext.length} characters)`);\n } else {\n logger.debug('No relevant GitHub issues found for commit context');\n }\n } else {\n logger.debug('Could not determine current version, fetching recent issues without milestone filtering...');\n githubIssuesContext = await getRecentClosedIssuesForCommit(undefined, 10);\n if (githubIssuesContext) {\n logger.debug(`Fetched general GitHub issues context (${githubIssuesContext.length} characters)`);\n }\n }\n } catch (error: any) {\n logger.debug(`Failed to fetch GitHub issues for commit context: ${error.message}`);\n // Continue without GitHub context - this shouldn't block commit generation\n }\n\n const promptConfig = {\n overridePaths: (runConfig as any).discoveredConfigDirs || [],\n overrides: runConfig.overrides || false,\n };\n const userDirection = sanitizeDirection(runConfig.commit?.direction);\n if (userDirection) {\n logger.debug('Using user direction: %s', userDirection);\n }\n\n // Create adapters for ai-service\n const aiConfig = toAIConfig(runConfig);\n const aiStorageAdapter = createStorageAdapter(outputDirectory);\n const aiLogger = createLoggerAdapter(isDryRun);\n\n // Read context from files if provided\n const contextFromFiles = await readContextFiles(runConfig.commit?.contextFiles, logger);\n\n // Combine file context with existing context\n const combinedContext = [\n runConfig.commit?.context,\n contextFromFiles\n ].filter(Boolean).join('\\n\\n---\\n\\n');\n\n // Define promptContext for use in interactive improvements\n const promptContext: CommitContext = {\n logContext,\n context: combinedContext || undefined,\n directories: runConfig.contextDirectories,\n };\n\n // Announce self-reflection if enabled\n if (runConfig.commit?.selfReflection) {\n logger.info('šŸ“Š Self-reflection enabled - detailed analysis will be generated');\n }\n\n // Get list of changed files\n const changedFilesResult = await run(`git diff --name-only ${cached ? '--cached' : ''}`);\n const changedFilesOutput = typeof changedFilesResult === 'string' ? changedFilesResult : changedFilesResult.stdout;\n const changedFiles = changedFilesOutput.split('\\n').filter((f: string) => f.trim().length > 0);\n\n logger.debug('Changed files for analysis: %d files', changedFiles.length);\n\n // Run agentic commit generation\n const agenticResult = await runAgenticCommit({\n changedFiles,\n diffContent,\n userDirection,\n logContext,\n model: aiConfig.commands?.commit?.model || aiConfig.model,\n maxIterations: runConfig.commit?.maxAgenticIterations || 10,\n debug: runConfig.debug,\n debugRequestFile: getOutputPath(outputDirectory, getTimestampedRequestFilename('commit')),\n debugResponseFile: getOutputPath(outputDirectory, getTimestampedResponseFilename('commit')),\n storage: aiStorageAdapter,\n logger: aiLogger,\n openaiReasoning: aiConfig.commands?.commit?.reasoning || aiConfig.reasoning,\n });\n\n const iterations = agenticResult.iterations || 0;\n const toolCalls = agenticResult.toolCallsExecuted || 0;\n logger.info(`šŸ” Analysis complete: ${iterations} iterations, ${toolCalls} tool calls`);\n\n // Generate self-reflection output if enabled\n if (runConfig.commit?.selfReflection) {\n await generateSelfReflection(agenticResult, outputDirectory, storage, logger);\n }\n\n // Check for suggested splits\n if (agenticResult.suggestedSplits.length > 1 && runConfig.commit?.allowCommitSplitting) {\n logger.info('\\nšŸ“‹ AI suggests splitting this into %d commits:', agenticResult.suggestedSplits.length);\n\n for (let i = 0; i < agenticResult.suggestedSplits.length; i++) {\n const split = agenticResult.suggestedSplits[i];\n logger.info('\\nCommit %d (%d files):', i + 1, split.files.length);\n logger.info(' Files: %s', split.files.join(', '));\n logger.info(' Rationale: %s', split.rationale);\n logger.info(' Message: %s', split.message);\n }\n\n // NEW: Check if auto-split is enabled (defaults to true if not specified)\n const autoSplitEnabled = runConfig.commit?.autoSplit !== false; // Default to true\n if (autoSplitEnabled) {\n logger.info('\\nšŸ”„ Auto-split enabled - creating separate commits...\\n');\n\n const splitResult = await executeSplitCommits({\n splits: agenticResult.suggestedSplits,\n runConfig,\n isDryRun,\n interactive: !!(runConfig.commit?.interactive && !runConfig.commit?.sendit),\n logger,\n storage\n });\n\n if (splitResult.success) {\n // Push if requested (all commits)\n if (runConfig.commit?.push && !isDryRun) {\n await pushCommit(runConfig.commit.push, logger, isDryRun);\n }\n\n return formatSplitCommitSummary(splitResult);\n } else {\n const errorMessage = splitResult.error?.message || 'Unknown error';\n throw new CommandError(\n `Failed to create split commits: ${errorMessage}`,\n 'SPLIT_COMMIT_FAILED',\n false,\n splitResult.error\n );\n }\n } else {\n logger.info('\\nāš ļø Commit splitting is not automated. Please stage and commit files separately.');\n logger.info('Using combined message for now...\\n');\n logger.info('šŸ’” To enable automatic splitting, add autoSplit: true to your commit configuration');\n }\n } else if (agenticResult.suggestedSplits.length > 1) {\n logger.debug('AI suggested %d splits but commit splitting is not enabled', agenticResult.suggestedSplits.length);\n }\n\n const rawSummary = agenticResult.commitMessage;\n\n // Apply stop-context filtering to commit message\n const filterResult = filterContent(rawSummary, runConfig.stopContext);\n const summary = filterResult.filtered;\n\n // Save timestamped copy of commit message with better error handling\n await saveCommitMessage(outputDirectory, summary, storage, logger);\n\n // šŸ›”ļø Universal Safety Check: Run before ANY commit operation\n // This protects both direct commits (--sendit) and automated commits (publish, etc.)\n const willCreateCommit = runConfig.commit?.sendit && hasActualChanges && cached;\n if (willCreateCommit && !runConfig.commit?.skipFileCheck && !isDryRun) {\n logger.debug('Checking for file: dependencies before commit operation...');\n\n try {\n const fileDependencyIssues = await checkForFileDependencies(storage, process.cwd());\n\n if (fileDependencyIssues.length > 0) {\n logger.error('🚫 COMMIT BLOCKED: Found file: dependencies that should not be committed!');\n logger.error('');\n\n logFileDependencyWarning(fileDependencyIssues, 'commit');\n logFileDependencySuggestions(true);\n\n logger.error('Generated commit message was:');\n logger.error('%s', summary);\n logger.error('');\n\n if (runConfig.commit?.sendit) {\n logger.error('To bypass this check, use: kodrdriv commit --skip-file-check --sendit');\n } else {\n logger.error('To bypass this check, add skipFileCheck: true to your commit configuration');\n }\n\n throw new ValidationError('Found file: dependencies that should not be committed. Use --skip-file-check to bypass.');\n }\n\n logger.debug('āœ… No file: dependencies found, proceeding with commit');\n } catch (error: any) {\n logger.warn('Warning: Could not check for file: dependencies: %s', error.message);\n logger.warn('Proceeding with commit...');\n }\n } else if (runConfig.commit?.skipFileCheck && willCreateCommit) {\n logger.warn('āš ļø Skipping file: dependency check as requested');\n }\n\n // Handle interactive mode\n if (runConfig.commit?.interactive && !isDryRun) {\n requireTTY('Interactive mode requires a terminal. Use --sendit or --dry-run instead.');\n\n const interactiveResult = await handleInteractiveCommitFeedback(\n summary,\n runConfig,\n promptConfig,\n promptContext,\n outputDirectory,\n storage,\n diffContent,\n hasActualChanges,\n cached\n );\n\n if (interactiveResult.action === 'skip') {\n logger.info('COMMIT_ABORTED: User aborted commit operation | Reason: User choice | Action: No commit performed');\n logger.info('COMMIT_NO_ACTION: No commit will be performed | Status: aborted | Next: User can retry or modify changes');\n userSkippedCommit = true;\n return interactiveResult.finalMessage;\n }\n\n // User chose to commit - check if sendit is enabled to determine what action to take\n const senditEnabled = runConfig.commit?.sendit;\n const willActuallyCommit = senditEnabled && hasActualChanges && cached;\n\n if (willActuallyCommit) {\n const commitAction = runConfig.commit?.amend ? 'amending last commit' : 'committing';\n logger.info('SENDIT_EXECUTING: SendIt enabled, executing commit action | Action: %s | Message Length: %d | Final Message: \\n\\n%s\\n\\n', commitAction.charAt(0).toUpperCase() + commitAction.slice(1), interactiveResult.finalMessage.length, interactiveResult.finalMessage);\n try {\n const validatedSummary = validateString(interactiveResult.finalMessage, 'commit summary');\n const escapedSummary = shellescape([validatedSummary]);\n const commitCommand = runConfig.commit?.amend ?\n `git commit --amend -m ${escapedSummary}` :\n `git commit -m ${escapedSummary}`;\n await run(commitCommand);\n logger.info('COMMIT_SUCCESS: Commit operation completed successfully | Status: committed | Action: Changes saved to repository');\n\n // Push if requested\n await pushCommit(runConfig.commit?.push, logger, isDryRun);\n } catch (error: any) {\n logger.error('Failed to commit:', error);\n throw new ExternalDependencyError('Failed to create commit', 'git', error);\n }\n } else if (senditEnabled && (!hasActualChanges || !cached)) {\n logger.info('šŸ“ SendIt enabled but no staged changes available. Final message saved: \\n\\n%s\\n\\n', interactiveResult.finalMessage);\n if (!hasActualChanges) {\n logger.info('šŸ’” No changes detected to commit');\n } else if (!cached) {\n logger.info('šŸ’” No staged changes found. Use \"git add\" to stage changes or configure add: true in commit settings');\n }\n } else {\n logger.info('šŸ“ Message accepted (SendIt not enabled). Use this commit message manually: \\n\\n%s\\n\\n', interactiveResult.finalMessage);\n logger.info('šŸ’” To automatically commit, add sendit: true to your commit configuration');\n }\n\n return interactiveResult.finalMessage;\n }\n\n // Safety check: Never commit if user explicitly skipped in interactive mode\n if (userSkippedCommit) {\n logger.debug('Skipping sendit logic because user chose to skip in interactive mode');\n return summary;\n }\n\n if (runConfig.commit?.sendit) {\n if (isDryRun) {\n logger.info('Would commit with message: \\n\\n%s\\n\\n', summary);\n const commitAction = runConfig.commit?.amend ? 'git commit --amend -m <generated-message>' : 'git commit -m <generated-message>';\n logger.info('Would execute: %s', commitAction);\n\n // Show push command in dry run if requested\n if (runConfig.commit?.push) {\n const remote = typeof runConfig.commit.push === 'string' ? runConfig.commit.push : 'origin';\n logger.info('Would push to %s with: git push %s', remote, remote);\n }\n } else if (hasActualChanges && cached) {\n const commitAction = runConfig.commit?.amend ? 'amending commit' : 'committing';\n logger.info('SendIt mode enabled. %s with message: \\n\\n%s\\n\\n', commitAction.charAt(0).toUpperCase() + commitAction.slice(1), summary);\n try {\n const validatedSummary = validateString(summary, 'commit summary');\n const escapedSummary = shellescape([validatedSummary]);\n const commitCommand = runConfig.commit?.amend ?\n `git commit --amend -m ${escapedSummary}` :\n `git commit -m ${escapedSummary}`;\n await run(commitCommand);\n logger.info('Commit successful!');\n\n // Push if requested\n await pushCommit(runConfig.commit?.push, logger, isDryRun);\n } catch (error: any) {\n logger.error('Failed to commit:', error);\n throw new ExternalDependencyError('Failed to create commit', 'git', error);\n }\n } else {\n logger.info('SendIt mode enabled, but no changes to commit. Generated message: \\n\\n%s\\n\\n', summary);\n }\n } else if (isDryRun) {\n logger.info('Generated commit message: \\n\\n%s\\n\\n', summary);\n } else {\n // Default behavior when neither --interactive nor --sendit is specified\n logger.info('Generated commit message: \\n\\n%s\\n\\n', summary);\n }\n\n return summary;\n}\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n try {\n return await executeInternal(runConfig);\n } catch (error: any) {\n // Import getLogger for error handling\n const { getLogger } = await import('@eldrforge/core');\n const standardLogger = getLogger();\n\n if (error instanceof ValidationError || error instanceof ExternalDependencyError || error instanceof CommandError) {\n standardLogger.error(`commit failed: ${error.message}`);\n if (error.cause && typeof error.cause === 'object' && 'message' in error.cause) {\n standardLogger.debug(`Caused by: ${(error.cause as Error).message}`);\n } else if (error.cause) {\n standardLogger.debug(`Caused by: ${error.cause}`);\n }\n throw error;\n }\n\n // Unexpected errors\n standardLogger.error(`commit encountered unexpected error: ${error.message}`);\n throw error;\n }\n};\n","import path from 'path';\nimport fs from 'fs/promises';\nimport { getLogger } from '@eldrforge/core';\nimport { runSecure } from '@eldrforge/git-tools';\nimport { createStorage } from '@eldrforge/shared';\n\nconst logger = getLogger();\n\n// Cache file to store test run timestamps per package\nconst TEST_CACHE_FILE = '.kodrdriv-test-cache.json';\n\ninterface TestCache {\n [packagePath: string]: {\n lastTestRun: number; // timestamp\n lastCommitHash: string; // git commit hash when tests last ran\n };\n}\n\n/**\n * Load test cache from disk\n */\nasync function loadTestCache(packageDir: string): Promise<TestCache> {\n const cachePath = path.join(packageDir, TEST_CACHE_FILE);\n try {\n const content = await fs.readFile(cachePath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n}\n\n/**\n * Save test cache to disk\n */\nasync function saveTestCache(packageDir: string, cache: TestCache): Promise<void> {\n const cachePath = path.join(packageDir, TEST_CACHE_FILE);\n try {\n await fs.writeFile(cachePath, JSON.stringify(cache, null, 2), 'utf-8');\n } catch (error: any) {\n logger.debug(`Failed to save test cache: ${error.message}`);\n }\n}\n\n/**\n * Get the current git commit hash\n */\nasync function getCurrentCommitHash(packageDir: string): Promise<string | null> {\n try {\n const { stdout } = await runSecure('git', ['rev-parse', 'HEAD'], { cwd: packageDir });\n return stdout.trim();\n } catch {\n return null;\n }\n}\n\n/**\n * Check if source files have changed since the last test run\n */\nasync function hasSourceFilesChanged(\n packageDir: string,\n lastCommitHash: string | null\n): Promise<{ changed: boolean; reason: string }> {\n if (!lastCommitHash) {\n return { changed: true, reason: 'No previous test run recorded' };\n }\n\n try {\n // Get current commit hash\n const currentCommitHash = await getCurrentCommitHash(packageDir);\n if (!currentCommitHash) {\n return { changed: true, reason: 'Not in a git repository' };\n }\n\n // If commit hash changed, files definitely changed\n if (currentCommitHash !== lastCommitHash) {\n return { changed: true, reason: `Commit hash changed: ${lastCommitHash.substring(0, 7)} -> ${currentCommitHash.substring(0, 7)}` };\n }\n\n // Check if there are any uncommitted changes to source files\n const { stdout } = await runSecure('git', ['status', '--porcelain'], { cwd: packageDir });\n const changedFiles = stdout.split('\\n')\n .filter(line => line.trim())\n .map(line => line.substring(3).trim())\n .filter(file => {\n // Only consider source files, not build artifacts or config files\n const ext = path.extname(file);\n return (\n // TypeScript/JavaScript source files\n ['.ts', '.tsx', '.js', '.jsx'].includes(ext) ||\n // Test files\n file.includes('.test.') || file.includes('.spec.') ||\n // Config files that affect build/test\n ['tsconfig.json', 'vite.config.ts', 'vitest.config.ts', 'package.json'].includes(path.basename(file))\n );\n });\n\n if (changedFiles.length > 0) {\n return { changed: true, reason: `Uncommitted changes in: ${changedFiles.slice(0, 3).join(', ')}${changedFiles.length > 3 ? '...' : ''}` };\n }\n\n return { changed: false, reason: 'No source file changes detected' };\n } catch (error: any) {\n logger.debug(`Error checking for source file changes: ${error.message}`);\n // Conservative: assume changed if we can't verify\n return { changed: true, reason: `Could not verify changes: ${error.message}` };\n }\n}\n\n/**\n * Check if dist directory needs to be cleaned (is outdated compared to source files)\n */\nexport async function isCleanNeeded(packageDir: string): Promise<{ needed: boolean; reason: string }> {\n const storage = createStorage();\n const distPath = path.join(packageDir, 'dist');\n\n try {\n // Check if dist directory exists\n const distExists = await storage.exists('dist');\n if (!distExists) {\n return { needed: false, reason: 'dist directory does not exist' };\n }\n\n // Get dist directory modification time\n const distStats = await fs.stat(distPath);\n const distMtime = distStats.mtimeMs;\n\n // Use git to find source files that are newer than dist\n try {\n // Get all tracked source files\n const { stdout: trackedFiles } = await runSecure('git', ['ls-files'], { cwd: packageDir });\n const files = trackedFiles.split('\\n').filter(Boolean);\n\n // Check if any source files are newer than dist\n for (const file of files) {\n const ext = path.extname(file);\n if (!['.ts', '.tsx', '.js', '.jsx', '.json'].includes(ext)) {\n continue;\n }\n\n // Skip dist files\n if (file.startsWith('dist/')) {\n continue;\n }\n\n try {\n const filePath = path.join(packageDir, file);\n const fileStats = await fs.stat(filePath);\n if (fileStats.mtimeMs > distMtime) {\n return { needed: true, reason: `${file} is newer than dist directory` };\n }\n } catch {\n // File might not exist or be inaccessible, skip it\n continue;\n }\n }\n\n return { needed: false, reason: 'dist directory is up to date with source files' };\n } catch (error: any) {\n // If git check fails, fall back to checking common source directories\n logger.debug(`Git-based check failed, using fallback: ${error.message}`);\n\n const sourceDirs = ['src', 'tests'];\n for (const dir of sourceDirs) {\n const dirPath = path.join(packageDir, dir);\n try {\n const dirStats = await fs.stat(dirPath);\n if (dirStats.mtimeMs > distMtime) {\n return { needed: true, reason: `${dir} directory is newer than dist` };\n }\n } catch {\n // Directory doesn't exist, skip it\n continue;\n }\n }\n\n // Conservative: if we can't verify, assume clean is needed\n return { needed: true, reason: 'Could not verify dist freshness, cleaning to be safe' };\n }\n } catch (error: any) {\n logger.debug(`Error checking if clean is needed: ${error.message}`);\n // Conservative: assume clean is needed if we can't check\n return { needed: true, reason: `Could not verify: ${error.message}` };\n }\n}\n\n/**\n * Check if tests need to be run (source files changed since last test run)\n */\nexport async function isTestNeeded(packageDir: string): Promise<{ needed: boolean; reason: string }> {\n try {\n // Load test cache\n const cache = await loadTestCache(packageDir);\n const cacheKey = packageDir;\n\n // Check if we have a cached test run for this package\n const cached = cache[cacheKey];\n if (!cached) {\n return { needed: true, reason: 'No previous test run recorded' };\n }\n\n // Check if source files have changed since last test run\n const changeCheck = await hasSourceFilesChanged(packageDir, cached.lastCommitHash);\n if (changeCheck.changed) {\n return { needed: true, reason: changeCheck.reason };\n }\n\n return { needed: false, reason: 'No source file changes since last test run' };\n } catch (error: any) {\n logger.debug(`Error checking if test is needed: ${error.message}`);\n // Conservative: assume test is needed if we can't check\n return { needed: true, reason: `Could not verify: ${error.message}` };\n }\n}\n\n/**\n * Record that tests were run for this package\n */\nexport async function recordTestRun(packageDir: string): Promise<void> {\n try {\n const cache = await loadTestCache(packageDir);\n const cacheKey = packageDir;\n const commitHash = await getCurrentCommitHash(packageDir);\n\n cache[cacheKey] = {\n lastTestRun: Date.now(),\n lastCommitHash: commitHash || 'unknown'\n };\n\n await saveTestCache(packageDir, cache);\n } catch (error: any) {\n logger.debug(`Failed to record test run: ${error.message}`);\n }\n}\n\n/**\n * Optimize a precommit command by skipping unnecessary steps\n * Returns the optimized command and information about what was skipped\n */\nexport async function optimizePrecommitCommand(\n packageDir: string,\n originalCommand: string,\n options: { skipClean?: boolean; skipTest?: boolean } = {}\n): Promise<{\n optimizedCommand: string;\n skipped: {\n clean: boolean;\n test: boolean;\n };\n reasons: {\n clean?: string;\n test?: string;\n };\n}> {\n const { skipClean = true, skipTest = true } = options;\n\n // Parse the original command to extract individual scripts\n // Common patterns: \"npm run precommit\", \"npm run clean && npm run build && npm run lint && npm run test\"\n const isPrecommitScript = originalCommand.includes('precommit') || originalCommand.includes('pre-commit');\n\n let optimizedCommand = originalCommand;\n const skipped = { clean: false, test: false };\n const reasons: { clean?: string; test?: string } = {};\n\n // If it's a precommit script, we need to check what it actually runs\n // For now, we'll optimize the common pattern: clean && build && lint && test\n if (isPrecommitScript || originalCommand.includes('clean')) {\n if (skipClean) {\n const cleanCheck = await isCleanNeeded(packageDir);\n if (!cleanCheck.needed) {\n // Remove clean from the command\n optimizedCommand = optimizedCommand\n .replace(/npm\\s+run\\s+clean\\s+&&\\s*/g, '')\n .replace(/npm\\s+run\\s+clean\\s+/g, '')\n .replace(/\\s*&&\\s*npm\\s+run\\s+clean/g, '')\n .trim();\n skipped.clean = true;\n reasons.clean = cleanCheck.reason;\n }\n }\n }\n\n if (isPrecommitScript || originalCommand.includes('test')) {\n if (skipTest) {\n const testCheck = await isTestNeeded(packageDir);\n if (!testCheck.needed) {\n // Remove test from the command\n optimizedCommand = optimizedCommand\n .replace(/\\s*&&\\s*npm\\s+run\\s+test\\s*/g, '')\n .replace(/\\s*&&\\s*npm\\s+run\\s+test$/g, '')\n .replace(/npm\\s+run\\s+test\\s+&&\\s*/g, '')\n .trim();\n skipped.test = true;\n reasons.test = testCheck.reason;\n }\n }\n }\n\n // Clean up any double && or trailing &&\n optimizedCommand = optimizedCommand.replace(/\\s*&&\\s*&&/g, ' && ').replace(/&&\\s*$/, '').trim();\n\n return { optimizedCommand, skipped, reasons };\n}\n\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport path from 'path';\nimport { getLogger } from '@eldrforge/core';\nimport { safeJsonParse, validatePackageJson } from '@eldrforge/git-tools';\n\n// Performance timing helper\nexport class PerformanceTimer {\n private startTime: number;\n private logger: any;\n\n constructor(logger: any) {\n this.logger = logger;\n this.startTime = Date.now();\n }\n\n static start(logger: any, operation: string): PerformanceTimer {\n logger.verbose(`ā±ļø Starting: ${operation}`);\n return new PerformanceTimer(logger);\n }\n\n end(operation: string): number {\n const duration = Date.now() - this.startTime;\n this.logger.verbose(`ā±ļø Completed: ${operation} (${duration}ms)`);\n return duration;\n }\n}\n\nexport interface PackageJson {\n name?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n}\n\nexport interface PackageJsonLocation {\n path: string;\n packageJson: PackageJson;\n relativePath: string;\n}\n\nconst EXCLUDED_DIRECTORIES = [\n 'node_modules',\n 'dist',\n 'build',\n 'coverage',\n '.git',\n '.next',\n '.nuxt',\n 'out',\n 'public',\n 'static',\n 'assets'\n];\n\n// Batch read multiple package.json files in parallel\nexport const batchReadPackageJsonFiles = async (\n packageJsonPaths: string[],\n storage: any,\n rootDir: string\n): Promise<PackageJsonLocation[]> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, `Batch reading ${packageJsonPaths.length} package.json files`);\n\n const readPromises = packageJsonPaths.map(async (packageJsonPath): Promise<PackageJsonLocation | null> => {\n try {\n const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');\n const parsed = safeJsonParse(packageJsonContent, packageJsonPath);\n const packageJson = validatePackageJson(parsed, packageJsonPath, false);\n const relativePath = path.relative(rootDir, path.dirname(packageJsonPath));\n\n return {\n path: packageJsonPath,\n packageJson,\n relativePath: relativePath || '.'\n };\n } catch (error: any) {\n logger.debug(`Skipped invalid package.json at ${packageJsonPath}: ${error.message}`);\n return null;\n }\n });\n\n const results = await Promise.all(readPromises);\n const validResults = results.filter((result): result is PackageJsonLocation => result !== null);\n\n timer.end(`Successfully read ${validResults.length}/${packageJsonPaths.length} package.json files`);\n return validResults;\n};\n\n// Optimized recursive package.json finder with parallel processing\nexport const findAllPackageJsonFiles = async (rootDir: string, storage: any): Promise<PackageJsonLocation[]> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Optimized scanning for package.json files');\n\n // Phase 1: Find all package.json file paths in parallel\n const packageJsonPaths: string[] = [];\n\n const scanForPaths = async (currentDir: string, depth: number = 0): Promise<string[]> => {\n // Prevent infinite recursion and overly deep scanning\n if (depth > 5) {\n return [];\n }\n\n try {\n if (!await storage.exists(currentDir) || !await storage.isDirectory(currentDir)) {\n return [];\n }\n\n const items = await storage.listFiles(currentDir);\n const foundPaths: string[] = [];\n\n // Check for package.json in current directory\n if (items.includes('package.json')) {\n const packageJsonPath = path.join(currentDir, 'package.json');\n foundPaths.push(packageJsonPath);\n }\n\n // Process subdirectories in parallel\n const subdirPromises: Promise<string[]>[] = [];\n for (const item of items) {\n if (EXCLUDED_DIRECTORIES.includes(item)) {\n continue;\n }\n\n const itemPath = path.join(currentDir, item);\n subdirPromises.push(\n (async () => {\n try {\n if (await storage.isDirectory(itemPath)) {\n return await scanForPaths(itemPath, depth + 1);\n }\n } catch (error: any) {\n logger.debug(`Skipped directory ${itemPath}: ${error.message}`);\n }\n return [];\n })()\n );\n }\n\n if (subdirPromises.length > 0) {\n const subdirResults = await Promise.all(subdirPromises);\n for (const subdirPaths of subdirResults) {\n foundPaths.push(...subdirPaths);\n }\n }\n\n return foundPaths;\n } catch (error: any) {\n logger.debug(`Failed to scan directory ${currentDir}: ${error.message}`);\n return [];\n }\n };\n\n const pathsTimer = PerformanceTimer.start(logger, 'Finding all package.json paths');\n const allPaths = await scanForPaths(rootDir);\n pathsTimer.end(`Found ${allPaths.length} package.json file paths`);\n\n // Phase 2: Batch read all package.json files in parallel\n const packageJsonFiles = await batchReadPackageJsonFiles(allPaths, storage, rootDir);\n\n timer.end(`Found ${packageJsonFiles.length} valid package.json files`);\n return packageJsonFiles;\n};\n\n// Optimized package scanning with parallel processing\nexport const scanDirectoryForPackages = async (rootDir: string, storage: any): Promise<Map<string, string>> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, `Optimized package scanning: ${rootDir}`);\n const packageMap = new Map<string, string>(); // packageName -> relativePath\n\n const absoluteRootDir = path.resolve(process.cwd(), rootDir);\n logger.verbose(`Scanning directory for packages: ${absoluteRootDir}`);\n\n try {\n // Quick existence and directory check\n const existsTimer = PerformanceTimer.start(logger, `Checking directory: ${absoluteRootDir}`);\n if (!await storage.exists(absoluteRootDir) || !await storage.isDirectory(absoluteRootDir)) {\n existsTimer.end(`Directory not found or not a directory: ${absoluteRootDir}`);\n timer.end(`Directory invalid: ${rootDir}`);\n return packageMap;\n }\n existsTimer.end(`Directory verified: ${absoluteRootDir}`);\n\n // Get all items and process in parallel\n const listTimer = PerformanceTimer.start(logger, `Listing contents: ${absoluteRootDir}`);\n const items = await storage.listFiles(absoluteRootDir);\n listTimer.end(`Listed ${items.length} items`);\n\n // Create batched promises for better performance\n const BATCH_SIZE = 10; // Process directories in batches to avoid overwhelming filesystem\n const batches = [];\n\n for (let i = 0; i < items.length; i += BATCH_SIZE) {\n const batch = items.slice(i, i + BATCH_SIZE);\n batches.push(batch);\n }\n\n const processTimer = PerformanceTimer.start(logger, `Processing ${batches.length} batches of directories`);\n\n for (const batch of batches) {\n const batchPromises = batch.map(async (item: string) => {\n const itemPath = path.join(absoluteRootDir, item);\n try {\n if (await storage.isDirectory(itemPath)) {\n const packageJsonPath = path.join(itemPath, 'package.json');\n\n if (await storage.exists(packageJsonPath)) {\n const packageJsonContent = await storage.readFile(packageJsonPath, 'utf-8');\n const parsed = safeJsonParse(packageJsonContent, packageJsonPath);\n const packageJson = validatePackageJson(parsed, packageJsonPath);\n\n if (packageJson.name) {\n const relativePath = path.relative(process.cwd(), itemPath);\n return { name: packageJson.name, path: relativePath };\n }\n }\n }\n } catch (error: any) {\n logger.debug(`Skipped ${itemPath}: ${error.message || error}`);\n }\n return null;\n });\n\n const batchResults = await Promise.all(batchPromises);\n\n for (const result of batchResults) {\n if (result) {\n packageMap.set(result.name, result.path);\n logger.debug(`Found package: ${result.name} at ${result.path}`);\n }\n }\n }\n\n processTimer.end(`Processed ${items.length} directories in ${batches.length} batches`);\n logger.verbose(`Found ${packageMap.size} packages in ${items.length} subdirectories`);\n } catch (error) {\n logger.warn(`PERFORMANCE_DIR_READ_FAILED: Unable to read directory | Directory: ${absoluteRootDir} | Error: ${error}`);\n }\n\n timer.end(`Found ${packageMap.size} packages in: ${rootDir}`);\n return packageMap;\n};\n\n// Parallel scope processing for better performance\nexport const findPackagesByScope = async (\n dependencies: Record<string, string>,\n scopeRoots: Record<string, string>,\n storage: any\n): Promise<Map<string, string>> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Finding packages by scope (optimized)');\n const workspacePackages = new Map<string, string>();\n\n logger.silly(`Checking dependencies against scope roots: ${JSON.stringify(scopeRoots)}`);\n\n // Process all scopes in parallel for maximum performance\n const scopeTimer = PerformanceTimer.start(logger, 'Parallel scope scanning');\n const scopePromises = Object.entries(scopeRoots).map(async ([scope, rootDir]) => {\n logger.verbose(`Scanning scope ${scope} at root directory: ${rootDir}`);\n const scopePackages = await scanDirectoryForPackages(rootDir, storage);\n\n // Filter packages that match the scope\n const matchingPackages: Array<[string, string]> = [];\n for (const [packageName, packagePath] of scopePackages) {\n if (packageName.startsWith(scope)) {\n matchingPackages.push([packageName, packagePath]);\n logger.debug(`Registered package: ${packageName} -> ${packagePath}`);\n }\n }\n return { scope, packages: matchingPackages };\n });\n\n const allScopeResults = await Promise.all(scopePromises);\n\n // Aggregate all packages from all scopes\n const allPackages = new Map<string, string>();\n for (const { scope, packages } of allScopeResults) {\n for (const [packageName, packagePath] of packages) {\n allPackages.set(packageName, packagePath);\n }\n }\n\n scopeTimer.end(`Scanned ${Object.keys(scopeRoots).length} scope roots, found ${allPackages.size} packages`);\n\n // Match dependencies to available packages\n const matchTimer = PerformanceTimer.start(logger, 'Matching dependencies to packages');\n for (const [depName, depVersion] of Object.entries(dependencies)) {\n logger.debug(`Processing dependency: ${depName}@${depVersion}`);\n\n if (allPackages.has(depName)) {\n const packagePath = allPackages.get(depName)!;\n workspacePackages.set(depName, packagePath);\n logger.verbose(`Found sibling package: ${depName} at ${packagePath}`);\n }\n }\n matchTimer.end(`Matched ${workspacePackages.size} dependencies to workspace packages`);\n\n timer.end(`Found ${workspacePackages.size} packages to link`);\n return workspacePackages;\n};\n\n// Utility to collect all dependencies from package.json files efficiently\nexport const collectAllDependencies = (packageJsonFiles: PackageJsonLocation[]): Record<string, string> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Collecting all dependencies');\n\n const allDependencies: Record<string, string> = {};\n for (const { packageJson } of packageJsonFiles) {\n Object.assign(allDependencies, packageJson.dependencies);\n Object.assign(allDependencies, packageJson.devDependencies);\n Object.assign(allDependencies, packageJson.peerDependencies);\n }\n\n timer.end(`Collected ${Object.keys(allDependencies).length} unique dependencies`);\n return allDependencies;\n};\n\n// Utility to check for file: dependencies\nexport const checkForFileDependencies = (packageJsonFiles: PackageJsonLocation[]): void => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Checking for file: dependencies');\n const filesWithFileDepedencies: Array<{path: string, dependencies: string[]}> = [];\n\n for (const { path: packagePath, packageJson, relativePath } of packageJsonFiles) {\n const fileDeps: string[] = [];\n\n // Check all dependency types for file: paths\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies\n };\n\n for (const [name, version] of Object.entries(allDeps)) {\n if (version.startsWith('file:')) {\n fileDeps.push(`${name}: ${version}`);\n }\n }\n\n if (fileDeps.length > 0) {\n filesWithFileDepedencies.push({\n path: relativePath,\n dependencies: fileDeps\n });\n }\n }\n\n if (filesWithFileDepedencies.length > 0) {\n logger.warn('FILE_DEPS_WARNING: Found file: dependencies that should not be committed | Count: ' + filesWithFileDepedencies.length + ' | Impact: May cause build issues');\n for (const file of filesWithFileDepedencies) {\n logger.warn(`FILE_DEPS_PACKAGE: Package with file dependencies | Path: ${file.path}`);\n for (const dep of file.dependencies) {\n logger.warn(`FILE_DEPS_DETAIL: File dependency detected | Dependency: ${dep}`);\n }\n }\n logger.warn('');\n logger.warn('FILE_DEPS_RESOLUTION: Action required before committing | Command: kodrdriv unlink | Purpose: Restore registry versions');\n logger.warn('FILE_DEPS_PREVENTION: Alternative option | Action: Add pre-commit hook | Purpose: Prevent accidental commits of linked dependencies');\n }\n\n timer.end(`Checked ${packageJsonFiles.length} files, found ${filesWithFileDepedencies.length} with file: dependencies`);\n};\n","#!/usr/bin/env node\nimport { getLogger, Config } from '@eldrforge/core';\nimport { run } from '@eldrforge/git-tools';\nimport { optimizePrecommitCommand, recordTestRun } from '../util/precommitOptimizations';\nimport { PerformanceTimer } from '../util/performance';\nimport path from 'path';\n\n/**\n * Execute precommit checks: lint -> build -> test\n * Skips clean step (clean should be run separately if needed)\n * Uses optimization to skip steps when unchanged\n */\nexport const execute = async (runConfig: Config): Promise<string> => {\n const logger = getLogger();\n const isDryRun = runConfig.dryRun || false;\n const packageDir = process.cwd();\n\n // Default command: lint -> build -> test (no clean)\n const defaultCommand = 'npm run lint && npm run build && npm run test';\n\n // Check if package.json has a precommit script\n let commandToRun = defaultCommand;\n try {\n const fs = await import('fs/promises');\n const packageJsonPath = path.join(packageDir, 'package.json');\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageJsonContent);\n\n // If there's a precommit script, check what it does\n if (packageJson.scripts?.precommit) {\n const precommitScript = packageJson.scripts.precommit;\n // If it includes clean, we'll optimize it out\n // Otherwise, use the precommit script directly\n if (!precommitScript.includes('clean')) {\n commandToRun = `npm run precommit`;\n } else {\n // Use default command (lint -> build -> test) if precommit includes clean\n commandToRun = defaultCommand;\n }\n }\n } catch (error: any) {\n logger.debug(`Could not read package.json, using default command: ${error.message}`);\n }\n\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute: ${commandToRun}`);\n return `DRY RUN: Would run precommit checks: ${commandToRun}`;\n }\n\n // Optimize the command (skip clean/test if unchanged)\n let optimizedCommand = commandToRun;\n let optimizationInfo: { skipped: { clean: boolean; test: boolean }; reasons: { clean?: string; test?: string } } | null = null;\n\n try {\n const optimization = await optimizePrecommitCommand(packageDir, commandToRun);\n optimizedCommand = optimization.optimizedCommand;\n optimizationInfo = { skipped: optimization.skipped, reasons: optimization.reasons };\n\n if (optimization.skipped.clean || optimization.skipped.test) {\n const skippedParts: string[] = [];\n if (optimization.skipped.clean) {\n skippedParts.push(`clean (${optimization.reasons.clean})`);\n }\n if (optimization.skipped.test) {\n skippedParts.push(`test (${optimization.reasons.test})`);\n }\n logger.info(`⚔ Optimized: Skipped ${skippedParts.join(', ')}`);\n if (runConfig.verbose || runConfig.debug) {\n logger.info(` Original: ${commandToRun}`);\n logger.info(` Optimized: ${optimizedCommand}`);\n }\n }\n } catch (error: any) {\n logger.debug(`Precommit optimization failed: ${error.message}`);\n }\n\n // Execute the optimized command\n const timer = PerformanceTimer.start(logger, 'Precommit checks');\n try {\n logger.info(`šŸ”§ Running precommit checks: ${optimizedCommand}`);\n await run(optimizedCommand, { cwd: packageDir });\n\n const duration = timer.end('Precommit checks');\n const seconds = (duration / 1000).toFixed(1);\n logger.info(`āœ… Precommit checks passed (${seconds}s)`);\n\n // Record test run if tests were executed (not skipped)\n if (optimizedCommand.includes('test') && (!optimizationInfo || !optimizationInfo.skipped.test)) {\n try {\n await recordTestRun(packageDir);\n } catch (error: any) {\n logger.debug(`Failed to record test run: ${error.message}`);\n }\n }\n\n return `Precommit checks completed successfully in ${seconds}s`;\n } catch (error: any) {\n timer.end('Precommit checks');\n logger.error(`āŒ Precommit checks failed: ${error.message}`);\n throw error;\n }\n};\n\n","#!/usr/bin/env node\nimport { DEFAULT_OUTPUT_DIRECTORY, getDryRunLogger, getLogger, Config } from '@eldrforge/core';\nimport { FileOperationError, createStorage } from '@eldrforge/shared';\n\nconst executeInternal = async (runConfig: Config): Promise<void> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const storage = createStorage();\n\n const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\n\n if (isDryRun) {\n logger.info(`CLEAN_DRY_RUN: Would remove output directory | Mode: dry-run | Directory: ${outputDirectory} | Action: Would delete if exists`);\n logger.info(`CLEAN_CHECK_DRY_RUN: Would check directory existence | Mode: dry-run | Directory: ${outputDirectory}`);\n logger.info('CLEAN_REMOVE_DRY_RUN: Would remove directory if present | Mode: dry-run | Action: Delete');\n return;\n }\n\n logger.info(`CLEAN_STARTING: Removing output directory | Directory: ${outputDirectory} | Action: Delete | Purpose: Clean generated files`);\n\n try {\n if (await storage.exists(outputDirectory)) {\n await storage.removeDirectory(outputDirectory);\n logger.info(`CLEAN_SUCCESS: Successfully removed output directory | Directory: ${outputDirectory} | Status: deleted`);\n } else {\n logger.info(`CLEAN_NOT_EXISTS: Output directory does not exist | Directory: ${outputDirectory} | Status: nothing-to-clean`);\n }\n } catch (error: any) {\n logger.error(`CLEAN_FAILED: Failed to clean output directory | Directory: ${outputDirectory} | Error: ${error.message}`);\n throw new FileOperationError('Failed to remove output directory', outputDirectory, error);\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<void> => {\n try {\n await executeInternal(runConfig);\n } catch (error: any) {\n const logger = getLogger();\n\n if (error instanceof FileOperationError) {\n logger.error(`CLEAN_COMMAND_FAILED: Clean command failed | Error: ${error.message}`);\n if (error.cause && typeof error.cause === 'object' && 'message' in error.cause) {\n logger.debug(`Caused by: ${(error.cause as Error).message}`);\n }\n throw error;\n }\n\n // Unexpected errors\n logger.error(`CLEAN_UNEXPECTED_ERROR: Clean encountered unexpected error | Error: ${error.message} | Type: unexpected`);\n throw error;\n }\n};\n","#!/usr/bin/env node\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Formatter, Model, Request } from '@riotprompt/riotprompt';\nimport type { ChatCompletionMessageParam } from 'openai/resources';\nimport { ValidationError, FileOperationError, CommandError, createStorage } from '@eldrforge/shared';\nimport {\n getLogger,\n Config,\n Log,\n Diff,\n DEFAULT_EXCLUDED_PATTERNS,\n DEFAULT_OUTPUT_DIRECTORY,\n getOutputPath,\n getTimestampedRequestFilename,\n getTimestampedResponseFilename,\n getTimestampedReviewFilename,\n getTimestampedReviewNotesFilename,\n toAIConfig,\n createStorageAdapter,\n createLoggerAdapter,\n filterContent,\n} from '@eldrforge/core';\nimport {\n createCompletion,\n getUserChoice,\n createReviewPrompt,\n ReviewContent,\n ReviewContext,\n} from '@eldrforge/ai-service';\nimport { getReleaseNotesContent, getIssuesContent, handleIssueCreation, type Issue, type ReviewResult } from '@eldrforge/github-tools';\nimport path from 'path';\nimport os from 'os';\nimport { spawn } from 'child_process';\nimport fs from 'fs/promises';\n\n// Utility function to read a review note from a file\nconst readReviewNoteFromFile = async (filePath: string): Promise<string> => {\n const logger = getLogger();\n\n try {\n logger.debug(`Reading review note from file: ${filePath}`);\n const content = await fs.readFile(filePath, 'utf8');\n\n if (!content.trim()) {\n throw new ValidationError(`Review file is empty: ${filePath}`);\n }\n\n logger.debug(`Successfully read review note from file: ${filePath} (${content.length} characters)`);\n return content.trim();\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n throw new FileOperationError(`Review file not found: ${filePath}`, filePath, error);\n }\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new FileOperationError(`Failed to read review file: ${error.message}`, filePath, error);\n }\n};\n\n// Utility function to get all review files in a directory\nconst getReviewFilesInDirectory = async (directoryPath: string): Promise<string[]> => {\n const logger = getLogger();\n\n try {\n logger.debug(`Scanning directory for review files: ${directoryPath}`);\n const entries = await fs.readdir(directoryPath, { withFileTypes: true });\n\n // Filter for regular files (not directories) and get full paths\n const files = entries\n .filter(entry => entry.isFile())\n .map(entry => path.join(directoryPath, entry.name))\n .sort(); // Sort alphabetically\n\n logger.debug(`Found ${files.length} files in directory: ${directoryPath}`);\n return files;\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n throw new FileOperationError(`Directory not found: ${directoryPath}`, directoryPath, error);\n }\n throw new FileOperationError(`Failed to read directory: ${directoryPath}`, directoryPath, error);\n }\n};\n\n// Utility function to confirm processing of individual files\nconst confirmFileProcessing = async (filePath: string, senditMode: boolean): Promise<boolean> => {\n const logger = getLogger();\n\n if (senditMode) {\n logger.info(`REVIEW_FILE_PROCESSING: Processing review file automatically | File: ${filePath} | Mode: sendit | Confirmation: auto`);\n return true;\n }\n\n // Check if we're in an interactive environment\n if (!isTTYSafe()) {\n logger.warn(`REVIEW_NON_INTERACTIVE: Non-interactive environment detected | File: ${filePath} | Action: Skipping confirmation | Mode: non-interactive`);\n return true;\n }\n\n // For interactive mode, we'll use a simple prompt\n // In a real implementation, you might want to use a more sophisticated prompt library\n logger.info(`\\nREVIEW_FILE_PROMPT: Review file ready for processing | File: ${filePath}`);\n logger.info('REVIEW_FILE_ACTION: Press Enter to process or type \"skip\" to skip | Options: [Enter]=process, \"skip\"=skip');\n\n // This is a simplified confirmation - in practice you might want to use a proper prompt library\n return new Promise((resolve) => {\n process.stdin.once('data', (data) => {\n const input = data.toString().trim().toLowerCase();\n if (input === 'skip' || input === 'n' || input === 'no') {\n logger.info(`REVIEW_FILE_SKIPPED: User chose to skip file | File: ${filePath} | Action: skipped`);\n resolve(false);\n } else {\n logger.info(`REVIEW_FILE_PROCESSING: User confirmed file for processing | File: ${filePath} | Action: processing`);\n resolve(true);\n }\n });\n });\n};\n\n// New function for file selection phase\nconst selectFilesForProcessing = async (reviewFiles: string[], senditMode: boolean): Promise<string[]> => {\n const logger = getLogger();\n\n if (senditMode) {\n logger.info(`REVIEW_AUTO_SELECT: Auto-selecting all files for processing | Mode: sendit | File Count: ${reviewFiles.length} | Confirmation: automatic`);\n return reviewFiles;\n }\n\n // Check if we're in an interactive environment\n if (!isTTYSafe()) {\n logger.warn(`REVIEW_NON_INTERACTIVE_SELECT: Non-interactive environment detected | Action: Selecting all files | Mode: non-interactive`);\n return reviewFiles;\n }\n\n logger.info(`\\nREVIEW_SELECTION_PHASE: Starting file selection phase | File Count: ${reviewFiles.length} | Purpose: Choose files to process`);\n logger.info(`REVIEW_SELECTION_FILES: Found files to review | Count: ${reviewFiles.length} | Action: Select files for processing`);\n logger.info(`REVIEW_SELECTION_OPTIONS: File selection options available | [c]=Confirm | [s]=Skip | [a]=Abort`);\n logger.info(``);\n\n const selectedFiles: string[] = [];\n let shouldAbort = false;\n\n for (let i = 0; i < reviewFiles.length; i++) {\n const filePath = reviewFiles[i];\n logger.info(`REVIEW_SELECTION_FILE: File for review | Progress: ${i + 1}/${reviewFiles.length} | File: ${filePath}`);\n\n const choice = await getUserChoice(\n `Select action for this file:`,\n [\n { key: 'c', label: 'Confirm and process' },\n { key: 's', label: 'Skip this file' },\n { key: 'a', label: 'Abort entire review' }\n ]\n );\n\n if (choice === 'a') {\n logger.info(`REVIEW_ABORTED: User aborted review process | Action: Aborting | Reason: User request`);\n shouldAbort = true;\n break;\n } else if (choice === 'c') {\n selectedFiles.push(filePath);\n logger.info(`REVIEW_FILE_SELECTED: File selected for processing | File: ${filePath} | Action: Will be processed`);\n } else if (choice === 's') {\n logger.info(`REVIEW_FILE_SKIPPED: File skipped during selection | File: ${filePath} | Action: Will not be processed`);\n }\n }\n\n if (shouldAbort) {\n throw new Error('Review process aborted by user');\n }\n\n if (selectedFiles.length === 0) {\n throw new Error('No files were selected for processing');\n }\n\n logger.info(`\\nšŸ“‹ File selection complete. ${selectedFiles.length} files selected for processing:`);\n selectedFiles.forEach((file, index) => {\n logger.info(` ${index + 1}. ${file}`);\n });\n logger.info(``);\n\n return selectedFiles;\n};\n\n// Safe temp file handling with proper permissions and validation\nconst createSecureTempFile = async (): Promise<string> => {\n const logger = getLogger();\n const tmpDir = os.tmpdir();\n\n // Ensure temp directory exists and is writable\n try {\n // Use constant value directly to avoid import restrictions\n const W_OK = 2; // fs.constants.W_OK value\n await fs.access(tmpDir, W_OK);\n } catch (error: any) {\n logger.error(`TEMP_DIR_NOT_WRITABLE: Temporary directory is not writable | Directory: ${tmpDir} | Impact: Cannot create temp files`);\n throw new FileOperationError(`Temp directory not writable: ${error.message}`, tmpDir, error);\n }\n\n const tmpFilePath = path.join(tmpDir, `kodrdriv_review_${Date.now()}_${Math.random().toString(36).substring(7)}.md`);\n\n // Create file with restrictive permissions (owner read/write only)\n try {\n const fd = await fs.open(tmpFilePath, 'w', 0o600);\n await fd.close();\n logger.debug(`Created secure temp file: ${tmpFilePath}`);\n return tmpFilePath;\n } catch (error: any) {\n logger.error(`TEMP_FILE_CREATE_FAILED: Unable to create temporary file | Error: ${error.message} | Impact: Cannot proceed with review`);\n throw new FileOperationError(`Failed to create temp file: ${error.message}`, 'temporary file', error);\n }\n};\n\n// Safe file cleanup with proper error handling\nconst cleanupTempFile = async (filePath: string): Promise<void> => {\n const logger = getLogger();\n try {\n await fs.unlink(filePath);\n logger.debug(`Cleaned up temp file: ${filePath}`);\n } catch (error: any) {\n // Only ignore ENOENT (file not found) errors, log others\n if (error.code !== 'ENOENT') {\n logger.warn(`TEMP_FILE_CLEANUP_FAILED: Unable to cleanup temporary file | File: ${filePath} | Error: ${error.message} | Impact: File may remain`);\n // Don't throw here to avoid masking the main operation\n }\n }\n};\n\n// Editor with optional timeout and proper error handling\nconst openEditorWithTimeout = async (editorCmd: string, filePath: string, timeoutMs?: number): Promise<void> => {\n const logger = getLogger();\n\n return new Promise((resolve, reject) => {\n if (timeoutMs) {\n logger.debug(`Opening editor: ${editorCmd} ${filePath} (timeout: ${timeoutMs}ms)`);\n } else {\n logger.debug(`Opening editor: ${editorCmd} ${filePath} (no timeout)`);\n }\n\n const child = spawn(editorCmd, [filePath], {\n stdio: 'inherit',\n shell: false // Prevent shell injection\n });\n\n let timeout: NodeJS.Timeout | undefined;\n let timeoutCleared = false;\n\n const clearTimeoutSafely = () => {\n if (timeout && !timeoutCleared) {\n clearTimeout(timeout);\n timeoutCleared = true;\n }\n };\n\n if (timeoutMs) {\n timeout = setTimeout(() => {\n clearTimeoutSafely(); // Clear the timeout immediately when it fires\n logger.warn(`Editor timed out after ${timeoutMs}ms, terminating...`);\n child.kill('SIGTERM');\n\n // Give it a moment to terminate gracefully, then force kill\n setTimeout(() => {\n if (!child.killed) {\n logger.warn('Editor did not terminate gracefully, force killing...');\n child.kill('SIGKILL');\n }\n }, 5000);\n\n reject(new Error(`Editor '${editorCmd}' timed out after ${timeoutMs}ms. Consider using a different editor or increasing the timeout.`));\n }, timeoutMs);\n }\n\n child.on('exit', (code, signal) => {\n clearTimeoutSafely();\n logger.debug(`Editor exited with code ${code}, signal ${signal}`);\n\n if (signal === 'SIGTERM' || signal === 'SIGKILL') {\n reject(new Error(`Editor was terminated (${signal})`));\n } else if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Editor exited with non-zero code: ${code}`));\n }\n });\n\n child.on('error', (error) => {\n clearTimeoutSafely();\n logger.error(`Editor error: ${error.message}`);\n reject(new Error(`Failed to launch editor '${editorCmd}': ${error.message}`));\n });\n });\n};\n\n// Validate API response format before use\nconst validateReviewResult = (data: any): ReviewResult => {\n if (!data || typeof data !== 'object') {\n throw new Error('Invalid API response: expected object, got ' + typeof data);\n }\n\n if (typeof data.summary !== 'string') {\n throw new Error('Invalid API response: missing or invalid summary field');\n }\n\n if (typeof data.totalIssues !== 'number' || data.totalIssues < 0) {\n throw new Error('Invalid API response: missing or invalid totalIssues field');\n }\n\n if (data.issues && !Array.isArray(data.issues)) {\n throw new Error('Invalid API response: issues field must be an array');\n }\n\n // Validate each issue if present\n if (data.issues) {\n for (let i = 0; i < data.issues.length; i++) {\n const issue = data.issues[i];\n if (!issue || typeof issue !== 'object') {\n throw new Error(`Invalid API response: issue ${i} is not an object`);\n }\n if (typeof issue.title !== 'string') {\n throw new Error(`Invalid API response: issue ${i} missing title`);\n }\n if (typeof issue.priority !== 'string') {\n throw new Error(`Invalid API response: issue ${i} missing priority`);\n }\n }\n }\n\n return data as ReviewResult;\n};\n\n// Enhanced TTY detection with fallback handling\nconst isTTYSafe = (): boolean => {\n try {\n // Primary check\n if (process.stdin.isTTY === false) {\n return false;\n }\n\n // Additional checks for edge cases\n if (process.stdin.isTTY === true) {\n return true;\n }\n\n // Handle undefined case (some environments)\n if (process.stdin.isTTY === undefined) {\n // Check if we can reasonably assume interactive mode\n return process.stdout.isTTY === true && process.stderr.isTTY === true;\n }\n\n return false;\n } catch (error) {\n // If TTY detection fails entirely, assume non-interactive\n getLogger().debug(`TTY detection failed: ${error}, assuming non-interactive`);\n return false;\n }\n};\n\n// Safe file write with disk space and permission validation\nconst safeWriteFile = async (filePath: string, content: string, encoding: BufferEncoding = 'utf-8'): Promise<void> => {\n const logger = getLogger();\n\n try {\n // Check if parent directory exists and is writable\n const parentDir = path.dirname(filePath);\n const W_OK = 2; // fs.constants.W_OK value\n await fs.access(parentDir, W_OK);\n\n // Check available disk space (basic check by writing a small test)\n const testFile = `${filePath}.test`;\n try {\n await fs.writeFile(testFile, 'test', encoding);\n await fs.unlink(testFile);\n } catch (error: any) {\n if (error.code === 'ENOSPC') {\n throw new Error(`Insufficient disk space to write file: ${filePath}`);\n }\n throw error;\n }\n\n // Write the actual file\n await fs.writeFile(filePath, content, encoding);\n logger.debug(`Successfully wrote file: ${filePath} (${content.length} characters)`);\n\n } catch (error: any) {\n logger.error(`Failed to write file ${filePath}: ${error.message}`);\n throw new Error(`Failed to write file ${filePath}: ${error.message}`);\n }\n};\n\n// Helper function to process a single review note\nconst processSingleReview = async (reviewNote: string, runConfig: Config, outputDirectory: string): Promise<ReviewResult> => {\n const logger = getLogger();\n\n // Gather additional context based on configuration with improved error handling\n let logContext = '';\n let diffContext = '';\n let releaseNotesContext = '';\n let issuesContext = '';\n const contextErrors: string[] = [];\n\n // Fetch commit history if enabled\n if (runConfig.review?.includeCommitHistory) {\n try {\n logger.debug('Fetching recent commit history...');\n const log = await Log.create({\n limit: runConfig.review.commitHistoryLimit\n });\n const logContent = await log.get();\n if (logContent.trim()) {\n logContext += `\\n\\n[Recent Commit History]\\n${logContent}`;\n logger.debug('Added commit history to context (%d characters)', logContent.length);\n }\n } catch (error: any) {\n const errorMsg = `Failed to fetch commit history: ${error.message}`;\n logger.warn(errorMsg);\n contextErrors.push(errorMsg);\n }\n }\n\n // Fetch recent diffs if enabled\n if (runConfig.review?.includeRecentDiffs) {\n try {\n logger.debug('Fetching recent commit diffs...');\n const basePatterns = runConfig.excludedPatterns ?? DEFAULT_EXCLUDED_PATTERNS;\n const recentDiffs = await Diff.getRecentDiffsForReview({\n limit: runConfig.review.diffHistoryLimit,\n baseExcludedPatterns: basePatterns\n });\n diffContext += recentDiffs;\n if (recentDiffs.trim()) {\n logger.debug('Added recent diffs to context (%d characters)', recentDiffs.length);\n }\n } catch (error: any) {\n const errorMsg = `Failed to fetch recent diffs: ${error.message}`;\n logger.warn(errorMsg);\n contextErrors.push(errorMsg);\n }\n }\n\n // Fetch release notes if enabled\n if (runConfig.review?.includeReleaseNotes) {\n try {\n logger.debug('Fetching recent release notes from GitHub...');\n const releaseNotesContent = await getReleaseNotesContent({\n limit: runConfig.review.releaseNotesLimit || 3\n });\n if (releaseNotesContent.trim()) {\n releaseNotesContext += `\\n\\n[Recent Release Notes]\\n${releaseNotesContent}`;\n logger.debug('Added release notes to context (%d characters)', releaseNotesContent.length);\n }\n } catch (error: any) {\n const errorMsg = `Failed to fetch release notes: ${error.message}`;\n logger.warn(errorMsg);\n contextErrors.push(errorMsg);\n }\n }\n\n // Fetch GitHub issues if enabled\n if (runConfig.review?.includeGithubIssues) {\n try {\n logger.debug('Fetching open GitHub issues...');\n issuesContext = await getIssuesContent({\n limit: runConfig.review.githubIssuesLimit || 20\n });\n if (issuesContext.trim()) {\n logger.debug('Added GitHub issues to context (%d characters)', issuesContext.length);\n }\n } catch (error: any) {\n const errorMsg = `Failed to fetch GitHub issues: ${error.message}`;\n logger.warn(errorMsg);\n contextErrors.push(errorMsg);\n }\n }\n\n // Report context gathering results\n if (contextErrors.length > 0) {\n logger.warn(`Context gathering completed with ${contextErrors.length} error(s):`);\n contextErrors.forEach(error => logger.warn(` - ${error}`));\n\n // For critical operations, consider failing if too many context sources fail\n const maxContextErrors = runConfig.review?.maxContextErrors || contextErrors.length; // Default: allow all errors\n if (contextErrors.length > maxContextErrors) {\n throw new Error(`Too many context gathering errors (${contextErrors.length}), aborting review. Consider checking your configuration and network connectivity.`);\n }\n }\n\n // Analyze review note for issues using OpenAI\n logger.info('REVIEW_ANALYSIS_STARTING: Analyzing review note for project issues | Source: review note | Purpose: Identify actionable issues');\n logger.debug('Context summary:');\n logger.debug(' - Review note: %d chars', reviewNote.length);\n logger.debug(' - Log context: %d chars', logContext.length);\n logger.debug(' - Diff context: %d chars', diffContext.length);\n logger.debug(' - Release notes context: %d chars', releaseNotesContext.length);\n logger.debug(' - Issues context: %d chars', issuesContext.length);\n logger.debug(' - User context: %d chars', runConfig.review?.context?.length || 0);\n\n const promptConfig = {\n overridePaths: (runConfig as any).discoveredConfigDirs || [],\n overrides: runConfig.overrides || false,\n };\n // Create adapters for ai-service\n const aiConfig = toAIConfig(runConfig);\n const aiStorageAdapter = createStorageAdapter(outputDirectory);\n const aiLogger = createLoggerAdapter(runConfig.dryRun || false);\n\n const promptContent: ReviewContent = {\n notes: reviewNote,\n };\n const promptContext: ReviewContext = {\n context: runConfig.review?.context,\n logContext,\n diffContext,\n releaseNotesContext,\n issuesContext,\n };\n const prompt = await createReviewPrompt(promptConfig, promptContent, promptContext);\n\n const modelToUse = aiConfig.commands?.review?.model || aiConfig.model || 'gpt-4o-mini';\n const request: Request = Formatter.create({ logger }).formatPrompt(modelToUse as Model, prompt);\n\n let analysisResult: ReviewResult;\n try {\n const rawResult = await createCompletion(request.messages as ChatCompletionMessageParam[], {\n model: modelToUse,\n openaiReasoning: aiConfig.commands?.review?.reasoning || aiConfig.reasoning,\n responseFormat: { type: 'json_object' },\n debug: runConfig.debug,\n debugRequestFile: getOutputPath(outputDirectory, getTimestampedRequestFilename('review-analysis')),\n debugResponseFile: getOutputPath(outputDirectory, getTimestampedResponseFilename('review-analysis')),\n storage: aiStorageAdapter,\n logger: aiLogger,\n });\n\n // Validate the API response before using it\n const rawAnalysisResult = validateReviewResult(rawResult);\n\n // Apply stop-context filtering to issues\n analysisResult = {\n ...rawAnalysisResult,\n summary: filterContent(rawAnalysisResult.summary, runConfig.stopContext).filtered,\n issues: rawAnalysisResult.issues?.map(issue => ({\n ...issue,\n title: filterContent(issue.title, runConfig.stopContext).filtered,\n description: filterContent(issue.description || '', runConfig.stopContext).filtered,\n })),\n };\n\n } catch (error: any) {\n logger.error(`REVIEW_ANALYSIS_FAILED: Unable to analyze review note | Error: ${error.message} | Impact: Cannot identify issues`);\n throw new Error(`Review analysis failed: ${error.message}`);\n }\n\n logger.info('REVIEW_ANALYSIS_COMPLETE: Review note analysis completed successfully | Status: completed | Next: Issue creation if enabled');\n logger.debug('Analysis result summary: %s', analysisResult.summary);\n logger.debug('Total issues found: %d', analysisResult.totalIssues);\n logger.debug('Issues array length: %d', analysisResult.issues?.length || 0);\n if (analysisResult.issues && analysisResult.issues.length > 0) {\n analysisResult.issues.forEach((issue, index) => {\n logger.debug(' Issue %d: [%s] %s', index + 1, issue.priority, issue.title);\n });\n }\n\n // Save timestamped copy of analysis result to output directory\n try {\n const reviewFilename = getTimestampedReviewFilename();\n const reviewPath = getOutputPath(outputDirectory, reviewFilename);\n\n // Format the analysis result as markdown\n const reviewContent = `# Review Analysis Result\\n\\n` +\n `## Summary\\n${analysisResult.summary}\\n\\n` +\n `## Total Issues Found\\n${analysisResult.totalIssues}\\n\\n` +\n `## Issues\\n\\n${JSON.stringify(analysisResult.issues, null, 2)}\\n\\n` +\n `---\\n\\n*Analysis completed at ${new Date().toISOString()}*`;\n\n await safeWriteFile(reviewPath, reviewContent);\n logger.debug('Saved timestamped review analysis: %s', reviewPath);\n } catch (error: any) {\n logger.warn('Failed to save timestamped review analysis: %s', error.message);\n // Don't fail the entire operation for this\n }\n\n return analysisResult;\n};\n\nconst executeInternal = async (runConfig: Config): Promise<string> => {\n const logger = getLogger();\n const isDryRun = runConfig.dryRun || false;\n\n // Show configuration even in dry-run mode\n logger.debug('Review context configuration:');\n logger.debug(' Include commit history: %s', runConfig.review?.includeCommitHistory);\n logger.debug(' Include recent diffs: %s', runConfig.review?.includeRecentDiffs);\n logger.debug(' Include release notes: %s', runConfig.review?.includeReleaseNotes);\n logger.debug(' Include GitHub issues: %s', runConfig.review?.includeGithubIssues);\n logger.debug(' Commit history limit: %d', runConfig.review?.commitHistoryLimit);\n logger.debug(' Diff history limit: %d', runConfig.review?.diffHistoryLimit);\n logger.debug(' Release notes limit: %d', runConfig.review?.releaseNotesLimit);\n logger.debug(' GitHub issues limit: %d', runConfig.review?.githubIssuesLimit);\n logger.debug(' Sendit mode (auto-create issues): %s', runConfig.review?.sendit);\n logger.debug(' File: %s', runConfig.review?.file || 'not specified');\n logger.debug(' Directory: %s', runConfig.review?.directory || 'not specified');\n\n if (isDryRun) {\n if (runConfig.review?.file) {\n logger.info('DRY RUN: Would read review note from file: %s', runConfig.review.file);\n } else if (runConfig.review?.directory) {\n logger.info('DRY RUN: Would process review files in directory: %s', runConfig.review.directory);\n logger.info('DRY RUN: Would first select which files to process, then analyze selected files');\n } else if (runConfig.review?.note) {\n logger.info('DRY RUN: Would analyze provided note for review');\n } else {\n logger.info('DRY RUN: Would open editor to capture review note');\n }\n\n logger.info('DRY RUN: Would gather additional context based on configuration above');\n logger.info('DRY RUN: Would analyze note and identify issues');\n\n if (runConfig.review?.sendit) {\n logger.info('DRY RUN: Would automatically create GitHub issues (sendit mode enabled)');\n } else {\n logger.info('DRY RUN: Would prompt for confirmation before creating GitHub issues');\n }\n\n // Show what exclusion patterns would be used in dry-run mode\n if (runConfig.review?.includeRecentDiffs) {\n const basePatterns = runConfig.excludedPatterns ?? DEFAULT_EXCLUDED_PATTERNS;\n const reviewExcluded = Diff.getReviewExcludedPatterns(basePatterns);\n logger.info('DRY RUN: Would use %d exclusion patterns for diff context', reviewExcluded.length);\n logger.debug('DRY RUN: Sample exclusions: %s', reviewExcluded.slice(0, 15).join(', ') +\n (reviewExcluded.length > 15 ? '...' : ''));\n }\n\n return 'DRY RUN: Review command would analyze note, gather context, and create GitHub issues';\n }\n\n // Enhanced TTY check with proper error handling\n const isInteractive = isTTYSafe();\n if (!isInteractive && !runConfig.review?.sendit) {\n logger.error('āŒ STDIN is piped but --sendit flag is not enabled');\n logger.error(' Interactive prompts cannot be used when input is piped');\n logger.error(' Solutions:');\n logger.error(' • Add --sendit flag to auto-create all issues');\n logger.error(' • Use terminal input instead of piping');\n logger.error(' • Example: echo \"note\" | kodrdriv review --sendit');\n throw new ValidationError('Piped input requires --sendit flag for non-interactive operation');\n }\n\n // Get the review note from configuration\n let reviewNote = runConfig.review?.note;\n let reviewFiles: string[] = [];\n\n // Check if we should process a single file\n if (runConfig.review?.file) {\n logger.info(`šŸ“ Reading review note from file: ${runConfig.review.file}`);\n reviewNote = await readReviewNoteFromFile(runConfig.review.file);\n reviewFiles = [runConfig.review.file];\n }\n // Check if we should process a directory\n else if (runConfig.review?.directory) {\n logger.info(`šŸ“ Processing review files in directory: ${runConfig.review.directory}`);\n reviewFiles = await getReviewFilesInDirectory(runConfig.review.directory);\n\n if (reviewFiles.length === 0) {\n throw new ValidationError(`No review files found in directory: ${runConfig.review.directory}`);\n }\n\n logger.info(`šŸ“ Found ${reviewFiles.length} files to process`);\n\n // Set a dummy reviewNote for directory mode to satisfy validation\n // The actual review notes will be read from each file during processing\n reviewNote = `Processing ${reviewFiles.length} files from directory`;\n\n // If not in sendit mode, explain the two-phase process\n if (!runConfig.review?.sendit) {\n logger.info(`šŸ“ Interactive mode: You will first select which files to process, then they will be analyzed in order.`);\n logger.info(`šŸ“ Use --sendit to process all files automatically without confirmation.`);\n }\n }\n // Otherwise, use the note from configuration or open editor\n else if (runConfig.review?.note) {\n reviewNote = runConfig.review.note;\n reviewFiles = ['provided note'];\n } else {\n // Open editor to capture review note\n const editor = process.env.EDITOR || process.env.VISUAL || 'vi';\n\n let tmpFilePath: string | null = null;\n try {\n // Create secure temporary file\n tmpFilePath = await createSecureTempFile();\n\n // Pre-populate the file with a helpful header so users know what to do.\n const templateContent = [\n '# Kodrdriv Review Note',\n '',\n '# Please enter your review note below. Lines starting with \"#\" will be ignored.',\n '# Save and close the editor when you are done.',\n '',\n '',\n ].join('\\n');\n\n await safeWriteFile(tmpFilePath, templateContent);\n\n logger.info(`No review note provided – opening ${editor} to capture input...`);\n\n // Open the editor with optional timeout protection\n const editorTimeout = runConfig.review?.editorTimeout; // No default timeout - let user take their time\n await openEditorWithTimeout(editor, tmpFilePath, editorTimeout);\n\n // Read the file back in, stripping comment lines and whitespace.\n const fileContent = (await fs.readFile(tmpFilePath, 'utf8'))\n .split('\\n')\n .filter(line => !line.trim().startsWith('#'))\n .join('\\n')\n .trim();\n\n if (!fileContent) {\n throw new ValidationError('Review note is empty – aborting. Provide a note as an argument, via STDIN, or through the editor.');\n }\n\n reviewNote = fileContent;\n\n // If the original runConfig.review object exists, update it so downstream code has the note.\n if (runConfig.review) {\n runConfig.review.note = reviewNote;\n }\n\n } catch (error: any) {\n logger.error(`Failed to capture review note via editor: ${error.message}`);\n throw error;\n } finally {\n // Always clean up the temp file\n if (tmpFilePath) {\n await cleanupTempFile(tmpFilePath);\n }\n }\n\n reviewFiles = ['editor input'];\n }\n\n if (!reviewNote || !reviewNote.trim()) {\n throw new ValidationError('No review note provided or captured');\n }\n\n logger.info('šŸ“ Starting review analysis...');\n logger.debug('Review note: %s', reviewNote);\n logger.debug('Review note length: %d characters', reviewNote.length);\n\n const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\n const storage = createStorage();\n await storage.ensureDirectory(outputDirectory);\n\n // Save timestamped copy of review notes to output directory\n try {\n const reviewNotesFilename = getTimestampedReviewNotesFilename();\n const reviewNotesPath = getOutputPath(outputDirectory, reviewNotesFilename);\n const reviewNotesContent = `# Review Notes\\n\\n${reviewNote}\\n\\n`;\n await safeWriteFile(reviewNotesPath, reviewNotesContent);\n logger.debug('Saved timestamped review notes: %s', reviewNotesPath);\n } catch (error: any) {\n logger.warn('Failed to save review notes: %s', error.message);\n }\n\n // Phase 1: File selection (only for directory mode)\n let selectedFiles: string[];\n if (runConfig.review?.directory) {\n selectedFiles = await selectFilesForProcessing(reviewFiles, runConfig.review?.sendit || false);\n } else {\n // For single note mode, just use the note directly\n selectedFiles = ['single note'];\n }\n\n // Phase 2: Process selected files in order\n logger.info(`\\nšŸ“ Starting analysis phase...`);\n const results: ReviewResult[] = [];\n const processedFiles: string[] = [];\n\n if (runConfig.review?.directory) {\n // Directory mode: process each selected file\n for (let i = 0; i < selectedFiles.length; i++) {\n const filePath = selectedFiles[i];\n try {\n logger.info(`šŸ“ Processing file ${i + 1}/${selectedFiles.length}: ${filePath}`);\n const fileNote = await readReviewNoteFromFile(filePath);\n const fileResult = await processSingleReview(fileNote, runConfig, outputDirectory);\n results.push(fileResult);\n processedFiles.push(filePath);\n } catch (error: any) {\n // Check if this is a critical error that should be propagated\n if (error.message.includes('Too many context gathering errors')) {\n throw error; // Propagate critical context errors\n }\n logger.warn(`Failed to process file ${filePath}: ${error.message}`);\n // Continue with other files for non-critical errors\n }\n }\n } else {\n // Single note mode: process the note directly\n try {\n logger.info(`šŸ“ Processing single review note`);\n const fileResult = await processSingleReview(reviewNote, runConfig, outputDirectory);\n results.push(fileResult);\n processedFiles.push('single note');\n } catch (error: any) {\n logger.warn(`Failed to process review note: ${error.message}`);\n throw error; // Re-throw for single note mode since there's only one item\n }\n }\n\n if (results.length === 0) {\n throw new ValidationError('No files were processed successfully');\n }\n\n // Combine results if we processed multiple files\n let analysisResult: ReviewResult;\n if (results.length === 1) {\n analysisResult = results[0];\n } else {\n logger.info(`āœ… Successfully processed ${results.length} review files`);\n\n // Create a combined summary\n const totalIssues = results.reduce((sum, result) => sum + result.totalIssues, 0);\n const allIssues = results.flatMap(result => result.issues || []);\n\n analysisResult = {\n summary: `Combined analysis of ${results.length} review files. Total issues found: ${totalIssues}`,\n totalIssues,\n issues: allIssues\n };\n\n // Save combined results\n try {\n const combinedFilename = getTimestampedReviewFilename();\n const combinedPath = getOutputPath(outputDirectory, combinedFilename);\n const combinedContent = `# Combined Review Analysis Result\\n\\n` +\n `## Summary\\n${analysisResult.summary}\\n\\n` +\n `## Total Issues Found\\n${totalIssues}\\n\\n` +\n `## Files Processed\\n${processedFiles.join('\\n')}\\n\\n` +\n `## Issues\\n\\n${JSON.stringify(allIssues, null, 2)}\\n\\n` +\n `---\\n\\n*Combined analysis completed at ${new Date().toISOString()}*`;\n\n await safeWriteFile(combinedPath, combinedContent);\n logger.debug('Saved combined review analysis: %s', combinedPath);\n } catch (error: any) {\n logger.warn('Failed to save combined review analysis: %s', error.message);\n }\n }\n\n // Handle GitHub issue creation using the issues module\n const senditMode = runConfig.review?.sendit || false;\n return await handleIssueCreation(analysisResult, senditMode);\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n try {\n return await executeInternal(runConfig);\n } catch (error: any) {\n const logger = getLogger();\n\n if (error instanceof ValidationError) {\n logger.error(`review failed: ${error.message}`);\n throw error;\n }\n\n if (error instanceof FileOperationError) {\n logger.error(`review failed: ${error.message}`);\n if (error.cause && typeof error.cause === 'object' && 'message' in error.cause) {\n logger.debug(`Caused by: ${(error.cause as Error).message}`);\n }\n throw error;\n }\n\n if (error instanceof CommandError) {\n logger.error(`review failed: ${error.message}`);\n if (error.cause && typeof error.cause === 'object' && 'message' in error.cause) {\n logger.debug(`Caused by: ${(error.cause as Error).message}`);\n }\n throw error;\n }\n\n // Unexpected errors\n logger.error(`review encountered unexpected error: ${error.message}`);\n throw error;\n }\n};\n"],"names":["readContextFiles","contextFiles","logger","length","storage","createStorage","contextParts","filePath","content","readFile","push","debug","error","warn","message","join","generateSelfReflection","agenticResult","outputDirectory","timestamp","Date","toISOString","replace","split","reflectionPath","getOutputPath","report","generateReflectionReport","iterations","toolCallsExecuted","maxIterations","toolMetrics","conversationHistory","commitMessage","suggestedSplits","writeFile","info","repeat","toolCalls","uniqueTools","Set","map","m","name","size","getCurrentVersion","packageJsonContents","packageJson","safeJsonParse","validated","validatePackageJson","version","undefined","editCommitMessageInteractively","templateLines","result","editContentInEditor","improveCommitMessageWithLLM","runConfig","promptConfig","promptContext","diffContent","userFeedback","getLLMFeedbackInEditor","aiConfig","toAIConfig","aiStorageAdapter","createStorageAdapter","aiLogger","createLoggerAdapter","improvementConfig","contentType","createImprovedPrompt","currentMessage","improvementPromptContent","userDirection","prompt","createCommitPrompt","modelToUse","commands","commit","model","Formatter","create","getDryRunLogger","formatPrompt","callLLM","request","createCompletionWithRetry","messages","openaiReasoning","reasoning","debugRequestFile","getTimestampedRequestFilename","debugResponseFile","getTimestampedResponseFilename","improveContentWithLLM","handleInteractiveCommitFeedback","hasActualChanges","cached","senditEnabled","sendit","willActuallyCommit","isAmendMode","amend","confirmChoice","key","label","userChoice","getUserChoice","STANDARD_CHOICES","EDIT","SKIP","IMPROVE","nonTtyErrorSuggestions","action","finalMessage","hasCommits","run","pushCommit","pushConfig","isDryRun","remote","pushCommand","ExternalDependencyError","determineCachedState","config","hasAnyCommits","ValidationError","add","Diff","hasStagedChanges","validateSenditState","saveCommitMessage","summary","timestampedFilename","getTimestampedCommitFilename","primaryPath","outputRootPath","outputError","fallbackPath","now","fallbackError","reviewSplitInteractively","index","total","files","forEach","f","rationale","choices","choice","edited","modifiedMessage","createSingleSplitCommit","stageFiles","verification","verifyStagedFiles","allPresent","missing","unexpected","validatedMessage","validateString","escapedMessage","shellescape","sha","stdout","trim","executeSplitCommits","options","splits","interactive","success","commitsCreated","commits","skipped","i","review","unstageAll","substring","remainingFiles","slice","flatMap","s","restageError","formatSplitCommitSummary","lines","idx","firstLine","executeInternal","dryRun","userSkippedCommit","maxDiffBytes","DEFAULT_MAX_DIFF_BYTES","excludedPatterns","DEFAULT_EXCLUDED_PATTERNS","diff","get","criticalChanges","hasCriticalExcludedChanges","hasChanges","minimalPatterns","getMinimalExcludedPatterns","updatedOptions","updatedDiff","filter","p","some","includes","pop","fileOptions","maxTotalBytes","workingDirectory","process","cwd","Files","fileContent","logOptions","limit","messageLimit","log","Log","logContext","DEFAULT_OUTPUT_DIRECTORY","ensureDirectory","githubIssuesContext","currentVersion","getRecentClosedIssuesForCommit","overridePaths","discoveredConfigDirs","overrides","sanitizeDirection","direction","contextFromFiles","combinedContext","context","Boolean","directories","contextDirectories","selfReflection","changedFilesResult","changedFilesOutput","changedFiles","runAgenticCommit","maxAgenticIterations","allowCommitSplitting","autoSplitEnabled","autoSplit","splitResult","errorMessage","CommandError","rawSummary","filterResult","filterContent","stopContext","filtered","willCreateCommit","skipFileCheck","fileDependencyIssues","checkForFileDependencies","logFileDependencyWarning","logFileDependencySuggestions","requireTTY","interactiveResult","commitAction","charAt","toUpperCase","validatedSummary","escapedSummary","commitCommand","execute","getLogger","standardLogger","cause","TEST_CACHE_FILE","loadTestCache","packageDir","cachePath","path","fs","JSON","parse","saveTestCache","cache","stringify","getCurrentCommitHash","runSecure","hasSourceFilesChanged","lastCommitHash","changed","reason","currentCommitHash","line","file","ext","extname","basename","isCleanNeeded","distPath","distExists","exists","needed","distStats","stat","distMtime","mtimeMs","trackedFiles","startsWith","fileStats","sourceDirs","dir","dirPath","dirStats","isTestNeeded","cacheKey","changeCheck","recordTestRun","commitHash","lastTestRun","optimizePrecommitCommand","originalCommand","skipClean","skipTest","isPrecommitScript","optimizedCommand","clean","test","reasons","cleanCheck","testCheck","PerformanceTimer","start","operation","verbose","end","duration","startTime","EXCLUDED_DIRECTORIES","batchReadPackageJsonFiles","packageJsonPaths","rootDir","timer","readPromises","packageJsonPath","packageJsonContent","parsed","relativePath","relative","dirname","results","Promise","all","validResults","findAllPackageJsonFiles","scanForPaths","currentDir","depth","isDirectory","items","listFiles","foundPaths","subdirPromises","item","itemPath","subdirResults","subdirPaths","pathsTimer","allPaths","packageJsonFiles","scanDirectoryForPackages","packageMap","Map","absoluteRootDir","resolve","existsTimer","listTimer","BATCH_SIZE","batches","batch","processTimer","batchPromises","batchResults","set","findPackagesByScope","dependencies","scopeRoots","workspacePackages","silly","scopeTimer","scopePromises","Object","entries","scope","scopePackages","matchingPackages","packageName","packagePath","packages","allScopeResults","allPackages","keys","matchTimer","depName","depVersion","has","collectAllDependencies","allDependencies","assign","devDependencies","peerDependencies","filesWithFileDepedencies","fileDeps","allDeps","dep","defaultCommand","commandToRun","scripts","precommit","precommitScript","optimizationInfo","optimization","skippedParts","seconds","toFixed","removeDirectory","FileOperationError","readReviewNoteFromFile","code","getReviewFilesInDirectory","directoryPath","readdir","withFileTypes","entry","isFile","sort","selectFilesForProcessing","reviewFiles","senditMode","isTTYSafe","selectedFiles","shouldAbort","Error","createSecureTempFile","tmpDir","os","tmpdir","W_OK","access","tmpFilePath","Math","random","toString","fd","open","close","cleanupTempFile","unlink","openEditorWithTimeout","editorCmd","timeoutMs","reject","child","spawn","stdio","shell","timeout","timeoutCleared","clearTimeoutSafely","clearTimeout","setTimeout","kill","killed","on","signal","validateReviewResult","data","totalIssues","issues","Array","isArray","issue","title","priority","stdin","isTTY","stderr","safeWriteFile","encoding","parentDir","testFile","processSingleReview","reviewNote","analysisResult","diffContext","releaseNotesContext","issuesContext","contextErrors","includeCommitHistory","commitHistoryLimit","logContent","errorMsg","includeRecentDiffs","basePatterns","recentDiffs","getRecentDiffsForReview","diffHistoryLimit","baseExcludedPatterns","includeReleaseNotes","releaseNotesContent","getReleaseNotesContent","releaseNotesLimit","includeGithubIssues","getIssuesContent","githubIssuesLimit","maxContextErrors","promptContent","notes","createReviewPrompt","rawAnalysisResult","rawResult","createCompletion","responseFormat","type","description","reviewFilename","getTimestampedReviewFilename","reviewPath","reviewContent","directory","note","reviewExcluded","getReviewExcludedPatterns","isInteractive","editor","env","EDITOR","VISUAL","templateContent","editorTimeout","reviewNotesFilename","getTimestampedReviewNotesFilename","reviewNotesPath","reviewNotesContent","processedFiles","fileNote","fileResult","reduce","sum","allIssues","combinedFilename","combinedPath","combinedContent","handleIssueCreation"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Config } from '@eldrforge/core';
2
+ export declare const execute: (runConfig: Config) => Promise<void>;
3
+ //# sourceMappingURL=clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../src/commands/clean.ts"],"names":[],"mappings":";AACA,OAAO,EAAwD,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAgC/F,eAAO,MAAM,OAAO,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAkB7D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Config } from '@eldrforge/core';
2
+ export declare const execute: (runConfig: Config) => Promise<string>;
3
+ //# sourceMappingURL=commit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../../src/commands/commit.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC;AAGvB,OAAO,EAQH,MAAM,EAYT,MAAM,iBAAiB,CAAC;AAsjCzB,eAAO,MAAM,OAAO,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CAsB/D,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Config } from '@eldrforge/core';
2
+ /**
3
+ * Execute precommit checks: lint -> build -> test
4
+ * Skips clean step (clean should be run separately if needed)
5
+ * Uses optimization to skip steps when unchanged
6
+ */
7
+ export declare const execute: (runConfig: Config) => Promise<string>;
8
+ //# sourceMappingURL=precommit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"precommit.d.ts","sourceRoot":"","sources":["../../../src/commands/precommit.ts"],"names":[],"mappings":";AACA,OAAO,EAAa,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAMpD;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CAyF/D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Config } from '@eldrforge/core';
2
+ export declare const execute: (runConfig: Config) => Promise<string>;
3
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/commands/review.ts"],"names":[],"mappings":";AAKA,OAAO,EAEH,MAAM,EAcT,MAAM,iBAAiB,CAAC;AAg0BzB,eAAO,MAAM,OAAO,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CA+B/D,CAAC"}