@code-yeongyu/senpi 2026.9.22-2 → 2026.9.22-3

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 (630) hide show
  1. package/CHANGELOG.md +37 -17
  2. package/dist/bundle/chunks/{anthropic-messages-2P7APOOQ.js → anthropic-messages-V4CUY3UU.js} +1 -1
  3. package/dist/bundle/chunks/{app-server-command-PRNA6QQU.js → app-server-command-P5WP2YVC.js} +2 -2
  4. package/dist/bundle/chunks/azure-openai-responses-SBCCU4KI.js +2 -0
  5. package/dist/bundle/chunks/chatgpt-subscription.js +75 -0
  6. package/dist/bundle/chunks/chunk-2VZJTDUX.js +2 -0
  7. package/dist/bundle/chunks/{chunk-BOZ37BOT.js → chunk-3KLWJIXM.js} +3 -4
  8. package/dist/bundle/chunks/{chunk-M2HSO7MH.js → chunk-3UO3QYMZ.js} +1 -1
  9. package/dist/bundle/chunks/{chunk-6OD4TT33.js → chunk-5T3V75HH.js} +113 -111
  10. package/dist/bundle/chunks/chunk-6KXIFAMC.js +11 -0
  11. package/dist/bundle/chunks/{chunk-UCPWK6TZ.js → chunk-6MIPLTQG.js} +1 -1
  12. package/dist/bundle/chunks/{chunk-JZ6YQU3A.js → chunk-7ZPFQY76.js} +3 -3
  13. package/dist/bundle/chunks/{chunk-MUYK27UR.js → chunk-AEJUOQ7U.js} +1 -1
  14. package/dist/bundle/chunks/{chunk-F3DXL5MX.js → chunk-AJ722VIQ.js} +1 -1
  15. package/dist/bundle/chunks/{chunk-VYIJQQ5I.js → chunk-DTD3QN3S.js} +1 -1
  16. package/dist/bundle/chunks/chunk-DY6FUAWH.js +2 -0
  17. package/dist/bundle/chunks/{chunk-5XC2FNJ5.js → chunk-GLDP7LH2.js} +1 -1
  18. package/dist/bundle/chunks/{chunk-OPNVT7BU.js → chunk-KB3DR2ZH.js} +1 -1
  19. package/dist/bundle/chunks/{chunk-JR4X6ECO.js → chunk-M4NQKQUK.js} +1 -1
  20. package/dist/bundle/chunks/{chunk-GXUYWMN2.js → chunk-PODQ2IEB.js} +1 -1
  21. package/dist/bundle/chunks/{chunk-ARJJU3MS.js → chunk-PU7UDZ5F.js} +1 -1
  22. package/dist/bundle/chunks/{chunk-64JQFFHH.js → chunk-SSJ5OP3B.js} +2 -2
  23. package/dist/bundle/chunks/{chunk-X63BXA24.js → chunk-TAFYWUE4.js} +1 -1
  24. package/dist/bundle/chunks/{chunk-KICRBRVS.js → chunk-TU37KLCN.js} +2 -2
  25. package/dist/bundle/chunks/{chunk-R6LVC7SP.js → chunk-TWTHGDQS.js} +4 -4
  26. package/dist/bundle/chunks/chunk-WS7QGU5H.js +8 -0
  27. package/dist/bundle/chunks/{chunk-IPRJIKLL.js → chunk-WSQMYWLV.js} +1 -1
  28. package/dist/bundle/chunks/chunk-ZBHRTH5C.js +2 -0
  29. package/dist/bundle/chunks/cli-main-O4CFWDWV.js +3 -0
  30. package/dist/bundle/chunks/{google-generative-ai-Y2IYMUVC.js → google-generative-ai-UJIX64UU.js} +1 -1
  31. package/dist/bundle/chunks/{google-vertex-TKBBMPHV.js → google-vertex-KJEY5SZY.js} +1 -1
  32. package/dist/bundle/chunks/help-fast-path-KFMAFECE.js +2 -0
  33. package/dist/bundle/chunks/host-command-JEBCPKMK.js +2 -0
  34. package/dist/bundle/chunks/host-lifecycle-FWIB56UI.js +3 -0
  35. package/dist/bundle/chunks/host-lifecycle.js +2 -2
  36. package/dist/bundle/chunks/{interactive-host-runtime-F5L4USLR.js → interactive-host-runtime-HBK4XNHJ.js} +1 -1
  37. package/dist/bundle/chunks/interactive-mode-WKFWOHXN.js +2 -0
  38. package/dist/bundle/chunks/{mistral-conversations-ZYDVFRYF.js → mistral-conversations-PNYVN6YU.js} +1 -1
  39. package/dist/bundle/chunks/{multi-session-host-EUTEGVLS.js → multi-session-host-DWBOLTS7.js} +2 -2
  40. package/dist/bundle/chunks/openai-codex-responses-TBF5EMKG.js +10 -0
  41. package/dist/bundle/chunks/{openai-completions-4V76L5ZJ.js → openai-completions-IJIBZB2G.js} +1 -1
  42. package/dist/bundle/chunks/{openai-images-4XAZQLDT.js → openai-images-JA5N5DUU.js} +1 -1
  43. package/dist/bundle/chunks/openai-responses-3XYO7ROE.js +2 -0
  44. package/dist/bundle/chunks/{openrouter-images-Z3WQ5BDR.js → openrouter-images-T4GY3JYM.js} +1 -1
  45. package/dist/bundle/chunks/{package-manager-cli-JPUWMUEJ.js → package-manager-cli-JUKHAT7U.js} +1 -1
  46. package/dist/bundle/chunks/{rotation-stream-S56Y7WMM.js → rotation-stream-67OZ4U6R.js} +1 -1
  47. package/dist/bundle/chunks/rpc-mode-746KEL7Z.js +2 -0
  48. package/dist/bundle/chunks/{session-picker-PFPJVVIC.js → session-picker-TO42QRV2.js} +1 -1
  49. package/dist/bundle/chunks/session-worker.js +399 -398
  50. package/dist/bundle/cli.js +1 -1
  51. package/dist/bundle/index.js +1 -1
  52. package/dist/bundle/rpc-entry.js +1 -1
  53. package/dist/cli/args.d.ts.map +1 -1
  54. package/dist/cli/args.js +10 -2
  55. package/dist/cli/args.js.map +1 -1
  56. package/dist/core/agent-session.d.ts +1 -1
  57. package/dist/core/agent-session.js +8 -8
  58. package/dist/core/agent-session.js.map +1 -1
  59. package/dist/core/auth-provider-key-migration.d.ts +27 -0
  60. package/dist/core/auth-provider-key-migration.d.ts.map +1 -0
  61. package/dist/core/auth-provider-key-migration.js +40 -0
  62. package/dist/core/auth-provider-key-migration.js.map +1 -0
  63. package/dist/core/auth-storage.d.ts +26 -1
  64. package/dist/core/auth-storage.d.ts.map +1 -1
  65. package/dist/core/auth-storage.js +93 -20
  66. package/dist/core/auth-storage.js.map +1 -1
  67. package/dist/core/credential-accounts.d.ts +1 -1
  68. package/dist/core/credential-accounts.d.ts.map +1 -1
  69. package/dist/core/credential-accounts.js +8 -5
  70. package/dist/core/credential-accounts.js.map +1 -1
  71. package/dist/core/credential-pool/env-slots.d.ts.map +1 -1
  72. package/dist/core/credential-pool/env-slots.js +5 -2
  73. package/dist/core/credential-pool/env-slots.js.map +1 -1
  74. package/dist/core/dynamic-prompt/build.js +1 -1
  75. package/dist/core/dynamic-prompt/build.js.map +1 -1
  76. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-command.d.ts +2 -2
  77. package/dist/core/extensions/builtin/anthropic-subscription/account-command.d.ts.map +1 -0
  78. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-command.js +24 -24
  79. package/dist/core/extensions/builtin/anthropic-subscription/account-command.js.map +1 -0
  80. package/dist/core/extensions/builtin/anthropic-subscription/account-events.d.ts.map +1 -0
  81. package/dist/core/extensions/builtin/anthropic-subscription/account-events.js.map +1 -0
  82. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-management.d.ts +1 -1
  83. package/dist/core/extensions/builtin/anthropic-subscription/account-management.d.ts.map +1 -0
  84. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-management.js +2 -2
  85. package/dist/core/extensions/builtin/anthropic-subscription/account-management.js.map +1 -0
  86. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/accounts.d.ts +8 -8
  87. package/dist/core/extensions/builtin/anthropic-subscription/accounts.d.ts.map +1 -0
  88. package/dist/core/extensions/builtin/anthropic-subscription/accounts.js.map +1 -0
  89. package/dist/core/extensions/builtin/anthropic-subscription/affinity.d.ts.map +1 -0
  90. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/affinity.js +2 -2
  91. package/dist/core/extensions/builtin/anthropic-subscription/affinity.js.map +1 -0
  92. package/dist/core/extensions/builtin/anthropic-subscription/api-id.d.ts.map +1 -0
  93. package/dist/core/extensions/builtin/anthropic-subscription/api-id.js.map +1 -0
  94. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-attempt.d.ts +2 -2
  95. package/dist/core/extensions/builtin/anthropic-subscription/auth-attempt.d.ts.map +1 -0
  96. package/dist/core/extensions/builtin/anthropic-subscription/auth-attempt.js.map +1 -0
  97. package/dist/core/extensions/builtin/anthropic-subscription/auth-environment.d.ts.map +1 -0
  98. package/dist/core/extensions/builtin/anthropic-subscription/auth-environment.js.map +1 -0
  99. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-lane.d.ts +5 -5
  100. package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.d.ts.map +1 -0
  101. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-lane.js +10 -10
  102. package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.js.map +1 -0
  103. package/dist/core/extensions/builtin/anthropic-subscription/availability.d.ts.map +1 -0
  104. package/dist/core/extensions/builtin/anthropic-subscription/availability.js.map +1 -0
  105. package/dist/core/extensions/builtin/anthropic-subscription/bounded-queue.d.ts.map +1 -0
  106. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/bounded-queue.js +1 -1
  107. package/dist/core/extensions/builtin/anthropic-subscription/bounded-queue.js.map +1 -0
  108. package/dist/core/extensions/builtin/anthropic-subscription/config-dir-credentials.d.ts +18 -0
  109. package/dist/core/extensions/builtin/anthropic-subscription/config-dir-credentials.d.ts.map +1 -0
  110. package/dist/core/extensions/builtin/anthropic-subscription/config-dir-credentials.js +81 -0
  111. package/dist/core/extensions/builtin/anthropic-subscription/config-dir-credentials.js.map +1 -0
  112. package/dist/core/extensions/builtin/anthropic-subscription/content-blocks.d.ts.map +1 -0
  113. package/dist/core/extensions/builtin/anthropic-subscription/content-blocks.js.map +1 -0
  114. package/dist/core/extensions/builtin/anthropic-subscription/custom-tools-schema.d.ts.map +1 -0
  115. package/dist/core/extensions/builtin/anthropic-subscription/custom-tools-schema.js.map +1 -0
  116. package/dist/core/extensions/builtin/anthropic-subscription/custom-tools.d.ts.map +1 -0
  117. package/dist/core/extensions/builtin/anthropic-subscription/custom-tools.js.map +1 -0
  118. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/errors.d.ts +1 -1
  119. package/dist/core/extensions/builtin/anthropic-subscription/errors.d.ts.map +1 -0
  120. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/errors.js +1 -1
  121. package/dist/core/extensions/builtin/anthropic-subscription/errors.js.map +1 -0
  122. package/dist/core/extensions/builtin/anthropic-subscription/executable-path-lookup.d.ts.map +1 -0
  123. package/dist/core/extensions/builtin/anthropic-subscription/executable-path-lookup.js.map +1 -0
  124. package/dist/core/extensions/builtin/anthropic-subscription/executable.d.ts.map +1 -0
  125. package/dist/core/extensions/builtin/anthropic-subscription/executable.js.map +1 -0
  126. package/dist/core/extensions/builtin/anthropic-subscription/failover.d.ts.map +1 -0
  127. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/failover.js +1 -1
  128. package/dist/core/extensions/builtin/anthropic-subscription/failover.js.map +1 -0
  129. package/dist/core/extensions/builtin/anthropic-subscription/guidance.d.ts.map +1 -0
  130. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/guidance.js +2 -2
  131. package/dist/core/extensions/builtin/anthropic-subscription/guidance.js.map +1 -0
  132. package/dist/core/extensions/builtin/anthropic-subscription/index.d.ts +11 -0
  133. package/dist/core/extensions/builtin/anthropic-subscription/index.d.ts.map +1 -0
  134. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/index.js +19 -13
  135. package/dist/core/extensions/builtin/anthropic-subscription/index.js.map +1 -0
  136. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/oauth-login.d.ts +3 -3
  137. package/dist/core/extensions/builtin/anthropic-subscription/oauth-login.d.ts.map +1 -0
  138. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/oauth-login.js +3 -3
  139. package/dist/core/extensions/builtin/anthropic-subscription/oauth-login.js.map +1 -0
  140. package/dist/core/extensions/builtin/anthropic-subscription/options.d.ts +18 -0
  141. package/dist/core/extensions/builtin/anthropic-subscription/options.d.ts.map +1 -0
  142. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/options.js +3 -3
  143. package/dist/core/extensions/builtin/anthropic-subscription/options.js.map +1 -0
  144. package/dist/core/extensions/builtin/anthropic-subscription/prompt-bridge.d.ts.map +1 -0
  145. package/dist/core/extensions/builtin/anthropic-subscription/prompt-bridge.js.map +1 -0
  146. package/dist/core/extensions/builtin/anthropic-subscription/prompt-directive-dedupe.d.ts.map +1 -0
  147. package/dist/core/extensions/builtin/anthropic-subscription/prompt-directive-dedupe.js.map +1 -0
  148. package/dist/core/extensions/builtin/anthropic-subscription/refusal.d.ts.map +1 -0
  149. package/dist/core/extensions/builtin/anthropic-subscription/refusal.js.map +1 -0
  150. package/dist/core/extensions/builtin/anthropic-subscription/sdk-boundary.d.ts.map +1 -0
  151. package/dist/core/extensions/builtin/anthropic-subscription/sdk-boundary.js.map +1 -0
  152. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/sdk-boundary.lazy.d.ts +1 -1
  153. package/dist/core/extensions/builtin/anthropic-subscription/sdk-boundary.lazy.d.ts.map +1 -0
  154. package/dist/core/extensions/builtin/anthropic-subscription/sdk-boundary.lazy.js.map +1 -0
  155. package/dist/core/extensions/builtin/anthropic-subscription/session-binding-store.d.ts.map +1 -0
  156. package/dist/core/extensions/builtin/anthropic-subscription/session-binding-store.js.map +1 -0
  157. package/dist/core/extensions/builtin/anthropic-subscription/session-binding.d.ts.map +1 -0
  158. package/dist/core/extensions/builtin/anthropic-subscription/session-binding.js.map +1 -0
  159. package/dist/core/extensions/builtin/anthropic-subscription/session-commit-boundary.d.ts.map +1 -0
  160. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-commit-boundary.js +4 -3
  161. package/dist/core/extensions/builtin/anthropic-subscription/session-commit-boundary.js.map +1 -0
  162. package/dist/core/extensions/builtin/anthropic-subscription/session-continuity.d.ts.map +1 -0
  163. package/dist/core/extensions/builtin/anthropic-subscription/session-continuity.js.map +1 -0
  164. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-entry-annotations.d.ts +3 -3
  165. package/dist/core/extensions/builtin/anthropic-subscription/session-entry-annotations.d.ts.map +1 -0
  166. package/dist/core/extensions/builtin/anthropic-subscription/session-entry-annotations.js.map +1 -0
  167. package/dist/core/extensions/builtin/anthropic-subscription/session-observability.d.ts.map +1 -0
  168. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-observability.js +1 -1
  169. package/dist/core/extensions/builtin/anthropic-subscription/session-observability.js.map +1 -0
  170. package/dist/core/extensions/builtin/anthropic-subscription/session-reaper.d.ts.map +1 -0
  171. package/dist/core/extensions/builtin/anthropic-subscription/session-reaper.js.map +1 -0
  172. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-reattach.d.ts +5 -5
  173. package/dist/core/extensions/builtin/anthropic-subscription/session-reattach.d.ts.map +1 -0
  174. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-reattach.js +1 -1
  175. package/dist/core/extensions/builtin/anthropic-subscription/session-reattach.js.map +1 -0
  176. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-pump.d.ts +2 -2
  177. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.d.ts.map +1 -0
  178. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-pump.js +6 -6
  179. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.js.map +1 -0
  180. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-state.d.ts +3 -3
  181. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-state.d.ts.map +1 -0
  182. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-state.js.map +1 -0
  183. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-wiring.d.ts.map +1 -0
  184. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-wiring.js +2 -2
  185. package/dist/core/extensions/builtin/anthropic-subscription/session-registry-wiring.js.map +1 -0
  186. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry.d.ts +12 -12
  187. package/dist/core/extensions/builtin/anthropic-subscription/session-registry.d.ts.map +1 -0
  188. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry.js +4 -4
  189. package/dist/core/extensions/builtin/anthropic-subscription/session-registry.js.map +1 -0
  190. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-restored-admission.d.ts +2 -2
  191. package/dist/core/extensions/builtin/anthropic-subscription/session-restored-admission.d.ts.map +1 -0
  192. package/dist/core/extensions/builtin/anthropic-subscription/session-restored-admission.js.map +1 -0
  193. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-stream.d.ts +2 -2
  194. package/dist/core/extensions/builtin/anthropic-subscription/session-stream.d.ts.map +1 -0
  195. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-stream.js +1 -1
  196. package/dist/core/extensions/builtin/anthropic-subscription/session-stream.js.map +1 -0
  197. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-sync.d.ts +5 -5
  198. package/dist/core/extensions/builtin/anthropic-subscription/session-sync.d.ts.map +1 -0
  199. package/dist/core/extensions/builtin/anthropic-subscription/session-sync.js.map +1 -0
  200. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-attempt.d.ts +11 -0
  201. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-attempt.d.ts.map +1 -0
  202. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-attempt.js.map +1 -0
  203. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.d.ts +14 -0
  204. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.d.ts.map +1 -0
  205. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-turn-claim.js +1 -1
  206. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.js.map +1 -0
  207. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.d.ts.map +1 -0
  208. package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.js.map +1 -0
  209. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/settings.d.ts +11 -11
  210. package/dist/core/extensions/builtin/anthropic-subscription/settings.d.ts.map +1 -0
  211. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/settings.js +9 -9
  212. package/dist/core/extensions/builtin/anthropic-subscription/settings.js.map +1 -0
  213. package/dist/core/extensions/builtin/anthropic-subscription/stream-events.d.ts.map +1 -0
  214. package/dist/core/extensions/builtin/anthropic-subscription/stream-events.js.map +1 -0
  215. package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.d.ts.map +1 -0
  216. package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.js.map +1 -0
  217. package/dist/core/extensions/builtin/anthropic-subscription/stream-protocol.d.ts.map +1 -0
  218. package/dist/core/extensions/builtin/anthropic-subscription/stream-protocol.js.map +1 -0
  219. package/dist/core/extensions/builtin/anthropic-subscription/stream.d.ts +3 -0
  220. package/dist/core/extensions/builtin/anthropic-subscription/stream.d.ts.map +1 -0
  221. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream.js +5 -5
  222. package/dist/core/extensions/builtin/anthropic-subscription/stream.js.map +1 -0
  223. package/dist/core/extensions/builtin/anthropic-subscription/system-prompt.d.ts.map +1 -0
  224. package/dist/core/extensions/builtin/anthropic-subscription/system-prompt.js.map +1 -0
  225. package/dist/core/extensions/builtin/anthropic-subscription/tool-watch.d.ts.map +1 -0
  226. package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/tool-watch.js +6 -2
  227. package/dist/core/extensions/builtin/anthropic-subscription/tool-watch.js.map +1 -0
  228. package/dist/core/extensions/builtin/anthropic-subscription/tools.d.ts.map +1 -0
  229. package/dist/core/extensions/builtin/anthropic-subscription/tools.js.map +1 -0
  230. package/dist/core/extensions/builtin/compaction/index.js +2 -2
  231. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  232. package/dist/core/extensions/builtin/compaction/lane-policy.d.ts +5 -5
  233. package/dist/core/extensions/builtin/compaction/lane-policy.d.ts.map +1 -1
  234. package/dist/core/extensions/builtin/compaction/lane-policy.js +9 -9
  235. package/dist/core/extensions/builtin/compaction/lane-policy.js.map +1 -1
  236. package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts +1 -1
  237. package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts.map +1 -1
  238. package/dist/core/extensions/builtin/compaction/openai-remote-model.js +6 -6
  239. package/dist/core/extensions/builtin/compaction/openai-remote-model.js.map +1 -1
  240. package/dist/core/extensions/builtin/compaction/openai-remote.js +1 -1
  241. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  242. package/dist/core/extensions/builtin/compaction/speculative-summary.js +2 -2
  243. package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -1
  244. package/dist/core/extensions/builtin/compaction/speculative.js +1 -1
  245. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  246. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js +1 -1
  247. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js.map +1 -1
  248. package/dist/core/extensions/builtin/goal/terminal-provider-error.js +1 -1
  249. package/dist/core/extensions/builtin/goal/terminal-provider-error.js.map +1 -1
  250. package/dist/core/extensions/builtin/gpt-account.js +18 -18
  251. package/dist/core/extensions/builtin/gpt-account.js.map +1 -1
  252. package/dist/core/extensions/builtin/index.js +2 -2
  253. package/dist/core/extensions/builtin/index.js.map +1 -1
  254. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts +2 -2
  255. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts.map +1 -1
  256. package/dist/core/extensions/builtin/oauth-login-interaction.js +1 -1
  257. package/dist/core/extensions/builtin/oauth-login-interaction.js.map +1 -1
  258. package/dist/core/extensions/builtin/prompt-preset/file-operations.d.ts +9 -1
  259. package/dist/core/extensions/builtin/prompt-preset/file-operations.d.ts.map +1 -1
  260. package/dist/core/extensions/builtin/prompt-preset/file-operations.js +60 -17
  261. package/dist/core/extensions/builtin/prompt-preset/file-operations.js.map +1 -1
  262. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts.map +1 -1
  263. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js +7 -3
  264. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js.map +1 -1
  265. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts.map +1 -1
  266. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js +7 -3
  267. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js.map +1 -1
  268. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts.map +1 -1
  269. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js +7 -3
  270. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js.map +1 -1
  271. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js +1 -1
  272. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
  273. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +1 -1
  274. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  275. package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts.map +1 -1
  276. package/dist/core/extensions/builtin/prompt-preset/gpt-5.js +7 -3
  277. package/dist/core/extensions/builtin/prompt-preset/gpt-5.js.map +1 -1
  278. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +1 -1
  279. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
  280. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.js +2 -2
  281. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.js.map +1 -1
  282. package/dist/core/extensions/builtin/rules/rules/constants.d.ts +1 -1
  283. package/dist/core/extensions/builtin/rules/rules/constants.js +1 -1
  284. package/dist/core/extensions/builtin/rules/rules/constants.js.map +1 -1
  285. package/dist/core/extensions/builtin/service-tier.js +3 -3
  286. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  287. package/dist/core/model-config.d.ts +3 -0
  288. package/dist/core/model-config.d.ts.map +1 -1
  289. package/dist/core/model-config.js +26 -3
  290. package/dist/core/model-config.js.map +1 -1
  291. package/dist/core/model-resolver.js +1 -1
  292. package/dist/core/model-resolver.js.map +1 -1
  293. package/dist/core/model-runtime.d.ts +2 -0
  294. package/dist/core/model-runtime.d.ts.map +1 -1
  295. package/dist/core/model-runtime.js +10 -2
  296. package/dist/core/model-runtime.js.map +1 -1
  297. package/dist/core/provider-display-names.d.ts.map +1 -1
  298. package/dist/core/provider-display-names.js +2 -1
  299. package/dist/core/provider-display-names.js.map +1 -1
  300. package/dist/core/retry-fallback/expansion.js +1 -1
  301. package/dist/core/retry-fallback/expansion.js.map +1 -1
  302. package/dist/core/retry-fallback/settings.d.ts +1 -1
  303. package/dist/core/retry-fallback/settings.js +1 -1
  304. package/dist/core/retry-fallback/settings.js.map +1 -1
  305. package/dist/core/session-manager.d.ts.map +1 -1
  306. package/dist/core/session-manager.js +16 -4
  307. package/dist/core/session-manager.js.map +1 -1
  308. package/dist/core/settings-manager.d.ts +5 -0
  309. package/dist/core/settings-manager.d.ts.map +1 -1
  310. package/dist/core/settings-manager.js +68 -2
  311. package/dist/core/settings-manager.js.map +1 -1
  312. package/dist/modes/app-server/server/account.d.ts +1 -1
  313. package/dist/modes/app-server/server/account.d.ts.map +1 -1
  314. package/dist/modes/app-server/server/account.js +6 -1
  315. package/dist/modes/app-server/server/account.js.map +1 -1
  316. package/dist/modes/app-server/server/server-core.js +1 -1
  317. package/dist/modes/app-server/server/server-core.js.map +1 -1
  318. package/dist/modes/interactive/components/progressive-transcript-container.d.ts +12 -0
  319. package/dist/modes/interactive/components/progressive-transcript-container.d.ts.map +1 -1
  320. package/dist/modes/interactive/components/progressive-transcript-container.js +17 -2
  321. package/dist/modes/interactive/components/progressive-transcript-container.js.map +1 -1
  322. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  323. package/dist/modes/interactive/interactive-mode.js +14 -1
  324. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  325. package/dist/modes/rpc/connection-handler.js +3 -3
  326. package/dist/modes/rpc/connection-handler.js.map +1 -1
  327. package/dist/modes/rpc/host-process-metrics.d.ts.map +1 -1
  328. package/dist/modes/rpc/host-process-metrics.js +24 -31
  329. package/dist/modes/rpc/host-process-metrics.js.map +1 -1
  330. package/dist/modes/rpc/host-process-table.d.ts +36 -0
  331. package/dist/modes/rpc/host-process-table.d.ts.map +1 -0
  332. package/dist/modes/rpc/host-process-table.js +162 -0
  333. package/dist/modes/rpc/host-process-table.js.map +1 -0
  334. package/dist/modes/rpc/rpc-client.d.ts +1 -1
  335. package/dist/modes/rpc/rpc-client.js +1 -1
  336. package/dist/modes/rpc/rpc-client.js.map +1 -1
  337. package/dist/modes/rpc/rpc-types.js.map +1 -1
  338. package/dist/modes/rpc/worker-session-registry.d.ts.map +1 -1
  339. package/dist/modes/rpc/worker-session-registry.js +30 -0
  340. package/dist/modes/rpc/worker-session-registry.js.map +1 -1
  341. package/docs/providers.md +9 -9
  342. package/docs/release-guide.md +1 -1
  343. package/docs/rpc.md +4 -4
  344. package/docs/settings.md +5 -5
  345. package/docs/usage.md +2 -2
  346. package/examples/extensions/AGENTS.md +1 -1
  347. package/examples/extensions/README.md +1 -1
  348. package/examples/extensions/{openai-codex-usage → chatgpt-subscription-usage}/codex-usage.ts +1 -1
  349. package/examples/extensions/{openai-codex-usage → chatgpt-subscription-usage}/index.ts +4 -4
  350. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
  351. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  352. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  353. package/node_modules/@earendil-works/pi-ai/README.md +3 -3
  354. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +1 -1
  355. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  356. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts +3 -3
  357. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts.map +1 -1
  358. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.js.map +1 -1
  359. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts +5 -5
  360. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
  361. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +10 -10
  362. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  363. package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts +1 -1
  364. package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts.map +1 -1
  365. package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js +1 -1
  366. package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js.map +1 -1
  367. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +1 -1
  368. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  369. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +1 -1
  370. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  371. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/{openai-codex.d.ts → chatgpt-subscription.d.ts} +3 -3
  372. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/chatgpt-subscription.d.ts.map +1 -0
  373. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/{openai-codex.js → chatgpt-subscription.js} +35 -35
  374. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/chatgpt-subscription.js.map +1 -0
  375. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts +2 -2
  376. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
  377. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +4 -3
  378. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
  379. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts +7 -0
  380. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts.map +1 -1
  381. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js +20 -2
  382. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js.map +1 -1
  383. package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +2 -2
  384. package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js.map +1 -1
  385. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +2 -2
  386. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  387. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -1
  388. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  389. package/node_modules/@earendil-works/pi-ai/dist/legacy-provider-ids.d.ts +20 -0
  390. package/node_modules/@earendil-works/pi-ai/dist/legacy-provider-ids.d.ts.map +1 -1
  391. package/node_modules/@earendil-works/pi-ai/dist/legacy-provider-ids.js +56 -0
  392. package/node_modules/@earendil-works/pi-ai/dist/legacy-provider-ids.js.map +1 -1
  393. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +2 -2
  394. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  395. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +2 -2
  396. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  397. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
  398. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +2 -2
  399. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
  400. package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.d.ts +3 -0
  401. package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.d.ts.map +1 -0
  402. package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.js +22 -0
  403. package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.js.map +1 -0
  404. package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.models.d.ts +4 -0
  405. package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.models.d.ts.map +1 -0
  406. package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.models.js +6 -0
  407. package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.models.js.map +1 -0
  408. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  409. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  410. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  411. package/node_modules/@earendil-works/pi-ai/dist/providers/data/chatgpt-subscription.json +1 -0
  412. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  413. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +1 -1
  414. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  415. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  416. package/node_modules/@earendil-works/pi-ai/dist/utils/{openai-codex-auth.d.ts → chatgpt-subscription-auth.d.ts} +3 -3
  417. package/node_modules/@earendil-works/pi-ai/dist/utils/chatgpt-subscription-auth.d.ts.map +1 -0
  418. package/node_modules/@earendil-works/pi-ai/dist/utils/{openai-codex-auth.js → chatgpt-subscription-auth.js} +4 -4
  419. package/node_modules/@earendil-works/pi-ai/dist/utils/chatgpt-subscription-auth.js.map +1 -0
  420. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  421. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  422. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  423. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  424. package/package.json +7 -7
  425. package/dist/bundle/chunks/azure-openai-responses-3AH7MJWF.js +0 -2
  426. package/dist/bundle/chunks/chunk-56TWFZ2C.js +0 -2
  427. package/dist/bundle/chunks/chunk-JEFYJDHP.js +0 -8
  428. package/dist/bundle/chunks/chunk-K3HEWWSS.js +0 -2
  429. package/dist/bundle/chunks/chunk-NK2RNX25.js +0 -11
  430. package/dist/bundle/chunks/chunk-NMB4C6ZZ.js +0 -2
  431. package/dist/bundle/chunks/cli-main-AFJNXUSL.js +0 -3
  432. package/dist/bundle/chunks/help-fast-path-4KYBVD2Z.js +0 -2
  433. package/dist/bundle/chunks/host-command-OVA6GEWC.js +0 -2
  434. package/dist/bundle/chunks/host-lifecycle-IDQPLYEA.js +0 -3
  435. package/dist/bundle/chunks/interactive-mode-UFBSCOP7.js +0 -2
  436. package/dist/bundle/chunks/openai-codex-responses-MEIUNROM.js +0 -10
  437. package/dist/bundle/chunks/openai-codex.js +0 -75
  438. package/dist/bundle/chunks/openai-responses-YR7WRBG3.js +0 -2
  439. package/dist/bundle/chunks/rpc-mode-JDVHUBZY.js +0 -2
  440. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.d.ts.map +0 -1
  441. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js.map +0 -1
  442. package/dist/core/extensions/builtin/claude-sdk-oauth/account-events.d.ts.map +0 -1
  443. package/dist/core/extensions/builtin/claude-sdk-oauth/account-events.js.map +0 -1
  444. package/dist/core/extensions/builtin/claude-sdk-oauth/account-management.d.ts.map +0 -1
  445. package/dist/core/extensions/builtin/claude-sdk-oauth/account-management.js.map +0 -1
  446. package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.d.ts.map +0 -1
  447. package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.js.map +0 -1
  448. package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.d.ts.map +0 -1
  449. package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.js.map +0 -1
  450. package/dist/core/extensions/builtin/claude-sdk-oauth/api-id.d.ts.map +0 -1
  451. package/dist/core/extensions/builtin/claude-sdk-oauth/api-id.js.map +0 -1
  452. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.d.ts.map +0 -1
  453. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.js.map +0 -1
  454. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-environment.d.ts.map +0 -1
  455. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-environment.js.map +0 -1
  456. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts.map +0 -1
  457. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js.map +0 -1
  458. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts.map +0 -1
  459. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js.map +0 -1
  460. package/dist/core/extensions/builtin/claude-sdk-oauth/bounded-queue.d.ts.map +0 -1
  461. package/dist/core/extensions/builtin/claude-sdk-oauth/bounded-queue.js.map +0 -1
  462. package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.d.ts +0 -3
  463. package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.d.ts.map +0 -1
  464. package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.js +0 -27
  465. package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.js.map +0 -1
  466. package/dist/core/extensions/builtin/claude-sdk-oauth/content-blocks.d.ts.map +0 -1
  467. package/dist/core/extensions/builtin/claude-sdk-oauth/content-blocks.js.map +0 -1
  468. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools-schema.d.ts.map +0 -1
  469. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools-schema.js.map +0 -1
  470. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts.map +0 -1
  471. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.js.map +0 -1
  472. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.d.ts.map +0 -1
  473. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.js.map +0 -1
  474. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts.map +0 -1
  475. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js.map +0 -1
  476. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts.map +0 -1
  477. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js.map +0 -1
  478. package/dist/core/extensions/builtin/claude-sdk-oauth/failover.d.ts.map +0 -1
  479. package/dist/core/extensions/builtin/claude-sdk-oauth/failover.js.map +0 -1
  480. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.d.ts.map +0 -1
  481. package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.js.map +0 -1
  482. package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts +0 -11
  483. package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts.map +0 -1
  484. package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +0 -1
  485. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.d.ts.map +0 -1
  486. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js.map +0 -1
  487. package/dist/core/extensions/builtin/claude-sdk-oauth/options.d.ts +0 -18
  488. package/dist/core/extensions/builtin/claude-sdk-oauth/options.d.ts.map +0 -1
  489. package/dist/core/extensions/builtin/claude-sdk-oauth/options.js.map +0 -1
  490. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.d.ts.map +0 -1
  491. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.js.map +0 -1
  492. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-directive-dedupe.d.ts.map +0 -1
  493. package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-directive-dedupe.js.map +0 -1
  494. package/dist/core/extensions/builtin/claude-sdk-oauth/refusal.d.ts.map +0 -1
  495. package/dist/core/extensions/builtin/claude-sdk-oauth/refusal.js.map +0 -1
  496. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts.map +0 -1
  497. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.js.map +0 -1
  498. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.d.ts.map +0 -1
  499. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.js.map +0 -1
  500. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding-store.d.ts.map +0 -1
  501. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding-store.js.map +0 -1
  502. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +0 -1
  503. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js.map +0 -1
  504. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +0 -1
  505. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.js.map +0 -1
  506. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +0 -1
  507. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +0 -1
  508. package/dist/core/extensions/builtin/claude-sdk-oauth/session-entry-annotations.d.ts.map +0 -1
  509. package/dist/core/extensions/builtin/claude-sdk-oauth/session-entry-annotations.js.map +0 -1
  510. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.d.ts.map +0 -1
  511. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.js.map +0 -1
  512. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reaper.d.ts.map +0 -1
  513. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reaper.js.map +0 -1
  514. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts.map +0 -1
  515. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js.map +0 -1
  516. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +0 -1
  517. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +0 -1
  518. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts.map +0 -1
  519. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.js.map +0 -1
  520. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts.map +0 -1
  521. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js.map +0 -1
  522. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +0 -1
  523. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +0 -1
  524. package/dist/core/extensions/builtin/claude-sdk-oauth/session-restored-admission.d.ts.map +0 -1
  525. package/dist/core/extensions/builtin/claude-sdk-oauth/session-restored-admission.js.map +0 -1
  526. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +0 -1
  527. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +0 -1
  528. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts.map +0 -1
  529. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +0 -1
  530. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts +0 -11
  531. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +0 -1
  532. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js.map +0 -1
  533. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-claim.d.ts +0 -14
  534. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-claim.d.ts.map +0 -1
  535. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-claim.js.map +0 -1
  536. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-types.d.ts.map +0 -1
  537. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-types.js.map +0 -1
  538. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.d.ts.map +0 -1
  539. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js.map +0 -1
  540. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-events.d.ts.map +0 -1
  541. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-events.js.map +0 -1
  542. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.d.ts.map +0 -1
  543. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.js.map +0 -1
  544. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.d.ts.map +0 -1
  545. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.js.map +0 -1
  546. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts +0 -3
  547. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +0 -1
  548. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +0 -1
  549. package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.d.ts.map +0 -1
  550. package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.js.map +0 -1
  551. package/dist/core/extensions/builtin/claude-sdk-oauth/tool-watch.d.ts.map +0 -1
  552. package/dist/core/extensions/builtin/claude-sdk-oauth/tool-watch.js.map +0 -1
  553. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +0 -1
  554. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.js.map +0 -1
  555. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.d.ts.map +0 -1
  556. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +0 -1
  557. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +0 -1
  558. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.d.ts +0 -3
  559. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.d.ts.map +0 -1
  560. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.js +0 -22
  561. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.js.map +0 -1
  562. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +0 -4
  563. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +0 -1
  564. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +0 -6
  565. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +0 -1
  566. package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.d.ts.map +0 -1
  567. package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.js.map +0 -1
  568. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-events.d.ts +0 -0
  569. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-events.js +0 -0
  570. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/accounts.js +0 -0
  571. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/affinity.d.ts +0 -0
  572. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/api-id.d.ts +0 -0
  573. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/api-id.js +0 -0
  574. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-attempt.js +0 -0
  575. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-environment.d.ts +0 -0
  576. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-environment.js +0 -0
  577. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/availability.d.ts +0 -0
  578. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/availability.js +0 -0
  579. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/bounded-queue.d.ts +0 -0
  580. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/content-blocks.d.ts +0 -0
  581. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/content-blocks.js +0 -0
  582. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/custom-tools-schema.d.ts +0 -0
  583. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/custom-tools-schema.js +0 -0
  584. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/custom-tools.d.ts +0 -0
  585. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/custom-tools.js +0 -0
  586. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/executable-path-lookup.d.ts +0 -0
  587. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/executable-path-lookup.js +0 -0
  588. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/executable.d.ts +0 -0
  589. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/executable.js +0 -0
  590. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/failover.d.ts +0 -0
  591. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/guidance.d.ts +0 -0
  592. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/prompt-bridge.d.ts +0 -0
  593. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/prompt-bridge.js +0 -0
  594. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/prompt-directive-dedupe.d.ts +0 -0
  595. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/prompt-directive-dedupe.js +0 -0
  596. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/refusal.d.ts +0 -0
  597. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/refusal.js +0 -0
  598. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/sdk-boundary.d.ts +0 -0
  599. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/sdk-boundary.js +0 -0
  600. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/sdk-boundary.lazy.js +0 -0
  601. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-binding-store.d.ts +0 -0
  602. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-binding-store.js +0 -0
  603. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-binding.d.ts +0 -0
  604. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-binding.js +0 -0
  605. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-commit-boundary.d.ts +0 -0
  606. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-continuity.d.ts +0 -0
  607. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-continuity.js +0 -0
  608. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-entry-annotations.js +0 -0
  609. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-observability.d.ts +0 -0
  610. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-reaper.d.ts +0 -0
  611. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-reaper.js +0 -0
  612. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-state.js +0 -0
  613. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-wiring.d.ts +0 -0
  614. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-restored-admission.js +0 -0
  615. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-sync.js +0 -0
  616. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-turn-attempt.js +0 -0
  617. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-turn-types.d.ts +0 -0
  618. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-turn-types.js +0 -0
  619. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-events.d.ts +0 -0
  620. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-events.js +0 -0
  621. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-guidance.d.ts +0 -0
  622. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-guidance.js +0 -0
  623. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-protocol.d.ts +0 -0
  624. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-protocol.js +0 -0
  625. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/system-prompt.d.ts +0 -0
  626. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/system-prompt.js +0 -0
  627. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/tool-watch.d.ts +0 -0
  628. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/tools.d.ts +0 -0
  629. /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/tools.js +0 -0
  630. /package/examples/extensions/{openai-codex-usage → chatgpt-subscription-usage}/README.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/api/openai-responses.ts"],"names":[],"mappings":"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","sourcesContent":["import OpenAI from \"openai\";\nimport type { ResponseCreateParamsStreaming, ResponseStreamEvent } from \"openai/resources/responses/responses.js\";\nimport { clampThinkingLevel, inferOpenAIThinkingLevelMap, supportsMax, supportsXhigh } from \"../models.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tCacheRetention,\n\tContext,\n\tModel,\n\tOpenAIResponsesCompat,\n\tProviderEnv,\n\tProviderHeaders,\n\tSimpleStreamOptions,\n\tStreamFunction,\n\tStreamOptions,\n\tUsage,\n} from \"../types.ts\";\nimport { splitDeferredTools } from \"../utils/deferred-tools.ts\";\nimport { formatProviderError, normalizeProviderError } from \"../utils/error-body.ts\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { headersToRecord } from \"../utils/headers.ts\";\nimport { getPiUserAgent } from \"../utils/pi-user-agent.ts\";\nimport { getProviderEnvValue } from \"../utils/provider-env.ts\";\nimport { retryProviderRequest } from \"../utils/provider-retry.ts\";\nimport { isCloudflareProvider, resolveCloudflareBaseUrl } from \"./cloudflare.ts\";\nimport { createGrammarToolInputProperties } from \"./constrained-sampling.ts\";\nimport { buildCopilotDynamicHeaders, hasCopilotVisionInput } from \"./github-copilot-headers.ts\";\nimport { resolveOpenAIClientAuth } from \"./openai-client-auth.ts\";\nimport { clampOpenAIPromptCacheKey } from \"./openai-prompt-cache.ts\";\nimport { convertResponsesMessages, convertResponsesTools, processResponsesStream } from \"./openai-responses-shared.ts\";\nimport { buildBaseOptions, clampMaxForOpenAI, OPENAI_RESPONSES_RESERVED_BODY_KEYS } from \"./simple-options.ts\";\nimport { startWebSocketLiveness } from \"./websocket-liveness.ts\";\nimport { createWebSocketTransportFailure } from \"./websocket-transport-failure.ts\";\n\nconst OPENAI_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"openai-codex\", \"opencode\"]);\nconst OPENAI_BETA_RESPONSES_WEBSOCKETS = \"responses_websockets=2026-02-06\";\nconst OPENAI_WEB_SEARCH_SOURCES_INCLUDE = \"web_search_call.action.sources\";\nconst SESSION_WEBSOCKET_CACHE_TTL_MS = 5 * 60 * 1000;\n// OpenAI Responses rejects max_output_tokens below 16: https://github.com/earendil-works/pi/issues/6265\nconst OPENAI_RESPONSES_MIN_OUTPUT_TOKENS = 16;\n\ntype WebSocketEventType = \"open\" | \"message\" | \"error\" | \"close\" | \"ping\" | \"pong\";\ntype WebSocketListener = (event: unknown) => void;\n\ninterface WebSocketLike {\n\tping?(data?: string): void;\n\tclose(code?: number, reason?: string): void;\n\tsend(data: string): void;\n\taddEventListener(type: WebSocketEventType, listener: WebSocketListener): void;\n\tremoveEventListener(type: WebSocketEventType, listener: WebSocketListener): void;\n}\n\nexport interface CachedWebSocketConnection {\n\tsocket: WebSocketLike;\n\tbusy: boolean;\n\tidleTimer?: ReturnType<typeof setTimeout>;\n}\n\ntype WebSocketConstructor = new (\n\turl: string,\n\tprotocols?: string | string[] | { headers?: Record<string, string> },\n) => WebSocketLike;\n\ntype MutableResponsesPayload = ResponseCreateParamsStreaming & {\n\tprompt_cache_options?: { mode?: \"explicit\" | \"implicit\"; ttl?: \"30m\" };\n};\n\nconst websocketSessionCache = new Map<string, CachedWebSocketConnection>();\n\nfunction detectSessionAffinityFormat(model: Pick<Model<\"openai-responses\">, \"provider\" | \"baseUrl\">) {\n\treturn model.provider === \"openrouter\" || model.baseUrl.includes(\"openrouter.ai\") ? \"openrouter\" : \"openai\";\n}\n\n/**\n * Resolve cache retention preference.\n * Defaults to \"short\" and uses PI_CACHE_RETENTION for backward compatibility.\n */\nfunction resolveCacheRetention(cacheRetention?: CacheRetention, env?: ProviderEnv): CacheRetention {\n\tif (cacheRetention) {\n\t\treturn cacheRetention;\n\t}\n\tif (getProviderEnvValue(\"PI_CACHE_RETENTION\", env) === \"long\") {\n\t\treturn \"long\";\n\t}\n\treturn \"short\";\n}\n\nfunction getCompat(model: Model<\"openai-responses\">, env?: ProviderEnv): Required<OpenAIResponsesCompat> {\n\tconst isNativeEndpoint = isOpenAIResponsesNativeEndpoint(model, env);\n\treturn {\n\t\tsupportsDeveloperRole: model.compat?.supportsDeveloperRole ?? true,\n\t\tsessionAffinityFormat: model.compat?.sessionAffinityFormat ?? detectSessionAffinityFormat(model),\n\t\tsupportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,\n\t\tsupportsWebSocket: model.compat?.supportsWebSocket ?? isNativeEndpoint,\n\t\tsupportsRemoteCompactionV2: model.compat?.supportsRemoteCompactionV2 ?? isNativeEndpoint,\n\t\tsupportsWebSearchPreview: model.compat?.supportsWebSearchPreview ?? isNativeEndpoint,\n\t\tsupportsImageGeneration: model.compat?.supportsImageGeneration ?? isNativeEndpoint,\n\t\tsupportsStrictMode: model.compat?.supportsStrictMode ?? false,\n\t\tsupportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false,\n\t\tsupportsAdditionalTools: model.compat?.supportsAdditionalTools ?? false,\n\t\tsupportsToolSearch: model.compat?.supportsToolSearch ?? false,\n\t\tsupportsExplicitPromptCacheMode: model.compat?.supportsExplicitPromptCacheMode ?? false,\n\t\tsupportsMaxOutputTokens: model.compat?.supportsMaxOutputTokens ?? true,\n\t};\n}\n\nfunction isOpenAIResponsesNativeEndpoint(model: Model<\"openai-responses\">, env?: ProviderEnv): boolean {\n\tconst baseUrl = isCloudflareProvider(model.provider) ? resolveCloudflareBaseUrl(model, env) : model.baseUrl;\n\ttry {\n\t\treturn new URL(baseUrl || \"https://api.openai.com/v1\").hostname === \"api.openai.com\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction getPromptCacheRetention(\n\tcompat: Required<OpenAIResponsesCompat>,\n\tcacheRetention: CacheRetention,\n): \"24h\" | undefined {\n\treturn cacheRetention === \"long\" && compat.supportsLongCacheRetention && !compat.supportsExplicitPromptCacheMode\n\t\t? \"24h\"\n\t\t: undefined;\n}\n\nfunction getPromptCacheOptions(\n\tcompat: Required<OpenAIResponsesCompat>,\n\tcacheRetention: CacheRetention,\n): { mode?: \"explicit\"; ttl?: \"30m\" } | undefined {\n\tif (!compat.supportsExplicitPromptCacheMode) return undefined;\n\tif (cacheRetention === \"none\") return { mode: \"explicit\" };\n\tif (cacheRetention === \"long\" && compat.supportsLongCacheRetention) return { ttl: \"30m\" };\n\treturn undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isOpenAiWebSearchPreviewTool(value: unknown): boolean {\n\treturn isRecord(value) && (value.type === \"web_search_preview\" || value.type === \"web_search_preview_2025_03_11\");\n}\n\nfunction sanitizeUnsupportedNativeTools(\n\tparams: MutableResponsesPayload,\n\tcompat: Required<OpenAIResponsesCompat>,\n): MutableResponsesPayload {\n\tif (compat.supportsWebSearchPreview) {\n\t\treturn params;\n\t}\n\n\tconst payload = params as MutableResponsesPayload;\n\tlet sanitized: MutableResponsesPayload | undefined;\n\tconst nextPayload = (): MutableResponsesPayload => {\n\t\tsanitized ??= { ...payload };\n\t\treturn sanitized;\n\t};\n\n\tif (Array.isArray(payload.tools)) {\n\t\tconst tools = payload.tools.filter((tool) => !isOpenAiWebSearchPreviewTool(tool));\n\t\tif (tools.length !== payload.tools.length) {\n\t\t\tconst next = nextPayload();\n\t\t\tif (tools.length > 0) {\n\t\t\t\tnext.tools = tools;\n\t\t\t} else {\n\t\t\t\tdelete next.tools;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (Array.isArray(payload.include)) {\n\t\tconst include = payload.include.filter((value) => value !== OPENAI_WEB_SEARCH_SOURCES_INCLUDE);\n\t\tif (include.length !== payload.include.length) {\n\t\t\tconst next = nextPayload();\n\t\t\tif (include.length > 0) {\n\t\t\t\tnext.include = include;\n\t\t\t} else {\n\t\t\t\tdelete next.include;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (isOpenAiWebSearchPreviewTool(payload.tool_choice)) {\n\t\tdelete nextPayload().tool_choice;\n\t}\n\n\treturn sanitized ? (sanitized as ResponseCreateParamsStreaming) : params;\n}\n\nfunction formatOpenAIResponsesError(error: unknown): string {\n\treturn formatProviderError(normalizeProviderError(error), \"OpenAI API error\");\n}\n\n// OpenAI Responses-specific options\nexport interface OpenAIResponsesOptions extends StreamOptions {\n\treasoningEffort?: \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\treasoningSummary?: \"auto\" | \"detailed\" | \"concise\" | null;\n\tserviceTier?: ResponseCreateParamsStreaming[\"service_tier\"] | \"fast\";\n\ttoolChoice?: ResponseCreateParamsStreaming[\"tool_choice\"];\n}\n\n/**\n * Generate function for OpenAI Responses API\n */\nexport const stream: StreamFunction<\"openai-responses\", OpenAIResponsesOptions> = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions?: OpenAIResponsesOptions,\n): AssistantMessageEventStream => {\n\tconst stream = new AssistantMessageEventStream();\n\n\t// Start async processing\n\t(async () => {\n\t\tconst output: AssistantMessage = {\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [],\n\t\t\tapi: model.api as Api,\n\t\t\tprovider: model.provider,\n\t\t\tmodel: model.id,\n\t\t\tusage: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"pending\",\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\ttry {\n\t\t\tconst clientAuth = resolveOpenAIClientAuth(model.provider, options?.apiKey, options?.headers);\n\t\t\tconst cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);\n\t\t\tconst cacheSessionId = cacheRetention === \"none\" ? undefined : options?.sessionId;\n\t\t\tconst compat = getCompat(model, options?.env);\n\t\t\tconst grammarToolInputProperties = createGrammarToolInputProperties(\n\t\t\t\tcontext.tools,\n\t\t\t\tcompat.supportsOpenAIGrammarTools,\n\t\t\t);\n\t\t\tconst client = createClient(\n\t\t\t\tmodel,\n\t\t\t\tcontext,\n\t\t\t\tclientAuth.apiKey,\n\t\t\t\tclientAuth.headers,\n\t\t\t\toptions?.fetch,\n\t\t\t\tcacheSessionId,\n\t\t\t\toptions?.env,\n\t\t\t);\n\t\t\tlet params = buildParams(model, context, options, compat, grammarToolInputProperties);\n\t\t\tconst nextParams = await options?.onPayload?.(params, model);\n\t\t\tif (nextParams !== undefined) {\n\t\t\t\tparams = nextParams as MutableResponsesPayload;\n\t\t\t}\n\n\t\t\tparams = sanitizeUnsupportedNativeTools(params, compat);\n\t\t\tconst transport = options?.transport ?? \"sse\";\n\t\t\tif (transport !== \"sse\" && compat.supportsWebSocket) {\n\t\t\t\tlet websocketStarted = false;\n\t\t\t\ttry {\n\t\t\t\t\tawait processWebSocketStream(\n\t\t\t\t\t\tresolveOpenAIResponsesWebSocketUrl(model, options?.env),\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\tbuildWebSocketHeaders(\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientAuth.apiKey,\n\t\t\t\t\t\t\tclientAuth.headers,\n\t\t\t\t\t\t\tcacheSessionId,\n\t\t\t\t\t\t\toptions?.env,\n\t\t\t\t\t\t),\n\t\t\t\t\t\toutput,\n\t\t\t\t\t\tstream,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\twebsocketStarted = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcacheSessionId,\n\t\t\t\t\t\tgrammarToolInputProperties,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (options?.signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Request was aborted\");\n\t\t\t\t\t}\n\n\t\t\t\t\tstream.push({ type: \"done\", reason: getDoneReason(output.stopReason), message: output });\n\t\t\t\t\tstream.end();\n\t\t\t\t\treturn;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (transport === \"websocket\" || websocketStarted) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst requestOptions = {\n\t\t\t\t...(options?.signal ? { signal: options.signal } : {}),\n\t\t\t\t...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),\n\t\t\t\tmaxRetries: 0,\n\t\t\t};\n\t\t\tconst { data: openaiStream, response } = await retryProviderRequest(\n\t\t\t\t() => client.responses.create(params, requestOptions).withResponse(),\n\t\t\t\t{\n\t\t\t\t\tmaxRetries: options?.maxRetries,\n\t\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\t\t\t\tsignal: options?.signal,\n\t\t\t\t},\n\t\t\t);\n\t\t\tawait options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);\n\t\t\tstream.push({ type: \"start\", partial: output });\n\n\t\t\tawait processResponsesStream(openaiStream, output, stream, model, {\n\t\t\t\tserviceTier: options?.serviceTier,\n\t\t\t\tgrammarToolInputProperties,\n\t\t\t\tapplyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model),\n\t\t\t});\n\n\t\t\tif (options?.signal?.aborted) {\n\t\t\t\tthrow new Error(\"Request was aborted\");\n\t\t\t}\n\n\t\t\tif (output.stopReason === \"pending\") {\n\t\t\t\tthrow new Error(\"OpenAI Responses stream ended without a stop reason\");\n\t\t\t}\n\t\t\tif (output.stopReason === \"aborted\" || output.stopReason === \"error\") {\n\t\t\t\tthrow new Error(output.errorMessage || \"An unknown error occurred\");\n\t\t\t}\n\n\t\t\tstream.push({ type: \"done\", reason: output.stopReason, message: output });\n\t\t\tstream.end();\n\t\t} catch (error) {\n\t\t\tfor (const block of output.content) {\n\t\t\t\tdelete (block as { index?: number }).index;\n\t\t\t\t// Streaming scratch buffers are only used during parsing; never persist them.\n\t\t\t\tdelete (block as { partialJson?: string }).partialJson;\n\t\t\t\tdelete (block as { customInput?: unknown }).customInput;\n\t\t\t}\n\t\t\toutput.stopReason = options?.signal?.aborted ? \"aborted\" : \"error\";\n\t\t\toutput.errorMessage = formatOpenAIResponsesError(error);\n\t\t\tstream.push({ type: \"error\", reason: output.stopReason, error: output });\n\t\t\tstream.end();\n\t\t}\n\t})();\n\n\treturn stream;\n};\n\nexport const streamSimple: StreamFunction<\"openai-responses\", SimpleStreamOptions> = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream => {\n\tresolveOpenAIClientAuth(model.provider, options?.apiKey, options?.headers);\n\n\tconst base = {\n\t\t...buildBaseOptions(model, context, options, options?.apiKey),\n\t\ttoolChoice: options?.toolChoice,\n\t\tserviceTier: options?.serviceTier,\n\t} satisfies OpenAIResponsesOptions;\n\tconst clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined;\n\tconst reasoningEffort =\n\t\tclampedReasoning === \"off\"\n\t\t\t? undefined\n\t\t\t: clampedReasoning === \"max\" && supportsMax(model)\n\t\t\t\t? \"max\"\n\t\t\t\t: clampMaxForOpenAI(clampedReasoning, supportsXhigh(model));\n\n\treturn stream(model, context, {\n\t\t...base,\n\t\treasoningEffort,\n\t} satisfies OpenAIResponsesOptions);\n};\n\nfunction createClient(\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\tapiKey: string,\n\toptionsHeaders?: ProviderHeaders,\n\tfetch?: typeof globalThis.fetch,\n\tsessionId?: string,\n\tenv?: ProviderEnv,\n) {\n\tconst compat = getCompat(model, env);\n\tconst headers: ProviderHeaders = { \"User-Agent\": getPiUserAgent(), ...model.headers };\n\tif (model.provider === \"github-copilot\") {\n\t\tconst hasImages = hasCopilotVisionInput(context.messages);\n\t\tconst copilotHeaders = buildCopilotDynamicHeaders({\n\t\t\tmessages: context.messages,\n\t\t\thasImages,\n\t\t});\n\t\tObject.assign(headers, copilotHeaders);\n\t}\n\n\tif (sessionId) {\n\t\tif (compat.sessionAffinityFormat === \"openrouter\") {\n\t\t\theaders[\"x-session-id\"] = sessionId;\n\t\t} else {\n\t\t\tif (compat.sessionAffinityFormat === \"openai\") {\n\t\t\t\theaders.session_id = sessionId;\n\t\t\t}\n\t\t\theaders[\"x-client-request-id\"] = sessionId;\n\t\t}\n\t}\n\n\t// Merge options headers last so they can override defaults\n\tif (optionsHeaders) {\n\t\tObject.assign(headers, optionsHeaders);\n\t}\n\n\treturn new OpenAI({\n\t\tapiKey,\n\t\tbaseURL: isCloudflareProvider(model.provider) ? resolveCloudflareBaseUrl(model, env) : model.baseUrl,\n\t\tdangerouslyAllowBrowser: true,\n\t\tfetch,\n\t\tdefaultHeaders: headers,\n\t});\n}\n\nfunction buildParams(\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions: OpenAIResponsesOptions | undefined,\n\tcompat: Required<OpenAIResponsesCompat> = getCompat(model, options?.env),\n\tgrammarToolInputProperties: ReadonlyMap<string, string> = createGrammarToolInputProperties(\n\t\tcontext.tools,\n\t\tcompat.supportsOpenAIGrammarTools,\n\t),\n) {\n\tconst deferredToolsMode = compat.supportsAdditionalTools\n\t\t? \"additional-tools\"\n\t\t: compat.supportsToolSearch\n\t\t\t? \"tool-search\"\n\t\t\t: undefined;\n\tconst toolPlacement = splitDeferredTools(context, deferredToolsMode !== undefined);\n\tconst requestedReasoningEffort = options?.reasoningEffort ?? (options?.reasoningSummary ? \"medium\" : undefined);\n\tconst thinkingLevelMap = inferOpenAIThinkingLevelMap(model);\n\tconst mappedReasoningEffort =\n\t\trequestedReasoningEffort === undefined ? undefined : thinkingLevelMap?.[requestedReasoningEffort];\n\tconst reasoningEffort = mappedReasoningEffort === undefined ? requestedReasoningEffort : mappedReasoningEffort;\n\tconst reasoningRequested = reasoningEffort !== undefined && reasoningEffort !== null;\n\tconst reasoningUnavailable = reasoningEffort === null;\n\tconst messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, {\n\t\tpreserveThinking: reasoningRequested,\n\t\tgrammarToolInputProperties,\n\t\tdeferredTools: toolPlacement.deferred,\n\t\tdeferredToolsMode,\n\t\ttoolOptions: {\n\t\t\tsupportsStrictMode: compat.supportsStrictMode,\n\t\t\tsupportsOpenAIGrammarTools: compat.supportsOpenAIGrammarTools,\n\t\t},\n\t});\n\n\tconst cacheRetention = resolveCacheRetention(options?.cacheRetention ?? model.cacheRetention, options?.env);\n\tconst params: MutableResponsesPayload = {\n\t\tmodel: model.id,\n\t\tinput: messages,\n\t\tstream: true,\n\t\tprompt_cache_key: cacheRetention === \"none\" ? undefined : clampOpenAIPromptCacheKey(options?.sessionId),\n\t\tprompt_cache_retention: getPromptCacheRetention(compat, cacheRetention),\n\t\tprompt_cache_options: getPromptCacheOptions(compat, cacheRetention),\n\t\tstore: false,\n\t};\n\n\tif (options?.maxTokens && compat.supportsMaxOutputTokens) {\n\t\tparams.max_output_tokens = Math.max(options.maxTokens, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS);\n\t}\n\n\tif (options?.temperature !== undefined) {\n\t\tparams.temperature = options?.temperature;\n\t}\n\n\tif (options?.serviceTier !== undefined) {\n\t\tparams.service_tier = options.serviceTier as ResponseCreateParamsStreaming[\"service_tier\"];\n\t}\n\n\tif (toolPlacement.immediate.length > 0) {\n\t\tparams.tools = convertResponsesTools(toolPlacement.immediate, {\n\t\t\tsupportsStrictMode: compat.supportsStrictMode,\n\t\t\tsupportsOpenAIGrammarTools: compat.supportsOpenAIGrammarTools,\n\t\t});\n\t}\n\n\tif (options?.toolChoice !== undefined) {\n\t\tparams.tool_choice = options.toolChoice;\n\t}\n\n\tif (model.reasoning) {\n\t\tif (reasoningRequested) {\n\t\t\tparams.reasoning = {\n\t\t\t\teffort: reasoningEffort as NonNullable<typeof params.reasoning>[\"effort\"],\n\t\t\t\t...(options?.reasoningSummary === null ? {} : { summary: options?.reasoningSummary || \"auto\" }),\n\t\t\t};\n\t\t\tparams.include = [\"reasoning.encrypted_content\"];\n\t\t} else if (!reasoningUnavailable && model.provider !== \"github-copilot\" && thinkingLevelMap?.off !== null) {\n\t\t\tparams.reasoning = {\n\t\t\t\teffort: (thinkingLevelMap?.off ?? \"none\") as NonNullable<typeof params.reasoning>[\"effort\"],\n\t\t\t};\n\t\t}\n\t\tif (model.provider === \"xai\") params.include = [\"reasoning.encrypted_content\"];\n\t}\n\n\tapplyExtraBodyToResponsesParams(params, options?.extraBody);\n\n\t// Last so custom keys override the named request fields.\n\tif (options?.samplingParams) {\n\t\tObject.assign(params, options.samplingParams);\n\t}\n\n\treturn params;\n}\n\nfunction applyExtraBodyToResponsesParams(\n\tparams: ResponseCreateParamsStreaming,\n\textraBody: Record<string, unknown> | undefined,\n): void {\n\tif (!extraBody) return;\n\tfor (const [key, value] of Object.entries(extraBody)) {\n\t\tif (OPENAI_RESPONSES_RESERVED_BODY_KEYS.has(key)) continue;\n\t\tObject.defineProperty(params, key, { value, writable: true, enumerable: true, configurable: true });\n\t}\n}\n\nfunction getDoneReason(stopReason: AssistantMessage[\"stopReason\"]): \"stop\" | \"length\" | \"toolUse\" {\n\tif (stopReason === \"length\" || stopReason === \"toolUse\") return stopReason;\n\treturn \"stop\";\n}\n\nfunction getWebSocketConstructor(): WebSocketConstructor | null {\n\tconst wsConstructor = (globalThis as { WebSocket?: WebSocketConstructor }).WebSocket;\n\treturn typeof wsConstructor === \"function\" ? wsConstructor : null;\n}\n\nfunction getWebSocketReadyState(socket: WebSocketLike): number | undefined {\n\tconst readyState = (socket as { readyState?: number }).readyState;\n\treturn typeof readyState === \"number\" ? readyState : undefined;\n}\n\nfunction isWebSocketReusable(socket: WebSocketLike): boolean {\n\tconst readyState = getWebSocketReadyState(socket);\n\treturn readyState === undefined || readyState === 1;\n}\n\nfunction closeWebSocketSilently(socket: WebSocketLike, code = 1000, reason = \"done\"): void {\n\ttry {\n\t\tsocket.close(code, reason);\n\t} catch {}\n}\n\n/**\n * Arms the idle-expiry for a cached session socket. A fire while the entry is\n * busy must not strand the entry: the holder may never run the release path\n * that schedules a fresh timer, and a cached-but-forgotten entry would pin its\n * socket for process lifetime. A live busy socket is re-checked on the next\n * tick; a dead one is dropped immediately because nothing can release it.\n */\nexport function scheduleSessionWebSocketExpiry(sessionId: string, entry: CachedWebSocketConnection): void {\n\tif (entry.idleTimer) {\n\t\tclearTimeout(entry.idleTimer);\n\t}\n\tentry.idleTimer = setTimeout(() => {\n\t\tif (entry.busy) {\n\t\t\tif (!isWebSocketReusable(entry.socket)) {\n\t\t\t\tcloseWebSocketSilently(entry.socket, 1000, \"idle_timeout_dead\");\n\t\t\t\twebsocketSessionCache.delete(sessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tscheduleSessionWebSocketExpiry(sessionId, entry);\n\t\t\treturn;\n\t\t}\n\t\tcloseWebSocketSilently(entry.socket, 1000, \"idle_timeout\");\n\t\twebsocketSessionCache.delete(sessionId);\n\t}, SESSION_WEBSOCKET_CACHE_TTL_MS);\n\tconst unref = (entry.idleTimer as { unref?: () => void }).unref;\n\tif (unref) unref.call(entry.idleTimer);\n}\n\n/** Number of sessions holding a cached websocket (diagnostics). */\nexport function getOpenAIResponsesWebSocketCacheSize(): number {\n\treturn websocketSessionCache.size;\n}\n\nasync function connectWebSocket(url: string, headers: Headers, signal?: AbortSignal): Promise<WebSocketLike> {\n\tconst WebSocketConstructorValue = getWebSocketConstructor();\n\tif (!WebSocketConstructorValue) {\n\t\tthrow new Error(\"WebSocket transport is not available in this runtime\");\n\t}\n\n\tconst websocketHeaders = headersToRecord(headers);\n\n\treturn new Promise<WebSocketLike>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet socket: WebSocketLike;\n\n\t\tconst cleanup = () => {\n\t\t\ttransportFailure.dispose();\n\t\t\tsocket.removeEventListener(\"open\", onOpen);\n\t\t\tsocket.removeEventListener(\"error\", onError);\n\t\t\tsocket.removeEventListener(\"close\", onClose);\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst settleReject = (error: Error) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(error);\n\t\t};\n\t\tconst transportFailure = createWebSocketTransportFailure(settleReject);\n\t\tconst onOpen: WebSocketListener = () => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tresolve(socket);\n\t\t};\n\t\tconst onError: WebSocketListener = (event) => {\n\t\t\ttransportFailure.onError(event);\n\t\t};\n\t\tconst onClose: WebSocketListener = (event) => {\n\t\t\ttransportFailure.onClose(event);\n\t\t};\n\t\tconst onAbort = () => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tcloseWebSocketSilently(socket, 1000, \"aborted\");\n\t\t\treject(new Error(\"Request was aborted\"));\n\t\t};\n\n\t\ttry {\n\t\t\tsocket = new WebSocketConstructorValue(url, { headers: websocketHeaders });\n\t\t} catch (error) {\n\t\t\treject(error instanceof Error ? error : new Error(String(error)));\n\t\t\treturn;\n\t\t}\n\n\t\tsocket.addEventListener(\"open\", onOpen);\n\t\tsocket.addEventListener(\"error\", onError);\n\t\tsocket.addEventListener(\"close\", onClose);\n\t\tsignal?.addEventListener(\"abort\", onAbort);\n\t});\n}\n\nasync function acquireWebSocket(\n\turl: string,\n\theaders: Headers,\n\tsessionId: string | undefined,\n\tsignal?: AbortSignal,\n): Promise<{ socket: WebSocketLike; release: (options?: { keep?: boolean }) => void }> {\n\tif (!sessionId) {\n\t\tconst socket = await connectWebSocket(url, headers, signal);\n\t\treturn { socket, release: () => closeWebSocketSilently(socket) };\n\t}\n\n\tconst cached = websocketSessionCache.get(sessionId);\n\tif (cached) {\n\t\tif (cached.idleTimer) {\n\t\t\tclearTimeout(cached.idleTimer);\n\t\t\tcached.idleTimer = undefined;\n\t\t}\n\t\tif (!cached.busy && isWebSocketReusable(cached.socket)) {\n\t\t\tcached.busy = true;\n\t\t\treturn {\n\t\t\t\tsocket: cached.socket,\n\t\t\t\trelease: ({ keep } = {}) => {\n\t\t\t\t\tif (!keep || !isWebSocketReusable(cached.socket)) {\n\t\t\t\t\t\tcloseWebSocketSilently(cached.socket);\n\t\t\t\t\t\twebsocketSessionCache.delete(sessionId);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcached.busy = false;\n\t\t\t\t\tscheduleSessionWebSocketExpiry(sessionId, cached);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (!cached.busy) {\n\t\t\tcloseWebSocketSilently(cached.socket);\n\t\t\twebsocketSessionCache.delete(sessionId);\n\t\t}\n\t}\n\n\tconst socket = await connectWebSocket(url, headers, signal);\n\tconst entry: CachedWebSocketConnection = { socket, busy: true };\n\twebsocketSessionCache.set(sessionId, entry);\n\treturn {\n\t\tsocket,\n\t\trelease: ({ keep } = {}) => {\n\t\t\tif (!keep || !isWebSocketReusable(entry.socket)) {\n\t\t\t\tcloseWebSocketSilently(entry.socket);\n\t\t\t\tif (entry.idleTimer) clearTimeout(entry.idleTimer);\n\t\t\t\tif (websocketSessionCache.get(sessionId) === entry) {\n\t\t\t\t\twebsocketSessionCache.delete(sessionId);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tentry.busy = false;\n\t\t\tscheduleSessionWebSocketExpiry(sessionId, entry);\n\t\t},\n\t};\n}\n\nasync function decodeWebSocketData(data: unknown): Promise<string | null> {\n\tif (typeof data === \"string\") return data;\n\tif (data instanceof ArrayBuffer) {\n\t\treturn new TextDecoder().decode(new Uint8Array(data));\n\t}\n\tif (ArrayBuffer.isView(data)) {\n\t\treturn new TextDecoder().decode(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\n\t}\n\tif (data && typeof data === \"object\" && \"arrayBuffer\" in data) {\n\t\tconst arrayBuffer = await (data as { arrayBuffer: () => Promise<ArrayBuffer> }).arrayBuffer();\n\t\treturn new TextDecoder().decode(new Uint8Array(arrayBuffer));\n\t}\n\treturn null;\n}\n\nasync function* parseWebSocket(socket: WebSocketLike, signal?: AbortSignal): AsyncGenerator<ResponseStreamEvent> {\n\tconst queue: ResponseStreamEvent[] = [];\n\tlet pending: (() => void) | null = null;\n\tlet done = false;\n\tlet failed: Error | null = null;\n\tlet sawCompletion = false;\n\n\tconst wake = () => {\n\t\tif (!pending) return;\n\t\tconst resolve = pending;\n\t\tpending = null;\n\t\tresolve();\n\t};\n\tconst liveness = startWebSocketLiveness(socket, (error) => {\n\t\tfailed = error;\n\t\tdone = true;\n\t\tcloseWebSocketSilently(socket, 1000, \"liveness_timeout\");\n\t\twake();\n\t});\n\tconst onMessage: WebSocketListener = (event) => {\n\t\tliveness.noteActivity();\n\t\tvoid (async () => {\n\t\t\tif (!event || typeof event !== \"object\" || !(\"data\" in event)) return;\n\t\t\tconst text = await decodeWebSocketData((event as { data?: unknown }).data);\n\t\t\tif (!text) return;\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(text) as ResponseStreamEvent;\n\t\t\t\tif (parsed.type === \"response.completed\" || parsed.type === \"response.incomplete\") {\n\t\t\t\t\tsawCompletion = true;\n\t\t\t\t\tdone = true;\n\t\t\t\t}\n\t\t\t\tqueue.push(parsed);\n\t\t\t\twake();\n\t\t\t} catch {}\n\t\t})();\n\t};\n\tconst transportFailure = createWebSocketTransportFailure((error) => {\n\t\tif (!failed) failed = error;\n\t\tdone = true;\n\t\twake();\n\t});\n\tconst onError: WebSocketListener = (event) => {\n\t\ttransportFailure.onError(event);\n\t};\n\tconst onClose: WebSocketListener = (event) => {\n\t\tif (sawCompletion) {\n\t\t\ttransportFailure.dispose();\n\t\t\tdone = true;\n\t\t\twake();\n\t\t\treturn;\n\t\t}\n\t\ttransportFailure.onClose(event);\n\t};\n\tconst onAbort = () => {\n\t\tfailed = new Error(\"Request was aborted\");\n\t\tdone = true;\n\t\twake();\n\t};\n\n\tsocket.addEventListener(\"message\", onMessage);\n\tsocket.addEventListener(\"error\", onError);\n\tsocket.addEventListener(\"close\", onClose);\n\tsignal?.addEventListener(\"abort\", onAbort);\n\ttry {\n\t\twhile (true) {\n\t\t\tif (signal?.aborted) throw new Error(\"Request was aborted\");\n\t\t\tif (queue.length > 0) {\n\t\t\t\tconst event = queue.shift();\n\t\t\t\tif (event) yield event;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (done) break;\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tpending = resolve;\n\t\t\t});\n\t\t}\n\t\tif (failed) throw failed;\n\t\tif (!sawCompletion) throw new Error(\"WebSocket stream closed before response.completed\");\n\t} finally {\n\t\tliveness.stop();\n\t\ttransportFailure.dispose();\n\t\tsocket.removeEventListener(\"message\", onMessage);\n\t\tsocket.removeEventListener(\"error\", onError);\n\t\tsocket.removeEventListener(\"close\", onClose);\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nasync function processWebSocketStream(\n\turl: string,\n\tparams: ResponseCreateParamsStreaming,\n\theaders: Headers,\n\toutput: AssistantMessage,\n\tstream: AssistantMessageEventStream,\n\tmodel: Model<\"openai-responses\">,\n\tonStart: () => void,\n\tcacheSessionId: string | undefined,\n\tgrammarToolInputProperties: ReadonlyMap<string, string>,\n\toptions?: OpenAIResponsesOptions,\n): Promise<void> {\n\tconst { socket, release } = await acquireWebSocket(url, headers, cacheSessionId, options?.signal);\n\ttry {\n\t\tsocket.send(JSON.stringify({ type: \"response.create\", ...params }));\n\t\tonStart();\n\t\tawait options?.onResponse?.({ status: 101, headers: {} }, model);\n\t\tstream.push({ type: \"start\", partial: output });\n\t\tawait processResponsesStream(parseWebSocket(socket, options?.signal), output, stream, model, {\n\t\t\tserviceTier: options?.serviceTier,\n\t\t\tgrammarToolInputProperties,\n\t\t\tapplyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model),\n\t\t});\n\t} finally {\n\t\trelease({ keep: false });\n\t}\n}\n\nfunction resolveOpenAIResponsesWebSocketUrl(model: Model<\"openai-responses\">, env?: ProviderEnv): string {\n\tconst baseUrl = isCloudflareProvider(model.provider)\n\t\t? resolveCloudflareBaseUrl(model, env)\n\t\t: model.baseUrl || \"https://api.openai.com/v1\";\n\tconst url = new URL(baseUrl);\n\tif (!url.pathname.endsWith(\"/responses\")) {\n\t\turl.pathname = `${url.pathname.replace(/\\/$/, \"\")}/responses`;\n\t}\n\tif (url.protocol === \"https:\") url.protocol = \"wss:\";\n\telse if (url.protocol === \"http:\") url.protocol = \"ws:\";\n\treturn url.toString();\n}\n\nfunction buildWebSocketHeaders(\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\tapiKey: string,\n\toptionsHeaders?: ProviderHeaders,\n\tsessionId?: string,\n\tenv?: ProviderEnv,\n): Headers {\n\tconst headers = new Headers(model.headers);\n\tlet suppressDefaultAuthorization = false;\n\tif (model.provider === \"github-copilot\") {\n\t\tconst hasImages = hasCopilotVisionInput(context.messages);\n\t\tconst copilotHeaders = buildCopilotDynamicHeaders({ messages: context.messages, hasImages });\n\t\tfor (const [key, value] of Object.entries(copilotHeaders)) {\n\t\t\theaders.set(key, value);\n\t\t}\n\t}\n\tfor (const [key, value] of Object.entries(optionsHeaders || {})) {\n\t\tif (value === null) {\n\t\t\tif (key.toLowerCase() === \"authorization\") suppressDefaultAuthorization = true;\n\t\t\theaders.delete(key);\n\t\t} else {\n\t\t\theaders.set(key, value);\n\t\t}\n\t}\n\tif (!suppressDefaultAuthorization && !headers.has(\"Authorization\")) {\n\t\theaders.set(\"Authorization\", `Bearer ${apiKey}`);\n\t}\n\tif (sessionId) {\n\t\tconst compat = getCompat(model, env);\n\t\tif (compat.sessionAffinityFormat === \"openai\") {\n\t\t\theaders.set(\"session_id\", sessionId);\n\t\t}\n\t\tif (compat.sessionAffinityFormat === \"openai\" || compat.sessionAffinityFormat === \"openai-nosession\") {\n\t\t\theaders.set(\"x-client-request-id\", sessionId);\n\t\t} else if (compat.sessionAffinityFormat === \"openrouter\") {\n\t\t\theaders.set(\"x-session-id\", sessionId);\n\t\t}\n\t}\n\theaders.delete(\"accept\");\n\theaders.delete(\"content-type\");\n\theaders.delete(\"OpenAI-Beta\");\n\theaders.delete(\"openai-beta\");\n\theaders.set(\"OpenAI-Beta\", OPENAI_BETA_RESPONSES_WEBSOCKETS);\n\treturn headers;\n}\n\nfunction getServiceTierCostMultiplier(\n\tmodel: Pick<Model<\"openai-responses\">, \"id\">,\n\tserviceTier: ResponseCreateParamsStreaming[\"service_tier\"] | \"fast\" | undefined,\n): number {\n\tswitch (serviceTier) {\n\t\tcase \"flex\":\n\t\t\treturn 0.5;\n\t\tcase \"priority\":\n\t\tcase \"fast\":\n\t\t\treturn model.id === \"gpt-5.5\" ? 2.5 : 2;\n\t\tdefault:\n\t\t\treturn 1;\n\t}\n}\n\nfunction applyServiceTierPricing(\n\tusage: Usage,\n\tserviceTier: ResponseCreateParamsStreaming[\"service_tier\"] | \"fast\" | undefined,\n\tmodel: Pick<Model<\"openai-responses\">, \"id\">,\n) {\n\tconst multiplier = getServiceTierCostMultiplier(model, serviceTier);\n\tif (multiplier === 1) return;\n\n\tusage.cost.input *= multiplier;\n\tusage.cost.output *= multiplier;\n\tusage.cost.cacheRead *= multiplier;\n\tusage.cost.cacheWrite *= multiplier;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n}\n"]}
