{"record":{"id":"a6f73c8c075edf89","repo":"musistudio/claude-code-router","slug":"plugin-app-did-not-become-available-at-appurl","errorCode":null,"errorMessage":"Plugin app did not become available at ${appUrl}. Last probe: ${lastProbe}","messagePattern":"Plugin app did not become available at (.+?)\\. Last probe: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/electron/src/main/deep-link.ts","lineNumber":250,"sourceCode":"async function waitForPluginAppUrl(appUrl: string, timeoutMs: number): Promise<void> {\n  const deadline = Date.now() + timeoutMs;\n  let lastProbe = \"timeout\";\n\n  while (Date.now() <= deadline) {\n    const probe = await probePluginAppUrl(appUrl);\n    if (probe.ok) {\n      return;\n    }\n    lastProbe = probe.detail;\n\n    const remainingMs = deadline - Date.now();\n    if (remainingMs <= 0) {\n      break;\n    }\n    await delay(Math.min(pluginAppProbeIntervalMs, remainingMs));\n  }\n\n  throw new Error(`Plugin app did not become available at ${appUrl}. Last probe: ${lastProbe}`);\n}\n\nasync function probePluginAppUrl(appUrl: string): Promise<{ ok: true } | { detail: string; ok: false }> {\n  const controller = new AbortController();\n  const timeout = setTimeout(() => controller.abort(), pluginAppProbeRequestTimeoutMs);\n  try {\n    const response = await fetch(appUrl, {\n      cache: \"no-store\",\n      method: \"HEAD\",\n      signal: controller.signal\n    });\n    if (response.ok) {\n      return { ok: true };\n    }\n    return {\n      detail: `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`,\n      ok: false\n    };","sourceCodeStart":232,"sourceCodeEnd":268,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/electron/src/main/deep-link.ts#L232-L268","documentation":"Error \"Plugin app did not become available at ${appUrl}. Last probe: ${lastProbe}\" thrown in musistudio/claude-code-router.","triggerScenarios":"Thrown at packages/electron/src/main/deep-link.ts:250 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}