@myagentroam/agent 0.9.61 → 0.9.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/dist/cli/codex-auth-file.js +268 -3
  4. package/dist/cli/main.js +427 -2
  5. package/dist/error.js +66 -2
  6. package/dist/host/contracts.js +20 -2
  7. package/dist/host/local-agent-host.js +146 -2
  8. package/dist/host/local-process-executor.js +39 -2
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +12 -2
  11. package/dist/model/anthropic-messages.js +474 -2
  12. package/dist/model/anthropic-thinking.js +33 -2
  13. package/dist/model/catalog-file.js +88 -2
  14. package/dist/model/configuration.js +137 -2
  15. package/dist/model/contracts.d.ts +2 -0
  16. package/dist/model/contracts.js +1 -2
  17. package/dist/model/http.js +529 -2
  18. package/dist/model/openai-responses.d.ts +2 -0
  19. package/dist/model/openai-responses.js +1602 -2
  20. package/dist/model/runtime-credential.js +35 -2
  21. package/dist/model/sse.js +199 -2
  22. package/dist/prompts/compact.js +25 -2
  23. package/dist/prompts/core.js +37 -2
  24. package/dist/prompts/execution-budget.js +10 -2
  25. package/dist/prompts/index.d.ts +3 -2
  26. package/dist/prompts/index.js +47 -2
  27. package/dist/prompts/modes.js +25 -2
  28. package/dist/prompts/output.js +1 -2
  29. package/dist/prompts/resources.d.ts +1 -1
  30. package/dist/prompts/resources.js +31 -2
  31. package/dist/prompts/subagent.d.ts +6 -0
  32. package/dist/prompts/subagent.js +29 -2
  33. package/dist/prompts/title.js +9 -2
  34. package/dist/prompts/workflow.js +32 -2
  35. package/dist/runtime/async-queue.js +62 -2
  36. package/dist/runtime/builtin-skills.js +19 -2
  37. package/dist/runtime/byted-ark-imagegen-skill.js +18 -2
  38. package/dist/runtime/codex-imagegen-skill.js +35 -2
  39. package/dist/runtime/compact.js +225 -2
  40. package/dist/runtime/context-gc-runtime.d.ts +35 -0
  41. package/dist/runtime/context-gc-runtime.js +163 -0
  42. package/dist/runtime/context-gc-tokens.d.ts +24 -0
  43. package/dist/runtime/context-gc-tokens.js +83 -0
  44. package/dist/runtime/context-gc.d.ts +66 -0
  45. package/dist/runtime/context-gc.js +909 -0
  46. package/dist/runtime/context-projection.d.ts +23 -0
  47. package/dist/runtime/context-projection.js +203 -0
  48. package/dist/runtime/environment-context.js +41 -2
  49. package/dist/runtime/execution-policy.js +13 -2
  50. package/dist/runtime/instructions.js +298 -2
  51. package/dist/runtime/normalize.js +40 -2
  52. package/dist/runtime/plan-output.js +95 -2
  53. package/dist/runtime/rollout-budget.d.ts +2 -0
  54. package/dist/runtime/rollout-budget.js +92 -2
  55. package/dist/runtime/token-budget.d.ts +2 -0
  56. package/dist/runtime/token-budget.js +44 -2
  57. package/dist/sdk/agent.js +1804 -2
  58. package/dist/sdk/types.d.ts +15 -5
  59. package/dist/sdk/types.js +1 -2
  60. package/dist/session/catalog.d.ts +5 -4
  61. package/dist/session/catalog.js +133 -2
  62. package/dist/session/context-gc-checkpoint.d.ts +148 -0
  63. package/dist/session/context-gc-checkpoint.js +665 -0
  64. package/dist/session/context-gc-replacements.d.ts +52 -0
  65. package/dist/session/context-gc-replacements.js +226 -0
  66. package/dist/session/context-gc-subagent.d.ts +43 -0
  67. package/dist/session/context-gc-subagent.js +267 -0
  68. package/dist/session/jsonl-store.d.ts +42 -4
  69. package/dist/session/jsonl-store.js +1657 -2
  70. package/dist/subagent/scheduler.d.ts +35 -2
  71. package/dist/subagent/scheduler.js +249 -2
  72. package/dist/subagent/session-controller.d.ts +94 -0
  73. package/dist/subagent/session-controller.js +675 -0
  74. package/dist/tools/agent-cancel.js +28 -2
  75. package/dist/tools/{task.d.ts → agent-message.d.ts} +2 -2
  76. package/dist/tools/agent-message.js +51 -0
  77. package/dist/tools/agent-start.js +84 -2
  78. package/dist/tools/agent-wait.js +53 -2
  79. package/dist/tools/apply-patch.js +478 -2
  80. package/dist/tools/code-mode.js +370 -2
  81. package/dist/tools/codex-image-gen.js +312 -2
  82. package/dist/tools/exec.js +455 -2
  83. package/dist/tools/execution-limits.d.ts +1 -0
  84. package/dist/tools/execution-limits.js +44 -2
  85. package/dist/tools/local-registry.js +233 -2
  86. package/dist/tools/local-workspace-tools.js +28 -2
  87. package/dist/tools/question.js +124 -2
  88. package/dist/tools/read-context.d.ts +16 -0
  89. package/dist/tools/read-context.js +85 -0
  90. package/dist/tools/read.d.ts +13 -0
  91. package/dist/tools/read.js +294 -2
  92. package/dist/tools/registry.js +76 -2
  93. package/dist/tools/runtime-context.d.ts +9 -2
  94. package/dist/tools/runtime-context.js +1 -2
  95. package/dist/tools/runtime.js +21 -2
  96. package/dist/tools/scheduler.js +41 -2
  97. package/dist/tools/shared/path-resolver.js +133 -2
  98. package/dist/tools/skill.js +37 -2
  99. package/dist/tools/todo-read.js +10 -2
  100. package/dist/tools/todo-write.js +65 -2
  101. package/dist/tools/todo.js +67 -2
  102. package/dist/tools/view-image.js +81 -2
  103. package/dist/tools/web-fetch.js +11 -2
  104. package/dist/tools/web-search.js +14 -2
  105. package/package.json +17 -15
  106. package/README.md +0 -3
  107. package/dist/runtime/prompt.d.ts +0 -9
  108. package/dist/runtime/prompt.js +0 -2
  109. package/dist/tools/shared/secret-redaction.d.ts +0 -4
  110. package/dist/tools/shared/secret-redaction.js +0 -2
  111. package/dist/tools/task-cancel.d.ts +0 -7
  112. package/dist/tools/task-cancel.js +0 -2
  113. package/dist/tools/task-output.d.ts +0 -7
  114. package/dist/tools/task-output.js +0 -2
  115. package/dist/tools/task-tools.d.ts +0 -36
  116. package/dist/tools/task-tools.js +0 -2
  117. package/dist/tools/task.js +0 -2
  118. package/dist/tools/todo-tools.d.ts +0 -25
  119. package/dist/tools/todo-tools.js +0 -2
