{"record":{"id":"bcc84fe2b0fff729","repo":"paperclipai/paperclip","slug":"pi-list-models-timed-out","errorCode":null,"errorMessage":"`pi --list-models` timed out.","messagePattern":"`pi --list-models` timed out\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/adapters/pi-local/src/server/models.ts","lineNumber":127,"sourceCode":"  const cwd = asString(input.cwd, process.cwd());\n  const env = normalizeEnv(input.env);\n  const runtimeEnv = normalizeEnv({ ...process.env, ...env });\n\n  const result = await runChildProcess(\n    `pi-models-${Date.now()}-${Math.random().toString(16).slice(2)}`,\n    command,\n    [\"--list-models\"],\n    {\n      cwd,\n      env: runtimeEnv,\n      timeoutSec: 20,\n      graceSec: 3,\n      onLog: async () => {},\n    },\n  );\n\n  if (result.timedOut) {\n    throw new Error(\"`pi --list-models` timed out.\");\n  }\n  if ((result.exitCode ?? 1) !== 0) {\n    const detail = firstNonEmptyLine(result.stderr) || firstNonEmptyLine(result.stdout);\n    throw new Error(detail ? `\\`pi --list-models\\` failed: ${detail}` : \"`pi --list-models` failed.\");\n  }\n\n  // Pi outputs model list to stderr, but fall back to stdout for older versions\n  const output = result.stderr || result.stdout;\n  return sortModels(dedupeModels(parseModelsOutput(output)));\n}\n\nfunction normalizeEnv(input: unknown): Record<string, string> {\n  const envInput = typeof input === \"object\" && input !== null && !Array.isArray(input)\n    ? (input as Record<string, unknown>)\n    : {};\n  const env: Record<string, string> = {};\n  for (const [key, value] of Object.entries(envInput)) {\n    if (typeof value === \"string\") env[key] = value;","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/packages/adapters/pi-local/src/server/models.ts#L109-L145","documentation":"Error \"`pi --list-models` timed out.\" thrown in paperclipai/paperclip.","triggerScenarios":"Thrown at packages/adapters/pi-local/src/server/models.ts:127 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry `pi --list-models`.","Check that `pi` responds promptly; investigate hangs in the pi CLI."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"120ae5428fa29bee300bcf806491cd4d965fbb7c","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}