uigraph 1.0.0 → 1.0.2

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 (323) hide show
  1. package/README.md +30 -51
  2. package/dist/bin.mjs +1608 -59037
  3. package/dist/viewer/assets/abnfDiagram-VCTEODGH-D7zWJuPJ.js +1 -0
  4. package/dist/viewer/assets/actor-avatar-Bu-mKKXB.js +1 -0
  5. package/dist/viewer/assets/{api-adapters-CnQpLiWI.js → api-adapters-tfr51BsS.js} +1 -1
  6. package/dist/viewer/assets/{api-endpoints-DCA5GNpC.js → api-endpoints-D-Whnnwd.js} +9 -9
  7. package/dist/viewer/assets/{api-group-endpoints-page-Di42W69y.js → api-group-endpoints-page-B9R1EI4i.js} +9 -9
  8. package/dist/viewer/assets/{arc-Cn8owoDw.js → arc-DauzQXFu.js} +1 -1
  9. package/dist/viewer/assets/architectureDiagram-5GKGNRK7-CXzgHd-c.js +36 -0
  10. package/dist/viewer/assets/{arrow-left-DWcMgM2U.js → arrow-left-DpQqmf17.js} +1 -1
  11. package/dist/viewer/assets/avatar-DAFUyk1i.js +43 -0
  12. package/dist/viewer/assets/badge-hR3QvPWv.js +1 -0
  13. package/dist/viewer/assets/better-delete-confirmation-modal-CGEQ5O4X.js +1 -0
  14. package/dist/viewer/assets/better-dialog-DcIxFWwk.js +1 -0
  15. package/dist/viewer/assets/{blockDiagram-I7D4REHJ-CbYzOsL_.js → blockDiagram-I7D4REHJ-CFHWUw4z.js} +2 -2
  16. package/dist/viewer/assets/{brands-Bd4RklRx.js → brands-DtmA1AhP.js} +1 -1
  17. package/dist/viewer/assets/button-DZj74qS7.js +1 -0
  18. package/dist/viewer/assets/{c4Diagram-7LVT6UL2-CLkVbphC.js → c4Diagram-7LVT6UL2-BHSggPKI.js} +6 -6
  19. package/dist/viewer/assets/{calendar-C0xdI_ag.js → calendar-Bolgc8E5.js} +1 -1
  20. package/dist/viewer/assets/channel-CNRSofFP.js +1 -0
  21. package/dist/viewer/assets/{check-XjanpAFg.js → check-BpmCQNbj.js} +1 -1
  22. package/dist/viewer/assets/checkbox-CFJfXL6R.js +1 -0
  23. package/dist/viewer/assets/{chevron-down-R7pQzyLD.js → chevron-down-DDsUE_xz.js} +1 -1
  24. package/dist/viewer/assets/{chevron-up-CRPypfOs.js → chevron-up-DVznKMGv.js} +1 -1
  25. package/dist/viewer/assets/{chunk-2Q5K7J3B-CcvtugCu.js → chunk-2Q5K7J3B-CNfz5YDQ.js} +1 -1
  26. package/dist/viewer/assets/{chunk-5VM5RSS4-CpZHHr12.js → chunk-5VM5RSS4-CwIhjvMe.js} +1 -1
  27. package/dist/viewer/assets/{chunk-F27PBJKO-DeAl4iOc.js → chunk-F27PBJKO-YFexFJof.js} +1 -1
  28. package/dist/viewer/assets/{chunk-IMKFNOWR-BfrPe7pS.js → chunk-IMKFNOWR-GY2yrvuo.js} +1 -1
  29. package/dist/viewer/assets/{chunk-JWPE2WC7-DDjyvUmZ.js → chunk-JWPE2WC7-xd0JGvne.js} +1 -1
  30. package/dist/viewer/assets/chunk-OB3PAWPO-DJIP1M4r.js +12 -0
  31. package/dist/viewer/assets/{chunk-POPQ4Y6H-DkDb0mzz.js → chunk-POPQ4Y6H-Bh6rizEy.js} +1 -1
  32. package/dist/viewer/assets/{chunk-SVP7TREG-D-K2XIGs.js → chunk-SVP7TREG-DtNrjvpq.js} +1 -1
  33. package/dist/viewer/assets/{chunk-TICWLB2K-DWMQQx6z.js → chunk-TICWLB2K-DrERwtw8.js} +1 -1
  34. package/dist/viewer/assets/{chunk-XXDRQBXY-DfkljAyM.js → chunk-XXDRQBXY-fYo04iwY.js} +1 -1
  35. package/dist/viewer/assets/{circle-alert-pm13M-Ef.js → circle-alert-Bl7DXYD_.js} +1 -1
  36. package/dist/viewer/assets/classDiagram-ZZMXUADV-D7PO-ME9.js +1 -0
  37. package/dist/viewer/assets/classDiagram-v2-VYDZK3BY-D7PO-ME9.js +1 -0
  38. package/dist/viewer/assets/color-input-ClkkG_kZ.js +11 -0
  39. package/dist/viewer/assets/{common-Y7ySZBdh.js → common-DLCsGQ-t.js} +1 -1
  40. package/dist/viewer/assets/{component-icons-D1BDAuEt.js → component-icons-MJ61E9nt.js} +2 -2
  41. package/dist/viewer/assets/{copy-CN4K2f_R.js → copy-DMJJonQF.js} +1 -1
  42. package/dist/viewer/assets/cose-bilkent-JH36ORCC-Dplz8nVT.js +1 -0
  43. package/dist/viewer/assets/cross-button-D5qst1tj.js +1 -0
  44. package/dist/viewer/assets/{cynefin-OW5HDTMX-yz-uw9Kz.js → cynefin-OW5HDTMX-DiBs4CI8.js} +1 -1
  45. package/dist/viewer/assets/cynefinDiagram-5FMLGOSQ-COXS8-dI.js +62 -0
  46. package/dist/viewer/assets/{dagre-GXQ25YYZ-zjZDwXOe.js → dagre-GXQ25YYZ-K8qvfG8D.js} +2 -2
  47. package/dist/viewer/assets/dashboard-diagrams-page-Cb0xNr4W.js +2 -0
  48. package/dist/viewer/assets/dashboard-diagrams-page-inner-CD--zr5q.js +1 -0
  49. package/dist/viewer/assets/dashboard-docs-page-BfWR9Ai9.js +2 -0
  50. package/dist/viewer/assets/dashboard-docs-page-inner-BLbX-YwF.js +67 -0
  51. package/dist/viewer/assets/dashboard-layout-sTeeHNsZ.js +1 -0
  52. package/dist/viewer/assets/dashboard-lens-layout-D-tu_4kn.js +1 -0
  53. package/dist/viewer/assets/dashboard-map-frame-page-7pDmbTSe.js +1 -0
  54. package/dist/viewer/assets/dashboard-plans-page-CfwOZ34A.js +1 -0
  55. package/dist/viewer/assets/dashboard-service-apis-k93fjW51.js +1 -0
  56. package/dist/viewer/assets/{dashboard-service-diagrams-CIjk95Jk.js → dashboard-service-diagrams-BIWUxX-Y.js} +3 -3
  57. package/dist/viewer/assets/dashboard-service-docs-CnniTD6Q.js +1 -0
  58. package/dist/viewer/assets/{dashboard-service-overview-CzePVPjl.js → dashboard-service-overview-CGBu4omY.js} +5 -5
  59. package/dist/viewer/assets/dashboard-services-DEscIO2O.js +1 -0
  60. package/dist/viewer/assets/{db-type-badge-DOgu1Pyc.js → db-type-badge-UbPgpwQf.js} +2 -2
  61. package/dist/viewer/assets/debounce-Cp8eREM4-D7o-Pzb-.js +2 -0
  62. package/dist/viewer/assets/{dependencies-CYdEztHw.js → dependencies-DK2GDlhQ.js} +1 -1
  63. package/dist/viewer/assets/{dependency-graph-DbyfN-rC.js → dependency-graph-xBEnCS0J.js} +3 -3
  64. package/dist/viewer/assets/{diagram-S7CK7UJ4-q-NHkUCx.js → diagram-S7CK7UJ4-D-liadVe.js} +2 -2
  65. package/dist/viewer/assets/diagram-UQ7AKVKN-CnA8mgXp.js +41 -0
  66. package/dist/viewer/assets/{diagram-VSXAHHWV-DZc1kHGx.js → diagram-VSXAHHWV-Ck7dgRFR.js} +2 -2
  67. package/dist/viewer/assets/diagram-VX7I27RA-Cm1LHbu3.js +24 -0
  68. package/dist/viewer/assets/diagram-Z3DM3KII-DV3yBUCB.js +24 -0
  69. package/dist/viewer/assets/diagram-live-preview-DzJ7Nxp1.js +2 -0
  70. package/dist/viewer/assets/{diagram-portal-page-CWxuok9E.js → diagram-portal-page-gguGLULH.js} +24 -24
  71. package/dist/viewer/assets/{diagrams-C1xkRPqT.js → diagrams-BqBSv2eb.js} +4 -4
  72. package/dist/viewer/assets/dialog-D7wzTt0L.js +6 -0
  73. package/dist/viewer/assets/{doc-file-content-B06roi8L.js → doc-file-content-Be0au9Vo.js} +4 -4
  74. package/dist/viewer/assets/{download-CLdCXVsO.js → download-DhyZ3g4F.js} +1 -1
  75. package/dist/viewer/assets/ebnfDiagram-PWID7BFC-BXbHVQvG.js +1 -0
  76. package/dist/viewer/assets/{editor-vqK4qAnB.js → editor-F9o4zoeB.js} +2 -2
  77. package/dist/viewer/assets/{erDiagram-RLTQ6QDP-BWuA-aqV.js → erDiagram-RLTQ6QDP-DMfiWput.js} +2 -2
  78. package/dist/viewer/assets/{file-text-BvszilVL.js → file-text-BFqJQ67P.js} +1 -1
  79. package/dist/viewer/assets/flow-diagram-preview-B83UU1n_.js +1 -0
  80. package/dist/viewer/assets/{flowDiagram-HODETNUW-Db0QtNj4.js → flowDiagram-HODETNUW-BNFS2Mkr.js} +1 -1
  81. package/dist/viewer/assets/ganttDiagram-EL5Y4UJY-DFDsYJNp.js +292 -0
  82. package/dist/viewer/assets/gitGraphDiagram-WWUBYQGX-BVHabPDp.js +106 -0
  83. package/dist/viewer/assets/global-loader-XJO9_e0l.js +1 -0
  84. package/dist/viewer/assets/{globe-Jl6eIZmG.js → globe-CJ35KsQW.js} +1 -1
  85. package/dist/viewer/assets/gql-FFIj8zdp.js +1 -0
  86. package/dist/viewer/assets/{grid-scroll-body-CPqSxU6-.js → grid-scroll-body-DC5pYDPJ.js} +2 -2
  87. package/dist/viewer/assets/iconBase-DtqdW2XR.js +1 -0
  88. package/dist/viewer/assets/index-B6MxYIzs.js +1 -0
  89. package/dist/viewer/assets/index-BC5xdBQU.js +48 -0
  90. package/dist/viewer/assets/index-BIrx3oY4.js +1 -0
  91. package/dist/viewer/assets/{index-jm22RWpY.js → index-BZGsDmUx.js} +5 -5
  92. package/dist/viewer/assets/{index-Poftp9f1.js → index-BZXhpoWr.js} +4 -4
  93. package/dist/viewer/assets/index-Bn2bqqMd.js +1 -0
  94. package/dist/viewer/assets/{index-HU5pz3kj.js → index-BpCVYTvP.js} +36 -36
  95. package/dist/viewer/assets/{index-Bt2YHgxl.js → index-CBOYhBKJ.js} +1 -1
  96. package/dist/viewer/assets/index-CH7cEAxj.js +17 -0
  97. package/dist/viewer/assets/index-CIf0GId3.js +74 -0
  98. package/dist/viewer/assets/{index-D7MEHpJf.js → index-Ck66Ic_p.js} +4 -4
  99. package/dist/viewer/assets/index-Cp9mIQ8F.js +1 -0
  100. package/dist/viewer/assets/{index-c6Bxcoqm.js → index-DDmBuMKI.js} +1 -1
  101. package/dist/viewer/assets/{index-BSyJbFDG.js → index-DY3BFyb6.js} +1 -1
  102. package/dist/viewer/assets/{index-BS94XVnd.js → index-DkzZ-ZvR.js} +1 -1
  103. package/dist/viewer/assets/{index-C_43VC19.js → index-PglMbhys.js} +1 -1
  104. package/dist/viewer/assets/infoDiagram-27XIBGKW-CG-wwxBf.js +2 -0
  105. package/dist/viewer/assets/input--C59pq6j.js +1 -0
  106. package/dist/viewer/assets/{ishikawaDiagram-5VMMS53U-C4PzFnZ4.js → ishikawaDiagram-5VMMS53U-BlgV7ceJ.js} +2 -2
  107. package/dist/viewer/assets/{journeyDiagram-3NMN7TZE-Dpn3bBNo.js → journeyDiagram-3NMN7TZE-Cn03_Xl6.js} +2 -2
  108. package/dist/viewer/assets/{kanban-definition-UXKFOSKX-CJ99H4G6.js → kanban-definition-UXKFOSKX-CJogvDPY.js} +6 -6
  109. package/dist/viewer/assets/{layout-Bfvxt_D5.js → layout-B26eC4yQ.js} +1 -1
  110. package/dist/viewer/assets/{lens-run-page-DZneics-.js → lens-run-page-Ba1ppzJt.js} +3 -3
  111. package/dist/viewer/assets/lens-runs-page-BnUS57LM.js +1 -0
  112. package/dist/viewer/assets/{link-2-C75goIOt.js → link-2-D1e0xznG.js} +1 -1
  113. package/dist/viewer/assets/linked-project-dot-BY1gEES9.js +543 -0
  114. package/dist/viewer/assets/{loader-circle-C5jZoM7X.js → loader-circle-CiqyoJF7.js} +1 -1
  115. package/dist/viewer/assets/{merge-Cy7YkrN7.js → merge-BhOMvhW1.js} +1 -1
  116. package/dist/viewer/assets/mermaid.core-BDgZg3kW.js +312 -0
  117. package/dist/viewer/assets/method-badge-DErZP7y5.js +1 -0
  118. package/dist/viewer/assets/{mindmap-definition-YA3MSWOX-yQCKA-K4.js → mindmap-definition-YA3MSWOX-DFkLu0ac.js} +2 -2
  119. package/dist/viewer/assets/nav-links-DZWMpwMR.js +61 -0
  120. package/dist/viewer/assets/{network-COWNXGMM.js → network-B1apzT1s.js} +1 -1
  121. package/dist/viewer/assets/{nosql-editor-modal-DTiWkc_r.js → nosql-editor-modal-CvH0SWAi.js} +5 -5
  122. package/dist/viewer/assets/not-found-page-C-fn8QeM.js +1 -0
  123. package/dist/viewer/assets/organization-dependency-graph-page-BryP-iJL.js +1 -0
  124. package/dist/viewer/assets/pegDiagram-XKGWAZYB-g1cM14-L.js +1 -0
  125. package/dist/viewer/assets/{pieDiagram-E7YTZNPT-DqnkpCX4.js → pieDiagram-E7YTZNPT-WEnDsMY3.js} +2 -2
  126. package/dist/viewer/assets/{plus-DQakmTjA.js → plus-DbyuOgKB.js} +1 -1
  127. package/dist/viewer/assets/popover-476u3TN0.js +1 -0
  128. package/dist/viewer/assets/preload-helper-BlTxHScW.js +1 -0
  129. package/dist/viewer/assets/{quadrantDiagram-AXDQQJYC-iQjJfars.js → quadrantDiagram-AXDQQJYC-NdfQCpzF.js} +2 -2
  130. package/dist/viewer/assets/query-D9oj6LGx.js +50 -0
  131. package/dist/viewer/assets/{quill-rCHj4fCw.js → quill-Cde5JMRD.js} +1 -1
  132. package/dist/viewer/assets/railroadDiagram-O6MQD6OU-BYhlXlMY.js +1 -0
  133. package/dist/viewer/assets/{react-BNzYaZuG.js → react-Bx48XWN4.js} +1 -1
  134. package/dist/viewer/assets/react-flow-wrapper-BcbvHgxz.js +277 -0
  135. package/dist/viewer/assets/{requirementDiagram-BXWQKSXE-Bv-Vh1dW.js → requirementDiagram-BXWQKSXE-C25Bcm2L.js} +2 -2
  136. package/dist/viewer/assets/{sankeyDiagram-P5KCCOFB-C__uD07f.js → sankeyDiagram-P5KCCOFB-h8LiCsgk.js} +2 -2
  137. package/dist/viewer/assets/scroll-area-RagrStGj.js +6 -0
  138. package/dist/viewer/assets/{search-DW-qhXLk.js → search-vw7ucoOs.js} +1 -1
  139. package/dist/viewer/assets/section-loader-C4hOfhQS.js +1 -0
  140. package/dist/viewer/assets/section-not-found-BnrXiPog.js +1 -0
  141. package/dist/viewer/assets/select-D9fbrr7O.js +1 -0
  142. package/dist/viewer/assets/{sequenceDiagram-WJ2MYXX4-1RbvcHwO.js → sequenceDiagram-WJ2MYXX4-CDRVvD30.js} +2 -2
  143. package/dist/viewer/assets/{service-context-C17u_Fw9.js → service-context-D5nBtU18.js} +1 -1
  144. package/dist/viewer/assets/{service-database-list-page-cYuDHIls.js → service-database-list-page-DBjaDLVy.js} +2 -2
  145. package/dist/viewer/assets/service-database-page-CenNCgwf.js +2 -0
  146. package/dist/viewer/assets/service-database-page-inner-gS51TQTZ.js +85 -0
  147. package/dist/viewer/assets/{service-doc-Dir8g83J.js → service-doc-C-jHqT1U.js} +4 -4
  148. package/dist/viewer/assets/{service-doc-preview-modal-bJ6tJ5YR.js → service-doc-preview-modal-5sX6FOu1.js} +2 -2
  149. package/dist/viewer/assets/service-layout-Bf0vZBCH.js +1 -0
  150. package/dist/viewer/assets/service-pages-CFikvX4t.js +1 -0
  151. package/dist/viewer/assets/{services-Crqkffr5.js → services-Ivav34WC.js} +4 -4
  152. package/dist/viewer/assets/{share-2-BmYmqN4k.js → share-2-CQEaWbfH.js} +1 -1
  153. package/dist/viewer/assets/sizeCapture-INFHLROL-BJ6ndnPM.js +1 -0
  154. package/dist/viewer/assets/stateDiagram-D77RDMKH-B_tNCX3o.js +1 -0
  155. package/dist/viewer/assets/stateDiagram-v2-MP3YSRHH-Dl9wqdli.js +1 -0
  156. package/dist/viewer/assets/{style-DgSU0bQl.js → style-BPesJvJr.js} +8 -8
  157. package/dist/viewer/assets/super-circle-loader-DSkos6uP.js +1 -0
  158. package/dist/viewer/assets/super-logo-loader-Cxlbn6MB.js +1 -0
  159. package/dist/viewer/assets/swimlanes-42K2YHIH-CzURzYwf.js +1 -0
  160. package/dist/viewer/assets/swimlanesDiagram-VR7AAH4N-DrIlwFtk.js +8 -0
  161. package/dist/viewer/assets/table-B4pFND-o.js +1 -0
  162. package/dist/viewer/assets/textarea-Clgdv3Oi.js +1 -0
  163. package/dist/viewer/assets/{timeline-definition-24CTP7MA-C4yuLwUH.js → timeline-definition-24CTP7MA-D0YXQE1U.js} +2 -2
  164. package/dist/viewer/assets/ui-graph-logo-gHowu5gP.js +1 -0
  165. package/dist/viewer/assets/{upload-CRsS43j9.js → upload-CYb3nN_5.js} +1 -1
  166. package/dist/viewer/assets/{uploads-BOQHX9l4.js → uploads-CX2kdXbM.js} +8 -8
  167. package/dist/viewer/assets/{use-debounced-value-Ba-kkCUY.js → use-debounced-value-BpNFJd3C.js} +1 -1
  168. package/dist/viewer/assets/{use-localstorage-DIisTx-J.js → use-localstorage-D233xVb0.js} +1 -1
  169. package/dist/viewer/assets/use-permissions-BvmxJJ5r.js +1 -0
  170. package/dist/viewer/assets/{use-scoped-storage-C4RzED-E.js → use-scoped-storage-DL1XVp1j.js} +1 -1
  171. package/dist/viewer/assets/useMutation-D5ZHwHsx.js +1 -0
  172. package/dist/viewer/assets/useQuery-Dhe6uxrL.js +1 -0
  173. package/dist/viewer/assets/{vennDiagram-4TSXK5OY-BCtqXZqe.js → vennDiagram-4TSXK5OY-SSjHlqCQ.js} +2 -2
  174. package/dist/viewer/assets/{wardleyDiagram-VM6X3IG4-D3OtZJoT.js → wardleyDiagram-VM6X3IG4-CZWNdQxH.js} +2 -2
  175. package/dist/viewer/assets/{xychartDiagram-S5SC5T6Z-DxLL2CHH.js → xychartDiagram-S5SC5T6Z-B2qAGeb0.js} +2 -2
  176. package/dist/viewer/assets/zod-BMU4UTQt.js +1 -0
  177. package/dist/viewer/index.html +10 -1
  178. package/package.json +57 -57
  179. package/dist/abort-signals-B4fc3ahg.mjs +0 -34
  180. package/dist/agents.md +0 -28
  181. package/dist/anthropic-messages-KPxCHqBN.mjs +0 -14327
  182. package/dist/auth-storage-BvNH97p9.mjs +0 -2180
  183. package/dist/azure-openai-config-BbeCSg4y.mjs +0 -55
  184. package/dist/azure-openai-responses-BRzy8RfL.mjs +0 -182
  185. package/dist/classifier-shared-DBUHiTGw.mjs +0 -105
  186. package/dist/cli-2R6QQFp1.mjs +0 -451
  187. package/dist/cloudflare-workers-ai-system-one-BfqwmRQf.mjs +0 -44
  188. package/dist/config-D8DMGzIq.mjs +0 -647
  189. package/dist/cross-spawn-B2jIQPlu.mjs +0 -404
  190. package/dist/diagnostics-xdSgQR8t.mjs +0 -131
  191. package/dist/dist-BRyghrKX.mjs +0 -404
  192. package/dist/dist-D0EzrblG.mjs +0 -12161
  193. package/dist/dist-EKhnHWHG.mjs +0 -140221
  194. package/dist/dist-pQtuusFv.mjs +0 -1243
  195. package/dist/easter-egg-3d-C9_btlWn.mjs +0 -1225
  196. package/dist/env-api-keys-uytNub6O.mjs +0 -122
  197. package/dist/error-body-FhmCtR7m.mjs +0 -101
  198. package/dist/esm-D5isprgl.mjs +0 -1533
  199. package/dist/esm-DnqE4pfM.mjs +0 -104876
  200. package/dist/execute-BoTKl80U.mjs +0 -1715
  201. package/dist/github-copilot-headers-DWcTgoXr.mjs +0 -22
  202. package/dist/google-generative-ai-Brs5YpJo.mjs +0 -332
  203. package/dist/google-shared-2CyYa4VE.mjs +0 -33438
  204. package/dist/google-vertex-DZDUQPKa.mjs +0 -378
  205. package/dist/hash-DN7ukSfd.mjs +0 -16
  206. package/dist/headers-GhQHLk-3.mjs +0 -17
  207. package/dist/jiti-9kWALm4Y.mjs +0 -5439
  208. package/dist/jiti-loader-f21DrY1K.mjs +0 -27
  209. package/dist/jiti-static-loader-BI_w28l7.mjs +0 -41704
  210. package/dist/json-parse-B2mHg7o7.mjs +0 -381
  211. package/dist/keybinding-hints-D0nLU3ZH.mjs +0 -17899
  212. package/dist/lib-Dj1gKQJc.mjs +0 -24379
  213. package/dist/llama-cpp-classify-C73BoMYd.mjs +0 -344
  214. package/dist/mistral-conversations-DXVR7znL.mjs +0 -698
  215. package/dist/models-DBdii9gQ.mjs +0 -1255
  216. package/dist/multipart-parser-DLw9Z0uJ.mjs +0 -298
  217. package/dist/node-B0NU8X55.mjs +0 -2479
  218. package/dist/node-B8gaKm9g.mjs +0 -23
  219. package/dist/openai-I3_AqKDX.mjs +0 -17357
  220. package/dist/openai-codex-responses-PcZHDuBD.mjs +0 -1198
  221. package/dist/openai-completions-a_mH01ii.mjs +0 -994
  222. package/dist/openai-decisions-Du8y4mQG.mjs +0 -142
  223. package/dist/openai-prompt-cache-Bc6qNWt0.mjs +0 -8
  224. package/dist/openai-responses-a9lV_U7O.mjs +0 -270
  225. package/dist/openai-responses-shared-CDs_PBiH.mjs +0 -598
  226. package/dist/openrouter-images-D0Zc8Cjs.mjs +0 -125
  227. package/dist/photon_rs-DCvMOMu0.mjs +0 -4252
  228. package/dist/pi-messages-B5ietIBq.mjs +0 -306
  229. package/dist/plan-prompt.md +0 -56
  230. package/dist/prompt.md +0 -44
  231. package/dist/provider-env-BJhgA66g.mjs +0 -37
  232. package/dist/provider-retry-DXYM7rVE.mjs +0 -79
  233. package/dist/runtime-DTkBxiaM.mjs +0 -2822
  234. package/dist/sanitize-unicode-CqChtoM6.mjs +0 -26
  235. package/dist/shell-836_JFnI.mjs +0 -162
  236. package/dist/source-CKPndhKl.mjs +0 -478
  237. package/dist/src-DNm2QRm3.mjs +0 -5028
  238. package/dist/system-one-shared-DUAFtNa8.mjs +0 -75
  239. package/dist/token-DEUkymby.mjs +0 -56
  240. package/dist/token-util-Cx5S4eKt.mjs +0 -3
  241. package/dist/tool-DHDYqsyG.mjs +0 -6673
  242. package/dist/transform-messages-BClk99Vn.mjs +0 -477
  243. package/dist/typesafe-system-one-D2d8j8hZ.mjs +0 -24
  244. package/dist/typescript-Br-vsRJV.mjs +0 -6737
  245. package/dist/uuid-CNCZqNBb.mjs +0 -49
  246. package/dist/v2-1z8ijsD3.mjs +0 -6120
  247. package/dist/viewer/assets/abnfDiagram-VCTEODGH-j5YaKnl9.js +0 -1
  248. package/dist/viewer/assets/actor-avatar-DqmoY8Xc.js +0 -1
  249. package/dist/viewer/assets/architectureDiagram-5GKGNRK7-D80cJKz_.js +0 -36
  250. package/dist/viewer/assets/avatar-BI7D-Aia.js +0 -43
  251. package/dist/viewer/assets/badge-870-A4Y6.js +0 -1
  252. package/dist/viewer/assets/better-delete-confirmation-modal-Dib31LVb.js +0 -1
  253. package/dist/viewer/assets/better-dialog-D3AAiahr.js +0 -1
  254. package/dist/viewer/assets/button-DadqadpO.js +0 -1
  255. package/dist/viewer/assets/channel-DRkt3LIn.js +0 -1
  256. package/dist/viewer/assets/checkbox-BXpR079x.js +0 -1
  257. package/dist/viewer/assets/classDiagram-ZZMXUADV-G5CebNaC.js +0 -1
  258. package/dist/viewer/assets/classDiagram-v2-VYDZK3BY-G5CebNaC.js +0 -1
  259. package/dist/viewer/assets/color-input-Efm-lxDy.js +0 -11
  260. package/dist/viewer/assets/cose-bilkent-JH36ORCC-CrSHFmnp.js +0 -1
  261. package/dist/viewer/assets/cross-button-5Sr5rWVP.js +0 -1
  262. package/dist/viewer/assets/cynefinDiagram-5FMLGOSQ-Bdl_eBdu.js +0 -62
  263. package/dist/viewer/assets/dashboard-diagrams-page-DMupOe1m.js +0 -2
  264. package/dist/viewer/assets/dashboard-diagrams-page-inner-Dh0yKh2A.js +0 -1
  265. package/dist/viewer/assets/dashboard-docs-page-DWJ1qOQz.js +0 -2
  266. package/dist/viewer/assets/dashboard-docs-page-inner-Fs6G3oGo.js +0 -67
  267. package/dist/viewer/assets/dashboard-layout-D36InAaB.js +0 -1
  268. package/dist/viewer/assets/dashboard-lens-layout-Cv1Xx3hY.js +0 -1
  269. package/dist/viewer/assets/dashboard-map-frame-page-CTn61NUO.js +0 -1
  270. package/dist/viewer/assets/dashboard-plans-page-DxFJkrgK.js +0 -1
  271. package/dist/viewer/assets/dashboard-service-apis-BHtD9s5z.js +0 -1
  272. package/dist/viewer/assets/dashboard-service-docs-Uv_1uxxO.js +0 -1
  273. package/dist/viewer/assets/dashboard-services-CUP-L4Jg.js +0 -1
  274. package/dist/viewer/assets/diagram-UQ7AKVKN-DhFcurW6.js +0 -41
  275. package/dist/viewer/assets/diagram-VX7I27RA-DE1nREE8.js +0 -24
  276. package/dist/viewer/assets/diagram-Z3DM3KII-CSrYcCbc.js +0 -24
  277. package/dist/viewer/assets/diagram-live-preview-i5doxXLH.js +0 -2
  278. package/dist/viewer/assets/dialog-D_HtNS17.js +0 -6
  279. package/dist/viewer/assets/ebnfDiagram-PWID7BFC-BfL8m_sf.js +0 -1
  280. package/dist/viewer/assets/flow-diagram-preview-T0Z4iMVU.js +0 -1
  281. package/dist/viewer/assets/ganttDiagram-EL5Y4UJY-CsITpniw.js +0 -292
  282. package/dist/viewer/assets/gitGraphDiagram-WWUBYQGX-B4eCBGoe.js +0 -106
  283. package/dist/viewer/assets/iconBase-BoDZfJgC.js +0 -1
  284. package/dist/viewer/assets/index-5E1tJ7yK.js +0 -125
  285. package/dist/viewer/assets/index-7XpV2DRw.js +0 -1
  286. package/dist/viewer/assets/index-C0Rs3s9Z.js +0 -1
  287. package/dist/viewer/assets/index-CzHjJWeV.js +0 -1
  288. package/dist/viewer/assets/index-DcEA6SIV.js +0 -74
  289. package/dist/viewer/assets/infoDiagram-27XIBGKW-lTebN5Ix.js +0 -2
  290. package/dist/viewer/assets/input-YvHTVS0E.js +0 -1
  291. package/dist/viewer/assets/lens-runs-page-DoAOObxx.js +0 -1
  292. package/dist/viewer/assets/linked-project-dot-Ds2uEmJ9.js +0 -543
  293. package/dist/viewer/assets/mermaid.core-BCRBv8Us.js +0 -312
  294. package/dist/viewer/assets/method-badge-DMYDKdDZ.js +0 -1
  295. package/dist/viewer/assets/nav-links-8vT2ixiI.js +0 -61
  296. package/dist/viewer/assets/not-found-page-CnfLlhS4.js +0 -1
  297. package/dist/viewer/assets/organization-dependency-graph-page-3xqIxjNx.js +0 -1
  298. package/dist/viewer/assets/pegDiagram-XKGWAZYB-CMXqeAum.js +0 -1
  299. package/dist/viewer/assets/popover-CN9ni1N3.js +0 -1
  300. package/dist/viewer/assets/railroadDiagram-O6MQD6OU-CfqToX3W.js +0 -1
  301. package/dist/viewer/assets/react-flow-wrapper-BPlRstyO.js +0 -276
  302. package/dist/viewer/assets/scroll-area-BodE-n7W.js +0 -6
  303. package/dist/viewer/assets/section-loader-BzpYM_Nx.js +0 -1
  304. package/dist/viewer/assets/select-DDtnmSET.js +0 -1
  305. package/dist/viewer/assets/service-database-page-CMi1wF4h.js +0 -2
  306. package/dist/viewer/assets/service-database-page-inner-CoqAj93L.js +0 -85
  307. package/dist/viewer/assets/service-layout-0NMm_bKG.js +0 -1
  308. package/dist/viewer/assets/service-pages-dfnc91SU.js +0 -1
  309. package/dist/viewer/assets/sizeCapture-INFHLROL-BRJi3gCg.js +0 -1
  310. package/dist/viewer/assets/stateDiagram-D77RDMKH-DdLsfxgy.js +0 -1
  311. package/dist/viewer/assets/stateDiagram-v2-MP3YSRHH-DFwg8Qki.js +0 -1
  312. package/dist/viewer/assets/super-circle-loader-D8MElOMh.js +0 -1
  313. package/dist/viewer/assets/super-logo-loader-DJYiRbCS.js +0 -1
  314. package/dist/viewer/assets/swimlanes-42K2YHIH-AuYjrPqh.js +0 -1
  315. package/dist/viewer/assets/swimlanesDiagram-VR7AAH4N-0nIGA8_4.js +0 -8
  316. package/dist/viewer/assets/table-Bi4Auk9Z.js +0 -1
  317. package/dist/viewer/assets/textarea-MgxZ5x6-.js +0 -1
  318. package/dist/viewer/assets/ui-graph-logo-D4jRhd4z.js +0 -1
  319. package/dist/viewer/assets/use-permissions-6JVET753.js +0 -1
  320. package/dist/viewer/assets/useMutation-CmVaR9zz.js +0 -1
  321. package/dist/viewer/assets/useQuery-B8yYhO0c.js +0 -1
  322. package/dist/viewer/assets/zod-Dc4H6VVJ.js +0 -1
  323. package/dist/virtual-modules-DnCx0Gdx.mjs +0 -340