@@ -1,2 +1,1602 @@
1
- /* mar-release-protected */
2
- const _0xbe0fd6=_0x361f;function _0x2bd8(){const _0x3fe816=['tw9KzwWGv2vIu29JA2v0ihbYB3rVy29SigLZigLUDMfSAwqU','BgfZDfjLCxvLC3q','y3jLzgvUDgLHBfjLDMLZAw9U','CMvZCg9UC2uUCMvHC29UAw5Nx3n1Bw1HCNLFCgfYDc5HzgrLza','C2HHmq','DMfSDwvZ','u09ds1m1ifDLyLnVy2TLDcbJB25Uzwn0Aw9UigzHAwXLzc4','DhjHBNnWB3j0','Dg9tDhjPBMC','AxrLBq','Ahr0Chm6','y2L0yxrPB24','mJe1odu2mJrJAwfnree','yxv0Ag9YAxPHDgLVBG','o2jHC2u2ncW','yNL0zuXLBMD0Aa','ChjVBxb0x2nHy2HLx2TLEq','u09ds1m1','Ahr0Cc8XlJe','ywnJzxb0','ms4X','yxjNDw1LBNrZ','DxbKyxrL','Aw52ywXPzgf0zq','DxjS','q09nueXfveve','CMvZCg9UC2uUy3jLyxrL','nJa4mtzMB2rHwMm','v0vcu09ds0vu','AxnwAwv3','ChjLDMLVDxnFCMvZCg9UC2vFBM90x2zVDw5K','tw9KzwWGv2vIu29JA2v0ignVBNrHAw5LzcbPBNzHBgLKiePtt04U','tu9eruXFu1rsrufnx0LetevFveLnru9vva','mtmZndHYEhrTAM0','t3bLBKfjifjLC3bVBNnLCYbxzwjtB2nRzxqGAgfUzhnOywTLigzHAwXLzc4','zxHWAxjLza','Ahr0CfzLCNnPB24','ChjLDMLVDxnFCMvZCg9UC2vFAwq','v1nFrvjsx1vou1vque9svevex01fu1nbr0vFtevor1ri','D3nFCMvXDwvZDf9OzwfKzxjFEf9VCgvUywLFAw50zxjUywXFy29KzxHFCMvZCg9UC2vZx2XPDgu','DgvYBwLUyxrL','y3vZDg9T','zNvUy3rPB25Fy2fSBa','t1bftKfjx1jfu1bptLnfuW','CMvZCg9UC2uUy3jLyxrLza','y29TBwvUDgfYEq','C3rHCNrZv2L0Aa','ChjVEhKTyxv0Ag9YAxPHDgLVBG','ChjLCgfYzvjLCxvLC3q','CMv2zwfS','Dgv4Dc9LDMvUDc1ZDhjLyw0','yxv0BW','ntqWmdiYngPTsvjRwG','Dg9VBhm','C2vZC2LVBI1Pza','C2XPy2u','CMvZCg9UC2uUCMvHC29UAw5Nx3n1Bw1HCNLFCgfYDc5KB25L','qMvHCMvYia','uhjVDMLKzxiGy29UDgv4DcbPDgvTihr5CguGAxmGDw5ZDxbWB3j0zwqU','uhjVDMLKzxiGCM9SBg91DcbIDwrNzxqGDw5PDhmGyxjLigLUDMfSAwqU','CMvHzhLtDgf0zq','DxnLCG','CMvZCg9UC2uUzNvUy3rPB25Fy2fSBf9HCMD1BwvUDhmUzg9Uzq','q0Xpu0LorW','v2vIu29JA2v0ignVBM5Ly3rPB24Gy2fSBgjHy2SGAxmGDw5HDMfPBgfIBguU','CMvZCg9UC2vjza','CMvZCg9UC2uUzNvUy3rPB25Fy2fSBf9HCMD1BwvUDhmUzgvSDge','y2XPzw50x21LDgfKyxrH','D2vIx3nLyxjJAf9JywXS','AxrLBv9Pza','Ag9ZDg5HBwu','u1rsrufn','C2HPzNq','CMvZCg9UC2uUy3vZDg9Tx3rVB2XFy2fSBf9PBNb1Dc5KB25L','Aw52ywXPzf9WCMv2Aw91C19YzxnWB25Zzv9Pza','C3rHCNrbDhrLBxb0','uKvdt05orunu','C2vJlxDLyNnVy2TLDc1Hy2nLChq','tw9KzwWGDhvYBIbZzxnZAw9UigLZigrPC3bVC2vKlG','D2L0Afr1CM5tDgf0zu1LDgfKyxrH','B3v0Chv0x3rVA2vUCW','C2vJlxDLyNnVy2TLDc1WCM90B2nVBa','CMvZCg9UC2uUy29UDgvUDf9Wyxj0lMrVBMu','y29UDgLUDwf0Aw9U','t3bLBKfjifjLC3bVBNnLCYbxzwjtB2nRzxqGy2XVC2vKigr1CMLUzYbJB25Uzwn0Aw9UlG','Aw5WDxrnB2rL','ChjVDg9JB2W','ChjVEhLuExbL','D2vI','B2jQzwn0','CMvZCg9UC2uUCMvHC29UAw5Nx3n1Bw1HCNLFDgv4Dc5KB25L','CMvSzwfZzvr1CM5tzxnZAw9U','y2XVC2vK','y2fJAgvFD3jPDgvFDg9Rzw5Z','Dhj1zq','y29KzxGUCMvZCg9UC2uUBwv0ywrHDge','Ag9ZDa','Bwf4x291Dhb1Da','DxbNCMfKzq','BwvZC2fNzxm','tw9KzwWGywrHChrLCIbPCYbKAxnWB3nLzc4','CMvZCg9UC2uUAxrLBq','tufsx0fhru5ux01prevmx1bst1rpq09mx0vsuK9s','C2v0','t3bLBKfjifjLC3bVBNnLCYbYzxf1AxjLCYbHig1VzgvSignYzwrLBNrPywWU','D2vIu29JA2v0rM9YuMvXDwvZDa','yMvNAw5bDhrLBxb0','DgL0Bgu','yxnZAxn0yw50','zgvSzxrL','Dg9mB3DLCKnHC2u','CgfYC2u','vgHLihbYzxzPB3vZihjLC3bVBNnLigLZihvUyxzHAwXHyMXLig9UihrOzsbJDxjYzw50ifDLyLnVy2TLDcbJB25Uzwn0Aw9UlG','zgf0ytO','B3v0Chv0x3rLEhq','Ec1JB2rLEc10DxjUlxn0yxrL','BMfTzq','tufsx0fhru5ux01prevmx0nptK5fq1rjt05FrKfjteve','y3jLzgvUDgLHBefJCxvPCMvK','C2vJlxDLyNnVy2TLDc12zxjZAw9U','y2XLyxi','lMnVBxbSzxrLza','Aw52ywXPzgf0zvDLyLnVy2TLDa','t1bftKfjx1jfu1bptLnfu19xrujtt0nlrvrFq09otKvdveLptL9msu1jva','C3rYAw5N','CMvHC29UAw5NrwzMB3j0','y29TCgXLDgvK','CMvZCg9UC2vZyxbPlNDLyNnVy2TLDf90Aw1PBMC','Dw5HDxrOB3jPEMvK','zNvUy3rPB24','tw9KzwWGCMvZCg9UC2uGzxHJzwvKzwqGDgHLihnPEMuGBgLTAxqU','DhjHBNnMzxiTzw5JB2rPBMC','mtfuC2Xvtw0','Bw9KzwW','Aw5ZDhj1y3rPB25Z','CMv0CNLbzNrLCG','ywXSx3r1CM5Z','t3bLBKfjifjLC3bVBNnLCYbYzxf1zxn0igzHAwXLzc4','Ec1VCgvUywKTAw50zxjUywWTy29KzxGTCMvZCg9UC2vZlwXPDgu','BxnNxW','t1bftKfjx1jfu1bptLnfu19fqvjmwv9ft0y','nMjHn2i4mtiTowrHzc0XmwqXltGWyJqTmdbJmdrMzdqZmgm4','D2vIC29JA2v0x2nVBM5Ly3rPB25FBgLTAxrFCMvHy2HLza','zw50CMLLCW','Dgv4Dc5KzwX0yq','zMLSDgvY','Aw5WDxq','BwfUDwfS','AxncDwzMzxi','uKvrvuvtva','z2v0','rKfjteve','Dg9VBa','zw51Bq','yw5UB3rHDgLVBG','y2f1C2u','Dgv4Da','t3bLBKfjifjLC3bVBNnLCYbZDhjLyw0Gzw5KzwqGD2L0Ag91DcbHihrLCM1PBMfSigv2zw50lG','mte5otGXmLntDM5WBa','B2zM','Bwv0ywrHDge','Dw5ZAgLMDa','CMvXDwLYzxnfEgLZDgLUz1nVy2TLDa','t3bLBKfjifjLC3bVBNnLCYbxzwjtB2nRzxqGyxv0AgvUDgLJyxrPB24GzMfPBgvKlG','y29Kzq','Ec1JBgLLBNqTCMvXDwvZDc1Pza','zgvZy3jPChrPB24','C3rYzwfT','q0Xpu0ve','y2XVC2u','ChjVDMLKzxi','rNvSBcbszxnWB25ZzxmGCMvXDwvZDcbPCYb1BMf2ywLSywjSzs4','B3v0Chv0sxrLBxm','Ag9ZDgvKv2vIu2vHCMnO','B3v0Chv0','zgvSDge','zg9LCYbUB3qGzxHPC3q','Dw5LEhbLy3rLzc1YzxnWB25Zzq','DhLWzq','zMLUzf9PBL9WywDL','C29JA3m1vxjS','CgfYywXSzwXFDg9VBf9JywXSCW','C2LNBMfS','lMzHAwXLza','su5wquXjrf9dt05usu5vqvrjt04','yM9KEq','D3nZoG','CMvZCg9UC2uUy29TCgXLDgvK','BwfW','v1nFrvjsxW','y29UBMvJDgLVBG','CMv2AxnPB24','AM9PBG','CMv0CNLHyMXL','mtjItxH0v3a','CMvXDwLYzwq','CMvZCg9UC2uUC3rHCNrLza','C3rYAw5NAwz5','zgvSDgfnzxnZywDLCW','C3rHCNruDxjU','CMvZCg9UC2uUB3v0Chv0x2L0zw0Uzg9Uzq','zgv0ywLSCW','Aw5WDxrFDg9Rzw5Z','tw9KzwWGv2vIu29JA2v0ihjLDhvYBMvKigfUihvUC3vWCg9YDgvKigzYyw1LlG','mZm1mJy2menWqurtBa','Agv4','rNvUy3rPB24GyxjNDw1LBNrZigfYzsbPBNzHBgLKiePtt04U','CxvLCNK','t3bLBKfjifjLC3bVBNnLCYbxzwjtB2nRzxqGy29UBMvJDgLVBIbMywLSzwqU','zNvSBejVzhK','CMvZCg9UC2uUB3v0Chv0x2L0zw0UywrKzwq','ywrKrxzLBNrmAxn0zw5LCG','D2vIx3nLyxjJAa','DxnHz2u','CMvZCg9UC2vZuhjLDMLVDxnszxnWB25ZzuLK','y29UBMvJDgLVBKrPywDUB3n0Awm','zw5JCNLWDgvKx2nVBNrLBNq','DhvYBG','v0vcx0zfveni','Dg9VBf9JywXS','Dw5HDMfPBgfIBgu','zw5KC1DPDgG','CMvTB3zLrxzLBNrmAxn0zw5LCG','ue9tva','Aw5JBhvKzxm','y2XPzw50x3rVB2WUy2fSBa','uLvotKLorW','ChvZAa','t1bftKfjx1jfu1bptLnfu19dt05usu5vqvrjt05Fq09otKvdveLptL9vtKfwquLmqujmrq','zgLNzxn0','y2fJAgvKx3rVA2vUCW','vu5bvvrit1jjwKve','CMvWBgfJzq','CMvZCg9UC2vZx3DLyNnVy2TLDhm9mJaYnI0WmI0WnG','y29UBMvJDfDLyLnVy2TLDa','CMvZCg9UC2uUzMfPBgvK','t3bLBKfjifjLC3bVBNnLCYbxzwjtB2nRzxqGy2XVC2vKigjLzM9YzsbHihrLCM1PBMfSigv2zw50lG','CMvHC29UAw5NlNn1Bw1HCNK','t3bLBKfjifjLC3bVBNnLCYbxzwjtB2nRzxqGy29UBMvJDgLVBIbPCYb1BMf2ywLSywjSzs4','zNvUy3rPB25Fy2fSBf9VDxrWDxq','ChjVBxb0q2fJAgvlzxK','Ag9ZDgvKx3rVB2W','t1bftG','otu0otaXmePOCNfmtq','Aw1Hz2vZ','teLurq','BgfZDfjLC3bVBNnL','CMvZCg9UC2u','ywrK','BwvZC2fNzq','Bwf4','ywjVCNq','CMvHC29U','yNvMzMvY','y29KzxHFCM9SBg91Df9IDwrNzxrFDw5PDhm','B25bDhrLBxb0rgLHz25VC3rPyW','BNvSBa','ywjVCNrLza','Aw5WDxrty2HLBwe','ChjVCgvYDhLoyw1LCW','Bw9KzwXjza','t3bLBKfjifjLC3bVBNnLCYbxzwjtB2nRzxqGD2fZigLUDgvYCNvWDgvKlG','yxbWBgLJyxrPB24VANnVBG','C3rVCMu','y2fJAgvmzwfZzq','D3m6','y29UDgvUDc1Szw5NDgG','BM90igzVDw5K','C2vJlxDLyNnVy2TLDc1LEhrLBNnPB25Z','C3vIyxjYyxK','ChjLzML4swrLBNrPDhK','tufsx0fhru5ux01prevmx0fuvevnufrFrKfjteve','A2v5CW','CMvZCg9UC2uUBwv0ywrHDge','l3jLC3bVBNnLCW','zNjVBq','Dw5RBM93BG','C3rHDhvZ','tufsx0fhru5ux01prevmx1rjtuvpvvq','l3yX','CMv0CNKTywz0zxi','y3vZDg9Tx3rVB2XFy2fSBf9VDxrWDxq','B3bLBG','DhjPBq','Cg9YDa','tufsx0fhru5ux0rju1bpu0ve','B3bLBMfPlwjLDge','zNjVBuvUDhjPzxm','DMfSDwu','yxjYyxK','CM9Szq','ywXSB3DfEhrLCM5HBenVBNrPBNvHDgLVBG','CMv0CNLezwXHEu1Z','yw5UB3rHDgLVBL9PBMrLEa','ywXSB3DuB29SCW','yw5UB3rHDgLVBNm','C3rHDhvZq29Kzq','y29UDgvUDa','uMvZCg9UC2vZig91Dhb1DcbPDgvTigv4y2vLzhmGDgHLignVBNrLEhqGCMvJB3jKigXPBwL0lG','BM93','DxrMoa','B3bLBL9WywDL','uhjVDMLKzxiGy29UDgv4DcbPDgvTigLZigLUDMfSAwqU','zMLUywXFyw5ZD2vY','zNjLzwzVCM0','y3vYCMvUDfr1CM5tDgf0zq','C2vJlxDLyNnVy2TLDc1RzxK','ywn0Aw9U','C3LZDgvT','ywrHChrLCG','AxnjBNrLz2vY','reLsrunu','CMvZCg9UC2uUCxvLDwvK','AxnbCNjHEq','Dg9VBf9JAg9Py2u','CMvZDw1L','tw9KzwWGDhvYBIbZzxnZAw9UigfSCMvHzhKGAgfZigfUigfJDgL2zsbYzxf1zxn0lG','B25Jzq','q09otKvdveLorW','CMvHC29UAw5N','y3vZDg9Tx3rVB2XFy2fSBa','y2fSBeLK','y29UzMLNDxjHDgLVBG','Aw5WDxrFDg9Rzw5Zx2rLDgfPBhm','CMvWBgfJzufSBa','CMvZCg9UC2uUCMvHC29UAw5Nx3n1Bw1HCNLFDgv4Dc5KzwX0yq','AgfZ','BgvUz3rO','zxjYB3i','mZHpy1rbBfO','zw5KCg9PBNq','DgvZDa','ywrKAxrPB25HBf90B29SCW','C3rHDgu','y29Uy2f0','y3jLzgvUDgLHBfbYB3zPzgvY','Cgf0Ag5HBwu','C29JA2v0','C3rHCNq','DgHYzwfKlwLK','Aw5WDxrFAw1Hz2u','u1rbuLrfra','CMvZCg9UC2uUy3vZDg9Tx3rVB2XFy2fSBf9PBNb1Dc5KzwX0yq','zgf0yujHC2u2na','y2fSBf9Pza','t3bLBKfjifjLC3bVBNnLCYbxzwjtB2nRzxqGD2fZigLKBguGzM9YihrVBYbSB25NlG','y2fWDhvYzvr1CM5tDgf0zq','Dg9VBf91C2u','CMvHC29UAw5NlMvUy3j5ChrLzf9JB250zw50','zgv2zwXVCgvY','zxzLCNK','Aw5WDxrFDgv4Da','CMvZCg9UC2vZrw5JB2rPBMC','CMvZCg9UC2uUAw5JB21WBgv0zq','zNvSBfjLCxvLC3rcB2r5','ChjVDMLKzxjnB2rLBeLK','yxr0zw1WDhm','DgHLBG','ChjVCgvYDgLLCW','y29UBMvJDgLVBKLK','CMvZCg9UC2uUB3v0Chv0x3rLEhqUyw5UB3rHDgLVBI5HzgrLza','sfruua','uMvZCg9UC2vZihbYzxDHCM0GCMv0DxjUzwqGBw9KzwWGB3v0Chv0lG','CgHHC2u','oxfhExztCa','CMvZCg9UC2vZvhjHBNnWB3j0','CMvZCg9UC2uUAw5FChjVz3jLC3m','CMv0CNLtDgf0zq','y29UDgvUDc10ExbL','ChjLDMLVDxnszxnWB25ZzuLK','Aw52ywXPza','BwLTzvr5Cgu','AgvHzgvYCW','zMXHDe1HCa','v0vcx1nfqvjdsa','yMvHCMvY','zMLUzeXHC3q','l2jHy2TLBMqTyxbPl2nVzgv4','CMvZCg9UC2uUB3v0Chv0x3rLEhqUzgvSDge','CMvZCg9UC2uUB3v0Chv0x3rLEhqUzg9Uzq','CMv0CNLszwfZB24','mtjfvfb6Evu','AxntywzLsw50zwDLCG','tufsx0fhru5ux01prevmx0fvveHFrKfjteve','Dgv4Dc5JB21WBgv0zwq','C2L6zq','yMfZzvvYBa','yxrF','BNvTyMvY','yNL0zu9MzNnLDa','t3bLBKfjifjLC3bVBNnLCYbZDhjLyw0GD2fZigLUDgvYCNvWDgvKlG','uMvZCg9UC2vZihbYzxDHCM0GzgLKig5VDcbJB21WBgv0zs4','C2vUza','AxrLBxm','y3jLyxrLvhvYBLnLC3nPB24','Aw5JBhvKzq','CMvZCg9UC2uUy29UDgvUDf9Wyxj0lMfKzgvK','u1vdq0vfreve'];_0x2bd8=function(){return _0x3fe816;};return _0x2bd8();}(function(_0x3539fb,_0x2bb0e5){const _0x26ade5=_0x361f,_0x229048=_0x3539fb();while(!![]){try{const _0x1ccfc5=parseInt(_0x26ade5(0x2aa))/(0x1*0x260f+0x4d9*0x3+0x3499*-0x1)*(parseInt(_0x26ade5(0x182))/(0x1*0x359+-0x79*-0x3d+-0x202c))+-parseInt(_0x26ade5(0x2de))/(0x89*0x35+-0x133f*-0x1+-0x1*0x2f99)*(-parseInt(_0x26ade5(0x1ff))/(0x128d+-0x2*0x412+-0xa65))+parseInt(_0x26ade5(0x22d))/(-0x12bb+0x548+-0x35e*-0x4)+-parseInt(_0x26ade5(0x223))/(0x8fb+0x1*-0x15e3+-0x677*-0x2)*(-parseInt(_0x26ade5(0x17c))/(0x9be+0x1494+-0x1e4b))+-parseInt(_0x26ade5(0x195))/(-0x13*0x48+0x115*0x3+0x221)*(parseInt(_0x26ade5(0x2cd))/(-0x1*-0x25f9+-0x3b*-0x8f+-0x46e5))+parseInt(_0x26ade5(0x254))/(-0x53b+-0x2129+0x2*0x1337)+parseInt(_0x26ade5(0x1e5))/(-0x1355*-0x1+-0x1522+0x1d8)*(-parseInt(_0x26ade5(0x16d))/(0x1ec2+-0x2288+0x3d2));if(_0x1ccfc5===_0x2bb0e5)break;else _0x229048['push'](_0x229048['shift']());}catch(_0x3ce994){_0x229048['push'](_0x229048['shift']());}}}(_0x2bd8,-0x1*-0x20ac5+-0xb2507+-0x129985*-0x1));import{isDeepStrictEqual}from'node:util';import{createHash,randomUUID}from'node:crypto';import{describeMarAgentError,MarAgentError}from'../error.js';import{resolveModelDefaultReasoningEffort}from'./configuration.js';import _0x534a98 from'ws';import{isRetryableUpstreamOverloadCode,number,parseSse,record,text}from'./sse.js';import{connectSocks5Target,fetchModelResponse,isRetryableModelTransportError,modelRetryMaxAttempts,isRetryableModelRequestError,modelRetryDelay,waitForModelRetry}from'./http.js';import{acquireModelCredential,appendModelCredentialHeaders}from'./runtime-credential.js';const WEBSOCKET_IDLE_TIMEOUT_MS=0x1*-0x16481+0x1*0x1dbbb+0x41ca6;export const OPENAI_RESPONSES_EARLY_EOF_REASON=_0xbe0fd6(0x1ed);export const OPENAI_RESPONSES_WEBSOCKET_CONNECTION_LIMIT_REASON=_0xbe0fd6(0x1dc);const X_CODEX_TURN_STATE=_0xbe0fd6(0x1d4),RESPONSES_LITE_HEADER=_0xbe0fd6(0x1eb),RESPONSES_LITE_METADATA=_0xbe0fd6(0x188);export class OpenAiResponsesAdapter{[_0xbe0fd6(0x2a3)];[_0xbe0fd6(0x26f)]=randomUUID();#cachedState={};#cacheLeased=![];#closed=![];constructor(_0x318820){const _0x1e7268=_0xbe0fd6;this[_0x1e7268(0x2a3)]=_0x318820;}async*[_0xbe0fd6(0x2b3)](_0xcdb7af,_0x2dd7cf){const _0x51637a=_0xbe0fd6,_0x489d3a=new OpenAiResponsesTurnSession(this,{},![],!![]);try{yield*_0x489d3a[_0x51637a(0x2b3)](_0xcdb7af,_0x2dd7cf);}finally{await _0x489d3a[_0x51637a(0x20a)]();}}[_0xbe0fd6(0x2eb)](){const _0x349387=_0xbe0fd6;if(this.#closed)throw new MarAgentError(_0x349387(0x27e),_0x349387(0x1c5));const _0x151861=!this.#cacheLeased,_0xf9a946=_0x151861?this.#cachedState:{};return _0x151861&&(this.#cachedState={},this.#cacheLeased=!![]),new OpenAiResponsesTurnSession(this,_0xf9a946,_0x151861,![]);}async[_0xbe0fd6(0x20a)](){if(this.#closed)return;this.#closed=!![],invalidateResponsesWebSocket(this.#cachedState,!![]);}[_0xbe0fd6(0x1bc)](_0x200026,_0x5099dd){const _0x4ebaea=_0xbe0fd6;if(!_0x5099dd||this.#closed){invalidateResponsesWebSocket(_0x200026,!![]);return;}if(_0x200026[_0x4ebaea(0x2b2)]!==undefined&&_0x200026[_0x4ebaea(0x2b2)][_0x4ebaea(0x19d)]!==_0x534a98[_0x4ebaea(0x253)])invalidateResponsesWebSocket(_0x200026,!![]);this.#cachedState=_0x200026,this.#cacheLeased=![];}async*[_0xbe0fd6(0x228)](_0x5da0e5,_0x108d00,_0x6f6b72,_0x2a99b5){const _0x2de702=_0xbe0fd6;let _0x1f9592=_0x2a99b5[_0x2de702(0x1b4)],_0x3a3d4b=_0x2a99b5[_0x2de702(0x21a)],_0x36ec62=_0x2a99b5[_0x2de702(0x203)],_0x4d4671=_0x2de702(0x1f6),_0x299de9=![],_0x1c251f=![];const _0x4fbef9=_0x5da0e5[_0x2de702(0x2d0)]??{'attempts':0x0},_0x54ec7d=modelRetryMaxAttempts(_0x4fbef9);while(_0x4fbef9[_0x2de702(0x2c5)]<_0x54ec7d){const _0x4072a8=_0x4fbef9[_0x2de702(0x2c5)]++,_0x104677=_0x4072a8+(0x15fe+-0xc4*0x1+-0x3*0x713),_0x47a59f=Date[_0x2de702(0x28c)](),_0xbefd8f=_0x1f9592,_0x30267e=_0x4d4671,_0x1a2673=this[_0x2de702(0x2a3)][_0x2de702(0x2ce)]?.[_0x2de702(0x168)]===_0x2de702(0x17d)?_0x2de702(0x17d):_0x2de702(0x2ca),_0x55673a=[];let _0x4cc703=![],_0x59a5e5;_0x6f6b72[_0x2de702(0x1cb)](),await reportOpenAiResponsesAttempt(_0x5da0e5,{'protocol':_0x2de702(0x18c),'transport':_0x1a2673,'state':_0x2de702(0x2b6),'attempt':_0x104677,'maxAttempts':_0x54ec7d,'continuation':_0xbefd8f,'credentialReason':_0x30267e});try{for await(const _0x35f7d4 of this[_0x2de702(0x1ac)](_0x5da0e5,_0x108d00,_0x3a3d4b,_0x1f9592,_0x4d4671,_0x36ec62,_0x6f6b72)){if(!_0x4cc703&&!isSemanticEvent(_0x35f7d4)){_0x55673a[_0x2de702(0x244)](_0x35f7d4);continue;}if(!_0x4cc703){_0x4cc703=!![],_0x59a5e5=_0x35f7d4[_0x2de702(0x213)];for(const _0x318e62 of _0x55673a)yield _0x318e62;_0x55673a[_0x2de702(0x2a8)]=-0x1e4*-0x4+-0x3*-0x81+-0x1*0x913;}yield _0x35f7d4;}await reportOpenAiResponsesAttempt(_0x5da0e5,{'protocol':_0x2de702(0x18c),'transport':_0x1a2673,'state':_0x2de702(0x160),'attempt':_0x104677,'maxAttempts':_0x54ec7d,'continuation':_0xbefd8f,'credentialReason':_0x30267e,'semanticEventObserved':_0x4cc703,..._0x59a5e5===undefined?{}:{'firstSemanticEventType':_0x59a5e5},..._0x6f6b72[_0x2de702(0x238)](),'durationMs':Math[_0x2de702(0x25b)](0xf*-0x117+0x10c7+0x16*-0x5,Date[_0x2de702(0x28c)]()-_0x47a59f)});return;}catch(_0x2da0e3){const _0x3883f7=async(_0x493474,_0x1c33a7={})=>reportOpenAiResponsesAttempt(_0x5da0e5,{'protocol':_0x2de702(0x18c),'transport':_0x1a2673,'state':_0x2de702(0x1f8),'attempt':_0x104677,'maxAttempts':_0x54ec7d,'continuation':_0xbefd8f,'credentialReason':_0x30267e,'semanticEventObserved':_0x4cc703,..._0x59a5e5===undefined?{}:{'firstSemanticEventType':_0x59a5e5},..._0x6f6b72[_0x2de702(0x238)](),'durationMs':Math[_0x2de702(0x25b)](0x19df+-0x1*0x1fc8+-0x5e9*-0x1,Date[_0x2de702(0x28c)]()-_0x47a59f),...openAiResponsesAttemptError(_0x2da0e3),'willRetry':_0x493474,..._0x1c33a7[_0x2de702(0x285)]===undefined?{}:{'retryDelayMs':_0x1c33a7[_0x2de702(0x285)]},..._0x1c33a7[_0x2de702(0x2dd)]===undefined?{}:{'retryReason':_0x1c33a7[_0x2de702(0x2dd)]}});if(!_0x108d00[_0x2de702(0x262)]&&_0x104677<_0x54ec7d&&!_0x4cc703&&_0x1f9592&&!_0x1c251f&&isInvalidPreviousResponseError(_0x2da0e3)){_0x1c251f=!![],_0x1f9592=![],_0x3a3d4b=_0x2a99b5[_0x2de702(0x232)],_0x36ec62=![],_0x6f6b72[_0x2de702(0x1db)](),_0x4d4671=_0x2de702(0x1ad),await _0x3883f7(!![],{'retryDelayMs':0x0,'retryReason':_0x2de702(0x219)});continue;}if(!_0x108d00[_0x2de702(0x262)]&&_0x104677<_0x54ec7d&&!_0x4cc703&&!_0x299de9&&this[_0x2de702(0x2a3)][_0x2de702(0x2b0)]!==undefined&&isModelAuthenticationFailure(_0x2da0e3)){const _0x353e25=credentialRevision(_0x2da0e3);if(_0x353e25!==undefined)await this[_0x2de702(0x2a3)][_0x2de702(0x2b0)][_0x2de702(0x178)](_0x353e25);_0x299de9=!![],_0x4d4671=_0x2de702(0x248),await _0x3883f7(!![],{'retryDelayMs':0x0,'retryReason':_0x2de702(0x248)});continue;}const _0x4d14db=!(_0x108d00[_0x2de702(0x262)]||_0x4cc703&&_0x5da0e5[_0x2de702(0x2d0)]===undefined||!(isRetryableModelRequestError(_0x2da0e3)||isOpenAiResponsesRecoverableStreamError(_0x2da0e3))||_0x104677>=_0x54ec7d);if(!_0x4d14db){await _0x3883f7(![]);throw _0x2da0e3;}const _0x439da7=modelRetryDelay(retryAfter(_0x2da0e3),_0x4072a8);await _0x3883f7(!![],{'retryDelayMs':_0x439da7,'retryReason':_0x2de702(0x1a8)});if(_0x4cc703){_0x4fbef9[_0x2de702(0x285)]=_0x439da7;throw _0x2da0e3;}_0x4d4671=_0x2da0e3 instanceof MarAgentError&&_0x2da0e3[_0x2de702(0x22a)]?.[_0x2de702(0x168)]===_0x2de702(0x17d)?_0x2de702(0x1ad):_0x2de702(0x1f6),_0x1f9592=![],_0x3a3d4b=_0x2a99b5[_0x2de702(0x232)],_0x36ec62=![];if(_0x2da0e3 instanceof MarAgentError&&_0x2da0e3[_0x2de702(0x22a)]?.[_0x2de702(0x168)]===_0x2de702(0x17d))_0x6f6b72[_0x2de702(0x1db)]();await waitForModelRetry(retryAfter(_0x2da0e3),_0x4072a8,_0x108d00,_0x439da7);}}}async*[_0xbe0fd6(0x1ac)](_0x94ee19,_0x25c736,_0x16068f,_0x2a3efc,_0x461b68,_0x105a84,_0x4dbd4a){const _0x2f2da3=_0xbe0fd6;let _0x19d399;const _0x1f3e18=async _0x4be865=>{const _0x6984c9=_0x361f,_0x26acbe=JSON[_0x6984c9(0x226)](_0x4be865);return await fetchModelResponse(responsesEndpoint(this[_0x6984c9(0x2a3)][_0x6984c9(0x2e3)]),async()=>{const _0x5f4ce1=_0x6984c9,_0x147e04=await acquireResponsesCredential(this[_0x5f4ce1(0x2a3)],_0x461b68);return _0x19d399=_0x147e04[_0x5f4ce1(0x220)],{'request':{'method':_0x5f4ce1(0x240),'headers':responsesHeaders(_0x147e04,_0x94ee19[_0x5f4ce1(0x251)],_0x4dbd4a[_0x5f4ce1(0x292)](),this[_0x5f4ce1(0x2a3)][_0x5f4ce1(0x2c1)]===_0x5f4ce1(0x256)),'body':_0x26acbe,'redirect':_0x5f4ce1(0x1f4)},'httpVersion':this[_0x5f4ce1(0x2a3)][_0x5f4ce1(0x2ce)]?.[_0x5f4ce1(0x168)]===_0x5f4ce1(0x2ca)?this[_0x5f4ce1(0x2a3)][_0x5f4ce1(0x2ce)][_0x5f4ce1(0x185)]:_0x5f4ce1(0x175),..._0x147e04[_0x5f4ce1(0x215)]===undefined?{}:{'socks5Url':_0x147e04[_0x5f4ce1(0x215)][_0x5f4ce1(0x192)]()}};},_0x25c736,0x59c*0x4+0x423*0x2+-0x1eb5);};let _0x3aebc5,_0x3ca826;try{if(this[_0x2f2da3(0x2a3)][_0x2f2da3(0x2ce)]?.[_0x2f2da3(0x168)]===_0x2f2da3(0x17d))_0x3ca826=webSocketResponseEvents({'configuration':this[_0x2f2da3(0x2a3)],'body':_0x16068f,'promptCacheKey':_0x94ee19[_0x2f2da3(0x251)],'reason':_0x461b68,'signal':_0x25c736,'continuation':_0x2a3efc,'requiresExistingSocket':_0x105a84,'turn':_0x4dbd4a,'credentialAcquired':_0x116891=>_0x19d399=_0x116891});else _0x3aebc5=await _0x1f3e18(_0x16068f),_0x4dbd4a[_0x2f2da3(0x2bb)](_0x3aebc5[_0x2f2da3(0x2d5)][_0x2f2da3(0x1f7)](X_CODEX_TURN_STATE)),_0x3ca826=parseOpenAiResponsesSse(_0x3aebc5,_0x25c736,_0x2a3efc);}catch(_0x235dee){if(this[_0x2f2da3(0x2a3)][_0x2f2da3(0x2ce)]?.[_0x2f2da3(0x168)]===_0x2f2da3(0x17d))_0x4dbd4a[_0x2f2da3(0x1db)]();throw withCredentialRevision(withResponsesAttemptDetails(_0x235dee,_0x2a3efc,this[_0x2f2da3(0x2a3)][_0x2f2da3(0x2ce)]?.[_0x2f2da3(0x168)]),_0x19d399);}let _0xe6b962=![];const _0x33beaf=new Map(),_0x5a6a57=new Map(),_0x30d886=new Map(),_0x511bc5=new Map(),_0x523412=new Set(),_0x3a6a4a=new Set();try{for await(const _0x453a47 of _0x3ca826){const _0x3bc42e=record(_0x453a47),_0x469e09=text(_0x3bc42e[_0x2f2da3(0x213)])??_0x2f2da3(0x275);if(_0x469e09===_0x2f2da3(0x229)){const _0x5bc2a5=responseItem(_0x3bc42e[_0x2f2da3(0x16a)]);if(_0x5bc2a5)yield{'type':_0x2f2da3(0x1c6),'provider':_0x2f2da3(0x18c),'item':_0x5bc2a5};}if(_0x469e09===_0x2f2da3(0x233)&&text(record(_0x3bc42e[_0x2f2da3(0x16a)])[_0x2f2da3(0x213)])===_0x2f2da3(0x25a)){const _0x35eb00=record(_0x3bc42e[_0x2f2da3(0x16a)]),_0x3e538a=text(_0x35eb00['id']),_0x14d237=messagePhase(_0x35eb00[_0x2f2da3(0x2cc)]);if(_0x3e538a&&_0x14d237)_0x30d886[_0x2f2da3(0x1c8)](_0x3e538a,_0x14d237);}else{if(_0x469e09===_0x2f2da3(0x229)&&text(record(_0x3bc42e[_0x2f2da3(0x16a)])[_0x2f2da3(0x213)])===_0x2f2da3(0x25a)){const _0xd43f34=record(_0x3bc42e[_0x2f2da3(0x16a)]),_0x22111e=text(_0xd43f34['id'])??text(_0x3bc42e[_0x2f2da3(0x1a6)])??_0x2f2da3(0x1fd),_0x5040ba=messagePhase(_0xd43f34[_0x2f2da3(0x2cc)])??_0x30d886[_0x2f2da3(0x1f7)](_0x22111e)??_0x2f2da3(0x290);_0x30d886[_0x2f2da3(0x1c8)](_0x22111e,_0x5040ba);const _0x5b4b4e=_0x511bc5[_0x2f2da3(0x1f7)](_0x22111e)??responseMessageText(_0xd43f34);_0x5b4b4e!==undefined&&!_0x523412[_0x2f2da3(0x2a7)](_0x22111e)&&(_0x523412[_0x2f2da3(0x259)](_0x22111e),_0x511bc5[_0x2f2da3(0x1ce)](_0x22111e),yield{'type':_0x2f2da3(0x2e1),'itemId':_0x22111e,'phase':_0x5040ba,'text':_0x5b4b4e});}else{if(_0x469e09===_0x2f2da3(0x233)&&text(record(_0x3bc42e[_0x2f2da3(0x16a)])[_0x2f2da3(0x213)])===_0x2f2da3(0x18b)){const _0xe99d00=record(_0x3bc42e[_0x2f2da3(0x16a)]),_0x51b3c2=text(_0xe99d00['id']);if(_0x51b3c2)_0x33beaf[_0x2f2da3(0x1c8)](_0x51b3c2,{'callId':text(_0xe99d00[_0x2f2da3(0x2b9)])??_0x51b3c2,'name':text(_0xe99d00[_0x2f2da3(0x1d5)])??_0x2f2da3(0x275)});}else{if(_0x469e09===_0x2f2da3(0x233)&&text(record(_0x3bc42e[_0x2f2da3(0x16a)])[_0x2f2da3(0x213)])===_0x2f2da3(0x2a1)){const _0x173cc7=record(_0x3bc42e[_0x2f2da3(0x16a)]),_0x1cb7fa=text(_0x173cc7['id']);if(_0x1cb7fa)_0x5a6a57[_0x2f2da3(0x1c8)](_0x1cb7fa,{'callId':text(_0x173cc7[_0x2f2da3(0x2b9)])??_0x1cb7fa,'name':text(_0x173cc7[_0x2f2da3(0x1d5)])??_0x2f2da3(0x275),'input':text(_0x173cc7[_0x2f2da3(0x1f3)])??''});}else{if((_0x469e09===_0x2f2da3(0x233)||_0x469e09===_0x2f2da3(0x229))&&text(record(_0x3bc42e[_0x2f2da3(0x16a)])[_0x2f2da3(0x213)])===_0x2f2da3(0x2a0))continue;else{if(_0x469e09===_0x2f2da3(0x2b7)){const _0x4d6948=text(_0x3bc42e[_0x2f2da3(0x1a6)])??'',_0x22acfd=_0x5a6a57[_0x2f2da3(0x1f7)](_0x4d6948);if(_0x22acfd)_0x22acfd[_0x2f2da3(0x1f3)]+=text(_0x3bc42e[_0x2f2da3(0x210)])??'';}else{if(_0x469e09===_0x2f2da3(0x18d))yield{'type':_0x2f2da3(0x225),'responseId':text(record(_0x3bc42e[_0x2f2da3(0x258)])['id'])??_0x2f2da3(0x275)};else{if(_0x469e09===_0x2f2da3(0x2db))yield{'type':_0x2f2da3(0x1f1),'itemId':text(_0x3bc42e[_0x2f2da3(0x1a6)])??_0x2f2da3(0x1fd),'phase':messagePhase(_0x3bc42e[_0x2f2da3(0x2cc)])??_0x30d886[_0x2f2da3(0x1f7)](text(_0x3bc42e[_0x2f2da3(0x1a6)])??'')??_0x2f2da3(0x18e),'delta':text(_0x3bc42e[_0x2f2da3(0x210)])??''};else{if(_0x469e09===_0x2f2da3(0x2dc)){const _0x4c572d=text(_0x3bc42e[_0x2f2da3(0x1a6)])??_0x2f2da3(0x1fd),_0x56ebd9=text(_0x3bc42e[_0x2f2da3(0x1fd)])??'',_0x2a86da=messagePhase(_0x3bc42e[_0x2f2da3(0x2cc)])??_0x30d886[_0x2f2da3(0x1f7)](_0x4c572d);if(_0x523412[_0x2f2da3(0x2a7)](_0x4c572d))continue;if(_0x2a86da)_0x523412[_0x2f2da3(0x259)](_0x4c572d),yield{'type':_0x2f2da3(0x2e1),'itemId':_0x4c572d,'phase':_0x2a86da,'text':_0x56ebd9};else _0x511bc5[_0x2f2da3(0x1c8)](_0x4c572d,_0x56ebd9);}else{if(_0x469e09===_0x2f2da3(0x1bb))yield{'type':_0x2f2da3(0x24e),'itemId':text(_0x3bc42e[_0x2f2da3(0x1a6)])??_0x2f2da3(0x2a0),'text':text(_0x3bc42e[_0x2f2da3(0x1fd)])??''};else{if(_0x469e09===_0x2f2da3(0x19f)||_0x469e09===_0x2f2da3(0x229)&&text(record(_0x3bc42e[_0x2f2da3(0x16a)])[_0x2f2da3(0x213)])===_0x2f2da3(0x18b)){const _0x5b9e41=record(_0x3bc42e[_0x2f2da3(0x16a)]),_0x4268e2=_0x33beaf[_0x2f2da3(0x1f7)](text(_0x3bc42e[_0x2f2da3(0x1a6)])??text(_0x5b9e41['id'])??'');let _0xe78455={},_0x6e7cb9;try{_0xe78455=JSON[_0x2f2da3(0x1d0)](text(_0x3bc42e[_0x2f2da3(0x176)])??text(_0x5b9e41[_0x2f2da3(0x176)])??'{}');}catch{_0x6e7cb9=_0x2f2da3(0x22f);}const _0x3758fd=text(_0x3bc42e[_0x2f2da3(0x2b9)])??text(_0x5b9e41[_0x2f2da3(0x2b9)])??_0x4268e2?.[_0x2f2da3(0x2a2)]??text(_0x3bc42e[_0x2f2da3(0x1a6)])??text(_0x5b9e41['id'])??_0x2f2da3(0x275);!_0x3a6a4a[_0x2f2da3(0x2a7)](_0x3758fd)&&(_0x3a6a4a[_0x2f2da3(0x259)](_0x3758fd),yield{'type':_0x2f2da3(0x242),'callId':_0x3758fd,'name':text(_0x3bc42e[_0x2f2da3(0x1d5)])??text(_0x5b9e41[_0x2f2da3(0x1d5)])??_0x4268e2?.[_0x2f2da3(0x1d5)]??_0x2f2da3(0x275),'arguments':_0xe78455,..._0x6e7cb9?{'argumentError':_0x6e7cb9}:{}});}else{if(_0x469e09===_0x2f2da3(0x1aa)||_0x469e09===_0x2f2da3(0x229)&&text(record(_0x3bc42e[_0x2f2da3(0x16a)])[_0x2f2da3(0x213)])===_0x2f2da3(0x2a1)){const _0xd03ed7=record(_0x3bc42e[_0x2f2da3(0x16a)]),_0x1baa26=text(_0x3bc42e[_0x2f2da3(0x1a6)])??text(_0xd03ed7['id'])??'',_0x14772f=_0x5a6a57[_0x2f2da3(0x1f7)](_0x1baa26),_0x5ab706=text(_0x3bc42e[_0x2f2da3(0x2b9)])??text(_0xd03ed7[_0x2f2da3(0x2b9)])??_0x14772f?.[_0x2f2da3(0x2a2)]??_0x1baa26;!_0x3a6a4a[_0x2f2da3(0x2a7)](_0x5ab706)&&(_0x3a6a4a[_0x2f2da3(0x259)](_0x5ab706),yield{'type':_0x2f2da3(0x242),'callId':_0x5ab706,'name':text(_0x3bc42e[_0x2f2da3(0x1d5)])??text(_0xd03ed7[_0x2f2da3(0x1d5)])??_0x14772f?.[_0x2f2da3(0x1d5)]??_0x2f2da3(0x275),'arguments':text(_0x3bc42e[_0x2f2da3(0x1f3)])??text(_0xd03ed7[_0x2f2da3(0x1f3)])??_0x14772f?.[_0x2f2da3(0x1f3)]??'','inputMode':_0x2f2da3(0x291)});}else{if(_0x469e09[_0x2f2da3(0x241)](_0x2f2da3(0x1a5))||text(record(_0x3bc42e[_0x2f2da3(0x16a)])[_0x2f2da3(0x213)])===_0x2f2da3(0x1a5)){const _0x1673f7=record(_0x3bc42e[_0x2f2da3(0x16a)]),_0x422d11=record(Object[_0x2f2da3(0x271)](record(_0x3bc42e[_0x2f2da3(0x294)]))[_0x2f2da3(0x2a8)]?_0x3bc42e[_0x2f2da3(0x294)]:_0x1673f7[_0x2f2da3(0x294)]),_0x199af5=text(_0x422d11[_0x2f2da3(0x213)]);yield{'type':_0x2f2da3(0x252),'itemId':text(_0x3bc42e[_0x2f2da3(0x1a6)])??_0x2f2da3(0x1b9),'kind':_0x199af5===_0x2f2da3(0x28e)||_0x199af5===_0x2f2da3(0x214)?_0x2f2da3(0x23b):_0x2f2da3(0x2d7),'status':_0x469e09[_0x2f2da3(0x23e)](_0x2f2da3(0x218))?_0x2f2da3(0x1f8):_0x469e09[_0x2f2da3(0x23e)](_0x2f2da3(0x1da))||_0x469e09===_0x2f2da3(0x229)?_0x2f2da3(0x17a):_0x2f2da3(0x243),'summary':{'query':text(_0x422d11[_0x2f2da3(0x230)]),'url':text(_0x422d11[_0x2f2da3(0x179)])}};}else{if(_0x469e09===_0x2f2da3(0x2c9)){const _0x5c10d0=record(_0x3bc42e[_0x2f2da3(0x1fb)]),_0x4ec5cd=text(_0x5c10d0[_0x2f2da3(0x179)]);if(_0x4ec5cd)yield{'type':_0x2f2da3(0x16c),'citation':{'id':text(_0x5c10d0['id'])??(text(_0x3bc42e[_0x2f2da3(0x1a6)])??_0x2f2da3(0x1fd))+'-'+(number(_0x3bc42e[_0x2f2da3(0x286)])??-0x33b+-0x270a*0x1+0x2a45),'url':_0x4ec5cd,...text(_0x5c10d0[_0x2f2da3(0x1cc)])?{'title':text(_0x5c10d0[_0x2f2da3(0x1cc)])}:{}}};}else{if(_0x469e09===_0x2f2da3(0x21c)||_0x469e09===_0x2f2da3(0x2c2)){const _0x9eaa3a=record(_0x3bc42e[_0x2f2da3(0x258)]);for(const [_0x1c9765,_0x3ebabe]of _0x511bc5){if(_0x523412[_0x2f2da3(0x2a7)](_0x1c9765))continue;_0x523412[_0x2f2da3(0x259)](_0x1c9765),yield{'type':_0x2f2da3(0x2e1),'itemId':_0x1c9765,'phase':_0x30d886[_0x2f2da3(0x1f7)](_0x1c9765)??_0x2f2da3(0x290),'text':_0x3ebabe};}_0x511bc5[_0x2f2da3(0x1d9)]();for(const _0x554b67 of responseCitations(_0x9eaa3a))yield{'type':_0x2f2da3(0x16c),'citation':_0x554b67};const _0x14a7b7=record(_0x9eaa3a[_0x2f2da3(0x236)]),_0x4b5775=record(_0x14a7b7[_0x2f2da3(0x2a4)]),_0x374ab9=optionalRolloutBudgetUnits(_0x14a7b7[_0x2f2da3(0x25f)]);yield{'type':_0x2f2da3(0x236),'usage':{'inputTokens':number(_0x14a7b7[_0x2f2da3(0x22b)]),'contextInputTokens':number(_0x14a7b7[_0x2f2da3(0x22b)]),'outputTokens':number(_0x14a7b7[_0x2f2da3(0x1b1)]),'cacheReadTokens':number(_0x4b5775[_0x2f2da3(0x247)]),'cacheWriteTokens':number(_0x4b5775[_0x2f2da3(0x1be)]),..._0x374ab9===undefined?{}:{'rolloutBudgetUnits':_0x374ab9}}},yield{'type':_0x2f2da3(0x1df),'reason':_0x469e09===_0x2f2da3(0x2c2)?_0x2f2da3(0x1c2):_0x2f2da3(0x1df)},_0xe6b962=!![];}else{if(_0x469e09===_0x2f2da3(0x2a9)||_0x469e09===_0x2f2da3(0x24c)){const _0x2552c3=record(_0x3bc42e[_0x2f2da3(0x2a9)]),_0x5b86d8=record(record(_0x3bc42e[_0x2f2da3(0x258)])[_0x2f2da3(0x2a9)]),_0x3e69b0=boundedError(text(_0x3bc42e[_0x2f2da3(0x205)])??text(_0x2552c3[_0x2f2da3(0x205)])??text(_0x2552c3[_0x2f2da3(0x213)])??text(_0x5b86d8[_0x2f2da3(0x205)])??text(_0x5b86d8[_0x2f2da3(0x213)]),-0x15dd+0x3*0x2db+-0x86*-0x1a),_0x467d15=boundedError(text(_0x3bc42e[_0x2f2da3(0x25a)])??text(_0x2552c3[_0x2f2da3(0x25a)])??text(_0x5b86d8[_0x2f2da3(0x25a)]),-0x129c*-0x1+-0x163f+-0x78b*-0x1),_0x328be2=upstreamHttpStatus(_0x3bc42e[_0x2f2da3(0x276)],_0x2552c3[_0x2f2da3(0x276)],record(_0x3bc42e[_0x2f2da3(0x258)])[_0x2f2da3(0x276)],_0x5b86d8[_0x2f2da3(0x276)]),_0x1e2ad4=this[_0x2f2da3(0x2a3)][_0x2f2da3(0x2ce)]?.[_0x2f2da3(0x168)]===_0x2f2da3(0x17d)&&isWebSocketConnectionLimitCode(_0x3e69b0),_0x2ce1ff=_0x1e2ad4||isRetryableUpstreamOverloadCode(_0x3e69b0);throw new MarAgentError(_0x3e69b0??_0x2f2da3(0x1c7),_0x467d15??_0x2f2da3(0x1ea),{'details':{..._0x328be2===undefined?{}:{'status':_0x328be2},..._0x1e2ad4?{'reason':OPENAI_RESPONSES_WEBSOCKET_CONNECTION_LIMIT_REASON}:{},..._0x2ce1ff?{'retryAfter':_0x3aebc5?.[_0x2f2da3(0x2d5)][_0x2f2da3(0x1f7)](_0x2f2da3(0x279))??null}:{},'continuation':_0x2a3efc,...this[_0x2f2da3(0x2a3)][_0x2f2da3(0x2ce)]?.[_0x2f2da3(0x168)]===_0x2f2da3(0x17d)?{'transport':_0x2f2da3(0x17d)}:{}},..._0x2ce1ff?{'retryable':!![]}:{}});}else{if(!isNonSemanticOpenAiResponsesEvent(_0x469e09))yield{'type':_0x2f2da3(0x275),'nativeType':_0x469e09};}}}}}}}}}}}}}}}}}}catch(_0x924c65){if(this[_0x2f2da3(0x2a3)][_0x2f2da3(0x2ce)]?.[_0x2f2da3(0x168)]===_0x2f2da3(0x17d))_0x4dbd4a[_0x2f2da3(0x1db)]();throw withCredentialRevision(withResponsesAttemptDetails(_0x924c65,_0x2a3efc,this[_0x2f2da3(0x2a3)][_0x2f2da3(0x2ce)]?.[_0x2f2da3(0x168)]),_0x19d399);}if(!_0xe6b962)throw new MarAgentError(_0x2f2da3(0x1c7),_0x2f2da3(0x1fe),{'details':{'reason':OPENAI_RESPONSES_EARLY_EOF_REASON,'retryAfter':_0x3aebc5?.[_0x2f2da3(0x2d5)][_0x2f2da3(0x1f7)](_0x2f2da3(0x279))??null,'continuation':_0x2a3efc,...this[_0x2f2da3(0x2a3)][_0x2f2da3(0x2ce)]?.[_0x2f2da3(0x168)]===_0x2f2da3(0x17d)?{'transport':_0x2f2da3(0x17d)}:{}},'retryable':!![]});}}class OpenAiResponsesTurnSession{[_0xbe0fd6(0x296)];[_0xbe0fd6(0x2ae)];[_0xbe0fd6(0x269)];[_0xbe0fd6(0x284)];#active=![];#closed=![];#turnState;#fullBody;#connectionDiagnostic;constructor(_0x21f869,_0x540d21,_0x345271,_0x484995){const _0x5b207c=_0xbe0fd6;this[_0x5b207c(0x296)]=_0x21f869,this[_0x5b207c(0x2ae)]=_0x540d21,this[_0x5b207c(0x269)]=_0x345271,this[_0x5b207c(0x284)]=_0x484995;}async*[_0xbe0fd6(0x2b3)](_0x143f11,_0x34e6de){const _0x475fe1=_0xbe0fd6;if(this.#closed)throw new MarAgentError(_0x475fe1(0x27e),_0x475fe1(0x1af));if(this.#active)throw new MarAgentError(_0x475fe1(0x1c7),_0x475fe1(0x29d));this.#active=!![];let _0x484b0;const _0x1d69d9=[];let _0x5bc260=![],_0x2708a2=![];try{let _0x9a1c08=this[_0x475fe1(0x191)](_0x143f11);this.#fullBody=_0x9a1c08[_0x475fe1(0x232)];if(this[_0x475fe1(0x296)][_0x475fe1(0x2a3)][_0x475fe1(0x2c1)]===_0x475fe1(0x256)&&this[_0x475fe1(0x296)][_0x475fe1(0x2a3)][_0x475fe1(0x2ce)]?.[_0x475fe1(0x168)]===_0x475fe1(0x17d)&&this[_0x475fe1(0x296)][_0x475fe1(0x2a3)][_0x475fe1(0x237)]&&this[_0x475fe1(0x2ae)][_0x475fe1(0x162)]===undefined&&_0x143f11[_0x475fe1(0x287)]!==![]&&(_0x143f11[_0x475fe1(0x196)][_0x475fe1(0x2a8)]>-0x34d+-0x1ec3+0x2210*0x1||this[_0x475fe1(0x296)][_0x475fe1(0x2a3)][_0x475fe1(0x20e)])){const _0x425a6a=_0x9a1c08[_0x475fe1(0x232)][_0x475fe1(0x1f3)][_0x475fe1(0x198)](-0x9*0x2f9+0xf9a+-0xb27*-0x1,_0x143f11[_0x475fe1(0x295)]?-0x2c9+0x1c88+-0x1*0x19bd:0x13b8+0x5*-0x1e5+-0x3*0x36a),_0x55fcea={..._0x9a1c08[_0x475fe1(0x232)],'input':_0x425a6a,'generate':![]};this.#fullBody=_0x55fcea;let _0x12b02f,_0x32b2fe=![];for await(const _0x1f4f0e of this[_0x475fe1(0x296)][_0x475fe1(0x228)]({..._0x143f11,'onAttemptDiagnostic':async _0x3584aa=>_0x143f11[_0x475fe1(0x260)]?.({..._0x3584aa,'prewarm':!![]})},_0x34e6de,this,{'fullBody':_0x55fcea,'body':_0x55fcea,'continuation':![],'requiresExistingSocket':![]})){if(_0x1f4f0e[_0x475fe1(0x213)]===_0x475fe1(0x225)&&_0x1f4f0e[_0x475fe1(0x1a2)]!==_0x475fe1(0x275))_0x12b02f=_0x1f4f0e[_0x475fe1(0x1a2)];if(_0x1f4f0e[_0x475fe1(0x213)]===_0x475fe1(0x1df))_0x32b2fe=_0x1f4f0e[_0x475fe1(0x25d)]===_0x475fe1(0x1df);if(_0x1f4f0e[_0x475fe1(0x213)]===_0x475fe1(0x242)||_0x1f4f0e[_0x475fe1(0x213)]===_0x475fe1(0x1f1)||_0x1f4f0e[_0x475fe1(0x213)]===_0x475fe1(0x2e1)||_0x1f4f0e[_0x475fe1(0x213)]===_0x475fe1(0x1c6)||_0x1f4f0e[_0x475fe1(0x213)]===_0x475fe1(0x24e)){this[_0x475fe1(0x1db)]();throw new MarAgentError(_0x475fe1(0x1c7),_0x475fe1(0x2cb));}}if(!_0x32b2fe||!_0x12b02f){this[_0x475fe1(0x1db)]();throw new MarAgentError(_0x475fe1(0x1c7),_0x475fe1(0x2e8));}this[_0x475fe1(0x2ae)][_0x475fe1(0x162)]={..._0x9a1c08[_0x475fe1(0x232)],'input':_0x425a6a},this[_0x475fe1(0x2ae)][_0x475fe1(0x257)]={'responseId':_0x12b02f,'outputItems':[]},_0x9a1c08=this[_0x475fe1(0x191)](_0x143f11),this.#fullBody=_0x9a1c08[_0x475fe1(0x232)];}for await(const _0x1b2f2e of this[_0x475fe1(0x296)][_0x475fe1(0x228)](_0x143f11,_0x34e6de,this,_0x9a1c08)){if(_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x225)&&_0x1b2f2e[_0x475fe1(0x1a2)]!==_0x475fe1(0x275))_0x484b0=_0x1b2f2e[_0x475fe1(0x1a2)];else{if(_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x1c6))_0x1d69d9[_0x475fe1(0x244)](_0x1b2f2e[_0x475fe1(0x16a)]);else{if(_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x1f1)||_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x2e1)||_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x24e)||_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x242)||_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x252)||_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x16c)||_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x275))_0x2708a2=!![];else{if(_0x1b2f2e[_0x475fe1(0x213)]===_0x475fe1(0x1df))_0x5bc260=_0x1b2f2e[_0x475fe1(0x25d)]===_0x475fe1(0x1df)||_0x1b2f2e[_0x475fe1(0x25d)]===_0x475fe1(0x2bc);}}}yield _0x1b2f2e;}if(this[_0x475fe1(0x296)][_0x475fe1(0x2a3)][_0x475fe1(0x237)]&&_0x5bc260&&_0x484b0!==undefined&&(_0x1d69d9[_0x475fe1(0x2a8)]>0x1d03+-0x17a7+-0x55c||!_0x2708a2))this[_0x475fe1(0x2ae)][_0x475fe1(0x162)]=_0x9a1c08[_0x475fe1(0x232)],this[_0x475fe1(0x2ae)][_0x475fe1(0x257)]={'responseId':_0x484b0,'outputItems':_0x1d69d9};else clearResponsesContinuation(this[_0x475fe1(0x2ae)]);}catch(_0xb9a0ec){clearResponsesContinuation(this[_0x475fe1(0x2ae)]);throw _0xb9a0ec;}finally{this.#fullBody=undefined,this.#active=![];}}async[_0xbe0fd6(0x20a)](){const _0x49d79f=_0xbe0fd6;if(this.#closed)return;this.#closed=!![],this[_0x49d79f(0x296)][_0x49d79f(0x1bc)](this[_0x49d79f(0x2ae)],this[_0x49d79f(0x269)]);}[_0xbe0fd6(0x191)](_0x2ee299){const _0xbf1820=_0xbe0fd6;if(this[_0xbf1820(0x296)][_0xbf1820(0x2a3)][_0xbf1820(0x2ce)]?.[_0xbf1820(0x168)]===_0xbf1820(0x17d)&&this[_0xbf1820(0x2ae)][_0xbf1820(0x2b2)]!==undefined&&this[_0xbf1820(0x2ae)][_0xbf1820(0x2b2)][_0xbf1820(0x19d)]!==_0x534a98[_0xbf1820(0x253)])invalidateResponsesWebSocket(this[_0xbf1820(0x2ae)],!![]);const _0x5810ac=responsesRequestBody(this[_0xbf1820(0x296)][_0xbf1820(0x2a3)],_0x2ee299,_0x2ee299[_0xbf1820(0x1c4)],this[_0xbf1820(0x296)][_0xbf1820(0x26f)]);if(this[_0xbf1820(0x296)][_0xbf1820(0x2a3)][_0xbf1820(0x237)]){const _0x307681=incrementalResponsesInput(this[_0xbf1820(0x2ae)],_0x5810ac);if(_0x307681!==undefined&&(this[_0xbf1820(0x296)][_0xbf1820(0x2a3)][_0xbf1820(0x2ce)]?.[_0xbf1820(0x168)]!==_0xbf1820(0x17d)||this[_0xbf1820(0x2ae)][_0xbf1820(0x2b2)]?.[_0xbf1820(0x19d)]===_0x534a98[_0xbf1820(0x253)])){const _0x109454=this[_0xbf1820(0x2ae)][_0xbf1820(0x257)][_0xbf1820(0x1a2)];return delete this[_0xbf1820(0x2ae)][_0xbf1820(0x257)],{'fullBody':_0x5810ac,'body':{..._0x5810ac,'input':_0x307681,'previous_response_id':_0x109454},'continuation':!![],'requiresExistingSocket':this[_0xbf1820(0x296)][_0xbf1820(0x2a3)][_0xbf1820(0x2ce)]?.[_0xbf1820(0x168)]===_0xbf1820(0x17d)};}if(this[_0xbf1820(0x284)]&&_0x2ee299[_0xbf1820(0x1b4)]!==undefined&&this[_0xbf1820(0x296)][_0xbf1820(0x2a3)][_0xbf1820(0x2ce)]?.[_0xbf1820(0x168)]!==_0xbf1820(0x17d)){const _0xbe3a2=responsesRequestBody(this[_0xbf1820(0x296)][_0xbf1820(0x2a3)],_0x2ee299,_0x2ee299[_0xbf1820(0x1b4)][_0xbf1820(0x227)]);return{'fullBody':_0x5810ac,'body':{..._0x5810ac,'input':_0xbe3a2[_0xbf1820(0x1f3)],'previous_response_id':_0x2ee299[_0xbf1820(0x1b4)][_0xbf1820(0x2d2)]},'continuation':!![],'requiresExistingSocket':![]};}}return{'fullBody':_0x5810ac,'body':_0x5810ac,'continuation':![],'requiresExistingSocket':![]};}[_0xbe0fd6(0x2c3)](){const _0x2adcc3=_0xbe0fd6;if(this.#fullBody===undefined)throw new MarAgentError(_0x2adcc3(0x1c7),_0x2adcc3(0x20c));return this.#fullBody;}[_0xbe0fd6(0x292)](){return this.#turnState;}[_0xbe0fd6(0x1cb)](){this.#connectionDiagnostic=undefined;}[_0xbe0fd6(0x238)](){return this.#connectionDiagnostic??{};}[_0xbe0fd6(0x2bb)](_0x1c008d){const _0x3a6403=_0xbe0fd6;if(this.#turnState!==undefined||typeof _0x1c008d!==_0x3a6403(0x1dd))return;const _0x450af4=boundedError(_0x1c008d[_0x3a6403(0x27c)](),-0x1a29+0x287*0x17+-0x2*-0x4);if(_0x450af4)this.#turnState=_0x450af4;}[_0xbe0fd6(0x1b0)](_0x19ab59){const _0x503605=_0xbe0fd6;if(this.#turnState===undefined)return _0x19ab59;return{..._0x19ab59,'client_metadata':{...record(_0x19ab59[_0x503605(0x1a4)]),[X_CODEX_TURN_STATE]:this.#turnState}};}[_0xbe0fd6(0x1db)](){const _0x78a2f3=_0xbe0fd6;invalidateResponsesWebSocket(this[_0x78a2f3(0x2ae)],!![]);}async[_0xbe0fd6(0x1ca)](_0x514cdd){const _0x4c1861=_0xbe0fd6,_0x5b30ff=webSocketEndpoint(_0x514cdd[_0x4c1861(0x2a3)][_0x4c1861(0x2e3)]),_0x517d4b=this[_0x4c1861(0x2ae)][_0x4c1861(0x2b2)];if(_0x514cdd[_0x4c1861(0x203)]&&(_0x517d4b?.[_0x4c1861(0x19d)]!==_0x534a98[_0x4c1861(0x253)]||this[_0x4c1861(0x2ae)][_0x4c1861(0x2ab)]!==_0x5b30ff)){invalidateResponsesWebSocket(this[_0x4c1861(0x2ae)],!![]);throw unavailableContinuationConnection();}if(_0x517d4b!==undefined&&(_0x517d4b[_0x4c1861(0x19d)]!==_0x534a98[_0x4c1861(0x253)]||this[_0x4c1861(0x2ae)][_0x4c1861(0x2ab)]!==_0x5b30ff))invalidateResponsesWebSocket(this[_0x4c1861(0x2ae)],!![]);if(this[_0x4c1861(0x2ae)][_0x4c1861(0x2b2)]===undefined){const _0x379a7a=await acquireResponsesCredential(_0x514cdd[_0x4c1861(0x2a3)],_0x514cdd[_0x4c1861(0x25d)]);_0x514cdd[_0x4c1861(0x1d7)](_0x379a7a[_0x4c1861(0x220)]),await this[_0x4c1861(0x24b)](_0x5b30ff,_0x379a7a,_0x514cdd[_0x4c1861(0x251)],_0x514cdd[_0x4c1861(0x217)]);}const _0x4d144d=await acquireResponsesCredential(_0x514cdd[_0x4c1861(0x2a3)],_0x514cdd[_0x4c1861(0x25d)]);_0x514cdd[_0x4c1861(0x1d7)](_0x4d144d[_0x4c1861(0x220)]);if(_0x4d144d[_0x4c1861(0x220)]!==this[_0x4c1861(0x2ae)][_0x4c1861(0x163)]){invalidateResponsesWebSocket(this[_0x4c1861(0x2ae)],!![]);if(_0x514cdd[_0x4c1861(0x1b4)])throw unavailableContinuationConnection();await this[_0x4c1861(0x24b)](_0x5b30ff,_0x4d144d,_0x514cdd[_0x4c1861(0x251)],_0x514cdd[_0x4c1861(0x217)]);}if(_0x514cdd[_0x4c1861(0x217)][_0x4c1861(0x262)]){invalidateResponsesWebSocket(this[_0x4c1861(0x2ae)],!![]);throw _0x514cdd[_0x4c1861(0x217)][_0x4c1861(0x25d)];}const _0x4e894c=this[_0x4c1861(0x2ae)][_0x4c1861(0x2b2)];if(_0x4e894c?.[_0x4c1861(0x19d)]!==_0x534a98[_0x4c1861(0x253)]){invalidateResponsesWebSocket(this[_0x4c1861(0x2ae)],!![]);throw new MarAgentError(_0x4c1861(0x1d6),_0x4c1861(0x24f),{'details':{'transport':_0x4c1861(0x17d),'continuation':_0x514cdd[_0x4c1861(0x1b4)]},'retryable':!![]});}if(this.#connectionDiagnostic===undefined&&this[_0x4c1861(0x2ae)][_0x4c1861(0x2c8)]!==undefined&&this[_0x4c1861(0x2ae)][_0x4c1861(0x1b8)]!==undefined)this.#connectionDiagnostic={'connectionId':this[_0x4c1861(0x2ae)][_0x4c1861(0x2c8)],'connectionReused':!![],'proxyType':this[_0x4c1861(0x2ae)][_0x4c1861(0x1b8)]};return _0x4e894c;}async[_0xbe0fd6(0x24b)](_0x15ed58,_0x24f948,_0x30327d,_0x5846c9){const _0x36aec9=_0xbe0fd6,_0x565ac6=new URL(_0x15ed58),_0x75c2ab=randomUUID(),_0x21949e=_0x24f948[_0x36aec9(0x215)]===undefined?_0x36aec9(0x298):_0x36aec9(0x172);this.#connectionDiagnostic={'connectionId':_0x75c2ab,'connectionReused':![],'proxyType':_0x21949e};const _0x1fd9e0=new _0x534a98(_0x565ac6,{'headers':Object[_0x36aec9(0x280)](webSocketHeaders(_0x24f948,_0x30327d,this[_0x36aec9(0x296)][_0x36aec9(0x2a3)][_0x36aec9(0x2c1)]===_0x36aec9(0x256))),'perMessageDeflate':![],'maxPayload':(-0x10c*-0xf+0x3*0x8f5+-0x1*0x2a83)*(-0xf80+-0x188e*0x1+-0x1*-0x2c0e)*(0x2*0x8c4+0xf*0x235+-0x2ea3*0x1),'handshakeTimeout':0x7530,..._0x24f948[_0x36aec9(0x215)]===undefined?{}:{'createConnection':socks5WebSocketConnection(_0x24f948[_0x36aec9(0x215)][_0x36aec9(0x192)](),_0x565ac6,_0x5846c9)}});try{await waitForWebSocketOpen(_0x1fd9e0,_0x5846c9);}catch(_0x6f1ba4){terminateWebSocket(_0x1fd9e0);throw _0x6f1ba4;}this[_0x36aec9(0x2ae)][_0x36aec9(0x2b2)]=_0x1fd9e0,this[_0x36aec9(0x2ae)][_0x36aec9(0x2ab)]=_0x15ed58,this[_0x36aec9(0x2ae)][_0x36aec9(0x163)]=_0x24f948[_0x36aec9(0x220)],this[_0x36aec9(0x2ae)][_0x36aec9(0x2c8)]=_0x75c2ab,this[_0x36aec9(0x2ae)][_0x36aec9(0x1b8)]=_0x21949e;}}function responsesRequestBody(_0x3dccc3,_0x5cf196,_0x1207a5,_0x5bee1=''){const _0x363a01=_0xbe0fd6,_0x935c6e=_0x5cf196[_0x363a01(0x287)]===![]?[]:_0x5cf196[_0x363a01(0x196)][_0x363a01(0x21d)](_0x15e5fa=>_0x15e5fa[_0x363a01(0x1b6)]===_0x363a01(0x291)?{'type':_0x363a01(0x18a),'name':_0x15e5fa[_0x363a01(0x1d5)],'description':_0x15e5fa[_0x363a01(0x207)]}:{'type':_0x363a01(0x1e2),'name':_0x15e5fa[_0x363a01(0x1d5)],'description':_0x15e5fa[_0x363a01(0x207)],'parameters':strictFunctionSchema(_0x15e5fa[_0x363a01(0x263)]),'strict':!![]});if(_0x5cf196[_0x363a01(0x287)]!==![]&&_0x3dccc3[_0x363a01(0x20e)])_0x935c6e[_0x363a01(0x244)]({'type':_0x363a01(0x235)});const _0x5254b6=_0x3dccc3[_0x363a01(0x2c1)]===_0x363a01(0x256),_0xc1804f=openAiInput(_0x1207a5,_0x5cf196[_0x363a01(0x255)],_0x3dccc3['id'],!![]);if(_0x5254b6){const _0x595942=uuidV5(_0x363a01(0x1ee),_0x5cf196[_0x363a01(0x251)]??_0x5bee1),_0x5a927b=[{'type':_0x363a01(0x2ad),'role':_0x363a01(0x2be),'id':_0x363a01(0x2e4)+uuidV5(_0x595942,JSON[_0x363a01(0x226)](_0x935c6e)),'tools':_0x935c6e}];if(_0x5cf196[_0x363a01(0x295)])_0x5a927b[_0x363a01(0x244)]({'type':_0x363a01(0x25a),'role':_0x363a01(0x2be),'id':_0x363a01(0x1ec)+uuidV5(_0x595942,_0x5cf196[_0x363a01(0x295)]),'content':[{'type':_0x363a01(0x2c0),'text':_0x5cf196[_0x363a01(0x295)]}]});_0xc1804f[_0x363a01(0x202)](..._0x5a927b);}return{'model':_0x3dccc3[_0x363a01(0x265)],..._0x5254b6?{'tool_choice':_0x363a01(0x194),'client_metadata':{[RESPONSES_LITE_METADATA]:_0x363a01(0x1bf)}}:{'instructions':_0x5cf196[_0x363a01(0x295)],'tools':_0x935c6e},'input':_0xc1804f,'stream':!![],'parallel_tool_calls':!_0x5254b6,'store':![],'include':[_0x363a01(0x2bd)],..._0x5cf196[_0x363a01(0x251)]?{'prompt_cache_key':_0x5cf196[_0x363a01(0x251)]}:{},'reasoning':{'effort':_0x5cf196[_0x363a01(0x1de)]?.[_0x363a01(0x27c)]()||resolveModelDefaultReasoningEffort(_0x3dccc3),'summary':_0x363a01(0x194),..._0x5254b6?{'context':_0x363a01(0x1e9)}:{}}};}function uuidV5(_0xb44c49,_0x25a425){const _0x2b4da8=_0xbe0fd6,_0x356acf=createHash(_0x2b4da8(0x165))[_0x2b4da8(0x177)](Buffer[_0x2b4da8(0x274)](_0xb44c49[_0x2b4da8(0x2a5)]('-',''),_0x2b4da8(0x22e)))[_0x2b4da8(0x177)](_0x25a425)[_0x2b4da8(0x246)]()[_0x2b4da8(0x26e)](-0x710+-0x5*-0x3e9+-0xc7d,0x1a45+-0x3*0x6b5+-0x616);_0x356acf[0x20fb*-0x1+0x6ea+0x1*0x1a17]=_0x356acf[0x1*0xc3+0x21e7+-0x22a4]&-0xdba+0x20d8+-0x130f|0x8*0xd0+-0x3fa+-0x236,_0x356acf[0xb63*-0x1+0x25*0x106+-0x1a73]=_0x356acf[-0x3af*0x9+0x8e*-0x1+-0xb3f*-0x3]&-0x1c1c+0x2426+-0x11d*0x7|0x239a+0x46d+0x1*-0x2787;const _0x343d30=_0x356acf[_0x2b4da8(0x169)](_0x2b4da8(0x22e));return _0x343d30[_0x2b4da8(0x198)](-0x1*0x391+0x1*-0x1717+0x8*0x355,-0x25bf+-0x22a*0x7+0x34ed)+'-'+_0x343d30[_0x2b4da8(0x198)](-0xb1f+0x4e2+0x645,-0x114d+0x20b1+0x4*-0x3d6)+'-'+_0x343d30[_0x2b4da8(0x198)](-0x1043+0x1339+0x175*-0x2,-0x26c3*0x1+-0xeba+-0x1*-0x358d)+'-'+_0x343d30[_0x2b4da8(0x198)](0x5*-0x3a2+0x1*-0xaed+-0x1d27*-0x1,0x83*-0x45+-0x26e*-0xc+0x13f*0x5)+'-'+_0x343d30[_0x2b4da8(0x198)](-0x100b+-0x1016+0x2035);}function incrementalResponsesInput(_0x1dd7d0,_0x5308a3){const _0x30d8e5=_0xbe0fd6,_0x5de2f0=_0x1dd7d0[_0x30d8e5(0x162)],_0x3f4689=_0x1dd7d0[_0x30d8e5(0x257)];if(_0x5de2f0===undefined||_0x3f4689===undefined||!responsesRequestPropertiesMatch(_0x5de2f0,_0x5308a3))return undefined;const _0x100981=[..._0x5de2f0[_0x30d8e5(0x1f3)],..._0x3f4689[_0x30d8e5(0x20d)]];if(_0x5308a3[_0x30d8e5(0x1f3)][_0x30d8e5(0x2a8)]<_0x100981[_0x30d8e5(0x2a8)])return undefined;for(let _0x26105c=0x14b3+0x2099+-0x24*0x17b;_0x26105c<_0x100981[_0x30d8e5(0x2a8)];_0x26105c++)if(!isDeepStrictEqual(_0x100981[_0x26105c],_0x5308a3[_0x30d8e5(0x1f3)][_0x26105c]))return undefined;return _0x5308a3[_0x30d8e5(0x1f3)][_0x30d8e5(0x198)](_0x100981[_0x30d8e5(0x2a8)]);}function responsesRequestPropertiesMatch(_0x275289,_0x2ba0a1){const _0x285cec=_0xbe0fd6,_0x5cd0f2=[_0x285cec(0x1e6),_0x285cec(0x1e7),_0x285cec(0x196),_0x285cec(0x29b),_0x285cec(0x216),_0x285cec(0x2a0),_0x285cec(0x268),_0x285cec(0x208),_0x285cec(0x2ec),_0x285cec(0x171),_0x285cec(0x1fd),_0x285cec(0x1a4)];return _0x5cd0f2[_0x285cec(0x2bf)](_0x465f5f=>isDeepStrictEqual(_0x275289[_0x465f5f],_0x2ba0a1[_0x465f5f]));}function clearResponsesContinuation(_0x2aad4d){const _0x104c59=_0xbe0fd6;delete _0x2aad4d[_0x104c59(0x162)],delete _0x2aad4d[_0x104c59(0x257)];}function invalidateResponsesWebSocket(_0x249d5e,_0x445048){const _0xbdad90=_0xbe0fd6,_0x2f2dfd=_0x249d5e[_0xbdad90(0x2b2)];delete _0x249d5e[_0xbdad90(0x2b2)],delete _0x249d5e[_0xbdad90(0x2ab)],delete _0x249d5e[_0xbdad90(0x163)],delete _0x249d5e[_0xbdad90(0x2c8)],delete _0x249d5e[_0xbdad90(0x1b8)];if(_0x445048)clearResponsesContinuation(_0x249d5e);if(_0x2f2dfd!==undefined&&_0x2f2dfd[_0xbdad90(0x19d)]!==_0x534a98[_0xbdad90(0x209)]&&_0x2f2dfd[_0xbdad90(0x19d)]!==_0x534a98[_0xbdad90(0x1a0)])terminateWebSocket(_0x2f2dfd);}function unavailableContinuationConnection(){const _0x388901=_0xbe0fd6;return new MarAgentError(_0x388901(0x17f),_0x388901(0x1d1),{'details':{'reason':_0x388901(0x245),'transport':_0x388901(0x17d),'continuation':!![]},'retryable':!![]});}function turnStateFromEvent(_0xc65a84){const _0x565f92=_0xbe0fd6;for(const _0x1034c0 of[record(_0xc65a84[_0x565f92(0x2d5)]),record(record(_0xc65a84[_0x565f92(0x258)])[_0x565f92(0x2d5)]),record(record(_0xc65a84[_0x565f92(0x201)])[_0x565f92(0x2d5)])]){for(const [_0x36968c,_0x32c241]of Object[_0x565f92(0x1f0)](_0x1034c0))if(_0x36968c[_0x565f92(0x1cf)]()===X_CODEX_TURN_STATE&&typeof _0x32c241===_0x565f92(0x1dd))return _0x32c241;}return undefined;}async function*parseOpenAiResponsesSse(_0x2fe160,_0x55a93a,_0x39f2ad){const _0x4b8220=_0xbe0fd6;try{yield*parseSse(_0x2fe160,_0x55a93a);}catch(_0x927f68){if(_0x2fe160['ok']&&!_0x55a93a[_0x4b8220(0x262)]&&isRetryableOpenAiStreamReadError(_0x927f68))throw new MarAgentError(_0x4b8220(0x1c7),_0x4b8220(0x2e7),{'details':{'reason':OPENAI_RESPONSES_EARLY_EOF_REASON,'retryAfter':_0x2fe160[_0x4b8220(0x2d5)][_0x4b8220(0x1f7)](_0x4b8220(0x279)),'continuation':_0x39f2ad},'retryable':!![],'cause':_0x927f68});throw _0x927f68;}}async function*webSocketResponseEvents(_0x594d52){const _0x417579=_0xbe0fd6,_0x19c210=await _0x594d52[_0x417579(0x23a)][_0x417579(0x1ca)]({'configuration':_0x594d52[_0x417579(0x2a3)],'promptCacheKey':_0x594d52[_0x417579(0x251)],'reason':_0x594d52[_0x417579(0x25d)],'signal':_0x594d52[_0x417579(0x217)],'continuation':_0x594d52[_0x417579(0x1b4)],'requiresExistingSocket':_0x594d52[_0x417579(0x203)],'credentialAcquired':_0x594d52[_0x417579(0x1d7)]}),_0x396710=_0x594d52[_0x417579(0x23a)][_0x417579(0x1b0)](_0x594d52[_0x417579(0x21a)]);await sendWebSocketMessage(_0x19c210,JSON[_0x417579(0x226)]({'type':_0x417579(0x17b),..._0x396710}),_0x594d52[_0x417579(0x217)]);let _0x170e5c=![];for await(const _0x2612a8 of webSocketMessages(_0x19c210,_0x594d52[_0x417579(0x217)])){const _0x12ca90=record(_0x2612a8),_0x4dfbf8=text(_0x12ca90[_0x417579(0x213)]);_0x594d52[_0x417579(0x23a)][_0x417579(0x2bb)](turnStateFromEvent(_0x12ca90));if(_0x4dfbf8!==_0x417579(0x272)&&_0x4dfbf8!==_0x417579(0x1c0))yield _0x2612a8;if(_0x4dfbf8===_0x417579(0x21c)||_0x4dfbf8===_0x417579(0x2c2)||_0x4dfbf8===_0x417579(0x24c)||_0x4dfbf8===_0x417579(0x2a9)){_0x170e5c=!![];return;}}if(!_0x170e5c&&!_0x594d52[_0x417579(0x217)][_0x417579(0x262)])throw new MarAgentError(_0x417579(0x1c7),_0x417579(0x24d),{'details':{'reason':OPENAI_RESPONSES_EARLY_EOF_REASON,'transport':_0x417579(0x17d),'continuation':_0x594d52[_0x417579(0x1b4)]},'retryable':!![]});}async function waitForWebSocketOpen(_0x34bab6,_0x6be688){const _0x2229cf=_0xbe0fd6;if(_0x6be688[_0x2229cf(0x262)]){terminateWebSocket(_0x34bab6);throw _0x6be688[_0x2229cf(0x25d)];}await new Promise((_0xc7548d,_0x2a1d05)=>{const _0x1d5c23=_0x2229cf,_0x14e3c6=()=>{const _0x225d08=_0x361f;_0x6be688[_0x225d08(0x23f)](_0x225d08(0x25c),_0x5527c7),_0x34bab6[_0x225d08(0x200)](_0x225d08(0x27b),_0x46ecab),_0x34bab6[_0x225d08(0x200)](_0x225d08(0x2a9),_0xf5852b),_0x34bab6[_0x225d08(0x200)](_0x225d08(0x20a),_0x3a7db4),_0x34bab6[_0x225d08(0x200)](_0x225d08(0x212),_0x2e1474);},_0x1af3ef=_0x30f225=>{_0x14e3c6(),_0x30f225();},_0x5527c7=()=>_0x1af3ef(()=>{const _0x2ee1e9=_0x361f;terminateWebSocket(_0x34bab6),_0x2a1d05(_0x6be688[_0x2ee1e9(0x25d)]);}),_0x46ecab=()=>_0x1af3ef(_0xc7548d),_0xf5852b=_0x46392c=>_0x1af3ef(()=>_0x2a1d05(new MarAgentError(_0x1d5c23(0x1d6),_0x1d5c23(0x231),{'cause':_0x46392c}))),_0x3a7db4=()=>_0x1af3ef(()=>_0x2a1d05(new MarAgentError(_0x1d5c23(0x1d6),_0x1d5c23(0x1b5)))),_0x2e1474=(_0x508e00,_0x255e7a)=>_0x1af3ef(()=>{const _0x161dcd=_0x1d5c23,_0x4cf310=_0x255e7a[_0x161dcd(0x289)]??0x12*-0x202+-0x2*0x87d+0x351e;_0x255e7a[_0x161dcd(0x29c)](),terminateWebSocket(_0x34bab6),_0x2a1d05(new MarAgentError(_0x4cf310===0x2*-0x1218+-0x53*-0x3b+0x12a0?_0x161dcd(0x2e0):_0x161dcd(0x1d6),_0x4cf310===0xb1*-0x35+-0x584*0x2+0x313e?_0x161dcd(0x204):_0x161dcd(0x183),{'details':{'status':_0x4cf310}}));});_0x6be688[_0x1d5c23(0x234)](_0x1d5c23(0x25c),_0x5527c7,{'once':!![]}),_0x34bab6[_0x1d5c23(0x29e)](_0x1d5c23(0x27b),_0x46ecab),_0x34bab6[_0x1d5c23(0x29e)](_0x1d5c23(0x2a9),_0xf5852b),_0x34bab6[_0x1d5c23(0x29e)](_0x1d5c23(0x20a),_0x3a7db4),_0x34bab6[_0x1d5c23(0x29e)](_0x1d5c23(0x212),_0x2e1474);});}async function sendWebSocketMessage(_0x1ea7b2,_0x10e38d,_0x769738){const _0x47ae39=_0xbe0fd6;if(_0x769738[_0x47ae39(0x262)])throw _0x769738[_0x47ae39(0x25d)];await new Promise((_0x311e80,_0x7fe6c4)=>{const _0x12ff72=_0x47ae39,_0x1a2f34=()=>_0x769738[_0x12ff72(0x23f)](_0x12ff72(0x25c),_0x415963),_0x415963=()=>{const _0x59bc83=_0x12ff72;_0x1ea7b2[_0x59bc83(0x189)](),_0x1a2f34(),_0x7fe6c4(_0x769738[_0x59bc83(0x25d)]);};_0x769738[_0x12ff72(0x234)](_0x12ff72(0x25c),_0x415963,{'once':!![]}),_0x1ea7b2[_0x12ff72(0x2e9)](_0x10e38d,_0x55179a=>{const _0x5ed581=_0x12ff72;_0x1a2f34();if(_0x55179a)_0x7fe6c4(webSocketReceiveError(_0x55179a));else{if(_0x769738[_0x5ed581(0x262)])_0x7fe6c4(_0x769738[_0x5ed581(0x25d)]);else _0x311e80();}});});}async function*webSocketMessages(_0x3047fe,_0x4be9a4){const _0x563e79=_0xbe0fd6,_0x365f60=[];let _0x8e2832;const _0x489e0a=_0x57434e=>{const _0x2b6104=_0x361f;_0x365f60[_0x2b6104(0x244)](_0x57434e),_0x8e2832?.(),_0x8e2832=undefined;},_0xa95a20=_0x267dce=>_0x489e0a({'type':_0x563e79(0x25a),'value':_0x267dce}),_0x35c5f1=()=>_0x489e0a({'type':_0x563e79(0x1bd)}),_0x595f15=_0x10fa2d=>_0x489e0a({'type':_0x563e79(0x2a9),'error':webSocketReceiveError(_0x10fa2d)}),_0x5b1d32=()=>{const _0x15652e=_0x563e79;terminateWebSocket(_0x3047fe),_0x489e0a({'type':_0x15652e(0x2a9),'error':_0x4be9a4[_0x15652e(0x25d)]});};if(_0x4be9a4[_0x563e79(0x262)]){terminateWebSocket(_0x3047fe);throw _0x4be9a4[_0x563e79(0x25d)];}_0x3047fe['on'](_0x563e79(0x25a),_0xa95a20),_0x3047fe['on'](_0x563e79(0x20a),_0x35c5f1),_0x3047fe['on'](_0x563e79(0x2a9),_0x595f15),_0x4be9a4[_0x563e79(0x234)](_0x563e79(0x25c),_0x5b1d32,{'once':!![]});try{let _0x390f7b=Date[_0x563e79(0x28c)]()+WEBSOCKET_IDLE_TIMEOUT_MS;while(!![]){if(Date[_0x563e79(0x28c)]()>=_0x390f7b)throw webSocketIdleError(_0x3047fe);if(_0x365f60[_0x563e79(0x2a8)]===0xf72*0x1+0xd6c+0x2e3*-0xa)await new Promise((_0x391e43,_0x1d9c63)=>{const _0xb208bb=_0x563e79,_0x490e09=setTimeout(()=>{_0x8e2832=undefined,_0x1d9c63(webSocketIdleError(_0x3047fe));},Math[_0xb208bb(0x25b)](-0x3f6*-0x2+0x20*0x68+0x2*-0xa76,_0x390f7b-Date[_0xb208bb(0x28c)]()));_0x8e2832=()=>{clearTimeout(_0x490e09),_0x391e43();};});const _0x522109=_0x365f60[_0x563e79(0x1a9)]();if(_0x522109===undefined)continue;if(_0x522109[_0x563e79(0x213)]===_0x563e79(0x1bd))return;if(_0x522109[_0x563e79(0x213)]===_0x563e79(0x2a9))throw _0x522109[_0x563e79(0x2a9)];const _0x466f41=await webSocketMessageText(_0x522109[_0x563e79(0x281)]);if(Buffer[_0x563e79(0x170)](_0x466f41)>(0x245e+-0x21a0+-0x2ae)*(-0x12eb+0x143f*0x1+-0x156*-0x2)*(-0x1*0x535+0xe72+0x9*-0x95))throw new MarAgentError(_0x563e79(0x1c7),_0x563e79(0x1e3));try{const _0x1af313=JSON[_0x563e79(0x1d0)](_0x466f41);if(!isWebSocketNonProgressEvent(_0x1af313))_0x390f7b=Date[_0x563e79(0x28c)]()+WEBSOCKET_IDLE_TIMEOUT_MS;yield _0x1af313;}catch(_0x49bf33){throw new MarAgentError(_0x563e79(0x1c7),_0x563e79(0x180),{'cause':_0x49bf33});}}}finally{_0x4be9a4[_0x563e79(0x23f)](_0x563e79(0x25c),_0x5b1d32),_0x3047fe[_0x563e79(0x200)](_0x563e79(0x25a),_0xa95a20),_0x3047fe[_0x563e79(0x200)](_0x563e79(0x20a),_0x35c5f1),_0x3047fe[_0x563e79(0x200)](_0x563e79(0x2a9),_0x595f15);}}function webSocketIdleError(_0xdea399){const _0x549bfa=_0xbe0fd6;return terminateWebSocket(_0xdea399),new MarAgentError(_0x549bfa(0x277),_0x549bfa(0x2ba),{'details':{'reason':OPENAI_RESPONSES_EARLY_EOF_REASON,'transport':_0x549bfa(0x17d)},'retryable':!![]});}function isWebSocketNonProgressEvent(_0x3a4a4f){const _0x2eee80=_0xbe0fd6,_0x5b9ba3=text(record(_0x3a4a4f)[_0x2eee80(0x213)]);return _0x5b9ba3===_0x2eee80(0x272)||_0x5b9ba3===_0x2eee80(0x1c0)||_0x5b9ba3===_0x2eee80(0x1e0)||_0x5b9ba3===_0x2eee80(0x299)||_0x5b9ba3===_0x2eee80(0x2cf);}async function webSocketMessageText(_0x36e61e){const _0x189a44=_0xbe0fd6;if(typeof _0x36e61e===_0x189a44(0x1dd))return _0x36e61e;if(Buffer[_0x189a44(0x1f5)](_0x36e61e))return _0x36e61e[_0x189a44(0x169)](_0x189a44(0x28d));if(_0x36e61e instanceof ArrayBuffer)return Buffer[_0x189a44(0x274)](_0x36e61e)[_0x189a44(0x169)](_0x189a44(0x28d));if(ArrayBuffer[_0x189a44(0x17e)](_0x36e61e))return Buffer[_0x189a44(0x274)](_0x36e61e[_0x189a44(0x25e)],_0x36e61e[_0x189a44(0x2e6)],_0x36e61e[_0x189a44(0x170)])[_0x189a44(0x169)](_0x189a44(0x28d));if(Array[_0x189a44(0x29a)](_0x36e61e)&&_0x36e61e[_0x189a44(0x2bf)](_0x1fee5a=>Buffer[_0x189a44(0x1f5)](_0x1fee5a)))return Buffer[_0x189a44(0x2af)](_0x36e61e)[_0x189a44(0x169)](_0x189a44(0x28d));throw new MarAgentError(_0x189a44(0x1c7),_0x189a44(0x22c));}function webSocketHeaders(_0x28e4a5,_0x3a76f8,_0x51c9bf=![]){const _0xfac8b4=_0xbe0fd6,_0x431bb2=responsesHeaders(_0x28e4a5,_0x3a76f8,undefined,_0x51c9bf);return _0x431bb2[_0xfac8b4(0x1ce)](_0xfac8b4(0x174)),_0x431bb2[_0xfac8b4(0x1ce)](_0xfac8b4(0x2d1)),_0x431bb2[_0xfac8b4(0x1c8)](_0xfac8b4(0x27f),_0xfac8b4(0x24a)),_0x431bb2;}function webSocketEndpoint(_0xedf151){const _0x118e84=_0xbe0fd6,_0x37fa2c=new URL(responsesEndpoint(_0xedf151));return _0x37fa2c[_0x118e84(0x1b7)]=_0x37fa2c[_0x118e84(0x1b7)]===_0x118e84(0x16b)?_0x118e84(0x21b):_0x118e84(0x26a),_0x37fa2c[_0x118e84(0x169)]();}function socks5WebSocketConnection(_0x383357,_0x5135d1,_0x1c816f){return(_0x4ceb3a,_0x284b0e)=>{const _0xae3a2e=_0x361f;if(_0x284b0e===undefined)throw new MarAgentError(_0xae3a2e(0x1d6),_0xae3a2e(0x1a1));return void connectSocks5Target({'socks5Url':_0x383357,'targetHost':_0x5135d1[_0xae3a2e(0x1a7)],'targetPort':Number(_0x5135d1[_0xae3a2e(0x27d)]||(_0x5135d1[_0xae3a2e(0x1b7)]===_0xae3a2e(0x21b)?-0x2*0xb47+0xbf5+0xc54:-0xa*0xba+-0x143b*0x1+0x1bcf)),'tls':_0x5135d1[_0xae3a2e(0x1b7)]===_0xae3a2e(0x21b),'servername':_0x5135d1[_0xae3a2e(0x1a7)],..._0x5135d1[_0xae3a2e(0x1b7)]===_0xae3a2e(0x21b)?{'alpnProtocols':[_0xae3a2e(0x173)]}:{},'signal':_0x1c816f})[_0xae3a2e(0x2c6)](_0xd05a1e=>_0x284b0e(null,_0xd05a1e),_0x5a5468=>_0x284b0e(_0x5a5468 instanceof Error?_0x5a5468:new Error(_0xae3a2e(0x167),{'cause':_0x5a5468}))),undefined;};}function terminateWebSocket(_0x1b3a21){const _0x1bf62e=_0xbe0fd6;if(_0x1b3a21[_0x1bf62e(0x19d)]===_0x534a98[_0x1bf62e(0x29f)])_0x1b3a21[_0x1bf62e(0x29e)](_0x1bf62e(0x2a9),()=>undefined);_0x1b3a21[_0x1bf62e(0x189)]();}function webSocketReceiveError(_0x249338){const _0xac6618=_0xbe0fd6,_0x4f42f9=_0x249338[_0xac6618(0x205)];if(typeof _0x4f42f9===_0xac6618(0x1dd)&&_0x4f42f9[_0xac6618(0x18f)](_0xac6618(0x21e)))return new MarAgentError(_0xac6618(0x1c7),_0x4f42f9===_0xac6618(0x187)?_0xac6618(0x1e3):_0xac6618(0x161),{'cause':_0x249338});return new MarAgentError(_0xac6618(0x1c7),_0xac6618(0x266),{'details':{'reason':OPENAI_RESPONSES_EARLY_EOF_REASON,'transport':_0xac6618(0x17d)},'retryable':!![],'cause':_0x249338});}function _0x361f(_0x47c1cb,_0x241ff6){_0x47c1cb=_0x47c1cb-(0x153d+0x16b*0x1b+-0x3a27);const _0x15df60=_0x2bd8();let _0x5e7fa6=_0x15df60[_0x47c1cb];if(_0x361f['iuODUq']===undefined){var _0x3d35ad=function(_0x5318d3){const _0x12d1c7='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2f015b='',_0x2e2911='';for(let _0x1982b1=-0x583+-0x1272+0x17f5,_0x1c3353,_0x5afdb1,_0x11fb71=0x91*0xe+-0x1*-0xcbd+-0x1*0x14ab;_0x5afdb1=_0x5318d3['charAt'](_0x11fb71++);~_0x5afdb1&&(_0x1c3353=_0x1982b1%(-0x1ee+-0x3*-0x6df+0x1*-0x12ab)?_0x1c3353*(-0x7*-0x286+-0x1*0x2151+0xfe7)+_0x5afdb1:_0x5afdb1,_0x1982b1++%(-0x1*-0x10c7+0x23b*0x3+-0x5dd*0x4))?_0x2f015b+=String['fromCharCode'](-0x13b1+-0x1e42*-0x1+0x7*-0x15e&_0x1c3353>>(-(0x66*0x5+0x1d1c+-0x1f18)*_0x1982b1&-0x270a*0x1+-0x665+0x2d75)):0x3*0x2db+-0x83*0x3d+-0xdf*-0x1a){_0x5afdb1=_0x12d1c7['indexOf'](_0x5afdb1);}for(let _0x414fa9=0xfc3+-0xca4*0x3+0x1629,_0x4ccfe1=_0x2f015b['length'];_0x414fa9<_0x4ccfe1;_0x414fa9++){_0x2e2911+='%'+('00'+_0x2f015b['charCodeAt'](_0x414fa9)['toString'](-0x1ec3+0x1e2*-0x1+0x20b5))['slice'](-(0xf9a+0x323+-0x12bb*0x1));}return decodeURIComponent(_0x2e2911);};_0x361f['IKemsy']=_0x3d35ad,_0x361f['jjccjG']={},_0x361f['iuODUq']=!![];}const _0x4e1daa=_0x15df60[-0x2c9+0x1c88+-0x1*0x19bf];_0x361f['bWlSjU']!==_0x4e1daa&&(_0x361f['jjccjG']={},_0x361f['bWlSjU']=_0x4e1daa);const _0x2731ea=_0x361f['jjccjG'][_0x47c1cb];return _0x2731ea===undefined?(_0x5e7fa6=_0x361f['IKemsy'](_0x5e7fa6),_0x361f['jjccjG'][_0x47c1cb]=_0x5e7fa6):_0x5e7fa6=_0x2731ea,_0x5e7fa6;}function isSemanticEvent(_0x443ec7){const _0x2af328=_0xbe0fd6;if(_0x443ec7[_0x2af328(0x213)]===_0x2af328(0x225)||_0x443ec7[_0x2af328(0x213)]===_0x2af328(0x236)||_0x443ec7[_0x2af328(0x213)]===_0x2af328(0x1c6))return![];if(_0x443ec7[_0x2af328(0x213)]===_0x2af328(0x1f1))return _0x443ec7[_0x2af328(0x210)][_0x2af328(0x2a8)]>0x19*0x22+-0xc91*-0x1+0x245*-0x7;if(_0x443ec7[_0x2af328(0x213)]===_0x2af328(0x2e1)||_0x443ec7[_0x2af328(0x213)]===_0x2af328(0x24e))return _0x443ec7[_0x2af328(0x1fd)][_0x2af328(0x2a8)]>-0x2391+-0x1*0xbc9+0x227*0x16;return!![];}function isNonSemanticOpenAiResponsesEvent(_0x23377f){const _0x1b5575=_0xbe0fd6;return NON_SEMANTIC_OPENAI_RESPONSES_EVENTS[_0x1b5575(0x2a7)](_0x23377f);}const NON_SEMANTIC_OPENAI_RESPONSES_EVENTS=new Set([_0xbe0fd6(0x1c0),_0xbe0fd6(0x15f),_0xbe0fd6(0x1b3),_0xbe0fd6(0x1a3),_0xbe0fd6(0x2cf),_0xbe0fd6(0x272),_0xbe0fd6(0x299),_0xbe0fd6(0x164),_0xbe0fd6(0x199),_0xbe0fd6(0x2a6),_0xbe0fd6(0x1e0)]);export function isOpenAiResponsesRecoverableStreamError(_0x36c12e){const _0x2a0e83=_0xbe0fd6;return _0x36c12e instanceof MarAgentError&&_0x36c12e[_0x2a0e83(0x222)]&&(_0x36c12e[_0x2a0e83(0x22a)]?.[_0x2a0e83(0x25d)]===OPENAI_RESPONSES_EARLY_EOF_REASON||_0x36c12e[_0x2a0e83(0x22a)]?.[_0x2a0e83(0x25d)]===OPENAI_RESPONSES_WEBSOCKET_CONNECTION_LIMIT_REASON||isRetryableUpstreamOverloadCode(_0x36c12e[_0x2a0e83(0x205)]));}function isWebSocketConnectionLimitCode(_0x2512c7){const _0x378c4b=_0xbe0fd6;return _0x2512c7?.[_0x378c4b(0x27c)]()[_0x378c4b(0x1cf)]()===_0x378c4b(0x1ef);}function isRetryableOpenAiStreamReadError(_0x50dda1){const _0x210f72=_0xbe0fd6;return isRetryableModelTransportError(_0x50dda1)||_0x50dda1 instanceof MarAgentError&&_0x50dda1[_0x210f72(0x205)]===_0x210f72(0x277)&&_0x50dda1[_0x210f72(0x22a)]?.[_0x210f72(0x25d)]===_0x210f72(0x181);}function retryAfter(_0x4517ea){const _0x1b01be=_0xbe0fd6,_0x3124cc=_0x4517ea[_0x1b01be(0x22a)]?.[_0x1b01be(0x1e8)];return typeof _0x3124cc===_0x1b01be(0x1dd)?_0x3124cc:null;}async function reportOpenAiResponsesAttempt(_0x505881,_0xda5ed0){const _0x15adad=_0xbe0fd6;try{await _0x505881[_0x15adad(0x260)]?.(_0xda5ed0);}catch{}}function openAiResponsesAttemptError(_0x23f143){const _0x1356c6=_0xbe0fd6,_0x426d92=describeMarAgentError(_0x23f143,_0x1356c6(0x270)),_0x1f6a16=deepestCauseCode(_0x23f143),_0x54b1aa=_0x23f143 instanceof MarAgentError&&typeof _0x23f143[_0x1356c6(0x22a)]?.[_0x1356c6(0x25d)]===_0x1356c6(0x1dd)?_0x23f143[_0x1356c6(0x22a)][_0x1356c6(0x25d)]:undefined;return{'errorCode':_0x426d92[_0x1356c6(0x205)],'errorMessage':_0x426d92[_0x1356c6(0x25a)],..._0x1f6a16===undefined||_0x1f6a16===_0x426d92[_0x1356c6(0x205)]?{}:{'causeCode':_0x1f6a16},..._0x54b1aa===undefined?{}:{'reason':_0x54b1aa},'retryable':_0x23f143 instanceof MarAgentError&&_0x23f143[_0x1356c6(0x222)]};}function deepestCauseCode(_0x3baffb){const _0x14b5b0=_0xbe0fd6,_0x31bdd3=new Set();let _0x36bfb8=_0x3baffb,_0x1ce9fb;while(_0x36bfb8!==undefined&&_0x36bfb8!==null&&!_0x31bdd3[_0x14b5b0(0x2a7)](_0x36bfb8)&&_0x31bdd3[_0x14b5b0(0x2e2)]<0x28*-0x4c+0x11b*-0x2+0xe1e){_0x31bdd3[_0x14b5b0(0x259)](_0x36bfb8);const _0x526a1e=_0x36bfb8 instanceof MarAgentError?_0x36bfb8[_0x14b5b0(0x205)]:typeof _0x36bfb8===_0x14b5b0(0x1ba)&&_0x14b5b0(0x205)in _0x36bfb8?_0x36bfb8[_0x14b5b0(0x205)]:undefined;if(typeof _0x526a1e===_0x14b5b0(0x1dd)&&_0x526a1e[_0x14b5b0(0x27c)]())_0x1ce9fb=boundedError(_0x526a1e,0xe4d+0x487*0x1+-0x1284)??_0x1ce9fb;_0x36bfb8=typeof _0x36bfb8===_0x14b5b0(0x1ba)&&_0x14b5b0(0x1fc)in _0x36bfb8?_0x36bfb8[_0x14b5b0(0x1fc)]:undefined;}return _0x1ce9fb;}function responsesEndpoint(_0x4f5602){const _0x4a18ba=_0xbe0fd6,_0x395527=_0x4f5602[_0x4a18ba(0x249)](/\/$/,'');if(new URL(_0x395527)[_0x4a18ba(0x2b1)][_0x4a18ba(0x23e)](_0x4a18ba(0x2da)))return _0x395527+_0x4a18ba(0x273);return(_0x395527[_0x4a18ba(0x23e)](_0x4a18ba(0x278))?_0x395527:_0x395527+_0x4a18ba(0x278))+_0x4a18ba(0x273);}async function acquireResponsesCredential(_0xaf13c0,_0x1d2fb0){const _0x39248a=_0xbe0fd6;return acquireModelCredential(_0xaf13c0,_0x1d2fb0,_0x39248a(0x1c9));}const RESERVED_CREDENTIAL_HEADERS=new Set([_0xbe0fd6(0x174),_0xbe0fd6(0x16e),_0xbe0fd6(0x21f),_0xbe0fd6(0x26b),_0xbe0fd6(0x2d1),_0xbe0fd6(0x1c1),_0xbe0fd6(0x27f),_0xbe0fd6(0x190),_0xbe0fd6(0x1ae),_0xbe0fd6(0x26d),_0xbe0fd6(0x293),_0xbe0fd6(0x1b2),_0xbe0fd6(0x1d8),_0xbe0fd6(0x197),_0xbe0fd6(0x2b4),_0xbe0fd6(0x1e4),_0xbe0fd6(0x1c3),_0xbe0fd6(0x206),X_CODEX_TURN_STATE,RESPONSES_LITE_HEADER]);function responsesHeaders(_0x1abf40,_0x2814af,_0x5a9665,_0x4395db=![]){const _0x3301ea=_0xbe0fd6,_0xdc54df=new Headers({'authorization':_0x3301ea(0x19a)+_0x1abf40[_0x3301ea(0x2d8)][_0x3301ea(0x192)](),'content-type':_0x3301ea(0x267),'accept':_0x3301ea(0x193),..._0x2814af?{'session-id':_0x2814af,'thread-id':_0x2814af,'x-client-request-id':_0x2814af}:{}});if(_0x5a9665)_0xdc54df[_0x3301ea(0x1c8)](X_CODEX_TURN_STATE,_0x5a9665);if(_0x4395db)_0xdc54df[_0x3301ea(0x1c8)](RESPONSES_LITE_HEADER,_0x3301ea(0x1bf));return appendModelCredentialHeaders(_0xdc54df,_0x1abf40,RESERVED_CREDENTIAL_HEADERS);}function withCredentialRevision(_0x341008,_0x37effa){const _0x4b7bf7=_0xbe0fd6;if(!(_0x341008 instanceof MarAgentError)||_0x37effa===undefined)return _0x341008;const _0x5eb770=_0x341008[_0x4b7bf7(0x205)]+':\x20';return new MarAgentError(_0x341008[_0x4b7bf7(0x205)],_0x341008[_0x4b7bf7(0x25a)][_0x4b7bf7(0x18f)](_0x5eb770)?_0x341008[_0x4b7bf7(0x25a)][_0x4b7bf7(0x198)](_0x5eb770[_0x4b7bf7(0x2a8)]):_0x341008[_0x4b7bf7(0x25a)],{'details':{..._0x341008[_0x4b7bf7(0x22a)],'credentialRevision':_0x37effa},'retryable':_0x341008[_0x4b7bf7(0x222)],'cause':_0x341008});}function withResponsesAttemptDetails(_0x4ffc95,_0x55c714,_0x2b85ca){const _0x59bd03=_0xbe0fd6;if(!(_0x4ffc95 instanceof MarAgentError))return _0x4ffc95;const _0x314849=_0x4ffc95[_0x59bd03(0x205)]+':\x20';return new MarAgentError(_0x4ffc95[_0x59bd03(0x205)],_0x4ffc95[_0x59bd03(0x25a)][_0x59bd03(0x18f)](_0x314849)?_0x4ffc95[_0x59bd03(0x25a)][_0x59bd03(0x198)](_0x314849[_0x59bd03(0x2a8)]):_0x4ffc95[_0x59bd03(0x25a)],{'details':{..._0x4ffc95[_0x59bd03(0x22a)],'continuation':_0x55c714,..._0x2b85ca===_0x59bd03(0x17d)?{'transport':_0x59bd03(0x17d)}:{}},'retryable':_0x4ffc95[_0x59bd03(0x222)],'cause':_0x4ffc95});}function isModelAuthenticationFailure(_0x92587e){const _0x5ecfff=_0xbe0fd6;if(!(_0x92587e instanceof MarAgentError))return![];if(typeof _0x92587e[_0x5ecfff(0x22a)]?.[_0x5ecfff(0x276)]===_0x5ecfff(0x2e5))return _0x92587e[_0x5ecfff(0x22a)][_0x5ecfff(0x276)]===0xafd+0x7*0x17a+-0x13c2;const _0x209956=_0x92587e[_0x5ecfff(0x205)][_0x5ecfff(0x1cf)]();return _0x209956===_0x5ecfff(0x1e1);}function credentialRevision(_0x17a313){const _0x4762cf=_0xbe0fd6,_0x153c63=_0x17a313[_0x4762cf(0x22a)]?.[_0x4762cf(0x163)];return typeof _0x153c63===_0x4762cf(0x2e5)&&Number[_0x4762cf(0x2df)](_0x153c63)&&_0x153c63>=-0x222b+-0x1a45+0x3c70?_0x153c63:undefined;}function boundedError(_0x2b2d2e,_0x3cefa6){const _0x22195b=_0xbe0fd6,_0x12751d=_0x2b2d2e?.[_0x22195b(0x27c)]();if(!_0x12751d)return undefined;return[..._0x12751d][_0x22195b(0x198)](0x713*0x1+-0x2205+0xd79*0x2,_0x3cefa6)[_0x22195b(0x221)]('');}function upstreamHttpStatus(..._0x246b9b){const _0x51499d=_0xbe0fd6;for(const _0x20f6e1 of _0x246b9b){const _0x54c694=typeof _0x20f6e1===_0x51499d(0x1dd)&&/^\d{3}$/u[_0x51499d(0x2ac)](_0x20f6e1)?Number(_0x20f6e1):number(_0x20f6e1);if(_0x54c694!==undefined&&Number[_0x51499d(0x297)](_0x54c694)&&_0x54c694>=-0x20*0x9a+-0x6ee+-0x2*-0xd49&&_0x54c694<=0x38a*0x3+-0x2*0x349+0x13*-0x17)return _0x54c694;}return undefined;}function optionalRolloutBudgetUnits(_0x98bd9d){const _0x5dd04d=_0xbe0fd6;if(_0x98bd9d===undefined)return undefined;const _0x335c03=number(_0x98bd9d);if(_0x335c03!==undefined&&_0x335c03>=-0x9*0x1af+-0x1312+0x2239)return _0x335c03;throw new MarAgentError(_0x5dd04d(0x1c7),_0x5dd04d(0x19c));}function messagePhase(_0x5b8df3){const _0x39ec8d=_0xbe0fd6;return _0x5b8df3===_0x39ec8d(0x18e)||_0x5b8df3===_0x39ec8d(0x290)?_0x5b8df3:undefined;}function responseMessageText(_0x387358){const _0x31504c=_0xbe0fd6,_0x290a45=Array[_0x31504c(0x29a)](_0x387358[_0x31504c(0x28a)])?_0x387358[_0x31504c(0x28a)]:[],_0x3d085f=_0x290a45[_0x31504c(0x21d)](record)[_0x31504c(0x1f2)](_0x38bac0=>text(_0x38bac0[_0x31504c(0x213)])===_0x31504c(0x1d3))[_0x31504c(0x21d)](_0x40ac3a=>text(_0x40ac3a[_0x31504c(0x1fd)])??'');return _0x3d085f[_0x31504c(0x2a8)]?_0x3d085f[_0x31504c(0x221)](''):undefined;}function isInvalidPreviousResponseError(_0x3d5aa7){const _0x42bb4b=_0xbe0fd6;return _0x3d5aa7 instanceof MarAgentError&&isInvalidPreviousResponseFields(_0x3d5aa7[_0x42bb4b(0x205)],_0x3d5aa7[_0x42bb4b(0x25a)]);}function isInvalidPreviousResponseFields(_0x48748d,_0x17f822){const _0x44676d=_0xbe0fd6,_0x46b1be=_0x48748d?.[_0x44676d(0x27c)]()[_0x44676d(0x1cf)]();if(_0x46b1be===_0x44676d(0x17f)||_0x46b1be===_0x44676d(0x1ab))return!![];const _0x12db44=_0x17f822?.[_0x44676d(0x1cf)]()[_0x44676d(0x2a5)]('`','')??'';return _0x12db44[_0x44676d(0x241)](_0x44676d(0x186))&&(_0x12db44[_0x44676d(0x241)](_0x44676d(0x2d3))||_0x12db44[_0x44676d(0x241)](_0x44676d(0x26c))||_0x12db44[_0x44676d(0x241)](_0x44676d(0x211))||_0x12db44[_0x44676d(0x241)](_0x44676d(0x184))||_0x12db44[_0x44676d(0x241)](_0x44676d(0x23d)));}const RESPONSE_ITEM_TYPES=new Set([_0xbe0fd6(0x25a),_0xbe0fd6(0x2a0),_0xbe0fd6(0x18b),_0xbe0fd6(0x2a1),_0xbe0fd6(0x1a5)]),MAX_RESPONSE_ITEM_BYTES=(0x10a0+0xe50+-0x1eeb)*(0x1149+0x1e6e+-0x2bb7)*(-0x1*0x2635+-0xbc*-0xb+0x2221*0x1);function responseItem(_0x998d15){const _0x587990=_0xbe0fd6,_0xccd3f7=record(_0x998d15),_0x4624ed=text(_0xccd3f7[_0x587990(0x213)]);if(!_0x4624ed||!RESPONSE_ITEM_TYPES[_0x587990(0x2a7)](_0x4624ed))return undefined;const _0x17ce6a=JSON[_0x587990(0x226)](_0xccd3f7);if(Buffer[_0x587990(0x170)](_0x17ce6a)>MAX_RESPONSE_ITEM_BYTES)throw new MarAgentError(_0x587990(0x1c7),_0x587990(0x28b));return JSON[_0x587990(0x1d0)](_0x17ce6a);}function strictFunctionSchema(_0x3b1265,_0xc7caee=![]){const _0x2dbcb8=_0xbe0fd6;if(_0x3b1265===null||typeof _0x3b1265!==_0x2dbcb8(0x1ba)||Array[_0x2dbcb8(0x29a)](_0x3b1265))return _0x3b1265;const _0x570296=_0x3b1265,_0x200e3c=Object[_0x2dbcb8(0x280)](Object[_0x2dbcb8(0x1f0)](_0x570296)[_0x2dbcb8(0x1f2)](([_0xc01951])=>_0xc01951!==_0x2dbcb8(0x264)));if(_0x570296[_0x2dbcb8(0x213)]===_0x2dbcb8(0x1ba)&&_0x570296[_0x2dbcb8(0x2c7)]&&typeof _0x570296[_0x2dbcb8(0x2c7)]===_0x2dbcb8(0x1ba)){const _0x1d4b60=_0x570296[_0x2dbcb8(0x2c7)],_0x34eba9=new Set(Array[_0x2dbcb8(0x29a)](_0x570296[_0x2dbcb8(0x224)])?_0x570296[_0x2dbcb8(0x224)]:[]);return{..._0x200e3c,'properties':Object[_0x2dbcb8(0x280)](Object[_0x2dbcb8(0x1f0)](_0x1d4b60)[_0x2dbcb8(0x21d)](([_0x2bb1a6,_0x20e54e])=>[_0x2bb1a6,strictFunctionSchema(_0x20e54e,!_0x34eba9[_0x2dbcb8(0x2a7)](_0x2bb1a6))])),'required':Object[_0x2dbcb8(0x271)](_0x1d4b60),'additionalProperties':![]};}if(_0x570296[_0x2dbcb8(0x213)]===_0x2dbcb8(0x282))return{..._0x200e3c,..._0x570296[_0x2dbcb8(0x2ea)]===undefined?{}:{'items':strictFunctionSchema(_0x570296[_0x2dbcb8(0x2ea)])},..._0xc7caee?{'type':[_0x2dbcb8(0x282),_0x2dbcb8(0x261)]}:{}};if(!_0xc7caee)return _0x200e3c;if(typeof _0x570296[_0x2dbcb8(0x213)]===_0x2dbcb8(0x1dd))return{..._0x200e3c,'type':[_0x570296[_0x2dbcb8(0x213)],_0x2dbcb8(0x261)]};if(Array[_0x2dbcb8(0x29a)](_0x570296[_0x2dbcb8(0x1fa)]))return{..._0x200e3c,'enum':_0x570296[_0x2dbcb8(0x1fa)][_0x2dbcb8(0x241)](null)?_0x570296[_0x2dbcb8(0x1fa)]:[..._0x570296[_0x2dbcb8(0x1fa)],null]};return{'anyOf':[_0x200e3c,{'type':_0x2dbcb8(0x261)}]};}function responseCitations(_0x5c3335){const _0x41eda9=_0xbe0fd6,_0x13b7b6=new Map();for(const _0x47345a of Array[_0x41eda9(0x29a)](_0x5c3335[_0x41eda9(0x20f)])?_0x5c3335[_0x41eda9(0x20f)]:[]){const _0x34305a=record(_0x47345a);for(const _0xdbc045 of Array[_0x41eda9(0x29a)](_0x34305a[_0x41eda9(0x28a)])?_0x34305a[_0x41eda9(0x28a)]:[]){const _0x2ff218=record(_0xdbc045);for(const _0x59140f of Array[_0x41eda9(0x29a)](_0x2ff218[_0x41eda9(0x288)])?_0x2ff218[_0x41eda9(0x288)]:[]){const _0x590f82=record(_0x59140f),_0x3caf4c=text(_0x590f82[_0x41eda9(0x179)]);if(!_0x3caf4c)continue;const _0x44c9a4=text(_0x590f82['id'])??(text(_0x34305a['id'])??_0x41eda9(0x1fd))+'-'+_0x13b7b6[_0x41eda9(0x2e2)],_0x4f2110=text(_0x590f82[_0x41eda9(0x1cc)]);_0x13b7b6[_0x41eda9(0x1c8)](_0x44c9a4+':'+_0x3caf4c,{'id':_0x44c9a4,'url':_0x3caf4c,..._0x4f2110?{'title':_0x4f2110}:{}});}}}return[..._0x13b7b6[_0x41eda9(0x166)]()];}function openAiInput(_0x5761da,_0x1c36a8,_0x12d8b6,_0xdfa565){const _0x53120b=_0xbe0fd6,_0x73b0e=_0x5761da[_0x53120b(0x1f2)](_0x341f5f=>_0x341f5f[_0x53120b(0x283)]!==_0x53120b(0x20b)||_0x341f5f[_0x53120b(0x20b)]===_0x53120b(0x18c)&&(_0x341f5f[_0x53120b(0x2c4)]===undefined||_0x341f5f[_0x53120b(0x2c4)]===_0x12d8b6)&&(!_0xdfa565||_0x341f5f[_0x53120b(0x16a)]?.[_0x53120b(0x213)]!==_0x53120b(0x2a0)||typeof _0x341f5f[_0x53120b(0x16a)][_0x53120b(0x239)]===_0x53120b(0x1dd))),_0xbff178=_0x73b0e[_0x53120b(0x2d9)](_0x10c8aa=>_0x10c8aa[_0x53120b(0x283)]===_0x53120b(0x19e)),_0x10151a=new Set(),_0x3d9eef=new Set(),_0x588e5d=new Set();for(const _0x4357ff of _0x73b0e){if(_0x4357ff[_0x53120b(0x283)]!==_0x53120b(0x20b)||!_0x4357ff[_0x53120b(0x16a)])continue;if(_0x4357ff[_0x53120b(0x16a)][_0x53120b(0x213)]===_0x53120b(0x18b)&&typeof _0x4357ff[_0x53120b(0x16a)][_0x53120b(0x2b9)]===_0x53120b(0x1dd))_0x10151a[_0x53120b(0x259)](_0x4357ff[_0x53120b(0x16a)][_0x53120b(0x2b9)]);_0x4357ff[_0x53120b(0x16a)][_0x53120b(0x213)]===_0x53120b(0x2a1)&&typeof _0x4357ff[_0x53120b(0x16a)][_0x53120b(0x2b9)]===_0x53120b(0x1dd)&&(_0x10151a[_0x53120b(0x259)](_0x4357ff[_0x53120b(0x16a)][_0x53120b(0x2b9)]),_0x3d9eef[_0x53120b(0x259)](_0x4357ff[_0x53120b(0x16a)][_0x53120b(0x2b9)]));if(_0x4357ff[_0x53120b(0x16a)][_0x53120b(0x213)]===_0x53120b(0x25a)){const _0x493dd7=Array[_0x53120b(0x29a)](_0x4357ff[_0x53120b(0x16a)][_0x53120b(0x28a)])?_0x4357ff[_0x53120b(0x16a)][_0x53120b(0x28a)]:[],_0x1ec156=_0x493dd7[_0x53120b(0x21d)](_0x11aee9=>{const _0x9b9929=_0x53120b,_0x1275af=record(_0x11aee9);return text(_0x1275af[_0x9b9929(0x1fd)])??'';})[_0x53120b(0x221)]('');if(_0x1ec156)_0x588e5d[_0x53120b(0x259)](_0x1ec156);}}for(const _0x3c3667 of _0x73b0e)if(_0x3c3667[_0x53120b(0x283)]===_0x53120b(0x23c)&&_0x3c3667[_0x53120b(0x1b6)]===_0x53120b(0x291)&&_0x3c3667[_0x53120b(0x2a2)])_0x3d9eef[_0x53120b(0x259)](_0x3c3667[_0x53120b(0x2a2)]);return _0x73b0e[_0x53120b(0x1f2)](_0xc60952=>!(_0xc60952[_0x53120b(0x283)]===_0x53120b(0x23c)&&_0xc60952[_0x53120b(0x2a2)]&&_0x10151a[_0x53120b(0x2a7)](_0xc60952[_0x53120b(0x2a2)]))&&!(_0xc60952[_0x53120b(0x283)]===_0x53120b(0x1cd)&&_0x588e5d[_0x53120b(0x2a7)](_0xc60952[_0x53120b(0x28a)])))[_0x53120b(0x21d)](_0x2dc821=>openAiInputItem(_0x2dc821,_0x2dc821===_0xbff178?_0x1c36a8:undefined,_0x3d9eef));}function openAiInputItem(_0x53c038,_0x1faa14,_0x199f02=new Set()){const _0x30269e=_0xbe0fd6,_0x5b7edd=_0x53c038[_0x30269e(0x283)]===_0x30269e(0x19e)?uniqueModelImages(_0x53c038[_0x30269e(0x255)],_0x1faa14):[];if(_0x53c038[_0x30269e(0x283)]===_0x30269e(0x20b)){if(_0x53c038[_0x30269e(0x20b)]!==_0x30269e(0x18c)||!_0x53c038[_0x30269e(0x16a)])throw new MarAgentError(_0x30269e(0x1c7),_0x30269e(0x28f));const _0x5b6f44=responseItem(_0x53c038[_0x30269e(0x16a)]);if(!_0x5b6f44)throw new MarAgentError(_0x30269e(0x1c7),_0x30269e(0x19b));return _0x5b6f44;}if(_0x53c038[_0x30269e(0x283)]===_0x30269e(0x23c)&&_0x53c038[_0x30269e(0x1b6)]===_0x30269e(0x291))return{'type':_0x30269e(0x2a1),'call_id':_0x53c038[_0x30269e(0x2a2)],'name':_0x53c038[_0x30269e(0x1d5)],'input':String(_0x53c038[_0x30269e(0x176)]??'')};if(_0x53c038[_0x30269e(0x283)]===_0x30269e(0x23c))return{'type':_0x30269e(0x18b),'call_id':_0x53c038[_0x30269e(0x2a2)],'name':_0x53c038[_0x30269e(0x1d5)],'arguments':JSON[_0x30269e(0x226)](_0x53c038[_0x30269e(0x176)]??{})};if(_0x53c038[_0x30269e(0x283)]===_0x30269e(0x1f9))return{'type':_0x199f02[_0x30269e(0x2a7)](_0x53c038[_0x30269e(0x2a2)]??'')?_0x30269e(0x27a):_0x30269e(0x250),'call_id':_0x53c038[_0x30269e(0x2a2)],'output':_0x53c038[_0x30269e(0x255)]?.[_0x30269e(0x2a8)]?[{'type':_0x30269e(0x2c0),'text':_0x53c038[_0x30269e(0x28a)]},..._0x53c038[_0x30269e(0x255)][_0x30269e(0x21d)](_0x45b870=>({'type':_0x30269e(0x2b5),'image_url':_0x30269e(0x1d2)+_0x45b870[_0x30269e(0x2d4)]+_0x30269e(0x16f)+_0x45b870[_0x30269e(0x2b8)]}))]:_0x53c038[_0x30269e(0x28a)]};return{'role':_0x53c038[_0x30269e(0x283)],'content':_0x5b7edd[_0x30269e(0x2a8)]>0x1d92+-0x1*0x16ea+-0x18*0x47?[{'type':_0x30269e(0x2c0),'text':_0x53c038[_0x30269e(0x28a)]},..._0x5b7edd[_0x30269e(0x21d)](_0x5d940f=>({'type':_0x30269e(0x2b5),'image_url':_0x30269e(0x1d2)+_0x5d940f[_0x30269e(0x2d4)]+_0x30269e(0x16f)+_0x5d940f[_0x30269e(0x2b8)]}))]:_0x53c038[_0x30269e(0x28a)]};}function uniqueModelImages(..._0x52acca){const _0x2a7641=_0xbe0fd6,_0x650f36=new Set();return _0x52acca[_0x2a7641(0x2d6)](_0x1718de=>(_0x1718de??[])[_0x2a7641(0x2d6)](_0x5d2b24=>{const _0x4df262=_0x2a7641,_0x26fa7b=_0x5d2b24[_0x4df262(0x2d4)]+'\x00'+_0x5d2b24[_0x4df262(0x2b8)];if(_0x650f36[_0x4df262(0x2a7)](_0x26fa7b))return[];return _0x650f36[_0x4df262(0x259)](_0x26fa7b),[_0x5d2b24];}));}
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { describeMarAgentError, MarAgentError } from '../error.js';
4
+ import { resolveModelDefaultReasoningEffort } from './configuration.js';
5
+ import WebSocket from 'ws';
6
+ import { isRetryableUpstreamOverloadCode, number, parseSse, record, text } from './sse.js';
7
+ import { connectSocks5Target, fetchModelResponse, isRetryableModelTransportError, modelRetryMaxAttempts, isRetryableModelRequestError, modelRetryDelay, waitForModelRetry } from './http.js';
8
+ import { acquireModelCredential, appendModelCredentialHeaders } from './runtime-credential.js';
9
+ const WEBSOCKET_IDLE_TIMEOUT_MS = 300_000;
10
+ export const OPENAI_RESPONSES_EARLY_EOF_REASON = 'OPENAI_RESPONSES_EARLY_EOF';
11
+ export const OPENAI_RESPONSES_WEBSOCKET_CONNECTION_LIMIT_REASON = 'OPENAI_RESPONSES_WEBSOCKET_CONNECTION_LIMIT';
12
+ const X_CODEX_TURN_STATE = 'x-codex-turn-state';
13
+ const RESPONSES_LITE_HEADER = 'x-openai-internal-codex-responses-lite';
14
+ const RESPONSES_LITE_METADATA = 'ws_request_header_x_openai_internal_codex_responses_lite';
15
+ export class OpenAiResponsesAdapter {
16
+ configuration;
17
+ prefixIdentity = randomUUID();
18
+ #cachedState = {};
19
+ #cacheLeased = false;
20
+ #closed = false;
21
+ constructor(configuration) {
22
+ this.configuration = configuration;
23
+ }
24
+ async *start(request, signal) {
25
+ const turn = new OpenAiResponsesTurnSession(this, {}, false, true);
26
+ try {
27
+ yield* turn.start(request, signal);
28
+ }
29
+ finally {
30
+ await turn.close();
31
+ }
32
+ }
33
+ createTurnSession() {
34
+ if (this.#closed)
35
+ throw new MarAgentError('MAR_AGENT_DISPOSED', 'Model adapter is disposed.');
36
+ const cacheLease = !this.#cacheLeased;
37
+ const state = cacheLease ? this.#cachedState : {};
38
+ if (cacheLease) {
39
+ this.#cachedState = {};
40
+ this.#cacheLeased = true;
41
+ }
42
+ return new OpenAiResponsesTurnSession(this, state, cacheLease, false);
43
+ }
44
+ async close() {
45
+ if (this.#closed)
46
+ return;
47
+ this.#closed = true;
48
+ invalidateResponsesWebSocket(this.#cachedState, true);
49
+ }
50
+ releaseTurnSession(state, cacheLease) {
51
+ if (!cacheLease || this.#closed) {
52
+ invalidateResponsesWebSocket(state, true);
53
+ return;
54
+ }
55
+ if (state.socket !== undefined && state.socket.readyState !== WebSocket.OPEN)
56
+ invalidateResponsesWebSocket(state, true);
57
+ this.#cachedState = state;
58
+ this.#cacheLeased = false;
59
+ }
60
+ async *startTurn(request, signal, turn, prepared) {
61
+ let useContinuation = prepared.continuation;
62
+ let requestBody = prepared.body;
63
+ let requiresExistingSocket = prepared.requiresExistingSocket;
64
+ let credentialReason = 'REQUEST';
65
+ let unauthorizedRetryUsed = false;
66
+ let invalidContinuationFallbackUsed = false;
67
+ const retryState = request.retryState ?? { attempts: 0 };
68
+ const maxAttempts = modelRetryMaxAttempts(retryState);
69
+ while (retryState.attempts < maxAttempts) {
70
+ const attempt = retryState.attempts++;
71
+ const attemptNumber = attempt + 1;
72
+ const attemptStartedAt = Date.now();
73
+ const attemptContinuation = useContinuation;
74
+ const attemptCredentialReason = credentialReason;
75
+ const attemptTransport = this.configuration.responsesTransport?.transport === 'WEBSOCKET' ? 'WEBSOCKET' : 'HTTP';
76
+ const prelude = [];
77
+ let sawSemanticEvent = false;
78
+ let firstSemanticEventType;
79
+ turn.beginAttempt();
80
+ await reportOpenAiResponsesAttempt(request, {
81
+ protocol: 'OPENAI_RESPONSES',
82
+ transport: attemptTransport,
83
+ state: 'STARTED',
84
+ attempt: attemptNumber,
85
+ maxAttempts,
86
+ continuation: attemptContinuation,
87
+ credentialReason: attemptCredentialReason
88
+ });
89
+ try {
90
+ for await (const event of this.startAttempt(request, signal, requestBody, useContinuation, credentialReason, requiresExistingSocket, turn)) {
91
+ if (!sawSemanticEvent && !isSemanticEvent(event)) {
92
+ prelude.push(event);
93
+ continue;
94
+ }
95
+ if (!sawSemanticEvent) {
96
+ sawSemanticEvent = true;
97
+ firstSemanticEventType = event.type;
98
+ for (const pending of prelude)
99
+ yield pending;
100
+ prelude.length = 0;
101
+ }
102
+ yield event;
103
+ }
104
+ await reportOpenAiResponsesAttempt(request, {
105
+ protocol: 'OPENAI_RESPONSES',
106
+ transport: attemptTransport,
107
+ state: 'SUCCEEDED',
108
+ attempt: attemptNumber,
109
+ maxAttempts,
110
+ continuation: attemptContinuation,
111
+ credentialReason: attemptCredentialReason,
112
+ semanticEventObserved: sawSemanticEvent,
113
+ ...(firstSemanticEventType === undefined ? {} : { firstSemanticEventType }),
114
+ ...turn.connectionDiagnostic(),
115
+ durationMs: Math.max(0, Date.now() - attemptStartedAt)
116
+ });
117
+ return;
118
+ }
119
+ catch (error) {
120
+ const reportFailure = async (willRetry, options = {}) => reportOpenAiResponsesAttempt(request, {
121
+ protocol: 'OPENAI_RESPONSES',
122
+ transport: attemptTransport,
123
+ state: 'FAILED',
124
+ attempt: attemptNumber,
125
+ maxAttempts,
126
+ continuation: attemptContinuation,
127
+ credentialReason: attemptCredentialReason,
128
+ semanticEventObserved: sawSemanticEvent,
129
+ ...(firstSemanticEventType === undefined ? {} : { firstSemanticEventType }),
130
+ ...turn.connectionDiagnostic(),
131
+ durationMs: Math.max(0, Date.now() - attemptStartedAt),
132
+ ...openAiResponsesAttemptError(error),
133
+ willRetry,
134
+ ...(options.retryDelayMs === undefined ? {} : { retryDelayMs: options.retryDelayMs }),
135
+ ...(options.retryReason === undefined ? {} : { retryReason: options.retryReason })
136
+ });
137
+ if (!signal.aborted &&
138
+ attemptNumber < maxAttempts &&
139
+ !sawSemanticEvent &&
140
+ useContinuation &&
141
+ !invalidContinuationFallbackUsed &&
142
+ isInvalidPreviousResponseError(error)) {
143
+ invalidContinuationFallbackUsed = true;
144
+ useContinuation = false;
145
+ requestBody = prepared.fullBody;
146
+ requiresExistingSocket = false;
147
+ turn.invalidateWebSocket();
148
+ credentialReason = 'RECONNECT';
149
+ await reportFailure(true, {
150
+ retryDelayMs: 0,
151
+ retryReason: 'INVALID_CONTINUATION'
152
+ });
153
+ continue;
154
+ }
155
+ if (!signal.aborted &&
156
+ attemptNumber < maxAttempts &&
157
+ !sawSemanticEvent &&
158
+ !unauthorizedRetryUsed &&
159
+ this.configuration.credentialProvider !== undefined &&
160
+ isModelAuthenticationFailure(error)) {
161
+ const revision = credentialRevision(error);
162
+ if (revision !== undefined)
163
+ await this.configuration.credentialProvider.invalidate(revision);
164
+ unauthorizedRetryUsed = true;
165
+ credentialReason = 'UNAUTHORIZED';
166
+ await reportFailure(true, {
167
+ retryDelayMs: 0,
168
+ retryReason: 'UNAUTHORIZED'
169
+ });
170
+ continue;
171
+ }
172
+ const willRetry = !(signal.aborted ||
173
+ (sawSemanticEvent && request.retryState === undefined) ||
174
+ !(isRetryableModelRequestError(error) || isOpenAiResponsesRecoverableStreamError(error)) ||
175
+ attemptNumber >= maxAttempts);
176
+ if (!willRetry) {
177
+ await reportFailure(false);
178
+ throw error;
179
+ }
180
+ const delayMs = modelRetryDelay(retryAfter(error), attempt);
181
+ await reportFailure(true, {
182
+ retryDelayMs: delayMs,
183
+ retryReason: 'STREAM'
184
+ });
185
+ if (sawSemanticEvent) {
186
+ retryState.retryDelayMs = delayMs;
187
+ throw error;
188
+ }
189
+ credentialReason =
190
+ error instanceof MarAgentError && error.details?.transport === 'WEBSOCKET'
191
+ ? 'RECONNECT'
192
+ : 'REQUEST';
193
+ useContinuation = false;
194
+ requestBody = prepared.fullBody;
195
+ requiresExistingSocket = false;
196
+ if (error instanceof MarAgentError && error.details?.transport === 'WEBSOCKET')
197
+ turn.invalidateWebSocket();
198
+ await waitForModelRetry(retryAfter(error), attempt, signal, delayMs);
199
+ }
200
+ }
201
+ }
202
+ async *startAttempt(request, signal, body, continuation, credentialReason, requiresExistingSocket, turn) {
203
+ let latestCredentialRevision;
204
+ const fetchResponse = async (requestBody) => {
205
+ const serializedBody = JSON.stringify(requestBody);
206
+ return await fetchModelResponse(responsesEndpoint(this.configuration.baseUrl), async () => {
207
+ const credential = await acquireResponsesCredential(this.configuration, credentialReason);
208
+ latestCredentialRevision = credential.revision;
209
+ return {
210
+ request: {
211
+ method: 'POST',
212
+ headers: responsesHeaders(credential, request.promptCacheKey, turn.currentTurnState(), this.configuration.responsesEncoding === 'LITE'),
213
+ body: serializedBody,
214
+ redirect: 'manual'
215
+ },
216
+ httpVersion: this.configuration.responsesTransport?.transport === 'HTTP'
217
+ ? this.configuration.responsesTransport.httpVersion
218
+ : '1.1',
219
+ ...(credential.socks5Url === undefined
220
+ ? {}
221
+ : { socks5Url: credential.socks5Url.reveal() })
222
+ };
223
+ }, signal, 1);
224
+ };
225
+ let response;
226
+ let rawEvents;
227
+ try {
228
+ if (this.configuration.responsesTransport?.transport === 'WEBSOCKET')
229
+ rawEvents = webSocketResponseEvents({
230
+ configuration: this.configuration,
231
+ body,
232
+ promptCacheKey: request.promptCacheKey,
233
+ reason: credentialReason,
234
+ signal,
235
+ continuation,
236
+ requiresExistingSocket,
237
+ turn,
238
+ credentialAcquired: (revision) => (latestCredentialRevision = revision)
239
+ });
240
+ else {
241
+ response = await fetchResponse(body);
242
+ turn.captureTurnState(response.headers.get(X_CODEX_TURN_STATE));
243
+ rawEvents = parseOpenAiResponsesSse(response, signal, continuation);
244
+ }
245
+ }
246
+ catch (error) {
247
+ if (this.configuration.responsesTransport?.transport === 'WEBSOCKET')
248
+ turn.invalidateWebSocket();
249
+ throw withCredentialRevision(withResponsesAttemptDetails(error, continuation, this.configuration.responsesTransport?.transport), latestCredentialRevision);
250
+ }
251
+ let completed = false;
252
+ const functionCalls = new Map();
253
+ const customCalls = new Map();
254
+ const textPhases = new Map();
255
+ const pendingCompletedText = new Map();
256
+ const emittedCompletedText = new Set();
257
+ const emittedFunctionCalls = new Set();
258
+ try {
259
+ for await (const raw of rawEvents) {
260
+ const event = record(raw);
261
+ const type = text(event.type) ?? 'unknown';
262
+ if (type === 'response.output_item.done') {
263
+ const item = responseItem(event.item);
264
+ if (item)
265
+ yield { type: 'response.item', provider: 'OPENAI_RESPONSES', item };
266
+ }
267
+ if (type === 'response.output_item.added' && text(record(event.item).type) === 'message') {
268
+ const item = record(event.item);
269
+ const itemId = text(item.id);
270
+ const phase = messagePhase(item.phase);
271
+ if (itemId && phase)
272
+ textPhases.set(itemId, phase);
273
+ }
274
+ else if (type === 'response.output_item.done' &&
275
+ text(record(event.item).type) === 'message') {
276
+ const item = record(event.item);
277
+ const itemId = text(item.id) ?? text(event.item_id) ?? 'text';
278
+ const phase = messagePhase(item.phase) ?? textPhases.get(itemId) ?? 'final_answer';
279
+ textPhases.set(itemId, phase);
280
+ const completedText = pendingCompletedText.get(itemId) ?? responseMessageText(item);
281
+ if (completedText !== undefined && !emittedCompletedText.has(itemId)) {
282
+ emittedCompletedText.add(itemId);
283
+ pendingCompletedText.delete(itemId);
284
+ yield { type: 'text.completed', itemId, phase, text: completedText };
285
+ }
286
+ }
287
+ else if (type === 'response.output_item.added' &&
288
+ text(record(event.item).type) === 'function_call') {
289
+ const item = record(event.item);
290
+ const itemId = text(item.id);
291
+ if (itemId)
292
+ functionCalls.set(itemId, {
293
+ callId: text(item.call_id) ?? itemId,
294
+ name: text(item.name) ?? 'unknown'
295
+ });
296
+ }
297
+ else if (type === 'response.output_item.added' &&
298
+ text(record(event.item).type) === 'custom_tool_call') {
299
+ const item = record(event.item);
300
+ const itemId = text(item.id);
301
+ if (itemId)
302
+ customCalls.set(itemId, {
303
+ callId: text(item.call_id) ?? itemId,
304
+ name: text(item.name) ?? 'unknown',
305
+ input: text(item.input) ?? ''
306
+ });
307
+ }
308
+ else if ((type === 'response.output_item.added' || type === 'response.output_item.done') &&
309
+ text(record(event.item).type) === 'reasoning') {
310
+ // Native reasoning context is retained above; its lifecycle is not visible output.
311
+ continue;
312
+ }
313
+ else if (type === 'response.custom_tool_call_input.delta') {
314
+ const itemId = text(event.item_id) ?? '';
315
+ const known = customCalls.get(itemId);
316
+ if (known)
317
+ known.input += text(event.delta) ?? '';
318
+ }
319
+ else if (type === 'response.created')
320
+ yield {
321
+ type: 'response.started',
322
+ responseId: text(record(event.response).id) ?? 'unknown'
323
+ };
324
+ else if (type === 'response.output_text.delta')
325
+ yield {
326
+ type: 'text.delta',
327
+ itemId: text(event.item_id) ?? 'text',
328
+ phase: messagePhase(event.phase) ??
329
+ textPhases.get(text(event.item_id) ?? '') ??
330
+ 'commentary',
331
+ delta: text(event.delta) ?? ''
332
+ };
333
+ else if (type === 'response.output_text.done') {
334
+ const itemId = text(event.item_id) ?? 'text';
335
+ const completedText = text(event.text) ?? '';
336
+ const phase = messagePhase(event.phase) ?? textPhases.get(itemId);
337
+ if (emittedCompletedText.has(itemId))
338
+ continue;
339
+ if (phase) {
340
+ emittedCompletedText.add(itemId);
341
+ yield { type: 'text.completed', itemId, phase, text: completedText };
342
+ }
343
+ else
344
+ pendingCompletedText.set(itemId, completedText);
345
+ }
346
+ else if (type === 'response.reasoning_summary_text.done')
347
+ yield {
348
+ type: 'reasoning.summary',
349
+ itemId: text(event.item_id) ?? 'reasoning',
350
+ text: text(event.text) ?? ''
351
+ };
352
+ else if (type === 'response.function_call_arguments.done' ||
353
+ (type === 'response.output_item.done' &&
354
+ text(record(event.item).type) === 'function_call')) {
355
+ const item = record(event.item);
356
+ const known = functionCalls.get(text(event.item_id) ?? text(item.id) ?? '');
357
+ let args = {};
358
+ let argumentError;
359
+ try {
360
+ args = JSON.parse(text(event.arguments) ?? text(item.arguments) ?? '{}');
361
+ }
362
+ catch {
363
+ argumentError = 'Function arguments are invalid JSON.';
364
+ }
365
+ const callId = text(event.call_id) ??
366
+ text(item.call_id) ??
367
+ known?.callId ??
368
+ text(event.item_id) ??
369
+ text(item.id) ??
370
+ 'unknown';
371
+ if (!emittedFunctionCalls.has(callId)) {
372
+ emittedFunctionCalls.add(callId);
373
+ yield {
374
+ type: 'client_tool.call',
375
+ callId,
376
+ name: text(event.name) ?? text(item.name) ?? known?.name ?? 'unknown',
377
+ arguments: args,
378
+ ...(argumentError ? { argumentError } : {})
379
+ };
380
+ }
381
+ }
382
+ else if (type === 'response.custom_tool_call_input.done' ||
383
+ (type === 'response.output_item.done' &&
384
+ text(record(event.item).type) === 'custom_tool_call')) {
385
+ const item = record(event.item);
386
+ const itemId = text(event.item_id) ?? text(item.id) ?? '';
387
+ const known = customCalls.get(itemId);
388
+ const callId = text(event.call_id) ?? text(item.call_id) ?? known?.callId ?? itemId;
389
+ if (!emittedFunctionCalls.has(callId)) {
390
+ emittedFunctionCalls.add(callId);
391
+ yield {
392
+ type: 'client_tool.call',
393
+ callId,
394
+ name: text(event.name) ?? text(item.name) ?? known?.name ?? 'unknown',
395
+ arguments: text(event.input) ?? text(item.input) ?? known?.input ?? '',
396
+ inputMode: 'freeform'
397
+ };
398
+ }
399
+ }
400
+ else if (type.includes('web_search_call') ||
401
+ text(record(event.item).type) === 'web_search_call') {
402
+ const item = record(event.item);
403
+ const action = record(Object.keys(record(event.action)).length ? event.action : item.action);
404
+ const actionType = text(action.type);
405
+ yield {
406
+ type: 'hosted_tool',
407
+ itemId: text(event.item_id) ?? 'web',
408
+ kind: actionType === 'open_page' || actionType === 'find_in_page'
409
+ ? 'WEB_FETCH'
410
+ : 'WEB_SEARCH',
411
+ status: type.endsWith('.failed')
412
+ ? 'FAILED'
413
+ : type.endsWith('.completed') || type === 'response.output_item.done'
414
+ ? 'COMPLETED'
415
+ : 'RUNNING',
416
+ summary: { query: text(action.query), url: text(action.url) }
417
+ };
418
+ }
419
+ else if (type === 'response.output_text.annotation.added') {
420
+ const annotation = record(event.annotation);
421
+ const url = text(annotation.url);
422
+ if (url)
423
+ yield {
424
+ type: 'citation',
425
+ citation: {
426
+ id: text(annotation.id) ??
427
+ `${text(event.item_id) ?? 'text'}-${number(event.annotation_index) ?? 0}`,
428
+ url,
429
+ ...(text(annotation.title) ? { title: text(annotation.title) } : {})
430
+ }
431
+ };
432
+ }
433
+ else if (type === 'response.completed' || type === 'response.incomplete') {
434
+ const responseData = record(event.response);
435
+ for (const [itemId, completedText] of pendingCompletedText) {
436
+ if (emittedCompletedText.has(itemId))
437
+ continue;
438
+ emittedCompletedText.add(itemId);
439
+ yield {
440
+ type: 'text.completed',
441
+ itemId,
442
+ phase: textPhases.get(itemId) ?? 'final_answer',
443
+ text: completedText
444
+ };
445
+ }
446
+ pendingCompletedText.clear();
447
+ for (const citation of responseCitations(responseData))
448
+ yield { type: 'citation', citation };
449
+ const usage = record(responseData.usage);
450
+ const inputDetails = record(usage.input_tokens_details);
451
+ const rolloutBudgetUnits = optionalRolloutBudgetUnits(usage.codex_rollout_budget_units);
452
+ yield {
453
+ type: 'usage',
454
+ usage: {
455
+ inputTokens: number(usage.input_tokens),
456
+ contextInputTokens: number(usage.input_tokens),
457
+ outputTokens: number(usage.output_tokens),
458
+ cacheReadTokens: number(inputDetails.cached_tokens),
459
+ cacheWriteTokens: number(inputDetails.cache_write_tokens),
460
+ ...(rolloutBudgetUnits === undefined ? {} : { rolloutBudgetUnits })
461
+ }
462
+ };
463
+ yield {
464
+ type: 'completed',
465
+ reason: type === 'response.incomplete' ? 'max_output' : 'completed'
466
+ };
467
+ completed = true;
468
+ }
469
+ else if (type === 'error' || type === 'response.failed') {
470
+ const topLevel = record(event.error);
471
+ const nested = record(record(event.response).error);
472
+ const code = boundedError(text(event.code) ??
473
+ text(topLevel.code) ??
474
+ text(topLevel.type) ??
475
+ text(nested.code) ??
476
+ text(nested.type), 80);
477
+ const message = boundedError(text(event.message) ?? text(topLevel.message) ?? text(nested.message), 1_000);
478
+ const status = upstreamHttpStatus(event.status, topLevel.status, record(event.response).status, nested.status);
479
+ const connectionLimit = this.configuration.responsesTransport?.transport === 'WEBSOCKET' &&
480
+ isWebSocketConnectionLimitCode(code);
481
+ const retryable = connectionLimit || isRetryableUpstreamOverloadCode(code);
482
+ throw new MarAgentError(code ?? 'MAR_AGENT_MODEL_PROTOCOL_ERROR', message ?? 'OpenAI Responses request failed.', {
483
+ details: {
484
+ ...(status === undefined ? {} : { status }),
485
+ ...(connectionLimit
486
+ ? { reason: OPENAI_RESPONSES_WEBSOCKET_CONNECTION_LIMIT_REASON }
487
+ : {}),
488
+ ...(retryable ? { retryAfter: response?.headers.get('retry-after') ?? null } : {}),
489
+ continuation,
490
+ ...(this.configuration.responsesTransport?.transport === 'WEBSOCKET'
491
+ ? { transport: 'WEBSOCKET' }
492
+ : {})
493
+ },
494
+ ...(retryable ? { retryable: true } : {})
495
+ });
496
+ }
497
+ else if (!isNonSemanticOpenAiResponsesEvent(type))
498
+ yield { type: 'unknown', nativeType: type };
499
+ }
500
+ }
501
+ catch (error) {
502
+ if (this.configuration.responsesTransport?.transport === 'WEBSOCKET')
503
+ turn.invalidateWebSocket();
504
+ throw withCredentialRevision(withResponsesAttemptDetails(error, continuation, this.configuration.responsesTransport?.transport), latestCredentialRevision);
505
+ }
506
+ if (!completed)
507
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'OpenAI Responses stream ended without a terminal event.', {
508
+ details: {
509
+ reason: OPENAI_RESPONSES_EARLY_EOF_REASON,
510
+ retryAfter: response?.headers.get('retry-after') ?? null,
511
+ continuation,
512
+ ...(this.configuration.responsesTransport?.transport === 'WEBSOCKET'
513
+ ? { transport: 'WEBSOCKET' }
514
+ : {})
515
+ },
516
+ retryable: true
517
+ });
518
+ }
519
+ }
520
+ class OpenAiResponsesTurnSession {
521
+ adapter;
522
+ state;
523
+ cacheLease;
524
+ allowExternalContinuation;
525
+ #active = false;
526
+ #closed = false;
527
+ #turnState;
528
+ #fullBody;
529
+ #connectionDiagnostic;
530
+ constructor(adapter, state, cacheLease, allowExternalContinuation) {
531
+ this.adapter = adapter;
532
+ this.state = state;
533
+ this.cacheLease = cacheLease;
534
+ this.allowExternalContinuation = allowExternalContinuation;
535
+ }
536
+ async *start(request, signal) {
537
+ if (this.#closed)
538
+ throw new MarAgentError('MAR_AGENT_DISPOSED', 'Model turn session is disposed.');
539
+ if (this.#active)
540
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Model turn session already has an active request.');
541
+ this.#active = true;
542
+ let responseId;
543
+ const outputItems = [];
544
+ let completed = false;
545
+ let sawUnrepresentedOutput = false;
546
+ try {
547
+ let prepared = this.prepareRequest(request);
548
+ this.#fullBody = prepared.fullBody;
549
+ if (this.adapter.configuration.responsesEncoding === 'LITE' &&
550
+ this.adapter.configuration.responsesTransport?.transport === 'WEBSOCKET' &&
551
+ this.adapter.configuration.responsesPreviousResponseId &&
552
+ this.state.lastRequest === undefined &&
553
+ request.allowTools !== false &&
554
+ (request.tools.length > 0 || this.adapter.configuration.hostedWebSearch)) {
555
+ const prefix = prepared.fullBody.input.slice(0, request.system ? 2 : 1);
556
+ const warmBody = { ...prepared.fullBody, input: prefix, generate: false };
557
+ this.#fullBody = warmBody;
558
+ let warmId;
559
+ let warmCompleted = false;
560
+ for await (const event of this.adapter.startTurn({
561
+ ...request,
562
+ onAttemptDiagnostic: async (diagnostic) => request.onAttemptDiagnostic?.({ ...diagnostic, prewarm: true })
563
+ }, signal, this, { fullBody: warmBody, body: warmBody, continuation: false, requiresExistingSocket: false })) {
564
+ if (event.type === 'response.started' && event.responseId !== 'unknown')
565
+ warmId = event.responseId;
566
+ if (event.type === 'completed')
567
+ warmCompleted = event.reason === 'completed';
568
+ if (event.type === 'client_tool.call' ||
569
+ event.type === 'text.delta' ||
570
+ event.type === 'text.completed' ||
571
+ event.type === 'response.item' ||
572
+ event.type === 'reasoning.summary') {
573
+ this.invalidateWebSocket();
574
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Responses prewarm returned model output.');
575
+ }
576
+ }
577
+ if (!warmCompleted || !warmId) {
578
+ this.invalidateWebSocket();
579
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Responses prewarm did not complete.');
580
+ }
581
+ this.state.lastRequest = { ...prepared.fullBody, input: prefix };
582
+ this.state.lastResponse = { responseId: warmId, outputItems: [] };
583
+ prepared = this.prepareRequest(request);
584
+ this.#fullBody = prepared.fullBody;
585
+ }
586
+ for await (const event of this.adapter.startTurn(request, signal, this, prepared)) {
587
+ if (event.type === 'response.started' && event.responseId !== 'unknown')
588
+ responseId = event.responseId;
589
+ else if (event.type === 'response.item')
590
+ outputItems.push(event.item);
591
+ else if (event.type === 'text.delta' ||
592
+ event.type === 'text.completed' ||
593
+ event.type === 'reasoning.summary' ||
594
+ event.type === 'client_tool.call' ||
595
+ event.type === 'hosted_tool' ||
596
+ event.type === 'citation' ||
597
+ event.type === 'unknown')
598
+ sawUnrepresentedOutput = true;
599
+ else if (event.type === 'completed')
600
+ completed = event.reason === 'completed' || event.reason === 'tool_use';
601
+ yield event;
602
+ }
603
+ if (this.adapter.configuration.responsesPreviousResponseId &&
604
+ completed &&
605
+ responseId !== undefined &&
606
+ (outputItems.length > 0 || !sawUnrepresentedOutput)) {
607
+ this.state.lastRequest = prepared.fullBody;
608
+ this.state.lastResponse = { responseId, outputItems };
609
+ }
610
+ else
611
+ clearResponsesContinuation(this.state);
612
+ }
613
+ catch (error) {
614
+ clearResponsesContinuation(this.state);
615
+ throw error;
616
+ }
617
+ finally {
618
+ this.#fullBody = undefined;
619
+ this.#active = false;
620
+ }
621
+ }
622
+ async close() {
623
+ if (this.#closed)
624
+ return;
625
+ this.#closed = true;
626
+ this.adapter.releaseTurnSession(this.state, this.cacheLease);
627
+ }
628
+ resetContinuation() {
629
+ clearResponsesContinuation(this.state);
630
+ }
631
+ prepareRequest(request) {
632
+ if (this.adapter.configuration.responsesTransport?.transport === 'WEBSOCKET' &&
633
+ this.state.socket !== undefined &&
634
+ this.state.socket.readyState !== WebSocket.OPEN)
635
+ invalidateResponsesWebSocket(this.state, true);
636
+ const fullBody = responsesRequestBody(this.adapter.configuration, request, request.messages, this.adapter.prefixIdentity);
637
+ if (this.adapter.configuration.responsesPreviousResponseId) {
638
+ const incremental = incrementalResponsesInput(this.state, fullBody);
639
+ if (incremental !== undefined &&
640
+ (this.adapter.configuration.responsesTransport?.transport !== 'WEBSOCKET' ||
641
+ this.state.socket?.readyState === WebSocket.OPEN)) {
642
+ const responseId = this.state.lastResponse.responseId;
643
+ delete this.state.lastResponse;
644
+ return {
645
+ fullBody,
646
+ body: {
647
+ ...fullBody,
648
+ input: incremental,
649
+ previous_response_id: responseId
650
+ },
651
+ continuation: true,
652
+ requiresExistingSocket: this.adapter.configuration.responsesTransport?.transport === 'WEBSOCKET'
653
+ };
654
+ }
655
+ if (this.allowExternalContinuation &&
656
+ request.continuation !== undefined &&
657
+ this.adapter.configuration.responsesTransport?.transport !== 'WEBSOCKET') {
658
+ const deltaBody = responsesRequestBody(this.adapter.configuration, request, request.continuation.deltaMessages);
659
+ return {
660
+ fullBody,
661
+ body: {
662
+ ...fullBody,
663
+ input: deltaBody.input,
664
+ previous_response_id: request.continuation.previousResponseId
665
+ },
666
+ continuation: true,
667
+ requiresExistingSocket: false
668
+ };
669
+ }
670
+ }
671
+ return {
672
+ fullBody,
673
+ body: fullBody,
674
+ continuation: false,
675
+ requiresExistingSocket: false
676
+ };
677
+ }
678
+ fullRequestBody() {
679
+ if (this.#fullBody === undefined)
680
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Full Responses request is unavailable.');
681
+ return this.#fullBody;
682
+ }
683
+ currentTurnState() {
684
+ return this.#turnState;
685
+ }
686
+ beginAttempt() {
687
+ this.#connectionDiagnostic = undefined;
688
+ }
689
+ connectionDiagnostic() {
690
+ return this.#connectionDiagnostic ?? {};
691
+ }
692
+ captureTurnState(value) {
693
+ if (this.#turnState !== undefined || typeof value !== 'string')
694
+ return;
695
+ const bounded = boundedError(value.trim(), 8_192);
696
+ if (bounded)
697
+ this.#turnState = bounded;
698
+ }
699
+ withTurnStateMetadata(body) {
700
+ if (this.#turnState === undefined)
701
+ return body;
702
+ return {
703
+ ...body,
704
+ client_metadata: {
705
+ ...record(body.client_metadata),
706
+ [X_CODEX_TURN_STATE]: this.#turnState
707
+ }
708
+ };
709
+ }
710
+ invalidateWebSocket() {
711
+ invalidateResponsesWebSocket(this.state, true);
712
+ }
713
+ async webSocketForRequest(input) {
714
+ const endpoint = webSocketEndpoint(input.configuration.baseUrl);
715
+ const existingSocket = this.state.socket;
716
+ if (input.requiresExistingSocket &&
717
+ (existingSocket?.readyState !== WebSocket.OPEN || this.state.endpoint !== endpoint)) {
718
+ invalidateResponsesWebSocket(this.state, true);
719
+ throw unavailableContinuationConnection();
720
+ }
721
+ if (existingSocket !== undefined &&
722
+ (existingSocket.readyState !== WebSocket.OPEN || this.state.endpoint !== endpoint))
723
+ invalidateResponsesWebSocket(this.state, true);
724
+ if (this.state.socket === undefined) {
725
+ const handshakeCredential = await acquireResponsesCredential(input.configuration, input.reason);
726
+ input.credentialAcquired(handshakeCredential.revision);
727
+ await this.connectWebSocket(endpoint, handshakeCredential, input.promptCacheKey, input.signal);
728
+ }
729
+ const requestCredential = await acquireResponsesCredential(input.configuration, input.reason);
730
+ input.credentialAcquired(requestCredential.revision);
731
+ if (requestCredential.revision !== this.state.credentialRevision) {
732
+ invalidateResponsesWebSocket(this.state, true);
733
+ if (input.continuation)
734
+ throw unavailableContinuationConnection();
735
+ await this.connectWebSocket(endpoint, requestCredential, input.promptCacheKey, input.signal);
736
+ }
737
+ if (input.signal.aborted) {
738
+ invalidateResponsesWebSocket(this.state, true);
739
+ throw input.signal.reason;
740
+ }
741
+ const socket = this.state.socket;
742
+ if (socket?.readyState !== WebSocket.OPEN) {
743
+ invalidateResponsesWebSocket(this.state, true);
744
+ throw new MarAgentError('MAR_AGENT_MODEL_CONNECTION_FAILED', 'OpenAI Responses WebSocket connection is unavailable.', {
745
+ details: { transport: 'WEBSOCKET', continuation: input.continuation },
746
+ retryable: true
747
+ });
748
+ }
749
+ if (this.#connectionDiagnostic === undefined &&
750
+ this.state.connectionId !== undefined &&
751
+ this.state.proxyType !== undefined)
752
+ this.#connectionDiagnostic = {
753
+ connectionId: this.state.connectionId,
754
+ connectionReused: true,
755
+ proxyType: this.state.proxyType
756
+ };
757
+ return socket;
758
+ }
759
+ async connectWebSocket(endpoint, credential, promptCacheKey, signal) {
760
+ const parsedEndpoint = new URL(endpoint);
761
+ const connectionId = randomUUID();
762
+ const proxyType = credential.socks5Url === undefined ? 'DIRECT' : 'SOCKS5';
763
+ this.#connectionDiagnostic = { connectionId, connectionReused: false, proxyType };
764
+ const socket = new WebSocket(parsedEndpoint, {
765
+ headers: Object.fromEntries(webSocketHeaders(credential, promptCacheKey, this.adapter.configuration.responsesEncoding === 'LITE')),
766
+ perMessageDeflate: false,
767
+ maxPayload: 16 * 1024 * 1024,
768
+ handshakeTimeout: 30_000,
769
+ ...(credential.socks5Url === undefined
770
+ ? {}
771
+ : {
772
+ createConnection: socks5WebSocketConnection(credential.socks5Url.reveal(), parsedEndpoint, signal)
773
+ })
774
+ });
775
+ try {
776
+ await waitForWebSocketOpen(socket, signal);
777
+ }
778
+ catch (error) {
779
+ terminateWebSocket(socket);
780
+ throw error;
781
+ }
782
+ this.state.socket = socket;
783
+ this.state.endpoint = endpoint;
784
+ this.state.credentialRevision = credential.revision;
785
+ this.state.connectionId = connectionId;
786
+ this.state.proxyType = proxyType;
787
+ }
788
+ }
789
+ function responsesRequestBody(configuration, request, messages, prefixIdentity = '') {
790
+ const tools = request.allowTools === false
791
+ ? []
792
+ : request.tools.map((tool) => tool.inputMode === 'freeform'
793
+ ? { type: 'custom', name: tool.name, description: tool.description }
794
+ : {
795
+ type: 'function',
796
+ name: tool.name,
797
+ description: tool.description,
798
+ parameters: strictFunctionSchema(tool.inputSchema),
799
+ strict: true
800
+ });
801
+ if (request.allowTools !== false && configuration.hostedWebSearch)
802
+ tools.push({ type: 'web_search' });
803
+ const lite = configuration.responsesEncoding === 'LITE';
804
+ const input = openAiInput(messages, request.images, configuration.id, true);
805
+ if (lite) {
806
+ const namespace = uuidV5('6ba7b812-9dad-11d1-80b4-00c04fd430c8', request.promptCacheKey ?? prefixIdentity);
807
+ const prefix = [
808
+ {
809
+ type: 'additional_tools',
810
+ role: 'developer',
811
+ id: `at_${uuidV5(namespace, JSON.stringify(tools))}`,
812
+ tools
813
+ }
814
+ ];
815
+ if (request.system)
816
+ prefix.push({
817
+ type: 'message',
818
+ role: 'developer',
819
+ id: `msg_${uuidV5(namespace, request.system)}`,
820
+ content: [{ type: 'input_text', text: request.system }]
821
+ });
822
+ input.unshift(...prefix);
823
+ }
824
+ return {
825
+ model: configuration.modelId,
826
+ ...(lite
827
+ ? {
828
+ tool_choice: 'auto',
829
+ client_metadata: { [RESPONSES_LITE_METADATA]: 'true' }
830
+ }
831
+ : { instructions: request.system, tools }),
832
+ input,
833
+ stream: true,
834
+ parallel_tool_calls: !lite,
835
+ store: false,
836
+ include: ['reasoning.encrypted_content'],
837
+ ...(request.promptCacheKey ? { prompt_cache_key: request.promptCacheKey } : {}),
838
+ reasoning: {
839
+ effort: request.reasoningEffort?.trim() || resolveModelDefaultReasoningEffort(configuration),
840
+ summary: 'auto',
841
+ ...(lite ? { context: 'all_turns' } : {})
842
+ }
843
+ };
844
+ }
845
+ function uuidV5(namespace, value) {
846
+ // UUID v5 matches the reference item-identity algorithm; this is not a secret hash.
847
+ const bytes = createHash('sha1')
848
+ .update(Buffer.from(namespace.replaceAll('-', ''), 'hex'))
849
+ .update(value)
850
+ .digest()
851
+ .subarray(0, 16);
852
+ bytes[6] = (bytes[6] & 0x0f) | 0x50;
853
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
854
+ const hex = bytes.toString('hex');
855
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
856
+ }
857
+ function incrementalResponsesInput(state, current) {
858
+ const previous = state.lastRequest;
859
+ const completion = state.lastResponse;
860
+ if (previous === undefined ||
861
+ completion === undefined ||
862
+ !responsesRequestPropertiesMatch(previous, current))
863
+ return undefined;
864
+ const baseline = [...previous.input, ...completion.outputItems];
865
+ if (current.input.length < baseline.length)
866
+ return undefined;
867
+ for (let index = 0; index < baseline.length; index++)
868
+ if (!isDeepStrictEqual(baseline[index], current.input[index]))
869
+ return undefined;
870
+ return current.input.slice(baseline.length);
871
+ }
872
+ function responsesRequestPropertiesMatch(previous, current) {
873
+ const keys = [
874
+ 'model',
875
+ 'instructions',
876
+ 'tools',
877
+ 'tool_choice',
878
+ 'parallel_tool_calls',
879
+ 'reasoning',
880
+ 'store',
881
+ 'stream',
882
+ 'include',
883
+ 'prompt_cache_key',
884
+ 'text',
885
+ 'client_metadata'
886
+ ];
887
+ return keys.every((key) => isDeepStrictEqual(previous[key], current[key]));
888
+ }
889
+ function clearResponsesContinuation(state) {
890
+ delete state.lastRequest;
891
+ delete state.lastResponse;
892
+ }
893
+ function invalidateResponsesWebSocket(state, clearContinuation) {
894
+ const socket = state.socket;
895
+ delete state.socket;
896
+ delete state.endpoint;
897
+ delete state.credentialRevision;
898
+ delete state.connectionId;
899
+ delete state.proxyType;
900
+ if (clearContinuation)
901
+ clearResponsesContinuation(state);
902
+ if (socket !== undefined &&
903
+ socket.readyState !== WebSocket.CLOSED &&
904
+ socket.readyState !== WebSocket.CLOSING)
905
+ terminateWebSocket(socket);
906
+ }
907
+ function unavailableContinuationConnection() {
908
+ return new MarAgentError('previous_response_not_found', 'The previous response is unavailable on the current WebSocket connection.', {
909
+ details: {
910
+ reason: 'OPENAI_RESPONSES_CONTINUATION_CONNECTION_UNAVAILABLE',
911
+ transport: 'WEBSOCKET',
912
+ continuation: true
913
+ },
914
+ retryable: true
915
+ });
916
+ }
917
+ function turnStateFromEvent(event) {
918
+ for (const headers of [
919
+ record(event.headers),
920
+ record(record(event.response).headers),
921
+ record(record(event.metadata).headers)
922
+ ]) {
923
+ for (const [name, value] of Object.entries(headers))
924
+ if (name.toLowerCase() === X_CODEX_TURN_STATE && typeof value === 'string')
925
+ return value;
926
+ }
927
+ return undefined;
928
+ }
929
+ async function* parseOpenAiResponsesSse(response, signal, continuation) {
930
+ try {
931
+ yield* parseSse(response, signal);
932
+ }
933
+ catch (cause) {
934
+ if (response.ok && !signal.aborted && isRetryableOpenAiStreamReadError(cause))
935
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'OpenAI Responses stream was interrupted.', {
936
+ details: {
937
+ reason: OPENAI_RESPONSES_EARLY_EOF_REASON,
938
+ retryAfter: response.headers.get('retry-after'),
939
+ continuation
940
+ },
941
+ retryable: true,
942
+ cause
943
+ });
944
+ throw cause;
945
+ }
946
+ }
947
+ async function* webSocketResponseEvents(input) {
948
+ const socket = await input.turn.webSocketForRequest({
949
+ configuration: input.configuration,
950
+ promptCacheKey: input.promptCacheKey,
951
+ reason: input.reason,
952
+ signal: input.signal,
953
+ continuation: input.continuation,
954
+ requiresExistingSocket: input.requiresExistingSocket,
955
+ credentialAcquired: input.credentialAcquired
956
+ });
957
+ const body = input.turn.withTurnStateMetadata(input.body);
958
+ await sendWebSocketMessage(socket, JSON.stringify({ type: 'response.create', ...body }), input.signal);
959
+ let terminal = false;
960
+ for await (const item of webSocketMessages(socket, input.signal)) {
961
+ const event = record(item);
962
+ const type = text(event.type);
963
+ input.turn.captureTurnState(turnStateFromEvent(event));
964
+ if (type !== 'response.metadata' && type !== 'codex.response.metadata')
965
+ yield item;
966
+ if (type === 'response.completed' ||
967
+ type === 'response.incomplete' ||
968
+ type === 'response.failed' ||
969
+ type === 'error') {
970
+ terminal = true;
971
+ return;
972
+ }
973
+ }
974
+ if (!terminal && !input.signal.aborted)
975
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'OpenAI Responses WebSocket closed before a terminal event.', {
976
+ details: {
977
+ reason: OPENAI_RESPONSES_EARLY_EOF_REASON,
978
+ transport: 'WEBSOCKET',
979
+ continuation: input.continuation
980
+ },
981
+ retryable: true
982
+ });
983
+ }
984
+ async function waitForWebSocketOpen(socket, signal) {
985
+ if (signal.aborted) {
986
+ terminateWebSocket(socket);
987
+ throw signal.reason;
988
+ }
989
+ await new Promise((resolve, reject) => {
990
+ const cleanup = () => {
991
+ signal.removeEventListener('abort', abort);
992
+ socket.off('open', open);
993
+ socket.off('error', error);
994
+ socket.off('close', close);
995
+ socket.off('unexpected-response', unexpectedResponse);
996
+ };
997
+ const settle = (operation) => {
998
+ cleanup();
999
+ operation();
1000
+ };
1001
+ const abort = () => settle(() => {
1002
+ terminateWebSocket(socket);
1003
+ reject(signal.reason);
1004
+ });
1005
+ const open = () => settle(resolve);
1006
+ const error = (cause) => settle(() => reject(new MarAgentError('MAR_AGENT_MODEL_CONNECTION_FAILED', 'OpenAI Responses WebSocket connection failed.', { cause })));
1007
+ const close = () => settle(() => reject(new MarAgentError('MAR_AGENT_MODEL_CONNECTION_FAILED', 'OpenAI Responses WebSocket closed during connection.')));
1008
+ const unexpectedResponse = (_request, response) => settle(() => {
1009
+ const status = response.statusCode ?? 0;
1010
+ response.resume();
1011
+ terminateWebSocket(socket);
1012
+ reject(new MarAgentError(status === 401 ? 'MAR_AGENT_MODEL_AUTH_FAILED' : 'MAR_AGENT_MODEL_CONNECTION_FAILED', status === 401
1013
+ ? 'OpenAI Responses WebSocket authentication failed.'
1014
+ : 'OpenAI Responses WebSocket handshake failed.', { details: { status } }));
1015
+ });
1016
+ signal.addEventListener('abort', abort, { once: true });
1017
+ socket.once('open', open);
1018
+ socket.once('error', error);
1019
+ socket.once('close', close);
1020
+ socket.once('unexpected-response', unexpectedResponse);
1021
+ });
1022
+ }
1023
+ async function sendWebSocketMessage(socket, value, signal) {
1024
+ if (signal.aborted)
1025
+ throw signal.reason;
1026
+ await new Promise((resolve, reject) => {
1027
+ const cleanup = () => signal.removeEventListener('abort', abort);
1028
+ const abort = () => {
1029
+ socket.terminate();
1030
+ cleanup();
1031
+ reject(signal.reason);
1032
+ };
1033
+ signal.addEventListener('abort', abort, { once: true });
1034
+ socket.send(value, (error) => {
1035
+ cleanup();
1036
+ if (error)
1037
+ reject(webSocketReceiveError(error));
1038
+ else if (signal.aborted)
1039
+ reject(signal.reason);
1040
+ else
1041
+ resolve();
1042
+ });
1043
+ });
1044
+ }
1045
+ async function* webSocketMessages(socket, signal) {
1046
+ const queue = [];
1047
+ let resume;
1048
+ const push = (item) => {
1049
+ queue.push(item);
1050
+ resume?.();
1051
+ resume = undefined;
1052
+ };
1053
+ const message = (value) => push({
1054
+ type: 'message',
1055
+ value
1056
+ });
1057
+ const close = () => push({ type: 'closed' });
1058
+ const error = (cause) => push({
1059
+ type: 'error',
1060
+ error: webSocketReceiveError(cause)
1061
+ });
1062
+ const abort = () => {
1063
+ terminateWebSocket(socket);
1064
+ push({ type: 'error', error: signal.reason });
1065
+ };
1066
+ if (signal.aborted) {
1067
+ terminateWebSocket(socket);
1068
+ throw signal.reason;
1069
+ }
1070
+ socket.on('message', message);
1071
+ socket.on('close', close);
1072
+ socket.on('error', error);
1073
+ signal.addEventListener('abort', abort, { once: true });
1074
+ try {
1075
+ let idleDeadline = Date.now() + WEBSOCKET_IDLE_TIMEOUT_MS;
1076
+ while (true) {
1077
+ if (Date.now() >= idleDeadline)
1078
+ throw webSocketIdleError(socket);
1079
+ if (queue.length === 0)
1080
+ await new Promise((resolve, reject) => {
1081
+ const timer = setTimeout(() => {
1082
+ resume = undefined;
1083
+ reject(webSocketIdleError(socket));
1084
+ }, Math.max(0, idleDeadline - Date.now()));
1085
+ resume = () => {
1086
+ clearTimeout(timer);
1087
+ resolve();
1088
+ };
1089
+ });
1090
+ const item = queue.shift();
1091
+ if (item === undefined)
1092
+ continue;
1093
+ if (item.type === 'closed')
1094
+ return;
1095
+ if (item.type === 'error')
1096
+ throw item.error;
1097
+ const text = await webSocketMessageText(item.value);
1098
+ if (Buffer.byteLength(text) > 16 * 1024 * 1024)
1099
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Model response exceeded the size limit.');
1100
+ try {
1101
+ const event = JSON.parse(text);
1102
+ if (!isWebSocketNonProgressEvent(event))
1103
+ idleDeadline = Date.now() + WEBSOCKET_IDLE_TIMEOUT_MS;
1104
+ yield event;
1105
+ }
1106
+ catch (cause) {
1107
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Model WebSocket contained invalid JSON.', { cause });
1108
+ }
1109
+ }
1110
+ }
1111
+ finally {
1112
+ signal.removeEventListener('abort', abort);
1113
+ socket.off('message', message);
1114
+ socket.off('close', close);
1115
+ socket.off('error', error);
1116
+ }
1117
+ }
1118
+ function webSocketIdleError(socket) {
1119
+ terminateWebSocket(socket);
1120
+ return new MarAgentError('MAR_AGENT_MODEL_TIMEOUT', 'OpenAI Responses WebSocket was idle for too long.', {
1121
+ details: { reason: OPENAI_RESPONSES_EARLY_EOF_REASON, transport: 'WEBSOCKET' },
1122
+ retryable: true
1123
+ });
1124
+ }
1125
+ function isWebSocketNonProgressEvent(value) {
1126
+ const type = text(record(value).type);
1127
+ return (type === 'response.metadata' ||
1128
+ type === 'codex.response.metadata' ||
1129
+ type === 'responsesapi.websocket_timing' ||
1130
+ type === 'response.queued' ||
1131
+ type === 'response.in_progress');
1132
+ }
1133
+ async function webSocketMessageText(value) {
1134
+ if (typeof value === 'string')
1135
+ return value;
1136
+ if (Buffer.isBuffer(value))
1137
+ return value.toString('utf8');
1138
+ if (value instanceof ArrayBuffer)
1139
+ return Buffer.from(value).toString('utf8');
1140
+ if (ArrayBuffer.isView(value))
1141
+ return Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString('utf8');
1142
+ if (Array.isArray(value) && value.every((part) => Buffer.isBuffer(part)))
1143
+ return Buffer.concat(value).toString('utf8');
1144
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Model WebSocket returned an unsupported frame.');
1145
+ }
1146
+ function webSocketHeaders(credential, promptCacheKey, lite = false) {
1147
+ const headers = responsesHeaders(credential, promptCacheKey, undefined, lite);
1148
+ headers.delete('accept');
1149
+ headers.delete('content-type');
1150
+ headers.set('openai-beta', 'responses_websockets=2026-02-06');
1151
+ return headers;
1152
+ }
1153
+ function webSocketEndpoint(baseUrl) {
1154
+ const endpoint = new URL(responsesEndpoint(baseUrl));
1155
+ endpoint.protocol = endpoint.protocol === 'https:' ? 'wss:' : 'ws:';
1156
+ return endpoint.toString();
1157
+ }
1158
+ function socks5WebSocketConnection(socks5Url, endpoint, signal) {
1159
+ return ((_options, callback) => {
1160
+ if (callback === undefined)
1161
+ throw new MarAgentError('MAR_AGENT_MODEL_CONNECTION_FAILED', 'WebSocket connection callback is unavailable.');
1162
+ void connectSocks5Target({
1163
+ socks5Url,
1164
+ targetHost: endpoint.hostname,
1165
+ targetPort: Number(endpoint.port || (endpoint.protocol === 'wss:' ? 443 : 80)),
1166
+ tls: endpoint.protocol === 'wss:',
1167
+ servername: endpoint.hostname,
1168
+ ...(endpoint.protocol === 'wss:' ? { alpnProtocols: ['http/1.1'] } : {}),
1169
+ signal
1170
+ }).then((socket) => callback(null, socket), (error) => callback(error instanceof Error
1171
+ ? error
1172
+ : new Error('SOCKS5 WebSocket connection failed.', { cause: error })));
1173
+ return undefined;
1174
+ });
1175
+ }
1176
+ function terminateWebSocket(socket) {
1177
+ if (socket.readyState === WebSocket.CONNECTING)
1178
+ socket.once('error', () => undefined);
1179
+ socket.terminate();
1180
+ }
1181
+ function webSocketReceiveError(cause) {
1182
+ const code = cause.code;
1183
+ if (typeof code === 'string' && code.startsWith('WS_ERR_'))
1184
+ return new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', code === 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'
1185
+ ? 'Model response exceeded the size limit.'
1186
+ : 'Model WebSocket protocol is invalid.', { cause });
1187
+ return new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'OpenAI Responses WebSocket was interrupted.', {
1188
+ details: {
1189
+ reason: OPENAI_RESPONSES_EARLY_EOF_REASON,
1190
+ transport: 'WEBSOCKET'
1191
+ },
1192
+ retryable: true,
1193
+ cause
1194
+ });
1195
+ }
1196
+ function isSemanticEvent(event) {
1197
+ if (event.type === 'response.started' || event.type === 'usage' || event.type === 'response.item')
1198
+ return false;
1199
+ if (event.type === 'text.delta')
1200
+ return event.delta.length > 0;
1201
+ if (event.type === 'text.completed' || event.type === 'reasoning.summary')
1202
+ return event.text.length > 0;
1203
+ return true;
1204
+ }
1205
+ function isNonSemanticOpenAiResponsesEvent(type) {
1206
+ return NON_SEMANTIC_OPENAI_RESPONSES_EVENTS.has(type);
1207
+ }
1208
+ const NON_SEMANTIC_OPENAI_RESPONSES_EVENTS = new Set([
1209
+ 'codex.response.metadata',
1210
+ 'response.content_part.added',
1211
+ 'response.content_part.done',
1212
+ 'response.function_call_arguments.delta',
1213
+ 'response.in_progress',
1214
+ 'response.metadata',
1215
+ 'response.queued',
1216
+ 'response.reasoning_summary_part.added',
1217
+ 'response.reasoning_summary_part.done',
1218
+ 'response.reasoning_summary_text.delta',
1219
+ 'responsesapi.websocket_timing'
1220
+ ]);
1221
+ export function isOpenAiResponsesRecoverableStreamError(error) {
1222
+ return (error instanceof MarAgentError &&
1223
+ error.retryable &&
1224
+ (error.details?.reason === OPENAI_RESPONSES_EARLY_EOF_REASON ||
1225
+ error.details?.reason === OPENAI_RESPONSES_WEBSOCKET_CONNECTION_LIMIT_REASON ||
1226
+ isRetryableUpstreamOverloadCode(error.code)));
1227
+ }
1228
+ function isWebSocketConnectionLimitCode(code) {
1229
+ return code?.trim().toLowerCase() === 'websocket_connection_limit_reached';
1230
+ }
1231
+ function isRetryableOpenAiStreamReadError(error) {
1232
+ return (isRetryableModelTransportError(error) ||
1233
+ (error instanceof MarAgentError &&
1234
+ error.code === 'MAR_AGENT_MODEL_TIMEOUT' &&
1235
+ error.details?.reason === 'MODEL_STREAM_IDLE_TIMEOUT'));
1236
+ }
1237
+ function retryAfter(error) {
1238
+ const value = error.details?.retryAfter;
1239
+ return typeof value === 'string' ? value : null;
1240
+ }
1241
+ async function reportOpenAiResponsesAttempt(request, diagnostic) {
1242
+ try {
1243
+ await request.onAttemptDiagnostic?.(diagnostic);
1244
+ }
1245
+ catch {
1246
+ // Diagnostics must never change the model request result.
1247
+ }
1248
+ }
1249
+ function openAiResponsesAttemptError(error) {
1250
+ const diagnostic = describeMarAgentError(error, 'MAR_AGENT_MODEL_ATTEMPT_FAILED');
1251
+ const causeCode = deepestCauseCode(error);
1252
+ const reason = error instanceof MarAgentError && typeof error.details?.reason === 'string'
1253
+ ? error.details.reason
1254
+ : undefined;
1255
+ return {
1256
+ errorCode: diagnostic.code,
1257
+ errorMessage: diagnostic.message,
1258
+ ...(causeCode === undefined || causeCode === diagnostic.code ? {} : { causeCode }),
1259
+ ...(reason === undefined ? {} : { reason }),
1260
+ retryable: error instanceof MarAgentError && error.retryable
1261
+ };
1262
+ }
1263
+ function deepestCauseCode(error) {
1264
+ const seen = new Set();
1265
+ let current = error;
1266
+ let code;
1267
+ while (current !== undefined && current !== null && !seen.has(current) && seen.size < 8) {
1268
+ seen.add(current);
1269
+ const candidate = current instanceof MarAgentError
1270
+ ? current.code
1271
+ : typeof current === 'object' && 'code' in current
1272
+ ? current.code
1273
+ : undefined;
1274
+ if (typeof candidate === 'string' && candidate.trim())
1275
+ code = boundedError(candidate, 80) ?? code;
1276
+ current =
1277
+ typeof current === 'object' && 'cause' in current
1278
+ ? current.cause
1279
+ : undefined;
1280
+ }
1281
+ return code;
1282
+ }
1283
+ function responsesEndpoint(baseUrl) {
1284
+ const normalized = baseUrl.replace(/\/$/, '');
1285
+ if (new URL(normalized).pathname.endsWith('/backend-api/codex'))
1286
+ return `${normalized}/responses`;
1287
+ return `${normalized.endsWith('/v1') ? normalized : `${normalized}/v1`}/responses`;
1288
+ }
1289
+ async function acquireResponsesCredential(configuration, reason) {
1290
+ return acquireModelCredential(configuration, reason, 'OpenAI Responses requires a model credential.');
1291
+ }
1292
+ const RESERVED_CREDENTIAL_HEADERS = new Set([
1293
+ 'accept',
1294
+ 'authorization',
1295
+ 'connection',
1296
+ 'content-length',
1297
+ 'content-type',
1298
+ 'host',
1299
+ 'openai-beta',
1300
+ 'proxy-authorization',
1301
+ 'sec-websocket-accept',
1302
+ 'sec-websocket-extensions',
1303
+ 'sec-websocket-key',
1304
+ 'sec-websocket-protocol',
1305
+ 'sec-websocket-version',
1306
+ 'session-id',
1307
+ 'thread-id',
1308
+ 'transfer-encoding',
1309
+ 'upgrade',
1310
+ 'x-client-request-id',
1311
+ X_CODEX_TURN_STATE,
1312
+ RESPONSES_LITE_HEADER
1313
+ ]);
1314
+ function responsesHeaders(credential, promptCacheKey, turnState, lite = false) {
1315
+ const headers = new Headers({
1316
+ authorization: `Bearer ${credential.bearer.reveal()}`,
1317
+ 'content-type': 'application/json',
1318
+ accept: 'text/event-stream',
1319
+ ...(promptCacheKey
1320
+ ? {
1321
+ 'session-id': promptCacheKey,
1322
+ 'thread-id': promptCacheKey,
1323
+ 'x-client-request-id': promptCacheKey
1324
+ }
1325
+ : {})
1326
+ });
1327
+ if (turnState)
1328
+ headers.set(X_CODEX_TURN_STATE, turnState);
1329
+ if (lite)
1330
+ headers.set(RESPONSES_LITE_HEADER, 'true');
1331
+ return appendModelCredentialHeaders(headers, credential, RESERVED_CREDENTIAL_HEADERS);
1332
+ }
1333
+ function withCredentialRevision(error, revision) {
1334
+ if (!(error instanceof MarAgentError) || revision === undefined)
1335
+ return error;
1336
+ const prefix = `${error.code}: `;
1337
+ return new MarAgentError(error.code, error.message.startsWith(prefix) ? error.message.slice(prefix.length) : error.message, {
1338
+ details: { ...error.details, credentialRevision: revision },
1339
+ retryable: error.retryable,
1340
+ cause: error
1341
+ });
1342
+ }
1343
+ function withResponsesAttemptDetails(error, continuation, transport) {
1344
+ if (!(error instanceof MarAgentError))
1345
+ return error;
1346
+ const prefix = `${error.code}: `;
1347
+ return new MarAgentError(error.code, error.message.startsWith(prefix) ? error.message.slice(prefix.length) : error.message, {
1348
+ details: {
1349
+ ...error.details,
1350
+ continuation,
1351
+ ...(transport === 'WEBSOCKET' ? { transport: 'WEBSOCKET' } : {})
1352
+ },
1353
+ retryable: error.retryable,
1354
+ cause: error
1355
+ });
1356
+ }
1357
+ function isModelAuthenticationFailure(error) {
1358
+ if (!(error instanceof MarAgentError))
1359
+ return false;
1360
+ if (typeof error.details?.status === 'number')
1361
+ return error.details.status === 401;
1362
+ const code = error.code.toLowerCase();
1363
+ return code === 'unauthorized';
1364
+ }
1365
+ function credentialRevision(error) {
1366
+ const revision = error.details?.credentialRevision;
1367
+ return typeof revision === 'number' && Number.isSafeInteger(revision) && revision >= 0
1368
+ ? revision
1369
+ : undefined;
1370
+ }
1371
+ function boundedError(value, maximum) {
1372
+ const normalized = value?.trim();
1373
+ if (!normalized)
1374
+ return undefined;
1375
+ return [...normalized].slice(0, maximum).join('');
1376
+ }
1377
+ function upstreamHttpStatus(...values) {
1378
+ for (const value of values) {
1379
+ const candidate = typeof value === 'string' && /^\d{3}$/u.test(value) ? Number(value) : number(value);
1380
+ if (candidate !== undefined &&
1381
+ Number.isInteger(candidate) &&
1382
+ candidate >= 100 &&
1383
+ candidate <= 599)
1384
+ return candidate;
1385
+ }
1386
+ return undefined;
1387
+ }
1388
+ function optionalRolloutBudgetUnits(value) {
1389
+ if (value === undefined)
1390
+ return undefined;
1391
+ const units = number(value);
1392
+ if (units !== undefined && units >= 0)
1393
+ return units;
1394
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Provider rollout budget units are invalid.');
1395
+ }
1396
+ function messagePhase(value) {
1397
+ return value === 'commentary' || value === 'final_answer' ? value : undefined;
1398
+ }
1399
+ function responseMessageText(item) {
1400
+ const content = Array.isArray(item.content) ? item.content : [];
1401
+ const parts = content
1402
+ .map(record)
1403
+ .filter((part) => text(part.type) === 'output_text')
1404
+ .map((part) => text(part.text) ?? '');
1405
+ return parts.length ? parts.join('') : undefined;
1406
+ }
1407
+ function isInvalidPreviousResponseError(error) {
1408
+ return (error instanceof MarAgentError && isInvalidPreviousResponseFields(error.code, error.message));
1409
+ }
1410
+ function isInvalidPreviousResponseFields(code, message) {
1411
+ const normalizedCode = code?.trim().toLowerCase();
1412
+ if (normalizedCode === 'previous_response_not_found' ||
1413
+ normalizedCode === 'invalid_previous_response_id')
1414
+ return true;
1415
+ const normalizedMessage = message?.toLowerCase().replaceAll('`', '') ?? '';
1416
+ return (normalizedMessage.includes('previous_response_id') &&
1417
+ (normalizedMessage.includes('invalid') ||
1418
+ normalizedMessage.includes('not found') ||
1419
+ normalizedMessage.includes('does not exist') ||
1420
+ normalizedMessage.includes('expired') ||
1421
+ normalizedMessage.includes('unavailable')));
1422
+ }
1423
+ const RESPONSE_ITEM_TYPES = new Set([
1424
+ 'message',
1425
+ 'reasoning',
1426
+ 'function_call',
1427
+ 'custom_tool_call',
1428
+ 'web_search_call'
1429
+ ]);
1430
+ // A freeform patch item can contain the complete 4 MiB patch plus its JSON envelope.
1431
+ const MAX_RESPONSE_ITEM_BYTES = 5 * 1024 * 1024;
1432
+ function responseItem(value) {
1433
+ const item = record(value);
1434
+ const itemType = text(item.type);
1435
+ if (!itemType || !RESPONSE_ITEM_TYPES.has(itemType))
1436
+ return undefined;
1437
+ const serialized = JSON.stringify(item);
1438
+ if (Buffer.byteLength(serialized) > MAX_RESPONSE_ITEM_BYTES)
1439
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Responses output item exceeds the context record limit.');
1440
+ return JSON.parse(serialized);
1441
+ }
1442
+ function strictFunctionSchema(value, optional = false) {
1443
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
1444
+ return value;
1445
+ const schema = value;
1446
+ const supportedSchema = Object.fromEntries(Object.entries(schema).filter(([keyword]) => keyword !== 'propertyNames'));
1447
+ if (schema.type === 'object' && schema.properties && typeof schema.properties === 'object') {
1448
+ const properties = schema.properties;
1449
+ const required = new Set(Array.isArray(schema.required) ? schema.required : []);
1450
+ return {
1451
+ ...supportedSchema,
1452
+ properties: Object.fromEntries(Object.entries(properties).map(([name, property]) => [
1453
+ name,
1454
+ strictFunctionSchema(property, !required.has(name))
1455
+ ])),
1456
+ required: Object.keys(properties),
1457
+ additionalProperties: false
1458
+ };
1459
+ }
1460
+ if (schema.type === 'array')
1461
+ return {
1462
+ ...supportedSchema,
1463
+ ...(schema.items === undefined ? {} : { items: strictFunctionSchema(schema.items) }),
1464
+ ...(optional ? { type: ['array', 'null'] } : {})
1465
+ };
1466
+ if (!optional)
1467
+ return supportedSchema;
1468
+ if (typeof schema.type === 'string')
1469
+ return { ...supportedSchema, type: [schema.type, 'null'] };
1470
+ if (Array.isArray(schema.enum))
1471
+ return {
1472
+ ...supportedSchema,
1473
+ enum: schema.enum.includes(null) ? schema.enum : [...schema.enum, null]
1474
+ };
1475
+ return { anyOf: [supportedSchema, { type: 'null' }] };
1476
+ }
1477
+ function responseCitations(response) {
1478
+ const citations = new Map();
1479
+ for (const output of Array.isArray(response.output) ? response.output : []) {
1480
+ const item = record(output);
1481
+ for (const content of Array.isArray(item.content) ? item.content : []) {
1482
+ const part = record(content);
1483
+ for (const value of Array.isArray(part.annotations) ? part.annotations : []) {
1484
+ const annotation = record(value);
1485
+ const url = text(annotation.url);
1486
+ if (!url)
1487
+ continue;
1488
+ const id = text(annotation.id) ?? `${text(item.id) ?? 'text'}-${citations.size}`;
1489
+ const title = text(annotation.title);
1490
+ citations.set(`${id}:${url}`, {
1491
+ id,
1492
+ url,
1493
+ ...(title ? { title } : {})
1494
+ });
1495
+ }
1496
+ }
1497
+ }
1498
+ return [...citations.values()];
1499
+ }
1500
+ export function openAiInput(messages, images, modelId, requireEncryptedReasoning) {
1501
+ const compatibleMessages = messages.filter((message) => message.role !== 'provider' ||
1502
+ (message.provider === 'OPENAI_RESPONSES' &&
1503
+ (message.providerModelId === undefined || message.providerModelId === modelId) &&
1504
+ (!requireEncryptedReasoning ||
1505
+ message.item?.type !== 'reasoning' ||
1506
+ typeof message.item.encrypted_content === 'string')));
1507
+ const lastUser = compatibleMessages.findLast((message) => message.role === 'user');
1508
+ const providerCallIds = new Set();
1509
+ const customCallIds = new Set();
1510
+ const providerMessageTexts = new Set();
1511
+ for (const message of compatibleMessages) {
1512
+ if (message.role !== 'provider' || !message.item)
1513
+ continue;
1514
+ if (message.item.type === 'function_call' && typeof message.item.call_id === 'string')
1515
+ providerCallIds.add(message.item.call_id);
1516
+ if (message.item.type === 'custom_tool_call' && typeof message.item.call_id === 'string') {
1517
+ providerCallIds.add(message.item.call_id);
1518
+ customCallIds.add(message.item.call_id);
1519
+ }
1520
+ if (message.item.type === 'message') {
1521
+ const content = Array.isArray(message.item.content) ? message.item.content : [];
1522
+ const value = content
1523
+ .map((part) => {
1524
+ const item = record(part);
1525
+ return text(item.text) ?? '';
1526
+ })
1527
+ .join('');
1528
+ if (value)
1529
+ providerMessageTexts.add(value);
1530
+ }
1531
+ }
1532
+ for (const message of compatibleMessages)
1533
+ if (message.role === 'tool_call' && message.inputMode === 'freeform' && message.callId)
1534
+ customCallIds.add(message.callId);
1535
+ return compatibleMessages
1536
+ .filter((message) => !(message.role === 'tool_call' && message.callId && providerCallIds.has(message.callId)) &&
1537
+ !(message.role === 'assistant' && providerMessageTexts.has(message.content)))
1538
+ .map((message) => openAiInputItem(message, message === lastUser ? images : undefined, customCallIds));
1539
+ }
1540
+ function openAiInputItem(message, images, customCallIds = new Set()) {
1541
+ const userImages = message.role === 'user' ? uniqueModelImages(message.images, images) : [];
1542
+ if (message.role === 'provider') {
1543
+ if (message.provider !== 'OPENAI_RESPONSES' || !message.item)
1544
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Provider context item is invalid.');
1545
+ const item = responseItem(message.item);
1546
+ if (!item)
1547
+ throw new MarAgentError('MAR_AGENT_MODEL_PROTOCOL_ERROR', 'Provider context item type is unsupported.');
1548
+ return item;
1549
+ }
1550
+ if (message.role === 'tool_call' && message.inputMode === 'freeform')
1551
+ return {
1552
+ type: 'custom_tool_call',
1553
+ call_id: message.callId,
1554
+ name: message.name,
1555
+ input: String(message.arguments ?? '')
1556
+ };
1557
+ if (message.role === 'tool_call')
1558
+ return {
1559
+ type: 'function_call',
1560
+ call_id: message.callId,
1561
+ name: message.name,
1562
+ arguments: JSON.stringify(message.arguments ?? {})
1563
+ };
1564
+ if (message.role === 'tool')
1565
+ return {
1566
+ type: customCallIds.has(message.callId ?? '')
1567
+ ? 'custom_tool_call_output'
1568
+ : 'function_call_output',
1569
+ call_id: message.callId,
1570
+ output: message.images?.length
1571
+ ? [
1572
+ { type: 'input_text', text: message.content },
1573
+ ...message.images.map((image) => ({
1574
+ type: 'input_image',
1575
+ image_url: `data:${image.mimeType};base64,${image.dataBase64}`
1576
+ }))
1577
+ ]
1578
+ : message.content
1579
+ };
1580
+ return {
1581
+ role: message.role,
1582
+ content: userImages.length > 0
1583
+ ? [
1584
+ { type: 'input_text', text: message.content },
1585
+ ...userImages.map((image) => ({
1586
+ type: 'input_image',
1587
+ image_url: `data:${image.mimeType};base64,${image.dataBase64}`
1588
+ }))
1589
+ ]
1590
+ : message.content
1591
+ };
1592
+ }
1593
+ function uniqueModelImages(...groups) {
1594
+ const seen = new Set();
1595
+ return groups.flatMap((group) => (group ?? []).flatMap((image) => {
1596
+ const key = `${image.mimeType}\u0000${image.dataBase64}`;
1597
+ if (seen.has(key))
1598
+ return [];
1599
+ seen.add(key);
1600
+ return [image];
1601
+ }));
1602
+ }