{"record":{"id":"a8e8153ebf979bc7","repo":"JuliusBrussee/caveman","slug":"cave-eve-terminal-result-status","errorCode":"cave_eve_terminal_${result.status}","errorMessage":"cave_eve_terminal_${result.status}","messagePattern":"cave_eve_terminal_(.+?)","errorType":"error_code","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/agent/src/adapters.ts","lineNumber":257,"sourceCode":"\nexport function createEveAdapter(\n  identity: HarnessAdapterIdentity,\n  session: EveSessionBinding,\n): HarnessAdapter {\n  assertSupportedUpstream(identity, EVE_VERSION, \"eve\", \"eve\");\n  return createHarnessAdapter(\"eve\", identity, {\n    package: \"eve/client\",\n    class: \"ClientSession\",\n    method: \"send.result\",\n    usage: \"step.completed.data.usage\",\n  }, async (request) => {\n    const startedAt = performance.now();\n    const response = await session.send({\n      message: request.prompt,\n      ...(request.signal === undefined ? {} : { signal: request.signal }),\n    });\n    const result = await response.result();\n    if (result.status !== \"completed\") throw new Error(`cave_eve_terminal_${result.status}`);\n    const identity = eveRuntimeIdentity(result.events);\n    if (identity.upstreamVersion !== request.build.harness.upstream_version) {\n      throw new Error(\"cave_harness_upstream_version_mismatch\");\n    }\n    const usage = usageFromEveEvents(result.events, request.plan.reasoning !== \"none\");\n    return harnessExecution({\n      request,\n      text: result.message ?? \"\",\n      provider: identity.provider,\n      model: identity.model,\n      usage,\n      latencyMs: Math.round(performance.now() - startedAt),\n    });\n  });\n}\n\nexport interface MastraAgentBinding {\n  generate(messages: string, options?: {","sourceCodeStart":239,"sourceCodeEnd":275,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/766dce6b1394ebb56a3090748d5a0240a5aefb36/packages/agent/src/adapters.ts#L239-L275","documentation":"The Eve adapter awaits `session.send({ message }).result()` and requires `status === \"completed\"`; the binding allows `\"completed\" | \"failed\" | \"waiting\"`. Any non-completed status is interpolated into the code — in practice `cave_eve_terminal_failed` or `cave_eve_terminal_waiting` — and throws before any identity or usage evidence is read from the events. The interpolated suffix is the actual Eve session outcome and is the starting point for diagnosis.","triggerScenarios":"Eve runtime error mid-run → `cave_eve_terminal_failed`; session paused awaiting external input/approval → `cave_eve_terminal_waiting`; cancellation propagated by the Eve server as a failed status.","commonSituations":"Eve server-side incidents or resource exhaustion; prompts exceeding server limits; sessions left dangling in `waiting` because a required event or approval never arrives.","solutions":["Parse the status out of the message with `/cave_eve_terminal_([a-z]+)$/` and branch on it","For `waiting`: poll or resume the existing session instead of starting a new one","For `failed`: inspect the Eve server logs / session events for the root cause, fix it, then retry with a fresh session","Add a client-side session deadline so sessions cannot dangle indefinitely in waiting"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"null","typeGuard":null,"tryCatchPattern":"try {\n  return await adapter.run(req);\n} catch (e) {\n  const m = /cave_eve_terminal_([a-z]+)$/.exec((e as Error).message);\n  if (m?.[1] === 'waiting') return pollSessionUntilSettled(session);\n  if (m?.[1] === 'failed' && attempt < 2) return runOnce(req, attempt + 1);\n  throw e;\n}","preventionTips":["Set a client-side session deadline so sessions never dangle in 'waiting'","Monitor Eve server health; most 'failed' statuses have a server-side log entry","Branch on the interpolated status — 'waiting' needs polling, 'failed' needs diagnosis, not blind retries"],"tags":["typescript","eve","session-status","llm"],"backgroundTag":"session-status-failed","analyzedSha":"766dce6b1394ebb56a3090748d5a0240a5aefb36","analyzedAt":"2026-08-18T03:14:35.516Z","contentChangedAt":"2026-08-18T03:14:35.516Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}