1
+ {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/api/openai-responses.ts"],"names":[],"mappings":"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","sourcesContent":["import OpenAI from \"openai\";\nimport type { ResponseCreateParamsStreaming, ResponseStreamEvent } from \"openai/resources/responses/responses.js\";\nimport { clampThinkingLevel, inferOpenAIThinkingLevelMap, supportsMax, supportsXhigh } from \"../models.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tCacheRetention,\n\tContext,\n\tModel,\n\tOpenAIResponsesCompat,\n\tProviderEnv,\n\tProviderHeaders,\n\tSimpleStreamOptions,\n\tStreamFunction,\n\tStreamOptions,\n\tUsage,\n} from \"../types.ts\";\nimport { splitDeferredTools } from \"../utils/deferred-tools.ts\";\nimport { formatProviderError, normalizeProviderError } from \"../utils/error-body.ts\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { headersToRecord } from \"../utils/headers.ts\";\nimport { getPiUserAgent } from \"../utils/pi-user-agent.ts\";\nimport { getProviderEnvValue } from \"../utils/provider-env.ts\";\nimport { retryProviderRequest } from \"../utils/provider-retry.ts\";\nimport { isCloudflareProvider, resolveCloudflareBaseUrl } from \"./cloudflare.ts\";\nimport { createGrammarToolInputProperties } from \"./constrained-sampling.ts\";\nimport { buildCopilotDynamicHeaders, hasCopilotVisionInput } from \"./github-copilot-headers.ts\";\nimport { resolveOpenAIClientAuth } from \"./openai-client-auth.ts\";\nimport { clampOpenAIPromptCacheKey } from \"./openai-prompt-cache.ts\";\nimport { convertResponsesMessages, convertResponsesTools, processResponsesStream } from \"./openai-responses-shared.ts\";\nimport { buildBaseOptions, clampMaxForOpenAI, OPENAI_RESPONSES_RESERVED_BODY_KEYS } from \"./simple-options.ts\";\nimport { startWebSocketLiveness } from \"./websocket-liveness.ts\";\nimport { createWebSocketTransportFailure } from \"./websocket-transport-failure.ts\";\n\nconst OPENAI_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"chatgpt-subscription\", \"opencode\"]);\nconst OPENAI_BETA_RESPONSES_WEBSOCKETS = \"responses_websockets=2026-02-06\";\nconst OPENAI_WEB_SEARCH_SOURCES_INCLUDE = \"web_search_call.action.sources\";\nconst SESSION_WEBSOCKET_CACHE_TTL_MS = 5 * 60 * 1000;\n// OpenAI Responses rejects max_output_tokens below 16: https://github.com/earendil-works/pi/issues/6265\nconst OPENAI_RESPONSES_MIN_OUTPUT_TOKENS = 16;\n\ntype WebSocketEventType = \"open\" | \"message\" | \"error\" | \"close\" | \"ping\" | \"pong\";\ntype WebSocketListener = (event: unknown) => void;\n\ninterface WebSocketLike {\n\tping?(data?: string): void;\n\tclose(code?: number, reason?: string): void;\n\tsend(data: string): void;\n\taddEventListener(type: WebSocketEventType, listener: WebSocketListener): void;\n\tremoveEventListener(type: WebSocketEventType, listener: WebSocketListener): void;\n}\n\nexport interface CachedWebSocketConnection {\n\tsocket: WebSocketLike;\n\tbusy: boolean;\n\tidleTimer?: ReturnType<typeof setTimeout>;\n}\n\ntype WebSocketConstructor = new (\n\turl: string,\n\tprotocols?: string | string[] | { headers?: Record<string, string> },\n) => WebSocketLike;\n\ntype MutableResponsesPayload = ResponseCreateParamsStreaming & {\n\tprompt_cache_options?: { mode?: \"explicit\" | \"implicit\"; ttl?: \"30m\" };\n};\n\nconst websocketSessionCache = new Map<string, CachedWebSocketConnection>();\n\nfunction detectSessionAffinityFormat(model: Pick<Model<\"openai-responses\">, \"provider\" | \"baseUrl\">) {\n\treturn model.provider === \"openrouter\" || model.baseUrl.includes(\"openrouter.ai\") ? \"openrouter\" : \"openai\";\n}\n\n/**\n * Resolve cache retention preference.\n * Defaults to \"short\" and uses PI_CACHE_RETENTION for backward compatibility.\n */\nfunction resolveCacheRetention(cacheRetention?: CacheRetention, env?: ProviderEnv): CacheRetention {\n\tif (cacheRetention) {\n\t\treturn cacheRetention;\n\t}\n\tif (getProviderEnvValue(\"PI_CACHE_RETENTION\", env) === \"long\") {\n\t\treturn \"long\";\n\t}\n\treturn \"short\";\n}\n\nfunction getCompat(model: Model<\"openai-responses\">, env?: ProviderEnv): Required<OpenAIResponsesCompat> {\n\tconst isNativeEndpoint = isOpenAIResponsesNativeEndpoint(model, env);\n\treturn {\n\t\tsupportsDeveloperRole: model.compat?.supportsDeveloperRole ?? true,\n\t\tsessionAffinityFormat: model.compat?.sessionAffinityFormat ?? detectSessionAffinityFormat(model),\n\t\tsupportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,\n\t\tsupportsWebSocket: model.compat?.supportsWebSocket ?? isNativeEndpoint,\n\t\tsupportsRemoteCompactionV2: model.compat?.supportsRemoteCompactionV2 ?? isNativeEndpoint,\n\t\tsupportsWebSearchPreview: model.compat?.supportsWebSearchPreview ?? isNativeEndpoint,\n\t\tsupportsImageGeneration: model.compat?.supportsImageGeneration ?? isNativeEndpoint,\n\t\tsupportsStrictMode: model.compat?.supportsStrictMode ?? false,\n\t\tsupportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false,\n\t\tsupportsAdditionalTools: model.compat?.supportsAdditionalTools ?? false,\n\t\tsupportsToolSearch: model.compat?.supportsToolSearch ?? false,\n\t\tsupportsExplicitPromptCacheMode: model.compat?.supportsExplicitPromptCacheMode ?? false,\n\t\tsupportsMaxOutputTokens: model.compat?.supportsMaxOutputTokens ?? true,\n\t};\n}\n\nfunction isOpenAIResponsesNativeEndpoint(model: Model<\"openai-responses\">, env?: ProviderEnv): boolean {\n\tconst baseUrl = isCloudflareProvider(model.provider) ? resolveCloudflareBaseUrl(model, env) : model.baseUrl;\n\ttry {\n\t\treturn new URL(baseUrl || \"https://api.openai.com/v1\").hostname === \"api.openai.com\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction getPromptCacheRetention(\n\tcompat: Required<OpenAIResponsesCompat>,\n\tcacheRetention: CacheRetention,\n): \"24h\" | undefined {\n\treturn cacheRetention === \"long\" && compat.supportsLongCacheRetention && !compat.supportsExplicitPromptCacheMode\n\t\t? \"24h\"\n\t\t: undefined;\n}\n\nfunction getPromptCacheOptions(\n\tcompat: Required<OpenAIResponsesCompat>,\n\tcacheRetention: CacheRetention,\n): { mode?: \"explicit\"; ttl?: \"30m\" } | undefined {\n\tif (!compat.supportsExplicitPromptCacheMode) return undefined;\n\tif (cacheRetention === \"none\") return { mode: \"explicit\" };\n\tif (cacheRetention === \"long\" && compat.supportsLongCacheRetention) return { ttl: \"30m\" };\n\treturn undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isOpenAiWebSearchPreviewTool(value: unknown): boolean {\n\treturn isRecord(value) && (value.type === \"web_search_preview\" || value.type === \"web_search_preview_2025_03_11\");\n}\n\nfunction sanitizeUnsupportedNativeTools(\n\tparams: MutableResponsesPayload,\n\tcompat: Required<OpenAIResponsesCompat>,\n): MutableResponsesPayload {\n\tif (compat.supportsWebSearchPreview) {\n\t\treturn params;\n\t}\n\n\tconst payload = params as MutableResponsesPayload;\n\tlet sanitized: MutableResponsesPayload | undefined;\n\tconst nextPayload = (): MutableResponsesPayload => {\n\t\tsanitized ??= { ...payload };\n\t\treturn sanitized;\n\t};\n\n\tif (Array.isArray(payload.tools)) {\n\t\tconst tools = payload.tools.filter((tool) => !isOpenAiWebSearchPreviewTool(tool));\n\t\tif (tools.length !== payload.tools.length) {\n\t\t\tconst next = nextPayload();\n\t\t\tif (tools.length > 0) {\n\t\t\t\tnext.tools = tools;\n\t\t\t} else {\n\t\t\t\tdelete next.tools;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (Array.isArray(payload.include)) {\n\t\tconst include = payload.include.filter((value) => value !== OPENAI_WEB_SEARCH_SOURCES_INCLUDE);\n\t\tif (include.length !== payload.include.length) {\n\t\t\tconst next = nextPayload();\n\t\t\tif (include.length > 0) {\n\t\t\t\tnext.include = include;\n\t\t\t} else {\n\t\t\t\tdelete next.include;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (isOpenAiWebSearchPreviewTool(payload.tool_choice)) {\n\t\tdelete nextPayload().tool_choice;\n\t}\n\n\treturn sanitized ? (sanitized as ResponseCreateParamsStreaming) : params;\n}\n\nfunction formatOpenAIResponsesError(error: unknown): string {\n\treturn formatProviderError(normalizeProviderError(error), \"OpenAI API error\");\n}\n\n// OpenAI Responses-specific options\nexport interface OpenAIResponsesOptions extends StreamOptions {\n\treasoningEffort?: \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\treasoningSummary?: \"auto\" | \"detailed\" | \"concise\" | null;\n\tserviceTier?: ResponseCreateParamsStreaming[\"service_tier\"] | \"fast\";\n\ttoolChoice?: ResponseCreateParamsStreaming[\"tool_choice\"];\n}\n\n/**\n * Generate function for OpenAI Responses API\n */\nexport const stream: StreamFunction<\"openai-responses\", OpenAIResponsesOptions> = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions?: OpenAIResponsesOptions,\n): AssistantMessageEventStream => {\n\tconst stream = new AssistantMessageEventStream();\n\n\t// Start async processing\n\t(async () => {\n\t\tconst output: AssistantMessage = {\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [],\n\t\t\tapi: model.api as Api,\n\t\t\tprovider: model.provider,\n\t\t\tmodel: model.id,\n\t\t\tusage: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"pending\",\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\ttry {\n\t\t\tconst clientAuth = resolveOpenAIClientAuth(model.provider, options?.apiKey, options?.headers);\n\t\t\tconst cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);\n\t\t\tconst cacheSessionId = cacheRetention === \"none\" ? undefined : options?.sessionId;\n\t\t\tconst compat = getCompat(model, options?.env);\n\t\t\tconst grammarToolInputProperties = createGrammarToolInputProperties(\n\t\t\t\tcontext.tools,\n\t\t\t\tcompat.supportsOpenAIGrammarTools,\n\t\t\t);\n\t\t\tconst client = createClient(\n\t\t\t\tmodel,\n\t\t\t\tcontext,\n\t\t\t\tclientAuth.apiKey,\n\t\t\t\tclientAuth.headers,\n\t\t\t\toptions?.fetch,\n\t\t\t\tcacheSessionId,\n\t\t\t\toptions?.env,\n\t\t\t);\n\t\t\tlet params = buildParams(model, context, options, compat, grammarToolInputProperties);\n\t\t\tconst nextParams = await options?.onPayload?.(params, model);\n\t\t\tif (nextParams !== undefined) {\n\t\t\t\tparams = nextParams as MutableResponsesPayload;\n\t\t\t}\n\n\t\t\tparams = sanitizeUnsupportedNativeTools(params, compat);\n\t\t\tconst transport = options?.transport ?? \"sse\";\n\t\t\tif (transport !== \"sse\" && compat.supportsWebSocket) {\n\t\t\t\tlet websocketStarted = false;\n\t\t\t\ttry {\n\t\t\t\t\tawait processWebSocketStream(\n\t\t\t\t\t\tresolveOpenAIResponsesWebSocketUrl(model, options?.env),\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\tbuildWebSocketHeaders(\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientAuth.apiKey,\n\t\t\t\t\t\t\tclientAuth.headers,\n\t\t\t\t\t\t\tcacheSessionId,\n\t\t\t\t\t\t\toptions?.env,\n\t\t\t\t\t\t),\n\t\t\t\t\t\toutput,\n\t\t\t\t\t\tstream,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\twebsocketStarted = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcacheSessionId,\n\t\t\t\t\t\tgrammarToolInputProperties,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (options?.signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Request was aborted\");\n\t\t\t\t\t}\n\n\t\t\t\t\tstream.push({ type: \"done\", reason: getDoneReason(output.stopReason), message: output });\n\t\t\t\t\tstream.end();\n\t\t\t\t\treturn;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (transport === \"websocket\" || websocketStarted) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst requestOptions = {\n\t\t\t\t...(options?.signal ? { signal: options.signal } : {}),\n\t\t\t\t...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),\n\t\t\t\tmaxRetries: 0,\n\t\t\t};\n\t\t\tconst { data: openaiStream, response } = await retryProviderRequest(\n\t\t\t\t() => client.responses.create(params, requestOptions).withResponse(),\n\t\t\t\t{\n\t\t\t\t\tmaxRetries: options?.maxRetries,\n\t\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\t\t\t\tsignal: options?.signal,\n\t\t\t\t},\n\t\t\t);\n\t\t\tawait options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);\n\t\t\tstream.push({ type: \"start\", partial: output });\n\n\t\t\tawait processResponsesStream(openaiStream, output, stream, model, {\n\t\t\t\tserviceTier: options?.serviceTier,\n\t\t\t\tgrammarToolInputProperties,\n\t\t\t\tapplyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model),\n\t\t\t});\n\n\t\t\tif (options?.signal?.aborted) {\n\t\t\t\tthrow new Error(\"Request was aborted\");\n\t\t\t}\n\n\t\t\tif (output.stopReason === \"pending\") {\n\t\t\t\tthrow new Error(\"OpenAI Responses stream ended without a stop reason\");\n\t\t\t}\n\t\t\tif (output.stopReason === \"aborted\" || output.stopReason === \"error\") {\n\t\t\t\tthrow new Error(output.errorMessage || \"An unknown error occurred\");\n\t\t\t}\n\n\t\t\tstream.push({ type: \"done\", reason: output.stopReason, message: output });\n\t\t\tstream.end();\n\t\t} catch (error) {\n\t\t\tfor (const block of output.content) {\n\t\t\t\tdelete (block as { index?: number }).index;\n\t\t\t\t// Streaming scratch buffers are only used during parsing; never persist them.\n\t\t\t\tdelete (block as { partialJson?: string }).partialJson;\n\t\t\t\tdelete (block as { customInput?: unknown }).customInput;\n\t\t\t}\n\t\t\toutput.stopReason = options?.signal?.aborted ? \"aborted\" : \"error\";\n\t\t\toutput.errorMessage = formatOpenAIResponsesError(error);\n\t\t\tstream.push({ type: \"error\", reason: output.stopReason, error: output });\n\t\t\tstream.end();\n\t\t}\n\t})();\n\n\treturn stream;\n};\n\nexport const streamSimple: StreamFunction<\"openai-responses\", SimpleStreamOptions> = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream => {\n\tresolveOpenAIClientAuth(model.provider, options?.apiKey, options?.headers);\n\n\tconst base = {\n\t\t...buildBaseOptions(model, context, options, options?.apiKey),\n\t\ttoolChoice: options?.toolChoice,\n\t\tserviceTier: options?.serviceTier,\n\t} satisfies OpenAIResponsesOptions;\n\tconst clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined;\n\tconst reasoningEffort =\n\t\tclampedReasoning === \"off\"\n\t\t\t? undefined\n\t\t\t: clampedReasoning === \"max\" && supportsMax(model)\n\t\t\t\t? \"max\"\n\t\t\t\t: clampMaxForOpenAI(clampedReasoning, supportsXhigh(model));\n\n\treturn stream(model, context, {\n\t\t...base,\n\t\treasoningEffort,\n\t} satisfies OpenAIResponsesOptions);\n};\n\nfunction createClient(\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\tapiKey: string,\n\toptionsHeaders?: ProviderHeaders,\n\tfetch?: typeof globalThis.fetch,\n\tsessionId?: string,\n\tenv?: ProviderEnv,\n) {\n\tconst compat = getCompat(model, env);\n\tconst headers: ProviderHeaders = { \"User-Agent\": getPiUserAgent(), ...model.headers };\n\tif (model.provider === \"github-copilot\") {\n\t\tconst hasImages = hasCopilotVisionInput(context.messages);\n\t\tconst copilotHeaders = buildCopilotDynamicHeaders({\n\t\t\tmessages: context.messages,\n\t\t\thasImages,\n\t\t});\n\t\tObject.assign(headers, copilotHeaders);\n\t}\n\n\tif (sessionId) {\n\t\tif (compat.sessionAffinityFormat === \"openrouter\") {\n\t\t\theaders[\"x-session-id\"] = sessionId;\n\t\t} else {\n\t\t\tif (compat.sessionAffinityFormat === \"openai\") {\n\t\t\t\theaders.session_id = sessionId;\n\t\t\t}\n\t\t\theaders[\"x-client-request-id\"] = sessionId;\n\t\t}\n\t}\n\n\t// Merge options headers last so they can override defaults\n\tif (optionsHeaders) {\n\t\tObject.assign(headers, optionsHeaders);\n\t}\n\n\treturn new OpenAI({\n\t\tapiKey,\n\t\tbaseURL: isCloudflareProvider(model.provider) ? resolveCloudflareBaseUrl(model, env) : model.baseUrl,\n\t\tdangerouslyAllowBrowser: true,\n\t\tfetch,\n\t\tdefaultHeaders: headers,\n\t});\n}\n\nfunction buildParams(\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions: OpenAIResponsesOptions | undefined,\n\tcompat: Required<OpenAIResponsesCompat> = getCompat(model, options?.env),\n\tgrammarToolInputProperties: ReadonlyMap<string, string> = createGrammarToolInputProperties(\n\t\tcontext.tools,\n\t\tcompat.supportsOpenAIGrammarTools,\n\t),\n) {\n\tconst deferredToolsMode = compat.supportsAdditionalTools\n\t\t? \"additional-tools\"\n\t\t: compat.supportsToolSearch\n\t\t\t? \"tool-search\"\n\t\t\t: undefined;\n\tconst toolPlacement = splitDeferredTools(context, deferredToolsMode !== undefined);\n\tconst requestedReasoningEffort = options?.reasoningEffort ?? (options?.reasoningSummary ? \"medium\" : undefined);\n\tconst thinkingLevelMap = inferOpenAIThinkingLevelMap(model);\n\tconst mappedReasoningEffort =\n\t\trequestedReasoningEffort === undefined ? undefined : thinkingLevelMap?.[requestedReasoningEffort];\n\tconst reasoningEffort = mappedReasoningEffort === undefined ? requestedReasoningEffort : mappedReasoningEffort;\n\tconst reasoningRequested = reasoningEffort !== undefined && reasoningEffort !== null;\n\tconst reasoningUnavailable = reasoningEffort === null;\n\tconst messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, {\n\t\tpreserveThinking: reasoningRequested,\n\t\tgrammarToolInputProperties,\n\t\tdeferredTools: toolPlacement.deferred,\n\t\tdeferredToolsMode,\n\t\ttoolOptions: {\n\t\t\tsupportsStrictMode: compat.supportsStrictMode,\n\t\t\tsupportsOpenAIGrammarTools: compat.supportsOpenAIGrammarTools,\n\t\t},\n\t});\n\n\tconst cacheRetention = resolveCacheRetention(options?.cacheRetention ?? model.cacheRetention, options?.env);\n\tconst params: MutableResponsesPayload = {\n\t\tmodel: model.id,\n\t\tinput: messages,\n\t\tstream: true,\n\t\tprompt_cache_key: cacheRetention === \"none\" ? undefined : clampOpenAIPromptCacheKey(options?.sessionId),\n\t\tprompt_cache_retention: getPromptCacheRetention(compat, cacheRetention),\n\t\tprompt_cache_options: getPromptCacheOptions(compat, cacheRetention),\n\t\tstore: false,\n\t};\n\n\tif (options?.maxTokens && compat.supportsMaxOutputTokens) {\n\t\tparams.max_output_tokens = Math.max(options.maxTokens, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS);\n\t}\n\n\tif (options?.temperature !== undefined) {\n\t\tparams.temperature = options?.temperature;\n\t}\n\n\tif (options?.serviceTier !== undefined) {\n\t\tparams.service_tier = options.serviceTier as ResponseCreateParamsStreaming[\"service_tier\"];\n\t}\n\n\tif (toolPlacement.immediate.length > 0) {\n\t\tparams.tools = convertResponsesTools(toolPlacement.immediate, {\n\t\t\tsupportsStrictMode: compat.supportsStrictMode,\n\t\t\tsupportsOpenAIGrammarTools: compat.supportsOpenAIGrammarTools,\n\t\t});\n\t}\n\n\tif (options?.toolChoice !== undefined) {\n\t\tparams.tool_choice = options.toolChoice;\n\t}\n\n\tif (model.reasoning) {\n\t\tif (reasoningRequested) {\n\t\t\tparams.reasoning = {\n\t\t\t\teffort: reasoningEffort as NonNullable<typeof params.reasoning>[\"effort\"],\n\t\t\t\t...(options?.reasoningSummary === null ? {} : { summary: options?.reasoningSummary || \"auto\" }),\n\t\t\t};\n\t\t\tparams.include = [\"reasoning.encrypted_content\"];\n\t\t} else if (!reasoningUnavailable && model.provider !== \"github-copilot\" && thinkingLevelMap?.off !== null) {\n\t\t\tparams.reasoning = {\n\t\t\t\teffort: (thinkingLevelMap?.off ?? \"none\") as NonNullable<typeof params.reasoning>[\"effort\"],\n\t\t\t};\n\t\t}\n\t\tif (model.provider === \"xai\") params.include = [\"reasoning.encrypted_content\"];\n\t}\n\n\tapplyExtraBodyToResponsesParams(params, options?.extraBody);\n\n\t// Last so custom keys override the named request fields.\n\tif (options?.samplingParams) {\n\t\tObject.assign(params, options.samplingParams);\n\t}\n\n\treturn params;\n}\n\nfunction applyExtraBodyToResponsesParams(\n\tparams: ResponseCreateParamsStreaming,\n\textraBody: Record<string, unknown> | undefined,\n): void {\n\tif (!extraBody) return;\n\tfor (const [key, value] of Object.entries(extraBody)) {\n\t\tif (OPENAI_RESPONSES_RESERVED_BODY_KEYS.has(key)) continue;\n\t\tObject.defineProperty(params, key, { value, writable: true, enumerable: true, configurable: true });\n\t}\n}\n\nfunction getDoneReason(stopReason: AssistantMessage[\"stopReason\"]): \"stop\" | \"length\" | \"toolUse\" {\n\tif (stopReason === \"length\" || stopReason === \"toolUse\") return stopReason;\n\treturn \"stop\";\n}\n\nfunction getWebSocketConstructor(): WebSocketConstructor | null {\n\tconst wsConstructor = (globalThis as { WebSocket?: WebSocketConstructor }).WebSocket;\n\treturn typeof wsConstructor === \"function\" ? wsConstructor : null;\n}\n\nfunction getWebSocketReadyState(socket: WebSocketLike): number | undefined {\n\tconst readyState = (socket as { readyState?: number }).readyState;\n\treturn typeof readyState === \"number\" ? readyState : undefined;\n}\n\nfunction isWebSocketReusable(socket: WebSocketLike): boolean {\n\tconst readyState = getWebSocketReadyState(socket);\n\treturn readyState === undefined || readyState === 1;\n}\n\nfunction closeWebSocketSilently(socket: WebSocketLike, code = 1000, reason = \"done\"): void {\n\ttry {\n\t\tsocket.close(code, reason);\n\t} catch {}\n}\n\n/**\n * Arms the idle-expiry for a cached session socket. A fire while the entry is\n * busy must not strand the entry: the holder may never run the release path\n * that schedules a fresh timer, and a cached-but-forgotten entry would pin its\n * socket for process lifetime. A live busy socket is re-checked on the next\n * tick; a dead one is dropped immediately because nothing can release it.\n */\nexport function scheduleSessionWebSocketExpiry(sessionId: string, entry: CachedWebSocketConnection): void {\n\tif (entry.idleTimer) {\n\t\tclearTimeout(entry.idleTimer);\n\t}\n\tentry.idleTimer = setTimeout(() => {\n\t\tif (entry.busy) {\n\t\t\tif (!isWebSocketReusable(entry.socket)) {\n\t\t\t\tcloseWebSocketSilently(entry.socket, 1000, \"idle_timeout_dead\");\n\t\t\t\twebsocketSessionCache.delete(sessionId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tscheduleSessionWebSocketExpiry(sessionId, entry);\n\t\t\treturn;\n\t\t}\n\t\tcloseWebSocketSilently(entry.socket, 1000, \"idle_timeout\");\n\t\twebsocketSessionCache.delete(sessionId);\n\t}, SESSION_WEBSOCKET_CACHE_TTL_MS);\n\tconst unref = (entry.idleTimer as { unref?: () => void }).unref;\n\tif (unref) unref.call(entry.idleTimer);\n}\n\n/** Number of sessions holding a cached websocket (diagnostics). */\nexport function getOpenAIResponsesWebSocketCacheSize(): number {\n\treturn websocketSessionCache.size;\n}\n\nasync function connectWebSocket(url: string, headers: Headers, signal?: AbortSignal): Promise<WebSocketLike> {\n\tconst WebSocketConstructorValue = getWebSocketConstructor();\n\tif (!WebSocketConstructorValue) {\n\t\tthrow new Error(\"WebSocket transport is not available in this runtime\");\n\t}\n\n\tconst websocketHeaders = headersToRecord(headers);\n\n\treturn new Promise<WebSocketLike>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet socket: WebSocketLike;\n\n\t\tconst cleanup = () => {\n\t\t\ttransportFailure.dispose();\n\t\t\tsocket.removeEventListener(\"open\", onOpen);\n\t\t\tsocket.removeEventListener(\"error\", onError);\n\t\t\tsocket.removeEventListener(\"close\", onClose);\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst settleReject = (error: Error) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(error);\n\t\t};\n\t\tconst transportFailure = createWebSocketTransportFailure(settleReject);\n\t\tconst onOpen: WebSocketListener = () => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tresolve(socket);\n\t\t};\n\t\tconst onError: WebSocketListener = (event) => {\n\t\t\ttransportFailure.onError(event);\n\t\t};\n\t\tconst onClose: WebSocketListener = (event) => {\n\t\t\ttransportFailure.onClose(event);\n\t\t};\n\t\tconst onAbort = () => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tcloseWebSocketSilently(socket, 1000, \"aborted\");\n\t\t\treject(new Error(\"Request was aborted\"));\n\t\t};\n\n\t\ttry {\n\t\t\tsocket = new WebSocketConstructorValue(url, { headers: websocketHeaders });\n\t\t} catch (error) {\n\t\t\treject(error instanceof Error ? error : new Error(String(error)));\n\t\t\treturn;\n\t\t}\n\n\t\tsocket.addEventListener(\"open\", onOpen);\n\t\tsocket.addEventListener(\"error\", onError);\n\t\tsocket.addEventListener(\"close\", onClose);\n\t\tsignal?.addEventListener(\"abort\", onAbort);\n\t});\n}\n\nasync function acquireWebSocket(\n\turl: string,\n\theaders: Headers,\n\tsessionId: string | undefined,\n\tsignal?: AbortSignal,\n): Promise<{ socket: WebSocketLike; release: (options?: { keep?: boolean }) => void }> {\n\tif (!sessionId) {\n\t\tconst socket = await connectWebSocket(url, headers, signal);\n\t\treturn { socket, release: () => closeWebSocketSilently(socket) };\n\t}\n\n\tconst cached = websocketSessionCache.get(sessionId);\n\tif (cached) {\n\t\tif (cached.idleTimer) {\n\t\t\tclearTimeout(cached.idleTimer);\n\t\t\tcached.idleTimer = undefined;\n\t\t}\n\t\tif (!cached.busy && isWebSocketReusable(cached.socket)) {\n\t\t\tcached.busy = true;\n\t\t\treturn {\n\t\t\t\tsocket: cached.socket,\n\t\t\t\trelease: ({ keep } = {}) => {\n\t\t\t\t\tif (!keep || !isWebSocketReusable(cached.socket)) {\n\t\t\t\t\t\tcloseWebSocketSilently(cached.socket);\n\t\t\t\t\t\twebsocketSessionCache.delete(sessionId);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcached.busy = false;\n\t\t\t\t\tscheduleSessionWebSocketExpiry(sessionId, cached);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (!cached.busy) {\n\t\t\tcloseWebSocketSilently(cached.socket);\n\t\t\twebsocketSessionCache.delete(sessionId);\n\t\t}\n\t}\n\n\tconst socket = await connectWebSocket(url, headers, signal);\n\tconst entry: CachedWebSocketConnection = { socket, busy: true };\n\twebsocketSessionCache.set(sessionId, entry);\n\treturn {\n\t\tsocket,\n\t\trelease: ({ keep } = {}) => {\n\t\t\tif (!keep || !isWebSocketReusable(entry.socket)) {\n\t\t\t\tcloseWebSocketSilently(entry.socket);\n\t\t\t\tif (entry.idleTimer) clearTimeout(entry.idleTimer);\n\t\t\t\tif (websocketSessionCache.get(sessionId) === entry) {\n\t\t\t\t\twebsocketSessionCache.delete(sessionId);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tentry.busy = false;\n\t\t\tscheduleSessionWebSocketExpiry(sessionId, entry);\n\t\t},\n\t};\n}\n\nasync function decodeWebSocketData(data: unknown): Promise<string | null> {\n\tif (typeof data === \"string\") return data;\n\tif (data instanceof ArrayBuffer) {\n\t\treturn new TextDecoder().decode(new Uint8Array(data));\n\t}\n\tif (ArrayBuffer.isView(data)) {\n\t\treturn new TextDecoder().decode(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\n\t}\n\tif (data && typeof data === \"object\" && \"arrayBuffer\" in data) {\n\t\tconst arrayBuffer = await (data as { arrayBuffer: () => Promise<ArrayBuffer> }).arrayBuffer();\n\t\treturn new TextDecoder().decode(new Uint8Array(arrayBuffer));\n\t}\n\treturn null;\n}\n\nasync function* parseWebSocket(socket: WebSocketLike, signal?: AbortSignal): AsyncGenerator<ResponseStreamEvent> {\n\tconst queue: ResponseStreamEvent[] = [];\n\tlet pending: (() => void) | null = null;\n\tlet done = false;\n\tlet failed: Error | null = null;\n\tlet sawCompletion = false;\n\n\tconst wake = () => {\n\t\tif (!pending) return;\n\t\tconst resolve = pending;\n\t\tpending = null;\n\t\tresolve();\n\t};\n\tconst liveness = startWebSocketLiveness(socket, (error) => {\n\t\tfailed = error;\n\t\tdone = true;\n\t\tcloseWebSocketSilently(socket, 1000, \"liveness_timeout\");\n\t\twake();\n\t});\n\tconst onMessage: WebSocketListener = (event) => {\n\t\tliveness.noteActivity();\n\t\tvoid (async () => {\n\t\t\tif (!event || typeof event !== \"object\" || !(\"data\" in event)) return;\n\t\t\tconst text = await decodeWebSocketData((event as { data?: unknown }).data);\n\t\t\tif (!text) return;\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(text) as ResponseStreamEvent;\n\t\t\t\tif (parsed.type === \"response.completed\" || parsed.type === \"response.incomplete\") {\n\t\t\t\t\tsawCompletion = true;\n\t\t\t\t\tdone = true;\n\t\t\t\t}\n\t\t\t\tqueue.push(parsed);\n\t\t\t\twake();\n\t\t\t} catch {}\n\t\t})();\n\t};\n\tconst transportFailure = createWebSocketTransportFailure((error) => {\n\t\tif (!failed) failed = error;\n\t\tdone = true;\n\t\twake();\n\t});\n\tconst onError: WebSocketListener = (event) => {\n\t\ttransportFailure.onError(event);\n\t};\n\tconst onClose: WebSocketListener = (event) => {\n\t\tif (sawCompletion) {\n\t\t\ttransportFailure.dispose();\n\t\t\tdone = true;\n\t\t\twake();\n\t\t\treturn;\n\t\t}\n\t\ttransportFailure.onClose(event);\n\t};\n\tconst onAbort = () => {\n\t\tfailed = new Error(\"Request was aborted\");\n\t\tdone = true;\n\t\twake();\n\t};\n\n\tsocket.addEventListener(\"message\", onMessage);\n\tsocket.addEventListener(\"error\", onError);\n\tsocket.addEventListener(\"close\", onClose);\n\tsignal?.addEventListener(\"abort\", onAbort);\n\ttry {\n\t\twhile (true) {\n\t\t\tif (signal?.aborted) throw new Error(\"Request was aborted\");\n\t\t\tif (queue.length > 0) {\n\t\t\t\tconst event = queue.shift();\n\t\t\t\tif (event) yield event;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (done) break;\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tpending = resolve;\n\t\t\t});\n\t\t}\n\t\tif (failed) throw failed;\n\t\tif (!sawCompletion) throw new Error(\"WebSocket stream closed before response.completed\");\n\t} finally {\n\t\tliveness.stop();\n\t\ttransportFailure.dispose();\n\t\tsocket.removeEventListener(\"message\", onMessage);\n\t\tsocket.removeEventListener(\"error\", onError);\n\t\tsocket.removeEventListener(\"close\", onClose);\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t}\n}\n\nasync function processWebSocketStream(\n\turl: string,\n\tparams: ResponseCreateParamsStreaming,\n\theaders: Headers,\n\toutput: AssistantMessage,\n\tstream: AssistantMessageEventStream,\n\tmodel: Model<\"openai-responses\">,\n\tonStart: () => void,\n\tcacheSessionId: string | undefined,\n\tgrammarToolInputProperties: ReadonlyMap<string, string>,\n\toptions?: OpenAIResponsesOptions,\n): Promise<void> {\n\tconst { socket, release } = await acquireWebSocket(url, headers, cacheSessionId, options?.signal);\n\ttry {\n\t\tsocket.send(JSON.stringify({ type: \"response.create\", ...params }));\n\t\tonStart();\n\t\tawait options?.onResponse?.({ status: 101, headers: {} }, model);\n\t\tstream.push({ type: \"start\", partial: output });\n\t\tawait processResponsesStream(parseWebSocket(socket, options?.signal), output, stream, model, {\n\t\t\tserviceTier: options?.serviceTier,\n\t\t\tgrammarToolInputProperties,\n\t\t\tapplyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model),\n\t\t});\n\t} finally {\n\t\trelease({ keep: false });\n\t}\n}\n\nfunction resolveOpenAIResponsesWebSocketUrl(model: Model<\"openai-responses\">, env?: ProviderEnv): string {\n\tconst baseUrl = isCloudflareProvider(model.provider)\n\t\t? resolveCloudflareBaseUrl(model, env)\n\t\t: model.baseUrl || \"https://api.openai.com/v1\";\n\tconst url = new URL(baseUrl);\n\tif (!url.pathname.endsWith(\"/responses\")) {\n\t\turl.pathname = `${url.pathname.replace(/\\/$/, \"\")}/responses`;\n\t}\n\tif (url.protocol === \"https:\") url.protocol = \"wss:\";\n\telse if (url.protocol === \"http:\") url.protocol = \"ws:\";\n\treturn url.toString();\n}\n\nfunction buildWebSocketHeaders(\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\tapiKey: string,\n\toptionsHeaders?: ProviderHeaders,\n\tsessionId?: string,\n\tenv?: ProviderEnv,\n): Headers {\n\tconst headers = new Headers(model.headers);\n\tlet suppressDefaultAuthorization = false;\n\tif (model.provider === \"github-copilot\") {\n\t\tconst hasImages = hasCopilotVisionInput(context.messages);\n\t\tconst copilotHeaders = buildCopilotDynamicHeaders({ messages: context.messages, hasImages });\n\t\tfor (const [key, value] of Object.entries(copilotHeaders)) {\n\t\t\theaders.set(key, value);\n\t\t}\n\t}\n\tfor (const [key, value] of Object.entries(optionsHeaders || {})) {\n\t\tif (value === null) {\n\t\t\tif (key.toLowerCase() === \"authorization\") suppressDefaultAuthorization = true;\n\t\t\theaders.delete(key);\n\t\t} else {\n\t\t\theaders.set(key, value);\n\t\t}\n\t}\n\tif (!suppressDefaultAuthorization && !headers.has(\"Authorization\")) {\n\t\theaders.set(\"Authorization\", `Bearer ${apiKey}`);\n\t}\n\tif (sessionId) {\n\t\tconst compat = getCompat(model, env);\n\t\tif (compat.sessionAffinityFormat === \"openai\") {\n\t\t\theaders.set(\"session_id\", sessionId);\n\t\t}\n\t\tif (compat.sessionAffinityFormat === \"openai\" || compat.sessionAffinityFormat === \"openai-nosession\") {\n\t\t\theaders.set(\"x-client-request-id\", sessionId);\n\t\t} else if (compat.sessionAffinityFormat === \"openrouter\") {\n\t\t\theaders.set(\"x-session-id\", sessionId);\n\t\t}\n\t}\n\theaders.delete(\"accept\");\n\theaders.delete(\"content-type\");\n\theaders.delete(\"OpenAI-Beta\");\n\theaders.delete(\"openai-beta\");\n\theaders.set(\"OpenAI-Beta\", OPENAI_BETA_RESPONSES_WEBSOCKETS);\n\treturn headers;\n}\n\nfunction getServiceTierCostMultiplier(\n\tmodel: Pick<Model<\"openai-responses\">, \"id\">,\n\tserviceTier: ResponseCreateParamsStreaming[\"service_tier\"] | \"fast\" | undefined,\n): number {\n\tswitch (serviceTier) {\n\t\tcase \"flex\":\n\t\t\treturn 0.5;\n\t\tcase \"priority\":\n\t\tcase \"fast\":\n\t\t\treturn model.id === \"gpt-5.5\" ? 2.5 : 2;\n\t\tdefault:\n\t\t\treturn 1;\n\t}\n}\n\nfunction applyServiceTierPricing(\n\tusage: Usage,\n\tserviceTier: ResponseCreateParamsStreaming[\"service_tier\"] | \"fast\" | undefined,\n\tmodel: Pick<Model<\"openai-responses\">, \"id\">,\n) {\n\tconst multiplier = getServiceTierCostMultiplier(model, serviceTier);\n\tif (multiplier === 1) return;\n\n\tusage.cost.input *= multiplier;\n\tusage.cost.output *= multiplier;\n\tusage.cost.cacheRead *= multiplier;\n\tusage.cost.cacheWrite *= multiplier;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  /**
2
- * OpenAI Codex (ChatGPT OAuth) flow
2
+ * ChatGPT Subscription OAuth flow
3
3
  *
4
4
  * NOTE: This module uses Node.js crypto and http for the OAuth callback.
5
5
  * It is only intended for CLI use, not browser environments.
6
6
  */
7
7
  import type { OAuthAuth } from "../types.ts";
8
- export declare const openaiCodexOAuth: OAuthAuth;
9
- //# sourceMappingURL=openai-codex.d.ts.map
8
+ export declare const chatgptSubscriptionOAuth: OAuthAuth;
9
+ //# sourceMappingURL=chatgpt-subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt-subscription.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth/chatgpt-subscription.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,OAAO,KAAK,EAAE,SAAS,EAA4C,MAAM,aAAa,CAAC;AA8dvF,eAAO,MAAM,wBAAwB,EAAE,SA6BtC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * OpenAI Codex (ChatGPT OAuth) flow
2
+ * ChatGPT Subscription OAuth flow
3
3
  *
4
4
  * NOTE: This module uses Node.js crypto and http for the OAuth callback.
5
5
  * It is only intended for CLI use, not browser environments.
@@ -15,7 +15,7 @@ if (typeof process !== "undefined" && (process.versions?.node || process.version
15
15
  _http = m;
16
16
  });
17
17
  }
