@eldrforge/commands-audio 0.1.0 â 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +29 -6663
- package/dist/index.js.map +1 -1
- package/package.json +11 -6
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/commands/select-audio.ts","../../commands-git/node_modules/shell-escape/shell-escape.js","../../git-tools/dist/index.js","../../commands-git/node_modules/@eldrforge/github-tools/dist/logger.js","../../commands-git/node_modules/universal-user-agent/index.js","../../commands-git/node_modules/before-after-hook/lib/register.js","../../commands-git/node_modules/before-after-hook/lib/add.js","../../commands-git/node_modules/before-after-hook/lib/remove.js","../../commands-git/node_modules/before-after-hook/index.js","../../commands-git/node_modules/@octokit/endpoint/dist-bundle/index.js","../../commands-git/node_modules/fast-content-type-parse/index.js","../../commands-git/node_modules/@octokit/request-error/dist-src/index.js","../../commands-git/node_modules/@octokit/request/dist-bundle/index.js","../../commands-git/node_modules/@octokit/graphql/dist-bundle/index.js","../../commands-git/node_modules/@octokit/auth-token/dist-bundle/index.js","../../commands-git/node_modules/@octokit/core/dist-src/version.js","../../commands-git/node_modules/@octokit/core/dist-src/index.js","../../commands-git/node_modules/@octokit/plugin-request-log/dist-src/version.js","../../commands-git/node_modules/@octokit/plugin-request-log/dist-src/index.js","../../commands-git/node_modules/@octokit/plugin-paginate-rest/dist-bundle/index.js","../../commands-git/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/version.js","../../commands-git/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/generated/endpoints.js","../../commands-git/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/endpoints-to-methods.js","../../commands-git/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/index.js","../../commands-git/node_modules/@octokit/rest/dist-src/version.js","../../commands-git/node_modules/@octokit/rest/dist-src/index.js","../../commands-git/node_modules/@eldrforge/github-tools/node_modules/@eldrforge/git-tools/dist/index.js","../../commands-git/node_modules/@eldrforge/github-tools/dist/github.js","../../commands-git/node_modules/@eldrforge/github-tools/dist/issues.js","../../commands-git/node_modules/@eldrforge/github-tools/dist/releaseNotes.js","../../commands-git/dist/index.js","../src/commands/audio-commit.ts","../src/commands/audio-review.ts"],"sourcesContent":["#!/usr/bin/env node\nimport path from 'path';\nimport os from 'os';\nimport { getDryRunLogger, Config } from '@eldrforge/core';\nimport { selectAndConfigureAudioDevice } from '@theunwalked/unplayable';\n\nconst getUnplayableConfigPath = (): string => {\n try {\n return path.join(os.homedir(), '.unplayable', 'audio-device.json');\n } catch (error: any) {\n throw new Error(`Failed to determine home directory: ${error.message}`);\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n if (isDryRun) {\n try {\n const configPath = getUnplayableConfigPath();\n logger.info('AUDIO_SELECT_DRY_RUN: Would start audio device selection | Mode: dry-run | Purpose: Choose input device');\n logger.info('AUDIO_SELECT_SAVE_DRY_RUN: Would save device to config | Mode: dry-run | Path: %s', configPath);\n return 'Audio device selection completed (dry run)';\n } catch (error: any) {\n logger.warn('AUDIO_SELECT_CONFIG_PATH_ERROR: Error determining config path | Error: %s | Impact: Cannot show save location', error.message);\n return 'Audio device selection completed (dry run)';\n }\n }\n\n try {\n const preferencesDir = path.join(os.homedir(), '.unplayable');\n const result = await selectAndConfigureAudioDevice(preferencesDir, logger, runConfig.debug);\n return result;\n } catch (error: any) {\n // Check if this is a home directory error\n if (error.message && error.message.includes('Failed to determine home directory')) {\n logger.error('AUDIO_SELECT_FAILED: Audio device selection failed | Error: %s', error.message);\n throw new Error(`Failed to determine home directory: ${error.message}`);\n } else {\n const errorMessage = error.message || error.toString();\n logger.error('AUDIO_SELECT_COMMAND_FAILED: Audio device selection command failed | Error: %s | Status: failed', errorMessage);\n throw new Error(`Audio device selection failed: ${errorMessage}`);\n }\n }\n};\n\n","module.exports = shellescape;\n\n// return a shell compatible format\nfunction shellescape(a) {\n var ret = [];\n\n a.forEach(function(s) {\n if (!/^[A-Za-z0-9_\\/-]+$/.test(s)) {\n s = \"'\"+s.replace(/'/g,\"'\\\\''\")+\"'\";\n s = s.replace(/^(?:'')+/g, '') // unduplicate single-quote at the beginning\n .replace(/\\\\'''/g, \"\\\\'\" ); // remove non-escaped single-quote if there are enclosed between 2 escaped\n }\n ret.push(s);\n });\n\n return ret.join(' ');\n}\n","import { spawn, exec } from 'child_process';\nimport util from 'util';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport * as semver from 'semver';\n\n/**\n * Minimal logging interface that git-tools requires.\n * Allows consumers to provide their own logger implementation (e.g., Winston, console, etc.)\n */ function _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n/**\n * Default console-based logger implementation\n */ class ConsoleLogger {\n shouldLog(level) {\n const levels = [\n 'error',\n 'warn',\n 'info',\n 'verbose',\n 'debug'\n ];\n const currentLevelIndex = levels.indexOf(this.level);\n const messageLevelIndex = levels.indexOf(level);\n return messageLevelIndex <= currentLevelIndex;\n }\n error(message, ...meta) {\n if (this.shouldLog('error')) {\n // eslint-disable-next-line no-console\n console.error(message, ...meta);\n }\n }\n warn(message, ...meta) {\n if (this.shouldLog('warn')) {\n // eslint-disable-next-line no-console\n console.warn(message, ...meta);\n }\n }\n info(message, ...meta) {\n if (this.shouldLog('info')) {\n // eslint-disable-next-line no-console\n console.info(message, ...meta);\n }\n }\n verbose(message, ...meta) {\n if (this.shouldLog('verbose')) {\n // eslint-disable-next-line no-console\n console.log('[VERBOSE]', message, ...meta);\n }\n }\n debug(message, ...meta) {\n if (this.shouldLog('debug')) {\n // eslint-disable-next-line no-console\n console.log('[DEBUG]', message, ...meta);\n }\n }\n constructor(level = 'info'){\n _define_property(this, \"level\", void 0);\n this.level = level;\n }\n}\n/**\n * Global logger instance - defaults to console logger\n * Use setLogger() to replace with your own implementation\n */ let globalLogger = new ConsoleLogger();\n/**\n * Set the global logger instance\n */ function setLogger(logger) {\n globalLogger = logger;\n}\n/**\n * Get the global logger instance\n */ function getLogger() {\n return globalLogger;\n}\n\n/**\n * Escapes shell arguments to prevent command injection\n */ function escapeShellArg(arg) {\n // For Windows, we need different escaping\n if (process.platform === 'win32') {\n // Escape double quotes and backslashes\n return `\"${arg.replace(/[\\\\\"]/g, '\\\\$&')}\"`;\n } else {\n // For Unix-like systems, escape single quotes\n return `'${arg.replace(/'/g, \"'\\\\''\")}'`;\n }\n}\n/**\n * Validates git references to prevent injection\n */ function validateGitRef(ref) {\n // Git refs can contain letters, numbers, hyphens, underscores, slashes, and dots\n // But cannot contain certain dangerous characters\n const validRefPattern = /^[a-zA-Z0-9._/-]+$/;\n const invalidPatterns = [\n /\\.\\./,\n /^-/,\n /[\\s;<>|&`$(){}[\\]]/ // No shell metacharacters\n ];\n if (!validRefPattern.test(ref)) {\n return false;\n }\n return !invalidPatterns.some((pattern)=>pattern.test(ref));\n}\n/**\n * Validates file paths to prevent injection\n */ function validateFilePath(filePath) {\n // Basic validation - no shell metacharacters\n const invalidChars = /[;<>|&`$(){}[\\]]/;\n return !invalidChars.test(filePath);\n}\n/**\n * Securely executes a command with arguments array (no shell injection risk)\n */ async function runSecure(command, args = [], options = {}) {\n const logger = getLogger();\n // Extract our custom option and pass the rest to spawn\n const { suppressErrorLogging = false, ...spawnOptions } = options || {};\n logger.debug(`runSecure: command=\"${command}\" args=[${args.join(', ')}] suppressErrorLogging=${suppressErrorLogging}`);\n return new Promise((resolve, reject)=>{\n logger.verbose(`Executing command securely: ${command} ${args.join(' ')}`);\n logger.verbose(`Working directory: ${(spawnOptions === null || spawnOptions === void 0 ? void 0 : spawnOptions.cwd) || process.cwd()}`);\n const child = spawn(command, args, {\n ...spawnOptions,\n shell: false,\n stdio: 'pipe'\n });\n let stdout = '';\n let stderr = '';\n if (child.stdout) {\n child.stdout.on('data', (data)=>{\n stdout += data.toString();\n });\n }\n if (child.stderr) {\n child.stderr.on('data', (data)=>{\n stderr += data.toString();\n });\n }\n child.on('close', (code)=>{\n if (code === 0) {\n logger.verbose(`Command completed successfully`);\n logger.verbose(`stdout: ${stdout}`);\n if (stderr) {\n logger.verbose(`stderr: ${stderr}`);\n }\n resolve({\n stdout,\n stderr\n });\n } else {\n if (!suppressErrorLogging) {\n logger.error(`Command failed with exit code ${code}`);\n logger.error(`stdout: ${stdout}`);\n logger.error(`stderr: ${stderr}`);\n }\n reject(new Error(`Command \"${[\n command,\n ...args\n ].join(' ')}\" failed with exit code ${code}`));\n }\n });\n child.on('error', (error)=>{\n if (!suppressErrorLogging) {\n logger.error(`Command failed to start: ${error.message}`);\n }\n reject(error);\n });\n });\n}\n/**\n * Securely executes a command with inherited stdio (no shell injection risk)\n */ async function runSecureWithInheritedStdio(command, args = [], options = {}) {\n const logger = getLogger();\n return new Promise((resolve, reject)=>{\n logger.verbose(`Executing command securely with inherited stdio: ${command} ${args.join(' ')}`);\n logger.verbose(`Working directory: ${(options === null || options === void 0 ? void 0 : options.cwd) || process.cwd()}`);\n const child = spawn(command, args, {\n ...options,\n shell: false,\n stdio: 'inherit'\n });\n child.on('close', (code)=>{\n if (code === 0) {\n logger.verbose(`Command completed successfully with code ${code}`);\n resolve();\n } else {\n logger.error(`Command failed with exit code ${code}`);\n reject(new Error(`Command \"${[\n command,\n ...args\n ].join(' ')}\" failed with exit code ${code}`));\n }\n });\n child.on('error', (error)=>{\n logger.error(`Command failed to start: ${error.message}`);\n reject(error);\n });\n });\n}\nasync function run(command, options = {}) {\n const logger = getLogger();\n const execPromise = util.promisify(exec);\n // Extract our custom option and pass the rest to exec\n const { suppressErrorLogging = false, ...execOptions } = options || {};\n // Ensure encoding is set to 'utf8' to get string output instead of Buffer\n const finalOptions = {\n encoding: 'utf8',\n ...execOptions\n };\n logger.debug(`run: command=\"${command}\" suppressErrorLogging=${suppressErrorLogging}`);\n logger.verbose(`Executing command: ${command}`);\n logger.verbose(`Working directory: ${(finalOptions === null || finalOptions === void 0 ? void 0 : finalOptions.cwd) || process.cwd()}`);\n logger.verbose(`Environment variables: ${Object.keys((finalOptions === null || finalOptions === void 0 ? void 0 : finalOptions.env) || process.env).length} variables`);\n try {\n const result = await execPromise(command, finalOptions);\n logger.verbose(`Command completed successfully`);\n logger.verbose(`stdout: ${result.stdout}`);\n if (result.stderr) {\n logger.verbose(`stderr: ${result.stderr}`);\n }\n // Ensure result is properly typed as strings\n return {\n stdout: String(result.stdout),\n stderr: String(result.stderr)\n };\n } catch (error) {\n if (!suppressErrorLogging) {\n logger.error(`Command failed: ${command}`);\n logger.error(`Error: ${error.message}`);\n logger.error(`Exit code: ${error.code}`);\n logger.error(`Signal: ${error.signal}`);\n if (error.stdout) {\n logger.error(`stdout: ${error.stdout}`);\n }\n if (error.stderr) {\n logger.error(`stderr: ${error.stderr}`);\n }\n } else {\n // Still log at debug level for troubleshooting\n logger.debug(`Command failed (suppressed): ${command} | Error: ${error.message}`);\n }\n throw error;\n }\n}\n/**\n * @deprecated Use runSecureWithInheritedStdio instead for better security\n * Legacy function for backward compatibility - parses shell command string\n */ async function runWithInheritedStdio(command, options = {}) {\n // Parse command to extract command and arguments safely\n const parts = command.trim().split(/\\s+/);\n if (parts.length === 0) {\n throw new Error('Empty command provided');\n }\n const cmd = parts[0];\n const args = parts.slice(1);\n // Use the secure version\n return runSecureWithInheritedStdio(cmd, args, options);\n}\nasync function runWithDryRunSupport(command, isDryRun, options = {}, useInheritedStdio = false) {\n const logger = getLogger();\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute command: ${command}`);\n return {\n stdout: '',\n stderr: ''\n };\n }\n if (useInheritedStdio) {\n await runWithInheritedStdio(command, options);\n return {\n stdout: '',\n stderr: ''\n }; // No output captured when using inherited stdio\n }\n return run(command, options);\n}\n/**\n * Secure version of runWithDryRunSupport using argument arrays\n */ async function runSecureWithDryRunSupport(command, args = [], isDryRun, options = {}, useInheritedStdio = false) {\n const logger = getLogger();\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute command: ${command} ${args.join(' ')}`);\n return {\n stdout: '',\n stderr: ''\n };\n }\n if (useInheritedStdio) {\n await runSecureWithInheritedStdio(command, args, options);\n return {\n stdout: '',\n stderr: ''\n }; // No output captured when using inherited stdio\n }\n return runSecure(command, args, options);\n}\n\nconst child = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({\n __proto__: null,\n escapeShellArg,\n run,\n runSecure,\n runSecureWithDryRunSupport,\n runSecureWithInheritedStdio,\n runWithDryRunSupport,\n runWithInheritedStdio,\n validateFilePath,\n validateGitRef\n}, Symbol.toStringTag, { value: 'Module' }));\n\n/**\n * Runtime validation utilities for safe type handling\n */ /**\n * Safely parses JSON with error handling\n */ const safeJsonParse = (jsonString, context)=>{\n try {\n const parsed = JSON.parse(jsonString);\n if (parsed === null || parsed === undefined) {\n throw new Error('Parsed JSON is null or undefined');\n }\n return parsed;\n } catch (error) {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Failed to parse JSON${contextStr}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n};\n/**\n * Validates that a value is a non-empty string\n */ const validateString = (value, fieldName)=>{\n if (typeof value !== 'string') {\n throw new Error(`${fieldName} must be a string, got ${typeof value}`);\n }\n if (value.trim() === '') {\n throw new Error(`${fieldName} cannot be empty`);\n }\n return value;\n};\n/**\n * Validates that a value exists and has a specific property\n */ const validateHasProperty = (obj, property, context)=>{\n if (!obj || typeof obj !== 'object') {\n const contextStr = context ? ` in ${context}` : '';\n throw new Error(`Object is null or not an object${contextStr}`);\n }\n if (!(property in obj)) {\n const contextStr = context ? ` in ${context}` : '';\n throw new Error(`Missing required property '${property}'${contextStr}`);\n }\n};\n/**\n * Validates package.json structure has basic required fields\n */ const validatePackageJson = (data, context, requireName = true)=>{\n if (!data || typeof data !== 'object') {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Invalid package.json${contextStr}: not an object`);\n }\n if (requireName && typeof data.name !== 'string') {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Invalid package.json${contextStr}: name must be a string`);\n }\n return data;\n};\n\n/**\n * Validates that a git remote name is safe (prevents option injection).\n * Git remote names must not start with '-' and should match /^[A-Za-z0-9._\\/-]+$/\n */ function isValidGitRemoteName(remote) {\n // Disallow starting dash, spaces, and only allow common git remote name characters.\n // See: https://git-scm.com/docs/git-remote#_remotes\n return typeof remote === 'string' && remote.length > 0 && !remote.startsWith('-') && /^[A-Za-z0-9._/-]+$/.test(remote);\n}\n/**\n * Validates that a git branch name is safe to pass as a command-line argument.\n * Branch names must not start with '-' and should match /^[A-Za-z0-9._\\/-]+$/\n * This prevents option injection such as '--upload-pack=...'.\n */ function isValidGitBranchName(branchName) {\n return typeof branchName === 'string' && branchName.length > 0 && !branchName.startsWith('-') && /^[A-Za-z0-9._/-]+$/.test(branchName);\n}\n/**\n * Tests if a git reference exists and is valid (silent version that doesn't log errors)\n */ const isValidGitRefSilent = async (ref)=>{\n try {\n // Validate the ref first to prevent injection\n if (!validateGitRef(ref)) {\n return false;\n }\n await runSecure('git', [\n 'rev-parse',\n '--verify',\n ref\n ], {\n stdio: 'ignore',\n suppressErrorLogging: true\n });\n return true;\n } catch {\n return false;\n }\n};\n/**\n * Tests if a git reference exists and is valid\n */ const isValidGitRef = async (ref)=>{\n const logger = getLogger();\n try {\n // Validate the ref first to prevent injection\n if (!validateGitRef(ref)) {\n logger.debug(`Git reference '${ref}' contains invalid characters`);\n return false;\n }\n await runSecure('git', [\n 'rev-parse',\n '--verify',\n ref\n ], {\n stdio: 'ignore'\n });\n logger.debug(`Git reference '${ref}' is valid`);\n return true;\n } catch (error) {\n logger.debug(`Git reference '${ref}' is not valid: ${error}`);\n return false;\n }\n};\n/**\n * Finds the previous release tag based on the current version using semantic versioning.\n * Returns the highest version tag that is less than the current version.\n *\n * @param currentVersion The current version (e.g., \"1.2.3\", \"2.0.0\")\n * @param tagPattern The pattern to match tags (e.g., \"v*\", \"working/v*\")\n * @returns The previous release tag or null if none found\n */ const findPreviousReleaseTag = async (currentVersion, tagPattern = 'v*')=>{\n const logger = getLogger();\n try {\n // Parse current version first to validate it\n const currentSemver = semver.parse(currentVersion);\n if (!currentSemver) {\n logger.warn(`â Invalid version format: ${currentVersion}`);\n return null;\n }\n logger.info(`đ findPreviousReleaseTag: Looking for tags matching \"${tagPattern}\" < ${currentVersion}`);\n // Get all tags - try sorted first, fallback to unsorted\n let tags;\n try {\n logger.info(` Running: git tag -l \"${tagPattern}\" --sort=-version:refname`);\n const { stdout } = await runSecure('git', [\n 'tag',\n '-l',\n tagPattern,\n '--sort=-version:refname'\n ]);\n tags = stdout.trim().split('\\n').filter((tag)=>tag.length > 0);\n logger.info(` â
Found ${tags.length} tags matching pattern \"${tagPattern}\"`);\n if (tags.length > 0) {\n logger.info(` đ Tags (newest first): ${tags.slice(0, 15).join(', ')}${tags.length > 15 ? ` ... (${tags.length - 15} more)` : ''}`);\n }\n } catch (sortError) {\n // Fallback for older git versions that don't support --sort\n logger.info(` â ī¸ Git tag --sort failed: ${sortError.message}`);\n logger.info(` Falling back to manual sorting...`);\n const { stdout } = await runSecure('git', [\n 'tag',\n '-l',\n tagPattern\n ]);\n tags = stdout.trim().split('\\n').filter((tag)=>tag.length > 0);\n logger.info(` Found ${tags.length} tags (unsorted) matching pattern \"${tagPattern}\"`);\n // Manual semantic version sorting\n tags.sort((a, b)=>{\n const aMatch = a.match(/v?(\\d+\\.\\d+\\.\\d+.*?)$/);\n const bMatch = b.match(/v?(\\d+\\.\\d+\\.\\d+.*?)$/);\n if (!aMatch || !bMatch) return 0;\n const aSemver = semver.parse(aMatch[1]);\n const bSemver = semver.parse(bMatch[1]);\n if (!aSemver || !bSemver) return 0;\n return semver.rcompare(aSemver, bSemver);\n });\n logger.info(` â
Sorted ${tags.length} tags manually`);\n }\n if (tags.length === 0) {\n logger.warn('');\n logger.warn(`â NO TAGS FOUND matching pattern \"${tagPattern}\"`);\n logger.warn(` To verify, run: git tag -l '${tagPattern}'`);\n logger.warn('');\n return null;\n }\n logger.info(` đŦ Processing ${tags.length} tags to find the highest version < ${currentVersion}...`);\n // Find the highest version that is less than the current version\n let previousTag = null;\n let previousVersion = null;\n let validTags = 0;\n let skippedTags = 0;\n for (const tag of tags){\n // Extract version from tag - handle \"v1.2.13\", \"1.2.13\", and \"working/v1.2.13\"\n const versionMatch = tag.match(/v?(\\d+\\.\\d+\\.\\d+.*?)$/);\n if (!versionMatch) {\n logger.debug(` âī¸ Skipping tag \"${tag}\" (doesn't match version pattern)`);\n continue;\n }\n const versionString = versionMatch[1];\n const tagSemver = semver.parse(versionString);\n if (tagSemver) {\n validTags++;\n // Check if this tag version is less than current version\n if (semver.lt(tagSemver, currentSemver)) {\n // If we don't have a previous version yet, or this one is higher than our current previous\n if (!previousVersion || semver.gt(tagSemver, previousVersion)) {\n previousVersion = tagSemver;\n previousTag = tag; // Keep the original tag format\n logger.info(` â
New best candidate: ${tag} (${versionString} < ${currentVersion})`);\n } else {\n logger.debug(` âī¸ ${tag} (${versionString}) is < current but not better than ${previousTag}`);\n }\n } else {\n skippedTags++;\n logger.debug(` âī¸ ${tag} (${versionString}) >= current (${currentVersion}), skipping`);\n }\n }\n }\n logger.info('');\n logger.info(` đ Tag analysis results:`);\n logger.info(` - Total tags examined: ${tags.length}`);\n logger.info(` - Valid semver tags: ${validTags}`);\n logger.info(` - Tags >= current version (skipped): ${skippedTags}`);\n logger.info(` - Best match: ${previousTag || 'none'}`);\n logger.info('');\n if (previousTag) {\n logger.info(`â
SUCCESS: Found previous tag: ${previousTag}`);\n logger.info(` Version comparison: ${previousVersion === null || previousVersion === void 0 ? void 0 : previousVersion.version} < ${currentVersion}`);\n logger.info('');\n return previousTag;\n }\n logger.warn(`â FAILED: No previous tag found for version ${currentVersion}`);\n logger.warn(` Pattern searched: \"${tagPattern}\"`);\n logger.warn(` Reason: All ${validTags} valid tags were >= ${currentVersion}`);\n logger.warn('');\n return null;\n } catch (error) {\n logger.debug(`Error finding previous release tag: ${error.message}`);\n return null;\n }\n};\n/**\n * Gets the current version from package.json\n *\n * @returns The current version string or null if not found\n */ const getCurrentVersion = async ()=>{\n const logger = getLogger();\n try {\n // First try to get from committed version in HEAD\n const { stdout } = await runSecure('git', [\n 'show',\n 'HEAD:package.json'\n ]);\n const packageJson = safeJsonParse(stdout, 'package.json');\n const validated = validatePackageJson(packageJson, 'package.json');\n if (validated.version) {\n logger.debug(`Current version from HEAD:package.json: ${validated.version}`);\n return validated.version;\n }\n return null;\n } catch (error) {\n logger.debug(`Could not read version from HEAD:package.json: ${error.message}`);\n // Fallback to reading from working directory\n try {\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n const content = await fs.readFile(packageJsonPath, 'utf-8');\n const packageJson = safeJsonParse(content, 'package.json');\n const validated = validatePackageJson(packageJson, 'package.json');\n if (validated.version) {\n logger.debug(`Current version from working directory package.json: ${validated.version}`);\n return validated.version;\n }\n return null;\n } catch (fallbackError) {\n logger.debug(`Error reading current version from filesystem: ${fallbackError.message}`);\n return null;\n }\n }\n};\n/**\n * Gets a reliable default for the --from parameter by trying multiple fallbacks\n *\n * Tries in order:\n * 1. Previous working branch tag (if on working branch)\n * 2. Previous release tag (if current version can be determined)\n * 3. main (local main branch - typical release comparison base)\n * 4. master (local master branch - legacy default)\n * 5. origin/main (remote main branch fallback)\n * 6. origin/master (remote master branch fallback)\n *\n * @param forceMainBranch If true, skip tag detection and use main branch\n * @param currentBranch Current branch name for branch-aware tag detection\n * @returns A valid git reference to use as the default from parameter\n * @throws Error if no valid reference can be found\n */ const getDefaultFromRef = async (forceMainBranch = false, currentBranch)=>{\n const logger = getLogger();\n logger.info('');\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n logger.info('đ DETECTING DEFAULT --from REFERENCE FOR RELEASE NOTES');\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n logger.info(`đ Input parameters:`);\n logger.info(` - forceMainBranch: ${forceMainBranch}`);\n logger.info(` - currentBranch: \"${currentBranch}\"`);\n logger.info('');\n // If forced to use main branch, skip tag detection\n if (forceMainBranch) {\n logger.info('⥠Forced to use main branch, skipping tag detection');\n } else {\n // If on working branch, look for working branch tags first\n logger.info(`đ¯ Branch check: currentBranch=\"${currentBranch}\", isWorking=${currentBranch === 'working'}`);\n if (currentBranch && currentBranch === 'working') {\n logger.info('');\n logger.info('đ DETECTED WORKING BRANCH - Searching for working branch tags...');\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n try {\n const currentVersion = await getCurrentVersion();\n logger.info(`đĻ Current version from package.json: ${currentVersion}`);\n if (currentVersion) {\n logger.info(`đ Searching for tags matching pattern: \"working/v*\"`);\n logger.info(` (Looking for tags < ${currentVersion})`);\n logger.info('');\n const previousTag = await findPreviousReleaseTag(currentVersion, 'working/v*');\n logger.info(`đ¯ findPreviousReleaseTag result: ${previousTag || 'null (no tag found)'}`);\n if (previousTag) {\n logger.info(`đŦ Validating tag reference: \"${previousTag}\"`);\n const isValid = await isValidGitRef(previousTag);\n logger.info(` Tag is valid git ref: ${isValid}`);\n if (isValid) {\n logger.info('');\n logger.info(`â
SUCCESS: Using previous working branch tag '${previousTag}'`);\n logger.info(` This shows commits added since the last release`);\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n logger.info('');\n return previousTag;\n } else {\n logger.warn('');\n logger.warn(`â ī¸ VALIDATION FAILED: Tag \"${previousTag}\" exists but is not a valid git reference`);\n logger.warn(` This should not happen - the tag might be corrupted`);\n }\n } else {\n logger.warn('');\n logger.warn('â NO WORKING BRANCH TAG FOUND matching pattern \"working/v*\"');\n logger.warn(` Current version: ${currentVersion}`);\n logger.warn(' đĄ To create working branch tags for past releases, run:');\n logger.warn(' kodrdriv development --create-retroactive-tags');\n logger.warn('');\n logger.warn(' Falling back to regular tag search...');\n }\n } else {\n logger.warn('');\n logger.warn('â CANNOT READ VERSION from package.json');\n logger.warn(' Cannot search for working branch tags without current version');\n }\n } catch (error) {\n logger.warn('');\n logger.warn(`â ERROR while searching for working branch tag: ${error.message}`);\n logger.debug(`Full error stack: ${error.stack}`);\n logger.warn(' Falling back to regular tag search...');\n }\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n logger.info('');\n } else {\n logger.info(`âšī¸ Not on \"working\" branch - skipping working tag search`);\n logger.info(` (Only search for working/v* tags when on working branch)`);\n logger.info('');\n }\n // First, try to find the previous release tag\n try {\n const currentVersion = await getCurrentVersion();\n if (currentVersion) {\n const previousTag = await findPreviousReleaseTag(currentVersion);\n if (previousTag && await isValidGitRef(previousTag)) {\n logger.info(`Using previous release tag '${previousTag}' as default --from reference`);\n return previousTag;\n }\n }\n } catch (error) {\n logger.debug(`Could not determine previous release tag: ${error.message}`);\n }\n }\n // Fallback to branch-based references\n const candidates = [\n 'main',\n 'master',\n 'origin/main',\n 'origin/master'\n ];\n for (const candidate of candidates){\n logger.debug(`Testing git reference candidate: ${candidate}`);\n if (await isValidGitRef(candidate)) {\n if (forceMainBranch) {\n logger.info(`Using '${candidate}' as forced main branch reference`);\n } else {\n logger.info(`Using '${candidate}' as fallback --from reference (no previous release tag found)`);\n }\n return candidate;\n }\n }\n // If we get here, something is seriously wrong with the git repository\n throw new Error('Could not find a valid default git reference for --from parameter. ' + 'Please specify --from explicitly or check your git repository configuration. ' + `Tried: ${forceMainBranch ? 'main branch only' : 'previous release tag'}, ${candidates.join(', ')}`);\n};\n/**\n * Gets the default branch name from the remote repository\n */ const getRemoteDefaultBranch = async (cwd)=>{\n const logger = getLogger();\n try {\n // Try to get the symbolic reference for origin/HEAD\n const { stdout } = await run('git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null || echo \"\"', {\n cwd,\n suppressErrorLogging: true\n });\n if (stdout.trim()) {\n // Extract branch name from refs/remotes/origin/branch-name\n const match = stdout.trim().match(/refs\\/remotes\\/origin\\/(.+)$/);\n if (match) {\n const branchName = match[1];\n logger.debug(`Remote default branch is: ${branchName}`);\n return branchName;\n }\n }\n // Fallback: try to get it from ls-remote\n const { stdout: lsRemoteOutput } = await run('git ls-remote --symref origin HEAD', {\n cwd,\n suppressErrorLogging: true\n });\n const symrefMatch = lsRemoteOutput.match(/ref: refs\\/heads\\/(.+)\\s+HEAD/);\n if (symrefMatch) {\n const branchName = symrefMatch[1];\n logger.debug(`Remote default branch from ls-remote: ${branchName}`);\n return branchName;\n }\n logger.debug('Could not determine remote default branch');\n return null;\n } catch (error) {\n logger.debug(`Failed to get remote default branch: ${error}`);\n return null;\n }\n};\n/**\n * Checks if a directory is a git repository\n * @param cwd Directory to check\n * @returns true if directory is a git repository\n */ const isGitRepository = async (cwd)=>{\n try {\n await run('git rev-parse --is-inside-work-tree', {\n cwd,\n suppressErrorLogging: true\n });\n return true;\n } catch {\n return false;\n }\n};\n/**\n * Checks if a local branch exists\n */ const localBranchExists = async (branchName)=>{\n const logger = getLogger();\n const result = await isValidGitRefSilent(`refs/heads/${branchName}`);\n if (result) {\n logger.debug(`Local branch '${branchName}' exists`);\n } else {\n logger.debug(`Local branch '${branchName}' does not exist`);\n }\n return result;\n};\n/**\n * Checks if a remote branch exists\n */ const remoteBranchExists = async (branchName, remote = 'origin')=>{\n const logger = getLogger();\n const result = await isValidGitRefSilent(`refs/remotes/${remote}/${branchName}`);\n if (result) {\n logger.debug(`Remote branch '${remote}/${branchName}' exists`);\n } else {\n logger.debug(`Remote branch '${remote}/${branchName}' does not exist`);\n }\n return result;\n};\n/**\n * Gets the commit SHA for a given branch (local or remote)\n */ const getBranchCommitSha = async (branchRef)=>{\n // Validate the ref first to prevent injection\n if (!validateGitRef(branchRef)) {\n throw new Error(`Invalid git reference: ${branchRef}`);\n }\n const { stdout } = await runSecure('git', [\n 'rev-parse',\n branchRef\n ]);\n return stdout.trim();\n};\n/**\n * Checks if a local branch is in sync with its remote counterpart\n */ const isBranchInSyncWithRemote = async (branchName, remote = 'origin')=>{\n const logger = getLogger();\n try {\n // Validate inputs first to prevent injection\n if (!validateGitRef(branchName)) {\n throw new Error(`Invalid branch name: ${branchName}`);\n }\n if (!validateGitRef(remote)) {\n throw new Error(`Invalid remote name: ${remote}`);\n }\n // First, fetch latest remote refs without affecting working directory\n await runSecure('git', [\n 'fetch',\n remote,\n '--quiet'\n ]);\n const localExists = await localBranchExists(branchName);\n const remoteExists = await remoteBranchExists(branchName, remote);\n if (!localExists) {\n return {\n inSync: false,\n localExists: false,\n remoteExists,\n error: `Local branch '${branchName}' does not exist`\n };\n }\n if (!remoteExists) {\n return {\n inSync: false,\n localExists: true,\n remoteExists: false,\n error: `Remote branch '${remote}/${branchName}' does not exist`\n };\n }\n // Both branches exist, compare their SHAs\n const localSha = await getBranchCommitSha(`refs/heads/${branchName}`);\n const remoteSha = await getBranchCommitSha(`refs/remotes/${remote}/${branchName}`);\n const inSync = localSha === remoteSha;\n logger.debug(`Branch sync check for '${branchName}': local=${localSha.substring(0, 8)}, remote=${remoteSha.substring(0, 8)}, inSync=${inSync}`);\n return {\n inSync,\n localSha,\n remoteSha,\n localExists: true,\n remoteExists: true\n };\n } catch (error) {\n logger.debug(`Failed to check branch sync for '${branchName}': ${error.message}`);\n return {\n inSync: false,\n localExists: false,\n remoteExists: false,\n error: `Failed to check branch sync: ${error.message}`\n };\n }\n};\n/**\n * Attempts to safely sync a local branch with its remote counterpart\n * Returns true if successful, false if conflicts exist that require manual resolution\n */ const safeSyncBranchWithRemote = async (branchName, remote = 'origin')=>{\n const logger = getLogger();\n // Validate the remote parameter to prevent command injection\n if (!isValidGitRemoteName(remote)) {\n return {\n success: false,\n error: `Invalid remote name: '${remote}'`\n };\n }\n // Validate the branch name to prevent option injection (e.g., '--upload-pack=...')\n if (!isValidGitBranchName(branchName)) {\n return {\n success: false,\n error: `Invalid branch name: '${branchName}'`\n };\n }\n try {\n // Validate inputs first to prevent injection\n if (!validateGitRef(branchName)) {\n throw new Error(`Invalid branch name: ${branchName}`);\n }\n if (!validateGitRef(remote)) {\n throw new Error(`Invalid remote name: ${remote}`);\n }\n // Explicitly disallow remotes that look like command-line options (e.g. \"--upload-pack\")\n if (remote.startsWith('-')) {\n throw new Error(`Disallowed remote name (cannot start with '-'): ${remote}`);\n }\n // Check current branch to restore later if needed\n const { stdout: currentBranch } = await runSecure('git', [\n 'branch',\n '--show-current'\n ]);\n const originalBranch = currentBranch.trim();\n // Fetch latest remote refs\n await runSecure('git', [\n 'fetch',\n remote,\n '--quiet'\n ]);\n // Check if local branch exists\n const localExists = await localBranchExists(branchName);\n const remoteExists = await remoteBranchExists(branchName, remote);\n if (!remoteExists) {\n return {\n success: false,\n error: `Remote branch '${remote}/${branchName}' does not exist`\n };\n }\n if (!localExists) {\n // Create local branch tracking the remote\n await runSecure('git', [\n 'branch',\n branchName,\n `${remote}/${branchName}`\n ]);\n logger.debug(`Created local branch '${branchName}' tracking '${remote}/${branchName}'`);\n return {\n success: true\n };\n }\n // Check if we need to switch to the target branch\n const needToSwitch = originalBranch !== branchName;\n if (needToSwitch) {\n // Check for uncommitted changes before switching\n const { stdout: statusOutput } = await runSecure('git', [\n 'status',\n '--porcelain'\n ]);\n if (statusOutput.trim()) {\n return {\n success: false,\n error: `Cannot switch to branch '${branchName}' because you have uncommitted changes. Please commit or stash your changes first.`\n };\n }\n // Switch to target branch\n await runSecure('git', [\n 'checkout',\n branchName\n ]);\n }\n try {\n // Try to pull with fast-forward only\n await runSecure('git', [\n 'pull',\n remote,\n branchName,\n '--ff-only'\n ]);\n logger.debug(`Successfully synced '${branchName}' with '${remote}/${branchName}'`);\n // Switch back to original branch if we switched\n if (needToSwitch && originalBranch) {\n await runSecure('git', [\n 'checkout',\n originalBranch\n ]);\n }\n return {\n success: true\n };\n } catch (pullError) {\n // Switch back to original branch if we switched\n if (needToSwitch && originalBranch) {\n try {\n await runSecure('git', [\n 'checkout',\n originalBranch\n ]);\n } catch (checkoutError) {\n logger.warn(`Failed to switch back to original branch '${originalBranch}': ${checkoutError}`);\n }\n }\n // Check if this is a merge conflict or diverged branches\n if (pullError.message.includes('diverged') || pullError.message.includes('non-fast-forward') || pullError.message.includes('conflict') || pullError.message.includes('CONFLICT')) {\n return {\n success: false,\n conflictResolutionRequired: true,\n error: `Branch '${branchName}' has diverged from '${remote}/${branchName}' and requires manual conflict resolution`\n };\n }\n return {\n success: false,\n error: `Failed to sync branch '${branchName}': ${pullError.message}`\n };\n }\n } catch (error) {\n return {\n success: false,\n error: `Failed to sync branch '${branchName}': ${error.message}`\n };\n }\n};\n/**\n * Gets the current branch name\n */ const getCurrentBranch = async ()=>{\n const { stdout } = await runSecure('git', [\n 'branch',\n '--show-current'\n ]);\n return stdout.trim();\n};\n/**\n * Gets git status summary including unstaged files, uncommitted changes, and unpushed commits\n */ const getGitStatusSummary = async (workingDir)=>{\n const logger = getLogger();\n try {\n const originalCwd = process.cwd();\n if (workingDir) {\n process.chdir(workingDir);\n }\n try {\n // Get current branch\n const branch = await getCurrentBranch();\n // Get git status for unstaged and uncommitted changes\n const { stdout: statusOutput } = await runSecure('git', [\n 'status',\n '--porcelain'\n ]);\n const statusLines = statusOutput.trim().split('\\n').filter((line)=>line.trim());\n // Count different types of changes\n let unstagedCount = 0;\n let uncommittedCount = 0;\n for (const line of statusLines){\n const statusCode = line.substring(0, 2);\n // For untracked files (??) count as unstaged only once\n if (statusCode === '??') {\n unstagedCount++;\n continue;\n }\n // Check for unstaged changes (working directory changes)\n // Second character represents working tree status\n if (statusCode[1] !== ' ' && statusCode[1] !== '') {\n unstagedCount++;\n }\n // Check for uncommitted changes (staged changes)\n // First character represents index status\n if (statusCode[0] !== ' ' && statusCode[0] !== '') {\n uncommittedCount++;\n }\n }\n // Check for unpushed commits by comparing with remote\n let unpushedCount = 0;\n let hasUnpushedCommits = false;\n try {\n // First fetch to get latest remote refs\n await runSecure('git', [\n 'fetch',\n 'origin',\n '--quiet'\n ]);\n // Check if remote branch exists\n const remoteExists = await remoteBranchExists(branch);\n if (remoteExists) {\n // Get count of commits ahead of remote (branch already validated in calling function)\n const { stdout: aheadOutput } = await runSecure('git', [\n 'rev-list',\n '--count',\n `origin/${branch}..HEAD`\n ]);\n unpushedCount = parseInt(aheadOutput.trim()) || 0;\n hasUnpushedCommits = unpushedCount > 0;\n }\n } catch (error) {\n logger.debug(`Could not check for unpushed commits: ${error}`);\n // Remote might not exist or other issues - not critical for status\n }\n const hasUnstagedFiles = unstagedCount > 0;\n const hasUncommittedChanges = uncommittedCount > 0;\n // Build status summary\n const statusParts = [];\n if (hasUnstagedFiles) {\n statusParts.push(`${unstagedCount} unstaged`);\n }\n if (hasUncommittedChanges) {\n statusParts.push(`${uncommittedCount} uncommitted`);\n }\n if (hasUnpushedCommits) {\n statusParts.push(`${unpushedCount} unpushed`);\n }\n const status = statusParts.length > 0 ? statusParts.join(', ') : 'clean';\n return {\n branch,\n hasUnstagedFiles,\n hasUncommittedChanges,\n hasUnpushedCommits,\n unstagedCount,\n uncommittedCount,\n unpushedCount,\n status\n };\n } finally{\n if (workingDir) {\n process.chdir(originalCwd);\n }\n }\n } catch (error) {\n logger.debug(`Failed to get git status summary: ${error.message}`);\n return {\n branch: 'unknown',\n hasUnstagedFiles: false,\n hasUncommittedChanges: false,\n hasUnpushedCommits: false,\n unstagedCount: 0,\n uncommittedCount: 0,\n unpushedCount: 0,\n status: 'error'\n };\n }\n};\n/**\n * Gets the list of globally linked packages (packages available to be linked to)\n */ const getGloballyLinkedPackages = async ()=>{\n const execPromise = util.promisify(exec);\n try {\n const { stdout } = await execPromise('npm ls --link -g --json');\n const result = safeJsonParse(stdout, 'npm ls global output');\n if (result.dependencies && typeof result.dependencies === 'object') {\n return new Set(Object.keys(result.dependencies));\n }\n return new Set();\n } catch (error) {\n // Try to parse from error stdout if available\n if (error.stdout) {\n try {\n const result = safeJsonParse(error.stdout, 'npm ls global error output');\n if (result.dependencies && typeof result.dependencies === 'object') {\n return new Set(Object.keys(result.dependencies));\n }\n } catch {\n // If JSON parsing fails, return empty set\n }\n }\n return new Set();\n }\n};\n/**\n * Gets the list of packages that this package is actively linking to (consuming linked packages)\n */ const getLinkedDependencies = async (packageDir)=>{\n const execPromise = util.promisify(exec);\n try {\n const { stdout } = await execPromise('npm ls --link --json', {\n cwd: packageDir\n });\n const result = safeJsonParse(stdout, 'npm ls local output');\n if (result.dependencies && typeof result.dependencies === 'object') {\n return new Set(Object.keys(result.dependencies));\n }\n return new Set();\n } catch (error) {\n // npm ls --link often exits with non-zero code but still provides valid JSON in stdout\n if (error.stdout) {\n try {\n const result = safeJsonParse(error.stdout, 'npm ls local error output');\n if (result.dependencies && typeof result.dependencies === 'object') {\n return new Set(Object.keys(result.dependencies));\n }\n } catch {\n // If JSON parsing fails, return empty set\n }\n }\n return new Set();\n }\n};\n/**\n * Checks for actual semantic version compatibility issues between linked packages and their consumers\n * Returns a set of dependency names that have real compatibility problems\n *\n * This function ignores npm's strict prerelease handling and focuses on actual compatibility:\n * - \"^4.4\" is compatible with \"4.4.53-dev.0\" (prerelease of compatible minor version)\n * - \"^4.4\" is incompatible with \"4.5.3\" (different minor version)\n */ const getLinkCompatibilityProblems = async (packageDir, allPackagesInfo)=>{\n try {\n // Read the consumer package.json\n const packageJsonPath = path.join(packageDir, 'package.json');\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');\n const parsed = safeJsonParse(packageJsonContent, packageJsonPath);\n const packageJson = validatePackageJson(parsed, packageJsonPath);\n const problemDependencies = new Set();\n // Get linked dependencies\n const linkedDeps = await getLinkedDependencies(packageDir);\n // Check each dependency type\n const dependencyTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies'\n ];\n for (const depType of dependencyTypes){\n const deps = packageJson[depType];\n if (!deps || typeof deps !== 'object') continue;\n for (const [depName, versionRange] of Object.entries(deps)){\n // Only check dependencies that are currently linked\n if (!linkedDeps.has(depName)) continue;\n // Skip if version range is not a string or is invalid\n if (typeof versionRange !== 'string') continue;\n try {\n let linkedVersion;\n // If we have package info provided, use it\n if (allPackagesInfo) {\n const packageInfo = allPackagesInfo.get(depName);\n if (packageInfo) {\n linkedVersion = packageInfo.version;\n }\n }\n // If we don't have version from package info, try to read it from the linked package\n if (!linkedVersion) {\n try {\n // Get the linked package path and read its version\n const nodeModulesPath = path.join(packageDir, 'node_modules', depName, 'package.json');\n const linkedPackageJson = await fs.readFile(nodeModulesPath, 'utf-8');\n const linkedParsed = safeJsonParse(linkedPackageJson, nodeModulesPath);\n const linkedValidated = validatePackageJson(linkedParsed, nodeModulesPath);\n linkedVersion = linkedValidated.version;\n } catch {\n continue;\n }\n }\n if (!linkedVersion) continue;\n // Check compatibility with custom logic for prerelease versions\n if (!isVersionCompatibleWithRange(linkedVersion, versionRange)) {\n problemDependencies.add(depName);\n }\n } catch {\n continue;\n }\n }\n }\n return problemDependencies;\n } catch {\n // If we can't read the package.json or process it, return empty set\n return new Set();\n }\n};\n/**\n * Custom semver compatibility check that handles prerelease versions more intelligently\n * than npm's strict checking, with stricter caret range handling\n *\n * Examples:\n * - isVersionCompatibleWithRange(\"4.4.53-dev.0\", \"^4.4\") => true\n * - isVersionCompatibleWithRange(\"4.5.3\", \"^4.4\") => false\n * - isVersionCompatibleWithRange(\"4.4.1\", \"^4.4\") => true\n */ const isVersionCompatibleWithRange = (version, range)=>{\n try {\n const parsedVersion = semver.parse(version);\n if (!parsedVersion) return false;\n // Parse the range to understand what we're comparing against\n const rangeObj = semver.validRange(range);\n if (!rangeObj) return false;\n // For caret ranges like \"^4.4\", we want more strict checking than semver's default\n if (range.startsWith('^')) {\n const rangeVersion = range.substring(1); // Remove the ^\n // Try to parse as a complete version first\n let parsedRange = semver.parse(rangeVersion);\n // If that fails, try to coerce it (handles cases like \"4.4\" -> \"4.4.0\")\n if (!parsedRange) {\n const coercedRange = semver.coerce(rangeVersion);\n if (coercedRange) {\n parsedRange = coercedRange;\n } else {\n return false;\n }\n }\n // For prerelease versions, check if the base version (without prerelease)\n // matches the major.minor from the range\n if (parsedVersion.prerelease.length > 0) {\n return parsedVersion.major === parsedRange.major && parsedVersion.minor === parsedRange.minor;\n }\n // For regular versions with caret ranges, be strict about minor version\n // ^4.4 should only accept 4.4.x, not 4.5.x\n return parsedVersion.major === parsedRange.major && parsedVersion.minor === parsedRange.minor;\n }\n // For other range types (exact, tilde, etc.), use standard semver checking\n if (parsedVersion.prerelease.length > 0) {\n const baseVersion = `${parsedVersion.major}.${parsedVersion.minor}.${parsedVersion.patch}`;\n return semver.satisfies(baseVersion, range);\n }\n return semver.satisfies(version, range);\n } catch {\n // If semver parsing fails, assume incompatible\n return false;\n }\n};\n/**\n * Checks for npm link problems (version mismatches) in a package directory\n * Returns a set of dependency names that have link problems\n *\n * @deprecated Use getLinkCompatibilityProblems instead for better prerelease version handling\n */ const getLinkProblems = async (packageDir)=>{\n const execPromise = util.promisify(exec);\n try {\n const { stdout } = await execPromise('npm ls --link --json', {\n cwd: packageDir\n });\n const result = safeJsonParse(stdout, 'npm ls troubleshoot output');\n const problemDependencies = new Set();\n // Check if there are any problems reported\n if (result.problems && Array.isArray(result.problems)) {\n // Parse problems array to extract dependency names\n for (const problem of result.problems){\n if (typeof problem === 'string' && problem.includes('invalid:')) {\n // Extract package name from problem string like \"invalid: @fjell/eslint-config@1.1.20-dev.0 ...\"\n // Handle both scoped (@scope/name) and unscoped (name) packages\n const match = problem.match(/invalid:\\s+(@[^/]+\\/[^@\\s]+|[^@\\s]+)@/);\n if (match) {\n problemDependencies.add(match[1]);\n }\n }\n }\n }\n // Also check individual dependencies for problems\n if (result.dependencies && typeof result.dependencies === 'object') {\n for (const [depName, depInfo] of Object.entries(result.dependencies)){\n if (depInfo && typeof depInfo === 'object') {\n const dep = depInfo;\n // Check if this dependency has problems or is marked as invalid\n if (dep.problems && Array.isArray(dep.problems) && dep.problems.length > 0 || dep.invalid) {\n problemDependencies.add(depName);\n }\n }\n }\n }\n return problemDependencies;\n } catch (error) {\n // npm ls --link often exits with non-zero code when there are problems\n // but still provides valid JSON in stdout\n if (error.stdout) {\n try {\n const result = safeJsonParse(error.stdout, 'npm ls troubleshoot error output');\n const problemDependencies = new Set();\n // Check if there are any problems reported\n if (result.problems && Array.isArray(result.problems)) {\n for (const problem of result.problems){\n if (typeof problem === 'string' && problem.includes('invalid:')) {\n const match = problem.match(/invalid:\\s+(@[^/]+\\/[^@\\s]+|[^@\\s]+)@/);\n if (match) {\n problemDependencies.add(match[1]);\n }\n }\n }\n }\n // Also check individual dependencies for problems\n if (result.dependencies && typeof result.dependencies === 'object') {\n for (const [depName, depInfo] of Object.entries(result.dependencies)){\n if (depInfo && typeof depInfo === 'object') {\n const dep = depInfo;\n if (dep.problems && Array.isArray(dep.problems) && dep.problems.length > 0 || dep.invalid) {\n problemDependencies.add(depName);\n }\n }\n }\n }\n return problemDependencies;\n } catch {\n // If JSON parsing fails, return empty set\n return new Set();\n }\n }\n return new Set();\n }\n};\n/**\n * Checks if a package directory is npm linked (has a global symlink)\n */ const isNpmLinked = async (packageDir)=>{\n const logger = getLogger();\n try {\n // Read package.json to get the package name\n const packageJsonPath = path.join(packageDir, 'package.json');\n try {\n await fs.access(packageJsonPath);\n } catch {\n // No package.json found\n return false;\n }\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');\n const packageJson = safeJsonParse(packageJsonContent, packageJsonPath);\n const packageName = packageJson.name;\n if (!packageName) {\n return false;\n }\n // Check if the package is globally linked by running npm ls -g --depth=0\n try {\n const { stdout } = await runSecure('npm', [\n 'ls',\n '-g',\n '--depth=0',\n '--json'\n ]);\n const globalPackages = safeJsonParse(stdout, 'npm ls global depth check output');\n // Check if our package is in the global dependencies\n if (globalPackages.dependencies && globalPackages.dependencies[packageName]) {\n // Verify the symlink actually points to our directory\n const globalPath = globalPackages.dependencies[packageName].resolved;\n if (globalPath && globalPath.startsWith('file:')) {\n const linkedPath = globalPath.replace('file:', '');\n const realPackageDir = await fs.realpath(packageDir);\n const realLinkedPath = await fs.realpath(linkedPath);\n return realPackageDir === realLinkedPath;\n }\n }\n } catch (error) {\n // If npm ls fails, try alternative approach\n logger.debug(`npm ls failed for ${packageName}, trying alternative check: ${error}`);\n // Alternative: check if there's a symlink in npm's global node_modules\n try {\n const { stdout: npmPrefix } = await run('npm prefix -g');\n const globalNodeModules = path.join(npmPrefix.trim(), 'node_modules', packageName);\n const stat = await fs.lstat(globalNodeModules);\n if (stat.isSymbolicLink()) {\n const realGlobalPath = await fs.realpath(globalNodeModules);\n const realPackageDir = await fs.realpath(packageDir);\n return realGlobalPath === realPackageDir;\n }\n } catch {\n // If all else fails, assume not linked\n return false;\n }\n }\n return false;\n } catch (error) {\n logger.debug(`Error checking npm link status for ${packageDir}: ${error}`);\n return false;\n }\n};\n/**\n * Stage specific files for commit\n * @param files Array of file paths to stage\n * @throws {Error} if any file path is invalid (import validation from shared)\n * @throws {Error} if git command fails (import errors from shared)\n */ async function stageFiles(files) {\n const logger = getLogger();\n if (files.length === 0) {\n logger.warn('stageFiles called with empty file list');\n return;\n }\n // Validate all file paths to prevent injection\n // Note: validateFilePath is exported from child.ts\n const { validateFilePath } = await Promise.resolve().then(() => child);\n for (const file of files){\n if (!validateFilePath(file)) {\n throw new Error(`Invalid file path: ${file}`);\n }\n }\n logger.debug(`Staging ${files.length} files...`);\n try {\n // Use -- to separate files from options (safety)\n await runSecure('git', [\n 'add',\n '--',\n ...files\n ]);\n logger.debug(`Successfully staged ${files.length} files`);\n } catch (error) {\n throw new Error(`Failed to stage files: ${error.message}`);\n }\n}\n/**\n * Unstage all currently staged files\n * @throws {Error} if git command fails\n */ async function unstageAll() {\n const logger = getLogger();\n logger.debug('Unstaging all files...');\n try {\n await runSecure('git', [\n 'reset',\n 'HEAD'\n ]);\n logger.debug('Successfully unstaged all files');\n } catch (error) {\n throw new Error(`Failed to unstage files: ${error.message}`);\n }\n}\n/**\n * Get list of currently staged files\n * @returns Array of file paths that are currently staged\n * @throws {Error} if git command fails\n */ async function getStagedFiles() {\n const logger = getLogger();\n logger.debug('Getting list of staged files...');\n try {\n const { stdout } = await runSecure('git', [\n 'diff',\n '--cached',\n '--name-only'\n ]);\n const files = stdout.trim().split('\\n').filter((line)=>line.length > 0);\n logger.debug(`Found ${files.length} staged files`);\n return files;\n } catch (error) {\n throw new Error(`Failed to get staged files: ${error.message}`);\n }\n}\n/**\n * Verify that expected files are in the staging area\n * @param expectedFiles Files that should be staged\n * @returns Object with verification results\n */ async function verifyStagedFiles(expectedFiles) {\n const logger = getLogger();\n const stagedFiles = await getStagedFiles();\n const stagedSet = new Set(stagedFiles);\n const expectedSet = new Set(expectedFiles);\n const missing = expectedFiles.filter((f)=>!stagedSet.has(f));\n const unexpected = stagedFiles.filter((f)=>!expectedSet.has(f));\n const allPresent = missing.length === 0 && unexpected.length === 0;\n if (!allPresent) {\n logger.warn('Stage verification mismatch:');\n if (missing.length > 0) {\n logger.warn(` Missing: ${missing.join(', ')}`);\n }\n if (unexpected.length > 0) {\n logger.warn(` Unexpected: ${unexpected.join(', ')}`);\n }\n }\n return {\n allPresent,\n missing,\n unexpected\n };\n}\n\nexport { ConsoleLogger, escapeShellArg, findPreviousReleaseTag, getBranchCommitSha, getCurrentBranch, getCurrentVersion, getDefaultFromRef, getGitStatusSummary, getGloballyLinkedPackages, getLinkCompatibilityProblems, getLinkProblems, getLinkedDependencies, getLogger, getRemoteDefaultBranch, getStagedFiles, isBranchInSyncWithRemote, isGitRepository, isNpmLinked, isValidGitRef, localBranchExists, remoteBranchExists, run, runSecure, runSecureWithDryRunSupport, runSecureWithInheritedStdio, runWithDryRunSupport, runWithInheritedStdio, safeJsonParse, safeSyncBranchWithRemote, setLogger, stageFiles, unstageAll, validateFilePath, validateGitRef, validateHasProperty, validatePackageJson, validateString, verifyStagedFiles };\n//# sourceMappingURL=index.js.map\n","// Default console logger if winston isn't provided\n/* eslint-disable no-console */ const defaultLogger = {\n info: (message)=>console.log(message),\n warn: (message)=>console.warn(message),\n error: (message)=>console.error(message),\n debug: (message)=>console.debug(message)\n};\n/* eslint-enable no-console */ let currentLogger = defaultLogger;\nconst setLogger = (logger)=>{\n currentLogger = logger;\n};\nconst getLogger = ()=>currentLogger;\n\nexport { getLogger, setLogger };\n//# sourceMappingURL=logger.js.map\n","export function getUserAgent() {\n if (typeof navigator === \"object\" && \"userAgent\" in navigator) {\n return navigator.userAgent;\n }\n\n if (typeof process === \"object\" && process.version !== undefined) {\n return `Node.js/${process.version.substr(1)} (${process.platform}; ${\n process.arch\n })`;\n }\n\n return \"<environment undetectable>\";\n}\n","// @ts-check\n\nexport function register(state, name, method, options) {\n if (typeof method !== \"function\") {\n throw new Error(\"method for before hook must be a function\");\n }\n\n if (!options) {\n options = {};\n }\n\n if (Array.isArray(name)) {\n return name.reverse().reduce((callback, name) => {\n return register.bind(null, state, name, callback, options);\n }, method)();\n }\n\n return Promise.resolve().then(() => {\n if (!state.registry[name]) {\n return method(options);\n }\n\n return state.registry[name].reduce((method, registered) => {\n return registered.hook.bind(null, method, options);\n }, method)();\n });\n}\n","// @ts-check\n\nexport function addHook(state, kind, name, hook) {\n const orig = hook;\n if (!state.registry[name]) {\n state.registry[name] = [];\n }\n\n if (kind === \"before\") {\n hook = (method, options) => {\n return Promise.resolve()\n .then(orig.bind(null, options))\n .then(method.bind(null, options));\n };\n }\n\n if (kind === \"after\") {\n hook = (method, options) => {\n let result;\n return Promise.resolve()\n .then(method.bind(null, options))\n .then((result_) => {\n result = result_;\n return orig(result, options);\n })\n .then(() => {\n return result;\n });\n };\n }\n\n if (kind === \"error\") {\n hook = (method, options) => {\n return Promise.resolve()\n .then(method.bind(null, options))\n .catch((error) => {\n return orig(error, options);\n });\n };\n }\n\n state.registry[name].push({\n hook: hook,\n orig: orig,\n });\n}\n","// @ts-check\n\nexport function removeHook(state, name, method) {\n if (!state.registry[name]) {\n return;\n }\n\n const index = state.registry[name]\n .map((registered) => {\n return registered.orig;\n })\n .indexOf(method);\n\n if (index === -1) {\n return;\n }\n\n state.registry[name].splice(index, 1);\n}\n","// @ts-check\n\nimport { register } from \"./lib/register.js\";\nimport { addHook } from \"./lib/add.js\";\nimport { removeHook } from \"./lib/remove.js\";\n\n// bind with array of arguments: https://stackoverflow.com/a/21792913\nconst bind = Function.bind;\nconst bindable = bind.bind(bind);\n\nfunction bindApi(hook, state, name) {\n const removeHookRef = bindable(removeHook, null).apply(\n null,\n name ? [state, name] : [state]\n );\n hook.api = { remove: removeHookRef };\n hook.remove = removeHookRef;\n [\"before\", \"error\", \"after\", \"wrap\"].forEach((kind) => {\n const args = name ? [state, kind, name] : [state, kind];\n hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args);\n });\n}\n\nfunction Singular() {\n const singularHookName = Symbol(\"Singular\");\n const singularHookState = {\n registry: {},\n };\n const singularHook = register.bind(null, singularHookState, singularHookName);\n bindApi(singularHook, singularHookState, singularHookName);\n return singularHook;\n}\n\nfunction Collection() {\n const state = {\n registry: {},\n };\n\n const hook = register.bind(null, state);\n bindApi(hook, state);\n\n return hook;\n}\n\nexport default { Singular, Collection };\n","// pkg/dist-src/defaults.js\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/defaults.js\nvar userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;\nvar DEFAULTS = {\n method: \"GET\",\n baseUrl: \"https://api.github.com\",\n headers: {\n accept: \"application/vnd.github.v3+json\",\n \"user-agent\": userAgent\n },\n mediaType: {\n format: \"\"\n }\n};\n\n// pkg/dist-src/util/lowercase-keys.js\nfunction lowercaseKeys(object) {\n if (!object) {\n return {};\n }\n return Object.keys(object).reduce((newObj, key) => {\n newObj[key.toLowerCase()] = object[key];\n return newObj;\n }, {});\n}\n\n// pkg/dist-src/util/is-plain-object.js\nfunction isPlainObject(value) {\n if (typeof value !== \"object\" || value === null) return false;\n if (Object.prototype.toString.call(value) !== \"[object Object]\") return false;\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return true;\n const Ctor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);\n}\n\n// pkg/dist-src/util/merge-deep.js\nfunction mergeDeep(defaults, options) {\n const result = Object.assign({}, defaults);\n Object.keys(options).forEach((key) => {\n if (isPlainObject(options[key])) {\n if (!(key in defaults)) Object.assign(result, { [key]: options[key] });\n else result[key] = mergeDeep(defaults[key], options[key]);\n } else {\n Object.assign(result, { [key]: options[key] });\n }\n });\n return result;\n}\n\n// pkg/dist-src/util/remove-undefined-properties.js\nfunction removeUndefinedProperties(obj) {\n for (const key in obj) {\n if (obj[key] === void 0) {\n delete obj[key];\n }\n }\n return obj;\n}\n\n// pkg/dist-src/merge.js\nfunction merge(defaults, route, options) {\n if (typeof route === \"string\") {\n let [method, url] = route.split(\" \");\n options = Object.assign(url ? { method, url } : { url: method }, options);\n } else {\n options = Object.assign({}, route);\n }\n options.headers = lowercaseKeys(options.headers);\n removeUndefinedProperties(options);\n removeUndefinedProperties(options.headers);\n const mergedOptions = mergeDeep(defaults || {}, options);\n if (options.url === \"/graphql\") {\n if (defaults && defaults.mediaType.previews?.length) {\n mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(\n (preview) => !mergedOptions.mediaType.previews.includes(preview)\n ).concat(mergedOptions.mediaType.previews);\n }\n mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, \"\"));\n }\n return mergedOptions;\n}\n\n// pkg/dist-src/util/add-query-parameters.js\nfunction addQueryParameters(url, parameters) {\n const separator = /\\?/.test(url) ? \"&\" : \"?\";\n const names = Object.keys(parameters);\n if (names.length === 0) {\n return url;\n }\n return url + separator + names.map((name) => {\n if (name === \"q\") {\n return \"q=\" + parameters.q.split(\"+\").map(encodeURIComponent).join(\"+\");\n }\n return `${name}=${encodeURIComponent(parameters[name])}`;\n }).join(\"&\");\n}\n\n// pkg/dist-src/util/extract-url-variable-names.js\nvar urlVariableRegex = /\\{[^{}}]+\\}/g;\nfunction removeNonChars(variableName) {\n return variableName.replace(/(?:^\\W+)|(?:(?<!\\W)\\W+$)/g, \"\").split(/,/);\n}\nfunction extractUrlVariableNames(url) {\n const matches = url.match(urlVariableRegex);\n if (!matches) {\n return [];\n }\n return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n\n// pkg/dist-src/util/omit.js\nfunction omit(object, keysToOmit) {\n const result = { __proto__: null };\n for (const key of Object.keys(object)) {\n if (keysToOmit.indexOf(key) === -1) {\n result[key] = object[key];\n }\n }\n return result;\n}\n\n// pkg/dist-src/util/url-template.js\nfunction encodeReserved(str) {\n return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) {\n if (!/%[0-9A-Fa-f]/.test(part)) {\n part = encodeURI(part).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n }\n return part;\n }).join(\"\");\n}\nfunction encodeUnreserved(str) {\n return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\nfunction encodeValue(operator, value, key) {\n value = operator === \"+\" || operator === \"#\" ? encodeReserved(value) : encodeUnreserved(value);\n if (key) {\n return encodeUnreserved(key) + \"=\" + value;\n } else {\n return value;\n }\n}\nfunction isDefined(value) {\n return value !== void 0 && value !== null;\n}\nfunction isKeyOperator(operator) {\n return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\nfunction getValues(context, operator, key, modifier) {\n var value = context[key], result = [];\n if (isDefined(value) && value !== \"\") {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n value = value.toString();\n if (modifier && modifier !== \"*\") {\n value = value.substring(0, parseInt(modifier, 10));\n }\n result.push(\n encodeValue(operator, value, isKeyOperator(operator) ? key : \"\")\n );\n } else {\n if (modifier === \"*\") {\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function(value2) {\n result.push(\n encodeValue(operator, value2, isKeyOperator(operator) ? key : \"\")\n );\n });\n } else {\n Object.keys(value).forEach(function(k) {\n if (isDefined(value[k])) {\n result.push(encodeValue(operator, value[k], k));\n }\n });\n }\n } else {\n const tmp = [];\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function(value2) {\n tmp.push(encodeValue(operator, value2));\n });\n } else {\n Object.keys(value).forEach(function(k) {\n if (isDefined(value[k])) {\n tmp.push(encodeUnreserved(k));\n tmp.push(encodeValue(operator, value[k].toString()));\n }\n });\n }\n if (isKeyOperator(operator)) {\n result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n } else if (tmp.length !== 0) {\n result.push(tmp.join(\",\"));\n }\n }\n }\n } else {\n if (operator === \";\") {\n if (isDefined(value)) {\n result.push(encodeUnreserved(key));\n }\n } else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n result.push(encodeUnreserved(key) + \"=\");\n } else if (value === \"\") {\n result.push(\"\");\n }\n }\n return result;\n}\nfunction parseUrl(template) {\n return {\n expand: expand.bind(null, template)\n };\n}\nfunction expand(template, context) {\n var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n template = template.replace(\n /\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g,\n function(_, expression, literal) {\n if (expression) {\n let operator = \"\";\n const values = [];\n if (operators.indexOf(expression.charAt(0)) !== -1) {\n operator = expression.charAt(0);\n expression = expression.substr(1);\n }\n expression.split(/,/g).forEach(function(variable) {\n var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n });\n if (operator && operator !== \"+\") {\n var separator = \",\";\n if (operator === \"?\") {\n separator = \"&\";\n } else if (operator !== \"#\") {\n separator = operator;\n }\n return (values.length !== 0 ? operator : \"\") + values.join(separator);\n } else {\n return values.join(\",\");\n }\n } else {\n return encodeReserved(literal);\n }\n }\n );\n if (template === \"/\") {\n return template;\n } else {\n return template.replace(/\\/$/, \"\");\n }\n}\n\n// pkg/dist-src/parse.js\nfunction parse(options) {\n let method = options.method.toUpperCase();\n let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{$1}\");\n let headers = Object.assign({}, options.headers);\n let body;\n let parameters = omit(options, [\n \"method\",\n \"baseUrl\",\n \"url\",\n \"headers\",\n \"request\",\n \"mediaType\"\n ]);\n const urlVariableNames = extractUrlVariableNames(url);\n url = parseUrl(url).expand(parameters);\n if (!/^http/.test(url)) {\n url = options.baseUrl + url;\n }\n const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat(\"baseUrl\");\n const remainingParameters = omit(parameters, omittedParameters);\n const isBinaryRequest = /application\\/octet-stream/i.test(headers.accept);\n if (!isBinaryRequest) {\n if (options.mediaType.format) {\n headers.accept = headers.accept.split(/,/).map(\n (format) => format.replace(\n /application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/,\n `application/vnd$1$2.${options.mediaType.format}`\n )\n ).join(\",\");\n }\n if (url.endsWith(\"/graphql\")) {\n if (options.mediaType.previews?.length) {\n const previewsFromAcceptHeader = headers.accept.match(/(?<![\\w-])[\\w-]+(?=-preview)/g) || [];\n headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => {\n const format = options.mediaType.format ? `.${options.mediaType.format}` : \"+json\";\n return `application/vnd.github.${preview}-preview${format}`;\n }).join(\",\");\n }\n }\n }\n if ([\"GET\", \"HEAD\"].includes(method)) {\n url = addQueryParameters(url, remainingParameters);\n } else {\n if (\"data\" in remainingParameters) {\n body = remainingParameters.data;\n } else {\n if (Object.keys(remainingParameters).length) {\n body = remainingParameters;\n }\n }\n }\n if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n headers[\"content-type\"] = \"application/json; charset=utf-8\";\n }\n if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n body = \"\";\n }\n return Object.assign(\n { method, url, headers },\n typeof body !== \"undefined\" ? { body } : null,\n options.request ? { request: options.request } : null\n );\n}\n\n// pkg/dist-src/endpoint-with-defaults.js\nfunction endpointWithDefaults(defaults, route, options) {\n return parse(merge(defaults, route, options));\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(oldDefaults, newDefaults) {\n const DEFAULTS2 = merge(oldDefaults, newDefaults);\n const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2);\n return Object.assign(endpoint2, {\n DEFAULTS: DEFAULTS2,\n defaults: withDefaults.bind(null, DEFAULTS2),\n merge: merge.bind(null, DEFAULTS2),\n parse\n });\n}\n\n// pkg/dist-src/index.js\nvar endpoint = withDefaults(null, DEFAULTS);\nexport {\n endpoint\n};\n","'use strict'\n\nconst NullObject = function NullObject () { }\nNullObject.prototype = Object.create(null)\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter = token \"=\" ( token / quoted-string )\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text = %x80-FF\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nconst paramRE = /; *([!#$%&'*+.^\\w`|~-]+)=(\"(?:[\\v\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\v\\u0020-\\u00ff])*\"|[!#$%&'*+.^\\w`|~-]+) */gu\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text = %x80-FF\n */\nconst quotedPairRE = /\\\\([\\v\\u0020-\\u00ff])/gu\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type = token\n * subtype = token\n */\nconst mediaTypeRE = /^[!#$%&'*+.^\\w|~-]+\\/[!#$%&'*+.^\\w|~-]+$/u\n\n// default ContentType to prevent repeated object creation\nconst defaultContentType = { type: '', parameters: new NullObject() }\nObject.freeze(defaultContentType.parameters)\nObject.freeze(defaultContentType)\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} header\n * @return {Object}\n * @public\n */\n\nfunction parse (header) {\n if (typeof header !== 'string') {\n throw new TypeError('argument header is required and must be a string')\n }\n\n let index = header.indexOf(';')\n const type = index !== -1\n ? header.slice(0, index).trim()\n : header.trim()\n\n if (mediaTypeRE.test(type) === false) {\n throw new TypeError('invalid media type')\n }\n\n const result = {\n type: type.toLowerCase(),\n parameters: new NullObject()\n }\n\n // parse parameters\n if (index === -1) {\n return result\n }\n\n let key\n let match\n let value\n\n paramRE.lastIndex = index\n\n while ((match = paramRE.exec(header))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .slice(1, value.length - 1)\n\n quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1'))\n }\n\n result.parameters[key] = value\n }\n\n if (index !== header.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return result\n}\n\nfunction safeParse (header) {\n if (typeof header !== 'string') {\n return defaultContentType\n }\n\n let index = header.indexOf(';')\n const type = index !== -1\n ? header.slice(0, index).trim()\n : header.trim()\n\n if (mediaTypeRE.test(type) === false) {\n return defaultContentType\n }\n\n const result = {\n type: type.toLowerCase(),\n parameters: new NullObject()\n }\n\n // parse parameters\n if (index === -1) {\n return result\n }\n\n let key\n let match\n let value\n\n paramRE.lastIndex = index\n\n while ((match = paramRE.exec(header))) {\n if (match.index !== index) {\n return defaultContentType\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .slice(1, value.length - 1)\n\n quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1'))\n }\n\n result.parameters[key] = value\n }\n\n if (index !== header.length) {\n return defaultContentType\n }\n\n return result\n}\n\nmodule.exports.default = { parse, safeParse }\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.defaultContentType = defaultContentType\n","class RequestError extends Error {\n name;\n /**\n * http status code\n */\n status;\n /**\n * Request options that lead to the error.\n */\n request;\n /**\n * Response object if a response was received\n */\n response;\n constructor(message, statusCode, options) {\n super(message, { cause: options.cause });\n this.name = \"HttpError\";\n this.status = Number.parseInt(statusCode);\n if (Number.isNaN(this.status)) {\n this.status = 0;\n }\n /* v8 ignore else -- @preserve -- Bug with vitest coverage where it sees an else branch that doesn't exist */\n if (\"response\" in options) {\n this.response = options.response;\n }\n const requestCopy = Object.assign({}, options.request);\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(\n /(?<! ) .*$/,\n \" [REDACTED]\"\n )\n });\n }\n requestCopy.url = requestCopy.url.replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\").replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy;\n }\n}\nexport {\n RequestError\n};\n","// pkg/dist-src/index.js\nimport { endpoint } from \"@octokit/endpoint\";\n\n// pkg/dist-src/defaults.js\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"10.0.7\";\n\n// pkg/dist-src/defaults.js\nvar defaults_default = {\n headers: {\n \"user-agent\": `octokit-request.js/${VERSION} ${getUserAgent()}`\n }\n};\n\n// pkg/dist-src/fetch-wrapper.js\nimport { safeParse } from \"fast-content-type-parse\";\n\n// pkg/dist-src/is-plain-object.js\nfunction isPlainObject(value) {\n if (typeof value !== \"object\" || value === null) return false;\n if (Object.prototype.toString.call(value) !== \"[object Object]\") return false;\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return true;\n const Ctor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);\n}\n\n// pkg/dist-src/fetch-wrapper.js\nimport { RequestError } from \"@octokit/request-error\";\nvar noop = () => \"\";\nasync function fetchWrapper(requestOptions) {\n const fetch = requestOptions.request?.fetch || globalThis.fetch;\n if (!fetch) {\n throw new Error(\n \"fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing\"\n );\n }\n const log = requestOptions.request?.log || console;\n const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;\n const body = isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body) ? JSON.stringify(requestOptions.body) : requestOptions.body;\n const requestHeaders = Object.fromEntries(\n Object.entries(requestOptions.headers).map(([name, value]) => [\n name,\n String(value)\n ])\n );\n let fetchResponse;\n try {\n fetchResponse = await fetch(requestOptions.url, {\n method: requestOptions.method,\n body,\n redirect: requestOptions.request?.redirect,\n headers: requestHeaders,\n signal: requestOptions.request?.signal,\n // duplex must be set if request.body is ReadableStream or Async Iterables.\n // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.\n ...requestOptions.body && { duplex: \"half\" }\n });\n } catch (error) {\n let message = \"Unknown Error\";\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n error.status = 500;\n throw error;\n }\n message = error.message;\n if (error.name === \"TypeError\" && \"cause\" in error) {\n if (error.cause instanceof Error) {\n message = error.cause.message;\n } else if (typeof error.cause === \"string\") {\n message = error.cause;\n }\n }\n }\n const requestError = new RequestError(message, 500, {\n request: requestOptions\n });\n requestError.cause = error;\n throw requestError;\n }\n const status = fetchResponse.status;\n const url = fetchResponse.url;\n const responseHeaders = {};\n for (const [key, value] of fetchResponse.headers) {\n responseHeaders[key] = value;\n }\n const octokitResponse = {\n url,\n status,\n headers: responseHeaders,\n data: \"\"\n };\n if (\"deprecation\" in responseHeaders) {\n const matches = responseHeaders.link && responseHeaders.link.match(/<([^<>]+)>; rel=\"deprecation\"/);\n const deprecationLink = matches && matches.pop();\n log.warn(\n `[@octokit/request] \"${requestOptions.method} ${requestOptions.url}\" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : \"\"}`\n );\n }\n if (status === 204 || status === 205) {\n return octokitResponse;\n }\n if (requestOptions.method === \"HEAD\") {\n if (status < 400) {\n return octokitResponse;\n }\n throw new RequestError(fetchResponse.statusText, status, {\n response: octokitResponse,\n request: requestOptions\n });\n }\n if (status === 304) {\n octokitResponse.data = await getResponseData(fetchResponse);\n throw new RequestError(\"Not modified\", status, {\n response: octokitResponse,\n request: requestOptions\n });\n }\n if (status >= 400) {\n octokitResponse.data = await getResponseData(fetchResponse);\n throw new RequestError(toErrorMessage(octokitResponse.data), status, {\n response: octokitResponse,\n request: requestOptions\n });\n }\n octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body;\n return octokitResponse;\n}\nasync function getResponseData(response) {\n const contentType = response.headers.get(\"content-type\");\n if (!contentType) {\n return response.text().catch(noop);\n }\n const mimetype = safeParse(contentType);\n if (isJSONResponse(mimetype)) {\n let text = \"\";\n try {\n text = await response.text();\n return JSON.parse(text);\n } catch (err) {\n return text;\n }\n } else if (mimetype.type.startsWith(\"text/\") || mimetype.parameters.charset?.toLowerCase() === \"utf-8\") {\n return response.text().catch(noop);\n } else {\n return response.arrayBuffer().catch(\n /* v8 ignore next -- @preserve */\n () => new ArrayBuffer(0)\n );\n }\n}\nfunction isJSONResponse(mimetype) {\n return mimetype.type === \"application/json\" || mimetype.type === \"application/scim+json\";\n}\nfunction toErrorMessage(data) {\n if (typeof data === \"string\") {\n return data;\n }\n if (data instanceof ArrayBuffer) {\n return \"Unknown error\";\n }\n if (\"message\" in data) {\n const suffix = \"documentation_url\" in data ? ` - ${data.documentation_url}` : \"\";\n return Array.isArray(data.errors) ? `${data.message}: ${data.errors.map((v) => JSON.stringify(v)).join(\", \")}${suffix}` : `${data.message}${suffix}`;\n }\n return `Unknown error: ${JSON.stringify(data)}`;\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(oldEndpoint, newDefaults) {\n const endpoint2 = oldEndpoint.defaults(newDefaults);\n const newApi = function(route, parameters) {\n const endpointOptions = endpoint2.merge(route, parameters);\n if (!endpointOptions.request || !endpointOptions.request.hook) {\n return fetchWrapper(endpoint2.parse(endpointOptions));\n }\n const request2 = (route2, parameters2) => {\n return fetchWrapper(\n endpoint2.parse(endpoint2.merge(route2, parameters2))\n );\n };\n Object.assign(request2, {\n endpoint: endpoint2,\n defaults: withDefaults.bind(null, endpoint2)\n });\n return endpointOptions.request.hook(request2, endpointOptions);\n };\n return Object.assign(newApi, {\n endpoint: endpoint2,\n defaults: withDefaults.bind(null, endpoint2)\n });\n}\n\n// pkg/dist-src/index.js\nvar request = withDefaults(endpoint, defaults_default);\nexport {\n request\n};\n/* v8 ignore next -- @preserve */\n/* v8 ignore else -- @preserve */\n","// pkg/dist-src/index.js\nimport { request } from \"@octokit/request\";\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/with-defaults.js\nimport { request as Request2 } from \"@octokit/request\";\n\n// pkg/dist-src/graphql.js\nimport { request as Request } from \"@octokit/request\";\n\n// pkg/dist-src/error.js\nfunction _buildMessageForResponseErrors(data) {\n return `Request failed due to following response errors:\n` + data.errors.map((e) => ` - ${e.message}`).join(\"\\n\");\n}\nvar GraphqlResponseError = class extends Error {\n constructor(request2, headers, response) {\n super(_buildMessageForResponseErrors(response));\n this.request = request2;\n this.headers = headers;\n this.response = response;\n this.errors = response.errors;\n this.data = response.data;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n name = \"GraphqlResponseError\";\n errors;\n data;\n};\n\n// pkg/dist-src/graphql.js\nvar NON_VARIABLE_OPTIONS = [\n \"method\",\n \"baseUrl\",\n \"url\",\n \"headers\",\n \"request\",\n \"query\",\n \"mediaType\",\n \"operationName\"\n];\nvar FORBIDDEN_VARIABLE_OPTIONS = [\"query\", \"method\", \"url\"];\nvar GHES_V3_SUFFIX_REGEX = /\\/api\\/v3\\/?$/;\nfunction graphql(request2, query, options) {\n if (options) {\n if (typeof query === \"string\" && \"query\" in options) {\n return Promise.reject(\n new Error(`[@octokit/graphql] \"query\" cannot be used as variable name`)\n );\n }\n for (const key in options) {\n if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;\n return Promise.reject(\n new Error(\n `[@octokit/graphql] \"${key}\" cannot be used as variable name`\n )\n );\n }\n }\n const parsedOptions = typeof query === \"string\" ? Object.assign({ query }, options) : query;\n const requestOptions = Object.keys(\n parsedOptions\n ).reduce((result, key) => {\n if (NON_VARIABLE_OPTIONS.includes(key)) {\n result[key] = parsedOptions[key];\n return result;\n }\n if (!result.variables) {\n result.variables = {};\n }\n result.variables[key] = parsedOptions[key];\n return result;\n }, {});\n const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;\n if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {\n requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, \"/api/graphql\");\n }\n return request2(requestOptions).then((response) => {\n if (response.data.errors) {\n const headers = {};\n for (const key of Object.keys(response.headers)) {\n headers[key] = response.headers[key];\n }\n throw new GraphqlResponseError(\n requestOptions,\n headers,\n response.data\n );\n }\n return response.data.data;\n });\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(request2, newDefaults) {\n const newRequest = request2.defaults(newDefaults);\n const newApi = (query, options) => {\n return graphql(newRequest, query, options);\n };\n return Object.assign(newApi, {\n defaults: withDefaults.bind(null, newRequest),\n endpoint: newRequest.endpoint\n });\n}\n\n// pkg/dist-src/index.js\nvar graphql2 = withDefaults(request, {\n headers: {\n \"user-agent\": `octokit-graphql.js/${VERSION} ${getUserAgent()}`\n },\n method: \"POST\",\n url: \"/graphql\"\n});\nfunction withCustomRequest(customRequest) {\n return withDefaults(customRequest, {\n method: \"POST\",\n url: \"/graphql\"\n });\n}\nexport {\n GraphqlResponseError,\n graphql2 as graphql,\n withCustomRequest\n};\n","// pkg/dist-src/is-jwt.js\nvar b64url = \"(?:[a-zA-Z0-9_-]+)\";\nvar sep = \"\\\\.\";\nvar jwtRE = new RegExp(`^${b64url}${sep}${b64url}${sep}${b64url}$`);\nvar isJWT = jwtRE.test.bind(jwtRE);\n\n// pkg/dist-src/auth.js\nasync function auth(token) {\n const isApp = isJWT(token);\n const isInstallation = token.startsWith(\"v1.\") || token.startsWith(\"ghs_\");\n const isUserToServer = token.startsWith(\"ghu_\");\n const tokenType = isApp ? \"app\" : isInstallation ? \"installation\" : isUserToServer ? \"user-to-server\" : \"oauth\";\n return {\n type: \"token\",\n token,\n tokenType\n };\n}\n\n// pkg/dist-src/with-authorization-prefix.js\nfunction withAuthorizationPrefix(token) {\n if (token.split(/\\./).length === 3) {\n return `bearer ${token}`;\n }\n return `token ${token}`;\n}\n\n// pkg/dist-src/hook.js\nasync function hook(token, request, route, parameters) {\n const endpoint = request.endpoint.merge(\n route,\n parameters\n );\n endpoint.headers.authorization = withAuthorizationPrefix(token);\n return request(endpoint);\n}\n\n// pkg/dist-src/index.js\nvar createTokenAuth = function createTokenAuth2(token) {\n if (!token) {\n throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n }\n if (typeof token !== \"string\") {\n throw new Error(\n \"[@octokit/auth-token] Token passed to createTokenAuth is not a string\"\n );\n }\n token = token.replace(/^(token|bearer) +/i, \"\");\n return Object.assign(auth.bind(null, token), {\n hook: hook.bind(null, token)\n });\n};\nexport {\n createTokenAuth\n};\n","const VERSION = \"7.0.6\";\nexport {\n VERSION\n};\n","import { getUserAgent } from \"universal-user-agent\";\nimport Hook from \"before-after-hook\";\nimport { request } from \"@octokit/request\";\nimport { withCustomRequest } from \"@octokit/graphql\";\nimport { createTokenAuth } from \"@octokit/auth-token\";\nimport { VERSION } from \"./version.js\";\nconst noop = () => {\n};\nconst consoleWarn = console.warn.bind(console);\nconst consoleError = console.error.bind(console);\nfunction createLogger(logger = {}) {\n if (typeof logger.debug !== \"function\") {\n logger.debug = noop;\n }\n if (typeof logger.info !== \"function\") {\n logger.info = noop;\n }\n if (typeof logger.warn !== \"function\") {\n logger.warn = consoleWarn;\n }\n if (typeof logger.error !== \"function\") {\n logger.error = consoleError;\n }\n return logger;\n}\nconst userAgentTrail = `octokit-core.js/${VERSION} ${getUserAgent()}`;\nclass Octokit {\n static VERSION = VERSION;\n static defaults(defaults) {\n const OctokitWithDefaults = class extends this {\n constructor(...args) {\n const options = args[0] || {};\n if (typeof defaults === \"function\") {\n super(defaults(options));\n return;\n }\n super(\n Object.assign(\n {},\n defaults,\n options,\n options.userAgent && defaults.userAgent ? {\n userAgent: `${options.userAgent} ${defaults.userAgent}`\n } : null\n )\n );\n }\n };\n return OctokitWithDefaults;\n }\n static plugins = [];\n /**\n * Attach a plugin (or many) to your Octokit instance.\n *\n * @example\n * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)\n */\n static plugin(...newPlugins) {\n const currentPlugins = this.plugins;\n const NewOctokit = class extends this {\n static plugins = currentPlugins.concat(\n newPlugins.filter((plugin) => !currentPlugins.includes(plugin))\n );\n };\n return NewOctokit;\n }\n constructor(options = {}) {\n const hook = new Hook.Collection();\n const requestDefaults = {\n baseUrl: request.endpoint.DEFAULTS.baseUrl,\n headers: {},\n request: Object.assign({}, options.request, {\n // @ts-ignore internal usage only, no need to type\n hook: hook.bind(null, \"request\")\n }),\n mediaType: {\n previews: [],\n format: \"\"\n }\n };\n requestDefaults.headers[\"user-agent\"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail;\n if (options.baseUrl) {\n requestDefaults.baseUrl = options.baseUrl;\n }\n if (options.previews) {\n requestDefaults.mediaType.previews = options.previews;\n }\n if (options.timeZone) {\n requestDefaults.headers[\"time-zone\"] = options.timeZone;\n }\n this.request = request.defaults(requestDefaults);\n this.graphql = withCustomRequest(this.request).defaults(requestDefaults);\n this.log = createLogger(options.log);\n this.hook = hook;\n if (!options.authStrategy) {\n if (!options.auth) {\n this.auth = async () => ({\n type: \"unauthenticated\"\n });\n } else {\n const auth = createTokenAuth(options.auth);\n hook.wrap(\"request\", auth.hook);\n this.auth = auth;\n }\n } else {\n const { authStrategy, ...otherOptions } = options;\n const auth = authStrategy(\n Object.assign(\n {\n request: this.request,\n log: this.log,\n // we pass the current octokit instance as well as its constructor options\n // to allow for authentication strategies that return a new octokit instance\n // that shares the same internal state as the current one. The original\n // requirement for this was the \"event-octokit\" authentication strategy\n // of https://github.com/probot/octokit-auth-probot.\n octokit: this,\n octokitOptions: otherOptions\n },\n options.auth\n )\n );\n hook.wrap(\"request\", auth.hook);\n this.auth = auth;\n }\n const classConstructor = this.constructor;\n for (let i = 0; i < classConstructor.plugins.length; ++i) {\n Object.assign(this, classConstructor.plugins[i](this, options));\n }\n }\n // assigned during constructor\n request;\n graphql;\n log;\n hook;\n // TODO: type `octokit.auth` based on passed options.authStrategy\n auth;\n}\nexport {\n Octokit\n};\n","const VERSION = \"6.0.0\";\nexport {\n VERSION\n};\n","import { VERSION } from \"./version.js\";\nfunction requestLog(octokit) {\n octokit.hook.wrap(\"request\", (request, options) => {\n octokit.log.debug(\"request\", options);\n const start = Date.now();\n const requestOptions = octokit.request.endpoint.parse(options);\n const path = requestOptions.url.replace(options.baseUrl, \"\");\n return request(options).then((response) => {\n const requestId = response.headers[\"x-github-request-id\"];\n octokit.log.info(\n `${requestOptions.method} ${path} - ${response.status} with id ${requestId} in ${Date.now() - start}ms`\n );\n return response;\n }).catch((error) => {\n const requestId = error.response?.headers[\"x-github-request-id\"] || \"UNKNOWN\";\n octokit.log.error(\n `${requestOptions.method} ${path} - ${error.status} with id ${requestId} in ${Date.now() - start}ms`\n );\n throw error;\n });\n });\n}\nrequestLog.VERSION = VERSION;\nexport {\n requestLog\n};\n","// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/normalize-paginated-list-response.js\nfunction normalizePaginatedListResponse(response) {\n if (!response.data) {\n return {\n ...response,\n data: []\n };\n }\n const responseNeedsNormalization = (\"total_count\" in response.data || \"total_commits\" in response.data) && !(\"url\" in response.data);\n if (!responseNeedsNormalization) return response;\n const incompleteResults = response.data.incomplete_results;\n const repositorySelection = response.data.repository_selection;\n const totalCount = response.data.total_count;\n const totalCommits = response.data.total_commits;\n delete response.data.incomplete_results;\n delete response.data.repository_selection;\n delete response.data.total_count;\n delete response.data.total_commits;\n const namespaceKey = Object.keys(response.data)[0];\n const data = response.data[namespaceKey];\n response.data = data;\n if (typeof incompleteResults !== \"undefined\") {\n response.data.incomplete_results = incompleteResults;\n }\n if (typeof repositorySelection !== \"undefined\") {\n response.data.repository_selection = repositorySelection;\n }\n response.data.total_count = totalCount;\n response.data.total_commits = totalCommits;\n return response;\n}\n\n// pkg/dist-src/iterator.js\nfunction iterator(octokit, route, parameters) {\n const options = typeof route === \"function\" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);\n const requestMethod = typeof route === \"function\" ? route : octokit.request;\n const method = options.method;\n const headers = options.headers;\n let url = options.url;\n return {\n [Symbol.asyncIterator]: () => ({\n async next() {\n if (!url) return { done: true };\n try {\n const response = await requestMethod({ method, url, headers });\n const normalizedResponse = normalizePaginatedListResponse(response);\n url = ((normalizedResponse.headers.link || \"\").match(\n /<([^<>]+)>;\\s*rel=\"next\"/\n ) || [])[1];\n if (!url && \"total_commits\" in normalizedResponse.data) {\n const parsedUrl = new URL(normalizedResponse.url);\n const params = parsedUrl.searchParams;\n const page = parseInt(params.get(\"page\") || \"1\", 10);\n const per_page = parseInt(params.get(\"per_page\") || \"250\", 10);\n if (page * per_page < normalizedResponse.data.total_commits) {\n params.set(\"page\", String(page + 1));\n url = parsedUrl.toString();\n }\n }\n return { value: normalizedResponse };\n } catch (error) {\n if (error.status !== 409) throw error;\n url = \"\";\n return {\n value: {\n status: 200,\n headers: {},\n data: []\n }\n };\n }\n }\n })\n };\n}\n\n// pkg/dist-src/paginate.js\nfunction paginate(octokit, route, parameters, mapFn) {\n if (typeof parameters === \"function\") {\n mapFn = parameters;\n parameters = void 0;\n }\n return gather(\n octokit,\n [],\n iterator(octokit, route, parameters)[Symbol.asyncIterator](),\n mapFn\n );\n}\nfunction gather(octokit, results, iterator2, mapFn) {\n return iterator2.next().then((result) => {\n if (result.done) {\n return results;\n }\n let earlyExit = false;\n function done() {\n earlyExit = true;\n }\n results = results.concat(\n mapFn ? mapFn(result.value, done) : result.value.data\n );\n if (earlyExit) {\n return results;\n }\n return gather(octokit, results, iterator2, mapFn);\n });\n}\n\n// pkg/dist-src/compose-paginate.js\nvar composePaginateRest = Object.assign(paginate, {\n iterator\n});\n\n// pkg/dist-src/generated/paginating-endpoints.js\nvar paginatingEndpoints = [\n \"GET /advisories\",\n \"GET /app/hook/deliveries\",\n \"GET /app/installation-requests\",\n \"GET /app/installations\",\n \"GET /assignments/{assignment_id}/accepted_assignments\",\n \"GET /classrooms\",\n \"GET /classrooms/{classroom_id}/assignments\",\n \"GET /enterprises/{enterprise}/code-security/configurations\",\n \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories\",\n \"GET /enterprises/{enterprise}/dependabot/alerts\",\n \"GET /enterprises/{enterprise}/teams\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\",\n \"GET /events\",\n \"GET /gists\",\n \"GET /gists/public\",\n \"GET /gists/starred\",\n \"GET /gists/{gist_id}/comments\",\n \"GET /gists/{gist_id}/commits\",\n \"GET /gists/{gist_id}/forks\",\n \"GET /installation/repositories\",\n \"GET /issues\",\n \"GET /licenses\",\n \"GET /marketplace_listing/plans\",\n \"GET /marketplace_listing/plans/{plan_id}/accounts\",\n \"GET /marketplace_listing/stubbed/plans\",\n \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\",\n \"GET /networks/{owner}/{repo}/events\",\n \"GET /notifications\",\n \"GET /organizations\",\n \"GET /organizations/{org}/dependabot/repository-access\",\n \"GET /orgs/{org}/actions/cache/usage-by-repository\",\n \"GET /orgs/{org}/actions/hosted-runners\",\n \"GET /orgs/{org}/actions/permissions/repositories\",\n \"GET /orgs/{org}/actions/permissions/self-hosted-runners/repositories\",\n \"GET /orgs/{org}/actions/runner-groups\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\",\n \"GET /orgs/{org}/actions/runners\",\n \"GET /orgs/{org}/actions/secrets\",\n \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n \"GET /orgs/{org}/actions/variables\",\n \"GET /orgs/{org}/actions/variables/{name}/repositories\",\n \"GET /orgs/{org}/attestations/repositories\",\n \"GET /orgs/{org}/attestations/{subject_digest}\",\n \"GET /orgs/{org}/blocks\",\n \"GET /orgs/{org}/campaigns\",\n \"GET /orgs/{org}/code-scanning/alerts\",\n \"GET /orgs/{org}/code-security/configurations\",\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\",\n \"GET /orgs/{org}/codespaces\",\n \"GET /orgs/{org}/codespaces/secrets\",\n \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n \"GET /orgs/{org}/copilot/billing/seats\",\n \"GET /orgs/{org}/copilot/metrics\",\n \"GET /orgs/{org}/dependabot/alerts\",\n \"GET /orgs/{org}/dependabot/secrets\",\n \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n \"GET /orgs/{org}/events\",\n \"GET /orgs/{org}/failed_invitations\",\n \"GET /orgs/{org}/hooks\",\n \"GET /orgs/{org}/hooks/{hook_id}/deliveries\",\n \"GET /orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}\",\n \"GET /orgs/{org}/insights/api/subject-stats\",\n \"GET /orgs/{org}/insights/api/user-stats/{user_id}\",\n \"GET /orgs/{org}/installations\",\n \"GET /orgs/{org}/invitations\",\n \"GET /orgs/{org}/invitations/{invitation_id}/teams\",\n \"GET /orgs/{org}/issues\",\n \"GET /orgs/{org}/members\",\n \"GET /orgs/{org}/members/{username}/codespaces\",\n \"GET /orgs/{org}/migrations\",\n \"GET /orgs/{org}/migrations/{migration_id}/repositories\",\n \"GET /orgs/{org}/organization-roles/{role_id}/teams\",\n \"GET /orgs/{org}/organization-roles/{role_id}/users\",\n \"GET /orgs/{org}/outside_collaborators\",\n \"GET /orgs/{org}/packages\",\n \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n \"GET /orgs/{org}/personal-access-token-requests\",\n \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\",\n \"GET /orgs/{org}/personal-access-tokens\",\n \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\",\n \"GET /orgs/{org}/private-registries\",\n \"GET /orgs/{org}/projects\",\n \"GET /orgs/{org}/projectsV2\",\n \"GET /orgs/{org}/projectsV2/{project_number}/fields\",\n \"GET /orgs/{org}/projectsV2/{project_number}/items\",\n \"GET /orgs/{org}/properties/values\",\n \"GET /orgs/{org}/public_members\",\n \"GET /orgs/{org}/repos\",\n \"GET /orgs/{org}/rulesets\",\n \"GET /orgs/{org}/rulesets/rule-suites\",\n \"GET /orgs/{org}/rulesets/{ruleset_id}/history\",\n \"GET /orgs/{org}/secret-scanning/alerts\",\n \"GET /orgs/{org}/security-advisories\",\n \"GET /orgs/{org}/settings/immutable-releases/repositories\",\n \"GET /orgs/{org}/settings/network-configurations\",\n \"GET /orgs/{org}/team/{team_slug}/copilot/metrics\",\n \"GET /orgs/{org}/teams\",\n \"GET /orgs/{org}/teams/{team_slug}/discussions\",\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\",\n \"GET /orgs/{org}/teams/{team_slug}/invitations\",\n \"GET /orgs/{org}/teams/{team_slug}/members\",\n \"GET /orgs/{org}/teams/{team_slug}/projects\",\n \"GET /orgs/{org}/teams/{team_slug}/repos\",\n \"GET /orgs/{org}/teams/{team_slug}/teams\",\n \"GET /projects/{project_id}/collaborators\",\n \"GET /repos/{owner}/{repo}/actions/artifacts\",\n \"GET /repos/{owner}/{repo}/actions/caches\",\n \"GET /repos/{owner}/{repo}/actions/organization-secrets\",\n \"GET /repos/{owner}/{repo}/actions/organization-variables\",\n \"GET /repos/{owner}/{repo}/actions/runners\",\n \"GET /repos/{owner}/{repo}/actions/runs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\",\n \"GET /repos/{owner}/{repo}/actions/secrets\",\n \"GET /repos/{owner}/{repo}/actions/variables\",\n \"GET /repos/{owner}/{repo}/actions/workflows\",\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\",\n \"GET /repos/{owner}/{repo}/activity\",\n \"GET /repos/{owner}/{repo}/assignees\",\n \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\",\n \"GET /repos/{owner}/{repo}/branches\",\n \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\",\n \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n \"GET /repos/{owner}/{repo}/code-scanning/analyses\",\n \"GET /repos/{owner}/{repo}/codespaces\",\n \"GET /repos/{owner}/{repo}/codespaces/devcontainers\",\n \"GET /repos/{owner}/{repo}/codespaces/secrets\",\n \"GET /repos/{owner}/{repo}/collaborators\",\n \"GET /repos/{owner}/{repo}/comments\",\n \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/commits\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/status\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\",\n \"GET /repos/{owner}/{repo}/compare/{basehead}\",\n \"GET /repos/{owner}/{repo}/compare/{base}...{head}\",\n \"GET /repos/{owner}/{repo}/contributors\",\n \"GET /repos/{owner}/{repo}/dependabot/alerts\",\n \"GET /repos/{owner}/{repo}/dependabot/secrets\",\n \"GET /repos/{owner}/{repo}/deployments\",\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n \"GET /repos/{owner}/{repo}/environments\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n \"GET /repos/{owner}/{repo}/events\",\n \"GET /repos/{owner}/{repo}/forks\",\n \"GET /repos/{owner}/{repo}/hooks\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\",\n \"GET /repos/{owner}/{repo}/invitations\",\n \"GET /repos/{owner}/{repo}/issues\",\n \"GET /repos/{owner}/{repo}/issues/comments\",\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/issues/events\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n \"GET /repos/{owner}/{repo}/keys\",\n \"GET /repos/{owner}/{repo}/labels\",\n \"GET /repos/{owner}/{repo}/milestones\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n \"GET /repos/{owner}/{repo}/notifications\",\n \"GET /repos/{owner}/{repo}/pages/builds\",\n \"GET /repos/{owner}/{repo}/projects\",\n \"GET /repos/{owner}/{repo}/pulls\",\n \"GET /repos/{owner}/{repo}/pulls/comments\",\n \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\",\n \"GET /repos/{owner}/{repo}/releases\",\n \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\",\n \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\",\n \"GET /repos/{owner}/{repo}/rules/branches/{branch}\",\n \"GET /repos/{owner}/{repo}/rulesets\",\n \"GET /repos/{owner}/{repo}/rulesets/rule-suites\",\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\",\n \"GET /repos/{owner}/{repo}/security-advisories\",\n \"GET /repos/{owner}/{repo}/stargazers\",\n \"GET /repos/{owner}/{repo}/subscribers\",\n \"GET /repos/{owner}/{repo}/tags\",\n \"GET /repos/{owner}/{repo}/teams\",\n \"GET /repos/{owner}/{repo}/topics\",\n \"GET /repositories\",\n \"GET /search/code\",\n \"GET /search/commits\",\n \"GET /search/issues\",\n \"GET /search/labels\",\n \"GET /search/repositories\",\n \"GET /search/topics\",\n \"GET /search/users\",\n \"GET /teams/{team_id}/discussions\",\n \"GET /teams/{team_id}/discussions/{discussion_number}/comments\",\n \"GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n \"GET /teams/{team_id}/discussions/{discussion_number}/reactions\",\n \"GET /teams/{team_id}/invitations\",\n \"GET /teams/{team_id}/members\",\n \"GET /teams/{team_id}/projects\",\n \"GET /teams/{team_id}/repos\",\n \"GET /teams/{team_id}/teams\",\n \"GET /user/blocks\",\n \"GET /user/codespaces\",\n \"GET /user/codespaces/secrets\",\n \"GET /user/emails\",\n \"GET /user/followers\",\n \"GET /user/following\",\n \"GET /user/gpg_keys\",\n \"GET /user/installations\",\n \"GET /user/installations/{installation_id}/repositories\",\n \"GET /user/issues\",\n \"GET /user/keys\",\n \"GET /user/marketplace_purchases\",\n \"GET /user/marketplace_purchases/stubbed\",\n \"GET /user/memberships/orgs\",\n \"GET /user/migrations\",\n \"GET /user/migrations/{migration_id}/repositories\",\n \"GET /user/orgs\",\n \"GET /user/packages\",\n \"GET /user/packages/{package_type}/{package_name}/versions\",\n \"GET /user/public_emails\",\n \"GET /user/repos\",\n \"GET /user/repository_invitations\",\n \"GET /user/social_accounts\",\n \"GET /user/ssh_signing_keys\",\n \"GET /user/starred\",\n \"GET /user/subscriptions\",\n \"GET /user/teams\",\n \"GET /users\",\n \"GET /users/{username}/attestations/{subject_digest}\",\n \"GET /users/{username}/events\",\n \"GET /users/{username}/events/orgs/{org}\",\n \"GET /users/{username}/events/public\",\n \"GET /users/{username}/followers\",\n \"GET /users/{username}/following\",\n \"GET /users/{username}/gists\",\n \"GET /users/{username}/gpg_keys\",\n \"GET /users/{username}/keys\",\n \"GET /users/{username}/orgs\",\n \"GET /users/{username}/packages\",\n \"GET /users/{username}/projects\",\n \"GET /users/{username}/projectsV2\",\n \"GET /users/{username}/projectsV2/{project_number}/fields\",\n \"GET /users/{username}/projectsV2/{project_number}/items\",\n \"GET /users/{username}/received_events\",\n \"GET /users/{username}/received_events/public\",\n \"GET /users/{username}/repos\",\n \"GET /users/{username}/social_accounts\",\n \"GET /users/{username}/ssh_signing_keys\",\n \"GET /users/{username}/starred\",\n \"GET /users/{username}/subscriptions\"\n];\n\n// pkg/dist-src/paginating-endpoints.js\nfunction isPaginatingEndpoint(arg) {\n if (typeof arg === \"string\") {\n return paginatingEndpoints.includes(arg);\n } else {\n return false;\n }\n}\n\n// pkg/dist-src/index.js\nfunction paginateRest(octokit) {\n return {\n paginate: Object.assign(paginate.bind(null, octokit), {\n iterator: iterator.bind(null, octokit)\n })\n };\n}\npaginateRest.VERSION = VERSION;\nexport {\n composePaginateRest,\n isPaginatingEndpoint,\n paginateRest,\n paginatingEndpoints\n};\n","const VERSION = \"17.0.0\";\nexport {\n VERSION\n};\n//# sourceMappingURL=version.js.map\n","const Endpoints = {\n actions: {\n addCustomLabelsToSelfHostedRunnerForOrg: [\n \"POST /orgs/{org}/actions/runners/{runner_id}/labels\"\n ],\n addCustomLabelsToSelfHostedRunnerForRepo: [\n \"POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"\n ],\n addRepoAccessToSelfHostedRunnerGroupInOrg: [\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}\"\n ],\n addSelectedRepoToOrgSecret: [\n \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n addSelectedRepoToOrgVariable: [\n \"PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\"\n ],\n approveWorkflowRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve\"\n ],\n cancelWorkflowRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel\"\n ],\n createEnvironmentVariable: [\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/variables\"\n ],\n createHostedRunnerForOrg: [\"POST /orgs/{org}/actions/hosted-runners\"],\n createOrUpdateEnvironmentSecret: [\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\"\n ],\n createOrUpdateOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}\"],\n createOrUpdateRepoSecret: [\n \"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}\"\n ],\n createOrgVariable: [\"POST /orgs/{org}/actions/variables\"],\n createRegistrationTokenForOrg: [\n \"POST /orgs/{org}/actions/runners/registration-token\"\n ],\n createRegistrationTokenForRepo: [\n \"POST /repos/{owner}/{repo}/actions/runners/registration-token\"\n ],\n createRemoveTokenForOrg: [\"POST /orgs/{org}/actions/runners/remove-token\"],\n createRemoveTokenForRepo: [\n \"POST /repos/{owner}/{repo}/actions/runners/remove-token\"\n ],\n createRepoVariable: [\"POST /repos/{owner}/{repo}/actions/variables\"],\n createWorkflowDispatch: [\n \"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\"\n ],\n deleteActionsCacheById: [\n \"DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}\"\n ],\n deleteActionsCacheByKey: [\n \"DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}\"\n ],\n deleteArtifact: [\n \"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"\n ],\n deleteCustomImageFromOrg: [\n \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\"\n ],\n deleteCustomImageVersionFromOrg: [\n \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\"\n ],\n deleteEnvironmentSecret: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\"\n ],\n deleteEnvironmentVariable: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\"\n ],\n deleteHostedRunnerForOrg: [\n \"DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\"\n ],\n deleteOrgSecret: [\"DELETE /orgs/{org}/actions/secrets/{secret_name}\"],\n deleteOrgVariable: [\"DELETE /orgs/{org}/actions/variables/{name}\"],\n deleteRepoSecret: [\n \"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}\"\n ],\n deleteRepoVariable: [\n \"DELETE /repos/{owner}/{repo}/actions/variables/{name}\"\n ],\n deleteSelfHostedRunnerFromOrg: [\n \"DELETE /orgs/{org}/actions/runners/{runner_id}\"\n ],\n deleteSelfHostedRunnerFromRepo: [\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}\"\n ],\n deleteWorkflowRun: [\"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n deleteWorkflowRunLogs: [\n \"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs\"\n ],\n disableSelectedRepositoryGithubActionsOrganization: [\n \"DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}\"\n ],\n disableWorkflow: [\n \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable\"\n ],\n downloadArtifact: [\n \"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}\"\n ],\n downloadJobLogsForWorkflowRun: [\n \"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs\"\n ],\n downloadWorkflowRunAttemptLogs: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs\"\n ],\n downloadWorkflowRunLogs: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs\"\n ],\n enableSelectedRepositoryGithubActionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions/repositories/{repository_id}\"\n ],\n enableWorkflow: [\n \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable\"\n ],\n forceCancelWorkflowRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel\"\n ],\n generateRunnerJitconfigForOrg: [\n \"POST /orgs/{org}/actions/runners/generate-jitconfig\"\n ],\n generateRunnerJitconfigForRepo: [\n \"POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig\"\n ],\n getActionsCacheList: [\"GET /repos/{owner}/{repo}/actions/caches\"],\n getActionsCacheUsage: [\"GET /repos/{owner}/{repo}/actions/cache/usage\"],\n getActionsCacheUsageByRepoForOrg: [\n \"GET /orgs/{org}/actions/cache/usage-by-repository\"\n ],\n getActionsCacheUsageForOrg: [\"GET /orgs/{org}/actions/cache/usage\"],\n getAllowedActionsOrganization: [\n \"GET /orgs/{org}/actions/permissions/selected-actions\"\n ],\n getAllowedActionsRepository: [\n \"GET /repos/{owner}/{repo}/actions/permissions/selected-actions\"\n ],\n getArtifact: [\"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"],\n getCustomImageForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\"\n ],\n getCustomImageVersionForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\"\n ],\n getCustomOidcSubClaimForRepo: [\n \"GET /repos/{owner}/{repo}/actions/oidc/customization/sub\"\n ],\n getEnvironmentPublicKey: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key\"\n ],\n getEnvironmentSecret: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\"\n ],\n getEnvironmentVariable: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\"\n ],\n getGithubActionsDefaultWorkflowPermissionsOrganization: [\n \"GET /orgs/{org}/actions/permissions/workflow\"\n ],\n getGithubActionsDefaultWorkflowPermissionsRepository: [\n \"GET /repos/{owner}/{repo}/actions/permissions/workflow\"\n ],\n getGithubActionsPermissionsOrganization: [\n \"GET /orgs/{org}/actions/permissions\"\n ],\n getGithubActionsPermissionsRepository: [\n \"GET /repos/{owner}/{repo}/actions/permissions\"\n ],\n getHostedRunnerForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\"\n ],\n getHostedRunnersGithubOwnedImagesForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/github-owned\"\n ],\n getHostedRunnersLimitsForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/limits\"\n ],\n getHostedRunnersMachineSpecsForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/machine-sizes\"\n ],\n getHostedRunnersPartnerImagesForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/partner\"\n ],\n getHostedRunnersPlatformsForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/platforms\"\n ],\n getJobForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/jobs/{job_id}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/actions/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/actions/secrets/{secret_name}\"],\n getOrgVariable: [\"GET /orgs/{org}/actions/variables/{name}\"],\n getPendingDeploymentsForRun: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\"\n ],\n getRepoPermissions: [\n \"GET /repos/{owner}/{repo}/actions/permissions\",\n {},\n { renamed: [\"actions\", \"getGithubActionsPermissionsRepository\"] }\n ],\n getRepoPublicKey: [\"GET /repos/{owner}/{repo}/actions/secrets/public-key\"],\n getRepoSecret: [\"GET /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n getRepoVariable: [\"GET /repos/{owner}/{repo}/actions/variables/{name}\"],\n getReviewsForRun: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals\"\n ],\n getSelfHostedRunnerForOrg: [\"GET /orgs/{org}/actions/runners/{runner_id}\"],\n getSelfHostedRunnerForRepo: [\n \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}\"\n ],\n getWorkflow: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}\"],\n getWorkflowAccessToRepository: [\n \"GET /repos/{owner}/{repo}/actions/permissions/access\"\n ],\n getWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n getWorkflowRunAttempt: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}\"\n ],\n getWorkflowRunUsage: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing\"\n ],\n getWorkflowUsage: [\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing\"\n ],\n listArtifactsForRepo: [\"GET /repos/{owner}/{repo}/actions/artifacts\"],\n listCustomImageVersionsForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions\"\n ],\n listCustomImagesForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom\"\n ],\n listEnvironmentSecrets: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\"\n ],\n listEnvironmentVariables: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\"\n ],\n listGithubHostedRunnersInGroupForOrg: [\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\"\n ],\n listHostedRunnersForOrg: [\"GET /orgs/{org}/actions/hosted-runners\"],\n listJobsForWorkflowRun: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\"\n ],\n listJobsForWorkflowRunAttempt: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\"\n ],\n listLabelsForSelfHostedRunnerForOrg: [\n \"GET /orgs/{org}/actions/runners/{runner_id}/labels\"\n ],\n listLabelsForSelfHostedRunnerForRepo: [\n \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"\n ],\n listOrgSecrets: [\"GET /orgs/{org}/actions/secrets\"],\n listOrgVariables: [\"GET /orgs/{org}/actions/variables\"],\n listRepoOrganizationSecrets: [\n \"GET /repos/{owner}/{repo}/actions/organization-secrets\"\n ],\n listRepoOrganizationVariables: [\n \"GET /repos/{owner}/{repo}/actions/organization-variables\"\n ],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/actions/secrets\"],\n listRepoVariables: [\"GET /repos/{owner}/{repo}/actions/variables\"],\n listRepoWorkflows: [\"GET /repos/{owner}/{repo}/actions/workflows\"],\n listRunnerApplicationsForOrg: [\"GET /orgs/{org}/actions/runners/downloads\"],\n listRunnerApplicationsForRepo: [\n \"GET /repos/{owner}/{repo}/actions/runners/downloads\"\n ],\n listSelectedReposForOrgSecret: [\n \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\"\n ],\n listSelectedReposForOrgVariable: [\n \"GET /orgs/{org}/actions/variables/{name}/repositories\"\n ],\n listSelectedRepositoriesEnabledGithubActionsOrganization: [\n \"GET /orgs/{org}/actions/permissions/repositories\"\n ],\n listSelfHostedRunnersForOrg: [\"GET /orgs/{org}/actions/runners\"],\n listSelfHostedRunnersForRepo: [\"GET /repos/{owner}/{repo}/actions/runners\"],\n listWorkflowRunArtifacts: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\"\n ],\n listWorkflowRuns: [\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\"\n ],\n listWorkflowRunsForRepo: [\"GET /repos/{owner}/{repo}/actions/runs\"],\n reRunJobForWorkflowRun: [\n \"POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun\"\n ],\n reRunWorkflow: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun\"],\n reRunWorkflowFailedJobs: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs\"\n ],\n removeAllCustomLabelsFromSelfHostedRunnerForOrg: [\n \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels\"\n ],\n removeAllCustomLabelsFromSelfHostedRunnerForRepo: [\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"\n ],\n removeCustomLabelFromSelfHostedRunnerForOrg: [\n \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}\"\n ],\n removeCustomLabelFromSelfHostedRunnerForRepo: [\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}\"\n ],\n removeSelectedRepoFromOrgSecret: [\n \"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n removeSelectedRepoFromOrgVariable: [\n \"DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\"\n ],\n reviewCustomGatesForRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule\"\n ],\n reviewPendingDeploymentsForRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\"\n ],\n setAllowedActionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions/selected-actions\"\n ],\n setAllowedActionsRepository: [\n \"PUT /repos/{owner}/{repo}/actions/permissions/selected-actions\"\n ],\n setCustomLabelsForSelfHostedRunnerForOrg: [\n \"PUT /orgs/{org}/actions/runners/{runner_id}/labels\"\n ],\n setCustomLabelsForSelfHostedRunnerForRepo: [\n \"PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"\n ],\n setCustomOidcSubClaimForRepo: [\n \"PUT /repos/{owner}/{repo}/actions/oidc/customization/sub\"\n ],\n setGithubActionsDefaultWorkflowPermissionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions/workflow\"\n ],\n setGithubActionsDefaultWorkflowPermissionsRepository: [\n \"PUT /repos/{owner}/{repo}/actions/permissions/workflow\"\n ],\n setGithubActionsPermissionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions\"\n ],\n setGithubActionsPermissionsRepository: [\n \"PUT /repos/{owner}/{repo}/actions/permissions\"\n ],\n setSelectedReposForOrgSecret: [\n \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories\"\n ],\n setSelectedReposForOrgVariable: [\n \"PUT /orgs/{org}/actions/variables/{name}/repositories\"\n ],\n setSelectedRepositoriesEnabledGithubActionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions/repositories\"\n ],\n setWorkflowAccessToRepository: [\n \"PUT /repos/{owner}/{repo}/actions/permissions/access\"\n ],\n updateEnvironmentVariable: [\n \"PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\"\n ],\n updateHostedRunnerForOrg: [\n \"PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\"\n ],\n updateOrgVariable: [\"PATCH /orgs/{org}/actions/variables/{name}\"],\n updateRepoVariable: [\n \"PATCH /repos/{owner}/{repo}/actions/variables/{name}\"\n ]\n },\n activity: {\n checkRepoIsStarredByAuthenticatedUser: [\"GET /user/starred/{owner}/{repo}\"],\n deleteRepoSubscription: [\"DELETE /repos/{owner}/{repo}/subscription\"],\n deleteThreadSubscription: [\n \"DELETE /notifications/threads/{thread_id}/subscription\"\n ],\n getFeeds: [\"GET /feeds\"],\n getRepoSubscription: [\"GET /repos/{owner}/{repo}/subscription\"],\n getThread: [\"GET /notifications/threads/{thread_id}\"],\n getThreadSubscriptionForAuthenticatedUser: [\n \"GET /notifications/threads/{thread_id}/subscription\"\n ],\n listEventsForAuthenticatedUser: [\"GET /users/{username}/events\"],\n listNotificationsForAuthenticatedUser: [\"GET /notifications\"],\n listOrgEventsForAuthenticatedUser: [\n \"GET /users/{username}/events/orgs/{org}\"\n ],\n listPublicEvents: [\"GET /events\"],\n listPublicEventsForRepoNetwork: [\"GET /networks/{owner}/{repo}/events\"],\n listPublicEventsForUser: [\"GET /users/{username}/events/public\"],\n listPublicOrgEvents: [\"GET /orgs/{org}/events\"],\n listReceivedEventsForUser: [\"GET /users/{username}/received_events\"],\n listReceivedPublicEventsForUser: [\n \"GET /users/{username}/received_events/public\"\n ],\n listRepoEvents: [\"GET /repos/{owner}/{repo}/events\"],\n listRepoNotificationsForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/notifications\"\n ],\n listReposStarredByAuthenticatedUser: [\"GET /user/starred\"],\n listReposStarredByUser: [\"GET /users/{username}/starred\"],\n listReposWatchedByUser: [\"GET /users/{username}/subscriptions\"],\n listStargazersForRepo: [\"GET /repos/{owner}/{repo}/stargazers\"],\n listWatchedReposForAuthenticatedUser: [\"GET /user/subscriptions\"],\n listWatchersForRepo: [\"GET /repos/{owner}/{repo}/subscribers\"],\n markNotificationsAsRead: [\"PUT /notifications\"],\n markRepoNotificationsAsRead: [\"PUT /repos/{owner}/{repo}/notifications\"],\n markThreadAsDone: [\"DELETE /notifications/threads/{thread_id}\"],\n markThreadAsRead: [\"PATCH /notifications/threads/{thread_id}\"],\n setRepoSubscription: [\"PUT /repos/{owner}/{repo}/subscription\"],\n setThreadSubscription: [\n \"PUT /notifications/threads/{thread_id}/subscription\"\n ],\n starRepoForAuthenticatedUser: [\"PUT /user/starred/{owner}/{repo}\"],\n unstarRepoForAuthenticatedUser: [\"DELETE /user/starred/{owner}/{repo}\"]\n },\n apps: {\n addRepoToInstallation: [\n \"PUT /user/installations/{installation_id}/repositories/{repository_id}\",\n {},\n { renamed: [\"apps\", \"addRepoToInstallationForAuthenticatedUser\"] }\n ],\n addRepoToInstallationForAuthenticatedUser: [\n \"PUT /user/installations/{installation_id}/repositories/{repository_id}\"\n ],\n checkToken: [\"POST /applications/{client_id}/token\"],\n createFromManifest: [\"POST /app-manifests/{code}/conversions\"],\n createInstallationAccessToken: [\n \"POST /app/installations/{installation_id}/access_tokens\"\n ],\n deleteAuthorization: [\"DELETE /applications/{client_id}/grant\"],\n deleteInstallation: [\"DELETE /app/installations/{installation_id}\"],\n deleteToken: [\"DELETE /applications/{client_id}/token\"],\n getAuthenticated: [\"GET /app\"],\n getBySlug: [\"GET /apps/{app_slug}\"],\n getInstallation: [\"GET /app/installations/{installation_id}\"],\n getOrgInstallation: [\"GET /orgs/{org}/installation\"],\n getRepoInstallation: [\"GET /repos/{owner}/{repo}/installation\"],\n getSubscriptionPlanForAccount: [\n \"GET /marketplace_listing/accounts/{account_id}\"\n ],\n getSubscriptionPlanForAccountStubbed: [\n \"GET /marketplace_listing/stubbed/accounts/{account_id}\"\n ],\n getUserInstallation: [\"GET /users/{username}/installation\"],\n getWebhookConfigForApp: [\"GET /app/hook/config\"],\n getWebhookDelivery: [\"GET /app/hook/deliveries/{delivery_id}\"],\n listAccountsForPlan: [\"GET /marketplace_listing/plans/{plan_id}/accounts\"],\n listAccountsForPlanStubbed: [\n \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\"\n ],\n listInstallationReposForAuthenticatedUser: [\n \"GET /user/installations/{installation_id}/repositories\"\n ],\n listInstallationRequestsForAuthenticatedApp: [\n \"GET /app/installation-requests\"\n ],\n listInstallations: [\"GET /app/installations\"],\n listInstallationsForAuthenticatedUser: [\"GET /user/installations\"],\n listPlans: [\"GET /marketplace_listing/plans\"],\n listPlansStubbed: [\"GET /marketplace_listing/stubbed/plans\"],\n listReposAccessibleToInstallation: [\"GET /installation/repositories\"],\n listSubscriptionsForAuthenticatedUser: [\"GET /user/marketplace_purchases\"],\n listSubscriptionsForAuthenticatedUserStubbed: [\n \"GET /user/marketplace_purchases/stubbed\"\n ],\n listWebhookDeliveries: [\"GET /app/hook/deliveries\"],\n redeliverWebhookDelivery: [\n \"POST /app/hook/deliveries/{delivery_id}/attempts\"\n ],\n removeRepoFromInstallation: [\n \"DELETE /user/installations/{installation_id}/repositories/{repository_id}\",\n {},\n { renamed: [\"apps\", \"removeRepoFromInstallationForAuthenticatedUser\"] }\n ],\n removeRepoFromInstallationForAuthenticatedUser: [\n \"DELETE /user/installations/{installation_id}/repositories/{repository_id}\"\n ],\n resetToken: [\"PATCH /applications/{client_id}/token\"],\n revokeInstallationAccessToken: [\"DELETE /installation/token\"],\n scopeToken: [\"POST /applications/{client_id}/token/scoped\"],\n suspendInstallation: [\"PUT /app/installations/{installation_id}/suspended\"],\n unsuspendInstallation: [\n \"DELETE /app/installations/{installation_id}/suspended\"\n ],\n updateWebhookConfigForApp: [\"PATCH /app/hook/config\"]\n },\n billing: {\n getGithubActionsBillingOrg: [\"GET /orgs/{org}/settings/billing/actions\"],\n getGithubActionsBillingUser: [\n \"GET /users/{username}/settings/billing/actions\"\n ],\n getGithubBillingPremiumRequestUsageReportOrg: [\n \"GET /organizations/{org}/settings/billing/premium_request/usage\"\n ],\n getGithubBillingPremiumRequestUsageReportUser: [\n \"GET /users/{username}/settings/billing/premium_request/usage\"\n ],\n getGithubBillingUsageReportOrg: [\n \"GET /organizations/{org}/settings/billing/usage\"\n ],\n getGithubBillingUsageReportUser: [\n \"GET /users/{username}/settings/billing/usage\"\n ],\n getGithubPackagesBillingOrg: [\"GET /orgs/{org}/settings/billing/packages\"],\n getGithubPackagesBillingUser: [\n \"GET /users/{username}/settings/billing/packages\"\n ],\n getSharedStorageBillingOrg: [\n \"GET /orgs/{org}/settings/billing/shared-storage\"\n ],\n getSharedStorageBillingUser: [\n \"GET /users/{username}/settings/billing/shared-storage\"\n ]\n },\n campaigns: {\n createCampaign: [\"POST /orgs/{org}/campaigns\"],\n deleteCampaign: [\"DELETE /orgs/{org}/campaigns/{campaign_number}\"],\n getCampaignSummary: [\"GET /orgs/{org}/campaigns/{campaign_number}\"],\n listOrgCampaigns: [\"GET /orgs/{org}/campaigns\"],\n updateCampaign: [\"PATCH /orgs/{org}/campaigns/{campaign_number}\"]\n },\n checks: {\n create: [\"POST /repos/{owner}/{repo}/check-runs\"],\n createSuite: [\"POST /repos/{owner}/{repo}/check-suites\"],\n get: [\"GET /repos/{owner}/{repo}/check-runs/{check_run_id}\"],\n getSuite: [\"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}\"],\n listAnnotations: [\n \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\"\n ],\n listForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\"],\n listForSuite: [\n \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\"\n ],\n listSuitesForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\"],\n rerequestRun: [\n \"POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest\"\n ],\n rerequestSuite: [\n \"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest\"\n ],\n setSuitesPreferences: [\n \"PATCH /repos/{owner}/{repo}/check-suites/preferences\"\n ],\n update: [\"PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}\"]\n },\n codeScanning: {\n commitAutofix: [\n \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits\"\n ],\n createAutofix: [\n \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\"\n ],\n createVariantAnalysis: [\n \"POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses\"\n ],\n deleteAnalysis: [\n \"DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}\"\n ],\n deleteCodeqlDatabase: [\n \"DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\"\n ],\n getAlert: [\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n {},\n { renamedParameters: { alert_id: \"alert_number\" } }\n ],\n getAnalysis: [\n \"GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\"\n ],\n getAutofix: [\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\"\n ],\n getCodeqlDatabase: [\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\"\n ],\n getDefaultSetup: [\"GET /repos/{owner}/{repo}/code-scanning/default-setup\"],\n getSarif: [\"GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}\"],\n getVariantAnalysis: [\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}\"\n ],\n getVariantAnalysisRepoTask: [\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}\"\n ],\n listAlertInstances: [\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\"\n ],\n listAlertsForOrg: [\"GET /orgs/{org}/code-scanning/alerts\"],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/code-scanning/alerts\"],\n listAlertsInstances: [\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n {},\n { renamed: [\"codeScanning\", \"listAlertInstances\"] }\n ],\n listCodeqlDatabases: [\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases\"\n ],\n listRecentAnalyses: [\"GET /repos/{owner}/{repo}/code-scanning/analyses\"],\n updateAlert: [\n \"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\"\n ],\n updateDefaultSetup: [\n \"PATCH /repos/{owner}/{repo}/code-scanning/default-setup\"\n ],\n uploadSarif: [\"POST /repos/{owner}/{repo}/code-scanning/sarifs\"]\n },\n codeSecurity: {\n attachConfiguration: [\n \"POST /orgs/{org}/code-security/configurations/{configuration_id}/attach\"\n ],\n attachEnterpriseConfiguration: [\n \"POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach\"\n ],\n createConfiguration: [\"POST /orgs/{org}/code-security/configurations\"],\n createConfigurationForEnterprise: [\n \"POST /enterprises/{enterprise}/code-security/configurations\"\n ],\n deleteConfiguration: [\n \"DELETE /orgs/{org}/code-security/configurations/{configuration_id}\"\n ],\n deleteConfigurationForEnterprise: [\n \"DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}\"\n ],\n detachConfiguration: [\n \"DELETE /orgs/{org}/code-security/configurations/detach\"\n ],\n getConfiguration: [\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}\"\n ],\n getConfigurationForRepository: [\n \"GET /repos/{owner}/{repo}/code-security-configuration\"\n ],\n getConfigurationsForEnterprise: [\n \"GET /enterprises/{enterprise}/code-security/configurations\"\n ],\n getConfigurationsForOrg: [\"GET /orgs/{org}/code-security/configurations\"],\n getDefaultConfigurations: [\n \"GET /orgs/{org}/code-security/configurations/defaults\"\n ],\n getDefaultConfigurationsForEnterprise: [\n \"GET /enterprises/{enterprise}/code-security/configurations/defaults\"\n ],\n getRepositoriesForConfiguration: [\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\"\n ],\n getRepositoriesForEnterpriseConfiguration: [\n \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories\"\n ],\n getSingleConfigurationForEnterprise: [\n \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}\"\n ],\n setConfigurationAsDefault: [\n \"PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults\"\n ],\n setConfigurationAsDefaultForEnterprise: [\n \"PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults\"\n ],\n updateConfiguration: [\n \"PATCH /orgs/{org}/code-security/configurations/{configuration_id}\"\n ],\n updateEnterpriseConfiguration: [\n \"PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}\"\n ]\n },\n codesOfConduct: {\n getAllCodesOfConduct: [\"GET /codes_of_conduct\"],\n getConductCode: [\"GET /codes_of_conduct/{key}\"]\n },\n codespaces: {\n addRepositoryForSecretForAuthenticatedUser: [\n \"PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n addSelectedRepoToOrgSecret: [\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n checkPermissionsForDevcontainer: [\n \"GET /repos/{owner}/{repo}/codespaces/permissions_check\"\n ],\n codespaceMachinesForAuthenticatedUser: [\n \"GET /user/codespaces/{codespace_name}/machines\"\n ],\n createForAuthenticatedUser: [\"POST /user/codespaces\"],\n createOrUpdateOrgSecret: [\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}\"\n ],\n createOrUpdateRepoSecret: [\n \"PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"\n ],\n createOrUpdateSecretForAuthenticatedUser: [\n \"PUT /user/codespaces/secrets/{secret_name}\"\n ],\n createWithPrForAuthenticatedUser: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces\"\n ],\n createWithRepoForAuthenticatedUser: [\n \"POST /repos/{owner}/{repo}/codespaces\"\n ],\n deleteForAuthenticatedUser: [\"DELETE /user/codespaces/{codespace_name}\"],\n deleteFromOrganization: [\n \"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\"\n ],\n deleteOrgSecret: [\"DELETE /orgs/{org}/codespaces/secrets/{secret_name}\"],\n deleteRepoSecret: [\n \"DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"\n ],\n deleteSecretForAuthenticatedUser: [\n \"DELETE /user/codespaces/secrets/{secret_name}\"\n ],\n exportForAuthenticatedUser: [\n \"POST /user/codespaces/{codespace_name}/exports\"\n ],\n getCodespacesForUserInOrg: [\n \"GET /orgs/{org}/members/{username}/codespaces\"\n ],\n getExportDetailsForAuthenticatedUser: [\n \"GET /user/codespaces/{codespace_name}/exports/{export_id}\"\n ],\n getForAuthenticatedUser: [\"GET /user/codespaces/{codespace_name}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/codespaces/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/codespaces/secrets/{secret_name}\"],\n getPublicKeyForAuthenticatedUser: [\n \"GET /user/codespaces/secrets/public-key\"\n ],\n getRepoPublicKey: [\n \"GET /repos/{owner}/{repo}/codespaces/secrets/public-key\"\n ],\n getRepoSecret: [\n \"GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"\n ],\n getSecretForAuthenticatedUser: [\n \"GET /user/codespaces/secrets/{secret_name}\"\n ],\n listDevcontainersInRepositoryForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/codespaces/devcontainers\"\n ],\n listForAuthenticatedUser: [\"GET /user/codespaces\"],\n listInOrganization: [\n \"GET /orgs/{org}/codespaces\",\n {},\n { renamedParameters: { org_id: \"org\" } }\n ],\n listInRepositoryForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/codespaces\"\n ],\n listOrgSecrets: [\"GET /orgs/{org}/codespaces/secrets\"],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/codespaces/secrets\"],\n listRepositoriesForSecretForAuthenticatedUser: [\n \"GET /user/codespaces/secrets/{secret_name}/repositories\"\n ],\n listSecretsForAuthenticatedUser: [\"GET /user/codespaces/secrets\"],\n listSelectedReposForOrgSecret: [\n \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\"\n ],\n preFlightWithRepoForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/codespaces/new\"\n ],\n publishForAuthenticatedUser: [\n \"POST /user/codespaces/{codespace_name}/publish\"\n ],\n removeRepositoryForSecretForAuthenticatedUser: [\n \"DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n removeSelectedRepoFromOrgSecret: [\n \"DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n repoMachinesForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/codespaces/machines\"\n ],\n setRepositoriesForSecretForAuthenticatedUser: [\n \"PUT /user/codespaces/secrets/{secret_name}/repositories\"\n ],\n setSelectedReposForOrgSecret: [\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories\"\n ],\n startForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/start\"],\n stopForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/stop\"],\n stopInOrganization: [\n \"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\"\n ],\n updateForAuthenticatedUser: [\"PATCH /user/codespaces/{codespace_name}\"]\n },\n copilot: {\n addCopilotSeatsForTeams: [\n \"POST /orgs/{org}/copilot/billing/selected_teams\"\n ],\n addCopilotSeatsForUsers: [\n \"POST /orgs/{org}/copilot/billing/selected_users\"\n ],\n cancelCopilotSeatAssignmentForTeams: [\n \"DELETE /orgs/{org}/copilot/billing/selected_teams\"\n ],\n cancelCopilotSeatAssignmentForUsers: [\n \"DELETE /orgs/{org}/copilot/billing/selected_users\"\n ],\n copilotMetricsForOrganization: [\"GET /orgs/{org}/copilot/metrics\"],\n copilotMetricsForTeam: [\"GET /orgs/{org}/team/{team_slug}/copilot/metrics\"],\n getCopilotOrganizationDetails: [\"GET /orgs/{org}/copilot/billing\"],\n getCopilotSeatDetailsForUser: [\n \"GET /orgs/{org}/members/{username}/copilot\"\n ],\n listCopilotSeats: [\"GET /orgs/{org}/copilot/billing/seats\"]\n },\n credentials: { revoke: [\"POST /credentials/revoke\"] },\n dependabot: {\n addSelectedRepoToOrgSecret: [\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n createOrUpdateOrgSecret: [\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}\"\n ],\n createOrUpdateRepoSecret: [\n \"PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"\n ],\n deleteOrgSecret: [\"DELETE /orgs/{org}/dependabot/secrets/{secret_name}\"],\n deleteRepoSecret: [\n \"DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"\n ],\n getAlert: [\"GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/dependabot/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/dependabot/secrets/{secret_name}\"],\n getRepoPublicKey: [\n \"GET /repos/{owner}/{repo}/dependabot/secrets/public-key\"\n ],\n getRepoSecret: [\n \"GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"\n ],\n listAlertsForEnterprise: [\n \"GET /enterprises/{enterprise}/dependabot/alerts\"\n ],\n listAlertsForOrg: [\"GET /orgs/{org}/dependabot/alerts\"],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/dependabot/alerts\"],\n listOrgSecrets: [\"GET /orgs/{org}/dependabot/secrets\"],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/dependabot/secrets\"],\n listSelectedReposForOrgSecret: [\n \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\"\n ],\n removeSelectedRepoFromOrgSecret: [\n \"DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n repositoryAccessForOrg: [\n \"GET /organizations/{org}/dependabot/repository-access\"\n ],\n setRepositoryAccessDefaultLevel: [\n \"PUT /organizations/{org}/dependabot/repository-access/default-level\"\n ],\n setSelectedReposForOrgSecret: [\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories\"\n ],\n updateAlert: [\n \"PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\"\n ],\n updateRepositoryAccessForOrg: [\n \"PATCH /organizations/{org}/dependabot/repository-access\"\n ]\n },\n dependencyGraph: {\n createRepositorySnapshot: [\n \"POST /repos/{owner}/{repo}/dependency-graph/snapshots\"\n ],\n diffRange: [\n \"GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}\"\n ],\n exportSbom: [\"GET /repos/{owner}/{repo}/dependency-graph/sbom\"]\n },\n emojis: { get: [\"GET /emojis\"] },\n enterpriseTeamMemberships: {\n add: [\n \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\"\n ],\n bulkAdd: [\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add\"\n ],\n bulkRemove: [\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove\"\n ],\n get: [\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\"\n ],\n list: [\"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\"],\n remove: [\n \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\"\n ]\n },\n enterpriseTeamOrganizations: {\n add: [\n \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\"\n ],\n bulkAdd: [\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add\"\n ],\n bulkRemove: [\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove\"\n ],\n delete: [\n \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\"\n ],\n getAssignment: [\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\"\n ],\n getAssignments: [\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\"\n ]\n },\n enterpriseTeams: {\n create: [\"POST /enterprises/{enterprise}/teams\"],\n delete: [\"DELETE /enterprises/{enterprise}/teams/{team_slug}\"],\n get: [\"GET /enterprises/{enterprise}/teams/{team_slug}\"],\n list: [\"GET /enterprises/{enterprise}/teams\"],\n update: [\"PATCH /enterprises/{enterprise}/teams/{team_slug}\"]\n },\n gists: {\n checkIsStarred: [\"GET /gists/{gist_id}/star\"],\n create: [\"POST /gists\"],\n createComment: [\"POST /gists/{gist_id}/comments\"],\n delete: [\"DELETE /gists/{gist_id}\"],\n deleteComment: [\"DELETE /gists/{gist_id}/comments/{comment_id}\"],\n fork: [\"POST /gists/{gist_id}/forks\"],\n get: [\"GET /gists/{gist_id}\"],\n getComment: [\"GET /gists/{gist_id}/comments/{comment_id}\"],\n getRevision: [\"GET /gists/{gist_id}/{sha}\"],\n list: [\"GET /gists\"],\n listComments: [\"GET /gists/{gist_id}/comments\"],\n listCommits: [\"GET /gists/{gist_id}/commits\"],\n listForUser: [\"GET /users/{username}/gists\"],\n listForks: [\"GET /gists/{gist_id}/forks\"],\n listPublic: [\"GET /gists/public\"],\n listStarred: [\"GET /gists/starred\"],\n star: [\"PUT /gists/{gist_id}/star\"],\n unstar: [\"DELETE /gists/{gist_id}/star\"],\n update: [\"PATCH /gists/{gist_id}\"],\n updateComment: [\"PATCH /gists/{gist_id}/comments/{comment_id}\"]\n },\n git: {\n createBlob: [\"POST /repos/{owner}/{repo}/git/blobs\"],\n createCommit: [\"POST /repos/{owner}/{repo}/git/commits\"],\n createRef: [\"POST /repos/{owner}/{repo}/git/refs\"],\n createTag: [\"POST /repos/{owner}/{repo}/git/tags\"],\n createTree: [\"POST /repos/{owner}/{repo}/git/trees\"],\n deleteRef: [\"DELETE /repos/{owner}/{repo}/git/refs/{ref}\"],\n getBlob: [\"GET /repos/{owner}/{repo}/git/blobs/{file_sha}\"],\n getCommit: [\"GET /repos/{owner}/{repo}/git/commits/{commit_sha}\"],\n getRef: [\"GET /repos/{owner}/{repo}/git/ref/{ref}\"],\n getTag: [\"GET /repos/{owner}/{repo}/git/tags/{tag_sha}\"],\n getTree: [\"GET /repos/{owner}/{repo}/git/trees/{tree_sha}\"],\n listMatchingRefs: [\"GET /repos/{owner}/{repo}/git/matching-refs/{ref}\"],\n updateRef: [\"PATCH /repos/{owner}/{repo}/git/refs/{ref}\"]\n },\n gitignore: {\n getAllTemplates: [\"GET /gitignore/templates\"],\n getTemplate: [\"GET /gitignore/templates/{name}\"]\n },\n hostedCompute: {\n createNetworkConfigurationForOrg: [\n \"POST /orgs/{org}/settings/network-configurations\"\n ],\n deleteNetworkConfigurationFromOrg: [\n \"DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}\"\n ],\n getNetworkConfigurationForOrg: [\n \"GET /orgs/{org}/settings/network-configurations/{network_configuration_id}\"\n ],\n getNetworkSettingsForOrg: [\n \"GET /orgs/{org}/settings/network-settings/{network_settings_id}\"\n ],\n listNetworkConfigurationsForOrg: [\n \"GET /orgs/{org}/settings/network-configurations\"\n ],\n updateNetworkConfigurationForOrg: [\n \"PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}\"\n ]\n },\n interactions: {\n getRestrictionsForAuthenticatedUser: [\"GET /user/interaction-limits\"],\n getRestrictionsForOrg: [\"GET /orgs/{org}/interaction-limits\"],\n getRestrictionsForRepo: [\"GET /repos/{owner}/{repo}/interaction-limits\"],\n getRestrictionsForYourPublicRepos: [\n \"GET /user/interaction-limits\",\n {},\n { renamed: [\"interactions\", \"getRestrictionsForAuthenticatedUser\"] }\n ],\n removeRestrictionsForAuthenticatedUser: [\"DELETE /user/interaction-limits\"],\n removeRestrictionsForOrg: [\"DELETE /orgs/{org}/interaction-limits\"],\n removeRestrictionsForRepo: [\n \"DELETE /repos/{owner}/{repo}/interaction-limits\"\n ],\n removeRestrictionsForYourPublicRepos: [\n \"DELETE /user/interaction-limits\",\n {},\n { renamed: [\"interactions\", \"removeRestrictionsForAuthenticatedUser\"] }\n ],\n setRestrictionsForAuthenticatedUser: [\"PUT /user/interaction-limits\"],\n setRestrictionsForOrg: [\"PUT /orgs/{org}/interaction-limits\"],\n setRestrictionsForRepo: [\"PUT /repos/{owner}/{repo}/interaction-limits\"],\n setRestrictionsForYourPublicRepos: [\n \"PUT /user/interaction-limits\",\n {},\n { renamed: [\"interactions\", \"setRestrictionsForAuthenticatedUser\"] }\n ]\n },\n issues: {\n addAssignees: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\"\n ],\n addBlockedByDependency: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\"\n ],\n addLabels: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n addSubIssue: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\"\n ],\n checkUserCanBeAssigned: [\"GET /repos/{owner}/{repo}/assignees/{assignee}\"],\n checkUserCanBeAssignedToIssue: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}\"\n ],\n create: [\"POST /repos/{owner}/{repo}/issues\"],\n createComment: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\"\n ],\n createLabel: [\"POST /repos/{owner}/{repo}/labels\"],\n createMilestone: [\"POST /repos/{owner}/{repo}/milestones\"],\n deleteComment: [\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\"\n ],\n deleteLabel: [\"DELETE /repos/{owner}/{repo}/labels/{name}\"],\n deleteMilestone: [\n \"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\"\n ],\n get: [\"GET /repos/{owner}/{repo}/issues/{issue_number}\"],\n getComment: [\"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n getEvent: [\"GET /repos/{owner}/{repo}/issues/events/{event_id}\"],\n getLabel: [\"GET /repos/{owner}/{repo}/labels/{name}\"],\n getMilestone: [\"GET /repos/{owner}/{repo}/milestones/{milestone_number}\"],\n getParent: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/parent\"],\n list: [\"GET /issues\"],\n listAssignees: [\"GET /repos/{owner}/{repo}/assignees\"],\n listComments: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\"],\n listCommentsForRepo: [\"GET /repos/{owner}/{repo}/issues/comments\"],\n listDependenciesBlockedBy: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\"\n ],\n listDependenciesBlocking: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\"\n ],\n listEvents: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/events\"],\n listEventsForRepo: [\"GET /repos/{owner}/{repo}/issues/events\"],\n listEventsForTimeline: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\"\n ],\n listForAuthenticatedUser: [\"GET /user/issues\"],\n listForOrg: [\"GET /orgs/{org}/issues\"],\n listForRepo: [\"GET /repos/{owner}/{repo}/issues\"],\n listLabelsForMilestone: [\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\"\n ],\n listLabelsForRepo: [\"GET /repos/{owner}/{repo}/labels\"],\n listLabelsOnIssue: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\"\n ],\n listMilestones: [\"GET /repos/{owner}/{repo}/milestones\"],\n listSubIssues: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\"\n ],\n lock: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n removeAllLabels: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\"\n ],\n removeAssignees: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\"\n ],\n removeDependencyBlockedBy: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}\"\n ],\n removeLabel: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\"\n ],\n removeSubIssue: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue\"\n ],\n reprioritizeSubIssue: [\n \"PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority\"\n ],\n setLabels: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n unlock: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n update: [\"PATCH /repos/{owner}/{repo}/issues/{issue_number}\"],\n updateComment: [\"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n updateLabel: [\"PATCH /repos/{owner}/{repo}/labels/{name}\"],\n updateMilestone: [\n \"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\"\n ]\n },\n licenses: {\n get: [\"GET /licenses/{license}\"],\n getAllCommonlyUsed: [\"GET /licenses\"],\n getForRepo: [\"GET /repos/{owner}/{repo}/license\"]\n },\n markdown: {\n render: [\"POST /markdown\"],\n renderRaw: [\n \"POST /markdown/raw\",\n { headers: { \"content-type\": \"text/plain; charset=utf-8\" } }\n ]\n },\n meta: {\n get: [\"GET /meta\"],\n getAllVersions: [\"GET /versions\"],\n getOctocat: [\"GET /octocat\"],\n getZen: [\"GET /zen\"],\n root: [\"GET /\"]\n },\n migrations: {\n deleteArchiveForAuthenticatedUser: [\n \"DELETE /user/migrations/{migration_id}/archive\"\n ],\n deleteArchiveForOrg: [\n \"DELETE /orgs/{org}/migrations/{migration_id}/archive\"\n ],\n downloadArchiveForOrg: [\n \"GET /orgs/{org}/migrations/{migration_id}/archive\"\n ],\n getArchiveForAuthenticatedUser: [\n \"GET /user/migrations/{migration_id}/archive\"\n ],\n getStatusForAuthenticatedUser: [\"GET /user/migrations/{migration_id}\"],\n getStatusForOrg: [\"GET /orgs/{org}/migrations/{migration_id}\"],\n listForAuthenticatedUser: [\"GET /user/migrations\"],\n listForOrg: [\"GET /orgs/{org}/migrations\"],\n listReposForAuthenticatedUser: [\n \"GET /user/migrations/{migration_id}/repositories\"\n ],\n listReposForOrg: [\"GET /orgs/{org}/migrations/{migration_id}/repositories\"],\n listReposForUser: [\n \"GET /user/migrations/{migration_id}/repositories\",\n {},\n { renamed: [\"migrations\", \"listReposForAuthenticatedUser\"] }\n ],\n startForAuthenticatedUser: [\"POST /user/migrations\"],\n startForOrg: [\"POST /orgs/{org}/migrations\"],\n unlockRepoForAuthenticatedUser: [\n \"DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock\"\n ],\n unlockRepoForOrg: [\n \"DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock\"\n ]\n },\n oidc: {\n getOidcCustomSubTemplateForOrg: [\n \"GET /orgs/{org}/actions/oidc/customization/sub\"\n ],\n updateOidcCustomSubTemplateForOrg: [\n \"PUT /orgs/{org}/actions/oidc/customization/sub\"\n ]\n },\n orgs: {\n addSecurityManagerTeam: [\n \"PUT /orgs/{org}/security-managers/teams/{team_slug}\",\n {},\n {\n deprecated: \"octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team\"\n }\n ],\n assignTeamToOrgRole: [\n \"PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\"\n ],\n assignUserToOrgRole: [\n \"PUT /orgs/{org}/organization-roles/users/{username}/{role_id}\"\n ],\n blockUser: [\"PUT /orgs/{org}/blocks/{username}\"],\n cancelInvitation: [\"DELETE /orgs/{org}/invitations/{invitation_id}\"],\n checkBlockedUser: [\"GET /orgs/{org}/blocks/{username}\"],\n checkMembershipForUser: [\"GET /orgs/{org}/members/{username}\"],\n checkPublicMembershipForUser: [\"GET /orgs/{org}/public_members/{username}\"],\n convertMemberToOutsideCollaborator: [\n \"PUT /orgs/{org}/outside_collaborators/{username}\"\n ],\n createArtifactStorageRecord: [\n \"POST /orgs/{org}/artifacts/metadata/storage-record\"\n ],\n createInvitation: [\"POST /orgs/{org}/invitations\"],\n createIssueType: [\"POST /orgs/{org}/issue-types\"],\n createWebhook: [\"POST /orgs/{org}/hooks\"],\n customPropertiesForOrgsCreateOrUpdateOrganizationValues: [\n \"PATCH /organizations/{org}/org-properties/values\"\n ],\n customPropertiesForOrgsGetOrganizationValues: [\n \"GET /organizations/{org}/org-properties/values\"\n ],\n customPropertiesForReposCreateOrUpdateOrganizationDefinition: [\n \"PUT /orgs/{org}/properties/schema/{custom_property_name}\"\n ],\n customPropertiesForReposCreateOrUpdateOrganizationDefinitions: [\n \"PATCH /orgs/{org}/properties/schema\"\n ],\n customPropertiesForReposCreateOrUpdateOrganizationValues: [\n \"PATCH /orgs/{org}/properties/values\"\n ],\n customPropertiesForReposDeleteOrganizationDefinition: [\n \"DELETE /orgs/{org}/properties/schema/{custom_property_name}\"\n ],\n customPropertiesForReposGetOrganizationDefinition: [\n \"GET /orgs/{org}/properties/schema/{custom_property_name}\"\n ],\n customPropertiesForReposGetOrganizationDefinitions: [\n \"GET /orgs/{org}/properties/schema\"\n ],\n customPropertiesForReposGetOrganizationValues: [\n \"GET /orgs/{org}/properties/values\"\n ],\n delete: [\"DELETE /orgs/{org}\"],\n deleteAttestationsBulk: [\"POST /orgs/{org}/attestations/delete-request\"],\n deleteAttestationsById: [\n \"DELETE /orgs/{org}/attestations/{attestation_id}\"\n ],\n deleteAttestationsBySubjectDigest: [\n \"DELETE /orgs/{org}/attestations/digest/{subject_digest}\"\n ],\n deleteIssueType: [\"DELETE /orgs/{org}/issue-types/{issue_type_id}\"],\n deleteWebhook: [\"DELETE /orgs/{org}/hooks/{hook_id}\"],\n disableSelectedRepositoryImmutableReleasesOrganization: [\n \"DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\"\n ],\n enableSelectedRepositoryImmutableReleasesOrganization: [\n \"PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\"\n ],\n get: [\"GET /orgs/{org}\"],\n getImmutableReleasesSettings: [\n \"GET /orgs/{org}/settings/immutable-releases\"\n ],\n getImmutableReleasesSettingsRepositories: [\n \"GET /orgs/{org}/settings/immutable-releases/repositories\"\n ],\n getMembershipForAuthenticatedUser: [\"GET /user/memberships/orgs/{org}\"],\n getMembershipForUser: [\"GET /orgs/{org}/memberships/{username}\"],\n getOrgRole: [\"GET /orgs/{org}/organization-roles/{role_id}\"],\n getOrgRulesetHistory: [\"GET /orgs/{org}/rulesets/{ruleset_id}/history\"],\n getOrgRulesetVersion: [\n \"GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}\"\n ],\n getWebhook: [\"GET /orgs/{org}/hooks/{hook_id}\"],\n getWebhookConfigForOrg: [\"GET /orgs/{org}/hooks/{hook_id}/config\"],\n getWebhookDelivery: [\n \"GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}\"\n ],\n list: [\"GET /organizations\"],\n listAppInstallations: [\"GET /orgs/{org}/installations\"],\n listArtifactStorageRecords: [\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records\"\n ],\n listAttestationRepositories: [\"GET /orgs/{org}/attestations/repositories\"],\n listAttestations: [\"GET /orgs/{org}/attestations/{subject_digest}\"],\n listAttestationsBulk: [\n \"POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}\"\n ],\n listBlockedUsers: [\"GET /orgs/{org}/blocks\"],\n listFailedInvitations: [\"GET /orgs/{org}/failed_invitations\"],\n listForAuthenticatedUser: [\"GET /user/orgs\"],\n listForUser: [\"GET /users/{username}/orgs\"],\n listInvitationTeams: [\"GET /orgs/{org}/invitations/{invitation_id}/teams\"],\n listIssueTypes: [\"GET /orgs/{org}/issue-types\"],\n listMembers: [\"GET /orgs/{org}/members\"],\n listMembershipsForAuthenticatedUser: [\"GET /user/memberships/orgs\"],\n listOrgRoleTeams: [\"GET /orgs/{org}/organization-roles/{role_id}/teams\"],\n listOrgRoleUsers: [\"GET /orgs/{org}/organization-roles/{role_id}/users\"],\n listOrgRoles: [\"GET /orgs/{org}/organization-roles\"],\n listOrganizationFineGrainedPermissions: [\n \"GET /orgs/{org}/organization-fine-grained-permissions\"\n ],\n listOutsideCollaborators: [\"GET /orgs/{org}/outside_collaborators\"],\n listPatGrantRepositories: [\n \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\"\n ],\n listPatGrantRequestRepositories: [\n \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\"\n ],\n listPatGrantRequests: [\"GET /orgs/{org}/personal-access-token-requests\"],\n listPatGrants: [\"GET /orgs/{org}/personal-access-tokens\"],\n listPendingInvitations: [\"GET /orgs/{org}/invitations\"],\n listPublicMembers: [\"GET /orgs/{org}/public_members\"],\n listSecurityManagerTeams: [\n \"GET /orgs/{org}/security-managers\",\n {},\n {\n deprecated: \"octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams\"\n }\n ],\n listWebhookDeliveries: [\"GET /orgs/{org}/hooks/{hook_id}/deliveries\"],\n listWebhooks: [\"GET /orgs/{org}/hooks\"],\n pingWebhook: [\"POST /orgs/{org}/hooks/{hook_id}/pings\"],\n redeliverWebhookDelivery: [\n \"POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\"\n ],\n removeMember: [\"DELETE /orgs/{org}/members/{username}\"],\n removeMembershipForUser: [\"DELETE /orgs/{org}/memberships/{username}\"],\n removeOutsideCollaborator: [\n \"DELETE /orgs/{org}/outside_collaborators/{username}\"\n ],\n removePublicMembershipForAuthenticatedUser: [\n \"DELETE /orgs/{org}/public_members/{username}\"\n ],\n removeSecurityManagerTeam: [\n \"DELETE /orgs/{org}/security-managers/teams/{team_slug}\",\n {},\n {\n deprecated: \"octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team\"\n }\n ],\n reviewPatGrantRequest: [\n \"POST /orgs/{org}/personal-access-token-requests/{pat_request_id}\"\n ],\n reviewPatGrantRequestsInBulk: [\n \"POST /orgs/{org}/personal-access-token-requests\"\n ],\n revokeAllOrgRolesTeam: [\n \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}\"\n ],\n revokeAllOrgRolesUser: [\n \"DELETE /orgs/{org}/organization-roles/users/{username}\"\n ],\n revokeOrgRoleTeam: [\n \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\"\n ],\n revokeOrgRoleUser: [\n \"DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}\"\n ],\n setImmutableReleasesSettings: [\n \"PUT /orgs/{org}/settings/immutable-releases\"\n ],\n setImmutableReleasesSettingsRepositories: [\n \"PUT /orgs/{org}/settings/immutable-releases/repositories\"\n ],\n setMembershipForUser: [\"PUT /orgs/{org}/memberships/{username}\"],\n setPublicMembershipForAuthenticatedUser: [\n \"PUT /orgs/{org}/public_members/{username}\"\n ],\n unblockUser: [\"DELETE /orgs/{org}/blocks/{username}\"],\n update: [\"PATCH /orgs/{org}\"],\n updateIssueType: [\"PUT /orgs/{org}/issue-types/{issue_type_id}\"],\n updateMembershipForAuthenticatedUser: [\n \"PATCH /user/memberships/orgs/{org}\"\n ],\n updatePatAccess: [\"POST /orgs/{org}/personal-access-tokens/{pat_id}\"],\n updatePatAccesses: [\"POST /orgs/{org}/personal-access-tokens\"],\n updateWebhook: [\"PATCH /orgs/{org}/hooks/{hook_id}\"],\n updateWebhookConfigForOrg: [\"PATCH /orgs/{org}/hooks/{hook_id}/config\"]\n },\n packages: {\n deletePackageForAuthenticatedUser: [\n \"DELETE /user/packages/{package_type}/{package_name}\"\n ],\n deletePackageForOrg: [\n \"DELETE /orgs/{org}/packages/{package_type}/{package_name}\"\n ],\n deletePackageForUser: [\n \"DELETE /users/{username}/packages/{package_type}/{package_name}\"\n ],\n deletePackageVersionForAuthenticatedUser: [\n \"DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n deletePackageVersionForOrg: [\n \"DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n deletePackageVersionForUser: [\n \"DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n getAllPackageVersionsForAPackageOwnedByAnOrg: [\n \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n {},\n { renamed: [\"packages\", \"getAllPackageVersionsForPackageOwnedByOrg\"] }\n ],\n getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [\n \"GET /user/packages/{package_type}/{package_name}/versions\",\n {},\n {\n renamed: [\n \"packages\",\n \"getAllPackageVersionsForPackageOwnedByAuthenticatedUser\"\n ]\n }\n ],\n getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [\n \"GET /user/packages/{package_type}/{package_name}/versions\"\n ],\n getAllPackageVersionsForPackageOwnedByOrg: [\n \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\"\n ],\n getAllPackageVersionsForPackageOwnedByUser: [\n \"GET /users/{username}/packages/{package_type}/{package_name}/versions\"\n ],\n getPackageForAuthenticatedUser: [\n \"GET /user/packages/{package_type}/{package_name}\"\n ],\n getPackageForOrganization: [\n \"GET /orgs/{org}/packages/{package_type}/{package_name}\"\n ],\n getPackageForUser: [\n \"GET /users/{username}/packages/{package_type}/{package_name}\"\n ],\n getPackageVersionForAuthenticatedUser: [\n \"GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n getPackageVersionForOrganization: [\n \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n getPackageVersionForUser: [\n \"GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n listDockerMigrationConflictingPackagesForAuthenticatedUser: [\n \"GET /user/docker/conflicts\"\n ],\n listDockerMigrationConflictingPackagesForOrganization: [\n \"GET /orgs/{org}/docker/conflicts\"\n ],\n listDockerMigrationConflictingPackagesForUser: [\n \"GET /users/{username}/docker/conflicts\"\n ],\n listPackagesForAuthenticatedUser: [\"GET /user/packages\"],\n listPackagesForOrganization: [\"GET /orgs/{org}/packages\"],\n listPackagesForUser: [\"GET /users/{username}/packages\"],\n restorePackageForAuthenticatedUser: [\n \"POST /user/packages/{package_type}/{package_name}/restore{?token}\"\n ],\n restorePackageForOrg: [\n \"POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}\"\n ],\n restorePackageForUser: [\n \"POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}\"\n ],\n restorePackageVersionForAuthenticatedUser: [\n \"POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"\n ],\n restorePackageVersionForOrg: [\n \"POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"\n ],\n restorePackageVersionForUser: [\n \"POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"\n ]\n },\n privateRegistries: {\n createOrgPrivateRegistry: [\"POST /orgs/{org}/private-registries\"],\n deleteOrgPrivateRegistry: [\n \"DELETE /orgs/{org}/private-registries/{secret_name}\"\n ],\n getOrgPrivateRegistry: [\"GET /orgs/{org}/private-registries/{secret_name}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/private-registries/public-key\"],\n listOrgPrivateRegistries: [\"GET /orgs/{org}/private-registries\"],\n updateOrgPrivateRegistry: [\n \"PATCH /orgs/{org}/private-registries/{secret_name}\"\n ]\n },\n projects: {\n addItemForOrg: [\"POST /orgs/{org}/projectsV2/{project_number}/items\"],\n addItemForUser: [\n \"POST /users/{username}/projectsV2/{project_number}/items\"\n ],\n deleteItemForOrg: [\n \"DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}\"\n ],\n deleteItemForUser: [\n \"DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}\"\n ],\n getFieldForOrg: [\n \"GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}\"\n ],\n getFieldForUser: [\n \"GET /users/{username}/projectsV2/{project_number}/fields/{field_id}\"\n ],\n getForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}\"],\n getForUser: [\"GET /users/{username}/projectsV2/{project_number}\"],\n getOrgItem: [\"GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}\"],\n getUserItem: [\n \"GET /users/{username}/projectsV2/{project_number}/items/{item_id}\"\n ],\n listFieldsForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}/fields\"],\n listFieldsForUser: [\n \"GET /users/{username}/projectsV2/{project_number}/fields\"\n ],\n listForOrg: [\"GET /orgs/{org}/projectsV2\"],\n listForUser: [\"GET /users/{username}/projectsV2\"],\n listItemsForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}/items\"],\n listItemsForUser: [\n \"GET /users/{username}/projectsV2/{project_number}/items\"\n ],\n updateItemForOrg: [\n \"PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}\"\n ],\n updateItemForUser: [\n \"PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}\"\n ]\n },\n pulls: {\n checkIfMerged: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n create: [\"POST /repos/{owner}/{repo}/pulls\"],\n createReplyForReviewComment: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\"\n ],\n createReview: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n createReviewComment: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments\"\n ],\n deletePendingReview: [\n \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"\n ],\n deleteReviewComment: [\n \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}\"\n ],\n dismissReview: [\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals\"\n ],\n get: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}\"],\n getReview: [\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"\n ],\n getReviewComment: [\"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}\"],\n list: [\"GET /repos/{owner}/{repo}/pulls\"],\n listCommentsForReview: [\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\"\n ],\n listCommits: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\"],\n listFiles: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\"],\n listRequestedReviewers: [\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"\n ],\n listReviewComments: [\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\"\n ],\n listReviewCommentsForRepo: [\"GET /repos/{owner}/{repo}/pulls/comments\"],\n listReviews: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n merge: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n removeRequestedReviewers: [\n \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"\n ],\n requestReviewers: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"\n ],\n submitReview: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events\"\n ],\n update: [\"PATCH /repos/{owner}/{repo}/pulls/{pull_number}\"],\n updateBranch: [\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch\"\n ],\n updateReview: [\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"\n ],\n updateReviewComment: [\n \"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}\"\n ]\n },\n rateLimit: { get: [\"GET /rate_limit\"] },\n reactions: {\n createForCommitComment: [\n \"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions\"\n ],\n createForIssue: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions\"\n ],\n createForIssueComment: [\n \"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\"\n ],\n createForPullRequestReviewComment: [\n \"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\"\n ],\n createForRelease: [\n \"POST /repos/{owner}/{repo}/releases/{release_id}/reactions\"\n ],\n createForTeamDiscussionCommentInOrg: [\n \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\"\n ],\n createForTeamDiscussionInOrg: [\n \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\"\n ],\n deleteForCommitComment: [\n \"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}\"\n ],\n deleteForIssue: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}\"\n ],\n deleteForIssueComment: [\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}\"\n ],\n deleteForPullRequestComment: [\n \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}\"\n ],\n deleteForRelease: [\n \"DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}\"\n ],\n deleteForTeamDiscussion: [\n \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}\"\n ],\n deleteForTeamDiscussionComment: [\n \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}\"\n ],\n listForCommitComment: [\n \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\"\n ],\n listForIssue: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\"],\n listForIssueComment: [\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\"\n ],\n listForPullRequestReviewComment: [\n \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\"\n ],\n listForRelease: [\n \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\"\n ],\n listForTeamDiscussionCommentInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\"\n ],\n listForTeamDiscussionInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\"\n ]\n },\n repos: {\n acceptInvitation: [\n \"PATCH /user/repository_invitations/{invitation_id}\",\n {},\n { renamed: [\"repos\", \"acceptInvitationForAuthenticatedUser\"] }\n ],\n acceptInvitationForAuthenticatedUser: [\n \"PATCH /user/repository_invitations/{invitation_id}\"\n ],\n addAppAccessRestrictions: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n {},\n { mapToData: \"apps\" }\n ],\n addCollaborator: [\"PUT /repos/{owner}/{repo}/collaborators/{username}\"],\n addStatusCheckContexts: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n {},\n { mapToData: \"contexts\" }\n ],\n addTeamAccessRestrictions: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n {},\n { mapToData: \"teams\" }\n ],\n addUserAccessRestrictions: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n {},\n { mapToData: \"users\" }\n ],\n cancelPagesDeployment: [\n \"POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel\"\n ],\n checkAutomatedSecurityFixes: [\n \"GET /repos/{owner}/{repo}/automated-security-fixes\"\n ],\n checkCollaborator: [\"GET /repos/{owner}/{repo}/collaborators/{username}\"],\n checkImmutableReleases: [\"GET /repos/{owner}/{repo}/immutable-releases\"],\n checkPrivateVulnerabilityReporting: [\n \"GET /repos/{owner}/{repo}/private-vulnerability-reporting\"\n ],\n checkVulnerabilityAlerts: [\n \"GET /repos/{owner}/{repo}/vulnerability-alerts\"\n ],\n codeownersErrors: [\"GET /repos/{owner}/{repo}/codeowners/errors\"],\n compareCommits: [\"GET /repos/{owner}/{repo}/compare/{base}...{head}\"],\n compareCommitsWithBasehead: [\n \"GET /repos/{owner}/{repo}/compare/{basehead}\"\n ],\n createAttestation: [\"POST /repos/{owner}/{repo}/attestations\"],\n createAutolink: [\"POST /repos/{owner}/{repo}/autolinks\"],\n createCommitComment: [\n \"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments\"\n ],\n createCommitSignatureProtection: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"\n ],\n createCommitStatus: [\"POST /repos/{owner}/{repo}/statuses/{sha}\"],\n createDeployKey: [\"POST /repos/{owner}/{repo}/keys\"],\n createDeployment: [\"POST /repos/{owner}/{repo}/deployments\"],\n createDeploymentBranchPolicy: [\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\"\n ],\n createDeploymentProtectionRule: [\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\"\n ],\n createDeploymentStatus: [\n \"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\"\n ],\n createDispatchEvent: [\"POST /repos/{owner}/{repo}/dispatches\"],\n createForAuthenticatedUser: [\"POST /user/repos\"],\n createFork: [\"POST /repos/{owner}/{repo}/forks\"],\n createInOrg: [\"POST /orgs/{org}/repos\"],\n createOrUpdateEnvironment: [\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}\"\n ],\n createOrUpdateFileContents: [\"PUT /repos/{owner}/{repo}/contents/{path}\"],\n createOrgRuleset: [\"POST /orgs/{org}/rulesets\"],\n createPagesDeployment: [\"POST /repos/{owner}/{repo}/pages/deployments\"],\n createPagesSite: [\"POST /repos/{owner}/{repo}/pages\"],\n createRelease: [\"POST /repos/{owner}/{repo}/releases\"],\n createRepoRuleset: [\"POST /repos/{owner}/{repo}/rulesets\"],\n createUsingTemplate: [\n \"POST /repos/{template_owner}/{template_repo}/generate\"\n ],\n createWebhook: [\"POST /repos/{owner}/{repo}/hooks\"],\n customPropertiesForReposCreateOrUpdateRepositoryValues: [\n \"PATCH /repos/{owner}/{repo}/properties/values\"\n ],\n customPropertiesForReposGetRepositoryValues: [\n \"GET /repos/{owner}/{repo}/properties/values\"\n ],\n declineInvitation: [\n \"DELETE /user/repository_invitations/{invitation_id}\",\n {},\n { renamed: [\"repos\", \"declineInvitationForAuthenticatedUser\"] }\n ],\n declineInvitationForAuthenticatedUser: [\n \"DELETE /user/repository_invitations/{invitation_id}\"\n ],\n delete: [\"DELETE /repos/{owner}/{repo}\"],\n deleteAccessRestrictions: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\"\n ],\n deleteAdminBranchProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"\n ],\n deleteAnEnvironment: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}\"\n ],\n deleteAutolink: [\"DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n deleteBranchProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection\"\n ],\n deleteCommitComment: [\"DELETE /repos/{owner}/{repo}/comments/{comment_id}\"],\n deleteCommitSignatureProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"\n ],\n deleteDeployKey: [\"DELETE /repos/{owner}/{repo}/keys/{key_id}\"],\n deleteDeployment: [\n \"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}\"\n ],\n deleteDeploymentBranchPolicy: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\"\n ],\n deleteFile: [\"DELETE /repos/{owner}/{repo}/contents/{path}\"],\n deleteInvitation: [\n \"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}\"\n ],\n deleteOrgRuleset: [\"DELETE /orgs/{org}/rulesets/{ruleset_id}\"],\n deletePagesSite: [\"DELETE /repos/{owner}/{repo}/pages\"],\n deletePullRequestReviewProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"\n ],\n deleteRelease: [\"DELETE /repos/{owner}/{repo}/releases/{release_id}\"],\n deleteReleaseAsset: [\n \"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}\"\n ],\n deleteRepoRuleset: [\"DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n deleteWebhook: [\"DELETE /repos/{owner}/{repo}/hooks/{hook_id}\"],\n disableAutomatedSecurityFixes: [\n \"DELETE /repos/{owner}/{repo}/automated-security-fixes\"\n ],\n disableDeploymentProtectionRule: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\"\n ],\n disableImmutableReleases: [\n \"DELETE /repos/{owner}/{repo}/immutable-releases\"\n ],\n disablePrivateVulnerabilityReporting: [\n \"DELETE /repos/{owner}/{repo}/private-vulnerability-reporting\"\n ],\n disableVulnerabilityAlerts: [\n \"DELETE /repos/{owner}/{repo}/vulnerability-alerts\"\n ],\n downloadArchive: [\n \"GET /repos/{owner}/{repo}/zipball/{ref}\",\n {},\n { renamed: [\"repos\", \"downloadZipballArchive\"] }\n ],\n downloadTarballArchive: [\"GET /repos/{owner}/{repo}/tarball/{ref}\"],\n downloadZipballArchive: [\"GET /repos/{owner}/{repo}/zipball/{ref}\"],\n enableAutomatedSecurityFixes: [\n \"PUT /repos/{owner}/{repo}/automated-security-fixes\"\n ],\n enableImmutableReleases: [\"PUT /repos/{owner}/{repo}/immutable-releases\"],\n enablePrivateVulnerabilityReporting: [\n \"PUT /repos/{owner}/{repo}/private-vulnerability-reporting\"\n ],\n enableVulnerabilityAlerts: [\n \"PUT /repos/{owner}/{repo}/vulnerability-alerts\"\n ],\n generateReleaseNotes: [\n \"POST /repos/{owner}/{repo}/releases/generate-notes\"\n ],\n get: [\"GET /repos/{owner}/{repo}\"],\n getAccessRestrictions: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\"\n ],\n getAdminBranchProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"\n ],\n getAllDeploymentProtectionRules: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\"\n ],\n getAllEnvironments: [\"GET /repos/{owner}/{repo}/environments\"],\n getAllStatusCheckContexts: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\"\n ],\n getAllTopics: [\"GET /repos/{owner}/{repo}/topics\"],\n getAppsWithAccessToProtectedBranch: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\"\n ],\n getAutolink: [\"GET /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n getBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}\"],\n getBranchProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection\"\n ],\n getBranchRules: [\"GET /repos/{owner}/{repo}/rules/branches/{branch}\"],\n getClones: [\"GET /repos/{owner}/{repo}/traffic/clones\"],\n getCodeFrequencyStats: [\"GET /repos/{owner}/{repo}/stats/code_frequency\"],\n getCollaboratorPermissionLevel: [\n \"GET /repos/{owner}/{repo}/collaborators/{username}/permission\"\n ],\n getCombinedStatusForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/status\"],\n getCommit: [\"GET /repos/{owner}/{repo}/commits/{ref}\"],\n getCommitActivityStats: [\"GET /repos/{owner}/{repo}/stats/commit_activity\"],\n getCommitComment: [\"GET /repos/{owner}/{repo}/comments/{comment_id}\"],\n getCommitSignatureProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"\n ],\n getCommunityProfileMetrics: [\"GET /repos/{owner}/{repo}/community/profile\"],\n getContent: [\"GET /repos/{owner}/{repo}/contents/{path}\"],\n getContributorsStats: [\"GET /repos/{owner}/{repo}/stats/contributors\"],\n getCustomDeploymentProtectionRule: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\"\n ],\n getDeployKey: [\"GET /repos/{owner}/{repo}/keys/{key_id}\"],\n getDeployment: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}\"],\n getDeploymentBranchPolicy: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\"\n ],\n getDeploymentStatus: [\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}\"\n ],\n getEnvironment: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}\"\n ],\n getLatestPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/latest\"],\n getLatestRelease: [\"GET /repos/{owner}/{repo}/releases/latest\"],\n getOrgRuleSuite: [\"GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}\"],\n getOrgRuleSuites: [\"GET /orgs/{org}/rulesets/rule-suites\"],\n getOrgRuleset: [\"GET /orgs/{org}/rulesets/{ruleset_id}\"],\n getOrgRulesets: [\"GET /orgs/{org}/rulesets\"],\n getPages: [\"GET /repos/{owner}/{repo}/pages\"],\n getPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/{build_id}\"],\n getPagesDeployment: [\n \"GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}\"\n ],\n getPagesHealthCheck: [\"GET /repos/{owner}/{repo}/pages/health\"],\n getParticipationStats: [\"GET /repos/{owner}/{repo}/stats/participation\"],\n getPullRequestReviewProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"\n ],\n getPunchCardStats: [\"GET /repos/{owner}/{repo}/stats/punch_card\"],\n getReadme: [\"GET /repos/{owner}/{repo}/readme\"],\n getReadmeInDirectory: [\"GET /repos/{owner}/{repo}/readme/{dir}\"],\n getRelease: [\"GET /repos/{owner}/{repo}/releases/{release_id}\"],\n getReleaseAsset: [\"GET /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n getReleaseByTag: [\"GET /repos/{owner}/{repo}/releases/tags/{tag}\"],\n getRepoRuleSuite: [\n \"GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}\"\n ],\n getRepoRuleSuites: [\"GET /repos/{owner}/{repo}/rulesets/rule-suites\"],\n getRepoRuleset: [\"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n getRepoRulesetHistory: [\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\"\n ],\n getRepoRulesetVersion: [\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}\"\n ],\n getRepoRulesets: [\"GET /repos/{owner}/{repo}/rulesets\"],\n getStatusChecksProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"\n ],\n getTeamsWithAccessToProtectedBranch: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\"\n ],\n getTopPaths: [\"GET /repos/{owner}/{repo}/traffic/popular/paths\"],\n getTopReferrers: [\"GET /repos/{owner}/{repo}/traffic/popular/referrers\"],\n getUsersWithAccessToProtectedBranch: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\"\n ],\n getViews: [\"GET /repos/{owner}/{repo}/traffic/views\"],\n getWebhook: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}\"],\n getWebhookConfigForRepo: [\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/config\"\n ],\n getWebhookDelivery: [\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}\"\n ],\n listActivities: [\"GET /repos/{owner}/{repo}/activity\"],\n listAttestations: [\n \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\"\n ],\n listAutolinks: [\"GET /repos/{owner}/{repo}/autolinks\"],\n listBranches: [\"GET /repos/{owner}/{repo}/branches\"],\n listBranchesForHeadCommit: [\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head\"\n ],\n listCollaborators: [\"GET /repos/{owner}/{repo}/collaborators\"],\n listCommentsForCommit: [\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\"\n ],\n listCommitCommentsForRepo: [\"GET /repos/{owner}/{repo}/comments\"],\n listCommitStatusesForRef: [\n \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\"\n ],\n listCommits: [\"GET /repos/{owner}/{repo}/commits\"],\n listContributors: [\"GET /repos/{owner}/{repo}/contributors\"],\n listCustomDeploymentRuleIntegrations: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\"\n ],\n listDeployKeys: [\"GET /repos/{owner}/{repo}/keys\"],\n listDeploymentBranchPolicies: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\"\n ],\n listDeploymentStatuses: [\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\"\n ],\n listDeployments: [\"GET /repos/{owner}/{repo}/deployments\"],\n listForAuthenticatedUser: [\"GET /user/repos\"],\n listForOrg: [\"GET /orgs/{org}/repos\"],\n listForUser: [\"GET /users/{username}/repos\"],\n listForks: [\"GET /repos/{owner}/{repo}/forks\"],\n listInvitations: [\"GET /repos/{owner}/{repo}/invitations\"],\n listInvitationsForAuthenticatedUser: [\"GET /user/repository_invitations\"],\n listLanguages: [\"GET /repos/{owner}/{repo}/languages\"],\n listPagesBuilds: [\"GET /repos/{owner}/{repo}/pages/builds\"],\n listPublic: [\"GET /repositories\"],\n listPullRequestsAssociatedWithCommit: [\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\"\n ],\n listReleaseAssets: [\n \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\"\n ],\n listReleases: [\"GET /repos/{owner}/{repo}/releases\"],\n listTags: [\"GET /repos/{owner}/{repo}/tags\"],\n listTeams: [\"GET /repos/{owner}/{repo}/teams\"],\n listWebhookDeliveries: [\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\"\n ],\n listWebhooks: [\"GET /repos/{owner}/{repo}/hooks\"],\n merge: [\"POST /repos/{owner}/{repo}/merges\"],\n mergeUpstream: [\"POST /repos/{owner}/{repo}/merge-upstream\"],\n pingWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/pings\"],\n redeliverWebhookDelivery: [\n \"POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\"\n ],\n removeAppAccessRestrictions: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n {},\n { mapToData: \"apps\" }\n ],\n removeCollaborator: [\n \"DELETE /repos/{owner}/{repo}/collaborators/{username}\"\n ],\n removeStatusCheckContexts: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n {},\n { mapToData: \"contexts\" }\n ],\n removeStatusCheckProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"\n ],\n removeTeamAccessRestrictions: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n {},\n { mapToData: \"teams\" }\n ],\n removeUserAccessRestrictions: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n {},\n { mapToData: \"users\" }\n ],\n renameBranch: [\"POST /repos/{owner}/{repo}/branches/{branch}/rename\"],\n replaceAllTopics: [\"PUT /repos/{owner}/{repo}/topics\"],\n requestPagesBuild: [\"POST /repos/{owner}/{repo}/pages/builds\"],\n setAdminBranchProtection: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"\n ],\n setAppAccessRestrictions: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n {},\n { mapToData: \"apps\" }\n ],\n setStatusCheckContexts: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n {},\n { mapToData: \"contexts\" }\n ],\n setTeamAccessRestrictions: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n {},\n { mapToData: \"teams\" }\n ],\n setUserAccessRestrictions: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n {},\n { mapToData: \"users\" }\n ],\n testPushWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/tests\"],\n transfer: [\"POST /repos/{owner}/{repo}/transfer\"],\n update: [\"PATCH /repos/{owner}/{repo}\"],\n updateBranchProtection: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection\"\n ],\n updateCommitComment: [\"PATCH /repos/{owner}/{repo}/comments/{comment_id}\"],\n updateDeploymentBranchPolicy: [\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\"\n ],\n updateInformationAboutPagesSite: [\"PUT /repos/{owner}/{repo}/pages\"],\n updateInvitation: [\n \"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}\"\n ],\n updateOrgRuleset: [\"PUT /orgs/{org}/rulesets/{ruleset_id}\"],\n updatePullRequestReviewProtection: [\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"\n ],\n updateRelease: [\"PATCH /repos/{owner}/{repo}/releases/{release_id}\"],\n updateReleaseAsset: [\n \"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}\"\n ],\n updateRepoRuleset: [\"PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n updateStatusCheckPotection: [\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n {},\n { renamed: [\"repos\", \"updateStatusCheckProtection\"] }\n ],\n updateStatusCheckProtection: [\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"\n ],\n updateWebhook: [\"PATCH /repos/{owner}/{repo}/hooks/{hook_id}\"],\n updateWebhookConfigForRepo: [\n \"PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config\"\n ],\n uploadReleaseAsset: [\n \"POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}\",\n { baseUrl: \"https://uploads.github.com\" }\n ]\n },\n search: {\n code: [\"GET /search/code\"],\n commits: [\"GET /search/commits\"],\n issuesAndPullRequests: [\"GET /search/issues\"],\n labels: [\"GET /search/labels\"],\n repos: [\"GET /search/repositories\"],\n topics: [\"GET /search/topics\"],\n users: [\"GET /search/users\"]\n },\n secretScanning: {\n createPushProtectionBypass: [\n \"POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses\"\n ],\n getAlert: [\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\"\n ],\n getScanHistory: [\"GET /repos/{owner}/{repo}/secret-scanning/scan-history\"],\n listAlertsForOrg: [\"GET /orgs/{org}/secret-scanning/alerts\"],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/secret-scanning/alerts\"],\n listLocationsForAlert: [\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\"\n ],\n listOrgPatternConfigs: [\n \"GET /orgs/{org}/secret-scanning/pattern-configurations\"\n ],\n updateAlert: [\n \"PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\"\n ],\n updateOrgPatternConfigs: [\n \"PATCH /orgs/{org}/secret-scanning/pattern-configurations\"\n ]\n },\n securityAdvisories: {\n createFork: [\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks\"\n ],\n createPrivateVulnerabilityReport: [\n \"POST /repos/{owner}/{repo}/security-advisories/reports\"\n ],\n createRepositoryAdvisory: [\n \"POST /repos/{owner}/{repo}/security-advisories\"\n ],\n createRepositoryAdvisoryCveRequest: [\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve\"\n ],\n getGlobalAdvisory: [\"GET /advisories/{ghsa_id}\"],\n getRepositoryAdvisory: [\n \"GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}\"\n ],\n listGlobalAdvisories: [\"GET /advisories\"],\n listOrgRepositoryAdvisories: [\"GET /orgs/{org}/security-advisories\"],\n listRepositoryAdvisories: [\"GET /repos/{owner}/{repo}/security-advisories\"],\n updateRepositoryAdvisory: [\n \"PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}\"\n ]\n },\n teams: {\n addOrUpdateMembershipForUserInOrg: [\n \"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}\"\n ],\n addOrUpdateRepoPermissionsInOrg: [\n \"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"\n ],\n checkPermissionsForRepoInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"\n ],\n create: [\"POST /orgs/{org}/teams\"],\n createDiscussionCommentInOrg: [\n \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\"\n ],\n createDiscussionInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions\"],\n deleteDiscussionCommentInOrg: [\n \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"\n ],\n deleteDiscussionInOrg: [\n \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"\n ],\n deleteInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}\"],\n getByName: [\"GET /orgs/{org}/teams/{team_slug}\"],\n getDiscussionCommentInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"\n ],\n getDiscussionInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"\n ],\n getMembershipForUserInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/memberships/{username}\"\n ],\n list: [\"GET /orgs/{org}/teams\"],\n listChildInOrg: [\"GET /orgs/{org}/teams/{team_slug}/teams\"],\n listDiscussionCommentsInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\"\n ],\n listDiscussionsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions\"],\n listForAuthenticatedUser: [\"GET /user/teams\"],\n listMembersInOrg: [\"GET /orgs/{org}/teams/{team_slug}/members\"],\n listPendingInvitationsInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/invitations\"\n ],\n listReposInOrg: [\"GET /orgs/{org}/teams/{team_slug}/repos\"],\n removeMembershipForUserInOrg: [\n \"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}\"\n ],\n removeRepoInOrg: [\n \"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"\n ],\n updateDiscussionCommentInOrg: [\n \"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"\n ],\n updateDiscussionInOrg: [\n \"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"\n ],\n updateInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}\"]\n },\n users: {\n addEmailForAuthenticated: [\n \"POST /user/emails\",\n {},\n { renamed: [\"users\", \"addEmailForAuthenticatedUser\"] }\n ],\n addEmailForAuthenticatedUser: [\"POST /user/emails\"],\n addSocialAccountForAuthenticatedUser: [\"POST /user/social_accounts\"],\n block: [\"PUT /user/blocks/{username}\"],\n checkBlocked: [\"GET /user/blocks/{username}\"],\n checkFollowingForUser: [\"GET /users/{username}/following/{target_user}\"],\n checkPersonIsFollowedByAuthenticated: [\"GET /user/following/{username}\"],\n createGpgKeyForAuthenticated: [\n \"POST /user/gpg_keys\",\n {},\n { renamed: [\"users\", \"createGpgKeyForAuthenticatedUser\"] }\n ],\n createGpgKeyForAuthenticatedUser: [\"POST /user/gpg_keys\"],\n createPublicSshKeyForAuthenticated: [\n \"POST /user/keys\",\n {},\n { renamed: [\"users\", \"createPublicSshKeyForAuthenticatedUser\"] }\n ],\n createPublicSshKeyForAuthenticatedUser: [\"POST /user/keys\"],\n createSshSigningKeyForAuthenticatedUser: [\"POST /user/ssh_signing_keys\"],\n deleteAttestationsBulk: [\n \"POST /users/{username}/attestations/delete-request\"\n ],\n deleteAttestationsById: [\n \"DELETE /users/{username}/attestations/{attestation_id}\"\n ],\n deleteAttestationsBySubjectDigest: [\n \"DELETE /users/{username}/attestations/digest/{subject_digest}\"\n ],\n deleteEmailForAuthenticated: [\n \"DELETE /user/emails\",\n {},\n { renamed: [\"users\", \"deleteEmailForAuthenticatedUser\"] }\n ],\n deleteEmailForAuthenticatedUser: [\"DELETE /user/emails\"],\n deleteGpgKeyForAuthenticated: [\n \"DELETE /user/gpg_keys/{gpg_key_id}\",\n {},\n { renamed: [\"users\", \"deleteGpgKeyForAuthenticatedUser\"] }\n ],\n deleteGpgKeyForAuthenticatedUser: [\"DELETE /user/gpg_keys/{gpg_key_id}\"],\n deletePublicSshKeyForAuthenticated: [\n \"DELETE /user/keys/{key_id}\",\n {},\n { renamed: [\"users\", \"deletePublicSshKeyForAuthenticatedUser\"] }\n ],\n deletePublicSshKeyForAuthenticatedUser: [\"DELETE /user/keys/{key_id}\"],\n deleteSocialAccountForAuthenticatedUser: [\"DELETE /user/social_accounts\"],\n deleteSshSigningKeyForAuthenticatedUser: [\n \"DELETE /user/ssh_signing_keys/{ssh_signing_key_id}\"\n ],\n follow: [\"PUT /user/following/{username}\"],\n getAuthenticated: [\"GET /user\"],\n getById: [\"GET /user/{account_id}\"],\n getByUsername: [\"GET /users/{username}\"],\n getContextForUser: [\"GET /users/{username}/hovercard\"],\n getGpgKeyForAuthenticated: [\n \"GET /user/gpg_keys/{gpg_key_id}\",\n {},\n { renamed: [\"users\", \"getGpgKeyForAuthenticatedUser\"] }\n ],\n getGpgKeyForAuthenticatedUser: [\"GET /user/gpg_keys/{gpg_key_id}\"],\n getPublicSshKeyForAuthenticated: [\n \"GET /user/keys/{key_id}\",\n {},\n { renamed: [\"users\", \"getPublicSshKeyForAuthenticatedUser\"] }\n ],\n getPublicSshKeyForAuthenticatedUser: [\"GET /user/keys/{key_id}\"],\n getSshSigningKeyForAuthenticatedUser: [\n \"GET /user/ssh_signing_keys/{ssh_signing_key_id}\"\n ],\n list: [\"GET /users\"],\n listAttestations: [\"GET /users/{username}/attestations/{subject_digest}\"],\n listAttestationsBulk: [\n \"POST /users/{username}/attestations/bulk-list{?per_page,before,after}\"\n ],\n listBlockedByAuthenticated: [\n \"GET /user/blocks\",\n {},\n { renamed: [\"users\", \"listBlockedByAuthenticatedUser\"] }\n ],\n listBlockedByAuthenticatedUser: [\"GET /user/blocks\"],\n listEmailsForAuthenticated: [\n \"GET /user/emails\",\n {},\n { renamed: [\"users\", \"listEmailsForAuthenticatedUser\"] }\n ],\n listEmailsForAuthenticatedUser: [\"GET /user/emails\"],\n listFollowedByAuthenticated: [\n \"GET /user/following\",\n {},\n { renamed: [\"users\", \"listFollowedByAuthenticatedUser\"] }\n ],\n listFollowedByAuthenticatedUser: [\"GET /user/following\"],\n listFollowersForAuthenticatedUser: [\"GET /user/followers\"],\n listFollowersForUser: [\"GET /users/{username}/followers\"],\n listFollowingForUser: [\"GET /users/{username}/following\"],\n listGpgKeysForAuthenticated: [\n \"GET /user/gpg_keys\",\n {},\n { renamed: [\"users\", \"listGpgKeysForAuthenticatedUser\"] }\n ],\n listGpgKeysForAuthenticatedUser: [\"GET /user/gpg_keys\"],\n listGpgKeysForUser: [\"GET /users/{username}/gpg_keys\"],\n listPublicEmailsForAuthenticated: [\n \"GET /user/public_emails\",\n {},\n { renamed: [\"users\", \"listPublicEmailsForAuthenticatedUser\"] }\n ],\n listPublicEmailsForAuthenticatedUser: [\"GET /user/public_emails\"],\n listPublicKeysForUser: [\"GET /users/{username}/keys\"],\n listPublicSshKeysForAuthenticated: [\n \"GET /user/keys\",\n {},\n { renamed: [\"users\", \"listPublicSshKeysForAuthenticatedUser\"] }\n ],\n listPublicSshKeysForAuthenticatedUser: [\"GET /user/keys\"],\n listSocialAccountsForAuthenticatedUser: [\"GET /user/social_accounts\"],\n listSocialAccountsForUser: [\"GET /users/{username}/social_accounts\"],\n listSshSigningKeysForAuthenticatedUser: [\"GET /user/ssh_signing_keys\"],\n listSshSigningKeysForUser: [\"GET /users/{username}/ssh_signing_keys\"],\n setPrimaryEmailVisibilityForAuthenticated: [\n \"PATCH /user/email/visibility\",\n {},\n { renamed: [\"users\", \"setPrimaryEmailVisibilityForAuthenticatedUser\"] }\n ],\n setPrimaryEmailVisibilityForAuthenticatedUser: [\n \"PATCH /user/email/visibility\"\n ],\n unblock: [\"DELETE /user/blocks/{username}\"],\n unfollow: [\"DELETE /user/following/{username}\"],\n updateAuthenticated: [\"PATCH /user\"]\n }\n};\nvar endpoints_default = Endpoints;\nexport {\n endpoints_default as default\n};\n//# sourceMappingURL=endpoints.js.map\n","import ENDPOINTS from \"./generated/endpoints.js\";\nconst endpointMethodsMap = /* @__PURE__ */ new Map();\nfor (const [scope, endpoints] of Object.entries(ENDPOINTS)) {\n for (const [methodName, endpoint] of Object.entries(endpoints)) {\n const [route, defaults, decorations] = endpoint;\n const [method, url] = route.split(/ /);\n const endpointDefaults = Object.assign(\n {\n method,\n url\n },\n defaults\n );\n if (!endpointMethodsMap.has(scope)) {\n endpointMethodsMap.set(scope, /* @__PURE__ */ new Map());\n }\n endpointMethodsMap.get(scope).set(methodName, {\n scope,\n methodName,\n endpointDefaults,\n decorations\n });\n }\n}\nconst handler = {\n has({ scope }, methodName) {\n return endpointMethodsMap.get(scope).has(methodName);\n },\n getOwnPropertyDescriptor(target, methodName) {\n return {\n value: this.get(target, methodName),\n // ensures method is in the cache\n configurable: true,\n writable: true,\n enumerable: true\n };\n },\n defineProperty(target, methodName, descriptor) {\n Object.defineProperty(target.cache, methodName, descriptor);\n return true;\n },\n deleteProperty(target, methodName) {\n delete target.cache[methodName];\n return true;\n },\n ownKeys({ scope }) {\n return [...endpointMethodsMap.get(scope).keys()];\n },\n set(target, methodName, value) {\n return target.cache[methodName] = value;\n },\n get({ octokit, scope, cache }, methodName) {\n if (cache[methodName]) {\n return cache[methodName];\n }\n const method = endpointMethodsMap.get(scope).get(methodName);\n if (!method) {\n return void 0;\n }\n const { endpointDefaults, decorations } = method;\n if (decorations) {\n cache[methodName] = decorate(\n octokit,\n scope,\n methodName,\n endpointDefaults,\n decorations\n );\n } else {\n cache[methodName] = octokit.request.defaults(endpointDefaults);\n }\n return cache[methodName];\n }\n};\nfunction endpointsToMethods(octokit) {\n const newMethods = {};\n for (const scope of endpointMethodsMap.keys()) {\n newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler);\n }\n return newMethods;\n}\nfunction decorate(octokit, scope, methodName, defaults, decorations) {\n const requestWithDefaults = octokit.request.defaults(defaults);\n function withDecorations(...args) {\n let options = requestWithDefaults.endpoint.merge(...args);\n if (decorations.mapToData) {\n options = Object.assign({}, options, {\n data: options[decorations.mapToData],\n [decorations.mapToData]: void 0\n });\n return requestWithDefaults(options);\n }\n if (decorations.renamed) {\n const [newScope, newMethodName] = decorations.renamed;\n octokit.log.warn(\n `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`\n );\n }\n if (decorations.deprecated) {\n octokit.log.warn(decorations.deprecated);\n }\n if (decorations.renamedParameters) {\n const options2 = requestWithDefaults.endpoint.merge(...args);\n for (const [name, alias] of Object.entries(\n decorations.renamedParameters\n )) {\n if (name in options2) {\n octokit.log.warn(\n `\"${name}\" parameter is deprecated for \"octokit.${scope}.${methodName}()\". Use \"${alias}\" instead`\n );\n if (!(alias in options2)) {\n options2[alias] = options2[name];\n }\n delete options2[name];\n }\n }\n return requestWithDefaults(options2);\n }\n return requestWithDefaults(...args);\n }\n return Object.assign(withDecorations, requestWithDefaults);\n}\nexport {\n endpointsToMethods\n};\n//# sourceMappingURL=endpoints-to-methods.js.map\n","import { VERSION } from \"./version.js\";\nimport { endpointsToMethods } from \"./endpoints-to-methods.js\";\nfunction restEndpointMethods(octokit) {\n const api = endpointsToMethods(octokit);\n return {\n rest: api\n };\n}\nrestEndpointMethods.VERSION = VERSION;\nfunction legacyRestEndpointMethods(octokit) {\n const api = endpointsToMethods(octokit);\n return {\n ...api,\n rest: api\n };\n}\nlegacyRestEndpointMethods.VERSION = VERSION;\nexport {\n legacyRestEndpointMethods,\n restEndpointMethods\n};\n//# sourceMappingURL=index.js.map\n","const VERSION = \"22.0.1\";\nexport {\n VERSION\n};\n","import { Octokit as Core } from \"@octokit/core\";\nimport { requestLog } from \"@octokit/plugin-request-log\";\nimport {\n paginateRest\n} from \"@octokit/plugin-paginate-rest\";\nimport { legacyRestEndpointMethods } from \"@octokit/plugin-rest-endpoint-methods\";\nimport { VERSION } from \"./version.js\";\nconst Octokit = Core.plugin(requestLog, legacyRestEndpointMethods, paginateRest).defaults(\n {\n userAgent: `octokit-rest.js/${VERSION}`\n }\n);\nexport {\n Octokit\n};\n","import { spawn, exec } from 'child_process';\nimport util from 'util';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport * as semver from 'semver';\n\n/**\n * Minimal logging interface that git-tools requires.\n * Allows consumers to provide their own logger implementation (e.g., Winston, console, etc.)\n */ function _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n/**\n * Default console-based logger implementation\n */ class ConsoleLogger {\n shouldLog(level) {\n const levels = [\n 'error',\n 'warn',\n 'info',\n 'verbose',\n 'debug'\n ];\n const currentLevelIndex = levels.indexOf(this.level);\n const messageLevelIndex = levels.indexOf(level);\n return messageLevelIndex <= currentLevelIndex;\n }\n error(message, ...meta) {\n if (this.shouldLog('error')) {\n // eslint-disable-next-line no-console\n console.error(message, ...meta);\n }\n }\n warn(message, ...meta) {\n if (this.shouldLog('warn')) {\n // eslint-disable-next-line no-console\n console.warn(message, ...meta);\n }\n }\n info(message, ...meta) {\n if (this.shouldLog('info')) {\n // eslint-disable-next-line no-console\n console.info(message, ...meta);\n }\n }\n verbose(message, ...meta) {\n if (this.shouldLog('verbose')) {\n // eslint-disable-next-line no-console\n console.log('[VERBOSE]', message, ...meta);\n }\n }\n debug(message, ...meta) {\n if (this.shouldLog('debug')) {\n // eslint-disable-next-line no-console\n console.log('[DEBUG]', message, ...meta);\n }\n }\n constructor(level = 'info'){\n _define_property(this, \"level\", void 0);\n this.level = level;\n }\n}\n/**\n * Global logger instance - defaults to console logger\n * Use setLogger() to replace with your own implementation\n */ let globalLogger = new ConsoleLogger();\n/**\n * Set the global logger instance\n */ function setLogger(logger) {\n globalLogger = logger;\n}\n/**\n * Get the global logger instance\n */ function getLogger() {\n return globalLogger;\n}\n\n/**\n * Escapes shell arguments to prevent command injection\n */ function escapeShellArg(arg) {\n // For Windows, we need different escaping\n if (process.platform === 'win32') {\n // Escape double quotes and backslashes\n return `\"${arg.replace(/[\\\\\"]/g, '\\\\$&')}\"`;\n } else {\n // For Unix-like systems, escape single quotes\n return `'${arg.replace(/'/g, \"'\\\\''\")}'`;\n }\n}\n/**\n * Validates git references to prevent injection\n */ function validateGitRef(ref) {\n // Git refs can contain letters, numbers, hyphens, underscores, slashes, and dots\n // But cannot contain certain dangerous characters\n const validRefPattern = /^[a-zA-Z0-9._/-]+$/;\n const invalidPatterns = [\n /\\.\\./,\n /^-/,\n /[\\s;<>|&`$(){}[\\]]/ // No shell metacharacters\n ];\n if (!validRefPattern.test(ref)) {\n return false;\n }\n return !invalidPatterns.some((pattern)=>pattern.test(ref));\n}\n/**\n * Validates file paths to prevent injection\n */ function validateFilePath(filePath) {\n // Basic validation - no shell metacharacters\n const invalidChars = /[;<>|&`$(){}[\\]]/;\n return !invalidChars.test(filePath);\n}\n/**\n * Securely executes a command with arguments array (no shell injection risk)\n */ async function runSecure(command, args = [], options = {}) {\n const logger = getLogger();\n // Extract our custom option and pass the rest to spawn\n const { suppressErrorLogging = false, ...spawnOptions } = options || {};\n logger.debug(`runSecure: command=\"${command}\" args=[${args.join(', ')}] suppressErrorLogging=${suppressErrorLogging}`);\n return new Promise((resolve, reject)=>{\n logger.verbose(`Executing command securely: ${command} ${args.join(' ')}`);\n logger.verbose(`Working directory: ${(spawnOptions === null || spawnOptions === void 0 ? void 0 : spawnOptions.cwd) || process.cwd()}`);\n const child = spawn(command, args, {\n ...spawnOptions,\n shell: false,\n stdio: 'pipe'\n });\n let stdout = '';\n let stderr = '';\n if (child.stdout) {\n child.stdout.on('data', (data)=>{\n stdout += data.toString();\n });\n }\n if (child.stderr) {\n child.stderr.on('data', (data)=>{\n stderr += data.toString();\n });\n }\n child.on('close', (code)=>{\n if (code === 0) {\n logger.verbose(`Command completed successfully`);\n logger.verbose(`stdout: ${stdout}`);\n if (stderr) {\n logger.verbose(`stderr: ${stderr}`);\n }\n resolve({\n stdout,\n stderr\n });\n } else {\n if (!suppressErrorLogging) {\n logger.error(`Command failed with exit code ${code}`);\n logger.error(`stdout: ${stdout}`);\n logger.error(`stderr: ${stderr}`);\n }\n reject(new Error(`Command \"${[\n command,\n ...args\n ].join(' ')}\" failed with exit code ${code}`));\n }\n });\n child.on('error', (error)=>{\n if (!suppressErrorLogging) {\n logger.error(`Command failed to start: ${error.message}`);\n }\n reject(error);\n });\n });\n}\n/**\n * Securely executes a command with inherited stdio (no shell injection risk)\n */ async function runSecureWithInheritedStdio(command, args = [], options = {}) {\n const logger = getLogger();\n return new Promise((resolve, reject)=>{\n logger.verbose(`Executing command securely with inherited stdio: ${command} ${args.join(' ')}`);\n logger.verbose(`Working directory: ${(options === null || options === void 0 ? void 0 : options.cwd) || process.cwd()}`);\n const child = spawn(command, args, {\n ...options,\n shell: false,\n stdio: 'inherit'\n });\n child.on('close', (code)=>{\n if (code === 0) {\n logger.verbose(`Command completed successfully with code ${code}`);\n resolve();\n } else {\n logger.error(`Command failed with exit code ${code}`);\n reject(new Error(`Command \"${[\n command,\n ...args\n ].join(' ')}\" failed with exit code ${code}`));\n }\n });\n child.on('error', (error)=>{\n logger.error(`Command failed to start: ${error.message}`);\n reject(error);\n });\n });\n}\nasync function run(command, options = {}) {\n const logger = getLogger();\n const execPromise = util.promisify(exec);\n // Extract our custom option and pass the rest to exec\n const { suppressErrorLogging = false, ...execOptions } = options || {};\n // Ensure encoding is set to 'utf8' to get string output instead of Buffer\n const finalOptions = {\n encoding: 'utf8',\n ...execOptions\n };\n logger.debug(`run: command=\"${command}\" suppressErrorLogging=${suppressErrorLogging}`);\n logger.verbose(`Executing command: ${command}`);\n logger.verbose(`Working directory: ${(finalOptions === null || finalOptions === void 0 ? void 0 : finalOptions.cwd) || process.cwd()}`);\n logger.verbose(`Environment variables: ${Object.keys((finalOptions === null || finalOptions === void 0 ? void 0 : finalOptions.env) || process.env).length} variables`);\n try {\n const result = await execPromise(command, finalOptions);\n logger.verbose(`Command completed successfully`);\n logger.verbose(`stdout: ${result.stdout}`);\n if (result.stderr) {\n logger.verbose(`stderr: ${result.stderr}`);\n }\n // Ensure result is properly typed as strings\n return {\n stdout: String(result.stdout),\n stderr: String(result.stderr)\n };\n } catch (error) {\n if (!suppressErrorLogging) {\n logger.error(`Command failed: ${command}`);\n logger.error(`Error: ${error.message}`);\n logger.error(`Exit code: ${error.code}`);\n logger.error(`Signal: ${error.signal}`);\n if (error.stdout) {\n logger.error(`stdout: ${error.stdout}`);\n }\n if (error.stderr) {\n logger.error(`stderr: ${error.stderr}`);\n }\n } else {\n // Still log at debug level for troubleshooting\n logger.debug(`Command failed (suppressed): ${command} | Error: ${error.message}`);\n }\n throw error;\n }\n}\n/**\n * @deprecated Use runSecureWithInheritedStdio instead for better security\n * Legacy function for backward compatibility - parses shell command string\n */ async function runWithInheritedStdio(command, options = {}) {\n // Parse command to extract command and arguments safely\n const parts = command.trim().split(/\\s+/);\n if (parts.length === 0) {\n throw new Error('Empty command provided');\n }\n const cmd = parts[0];\n const args = parts.slice(1);\n // Use the secure version\n return runSecureWithInheritedStdio(cmd, args, options);\n}\nasync function runWithDryRunSupport(command, isDryRun, options = {}, useInheritedStdio = false) {\n const logger = getLogger();\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute command: ${command}`);\n return {\n stdout: '',\n stderr: ''\n };\n }\n if (useInheritedStdio) {\n await runWithInheritedStdio(command, options);\n return {\n stdout: '',\n stderr: ''\n }; // No output captured when using inherited stdio\n }\n return run(command, options);\n}\n/**\n * Secure version of runWithDryRunSupport using argument arrays\n */ async function runSecureWithDryRunSupport(command, args = [], isDryRun, options = {}, useInheritedStdio = false) {\n const logger = getLogger();\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute command: ${command} ${args.join(' ')}`);\n return {\n stdout: '',\n stderr: ''\n };\n }\n if (useInheritedStdio) {\n await runSecureWithInheritedStdio(command, args, options);\n return {\n stdout: '',\n stderr: ''\n }; // No output captured when using inherited stdio\n }\n return runSecure(command, args, options);\n}\n\n/**\n * Runtime validation utilities for safe type handling\n */ /**\n * Safely parses JSON with error handling\n */ const safeJsonParse = (jsonString, context)=>{\n try {\n const parsed = JSON.parse(jsonString);\n if (parsed === null || parsed === undefined) {\n throw new Error('Parsed JSON is null or undefined');\n }\n return parsed;\n } catch (error) {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Failed to parse JSON${contextStr}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n};\n/**\n * Validates that a value is a non-empty string\n */ const validateString = (value, fieldName)=>{\n if (typeof value !== 'string') {\n throw new Error(`${fieldName} must be a string, got ${typeof value}`);\n }\n if (value.trim() === '') {\n throw new Error(`${fieldName} cannot be empty`);\n }\n return value;\n};\n/**\n * Validates that a value exists and has a specific property\n */ const validateHasProperty = (obj, property, context)=>{\n if (!obj || typeof obj !== 'object') {\n const contextStr = context ? ` in ${context}` : '';\n throw new Error(`Object is null or not an object${contextStr}`);\n }\n if (!(property in obj)) {\n const contextStr = context ? ` in ${context}` : '';\n throw new Error(`Missing required property '${property}'${contextStr}`);\n }\n};\n/**\n * Validates package.json structure has basic required fields\n */ const validatePackageJson = (data, context, requireName = true)=>{\n if (!data || typeof data !== 'object') {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Invalid package.json${contextStr}: not an object`);\n }\n if (requireName && typeof data.name !== 'string') {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Invalid package.json${contextStr}: name must be a string`);\n }\n return data;\n};\n\n/**\n * Validates that a git remote name is safe (prevents option injection).\n * Git remote names must not start with '-' and should match /^[A-Za-z0-9._\\/-]+$/\n */ function isValidGitRemoteName(remote) {\n // Disallow starting dash, spaces, and only allow common git remote name characters.\n // See: https://git-scm.com/docs/git-remote#_remotes\n return typeof remote === 'string' && remote.length > 0 && !remote.startsWith('-') && /^[A-Za-z0-9._/-]+$/.test(remote);\n}\n/**\n * Validates that a git branch name is safe to pass as a command-line argument.\n * Branch names must not start with '-' and should match /^[A-Za-z0-9._\\/-]+$/\n * This prevents option injection such as '--upload-pack=...'.\n */ function isValidGitBranchName(branchName) {\n return typeof branchName === 'string' && branchName.length > 0 && !branchName.startsWith('-') && /^[A-Za-z0-9._/-]+$/.test(branchName);\n}\n/**\n * Tests if a git reference exists and is valid (silent version that doesn't log errors)\n */ const isValidGitRefSilent = async (ref)=>{\n try {\n // Validate the ref first to prevent injection\n if (!validateGitRef(ref)) {\n return false;\n }\n await runSecure('git', [\n 'rev-parse',\n '--verify',\n ref\n ], {\n stdio: 'ignore',\n suppressErrorLogging: true\n });\n return true;\n } catch {\n return false;\n }\n};\n/**\n * Tests if a git reference exists and is valid\n */ const isValidGitRef = async (ref)=>{\n const logger = getLogger();\n try {\n // Validate the ref first to prevent injection\n if (!validateGitRef(ref)) {\n logger.debug(`Git reference '${ref}' contains invalid characters`);\n return false;\n }\n await runSecure('git', [\n 'rev-parse',\n '--verify',\n ref\n ], {\n stdio: 'ignore'\n });\n logger.debug(`Git reference '${ref}' is valid`);\n return true;\n } catch (error) {\n logger.debug(`Git reference '${ref}' is not valid: ${error}`);\n return false;\n }\n};\n/**\n * Finds the previous release tag based on the current version using semantic versioning.\n * Returns the highest version tag that is less than the current version.\n *\n * @param currentVersion The current version (e.g., \"1.2.3\", \"2.0.0\")\n * @param tagPattern The pattern to match tags (e.g., \"v*\", \"working/v*\")\n * @returns The previous release tag or null if none found\n */ const findPreviousReleaseTag = async (currentVersion, tagPattern = 'v*')=>{\n const logger = getLogger();\n try {\n // Parse current version first to validate it\n const currentSemver = semver.parse(currentVersion);\n if (!currentSemver) {\n logger.warn(`â Invalid version format: ${currentVersion}`);\n return null;\n }\n logger.info(`đ findPreviousReleaseTag: Looking for tags matching \"${tagPattern}\" < ${currentVersion}`);\n // Get all tags - try sorted first, fallback to unsorted\n let tags;\n try {\n logger.info(` Running: git tag -l \"${tagPattern}\" --sort=-version:refname`);\n const { stdout } = await runSecure('git', [\n 'tag',\n '-l',\n tagPattern,\n '--sort=-version:refname'\n ]);\n tags = stdout.trim().split('\\n').filter((tag)=>tag.length > 0);\n logger.info(` â
Found ${tags.length} tags matching pattern \"${tagPattern}\"`);\n if (tags.length > 0) {\n logger.info(` đ Tags (newest first): ${tags.slice(0, 15).join(', ')}${tags.length > 15 ? ` ... (${tags.length - 15} more)` : ''}`);\n }\n } catch (sortError) {\n // Fallback for older git versions that don't support --sort\n logger.info(` â ī¸ Git tag --sort failed: ${sortError.message}`);\n logger.info(` Falling back to manual sorting...`);\n const { stdout } = await runSecure('git', [\n 'tag',\n '-l',\n tagPattern\n ]);\n tags = stdout.trim().split('\\n').filter((tag)=>tag.length > 0);\n logger.info(` Found ${tags.length} tags (unsorted) matching pattern \"${tagPattern}\"`);\n // Manual semantic version sorting\n tags.sort((a, b)=>{\n const aMatch = a.match(/v?(\\d+\\.\\d+\\.\\d+.*?)$/);\n const bMatch = b.match(/v?(\\d+\\.\\d+\\.\\d+.*?)$/);\n if (!aMatch || !bMatch) return 0;\n const aSemver = semver.parse(aMatch[1]);\n const bSemver = semver.parse(bMatch[1]);\n if (!aSemver || !bSemver) return 0;\n return semver.rcompare(aSemver, bSemver);\n });\n logger.info(` â
Sorted ${tags.length} tags manually`);\n }\n if (tags.length === 0) {\n logger.warn('');\n logger.warn(`â NO TAGS FOUND matching pattern \"${tagPattern}\"`);\n logger.warn(` To verify, run: git tag -l '${tagPattern}'`);\n logger.warn('');\n return null;\n }\n logger.info(` đŦ Processing ${tags.length} tags to find the highest version < ${currentVersion}...`);\n // Find the highest version that is less than the current version\n let previousTag = null;\n let previousVersion = null;\n let validTags = 0;\n let skippedTags = 0;\n for (const tag of tags){\n // Extract version from tag - handle \"v1.2.13\", \"1.2.13\", and \"working/v1.2.13\"\n const versionMatch = tag.match(/v?(\\d+\\.\\d+\\.\\d+.*?)$/);\n if (!versionMatch) {\n logger.debug(` âī¸ Skipping tag \"${tag}\" (doesn't match version pattern)`);\n continue;\n }\n const versionString = versionMatch[1];\n const tagSemver = semver.parse(versionString);\n if (tagSemver) {\n validTags++;\n // Check if this tag version is less than current version\n if (semver.lt(tagSemver, currentSemver)) {\n // If we don't have a previous version yet, or this one is higher than our current previous\n if (!previousVersion || semver.gt(tagSemver, previousVersion)) {\n previousVersion = tagSemver;\n previousTag = tag; // Keep the original tag format\n logger.info(` â
New best candidate: ${tag} (${versionString} < ${currentVersion})`);\n } else {\n logger.debug(` âī¸ ${tag} (${versionString}) is < current but not better than ${previousTag}`);\n }\n } else {\n skippedTags++;\n logger.debug(` âī¸ ${tag} (${versionString}) >= current (${currentVersion}), skipping`);\n }\n }\n }\n logger.info('');\n logger.info(` đ Tag analysis results:`);\n logger.info(` - Total tags examined: ${tags.length}`);\n logger.info(` - Valid semver tags: ${validTags}`);\n logger.info(` - Tags >= current version (skipped): ${skippedTags}`);\n logger.info(` - Best match: ${previousTag || 'none'}`);\n logger.info('');\n if (previousTag) {\n logger.info(`â
SUCCESS: Found previous tag: ${previousTag}`);\n logger.info(` Version comparison: ${previousVersion === null || previousVersion === void 0 ? void 0 : previousVersion.version} < ${currentVersion}`);\n logger.info('');\n return previousTag;\n }\n logger.warn(`â FAILED: No previous tag found for version ${currentVersion}`);\n logger.warn(` Pattern searched: \"${tagPattern}\"`);\n logger.warn(` Reason: All ${validTags} valid tags were >= ${currentVersion}`);\n logger.warn('');\n return null;\n } catch (error) {\n logger.debug(`Error finding previous release tag: ${error.message}`);\n return null;\n }\n};\n/**\n * Gets the current version from package.json\n *\n * @returns The current version string or null if not found\n */ const getCurrentVersion = async ()=>{\n const logger = getLogger();\n try {\n // First try to get from committed version in HEAD\n const { stdout } = await runSecure('git', [\n 'show',\n 'HEAD:package.json'\n ]);\n const packageJson = safeJsonParse(stdout, 'package.json');\n const validated = validatePackageJson(packageJson, 'package.json');\n if (validated.version) {\n logger.debug(`Current version from HEAD:package.json: ${validated.version}`);\n return validated.version;\n }\n return null;\n } catch (error) {\n logger.debug(`Could not read version from HEAD:package.json: ${error.message}`);\n // Fallback to reading from working directory\n try {\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n const content = await fs.readFile(packageJsonPath, 'utf-8');\n const packageJson = safeJsonParse(content, 'package.json');\n const validated = validatePackageJson(packageJson, 'package.json');\n if (validated.version) {\n logger.debug(`Current version from working directory package.json: ${validated.version}`);\n return validated.version;\n }\n return null;\n } catch (fallbackError) {\n logger.debug(`Error reading current version from filesystem: ${fallbackError.message}`);\n return null;\n }\n }\n};\n/**\n * Gets a reliable default for the --from parameter by trying multiple fallbacks\n *\n * Tries in order:\n * 1. Previous working branch tag (if on working branch)\n * 2. Previous release tag (if current version can be determined)\n * 3. main (local main branch - typical release comparison base)\n * 4. master (local master branch - legacy default)\n * 5. origin/main (remote main branch fallback)\n * 6. origin/master (remote master branch fallback)\n *\n * @param forceMainBranch If true, skip tag detection and use main branch\n * @param currentBranch Current branch name for branch-aware tag detection\n * @returns A valid git reference to use as the default from parameter\n * @throws Error if no valid reference can be found\n */ const getDefaultFromRef = async (forceMainBranch = false, currentBranch)=>{\n const logger = getLogger();\n logger.info('');\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n logger.info('đ DETECTING DEFAULT --from REFERENCE FOR RELEASE NOTES');\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n logger.info(`đ Input parameters:`);\n logger.info(` - forceMainBranch: ${forceMainBranch}`);\n logger.info(` - currentBranch: \"${currentBranch}\"`);\n logger.info('');\n // If forced to use main branch, skip tag detection\n if (forceMainBranch) {\n logger.info('⥠Forced to use main branch, skipping tag detection');\n } else {\n // If on working branch, look for working branch tags first\n logger.info(`đ¯ Branch check: currentBranch=\"${currentBranch}\", isWorking=${currentBranch === 'working'}`);\n if (currentBranch && currentBranch === 'working') {\n logger.info('');\n logger.info('đ DETECTED WORKING BRANCH - Searching for working branch tags...');\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n try {\n const currentVersion = await getCurrentVersion();\n logger.info(`đĻ Current version from package.json: ${currentVersion}`);\n if (currentVersion) {\n logger.info(`đ Searching for tags matching pattern: \"working/v*\"`);\n logger.info(` (Looking for tags < ${currentVersion})`);\n logger.info('');\n const previousTag = await findPreviousReleaseTag(currentVersion, 'working/v*');\n logger.info(`đ¯ findPreviousReleaseTag result: ${previousTag || 'null (no tag found)'}`);\n if (previousTag) {\n logger.info(`đŦ Validating tag reference: \"${previousTag}\"`);\n const isValid = await isValidGitRef(previousTag);\n logger.info(` Tag is valid git ref: ${isValid}`);\n if (isValid) {\n logger.info('');\n logger.info(`â
SUCCESS: Using previous working branch tag '${previousTag}'`);\n logger.info(` This shows commits added since the last release`);\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n logger.info('');\n return previousTag;\n } else {\n logger.warn('');\n logger.warn(`â ī¸ VALIDATION FAILED: Tag \"${previousTag}\" exists but is not a valid git reference`);\n logger.warn(` This should not happen - the tag might be corrupted`);\n }\n } else {\n logger.warn('');\n logger.warn('â NO WORKING BRANCH TAG FOUND matching pattern \"working/v*\"');\n logger.warn(` Current version: ${currentVersion}`);\n logger.warn(' đĄ To create working branch tags for past releases, run:');\n logger.warn(' kodrdriv development --create-retroactive-tags');\n logger.warn('');\n logger.warn(' Falling back to regular tag search...');\n }\n } else {\n logger.warn('');\n logger.warn('â CANNOT READ VERSION from package.json');\n logger.warn(' Cannot search for working branch tags without current version');\n }\n } catch (error) {\n logger.warn('');\n logger.warn(`â ERROR while searching for working branch tag: ${error.message}`);\n logger.debug(`Full error stack: ${error.stack}`);\n logger.warn(' Falling back to regular tag search...');\n }\n logger.info('âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ');\n logger.info('');\n } else {\n logger.info(`âšī¸ Not on \"working\" branch - skipping working tag search`);\n logger.info(` (Only search for working/v* tags when on working branch)`);\n logger.info('');\n }\n // First, try to find the previous release tag\n try {\n const currentVersion = await getCurrentVersion();\n if (currentVersion) {\n const previousTag = await findPreviousReleaseTag(currentVersion);\n if (previousTag && await isValidGitRef(previousTag)) {\n logger.info(`Using previous release tag '${previousTag}' as default --from reference`);\n return previousTag;\n }\n }\n } catch (error) {\n logger.debug(`Could not determine previous release tag: ${error.message}`);\n }\n }\n // Fallback to branch-based references\n const candidates = [\n 'main',\n 'master',\n 'origin/main',\n 'origin/master'\n ];\n for (const candidate of candidates){\n logger.debug(`Testing git reference candidate: ${candidate}`);\n if (await isValidGitRef(candidate)) {\n if (forceMainBranch) {\n logger.info(`Using '${candidate}' as forced main branch reference`);\n } else {\n logger.info(`Using '${candidate}' as fallback --from reference (no previous release tag found)`);\n }\n return candidate;\n }\n }\n // If we get here, something is seriously wrong with the git repository\n throw new Error('Could not find a valid default git reference for --from parameter. ' + 'Please specify --from explicitly or check your git repository configuration. ' + `Tried: ${forceMainBranch ? 'main branch only' : 'previous release tag'}, ${candidates.join(', ')}`);\n};\n/**\n * Gets the default branch name from the remote repository\n */ const getRemoteDefaultBranch = async (cwd)=>{\n const logger = getLogger();\n try {\n // Try to get the symbolic reference for origin/HEAD\n const { stdout } = await run('git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null || echo \"\"', {\n cwd,\n suppressErrorLogging: true\n });\n if (stdout.trim()) {\n // Extract branch name from refs/remotes/origin/branch-name\n const match = stdout.trim().match(/refs\\/remotes\\/origin\\/(.+)$/);\n if (match) {\n const branchName = match[1];\n logger.debug(`Remote default branch is: ${branchName}`);\n return branchName;\n }\n }\n // Fallback: try to get it from ls-remote\n const { stdout: lsRemoteOutput } = await run('git ls-remote --symref origin HEAD', {\n cwd,\n suppressErrorLogging: true\n });\n const symrefMatch = lsRemoteOutput.match(/ref: refs\\/heads\\/(.+)\\s+HEAD/);\n if (symrefMatch) {\n const branchName = symrefMatch[1];\n logger.debug(`Remote default branch from ls-remote: ${branchName}`);\n return branchName;\n }\n logger.debug('Could not determine remote default branch');\n return null;\n } catch (error) {\n logger.debug(`Failed to get remote default branch: ${error}`);\n return null;\n }\n};\n/**\n * Checks if a directory is a git repository\n * @param cwd Directory to check\n * @returns true if directory is a git repository\n */ const isGitRepository = async (cwd)=>{\n try {\n await run('git rev-parse --is-inside-work-tree', {\n cwd,\n suppressErrorLogging: true\n });\n return true;\n } catch {\n return false;\n }\n};\n/**\n * Checks if a local branch exists\n */ const localBranchExists = async (branchName)=>{\n const logger = getLogger();\n const result = await isValidGitRefSilent(`refs/heads/${branchName}`);\n if (result) {\n logger.debug(`Local branch '${branchName}' exists`);\n } else {\n logger.debug(`Local branch '${branchName}' does not exist`);\n }\n return result;\n};\n/**\n * Checks if a remote branch exists\n */ const remoteBranchExists = async (branchName, remote = 'origin')=>{\n const logger = getLogger();\n const result = await isValidGitRefSilent(`refs/remotes/${remote}/${branchName}`);\n if (result) {\n logger.debug(`Remote branch '${remote}/${branchName}' exists`);\n } else {\n logger.debug(`Remote branch '${remote}/${branchName}' does not exist`);\n }\n return result;\n};\n/**\n * Gets the commit SHA for a given branch (local or remote)\n */ const getBranchCommitSha = async (branchRef)=>{\n // Validate the ref first to prevent injection\n if (!validateGitRef(branchRef)) {\n throw new Error(`Invalid git reference: ${branchRef}`);\n }\n const { stdout } = await runSecure('git', [\n 'rev-parse',\n branchRef\n ]);\n return stdout.trim();\n};\n/**\n * Checks if a local branch is in sync with its remote counterpart\n */ const isBranchInSyncWithRemote = async (branchName, remote = 'origin')=>{\n const logger = getLogger();\n try {\n // Validate inputs first to prevent injection\n if (!validateGitRef(branchName)) {\n throw new Error(`Invalid branch name: ${branchName}`);\n }\n if (!validateGitRef(remote)) {\n throw new Error(`Invalid remote name: ${remote}`);\n }\n // First, fetch latest remote refs without affecting working directory\n await runSecure('git', [\n 'fetch',\n remote,\n '--quiet'\n ]);\n const localExists = await localBranchExists(branchName);\n const remoteExists = await remoteBranchExists(branchName, remote);\n if (!localExists) {\n return {\n inSync: false,\n localExists: false,\n remoteExists,\n error: `Local branch '${branchName}' does not exist`\n };\n }\n if (!remoteExists) {\n return {\n inSync: false,\n localExists: true,\n remoteExists: false,\n error: `Remote branch '${remote}/${branchName}' does not exist`\n };\n }\n // Both branches exist, compare their SHAs\n const localSha = await getBranchCommitSha(`refs/heads/${branchName}`);\n const remoteSha = await getBranchCommitSha(`refs/remotes/${remote}/${branchName}`);\n const inSync = localSha === remoteSha;\n logger.debug(`Branch sync check for '${branchName}': local=${localSha.substring(0, 8)}, remote=${remoteSha.substring(0, 8)}, inSync=${inSync}`);\n return {\n inSync,\n localSha,\n remoteSha,\n localExists: true,\n remoteExists: true\n };\n } catch (error) {\n logger.debug(`Failed to check branch sync for '${branchName}': ${error.message}`);\n return {\n inSync: false,\n localExists: false,\n remoteExists: false,\n error: `Failed to check branch sync: ${error.message}`\n };\n }\n};\n/**\n * Attempts to safely sync a local branch with its remote counterpart\n * Returns true if successful, false if conflicts exist that require manual resolution\n */ const safeSyncBranchWithRemote = async (branchName, remote = 'origin')=>{\n const logger = getLogger();\n // Validate the remote parameter to prevent command injection\n if (!isValidGitRemoteName(remote)) {\n return {\n success: false,\n error: `Invalid remote name: '${remote}'`\n };\n }\n // Validate the branch name to prevent option injection (e.g., '--upload-pack=...')\n if (!isValidGitBranchName(branchName)) {\n return {\n success: false,\n error: `Invalid branch name: '${branchName}'`\n };\n }\n try {\n // Validate inputs first to prevent injection\n if (!validateGitRef(branchName)) {\n throw new Error(`Invalid branch name: ${branchName}`);\n }\n if (!validateGitRef(remote)) {\n throw new Error(`Invalid remote name: ${remote}`);\n }\n // Explicitly disallow remotes that look like command-line options (e.g. \"--upload-pack\")\n if (remote.startsWith('-')) {\n throw new Error(`Disallowed remote name (cannot start with '-'): ${remote}`);\n }\n // Check current branch to restore later if needed\n const { stdout: currentBranch } = await runSecure('git', [\n 'branch',\n '--show-current'\n ]);\n const originalBranch = currentBranch.trim();\n // Fetch latest remote refs\n await runSecure('git', [\n 'fetch',\n remote,\n '--quiet'\n ]);\n // Check if local branch exists\n const localExists = await localBranchExists(branchName);\n const remoteExists = await remoteBranchExists(branchName, remote);\n if (!remoteExists) {\n return {\n success: false,\n error: `Remote branch '${remote}/${branchName}' does not exist`\n };\n }\n if (!localExists) {\n // Create local branch tracking the remote\n await runSecure('git', [\n 'branch',\n branchName,\n `${remote}/${branchName}`\n ]);\n logger.debug(`Created local branch '${branchName}' tracking '${remote}/${branchName}'`);\n return {\n success: true\n };\n }\n // Check if we need to switch to the target branch\n const needToSwitch = originalBranch !== branchName;\n if (needToSwitch) {\n // Check for uncommitted changes before switching\n const { stdout: statusOutput } = await runSecure('git', [\n 'status',\n '--porcelain'\n ]);\n if (statusOutput.trim()) {\n return {\n success: false,\n error: `Cannot switch to branch '${branchName}' because you have uncommitted changes. Please commit or stash your changes first.`\n };\n }\n // Switch to target branch\n await runSecure('git', [\n 'checkout',\n branchName\n ]);\n }\n try {\n // Try to pull with fast-forward only\n await runSecure('git', [\n 'pull',\n remote,\n branchName,\n '--ff-only'\n ]);\n logger.debug(`Successfully synced '${branchName}' with '${remote}/${branchName}'`);\n // Switch back to original branch if we switched\n if (needToSwitch && originalBranch) {\n await runSecure('git', [\n 'checkout',\n originalBranch\n ]);\n }\n return {\n success: true\n };\n } catch (pullError) {\n // Switch back to original branch if we switched\n if (needToSwitch && originalBranch) {\n try {\n await runSecure('git', [\n 'checkout',\n originalBranch\n ]);\n } catch (checkoutError) {\n logger.warn(`Failed to switch back to original branch '${originalBranch}': ${checkoutError}`);\n }\n }\n // Check if this is a merge conflict or diverged branches\n if (pullError.message.includes('diverged') || pullError.message.includes('non-fast-forward') || pullError.message.includes('conflict') || pullError.message.includes('CONFLICT')) {\n return {\n success: false,\n conflictResolutionRequired: true,\n error: `Branch '${branchName}' has diverged from '${remote}/${branchName}' and requires manual conflict resolution`\n };\n }\n return {\n success: false,\n error: `Failed to sync branch '${branchName}': ${pullError.message}`\n };\n }\n } catch (error) {\n return {\n success: false,\n error: `Failed to sync branch '${branchName}': ${error.message}`\n };\n }\n};\n/**\n * Gets the current branch name\n */ const getCurrentBranch = async ()=>{\n const { stdout } = await runSecure('git', [\n 'branch',\n '--show-current'\n ]);\n return stdout.trim();\n};\n/**\n * Gets git status summary including unstaged files, uncommitted changes, and unpushed commits\n */ const getGitStatusSummary = async (workingDir)=>{\n const logger = getLogger();\n try {\n const originalCwd = process.cwd();\n if (workingDir) {\n process.chdir(workingDir);\n }\n try {\n // Get current branch\n const branch = await getCurrentBranch();\n // Get git status for unstaged and uncommitted changes\n const { stdout: statusOutput } = await runSecure('git', [\n 'status',\n '--porcelain'\n ]);\n const statusLines = statusOutput.trim().split('\\n').filter((line)=>line.trim());\n // Count different types of changes\n let unstagedCount = 0;\n let uncommittedCount = 0;\n for (const line of statusLines){\n const statusCode = line.substring(0, 2);\n // For untracked files (??) count as unstaged only once\n if (statusCode === '??') {\n unstagedCount++;\n continue;\n }\n // Check for unstaged changes (working directory changes)\n // Second character represents working tree status\n if (statusCode[1] !== ' ' && statusCode[1] !== '') {\n unstagedCount++;\n }\n // Check for uncommitted changes (staged changes)\n // First character represents index status\n if (statusCode[0] !== ' ' && statusCode[0] !== '') {\n uncommittedCount++;\n }\n }\n // Check for unpushed commits by comparing with remote\n let unpushedCount = 0;\n let hasUnpushedCommits = false;\n try {\n // First fetch to get latest remote refs\n await runSecure('git', [\n 'fetch',\n 'origin',\n '--quiet'\n ]);\n // Check if remote branch exists\n const remoteExists = await remoteBranchExists(branch);\n if (remoteExists) {\n // Get count of commits ahead of remote (branch already validated in calling function)\n const { stdout: aheadOutput } = await runSecure('git', [\n 'rev-list',\n '--count',\n `origin/${branch}..HEAD`\n ]);\n unpushedCount = parseInt(aheadOutput.trim()) || 0;\n hasUnpushedCommits = unpushedCount > 0;\n }\n } catch (error) {\n logger.debug(`Could not check for unpushed commits: ${error}`);\n // Remote might not exist or other issues - not critical for status\n }\n const hasUnstagedFiles = unstagedCount > 0;\n const hasUncommittedChanges = uncommittedCount > 0;\n // Build status summary\n const statusParts = [];\n if (hasUnstagedFiles) {\n statusParts.push(`${unstagedCount} unstaged`);\n }\n if (hasUncommittedChanges) {\n statusParts.push(`${uncommittedCount} uncommitted`);\n }\n if (hasUnpushedCommits) {\n statusParts.push(`${unpushedCount} unpushed`);\n }\n const status = statusParts.length > 0 ? statusParts.join(', ') : 'clean';\n return {\n branch,\n hasUnstagedFiles,\n hasUncommittedChanges,\n hasUnpushedCommits,\n unstagedCount,\n uncommittedCount,\n unpushedCount,\n status\n };\n } finally{\n if (workingDir) {\n process.chdir(originalCwd);\n }\n }\n } catch (error) {\n logger.debug(`Failed to get git status summary: ${error.message}`);\n return {\n branch: 'unknown',\n hasUnstagedFiles: false,\n hasUncommittedChanges: false,\n hasUnpushedCommits: false,\n unstagedCount: 0,\n uncommittedCount: 0,\n unpushedCount: 0,\n status: 'error'\n };\n }\n};\n/**\n * Gets the list of globally linked packages (packages available to be linked to)\n */ const getGloballyLinkedPackages = async ()=>{\n const execPromise = util.promisify(exec);\n try {\n const { stdout } = await execPromise('npm ls --link -g --json');\n const result = safeJsonParse(stdout, 'npm ls global output');\n if (result.dependencies && typeof result.dependencies === 'object') {\n return new Set(Object.keys(result.dependencies));\n }\n return new Set();\n } catch (error) {\n // Try to parse from error stdout if available\n if (error.stdout) {\n try {\n const result = safeJsonParse(error.stdout, 'npm ls global error output');\n if (result.dependencies && typeof result.dependencies === 'object') {\n return new Set(Object.keys(result.dependencies));\n }\n } catch {\n // If JSON parsing fails, return empty set\n }\n }\n return new Set();\n }\n};\n/**\n * Gets the list of packages that this package is actively linking to (consuming linked packages)\n */ const getLinkedDependencies = async (packageDir)=>{\n const execPromise = util.promisify(exec);\n try {\n const { stdout } = await execPromise('npm ls --link --json', {\n cwd: packageDir\n });\n const result = safeJsonParse(stdout, 'npm ls local output');\n if (result.dependencies && typeof result.dependencies === 'object') {\n return new Set(Object.keys(result.dependencies));\n }\n return new Set();\n } catch (error) {\n // npm ls --link often exits with non-zero code but still provides valid JSON in stdout\n if (error.stdout) {\n try {\n const result = safeJsonParse(error.stdout, 'npm ls local error output');\n if (result.dependencies && typeof result.dependencies === 'object') {\n return new Set(Object.keys(result.dependencies));\n }\n } catch {\n // If JSON parsing fails, return empty set\n }\n }\n return new Set();\n }\n};\n/**\n * Checks for actual semantic version compatibility issues between linked packages and their consumers\n * Returns a set of dependency names that have real compatibility problems\n *\n * This function ignores npm's strict prerelease handling and focuses on actual compatibility:\n * - \"^4.4\" is compatible with \"4.4.53-dev.0\" (prerelease of compatible minor version)\n * - \"^4.4\" is incompatible with \"4.5.3\" (different minor version)\n */ const getLinkCompatibilityProblems = async (packageDir, allPackagesInfo)=>{\n try {\n // Read the consumer package.json\n const packageJsonPath = path.join(packageDir, 'package.json');\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');\n const parsed = safeJsonParse(packageJsonContent, packageJsonPath);\n const packageJson = validatePackageJson(parsed, packageJsonPath);\n const problemDependencies = new Set();\n // Get linked dependencies\n const linkedDeps = await getLinkedDependencies(packageDir);\n // Check each dependency type\n const dependencyTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies'\n ];\n for (const depType of dependencyTypes){\n const deps = packageJson[depType];\n if (!deps || typeof deps !== 'object') continue;\n for (const [depName, versionRange] of Object.entries(deps)){\n // Only check dependencies that are currently linked\n if (!linkedDeps.has(depName)) continue;\n // Skip if version range is not a string or is invalid\n if (typeof versionRange !== 'string') continue;\n try {\n let linkedVersion;\n // If we have package info provided, use it\n if (allPackagesInfo) {\n const packageInfo = allPackagesInfo.get(depName);\n if (packageInfo) {\n linkedVersion = packageInfo.version;\n }\n }\n // If we don't have version from package info, try to read it from the linked package\n if (!linkedVersion) {\n try {\n // Get the linked package path and read its version\n const nodeModulesPath = path.join(packageDir, 'node_modules', depName, 'package.json');\n const linkedPackageJson = await fs.readFile(nodeModulesPath, 'utf-8');\n const linkedParsed = safeJsonParse(linkedPackageJson, nodeModulesPath);\n const linkedValidated = validatePackageJson(linkedParsed, nodeModulesPath);\n linkedVersion = linkedValidated.version;\n } catch {\n continue;\n }\n }\n if (!linkedVersion) continue;\n // Check compatibility with custom logic for prerelease versions\n if (!isVersionCompatibleWithRange(linkedVersion, versionRange)) {\n problemDependencies.add(depName);\n }\n } catch {\n continue;\n }\n }\n }\n return problemDependencies;\n } catch {\n // If we can't read the package.json or process it, return empty set\n return new Set();\n }\n};\n/**\n * Custom semver compatibility check that handles prerelease versions more intelligently\n * than npm's strict checking, with stricter caret range handling\n *\n * Examples:\n * - isVersionCompatibleWithRange(\"4.4.53-dev.0\", \"^4.4\") => true\n * - isVersionCompatibleWithRange(\"4.5.3\", \"^4.4\") => false\n * - isVersionCompatibleWithRange(\"4.4.1\", \"^4.4\") => true\n */ const isVersionCompatibleWithRange = (version, range)=>{\n try {\n const parsedVersion = semver.parse(version);\n if (!parsedVersion) return false;\n // Parse the range to understand what we're comparing against\n const rangeObj = semver.validRange(range);\n if (!rangeObj) return false;\n // For caret ranges like \"^4.4\", we want more strict checking than semver's default\n if (range.startsWith('^')) {\n const rangeVersion = range.substring(1); // Remove the ^\n // Try to parse as a complete version first\n let parsedRange = semver.parse(rangeVersion);\n // If that fails, try to coerce it (handles cases like \"4.4\" -> \"4.4.0\")\n if (!parsedRange) {\n const coercedRange = semver.coerce(rangeVersion);\n if (coercedRange) {\n parsedRange = coercedRange;\n } else {\n return false;\n }\n }\n // For prerelease versions, check if the base version (without prerelease)\n // matches the major.minor from the range\n if (parsedVersion.prerelease.length > 0) {\n return parsedVersion.major === parsedRange.major && parsedVersion.minor === parsedRange.minor;\n }\n // For regular versions with caret ranges, be strict about minor version\n // ^4.4 should only accept 4.4.x, not 4.5.x\n return parsedVersion.major === parsedRange.major && parsedVersion.minor === parsedRange.minor;\n }\n // For other range types (exact, tilde, etc.), use standard semver checking\n if (parsedVersion.prerelease.length > 0) {\n const baseVersion = `${parsedVersion.major}.${parsedVersion.minor}.${parsedVersion.patch}`;\n return semver.satisfies(baseVersion, range);\n }\n return semver.satisfies(version, range);\n } catch {\n // If semver parsing fails, assume incompatible\n return false;\n }\n};\n/**\n * Checks for npm link problems (version mismatches) in a package directory\n * Returns a set of dependency names that have link problems\n *\n * @deprecated Use getLinkCompatibilityProblems instead for better prerelease version handling\n */ const getLinkProblems = async (packageDir)=>{\n const execPromise = util.promisify(exec);\n try {\n const { stdout } = await execPromise('npm ls --link --json', {\n cwd: packageDir\n });\n const result = safeJsonParse(stdout, 'npm ls troubleshoot output');\n const problemDependencies = new Set();\n // Check if there are any problems reported\n if (result.problems && Array.isArray(result.problems)) {\n // Parse problems array to extract dependency names\n for (const problem of result.problems){\n if (typeof problem === 'string' && problem.includes('invalid:')) {\n // Extract package name from problem string like \"invalid: @fjell/eslint-config@1.1.20-dev.0 ...\"\n // Handle both scoped (@scope/name) and unscoped (name) packages\n const match = problem.match(/invalid:\\s+(@[^/]+\\/[^@\\s]+|[^@\\s]+)@/);\n if (match) {\n problemDependencies.add(match[1]);\n }\n }\n }\n }\n // Also check individual dependencies for problems\n if (result.dependencies && typeof result.dependencies === 'object') {\n for (const [depName, depInfo] of Object.entries(result.dependencies)){\n if (depInfo && typeof depInfo === 'object') {\n const dep = depInfo;\n // Check if this dependency has problems or is marked as invalid\n if (dep.problems && Array.isArray(dep.problems) && dep.problems.length > 0 || dep.invalid) {\n problemDependencies.add(depName);\n }\n }\n }\n }\n return problemDependencies;\n } catch (error) {\n // npm ls --link often exits with non-zero code when there are problems\n // but still provides valid JSON in stdout\n if (error.stdout) {\n try {\n const result = safeJsonParse(error.stdout, 'npm ls troubleshoot error output');\n const problemDependencies = new Set();\n // Check if there are any problems reported\n if (result.problems && Array.isArray(result.problems)) {\n for (const problem of result.problems){\n if (typeof problem === 'string' && problem.includes('invalid:')) {\n const match = problem.match(/invalid:\\s+(@[^/]+\\/[^@\\s]+|[^@\\s]+)@/);\n if (match) {\n problemDependencies.add(match[1]);\n }\n }\n }\n }\n // Also check individual dependencies for problems\n if (result.dependencies && typeof result.dependencies === 'object') {\n for (const [depName, depInfo] of Object.entries(result.dependencies)){\n if (depInfo && typeof depInfo === 'object') {\n const dep = depInfo;\n if (dep.problems && Array.isArray(dep.problems) && dep.problems.length > 0 || dep.invalid) {\n problemDependencies.add(depName);\n }\n }\n }\n }\n return problemDependencies;\n } catch {\n // If JSON parsing fails, return empty set\n return new Set();\n }\n }\n return new Set();\n }\n};\n/**\n * Checks if a package directory is npm linked (has a global symlink)\n */ const isNpmLinked = async (packageDir)=>{\n const logger = getLogger();\n try {\n // Read package.json to get the package name\n const packageJsonPath = path.join(packageDir, 'package.json');\n try {\n await fs.access(packageJsonPath);\n } catch {\n // No package.json found\n return false;\n }\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');\n const packageJson = safeJsonParse(packageJsonContent, packageJsonPath);\n const packageName = packageJson.name;\n if (!packageName) {\n return false;\n }\n // Check if the package is globally linked by running npm ls -g --depth=0\n try {\n const { stdout } = await runSecure('npm', [\n 'ls',\n '-g',\n '--depth=0',\n '--json'\n ]);\n const globalPackages = safeJsonParse(stdout, 'npm ls global depth check output');\n // Check if our package is in the global dependencies\n if (globalPackages.dependencies && globalPackages.dependencies[packageName]) {\n // Verify the symlink actually points to our directory\n const globalPath = globalPackages.dependencies[packageName].resolved;\n if (globalPath && globalPath.startsWith('file:')) {\n const linkedPath = globalPath.replace('file:', '');\n const realPackageDir = await fs.realpath(packageDir);\n const realLinkedPath = await fs.realpath(linkedPath);\n return realPackageDir === realLinkedPath;\n }\n }\n } catch (error) {\n // If npm ls fails, try alternative approach\n logger.debug(`npm ls failed for ${packageName}, trying alternative check: ${error}`);\n // Alternative: check if there's a symlink in npm's global node_modules\n try {\n const { stdout: npmPrefix } = await run('npm prefix -g');\n const globalNodeModules = path.join(npmPrefix.trim(), 'node_modules', packageName);\n const stat = await fs.lstat(globalNodeModules);\n if (stat.isSymbolicLink()) {\n const realGlobalPath = await fs.realpath(globalNodeModules);\n const realPackageDir = await fs.realpath(packageDir);\n return realGlobalPath === realPackageDir;\n }\n } catch {\n // If all else fails, assume not linked\n return false;\n }\n }\n return false;\n } catch (error) {\n logger.debug(`Error checking npm link status for ${packageDir}: ${error}`);\n return false;\n }\n};\n\nexport { ConsoleLogger, escapeShellArg, findPreviousReleaseTag, getBranchCommitSha, getCurrentBranch, getCurrentVersion, getDefaultFromRef, getGitStatusSummary, getGloballyLinkedPackages, getLinkCompatibilityProblems, getLinkProblems, getLinkedDependencies, getLogger, getRemoteDefaultBranch, isBranchInSyncWithRemote, isGitRepository, isNpmLinked, isValidGitRef, localBranchExists, remoteBranchExists, run, runSecure, runSecureWithDryRunSupport, runSecureWithInheritedStdio, runWithDryRunSupport, runWithInheritedStdio, safeJsonParse, safeSyncBranchWithRemote, setLogger, validateFilePath, validateGitRef, validateHasProperty, validatePackageJson, validateString };\n//# sourceMappingURL=index.js.map\n","import { Octokit } from '@octokit/rest';\nimport { getLogger } from './logger.js';\nimport { run } from '@eldrforge/git-tools';\n\n// Make promptConfirmation injectable\nconst defaultPrompt = async (message)=>{\n // Default to true for non-interactive environments\n // eslint-disable-next-line no-console\n console.warn(`Prompt: ${message} (defaulting to YES in non-interactive mode)`);\n return true;\n};\nlet currentPrompt = defaultPrompt;\nconst setPromptFunction = (fn)=>{\n currentPrompt = fn;\n};\nconst promptConfirmation = async (message)=>{\n return currentPrompt(message);\n};\nconst getOctokit = ()=>{\n const logger = getLogger();\n const token = process.env.GITHUB_TOKEN;\n if (!token) {\n logger.error('GITHUB_TOKEN environment variable is not set.');\n throw new Error('GITHUB_TOKEN is not set.');\n }\n return new Octokit({\n auth: token\n });\n};\nconst getCurrentBranchName = async (cwd)=>{\n const { stdout } = await run('git rev-parse --abbrev-ref HEAD', {\n cwd\n });\n return stdout.trim();\n};\nconst getRepoDetails = async (cwd)=>{\n try {\n const { stdout } = await run('git remote get-url origin', {\n cwd,\n suppressErrorLogging: true\n });\n const url = stdout.trim();\n // Extract owner/repo from the URL - just look for the pattern owner/repo at the end\n // Works with any hostname or SSH alias:\n // - git@github.com:owner/repo.git\n // - git@github.com-fjell:owner/repo.git\n // - https://github.com/owner/repo.git\n // - ssh://git@host/owner/repo.git\n // Two cases:\n // 1. SSH format: :owner/repo (after colon)\n // 2. HTTPS format: //hostname/owner/repo (need at least 2 path segments)\n const match = url.match(/(?::([^/:]+)\\/([^/:]+)|\\/\\/[^/]+\\/([^/:]+)\\/([^/:]+))(?:\\.git)?$/);\n if (!match) {\n throw new Error(`Could not parse repository owner and name from origin URL: \"${url}\". Expected format: git@host:owner/repo.git or https://host/owner/repo.git`);\n }\n // Match groups: either [1,2] for SSH or [3,4] for HTTPS\n const owner = match[1] || match[3];\n let repo = match[2] || match[4];\n // Strip .git extension if present\n if (repo.endsWith('.git')) {\n repo = repo.slice(0, -4);\n }\n return {\n owner,\n repo\n };\n } catch (error) {\n const logger = getLogger();\n const isNotGitRepo = error.message.includes('not a git repository');\n const hasNoOrigin = error.message.includes('remote origin does not exist');\n if (isNotGitRepo || hasNoOrigin) {\n logger.debug(`Failed to get repository details (expected): ${error.message} (${cwd || process.cwd()})`);\n } else {\n logger.debug(`Failed to get repository details: ${error.message}`);\n }\n throw error;\n }\n};\n// GitHub API limit for pull request titles\nconst GITHUB_PR_TITLE_LIMIT = 256;\nconst truncatePullRequestTitle = (title)=>{\n if (title.length <= GITHUB_PR_TITLE_LIMIT) {\n return title;\n }\n // Reserve space for \"...\" suffix\n const maxLength = GITHUB_PR_TITLE_LIMIT - 3;\n let truncated = title.substring(0, maxLength);\n // Try to break at word boundary to avoid cutting words in half\n const lastSpaceIndex = truncated.lastIndexOf(' ');\n if (lastSpaceIndex > maxLength * 0.8) {\n truncated = truncated.substring(0, lastSpaceIndex);\n }\n return truncated + '...';\n};\nconst createPullRequest = async (title, body, head, base = 'main', options = {})=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(options.cwd);\n const logger = getLogger();\n // Check if PR already exists (pre-flight check)\n if (options.reuseExisting !== false) {\n logger.debug(`Checking for existing PR with head: ${head}`);\n const existingPR = await findOpenPullRequestByHeadRef(head, options.cwd);\n if (existingPR) {\n if (existingPR.base.ref === base) {\n logger.info(`âģī¸ Reusing existing PR #${existingPR.number}: ${existingPR.html_url}`);\n return existingPR;\n } else {\n logger.warn(`â ī¸ Existing PR #${existingPR.number} found but targets different base (${existingPR.base.ref} vs ${base})`);\n logger.warn(` PR URL: ${existingPR.html_url}`);\n logger.warn(` You may need to close the existing PR or use a different branch name`);\n }\n }\n }\n // Truncate title if it exceeds GitHub's limit\n const truncatedTitle = truncatePullRequestTitle(title.trim());\n if (truncatedTitle !== title.trim()) {\n logger.debug(`Pull request title truncated from ${title.trim().length} to ${truncatedTitle.length} characters to meet GitHub's 256-character limit`);\n }\n try {\n const response = await octokit.pulls.create({\n owner,\n repo,\n title: truncatedTitle,\n body,\n head,\n base\n });\n return response.data;\n } catch (error) {\n // Enhanced error handling for 422 errors\n if (error.status === 422) {\n var _error_response;\n const { PullRequestCreationError } = await import('./errors.js');\n // Try to find existing PR to provide more helpful info\n let existingPR = null;\n try {\n existingPR = await findOpenPullRequestByHeadRef(head);\n } catch {\n // Ignore errors finding existing PR\n }\n // If we found an existing PR that matches our target, reuse it instead of failing\n if (existingPR && existingPR.base.ref === base) {\n logger.info(`âģī¸ Found and reusing existing PR #${existingPR.number} (created after initial check)`);\n logger.info(` URL: ${existingPR.html_url}`);\n logger.info(` This can happen when PRs are created in parallel or from a previous failed run`);\n return existingPR;\n }\n const prError = new PullRequestCreationError(`Failed to create pull request: ${error.message}`, 422, head, base, (_error_response = error.response) === null || _error_response === void 0 ? void 0 : _error_response.data, existingPR === null || existingPR === void 0 ? void 0 : existingPR.number, existingPR === null || existingPR === void 0 ? void 0 : existingPR.html_url);\n // Log the detailed recovery instructions\n const instructions = prError.getRecoveryInstructions();\n for (const line of instructions.split('\\n')){\n logger.error(line);\n }\n logger.error('');\n throw prError;\n }\n // Re-throw other errors\n throw error;\n }\n};\nconst findOpenPullRequestByHeadRef = async (head, cwd)=>{\n const octokit = getOctokit();\n const logger = getLogger();\n try {\n var _response_data_;\n const { owner, repo } = await getRepoDetails(cwd);\n logger.debug(`Searching for open pull requests with head: ${owner}:${head} in ${owner}/${repo}`);\n const response = await octokit.pulls.list({\n owner,\n repo,\n state: 'open',\n head: `${owner}:${head}`\n });\n logger.debug(`Found ${response.data.length} open pull requests`);\n return (_response_data_ = response.data[0]) !== null && _response_data_ !== void 0 ? _response_data_ : null;\n } catch (error) {\n // Only log error if it's NOT a \"not a git repository\" error which we already logged at debug\n if (!error.message.includes('not a git repository')) {\n logger.error(`Failed to find open pull requests: ${error.message}`);\n } else {\n logger.debug(`Skipping PR search: not a git repository (${cwd || process.cwd()})`);\n }\n if (error.status === 404) {\n logger.error(`Repository not found or access denied. Please check your GITHUB_TOKEN permissions.`);\n }\n throw error;\n }\n};\nconst delay = (ms)=>new Promise((resolve)=>setTimeout(resolve, ms));\n// Check if repository has GitHub Actions workflows configured\nconst hasWorkflowsConfigured = async (cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n try {\n const response = await octokit.actions.listRepoWorkflows({\n owner,\n repo\n });\n return response.data.workflows.length > 0;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n // If we can't check workflows (e.g., no Actions permission), assume they might exist\n return true;\n }\n};\n/**\n * Check if workflows are configured and would be triggered for PRs to the target branch\n * Returns detailed information about workflow configuration\n */ const checkWorkflowConfiguration = async (targetBranch = 'main', cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Checking workflow configuration for PRs to ${targetBranch}...`);\n const response = await octokit.actions.listRepoWorkflows({\n owner,\n repo\n });\n const workflows = response.data.workflows;\n if (workflows.length === 0) {\n return {\n hasWorkflows: false,\n workflowCount: 0,\n hasPullRequestTriggers: false,\n triggeredWorkflowNames: [],\n warning: 'No GitHub Actions workflows are configured in this repository'\n };\n }\n // Check each workflow to see if it would be triggered by a PR\n const triggeredWorkflows = [];\n for (const workflow of workflows){\n try {\n const workflowPath = workflow.path;\n logger.debug(`Checking workflow: ${workflow.name} (${workflowPath})`);\n const contentResponse = await octokit.repos.getContent({\n owner,\n repo,\n path: workflowPath\n });\n if ('content' in contentResponse.data && contentResponse.data.type === 'file') {\n const content = Buffer.from(contentResponse.data.content, 'base64').toString('utf-8');\n if (isTriggeredByPullRequest(content, targetBranch, workflow.name)) {\n logger.debug(`â Workflow \"${workflow.name}\" will be triggered by PRs to ${targetBranch}`);\n triggeredWorkflows.push(workflow.name);\n } else {\n logger.debug(`â Workflow \"${workflow.name}\" will not be triggered by PRs to ${targetBranch}`);\n }\n }\n } catch (error) {\n logger.debug(`Failed to analyze workflow ${workflow.name}: ${error.message}`);\n }\n }\n const hasPullRequestTriggers = triggeredWorkflows.length > 0;\n const warning = !hasPullRequestTriggers ? `${workflows.length} workflow(s) are configured, but none appear to trigger on pull requests to ${targetBranch}` : undefined;\n return {\n hasWorkflows: true,\n workflowCount: workflows.length,\n hasPullRequestTriggers,\n triggeredWorkflowNames: triggeredWorkflows,\n warning\n };\n } catch (error) {\n logger.debug(`Failed to check workflow configuration: ${error.message}`);\n // If we can't check, assume workflows might exist to avoid false negatives\n return {\n hasWorkflows: true,\n workflowCount: -1,\n hasPullRequestTriggers: true,\n triggeredWorkflowNames: []\n };\n }\n};\n/**\n * Check if a workflow is triggered by pull requests to a specific branch\n */ const isTriggeredByPullRequest = (workflowContent, targetBranch, workflowName)=>{\n const logger = getLogger();\n try {\n // Look for pull_request trigger with branch patterns\n // Pattern 1: on.pull_request (with or without branch filters)\n // on:\n // pull_request:\n // branches: [main, develop, ...]\n const prEventPattern = /(?:^|\\r?\\n)[^\\S\\r\\n]*on\\s*:\\s*\\r?\\n(?:[^\\S\\r\\n]*[^\\r\\n]+(?:\\r?\\n))*?[^\\S\\r\\n]*pull_request\\s*:/mi;\n // Pattern 2: on: [push, pull_request] or on: pull_request\n const onPullRequestPattern = /(?:^|\\n)\\s*on\\s*:\\s*(?:\\[.*pull_request.*\\]|pull_request)\\s*(?:\\n|$)/m;\n const hasPullRequestTrigger = prEventPattern.test(workflowContent) || onPullRequestPattern.test(workflowContent);\n if (!hasPullRequestTrigger) {\n return false;\n }\n // If pull_request trigger is found, check if it matches our target branch\n // Look for branch restrictions\n const branchPattern = /pull_request\\s*:\\s*\\r?\\n(?:[^\\S\\r\\n]*[^\\r\\n]+(?:\\r?\\n))*?[^\\S\\r\\n]*branches\\s*:\\s*(?:\\r?\\n|\\[)([^\\]\\r\\n]+)/mi;\n const branchMatch = workflowContent.match(branchPattern);\n if (branchMatch) {\n const branchesSection = branchMatch[1];\n logger.debug(`Workflow \"${workflowName}\" has branch filter: ${branchesSection}`);\n // Check if target branch is explicitly mentioned\n if (branchesSection.includes(targetBranch)) {\n logger.debug(`Workflow \"${workflowName}\" branch filter matches ${targetBranch} (exact match)`);\n return true;\n }\n // Check for catch-all patterns (** or standalone *)\n // But not patterns like \"feature/*\" which are specific to a prefix\n if (branchesSection.includes('**') || branchesSection.match(/[[,\\s]'?\\*'?[,\\s\\]]/)) {\n logger.debug(`Workflow \"${workflowName}\" branch filter matches ${targetBranch} (wildcard match)`);\n return true;\n }\n logger.debug(`Workflow \"${workflowName}\" branch filter does not match ${targetBranch}`);\n return false;\n }\n // If no branch filter is specified, the workflow triggers on all PRs\n logger.debug(`Workflow \"${workflowName}\" has no branch filter, triggers on all PRs`);\n return true;\n } catch (error) {\n logger.debug(`Failed to parse workflow content for ${workflowName}: ${error.message}`);\n // If we can't parse, assume it might trigger to avoid false negatives\n return true;\n }\n};\n/**\n * Check if any workflow runs have been triggered for a specific PR\n * This is more specific than hasWorkflowsConfigured as it checks for actual runs\n */ const hasWorkflowRunsForPR = async (prNumber, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n // Get the PR to find the head SHA\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber\n });\n const headSha = pr.data.head.sha;\n const headRef = pr.data.head.ref;\n // Check for workflow runs triggered by this PR\n const workflowRuns = await octokit.actions.listWorkflowRunsForRepo({\n owner,\n repo,\n head_sha: headSha,\n per_page: 50\n });\n // Also check for runs on the branch\n const branchRuns = await octokit.actions.listWorkflowRunsForRepo({\n owner,\n repo,\n branch: headRef,\n per_page: 50\n });\n const allRuns = [\n ...workflowRuns.data.workflow_runs,\n ...branchRuns.data.workflow_runs\n ];\n // Filter to runs that match our PR's head SHA or are very recent on the branch\n const relevantRuns = allRuns.filter((run)=>run.head_sha === headSha || run.head_branch === headRef && new Date(run.created_at).getTime() > Date.now() - 300000 // Last 5 minutes\n );\n if (relevantRuns.length > 0) {\n logger.debug(`Found ${relevantRuns.length} workflow runs for PR #${prNumber} (SHA: ${headSha})`);\n return true;\n }\n logger.debug(`No workflow runs found for PR #${prNumber} (SHA: ${headSha}, branch: ${headRef})`);\n return false;\n } catch (error) {\n logger.debug(`Error checking workflow runs for PR #${prNumber}: ${error.message}`);\n // If we can't check workflow runs, assume they might exist\n return true;\n }\n};\nconst waitForPullRequestChecks = async (prNumber, options = {})=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(options.cwd);\n const logger = getLogger();\n const timeout = options.timeout || 3600000; // 1 hour default timeout\n const skipUserConfirmation = options.skipUserConfirmation || false;\n const startTime = Date.now();\n let consecutiveNoChecksCount = 0;\n const maxConsecutiveNoChecks = 3; // 3 consecutive checks (30 seconds) with no checks before deeper investigation\n let checkedWorkflowRuns = false; // Track if we've already checked for workflow runs to avoid repeated checks\n while(true){\n const elapsedTime = Date.now() - startTime;\n // Check for timeout\n if (elapsedTime > timeout) {\n logger.warn(`Timeout reached (${timeout / 1000}s) while waiting for PR #${prNumber} checks.`);\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(`â ī¸ Timeout reached while waiting for PR #${prNumber} checks.\\n` + `This might indicate that no checks are configured for this repository.\\n` + `Do you want to proceed with merging the PR without waiting for checks?`);\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without waiting for checks.');\n return;\n } else {\n throw new Error(`Timeout waiting for PR #${prNumber} checks. User chose not to proceed.`);\n }\n } else {\n throw new Error(`Timeout waiting for PR #${prNumber} checks (${timeout / 1000}s)`);\n }\n }\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber\n });\n const checkRunsResponse = await octokit.checks.listForRef({\n owner,\n repo,\n ref: pr.data.head.sha\n });\n const checkRuns = checkRunsResponse.data.check_runs;\n if (checkRuns.length === 0) {\n consecutiveNoChecksCount++;\n logger.info(`PR #${prNumber}: No checks found (${consecutiveNoChecksCount}/${maxConsecutiveNoChecks}). Waiting...`);\n // After several consecutive \"no checks\" responses, check if workflows are configured\n if (consecutiveNoChecksCount >= maxConsecutiveNoChecks) {\n logger.info(`No checks detected for ${maxConsecutiveNoChecks} consecutive attempts. Checking repository configuration...`);\n const hasWorkflows = await hasWorkflowsConfigured(options.cwd);\n if (!hasWorkflows) {\n logger.warn(`No GitHub Actions workflows found in repository ${owner}/${repo}.`);\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(`â ī¸ No GitHub Actions workflows or checks are configured for this repository.\\n` + `PR #${prNumber} will never have status checks to wait for.\\n` + `Do you want to proceed with merging the PR without checks?`);\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (no workflows configured).');\n return;\n } else {\n throw new Error(`No checks configured for PR #${prNumber}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflows are configured\n logger.info('No workflows configured, proceeding without checks.');\n return;\n }\n } else {\n // Workflows exist, but check if any are actually running for this PR\n if (!checkedWorkflowRuns) {\n logger.info('GitHub Actions workflows are configured. Checking if any workflows are triggered for this PR...');\n // First check if workflow runs exist at all for this PR's branch/SHA\n const hasRunsForPR = await hasWorkflowRunsForPR(prNumber, options.cwd);\n checkedWorkflowRuns = true; // Mark that we've checked\n if (!hasRunsForPR) {\n logger.warn(`No workflow runs detected for PR #${prNumber}. This may indicate that the configured workflows don't match this branch pattern.`);\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(`â ī¸ GitHub Actions workflows are configured in this repository, but none appear to be triggered by PR #${prNumber}.\\n` + `This usually means the workflow trigger patterns (branches, paths) don't match this PR.\\n` + `PR #${prNumber} will likely never have status checks to wait for.\\n` + `Do you want to proceed with merging the PR without waiting for checks?`);\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (no matching workflow triggers).');\n return;\n } else {\n throw new Error(`No matching workflow triggers for PR #${prNumber}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflow runs are detected\n logger.info('No workflow runs detected for this PR, proceeding without checks.');\n return;\n }\n } else {\n // Workflow runs exist on the branch, but they might not be associated with the PR\n // This happens when workflows trigger on 'push' but not 'pull_request'\n logger.info(`Found workflow runs on the branch, but none appear as PR checks.`);\n logger.info(`This usually means workflows trigger on 'push' but not 'pull_request'.`);\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(`â ī¸ Workflow runs exist for the branch, but no check runs are associated with PR #${prNumber}.\\n` + `This typically means workflows are configured for 'push' events but not 'pull_request' events.\\n` + `Do you want to proceed with merging the PR without waiting for checks?`);\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without PR checks (workflows not configured for pull_request events).');\n return;\n } else {\n throw new Error(`No PR check runs for #${prNumber} (workflows trigger on push only). User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if workflow runs exist but aren't PR checks\n logger.info('Workflow runs exist but are not PR checks, proceeding without checks.');\n return;\n }\n }\n } else {\n // We've already checked workflow runs and found them on the branch but not as PR checks\n // At this point, we should give up to avoid infinite loops\n logger.warn(`Still no checks after ${consecutiveNoChecksCount} attempts. Workflow runs exist on branch but not as PR checks.`);\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(`â ī¸ After waiting ${Math.round(elapsedTime / 1000)}s, no checks have appeared for PR #${prNumber}.\\n` + `The configured workflows don't appear to trigger for this branch.\\n` + `Do you want to proceed with merging the PR without checks?`);\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (timeout waiting for workflow triggers).');\n return;\n } else {\n throw new Error(`No workflow triggers matched PR #${prNumber} after waiting. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed after reasonable waiting\n logger.info('No workflow runs detected after waiting, proceeding without checks.');\n return;\n }\n }\n }\n }\n await delay(10000);\n continue;\n }\n // Reset the no-checks counter since we found some checks\n consecutiveNoChecksCount = 0;\n // ... rest of the while loop logic ...\n const failingChecks = checkRuns.filter((cr)=>cr.conclusion && [\n 'failure',\n 'timed_out',\n 'cancelled'\n ].includes(cr.conclusion));\n if (failingChecks.length > 0) {\n const { owner, repo } = await getRepoDetails(options.cwd);\n const prUrl = `https://github.com/${owner}/${repo}/pull/${prNumber}`;\n // Collect detailed information about each failed check\n const detailedFailedChecks = await Promise.all(failingChecks.map(async (check)=>{\n try {\n var _checkDetails_data_output, _checkDetails_data_output1, _checkDetails_data_output2, _checkDetails_data_output3;\n // Get additional details from the check run\n const checkDetails = await octokit.checks.get({\n owner,\n repo,\n check_run_id: check.id\n });\n return {\n name: check.name,\n conclusion: check.conclusion || 'unknown',\n detailsUrl: check.details_url || undefined,\n summary: ((_checkDetails_data_output = checkDetails.data.output) === null || _checkDetails_data_output === void 0 ? void 0 : _checkDetails_data_output.summary) || undefined,\n output: {\n title: ((_checkDetails_data_output1 = checkDetails.data.output) === null || _checkDetails_data_output1 === void 0 ? void 0 : _checkDetails_data_output1.title) || undefined,\n summary: ((_checkDetails_data_output2 = checkDetails.data.output) === null || _checkDetails_data_output2 === void 0 ? void 0 : _checkDetails_data_output2.summary) || undefined,\n text: ((_checkDetails_data_output3 = checkDetails.data.output) === null || _checkDetails_data_output3 === void 0 ? void 0 : _checkDetails_data_output3.text) || undefined\n }\n };\n } catch {\n // Fallback to basic information if we can't get details\n return {\n name: check.name,\n conclusion: check.conclusion || 'unknown',\n detailsUrl: check.details_url || undefined\n };\n }\n }));\n logger.error(`â PR #${prNumber} has ${failingChecks.length} failing check${failingChecks.length > 1 ? 's' : ''}:`);\n logger.error('');\n for (const check of detailedFailedChecks){\n var _check_output, _check_output1;\n const statusIcon = check.conclusion === 'failure' ? 'â' : check.conclusion === 'timed_out' ? 'â°' : 'đĢ';\n logger.error(`${statusIcon} ${check.name}: ${check.conclusion}`);\n // Show more detailed error information if available\n if (((_check_output = check.output) === null || _check_output === void 0 ? void 0 : _check_output.title) && check.output.title !== check.name) {\n logger.error(` Issue: ${check.output.title}`);\n }\n if ((_check_output1 = check.output) === null || _check_output1 === void 0 ? void 0 : _check_output1.summary) {\n // Truncate very long summaries\n const summary = check.output.summary.length > 200 ? check.output.summary.substring(0, 200) + '...' : check.output.summary;\n logger.error(` Summary: ${summary}`);\n }\n // Include direct link to check details\n if (check.detailsUrl) {\n logger.error(` Details: ${check.detailsUrl}`);\n }\n logger.error('');\n }\n // Import the new error class\n const { PullRequestCheckError } = await import('./errors.js');\n // Create and throw the enhanced error with detailed recovery instructions\n const prError = new PullRequestCheckError(`PR #${prNumber} checks failed. ${failingChecks.length} check${failingChecks.length > 1 ? 's' : ''} failed.`, prNumber, detailedFailedChecks, prUrl);\n // Display recovery instructions (split by line to avoid character-by-character logging)\n const instructions = prError.getRecoveryInstructions();\n for (const line of instructions.split('\\n')){\n logger.error(line);\n }\n logger.error('');\n throw prError;\n }\n const allChecksCompleted = checkRuns.every((cr)=>cr.status === 'completed');\n if (allChecksCompleted) {\n logger.info(`All checks for PR #${prNumber} have completed successfully.`);\n return;\n }\n const completedCount = checkRuns.filter((cr)=>cr.status === 'completed').length;\n logger.info(`PR #${prNumber} checks: ${completedCount}/${checkRuns.length} completed. Waiting...`);\n await delay(10000); // wait 10 seconds\n }\n};\nconst mergePullRequest = async (prNumber, mergeMethod = 'squash', deleteBranch = true, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n logger.info(`Merging PR #${prNumber} using ${mergeMethod} method...`);\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber\n });\n const headBranch = pr.data.head.ref;\n await octokit.pulls.merge({\n owner,\n repo,\n pull_number: prNumber,\n merge_method: mergeMethod\n });\n logger.info(`PR #${prNumber} merged using ${mergeMethod} method.`);\n if (deleteBranch) {\n logger.info(`Deleting branch ${headBranch}...`);\n await octokit.git.deleteRef({\n owner,\n repo,\n ref: `heads/${headBranch}`\n });\n logger.info(`Branch ${headBranch} deleted.`);\n } else {\n logger.info(`Preserving branch ${headBranch} (deletion skipped).`);\n }\n};\nconst createRelease = async (tagName, title, notes, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n logger.info(`Creating release for tag ${tagName}...`);\n // Unescape the release notes body and title in case they contain escaped newlines from JSON serialization\n // Background: If release notes were generated by agentic AI systems or went through JSON serialization,\n // the newlines may be stored as escaped sequences (literal \\n characters) rather than actual line breaks.\n // This can happen when:\n // 1. Release notes are JSON.stringify'd and stored in a file, then re-read as a string\n // 2. The release notes pass through multiple serialization layers\n // Without unescaping, GitHub will render \"some text\\nmore text\" instead of line-separated content\n const unescapedNotes = notes.replace(/\\\\n/g, '\\n').replace(/\\\\r/g, '\\r').replace(/\\\\t/g, '\\t');\n const unescapedTitle = title.replace(/\\\\n/g, '\\n').replace(/\\\\r/g, '\\r').replace(/\\\\t/g, '\\t');\n await octokit.repos.createRelease({\n owner,\n repo,\n tag_name: tagName,\n name: unescapedTitle,\n body: unescapedNotes\n });\n logger.info(`Release ${tagName} created.`);\n};\nconst getReleaseByTagName = async (tagName, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n const response = await octokit.repos.getReleaseByTag({\n owner,\n repo,\n tag: tagName\n });\n logger.debug(`Found release for tag ${tagName}: created at ${response.data.created_at}`);\n return response.data;\n } catch (error) {\n logger.debug(`Failed to get release for tag ${tagName}: ${error.message}`);\n throw error;\n }\n};\nconst getOpenIssues = async (limit = 20, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Fetching up to ${limit} open GitHub issues...`);\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'open',\n per_page: Math.min(limit, 100),\n sort: 'updated',\n direction: 'desc'\n });\n const issues = response.data.filter((issue)=>!issue.pull_request); // Filter out PRs\n if (issues.length === 0) {\n logger.debug('No open issues found');\n return '';\n }\n const issueStrings = issues.slice(0, limit).map((issue)=>{\n var _issue_body;\n const labels = issue.labels.map((label)=>typeof label === 'string' ? label : label.name).join(', ');\n return [\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n `Created: ${issue.created_at}`,\n `Updated: ${issue.updated_at}`,\n `Body: ${((_issue_body = issue.body) === null || _issue_body === void 0 ? void 0 : _issue_body.substring(0, 500)) || 'No description'}${issue.body && issue.body.length > 500 ? '...' : ''}`,\n '---'\n ].join('\\n');\n });\n logger.debug(`Fetched ${issues.length} open issues`);\n return issueStrings.join('\\n\\n');\n } catch (error) {\n logger.warn(`Failed to fetch GitHub issues: ${error.message}`);\n return '';\n }\n};\nconst createIssue = async (title, body, labels, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const response = await octokit.issues.create({\n owner,\n repo,\n title,\n body,\n labels: labels || []\n });\n return {\n number: response.data.number,\n html_url: response.data.html_url\n };\n};\nconst getWorkflowRunsTriggeredByRelease = async (tagName, workflowNames, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Fetching workflow runs triggered by release ${tagName}...`);\n // Get release information to filter by creation time and commit SHA\n let releaseInfo;\n let releaseCreatedAt;\n let releaseCommitSha;\n try {\n releaseInfo = await getReleaseByTagName(tagName, cwd);\n releaseCreatedAt = releaseInfo === null || releaseInfo === void 0 ? void 0 : releaseInfo.created_at;\n releaseCommitSha = releaseInfo === null || releaseInfo === void 0 ? void 0 : releaseInfo.target_commitish;\n } catch (error) {\n logger.debug(`Could not get release info for ${tagName}: ${error.message}. Using more permissive filtering.`);\n }\n if (releaseCreatedAt) {\n logger.debug(`Release ${tagName} was created at ${releaseCreatedAt}, filtering workflows created after this time`);\n } else {\n logger.debug(`No release creation time available for ${tagName}, using more permissive time filtering`);\n }\n if (releaseCommitSha) {\n logger.debug(`Release ${tagName} targets commit ${releaseCommitSha}`);\n }\n // Get all workflows\n const workflowsResponse = await octokit.actions.listRepoWorkflows({\n owner,\n repo\n });\n const relevantWorkflows = workflowsResponse.data.workflows.filter((workflow)=>{\n // If specific workflow names are provided, only include those\n if (workflowNames && workflowNames.length > 0) {\n return workflowNames.includes(workflow.name);\n }\n // Otherwise, find workflows that trigger on releases\n return true; // We'll filter by event later when we get the runs\n });\n logger.debug(`Found ${relevantWorkflows.length} workflows to check`);\n const allRuns = [];\n // Get recent workflow runs for each workflow\n for (const workflow of relevantWorkflows){\n try {\n const runsResponse = await octokit.actions.listWorkflowRuns({\n owner,\n repo,\n workflow_id: workflow.id,\n per_page: 30\n });\n logger.debug(`Checking ${runsResponse.data.workflow_runs.length} recent runs for workflow \"${workflow.name}\"`);\n // Filter runs that were triggered by our specific release\n const releaseRuns = runsResponse.data.workflow_runs.filter((run)=>{\n logger.debug(`Evaluating run ${run.id} for workflow \"${workflow.name}\": event=${run.event}, created_at=${run.created_at}`);\n // Must have required data\n if (!run.created_at) {\n logger.debug(`Excluding workflow run ${run.id}: missing created_at`);\n return false;\n }\n // Simple logic: if we have release info, just check that the run was created after the release\n if (releaseCreatedAt) {\n const runCreatedAt = new Date(run.created_at).getTime();\n const releaseCreatedAtTime = new Date(releaseCreatedAt).getTime();\n // Include any run that started after the release (with 1 minute buffer for timing)\n if (runCreatedAt < releaseCreatedAtTime - 60000) {\n logger.debug(`Excluding workflow run ${run.id}: created before release (run: ${run.created_at}, release: ${releaseCreatedAt})`);\n return false;\n }\n } else {\n // No release info - just look for recent runs (within last 30 minutes)\n const runAge = Date.now() - new Date(run.created_at).getTime();\n if (runAge > 1800000) {\n logger.debug(`Excluding old workflow run ${run.id}: created ${run.created_at}`);\n return false;\n }\n }\n logger.debug(`Including workflow run ${run.id}: ${workflow.name} (${run.status}/${run.conclusion || 'pending'}) created ${run.created_at}`);\n return true;\n });\n allRuns.push(...releaseRuns);\n if (releaseRuns.length > 0) {\n logger.debug(`Found ${releaseRuns.length} relevant workflow runs for ${workflow.name}`);\n } else {\n logger.debug(`No relevant workflow runs found for ${workflow.name}`);\n }\n } catch (error) {\n logger.warn(`Failed to get runs for workflow ${workflow.name}: ${error.message}`);\n }\n }\n // Sort by creation time (newest first)\n allRuns.sort((a, b)=>{\n return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();\n });\n logger.debug(`Found ${allRuns.length} workflow runs triggered by release ${tagName}`);\n return allRuns;\n } catch (error) {\n logger.error(`Failed to get workflow runs for release ${tagName}: ${error.message}`);\n return [];\n }\n};\nconst waitForReleaseWorkflows = async (tagName, options = {})=>{\n const logger = getLogger();\n const timeout = options.timeout || 1800000; // 30 minutes default\n const skipUserConfirmation = options.skipUserConfirmation || false;\n logger.info(`Waiting for workflows triggered by release ${tagName}...`);\n // Wait for workflows to start (GitHub can take time to process the release and trigger workflows)\n logger.debug('Waiting 20 seconds for workflows to start...');\n await delay(20000);\n const startTime = Date.now();\n let workflowRuns = [];\n let consecutiveNoWorkflowsCount = 0;\n const maxConsecutiveNoWorkflows = 20;\n while(true){\n const elapsedTime = Date.now() - startTime;\n // Check for timeout\n if (elapsedTime > timeout) {\n logger.warn(`Timeout reached (${timeout / 1000}s) while waiting for release workflows.`);\n if (!skipUserConfirmation) {\n const proceedWithoutWorkflows = await promptConfirmation(`â ī¸ Timeout reached while waiting for release workflows for ${tagName}.\\n` + `This might indicate that no workflows are configured to trigger on releases.\\n` + `Do you want to proceed anyway?`);\n if (proceedWithoutWorkflows) {\n logger.info('User chose to proceed without waiting for release workflows.');\n return;\n } else {\n throw new Error(`Timeout waiting for release workflows for ${tagName}. User chose not to proceed.`);\n }\n } else {\n throw new Error(`Timeout waiting for release workflows for ${tagName} (${timeout / 1000}s)`);\n }\n }\n // Get current workflow runs\n workflowRuns = await getWorkflowRunsTriggeredByRelease(tagName, options.workflowNames, options.cwd);\n if (workflowRuns.length === 0) {\n consecutiveNoWorkflowsCount++;\n logger.info(`No release workflows found (${consecutiveNoWorkflowsCount}/${maxConsecutiveNoWorkflows}). Waiting...`);\n // Add debug info about what we're looking for\n if (consecutiveNoWorkflowsCount === 1) {\n logger.debug(`Looking for workflows triggered by release ${tagName}`);\n if (options.workflowNames && options.workflowNames.length > 0) {\n logger.debug(`Specific workflows to monitor: ${options.workflowNames.join(', ')}`);\n } else {\n logger.debug('Monitoring all workflows that might be triggered by releases');\n }\n }\n // After several attempts with no workflows, ask user if they want to continue\n if (consecutiveNoWorkflowsCount >= maxConsecutiveNoWorkflows) {\n logger.warn(`No workflows triggered by release ${tagName} after ${maxConsecutiveNoWorkflows} attempts.`);\n if (!skipUserConfirmation) {\n const proceedWithoutWorkflows = await promptConfirmation(`â ī¸ No GitHub Actions workflows appear to be triggered by the release ${tagName}.\\n` + `This might be expected if no workflows are configured for release events.\\n` + `Do you want to proceed without waiting for workflows?`);\n if (proceedWithoutWorkflows) {\n logger.info('User chose to proceed without release workflows.');\n return;\n } else {\n throw new Error(`No release workflows found for ${tagName}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflows are found\n logger.info('No release workflows found, proceeding.');\n return;\n }\n }\n await delay(10000);\n continue;\n }\n // Reset counter since we found workflows\n consecutiveNoWorkflowsCount = 0;\n // Check status of all workflow runs\n const failingRuns = workflowRuns.filter((run)=>run.conclusion && [\n 'failure',\n 'timed_out',\n 'cancelled'\n ].includes(run.conclusion));\n if (failingRuns.length > 0) {\n logger.error(`Release workflows for ${tagName} have failures:`);\n for (const run of failingRuns){\n logger.error(`- ${run.name}: ${run.conclusion} (${run.html_url})`);\n }\n throw new Error(`Release workflows for ${tagName} failed.`);\n }\n const allWorkflowsCompleted = workflowRuns.every((run)=>run.status === 'completed');\n if (allWorkflowsCompleted) {\n const successfulRuns = workflowRuns.filter((run)=>run.conclusion === 'success');\n logger.info(`All ${workflowRuns.length} release workflows for ${tagName} completed successfully.`);\n for (const run of successfulRuns){\n logger.info(`â ${run.name}: ${run.conclusion}`);\n }\n return;\n }\n const completedCount = workflowRuns.filter((run)=>run.status === 'completed').length;\n const runningCount = workflowRuns.filter((run)=>run.status === 'in_progress').length;\n const queuedCount = workflowRuns.filter((run)=>run.status === 'queued').length;\n // Log detailed information about each workflow run being tracked\n if (workflowRuns.length > 0) {\n logger.debug(`Tracking ${workflowRuns.length} workflow runs for release ${tagName}:`);\n workflowRuns.forEach((run)=>{\n const statusIcon = run.status === 'completed' ? run.conclusion === 'success' ? 'â
' : run.conclusion === 'failure' ? 'â' : 'â ī¸' : run.status === 'in_progress' ? 'đ' : 'âŗ';\n logger.debug(` ${statusIcon} ${run.name} (${run.status}${run.conclusion ? `/${run.conclusion}` : ''}) - created ${run.created_at}`);\n });\n }\n logger.info(`Release workflows for ${tagName}: ${completedCount} completed, ${runningCount} running, ${queuedCount} queued (${workflowRuns.length} total)`);\n await delay(15000); // wait 15 seconds\n }\n};\nconst getWorkflowsTriggeredByRelease = async (cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug('Analyzing workflows to find those triggered by release events...');\n // Get all workflows\n const workflowsResponse = await octokit.actions.listRepoWorkflows({\n owner,\n repo\n });\n const releaseWorkflows = [];\n // Check each workflow's configuration\n for (const workflow of workflowsResponse.data.workflows){\n try {\n // Get the workflow file content\n const workflowPath = workflow.path;\n logger.debug(`Analyzing workflow: ${workflow.name} (${workflowPath})`);\n const contentResponse = await octokit.repos.getContent({\n owner,\n repo,\n path: workflowPath\n });\n // Handle the response - it could be a file or directory\n if ('content' in contentResponse.data && contentResponse.data.type === 'file') {\n // Decode the base64 content\n const content = Buffer.from(contentResponse.data.content, 'base64').toString('utf-8');\n // Parse the YAML to check trigger conditions\n if (isTriggeredByRelease(content, workflow.name)) {\n logger.debug(`â Workflow \"${workflow.name}\" will be triggered by release events`);\n releaseWorkflows.push(workflow.name);\n } else {\n logger.debug(`â Workflow \"${workflow.name}\" will not be triggered by release events`);\n }\n } else {\n logger.warn(`Could not read content for workflow ${workflow.name}`);\n }\n } catch (error) {\n logger.warn(`Failed to analyze workflow ${workflow.name}: ${error.message}`);\n }\n }\n logger.info(`Found ${releaseWorkflows.length} workflows that will be triggered by release events: ${releaseWorkflows.join(', ')}`);\n return releaseWorkflows;\n } catch (error) {\n logger.error(`Failed to analyze workflows: ${error.message}`);\n return [];\n }\n};\nconst isTriggeredByRelease = (workflowContent, workflowName)=>{\n const logger = getLogger();\n try {\n // Simple regex-based parsing since we don't want to add a YAML dependency\n // Look for common release trigger patterns\n // Pattern 1: on.release (with or without types)\n // on:\n // release:\n // types: [published, created, ...]\n const releaseEventPattern = /(?:^|\\n)\\s*on\\s*:\\s*(?:\\n|\\r\\n)(?:\\s+[^\\S\\r\\n]+)*(?:\\s+release\\s*:)/m;\n // Pattern 2: on: [push, release] or on: release\n const onReleasePattern = /(?:^|\\n)\\s*on\\s*:\\s*(?:\\[.*release.*\\]|release)\\s*(?:\\n|$)/m;\n // Pattern 3: push with tag patterns that look like releases\n // on:\n // push:\n // tags:\n // - 'v*'\n // - 'release/*'\n const tagPushPattern = /(?:^|\\r?\\n)[^\\S\\r\\n]*on\\s*:\\s*\\r?\\n(?:[^\\S\\r\\n]*[^\\r\\n]+(?:\\r?\\n))*?[^\\S\\r\\n]*push\\s*:\\s*\\r?\\n(?:[^\\S\\r\\n]*tags\\s*:\\s*(?:\\r?\\n|\\[)[^\\]\\r\\n]*(?:v\\*|release|tag)[^\\]\\r\\n]*)/mi;\n const isTriggered = releaseEventPattern.test(workflowContent) || onReleasePattern.test(workflowContent) || tagPushPattern.test(workflowContent);\n if (isTriggered) {\n logger.debug(`Workflow \"${workflowName}\" trigger patterns detected in content`);\n }\n return isTriggered;\n } catch (error) {\n logger.warn(`Failed to parse workflow content for ${workflowName}: ${error.message}`);\n return false;\n }\n};\n// Milestone Management Functions\nconst findMilestoneByTitle = async (title, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Searching for milestone: ${title}`);\n const response = await octokit.issues.listMilestones({\n owner,\n repo,\n state: 'all',\n per_page: 100\n });\n const milestone = response.data.find((m)=>m.title === title);\n if (milestone) {\n logger.debug(`Found milestone: ${milestone.title} (${milestone.state})`);\n } else {\n logger.debug(`Milestone not found: ${title}`);\n }\n return milestone || null;\n } catch (error) {\n logger.error(`Failed to search for milestone ${title}: ${error.message}`);\n throw error;\n }\n};\nconst createMilestone = async (title, description, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.info(`Creating milestone: ${title}`);\n const response = await octokit.issues.createMilestone({\n owner,\n repo,\n title,\n description\n });\n logger.info(`â
Milestone created: ${title} (#${response.data.number})`);\n return response.data;\n } catch (error) {\n logger.error(`Failed to create milestone ${title}: ${error.message}`);\n throw error;\n }\n};\nconst closeMilestone = async (milestoneNumber, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.info(`Closing milestone #${milestoneNumber}...`);\n await octokit.issues.updateMilestone({\n owner,\n repo,\n milestone_number: milestoneNumber,\n state: 'closed'\n });\n logger.info(`â
Milestone #${milestoneNumber} closed`);\n } catch (error) {\n logger.error(`Failed to close milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\nconst getOpenIssuesForMilestone = async (milestoneNumber, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Getting open issues for milestone #${milestoneNumber}`);\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'open',\n milestone: milestoneNumber.toString(),\n per_page: 100\n });\n const issues = response.data.filter((issue)=>!issue.pull_request); // Filter out PRs\n logger.debug(`Found ${issues.length} open issues for milestone #${milestoneNumber}`);\n return issues;\n } catch (error) {\n logger.error(`Failed to get issues for milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\nconst moveIssueToMilestone = async (issueNumber, milestoneNumber, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Moving issue #${issueNumber} to milestone #${milestoneNumber}`);\n await octokit.issues.update({\n owner,\n repo,\n issue_number: issueNumber,\n milestone: milestoneNumber\n });\n logger.debug(`â
Issue #${issueNumber} moved to milestone #${milestoneNumber}`);\n } catch (error) {\n logger.error(`Failed to move issue #${issueNumber} to milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\nconst moveOpenIssuesToNewMilestone = async (fromMilestoneNumber, toMilestoneNumber, cwd)=>{\n const logger = getLogger();\n try {\n const openIssues = await getOpenIssuesForMilestone(fromMilestoneNumber, cwd);\n if (openIssues.length === 0) {\n logger.debug(`No open issues to move from milestone #${fromMilestoneNumber}`);\n return 0;\n }\n logger.info(`Moving ${openIssues.length} open issues from milestone #${fromMilestoneNumber} to #${toMilestoneNumber}`);\n for (const issue of openIssues){\n await moveIssueToMilestone(issue.number, toMilestoneNumber, cwd);\n }\n logger.info(`â
Moved ${openIssues.length} issues to new milestone`);\n return openIssues.length;\n } catch (error) {\n logger.error(`Failed to move issues between milestones: ${error.message}`);\n throw error;\n }\n};\nconst ensureMilestoneForVersion = async (version, fromVersion, cwd)=>{\n const logger = getLogger();\n try {\n const milestoneTitle = `release/${version}`;\n logger.debug(`Ensuring milestone exists: ${milestoneTitle}`);\n // Check if milestone already exists\n let milestone = await findMilestoneByTitle(milestoneTitle, cwd);\n if (milestone) {\n logger.info(`â
Milestone already exists: ${milestoneTitle}`);\n return;\n }\n // Create new milestone\n milestone = await createMilestone(milestoneTitle, `Release ${version}`, cwd);\n // If we have a previous version, move open issues from its milestone\n if (fromVersion) {\n const previousMilestoneTitle = `release/${fromVersion}`;\n const previousMilestone = await findMilestoneByTitle(previousMilestoneTitle, cwd);\n if (previousMilestone && previousMilestone.state === 'closed') {\n const movedCount = await moveOpenIssuesToNewMilestone(previousMilestone.number, milestone.number, cwd);\n if (movedCount > 0) {\n logger.info(`đ Moved ${movedCount} open issues from ${previousMilestoneTitle} to ${milestoneTitle}`);\n }\n }\n }\n } catch (error) {\n // Don't fail the whole operation if milestone management fails\n logger.warn(`â ī¸ Milestone management failed (continuing): ${error.message}`);\n }\n};\nconst closeMilestoneForVersion = async (version, cwd)=>{\n const logger = getLogger();\n try {\n const milestoneTitle = `release/${version}`;\n logger.debug(`Closing milestone: ${milestoneTitle}`);\n const milestone = await findMilestoneByTitle(milestoneTitle, cwd);\n if (!milestone) {\n logger.debug(`Milestone not found: ${milestoneTitle}`);\n return;\n }\n if (milestone.state === 'closed') {\n logger.debug(`Milestone already closed: ${milestoneTitle}`);\n return;\n }\n await closeMilestone(milestone.number, cwd);\n logger.info(`đ Closed milestone: ${milestoneTitle}`);\n } catch (error) {\n // Don't fail the whole operation if milestone management fails\n logger.warn(`â ī¸ Failed to close milestone (continuing): ${error.message}`);\n }\n};\nconst getClosedIssuesForMilestone = async (milestoneNumber, limit = 50, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Getting closed issues for milestone #${milestoneNumber}`);\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'closed',\n milestone: milestoneNumber.toString(),\n per_page: Math.min(limit, 100),\n sort: 'updated',\n direction: 'desc'\n });\n // Filter out PRs and only include issues closed as completed\n const issues = response.data.filter((issue)=>!issue.pull_request && issue.state_reason === 'completed');\n logger.debug(`Found ${issues.length} closed issues for milestone #${milestoneNumber}`);\n return issues;\n } catch (error) {\n logger.error(`Failed to get closed issues for milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\nconst getIssueDetails = async (issueNumber, maxTokens = 20000, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Getting details for issue #${issueNumber}`);\n // Get the issue\n const issueResponse = await octokit.issues.get({\n owner,\n repo,\n issue_number: issueNumber\n });\n const issue = issueResponse.data;\n const content = {\n title: issue.title,\n body: issue.body || '',\n comments: [],\n totalTokens: 0\n };\n // Estimate tokens (rough approximation: 1 token â 4 characters)\n const estimateTokens = (text)=>Math.ceil(text.length / 4);\n let currentTokens = estimateTokens(content.title + content.body);\n content.totalTokens = currentTokens;\n // If we're already at or near the limit with just title and body, return now\n if (currentTokens >= maxTokens * 0.9) {\n logger.debug(`Issue #${issueNumber} title/body already uses ${currentTokens} tokens, skipping comments`);\n return content;\n }\n // Get comments\n try {\n const commentsResponse = await octokit.issues.listComments({\n owner,\n repo,\n issue_number: issueNumber,\n per_page: 100\n });\n for (const comment of commentsResponse.data){\n var _comment_user;\n const commentTokens = estimateTokens(comment.body || '');\n if (currentTokens + commentTokens > maxTokens) {\n logger.debug(`Stopping at comment to stay under ${maxTokens} token limit for issue #${issueNumber}`);\n break;\n }\n content.comments.push({\n author: (_comment_user = comment.user) === null || _comment_user === void 0 ? void 0 : _comment_user.login,\n body: comment.body,\n created_at: comment.created_at\n });\n currentTokens += commentTokens;\n }\n } catch (error) {\n logger.debug(`Failed to get comments for issue #${issueNumber}: ${error.message}`);\n }\n content.totalTokens = currentTokens;\n logger.debug(`Issue #${issueNumber} details: ${currentTokens} tokens`);\n return content;\n } catch (error) {\n logger.error(`Failed to get details for issue #${issueNumber}: ${error.message}`);\n throw error;\n }\n};\nconst getMilestoneIssuesForRelease = async (versions, maxTotalTokens = 50000, cwd)=>{\n const logger = getLogger();\n try {\n const allIssues = [];\n const processedVersions = [];\n for (const version of versions){\n const milestoneTitle = `release/${version}`;\n logger.debug(`Looking for milestone: ${milestoneTitle}`);\n const milestone = await findMilestoneByTitle(milestoneTitle, cwd);\n if (!milestone) {\n logger.debug(`Milestone not found: ${milestoneTitle}`);\n continue;\n }\n const issues = await getClosedIssuesForMilestone(milestone.number, 50, cwd);\n if (issues.length > 0) {\n allIssues.push(...issues.map((issue)=>({\n ...issue,\n version\n })));\n processedVersions.push(version);\n logger.info(`đ Found ${issues.length} closed issues in milestone ${milestoneTitle}`);\n }\n }\n if (allIssues.length === 0) {\n logger.debug('No closed issues found in any milestones');\n return '';\n }\n // Sort issues by updated date (most recent first)\n allIssues.sort((a, b)=>new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime());\n logger.info(`đ Processing ${allIssues.length} issues for release notes (max ${maxTotalTokens} tokens)`);\n let releaseNotesContent = '';\n let totalTokens = 0;\n const estimateTokens = (text)=>Math.ceil(text.length / 4);\n // Add header\n const header = `## Issues Resolved\\n\\nThe following issues were resolved in this release:\\n\\n`;\n releaseNotesContent += header;\n totalTokens += estimateTokens(header);\n for (const issue of allIssues){\n // Get detailed issue content with individual token limit\n const issueDetails = await getIssueDetails(issue.number, 20000, cwd);\n // Create issue section\n let issueSection = `### #${issue.number}: ${issueDetails.title}\\n\\n`;\n if (issueDetails.body) {\n issueSection += `**Description:**\\n${issueDetails.body}\\n\\n`;\n }\n if (issueDetails.comments.length > 0) {\n issueSection += `**Key Discussion Points:**\\n`;\n for (const comment of issueDetails.comments){\n issueSection += `- **${comment.author}**: ${comment.body}\\n`;\n }\n issueSection += '\\n';\n }\n // Add labels if present\n if (issue.labels && issue.labels.length > 0) {\n const labelNames = issue.labels.map((label)=>typeof label === 'string' ? label : label.name).join(', ');\n issueSection += `**Labels:** ${labelNames}\\n\\n`;\n }\n issueSection += '---\\n\\n';\n const sectionTokens = estimateTokens(issueSection);\n // Check if adding this issue would exceed the total limit\n if (totalTokens + sectionTokens > maxTotalTokens) {\n logger.info(`Stopping at issue #${issue.number} to stay under ${maxTotalTokens} token limit`);\n break;\n }\n releaseNotesContent += issueSection;\n totalTokens += sectionTokens;\n logger.debug(`Added issue #${issue.number} (${sectionTokens} tokens, total: ${totalTokens})`);\n }\n logger.info(`đ Generated release notes from milestone issues (${totalTokens} tokens)`);\n return releaseNotesContent;\n } catch (error) {\n // Don't fail the whole operation if milestone content fails\n logger.warn(`â ī¸ Failed to get milestone issues for release notes (continuing): ${error.message}`);\n return '';\n }\n};\n/**\n * Get recently closed GitHub issues for commit message context.\n * Prioritizes issues from milestones that match the current version.\n */ const getRecentClosedIssuesForCommit = async (currentVersion, limit = 10, cwd)=>{\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails(cwd);\n const logger = getLogger();\n try {\n logger.debug(`Fetching up to ${limit} recently closed GitHub issues for commit context...`);\n // Get recently closed issues\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'closed',\n per_page: Math.min(limit, 100),\n sort: 'updated',\n direction: 'desc'\n });\n const issues = response.data.filter((issue)=>!issue.pull_request && // Filter out PRs\n issue.state_reason === 'completed' // Only issues closed as completed\n );\n if (issues.length === 0) {\n logger.debug('No recently closed issues found');\n return '';\n }\n // Determine relevant milestone if we have a current version\n let relevantMilestone = null;\n if (currentVersion) {\n // Extract base version for milestone matching (e.g., \"0.1.1\" from \"0.1.1-dev.0\")\n const baseVersion = currentVersion.includes('-dev.') ? currentVersion.split('-')[0] : currentVersion;\n const milestoneTitle = `release/${baseVersion}`;\n relevantMilestone = await findMilestoneByTitle(milestoneTitle, cwd);\n if (relevantMilestone) {\n logger.debug(`Found relevant milestone: ${milestoneTitle}`);\n } else {\n logger.debug(`No milestone found for version: ${baseVersion}`);\n }\n }\n // Categorize issues by relevance\n const milestoneIssues = [];\n const otherIssues = [];\n for (const issue of issues.slice(0, limit)){\n var _issue_milestone;\n if (relevantMilestone && ((_issue_milestone = issue.milestone) === null || _issue_milestone === void 0 ? void 0 : _issue_milestone.number) === relevantMilestone.number) {\n milestoneIssues.push(issue);\n } else {\n otherIssues.push(issue);\n }\n }\n // Build the content, prioritizing milestone issues\n const issueStrings = [];\n // Add milestone issues first (these are most relevant)\n if (milestoneIssues.length > 0) {\n issueStrings.push(`## Recent Issues from Current Milestone (${relevantMilestone.title}):`);\n milestoneIssues.forEach((issue)=>{\n var _issue_body;\n const labels = issue.labels.map((label)=>typeof label === 'string' ? label : label.name).join(', ');\n issueStrings.push([\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n `Closed: ${issue.closed_at}`,\n `Body: ${((_issue_body = issue.body) === null || _issue_body === void 0 ? void 0 : _issue_body.substring(0, 300)) || 'No description'}${issue.body && issue.body.length > 300 ? '...' : ''}`,\n '---'\n ].join('\\n'));\n });\n }\n // Add other recent issues if we have space\n const remainingLimit = limit - milestoneIssues.length;\n if (otherIssues.length > 0 && remainingLimit > 0) {\n if (milestoneIssues.length > 0) {\n issueStrings.push('\\n## Other Recent Closed Issues:');\n }\n otherIssues.slice(0, remainingLimit).forEach((issue)=>{\n var _issue_body;\n const labels = issue.labels.map((label)=>typeof label === 'string' ? label : label.name).join(', ');\n const milestoneInfo = issue.milestone ? `Milestone: ${issue.milestone.title}` : 'Milestone: none';\n issueStrings.push([\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n milestoneInfo,\n `Closed: ${issue.closed_at}`,\n `Body: ${((_issue_body = issue.body) === null || _issue_body === void 0 ? void 0 : _issue_body.substring(0, 300)) || 'No description'}${issue.body && issue.body.length > 300 ? '...' : ''}`,\n '---'\n ].join('\\n'));\n });\n }\n const totalRelevantIssues = milestoneIssues.length;\n const totalOtherIssues = Math.min(otherIssues.length, remainingLimit);\n logger.debug(`Fetched ${totalRelevantIssues + totalOtherIssues} closed issues (${totalRelevantIssues} from relevant milestone, ${totalOtherIssues} others)`);\n return issueStrings.join('\\n\\n');\n } catch (error) {\n logger.warn(`Failed to fetch recent closed GitHub issues: ${error.message}`);\n return '';\n }\n};\n\nexport { checkWorkflowConfiguration, closeMilestone, closeMilestoneForVersion, createIssue, createMilestone, createPullRequest, createRelease, ensureMilestoneForVersion, findMilestoneByTitle, findOpenPullRequestByHeadRef, getClosedIssuesForMilestone, getCurrentBranchName, getIssueDetails, getMilestoneIssuesForRelease, getOctokit, getOpenIssues, getOpenIssuesForMilestone, getRecentClosedIssuesForCommit, getReleaseByTagName, getRepoDetails, getWorkflowRunsTriggeredByRelease, getWorkflowsTriggeredByRelease, mergePullRequest, moveIssueToMilestone, moveOpenIssuesToNewMilestone, setPromptFunction, waitForPullRequestChecks, waitForReleaseWorkflows };\n//# sourceMappingURL=github.js.map\n","import { getLogger } from './logger.js';\nimport { getOpenIssues, createIssue } from './github.js';\nimport path from 'path';\nimport os from 'os';\nimport { spawnSync } from 'child_process';\nimport fs from 'fs/promises';\n\n// Get GitHub issues content\nconst get = async (options = {})=>{\n const logger = getLogger();\n const { limit = 20 } = options;\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 if (githubIssues.trim()) {\n logger.debug(`Added GitHub issues to context (${githubIssues.length} characters)`);\n return githubIssues;\n } else {\n logger.debug('No open GitHub issues found');\n return '';\n }\n } catch (error) {\n logger.warn(`Failed to fetch GitHub issues: ${error.message}`);\n return '';\n }\n};\n// Helper function to get user choice interactively\nasync function getUserChoice(_prompt, _choices) {\n var _choices_;\n // Placeholder - always returns first choice\n return ((_choices_ = _choices[0]) === null || _choices_ === void 0 ? void 0 : _choices_.key) || '';\n}\n// Helper function to serialize issue to structured text format\nfunction serializeIssue(issue) {\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 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 return lines.join('\\n');\n}\n// Helper function to deserialize issue from structured text format\nfunction deserializeIssue(content) {\n const lines = content.split('\\n');\n // Parse the structured format\n let title = '';\n let priority = 'medium';\n let category = 'other';\n let description = '';\n const suggestions = [];\n let currentSection = '';\n let descriptionLines = [];\n for(let i = 0; i < lines.length; i++){\n const line = lines[i].trim();\n // Skip comment lines\n if (line.startsWith('#')) {\n continue;\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 ([\n 'ui',\n 'content',\n 'functionality',\n 'accessibility',\n 'performance',\n 'other'\n ].includes(categoryValue)) {\n category = categoryValue;\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 // If we didn't encounter suggestions section, description might still be accumulating\n if (currentSection === 'description') {\n description = descriptionLines.join('\\n').trim();\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// Helper function to edit issue using editor\nasync function editIssueInteractively(issue) {\n const logger = getLogger();\n const editor = process.env.EDITOR || process.env.VISUAL || 'vi';\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 // Serialize the issue to structured text format\n const issueContent = serializeIssue(issue);\n await fs.writeFile(tmpFilePath, issueContent, 'utf8');\n logger.info(`đ Opening ${editor} to edit issue...`);\n // Open the editor synchronously so execution resumes after the user closes it\n const result = spawnSync(editor, [\n tmpFilePath\n ], {\n stdio: 'inherit'\n });\n if (result.error) {\n throw new Error(`Failed to launch editor '${editor}': ${result.error.message}`);\n }\n // Read the file back and deserialize it\n const editedContent = await fs.readFile(tmpFilePath, 'utf8');\n // Clean up the temporary file with proper error handling\n try {\n await fs.unlink(tmpFilePath);\n } catch (error) {\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 // Deserialize the edited content back to an Issue object\n const editedIssue = deserializeIssue(editedContent);\n logger.info('â
Issue updated successfully');\n logger.debug(`Updated issue: ${JSON.stringify(editedIssue, null, 2)}`);\n return editedIssue;\n}\n// Helper function to format issue body for GitHub\nfunction formatIssueBody(issue) {\n let body = `## Description\\n\\n${issue.description}\\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 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 body += `---\\n\\n`;\n body += `*This issue was automatically created from a review session.*`;\n return body;\n}\n// Helper function to format results with created GitHub issues\nfunction formatReviewResultsWithIssues(result, createdIssues) {\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 if (result.issues && result.issues.length > 0) {\n output += `đ Issues Identified:\\n\\n`;\n result.issues.forEach((issue, index)=>{\n const priorityEmoji = issue.priority === 'high' ? 'đ´' : issue.priority === 'medium' ? 'đĄ' : 'đĸ';\n const categoryEmoji = issue.category === 'ui' ? 'đ¨' : issue.category === 'content' ? 'đ' : issue.category === 'functionality' ? 'âī¸' : issue.category === 'accessibility' ? 'âŋ' : issue.category === 'performance' ? 'âĄ' : 'đ§';\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 // 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 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 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 output += `đ Next Steps: Review the created GitHub issues and prioritize them in your development workflow.`;\n return output;\n}\nfunction formatReviewResults(result) {\n let output = `đ Review Results\\n\\n`;\n output += `đ Summary: ${result.summary}\\n`;\n output += `đ Total Issues Found: ${result.totalIssues}\\n\\n`;\n if (result.issues && result.issues.length > 0) {\n output += `đ Issues Identified:\\n\\n`;\n result.issues.forEach((issue, index)=>{\n const priorityEmoji = issue.priority === 'high' ? 'đ´' : issue.priority === 'medium' ? 'đĄ' : 'đĸ';\n const categoryEmoji = issue.category === 'ui' ? 'đ¨' : issue.category === 'content' ? 'đ' : issue.category === 'functionality' ? 'âī¸' : issue.category === 'accessibility' ? 'âŋ' : issue.category === 'performance' ? 'âĄ' : 'đ§';\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 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 output += `đ Next Steps: Review the identified issues and prioritize them for your development workflow.`;\n return output;\n}\n// Handle GitHub issue creation workflow\nconst handleIssueCreation = async (result, senditMode = false)=>{\n const logger = getLogger();\n const createdIssues = [];\n if (!result.issues || result.issues.length === 0) {\n return formatReviewResults(result);\n }\n logger.info(`đ Found ${result.issues.length} issues to potentially create as GitHub issues`);\n for(let i = 0; i < result.issues.length; i++){\n let issue = result.issues[i];\n let shouldCreateIssue = senditMode;\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 // Get user choice\n userChoice = await getUserChoice('\\nWhat would you like to do with this issue?', [\n {\n key: 'c',\n label: 'Create GitHub issue'\n },\n {\n key: 's',\n label: 'Skip this issue'\n },\n {\n key: 'e',\n 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 if (shouldCreateIssue) {\n try {\n logger.info(`đ Creating GitHub issue: \"${issue.title}\"`);\n // Format issue body with additional details\n const issueBody = formatIssueBody(issue);\n // Create labels based on priority and category\n const labels = [\n `priority-${issue.priority}`,\n `category-${issue.category}`,\n 'review'\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 logger.info(`â
Created GitHub issue #${createdIssue.number}: ${createdIssue.html_url}`);\n } catch (error) {\n logger.error(`â Failed to create GitHub issue for \"${issue.title}\": ${error.message}`);\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\nexport { get, handleIssueCreation };\n//# sourceMappingURL=issues.js.map\n","import { getLogger } from './logger.js';\nimport { getOctokit, getRepoDetails } from './github.js';\n\n// Function to truncate overly large content while preserving structure\nconst truncateContent = (content, maxLength = 3000)=>{\n if (content.length <= maxLength) {\n return content;\n }\n const lines = content.split('\\n');\n const truncatedLines = [];\n let currentLength = 0;\n for (const line of lines){\n if (currentLength + line.length + 1 > maxLength) {\n break;\n }\n truncatedLines.push(line);\n currentLength += line.length + 1; // +1 for newline\n }\n truncatedLines.push('');\n truncatedLines.push(`... [TRUNCATED: Original content was ${content.length} characters, showing first ${currentLength}] ...`);\n return truncatedLines.join('\\n');\n};\n// Function to fetch recent releases from GitHub API\nconst findRecentReleaseNotes = async (limit)=>{\n const logger = getLogger();\n const releaseNotes = [];\n if (limit <= 0) {\n return releaseNotes;\n }\n try {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n logger.debug(`Fetching up to ${limit} recent releases from GitHub...`);\n const response = await octokit.repos.listReleases({\n owner,\n repo,\n per_page: Math.min(limit, 100)\n });\n const releases = response.data;\n if (releases.length === 0) {\n logger.debug('No releases found in GitHub repository');\n return releaseNotes;\n }\n for (const release of releases.slice(0, limit)){\n const releaseContent = [\n `# ${release.name || release.tag_name}`,\n `**Tag:** ${release.tag_name}`,\n `**Published:** ${release.published_at}`,\n release.prerelease ? '**Type:** Pre-release' : '**Type:** Release',\n release.draft ? '**Status:** Draft' : '**Status:** Published',\n '',\n release.body || 'No release notes provided'\n ].join('\\n');\n const truncatedContent = truncateContent(releaseContent);\n releaseNotes.push(`=== GitHub Release: ${release.tag_name} ===\\n${truncatedContent}`);\n if (truncatedContent.length < releaseContent.length) {\n logger.debug(`Found release ${release.tag_name} (${truncatedContent.length} characters, truncated from ${releaseContent.length})`);\n } else {\n logger.debug(`Found release ${release.tag_name} (${releaseContent.length} characters)`);\n }\n }\n logger.debug(`Fetched ${releaseNotes.length} releases from GitHub`);\n } catch (error) {\n logger.warn(`Error fetching releases from GitHub API: ${error.message}`);\n // If we have a GitHub API error, we could fall back to checking for local release notes\n // This maintains some backward compatibility\n logger.debug('Falling back to local RELEASE_NOTES.md file...');\n try {\n const fs = await import('fs/promises');\n const content = await fs.readFile('RELEASE_NOTES.md', 'utf-8');\n if (content.trim()) {\n const truncatedContent = truncateContent(content);\n releaseNotes.push(`=== Local RELEASE_NOTES.md ===\\n${truncatedContent}`);\n logger.debug(`Found local release notes (${content.length} characters)`);\n }\n } catch {\n // No local file either, return empty array\n logger.debug('No local RELEASE_NOTES.md file found either');\n }\n }\n return releaseNotes.slice(0, limit);\n};\nconst get = async (options = {})=>{\n const { limit = 3 } = options;\n const releaseNotes = await findRecentReleaseNotes(limit);\n return releaseNotes.join('\\n\\n');\n};\n\nexport { findRecentReleaseNotes, get };\n//# sourceMappingURL=releaseNotes.js.map\n","import { Formatter } from '@riotprompt/riotprompt';\nimport 'dotenv/config';\nimport shellescape from 'shell-escape';\nimport { getDryRunLogger, DEFAULT_MAX_DIFF_BYTES, DEFAULT_EXCLUDED_PATTERNS, Diff, Files, Log, DEFAULT_OUTPUT_DIRECTORY, sanitizeDirection, toAIConfig, createStorageAdapter, createLoggerAdapter, getOutputPath, getTimestampedResponseFilename, getTimestampedRequestFilename, filterContent, getTimestampedCommitFilename, improveContentWithLLM, getLogger, getTimestampedReviewNotesFilename, getTimestampedReviewFilename } from '@eldrforge/core';\nimport { ValidationError, ExternalDependencyError, CommandError, createStorage, checkForFileDependencies as checkForFileDependencies$1, logFileDependencyWarning, logFileDependencySuggestions, FileOperationError } from '@eldrforge/shared';\nimport { run, validateString, safeJsonParse, validatePackageJson, unstageAll, stageFiles, verifyStagedFiles, runSecure } from '@eldrforge/git-tools';\nimport { getRecentClosedIssuesForCommit, handleIssueCreation, getReleaseNotesContent, getIssuesContent } from '@eldrforge/github-tools';\nimport { runAgenticCommit, requireTTY, generateReflectionReport, getUserChoice, STANDARD_CHOICES, getLLMFeedbackInEditor, editContentInEditor, createCompletionWithRetry, createCommitPrompt, createReviewPrompt, createCompletion } from '@eldrforge/ai-service';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport os from 'os';\nimport { spawn } from 'child_process';\n\n// Helper function to read context files\nasync function readContextFiles(contextFiles, logger) {\n if (!contextFiles || contextFiles.length === 0) {\n return '';\n }\n const storage = createStorage();\n const contextParts = [];\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) {\n logger.warn(`Failed to read context file ${filePath}: ${error.message}`);\n }\n }\n return contextParts.join('\\n---\\n\\n');\n}\n// Helper function to generate self-reflection output using observability module\nasync function generateSelfReflection(agenticResult, outputDirectory, storage, logger) {\n try {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('.')[0];\n const reflectionPath = getOutputPath(outputDirectory, `agentic-reflection-commit-${timestamp}.md`);\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 // Save the report to output directory\n await storage.writeFile(reflectionPath, report, 'utf8');\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)=>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 } catch (error) {\n logger.warn('Failed to generate self-reflection output: %s', error.message);\n logger.debug('Self-reflection error details:', error);\n }\n}\n// Helper function to get current version from package.json\nasync function getCurrentVersion(storage) {\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// Helper function to edit commit message using editor\nasync function editCommitMessageInteractively(commitMessage) {\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 const result = await editContentInEditor(commitMessage, templateLines, '.txt');\n return result.content;\n}\n// Helper function to improve commit message using LLM\nasync function improveCommitMessageWithLLM(commitMessage, runConfig, promptConfig, promptContext, outputDirectory, diffContent) {\n // Get user feedback on what to improve using the editor\n const userFeedback = await getLLMFeedbackInEditor('commit message', commitMessage);\n // Create AI config from kodrdriv config\n const aiConfig = toAIConfig(runConfig);\n const aiStorageAdapter = createStorageAdapter(outputDirectory);\n const aiLogger = createLoggerAdapter(false);\n const improvementConfig = {\n contentType: 'commit message',\n createImprovedPrompt: async (promptConfig, currentMessage, promptContext)=>{\n var _aiConfig_commands_commit, _aiConfig_commands;\n const improvementPromptContent = {\n diffContent: diffContent,\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 = aiConfig.commands) === null || _aiConfig_commands === void 0 ? void 0 : (_aiConfig_commands_commit = _aiConfig_commands.commit) === null || _aiConfig_commands_commit === void 0 ? void 0 : _aiConfig_commands_commit.model) || aiConfig.model || 'gpt-4o-mini';\n return Formatter.create({\n logger: getDryRunLogger(false)\n }).formatPrompt(modelToUse, prompt);\n },\n callLLM: async (request, runConfig, outputDirectory)=>{\n var _aiConfig_commands_commit, _aiConfig_commands, _aiConfig_commands_commit1, _aiConfig_commands1;\n return await createCompletionWithRetry(request.messages, {\n model: ((_aiConfig_commands = aiConfig.commands) === null || _aiConfig_commands === void 0 ? void 0 : (_aiConfig_commands_commit = _aiConfig_commands.commit) === null || _aiConfig_commands_commit === void 0 ? void 0 : _aiConfig_commands_commit.model) || aiConfig.model,\n openaiReasoning: ((_aiConfig_commands1 = aiConfig.commands) === null || _aiConfig_commands1 === void 0 ? void 0 : (_aiConfig_commands_commit1 = _aiConfig_commands1.commit) === null || _aiConfig_commands_commit1 === void 0 ? void 0 : _aiConfig_commands_commit1.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 return await improveContentWithLLM(commitMessage, runConfig, promptConfig, promptContext, outputDirectory, improvementConfig);\n}\n// Interactive feedback loop for commit message\nasync function handleInteractiveCommitFeedback(commitMessage, runConfig, promptConfig, promptContext, outputDirectory, storage, diffContent, hasActualChanges, cached) {\n var _runConfig_commit, _runConfig_commit1;\n const logger = getDryRunLogger(false);\n let currentMessage = commitMessage;\n // Determine what the confirm action will do based on configuration\n const senditEnabled = (_runConfig_commit = runConfig.commit) === null || _runConfig_commit === void 0 ? void 0 : _runConfig_commit.sendit;\n const willActuallyCommit = senditEnabled && hasActualChanges && cached;\n // Create dynamic confirm choice based on configuration\n const isAmendMode = (_runConfig_commit1 = runConfig.commit) === null || _runConfig_commit1 === void 0 ? void 0 : _runConfig_commit1.amend;\n const confirmChoice = willActuallyCommit ? {\n key: 'c',\n label: isAmendMode ? 'Amend last commit with this message (sendit enabled)' : 'Commit changes with this message (sendit enabled)'\n } : {\n key: 'c',\n 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 // 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 // Get user choice\n const userChoice = await getUserChoice('\\nWhat would you like to do with this commit message?', [\n confirmChoice,\n STANDARD_CHOICES.EDIT,\n STANDARD_CHOICES.SKIP,\n STANDARD_CHOICES.IMPROVE\n ], {\n nonTtyErrorSuggestions: [\n 'Use --sendit flag to auto-commit without review'\n ]\n });\n switch(userChoice){\n case 'c':\n return {\n action: 'commit',\n finalMessage: currentMessage\n };\n case 'e':\n try {\n currentMessage = await editCommitMessageInteractively(currentMessage);\n } catch (error) {\n logger.error(`Failed to edit commit message: ${error.message}`);\n // Continue the loop to show options again\n }\n break;\n case 's':\n return {\n action: 'skip',\n finalMessage: currentMessage\n };\n case 'i':\n try {\n currentMessage = await improveCommitMessageWithLLM(currentMessage, runConfig, promptConfig, promptContext, outputDirectory, diffContent);\n } catch (error) {\n logger.error(`Failed to improve commit message: ${error.message}`);\n // Continue the loop to show options again\n }\n break;\n }\n }\n}\n// Helper function to check if there are any commits in the repository\nconst hasCommits = async ()=>{\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// Helper function to push the commit\nconst pushCommit = async (pushConfig, logger, isDryRun)=>{\n if (!pushConfig) {\n return; // No push requested\n }\n // Determine the remote to push to\n let remote = 'origin';\n if (typeof pushConfig === 'string') {\n remote = pushConfig;\n }\n const pushCommand = `git push ${remote}`;\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) {\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// Simplified cached determination with single check\nconst determineCachedState = async (config)=>{\n var _config_commit, _config_commit1, _config_commit2;\n // If amend is used, we use staged changes (since we're amending the last commit)\n if ((_config_commit = config.commit) === null || _config_commit === void 0 ? void 0 : _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 // If add is used, we always look at staged changes after add\n if ((_config_commit1 = config.commit) === null || _config_commit1 === void 0 ? void 0 : _config_commit1.add) {\n return true;\n }\n // If explicitly set, use that value\n if (((_config_commit2 = config.commit) === null || _config_commit2 === void 0 ? void 0 : _config_commit2.cached) !== undefined) {\n return config.commit.cached;\n }\n // Otherwise, check if there are staged changes\n return await Diff.hasStagedChanges();\n};\n// Single validation of sendit + cached state\nconst validateSenditState = (config, cached, isDryRun, logger)=>{\n var _config_commit;\n if (((_config_commit = config.commit) === null || _config_commit === void 0 ? void 0 : _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// Better file save handling with fallbacks\nconst saveCommitMessage = async (outputDirectory, summary, storage, logger)=>{\n const timestampedFilename = getTimestampedCommitFilename();\n const primaryPath = getOutputPath(outputDirectory, timestampedFilename);\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) {\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 // 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) {\n logger.warn('Failed to save to output directory fallback: %s', outputError.message);\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) {\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 * Interactive review of a single split before committing\n */ async function reviewSplitInteractively(split, index, total, logger) {\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)=>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 const choices = [\n {\n key: 'c',\n label: 'Commit with this message'\n },\n {\n key: 'e',\n label: 'Edit message before committing'\n },\n {\n key: 's',\n label: 'Skip this commit'\n },\n {\n key: 't',\n label: 'Stop - no more commits'\n }\n ];\n const choice = await getUserChoice('What would you like to do?', choices, {\n nonTtyErrorSuggestions: [\n '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 {\n action: 'commit',\n modifiedMessage: edited\n };\n } else if (choice === 'c') {\n return {\n action: 'commit'\n };\n } else if (choice === 's') {\n return {\n action: 'skip'\n };\n } else {\n return {\n action: 'stop'\n };\n }\n}\n/**\n * Create a single commit from a split\n */ async function createSingleSplitCommit(split, commitMessage, isDryRun, logger) {\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 // Verify files were staged correctly\n const verification = await verifyStagedFiles(split.files);\n if (!verification.allPresent) {\n throw new ValidationError(`Stage verification failed. Missing: ${verification.missing.join(', ')}. ` + `Unexpected: ${verification.unexpected.join(', ')}`);\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([\n validatedMessage\n ]);\n await run(`git commit -m ${escapedMessage}`);\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 logger.debug(`Created commit: ${sha}`);\n return sha;\n }\n}\n/**\n * Execute a series of split commits\n */ async function executeSplitCommits(options) {\n const { splits, isDryRun, interactive, logger} = options;\n const result = {\n success: false,\n commitsCreated: 0,\n commits: [],\n skipped: 0\n };\n try {\n logger.debug('Preparing to create split commits...');\n logger.info('');\n logger.info('â'.repeat(80));\n logger.info(`đ Creating ${splits.length} commits from staged changes`);\n logger.info('â'.repeat(80));\n // Process each split\n for(let i = 0; i < splits.length; i++){\n const split = splits[i];\n logger.info('');\n logger.info(`Processing commit ${i + 1} of ${splits.length}...`);\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 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 try {\n // Unstage everything first\n if (!isDryRun) {\n await unstageAll();\n }\n // Create this split's commit\n const sha = await createSingleSplitCommit(split, commitMessage, isDryRun, logger);\n result.commits.push({\n message: commitMessage,\n files: split.files,\n sha\n });\n result.commitsCreated++;\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 === null || sha === void 0 ? void 0 : sha.substring(0, 7)} - ${commitMessage.split('\\n')[0]}`);\n }\n } catch (error) {\n logger.error(`Failed to create commit ${i + 1}: ${error.message}`);\n logger.info(`Successfully created ${result.commitsCreated} commits before error`);\n // Re-stage remaining files for user\n if (!isDryRun) {\n const remainingFiles = splits.slice(i).flatMap((s)=>s.files);\n try {\n await stageFiles(remainingFiles);\n logger.info(`Remaining ${remainingFiles.length} files are staged for manual commit`);\n } catch (restageError) {\n logger.error(`Failed to re-stage remaining files: ${restageError.message}`);\n }\n }\n result.success = false;\n result.error = error;\n return result;\n }\n }\n result.success = true;\n return result;\n } catch (error) {\n logger.error(`Split commit process failed: ${error.message}`);\n result.success = false;\n result.error = error;\n return result;\n }\n}\n/**\n * Format a summary message for split commits\n */ function formatSplitCommitSummary(result) {\n const lines = [];\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 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 lines.push('');\n lines.push('â'.repeat(80));\n return lines.join('\\n');\n}\nconst executeInternal$2 = async (runConfig)=>{\n var _ref, _runConfig_excludedPatterns;\n var _runConfig_commit, _runConfig_commit1, _runConfig_commit2, _runConfig_commit3, _runConfig_commit4, _runConfig_commit5, _runConfig_commit6, _aiConfig_commands_commit, _aiConfig_commands, _runConfig_commit7, _aiConfig_commands_commit1, _aiConfig_commands1, _runConfig_commit8, _runConfig_commit9, _runConfig_commit10, _runConfig_commit11, _runConfig_commit12, _runConfig_commit13, _runConfig_commit14;\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n // Track if user explicitly chose to skip in interactive mode\n let userSkippedCommit = false;\n if ((_runConfig_commit = runConfig.commit) === null || _runConfig_commit === void 0 ? void 0 : _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 // Determine cached state with single, clear logic\n const cached = await determineCachedState(runConfig);\n // Validate sendit state early - now returns boolean instead of throwing\n validateSenditState(runConfig, cached, isDryRun, logger);\n let diffContent = '';\n const maxDiffBytes = (_ref = (_runConfig_commit1 = runConfig.commit) === null || _runConfig_commit1 === void 0 ? void 0 : _runConfig_commit1.maxDiffBytes) !== null && _ref !== void 0 ? _ref : DEFAULT_MAX_DIFF_BYTES;\n const options = {\n cached,\n excludedPatterns: (_runConfig_excludedPatterns = runConfig.excludedPatterns) !== null && _runConfig_excludedPatterns !== void 0 ? _runConfig_excludedPatterns : DEFAULT_EXCLUDED_PATTERNS,\n maxDiffBytes\n };\n const diff = await Diff.create(options);\n diffContent = await diff.get();\n // Check if there are actually any changes in the diff\n let hasActualChanges = diffContent.trim().length > 0;\n // If no changes found with current patterns, check for critical excluded files\n if (!hasActualChanges) {\n const criticalChanges = await Diff.hasCriticalExcludedChanges();\n if (criticalChanges.hasChanges) {\n var _runConfig_commit15;\n logger.info('CRITICAL_FILES_DETECTED: No changes with exclusion patterns, but critical files modified | Files: %s | Action: May need to include critical files', criticalChanges.files.join(', '));\n if (((_runConfig_commit15 = runConfig.commit) === null || _runConfig_commit15 === void 0 ? void 0 : _runConfig_commit15.sendit) && !isDryRun) {\n var _runConfig_excludedPatterns1;\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_excludedPatterns1 = runConfig.excludedPatterns) !== null && _runConfig_excludedPatterns1 !== void 0 ? _runConfig_excludedPatterns1 : DEFAULT_EXCLUDED_PATTERNS);\n const updatedOptions = {\n ...options,\n excludedPatterns: minimalPatterns\n };\n const updatedDiff = await Diff.create(updatedOptions);\n diffContent = await updatedDiff.get();\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 var _runConfig_excludedPatterns2;\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', ((_runConfig_excludedPatterns2 = runConfig.excludedPatterns) !== null && _runConfig_excludedPatterns2 !== void 0 ? _runConfig_excludedPatterns2 : DEFAULT_EXCLUDED_PATTERNS).filter((p)=>!criticalChanges.files.some((f)=>p.includes(f.split('/').pop() || ''))).map((p)=>`\"${p}\"`).join(' '));\n logger.warn('Or run with --sendit to automatically include critical files.');\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 var _runConfig_commit16;\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 if (((_runConfig_commit16 = runConfig.commit) === null || _runConfig_commit16 === void 0 ? void 0 : _runConfig_commit16.sendit) && !isDryRun) {\n logger.warn('No changes detected to commit. Skipping commit operation.');\n return 'No changes to commit.';\n } else {\n var _runConfig_excludedPatterns3;\n logger.info('NO_DIFF_FALLBACK: No diff content available | Action: Attempting to generate commit message from file content | Strategy: fallback');\n // Create file content collector as fallback\n const fileOptions = {\n excludedPatterns: (_runConfig_excludedPatterns3 = runConfig.excludedPatterns) !== null && _runConfig_excludedPatterns3 !== void 0 ? _runConfig_excludedPatterns3 : DEFAULT_EXCLUDED_PATTERNS,\n maxTotalBytes: maxDiffBytes * 5,\n workingDirectory: process.cwd()\n };\n const files = await Files.create(fileOptions);\n const fileContent = await files.get();\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 hasActualChanges = true; // We have content to work with\n } else {\n var _runConfig_commit17;\n if ((_runConfig_commit17 = runConfig.commit) === null || _runConfig_commit17 === void 0 ? void 0 : _runConfig_commit17.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 const logOptions = {\n limit: (_runConfig_commit2 = runConfig.commit) === null || _runConfig_commit2 === void 0 ? void 0 : _runConfig_commit2.messageLimit\n };\n const log = await Log.create(logOptions);\n const logContext = await log.get();\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 // 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) {\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 const promptConfig = {\n overridePaths: runConfig.discoveredConfigDirs || [],\n overrides: runConfig.overrides || false\n };\n const userDirection = sanitizeDirection((_runConfig_commit3 = runConfig.commit) === null || _runConfig_commit3 === void 0 ? void 0 : _runConfig_commit3.direction);\n if (userDirection) {\n logger.debug('Using user direction: %s', userDirection);\n }\n // Create adapters for ai-service\n const aiConfig = toAIConfig(runConfig);\n const aiStorageAdapter = createStorageAdapter(outputDirectory);\n const aiLogger = createLoggerAdapter(isDryRun);\n // Read context from files if provided\n const contextFromFiles = await readContextFiles((_runConfig_commit4 = runConfig.commit) === null || _runConfig_commit4 === void 0 ? void 0 : _runConfig_commit4.contextFiles, logger);\n // Combine file context with existing context\n const combinedContext = [\n (_runConfig_commit5 = runConfig.commit) === null || _runConfig_commit5 === void 0 ? void 0 : _runConfig_commit5.context,\n contextFromFiles\n ].filter(Boolean).join('\\n\\n---\\n\\n');\n // Define promptContext for use in interactive improvements\n const promptContext = {\n logContext,\n context: combinedContext || undefined,\n directories: runConfig.contextDirectories\n };\n // Announce self-reflection if enabled\n if ((_runConfig_commit6 = runConfig.commit) === null || _runConfig_commit6 === void 0 ? void 0 : _runConfig_commit6.selfReflection) {\n logger.info('đ Self-reflection enabled - detailed analysis will be generated');\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)=>f.trim().length > 0);\n logger.debug('Changed files for analysis: %d files', changedFiles.length);\n // Run agentic commit generation\n const agenticResult = await runAgenticCommit({\n changedFiles,\n diffContent,\n userDirection,\n logContext,\n model: ((_aiConfig_commands = aiConfig.commands) === null || _aiConfig_commands === void 0 ? void 0 : (_aiConfig_commands_commit = _aiConfig_commands.commit) === null || _aiConfig_commands_commit === void 0 ? void 0 : _aiConfig_commands_commit.model) || aiConfig.model,\n maxIterations: ((_runConfig_commit7 = runConfig.commit) === null || _runConfig_commit7 === void 0 ? void 0 : _runConfig_commit7.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_commands1 = aiConfig.commands) === null || _aiConfig_commands1 === void 0 ? void 0 : (_aiConfig_commands_commit1 = _aiConfig_commands1.commit) === null || _aiConfig_commands_commit1 === void 0 ? void 0 : _aiConfig_commands_commit1.reasoning) || aiConfig.reasoning\n });\n const iterations = agenticResult.iterations || 0;\n const toolCalls = agenticResult.toolCallsExecuted || 0;\n logger.info(`đ Analysis complete: ${iterations} iterations, ${toolCalls} tool calls`);\n // Generate self-reflection output if enabled\n if ((_runConfig_commit8 = runConfig.commit) === null || _runConfig_commit8 === void 0 ? void 0 : _runConfig_commit8.selfReflection) {\n await generateSelfReflection(agenticResult, outputDirectory, storage, logger);\n }\n // Check for suggested splits\n if (agenticResult.suggestedSplits.length > 1 && ((_runConfig_commit9 = runConfig.commit) === null || _runConfig_commit9 === void 0 ? void 0 : _runConfig_commit9.allowCommitSplitting)) {\n var _runConfig_commit18;\n logger.info('\\nđ AI suggests splitting this into %d commits:', agenticResult.suggestedSplits.length);\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 // NEW: Check if auto-split is enabled (defaults to true if not specified)\n const autoSplitEnabled = ((_runConfig_commit18 = runConfig.commit) === null || _runConfig_commit18 === void 0 ? void 0 : _runConfig_commit18.autoSplit) !== false; // Default to true\n if (autoSplitEnabled) {\n var _runConfig_commit19, _runConfig_commit20;\n logger.info('\\nđ Auto-split enabled - creating separate commits...\\n');\n const splitResult = await executeSplitCommits({\n splits: agenticResult.suggestedSplits,\n isDryRun,\n interactive: !!(((_runConfig_commit19 = runConfig.commit) === null || _runConfig_commit19 === void 0 ? void 0 : _runConfig_commit19.interactive) && !((_runConfig_commit20 = runConfig.commit) === null || _runConfig_commit20 === void 0 ? void 0 : _runConfig_commit20.sendit)),\n logger});\n if (splitResult.success) {\n var _runConfig_commit21;\n // Push if requested (all commits)\n if (((_runConfig_commit21 = runConfig.commit) === null || _runConfig_commit21 === void 0 ? void 0 : _runConfig_commit21.push) && !isDryRun) {\n await pushCommit(runConfig.commit.push, logger, isDryRun);\n }\n return formatSplitCommitSummary(splitResult);\n } else {\n var _splitResult_error;\n const errorMessage = ((_splitResult_error = splitResult.error) === null || _splitResult_error === void 0 ? void 0 : _splitResult_error.message) || 'Unknown error';\n throw new CommandError(`Failed to create split commits: ${errorMessage}`, 'SPLIT_COMMIT_FAILED', false, splitResult.error);\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 const rawSummary = agenticResult.commitMessage;\n // Apply stop-context filtering to commit message\n const filterResult = filterContent(rawSummary, runConfig.stopContext);\n const summary = filterResult.filtered;\n // Save timestamped copy of commit message with better error handling\n await saveCommitMessage(outputDirectory, summary, storage, logger);\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_commit10 = runConfig.commit) === null || _runConfig_commit10 === void 0 ? void 0 : _runConfig_commit10.sendit) && hasActualChanges && cached;\n if (willCreateCommit && !((_runConfig_commit11 = runConfig.commit) === null || _runConfig_commit11 === void 0 ? void 0 : _runConfig_commit11.skipFileCheck) && !isDryRun) {\n logger.debug('Checking for file: dependencies before commit operation...');\n try {\n const fileDependencyIssues = await checkForFileDependencies$1(storage, process.cwd());\n if (fileDependencyIssues.length > 0) {\n var _runConfig_commit22;\n logger.error('đĢ COMMIT BLOCKED: Found file: dependencies that should not be committed!');\n logger.error('');\n logFileDependencyWarning(fileDependencyIssues, 'commit');\n logFileDependencySuggestions(true);\n logger.error('Generated commit message was:');\n logger.error('%s', summary);\n logger.error('');\n if ((_runConfig_commit22 = runConfig.commit) === null || _runConfig_commit22 === void 0 ? void 0 : _runConfig_commit22.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 throw new ValidationError('Found file: dependencies that should not be committed. Use --skip-file-check to bypass.');\n }\n logger.debug('â
No file: dependencies found, proceeding with commit');\n } catch (error) {\n logger.warn('Warning: Could not check for file: dependencies: %s', error.message);\n logger.warn('Proceeding with commit...');\n }\n } else if (((_runConfig_commit12 = runConfig.commit) === null || _runConfig_commit12 === void 0 ? void 0 : _runConfig_commit12.skipFileCheck) && willCreateCommit) {\n logger.warn('â ī¸ Skipping file: dependency check as requested');\n }\n // Handle interactive mode\n if (((_runConfig_commit13 = runConfig.commit) === null || _runConfig_commit13 === void 0 ? void 0 : _runConfig_commit13.interactive) && !isDryRun) {\n var _runConfig_commit23;\n requireTTY('Interactive mode requires a terminal. Use --sendit or --dry-run instead.');\n const interactiveResult = await handleInteractiveCommitFeedback(summary, runConfig, promptConfig, promptContext, outputDirectory, storage, diffContent, hasActualChanges, cached);\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 // User chose to commit - check if sendit is enabled to determine what action to take\n const senditEnabled = (_runConfig_commit23 = runConfig.commit) === null || _runConfig_commit23 === void 0 ? void 0 : _runConfig_commit23.sendit;\n const willActuallyCommit = senditEnabled && hasActualChanges && cached;\n if (willActuallyCommit) {\n var _runConfig_commit24;\n const commitAction = ((_runConfig_commit24 = runConfig.commit) === null || _runConfig_commit24 === void 0 ? void 0 : _runConfig_commit24.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 var _runConfig_commit25, _runConfig_commit26;\n const validatedSummary = validateString(interactiveResult.finalMessage, 'commit summary');\n const escapedSummary = shellescape([\n validatedSummary\n ]);\n const commitCommand = ((_runConfig_commit25 = runConfig.commit) === null || _runConfig_commit25 === void 0 ? void 0 : _runConfig_commit25.amend) ? `git commit --amend -m ${escapedSummary}` : `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 // Push if requested\n await pushCommit((_runConfig_commit26 = runConfig.commit) === null || _runConfig_commit26 === void 0 ? void 0 : _runConfig_commit26.push, logger, isDryRun);\n } catch (error) {\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 return interactiveResult.finalMessage;\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 if ((_runConfig_commit14 = runConfig.commit) === null || _runConfig_commit14 === void 0 ? void 0 : _runConfig_commit14.sendit) {\n if (isDryRun) {\n var _runConfig_commit27, _runConfig_commit28;\n logger.info('Would commit with message: \\n\\n%s\\n\\n', summary);\n const commitAction = ((_runConfig_commit27 = runConfig.commit) === null || _runConfig_commit27 === void 0 ? void 0 : _runConfig_commit27.amend) ? 'git commit --amend -m <generated-message>' : 'git commit -m <generated-message>';\n logger.info('Would execute: %s', commitAction);\n // Show push command in dry run if requested\n if ((_runConfig_commit28 = runConfig.commit) === null || _runConfig_commit28 === void 0 ? void 0 : _runConfig_commit28.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 var _runConfig_commit29;\n const commitAction = ((_runConfig_commit29 = runConfig.commit) === null || _runConfig_commit29 === void 0 ? void 0 : _runConfig_commit29.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 var _runConfig_commit30, _runConfig_commit31;\n const validatedSummary = validateString(summary, 'commit summary');\n const escapedSummary = shellescape([\n validatedSummary\n ]);\n const commitCommand = ((_runConfig_commit30 = runConfig.commit) === null || _runConfig_commit30 === void 0 ? void 0 : _runConfig_commit30.amend) ? `git commit --amend -m ${escapedSummary}` : `git commit -m ${escapedSummary}`;\n await run(commitCommand);\n logger.info('Commit successful!');\n // Push if requested\n await pushCommit((_runConfig_commit31 = runConfig.commit) === null || _runConfig_commit31 === void 0 ? void 0 : _runConfig_commit31.push, logger, isDryRun);\n } catch (error) {\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 return summary;\n};\nconst execute$3 = async (runConfig)=>{\n try {\n return await executeInternal$2(runConfig);\n } catch (error) {\n // Import getLogger for error handling\n const { getLogger } = await import('@eldrforge/core');\n const standardLogger = getLogger();\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.message}`);\n } else if (error.cause) {\n standardLogger.debug(`Caused by: ${error.cause}`);\n }\n throw error;\n }\n // Unexpected errors\n standardLogger.error(`commit encountered unexpected error: ${error.message}`);\n throw error;\n }\n};\n\nconst logger = getLogger();\n// Cache file to store test run timestamps per package\nconst TEST_CACHE_FILE = '.kodrdriv-test-cache.json';\n/**\n * Load test cache from disk\n */ async function loadTestCache(packageDir) {\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 * Save test cache to disk\n */ async function saveTestCache(packageDir, cache) {\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) {\n logger.debug(`Failed to save test cache: ${error.message}`);\n }\n}\n/**\n * Get the current git commit hash\n */ async function getCurrentCommitHash(packageDir) {\n try {\n const { stdout } = await runSecure('git', [\n 'rev-parse',\n 'HEAD'\n ], {\n cwd: packageDir\n });\n return stdout.trim();\n } catch {\n return null;\n }\n}\n/**\n * Check if source files have changed since the last test run\n */ async function hasSourceFilesChanged(packageDir, lastCommitHash) {\n if (!lastCommitHash) {\n return {\n changed: true,\n 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 {\n changed: true,\n reason: 'Not in a git repository'\n };\n }\n // If commit hash changed, files definitely changed\n if (currentCommitHash !== lastCommitHash) {\n return {\n changed: true,\n 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', [\n 'status',\n '--porcelain'\n ], {\n cwd: packageDir\n });\n const changedFiles = stdout.split('\\n').filter((line)=>line.trim()).map((line)=>line.substring(3).trim()).filter((file)=>{\n // Only consider source files, not build artifacts or config files\n const ext = path.extname(file);\n return(// TypeScript/JavaScript source files\n [\n '.ts',\n '.tsx',\n '.js',\n '.jsx'\n ].includes(ext) || // Test files\n file.includes('.test.') || file.includes('.spec.') || // Config files that affect build/test\n [\n 'tsconfig.json',\n 'vite.config.ts',\n 'vitest.config.ts',\n 'package.json'\n ].includes(path.basename(file)));\n });\n if (changedFiles.length > 0) {\n return {\n changed: true,\n reason: `Uncommitted changes in: ${changedFiles.slice(0, 3).join(', ')}${changedFiles.length > 3 ? '...' : ''}`\n };\n }\n return {\n changed: false,\n reason: 'No source file changes detected'\n };\n } catch (error) {\n logger.debug(`Error checking for source file changes: ${error.message}`);\n // Conservative: assume changed if we can't verify\n return {\n changed: true,\n 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 */ async function isCleanNeeded(packageDir) {\n const storage = createStorage();\n const distPath = path.join(packageDir, 'dist');\n try {\n // Check if dist directory exists\n const distExists = await storage.exists('dist');\n if (!distExists) {\n return {\n needed: false,\n 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 // 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', [\n 'ls-files'\n ], {\n cwd: packageDir\n });\n const files = trackedFiles.split('\\n').filter(Boolean);\n // Check if any source files are newer than dist\n for (const file of files){\n const ext = path.extname(file);\n if (![\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.json'\n ].includes(ext)) {\n continue;\n }\n // Skip dist files\n if (file.startsWith('dist/')) {\n continue;\n }\n try {\n const filePath = path.join(packageDir, file);\n const fileStats = await fs.stat(filePath);\n if (fileStats.mtimeMs > distMtime) {\n return {\n needed: true,\n reason: `${file} is newer than dist directory`\n };\n }\n } catch {\n continue;\n }\n }\n return {\n needed: false,\n reason: 'dist directory is up to date with source files'\n };\n } catch (error) {\n // If git check fails, fall back to checking common source directories\n logger.debug(`Git-based check failed, using fallback: ${error.message}`);\n const sourceDirs = [\n 'src',\n 'tests'\n ];\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 {\n needed: true,\n reason: `${dir} directory is newer than dist`\n };\n }\n } catch {\n continue;\n }\n }\n // Conservative: if we can't verify, assume clean is needed\n return {\n needed: true,\n reason: 'Could not verify dist freshness, cleaning to be safe'\n };\n }\n } catch (error) {\n logger.debug(`Error checking if clean is needed: ${error.message}`);\n // Conservative: assume clean is needed if we can't check\n return {\n needed: true,\n 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 */ async function isTestNeeded(packageDir) {\n try {\n // Load test cache\n const cache = await loadTestCache(packageDir);\n const cacheKey = packageDir;\n // Check if we have a cached test run for this package\n const cached = cache[cacheKey];\n if (!cached) {\n return {\n needed: true,\n 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 {\n needed: true,\n reason: changeCheck.reason\n };\n }\n return {\n needed: false,\n reason: 'No source file changes since last test run'\n };\n } catch (error) {\n logger.debug(`Error checking if test is needed: ${error.message}`);\n // Conservative: assume test is needed if we can't check\n return {\n needed: true,\n reason: `Could not verify: ${error.message}`\n };\n }\n}\n/**\n * Record that tests were run for this package\n */ async function recordTestRun(packageDir) {\n try {\n const cache = await loadTestCache(packageDir);\n const cacheKey = packageDir;\n const commitHash = await getCurrentCommitHash(packageDir);\n cache[cacheKey] = {\n lastTestRun: Date.now(),\n lastCommitHash: commitHash || 'unknown'\n };\n await saveTestCache(packageDir, cache);\n } catch (error) {\n logger.debug(`Failed to record test run: ${error.message}`);\n }\n}\n/**\n * Optimize a precommit command by skipping unnecessary steps\n * Returns the optimized command and information about what was skipped\n */ async function optimizePrecommitCommand(packageDir, originalCommand, options = {}) {\n const { skipClean = true, skipTest = true } = options;\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 let optimizedCommand = originalCommand;\n const skipped = {\n clean: false,\n test: false\n };\n const reasons = {};\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.replace(/npm\\s+run\\s+clean\\s+&&\\s*/g, '').replace(/npm\\s+run\\s+clean\\s+/g, '').replace(/\\s*&&\\s*npm\\s+run\\s+clean/g, '').trim();\n skipped.clean = true;\n reasons.clean = cleanCheck.reason;\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.replace(/\\s*&&\\s*npm\\s+run\\s+test\\s*/g, '').replace(/\\s*&&\\s*npm\\s+run\\s+test$/g, '').replace(/npm\\s+run\\s+test\\s+&&\\s*/g, '').trim();\n skipped.test = true;\n reasons.test = testCheck.reason;\n }\n }\n }\n // Clean up any double && or trailing &&\n optimizedCommand = optimizedCommand.replace(/\\s*&&\\s*&&/g, ' && ').replace(/&&\\s*$/, '').trim();\n return {\n optimizedCommand,\n skipped,\n reasons\n };\n}\n\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n// Performance timing helper\nclass PerformanceTimer {\n static start(logger, operation) {\n logger.verbose(`âąī¸ Starting: ${operation}`);\n return new PerformanceTimer(logger);\n }\n end(operation) {\n const duration = Date.now() - this.startTime;\n this.logger.verbose(`âąī¸ Completed: ${operation} (${duration}ms)`);\n return duration;\n }\n constructor(logger){\n _define_property(this, \"startTime\", void 0);\n _define_property(this, \"logger\", void 0);\n this.logger = logger;\n this.startTime = Date.now();\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// Batch read multiple package.json files in parallel\nconst batchReadPackageJsonFiles = async (packageJsonPaths, storage, rootDir)=>{\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, `Batch reading ${packageJsonPaths.length} package.json files`);\n const readPromises = packageJsonPaths.map(async (packageJsonPath)=>{\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 return {\n path: packageJsonPath,\n packageJson,\n relativePath: relativePath || '.'\n };\n } catch (error) {\n logger.debug(`Skipped invalid package.json at ${packageJsonPath}: ${error.message}`);\n return null;\n }\n });\n const results = await Promise.all(readPromises);\n const validResults = results.filter((result)=>result !== null);\n timer.end(`Successfully read ${validResults.length}/${packageJsonPaths.length} package.json files`);\n return validResults;\n};\n// Optimized recursive package.json finder with parallel processing\nconst findAllPackageJsonFiles = async (rootDir, storage)=>{\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Optimized scanning for package.json files');\n const scanForPaths = async (currentDir, depth = 0)=>{\n // Prevent infinite recursion and overly deep scanning\n if (depth > 5) {\n return [];\n }\n try {\n if (!await storage.exists(currentDir) || !await storage.isDirectory(currentDir)) {\n return [];\n }\n const items = await storage.listFiles(currentDir);\n const foundPaths = [];\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 // Process subdirectories in parallel\n const subdirPromises = [];\n for (const item of items){\n if (EXCLUDED_DIRECTORIES.includes(item)) {\n continue;\n }\n const itemPath = path.join(currentDir, item);\n subdirPromises.push((async ()=>{\n try {\n if (await storage.isDirectory(itemPath)) {\n return await scanForPaths(itemPath, depth + 1);\n }\n } catch (error) {\n logger.debug(`Skipped directory ${itemPath}: ${error.message}`);\n }\n return [];\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 return foundPaths;\n } catch (error) {\n logger.debug(`Failed to scan directory ${currentDir}: ${error.message}`);\n return [];\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 // Phase 2: Batch read all package.json files in parallel\n const packageJsonFiles = await batchReadPackageJsonFiles(allPaths, storage, rootDir);\n timer.end(`Found ${packageJsonFiles.length} valid package.json files`);\n return packageJsonFiles;\n};\n// Optimized package scanning with parallel processing\nconst scanDirectoryForPackages = async (rootDir, storage)=>{\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, `Optimized package scanning: ${rootDir}`);\n const packageMap = new Map(); // packageName -> relativePath\n const absoluteRootDir = path.resolve(process.cwd(), rootDir);\n logger.verbose(`Scanning directory for packages: ${absoluteRootDir}`);\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 // 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 // Create batched promises for better performance\n const BATCH_SIZE = 10; // Process directories in batches to avoid overwhelming filesystem\n const batches = [];\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 const processTimer = PerformanceTimer.start(logger, `Processing ${batches.length} batches of directories`);\n for (const batch of batches){\n const batchPromises = batch.map(async (item)=>{\n const itemPath = path.join(absoluteRootDir, item);\n try {\n if (await storage.isDirectory(itemPath)) {\n const packageJsonPath = path.join(itemPath, 'package.json');\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 if (packageJson.name) {\n const relativePath = path.relative(process.cwd(), itemPath);\n return {\n name: packageJson.name,\n path: relativePath\n };\n }\n }\n }\n } catch (error) {\n logger.debug(`Skipped ${itemPath}: ${error.message || error}`);\n }\n return null;\n });\n const batchResults = await Promise.all(batchPromises);\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 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 timer.end(`Found ${packageMap.size} packages in: ${rootDir}`);\n return packageMap;\n};\n// Parallel scope processing for better performance\nconst findPackagesByScope = async (dependencies, scopeRoots, storage)=>{\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Finding packages by scope (optimized)');\n const workspacePackages = new Map();\n logger.silly(`Checking dependencies against scope roots: ${JSON.stringify(scopeRoots)}`);\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 // Filter packages that match the scope\n const matchingPackages = [];\n for (const [packageName, packagePath] of scopePackages){\n if (packageName.startsWith(scope)) {\n matchingPackages.push([\n packageName,\n packagePath\n ]);\n logger.debug(`Registered package: ${packageName} -> ${packagePath}`);\n }\n }\n return {\n scope,\n packages: matchingPackages\n };\n });\n const allScopeResults = await Promise.all(scopePromises);\n // Aggregate all packages from all scopes\n const allPackages = new Map();\n for (const { scope, packages } of allScopeResults){\n for (const [packageName, packagePath] of packages){\n allPackages.set(packageName, packagePath);\n }\n }\n scopeTimer.end(`Scanned ${Object.keys(scopeRoots).length} scope roots, found ${allPackages.size} packages`);\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 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 timer.end(`Found ${workspacePackages.size} packages to link`);\n return workspacePackages;\n};\n// Utility to collect all dependencies from package.json files efficiently\nconst collectAllDependencies = (packageJsonFiles)=>{\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Collecting all dependencies');\n const allDependencies = {};\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 timer.end(`Collected ${Object.keys(allDependencies).length} unique dependencies`);\n return allDependencies;\n};\n// Utility to check for file: dependencies\nconst checkForFileDependencies = (packageJsonFiles)=>{\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Checking for file: dependencies');\n const filesWithFileDepedencies = [];\n for (const { path: packagePath, packageJson, relativePath } of packageJsonFiles){\n const fileDeps = [];\n // Check all dependency types for file: paths\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies\n };\n for (const [name, version] of Object.entries(allDeps)){\n if (version.startsWith('file:')) {\n fileDeps.push(`${name}: ${version}`);\n }\n }\n if (fileDeps.length > 0) {\n filesWithFileDepedencies.push({\n path: relativePath,\n dependencies: fileDeps\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 timer.end(`Checked ${packageJsonFiles.length} files, found ${filesWithFileDepedencies.length} with file: dependencies`);\n};\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 */ const execute$2 = async (runConfig)=>{\n const logger = getLogger();\n const isDryRun = runConfig.dryRun || false;\n const packageDir = process.cwd();\n // Default command: lint -> build -> test (no clean)\n const defaultCommand = 'npm run lint && npm run build && npm run test';\n // Check if package.json has a precommit script\n let commandToRun = defaultCommand;\n try {\n var _packageJson_scripts;\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 // If there's a precommit script, check what it does\n if ((_packageJson_scripts = packageJson.scripts) === null || _packageJson_scripts === void 0 ? void 0 : _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) {\n logger.debug(`Could not read package.json, using default command: ${error.message}`);\n }\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute: ${commandToRun}`);\n return `DRY RUN: Would run precommit checks: ${commandToRun}`;\n }\n // Optimize the command (skip clean/test if unchanged)\n let optimizedCommand = commandToRun;\n let optimizationInfo = null;\n try {\n const optimization = await optimizePrecommitCommand(packageDir, commandToRun);\n optimizedCommand = optimization.optimizedCommand;\n optimizationInfo = {\n skipped: optimization.skipped,\n reasons: optimization.reasons\n };\n if (optimization.skipped.clean || optimization.skipped.test) {\n const skippedParts = [];\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) {\n logger.debug(`Precommit optimization failed: ${error.message}`);\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, {\n 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 // 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) {\n logger.debug(`Failed to record test run: ${error.message}`);\n }\n }\n return `Precommit checks completed successfully in ${seconds}s`;\n } catch (error) {\n timer.end('Precommit checks');\n logger.error(`â Precommit checks failed: ${error.message}`);\n throw error;\n }\n};\n\nconst executeInternal$1 = async (runConfig)=>{\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const storage = createStorage();\n const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\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 logger.info(`CLEAN_STARTING: Removing output directory | Directory: ${outputDirectory} | Action: Delete | Purpose: Clean generated files`);\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) {\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};\nconst execute$1 = async (runConfig)=>{\n try {\n await executeInternal$1(runConfig);\n } catch (error) {\n const logger = getLogger();\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.message}`);\n }\n throw error;\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\n// Utility function to read a review note from a file\nconst readReviewNoteFromFile = async (filePath)=>{\n const logger = getLogger();\n try {\n logger.debug(`Reading review note from file: ${filePath}`);\n const content = await fs.readFile(filePath, 'utf8');\n if (!content.trim()) {\n throw new ValidationError(`Review file is empty: ${filePath}`);\n }\n logger.debug(`Successfully read review note from file: ${filePath} (${content.length} characters)`);\n return content.trim();\n } catch (error) {\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// Utility function to get all review files in a directory\nconst getReviewFilesInDirectory = async (directoryPath)=>{\n const logger = getLogger();\n try {\n logger.debug(`Scanning directory for review files: ${directoryPath}`);\n const entries = await fs.readdir(directoryPath, {\n withFileTypes: true\n });\n // Filter for regular files (not directories) and get full paths\n const files = entries.filter((entry)=>entry.isFile()).map((entry)=>path.join(directoryPath, entry.name)).sort(); // Sort alphabetically\n logger.debug(`Found ${files.length} files in directory: ${directoryPath}`);\n return files;\n } catch (error) {\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// New function for file selection phase\nconst selectFilesForProcessing = async (reviewFiles, senditMode)=>{\n const logger = getLogger();\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 // 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 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 const selectedFiles = [];\n let shouldAbort = false;\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 const choice = await getUserChoice(`Select action for this file:`, [\n {\n key: 'c',\n label: 'Confirm and process'\n },\n {\n key: 's',\n label: 'Skip this file'\n },\n {\n key: 'a',\n label: 'Abort entire review'\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 if (shouldAbort) {\n throw new Error('Review process aborted by user');\n }\n if (selectedFiles.length === 0) {\n throw new Error('No files were selected for processing');\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 return selectedFiles;\n};\n// Safe temp file handling with proper permissions and validation\nconst createSecureTempFile = async ()=>{\n const logger = getLogger();\n const tmpDir = os.tmpdir();\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) {\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 const tmpFilePath = path.join(tmpDir, `kodrdriv_review_${Date.now()}_${Math.random().toString(36).substring(7)}.md`);\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) {\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// Safe file cleanup with proper error handling\nconst cleanupTempFile = async (filePath)=>{\n const logger = getLogger();\n try {\n await fs.unlink(filePath);\n logger.debug(`Cleaned up temp file: ${filePath}`);\n } catch (error) {\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// Editor with optional timeout and proper error handling\nconst openEditorWithTimeout = async (editorCmd, filePath, timeoutMs)=>{\n const logger = getLogger();\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 const child = spawn(editorCmd, [\n filePath\n ], {\n stdio: 'inherit',\n shell: false // Prevent shell injection\n });\n let timeout;\n let timeoutCleared = false;\n const clearTimeoutSafely = ()=>{\n if (timeout && !timeoutCleared) {\n clearTimeout(timeout);\n timeoutCleared = true;\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 // 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 reject(new Error(`Editor '${editorCmd}' timed out after ${timeoutMs}ms. Consider using a different editor or increasing the timeout.`));\n }, timeoutMs);\n }\n child.on('exit', (code, signal)=>{\n clearTimeoutSafely();\n logger.debug(`Editor exited with code ${code}, signal ${signal}`);\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 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// Validate API response format before use\nconst validateReviewResult = (data)=>{\n if (!data || typeof data !== 'object') {\n throw new Error('Invalid API response: expected object, got ' + typeof data);\n }\n if (typeof data.summary !== 'string') {\n throw new Error('Invalid API response: missing or invalid summary field');\n }\n if (typeof data.totalIssues !== 'number' || data.totalIssues < 0) {\n throw new Error('Invalid API response: missing or invalid totalIssues field');\n }\n if (data.issues && !Array.isArray(data.issues)) {\n throw new Error('Invalid API response: issues field must be an array');\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 return data;\n};\n// Enhanced TTY detection with fallback handling\nconst isTTYSafe = ()=>{\n try {\n // Primary check\n if (process.stdin.isTTY === false) {\n return false;\n }\n // Additional checks for edge cases\n if (process.stdin.isTTY === true) {\n return true;\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 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// Safe file write with disk space and permission validation\nconst safeWriteFile = async (filePath, content, encoding = 'utf-8')=>{\n const logger = getLogger();\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 // 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) {\n if (error.code === 'ENOSPC') {\n throw new Error(`Insufficient disk space to write file: ${filePath}`);\n }\n throw error;\n }\n // Write the actual file\n await fs.writeFile(filePath, content, encoding);\n logger.debug(`Successfully wrote file: ${filePath} (${content.length} characters)`);\n } catch (error) {\n logger.error(`Failed to write file ${filePath}: ${error.message}`);\n throw new Error(`Failed to write file ${filePath}: ${error.message}`);\n }\n};\n// Helper function to process a single review note\nconst processSingleReview = async (reviewNote, runConfig, outputDirectory)=>{\n var _runConfig_review, _runConfig_review1, _runConfig_review2, _runConfig_review3, _runConfig_review_context, _runConfig_review4, _runConfig_review5, _aiConfig_commands_review, _aiConfig_commands, _analysisResult_issues;\n const logger = getLogger();\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 = [];\n // Fetch commit history if enabled\n if ((_runConfig_review = runConfig.review) === null || _runConfig_review === void 0 ? void 0 : _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) {\n const errorMsg = `Failed to fetch commit history: ${error.message}`;\n logger.warn(errorMsg);\n contextErrors.push(errorMsg);\n }\n }\n // Fetch recent diffs if enabled\n if ((_runConfig_review1 = runConfig.review) === null || _runConfig_review1 === void 0 ? void 0 : _runConfig_review1.includeRecentDiffs) {\n try {\n var _runConfig_excludedPatterns;\n logger.debug('Fetching recent commit diffs...');\n const basePatterns = (_runConfig_excludedPatterns = runConfig.excludedPatterns) !== null && _runConfig_excludedPatterns !== void 0 ? _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) {\n const errorMsg = `Failed to fetch recent diffs: ${error.message}`;\n logger.warn(errorMsg);\n contextErrors.push(errorMsg);\n }\n }\n // Fetch release notes if enabled\n if ((_runConfig_review2 = runConfig.review) === null || _runConfig_review2 === void 0 ? void 0 : _runConfig_review2.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) {\n const errorMsg = `Failed to fetch release notes: ${error.message}`;\n logger.warn(errorMsg);\n contextErrors.push(errorMsg);\n }\n }\n // Fetch GitHub issues if enabled\n if ((_runConfig_review3 = runConfig.review) === null || _runConfig_review3 === void 0 ? void 0 : _runConfig_review3.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) {\n const errorMsg = `Failed to fetch GitHub issues: ${error.message}`;\n logger.warn(errorMsg);\n contextErrors.push(errorMsg);\n }\n }\n // Report context gathering results\n if (contextErrors.length > 0) {\n var _runConfig_review6;\n logger.warn(`Context gathering completed with ${contextErrors.length} error(s):`);\n contextErrors.forEach((error)=>logger.warn(` - ${error}`));\n // For critical operations, consider failing if too many context sources fail\n const maxContextErrors = ((_runConfig_review6 = runConfig.review) === null || _runConfig_review6 === void 0 ? void 0 : _runConfig_review6.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 // 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_review4 = runConfig.review) === null || _runConfig_review4 === void 0 ? void 0 : (_runConfig_review_context = _runConfig_review4.context) === null || _runConfig_review_context === void 0 ? void 0 : _runConfig_review_context.length) || 0);\n const promptConfig = {\n overridePaths: runConfig.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 const promptContent = {\n notes: reviewNote\n };\n const promptContext = {\n context: (_runConfig_review5 = runConfig.review) === null || _runConfig_review5 === void 0 ? void 0 : _runConfig_review5.context,\n logContext,\n diffContext,\n releaseNotesContext,\n issuesContext\n };\n const prompt = await createReviewPrompt(promptConfig, promptContent, promptContext);\n const modelToUse = ((_aiConfig_commands = aiConfig.commands) === null || _aiConfig_commands === void 0 ? void 0 : (_aiConfig_commands_review = _aiConfig_commands.review) === null || _aiConfig_commands_review === void 0 ? void 0 : _aiConfig_commands_review.model) || aiConfig.model || 'gpt-4o-mini';\n const request = Formatter.create({\n logger\n }).formatPrompt(modelToUse, prompt);\n let analysisResult;\n try {\n var _aiConfig_commands_review1, _aiConfig_commands1, _rawAnalysisResult_issues;\n const rawResult = await createCompletion(request.messages, {\n model: modelToUse,\n openaiReasoning: ((_aiConfig_commands1 = aiConfig.commands) === null || _aiConfig_commands1 === void 0 ? void 0 : (_aiConfig_commands_review1 = _aiConfig_commands1.review) === null || _aiConfig_commands_review1 === void 0 ? void 0 : _aiConfig_commands_review1.reasoning) || aiConfig.reasoning,\n responseFormat: {\n type: 'json_object'\n },\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 // Validate the API response before using it\n const rawAnalysisResult = validateReviewResult(rawResult);\n // Apply stop-context filtering to issues\n analysisResult = {\n ...rawAnalysisResult,\n summary: filterContent(rawAnalysisResult.summary, runConfig.stopContext).filtered,\n issues: (_rawAnalysisResult_issues = rawAnalysisResult.issues) === null || _rawAnalysisResult_issues === void 0 ? void 0 : _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 } catch (error) {\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 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 = analysisResult.issues) === null || _analysisResult_issues === void 0 ? void 0 : _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 // Save timestamped copy of analysis result to output directory\n try {\n const reviewFilename = getTimestampedReviewFilename();\n const reviewPath = getOutputPath(outputDirectory, reviewFilename);\n // Format the analysis result as markdown\n const reviewContent = `# Review Analysis Result\\n\\n` + `## Summary\\n${analysisResult.summary}\\n\\n` + `## Total Issues Found\\n${analysisResult.totalIssues}\\n\\n` + `## Issues\\n\\n${JSON.stringify(analysisResult.issues, null, 2)}\\n\\n` + `---\\n\\n*Analysis completed at ${new Date().toISOString()}*`;\n await safeWriteFile(reviewPath, reviewContent);\n logger.debug('Saved timestamped review analysis: %s', reviewPath);\n } catch (error) {\n logger.warn('Failed to save timestamped review analysis: %s', error.message);\n // Don't fail the entire operation for this\n }\n return analysisResult;\n};\nconst executeInternal = async (runConfig)=>{\n var _runConfig_review, _runConfig_review1, _runConfig_review2, _runConfig_review3, _runConfig_review4, _runConfig_review5, _runConfig_review6, _runConfig_review7, _runConfig_review8, _runConfig_review9, _runConfig_review10, _runConfig_review11, _runConfig_review12, _runConfig_review13, _runConfig_review14, _runConfig_review15, _runConfig_review16, _runConfig_review17, _runConfig_review18;\n const logger = getLogger();\n const isDryRun = runConfig.dryRun || false;\n // Show configuration even in dry-run mode\n logger.debug('Review context configuration:');\n logger.debug(' Include commit history: %s', (_runConfig_review = runConfig.review) === null || _runConfig_review === void 0 ? void 0 : _runConfig_review.includeCommitHistory);\n logger.debug(' Include recent diffs: %s', (_runConfig_review1 = runConfig.review) === null || _runConfig_review1 === void 0 ? void 0 : _runConfig_review1.includeRecentDiffs);\n logger.debug(' Include release notes: %s', (_runConfig_review2 = runConfig.review) === null || _runConfig_review2 === void 0 ? void 0 : _runConfig_review2.includeReleaseNotes);\n logger.debug(' Include GitHub issues: %s', (_runConfig_review3 = runConfig.review) === null || _runConfig_review3 === void 0 ? void 0 : _runConfig_review3.includeGithubIssues);\n logger.debug(' Commit history limit: %d', (_runConfig_review4 = runConfig.review) === null || _runConfig_review4 === void 0 ? void 0 : _runConfig_review4.commitHistoryLimit);\n logger.debug(' Diff history limit: %d', (_runConfig_review5 = runConfig.review) === null || _runConfig_review5 === void 0 ? void 0 : _runConfig_review5.diffHistoryLimit);\n logger.debug(' Release notes limit: %d', (_runConfig_review6 = runConfig.review) === null || _runConfig_review6 === void 0 ? void 0 : _runConfig_review6.releaseNotesLimit);\n logger.debug(' GitHub issues limit: %d', (_runConfig_review7 = runConfig.review) === null || _runConfig_review7 === void 0 ? void 0 : _runConfig_review7.githubIssuesLimit);\n logger.debug(' Sendit mode (auto-create issues): %s', (_runConfig_review8 = runConfig.review) === null || _runConfig_review8 === void 0 ? void 0 : _runConfig_review8.sendit);\n logger.debug(' File: %s', ((_runConfig_review9 = runConfig.review) === null || _runConfig_review9 === void 0 ? void 0 : _runConfig_review9.file) || 'not specified');\n logger.debug(' Directory: %s', ((_runConfig_review10 = runConfig.review) === null || _runConfig_review10 === void 0 ? void 0 : _runConfig_review10.directory) || 'not specified');\n if (isDryRun) {\n var _runConfig_review19, _runConfig_review20, _runConfig_review21, _runConfig_review22, _runConfig_review23;\n if ((_runConfig_review19 = runConfig.review) === null || _runConfig_review19 === void 0 ? void 0 : _runConfig_review19.file) {\n logger.info('DRY RUN: Would read review note from file: %s', runConfig.review.file);\n } else if ((_runConfig_review20 = runConfig.review) === null || _runConfig_review20 === void 0 ? void 0 : _runConfig_review20.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_review21 = runConfig.review) === null || _runConfig_review21 === void 0 ? void 0 : _runConfig_review21.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 logger.info('DRY RUN: Would gather additional context based on configuration above');\n logger.info('DRY RUN: Would analyze note and identify issues');\n if ((_runConfig_review22 = runConfig.review) === null || _runConfig_review22 === void 0 ? void 0 : _runConfig_review22.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 // Show what exclusion patterns would be used in dry-run mode\n if ((_runConfig_review23 = runConfig.review) === null || _runConfig_review23 === void 0 ? void 0 : _runConfig_review23.includeRecentDiffs) {\n var _runConfig_excludedPatterns;\n const basePatterns = (_runConfig_excludedPatterns = runConfig.excludedPatterns) !== null && _runConfig_excludedPatterns !== void 0 ? _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(', ') + (reviewExcluded.length > 15 ? '...' : ''));\n }\n return 'DRY RUN: Review command would analyze note, gather context, and create GitHub issues';\n }\n // Enhanced TTY check with proper error handling\n const isInteractive = isTTYSafe();\n if (!isInteractive && !((_runConfig_review11 = runConfig.review) === null || _runConfig_review11 === void 0 ? void 0 : _runConfig_review11.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 // Get the review note from configuration\n let reviewNote = (_runConfig_review12 = runConfig.review) === null || _runConfig_review12 === void 0 ? void 0 : _runConfig_review12.note;\n let reviewFiles = [];\n // Check if we should process a single file\n if ((_runConfig_review13 = runConfig.review) === null || _runConfig_review13 === void 0 ? void 0 : _runConfig_review13.file) {\n logger.info(`đ Reading review note from file: ${runConfig.review.file}`);\n reviewNote = await readReviewNoteFromFile(runConfig.review.file);\n reviewFiles = [\n runConfig.review.file\n ];\n } else if ((_runConfig_review14 = runConfig.review) === null || _runConfig_review14 === void 0 ? void 0 : _runConfig_review14.directory) {\n var _runConfig_review24;\n logger.info(`đ Processing review files in directory: ${runConfig.review.directory}`);\n reviewFiles = await getReviewFilesInDirectory(runConfig.review.directory);\n if (reviewFiles.length === 0) {\n throw new ValidationError(`No review files found in directory: ${runConfig.review.directory}`);\n }\n logger.info(`đ Found ${reviewFiles.length} files to process`);\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 // If not in sendit mode, explain the two-phase process\n if (!((_runConfig_review24 = runConfig.review) === null || _runConfig_review24 === void 0 ? void 0 : _runConfig_review24.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 } else if ((_runConfig_review15 = runConfig.review) === null || _runConfig_review15 === void 0 ? void 0 : _runConfig_review15.note) {\n reviewNote = runConfig.review.note;\n reviewFiles = [\n 'provided note'\n ];\n } else {\n // Open editor to capture review note\n const editor = process.env.EDITOR || process.env.VISUAL || 'vi';\n let tmpFilePath = null;\n try {\n var _runConfig_review25;\n // Create secure temporary file\n tmpFilePath = await createSecureTempFile();\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 await safeWriteFile(tmpFilePath, templateContent);\n logger.info(`No review note provided â opening ${editor} to capture input...`);\n // Open the editor with optional timeout protection\n const editorTimeout = (_runConfig_review25 = runConfig.review) === null || _runConfig_review25 === void 0 ? void 0 : _runConfig_review25.editorTimeout; // No default timeout - let user take their time\n await openEditorWithTimeout(editor, tmpFilePath, editorTimeout);\n // Read the file back in, stripping comment lines and whitespace.\n const fileContent = (await fs.readFile(tmpFilePath, 'utf8')).split('\\n').filter((line)=>!line.trim().startsWith('#')).join('\\n').trim();\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 reviewNote = fileContent;\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 } catch (error) {\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 reviewFiles = [\n 'editor input'\n ];\n }\n if (!reviewNote || !reviewNote.trim()) {\n throw new ValidationError('No review note provided or captured');\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 const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\n const storage = createStorage();\n await storage.ensureDirectory(outputDirectory);\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) {\n logger.warn('Failed to save review notes: %s', error.message);\n }\n // Phase 1: File selection (only for directory mode)\n let selectedFiles;\n if ((_runConfig_review16 = runConfig.review) === null || _runConfig_review16 === void 0 ? void 0 : _runConfig_review16.directory) {\n var _runConfig_review26;\n selectedFiles = await selectFilesForProcessing(reviewFiles, ((_runConfig_review26 = runConfig.review) === null || _runConfig_review26 === void 0 ? void 0 : _runConfig_review26.sendit) || false);\n } else {\n // For single note mode, just use the note directly\n selectedFiles = [\n 'single note'\n ];\n }\n // Phase 2: Process selected files in order\n logger.info(`\\nđ Starting analysis phase...`);\n const results = [];\n const processedFiles = [];\n if ((_runConfig_review17 = runConfig.review) === null || _runConfig_review17 === void 0 ? void 0 : _runConfig_review17.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) {\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) {\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 if (results.length === 0) {\n throw new ValidationError('No files were processed successfully');\n }\n // Combine results if we processed multiple files\n let analysisResult;\n if (results.length === 1) {\n analysisResult = results[0];\n } else {\n logger.info(`â
Successfully processed ${results.length} review files`);\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 analysisResult = {\n summary: `Combined analysis of ${results.length} review files. Total issues found: ${totalIssues}`,\n totalIssues,\n issues: allIssues\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` + `## Summary\\n${analysisResult.summary}\\n\\n` + `## Total Issues Found\\n${totalIssues}\\n\\n` + `## Files Processed\\n${processedFiles.join('\\n')}\\n\\n` + `## Issues\\n\\n${JSON.stringify(allIssues, null, 2)}\\n\\n` + `---\\n\\n*Combined analysis completed at ${new Date().toISOString()}*`;\n await safeWriteFile(combinedPath, combinedContent);\n logger.debug('Saved combined review analysis: %s', combinedPath);\n } catch (error) {\n logger.warn('Failed to save combined review analysis: %s', error.message);\n }\n }\n // Handle GitHub issue creation using the issues module\n const senditMode = ((_runConfig_review18 = runConfig.review) === null || _runConfig_review18 === void 0 ? void 0 : _runConfig_review18.sendit) || false;\n return await handleIssueCreation(analysisResult, senditMode);\n};\nconst execute = async (runConfig)=>{\n try {\n return await executeInternal(runConfig);\n } catch (error) {\n const logger = getLogger();\n if (error instanceof ValidationError) {\n logger.error(`review failed: ${error.message}`);\n throw error;\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.message}`);\n }\n throw error;\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.message}`);\n }\n throw error;\n }\n // Unexpected errors\n logger.error(`review encountered unexpected error: ${error.message}`);\n throw error;\n }\n};\n\nexport { PerformanceTimer, batchReadPackageJsonFiles, checkForFileDependencies, execute$1 as clean, collectAllDependencies, execute$3 as commit, findAllPackageJsonFiles, findPackagesByScope, isCleanNeeded, isTestNeeded, optimizePrecommitCommand, execute$2 as precommit, recordTestRun, execute as review, scanDirectoryForPackages };\n//# sourceMappingURL=index.js.map\n","#!/usr/bin/env node\nimport path from 'path';\nimport { processAudio } from '@theunwalked/unplayable';\nimport { CancellationError, UserCancellationError } from '@eldrforge/shared';\nimport { getDryRunLogger, getLogger, Config, getTimestampedAudioFilename, createStorageAdapter, createLoggerAdapter } from '@eldrforge/core';\nimport { transcribeAudio } from '@eldrforge/ai-service';\nimport { commit as executeCommit } from '@eldrforge/commands-git';\nimport { createAudioRecordingCountdown, archiveAudio } from '@eldrforge/audio-tools';\n\nconst executeInternal = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n if (isDryRun) {\n if (runConfig.audioCommit?.file) {\n logger.info('AUDIO_COMMIT_FILE_DRY_RUN: Would process audio file | Mode: dry-run | File: %s | Action: Transcribe + generate commit', runConfig.audioCommit.file);\n logger.info('AUDIO_COMMIT_WORKFLOW_DRY_RUN: Would transcribe and generate message | Mode: dry-run | Purpose: Commit message from audio');\n } else {\n logger.info('AUDIO_COMMIT_RECORD_DRY_RUN: Would start audio recording | Mode: dry-run | Purpose: Commit context');\n logger.info('AUDIO_COMMIT_TRANSCRIPT_DRY_RUN: Would transcribe and generate | Mode: dry-run | Purpose: Extract commit message');\n }\n logger.info('AUDIO_COMMIT_DELEGATE_DRY_RUN: Would delegate to regular commit command | Mode: dry-run | Next: Standard commit flow');\n\n // Return preview without calling real commands\n return 'DRY RUN: Would process audio, transcribe it, and generate commit message with audio context';\n }\n\n let audioContext: string;\n\n try {\n // Step 1: Record audio using unplayable with new key handling\n logger.info('AUDIO_COMMIT_RECORDING_STARTING: Starting audio recording | Purpose: Capture commit context | Tool: unplayable');\n\n if (!runConfig.audioCommit?.file) {\n logger.info('AUDIO_COMMIT_RECORDING_ACTIVE: Recording in progress | Action: Press ENTER to stop | Alternative: Press C to cancel');\n }\n\n // Start countdown timer if recording (not processing a file) and maxRecordingTime is set\n const maxRecordingTime = runConfig.audioCommit?.maxRecordingTime;\n const isRecording = !runConfig.audioCommit?.file;\n let countdownTimer: ReturnType<typeof createAudioRecordingCountdown> | null = null;\n\n if (isRecording && maxRecordingTime && maxRecordingTime > 0) {\n countdownTimer = createAudioRecordingCountdown(maxRecordingTime);\n // Start countdown timer in parallel with recording\n countdownTimer.start().catch(() => {\n // Timer completed naturally, no action needed\n });\n }\n\n let audioResult: any;\n try {\n // Use processAudio with proper configuration\n audioResult = await processAudio({\n file: runConfig.audioCommit?.file,\n maxRecordingTime: runConfig.audioCommit?.maxRecordingTime,\n outputDirectory: runConfig.outputDirectory || 'output',\n debug: runConfig.debug\n });\n } finally {\n // Stop countdown timer if it was running\n if (countdownTimer) {\n countdownTimer.stop();\n }\n }\n\n // Check if recording was cancelled\n if (audioResult.cancelled) {\n logger.info('AUDIO_COMMIT_CANCELLED: Audio commit cancelled by user | Reason: User choice | Status: aborted');\n throw new UserCancellationError('Audio commit cancelled by user');\n }\n\n // Step 2: Get the audio file path from the result\n let audioFilePath: string;\n\n if (runConfig.audioCommit?.file) {\n // Use the provided file path\n audioFilePath = runConfig.audioCommit.file;\n } else if (audioResult.audioFilePath) {\n // Use the file path returned by processAudio\n audioFilePath = audioResult.audioFilePath;\n } else {\n // Fallback to generated filename (this should rarely happen now)\n const outputDir = runConfig.outputDirectory || 'output';\n audioFilePath = path.join(outputDir, getTimestampedAudioFilename());\n logger.warn('AUDIO_COMMIT_FILENAME_GENERATED: Using generated filename for audio | Filename: %s | Warning: May not match actual file from unplayable', audioFilePath);\n logger.warn('AUDIO_COMMIT_FILENAME_NOTE: Filename mismatch possible | Tool: unplayable | Impact: May need manual file lookup');\n }\n\n // Step 3: Use ai-service transcription functionality\n logger.info('AUDIO_COMMIT_TRANSCRIBING: Transcribing audio locally | Service: OpenAI Whisper | Mode: local | Purpose: Convert speech to text');\n\n const outputDir = runConfig.outputDirectory || 'output';\n const aiStorageAdapter = createStorageAdapter(outputDir);\n const aiLogger = createLoggerAdapter(isDryRun);\n\n const transcription = await transcribeAudio(audioFilePath, {\n model: \"whisper-1\",\n debug: runConfig.debug,\n storage: aiStorageAdapter,\n logger: aiLogger,\n onArchive: async (audioPath: string, transcriptionText: string) => {\n const outputDir = path.join(runConfig.outputDirectory || 'output', 'kodrdriv');\n await archiveAudio(audioPath, transcriptionText, outputDir);\n },\n });\n\n audioContext = transcription.text;\n\n if (!audioContext.trim()) {\n logger.warn('AUDIO_COMMIT_NO_CONTENT: No audio content transcribed | Reason: Empty or invalid | Action: Proceeding without audio context');\n audioContext = '';\n } else {\n logger.info('AUDIO_COMMIT_TRANSCRIPT_SUCCESS: Successfully transcribed audio | Tool: kodrdriv | Length: ' + audioContext.length + ' characters | Status: ready');\n logger.debug('Transcribed text: %s', audioContext);\n }\n\n } catch (error: any) {\n // Re-throw cancellation errors properly\n if (error instanceof UserCancellationError) {\n throw error;\n }\n\n // Convert old CancellationError to new UserCancellationError\n if (error.name === 'CancellationError' || error instanceof CancellationError) {\n throw new UserCancellationError(error.message);\n }\n\n logger.error('AUDIO_COMMIT_PROCESSING_FAILED: Audio processing failed | Error: %s | Impact: No audio context available', error.message);\n logger.info('AUDIO_COMMIT_FALLBACK: Proceeding without audio context | Mode: fallback | Next: Standard commit generation');\n audioContext = '';\n }\n\n // Now delegate to the regular commit command with the audio context\n logger.info('AUDIO_COMMIT_GENERATING: Generating commit message with audio context | Source: transcript | Purpose: AI-generated commit message');\n const result = await executeCommit({\n ...runConfig,\n commit: {\n ...runConfig.commit,\n direction: audioContext.trim() || runConfig.commit?.direction || ''\n }\n });\n\n return result;\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 // Handle user cancellation gracefully - don't exit process\n if (error instanceof UserCancellationError) {\n logger.info('AUDIO_COMMIT_ERROR: Error during audio commit | Error: ' + error.message);\n throw error; // Let calling code handle this\n }\n\n // Handle other errors - don't exit process\n logger.error(`AUDIO_COMMIT_FAILED: Audio commit command failed | Error: ${error.message} | Impact: Commit not generated`);\n if (error.cause) {\n logger.debug(`Caused by: ${error.cause.message}`);\n }\n throw error; // Let calling code handle this\n }\n};\n\n","#!/usr/bin/env node\n\nimport { getLogger, getDryRunLogger, Config, getTimestampedAudioFilename, createStorageAdapter, createLoggerAdapter } from '@eldrforge/core';\nimport { review as executeReview } from '@eldrforge/commands-git';\nimport { processAudio } from '@theunwalked/unplayable';\nimport { transcribeAudio } from '@eldrforge/ai-service';\nimport { CancellationError, createStorage } from '@eldrforge/shared';\nimport { createAudioRecordingCountdown, archiveAudio } from '@eldrforge/audio-tools';\nimport path from 'path';\n\n// Common audio file extensions\nconst AUDIO_EXTENSIONS = ['.wav', '.mp3', '.m4a', '.aac', '.flac', '.ogg', '.wma'];\n\n/**\n * Discover audio files in a directory\n */\nconst discoverAudioFiles = async (directory: string): Promise<string[]> => {\n const logger = getLogger();\n const storage = createStorage();\n\n try {\n if (!(await storage.isDirectoryReadable(directory))) {\n throw new Error(`Directory not readable: ${directory}`);\n }\n\n const allFiles = await storage.listFiles(directory);\n const audioFiles = allFiles\n .filter(file => AUDIO_EXTENSIONS.includes(path.extname(file).toLowerCase()))\n .map(file => path.join(directory, file))\n .sort(); // Sort for consistent processing order\n\n logger.info(`AUDIO_REVIEW_FILES_FOUND: Found audio files in directory | Count: ${audioFiles.length} | Directory: ${directory} | Status: ready-for-processing`);\n logger.debug('Audio files found: %s', audioFiles.join(', '));\n\n return audioFiles;\n } catch (error: any) {\n logger.error('AUDIO_REVIEW_DISCOVERY_FAILED: Failed to discover audio files | Directory: %s | Error: %s | Impact: Cannot process batch', directory, error.message);\n throw error;\n }\n};\n\n/**\n * Process a single audio file for review\n */\nconst processSingleAudioFile = async (audioFilePath: string, runConfig: Config): Promise<string> => {\n const logger = getLogger();\n\n try {\n logger.info('AUDIO_REVIEW_PROCESSING: Processing audio file | File: %s | Action: Transcribe and analyze', path.basename(audioFilePath));\n\n // Use kodrdriv's transcription functionality\n logger.info('AUDIO_REVIEW_TRANSCRIBING: Transcribing audio using OpenAI Whisper | Service: OpenAI Whisper | Purpose: Convert speech to text');\n\n const outputDir = runConfig.outputDirectory || 'output';\n const aiStorageAdapter = createStorageAdapter(outputDir);\n const aiLogger = createLoggerAdapter(runConfig.dryRun || false);\n\n const transcription = await transcribeAudio(audioFilePath, {\n model: \"whisper-1\",\n debug: runConfig.debug,\n storage: aiStorageAdapter,\n logger: aiLogger,\n onArchive: async (audioPath: string, transcriptionText: string) => {\n const outputDir = path.join(runConfig.outputDirectory || 'output', 'kodrdriv');\n await archiveAudio(audioPath, transcriptionText, outputDir);\n },\n });\n\n // Safely validate transcription result\n if (!transcription || typeof transcription !== 'object' || typeof transcription.text !== 'string') {\n throw new Error('Invalid transcription result: missing or invalid text property');\n }\n const audioContext = transcription.text;\n\n if (!audioContext.trim()) {\n logger.warn('AUDIO_REVIEW_NO_TRANSCRIPT: No audio content transcribed | File: %s | Reason: Empty or invalid audio | Action: Skipping', audioFilePath);\n return '';\n } else {\n logger.info('AUDIO_REVIEW_TRANSCRIBED: Successfully transcribed audio | File: %s | Length: %d characters | Status: ready', path.basename(audioFilePath), audioContext.length);\n logger.debug('Transcribed text: %s', audioContext);\n }\n\n // Now delegate to the regular review command with the audio context\n logger.info('AUDIO_REVIEW_ANALYZING: Analyzing review from transcript | File: %s | Action: AI analysis | Purpose: Extract issues', path.basename(audioFilePath));\n const result = await executeReview({\n ...runConfig,\n review: {\n // Map audioReview configuration to review configuration\n includeCommitHistory: runConfig.audioReview?.includeCommitHistory,\n includeRecentDiffs: runConfig.audioReview?.includeRecentDiffs,\n includeReleaseNotes: runConfig.audioReview?.includeReleaseNotes,\n includeGithubIssues: runConfig.audioReview?.includeGithubIssues,\n commitHistoryLimit: runConfig.audioReview?.commitHistoryLimit,\n diffHistoryLimit: runConfig.audioReview?.diffHistoryLimit,\n releaseNotesLimit: runConfig.audioReview?.releaseNotesLimit,\n githubIssuesLimit: runConfig.audioReview?.githubIssuesLimit,\n sendit: runConfig.audioReview?.sendit,\n context: runConfig.audioReview?.context,\n // Use the transcribed audio as content with file context\n note: `Audio Review from ${path.basename(audioFilePath)}:\\n\\n${audioContext.trim()}`\n }\n });\n\n return result;\n\n } catch (error: any) {\n logger.error('AUDIO_REVIEW_FILE_FAILED: Failed to process audio file | File: %s | Error: %s | Impact: File not analyzed', audioFilePath, error.message);\n return `Failed to process ${path.basename(audioFilePath)}: ${error.message}`;\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n // Check if directory option is provided with safe access\n const audioReviewConfig = runConfig.audioReview;\n const directory = audioReviewConfig && typeof audioReviewConfig === 'object' && 'directory' in audioReviewConfig\n ? (audioReviewConfig as any).directory\n : undefined;\n\n if (directory) {\n // Directory batch processing mode\n logger.info('AUDIO_REVIEW_BATCH_STARTING: Starting directory batch audio review | Directory: %s | Mode: batch | Purpose: Process all audio files', directory);\n\n if (isDryRun) {\n logger.info('AUDIO_REVIEW_BATCH_DRY_RUN: Would discover and process audio files | Mode: dry-run | Directory: %s | Action: Discover + transcribe + analyze', directory);\n logger.info('AUDIO_REVIEW_BATCH_WORKFLOW: Would transcribe and analyze each file | Mode: dry-run | Purpose: Review analysis from audio');\n return 'DRY RUN: Directory batch processing would be performed';\n }\n\n try {\n // Discover audio files in the directory\n const audioFiles = await discoverAudioFiles(directory);\n\n if (audioFiles.length === 0) {\n logger.warn('AUDIO_REVIEW_NO_FILES: No audio files found in directory | Directory: %s | Extensions: .mp3, .wav, .m4a, .ogg | Action: Nothing to process', directory);\n return 'No audio files found to process';\n }\n\n const results: string[] = [];\n\n // Process each audio file\n for (let i = 0; i < audioFiles.length; i++) {\n const audioFile = audioFiles[i];\n logger.info(`\\nAUDIO_REVIEW_BATCH_FILE: Processing batch file | Progress: ${i + 1}/${audioFiles.length} | File: ${path.basename(audioFile)}`);\n\n const result = await processSingleAudioFile(audioFile, runConfig);\n results.push(`File: ${path.basename(audioFile)}\\n${result}`);\n\n // Add a separator between files (except for the last one)\n if (i < audioFiles.length - 1) {\n logger.info('AUDIO_REVIEW_FILE_COMPLETE: Completed file processing | File: %s | Status: completed\\n', path.basename(audioFile));\n }\n }\n\n logger.info('AUDIO_REVIEW_BATCH_COMPLETE: Completed batch processing | Files Processed: %d | Status: all-completed', audioFiles.length);\n\n // Combine all results\n const combinedResults = `Batch Audio Review Results (${audioFiles.length} files):\\n\\n` +\n results.join('\\n\\n---\\n\\n');\n\n return combinedResults;\n\n } catch (error: any) {\n logger.error('AUDIO_REVIEW_BATCH_FAILED: Directory batch processing failed | Error: %s | Impact: Batch incomplete', error.message);\n throw error;\n }\n }\n\n // Original single file/recording logic\n if (isDryRun) {\n if (runConfig.audioReview?.file) {\n logger.info('AUDIO_REVIEW_FILE_DRY_RUN: Would process audio file | Mode: dry-run | File: %s | Action: Transcribe + analyze', runConfig.audioReview.file);\n logger.info('AUDIO_REVIEW_WORKFLOW_DRY_RUN: Would transcribe and analyze | Mode: dry-run | Purpose: Review context from audio');\n } else {\n logger.info('AUDIO_REVIEW_RECORD_DRY_RUN: Would start audio recording | Mode: dry-run | Purpose: Review context');\n logger.info('AUDIO_REVIEW_TRANSCRIPT_DRY_RUN: Would transcribe and analyze | Mode: dry-run | Purpose: Extract review content');\n }\n logger.info('AUDIO_REVIEW_DELEGATE_DRY_RUN: Would delegate to regular review command | Mode: dry-run | Next: Standard review flow');\n\n // Return preview without calling real commands\n return 'DRY RUN: Would process audio, transcribe it, and perform review analysis with audio context';\n }\n\n let audioContext: string;\n\n try {\n // Step 1: Record audio using unplayable with new key handling\n logger.info('AUDIO_REVIEW_RECORDING_STARTING: Starting audio recording | Purpose: Capture review context | Tool: unplayable');\n\n if (!runConfig.audioReview?.file) {\n logger.info('AUDIO_REVIEW_RECORDING_ACTIVE: Recording in progress | Action: Press ENTER to stop | Alternative: Press C to cancel');\n }\n\n // Start countdown timer if recording (not processing a file) and maxRecordingTime is set\n const maxRecordingTime = runConfig.audioReview?.maxRecordingTime;\n const isRecording = !runConfig.audioReview?.file;\n let countdownTimer: ReturnType<typeof createAudioRecordingCountdown> | null = null;\n\n if (isRecording && maxRecordingTime && maxRecordingTime > 0) {\n countdownTimer = createAudioRecordingCountdown(maxRecordingTime);\n // Start countdown timer in parallel with recording\n countdownTimer.start().catch(() => {\n // Timer completed naturally, no action needed\n });\n }\n\n let audioResult: any;\n try {\n // Use processAudio with proper configuration\n audioResult = await processAudio({\n file: runConfig.audioReview?.file,\n maxRecordingTime: runConfig.audioReview?.maxRecordingTime,\n outputDirectory: runConfig.outputDirectory || 'output',\n debug: runConfig.debug\n });\n } finally {\n // Stop countdown timer if it was running\n if (countdownTimer) {\n countdownTimer.stop();\n }\n }\n\n // Check if recording was cancelled\n if (audioResult.cancelled) {\n logger.info('AUDIO_REVIEW_CANCELLED: Audio review cancelled by user | Reason: User choice | Status: aborted');\n throw new CancellationError('Audio review cancelled by user');\n }\n\n // Step 2: Get the audio file path from the result\n let audioFilePath: string;\n\n if (runConfig.audioReview?.file) {\n // Use the provided file path\n audioFilePath = runConfig.audioReview.file;\n } else if (audioResult.audioFilePath) {\n // Use the file path returned by processAudio\n audioFilePath = audioResult.audioFilePath;\n } else {\n // Fallback to generated filename (this should rarely happen now)\n const outputDir = runConfig.outputDirectory || 'output';\n audioFilePath = path.join(outputDir, getTimestampedAudioFilename());\n logger.warn('AUDIO_REVIEW_FILENAME_GENERATED: Using generated filename for audio | Filename: %s | Warning: May not match actual file from unplayable', audioFilePath);\n logger.warn('AUDIO_REVIEW_FILENAME_NOTE: Filename mismatch possible | Tool: unplayable | Impact: May need manual file lookup');\n }\n\n // Step 3: Use kodrdriv's transcription functionality\n logger.info('AUDIO_REVIEW_TRANSCRIBING_LOCAL: Transcribing audio locally | Service: OpenAI Whisper | Mode: local | Purpose: Convert speech to text');\n\n const outputDir = runConfig.outputDirectory || 'output';\n const aiStorageAdapter = createStorageAdapter(outputDir);\n const aiLogger = createLoggerAdapter(isDryRun);\n\n const transcription = await transcribeAudio(audioFilePath, {\n model: \"whisper-1\",\n debug: runConfig.debug,\n storage: aiStorageAdapter,\n logger: aiLogger,\n onArchive: async (audioPath: string, transcriptionText: string) => {\n const outputDir = path.join(runConfig.outputDirectory || 'output', 'kodrdriv');\n await archiveAudio(audioPath, transcriptionText, outputDir);\n },\n });\n\n // Safely validate transcription result\n if (!transcription || typeof transcription !== 'object' || typeof transcription.text !== 'string') {\n throw new Error('Invalid transcription result: missing or invalid text property');\n }\n audioContext = transcription.text;\n\n if (!audioContext.trim()) {\n logger.warn('AUDIO_REVIEW_NO_CONTENT: No audio content transcribed | Reason: Empty or invalid | Action: Proceeding without audio context');\n audioContext = '';\n } else {\n logger.info('AUDIO_REVIEW_TRANSCRIPT_SUCCESS: Successfully transcribed audio | Tool: kodrdriv | Length: ' + audioContext.length + ' characters | Status: ready');\n logger.debug('Transcribed text: %s', audioContext);\n }\n\n } catch (error: any) {\n // Re-throw CancellationError to properly handle cancellation\n if (error.name === 'CancellationError') {\n throw error;\n }\n\n logger.error('AUDIO_REVIEW_PROCESSING_FAILED: Audio processing failed | Error: %s | Impact: No audio context available', error.message);\n logger.info('AUDIO_REVIEW_FALLBACK: Proceeding without audio context | Mode: fallback | Next: Standard review analysis');\n audioContext = '';\n }\n\n // Now delegate to the regular review command with the audio context\n logger.info('AUDIO_REVIEW_ANALYSIS_STARTING: Analyzing review with audio context | Source: transcript | Purpose: Extract actionable issues');\n const result = await executeReview({\n ...runConfig,\n review: {\n // Map audioReview configuration to review configuration\n includeCommitHistory: runConfig.audioReview?.includeCommitHistory,\n includeRecentDiffs: runConfig.audioReview?.includeRecentDiffs,\n includeReleaseNotes: runConfig.audioReview?.includeReleaseNotes,\n includeGithubIssues: runConfig.audioReview?.includeGithubIssues,\n commitHistoryLimit: runConfig.audioReview?.commitHistoryLimit,\n diffHistoryLimit: runConfig.audioReview?.diffHistoryLimit,\n releaseNotesLimit: runConfig.audioReview?.releaseNotesLimit,\n githubIssuesLimit: runConfig.audioReview?.githubIssuesLimit,\n sendit: runConfig.audioReview?.sendit,\n context: runConfig.audioReview?.context,\n // Use the transcribed audio as content\n note: audioContext.trim() || runConfig.review?.note || ''\n }\n });\n\n return result;\n};\n\n"],"names":["getUnplayableConfigPath","path","join","os","homedir","error","Error","message","execute","runConfig","isDryRun","dryRun","logger","getDryRunLogger","configPath","info","warn","preferencesDir","result","selectAndConfigureAudioDevice","debug","includes","errorMessage","toString","_define_property","globalLogger","ConsoleLogger","getLogger","run","VERSION","isPlainObject","withDefaults","noop","safeParse","ENDPOINTS","Core","get","getUserChoice","checkForFileDependencies$1","getReleaseNotesContent","getIssuesContent","executeInternal","audioCommit","file","audioContext","maxRecordingTime","isRecording","countdownTimer","createAudioRecordingCountdown","start","catch","audioResult","processAudio","outputDirectory","stop","cancelled","UserCancellationError","audioFilePath","outputDir","getTimestampedAudioFilename","aiStorageAdapter","createStorageAdapter","aiLogger","createLoggerAdapter","transcription","transcribeAudio","model","storage","onArchive","audioPath","transcriptionText","archiveAudio","text","trim","length","name","CancellationError","executeCommit","commit","direction","cause","AUDIO_EXTENSIONS","discoverAudioFiles","directory","createStorage","isDirectoryReadable","allFiles","listFiles","audioFiles","filter","extname","toLowerCase","map","sort","processSingleAudioFile","basename","executeReview","review","includeCommitHistory","audioReview","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","sendit","context","note","audioReviewConfig","undefined","results","i","audioFile","push","combinedResults"],"mappings":"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","x_google_ignoreList":[1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/commands/select-audio.ts","../src/commands/audio-commit.ts","../src/commands/audio-review.ts"],"sourcesContent":["#!/usr/bin/env node\nimport path from 'path';\nimport os from 'os';\nimport { getDryRunLogger, Config } from '@eldrforge/core';\nimport { selectAndConfigureAudioDevice } from '@theunwalked/unplayable';\n\nconst getUnplayableConfigPath = (): string => {\n try {\n return path.join(os.homedir(), '.unplayable', 'audio-device.json');\n } catch (error: any) {\n throw new Error(`Failed to determine home directory: ${error.message}`);\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n if (isDryRun) {\n try {\n const configPath = getUnplayableConfigPath();\n logger.info('AUDIO_SELECT_DRY_RUN: Would start audio device selection | Mode: dry-run | Purpose: Choose input device');\n logger.info('AUDIO_SELECT_SAVE_DRY_RUN: Would save device to config | Mode: dry-run | Path: %s', configPath);\n return 'Audio device selection completed (dry run)';\n } catch (error: any) {\n logger.warn('AUDIO_SELECT_CONFIG_PATH_ERROR: Error determining config path | Error: %s | Impact: Cannot show save location', error.message);\n return 'Audio device selection completed (dry run)';\n }\n }\n\n try {\n const preferencesDir = path.join(os.homedir(), '.unplayable');\n const result = await selectAndConfigureAudioDevice(preferencesDir, logger, runConfig.debug);\n return result;\n } catch (error: any) {\n // Check if this is a home directory error\n if (error.message && error.message.includes('Failed to determine home directory')) {\n logger.error('AUDIO_SELECT_FAILED: Audio device selection failed | Error: %s', error.message);\n throw new Error(`Failed to determine home directory: ${error.message}`);\n } else {\n const errorMessage = error.message || error.toString();\n logger.error('AUDIO_SELECT_COMMAND_FAILED: Audio device selection command failed | Error: %s | Status: failed', errorMessage);\n throw new Error(`Audio device selection failed: ${errorMessage}`);\n }\n }\n};\n\n","#!/usr/bin/env node\nimport path from 'path';\nimport { processAudio } from '@theunwalked/unplayable';\nimport { CancellationError, UserCancellationError } from '@eldrforge/shared';\nimport { getDryRunLogger, getLogger, Config, getTimestampedAudioFilename, createStorageAdapter, createLoggerAdapter } from '@eldrforge/core';\nimport { transcribeAudio } from '@eldrforge/ai-service';\nimport { commit as executeCommit } from '@eldrforge/commands-git';\nimport { createAudioRecordingCountdown, archiveAudio } from '@eldrforge/audio-tools';\n\nconst executeInternal = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n if (isDryRun) {\n if (runConfig.audioCommit?.file) {\n logger.info('AUDIO_COMMIT_FILE_DRY_RUN: Would process audio file | Mode: dry-run | File: %s | Action: Transcribe + generate commit', runConfig.audioCommit.file);\n logger.info('AUDIO_COMMIT_WORKFLOW_DRY_RUN: Would transcribe and generate message | Mode: dry-run | Purpose: Commit message from audio');\n } else {\n logger.info('AUDIO_COMMIT_RECORD_DRY_RUN: Would start audio recording | Mode: dry-run | Purpose: Commit context');\n logger.info('AUDIO_COMMIT_TRANSCRIPT_DRY_RUN: Would transcribe and generate | Mode: dry-run | Purpose: Extract commit message');\n }\n logger.info('AUDIO_COMMIT_DELEGATE_DRY_RUN: Would delegate to regular commit command | Mode: dry-run | Next: Standard commit flow');\n\n // Return preview without calling real commands\n return 'DRY RUN: Would process audio, transcribe it, and generate commit message with audio context';\n }\n\n let audioContext: string;\n\n try {\n // Step 1: Record audio using unplayable with new key handling\n logger.info('AUDIO_COMMIT_RECORDING_STARTING: Starting audio recording | Purpose: Capture commit context | Tool: unplayable');\n\n if (!runConfig.audioCommit?.file) {\n logger.info('AUDIO_COMMIT_RECORDING_ACTIVE: Recording in progress | Action: Press ENTER to stop | Alternative: Press C to cancel');\n }\n\n // Start countdown timer if recording (not processing a file) and maxRecordingTime is set\n const maxRecordingTime = runConfig.audioCommit?.maxRecordingTime;\n const isRecording = !runConfig.audioCommit?.file;\n let countdownTimer: ReturnType<typeof createAudioRecordingCountdown> | null = null;\n\n if (isRecording && maxRecordingTime && maxRecordingTime > 0) {\n countdownTimer = createAudioRecordingCountdown(maxRecordingTime);\n // Start countdown timer in parallel with recording\n countdownTimer.start().catch(() => {\n // Timer completed naturally, no action needed\n });\n }\n\n let audioResult: any;\n try {\n // Use processAudio with proper configuration\n audioResult = await processAudio({\n file: runConfig.audioCommit?.file,\n maxRecordingTime: runConfig.audioCommit?.maxRecordingTime,\n outputDirectory: runConfig.outputDirectory || 'output',\n debug: runConfig.debug\n });\n } finally {\n // Stop countdown timer if it was running\n if (countdownTimer) {\n countdownTimer.stop();\n }\n }\n\n // Check if recording was cancelled\n if (audioResult.cancelled) {\n logger.info('AUDIO_COMMIT_CANCELLED: Audio commit cancelled by user | Reason: User choice | Status: aborted');\n throw new UserCancellationError('Audio commit cancelled by user');\n }\n\n // Step 2: Get the audio file path from the result\n let audioFilePath: string;\n\n if (runConfig.audioCommit?.file) {\n // Use the provided file path\n audioFilePath = runConfig.audioCommit.file;\n } else if (audioResult.audioFilePath) {\n // Use the file path returned by processAudio\n audioFilePath = audioResult.audioFilePath;\n } else {\n // Fallback to generated filename (this should rarely happen now)\n const outputDir = runConfig.outputDirectory || 'output';\n audioFilePath = path.join(outputDir, getTimestampedAudioFilename());\n logger.warn('AUDIO_COMMIT_FILENAME_GENERATED: Using generated filename for audio | Filename: %s | Warning: May not match actual file from unplayable', audioFilePath);\n logger.warn('AUDIO_COMMIT_FILENAME_NOTE: Filename mismatch possible | Tool: unplayable | Impact: May need manual file lookup');\n }\n\n // Step 3: Use ai-service transcription functionality\n logger.info('AUDIO_COMMIT_TRANSCRIBING: Transcribing audio locally | Service: OpenAI Whisper | Mode: local | Purpose: Convert speech to text');\n\n const outputDir = runConfig.outputDirectory || 'output';\n const aiStorageAdapter = createStorageAdapter(outputDir);\n const aiLogger = createLoggerAdapter(isDryRun);\n\n const transcription = await transcribeAudio(audioFilePath, {\n model: \"whisper-1\",\n debug: runConfig.debug,\n storage: aiStorageAdapter,\n logger: aiLogger,\n onArchive: async (audioPath: string, transcriptionText: string) => {\n const outputDir = path.join(runConfig.outputDirectory || 'output', 'kodrdriv');\n await archiveAudio(audioPath, transcriptionText, outputDir);\n },\n });\n\n audioContext = transcription.text;\n\n if (!audioContext.trim()) {\n logger.warn('AUDIO_COMMIT_NO_CONTENT: No audio content transcribed | Reason: Empty or invalid | Action: Proceeding without audio context');\n audioContext = '';\n } else {\n logger.info('AUDIO_COMMIT_TRANSCRIPT_SUCCESS: Successfully transcribed audio | Tool: kodrdriv | Length: ' + audioContext.length + ' characters | Status: ready');\n logger.debug('Transcribed text: %s', audioContext);\n }\n\n } catch (error: any) {\n // Re-throw cancellation errors properly\n if (error instanceof UserCancellationError) {\n throw error;\n }\n\n // Convert old CancellationError to new UserCancellationError\n if (error.name === 'CancellationError' || error instanceof CancellationError) {\n throw new UserCancellationError(error.message);\n }\n\n logger.error('AUDIO_COMMIT_PROCESSING_FAILED: Audio processing failed | Error: %s | Impact: No audio context available', error.message);\n logger.info('AUDIO_COMMIT_FALLBACK: Proceeding without audio context | Mode: fallback | Next: Standard commit generation');\n audioContext = '';\n }\n\n // Now delegate to the regular commit command with the audio context\n logger.info('AUDIO_COMMIT_GENERATING: Generating commit message with audio context | Source: transcript | Purpose: AI-generated commit message');\n const result = await executeCommit({\n ...runConfig,\n commit: {\n ...runConfig.commit,\n direction: audioContext.trim() || runConfig.commit?.direction || ''\n }\n });\n\n return result;\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 // Handle user cancellation gracefully - don't exit process\n if (error instanceof UserCancellationError) {\n logger.info('AUDIO_COMMIT_ERROR: Error during audio commit | Error: ' + error.message);\n throw error; // Let calling code handle this\n }\n\n // Handle other errors - don't exit process\n logger.error(`AUDIO_COMMIT_FAILED: Audio commit command failed | Error: ${error.message} | Impact: Commit not generated`);\n if (error.cause) {\n logger.debug(`Caused by: ${error.cause.message}`);\n }\n throw error; // Let calling code handle this\n }\n};\n\n","#!/usr/bin/env node\n\nimport { getLogger, getDryRunLogger, Config, getTimestampedAudioFilename, createStorageAdapter, createLoggerAdapter } from '@eldrforge/core';\nimport { review as executeReview } from '@eldrforge/commands-git';\nimport { processAudio } from '@theunwalked/unplayable';\nimport { transcribeAudio } from '@eldrforge/ai-service';\nimport { CancellationError, createStorage } from '@eldrforge/shared';\nimport { createAudioRecordingCountdown, archiveAudio } from '@eldrforge/audio-tools';\nimport path from 'path';\n\n// Common audio file extensions\nconst AUDIO_EXTENSIONS = ['.wav', '.mp3', '.m4a', '.aac', '.flac', '.ogg', '.wma'];\n\n/**\n * Discover audio files in a directory\n */\nconst discoverAudioFiles = async (directory: string): Promise<string[]> => {\n const logger = getLogger();\n const storage = createStorage();\n\n try {\n if (!(await storage.isDirectoryReadable(directory))) {\n throw new Error(`Directory not readable: ${directory}`);\n }\n\n const allFiles = await storage.listFiles(directory);\n const audioFiles = allFiles\n .filter(file => AUDIO_EXTENSIONS.includes(path.extname(file).toLowerCase()))\n .map(file => path.join(directory, file))\n .sort(); // Sort for consistent processing order\n\n logger.info(`AUDIO_REVIEW_FILES_FOUND: Found audio files in directory | Count: ${audioFiles.length} | Directory: ${directory} | Status: ready-for-processing`);\n logger.debug('Audio files found: %s', audioFiles.join(', '));\n\n return audioFiles;\n } catch (error: any) {\n logger.error('AUDIO_REVIEW_DISCOVERY_FAILED: Failed to discover audio files | Directory: %s | Error: %s | Impact: Cannot process batch', directory, error.message);\n throw error;\n }\n};\n\n/**\n * Process a single audio file for review\n */\nconst processSingleAudioFile = async (audioFilePath: string, runConfig: Config): Promise<string> => {\n const logger = getLogger();\n\n try {\n logger.info('AUDIO_REVIEW_PROCESSING: Processing audio file | File: %s | Action: Transcribe and analyze', path.basename(audioFilePath));\n\n // Use kodrdriv's transcription functionality\n logger.info('AUDIO_REVIEW_TRANSCRIBING: Transcribing audio using OpenAI Whisper | Service: OpenAI Whisper | Purpose: Convert speech to text');\n\n const outputDir = runConfig.outputDirectory || 'output';\n const aiStorageAdapter = createStorageAdapter(outputDir);\n const aiLogger = createLoggerAdapter(runConfig.dryRun || false);\n\n const transcription = await transcribeAudio(audioFilePath, {\n model: \"whisper-1\",\n debug: runConfig.debug,\n storage: aiStorageAdapter,\n logger: aiLogger,\n onArchive: async (audioPath: string, transcriptionText: string) => {\n const outputDir = path.join(runConfig.outputDirectory || 'output', 'kodrdriv');\n await archiveAudio(audioPath, transcriptionText, outputDir);\n },\n });\n\n // Safely validate transcription result\n if (!transcription || typeof transcription !== 'object' || typeof transcription.text !== 'string') {\n throw new Error('Invalid transcription result: missing or invalid text property');\n }\n const audioContext = transcription.text;\n\n if (!audioContext.trim()) {\n logger.warn('AUDIO_REVIEW_NO_TRANSCRIPT: No audio content transcribed | File: %s | Reason: Empty or invalid audio | Action: Skipping', audioFilePath);\n return '';\n } else {\n logger.info('AUDIO_REVIEW_TRANSCRIBED: Successfully transcribed audio | File: %s | Length: %d characters | Status: ready', path.basename(audioFilePath), audioContext.length);\n logger.debug('Transcribed text: %s', audioContext);\n }\n\n // Now delegate to the regular review command with the audio context\n logger.info('AUDIO_REVIEW_ANALYZING: Analyzing review from transcript | File: %s | Action: AI analysis | Purpose: Extract issues', path.basename(audioFilePath));\n const result = await executeReview({\n ...runConfig,\n review: {\n // Map audioReview configuration to review configuration\n includeCommitHistory: runConfig.audioReview?.includeCommitHistory,\n includeRecentDiffs: runConfig.audioReview?.includeRecentDiffs,\n includeReleaseNotes: runConfig.audioReview?.includeReleaseNotes,\n includeGithubIssues: runConfig.audioReview?.includeGithubIssues,\n commitHistoryLimit: runConfig.audioReview?.commitHistoryLimit,\n diffHistoryLimit: runConfig.audioReview?.diffHistoryLimit,\n releaseNotesLimit: runConfig.audioReview?.releaseNotesLimit,\n githubIssuesLimit: runConfig.audioReview?.githubIssuesLimit,\n sendit: runConfig.audioReview?.sendit,\n context: runConfig.audioReview?.context,\n // Use the transcribed audio as content with file context\n note: `Audio Review from ${path.basename(audioFilePath)}:\\n\\n${audioContext.trim()}`\n }\n });\n\n return result;\n\n } catch (error: any) {\n logger.error('AUDIO_REVIEW_FILE_FAILED: Failed to process audio file | File: %s | Error: %s | Impact: File not analyzed', audioFilePath, error.message);\n return `Failed to process ${path.basename(audioFilePath)}: ${error.message}`;\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n // Check if directory option is provided with safe access\n const audioReviewConfig = runConfig.audioReview;\n const directory = audioReviewConfig && typeof audioReviewConfig === 'object' && 'directory' in audioReviewConfig\n ? (audioReviewConfig as any).directory\n : undefined;\n\n if (directory) {\n // Directory batch processing mode\n logger.info('AUDIO_REVIEW_BATCH_STARTING: Starting directory batch audio review | Directory: %s | Mode: batch | Purpose: Process all audio files', directory);\n\n if (isDryRun) {\n logger.info('AUDIO_REVIEW_BATCH_DRY_RUN: Would discover and process audio files | Mode: dry-run | Directory: %s | Action: Discover + transcribe + analyze', directory);\n logger.info('AUDIO_REVIEW_BATCH_WORKFLOW: Would transcribe and analyze each file | Mode: dry-run | Purpose: Review analysis from audio');\n return 'DRY RUN: Directory batch processing would be performed';\n }\n\n try {\n // Discover audio files in the directory\n const audioFiles = await discoverAudioFiles(directory);\n\n if (audioFiles.length === 0) {\n logger.warn('AUDIO_REVIEW_NO_FILES: No audio files found in directory | Directory: %s | Extensions: .mp3, .wav, .m4a, .ogg | Action: Nothing to process', directory);\n return 'No audio files found to process';\n }\n\n const results: string[] = [];\n\n // Process each audio file\n for (let i = 0; i < audioFiles.length; i++) {\n const audioFile = audioFiles[i];\n logger.info(`\\nAUDIO_REVIEW_BATCH_FILE: Processing batch file | Progress: ${i + 1}/${audioFiles.length} | File: ${path.basename(audioFile)}`);\n\n const result = await processSingleAudioFile(audioFile, runConfig);\n results.push(`File: ${path.basename(audioFile)}\\n${result}`);\n\n // Add a separator between files (except for the last one)\n if (i < audioFiles.length - 1) {\n logger.info('AUDIO_REVIEW_FILE_COMPLETE: Completed file processing | File: %s | Status: completed\\n', path.basename(audioFile));\n }\n }\n\n logger.info('AUDIO_REVIEW_BATCH_COMPLETE: Completed batch processing | Files Processed: %d | Status: all-completed', audioFiles.length);\n\n // Combine all results\n const combinedResults = `Batch Audio Review Results (${audioFiles.length} files):\\n\\n` +\n results.join('\\n\\n---\\n\\n');\n\n return combinedResults;\n\n } catch (error: any) {\n logger.error('AUDIO_REVIEW_BATCH_FAILED: Directory batch processing failed | Error: %s | Impact: Batch incomplete', error.message);\n throw error;\n }\n }\n\n // Original single file/recording logic\n if (isDryRun) {\n if (runConfig.audioReview?.file) {\n logger.info('AUDIO_REVIEW_FILE_DRY_RUN: Would process audio file | Mode: dry-run | File: %s | Action: Transcribe + analyze', runConfig.audioReview.file);\n logger.info('AUDIO_REVIEW_WORKFLOW_DRY_RUN: Would transcribe and analyze | Mode: dry-run | Purpose: Review context from audio');\n } else {\n logger.info('AUDIO_REVIEW_RECORD_DRY_RUN: Would start audio recording | Mode: dry-run | Purpose: Review context');\n logger.info('AUDIO_REVIEW_TRANSCRIPT_DRY_RUN: Would transcribe and analyze | Mode: dry-run | Purpose: Extract review content');\n }\n logger.info('AUDIO_REVIEW_DELEGATE_DRY_RUN: Would delegate to regular review command | Mode: dry-run | Next: Standard review flow');\n\n // Return preview without calling real commands\n return 'DRY RUN: Would process audio, transcribe it, and perform review analysis with audio context';\n }\n\n let audioContext: string;\n\n try {\n // Step 1: Record audio using unplayable with new key handling\n logger.info('AUDIO_REVIEW_RECORDING_STARTING: Starting audio recording | Purpose: Capture review context | Tool: unplayable');\n\n if (!runConfig.audioReview?.file) {\n logger.info('AUDIO_REVIEW_RECORDING_ACTIVE: Recording in progress | Action: Press ENTER to stop | Alternative: Press C to cancel');\n }\n\n // Start countdown timer if recording (not processing a file) and maxRecordingTime is set\n const maxRecordingTime = runConfig.audioReview?.maxRecordingTime;\n const isRecording = !runConfig.audioReview?.file;\n let countdownTimer: ReturnType<typeof createAudioRecordingCountdown> | null = null;\n\n if (isRecording && maxRecordingTime && maxRecordingTime > 0) {\n countdownTimer = createAudioRecordingCountdown(maxRecordingTime);\n // Start countdown timer in parallel with recording\n countdownTimer.start().catch(() => {\n // Timer completed naturally, no action needed\n });\n }\n\n let audioResult: any;\n try {\n // Use processAudio with proper configuration\n audioResult = await processAudio({\n file: runConfig.audioReview?.file,\n maxRecordingTime: runConfig.audioReview?.maxRecordingTime,\n outputDirectory: runConfig.outputDirectory || 'output',\n debug: runConfig.debug\n });\n } finally {\n // Stop countdown timer if it was running\n if (countdownTimer) {\n countdownTimer.stop();\n }\n }\n\n // Check if recording was cancelled\n if (audioResult.cancelled) {\n logger.info('AUDIO_REVIEW_CANCELLED: Audio review cancelled by user | Reason: User choice | Status: aborted');\n throw new CancellationError('Audio review cancelled by user');\n }\n\n // Step 2: Get the audio file path from the result\n let audioFilePath: string;\n\n if (runConfig.audioReview?.file) {\n // Use the provided file path\n audioFilePath = runConfig.audioReview.file;\n } else if (audioResult.audioFilePath) {\n // Use the file path returned by processAudio\n audioFilePath = audioResult.audioFilePath;\n } else {\n // Fallback to generated filename (this should rarely happen now)\n const outputDir = runConfig.outputDirectory || 'output';\n audioFilePath = path.join(outputDir, getTimestampedAudioFilename());\n logger.warn('AUDIO_REVIEW_FILENAME_GENERATED: Using generated filename for audio | Filename: %s | Warning: May not match actual file from unplayable', audioFilePath);\n logger.warn('AUDIO_REVIEW_FILENAME_NOTE: Filename mismatch possible | Tool: unplayable | Impact: May need manual file lookup');\n }\n\n // Step 3: Use kodrdriv's transcription functionality\n logger.info('AUDIO_REVIEW_TRANSCRIBING_LOCAL: Transcribing audio locally | Service: OpenAI Whisper | Mode: local | Purpose: Convert speech to text');\n\n const outputDir = runConfig.outputDirectory || 'output';\n const aiStorageAdapter = createStorageAdapter(outputDir);\n const aiLogger = createLoggerAdapter(isDryRun);\n\n const transcription = await transcribeAudio(audioFilePath, {\n model: \"whisper-1\",\n debug: runConfig.debug,\n storage: aiStorageAdapter,\n logger: aiLogger,\n onArchive: async (audioPath: string, transcriptionText: string) => {\n const outputDir = path.join(runConfig.outputDirectory || 'output', 'kodrdriv');\n await archiveAudio(audioPath, transcriptionText, outputDir);\n },\n });\n\n // Safely validate transcription result\n if (!transcription || typeof transcription !== 'object' || typeof transcription.text !== 'string') {\n throw new Error('Invalid transcription result: missing or invalid text property');\n }\n audioContext = transcription.text;\n\n if (!audioContext.trim()) {\n logger.warn('AUDIO_REVIEW_NO_CONTENT: No audio content transcribed | Reason: Empty or invalid | Action: Proceeding without audio context');\n audioContext = '';\n } else {\n logger.info('AUDIO_REVIEW_TRANSCRIPT_SUCCESS: Successfully transcribed audio | Tool: kodrdriv | Length: ' + audioContext.length + ' characters | Status: ready');\n logger.debug('Transcribed text: %s', audioContext);\n }\n\n } catch (error: any) {\n // Re-throw CancellationError to properly handle cancellation\n if (error.name === 'CancellationError') {\n throw error;\n }\n\n logger.error('AUDIO_REVIEW_PROCESSING_FAILED: Audio processing failed | Error: %s | Impact: No audio context available', error.message);\n logger.info('AUDIO_REVIEW_FALLBACK: Proceeding without audio context | Mode: fallback | Next: Standard review analysis');\n audioContext = '';\n }\n\n // Now delegate to the regular review command with the audio context\n logger.info('AUDIO_REVIEW_ANALYSIS_STARTING: Analyzing review with audio context | Source: transcript | Purpose: Extract actionable issues');\n const result = await executeReview({\n ...runConfig,\n review: {\n // Map audioReview configuration to review configuration\n includeCommitHistory: runConfig.audioReview?.includeCommitHistory,\n includeRecentDiffs: runConfig.audioReview?.includeRecentDiffs,\n includeReleaseNotes: runConfig.audioReview?.includeReleaseNotes,\n includeGithubIssues: runConfig.audioReview?.includeGithubIssues,\n commitHistoryLimit: runConfig.audioReview?.commitHistoryLimit,\n diffHistoryLimit: runConfig.audioReview?.diffHistoryLimit,\n releaseNotesLimit: runConfig.audioReview?.releaseNotesLimit,\n githubIssuesLimit: runConfig.audioReview?.githubIssuesLimit,\n sendit: runConfig.audioReview?.sendit,\n context: runConfig.audioReview?.context,\n // Use the transcribed audio as content\n note: audioContext.trim() || runConfig.review?.note || ''\n }\n });\n\n return result;\n};\n\n"],"names":["getUnplayableConfigPath","path","join","os","homedir","error","Error","message","execute","runConfig","isDryRun","dryRun","logger","getDryRunLogger","configPath","info","warn","preferencesDir","result","selectAndConfigureAudioDevice","debug","includes","errorMessage","toString","executeInternal","audioCommit","file","audioContext","maxRecordingTime","isRecording","countdownTimer","createAudioRecordingCountdown","start","catch","audioResult","processAudio","outputDirectory","stop","cancelled","UserCancellationError","audioFilePath","outputDir","getTimestampedAudioFilename","aiStorageAdapter","createStorageAdapter","aiLogger","createLoggerAdapter","transcription","transcribeAudio","model","storage","onArchive","audioPath","transcriptionText","archiveAudio","text","trim","length","name","CancellationError","executeCommit","commit","direction","getLogger","cause","AUDIO_EXTENSIONS","discoverAudioFiles","directory","createStorage","isDirectoryReadable","allFiles","listFiles","audioFiles","filter","extname","toLowerCase","map","sort","processSingleAudioFile","basename","executeReview","review","includeCommitHistory","audioReview","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","sendit","context","note","audioReviewConfig","undefined","results","i","audioFile","push","combinedResults"],"mappings":";;;;;;;;;AAMA,MAAMA,uBAAAA,GAA0B,IAAA;IAC5B,IAAI;AACA,QAAA,OAAOC,KAAKC,IAAI,CAACC,EAAAA,CAAGC,OAAO,IAAI,aAAA,EAAe,mBAAA,CAAA;AAClD,IAAA,CAAA,CAAE,OAAOC,KAAAA,EAAY;AACjB,QAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,oCAAoC,EAAED,KAAAA,CAAME,OAAO,CAAA,CAAE,CAAA;AAC1E,IAAA;AACJ,CAAA;AAEO,MAAMC,YAAU,OAAOC,SAAAA,GAAAA;IAC1B,MAAMC,QAAAA,GAAWD,SAAAA,CAAUE,MAAM,IAAI,KAAA;AACrC,IAAA,MAAMC,SAASC,eAAAA,CAAgBH,QAAAA,CAAAA;AAE/B,IAAA,IAAIA,QAAAA,EAAU;QACV,IAAI;AACA,YAAA,MAAMI,UAAAA,GAAad,uBAAAA,EAAAA;AACnBY,YAAAA,MAAAA,CAAOG,IAAI,CAAC,yGAAA,CAAA;YACZH,MAAAA,CAAOG,IAAI,CAAC,mFAAA,EAAqFD,UAAAA,CAAAA;YACjG,OAAO,4CAAA;AACX,QAAA,CAAA,CAAE,OAAOT,KAAAA,EAAY;AACjBO,YAAAA,MAAAA,CAAOI,IAAI,CAAC,+GAAA,EAAiHX,KAAAA,CAAME,OAAO,CAAA;YAC1I,OAAO,4CAAA;AACX,QAAA;AACJ,IAAA;IAEA,IAAI;AACA,QAAA,MAAMU,iBAAiBhB,IAAAA,CAAKC,IAAI,CAACC,EAAAA,CAAGC,OAAO,EAAA,EAAI,aAAA,CAAA;AAC/C,QAAA,MAAMc,SAAS,MAAMC,6BAAAA,CAA8BF,cAAAA,EAAgBL,MAAAA,EAAQH,UAAUW,KAAK,CAAA;QAC1F,OAAOF,MAAAA;AACX,IAAA,CAAA,CAAE,OAAOb,KAAAA,EAAY;;QAEjB,IAAIA,KAAAA,CAAME,OAAO,IAAIF,KAAAA,CAAME,OAAO,CAACc,QAAQ,CAAC,oCAAA,CAAA,EAAuC;AAC/ET,YAAAA,MAAAA,CAAOP,KAAK,CAAC,gEAAA,EAAkEA,KAAAA,CAAME,OAAO,CAAA;AAC5F,YAAA,MAAM,IAAID,KAAAA,CAAM,CAAC,oCAAoC,EAAED,KAAAA,CAAME,OAAO,CAAA,CAAE,CAAA;QAC1E,CAAA,MAAO;AACH,YAAA,MAAMe,YAAAA,GAAejB,KAAAA,CAAME,OAAO,IAAIF,MAAMkB,QAAQ,EAAA;YACpDX,MAAAA,CAAOP,KAAK,CAAC,iGAAA,EAAmGiB,YAAAA,CAAAA;AAChH,YAAA,MAAM,IAAIhB,KAAAA,CAAM,CAAC,+BAA+B,EAAEgB,YAAAA,CAAAA,CAAc,CAAA;AACpE,QAAA;AACJ,IAAA;AACJ;;ACpCA,MAAME,kBAAkB,OAAOf,SAAAA,GAAAA;AAkIeA,IAAAA,IAAAA,iBAAAA;IAjI1C,MAAMC,QAAAA,GAAWD,SAAAA,CAAUE,MAAM,IAAI,KAAA;AACrC,IAAA,MAAMC,SAASC,eAAAA,CAAgBH,QAAAA,CAAAA;AAE/B,IAAA,IAAIA,QAAAA,EAAU;AACND,QAAAA,IAAAA,sBAAAA;AAAJ,QAAA,IAAA,CAAIA,yBAAAA,SAAAA,CAAUgB,WAAW,cAArBhB,sBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,sBAAAA,CAAuBiB,IAAI,EAAE;AAC7Bd,YAAAA,MAAAA,CAAOG,IAAI,CAAC,uHAAA,EAAyHN,SAAAA,CAAUgB,WAAW,CAACC,IAAI,CAAA;AAC/Jd,YAAAA,MAAAA,CAAOG,IAAI,CAAC,2HAAA,CAAA;QAChB,CAAA,MAAO;AACHH,YAAAA,MAAAA,CAAOG,IAAI,CAAC,oGAAA,CAAA;AACZH,YAAAA,MAAAA,CAAOG,IAAI,CAAC,kHAAA,CAAA;AAChB,QAAA;AACAH,QAAAA,MAAAA,CAAOG,IAAI,CAAC,sHAAA,CAAA;;QAGZ,OAAO,6FAAA;AACX,IAAA;IAEA,IAAIY,YAAAA;IAEJ,IAAI;AAIKlB,QAAAA,IAAAA,uBAAAA,EAKoBA,yBACJA,uBAAAA,EAoCjBA,uBAAAA;;AA5CJG,QAAAA,MAAAA,CAAOG,IAAI,CAAC,gHAAA,CAAA;QAEZ,IAAI,EAAA,CAACN,0BAAAA,SAAAA,CAAUgB,WAAW,cAArBhB,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,uBAAAA,CAAuBiB,IAAI,CAAA,EAAE;AAC9Bd,YAAAA,MAAAA,CAAOG,IAAI,CAAC,qHAAA,CAAA;AAChB,QAAA;;AAGA,QAAA,MAAMa,oBAAmBnB,uBAAAA,GAAAA,SAAAA,CAAUgB,WAAW,MAAA,IAAA,IAArBhB,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuBmB,gBAAgB;QAChE,MAAMC,WAAAA,GAAc,GAACpB,uBAAAA,GAAAA,SAAAA,CAAUgB,WAAW,MAAA,IAAA,IAArBhB,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuBiB,IAAI,CAAA;AAChD,QAAA,IAAII,cAAAA,GAA0E,IAAA;QAE9E,IAAID,WAAAA,IAAeD,gBAAAA,IAAoBA,gBAAAA,GAAmB,CAAA,EAAG;AACzDE,YAAAA,cAAAA,GAAiBC,6BAAAA,CAA8BH,gBAAAA,CAAAA;;YAE/CE,cAAAA,CAAeE,KAAK,EAAA,CAAGC,KAAK,CAAC,IAAA;;AAE7B,YAAA,CAAA,CAAA;AACJ,QAAA;QAEA,IAAIC,WAAAA;QACJ,IAAI;gBAGUzB,uBAAAA,EACYA,uBAAAA;;AAFtByB,YAAAA,WAAAA,GAAc,MAAMC,YAAAA,CAAa;AAC7BT,gBAAAA,IAAI,GAAEjB,uBAAAA,GAAAA,SAAAA,CAAUgB,WAAW,MAAA,IAAA,IAArBhB,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuBiB,IAAI;AACjCE,gBAAAA,gBAAgB,GAAEnB,uBAAAA,GAAAA,SAAAA,CAAUgB,WAAW,MAAA,IAAA,IAArBhB,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuBmB,gBAAgB;gBACzDQ,eAAAA,EAAiB3B,SAAAA,CAAU2B,eAAe,IAAI,QAAA;AAC9ChB,gBAAAA,KAAAA,EAAOX,UAAUW;AACrB,aAAA,CAAA;QACJ,CAAA,QAAU;;AAEN,YAAA,IAAIU,cAAAA,EAAgB;AAChBA,gBAAAA,cAAAA,CAAeO,IAAI,EAAA;AACvB,YAAA;AACJ,QAAA;;QAGA,IAAIH,WAAAA,CAAYI,SAAS,EAAE;AACvB1B,YAAAA,MAAAA,CAAOG,IAAI,CAAC,gGAAA,CAAA;AACZ,YAAA,MAAM,IAAIwB,qBAAAA,CAAsB,gCAAA,CAAA;AACpC,QAAA;;QAGA,IAAIC,aAAAA;AAEJ,QAAA,IAAA,CAAI/B,0BAAAA,SAAAA,CAAUgB,WAAW,cAArBhB,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,uBAAAA,CAAuBiB,IAAI,EAAE;;YAE7Bc,aAAAA,GAAgB/B,SAAAA,CAAUgB,WAAW,CAACC,IAAI;QAC9C,CAAA,MAAO,IAAIQ,WAAAA,CAAYM,aAAa,EAAE;;AAElCA,YAAAA,aAAAA,GAAgBN,YAAYM,aAAa;QAC7C,CAAA,MAAO;;YAEH,MAAMC,SAAAA,GAAYhC,SAAAA,CAAU2B,eAAe,IAAI,QAAA;YAC/CI,aAAAA,GAAgBvC,IAAAA,CAAKC,IAAI,CAACuC,SAAAA,EAAWC,2BAAAA,EAAAA,CAAAA;YACrC9B,MAAAA,CAAOI,IAAI,CAAC,yIAAA,EAA2IwB,aAAAA,CAAAA;AACvJ5B,YAAAA,MAAAA,CAAOI,IAAI,CAAC,iHAAA,CAAA;AAChB,QAAA;;AAGAJ,QAAAA,MAAAA,CAAOG,IAAI,CAAC,iIAAA,CAAA;QAEZ,MAAM0B,SAAAA,GAAYhC,SAAAA,CAAU2B,eAAe,IAAI,QAAA;AAC/C,QAAA,MAAMO,mBAAmBC,oBAAAA,CAAqBH,SAAAA,CAAAA;AAC9C,QAAA,MAAMI,WAAWC,mBAAAA,CAAoBpC,QAAAA,CAAAA;QAErC,MAAMqC,aAAAA,GAAgB,MAAMC,eAAAA,CAAgBR,aAAAA,EAAe;YACvDS,KAAAA,EAAO,WAAA;AACP7B,YAAAA,KAAAA,EAAOX,UAAUW,KAAK;YACtB8B,OAAAA,EAASP,gBAAAA;YACT/B,MAAAA,EAAQiC,QAAAA;AACRM,YAAAA,SAAAA,EAAW,OAAOC,SAAAA,EAAmBC,iBAAAA,GAAAA;AACjC,gBAAA,MAAMZ,YAAYxC,IAAAA,CAAKC,IAAI,CAACO,SAAAA,CAAU2B,eAAe,IAAI,QAAA,EAAU,UAAA,CAAA;gBACnE,MAAMkB,YAAAA,CAAaF,WAAWC,iBAAAA,EAAmBZ,SAAAA,CAAAA;AACrD,YAAA;AACJ,SAAA,CAAA;AAEAd,QAAAA,YAAAA,GAAeoB,cAAcQ,IAAI;QAEjC,IAAI,CAAC5B,YAAAA,CAAa6B,IAAI,EAAA,EAAI;AACtB5C,YAAAA,MAAAA,CAAOI,IAAI,CAAC,6HAAA,CAAA;YACZW,YAAAA,GAAe,EAAA;QACnB,CAAA,MAAO;AACHf,YAAAA,MAAAA,CAAOG,IAAI,CAAC,6FAAA,GAAgGY,YAAAA,CAAa8B,MAAM,GAAG,6BAAA,CAAA;YAClI7C,MAAAA,CAAOQ,KAAK,CAAC,sBAAA,EAAwBO,YAAAA,CAAAA;AACzC,QAAA;AAEJ,IAAA,CAAA,CAAE,OAAOtB,KAAAA,EAAY;;AAEjB,QAAA,IAAIA,iBAAiBkC,qBAAAA,EAAuB;YACxC,MAAMlC,KAAAA;AACV,QAAA;;AAGA,QAAA,IAAIA,KAAAA,CAAMqD,IAAI,KAAK,mBAAA,IAAuBrD,iBAAiBsD,iBAAAA,EAAmB;YAC1E,MAAM,IAAIpB,qBAAAA,CAAsBlC,KAAAA,CAAME,OAAO,CAAA;AACjD,QAAA;AAEAK,QAAAA,MAAAA,CAAOP,KAAK,CAAC,0GAAA,EAA4GA,KAAAA,CAAME,OAAO,CAAA;AACtIK,QAAAA,MAAAA,CAAOG,IAAI,CAAC,6GAAA,CAAA;QACZY,YAAAA,GAAe,EAAA;AACnB,IAAA;;AAGAf,IAAAA,MAAAA,CAAOG,IAAI,CAAC,mIAAA,CAAA;IACZ,MAAMG,MAAAA,GAAS,MAAM0C,MAAAA,CAAc;AAC/B,QAAA,GAAGnD,SAAS;QACZoD,MAAAA,EAAQ;AACJ,YAAA,GAAGpD,UAAUoD,MAAM;YACnBC,SAAAA,EAAWnC,YAAAA,CAAa6B,IAAI,EAAA,KAAA,CAAM/C,iBAAAA,GAAAA,SAAAA,CAAUoD,MAAM,MAAA,IAAA,IAAhBpD,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAAA,CAAkBqD,SAAS,CAAA,IAAI;AACrE;AACJ,KAAA,CAAA;IAEA,OAAO5C,MAAAA;AACX,CAAA;AAEO,MAAMV,YAAU,OAAOC,SAAAA,GAAAA;IAC1B,IAAI;AACA,QAAA,OAAO,MAAMe,eAAAA,CAAgBf,SAAAA,CAAAA;AACjC,IAAA,CAAA,CAAE,OAAOJ,KAAAA,EAAY;AACjB,QAAA,MAAMO,MAAAA,GAASmD,SAAAA,EAAAA;;AAGf,QAAA,IAAI1D,iBAAiBkC,qBAAAA,EAAuB;AACxC3B,YAAAA,MAAAA,CAAOG,IAAI,CAAC,yDAAA,GAA4DV,KAAAA,CAAME,OAAO,CAAA;AACrF,YAAA,MAAMF;AACV,QAAA;;QAGAO,MAAAA,CAAOP,KAAK,CAAC,CAAC,0DAA0D,EAAEA,KAAAA,CAAME,OAAO,CAAC,+BAA+B,CAAC,CAAA;QACxH,IAAIF,KAAAA,CAAM2D,KAAK,EAAE;YACbpD,MAAAA,CAAOQ,KAAK,CAAC,CAAC,WAAW,EAAEf,KAAAA,CAAM2D,KAAK,CAACzD,OAAO,CAAA,CAAE,CAAA;AACpD,QAAA;AACA,QAAA,MAAMF;AACV,IAAA;AACJ;;AC3JA;AACA,MAAM4D,gBAAAA,GAAmB;AAAC,IAAA,MAAA;AAAQ,IAAA,MAAA;AAAQ,IAAA,MAAA;AAAQ,IAAA,MAAA;AAAQ,IAAA,OAAA;AAAS,IAAA,MAAA;AAAQ,IAAA;AAAO,CAAA;AAElF;;IAGA,MAAMC,qBAAqB,OAAOC,SAAAA,GAAAA;AAC9B,IAAA,MAAMvD,MAAAA,GAASmD,SAAAA,EAAAA;AACf,IAAA,MAAMb,OAAAA,GAAUkB,aAAAA,EAAAA;IAEhB,IAAI;AACA,QAAA,IAAI,CAAE,MAAMlB,OAAAA,CAAQmB,mBAAmB,CAACF,SAAAA,CAAAA,EAAa;AACjD,YAAA,MAAM,IAAI7D,KAAAA,CAAM,CAAC,wBAAwB,EAAE6D,SAAAA,CAAAA,CAAW,CAAA;AAC1D,QAAA;AAEA,QAAA,MAAMG,QAAAA,GAAW,MAAMpB,OAAAA,CAAQqB,SAAS,CAACJ,SAAAA,CAAAA;QACzC,MAAMK,UAAAA,GAAaF,QAAAA,CACdG,MAAM,CAAC/C,CAAAA,IAAAA,GAAQuC,gBAAAA,CAAiB5C,QAAQ,CAACpB,IAAAA,CAAKyE,OAAO,CAAChD,IAAAA,CAAAA,CAAMiD,WAAW,EAAA,CAAA,CAAA,CACvEC,GAAG,CAAClD,CAAAA,IAAAA,GAAQzB,IAAAA,CAAKC,IAAI,CAACiE,SAAAA,EAAWzC,IAAAA,CAAAA,CAAAA,CACjCmD,IAAI,EAAA,CAAA;AAETjE,QAAAA,MAAAA,CAAOG,IAAI,CAAC,CAAC,kEAAkE,EAAEyD,UAAAA,CAAWf,MAAM,CAAC,cAAc,EAAEU,SAAAA,CAAU,+BAA+B,CAAC,CAAA;AAC7JvD,QAAAA,MAAAA,CAAOQ,KAAK,CAAC,uBAAA,EAAyBoD,UAAAA,CAAWtE,IAAI,CAAC,IAAA,CAAA,CAAA;QAEtD,OAAOsE,UAAAA;AACX,IAAA,CAAA,CAAE,OAAOnE,KAAAA,EAAY;AACjBO,QAAAA,MAAAA,CAAOP,KAAK,CAAC,0HAAA,EAA4H8D,SAAAA,EAAW9D,MAAME,OAAO,CAAA;QACjK,MAAMF,KAAAA;AACV,IAAA;AACJ,CAAA;AAEA;;IAGA,MAAMyE,sBAAAA,GAAyB,OAAOtC,aAAAA,EAAuB/B,SAAAA,GAAAA;AACzD,IAAA,MAAMG,MAAAA,GAASmD,SAAAA,EAAAA;IAEf,IAAI;AAyC8BtD,QAAAA,IAAAA,sBAAAA,EACFA,yBACCA,uBAAAA,EACAA,uBAAAA,EACDA,yBACFA,uBAAAA,EACCA,uBAAAA,EACAA,yBACXA,uBAAAA,EACCA,uBAAAA;AAjDjBG,QAAAA,MAAAA,CAAOG,IAAI,CAAC,4FAAA,EAA8Fd,IAAAA,CAAK8E,QAAQ,CAACvC,aAAAA,CAAAA,CAAAA;;AAGxH5B,QAAAA,MAAAA,CAAOG,IAAI,CAAC,gIAAA,CAAA;QAEZ,MAAM0B,SAAAA,GAAYhC,SAAAA,CAAU2B,eAAe,IAAI,QAAA;AAC/C,QAAA,MAAMO,mBAAmBC,oBAAAA,CAAqBH,SAAAA,CAAAA;AAC9C,QAAA,MAAMI,QAAAA,GAAWC,mBAAAA,CAAoBrC,SAAAA,CAAUE,MAAM,IAAI,KAAA,CAAA;QAEzD,MAAMoC,aAAAA,GAAgB,MAAMC,eAAAA,CAAgBR,aAAAA,EAAe;YACvDS,KAAAA,EAAO,WAAA;AACP7B,YAAAA,KAAAA,EAAOX,UAAUW,KAAK;YACtB8B,OAAAA,EAASP,gBAAAA;YACT/B,MAAAA,EAAQiC,QAAAA;AACRM,YAAAA,SAAAA,EAAW,OAAOC,SAAAA,EAAmBC,iBAAAA,GAAAA;AACjC,gBAAA,MAAMZ,YAAYxC,IAAAA,CAAKC,IAAI,CAACO,SAAAA,CAAU2B,eAAe,IAAI,QAAA,EAAU,UAAA,CAAA;gBACnE,MAAMkB,YAAAA,CAAaF,WAAWC,iBAAAA,EAAmBZ,SAAAA,CAAAA;AACrD,YAAA;AACJ,SAAA,CAAA;;QAGA,IAAI,CAACM,iBAAiB,OAAOA,aAAAA,KAAkB,YAAY,OAAOA,aAAAA,CAAcQ,IAAI,KAAK,QAAA,EAAU;AAC/F,YAAA,MAAM,IAAIjD,KAAAA,CAAM,gEAAA,CAAA;AACpB,QAAA;QACA,MAAMqB,YAAAA,GAAeoB,cAAcQ,IAAI;QAEvC,IAAI,CAAC5B,YAAAA,CAAa6B,IAAI,EAAA,EAAI;YACtB5C,MAAAA,CAAOI,IAAI,CAAC,yHAAA,EAA2HwB,aAAAA,CAAAA;YACvI,OAAO,EAAA;QACX,CAAA,MAAO;YACH5B,MAAAA,CAAOG,IAAI,CAAC,6GAAA,EAA+Gd,IAAAA,CAAK8E,QAAQ,CAACvC,aAAAA,CAAAA,EAAgBb,aAAa8B,MAAM,CAAA;YAC5K7C,MAAAA,CAAOQ,KAAK,CAAC,sBAAA,EAAwBO,YAAAA,CAAAA;AACzC,QAAA;;AAGAf,QAAAA,MAAAA,CAAOG,IAAI,CAAC,qHAAA,EAAuHd,IAAAA,CAAK8E,QAAQ,CAACvC,aAAAA,CAAAA,CAAAA;QACjJ,MAAMtB,MAAAA,GAAS,MAAM8D,MAAAA,CAAc;AAC/B,YAAA,GAAGvE,SAAS;YACZwE,MAAAA,EAAQ;;AAEJC,gBAAAA,oBAAoB,GAAEzE,sBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,sBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,uBAAuByE,oBAAoB;AACjEE,gBAAAA,kBAAkB,GAAE3E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuB2E,kBAAkB;AAC7DC,gBAAAA,mBAAmB,GAAE5E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuB4E,mBAAmB;AAC/DC,gBAAAA,mBAAmB,GAAE7E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuB6E,mBAAmB;AAC/DC,gBAAAA,kBAAkB,GAAE9E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuB8E,kBAAkB;AAC7DC,gBAAAA,gBAAgB,GAAE/E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuB+E,gBAAgB;AACzDC,gBAAAA,iBAAiB,GAAEhF,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuBgF,iBAAiB;AAC3DC,gBAAAA,iBAAiB,GAAEjF,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuBiF,iBAAiB;AAC3DC,gBAAAA,MAAM,GAAElF,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuBkF,MAAM;AACrCC,gBAAAA,OAAO,GAAEnF,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAuBmF,OAAO;;gBAEvCC,IAAAA,EAAM,CAAC,kBAAkB,EAAE5F,IAAAA,CAAK8E,QAAQ,CAACvC,aAAAA,CAAAA,CAAe,KAAK,EAAEb,YAAAA,CAAa6B,IAAI,EAAA,CAAA;AACpF;AACJ,SAAA,CAAA;QAEA,OAAOtC,MAAAA;AAEX,IAAA,CAAA,CAAE,OAAOb,KAAAA,EAAY;AACjBO,QAAAA,MAAAA,CAAOP,KAAK,CAAC,2GAAA,EAA6GmC,aAAAA,EAAenC,MAAME,OAAO,CAAA;QACtJ,OAAO,CAAC,kBAAkB,EAAEN,IAAAA,CAAK8E,QAAQ,CAACvC,aAAAA,CAAAA,CAAe,EAAE,EAAEnC,KAAAA,CAAME,OAAO,CAAA,CAAE;AAChF,IAAA;AACJ,CAAA;AAEO,MAAMC,UAAU,OAAOC,SAAAA,GAAAA;QAyLIA,sBAAAA,EACFA,uBAAAA,EACCA,yBACAA,uBAAAA,EACDA,uBAAAA,EACFA,yBACCA,uBAAAA,EACAA,uBAAAA,EACXA,yBACCA,uBAAAA,EAEoBA,iBAAAA;IAnMrC,MAAMC,QAAAA,GAAWD,SAAAA,CAAUE,MAAM,IAAI,KAAA;AACrC,IAAA,MAAMC,SAASC,eAAAA,CAAgBH,QAAAA,CAAAA;;IAG/B,MAAMoF,iBAAAA,GAAoBrF,UAAU0E,WAAW;IAC/C,MAAMhB,SAAAA,GAAY2B,iBAAAA,IAAqB,OAAOA,iBAAAA,KAAsB,QAAA,IAAY,eAAeA,iBAAAA,GACxFA,iBAAAA,CAA0B3B,SAAS,GACpC4B,SAAAA;AAEN,IAAA,IAAI5B,SAAAA,EAAW;;QAEXvD,MAAAA,CAAOG,IAAI,CAAC,qIAAA,EAAuIoD,SAAAA,CAAAA;AAEnJ,QAAA,IAAIzD,QAAAA,EAAU;YACVE,MAAAA,CAAOG,IAAI,CAAC,8IAAA,EAAgJoD,SAAAA,CAAAA;AAC5JvD,YAAAA,MAAAA,CAAOG,IAAI,CAAC,2HAAA,CAAA;YACZ,OAAO,wDAAA;AACX,QAAA;QAEA,IAAI;;YAEA,MAAMyD,UAAAA,GAAa,MAAMN,kBAAAA,CAAmBC,SAAAA,CAAAA;YAE5C,IAAIK,UAAAA,CAAWf,MAAM,KAAK,CAAA,EAAG;gBACzB7C,MAAAA,CAAOI,IAAI,CAAC,4IAAA,EAA8ImD,SAAAA,CAAAA;gBAC1J,OAAO,iCAAA;AACX,YAAA;AAEA,YAAA,MAAM6B,UAAoB,EAAE;;AAG5B,YAAA,IAAK,IAAIC,CAAAA,GAAI,CAAA,EAAGA,IAAIzB,UAAAA,CAAWf,MAAM,EAAEwC,CAAAA,EAAAA,CAAK;gBACxC,MAAMC,SAAAA,GAAY1B,UAAU,CAACyB,CAAAA,CAAE;AAC/BrF,gBAAAA,MAAAA,CAAOG,IAAI,CAAC,CAAC,6DAA6D,EAAEkF,IAAI,CAAA,CAAE,CAAC,EAAEzB,UAAAA,CAAWf,MAAM,CAAC,SAAS,EAAExD,IAAAA,CAAK8E,QAAQ,CAACmB,SAAAA,CAAAA,CAAAA,CAAY,CAAA;gBAE5I,MAAMhF,MAAAA,GAAS,MAAM4D,sBAAAA,CAAuBoB,SAAAA,EAAWzF,SAAAA,CAAAA;gBACvDuF,OAAAA,CAAQG,IAAI,CAAC,CAAC,MAAM,EAAElG,IAAAA,CAAK8E,QAAQ,CAACmB,SAAAA,CAAAA,CAAW,EAAE,EAAEhF,MAAAA,CAAAA,CAAQ,CAAA;;AAG3D,gBAAA,IAAI+E,CAAAA,GAAIzB,UAAAA,CAAWf,MAAM,GAAG,CAAA,EAAG;AAC3B7C,oBAAAA,MAAAA,CAAOG,IAAI,CAAC,wFAAA,EAA0Fd,IAAAA,CAAK8E,QAAQ,CAACmB,SAAAA,CAAAA,CAAAA;AACxH,gBAAA;AACJ,YAAA;AAEAtF,YAAAA,MAAAA,CAAOG,IAAI,CAAC,uGAAA,EAAyGyD,UAAAA,CAAWf,MAAM,CAAA;;AAGtI,YAAA,MAAM2C,eAAAA,GAAkB,CAAC,4BAA4B,EAAE5B,UAAAA,CAAWf,MAAM,CAAC,YAAY,CAAC,GAClFuC,OAAAA,CAAQ9F,IAAI,CAAC,aAAA,CAAA;YAEjB,OAAOkG,eAAAA;AAEX,QAAA,CAAA,CAAE,OAAO/F,KAAAA,EAAY;AACjBO,YAAAA,MAAAA,CAAOP,KAAK,CAAC,qGAAA,EAAuGA,KAAAA,CAAME,OAAO,CAAA;YACjI,MAAMF,KAAAA;AACV,QAAA;AACJ,IAAA;;AAGA,IAAA,IAAIK,QAAAA,EAAU;AACND,QAAAA,IAAAA,wBAAAA;AAAJ,QAAA,IAAA,CAAIA,2BAAAA,SAAAA,CAAU0E,WAAW,cAArB1E,wBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAAA,CAAuBiB,IAAI,EAAE;AAC7Bd,YAAAA,MAAAA,CAAOG,IAAI,CAAC,+GAAA,EAAiHN,SAAAA,CAAU0E,WAAW,CAACzD,IAAI,CAAA;AACvJd,YAAAA,MAAAA,CAAOG,IAAI,CAAC,kHAAA,CAAA;QAChB,CAAA,MAAO;AACHH,YAAAA,MAAAA,CAAOG,IAAI,CAAC,oGAAA,CAAA;AACZH,YAAAA,MAAAA,CAAOG,IAAI,CAAC,iHAAA,CAAA;AAChB,QAAA;AACAH,QAAAA,MAAAA,CAAOG,IAAI,CAAC,sHAAA,CAAA;;QAGZ,OAAO,6FAAA;AACX,IAAA;IAEA,IAAIY,YAAAA;IAEJ,IAAI;AAIKlB,QAAAA,IAAAA,wBAAAA,EAKoBA,0BACJA,wBAAAA,EAoCjBA,wBAAAA;;AA5CJG,QAAAA,MAAAA,CAAOG,IAAI,CAAC,gHAAA,CAAA;QAEZ,IAAI,EAAA,CAACN,2BAAAA,SAAAA,CAAU0E,WAAW,cAArB1E,wBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAAA,CAAuBiB,IAAI,CAAA,EAAE;AAC9Bd,YAAAA,MAAAA,CAAOG,IAAI,CAAC,qHAAA,CAAA;AAChB,QAAA;;AAGA,QAAA,MAAMa,oBAAmBnB,wBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,wBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,yBAAuBmB,gBAAgB;QAChE,MAAMC,WAAAA,GAAc,GAACpB,wBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,wBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,yBAAuBiB,IAAI,CAAA;AAChD,QAAA,IAAII,cAAAA,GAA0E,IAAA;QAE9E,IAAID,WAAAA,IAAeD,gBAAAA,IAAoBA,gBAAAA,GAAmB,CAAA,EAAG;AACzDE,YAAAA,cAAAA,GAAiBC,6BAAAA,CAA8BH,gBAAAA,CAAAA;;YAE/CE,cAAAA,CAAeE,KAAK,EAAA,CAAGC,KAAK,CAAC,IAAA;;AAE7B,YAAA,CAAA,CAAA;AACJ,QAAA;QAEA,IAAIC,WAAAA;QACJ,IAAI;gBAGUzB,wBAAAA,EACYA,wBAAAA;;AAFtByB,YAAAA,WAAAA,GAAc,MAAMC,YAAAA,CAAa;AAC7BT,gBAAAA,IAAI,GAAEjB,wBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,wBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,yBAAuBiB,IAAI;AACjCE,gBAAAA,gBAAgB,GAAEnB,wBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,wBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,yBAAuBmB,gBAAgB;gBACzDQ,eAAAA,EAAiB3B,SAAAA,CAAU2B,eAAe,IAAI,QAAA;AAC9ChB,gBAAAA,KAAAA,EAAOX,UAAUW;AACrB,aAAA,CAAA;QACJ,CAAA,QAAU;;AAEN,YAAA,IAAIU,cAAAA,EAAgB;AAChBA,gBAAAA,cAAAA,CAAeO,IAAI,EAAA;AACvB,YAAA;AACJ,QAAA;;QAGA,IAAIH,WAAAA,CAAYI,SAAS,EAAE;AACvB1B,YAAAA,MAAAA,CAAOG,IAAI,CAAC,gGAAA,CAAA;AACZ,YAAA,MAAM,IAAI4C,iBAAAA,CAAkB,gCAAA,CAAA;AAChC,QAAA;;QAGA,IAAInB,aAAAA;AAEJ,QAAA,IAAA,CAAI/B,2BAAAA,SAAAA,CAAU0E,WAAW,cAArB1E,wBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,wBAAAA,CAAuBiB,IAAI,EAAE;;YAE7Bc,aAAAA,GAAgB/B,SAAAA,CAAU0E,WAAW,CAACzD,IAAI;QAC9C,CAAA,MAAO,IAAIQ,WAAAA,CAAYM,aAAa,EAAE;;AAElCA,YAAAA,aAAAA,GAAgBN,YAAYM,aAAa;QAC7C,CAAA,MAAO;;YAEH,MAAMC,SAAAA,GAAYhC,SAAAA,CAAU2B,eAAe,IAAI,QAAA;YAC/CI,aAAAA,GAAgBvC,IAAAA,CAAKC,IAAI,CAACuC,SAAAA,EAAWC,2BAAAA,EAAAA,CAAAA;YACrC9B,MAAAA,CAAOI,IAAI,CAAC,yIAAA,EAA2IwB,aAAAA,CAAAA;AACvJ5B,YAAAA,MAAAA,CAAOI,IAAI,CAAC,iHAAA,CAAA;AAChB,QAAA;;AAGAJ,QAAAA,MAAAA,CAAOG,IAAI,CAAC,uIAAA,CAAA;QAEZ,MAAM0B,SAAAA,GAAYhC,SAAAA,CAAU2B,eAAe,IAAI,QAAA;AAC/C,QAAA,MAAMO,mBAAmBC,oBAAAA,CAAqBH,SAAAA,CAAAA;AAC9C,QAAA,MAAMI,WAAWC,mBAAAA,CAAoBpC,QAAAA,CAAAA;QAErC,MAAMqC,aAAAA,GAAgB,MAAMC,eAAAA,CAAgBR,aAAAA,EAAe;YACvDS,KAAAA,EAAO,WAAA;AACP7B,YAAAA,KAAAA,EAAOX,UAAUW,KAAK;YACtB8B,OAAAA,EAASP,gBAAAA;YACT/B,MAAAA,EAAQiC,QAAAA;AACRM,YAAAA,SAAAA,EAAW,OAAOC,SAAAA,EAAmBC,iBAAAA,GAAAA;AACjC,gBAAA,MAAMZ,YAAYxC,IAAAA,CAAKC,IAAI,CAACO,SAAAA,CAAU2B,eAAe,IAAI,QAAA,EAAU,UAAA,CAAA;gBACnE,MAAMkB,YAAAA,CAAaF,WAAWC,iBAAAA,EAAmBZ,SAAAA,CAAAA;AACrD,YAAA;AACJ,SAAA,CAAA;;QAGA,IAAI,CAACM,iBAAiB,OAAOA,aAAAA,KAAkB,YAAY,OAAOA,aAAAA,CAAcQ,IAAI,KAAK,QAAA,EAAU;AAC/F,YAAA,MAAM,IAAIjD,KAAAA,CAAM,gEAAA,CAAA;AACpB,QAAA;AACAqB,QAAAA,YAAAA,GAAeoB,cAAcQ,IAAI;QAEjC,IAAI,CAAC5B,YAAAA,CAAa6B,IAAI,EAAA,EAAI;AACtB5C,YAAAA,MAAAA,CAAOI,IAAI,CAAC,6HAAA,CAAA;YACZW,YAAAA,GAAe,EAAA;QACnB,CAAA,MAAO;AACHf,YAAAA,MAAAA,CAAOG,IAAI,CAAC,6FAAA,GAAgGY,YAAAA,CAAa8B,MAAM,GAAG,6BAAA,CAAA;YAClI7C,MAAAA,CAAOQ,KAAK,CAAC,sBAAA,EAAwBO,YAAAA,CAAAA;AACzC,QAAA;AAEJ,IAAA,CAAA,CAAE,OAAOtB,KAAAA,EAAY;;QAEjB,IAAIA,KAAAA,CAAMqD,IAAI,KAAK,mBAAA,EAAqB;YACpC,MAAMrD,KAAAA;AACV,QAAA;AAEAO,QAAAA,MAAAA,CAAOP,KAAK,CAAC,0GAAA,EAA4GA,KAAAA,CAAME,OAAO,CAAA;AACtIK,QAAAA,MAAAA,CAAOG,IAAI,CAAC,2GAAA,CAAA;QACZY,YAAAA,GAAe,EAAA;AACnB,IAAA;;AAGAf,IAAAA,MAAAA,CAAOG,IAAI,CAAC,+HAAA,CAAA;IACZ,MAAMG,MAAAA,GAAS,MAAM8D,MAAAA,CAAc;AAC/B,QAAA,GAAGvE,SAAS;QACZwE,MAAAA,EAAQ;;AAEJC,YAAAA,oBAAoB,GAAEzE,sBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,sBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,uBAAuByE,oBAAoB;AACjEE,YAAAA,kBAAkB,GAAE3E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuB2E,kBAAkB;AAC7DC,YAAAA,mBAAmB,GAAE5E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuB4E,mBAAmB;AAC/DC,YAAAA,mBAAmB,GAAE7E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuB6E,mBAAmB;AAC/DC,YAAAA,kBAAkB,GAAE9E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuB8E,kBAAkB;AAC7DC,YAAAA,gBAAgB,GAAE/E,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuB+E,gBAAgB;AACzDC,YAAAA,iBAAiB,GAAEhF,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuBgF,iBAAiB;AAC3DC,YAAAA,iBAAiB,GAAEjF,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuBiF,iBAAiB;AAC3DC,YAAAA,MAAM,GAAElF,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuBkF,MAAM;AACrCC,YAAAA,OAAO,GAAEnF,uBAAAA,GAAAA,SAAAA,CAAU0E,WAAW,MAAA,IAAA,IAArB1E,uBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,wBAAuBmF,OAAO;;YAEvCC,IAAAA,EAAMlE,YAAAA,CAAa6B,IAAI,EAAA,KAAA,CAAM/C,iBAAAA,GAAAA,SAAAA,CAAUwE,MAAM,MAAA,IAAA,IAAhBxE,iBAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAAA,iBAAAA,CAAkBoF,IAAI,CAAA,IAAI;AAC3D;AACJ,KAAA,CAAA;IAEA,OAAO3E,MAAAA;AACX;;;;"}
|