{"version":3,"file":"handle-inspector-learning.mjs","names":[],"sources":["../../../../src/v2/runtime/handlers/handle-inspector-learning.ts"],"sourcesContent":["import {\n  parseInspectorLearningRequestV1,\n  parseInspectorLearningSnapshotV1,\n} from \"@copilotkit/shared\";\nimport type { CopilotRuntimeLike } from \"../core/runtime\";\nimport { hasLearningContainerConfiguration } from \"../core/learning\";\nimport { isIntelligenceRuntime } from \"../core/runtime\";\nimport { PlatformRequestError } from \"../intelligence-platform/client\";\nimport { resolveIntelligenceUser } from \"./shared/resolve-intelligence-user\";\n\nconst headers = {\n  \"Cache-Control\": \"no-store, private\",\n  \"Content-Type\": \"application/json\",\n} as const;\n\nconst errorResponse = (status: number, message: string) =>\n  new Response(JSON.stringify({ error: message }), { status, headers });\n\nconst queryPage = (value: string | null): number | undefined =>\n  value === null ? undefined : Number(value);\n\n/** Proxies a bounded Learning read through the runtime's server-held credential. */\nexport async function handleInspectorLearning({\n  runtime,\n  request,\n}: {\n  readonly runtime: CopilotRuntimeLike;\n  readonly request: Request;\n}): Promise<Response> {\n  if (\n    !isIntelligenceRuntime(runtime) ||\n    !hasLearningContainerConfiguration(runtime)\n  ) {\n    return errorResponse(404, \"Not found\");\n  }\n  const user = await resolveIntelligenceUser({ runtime, request });\n  if (user instanceof Response) return user;\n  const url = new URL(request.url);\n  if (\n    [...url.searchParams.keys()].some(\n      (key) => ![\"agentId\", \"skillsPage\", \"insightsPage\"].includes(key),\n    )\n  ) {\n    return errorResponse(400, \"Invalid Inspector Learning request\");\n  }\n  const parsedRequest = parseInspectorLearningRequestV1({\n    agentId: url.searchParams.get(\"agentId\") ?? undefined,\n    skillsPage: queryPage(url.searchParams.get(\"skillsPage\")),\n    insightsPage: queryPage(url.searchParams.get(\"insightsPage\")),\n  });\n  if (!parsedRequest)\n    return errorResponse(400, \"Invalid Inspector Learning request\");\n\n  try {\n    const snapshot = parseInspectorLearningSnapshotV1(\n      await runtime.intelligence.getInspectorLearning({\n        ...parsedRequest,\n        ...(typeof runtime.learning?.containerId === \"string\"\n          ? { runtimeContainerId: runtime.learning.containerId }\n          : {}),\n      }),\n    );\n    if (!snapshot)\n      return errorResponse(502, \"Invalid Inspector Learning response\");\n    return new Response(JSON.stringify(snapshot), { status: 200, headers });\n  } catch (error) {\n    if (error instanceof PlatformRequestError && error.status === 404) {\n      return errorResponse(404, \"Not found\");\n    }\n    return errorResponse(503, \"Inspector Learning is temporarily unavailable\");\n  }\n}\n"],"mappings":";;;;;;;;AAUA,MAAM,UAAU;CACd,iBAAiB;CACjB,gBAAgB;CACjB;AAED,MAAM,iBAAiB,QAAgB,YACrC,IAAI,SAAS,KAAK,UAAU,EAAE,OAAO,SAAS,CAAC,EAAE;CAAE;CAAQ;CAAS,CAAC;AAEvE,MAAM,aAAa,UACjB,UAAU,OAAO,SAAY,OAAO,MAAM;;AAG5C,eAAsB,wBAAwB,EAC5C,SACA,WAIoB;AACpB,KACE,CAAC,sBAAsB,QAAQ,IAC/B,CAAC,kCAAkC,QAAQ,CAE3C,QAAO,cAAc,KAAK,YAAY;CAExC,MAAM,OAAO,MAAM,wBAAwB;EAAE;EAAS;EAAS,CAAC;AAChE,KAAI,gBAAgB,SAAU,QAAO;CACrC,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;AAChC,KACE,CAAC,GAAG,IAAI,aAAa,MAAM,CAAC,CAAC,MAC1B,QAAQ,CAAC;EAAC;EAAW;EAAc;EAAe,CAAC,SAAS,IAAI,CAClE,CAED,QAAO,cAAc,KAAK,qCAAqC;CAEjE,MAAM,gBAAgB,gCAAgC;EACpD,SAAS,IAAI,aAAa,IAAI,UAAU,IAAI;EAC5C,YAAY,UAAU,IAAI,aAAa,IAAI,aAAa,CAAC;EACzD,cAAc,UAAU,IAAI,aAAa,IAAI,eAAe,CAAC;EAC9D,CAAC;AACF,KAAI,CAAC,cACH,QAAO,cAAc,KAAK,qCAAqC;AAEjE,KAAI;EACF,MAAM,WAAW,iCACf,MAAM,QAAQ,aAAa,qBAAqB;GAC9C,GAAG;GACH,GAAI,OAAO,QAAQ,UAAU,gBAAgB,WACzC,EAAE,oBAAoB,QAAQ,SAAS,aAAa,GACpD,EAAE;GACP,CAAC,CACH;AACD,MAAI,CAAC,SACH,QAAO,cAAc,KAAK,sCAAsC;AAClE,SAAO,IAAI,SAAS,KAAK,UAAU,SAAS,EAAE;GAAE,QAAQ;GAAK;GAAS,CAAC;UAChE,OAAO;AACd,MAAI,iBAAiB,wBAAwB,MAAM,WAAW,IAC5D,QAAO,cAAc,KAAK,YAAY;AAExC,SAAO,cAAc,KAAK,gDAAgD"}