18
- import { extractOpenAiCodexAccountId } from "../../utils/openai-codex-auth.js";
18
+ import { extractChatGptSubscriptionAccountId } from "../../utils/chatgpt-subscription-auth.js";
19
19
  import { getProviderEnvValue } from "../../utils/provider-env.js";
20
20
  import { getWireIdentity } from "../../wire-identity.js";
21
21
  import { pollOAuthDeviceCodeFlow } from "./device-code.js";
@@ -31,15 +31,15 @@ const DEVICE_TOKEN_URL = `${AUTH_BASE_URL}/api/accounts/deviceauth/token`;
31
31
  const DEVICE_VERIFICATION_URI = `${AUTH_BASE_URL}/codex/device`;
32
32
  const DEVICE_REDIRECT_URI = `${AUTH_BASE_URL}/deviceauth/callback`;
33
33
  const DEVICE_CODE_TIMEOUT_SECONDS = 15 * 60;
34
- const OPENAI_CODEX_BROWSER_LOGIN_METHOD = "browser";
35
- const OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD = "device_code";
34
+ const CHATGPT_SUBSCRIPTION_BROWSER_LOGIN_METHOD = "browser";
35
+ const CHATGPT_SUBSCRIPTION_DEVICE_CODE_LOGIN_METHOD = "device_code";
36
36
  const SCOPE = "openid profile email offline_access";
