@eldrforge/kodrdriv 0.0.50 ā 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.
- package/README.md +2 -1
- package/dist/application.js +5 -3
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +97 -70
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +7 -7
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +13 -13
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/clean.js +2 -2
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/commit.js +301 -36
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/link.js +7 -7
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +285 -306
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +171 -14
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +52 -40
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/select-audio.js +4 -4
- package/dist/commands/select-audio.js.map +1 -1
- package/dist/commands/tree.js +347 -34
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +5 -5
- package/dist/commands/unlink.js.map +1 -1
- package/dist/constants.js +28 -9
- package/dist/constants.js.map +1 -1
- package/dist/content/diff.js +122 -1
- package/dist/content/diff.js.map +1 -1
- package/dist/content/issues.js +17 -46
- package/dist/content/issues.js.map +1 -1
- package/dist/logging.js +3 -3
- package/dist/logging.js.map +1 -1
- package/dist/prompt/commit.js +2 -2
- package/dist/prompt/commit.js.map +1 -1
- package/dist/prompt/release.js +2 -2
- package/dist/prompt/release.js.map +1 -1
- package/dist/prompt/review.js +2 -2
- package/dist/prompt/review.js.map +1 -1
- package/dist/types.js +18 -5
- package/dist/types.js.map +1 -1
- package/dist/util/child.js +60 -4
- package/dist/util/child.js.map +1 -1
- package/dist/util/general.js +149 -13
- package/dist/util/general.js.map +1 -1
- package/dist/util/github.js +12 -8
- package/dist/util/github.js.map +1 -1
- package/dist/util/interactive.js +297 -0
- package/dist/util/interactive.js.map +1 -0
- package/dist/util/openai.js +87 -8
- package/dist/util/openai.js.map +1 -1
- package/dist/util/performance.js +8 -8
- package/dist/util/performance.js.map +1 -1
- package/dist/util/safety.js +4 -4
- package/dist/util/safety.js.map +1 -1
- package/dist/util/storage.js +2 -2
- package/dist/util/storage.js.map +1 -1
- package/package.json +6 -6
- package/test-increment.js +0 -0
package/dist/content/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sources":["../../src/content/diff.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { ExitError } from '../error/ExitError';\nimport { getLogger } from '../logging';\nimport { run } from '../util/child';\nimport { DEFAULT_GIT_COMMAND_MAX_BUFFER } from '../constants';\n\nexport interface Instance {\n get(): Promise<string>;\n}\n\n// Enhanced exclusion patterns specifically for review context\n// These focus on excluding large files, binaries, and content that doesn't help with issue analysis\nexport const getReviewExcludedPatterns = (basePatterns: string[]): string[] => {\n const reviewSpecificExclusions = [\n // Lock files and dependency files (often massive)\n \"*lock*\",\n \"*.lock\",\n \"package-lock.json\",\n \"yarn.lock\",\n \"bun.lockb\",\n \"composer.lock\",\n \"Cargo.lock\",\n \"Gemfile.lock\",\n \"Pipfile.lock\",\n \"poetry.lock\",\n\n // Image files (binary and large)\n \"*.png\",\n \"*.jpg\",\n \"*.jpeg\",\n \"*.gif\",\n \"*.bmp\",\n \"*.tiff\",\n \"*.webp\",\n \"*.svg\",\n \"*.ico\",\n \"*.icns\",\n\n // Video and audio files\n \"*.mp4\",\n \"*.avi\",\n \"*.mov\",\n \"*.wmv\",\n \"*.flv\",\n \"*.mp3\",\n \"*.wav\",\n \"*.flac\",\n\n // Archives and compressed files\n \"*.zip\",\n \"*.tar\",\n \"*.tar.gz\",\n \"*.tgz\",\n \"*.rar\",\n \"*.7z\",\n \"*.bz2\",\n \"*.xz\",\n\n // Binary executables and libraries\n \"*.exe\",\n \"*.dll\",\n \"*.so\",\n \"*.dylib\",\n \"*.bin\",\n \"*.app\",\n\n // Database files\n \"*.db\",\n \"*.sqlite\",\n \"*.sqlite3\",\n \"*.mdb\",\n\n // Large generated files\n \"*.map\",\n \"*.min.js\",\n \"*.min.css\",\n \"bundle.*\",\n \"vendor.*\",\n\n // Documentation that's often large\n \"*.pdf\",\n \"*.doc\",\n \"*.docx\",\n \"*.ppt\",\n \"*.pptx\",\n\n // IDE and OS generated files\n \".DS_Store\",\n \"Thumbs.db\",\n \"*.swp\",\n \"*.tmp\",\n\n // Certificate and key files\n \"*.pem\",\n \"*.crt\",\n \"*.key\",\n \"*.p12\",\n \"*.pfx\",\n\n // Large config/data files that are often auto-generated\n \"tsconfig.tsbuildinfo\",\n \"*.cache\",\n \".eslintcache\",\n ];\n\n // Combine base patterns with review specific exclusions, removing duplicates\n const combinedPatterns = [...new Set([...basePatterns, ...reviewSpecificExclusions])];\n return combinedPatterns;\n};\n\n// Function to truncate overly large diff content while preserving structure\nexport const truncateLargeDiff = (diffContent: string, maxLength: number = 5000): string => {\n if (diffContent.length <= maxLength) {\n return diffContent;\n }\n\n const lines = diffContent.split('\\n');\n const truncatedLines: string[] = [];\n let currentLength = 0;\n let truncated = false;\n\n for (const line of lines) {\n if (currentLength + line.length + 1 > maxLength) {\n truncated = true;\n break;\n }\n truncatedLines.push(line);\n currentLength += line.length + 1; // +1 for newline\n }\n\n if (truncated) {\n truncatedLines.push('');\n truncatedLines.push(`... [TRUNCATED: Original diff was ${diffContent.length} characters, showing first ${currentLength}] ...`);\n }\n\n return truncatedLines.join('\\n');\n};\n\nexport const create = async (options: { from?: string, to?: string, cached?: boolean, excludedPatterns: string[] }): Promise<Instance> => {\n const logger = getLogger();\n\n async function get(): Promise<string> {\n try {\n logger.verbose('Gathering change information from Git');\n\n try {\n logger.debug('Executing git diff');\n const excludeString = options.excludedPatterns.map(p => `':(exclude)${p}'`).join(' ');\n let range = '';\n if (options.from && options.to) {\n range = `${options.from}..${options.to}`;\n } else if (options.from) {\n range = `${options.from}`;\n } else if (options.to) {\n range = `${options.to}`;\n }\n let command = '';\n if (options.cached) {\n command = `git diff --cached${range ? ' ' + range : ''} -- . ${excludeString}`;\n } else {\n command = `git diff${range ? ' ' + range : ''} -- . ${excludeString}`;\n }\n const { stdout, stderr } = await run(command, { maxBuffer: DEFAULT_GIT_COMMAND_MAX_BUFFER });\n if (stderr) {\n logger.warn('Git diff produced stderr: %s', stderr);\n }\n logger.debug('Git diff output: %s', stdout);\n return stdout;\n } catch (error: any) {\n logger.error('Failed to execute git diff: %s', error.message);\n throw error;\n }\n } catch (error: any) {\n logger.error('Error occurred during gather change phase: %s %s', error.message, error.stack);\n throw new ExitError('Error occurred during gather change phase');\n }\n }\n\n return { get };\n}\n\nexport const hasStagedChanges = async (): Promise<boolean> => {\n const logger = getLogger();\n try {\n logger.debug('Checking for staged changes');\n const { stderr } = await run('git diff --cached --quiet');\n if (stderr) {\n logger.warn('Git diff produced stderr: %s', stderr);\n }\n // If there are staged changes, git diff --cached --quiet will return non-zero\n // So if we get here without an error, there are no staged changes\n return false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error: any) {\n // If we get an error, it means there are staged changes\n return true;\n }\n}\n\n// High-level function to get recent diffs formatted for review context\nexport const getRecentDiffsForReview = async (options: {\n limit?: number;\n baseExcludedPatterns: string[];\n}): Promise<string> => {\n const logger = getLogger();\n const diffLimit = options.limit || 5;\n\n // Get enhanced exclusion patterns for review context\n const reviewExcluded = getReviewExcludedPatterns(options.baseExcludedPatterns);\n logger.debug('Using %d exclusion patterns for diff context (including %d review specific)',\n reviewExcluded.length, reviewExcluded.length - options.baseExcludedPatterns.length);\n logger.debug('Sample exclusions: %s', reviewExcluded.slice(0, 10).join(', ') +\n (reviewExcluded.length > 10 ? '...' : ''));\n\n const diffSections: string[] = [];\n\n // Get recent commits and their diffs\n for (let i = 0; i < diffLimit; i++) {\n try {\n const diffRange = i === 0 ? 'HEAD~1' : `HEAD~${i + 1}..HEAD~${i}`;\n const diff = await create({\n from: `HEAD~${i + 1}`,\n to: `HEAD~${i}`,\n excludedPatterns: reviewExcluded\n });\n const diffContent = await diff.get();\n if (diffContent.trim()) {\n const truncatedDiff = truncateLargeDiff(diffContent);\n diffSections.push(`[Recent Diff ${i + 1} (${diffRange})]\\n${truncatedDiff}`);\n\n if (truncatedDiff.length < diffContent.length) {\n logger.debug('Added diff %d to context (%d characters, truncated from %d)',\n i + 1, truncatedDiff.length, diffContent.length);\n } else {\n logger.debug('Added diff %d to context (%d characters)', i + 1, diffContent.length);\n }\n } else {\n logger.debug('Diff %d was empty after exclusions', i + 1);\n }\n } catch (error: any) {\n logger.debug('Could not fetch diff %d: %s', i + 1, error.message);\n break; // Stop if we can't fetch more diffs\n }\n }\n\n return diffSections.length > 0 ? '\\n\\n' + diffSections.join('\\n\\n') : '';\n};\n"],"names":["getReviewExcludedPatterns","basePatterns","reviewSpecificExclusions","combinedPatterns","Set","truncateLargeDiff","diffContent","maxLength","length","lines","split","truncatedLines","currentLength","truncated","line","push","join","create","options","logger","getLogger","get","verbose","debug","excludeString","excludedPatterns","map","p","range","from","to","command","cached","stdout","stderr","run","maxBuffer","DEFAULT_GIT_COMMAND_MAX_BUFFER","warn","error","message","stack","ExitError","hasStagedChanges","getRecentDiffsForReview","diffLimit","limit","reviewExcluded","baseExcludedPatterns","slice","diffSections","i","diffRange","diff","trim","truncatedDiff"],"mappings":";;;;;;AAUA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAA4B,CAACC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,wBAAAA,CAAAA,CAAAA,CAA2B,CAAA;;AAE7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CA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"}
|
|
1
|
+
{"version":3,"file":"diff.js","sources":["../../src/content/diff.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { ExitError } from '../error/ExitError';\nimport { getLogger } from '../logging';\nimport { run } from '../util/child';\nimport { DEFAULT_GIT_COMMAND_MAX_BUFFER } from '../constants';\n\nexport interface Instance {\n get(): Promise<string>;\n}\n\n// Enhanced exclusion patterns specifically for review context\n// These focus on excluding large files, binaries, and content that doesn't help with issue analysis\nexport const getReviewExcludedPatterns = (basePatterns: string[]): string[] => {\n const reviewSpecificExclusions = [\n // Lock files and dependency files (often massive)\n \"*lock*\",\n \"*.lock\",\n \"package-lock.json\",\n \"yarn.lock\",\n \"bun.lockb\",\n \"composer.lock\",\n \"Cargo.lock\",\n \"Gemfile.lock\",\n \"Pipfile.lock\",\n \"poetry.lock\",\n\n // Image files (binary and large)\n \"*.png\",\n \"*.jpg\",\n \"*.jpeg\",\n \"*.gif\",\n \"*.bmp\",\n \"*.tiff\",\n \"*.webp\",\n \"*.svg\",\n \"*.ico\",\n \"*.icns\",\n\n // Video and audio files\n \"*.mp4\",\n \"*.avi\",\n \"*.mov\",\n \"*.wmv\",\n \"*.flv\",\n \"*.mp3\",\n \"*.wav\",\n \"*.flac\",\n\n // Archives and compressed files\n \"*.zip\",\n \"*.tar\",\n \"*.tar.gz\",\n \"*.tgz\",\n \"*.rar\",\n \"*.7z\",\n \"*.bz2\",\n \"*.xz\",\n\n // Binary executables and libraries\n \"*.exe\",\n \"*.dll\",\n \"*.so\",\n \"*.dylib\",\n \"*.bin\",\n \"*.app\",\n\n // Database files\n \"*.db\",\n \"*.sqlite\",\n \"*.sqlite3\",\n \"*.mdb\",\n\n // Large generated files\n \"*.map\",\n \"*.min.js\",\n \"*.min.css\",\n \"bundle.*\",\n \"vendor.*\",\n\n // Documentation that's often large\n \"*.pdf\",\n \"*.doc\",\n \"*.docx\",\n \"*.ppt\",\n \"*.pptx\",\n\n // IDE and OS generated files\n \".DS_Store\",\n \"Thumbs.db\",\n \"*.swp\",\n \"*.tmp\",\n\n // Certificate and key files\n \"*.pem\",\n \"*.crt\",\n \"*.key\",\n \"*.p12\",\n \"*.pfx\",\n\n // Large config/data files that are often auto-generated\n \"tsconfig.tsbuildinfo\",\n \"*.cache\",\n \".eslintcache\",\n ];\n\n // Combine base patterns with review specific exclusions, removing duplicates\n const combinedPatterns = [...new Set([...basePatterns, ...reviewSpecificExclusions])];\n return combinedPatterns;\n};\n\n// Check if there are changes to critical files that are normally excluded\nexport const hasCriticalExcludedChanges = async (): Promise<{ hasChanges: boolean, files: string[] }> => {\n const logger = getLogger();\n const criticalPatterns = [\n 'package-lock.json',\n 'yarn.lock',\n 'bun.lockb',\n '.gitignore',\n '.env.example'\n ];\n\n try {\n // Check for unstaged changes to critical files\n const { stdout } = await run('git status --porcelain');\n const changedFiles = stdout.split('\\n')\n .filter(line => line.trim())\n .map(line => line.substring(3).trim()); // Remove status prefix\n\n const criticalFiles = changedFiles.filter(file =>\n criticalPatterns.some(pattern =>\n file === pattern || file.endsWith(`/${pattern}`)\n )\n );\n\n logger.debug('Found %d critical excluded files with changes: %s',\n criticalFiles.length, criticalFiles.join(', '));\n\n return { hasChanges: criticalFiles.length > 0, files: criticalFiles };\n } catch (error: any) {\n logger.debug('Error checking for critical excluded changes: %s', error.message);\n return { hasChanges: false, files: [] };\n }\n};\n\n// Get minimal excluded patterns that still includes critical files\nexport const getMinimalExcludedPatterns = (basePatterns: string[]): string[] => {\n const criticalPatterns = [\n 'package-lock.json',\n 'yarn.lock',\n 'bun.lockb',\n '.gitignore',\n '.env.example'\n ];\n\n // Filter out critical patterns from base patterns\n return basePatterns.filter(pattern =>\n !criticalPatterns.some(critical =>\n pattern === critical ||\n pattern.includes(critical)\n )\n );\n};\n\n// Function to truncate overly large diff content while preserving structure\nexport const truncateLargeDiff = (diffContent: string, maxLength: number = 5000): string => {\n if (diffContent.length <= maxLength) {\n return diffContent;\n }\n\n const lines = diffContent.split('\\n');\n const truncatedLines: string[] = [];\n let currentLength = 0;\n let truncated = false;\n\n for (const line of lines) {\n if (currentLength + line.length + 1 > maxLength) {\n truncated = true;\n break;\n }\n truncatedLines.push(line);\n currentLength += line.length + 1; // +1 for newline\n }\n\n if (truncated) {\n truncatedLines.push('');\n truncatedLines.push(`... [TRUNCATED: Original diff was ${diffContent.length} characters, showing first ${currentLength}] ...`);\n }\n\n return truncatedLines.join('\\n');\n};\n\n// Smart diff truncation that identifies and handles large files individually\nexport const truncateDiffByFiles = (diffContent: string, maxDiffBytes: number): string => {\n if (diffContent.length <= maxDiffBytes) {\n return diffContent;\n }\n\n const lines = diffContent.split('\\n');\n const result: string[] = [];\n let currentFile: string[] = [];\n let currentFileHeader = '';\n let totalSize = 0;\n let filesOmitted = 0;\n\n for (const line of lines) {\n // Check if this is a file header (starts with diff --git)\n if (line.startsWith('diff --git ')) {\n // Process the previous file if it exists\n if (currentFile.length > 0) {\n const fileContent = currentFile.join('\\n');\n const fileSizeBytes = Buffer.byteLength(fileContent, 'utf8');\n\n if (fileSizeBytes > maxDiffBytes) {\n // This single file is too large, replace with a summary\n result.push(currentFileHeader);\n result.push(`... [CHANGE OMITTED: File too large (${fileSizeBytes} bytes > ${maxDiffBytes} limit)] ...`);\n result.push('');\n filesOmitted++;\n } else if (totalSize + fileSizeBytes > maxDiffBytes * 10) { // Allow total to be up to 10x limit before dropping files\n // Adding this file would make total too large\n result.push(currentFileHeader);\n result.push(`... [CHANGE OMITTED: Would exceed total size limit] ...`);\n result.push('');\n filesOmitted++;\n } else {\n // File is acceptable size\n result.push(...currentFile);\n totalSize += fileSizeBytes;\n }\n }\n\n // Start new file\n currentFileHeader = line;\n currentFile = [line];\n } else {\n // Add line to current file\n currentFile.push(line);\n }\n }\n\n // Handle the last file\n if (currentFile.length > 0) {\n const fileContent = currentFile.join('\\n');\n const fileSizeBytes = Buffer.byteLength(fileContent, 'utf8');\n\n if (fileSizeBytes > maxDiffBytes) {\n result.push(currentFileHeader);\n result.push(`... [CHANGE OMITTED: File too large (${fileSizeBytes} bytes > ${maxDiffBytes} limit)] ...`);\n result.push('');\n filesOmitted++;\n } else if (totalSize + fileSizeBytes > maxDiffBytes * 10) {\n result.push(currentFileHeader);\n result.push(`... [CHANGE OMITTED: Would exceed total size limit] ...`);\n result.push('');\n filesOmitted++;\n } else {\n result.push(...currentFile);\n totalSize += fileSizeBytes;\n }\n }\n\n const finalResult = result.join('\\n');\n\n if (filesOmitted > 0) {\n return finalResult + `\\n\\n[SUMMARY: ${filesOmitted} files omitted due to size limits. Original diff: ${diffContent.length} bytes, processed diff: ${finalResult.length} bytes]`;\n }\n\n return finalResult;\n};\n\nexport const create = async (options: { from?: string, to?: string, cached?: boolean, excludedPatterns: string[], maxDiffBytes?: number }): Promise<Instance> => {\n const logger = getLogger();\n\n async function get(): Promise<string> {\n try {\n logger.verbose('Gathering change information from Git');\n\n try {\n logger.debug('Executing git diff');\n const excludeString = options.excludedPatterns.map(p => `':(exclude)${p}'`).join(' ');\n let range = '';\n if (options.from && options.to) {\n range = `${options.from}..${options.to}`;\n } else if (options.from) {\n range = `${options.from}`;\n } else if (options.to) {\n range = `${options.to}`;\n }\n let command = '';\n if (options.cached) {\n command = `git diff --cached${range ? ' ' + range : ''} -- . ${excludeString}`;\n } else {\n command = `git diff${range ? ' ' + range : ''} -- . ${excludeString}`;\n }\n const { stdout, stderr } = await run(command, { maxBuffer: DEFAULT_GIT_COMMAND_MAX_BUFFER });\n if (stderr) {\n logger.warn('Git diff produced stderr: %s', stderr);\n }\n logger.debug('Git diff output: %s', stdout);\n\n // Apply intelligent diff truncation if maxDiffBytes is specified\n if (options.maxDiffBytes && stdout.length > 0) {\n const originalSize = Buffer.byteLength(stdout, 'utf8');\n const truncatedDiff = truncateDiffByFiles(stdout, options.maxDiffBytes);\n const newSize = Buffer.byteLength(truncatedDiff, 'utf8');\n\n if (originalSize !== newSize) {\n logger.info('Applied diff truncation: %d bytes -> %d bytes (limit: %d bytes)',\n originalSize, newSize, options.maxDiffBytes);\n }\n\n return truncatedDiff;\n }\n\n return stdout;\n } catch (error: any) {\n logger.error('Failed to execute git diff: %s', error.message);\n throw error;\n }\n } catch (error: any) {\n logger.error('Error occurred during gather change phase: %s %s', error.message, error.stack);\n throw new ExitError('Error occurred during gather change phase');\n }\n }\n\n return { get };\n}\n\nexport const hasStagedChanges = async (): Promise<boolean> => {\n const logger = getLogger();\n try {\n logger.debug('Checking for staged changes');\n const { stderr } = await run('git diff --cached --quiet');\n if (stderr) {\n logger.warn('Git diff produced stderr: %s', stderr);\n }\n // If there are staged changes, git diff --cached --quiet will return non-zero\n // So if we get here without an error, there are no staged changes\n return false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error: any) {\n // If we get an error, it means there are staged changes\n return true;\n }\n}\n\n// High-level function to get recent diffs formatted for review context\nexport const getRecentDiffsForReview = async (options: {\n limit?: number;\n baseExcludedPatterns: string[];\n}): Promise<string> => {\n const logger = getLogger();\n const diffLimit = options.limit || 5;\n\n // Get enhanced exclusion patterns for review context\n const reviewExcluded = getReviewExcludedPatterns(options.baseExcludedPatterns);\n logger.debug('Using %d exclusion patterns for diff context (including %d review specific)',\n reviewExcluded.length, reviewExcluded.length - options.baseExcludedPatterns.length);\n logger.debug('Sample exclusions: %s', reviewExcluded.slice(0, 10).join(', ') +\n (reviewExcluded.length > 10 ? '...' : ''));\n\n const diffSections: string[] = [];\n\n // Get recent commits and their diffs\n for (let i = 0; i < diffLimit; i++) {\n try {\n const diffRange = i === 0 ? 'HEAD~1' : `HEAD~${i + 1}..HEAD~${i}`;\n const diff = await create({\n from: `HEAD~${i + 1}`,\n to: `HEAD~${i}`,\n excludedPatterns: reviewExcluded\n });\n const diffContent = await diff.get();\n if (diffContent.trim()) {\n const truncatedDiff = truncateLargeDiff(diffContent);\n diffSections.push(`[Recent Diff ${i + 1} (${diffRange})]\\n${truncatedDiff}`);\n\n if (truncatedDiff.length < diffContent.length) {\n logger.debug('Added diff %d to context (%d characters, truncated from %d)',\n i + 1, truncatedDiff.length, diffContent.length);\n } else {\n logger.debug('Added diff %d to context (%d characters)', i + 1, diffContent.length);\n }\n } else {\n logger.debug('Diff %d was empty after exclusions', i + 1);\n }\n } catch (error: any) {\n logger.debug('Could not fetch diff %d: %s', i + 1, error.message);\n break; // Stop if we can't fetch more diffs\n }\n }\n\n return diffSections.length > 0 ? '\\n\\n' + diffSections.join('\\n\\n') : '';\n};\n"],"names":["getReviewExcludedPatterns","basePatterns","reviewSpecificExclusions","combinedPatterns","Set","hasCriticalExcludedChanges","logger","getLogger","criticalPatterns","stdout","run","changedFiles","split","filter","line","trim","map","substring","criticalFiles","file","some","pattern","endsWith","debug","length","join","hasChanges","files","error","message","getMinimalExcludedPatterns","critical","includes","truncateLargeDiff","diffContent","maxLength","lines","truncatedLines","currentLength","truncated","push","truncateDiffByFiles","maxDiffBytes","result","currentFile","currentFileHeader","totalSize","filesOmitted","startsWith","fileContent","fileSizeBytes","Buffer","byteLength","finalResult","create","options","get","verbose","excludeString","excludedPatterns","p","range","from","to","command","cached","stderr","maxBuffer","DEFAULT_GIT_COMMAND_MAX_BUFFER","warn","originalSize","truncatedDiff","newSize","info","stack","ExitError","hasStagedChanges","getRecentDiffsForReview","diffLimit","limit","reviewExcluded","baseExcludedPatterns","slice","diffSections","i","diffRange","diff"],"mappings":";;;;;;AAUA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAA4B,CAACC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,wBAAAA,CAAAA,CAAAA,CAA2B,CAAA;;AAE7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGA,CA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"}
|
package/dist/content/issues.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { getLogger } from '../logging.js';
|
|
2
|
+
import { getUserChoice as getUserChoice$1 } from '../util/interactive.js';
|
|
2
3
|
import { getOpenIssues, createIssue } from '../util/github.js';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
4
|
+
import path__default from 'path';
|
|
5
|
+
import os__default from 'os';
|
|
5
6
|
import { spawnSync } from 'child_process';
|
|
6
|
-
import
|
|
7
|
+
import fs__default from 'fs/promises';
|
|
7
8
|
|
|
8
9
|
// Get GitHub issues content
|
|
9
10
|
const get = async (options = {})=>{
|
|
@@ -27,41 +28,7 @@ const get = async (options = {})=>{
|
|
|
27
28
|
};
|
|
28
29
|
// Helper function to get user choice interactively
|
|
29
30
|
async function getUserChoice(prompt, choices) {
|
|
30
|
-
|
|
31
|
-
logger.info(prompt);
|
|
32
|
-
choices.forEach((choice)=>{
|
|
33
|
-
logger.info(` [${choice.key}] ${choice.label}`);
|
|
34
|
-
});
|
|
35
|
-
logger.info('');
|
|
36
|
-
// Check if stdin is a TTY (terminal) or piped
|
|
37
|
-
if (!process.stdin.isTTY) {
|
|
38
|
-
// STDIN is piped, we can't use interactive prompts
|
|
39
|
-
// This should not happen anymore due to fail-fast check in review.ts
|
|
40
|
-
logger.error('ā ļø Unexpected: STDIN is piped in interactive mode');
|
|
41
|
-
return 's'; // Default to skip
|
|
42
|
-
}
|
|
43
|
-
return new Promise((resolve)=>{
|
|
44
|
-
// Ensure stdin is referenced so the process doesn't exit while waiting for input
|
|
45
|
-
if (typeof process.stdin.ref === 'function') {
|
|
46
|
-
process.stdin.ref();
|
|
47
|
-
}
|
|
48
|
-
process.stdin.setRawMode(true);
|
|
49
|
-
process.stdin.resume();
|
|
50
|
-
process.stdin.on('data', (key)=>{
|
|
51
|
-
const keyStr = key.toString().toLowerCase();
|
|
52
|
-
const choice = choices.find((c)=>c.key === keyStr);
|
|
53
|
-
if (choice) {
|
|
54
|
-
process.stdin.setRawMode(false);
|
|
55
|
-
process.stdin.pause();
|
|
56
|
-
// Detach stdin again now that we're done
|
|
57
|
-
if (typeof process.stdin.unref === 'function') {
|
|
58
|
-
process.stdin.unref();
|
|
59
|
-
}
|
|
60
|
-
logger.info(`Selected: ${choice.label}\n`);
|
|
61
|
-
resolve(choice.key);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
});
|
|
31
|
+
return await getUserChoice$1(prompt, choices);
|
|
65
32
|
}
|
|
66
33
|
// Helper function to serialize issue to structured text format
|
|
67
34
|
function serializeIssue(issue) {
|
|
@@ -164,11 +131,11 @@ async function editIssueInteractively(issue) {
|
|
|
164
131
|
const logger = getLogger();
|
|
165
132
|
const editor = process.env.EDITOR || process.env.VISUAL || 'vi';
|
|
166
133
|
// Create a temporary file for the user to edit
|
|
167
|
-
const tmpDir =
|
|
168
|
-
const tmpFilePath =
|
|
134
|
+
const tmpDir = os__default.tmpdir();
|
|
135
|
+
const tmpFilePath = path__default.join(tmpDir, `kodrdriv_issue_${Date.now()}.txt`);
|
|
169
136
|
// Serialize the issue to structured text format
|
|
170
137
|
const issueContent = serializeIssue(issue);
|
|
171
|
-
await
|
|
138
|
+
await fs__default.writeFile(tmpFilePath, issueContent, 'utf8');
|
|
172
139
|
logger.info(`š Opening ${editor} to edit issue...`);
|
|
173
140
|
// Open the editor synchronously so execution resumes after the user closes it
|
|
174
141
|
const result = spawnSync(editor, [
|
|
@@ -180,12 +147,16 @@ async function editIssueInteractively(issue) {
|
|
|
180
147
|
throw new Error(`Failed to launch editor '${editor}': ${result.error.message}`);
|
|
181
148
|
}
|
|
182
149
|
// Read the file back and deserialize it
|
|
183
|
-
const editedContent = await
|
|
184
|
-
// Clean up the temporary file
|
|
150
|
+
const editedContent = await fs__default.readFile(tmpFilePath, 'utf8');
|
|
151
|
+
// Clean up the temporary file with proper error handling
|
|
185
152
|
try {
|
|
186
|
-
await
|
|
187
|
-
} catch
|
|
188
|
-
|
|
153
|
+
await fs__default.unlink(tmpFilePath);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
// Only log if it's not a "file not found" error
|
|
156
|
+
if (error.code !== 'ENOENT') {
|
|
157
|
+
logger.warn(`Failed to cleanup temporary file ${tmpFilePath}: ${error.message}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
189
160
|
// Deserialize the edited content back to an Issue object
|
|
190
161
|
const editedIssue = deserializeIssue(editedContent);
|
|
191
162
|
logger.info('ā
Issue updated successfully');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.js","sources":["../../src/content/issues.ts"],"sourcesContent":["import { getLogger } from '../logging';\nimport { getOpenIssues, createIssue } from '../util/github';\nimport path from 'path';\nimport os from 'os';\nimport { spawnSync } from 'child_process';\nimport fs from 'fs/promises';\n\nexport interface Issue {\n title: string;\n description: string;\n priority: 'low' | 'medium' | 'high';\n category: 'ui' | 'content' | 'functionality' | 'accessibility' | 'performance' | 'other';\n suggestions?: string[];\n}\n\nexport interface ReviewResult {\n summary: string;\n totalIssues: number;\n issues: Issue[];\n}\n\n// Get GitHub issues content\nexport const get = async (options: { limit?: number } = {}): Promise<string> => {\n const logger = getLogger();\n const { limit = 20 } = options;\n\n try {\n logger.debug('Fetching open GitHub issues...');\n const issuesLimit = Math.min(limit, 20); // Cap at 20\n const githubIssues = await getOpenIssues(issuesLimit);\n\n if (githubIssues.trim()) {\n logger.debug('Added GitHub issues to context (%d characters)', githubIssues.length);\n return githubIssues;\n } else {\n logger.debug('No open GitHub issues found');\n return '';\n }\n } catch (error: any) {\n logger.warn('Failed to fetch GitHub issues: %s', error.message);\n return '';\n }\n};\n\n// Helper function to get user choice interactively\nasync function getUserChoice(prompt: string, choices: Array<{ key: string, label: string }>): Promise<string> {\n const logger = getLogger();\n\n logger.info(prompt);\n choices.forEach(choice => {\n logger.info(` [${choice.key}] ${choice.label}`);\n });\n logger.info('');\n\n // Check if stdin is a TTY (terminal) or piped\n if (!process.stdin.isTTY) {\n // STDIN is piped, we can't use interactive prompts\n // This should not happen anymore due to fail-fast check in review.ts\n logger.error('ā ļø Unexpected: STDIN is piped in interactive mode');\n return 's'; // Default to skip\n }\n\n return new Promise(resolve => {\n // Ensure stdin is referenced so the process doesn't exit while waiting for input\n if (typeof process.stdin.ref === 'function') {\n process.stdin.ref();\n }\n\n process.stdin.setRawMode(true);\n process.stdin.resume();\n process.stdin.on('data', (key) => {\n const keyStr = key.toString().toLowerCase();\n const choice = choices.find(c => c.key === keyStr);\n if (choice) {\n process.stdin.setRawMode(false);\n process.stdin.pause();\n // Detach stdin again now that we're done\n if (typeof process.stdin.unref === 'function') {\n process.stdin.unref();\n }\n logger.info(`Selected: ${choice.label}\\n`);\n resolve(choice.key);\n }\n });\n });\n}\n\n// Helper function to serialize issue to structured text format\nfunction serializeIssue(issue: Issue): string {\n const lines = [\n '# Issue Editor',\n '',\n '# Edit the issue details below. Lines starting with \"#\" are comments and will be ignored.',\n '# Valid priorities: low, medium, high',\n '# Valid categories: ui, content, functionality, accessibility, performance, other',\n '# Suggestions should be one per line, preceded by a \"-\" or \"ā¢\"',\n '',\n `Title: ${issue.title}`,\n '',\n `Priority: ${issue.priority}`,\n '',\n `Category: ${issue.category}`,\n '',\n 'Description:',\n issue.description,\n '',\n 'Suggestions:',\n ];\n\n if (issue.suggestions && issue.suggestions.length > 0) {\n issue.suggestions.forEach(suggestion => {\n lines.push(`- ${suggestion}`);\n });\n } else {\n lines.push('# Add suggestions here, one per line with \"-\" or \"ā¢\"');\n }\n\n return lines.join('\\n');\n}\n\n// Helper function to deserialize issue from structured text format\nfunction deserializeIssue(content: string): Issue {\n const lines = content.split('\\n');\n\n // Parse the structured format\n let title = '';\n let priority: 'low' | 'medium' | 'high' = 'medium';\n let category: 'ui' | 'content' | 'functionality' | 'accessibility' | 'performance' | 'other' = 'other';\n let description = '';\n const suggestions: string[] = [];\n\n let currentSection = '';\n let descriptionLines: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n // Skip comment lines\n if (line.startsWith('#')) {\n continue;\n }\n\n // Parse field lines\n if (line.startsWith('Title:')) {\n title = line.substring(6).trim();\n } else if (line.startsWith('Priority:')) {\n const priorityValue = line.substring(9).trim().toLowerCase();\n if (priorityValue === 'low' || priorityValue === 'medium' || priorityValue === 'high') {\n priority = priorityValue;\n }\n } else if (line.startsWith('Category:')) {\n const categoryValue = line.substring(9).trim().toLowerCase();\n if (['ui', 'content', 'functionality', 'accessibility', 'performance', 'other'].includes(categoryValue)) {\n category = categoryValue as any;\n }\n } else if (line === 'Description:') {\n currentSection = 'description';\n descriptionLines = [];\n } else if (line === 'Suggestions:') {\n currentSection = 'suggestions';\n // Process accumulated description lines\n description = descriptionLines.join('\\n').trim();\n } else if (currentSection === 'description' && line !== '') {\n descriptionLines.push(lines[i]); // Keep original line with spacing\n } else if (currentSection === 'suggestions' && line !== '') {\n // Parse suggestion line\n const suggestionLine = line.replace(/^[-ā¢]\\s*/, '').trim();\n if (suggestionLine) {\n suggestions.push(suggestionLine);\n }\n }\n }\n\n // If we didn't encounter suggestions section, description might still be accumulating\n if (currentSection === 'description') {\n description = descriptionLines.join('\\n').trim();\n }\n\n return {\n title: title || 'Untitled Issue',\n priority,\n category,\n description: description || 'No description provided',\n suggestions: suggestions.length > 0 ? suggestions : undefined\n };\n}\n\n// Helper function to edit issue using editor\nasync function editIssueInteractively(issue: Issue): Promise<Issue> {\n const logger = getLogger();\n const editor = process.env.EDITOR || process.env.VISUAL || 'vi';\n\n // Create a temporary file for the user to edit\n const tmpDir = os.tmpdir();\n const tmpFilePath = path.join(tmpDir, `kodrdriv_issue_${Date.now()}.txt`);\n\n // Serialize the issue to structured text format\n const issueContent = serializeIssue(issue);\n\n await fs.writeFile(tmpFilePath, issueContent, 'utf8');\n\n logger.info(`š Opening ${editor} to edit issue...`);\n\n // Open the editor synchronously so execution resumes after the user closes it\n const result = spawnSync(editor, [tmpFilePath], { stdio: 'inherit' });\n\n if (result.error) {\n throw new Error(`Failed to launch editor '${editor}': ${result.error.message}`);\n }\n\n // Read the file back and deserialize it\n const editedContent = await fs.readFile(tmpFilePath, 'utf8');\n\n // Clean up the temporary file (best-effort ā ignore errors)\n try {\n await fs.unlink(tmpFilePath);\n } catch {\n /* ignore */\n }\n\n // Deserialize the edited content back to an Issue object\n const editedIssue = deserializeIssue(editedContent);\n\n logger.info('ā
Issue updated successfully');\n logger.debug('Updated issue: %s', JSON.stringify(editedIssue, null, 2));\n\n return editedIssue;\n}\n\n// Helper function to format issue body for GitHub\nfunction formatIssueBody(issue: Issue): string {\n let body = `## Description\\n\\n${issue.description}\\n\\n`;\n\n body += `## Details\\n\\n`;\n body += `- **Priority:** ${issue.priority}\\n`;\n body += `- **Category:** ${issue.category}\\n`;\n body += `- **Source:** Review\\n\\n`;\n\n if (issue.suggestions && issue.suggestions.length > 0) {\n body += `## Suggestions\\n\\n`;\n issue.suggestions.forEach(suggestion => {\n body += `- ${suggestion}\\n`;\n });\n body += '\\n';\n }\n\n body += `---\\n\\n`;\n body += `*This issue was automatically created from a review session.*`;\n\n return body;\n}\n\n// Helper function to format results with created GitHub issues\nfunction formatReviewResultsWithIssues(\n result: ReviewResult,\n createdIssues: Array<{ issue: Issue, githubUrl: string, number: number }>\n): string {\n let output = `š Review Results\\n\\n`;\n output += `š Summary: ${result.summary}\\n`;\n output += `š Total Issues Found: ${result.totalIssues}\\n`;\n output += `š GitHub Issues Created: ${createdIssues.length}\\n\\n`;\n\n if (result.issues && result.issues.length > 0) {\n output += `š Issues Identified:\\n\\n`;\n\n result.issues.forEach((issue, index) => {\n const priorityEmoji = issue.priority === 'high' ? 'š“' :\n issue.priority === 'medium' ? 'š”' : 'š¢';\n const categoryEmoji = issue.category === 'ui' ? 'šØ' :\n issue.category === 'content' ? 'š' :\n issue.category === 'functionality' ? 'āļø' :\n issue.category === 'accessibility' ? 'āæ' :\n issue.category === 'performance' ? 'ā”' : 'š§';\n\n output += `${index + 1}. ${priorityEmoji} ${issue.title}\\n`;\n output += ` ${categoryEmoji} Category: ${issue.category} | Priority: ${issue.priority}\\n`;\n output += ` š Description: ${issue.description}\\n`;\n\n // Check if this issue was created as a GitHub issue\n const createdIssue = createdIssues.find(ci => ci.issue === issue);\n if (createdIssue) {\n output += ` š GitHub Issue: #${createdIssue.number} - ${createdIssue.githubUrl}\\n`;\n }\n\n if (issue.suggestions && issue.suggestions.length > 0) {\n output += ` š” Suggestions:\\n`;\n issue.suggestions.forEach(suggestion => {\n output += ` ⢠${suggestion}\\n`;\n });\n }\n output += `\\n`;\n });\n } else {\n output += `ā
No specific issues identified from the review.\\n\\n`;\n }\n\n if (createdIssues.length > 0) {\n output += `\\nšÆ Created GitHub Issues:\\n`;\n createdIssues.forEach(createdIssue => {\n output += `⢠#${createdIssue.number}: ${createdIssue.issue.title} - ${createdIssue.githubUrl}\\n`;\n });\n output += `\\n`;\n }\n\n output += `š Next Steps: Review the created GitHub issues and prioritize them in your development workflow.`;\n\n return output;\n}\n\nfunction formatReviewResults(result: ReviewResult): string {\n let output = `š Review Results\\n\\n`;\n output += `š Summary: ${result.summary}\\n`;\n output += `š Total Issues Found: ${result.totalIssues}\\n\\n`;\n\n if (result.issues && result.issues.length > 0) {\n output += `š Issues Identified:\\n\\n`;\n\n result.issues.forEach((issue, index) => {\n const priorityEmoji = issue.priority === 'high' ? 'š“' :\n issue.priority === 'medium' ? 'š”' : 'š¢';\n const categoryEmoji = issue.category === 'ui' ? 'šØ' :\n issue.category === 'content' ? 'š' :\n issue.category === 'functionality' ? 'āļø' :\n issue.category === 'accessibility' ? 'āæ' :\n issue.category === 'performance' ? 'ā”' : 'š§';\n\n output += `${index + 1}. ${priorityEmoji} ${issue.title}\\n`;\n output += ` ${categoryEmoji} Category: ${issue.category} | Priority: ${issue.priority}\\n`;\n output += ` š Description: ${issue.description}\\n`;\n\n if (issue.suggestions && issue.suggestions.length > 0) {\n output += ` š” Suggestions:\\n`;\n issue.suggestions.forEach(suggestion => {\n output += ` ⢠${suggestion}\\n`;\n });\n }\n output += `\\n`;\n });\n } else {\n output += `ā
No specific issues identified from the review.\\n\\n`;\n }\n\n output += `š Next Steps: Review the identified issues and prioritize them for your development workflow.`;\n\n return output;\n}\n\n// Handle GitHub issue creation workflow\nexport const handleIssueCreation = async (\n result: ReviewResult,\n senditMode: boolean = false\n): Promise<string> => {\n const logger = getLogger();\n const createdIssues: Array<{ issue: Issue, githubUrl: string, number: number }> = [];\n\n if (!result.issues || result.issues.length === 0) {\n return formatReviewResults(result);\n }\n\n logger.info(`š Found ${result.issues.length} issues to potentially create as GitHub issues`);\n\n for (let i = 0; i < result.issues.length; i++) {\n let issue = result.issues[i];\n let shouldCreateIssue = senditMode;\n\n if (!senditMode) {\n // Interactive confirmation for each issue - keep looping until user decides\n let userChoice = '';\n while (userChoice !== 'c' && userChoice !== 's') {\n // Display issue details\n logger.info(`\\nš Issue ${i + 1} of ${result.issues.length}:`);\n logger.info(` Title: ${issue.title}`);\n logger.info(` Priority: ${issue.priority} | Category: ${issue.category}`);\n logger.info(` Description: ${issue.description}`);\n if (issue.suggestions && issue.suggestions.length > 0) {\n logger.info(` Suggestions: ${issue.suggestions.join(', ')}`);\n }\n\n // Get user choice\n userChoice = await getUserChoice('\\nWhat would you like to do with this issue?', [\n { key: 'c', label: 'Create GitHub issue' },\n { key: 's', label: 'Skip this issue' },\n { key: 'e', label: 'Edit issue details' }\n ]);\n\n if (userChoice === 'c') {\n shouldCreateIssue = true;\n } else if (userChoice === 'e') {\n // Allow user to edit the issue\n issue = await editIssueInteractively(issue);\n result.issues[i] = issue; // Update the issue in the result\n // Continue the loop to show the updated issue and ask again\n }\n // If choice is 's', loop will exit and shouldCreateIssue remains false\n }\n }\n\n if (shouldCreateIssue) {\n try {\n logger.info(`š Creating GitHub issue: \"${issue.title}\"`);\n\n // Format issue body with additional details\n const issueBody = formatIssueBody(issue);\n\n // Create labels based on priority and category\n const labels = [\n `priority-${issue.priority}`,\n `category-${issue.category}`,\n 'review'\n ];\n\n const createdIssue = await createIssue(issue.title, issueBody, labels);\n createdIssues.push({\n issue,\n githubUrl: createdIssue.html_url,\n number: createdIssue.number\n });\n\n logger.info(`ā
Created GitHub issue #${createdIssue.number}: ${createdIssue.html_url}`);\n } catch (error: any) {\n logger.error(`ā Failed to create GitHub issue for \"${issue.title}\": ${error.message}`);\n }\n }\n }\n\n // Return formatted results\n if (createdIssues.length > 0) {\n return formatReviewResultsWithIssues(result, createdIssues);\n } else {\n return formatReviewResults(result);\n }\n}; "],"names":["get","options","logger","getLogger","limit","debug","issuesLimit","Math","min","githubIssues","getOpenIssues","trim","length","error","warn","message","getUserChoice","prompt","choices","info","forEach","choice","key","label","process","stdin","isTTY","Promise","resolve","ref","setRawMode","resume","on","keyStr","toString","toLowerCase","find","c","pause","unref","serializeIssue","issue","lines","title","priority","category","description","suggestions","suggestion","push","join","deserializeIssue","content","split","currentSection","descriptionLines","i","line","startsWith","substring","priorityValue","categoryValue","includes","suggestionLine","replace","undefined","editIssueInteractively","editor","env","EDITOR","VISUAL","tmpDir","os","tmpdir","tmpFilePath","path","Date","now","issueContent","fs","writeFile","result","spawnSync","stdio","Error","editedContent","readFile","unlink","editedIssue","JSON","stringify","formatIssueBody","body","formatReviewResultsWithIssues","createdIssues","output","summary","totalIssues","issues","index","priorityEmoji","categoryEmoji","createdIssue","ci","number","githubUrl","formatReviewResults","handleIssueCreation","senditMode","shouldCreateIssue","userChoice","issueBody","labels","createIssue","html_url"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"issues.js","sources":["../../src/content/issues.ts"],"sourcesContent":["import { getLogger } from '../logging';\nimport { getUserChoice as getUserChoiceInteractive } from '../util/interactive';\nimport { getOpenIssues, createIssue } from '../util/github';\nimport path from 'path';\nimport os from 'os';\nimport { spawnSync } from 'child_process';\nimport fs from 'fs/promises';\n\nexport interface Issue {\n title: string;\n description: string;\n priority: 'low' | 'medium' | 'high';\n category: 'ui' | 'content' | 'functionality' | 'accessibility' | 'performance' | 'other';\n suggestions?: string[];\n}\n\nexport interface ReviewResult {\n summary: string;\n totalIssues: number;\n issues: Issue[];\n}\n\n// Get GitHub issues content\nexport const get = async (options: { limit?: number } = {}): Promise<string> => {\n const logger = getLogger();\n const { limit = 20 } = options;\n\n try {\n logger.debug('Fetching open GitHub issues...');\n const issuesLimit = Math.min(limit, 20); // Cap at 20\n const githubIssues = await getOpenIssues(issuesLimit);\n\n if (githubIssues.trim()) {\n logger.debug('Added GitHub issues to context (%d characters)', githubIssues.length);\n return githubIssues;\n } else {\n logger.debug('No open GitHub issues found');\n return '';\n }\n } catch (error: any) {\n logger.warn('Failed to fetch GitHub issues: %s', error.message);\n return '';\n }\n};\n\n// Helper function to get user choice interactively\nasync function getUserChoice(prompt: string, choices: Array<{ key: string, label: string }>): Promise<string> {\n return await getUserChoiceInteractive(prompt, choices);\n}\n\n// Helper function to serialize issue to structured text format\nfunction serializeIssue(issue: Issue): string {\n const lines = [\n '# Issue Editor',\n '',\n '# Edit the issue details below. Lines starting with \"#\" are comments and will be ignored.',\n '# Valid priorities: low, medium, high',\n '# Valid categories: ui, content, functionality, accessibility, performance, other',\n '# Suggestions should be one per line, preceded by a \"-\" or \"ā¢\"',\n '',\n `Title: ${issue.title}`,\n '',\n `Priority: ${issue.priority}`,\n '',\n `Category: ${issue.category}`,\n '',\n 'Description:',\n issue.description,\n '',\n 'Suggestions:',\n ];\n\n if (issue.suggestions && issue.suggestions.length > 0) {\n issue.suggestions.forEach(suggestion => {\n lines.push(`- ${suggestion}`);\n });\n } else {\n lines.push('# Add suggestions here, one per line with \"-\" or \"ā¢\"');\n }\n\n return lines.join('\\n');\n}\n\n// Helper function to deserialize issue from structured text format\nfunction deserializeIssue(content: string): Issue {\n const lines = content.split('\\n');\n\n // Parse the structured format\n let title = '';\n let priority: 'low' | 'medium' | 'high' = 'medium';\n let category: 'ui' | 'content' | 'functionality' | 'accessibility' | 'performance' | 'other' = 'other';\n let description = '';\n const suggestions: string[] = [];\n\n let currentSection = '';\n let descriptionLines: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n // Skip comment lines\n if (line.startsWith('#')) {\n continue;\n }\n\n // Parse field lines\n if (line.startsWith('Title:')) {\n title = line.substring(6).trim();\n } else if (line.startsWith('Priority:')) {\n const priorityValue = line.substring(9).trim().toLowerCase();\n if (priorityValue === 'low' || priorityValue === 'medium' || priorityValue === 'high') {\n priority = priorityValue;\n }\n } else if (line.startsWith('Category:')) {\n const categoryValue = line.substring(9).trim().toLowerCase();\n if (['ui', 'content', 'functionality', 'accessibility', 'performance', 'other'].includes(categoryValue)) {\n category = categoryValue as any;\n }\n } else if (line === 'Description:') {\n currentSection = 'description';\n descriptionLines = [];\n } else if (line === 'Suggestions:') {\n currentSection = 'suggestions';\n // Process accumulated description lines\n description = descriptionLines.join('\\n').trim();\n } else if (currentSection === 'description' && line !== '') {\n descriptionLines.push(lines[i]); // Keep original line with spacing\n } else if (currentSection === 'suggestions' && line !== '') {\n // Parse suggestion line\n const suggestionLine = line.replace(/^[-ā¢]\\s*/, '').trim();\n if (suggestionLine) {\n suggestions.push(suggestionLine);\n }\n }\n }\n\n // If we didn't encounter suggestions section, description might still be accumulating\n if (currentSection === 'description') {\n description = descriptionLines.join('\\n').trim();\n }\n\n return {\n title: title || 'Untitled Issue',\n priority,\n category,\n description: description || 'No description provided',\n suggestions: suggestions.length > 0 ? suggestions : undefined\n };\n}\n\n// Helper function to edit issue using editor\nasync function editIssueInteractively(issue: Issue): Promise<Issue> {\n const logger = getLogger();\n const editor = process.env.EDITOR || process.env.VISUAL || 'vi';\n\n // Create a temporary file for the user to edit\n const tmpDir = os.tmpdir();\n const tmpFilePath = path.join(tmpDir, `kodrdriv_issue_${Date.now()}.txt`);\n\n // Serialize the issue to structured text format\n const issueContent = serializeIssue(issue);\n\n await fs.writeFile(tmpFilePath, issueContent, 'utf8');\n\n logger.info(`š Opening ${editor} to edit issue...`);\n\n // Open the editor synchronously so execution resumes after the user closes it\n const result = spawnSync(editor, [tmpFilePath], { stdio: 'inherit' });\n\n if (result.error) {\n throw new Error(`Failed to launch editor '${editor}': ${result.error.message}`);\n }\n\n // Read the file back and deserialize it\n const editedContent = await fs.readFile(tmpFilePath, 'utf8');\n\n // Clean up the temporary file with proper error handling\n try {\n await fs.unlink(tmpFilePath);\n } catch (error: any) {\n // Only log if it's not a \"file not found\" error\n if (error.code !== 'ENOENT') {\n logger.warn(`Failed to cleanup temporary file ${tmpFilePath}: ${error.message}`);\n }\n }\n\n // Deserialize the edited content back to an Issue object\n const editedIssue = deserializeIssue(editedContent);\n\n logger.info('ā
Issue updated successfully');\n logger.debug('Updated issue: %s', JSON.stringify(editedIssue, null, 2));\n\n return editedIssue;\n}\n\n// Helper function to format issue body for GitHub\nfunction formatIssueBody(issue: Issue): string {\n let body = `## Description\\n\\n${issue.description}\\n\\n`;\n\n body += `## Details\\n\\n`;\n body += `- **Priority:** ${issue.priority}\\n`;\n body += `- **Category:** ${issue.category}\\n`;\n body += `- **Source:** Review\\n\\n`;\n\n if (issue.suggestions && issue.suggestions.length > 0) {\n body += `## Suggestions\\n\\n`;\n issue.suggestions.forEach(suggestion => {\n body += `- ${suggestion}\\n`;\n });\n body += '\\n';\n }\n\n body += `---\\n\\n`;\n body += `*This issue was automatically created from a review session.*`;\n\n return body;\n}\n\n// Helper function to format results with created GitHub issues\nfunction formatReviewResultsWithIssues(\n result: ReviewResult,\n createdIssues: Array<{ issue: Issue, githubUrl: string, number: number }>\n): string {\n let output = `š Review Results\\n\\n`;\n output += `š Summary: ${result.summary}\\n`;\n output += `š Total Issues Found: ${result.totalIssues}\\n`;\n output += `š GitHub Issues Created: ${createdIssues.length}\\n\\n`;\n\n if (result.issues && result.issues.length > 0) {\n output += `š Issues Identified:\\n\\n`;\n\n result.issues.forEach((issue, index) => {\n const priorityEmoji = issue.priority === 'high' ? 'š“' :\n issue.priority === 'medium' ? 'š”' : 'š¢';\n const categoryEmoji = issue.category === 'ui' ? 'šØ' :\n issue.category === 'content' ? 'š' :\n issue.category === 'functionality' ? 'āļø' :\n issue.category === 'accessibility' ? 'āæ' :\n issue.category === 'performance' ? 'ā”' : 'š§';\n\n output += `${index + 1}. ${priorityEmoji} ${issue.title}\\n`;\n output += ` ${categoryEmoji} Category: ${issue.category} | Priority: ${issue.priority}\\n`;\n output += ` š Description: ${issue.description}\\n`;\n\n // Check if this issue was created as a GitHub issue\n const createdIssue = createdIssues.find(ci => ci.issue === issue);\n if (createdIssue) {\n output += ` š GitHub Issue: #${createdIssue.number} - ${createdIssue.githubUrl}\\n`;\n }\n\n if (issue.suggestions && issue.suggestions.length > 0) {\n output += ` š” Suggestions:\\n`;\n issue.suggestions.forEach(suggestion => {\n output += ` ⢠${suggestion}\\n`;\n });\n }\n output += `\\n`;\n });\n } else {\n output += `ā
No specific issues identified from the review.\\n\\n`;\n }\n\n if (createdIssues.length > 0) {\n output += `\\nšÆ Created GitHub Issues:\\n`;\n createdIssues.forEach(createdIssue => {\n output += `⢠#${createdIssue.number}: ${createdIssue.issue.title} - ${createdIssue.githubUrl}\\n`;\n });\n output += `\\n`;\n }\n\n output += `š Next Steps: Review the created GitHub issues and prioritize them in your development workflow.`;\n\n return output;\n}\n\nfunction formatReviewResults(result: ReviewResult): string {\n let output = `š Review Results\\n\\n`;\n output += `š Summary: ${result.summary}\\n`;\n output += `š Total Issues Found: ${result.totalIssues}\\n\\n`;\n\n if (result.issues && result.issues.length > 0) {\n output += `š Issues Identified:\\n\\n`;\n\n result.issues.forEach((issue, index) => {\n const priorityEmoji = issue.priority === 'high' ? 'š“' :\n issue.priority === 'medium' ? 'š”' : 'š¢';\n const categoryEmoji = issue.category === 'ui' ? 'šØ' :\n issue.category === 'content' ? 'š' :\n issue.category === 'functionality' ? 'āļø' :\n issue.category === 'accessibility' ? 'āæ' :\n issue.category === 'performance' ? 'ā”' : 'š§';\n\n output += `${index + 1}. ${priorityEmoji} ${issue.title}\\n`;\n output += ` ${categoryEmoji} Category: ${issue.category} | Priority: ${issue.priority}\\n`;\n output += ` š Description: ${issue.description}\\n`;\n\n if (issue.suggestions && issue.suggestions.length > 0) {\n output += ` š” Suggestions:\\n`;\n issue.suggestions.forEach(suggestion => {\n output += ` ⢠${suggestion}\\n`;\n });\n }\n output += `\\n`;\n });\n } else {\n output += `ā
No specific issues identified from the review.\\n\\n`;\n }\n\n output += `š Next Steps: Review the identified issues and prioritize them for your development workflow.`;\n\n return output;\n}\n\n// Handle GitHub issue creation workflow\nexport const handleIssueCreation = async (\n result: ReviewResult,\n senditMode: boolean = false\n): Promise<string> => {\n const logger = getLogger();\n const createdIssues: Array<{ issue: Issue, githubUrl: string, number: number }> = [];\n\n if (!result.issues || result.issues.length === 0) {\n return formatReviewResults(result);\n }\n\n logger.info(`š Found ${result.issues.length} issues to potentially create as GitHub issues`);\n\n for (let i = 0; i < result.issues.length; i++) {\n let issue = result.issues[i];\n let shouldCreateIssue = senditMode;\n\n if (!senditMode) {\n // Interactive confirmation for each issue - keep looping until user decides\n let userChoice = '';\n while (userChoice !== 'c' && userChoice !== 's') {\n // Display issue details\n logger.info(`\\nš Issue ${i + 1} of ${result.issues.length}:`);\n logger.info(` Title: ${issue.title}`);\n logger.info(` Priority: ${issue.priority} | Category: ${issue.category}`);\n logger.info(` Description: ${issue.description}`);\n if (issue.suggestions && issue.suggestions.length > 0) {\n logger.info(` Suggestions: ${issue.suggestions.join(', ')}`);\n }\n\n // Get user choice\n userChoice = await getUserChoice('\\nWhat would you like to do with this issue?', [\n { key: 'c', label: 'Create GitHub issue' },\n { key: 's', label: 'Skip this issue' },\n { key: 'e', label: 'Edit issue details' }\n ]);\n\n if (userChoice === 'c') {\n shouldCreateIssue = true;\n } else if (userChoice === 'e') {\n // Allow user to edit the issue\n issue = await editIssueInteractively(issue);\n result.issues[i] = issue; // Update the issue in the result\n // Continue the loop to show the updated issue and ask again\n }\n // If choice is 's', loop will exit and shouldCreateIssue remains false\n }\n }\n\n if (shouldCreateIssue) {\n try {\n logger.info(`š Creating GitHub issue: \"${issue.title}\"`);\n\n // Format issue body with additional details\n const issueBody = formatIssueBody(issue);\n\n // Create labels based on priority and category\n const labels = [\n `priority-${issue.priority}`,\n `category-${issue.category}`,\n 'review'\n ];\n\n const createdIssue = await createIssue(issue.title, issueBody, labels);\n createdIssues.push({\n issue,\n githubUrl: createdIssue.html_url,\n number: createdIssue.number\n });\n\n logger.info(`ā
Created GitHub issue #${createdIssue.number}: ${createdIssue.html_url}`);\n } catch (error: any) {\n logger.error(`ā Failed to create GitHub issue for \"${issue.title}\": ${error.message}`);\n }\n }\n }\n\n // Return formatted results\n if (createdIssues.length > 0) {\n return formatReviewResultsWithIssues(result, createdIssues);\n } else {\n return formatReviewResults(result);\n }\n};\n"],"names":["get","options","logger","getLogger","limit","debug","issuesLimit","Math","min","githubIssues","getOpenIssues","trim","length","error","warn","message","getUserChoice","prompt","choices","getUserChoiceInteractive","serializeIssue","issue","lines","title","priority","category","description","suggestions","forEach","suggestion","push","join","deserializeIssue","content","split","currentSection","descriptionLines","i","line","startsWith","substring","priorityValue","toLowerCase","categoryValue","includes","suggestionLine","replace","undefined","editIssueInteractively","editor","process","env","EDITOR","VISUAL","tmpDir","os","tmpdir","tmpFilePath","path","Date","now","issueContent","fs","writeFile","info","result","spawnSync","stdio","Error","editedContent","readFile","unlink","code","editedIssue","JSON","stringify","formatIssueBody","body","formatReviewResultsWithIssues","createdIssues","output","summary","totalIssues","issues","index","priorityEmoji","categoryEmoji","createdIssue","find","ci","number","githubUrl","formatReviewResults","handleIssueCreation","senditMode","shouldCreateIssue","userChoice","key","label","issueBody","labels","createIssue","html_url"],"mappings":"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"}
|
package/dist/logging.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import winston from 'winston';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
|
-
import
|
|
3
|
+
import path__default from 'path';
|
|
4
4
|
import { PROGRAM_NAME, DEFAULT_OUTPUT_DIRECTORY, DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS } from './constants.js';
|
|
5
5
|
|
|
6
6
|
// Track if debug directory has been ensured for this session
|
|
7
7
|
let debugDirectoryEnsured = false;
|
|
8
8
|
const ensureDebugDirectory = ()=>{
|
|
9
9
|
if (debugDirectoryEnsured) return;
|
|
10
|
-
const debugDir =
|
|
10
|
+
const debugDir = path__default.join(DEFAULT_OUTPUT_DIRECTORY, 'debug');
|
|
11
11
|
try {
|
|
12
12
|
fs.mkdirSync(debugDir, {
|
|
13
13
|
recursive: true
|
|
@@ -56,7 +56,7 @@ const createTransports = (level)=>{
|
|
|
56
56
|
// Add file transport for debug levels (debug and silly)
|
|
57
57
|
if (level === 'debug' || level === 'silly') {
|
|
58
58
|
ensureDebugDirectory();
|
|
59
|
-
const debugLogPath =
|
|
59
|
+
const debugLogPath = path__default.join(DEFAULT_OUTPUT_DIRECTORY, 'debug', generateDebugLogFilename());
|
|
60
60
|
transports.push(new winston.transports.File({
|
|
61
61
|
filename: debugLogPath,
|
|
62
62
|
level: 'debug',
|
package/dist/logging.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sources":["../src/logging.ts"],"sourcesContent":["import winston from 'winston';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\nimport path from 'path';\nimport { DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS, PROGRAM_NAME, DEFAULT_OUTPUT_DIRECTORY } from './constants';\n\nexport interface LogContext {\n [key: string]: any;\n}\n\n// Track if debug directory has been ensured for this session\nlet debugDirectoryEnsured = false;\n\nconst ensureDebugDirectory = () => {\n if (debugDirectoryEnsured) return;\n\n const debugDir = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug');\n\n try {\n fs.mkdirSync(debugDir, { recursive: true });\n debugDirectoryEnsured = true;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Failed to create debug directory ${debugDir}:`, error);\n }\n};\n\nconst generateDebugLogFilename = () => {\n const now = new Date();\n const timestamp = now.toISOString()\n .replace(/[-:]/g, '')\n .replace(/\\./g, '')\n .replace('T', '-')\n .replace('Z', '');\n\n return `${timestamp}-debug.log`;\n};\n\nconst createTransports = (level: string) => {\n const transports: winston.transport[] = [];\n\n // Always add console transport for info level and above\n if (level === 'info') {\n transports.push(\n new winston.transports.Console({\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ level, message, dryRun }): string => {\n const dryRunPrefix = dryRun ? 'š DRY RUN: ' : '';\n // For info level messages, don't show the level prefix\n if (level.includes('info')) {\n return `${dryRunPrefix}${String(message)}`;\n }\n // For warn, error, etc., show the level prefix\n return `${level}: ${dryRunPrefix}${String(message)}`;\n })\n )\n })\n );\n } else {\n // For debug/verbose levels, add console transport that shows info and above\n transports.push(\n new winston.transports.Console({\n level: 'info', // Show info, warn, and error on console\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // For info level messages, use simpler format without timestamp\n if (level.includes('info')) {\n const dryRunPrefix = dryRun ? 'š DRY RUN: ' : '';\n return `${dryRunPrefix}${String(message)}`;\n }\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n const dryRunPrefix = dryRun ? 'š DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n )\n })\n );\n\n // Add file transport for debug levels (debug and silly)\n if (level === 'debug' || level === 'silly') {\n ensureDebugDirectory();\n\n const debugLogPath = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug', generateDebugLogFilename());\n\n transports.push(\n new winston.transports.File({\n filename: debugLogPath,\n level: 'debug', // Capture debug and above in the file\n format: winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.printf(({ timestamp, level, message, ...meta }) => {\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n return `${timestamp} ${level}: ${message}${metaStr}`;\n })\n )\n })\n );\n }\n }\n\n return transports;\n};\n\nconst createFormat = (level: string) => {\n const baseFormats = [\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n ];\n\n if (level === 'info') {\n return winston.format.combine(\n ...baseFormats,\n winston.format.printf(({ message, dryRun, ..._meta }): string => {\n // Auto-format dry-run messages\n if (dryRun) {\n return `š DRY RUN: ${message}`;\n }\n return String(message);\n })\n );\n }\n\n return winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n ...baseFormats,\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n const dryRunPrefix = dryRun ? 'š DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n );\n};\n\n// Create the logger instance once\nconst logger = winston.createLogger({\n level: 'info',\n format: createFormat('info'),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports('info'),\n});\n\nexport const setLogLevel = (level: string) => {\n // Reconfigure the existing logger instead of creating a new one\n logger.configure({\n level,\n format: createFormat(level),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports(level),\n });\n};\n\nexport const getLogger = () => logger;\n\n/**\n * Get a logger that automatically formats messages for dry-run mode\n */\nexport const getDryRunLogger = (isDryRun: boolean) => {\n if (!isDryRun) {\n return logger;\n }\n\n // Return a wrapper that adds dry-run context to all log calls\n return {\n info: (message: string, ...args: any[]) => logger.info(message, { dryRun: true }, ...args),\n warn: (message: string, ...args: any[]) => logger.warn(message, { dryRun: true }, ...args),\n error: (message: string, ...args: any[]) => logger.error(message, { dryRun: true }, ...args),\n debug: (message: string, ...args: any[]) => logger.debug(message, { dryRun: true }, ...args),\n verbose: (message: string, ...args: any[]) => logger.verbose(message, { dryRun: true }, ...args),\n silly: (message: string, ...args: any[]) => logger.silly(message, { dryRun: true }, ...args),\n };\n};\n"],"names":["debugDirectoryEnsured","ensureDebugDirectory","debugDir","path","join","DEFAULT_OUTPUT_DIRECTORY","fs","mkdirSync","recursive","error","console","generateDebugLogFilename","now","Date","timestamp","toISOString","replace","createTransports","level","transports","push","winston","Console","format","combine","colorize","printf","message","dryRun","dryRunPrefix","includes","String","meta","metaStr","Object","keys","length","JSON","stringify","debugLogPath","File","filename","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","errors","stack","splat","createFormat","baseFormats","_meta","logger","createLogger","defaultMeta","service","PROGRAM_NAME","setLogLevel","configure","getLogger","getDryRunLogger","isDryRun","info","args","warn","debug","verbose","silly"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logging.js","sources":["../src/logging.ts"],"sourcesContent":["import winston from 'winston';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\nimport path from 'path';\nimport { DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS, PROGRAM_NAME, DEFAULT_OUTPUT_DIRECTORY } from './constants';\n\nexport interface LogContext {\n [key: string]: any;\n}\n\n// Track if debug directory has been ensured for this session\nlet debugDirectoryEnsured = false;\n\nconst ensureDebugDirectory = () => {\n if (debugDirectoryEnsured) return;\n\n const debugDir = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug');\n\n try {\n fs.mkdirSync(debugDir, { recursive: true });\n debugDirectoryEnsured = true;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Failed to create debug directory ${debugDir}:`, error);\n }\n};\n\nconst generateDebugLogFilename = () => {\n const now = new Date();\n const timestamp = now.toISOString()\n .replace(/[-:]/g, '')\n .replace(/\\./g, '')\n .replace('T', '-')\n .replace('Z', '');\n\n return `${timestamp}-debug.log`;\n};\n\nconst createTransports = (level: string) => {\n const transports: winston.transport[] = [];\n\n // Always add console transport for info level and above\n if (level === 'info') {\n transports.push(\n new winston.transports.Console({\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ level, message, dryRun }): string => {\n const dryRunPrefix = dryRun ? 'š DRY RUN: ' : '';\n // For info level messages, don't show the level prefix\n if (level.includes('info')) {\n return `${dryRunPrefix}${String(message)}`;\n }\n // For warn, error, etc., show the level prefix\n return `${level}: ${dryRunPrefix}${String(message)}`;\n })\n )\n })\n );\n } else {\n // For debug/verbose levels, add console transport that shows info and above\n transports.push(\n new winston.transports.Console({\n level: 'info', // Show info, warn, and error on console\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // For info level messages, use simpler format without timestamp\n if (level.includes('info')) {\n const dryRunPrefix = dryRun ? 'š DRY RUN: ' : '';\n return `${dryRunPrefix}${String(message)}`;\n }\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n const dryRunPrefix = dryRun ? 'š DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n )\n })\n );\n\n // Add file transport for debug levels (debug and silly)\n if (level === 'debug' || level === 'silly') {\n ensureDebugDirectory();\n\n const debugLogPath = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug', generateDebugLogFilename());\n\n transports.push(\n new winston.transports.File({\n filename: debugLogPath,\n level: 'debug', // Capture debug and above in the file\n format: winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.printf(({ timestamp, level, message, ...meta }) => {\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n return `${timestamp} ${level}: ${message}${metaStr}`;\n })\n )\n })\n );\n }\n }\n\n return transports;\n};\n\nconst createFormat = (level: string) => {\n const baseFormats = [\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n ];\n\n if (level === 'info') {\n return winston.format.combine(\n ...baseFormats,\n winston.format.printf(({ message, dryRun, ..._meta }): string => {\n // Auto-format dry-run messages\n if (dryRun) {\n return `š DRY RUN: ${message}`;\n }\n return String(message);\n })\n );\n }\n\n return winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n ...baseFormats,\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';\n const dryRunPrefix = dryRun ? 'š DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n );\n};\n\n// Create the logger instance once\nconst logger = winston.createLogger({\n level: 'info',\n format: createFormat('info'),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports('info'),\n});\n\nexport const setLogLevel = (level: string) => {\n // Reconfigure the existing logger instead of creating a new one\n logger.configure({\n level,\n format: createFormat(level),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports(level),\n });\n};\n\nexport const getLogger = () => logger;\n\n/**\n * Get a logger that automatically formats messages for dry-run mode\n */\nexport const getDryRunLogger = (isDryRun: boolean) => {\n if (!isDryRun) {\n return logger;\n }\n\n // Return a wrapper that adds dry-run context to all log calls\n return {\n info: (message: string, ...args: any[]) => logger.info(message, { dryRun: true }, ...args),\n warn: (message: string, ...args: any[]) => logger.warn(message, { dryRun: true }, ...args),\n error: (message: string, ...args: any[]) => logger.error(message, { dryRun: true }, ...args),\n debug: (message: string, ...args: any[]) => logger.debug(message, { dryRun: true }, ...args),\n verbose: (message: string, ...args: any[]) => logger.verbose(message, { dryRun: true }, ...args),\n silly: (message: string, ...args: any[]) => logger.silly(message, { dryRun: true }, ...args),\n };\n};\n"],"names":["debugDirectoryEnsured","ensureDebugDirectory","debugDir","path","join","DEFAULT_OUTPUT_DIRECTORY","fs","mkdirSync","recursive","error","console","generateDebugLogFilename","now","Date","timestamp","toISOString","replace","createTransports","level","transports","push","winston","Console","format","combine","colorize","printf","message","dryRun","dryRunPrefix","includes","String","meta","metaStr","Object","keys","length","JSON","stringify","debugLogPath","File","filename","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","errors","stack","splat","createFormat","baseFormats","_meta","logger","createLogger","defaultMeta","service","PROGRAM_NAME","setLogLevel","configure","getLogger","getDryRunLogger","isDryRun","info","args","warn","debug","verbose","silly"],"mappings":"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"}
|