{"version":3,"file":"hitl-interrupt-payload.cjs","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"sourcesContent":["/**\n * Human-in-the-loop interrupt values from the LangGraph API may use\n * snake_case (Python server) while JS clients and LangChain types expect\n * camelCase. Normalize known HITL fields on interrupt payloads at read time.\n */\n\n/**\n * Copy a plain object and expose both casing styles for a field.\n *\n * camelCase is treated as canonical when both keys are present so newer\n * consumers keep the current behavior while legacy snake_case access still\n * resolves to the same value.\n */\nfunction aliasCasePair(item: unknown, camel: string, snake: string): unknown {\n  if (item === null || typeof item !== \"object\" || Array.isArray(item)) {\n    return item;\n  }\n  const o = item as Record<string, unknown>;\n  const merged = o[camel] ?? o[snake];\n  const next: Record<string, unknown> = { ...o };\n  if (merged !== undefined) {\n    next[camel] = merged;\n    next[snake] = merged;\n  }\n  return next;\n}\n\nfunction mapArrayAlias(raw: unknown, camel: string, snake: string): unknown {\n  if (!Array.isArray(raw)) return raw;\n  return raw.map((item) => aliasCasePair(item, camel, snake));\n}\n\n/**\n * If `value` looks like a HITL request object, expose both the new camelCase\n * keys and the deprecated snake_case aliases so older apps keep working while\n * migrating to the new shape.\n */\nexport function normalizeHitlInterruptPayload(value: unknown): unknown {\n  if (value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((v) => normalizeHitlInterruptPayload(v));\n  }\n  const obj = value as Record<string, unknown>;\n  const isHitlLike =\n    \"action_requests\" in obj ||\n    \"actionRequests\" in obj ||\n    \"review_configs\" in obj ||\n    \"reviewConfigs\" in obj;\n  if (!isHitlLike) {\n    return value;\n  }\n\n  const next: Record<string, unknown> = { ...obj };\n\n  const actionRequestsRaw = obj.actionRequests ?? obj.action_requests;\n  if (actionRequestsRaw !== undefined) {\n    const actionRequests = mapArrayAlias(\n      actionRequestsRaw,\n      \"name\",\n      \"action_name\"\n    );\n    next.actionRequests = actionRequests;\n    next.action_requests = actionRequests;\n  }\n  const reviewConfigsRaw = obj.reviewConfigs ?? obj.review_configs;\n  if (reviewConfigsRaw !== undefined) {\n    const reviewConfigs = mapArrayAlias(\n      reviewConfigsRaw,\n      \"allowedDecisions\",\n      \"allowed_decisions\"\n    );\n    next.reviewConfigs = reviewConfigs;\n    next.review_configs = reviewConfigs;\n  }\n  return next;\n}\n\nfunction normalizeDecisionForServer(decision: unknown): unknown {\n  if (\n    decision === null ||\n    typeof decision !== \"object\" ||\n    Array.isArray(decision)\n  ) {\n    return decision;\n  }\n  const obj = decision as Record<string, unknown>;\n  if (obj.type !== \"edit\") {\n    return decision;\n  }\n  const edited = obj.editedAction ?? obj.edited_action;\n  if (edited === undefined) {\n    return decision;\n  }\n  return {\n    ...obj,\n    editedAction: edited,\n    edited_action: edited,\n  };\n}\n\n/**\n * If `value` looks like a HITL resume payload from a JS client, expose both\n * camelCase and snake_case decision fields so Python and JS runtimes accept it.\n */\nexport function normalizeHitlResponseForServer(value: unknown): unknown {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    return value;\n  }\n  const obj = value as Record<string, unknown>;\n  const decisions = obj.decisions;\n  if (!Array.isArray(decisions)) {\n    return value;\n  }\n  return {\n    ...obj,\n    decisions: decisions.map(normalizeDecisionForServer),\n  };\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,cAAc,MAAe,OAAe,OAAwB;AAC3E,KAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,CAClE,QAAO;CAET,MAAM,IAAI;CACV,MAAM,SAAS,EAAE,UAAU,EAAE;CAC7B,MAAM,OAAgC,EAAE,GAAG,GAAG;AAC9C,KAAI,WAAW,KAAA,GAAW;AACxB,OAAK,SAAS;AACd,OAAK,SAAS;;AAEhB,QAAO;;AAGT,SAAS,cAAc,KAAc,OAAe,OAAwB;AAC1E,KAAI,CAAC,MAAM,QAAQ,IAAI,CAAE,QAAO;AAChC,QAAO,IAAI,KAAK,SAAS,cAAc,MAAM,OAAO,MAAM,CAAC;;;;;;;AAQ7D,SAAgB,8BAA8B,OAAyB;AACrE,KAAI,UAAU,QAAQ,OAAO,UAAU,SACrC,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,MAAM,8BAA8B,EAAE,CAAC;CAE3D,MAAM,MAAM;AAMZ,KAAI,EAJF,qBAAqB,OACrB,oBAAoB,OACpB,oBAAoB,OACpB,mBAAmB,KAEnB,QAAO;CAGT,MAAM,OAAgC,EAAE,GAAG,KAAK;CAEhD,MAAM,oBAAoB,IAAI,kBAAkB,IAAI;AACpD,KAAI,sBAAsB,KAAA,GAAW;EACnC,MAAM,iBAAiB,cACrB,mBACA,QACA,cACD;AACD,OAAK,iBAAiB;AACtB,OAAK,kBAAkB;;CAEzB,MAAM,mBAAmB,IAAI,iBAAiB,IAAI;AAClD,KAAI,qBAAqB,KAAA,GAAW;EAClC,MAAM,gBAAgB,cACpB,kBACA,oBACA,oBACD;AACD,OAAK,gBAAgB;AACrB,OAAK,iBAAiB;;AAExB,QAAO;;AAGT,SAAS,2BAA2B,UAA4B;AAC9D,KACE,aAAa,QACb,OAAO,aAAa,YACpB,MAAM,QAAQ,SAAS,CAEvB,QAAO;CAET,MAAM,MAAM;AACZ,KAAI,IAAI,SAAS,OACf,QAAO;CAET,MAAM,SAAS,IAAI,gBAAgB,IAAI;AACvC,KAAI,WAAW,KAAA,EACb,QAAO;AAET,QAAO;EACL,GAAG;EACH,cAAc;EACd,eAAe;EAChB;;;;;;AAOH,SAAgB,+BAA+B,OAAyB;AACtE,KAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CACrE,QAAO;CAET,MAAM,MAAM;CACZ,MAAM,YAAY,IAAI;AACtB,KAAI,CAAC,MAAM,QAAQ,UAAU,CAC3B,QAAO;AAET,QAAO;EACL,GAAG;EACH,WAAW,UAAU,IAAI,2BAA2B;EACrD"}