37
37
  function getCallbackHost() {
38
38
  return getProviderEnvValue("PI_OAUTH_CALLBACK_HOST") || "127.0.0.1";
39
39
  }
40
40
  function createState() {
41
41
  if (!_randomBytes) {
42
- throw new Error("OpenAI Codex OAuth is only available in Node.js environments");
42
+ throw new Error("ChatGPT Subscription OAuth is only available in Node.js environments");
43
43
  }
44
44
  return _randomBytes(16).toString("hex");
45
45
  }
@@ -84,12 +84,12 @@ async function fetchWithLoginCancellation(input, init) {
84
84
  async function readTokenResponse(response, operation) {
85
85
  if (!response.ok) {
86
86
  const text = await response.text().catch(() => "");
87
- throw new Error(`OpenAI Codex token ${operation} failed (${response.status}): ${text || response.statusText}`);
87
+ throw new Error(`ChatGPT Subscription token ${operation} failed (${response.status}): ${text || response.statusText}`);
88
88
  }
89
89
  const rawJson = await response.json();
90
90
  const json = rawJson;
91
91
  if (!json?.access_token || !json.refresh_token || typeof json.expires_in !== "number") {
92
- throw new Error(`OpenAI Codex token ${operation} response missing fields: ${JSON.stringify(json)}`);
92
+ throw new Error(`ChatGPT Subscription token ${operation} response missing fields: ${JSON.stringify(json)}`);
93
93
  }
94
94
  return {
95
95
  access: json.access_token,
@@ -127,11 +127,11 @@ async function refreshAccessToken(refreshToken, signal) {
127
127
  });
128
128
  }
129
129
  catch (error) {
130
- throw new Error(`OpenAI Codex token refresh error: ${error instanceof Error ? error.message : String(error)}`);
130
+ throw new Error(`ChatGPT Subscription token refresh error: ${error instanceof Error ? error.message : String(error)}`);
131
131
  }
132
132
  return readTokenResponse(response, "refresh");
133
133
  }
