{"record":{"id":"2c89842fe6b850c3","repo":"jlcodes99/cockpit-tools","slug":"antigravityruntime-failed-to-detect-target","errorCode":null,"errorMessage":"[AntigravityRuntime] failed to detect ${target} ${scanMode} version:","messagePattern":"\\[AntigravityRuntime\\] failed to detect (.+?) (.+?) version:","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"src/services/antigravityRuntimeService.ts","lineNumber":37,"sourceCode":"    scanMode,\n  });\n}\n\nfunction getAlternateAntigravityRuntimeTarget(\n  target: AntigravityRuntimeTarget,\n): AntigravityRuntimeTarget {\n  return target === 'antigravity_ide' ? 'antigravity' : 'antigravity_ide';\n}\n\nasync function detectTargetVersion(\n  target: AntigravityRuntimeTarget,\n  scanMode: AntigravityInstalledVersionScanMode,\n): Promise<boolean> {\n  try {\n    const info = await getAntigravityInstalledVersionInfo(target, scanMode);\n    return !!info?.version;\n  } catch (error) {\n    console.warn(\n      `[AntigravityRuntime] failed to detect ${target} ${scanMode} version:`,\n      error,\n    );\n    return false;\n  }\n}\n\nexport async function resolvePreferredAntigravityRuntimeTarget(\n  currentTarget: AntigravityRuntimeTarget,\n): Promise<AntigravityRuntimeTarget> {\n  const alternateTarget = getAlternateAntigravityRuntimeTarget(currentTarget);\n\n  const [currentQuickAvailable, alternateQuickAvailable] = await Promise.all([\n    detectTargetVersion(currentTarget, 'quick'),\n    detectTargetVersion(alternateTarget, 'quick'),\n  ]);\n  if (currentQuickAvailable) {\n    return currentTarget;","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/jlcodes99/cockpit-tools/blob/1ed8b77992d62ca81fabf744deb0839ad361d5bf/src/services/antigravityRuntimeService.ts#L19-L55","documentation":"detectTargetVersion in src/services/antigravityRuntimeService.ts:37 wraps getAntigravityInstalledVersionInfo(target, scanMode) in try/catch. On rejection it warns '[AntigravityRuntime] failed to detect ${target} ${scanMode} version:' and returns false, signaling the runtime version is not detectable. The message is informational; the boolean false drives availability checks like currentQuickAvailable/alternateFullAvailable.","triggerScenarios":"Calling any availability helper (currentQuickAvailable, alternateQuickAvailable, currentFullAvailable, alternateFullAvailable) when the backend version-info command rejects — runtime binary missing, install path unreadable, unsupported scan mode, or IPC failure.","commonSituations":"Antigravity not installed or partially upgraded so version metadata is absent; permission errors reading the install directory; stale cached install path after an update; running in a non-Tauri context where invoke fails.","solutions":["Check the warn payload for the underlying invoke error to identify the failing target/scanMode.","Verify the Antigravity runtime for that target is installed and its executable path exists.","Retry after an install/upgrade completes, or trigger a rescan of installed versions.","Treat the returned false as expected when the target is intentionally not installed — it is not a hard failure."],"exampleFix":"// before\nreturn false; // after warn\n// after\nconsole.warn(...);\nconst fallback = await getAntigravityInstalledVersionInfo(target, 'full').catch(() => null);\nreturn !!fallback?.version;","handlingStrategy":"fallback","validationCode":"// Check installation before querying version info:\nconst installed = await invoke<boolean>('antigravity_is_installed', { target });\nif (!installed) return false;","typeGuard":"function hasVersionInfo(info: { version?: string | null } | null): info is { version: string } {\n  return typeof info?.version === 'string' && info.version.length > 0;\n}","tryCatchPattern":"try {\n  const info = await getAntigravityInstalledVersionInfo(target, scanMode);\n  return !!info?.version;\n} catch (error) {\n  console.warn(`[AntigravityRuntime] failed to detect ${target} ${scanMode} version:`, error);\n  return false;\n}","preventionTips":["Treat false as 'not installed' in availability UIs rather than an error state.","Rescan installed versions after upgrades complete.","Confirm install directories are readable by the app (permissions)."],"tags":["typescript","version-detection","antigravity","graceful-degradation"],"backgroundTag":"version-detection-failed","analyzedSha":"1ed8b77992d62ca81fabf744deb0839ad361d5bf","analyzedAt":"2026-09-05T09:51:41.178Z","contentChangedAt":"2026-09-05T09:51:41.178Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}