{"version":3,"file":"run.mjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/intelligence/run.ts"],"sourcesContent":["import { AbstractAgent, Message, RunAgentInput } from \"@ag-ui/client\";\nimport { CopilotIntelligenceRuntimeLike } from \"../../core/runtime\";\nimport { generateThreadNameForNewThread } from \"./thread-names\";\nimport { logger } from \"@copilotkit/shared\";\nimport { telemetry } from \"../../telemetry\";\nimport { resolveIntelligenceUser } from \"../shared/resolve-intelligence-user\";\nimport { isHandlerResponse } from \"../shared/json-response\";\n\ninterface HandleIntelligenceRunParams {\n  runtime: CopilotIntelligenceRuntimeLike;\n  request: Request;\n  agentId: string;\n  agent: AbstractAgent;\n  input: RunAgentInput;\n}\n\nexport async function handleIntelligenceRun({\n  runtime,\n  request,\n  agentId,\n  agent,\n  input,\n}: HandleIntelligenceRunParams): Promise<Response> {\n  if (!runtime.intelligence) {\n    return Response.json(\n      {\n        error: \"Intelligence not configured\",\n        message: \"Intelligence mode requires a CopilotKitIntelligence\",\n      },\n      { status: 500 },\n    );\n  }\n\n  const user = await resolveIntelligenceUser({ runtime, request });\n  if (isHandlerResponse(user)) {\n    return user;\n  }\n  const userId = user.id;\n\n  try {\n    const { thread, created } = await runtime.intelligence.getOrCreateThread({\n      threadId: input.threadId,\n      userId,\n      agentId,\n    });\n\n    if (created && runtime.generateThreadNames && !thread.name?.trim()) {\n      void generateThreadNameForNewThread({\n        runtime,\n        request,\n        agentId,\n        sourceInput: input,\n        thread,\n        userId,\n      }).catch((nameError) => {\n        logger.error(\"Failed to generate thread name:\", nameError);\n      });\n    }\n  } catch (error) {\n    logger.error(\"Failed to get or create thread:\", error);\n    return Response.json(\n      {\n        error: \"Failed to initialize thread\",\n      },\n      { status: 502 },\n    );\n  }\n\n  let joinCode: string | undefined;\n  let joinToken: string | undefined;\n  try {\n    const lockResult = await runtime.intelligence.ɵacquireThreadLock({\n      threadId: input.threadId,\n      runId: input.runId,\n      userId,\n      ...(runtime.lockKeyPrefix !== undefined\n        ? { lockKeyPrefix: runtime.lockKeyPrefix }\n        : {}),\n      ttlSeconds: runtime.lockTtlSeconds,\n    });\n    joinToken = lockResult.joinToken;\n    joinCode = lockResult.joinCode;\n  } catch (error) {\n    logger.error(\"Thread lock denied:\", error);\n    return Response.json(\n      {\n        error: \"Thread lock denied\",\n      },\n      { status: 409 },\n    );\n  }\n\n  if (!joinToken) {\n    return Response.json(\n      {\n        error: \"Join token not available\",\n        message: \"Intelligence platform did not return a join token\",\n      },\n      { status: 502 },\n    );\n  }\n\n  let persistedInputMessages: Message[] | undefined;\n  if (Array.isArray(input.messages)) {\n    try {\n      const history = await runtime.intelligence.getThreadMessages({\n        threadId: input.threadId,\n      });\n      const historicMessageIds = new Set(\n        history.messages.map((message) => message.id),\n      );\n      persistedInputMessages = input.messages.filter(\n        (message) => !historicMessageIds.has(message.id),\n      );\n    } catch (error) {\n      logger.error(\"Thread history lookup failed:\", error);\n      return Response.json(\n        {\n          error: \"Thread history lookup failed\",\n        },\n        { status: 502 },\n      );\n    }\n  }\n\n  telemetry.capture(\"oss.runtime.agent_execution_stream_started\", {});\n\n  // Start heartbeat timer to renew the thread lock.\n  let heartbeatTimer: ReturnType<typeof setInterval> | undefined;\n  heartbeatTimer = setInterval(() => {\n    runtime.intelligence\n      .ɵrenewThreadLock({\n        threadId: input.threadId,\n        runId: input.runId,\n        ttlSeconds: runtime.lockTtlSeconds,\n        ...(runtime.lockKeyPrefix !== undefined\n          ? { lockKeyPrefix: runtime.lockKeyPrefix }\n          : {}),\n      })\n      .catch((err) => {\n        logger.error(\"Failed to renew thread lock:\", err);\n      });\n  }, runtime.lockHeartbeatIntervalSeconds * 1_000);\n\n  const clearHeartbeat = () => {\n    if (heartbeatTimer !== undefined) {\n      clearInterval(heartbeatTimer);\n      heartbeatTimer = undefined;\n    }\n  };\n\n  runtime.runner\n    .run({\n      threadId: input.threadId,\n      agent,\n      input,\n      ...(persistedInputMessages !== undefined\n        ? { persistedInputMessages }\n        : {}),\n      ...(joinCode ? { joinCode } : {}),\n    })\n    .subscribe({\n      error: (error) => {\n        clearHeartbeat();\n        telemetry.capture(\"oss.runtime.agent_execution_stream_errored\", {\n          error: error instanceof Error ? error.message : String(error),\n        });\n        logger.error(\"Error running agent:\", error);\n      },\n      complete: () => {\n        clearHeartbeat();\n        telemetry.capture(\"oss.runtime.agent_execution_stream_ended\", {});\n      },\n    });\n\n  return Response.json(\n    { joinToken },\n    {\n      headers: { \"Cache-Control\": \"no-cache\" },\n    },\n  );\n}\n"],"mappings":"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"}