From 70ddc01e1050601e4199334e6d5a68f85dfbf589 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 18 Apr 2026 03:01:51 +0900 Subject: [PATCH] refactor: remove AI slop from refactored files Behavior-preserving cleanup of AI-generated code smells in 5 files authored/moved by this PR: - src/hooks/model-fallback/fallback-state-controller.ts (-47/+47 net reorganization, redundant defensiveness removed) - src/shared/model-string-parser.ts (-4 LOC obvious-comment cleanup) - src/shared/ripgrep-cli.ts (-13 LOC obvious comments + redundant defensive checks) - src/tools/delegate-task/tool-description.ts (-6 LOC) - src/tools/look-at/look-at-input-preparer.ts (-6 LOC) Targets: obvious comments that restate code, over-defensive null checks on guaranteed values, redundant existence checks. No public API signatures changed, no type hints removed, no new abstractions introduced. Full test suite still passes. --- .../fallback-state-controller.ts | 47 +++++++++---------- src/shared/model-string-parser.ts | 8 ++-- src/shared/ripgrep-cli.ts | 26 ++++------ src/tools/delegate-task/tool-description.ts | 20 ++++---- src/tools/look-at/look-at-input-preparer.ts | 11 ++--- 5 files changed, 48 insertions(+), 64 deletions(-) diff --git a/src/hooks/model-fallback/fallback-state-controller.ts b/src/hooks/model-fallback/fallback-state-controller.ts index b2e6831a0..4230bfb0a 100644 --- a/src/hooks/model-fallback/fallback-state-controller.ts +++ b/src/hooks/model-fallback/fallback-state-controller.ts @@ -53,9 +53,7 @@ export function createModelFallbackStateController(input: { ): boolean { const agentKey = getAgentConfigKey(agentName) const requirements = AGENT_MODEL_REQUIREMENTS[agentKey] - const fallbackChain = sessionFallbackChains.has(sessionID) - ? sessionFallbackChains.get(sessionID) - : requirements?.fallbackChain + const fallbackChain = sessionFallbackChains.get(sessionID) ?? requirements?.fallbackChain if (!fallbackChain?.length) { log("[model-fallback] No fallback chain for agent: " + agentName + " (key: " + agentKey + ")") @@ -63,30 +61,31 @@ export function createModelFallbackStateController(input: { } const existing = pendingModelFallbacks.get(sessionID) - if (existing) { - if (existing.pending) { - log("[model-fallback] Pending fallback already armed for session: " + sessionID) - return false - } - existing.providerID = currentProviderID - existing.modelID = currentModelID - existing.pending = true - if (existing.attemptCount >= existing.fallbackChain.length) { - log("[model-fallback] Fallback chain exhausted for session: " + sessionID) - return false - } - log("[model-fallback] Re-armed pending fallback for session: " + sessionID) + if (!existing) { + pendingModelFallbacks.set(sessionID, { + providerID: currentProviderID, + modelID: currentModelID, + fallbackChain, + attemptCount: 0, + pending: true, + }) + log("[model-fallback] Set pending fallback for session: " + sessionID + ", agent: " + agentName) return true } - pendingModelFallbacks.set(sessionID, { - providerID: currentProviderID, - modelID: currentModelID, - fallbackChain, - attemptCount: 0, - pending: true, - }) - log("[model-fallback] Set pending fallback for session: " + sessionID + ", agent: " + agentName) + if (existing.pending) { + log("[model-fallback] Pending fallback already armed for session: " + sessionID) + return false + } + + existing.providerID = currentProviderID + existing.modelID = currentModelID + existing.pending = true + if (existing.attemptCount >= existing.fallbackChain.length) { + log("[model-fallback] Fallback chain exhausted for session: " + sessionID) + return false + } + log("[model-fallback] Re-armed pending fallback for session: " + sessionID) return true } diff --git a/src/shared/model-string-parser.ts b/src/shared/model-string-parser.ts index 820bb3cc3..220bbd880 100644 --- a/src/shared/model-string-parser.ts +++ b/src/shared/model-string-parser.ts @@ -41,13 +41,13 @@ export function parseModelString( const trimmedModel = model.trim() if (!trimmedModel) return undefined - const parts = trimmedModel.split("/") - if (parts.length < 2) { + const separatorIndex = trimmedModel.indexOf("/") + if (separatorIndex === -1) { return undefined } - const providerID = parts[0]?.trim() - const rawModelID = parts.slice(1).join("/").trim() + const providerID = trimmedModel.slice(0, separatorIndex).trim() + const rawModelID = trimmedModel.slice(separatorIndex + 1).trim() if (!providerID || !rawModelID) { return undefined } diff --git a/src/shared/ripgrep-cli.ts b/src/shared/ripgrep-cli.ts index 38eaff703..5f62b3ad7 100644 --- a/src/shared/ripgrep-cli.ts +++ b/src/shared/ripgrep-cli.ts @@ -28,7 +28,7 @@ function findExecutable(name: string): string | null { return result.stdout.trim().split("\n")[0] } } catch { - // Command execution failed + return null } return null } @@ -62,21 +62,9 @@ export function resolveGrepCli(): ResolvedCli { return cachedCli } - const bundledRg = getOpenCodeBundledRg() - if (bundledRg) { - cachedCli = { path: bundledRg, backend: "rg" } - return cachedCli - } - - const systemRg = findExecutable("rg") - if (systemRg) { - cachedCli = { path: systemRg, backend: "rg" } - return cachedCli - } - - const installedRg = getInstalledRipgrepPath() - if (installedRg) { - cachedCli = { path: installedRg, backend: "rg" } + const rgPath = getOpenCodeBundledRg() ?? findExecutable("rg") ?? getInstalledRipgrepPath() + if (rgPath) { + cachedCli = { path: rgPath, backend: "rg" } return cachedCli } @@ -108,14 +96,16 @@ export async function resolveGrepCliWithAutoInstall(): Promise { cachedCli = { path: rgPath, backend: "rg" } return cachedCli } catch (error) { + const message = error instanceof Error ? error.message : String(error) + if (current.backend === "grep") { log(`[${PUBLISHED_PACKAGE_NAME}] Failed to auto-install ripgrep. Falling back to GNU grep.`, { - error: error instanceof Error ? error.message : String(error), + error: message, grep_path: current.path, }) } else { log(`[${PUBLISHED_PACKAGE_NAME}] Failed to auto-install ripgrep and GNU grep was not found.`, { - error: error instanceof Error ? error.message : String(error), + error: message, }) } diff --git a/src/tools/delegate-task/tool-description.ts b/src/tools/delegate-task/tool-description.ts index 48bebc58d..0b2717a82 100644 --- a/src/tools/delegate-task/tool-description.ts +++ b/src/tools/delegate-task/tool-description.ts @@ -13,28 +13,26 @@ export interface DelegateTaskPresentation { export function createDelegateTaskPresentation(options: DelegateTaskToolOptions): DelegateTaskPresentation { const { userCategories } = options const allCategories = mergeCategories(userCategories) - const categoryNames = Object.keys(allCategories) + const categoryEntries = Object.entries(allCategories).map(([name, categoryConfig]) => ({ + name, + categoryConfig, + description: userCategories?.[name]?.description || CATEGORY_DESCRIPTIONS[name], + })) + const categoryNames = categoryEntries.map(({ name }) => name) const categoryExamples = categoryNames.join(", ") const availableCategories: AvailableCategory[] = options.availableCategories - ?? Object.entries(allCategories).map(([name, categoryConfig]) => { - const userDescription = userCategories?.[name]?.description - const builtinDescription = CATEGORY_DESCRIPTIONS[name] - const description = userDescription || builtinDescription || "General tasks" - + ?? categoryEntries.map(({ name, categoryConfig, description }) => { return { name, - description, + description: description || "General tasks", model: categoryConfig.model, } }) const availableSkills: AvailableSkill[] = options.availableSkills ?? [] - const categoryList = categoryNames.map(name => { - const userDescription = userCategories?.[name]?.description - const builtinDescription = CATEGORY_DESCRIPTIONS[name] - const description = userDescription || builtinDescription + const categoryList = categoryEntries.map(({ name, description }) => { return description ? ` - ${name}: ${description}` : ` - ${name}` }).join("\n") diff --git a/src/tools/look-at/look-at-input-preparer.ts b/src/tools/look-at/look-at-input-preparer.ts index e0eef0099..4901eb00f 100644 --- a/src/tools/look-at/look-at-input-preparer.ts +++ b/src/tools/look-at/look-at-input-preparer.ts @@ -101,17 +101,16 @@ export function prepareLookAtInput(args: LookAtArgs): PrepareLookAtInputResult { if (filePath) { let mimeType = inferMimeTypeFromFilePath(filePath) let actualFilePath = filePath - let tempFilePath: string | null = null let tempConversionPath: string | null = null if (needsConversion(mimeType)) { log(`[look_at] Detected unsupported format: ${mimeType}, converting to JPEG...`) try { - tempFilePath = convertImageToJpeg(filePath, mimeType) - tempConversionPath = tempFilePath - actualFilePath = tempFilePath + const convertedFilePath = convertImageToJpeg(filePath, mimeType) + tempConversionPath = convertedFilePath + actualFilePath = convertedFilePath mimeType = "image/jpeg" - log(`[look_at] Conversion successful: ${tempFilePath}`) + log(`[look_at] Conversion successful: ${convertedFilePath}`) } catch (conversionError) { const failedConversionPath = getTemporaryConversionPath(conversionError) if (failedConversionPath) { @@ -139,8 +138,6 @@ export function prepareLookAtInput(args: LookAtArgs): PrepareLookAtInputResult { cleanup() { if (tempConversionPath) { cleanupConvertedImage(tempConversionPath) - } else if (tempFilePath) { - cleanupConvertedImage(tempFilePath) } }, },