@@ -1,1198 +0,0 @@
1
- import { t as getProviderEnvValue } from "./provider-env-BJhgA66g.mjs";
2
- import { a as AssistantMessageEventStream, i as formatThrownValue, n as createAssistantMessageDiagnostic, t as appendAssistantMessageDiagnostic } from "./diagnostics-xdSgQR8t.mjs";
3
- import { T as getSystemMessageText, b as resolveTranscript, h as getInitialSystemMessage, m as getDeclaredTools, n as clampThinkingLevel, x as resolveTranscriptTools, y as normalizeContext } from "./models-DBdii9gQ.mjs";
4
- import { t as headersToRecord } from "./headers-GhQHLk-3.mjs";
5
- import { l as createGrammarToolInputProperties, m as getPiUserAgent, r as buildBaseOptions } from "./transform-messages-BClk99Vn.mjs";
6
- import { n as normalizeProviderError, t as formatProviderError } from "./error-body-FhmCtR7m.mjs";
7
- import { t as clampOpenAIPromptCacheKey } from "./openai-prompt-cache-Bc6qNWt0.mjs";
8
- import { n as convertResponsesTools, r as processResponsesStream, t as convertResponsesMessages } from "./openai-responses-shared-CDs_PBiH.mjs";
9
- import { t as combineAbortSignals } from "./abort-signals-B4fc3ahg.mjs";
10
- import { r as registerSessionResourceCleanup, t as uuidv7 } from "./uuid-CNCZqNBb.mjs";
11
- //#region node_modules/.pnpm/@earendil-works+pi-ai@1.2.0_@aws-sdk+credential-provider-node@3.972.86_@modelcontextpro_dcf109e705e96235bfb9a180457030de/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js
12
- const DEFAULT_PROXY_PORTS = {
13
- ftp: 21,
14
- gopher: 70,
15
- http: 80,
16
- https: 443,
17
- ws: 80,
18
- wss: 443
19
- };
20
- function getProxyEnv(key, env) {
21
- const lowercaseKey = key.toLowerCase();
22
- const uppercaseKey = key.toUpperCase();
23
- return env?.[lowercaseKey] || env?.[uppercaseKey] || getProviderEnvValue(lowercaseKey) || getProviderEnvValue(uppercaseKey) || "";
24
- }
25
- function parseProxyTargetUrl(targetUrl) {
26
- if (targetUrl instanceof URL) return targetUrl;
27
- try {
28
- return new URL(targetUrl);
29
- } catch {
30
- return;
31
- }
32
- }
33
- function stripBrackets(host) {
34
- return host.startsWith("[") && host.endsWith("]") ? host.slice(1, -1) : host;
35
- }
36
- function parseNoProxyEntry(entry) {
37
- const trimmed = entry.trim().toLowerCase();
38
- if (!trimmed) return void 0;
39
- if (trimmed.startsWith("[")) {
40
- const closingBracket = trimmed.indexOf("]");
41
- if (closingBracket !== -1) {
42
- const host = trimmed.slice(1, closingBracket);
43
- const rest = trimmed.slice(closingBracket + 1);
44
- if (rest.startsWith(":")) {
45
- const port = Number.parseInt(rest.slice(1), 10);
46
- return {
47
- host,
48
- port: Number.isNaN(port) ? 0 : port
49
- };
50
- }
51
- return {
52
- host,
53
- port: 0
54
- };
55
- }
56
- }
57
- if (trimmed.includes(":") && trimmed.split(":").length > 2) return {
58
- host: trimmed,
59
- port: 0
60
- };
61
- const colonIndex = trimmed.lastIndexOf(":");
62
- if (colonIndex !== -1 && colonIndex === trimmed.indexOf(":")) {
63
- const host = trimmed.slice(0, colonIndex);
64
- const port = Number.parseInt(trimmed.slice(colonIndex + 1), 10);
65
- if (!Number.isNaN(port)) return {
66
- host,
67
- port
68
- };
69
- }
70
- return {
71
- host: trimmed,
72
- port: 0
73
- };
74
- }
75
- function shouldProxyHostname(hostname, port, env) {
76
- const noProxy = getProxyEnv("no_proxy", env).toLowerCase();
77
- if (!noProxy) return true;
78
- if (noProxy === "*") return false;
79
- const normalizedTargetHost = stripBrackets(hostname.toLowerCase());
80
- return noProxy.split(/[,\s]/).every((entry) => {
81
- const parsed = parseNoProxyEntry(entry);
82
- if (!parsed) return true;
83
- if (parsed.port && parsed.port !== port) return true;
84
- let domain = stripBrackets(parsed.host);
85
- if (domain.startsWith("*.")) domain = domain.slice(2);
86
- else if (domain.startsWith(".") || domain.startsWith("*")) domain = domain.slice(1);
87
- if (!domain) return true;
88
- if (normalizedTargetHost === domain) return false;
89
- if (normalizedTargetHost.endsWith(`.${domain}`)) return false;
90
- return true;
91
- });
92
- }
93
- function getProxyForUrl(targetUrl, env) {
94
- const parsedUrl = parseProxyTargetUrl(targetUrl);
95
- if (!parsedUrl?.protocol || !parsedUrl.host) return "";
96
- const protocol = parsedUrl.protocol.split(":", 1)[0];
97
- if (!shouldProxyHostname(stripBrackets(parsedUrl.hostname || parsedUrl.host.replace(/:\d*$/, "")), Number.parseInt(parsedUrl.port, 10) || DEFAULT_PROXY_PORTS[protocol] || 0, env)) return "";
98
- let proxy = getProxyEnv(`${protocol}_proxy`, env) || getProxyEnv("all_proxy", env);
99
- if (proxy && !proxy.includes("://")) proxy = `${protocol}://${proxy}`;
100
- return proxy;
101
- }
102
- const UNSUPPORTED_PROXY_PROTOCOL_MESSAGE = "Unsupported proxy protocol. SOCKS and PAC proxy URLs are not supported; use an HTTP or HTTPS proxy URL.";
103
- function resolveHttpProxyUrlForTarget(targetUrl, env) {
104
- const proxy = getProxyForUrl(targetUrl, env);
105
- if (!proxy) return;
106
- let proxyUrl;
107
- try {
108
- proxyUrl = new URL(proxy);
109
- } catch (error) {
110
- throw new Error(`Invalid proxy URL ${JSON.stringify(proxy)}: ${error instanceof Error ? error.message : String(error)}`);
111
- }
112
- if (proxyUrl.protocol !== "http:" && proxyUrl.protocol !== "https:") throw new Error(`${UNSUPPORTED_PROXY_PROTOCOL_MESSAGE} Got ${proxyUrl.protocol}`);
113
- return proxyUrl;
114
- }
115
- //#endregion
116
- //#region node_modules/.pnpm/@earendil-works+pi-ai@1.2.0_@aws-sdk+credential-provider-node@3.972.86_@modelcontextpro_dcf109e705e96235bfb9a180457030de/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js
117
- const DEFAULT_CODEX_BASE_URL = "https://chatgpt.com/backend-api";
118
- const JWT_CLAIM_PATH = "https://api.openai.com/auth";
119
- const DEFAULT_MAX_RETRIES = 0;
120
- const BASE_DELAY_MS = 1e3;
121
- const DEFAULT_MAX_RETRY_DELAY_MS = 6e4;
122
- const DEFAULT_WEBSOCKET_CONNECT_TIMEOUT_MS = 15e3;
123
- const REQUEST_COMPRESSION_ZSTD_LEVEL = 3;
124
- const CODEX_TOOL_CALL_PROVIDERS = /* @__PURE__ */ new Set([
125
- "openai",
126
- "openai-codex",
127
- "opencode"
128
- ]);
129
- const WEBSOCKET_MESSAGE_TOO_BIG_CLOSE_CODE = 1009;
130
- const WEBSOCKET_CONNECTION_LIMIT_REACHED_CODE = "websocket_connection_limit_reached";
131
- const PREVIOUS_RESPONSE_NOT_FOUND_CODE = "previous_response_not_found";
132
- const CODEX_RESPONSE_STATUSES = /* @__PURE__ */ new Set([
133
- "completed",
134
- "incomplete",
135
- "failed",
136
- "cancelled",
137
- "queued",
138
- "in_progress"
139
- ]);
140
- function assertSuccessfulOutput(output) {
141
- if (output.stopReason === "pending") throw new Error("Codex stream ended without a stop reason");
142
- if (output.stopReason === "error" || output.stopReason === "aborted") throw new Error(output.errorMessage || "An unknown error occurred");
143
- }
144
- function isTerminalRateLimitError(errorText) {
145
- return /GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient_quota|out of budget|quota exceeded|billing/i.test(errorText);
146
- }
147
- function isRetryableError(status, errorText) {
148
- if (status === 429 && isTerminalRateLimitError(errorText)) return false;
149
- if (status === 429 || status === 500 || status === 502 || status === 503 || status === 504) return true;
150
- return /rate.?limit|overloaded|service.?unavailable|upstream.?connect|connection.?refused/i.test(errorText);
151
- }
152
- function getRetryAfterDelayMs(headers) {
153
- const retryAfterMs = headers.get("retry-after-ms");
154
- if (retryAfterMs !== null) {
155
- const millis = Number(retryAfterMs);
156
- if (Number.isFinite(millis)) return Math.max(0, millis);
157
- }
158
- const retryAfter = headers.get("retry-after");
159
- if (!retryAfter) return;
160
- const seconds = Number(retryAfter);
161
- if (Number.isFinite(seconds)) return Math.max(0, seconds * 1e3);
162
- const date = Date.parse(retryAfter);
163
- if (!Number.isNaN(date)) return Math.max(0, date - Date.now());
164
- }
165
- var RetryDelayExceededError = class extends Error {};
166
- function validateRetryDelayMs(delayMs, options) {
167
- const maxRetryDelayMs = options?.maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS;
168
- if (maxRetryDelayMs > 0 && delayMs > maxRetryDelayMs) throw new RetryDelayExceededError(`Server requested ${Math.ceil(delayMs / 1e3)}s retry delay (max: ${Math.ceil(maxRetryDelayMs / 1e3)}s)`);
169
- return delayMs;
170
- }
171
- function sleep(ms, signal) {
172
- return new Promise((resolve, reject) => {
173
- if (signal?.aborted) {
174
- reject(/* @__PURE__ */ new Error("Request was aborted"));
175
- return;
176
- }
177
- const timeout = setTimeout(resolve, ms);
178
- signal?.addEventListener("abort", () => {
179
- clearTimeout(timeout);
180
- reject(/* @__PURE__ */ new Error("Request was aborted"));
181
- });
182
- });
183
- }
184
- function normalizeTimeoutMs(value) {
185
- if (value === void 0) return void 0;
186
- if (!Number.isFinite(value) || value < 0) throw new Error(`Invalid timeoutMs: ${String(value)}`);
187
- return Math.floor(value);
188
- }
189
- function loadNodeZlib() {
190
- if (typeof process === "undefined" || !(process.versions?.node || process.versions?.bun)) return null;
191
- return process.getBuiltinModule?.("node:zlib") ?? null;
192
- }
193
- function compressRequestBodyZstd(bodyJson) {
194
- const zlib = loadNodeZlib();
195
- if (!zlib || typeof zlib.zstdCompressSync !== "function") return null;
196
- try {
197
- const compressed = zlib.zstdCompressSync(bodyJson, { params: { [zlib.constants.ZSTD_c_compressionLevel]: REQUEST_COMPRESSION_ZSTD_LEVEL } });
198
- return new Uint8Array(compressed);
199
- } catch {
200
- return null;
201
- }
202
- }
203
- const stream = (model, context, options) => {
204
- const stream = new AssistantMessageEventStream();
205
- const normalizedContext = resolveTranscript(context, model.compat?.supportsMidConvoSystemMessages);
206
- (async () => {
207
- const output = {
208
- role: "assistant",
209
- content: [],
210
- api: "openai-codex-responses",
211
- provider: model.provider,
212
- model: model.id,
213
- usage: {
214
- input: 0,
215
- output: 0,
216
- cacheRead: 0,
217
- cacheWrite: 0,
218
- totalTokens: 0,
219
- cost: {
220
- input: 0,
221
- output: 0,
222
- cacheRead: 0,
223
- cacheWrite: 0,
224
- total: 0
225
- }
226
- },
227
- stopReason: "pending",
228
- timestamp: Date.now()
229
- };
230
- try {
231
- const apiKey = options?.apiKey;
232
- if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
233
- const accountId = extractAccountId(apiKey);
234
- const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), model.compat?.supportsOpenAIGrammarTools ?? false);
235
- const cacheSessionId = options?.cacheRetention === "none" ? void 0 : options?.sessionId;
236
- const codexSessionId = clampOpenAIPromptCacheKey(cacheSessionId);
237
- let body = buildRequestBody(model, normalizedContext, options, codexSessionId, grammarToolInputProperties);
238
- const nextBody = await options?.onPayload?.(body, model);
239
- if (nextBody !== void 0) body = nextBody;
240
- const websocketRequestId = codexSessionId || uuidv7();
241
- const sseHeaders = buildSSEHeaders(model.headers, options?.headers, accountId, apiKey, codexSessionId);
242
- const websocketHeaders = buildWebSocketHeaders(model.headers, options?.headers, accountId, apiKey, websocketRequestId);
243
- const bodyJson = JSON.stringify(body);
244
- const httpTimeoutMs = normalizeTimeoutMs(options?.timeoutMs);
245
- const websocketConnectTimeoutMs = normalizeTimeoutMs(options?.websocketConnectTimeoutMs);
246
- const transport = options?.transport || "auto";
247
- let startEmitted = false;
248
- const websocketDisabledForSession = transport !== "sse" && isWebSocketSseFallbackActive(cacheSessionId);
249
- if (websocketDisabledForSession) recordWebSocketSseFallback(cacheSessionId);
250
- if (transport !== "sse" && !websocketDisabledForSession) {
251
- let websocketStarted = false;
252
- let retriedWebSocketConnectionLimit = false;
253
- let retriedMissingWebSocketContinuation = false;
254
- while (true) {
255
- websocketStarted = false;
256
- try {
257
- await processWebSocketStream(resolveCodexWebSocketUrl(model.baseUrl), body, websocketHeaders, output, stream, model, () => {
258
- websocketStarted = true;
259
- if (!startEmitted) {
260
- startEmitted = true;
261
- stream.push({
262
- type: "start",
263
- partial: output
264
- });
265
- }
266
- }, httpTimeoutMs, websocketConnectTimeoutMs, cacheSessionId, accountId, grammarToolInputProperties, options);
267
- if (options?.signal?.aborted) throw new Error("Request was aborted");
268
- assertSuccessfulOutput(output);
269
- stream.push({
270
- type: "done",
271
- reason: output.stopReason,
272
- message: output
273
- });
274
- stream.end();
275
- return;
276
- } catch (error) {
277
- const aborted = options?.signal?.aborted;
278
- const connectionLimitBeforeStart = !websocketStarted && isWebSocketConnectionLimitReachedError(error);
279
- const previousResponseNotFound = isPreviousResponseNotFoundError(error);
280
- if (!aborted && previousResponseNotFound && !retriedMissingWebSocketContinuation) {
281
- retriedMissingWebSocketContinuation = true;
282
- continue;
283
- }
284
- if (!aborted && connectionLimitBeforeStart && !retriedWebSocketConnectionLimit) {
285
- retriedWebSocketConnectionLimit = true;
286
- continue;
287
- }
288
- if (aborted || isCodexNonTransportError(error) && !connectionLimitBeforeStart) throw error;
289
- appendAssistantMessageDiagnostic(output, createAssistantMessageDiagnostic("provider_transport_failure", error, {
290
- configuredTransport: transport,
291
- ...websocketStarted ? {} : { fallbackTransport: "sse" },
292
- eventsEmitted: websocketStarted,
293
- phase: websocketStarted ? "after_message_stream_start" : "before_message_stream_start",
294
- requestBytes: new TextEncoder().encode(bodyJson).byteLength
295
- }));
296
- recordWebSocketFailure(cacheSessionId, error);
297
- if (websocketStarted) throw error;
298
- recordWebSocketSseFallback(cacheSessionId);
299
- break;
300
- }
301
- }
302
- }
303
- const compressedBody = compressRequestBodyZstd(bodyJson);
304
- if (compressedBody) sseHeaders.set("content-encoding", "zstd");
305
- const sseBody = compressedBody ?? bodyJson;
306
- let response;
307
- let lastError;
308
- const maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;
309
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
310
- if (options?.signal?.aborted) throw new Error("Request was aborted");
311
- try {
312
- const headerTimeoutSignal = httpTimeoutMs !== void 0 && httpTimeoutMs > 0 ? AbortSignal.timeout(httpTimeoutMs) : void 0;
313
- const combinedSignal = combineAbortSignals([options?.signal, headerTimeoutSignal]);
314
- try {
315
- response = await (options?.fetch ?? globalThis.fetch)(resolveCodexUrl(model.baseUrl), {
316
- method: "POST",
317
- headers: sseHeaders,
318
- body: sseBody,
319
- signal: combinedSignal.signal
320
- });
321
- } catch (error) {
322
- if (headerTimeoutSignal?.aborted && !options?.signal?.aborted) throw new Error(`Codex SSE response headers timed out after ${httpTimeoutMs}ms`);
323
- throw error;
324
- } finally {
325
- combinedSignal.cleanup();
326
- }
327
- await options?.onResponse?.({
328
- status: response.status,
329
- headers: headersToRecord(response.headers)
330
- }, model);
331
- if (response.ok) break;
332
- const errorText = await response.text();
333
- if (attempt < maxRetries && isRetryableError(response.status, errorText)) {
334
- const retryAfterDelayMs = getRetryAfterDelayMs(response.headers);
335
- await sleep(retryAfterDelayMs === void 0 ? BASE_DELAY_MS * 2 ** attempt : validateRetryDelayMs(retryAfterDelayMs, options), options?.signal);
336
- continue;
337
- }
338
- const info = await parseErrorResponse(new Response(errorText, {
339
- status: response.status,
340
- statusText: response.statusText
341
- }));
342
- throw new Error(info.friendlyMessage || info.message);
343
- } catch (error) {
344
- if (error instanceof Error) {
345
- if (error.name === "AbortError" || error.message === "Request was aborted") throw new Error("Request was aborted");
346
- }
347
- lastError = error instanceof Error ? error : new Error(String(error));
348
- if (attempt < maxRetries && !(lastError instanceof RetryDelayExceededError) && !lastError.message.includes("usage limit")) {
349
- await sleep(BASE_DELAY_MS * 2 ** attempt, options?.signal);
350
- continue;
351
- }
352
- throw lastError;
353
- }
354
- }
355
- if (!response?.ok) throw lastError ?? /* @__PURE__ */ new Error("Failed after retries");
356
- if (!response.body) throw new Error("No response body");
357
- if (!startEmitted) {
358
- startEmitted = true;
359
- stream.push({
360
- type: "start",
361
- partial: output
362
- });
363
- }
364
- await processStream(response, output, stream, model, grammarToolInputProperties, options);
365
- if (options?.signal?.aborted) throw new Error("Request was aborted");
366
- assertSuccessfulOutput(output);
367
- stream.push({
368
- type: "done",
369
- reason: output.stopReason,
370
- message: output
371
- });
372
- stream.end();
373
- } catch (error) {
374
- for (const block of output.content) {
375
- delete block.partialJson;
376
- delete block.customInput;
377
- }
378
- output.stopReason = options?.signal?.aborted ? "aborted" : "error";
379
- output.errorMessage = formatProviderError(normalizeProviderError(error));
380
- stream.push({
381
- type: "error",
382
- reason: output.stopReason,
383
- error: output
384
- });
385
- stream.end();
386
- }
387
- })();
388
- return stream;
389
- };
390
- const streamSimple = (model, context, options) => {
391
- const apiKey = options?.apiKey;
392
- if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
393
- const base = {
394
- ...buildBaseOptions(model, context, options, apiKey),
395
- toolChoice: options?.toolChoice
396
- };
397
- const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : void 0;
398
- const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning;
399
- return stream(model, context, {
400
- ...base,
401
- reasoningEffort
402
- });
403
- };
404
- function buildRequestBody(model, context, options, cacheSessionId, grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), model.compat?.supportsOpenAIGrammarTools ?? false)) {
405
- const supportsStrictMode = model.compat?.supportsStrictMode ?? true;
406
- const supportsOpenAIGrammarTools = model.compat?.supportsOpenAIGrammarTools ?? false;
407
- const supportsAdditionalTools = model.compat?.supportsAdditionalTools ?? false;
408
- const supportsToolSearch = model.compat?.supportsToolSearch ?? false;
409
- const transcriptTools = resolveTranscriptTools(context.messages, supportsAdditionalTools || supportsToolSearch);
410
- const messages = convertResponsesMessages(model, context, CODEX_TOOL_CALL_PROVIDERS, {
411
- includeSystemPrompt: false,
412
- grammarToolInputProperties,
413
- supportsMidConvoSystemMessages: model.compat?.supportsMidConvoSystemMessages ?? false,
414
- supportsAdditionalTools,
415
- supportsToolSearch,
416
- toolOptions: {
417
- strict: null,
418
- supportsStrictMode,
419
- supportsOpenAIGrammarTools
420
- }
421
- });
422
- const initialSystemMessage = getInitialSystemMessage(context.messages);
423
- const instructions = initialSystemMessage ? getSystemMessageText(initialSystemMessage) : "";
424
- const body = {
425
- model: model.id,
426
- store: false,
427
- stream: true,
428
- instructions: instructions || "You are a helpful assistant.",
429
- input: messages,
430
- text: { verbosity: options?.textVerbosity || "low" },
431
- include: ["reasoning.encrypted_content"],
432
- prompt_cache_key: cacheSessionId,
433
- tool_choice: options?.toolChoice ?? "auto",
434
- parallel_tool_calls: true
435
- };
436
- if (options?.temperature !== void 0) body.temperature = options.temperature;
437
- if (options?.serviceTier !== void 0) body.service_tier = options.serviceTier;
438
- if (transcriptTools.requestTools.length > 0) body.tools = convertResponsesTools(transcriptTools.requestTools, {
439
- strict: null,
440
- supportsStrictMode,
441
- supportsOpenAIGrammarTools
442
- });
443
- if (options?.reasoningEffort !== void 0) {
444
- const effort = options.reasoningEffort === "none" ? model.thinkingLevelMap?.off === void 0 ? "none" : model.thinkingLevelMap.off : model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort;
445
- if (effort !== null) body.reasoning = {
446
- effort,
447
- summary: options.reasoningSummary ?? "auto"
448
- };
449
- } else if (model.reasoning && model.thinkingLevelMap?.off !== null) body.reasoning = { effort: model.thinkingLevelMap?.off ?? "none" };
450
- return body;
451
- }
452
- function getServiceTierCostMultiplier(model, serviceTier) {
453
- switch (serviceTier) {
454
- case "flex": return .5;
455
- case "priority": return model.id === "gpt-5.5" ? 2.5 : 2;
456
- default: return 1;
457
- }
458
- }
459
- function applyServiceTierPricing(usage, serviceTier, model) {
460
- const multiplier = getServiceTierCostMultiplier(model, serviceTier);
461
- if (multiplier === 1) return;
462
- usage.cost.input *= multiplier;
463
- usage.cost.output *= multiplier;
464
- usage.cost.cacheRead *= multiplier;
465
- usage.cost.cacheWrite *= multiplier;
466
- usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
467
- }
468
- function resolveCodexServiceTier(responseServiceTier, requestServiceTier) {
469
- if (responseServiceTier === "default" && (requestServiceTier === "flex" || requestServiceTier === "priority")) return requestServiceTier;
470
- return responseServiceTier ?? requestServiceTier;
471
- }
472
- function resolveCodexUrl(baseUrl) {
473
- const normalized = (baseUrl && baseUrl.trim().length > 0 ? baseUrl : DEFAULT_CODEX_BASE_URL).replace(/\/+$/, "");
474
- if (normalized.endsWith("/codex/responses")) return normalized;
475
- if (normalized.endsWith("/codex")) return `${normalized}/responses`;
476
- return `${normalized}/codex/responses`;
477
- }
478
- function resolveCodexWebSocketUrl(baseUrl) {
479
- const url = new URL(resolveCodexUrl(baseUrl));
480
- if (url.protocol === "https:") url.protocol = "wss:";
481
- if (url.protocol === "http:") url.protocol = "ws:";
482
- return url.toString();
483
- }
484
- async function processStream(response, output, stream, model, grammarToolInputProperties, options) {
485
- await processResponsesStream(mapCodexEvents(parseSSE(response, options?.signal), output, model, options?.onProviderStreamEvent), output, stream, model, {
486
- serviceTier: options?.serviceTier,
487
- grammarToolInputProperties,
488
- resolveServiceTier: resolveCodexServiceTier,
489
- applyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model)
490
- });
491
- }
492
- var CodexApiError = class extends Error {
493
- code;
494
- payload;
495
- constructor(message, options) {
496
- super(message);
497
- this.name = "CodexApiError";
498
- this.code = options?.code;
499
- this.payload = options?.payload;
500
- this.cause = options?.cause;
501
- }
502
- };
503
- var CodexProtocolError = class extends Error {
504
- payload;
505
- constructor(message, options) {
506
- super(message);
507
- this.name = "CodexProtocolError";
508
- this.payload = options?.payload;
509
- this.cause = options?.cause;
510
- }
511
- };
512
- var ProviderStreamEventCallbackError = class extends Error {
513
- constructor(cause) {
514
- super(formatThrownValue(cause));
515
- this.name = "ProviderStreamEventCallbackError";
516
- this.cause = cause;
517
- }
518
- };
519
- function isCodexNonTransportError(error) {
520
- return error instanceof CodexApiError || error instanceof CodexProtocolError || error instanceof ProviderStreamEventCallbackError;
521
- }
522
- function isWebSocketConnectionLimitReachedError(error) {
523
- return error instanceof CodexApiError && error.code === WEBSOCKET_CONNECTION_LIMIT_REACHED_CODE;
524
- }
525
- function isPreviousResponseNotFoundError(error) {
526
- return error instanceof CodexApiError && error.code === PREVIOUS_RESPONSE_NOT_FOUND_CODE;
527
- }
528
- function extractCodexEventError(event) {
529
- const nested = event.error && typeof event.error === "object" ? event.error : void 0;
530
- return {
531
- code: typeof event.code === "string" ? event.code : typeof nested?.code === "string" ? nested.code : void 0,
532
- message: typeof event.message === "string" ? event.message : typeof nested?.message === "string" ? nested.message : void 0
533
- };
534
- }
535
- async function* mapCodexEvents(events, output, model, onProviderStreamEvent) {
536
- for await (const event of events) {
537
- try {
538
- await onProviderStreamEvent?.(event, model);
539
- } catch (error) {
540
- throw new ProviderStreamEventCallbackError(error);
541
- }
542
- const type = typeof event.type === "string" ? event.type : void 0;
543
- if (!type) continue;
544
- if (type === "error") {
545
- const { code, message } = extractCodexEventError(event);
546
- throw new CodexApiError(`Codex error: ${message || code || JSON.stringify(event)}`, {
547
- code,
548
- payload: event
549
- });
550
- }
551
- if (type === "response.failed") {
552
- const response = event.response;
553
- const code = response?.error?.code;
554
- const message = response?.error?.message;
555
- throw new CodexApiError(message || "Codex response failed", {
556
- code,
557
- payload: event
558
- });
559
- }
560
- if (type === "response.done" || type === "response.completed" || type === "response.incomplete") {
561
- const response = event.response;
562
- if (typeof response?.end_turn === "boolean") output.endTurn = response.end_turn;
563
- const normalizedResponse = response ? {
564
- ...response,
565
- status: normalizeCodexStatus(response.status)
566
- } : response;
567
- yield {
568
- ...event,
569
- type: "response.completed",
570
- response: normalizedResponse
571
- };
572
- return;
573
- }
574
- yield event;
575
- }
576
- }
577
- function normalizeCodexStatus(status) {
578
- if (typeof status !== "string") return void 0;
579
- return CODEX_RESPONSE_STATUSES.has(status) ? status : void 0;
580
- }
581
- async function* parseSSE(response, signal) {
582
- if (!response.body) return;
583
- const reader = response.body.getReader();
584
- const decoder = new TextDecoder();
585
- let buffer = "";
586
- const onAbort = () => {
587
- reader.cancel().catch(() => {});
588
- };
589
- signal?.addEventListener("abort", onAbort, { once: true });
590
- try {
591
- while (true) {
592
- if (signal?.aborted) throw new Error("Request was aborted");
593
- const { done, value } = await reader.read();
594
- if (signal?.aborted) throw new Error("Request was aborted");
595
- buffer += done ? decoder.decode() : decoder.decode(value, { stream: true });
596
- if (done && buffer.trim()) buffer += "\n\n";
597
- let idx = buffer.indexOf("\n\n");
598
- while (idx !== -1) {
599
- const chunk = buffer.slice(0, idx);
600
- buffer = buffer.slice(idx + 2);
601
- const dataLines = chunk.split("\n").filter((l) => l.startsWith("data:")).map((l) => l.slice(5).trim());
602
- if (dataLines.length > 0) {
603
- const data = dataLines.join("\n").trim();
604
- if (data && data !== "[DONE]") try {
605
- yield JSON.parse(data);
606
- } catch (cause) {
607
- throw new CodexProtocolError(`Invalid Codex SSE JSON: ${formatThrownValue(cause)}`, {
608
- cause,
609
- payload: data
610
- });
611
- }
612
- }
613
- idx = buffer.indexOf("\n\n");
614
- }
615
- if (done) break;
616
- }
617
- } finally {
618
- signal?.removeEventListener("abort", onAbort);
619
- try {
620
- await reader.cancel();
621
- } catch {}
622
- try {
623
- reader.releaseLock();
624
- } catch {}
625
- }
626
- }
627
- const OPENAI_BETA_RESPONSES_WEBSOCKETS = "responses_websockets=2026-02-06";
628
- const SESSION_WEBSOCKET_CACHE_TTL_MS = 3e5;
629
- const SESSION_WEBSOCKET_MAX_AGE_MS = 33e5;
630
- const websocketSessionCache = /* @__PURE__ */ new Map();
631
- const websocketDebugStats = /* @__PURE__ */ new Map();
632
- const websocketSseFallbackSessions = /* @__PURE__ */ new Set();
633
- function getOrCreateWebSocketDebugStats(sessionId) {
634
- let stats = websocketDebugStats.get(sessionId);
635
- if (!stats) {
636
- stats = {
637
- requests: 0,
638
- connectionsCreated: 0,
639
- connectionsReused: 0,
640
- cachedContextRequests: 0,
641
- storeTrueRequests: 0,
642
- fullContextRequests: 0,
643
- deltaRequests: 0,
644
- lastInputItems: 0,
645
- websocketFailures: 0,
646
- sseFallbacks: 0
647
- };
648
- websocketDebugStats.set(sessionId, stats);
649
- }
650
- return stats;
651
- }
652
- function getOpenAICodexWebSocketDebugStats(sessionId) {
653
- const stats = websocketDebugStats.get(sessionId);
654
- return stats ? { ...stats } : void 0;
655
- }
656
- function resetOpenAICodexWebSocketDebugStats(sessionId) {
657
- if (sessionId) {
658
- websocketDebugStats.delete(sessionId);
659
- websocketSseFallbackSessions.delete(sessionId);
660
- return;
661
- }
662
- websocketDebugStats.clear();
663
- websocketSseFallbackSessions.clear();
664
- }
665
- function closeOpenAICodexWebSocketSessions(sessionId) {
666
- const closeEntry = (entry) => {
667
- if (entry.idleTimer) clearTimeout(entry.idleTimer);
668
- closeWebSocketSilently(entry.socket, 1e3, "debug_close");
669
- };
670
- if (sessionId) {
671
- for (const entry of websocketSessionCache.get(sessionId)?.values() ?? []) closeEntry(entry);
672
- websocketSessionCache.delete(sessionId);
673
- return;
674
- }
675
- for (const accountEntries of websocketSessionCache.values()) for (const entry of accountEntries.values()) closeEntry(entry);
676
- websocketSessionCache.clear();
677
- }
678
- registerSessionResourceCleanup(closeOpenAICodexWebSocketSessions);
679
- function isWebSocketSseFallbackActive(sessionId) {
680
- return sessionId ? websocketSseFallbackSessions.has(sessionId) : false;
681
- }
682
- function recordWebSocketSseFallback(sessionId) {
683
- if (!sessionId) return;
684
- const stats = getOrCreateWebSocketDebugStats(sessionId);
685
- stats.sseFallbacks++;
686
- stats.websocketFallbackActive = isWebSocketSseFallbackActive(sessionId);
687
- }
688
- function recordWebSocketFailure(sessionId, error) {
689
- if (!sessionId) return;
690
- websocketSseFallbackSessions.add(sessionId);
691
- const stats = getOrCreateWebSocketDebugStats(sessionId);
692
- stats.websocketFailures++;
693
- stats.lastWebSocketError = formatThrownValue(error);
694
- stats.websocketFallbackActive = true;
695
- }
696
- let _cachedWebsocket = null;
697
- async function getWebSocketConstructor(env) {
698
- if (!env && _cachedWebsocket) return _cachedWebsocket;
699
- if (typeof process !== "undefined" && process.versions?.bun) {
700
- const WebSocketWithProxy = class extends WebSocket {
701
- constructor(url, options) {
702
- let _opts = {};
703
- if (Array.isArray(options) || typeof options === "string") _opts = { protocols: options };
704
- else _opts = { ...options };
705
- const proxyUrl = resolveHttpProxyUrlForTarget(url.toString().replace(/^wss:/, "https:").replace(/^ws:/, "http:"), env);
706
- super(url, {
707
- ..._opts,
708
- ...proxyUrl ? { proxy: proxyUrl.toString() } : {}
709
- });
710
- }
711
- };
712
- if (!env) _cachedWebsocket = WebSocketWithProxy;
713
- return WebSocketWithProxy;
714
- }
715
- const ctor = globalThis.WebSocket;
716
- if (typeof ctor !== "function") return null;
717
- return ctor;
718
- }
719
- var WebSocketCloseError = class extends Error {
720
- code;
721
- reason;
722
- wasClean;
723
- constructor(message, options) {
724
- super(message);
725
- this.name = "WebSocketCloseError";
726
- this.code = options?.code;
727
- this.reason = options?.reason;
728
- this.wasClean = options?.wasClean;
729
- }
730
- };
731
- function getWebSocketReadyState(socket) {
732
- const readyState = socket.readyState;
733
- return typeof readyState === "number" ? readyState : void 0;
734
- }
735
- function isWebSocketReusable(socket) {
736
- const readyState = getWebSocketReadyState(socket);
737
- return readyState === void 0 || readyState === 1;
738
- }
739
- function isWebSocketSessionExpired(entry) {
740
- return Date.now() - entry.createdAt >= SESSION_WEBSOCKET_MAX_AGE_MS;
741
- }
742
- function closeWebSocketSilently(socket, code = 1e3, reason = "done") {
743
- try {
744
- socket.close(code, reason);
745
- } catch {}
746
- }
747
- function scheduleSessionWebSocketExpiry(sessionId, accountId, entry) {
748
- if (entry.idleTimer) clearTimeout(entry.idleTimer);
749
- entry.idleTimer = setTimeout(() => {
750
- if (entry.busy) return;
751
- closeWebSocketSilently(entry.socket, 1e3, "idle_timeout");
752
- const accountEntries = websocketSessionCache.get(sessionId);
753
- if (accountEntries?.get(accountId) === entry) accountEntries.delete(accountId);
754
- if (accountEntries?.size === 0) websocketSessionCache.delete(sessionId);
755
- }, SESSION_WEBSOCKET_CACHE_TTL_MS);
756
- }
757
- async function connectWebSocket(url, headers, signal, connectTimeoutMs = DEFAULT_WEBSOCKET_CONNECT_TIMEOUT_MS, env) {
758
- const WebSocketCtor = await getWebSocketConstructor(env);
759
- if (!WebSocketCtor) throw new Error("WebSocket transport is not available in this runtime");
760
- const wsHeaders = headersToRecord(headers);
761
- delete wsHeaders["OpenAI-Beta"];
762
- return new Promise((resolve, reject) => {
763
- let settled = false;
764
- let timeout;
765
- let socket;
766
- try {
767
- socket = new WebSocketCtor(url, { headers: wsHeaders });
768
- } catch (error) {
769
- reject(error instanceof Error ? error : new Error(String(error)));
770
- return;
771
- }
772
- const cleanup = () => {
773
- if (timeout) {
774
- clearTimeout(timeout);
775
- timeout = void 0;
776
- }
777
- socket.removeEventListener("open", onOpen);
778
- socket.removeEventListener("error", onError);
779
- socket.removeEventListener("close", onClose);
780
- signal?.removeEventListener("abort", onAbort);
781
- };
782
- const fail = (error, closeReason) => {
783
- if (settled) return;
784
- settled = true;
785
- cleanup();
786
- if (closeReason) closeWebSocketSilently(socket, 1e3, closeReason);
787
- reject(error);
788
- };
789
- const onOpen = () => {
790
- if (settled) return;
791
- settled = true;
792
- cleanup();
793
- resolve(socket);
794
- };
795
- const onError = (event) => {
796
- fail(extractWebSocketError(event));
797
- };
798
- const onClose = (event) => {
799
- fail(extractWebSocketCloseError(event));
800
- };
801
- const onAbort = () => {
802
- fail(/* @__PURE__ */ new Error("Request was aborted"), "aborted");
803
- };
804
- socket.addEventListener("open", onOpen);
805
- socket.addEventListener("error", onError);
806
- socket.addEventListener("close", onClose);
807
- signal?.addEventListener("abort", onAbort);
808
- if (connectTimeoutMs > 0) timeout = setTimeout(() => {
809
- fail(/* @__PURE__ */ new Error(`WebSocket connect timeout after ${connectTimeoutMs}ms`), "connect_timeout");
810
- }, connectTimeoutMs);
811
- if (signal?.aborted) onAbort();
812
- });
813
- }
814
- async function acquireWebSocket(url, headers, sessionId, accountId, signal, connectTimeoutMs, env) {
815
- if (!sessionId) {
816
- const socket = await connectWebSocket(url, headers, signal, connectTimeoutMs, env);
817
- return {
818
- socket,
819
- reused: false,
820
- release: () => closeWebSocketSilently(socket)
821
- };
822
- }
823
- let accountEntries = websocketSessionCache.get(sessionId);
824
- const cached = accountEntries?.get(accountId);
825
- if (cached) {
826
- if (cached.idleTimer) {
827
- clearTimeout(cached.idleTimer);
828
- cached.idleTimer = void 0;
829
- }
830
- if (!cached.busy && isWebSocketSessionExpired(cached)) {
831
- closeWebSocketSilently(cached.socket, 1e3, "connection_age_limit");
832
- accountEntries?.delete(accountId);
833
- if (accountEntries?.size === 0) websocketSessionCache.delete(sessionId);
834
- } else if (!cached.busy && isWebSocketReusable(cached.socket)) {
835
- cached.busy = true;
836
- return {
837
- socket: cached.socket,
838
- entry: cached,
839
- reused: true,
840
- release: ({ keep } = {}) => {
841
- if (!keep || !isWebSocketReusable(cached.socket)) {
842
- closeWebSocketSilently(cached.socket);
843
- const currentEntries = websocketSessionCache.get(sessionId);
844
- if (currentEntries?.get(accountId) === cached) currentEntries.delete(accountId);
845
- if (currentEntries?.size === 0) websocketSessionCache.delete(sessionId);
846
- return;
847
- }
848
- cached.busy = false;
849
- scheduleSessionWebSocketExpiry(sessionId, accountId, cached);
850
- }
851
- };
852
- }
853
- if (cached.busy) {
854
- const socket = await connectWebSocket(url, headers, signal, connectTimeoutMs, env);
855
- return {
856
- socket,
857
- reused: false,
858
- release: () => {
859
- closeWebSocketSilently(socket);
860
- }
861
- };
862
- }
863
- if (!isWebSocketReusable(cached.socket)) {
864
- closeWebSocketSilently(cached.socket);
865
- accountEntries?.delete(accountId);
866
- if (accountEntries?.size === 0) websocketSessionCache.delete(sessionId);
867
- }
868
- }
869
- const socket = await connectWebSocket(url, headers, signal, connectTimeoutMs, env);
870
- const entry = {
871
- socket,
872
- busy: true,
873
- createdAt: Date.now()
874
- };
875
- accountEntries = websocketSessionCache.get(sessionId);
876
- if (!accountEntries) {
877
- accountEntries = /* @__PURE__ */ new Map();
878
- websocketSessionCache.set(sessionId, accountEntries);
879
- }
880
- accountEntries.set(accountId, entry);
881
- return {
882
- socket,
883
- entry,
884
- reused: false,
885
- release: ({ keep } = {}) => {
886
- if (!keep || !isWebSocketReusable(entry.socket)) {
887
- closeWebSocketSilently(entry.socket);
888
- if (entry.idleTimer) clearTimeout(entry.idleTimer);
889
- const currentEntries = websocketSessionCache.get(sessionId);
890
- if (currentEntries?.get(accountId) === entry) currentEntries.delete(accountId);
891
- if (currentEntries?.size === 0) websocketSessionCache.delete(sessionId);
892
- return;
893
- }
894
- entry.busy = false;
895
- scheduleSessionWebSocketExpiry(sessionId, accountId, entry);
896
- }
897
- };
898
- }
899
- function extractWebSocketError(event) {
900
- if (event && typeof event === "object") {
901
- const message = "message" in event ? event.message : void 0;
902
- if (typeof message === "string" && message.length > 0) return new Error(message);
903
- const nestedError = "error" in event ? event.error : void 0;
904
- if (nestedError instanceof Error && nestedError.message.length > 0) return nestedError;
905
- if (nestedError && typeof nestedError === "object" && "message" in nestedError) {
906
- const nestedMessage = nestedError.message;
907
- if (typeof nestedMessage === "string" && nestedMessage.length > 0) return new Error(nestedMessage);
908
- }
909
- }
910
- return /* @__PURE__ */ new Error("WebSocket error");
911
- }
912
- function extractWebSocketCloseError(event) {
913
- if (event && typeof event === "object") {
914
- const code = "code" in event ? event.code : void 0;
915
- const reason = "reason" in event ? event.reason : void 0;
916
- const wasClean = "wasClean" in event ? event.wasClean : void 0;
917
- const codeText = typeof code === "number" ? ` ${code}` : "";
918
- let reasonText = typeof reason === "string" && reason.length > 0 ? ` ${reason}` : "";
919
- if (!reasonText && code === WEBSOCKET_MESSAGE_TOO_BIG_CLOSE_CODE) reasonText = " message too big";
920
- return new WebSocketCloseError(`WebSocket closed${codeText}${reasonText}`.trim(), {
921
- code: typeof code === "number" ? code : void 0,
922
- reason: typeof reason === "string" && reason.length > 0 ? reason : void 0,
923
- wasClean: typeof wasClean === "boolean" ? wasClean : void 0
924
- });
925
- }
926
- return /* @__PURE__ */ new Error("WebSocket closed");
927
- }
928
- async function decodeWebSocketData(data) {
929
- if (typeof data === "string") return data;
930
- if (data instanceof ArrayBuffer) return new TextDecoder().decode(new Uint8Array(data));
931
- if (ArrayBuffer.isView(data)) {
932
- const view = data;
933
- return new TextDecoder().decode(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));
934
- }
935
- if (data && typeof data === "object" && "arrayBuffer" in data) {
936
- const arrayBuffer = await data.arrayBuffer();
937
- return new TextDecoder().decode(new Uint8Array(arrayBuffer));
938
- }
939
- return null;
940
- }
941
- async function* parseWebSocket(socket, signal, idleTimeoutMs) {
942
- const queue = [];
943
- let pending = null;
944
- let done = false;
945
- let failed = null;
946
- let sawCompletion = false;
947
- const wake = () => {
948
- if (!pending) return;
949
- const resolve = pending;
950
- pending = null;
951
- resolve();
952
- };
953
- const onMessage = (event) => {
954
- (async () => {
955
- let text = null;
956
- try {
957
- if (!event || typeof event !== "object" || !("data" in event)) return;
958
- text = await decodeWebSocketData(event.data);
959
- if (!text) return;
960
- const parsed = JSON.parse(text);
961
- const type = typeof parsed.type === "string" ? parsed.type : "";
962
- if (type === "response.completed" || type === "response.done" || type === "response.incomplete") {
963
- sawCompletion = true;
964
- done = true;
965
- }
966
- queue.push(parsed);
967
- wake();
968
- } catch (cause) {
969
- failed = new CodexProtocolError(`Invalid Codex WebSocket JSON: ${formatThrownValue(cause)}`, {
970
- cause,
971
- payload: text
972
- });
973
- done = true;
974
- wake();
975
- }
976
- })();
977
- };
978
- const onError = (event) => {
979
- failed = extractWebSocketError(event);
980
- done = true;
981
- wake();
982
- };
983
- const onClose = (event) => {
984
- if (sawCompletion) {
985
- done = true;
986
- wake();
987
- return;
988
- }
989
- if (!failed) failed = extractWebSocketCloseError(event);
990
- done = true;
991
- wake();
992
- };
993
- const onAbort = () => {
994
- failed = /* @__PURE__ */ new Error("Request was aborted");
995
- done = true;
996
- wake();
997
- };
998
- socket.addEventListener("message", onMessage);
999
- socket.addEventListener("error", onError);
1000
- socket.addEventListener("close", onClose);
1001
- signal?.addEventListener("abort", onAbort);
1002
- try {
1003
- while (true) {
1004
- if (signal?.aborted) throw new Error("Request was aborted");
1005
- if (queue.length > 0) {
1006
- yield queue.shift();
1007
- continue;
1008
- }
1009
- if (done) break;
1010
- let timeout;
1011
- await new Promise((resolve, reject) => {
1012
- pending = resolve;
1013
- if (idleTimeoutMs !== void 0 && idleTimeoutMs > 0) timeout = setTimeout(() => {
1014
- const error = /* @__PURE__ */ new Error(`WebSocket idle timeout after ${idleTimeoutMs}ms`);
1015
- failed = error;
1016
- done = true;
1017
- pending = null;
1018
- closeWebSocketSilently(socket, 1e3, "idle_timeout");
1019
- reject(error);
1020
- }, idleTimeoutMs);
1021
- }).finally(() => {
1022
- if (timeout) clearTimeout(timeout);
1023
- });
1024
- }
1025
- if (failed) throw failed;
1026
- if (!sawCompletion) throw new Error("WebSocket stream closed before response.completed");
1027
- } finally {
1028
- socket.removeEventListener("message", onMessage);
1029
- socket.removeEventListener("error", onError);
1030
- socket.removeEventListener("close", onClose);
1031
- signal?.removeEventListener("abort", onAbort);
1032
- }
1033
- }
1034
- function requestBodyWithoutInput(body) {
1035
- const { input: _input, previous_response_id: _previousResponseId, ...rest } = body;
1036
- return rest;
1037
- }
1038
- function responseInputsEqual(a, b) {
1039
- return JSON.stringify(a ?? []) === JSON.stringify(b ?? []);
1040
- }
1041
- function requestBodiesMatchExceptInput(a, b) {
1042
- return JSON.stringify(requestBodyWithoutInput(a)) === JSON.stringify(requestBodyWithoutInput(b));
1043
- }
1044
- function getCachedWebSocketInputDelta(body, continuation) {
1045
- if (!requestBodiesMatchExceptInput(body, continuation.lastRequestBody)) return;
1046
- const currentInput = body.input ?? [];
1047
- const baseline = [...continuation.lastRequestBody.input ?? [], ...continuation.lastResponseItems];
1048
- if (currentInput.length < baseline.length) return;
1049
- if (!responseInputsEqual(currentInput.slice(0, baseline.length), baseline)) return;
1050
- return currentInput.slice(baseline.length);
1051
- }
1052
- function buildCachedWebSocketRequestBody(entry, body) {
1053
- const continuation = entry.continuation;
1054
- if (!continuation) return body;
1055
- const delta = getCachedWebSocketInputDelta(body, continuation);
1056
- if (!delta || !continuation.lastResponseId) {
1057
- entry.continuation = void 0;
1058
- return body;
1059
- }
1060
- return {
1061
- ...body,
1062
- previous_response_id: continuation.lastResponseId,
1063
- input: delta
1064
- };
1065
- }
1066
- async function* startWebSocketOutputOnFirstEvent(events, onStart) {
1067
- let started = false;
1068
- for await (const event of events) {
1069
- if (!started) {
1070
- started = true;
1071
- onStart();
1072
- }
1073
- yield event;
1074
- }
1075
- }
1076
- async function processWebSocketStream(url, body, headers, output, stream, model, onStart, idleTimeoutMs, websocketConnectTimeoutMs, cacheSessionId, accountId, grammarToolInputProperties, options) {
1077
- const { socket, entry, reused, release } = await acquireWebSocket(url, headers, cacheSessionId, accountId, options?.signal, websocketConnectTimeoutMs, options?.env);
1078
- let keepConnection = true;
1079
- const useCachedContext = options?.transport === "websocket-cached" || options?.transport === "auto";
1080
- const fullBody = body;
1081
- const requestBody = useCachedContext && entry ? buildCachedWebSocketRequestBody(entry, fullBody) : fullBody;
1082
- const stats = cacheSessionId ? getOrCreateWebSocketDebugStats(cacheSessionId) : void 0;
1083
- if (stats) {
1084
- stats.requests++;
1085
- if (reused) stats.connectionsReused++;
1086
- else stats.connectionsCreated++;
1087
- if (useCachedContext) stats.cachedContextRequests++;
1088
- if (requestBody.store === true) stats.storeTrueRequests++;
1089
- stats.lastInputItems = requestBody.input?.length ?? 0;
1090
- if (requestBody.previous_response_id) {
1091
- stats.deltaRequests++;
1092
- stats.lastDeltaInputItems = requestBody.input?.length ?? 0;
1093
- stats.lastPreviousResponseId = requestBody.previous_response_id;
1094
- } else {
1095
- stats.fullContextRequests++;
1096
- stats.lastDeltaInputItems = void 0;
1097
- stats.lastPreviousResponseId = void 0;
1098
- }
1099
- }
1100
- try {
1101
- socket.send(JSON.stringify({
1102
- type: "response.create",
1103
- ...requestBody
1104
- }));
1105
- await processResponsesStream(startWebSocketOutputOnFirstEvent(mapCodexEvents(parseWebSocket(socket, options?.signal, idleTimeoutMs), output, model, options?.onProviderStreamEvent), onStart), output, stream, model, {
1106
- serviceTier: options?.serviceTier,
1107
- grammarToolInputProperties,
1108
- resolveServiceTier: resolveCodexServiceTier,
1109
- applyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model)
1110
- });
1111
- if (options?.signal?.aborted) keepConnection = false;
1112
- else if (useCachedContext && entry && output.responseId) {
1113
- const responseItems = convertResponsesMessages(model, normalizeContext({ messages: [output] }), CODEX_TOOL_CALL_PROVIDERS, {
1114
- includeSystemPrompt: false,
1115
- grammarToolInputProperties
1116
- }).filter((item) => item.type !== "function_call_output" && item.type !== "custom_tool_call_output");
1117
- entry.continuation = {
1118
- lastRequestBody: fullBody,
1119
- lastResponseId: output.responseId,
1120
- lastResponseItems: responseItems
1121
- };
1122
- }
1123
- } catch (error) {
1124
- if (entry) entry.continuation = void 0;
1125
- keepConnection = false;
1126
- throw error;
1127
- } finally {
1128
- release({ keep: keepConnection });
1129
- }
1130
- }
1131
- async function parseErrorResponse(response) {
1132
- const raw = await response.text();
1133
- let message = raw || response.statusText || "Request failed";
1134
- let friendlyMessage;
1135
- try {
1136
- const err = JSON.parse(raw)?.error;
1137
- if (err) {
1138
- const code = err.code || err.type || "";
1139
- if (/usage_limit_reached|usage_not_included|rate_limit_exceeded/i.test(code) || response.status === 429) {
1140
- const plan = err.plan_type ? ` (${err.plan_type.toLowerCase()} plan)` : "";
1141
- const mins = err.resets_at ? Math.max(0, Math.round((err.resets_at * 1e3 - Date.now()) / 6e4)) : void 0;
1142
- friendlyMessage = `You have hit your ChatGPT usage limit${plan}.${mins !== void 0 ? ` Try again in ~${mins} min.` : ""}`.trim();
1143
- }
1144
- message = err.message || friendlyMessage || message;
1145
- }
1146
- } catch {}
1147
- return {
1148
- message,
1149
- friendlyMessage
1150
- };
1151
- }
1152
- function extractAccountId(token) {
1153
- try {
1154
- const parts = token.split(".");
1155
- if (parts.length !== 3) throw new Error("Invalid token");
1156
- const accountId = JSON.parse(atob(parts[1]))?.[JWT_CLAIM_PATH]?.chatgpt_account_id;
1157
- if (!accountId) throw new Error("No account ID in token");
1158
- return accountId;
1159
- } catch {
1160
- throw new Error("Failed to extract accountId from token");
1161
- }
1162
- }
1163
- function buildBaseCodexHeaders(initHeaders, additionalHeaders, accountId, token) {
1164
- const headers = new Headers({
1165
- originator: "pi",
1166
- "User-Agent": getPiUserAgent()
1167
- });
1168
- for (const [key, value] of Object.entries(initHeaders || {})) headers.set(key, value);
1169
- for (const [key, value] of Object.entries(additionalHeaders || {})) if (value === null) headers.delete(key);
1170
- else headers.set(key, value);
1171
- headers.set("Authorization", `Bearer ${token}`);
1172
- headers.set("chatgpt-account-id", accountId);
1173
- return headers;
1174
- }
1175
- function buildSSEHeaders(initHeaders, additionalHeaders, accountId, token, sessionId) {
1176
- const headers = buildBaseCodexHeaders(initHeaders, additionalHeaders, accountId, token);
1177
- headers.set("OpenAI-Beta", "responses=experimental");
1178
- headers.set("accept", "text/event-stream");
1179
- headers.set("content-type", "application/json");
1180
- if (sessionId) {
1181
- headers.set("session-id", sessionId);
1182
- headers.set("x-client-request-id", sessionId);
1183
- }
1184
- return headers;
1185
- }
1186
- function buildWebSocketHeaders(initHeaders, additionalHeaders, accountId, token, requestId) {
1187
- const headers = buildBaseCodexHeaders(initHeaders, additionalHeaders, accountId, token);
1188
- headers.delete("accept");
1189
- headers.delete("content-type");
1190
- headers.delete("OpenAI-Beta");
1191
- headers.delete("openai-beta");
1192
- headers.set("OpenAI-Beta", OPENAI_BETA_RESPONSES_WEBSOCKETS);
1193
- headers.set("x-client-request-id", requestId);
1194
- headers.set("session-id", requestId);
1195
- return headers;
1196
- }
1197
- //#endregion
1198
- export { closeOpenAICodexWebSocketSessions, getOpenAICodexWebSocketDebugStats, resetOpenAICodexWebSocketDebugStats, stream, streamSimple };