134
- async function startOpenAICodexDeviceAuth(signal) {
134
+ async function startChatGptSubscriptionDeviceAuth(signal) {
135
135
  const response = await fetchWithLoginCancellation(DEVICE_USER_CODE_URL, {
136
136
  method: "POST",
137
137
  headers: { "Content-Type": "application/json" },
@@ -140,10 +140,10 @@ async function startOpenAICodexDeviceAuth(signal) {
140
140
  });
141
141
  if (!response.ok) {
142
142
  if (response.status === 404) {
143
- throw new Error("OpenAI Codex device code login is not enabled for this server. Use browser login or verify the server URL.");
143
+ throw new Error("ChatGPT Subscription device code login is not enabled for this server. Use browser login or verify the server URL.");
144
144
  }
145
145
  const responseBody = await response.text().catch(() => "");
146
- throw new Error(`OpenAI Codex device code request failed with status ${response.status}${responseBody ? `: ${responseBody}` : ""}`);
146
+ throw new Error(`ChatGPT Subscription device code request failed with status ${response.status}${responseBody ? `: ${responseBody}` : ""}`);
147
147
  }
148
148
  const rawJson = await response.json();
149
149
  const json = rawJson;
@@ -153,7 +153,7 @@ async function startOpenAICodexDeviceAuth(signal) {
153
153
  typeof intervalSeconds !== "number" ||
154
154
  !Number.isFinite(intervalSeconds) ||
155
155
  intervalSeconds < 0) {
156
- throw new Error(`Invalid OpenAI Codex device code response: ${JSON.stringify(json)}`);
156
+ throw new Error(`Invalid ChatGPT Subscription device code response: ${JSON.stringify(json)}`);
157
157
  }
158
158
  return {
159
159
  deviceAuthId: json.device_auth_id,
@@ -161,7 +161,7 @@ async function startOpenAICodexDeviceAuth(signal) {
161
161
  intervalSeconds,
162
162
  };
163
163
  }
164
- async function pollOpenAICodexDeviceAuth(device, signal) {
164
+ async function pollChatGptSubscriptionDeviceAuth(device, signal) {
165
165
  return pollOAuthDeviceCodeFlow({
166
166
  intervalSeconds: device.intervalSeconds,
167
167
  expiresInSeconds: DEVICE_CODE_TIMEOUT_SECONDS,
@@ -182,7 +182,7 @@ async function pollOpenAICodexDeviceAuth(device, signal) {
182
182
  if (!json?.authorization_code || !json.code_verifier) {
183
183
  return {
184
184
  status: "failed",
185
- message: `Invalid OpenAI Codex device auth token response: ${JSON.stringify(json)}`,
185
+ message: `Invalid ChatGPT Subscription device auth token response: ${JSON.stringify(json)}`,
186
186
  };
187
187
  }
188
188
  return {
@@ -209,7 +209,7 @@ async function pollOpenAICodexDeviceAuth(device, signal) {
209
209
  }
210
210
  return {
211
211
  status: "failed",
212
- message: `OpenAI Codex device auth failed with status ${response.status}${responseBody ? `: ${responseBody}` : ""}`,
212
+ message: `ChatGPT Subscription device auth failed with status ${response.status}${responseBody ? `: ${responseBody}` : ""}`,
213
213
  };
214
214
  },
215
215
  });
@@ -232,7 +232,7 @@ async function createAuthorizationFlow(originator = getWireIdentity()) {
232
232
  }
233
233
  function startLocalOAuthServer(state) {
234
234
  if (!_http) {
235
- throw new Error("OpenAI Codex OAuth is only available in Node.js environments");
235
+ throw new Error("ChatGPT Subscription OAuth is only available in Node.js environments");
236
236
  }
237
237
  let settleWait;
238
238
  const waitForCodePromise = new Promise((resolve) => {
@@ -306,7 +306,7 @@ function startLocalOAuthServer(state) {
306
306
  });
307
307
  }
308
308
  function getAccountId(accessToken) {
309
- return extractOpenAiCodexAccountId(accessToken) ?? null;
309
+ return extractChatGptSubscriptionAccountId(accessToken) ?? null;
310
310
  }
311
311
  function credentialsFromToken(token) {
312
312
  const accountId = getAccountId(token.access);
@@ -324,8 +324,8 @@ function credentialsFromToken(token) {
324
324
  async function exchangeAuthorizationCodeForCredentials(code, verifier, redirectUri, signal) {
325
325
  return credentialsFromToken(await exchangeAuthorizationCode(code, verifier, redirectUri, signal));
326
326
  }
327
- async function loginOpenAICodexDeviceCode(interaction) {
328
- const device = await startOpenAICodexDeviceAuth(interaction.signal);
327
+ async function loginChatGptSubscriptionDeviceCode(interaction) {
328
+ const device = await startChatGptSubscriptionDeviceAuth(interaction.signal);
329
329
  interaction.notify({
330
330
  type: "device_code",
331
331
  userCode: device.userCode,
@@ -333,10 +333,10 @@ async function loginOpenAICodexDeviceCode(interaction) {
333
333
  intervalSeconds: device.intervalSeconds,
334
334
  expiresInSeconds: DEVICE_CODE_TIMEOUT_SECONDS,
335
335
  });
336
- const code = await pollOpenAICodexDeviceAuth(device, interaction.signal);
336
+ const code = await pollChatGptSubscriptionDeviceAuth(device, interaction.signal);
337
337
  return exchangeAuthorizationCodeForCredentials(code.authorizationCode, code.codeVerifier, DEVICE_REDIRECT_URI, interaction.signal);
338
338
  }
339
- async function loginOpenAICodex(interaction) {
339
+ async function loginChatGptSubscription(interaction) {
340
340
  const { verifier, state, url } = await createAuthorizationFlow();
341
341
  const server = await startLocalOAuthServer(state);
342
342
  const manualAbort = new AbortController();
@@ -402,34 +402,34 @@ async function loginOpenAICodex(interaction) {
402
402
  }
403
403
  }
404
404
  /**
405
- * Refresh OpenAI Codex OAuth token
405
+ * Refresh ChatGPT Subscription OAuth token
406
406
  */
407
- async function refreshOpenAICodexToken(refreshToken, signal) {
407
+ async function refreshChatGptSubscriptionToken(refreshToken, signal) {
408
408
  return credentialsFromToken(await refreshAccessToken(refreshToken, signal));
409
409
  }
410
- export const openaiCodexOAuth = {
411
- name: "OpenAI (ChatGPT Plus/Pro)",
410
+ export const chatgptSubscriptionOAuth = {
411
+ name: "ChatGPT Subscription (Plus/Pro)",
412
412
  isSubscription: true,
413
413
  async login(interaction) {
414
414
  const method = await interaction.prompt({
415
415
  type: "select",
416
- message: "Select OpenAI Codex login method:",
416
+ message: "Select ChatGPT Subscription login method:",
417
417
  options: [
418
- { id: OPENAI_CODEX_BROWSER_LOGIN_METHOD, label: "Browser login (default)" },
419
- { id: OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD, label: "Device code login (headless)" },
418
+ { id: CHATGPT_SUBSCRIPTION_BROWSER_LOGIN_METHOD, label: "Browser login (default)" },
419
+ { id: CHATGPT_SUBSCRIPTION_DEVICE_CODE_LOGIN_METHOD, label: "Device code login (headless)" },
420
420
  ],
421
421
  });
422
- if (method === OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD) {
423
- return loginOpenAICodexDeviceCode(interaction);
422
+ if (method === CHATGPT_SUBSCRIPTION_DEVICE_CODE_LOGIN_METHOD) {
423
+ return loginChatGptSubscriptionDeviceCode(interaction);
424
424
  }
425
- if (method !== OPENAI_CODEX_BROWSER_LOGIN_METHOD) {
426
- throw new Error(`Unknown OpenAI Codex login method: ${method}`);
425
+ if (method !== CHATGPT_SUBSCRIPTION_BROWSER_LOGIN_METHOD) {
426
+ throw new Error(`Unknown ChatGPT Subscription login method: ${method}`);
427
427
  }
428
- return loginOpenAICodex(interaction);
428
+ return loginChatGptSubscription(interaction);
429
429
  },
430
- refresh: (credential, signal) => refreshOpenAICodexToken(credential.refresh, signal),
430
+ refresh: (credential, signal) => refreshChatGptSubscriptionToken(credential.refresh, signal),
431
431
  async toAuth(credential) {
432
432
  return { apiKey: credential.access };
433
433
  },
434
434
  };
435
- //# sourceMappingURL=openai-codex.js.map
435
+ //# sourceMappingURL=chatgpt-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt-subscription.js","sourceRoot":"","sources":["../../../src/auth/oauth/chatgpt-subscription.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatGPT Subscription OAuth flow\n *\n * NOTE: This module uses Node.js crypto and http for the OAuth callback.\n * It is only intended for CLI use, not browser environments.\n */\n\n// NEVER convert to top-level imports - breaks browser/Vite builds\nlet _randomBytes: typeof import(\"node:crypto\").randomBytes | null = null;\nlet _http: typeof import(\"node:http\") | null = null;\nif (typeof process !== \"undefined\" && (process.versions?.node || process.versions?.bun)) {\n\timport(\"node:crypto\").then((m) => {\n\t\t_randomBytes = m.randomBytes;\n\t});\n\timport(\"node:http\").then((m) => {\n\t\t_http = m;\n\t});\n}\n\nimport { extractChatGptSubscriptionAccountId } from \"../../utils/chatgpt-subscription-auth.ts\";\nimport { getProviderEnvValue } from \"../../utils/provider-env.ts\";\nimport { getWireIdentity } from \"../../wire-identity.ts\";\nimport type { OAuthAuth, OAuthCredential, ProviderAuthInteraction } from \"../types.ts\";\nimport { pollOAuthDeviceCodeFlow } from \"./device-code.ts\";\nimport { oauthErrorHtml, oauthSuccessHtml } from \"./oauth-page.ts\";\nimport { generatePKCE } from \"./pkce.ts\";\n\nconst CLIENT_ID = \"app_EMoamEEZ73f0CkXaXp7hrann\";\nconst AUTH_BASE_URL = \"https://auth.openai.com\";\nconst AUTHORIZE_URL = `${AUTH_BASE_URL}/oauth/authorize`;\nconst TOKEN_URL = `${AUTH_BASE_URL}/oauth/token`;\nconst REDIRECT_URI = \"http://localhost:1455/auth/callback\";\nconst DEVICE_USER_CODE_URL = `${AUTH_BASE_URL}/api/accounts/deviceauth/usercode`;\nconst DEVICE_TOKEN_URL = `${AUTH_BASE_URL}/api/accounts/deviceauth/token`;\nconst DEVICE_VERIFICATION_URI = `${AUTH_BASE_URL}/codex/device`;\nconst DEVICE_REDIRECT_URI = `${AUTH_BASE_URL}/deviceauth/callback`;\nconst DEVICE_CODE_TIMEOUT_SECONDS = 15 * 60;\nconst CHATGPT_SUBSCRIPTION_BROWSER_LOGIN_METHOD = \"browser\";\nconst CHATGPT_SUBSCRIPTION_DEVICE_CODE_LOGIN_METHOD = \"device_code\";\nconst SCOPE = \"openid profile email offline_access\";\n\ntype OAuthToken = { access: string; refresh: string; expires: number };\ntype TokenOperation = \"exchange\" | \"refresh\";\n\nfunction getCallbackHost(): string {\n\treturn getProviderEnvValue(\"PI_OAUTH_CALLBACK_HOST\") || \"127.0.0.1\";\n}\n\ntype DeviceAuthInfo = {\n\tdeviceAuthId: string;\n\tuserCode: string;\n\tintervalSeconds: number;\n};\n\ntype DeviceTokenSuccess = {\n\tauthorizationCode: string;\n\tcodeVerifier: string;\n};\n\nfunction createState(): string {\n\tif (!_randomBytes) {\n\t\tthrow new Error(\"ChatGPT Subscription OAuth is only available in Node.js environments\");\n\t}\n\treturn _randomBytes(16).toString(\"hex\");\n}\n\nfunction parseAuthorizationInput(input: string): { code?: string; state?: string } {\n\tconst value = input.trim();\n\tif (!value) return {};\n\n\ttry {\n\t\tconst url = new URL(value);\n\t\treturn {\n\t\t\tcode: url.searchParams.get(\"code\") ?? undefined,\n\t\t\tstate: url.searchParams.get(\"state\") ?? undefined,\n\t\t};\n\t} catch {\n\t\t// not a URL\n\t}\n\n\tif (value.includes(\"#\")) {\n\t\tconst [code, state] = value.split(\"#\", 2);\n\t\treturn { code, state };\n\t}\n\n\tif (value.includes(\"code=\")) {\n\t\tconst params = new URLSearchParams(value);\n\t\treturn {\n\t\t\tcode: params.get(\"code\") ?? undefined,\n\t\t\tstate: params.get(\"state\") ?? undefined,\n\t\t};\n\t}\n\n\treturn { code: value };\n}\n\nasync function fetchWithLoginCancellation(input: string, init: RequestInit): Promise<Response> {\n\ttry {\n\t\treturn await fetch(input, init);\n\t} catch (error) {\n\t\tif (init.signal?.aborted) {\n\t\t\tthrow new Error(\"Login cancelled\");\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nasync function readTokenResponse(response: Response, operation: TokenOperation): Promise<OAuthToken> {\n\tif (!response.ok) {\n\t\tconst text = await response.text().catch(() => \"\");\n\t\tthrow new Error(\n\t\t\t`ChatGPT Subscription token ${operation} failed (${response.status}): ${text || response.statusText}`,\n\t\t);\n\t}\n\n\tconst rawJson = await response.json();\n\tconst json = rawJson as {\n\t\taccess_token?: string;\n\t\trefresh_token?: string;\n\t\texpires_in?: number;\n\t} | null;\n\tif (!json?.access_token || !json.refresh_token || typeof json.expires_in !== \"number\") {\n\t\tthrow new Error(`ChatGPT Subscription token ${operation} response missing fields: ${JSON.stringify(json)}`);\n\t}\n\n\treturn {\n\t\taccess: json.access_token,\n\t\trefresh: json.refresh_token,\n\t\texpires: Date.now() + json.expires_in * 1000,\n\t};\n}\n\nasync function exchangeAuthorizationCode(\n\tcode: string,\n\tverifier: string,\n\tredirectUri: string,\n\tsignal: AbortSignal,\n): Promise<OAuthToken> {\n\tconst response = await fetchWithLoginCancellation(TOKEN_URL, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n\t\tbody: new URLSearchParams({\n\t\t\tgrant_type: \"authorization_code\",\n\t\t\tclient_id: CLIENT_ID,\n\t\t\tcode,\n\t\t\tcode_verifier: verifier,\n\t\t\tredirect_uri: redirectUri,\n\t\t}),\n\t\tsignal,\n\t});\n\n\treturn readTokenResponse(response, \"exchange\");\n}\n\nasync function refreshAccessToken(refreshToken: string, signal: AbortSignal): Promise<OAuthToken> {\n\tlet response: Response;\n\ttry {\n\t\tresponse = await fetch(TOKEN_URL, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n\t\t\tbody: new URLSearchParams({\n\t\t\t\tgrant_type: \"refresh_token\",\n\t\t\t\trefresh_token: refreshToken,\n\t\t\t\tclient_id: CLIENT_ID,\n\t\t\t}),\n\t\t\tsignal,\n\t\t});\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`ChatGPT Subscription token refresh error: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\n\treturn readTokenResponse(response, \"refresh\");\n}\n\nasync function startChatGptSubscriptionDeviceAuth(signal: AbortSignal): Promise<DeviceAuthInfo> {\n\tconst response = await fetchWithLoginCancellation(DEVICE_USER_CODE_URL, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tbody: JSON.stringify({ client_id: CLIENT_ID }),\n\t\tsignal,\n\t});\n\n\tif (!response.ok) {\n\t\tif (response.status === 404) {\n\t\t\tthrow new Error(\n\t\t\t\t\"ChatGPT Subscription device code login is not enabled for this server. Use browser login or verify the server URL.\",\n\t\t\t);\n\t\t}\n\t\tconst responseBody = await response.text().catch(() => \"\");\n\t\tthrow new Error(\n\t\t\t`ChatGPT Subscription device code request failed with status ${response.status}${responseBody ? `: ${responseBody}` : \"\"}`,\n\t\t);\n\t}\n\n\tconst rawJson = await response.json();\n\tconst json = rawJson as {\n\t\tdevice_auth_id?: string;\n\t\tuser_code?: string;\n\t\tinterval?: number | string;\n\t} | null;\n\tconst intervalSeconds = typeof json?.interval === \"string\" ? Number(json.interval.trim()) : json?.interval;\n\tif (\n\t\t!json?.device_auth_id ||\n\t\t!json.user_code ||\n\t\ttypeof intervalSeconds !== \"number\" ||\n\t\t!Number.isFinite(intervalSeconds) ||\n\t\tintervalSeconds < 0\n\t) {\n\t\tthrow new Error(`Invalid ChatGPT Subscription device code response: ${JSON.stringify(json)}`);\n\t}\n\n\treturn {\n\t\tdeviceAuthId: json.device_auth_id,\n\t\tuserCode: json.user_code,\n\t\tintervalSeconds,\n\t};\n}\n\nasync function pollChatGptSubscriptionDeviceAuth(\n\tdevice: DeviceAuthInfo,\n\tsignal: AbortSignal,\n): Promise<DeviceTokenSuccess> {\n\treturn pollOAuthDeviceCodeFlow<DeviceTokenSuccess>({\n\t\tintervalSeconds: device.intervalSeconds,\n\t\texpiresInSeconds: DEVICE_CODE_TIMEOUT_SECONDS,\n\t\tsignal,\n\t\tpoll: async () => {\n\t\t\tconst response = await fetchWithLoginCancellation(DEVICE_TOKEN_URL, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tdevice_auth_id: device.deviceAuthId,\n\t\t\t\t\tuser_code: device.userCode,\n\t\t\t\t}),\n\t\t\t\tsignal,\n\t\t\t});\n\n\t\t\tif (response.ok) {\n\t\t\t\tconst rawJson = await response.json();\n\t\t\t\tconst json = rawJson as { authorization_code?: string; code_verifier?: string } | null;\n\t\t\t\tif (!json?.authorization_code || !json.code_verifier) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\tmessage: `Invalid ChatGPT Subscription device auth token response: ${JSON.stringify(json)}`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"complete\",\n\t\t\t\t\tvalue: { authorizationCode: json.authorization_code, codeVerifier: json.code_verifier },\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (response.status === 403 || response.status === 404) {\n\t\t\t\treturn { status: \"pending\" };\n\t\t\t}\n\n\t\t\tconst responseBody = await response.text().catch(() => \"\");\n\t\t\tlet errorCode: unknown;\n\t\t\ttry {\n\t\t\t\tconst json = JSON.parse(responseBody) as { error?: string | { code?: string } } | null;\n\t\t\t\tconst error = json?.error;\n\t\t\t\terrorCode = typeof error === \"object\" ? error?.code : error;\n\t\t\t} catch {}\n\n\t\t\tif (errorCode === \"deviceauth_authorization_pending\") {\n\t\t\t\treturn { status: \"pending\" };\n\t\t\t}\n\t\t\tif (errorCode === \"slow_down\") {\n\t\t\t\treturn { status: \"slow_down\" };\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tmessage: `ChatGPT Subscription device auth failed with status ${response.status}${responseBody ? `: ${responseBody}` : \"\"}`,\n\t\t\t};\n\t\t},\n\t});\n}\n\nasync function createAuthorizationFlow(\n\toriginator: string = getWireIdentity(),\n): Promise<{ verifier: string; state: string; url: string }> {\n\tconst { verifier, challenge } = await generatePKCE();\n\tconst state = createState();\n\n\tconst url = new URL(AUTHORIZE_URL);\n\turl.searchParams.set(\"response_type\", \"code\");\n\turl.searchParams.set(\"client_id\", CLIENT_ID);\n\turl.searchParams.set(\"redirect_uri\", REDIRECT_URI);\n\turl.searchParams.set(\"scope\", SCOPE);\n\turl.searchParams.set(\"code_challenge\", challenge);\n\turl.searchParams.set(\"code_challenge_method\", \"S256\");\n\turl.searchParams.set(\"state\", state);\n\turl.searchParams.set(\"id_token_add_organizations\", \"true\");\n\turl.searchParams.set(\"codex_cli_simplified_flow\", \"true\");\n\turl.searchParams.set(\"originator\", originator);\n\n\treturn { verifier, state, url: url.toString() };\n}\n\ntype OAuthServerInfo = {\n\tclose: () => void;\n\tcancelWait: () => void;\n\twaitForCode: () => Promise<{ code: string } | null>;\n};\n\nfunction startLocalOAuthServer(state: string): Promise<OAuthServerInfo> {\n\tif (!_http) {\n\t\tthrow new Error(\"ChatGPT Subscription OAuth is only available in Node.js environments\");\n\t}\n\n\tlet settleWait: ((value: { code: string } | null) => void) | undefined;\n\tconst waitForCodePromise = new Promise<{ code: string } | null>((resolve) => {\n\t\tlet settled = false;\n\t\tsettleWait = (value) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tresolve(value);\n\t\t};\n\t});\n\n\tconst server = _http.createServer((req, res) => {\n\t\ttry {\n\t\t\tconst url = new URL(req.url || \"\", \"http://localhost\");\n\t\t\tif (url.pathname !== \"/auth/callback\") {\n\t\t\t\tres.statusCode = 404;\n\t\t\t\tres.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n\t\t\t\tres.end(oauthErrorHtml(\"Callback route not found.\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (url.searchParams.get(\"state\") !== state) {\n\t\t\t\tres.statusCode = 400;\n\t\t\t\tres.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n\t\t\t\tres.end(oauthErrorHtml(\"State mismatch.\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst code = url.searchParams.get(\"code\");\n\t\t\tif (!code) {\n\t\t\t\tres.statusCode = 400;\n\t\t\t\tres.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n\t\t\t\tres.end(oauthErrorHtml(\"Missing authorization code.\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tres.statusCode = 200;\n\t\t\tres.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n\t\t\tres.end(oauthSuccessHtml(\"OpenAI authentication completed. You can close this window.\"));\n\t\t\tsettleWait?.({ code });\n\t\t} catch {\n\t\t\tres.statusCode = 500;\n\t\t\tres.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n\t\t\tres.end(oauthErrorHtml(\"Internal error while processing OAuth callback.\"));\n\t\t}\n\t});\n\n\treturn new Promise((resolve) => {\n\t\tserver\n\t\t\t.listen(1455, getCallbackHost(), () => {\n\t\t\t\tresolve({\n\t\t\t\t\tclose: () => server.close(),\n\t\t\t\t\tcancelWait: () => {\n\t\t\t\t\t\tsettleWait?.(null);\n\t\t\t\t\t},\n\t\t\t\t\twaitForCode: () => waitForCodePromise,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"error\", (_err: NodeJS.ErrnoException) => {\n\t\t\t\tsettleWait?.(null);\n\t\t\t\tresolve({\n\t\t\t\t\tclose: () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tserver.close();\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tcancelWait: () => {},\n\t\t\t\t\twaitForCode: async () => null,\n\t\t\t\t});\n\t\t\t});\n\t});\n}\n\nfunction getAccountId(accessToken: string): string | null {\n\treturn extractChatGptSubscriptionAccountId(accessToken) ?? null;\n}\n\nfunction credentialsFromToken(token: OAuthToken): OAuthCredential {\n\tconst accountId = getAccountId(token.access);\n\tif (!accountId) {\n\t\tthrow new Error(\"Failed to extract accountId from token\");\n\t}\n\n\treturn {\n\t\ttype: \"oauth\",\n\t\taccess: token.access,\n\t\trefresh: token.refresh,\n\t\texpires: token.expires,\n\t\taccountId,\n\t};\n}\n\nasync function exchangeAuthorizationCodeForCredentials(\n\tcode: string,\n\tverifier: string,\n\tredirectUri: string,\n\tsignal: AbortSignal,\n): Promise<OAuthCredential> {\n\treturn credentialsFromToken(await exchangeAuthorizationCode(code, verifier, redirectUri, signal));\n}\n\nasync function loginChatGptSubscriptionDeviceCode(interaction: ProviderAuthInteraction): Promise<OAuthCredential> {\n\tconst device = await startChatGptSubscriptionDeviceAuth(interaction.signal);\n\tinteraction.notify({\n\t\ttype: \"device_code\",\n\t\tuserCode: device.userCode,\n\t\tverificationUri: DEVICE_VERIFICATION_URI,\n\t\tintervalSeconds: device.intervalSeconds,\n\t\texpiresInSeconds: DEVICE_CODE_TIMEOUT_SECONDS,\n\t});\n\tconst code = await pollChatGptSubscriptionDeviceAuth(device, interaction.signal);\n\treturn exchangeAuthorizationCodeForCredentials(\n\t\tcode.authorizationCode,\n\t\tcode.codeVerifier,\n\t\tDEVICE_REDIRECT_URI,\n\t\tinteraction.signal,\n\t);\n}\n\nasync function loginChatGptSubscription(interaction: ProviderAuthInteraction): Promise<OAuthCredential> {\n\tconst { verifier, state, url } = await createAuthorizationFlow();\n\tconst server = await startLocalOAuthServer(state);\n\tconst manualAbort = new AbortController();\n\tconst onAbort = () => server.cancelWait();\n\tinteraction.signal.addEventListener(\"abort\", onAbort, { once: true });\n\tif (interaction.signal.aborted) onAbort();\n\tlet code: string | undefined;\n\tlet manualCode: string | undefined;\n\tlet manualError: Error | undefined;\n\n\tinteraction.notify({\n\t\ttype: \"auth_url\",\n\t\turl,\n\t\tinstructions: \"A browser window should open. Complete login to finish.\",\n\t});\n\n\ttry {\n\t\tconst manualPromise = interaction\n\t\t\t.prompt({\n\t\t\t\ttype: \"manual_code\",\n\t\t\t\tmessage: \"Complete login in your browser, or paste the authorization code / redirect URL here:\",\n\t\t\t\tplaceholder: REDIRECT_URI,\n\t\t\t\tsignal: manualAbort.signal,\n\t\t\t})\n\t\t\t.then((input) => {\n\t\t\t\tmanualCode = input;\n\t\t\t\tserver.cancelWait();\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tmanualError = error instanceof Error ? error : new Error(String(error));\n\t\t\t\tserver.cancelWait();\n\t\t\t});\n\n\t\tconst result = await server.waitForCode();\n\t\tif (manualError) throw manualError;\n\t\tif (result?.code) {\n\t\t\tcode = result.code;\n\t\t} else if (manualCode) {\n\t\t\tconst parsed = parseAuthorizationInput(manualCode);\n\t\t\tif (parsed.state && parsed.state !== state) throw new Error(\"State mismatch\");\n\t\t\tcode = parsed.code;\n\t\t}\n\n\t\tif (!code) {\n\t\t\tawait manualPromise;\n\t\t\tif (manualError) throw manualError;\n\t\t\tif (manualCode) {\n\t\t\t\tconst parsed = parseAuthorizationInput(manualCode);\n\t\t\t\tif (parsed.state && parsed.state !== state) throw new Error(\"State mismatch\");\n\t\t\t\tcode = parsed.code;\n\t\t\t}\n\t\t}\n\n\t\tif (!code) throw new Error(\"Missing authorization code\");\n\t\treturn exchangeAuthorizationCodeForCredentials(code, verifier, REDIRECT_URI, interaction.signal);\n\t} finally {\n\t\tinteraction.signal.removeEventListener(\"abort\", onAbort);\n\t\tmanualAbort.abort();\n\t\tserver.close();\n\t}\n}\n\n/**\n * Refresh ChatGPT Subscription OAuth token\n */\nasync function refreshChatGptSubscriptionToken(refreshToken: string, signal: AbortSignal): Promise<OAuthCredential> {\n\treturn credentialsFromToken(await refreshAccessToken(refreshToken, signal));\n}\n\nexport const chatgptSubscriptionOAuth: OAuthAuth = {\n\tname: \"ChatGPT Subscription (Plus/Pro)\",\n\tisSubscription: true,\n\n\tasync login(interaction) {\n\t\tconst method = await interaction.prompt({\n\t\t\ttype: \"select\",\n\t\t\tmessage: \"Select ChatGPT Subscription login method:\",\n\t\t\toptions: [\n\t\t\t\t{ id: CHATGPT_SUBSCRIPTION_BROWSER_LOGIN_METHOD, label: \"Browser login (default)\" },\n\t\t\t\t{ id: CHATGPT_SUBSCRIPTION_DEVICE_CODE_LOGIN_METHOD, label: \"Device code login (headless)\" },\n\t\t\t],\n\t\t});\n\n\t\tif (method === CHATGPT_SUBSCRIPTION_DEVICE_CODE_LOGIN_METHOD) {\n\t\t\treturn loginChatGptSubscriptionDeviceCode(interaction);\n\t\t}\n\t\tif (method !== CHATGPT_SUBSCRIPTION_BROWSER_LOGIN_METHOD) {\n\t\t\tthrow new Error(`Unknown ChatGPT Subscription login method: ${method}`);\n\t\t}\n\n\t\treturn loginChatGptSubscription(interaction);\n\t},\n\n\trefresh: (credential, signal) => refreshChatGptSubscriptionToken(credential.refresh, signal),\n\n\tasync toAuth(credential) {\n\t\treturn { apiKey: credential.access };\n\t},\n};\n"]}