uigraph 1.0.0 → 1.0.1

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 (319) hide show
  1. package/dist/bin.mjs +134 -56911
  2. package/dist/viewer/assets/abnfDiagram-VCTEODGH-D7zWJuPJ.js +1 -0
  3. package/dist/viewer/assets/actor-avatar-Bu-mKKXB.js +1 -0
  4. package/dist/viewer/assets/{api-adapters-CnQpLiWI.js → api-adapters-tfr51BsS.js} +1 -1
  5. package/dist/viewer/assets/{api-endpoints-DCA5GNpC.js → api-endpoints-D-Whnnwd.js} +9 -9
  6. package/dist/viewer/assets/{api-group-endpoints-page-Di42W69y.js → api-group-endpoints-page-B9R1EI4i.js} +9 -9
  7. package/dist/viewer/assets/{arc-Cn8owoDw.js → arc-DauzQXFu.js} +1 -1
  8. package/dist/viewer/assets/architectureDiagram-5GKGNRK7-CXzgHd-c.js +36 -0
  9. package/dist/viewer/assets/{arrow-left-DWcMgM2U.js → arrow-left-DpQqmf17.js} +1 -1
  10. package/dist/viewer/assets/avatar-DAFUyk1i.js +43 -0
  11. package/dist/viewer/assets/badge-hR3QvPWv.js +1 -0
  12. package/dist/viewer/assets/better-delete-confirmation-modal-CGEQ5O4X.js +1 -0
  13. package/dist/viewer/assets/better-dialog-DcIxFWwk.js +1 -0
  14. package/dist/viewer/assets/{blockDiagram-I7D4REHJ-CbYzOsL_.js → blockDiagram-I7D4REHJ-CFHWUw4z.js} +2 -2
  15. package/dist/viewer/assets/{brands-Bd4RklRx.js → brands-DtmA1AhP.js} +1 -1
  16. package/dist/viewer/assets/button-DZj74qS7.js +1 -0
  17. package/dist/viewer/assets/{c4Diagram-7LVT6UL2-CLkVbphC.js → c4Diagram-7LVT6UL2-BHSggPKI.js} +6 -6
  18. package/dist/viewer/assets/{calendar-C0xdI_ag.js → calendar-Bolgc8E5.js} +1 -1
  19. package/dist/viewer/assets/channel-CNRSofFP.js +1 -0
  20. package/dist/viewer/assets/{check-XjanpAFg.js → check-BpmCQNbj.js} +1 -1
  21. package/dist/viewer/assets/checkbox-CFJfXL6R.js +1 -0
  22. package/dist/viewer/assets/{chevron-down-R7pQzyLD.js → chevron-down-DDsUE_xz.js} +1 -1
  23. package/dist/viewer/assets/{chevron-up-CRPypfOs.js → chevron-up-DVznKMGv.js} +1 -1
  24. package/dist/viewer/assets/{chunk-2Q5K7J3B-CcvtugCu.js → chunk-2Q5K7J3B-CNfz5YDQ.js} +1 -1
  25. package/dist/viewer/assets/{chunk-5VM5RSS4-CpZHHr12.js → chunk-5VM5RSS4-CwIhjvMe.js} +1 -1
  26. package/dist/viewer/assets/{chunk-F27PBJKO-DeAl4iOc.js → chunk-F27PBJKO-YFexFJof.js} +1 -1
  27. package/dist/viewer/assets/{chunk-IMKFNOWR-BfrPe7pS.js → chunk-IMKFNOWR-GY2yrvuo.js} +1 -1
  28. package/dist/viewer/assets/{chunk-JWPE2WC7-DDjyvUmZ.js → chunk-JWPE2WC7-xd0JGvne.js} +1 -1
  29. package/dist/viewer/assets/chunk-OB3PAWPO-DJIP1M4r.js +12 -0
  30. package/dist/viewer/assets/{chunk-POPQ4Y6H-DkDb0mzz.js → chunk-POPQ4Y6H-Bh6rizEy.js} +1 -1
  31. package/dist/viewer/assets/{chunk-SVP7TREG-D-K2XIGs.js → chunk-SVP7TREG-DtNrjvpq.js} +1 -1
  32. package/dist/viewer/assets/{chunk-TICWLB2K-DWMQQx6z.js → chunk-TICWLB2K-DrERwtw8.js} +1 -1
  33. package/dist/viewer/assets/{chunk-XXDRQBXY-DfkljAyM.js → chunk-XXDRQBXY-fYo04iwY.js} +1 -1
  34. package/dist/viewer/assets/{circle-alert-pm13M-Ef.js → circle-alert-Bl7DXYD_.js} +1 -1
  35. package/dist/viewer/assets/classDiagram-ZZMXUADV-D7PO-ME9.js +1 -0
  36. package/dist/viewer/assets/classDiagram-v2-VYDZK3BY-D7PO-ME9.js +1 -0
  37. package/dist/viewer/assets/color-input-ClkkG_kZ.js +11 -0
  38. package/dist/viewer/assets/{common-Y7ySZBdh.js → common-DLCsGQ-t.js} +1 -1
  39. package/dist/viewer/assets/{component-icons-D1BDAuEt.js → component-icons-MJ61E9nt.js} +2 -2
  40. package/dist/viewer/assets/{copy-CN4K2f_R.js → copy-DMJJonQF.js} +1 -1
  41. package/dist/viewer/assets/cose-bilkent-JH36ORCC-Dplz8nVT.js +1 -0
  42. package/dist/viewer/assets/cross-button-D5qst1tj.js +1 -0
  43. package/dist/viewer/assets/{cynefin-OW5HDTMX-yz-uw9Kz.js → cynefin-OW5HDTMX-DiBs4CI8.js} +1 -1
  44. package/dist/viewer/assets/cynefinDiagram-5FMLGOSQ-COXS8-dI.js +62 -0
  45. package/dist/viewer/assets/{dagre-GXQ25YYZ-zjZDwXOe.js → dagre-GXQ25YYZ-K8qvfG8D.js} +2 -2
  46. package/dist/viewer/assets/dashboard-diagrams-page-Cb0xNr4W.js +2 -0
  47. package/dist/viewer/assets/dashboard-diagrams-page-inner-CD--zr5q.js +1 -0
  48. package/dist/viewer/assets/dashboard-docs-page-BfWR9Ai9.js +2 -0
  49. package/dist/viewer/assets/dashboard-docs-page-inner-BLbX-YwF.js +67 -0
  50. package/dist/viewer/assets/dashboard-layout-sTeeHNsZ.js +1 -0
  51. package/dist/viewer/assets/dashboard-lens-layout-D-tu_4kn.js +1 -0
  52. package/dist/viewer/assets/dashboard-map-frame-page-7pDmbTSe.js +1 -0
  53. package/dist/viewer/assets/dashboard-plans-page-CfwOZ34A.js +1 -0
  54. package/dist/viewer/assets/dashboard-service-apis-k93fjW51.js +1 -0
  55. package/dist/viewer/assets/{dashboard-service-diagrams-CIjk95Jk.js → dashboard-service-diagrams-BIWUxX-Y.js} +3 -3
  56. package/dist/viewer/assets/dashboard-service-docs-CnniTD6Q.js +1 -0
  57. package/dist/viewer/assets/{dashboard-service-overview-CzePVPjl.js → dashboard-service-overview-CGBu4omY.js} +5 -5
  58. package/dist/viewer/assets/dashboard-services-DEscIO2O.js +1 -0
  59. package/dist/viewer/assets/{db-type-badge-DOgu1Pyc.js → db-type-badge-UbPgpwQf.js} +2 -2
  60. package/dist/viewer/assets/debounce-Cp8eREM4-D7o-Pzb-.js +2 -0
  61. package/dist/viewer/assets/{dependencies-CYdEztHw.js → dependencies-DK2GDlhQ.js} +1 -1
  62. package/dist/viewer/assets/{dependency-graph-DbyfN-rC.js → dependency-graph-xBEnCS0J.js} +3 -3
  63. package/dist/viewer/assets/{diagram-S7CK7UJ4-q-NHkUCx.js → diagram-S7CK7UJ4-D-liadVe.js} +2 -2
  64. package/dist/viewer/assets/diagram-UQ7AKVKN-CnA8mgXp.js +41 -0
  65. package/dist/viewer/assets/{diagram-VSXAHHWV-DZc1kHGx.js → diagram-VSXAHHWV-Ck7dgRFR.js} +2 -2
  66. package/dist/viewer/assets/diagram-VX7I27RA-Cm1LHbu3.js +24 -0
  67. package/dist/viewer/assets/diagram-Z3DM3KII-DV3yBUCB.js +24 -0
  68. package/dist/viewer/assets/diagram-live-preview-DzJ7Nxp1.js +2 -0
  69. package/dist/viewer/assets/{diagram-portal-page-CWxuok9E.js → diagram-portal-page-gguGLULH.js} +24 -24
  70. package/dist/viewer/assets/{diagrams-C1xkRPqT.js → diagrams-BqBSv2eb.js} +4 -4
  71. package/dist/viewer/assets/dialog-D7wzTt0L.js +6 -0
  72. package/dist/viewer/assets/{doc-file-content-B06roi8L.js → doc-file-content-Be0au9Vo.js} +4 -4
  73. package/dist/viewer/assets/{download-CLdCXVsO.js → download-DhyZ3g4F.js} +1 -1
  74. package/dist/viewer/assets/ebnfDiagram-PWID7BFC-BXbHVQvG.js +1 -0
  75. package/dist/viewer/assets/{editor-vqK4qAnB.js → editor-F9o4zoeB.js} +2 -2
  76. package/dist/viewer/assets/{erDiagram-RLTQ6QDP-BWuA-aqV.js → erDiagram-RLTQ6QDP-DMfiWput.js} +2 -2
  77. package/dist/viewer/assets/{file-text-BvszilVL.js → file-text-BFqJQ67P.js} +1 -1
  78. package/dist/viewer/assets/flow-diagram-preview-B83UU1n_.js +1 -0
  79. package/dist/viewer/assets/{flowDiagram-HODETNUW-Db0QtNj4.js → flowDiagram-HODETNUW-BNFS2Mkr.js} +1 -1
  80. package/dist/viewer/assets/ganttDiagram-EL5Y4UJY-DFDsYJNp.js +292 -0
  81. package/dist/viewer/assets/gitGraphDiagram-WWUBYQGX-BVHabPDp.js +106 -0
  82. package/dist/viewer/assets/global-loader-XJO9_e0l.js +1 -0
  83. package/dist/viewer/assets/{globe-Jl6eIZmG.js → globe-CJ35KsQW.js} +1 -1
  84. package/dist/viewer/assets/gql-FFIj8zdp.js +1 -0
  85. package/dist/viewer/assets/{grid-scroll-body-CPqSxU6-.js → grid-scroll-body-DC5pYDPJ.js} +2 -2
  86. package/dist/viewer/assets/iconBase-DtqdW2XR.js +1 -0
  87. package/dist/viewer/assets/index-B6MxYIzs.js +1 -0
  88. package/dist/viewer/assets/index-BC5xdBQU.js +48 -0
  89. package/dist/viewer/assets/index-BIrx3oY4.js +1 -0
  90. package/dist/viewer/assets/{index-jm22RWpY.js → index-BZGsDmUx.js} +5 -5
  91. package/dist/viewer/assets/{index-Poftp9f1.js → index-BZXhpoWr.js} +4 -4
  92. package/dist/viewer/assets/index-Bn2bqqMd.js +1 -0
  93. package/dist/viewer/assets/{index-HU5pz3kj.js → index-BpCVYTvP.js} +36 -36
  94. package/dist/viewer/assets/{index-Bt2YHgxl.js → index-CBOYhBKJ.js} +1 -1
  95. package/dist/viewer/assets/index-CH7cEAxj.js +17 -0
  96. package/dist/viewer/assets/index-CIf0GId3.js +74 -0
  97. package/dist/viewer/assets/{index-D7MEHpJf.js → index-Ck66Ic_p.js} +4 -4
  98. package/dist/viewer/assets/index-Cp9mIQ8F.js +1 -0
  99. package/dist/viewer/assets/{index-c6Bxcoqm.js → index-DDmBuMKI.js} +1 -1
  100. package/dist/viewer/assets/{index-BSyJbFDG.js → index-DY3BFyb6.js} +1 -1
  101. package/dist/viewer/assets/{index-BS94XVnd.js → index-DkzZ-ZvR.js} +1 -1
  102. package/dist/viewer/assets/{index-C_43VC19.js → index-PglMbhys.js} +1 -1
  103. package/dist/viewer/assets/infoDiagram-27XIBGKW-CG-wwxBf.js +2 -0
  104. package/dist/viewer/assets/input--C59pq6j.js +1 -0
  105. package/dist/viewer/assets/{ishikawaDiagram-5VMMS53U-C4PzFnZ4.js → ishikawaDiagram-5VMMS53U-BlgV7ceJ.js} +2 -2
  106. package/dist/viewer/assets/{journeyDiagram-3NMN7TZE-Dpn3bBNo.js → journeyDiagram-3NMN7TZE-Cn03_Xl6.js} +2 -2
  107. package/dist/viewer/assets/{kanban-definition-UXKFOSKX-CJ99H4G6.js → kanban-definition-UXKFOSKX-CJogvDPY.js} +6 -6
  108. package/dist/viewer/assets/{layout-Bfvxt_D5.js → layout-B26eC4yQ.js} +1 -1
  109. package/dist/viewer/assets/{lens-run-page-DZneics-.js → lens-run-page-Ba1ppzJt.js} +3 -3
  110. package/dist/viewer/assets/lens-runs-page-BnUS57LM.js +1 -0
  111. package/dist/viewer/assets/{link-2-C75goIOt.js → link-2-D1e0xznG.js} +1 -1
  112. package/dist/viewer/assets/linked-project-dot-BY1gEES9.js +543 -0
  113. package/dist/viewer/assets/{loader-circle-C5jZoM7X.js → loader-circle-CiqyoJF7.js} +1 -1
  114. package/dist/viewer/assets/{merge-Cy7YkrN7.js → merge-BhOMvhW1.js} +1 -1
  115. package/dist/viewer/assets/mermaid.core-BDgZg3kW.js +312 -0
  116. package/dist/viewer/assets/method-badge-DErZP7y5.js +1 -0
  117. package/dist/viewer/assets/{mindmap-definition-YA3MSWOX-yQCKA-K4.js → mindmap-definition-YA3MSWOX-DFkLu0ac.js} +2 -2
  118. package/dist/viewer/assets/nav-links-DZWMpwMR.js +61 -0
  119. package/dist/viewer/assets/{network-COWNXGMM.js → network-B1apzT1s.js} +1 -1
  120. package/dist/viewer/assets/{nosql-editor-modal-DTiWkc_r.js → nosql-editor-modal-CvH0SWAi.js} +5 -5
  121. package/dist/viewer/assets/not-found-page-C-fn8QeM.js +1 -0
  122. package/dist/viewer/assets/organization-dependency-graph-page-BryP-iJL.js +1 -0
  123. package/dist/viewer/assets/pegDiagram-XKGWAZYB-g1cM14-L.js +1 -0
  124. package/dist/viewer/assets/{pieDiagram-E7YTZNPT-DqnkpCX4.js → pieDiagram-E7YTZNPT-WEnDsMY3.js} +2 -2
  125. package/dist/viewer/assets/{plus-DQakmTjA.js → plus-DbyuOgKB.js} +1 -1
  126. package/dist/viewer/assets/popover-476u3TN0.js +1 -0
  127. package/dist/viewer/assets/preload-helper-BlTxHScW.js +1 -0
  128. package/dist/viewer/assets/{quadrantDiagram-AXDQQJYC-iQjJfars.js → quadrantDiagram-AXDQQJYC-NdfQCpzF.js} +2 -2
  129. package/dist/viewer/assets/query-D9oj6LGx.js +50 -0
  130. package/dist/viewer/assets/{quill-rCHj4fCw.js → quill-Cde5JMRD.js} +1 -1
  131. package/dist/viewer/assets/railroadDiagram-O6MQD6OU-BYhlXlMY.js +1 -0
  132. package/dist/viewer/assets/{react-BNzYaZuG.js → react-Bx48XWN4.js} +1 -1
  133. package/dist/viewer/assets/react-flow-wrapper-BcbvHgxz.js +277 -0
  134. package/dist/viewer/assets/{requirementDiagram-BXWQKSXE-Bv-Vh1dW.js → requirementDiagram-BXWQKSXE-C25Bcm2L.js} +2 -2
  135. package/dist/viewer/assets/{sankeyDiagram-P5KCCOFB-C__uD07f.js → sankeyDiagram-P5KCCOFB-h8LiCsgk.js} +2 -2
  136. package/dist/viewer/assets/scroll-area-RagrStGj.js +6 -0
  137. package/dist/viewer/assets/{search-DW-qhXLk.js → search-vw7ucoOs.js} +1 -1
  138. package/dist/viewer/assets/section-loader-C4hOfhQS.js +1 -0
  139. package/dist/viewer/assets/section-not-found-BnrXiPog.js +1 -0
  140. package/dist/viewer/assets/select-D9fbrr7O.js +1 -0
  141. package/dist/viewer/assets/{sequenceDiagram-WJ2MYXX4-1RbvcHwO.js → sequenceDiagram-WJ2MYXX4-CDRVvD30.js} +2 -2
  142. package/dist/viewer/assets/{service-context-C17u_Fw9.js → service-context-D5nBtU18.js} +1 -1
  143. package/dist/viewer/assets/{service-database-list-page-cYuDHIls.js → service-database-list-page-DBjaDLVy.js} +2 -2
  144. package/dist/viewer/assets/service-database-page-CenNCgwf.js +2 -0
  145. package/dist/viewer/assets/service-database-page-inner-gS51TQTZ.js +85 -0
  146. package/dist/viewer/assets/{service-doc-Dir8g83J.js → service-doc-C-jHqT1U.js} +4 -4
  147. package/dist/viewer/assets/{service-doc-preview-modal-bJ6tJ5YR.js → service-doc-preview-modal-5sX6FOu1.js} +2 -2
  148. package/dist/viewer/assets/service-layout-Bf0vZBCH.js +1 -0
  149. package/dist/viewer/assets/service-pages-CFikvX4t.js +1 -0
  150. package/dist/viewer/assets/{services-Crqkffr5.js → services-Ivav34WC.js} +4 -4
  151. package/dist/viewer/assets/{share-2-BmYmqN4k.js → share-2-CQEaWbfH.js} +1 -1
  152. package/dist/viewer/assets/sizeCapture-INFHLROL-BJ6ndnPM.js +1 -0
  153. package/dist/viewer/assets/stateDiagram-D77RDMKH-B_tNCX3o.js +1 -0
  154. package/dist/viewer/assets/stateDiagram-v2-MP3YSRHH-Dl9wqdli.js +1 -0
  155. package/dist/viewer/assets/{style-DgSU0bQl.js → style-BPesJvJr.js} +8 -8
  156. package/dist/viewer/assets/super-circle-loader-DSkos6uP.js +1 -0
  157. package/dist/viewer/assets/super-logo-loader-Cxlbn6MB.js +1 -0
  158. package/dist/viewer/assets/swimlanes-42K2YHIH-CzURzYwf.js +1 -0
  159. package/dist/viewer/assets/swimlanesDiagram-VR7AAH4N-DrIlwFtk.js +8 -0
  160. package/dist/viewer/assets/table-B4pFND-o.js +1 -0
  161. package/dist/viewer/assets/textarea-Clgdv3Oi.js +1 -0
  162. package/dist/viewer/assets/{timeline-definition-24CTP7MA-C4yuLwUH.js → timeline-definition-24CTP7MA-D0YXQE1U.js} +2 -2
  163. package/dist/viewer/assets/ui-graph-logo-gHowu5gP.js +1 -0
  164. package/dist/viewer/assets/{upload-CRsS43j9.js → upload-CYb3nN_5.js} +1 -1
  165. package/dist/viewer/assets/{uploads-BOQHX9l4.js → uploads-CX2kdXbM.js} +8 -8
  166. package/dist/viewer/assets/{use-debounced-value-Ba-kkCUY.js → use-debounced-value-BpNFJd3C.js} +1 -1
  167. package/dist/viewer/assets/{use-localstorage-DIisTx-J.js → use-localstorage-D233xVb0.js} +1 -1
  168. package/dist/viewer/assets/use-permissions-BvmxJJ5r.js +1 -0
  169. package/dist/viewer/assets/{use-scoped-storage-C4RzED-E.js → use-scoped-storage-DL1XVp1j.js} +1 -1
  170. package/dist/viewer/assets/useMutation-D5ZHwHsx.js +1 -0
  171. package/dist/viewer/assets/useQuery-Dhe6uxrL.js +1 -0
  172. package/dist/viewer/assets/{vennDiagram-4TSXK5OY-BCtqXZqe.js → vennDiagram-4TSXK5OY-SSjHlqCQ.js} +2 -2
  173. package/dist/viewer/assets/{wardleyDiagram-VM6X3IG4-D3OtZJoT.js → wardleyDiagram-VM6X3IG4-CZWNdQxH.js} +2 -2
  174. package/dist/viewer/assets/{xychartDiagram-S5SC5T6Z-DxLL2CHH.js → xychartDiagram-S5SC5T6Z-B2qAGeb0.js} +2 -2
  175. package/dist/viewer/assets/zod-BMU4UTQt.js +1 -0
  176. package/dist/viewer/index.html +10 -1
  177. package/package.json +56 -56
  178. package/dist/abort-signals-B4fc3ahg.mjs +0 -34
  179. package/dist/anthropic-messages-KPxCHqBN.mjs +0 -14327
  180. package/dist/auth-storage-BvNH97p9.mjs +0 -2180
  181. package/dist/azure-openai-config-BbeCSg4y.mjs +0 -55
  182. package/dist/azure-openai-responses-BRzy8RfL.mjs +0 -182
  183. package/dist/classifier-shared-DBUHiTGw.mjs +0 -105
  184. package/dist/cli-2R6QQFp1.mjs +0 -451
  185. package/dist/cloudflare-workers-ai-system-one-BfqwmRQf.mjs +0 -44
  186. package/dist/config-D8DMGzIq.mjs +0 -647
  187. package/dist/cross-spawn-B2jIQPlu.mjs +0 -404
  188. package/dist/diagnostics-xdSgQR8t.mjs +0 -131
  189. package/dist/dist-BRyghrKX.mjs +0 -404
  190. package/dist/dist-D0EzrblG.mjs +0 -12161
  191. package/dist/dist-EKhnHWHG.mjs +0 -140221
  192. package/dist/dist-pQtuusFv.mjs +0 -1243
  193. package/dist/easter-egg-3d-C9_btlWn.mjs +0 -1225
  194. package/dist/env-api-keys-uytNub6O.mjs +0 -122
  195. package/dist/error-body-FhmCtR7m.mjs +0 -101
  196. package/dist/esm-D5isprgl.mjs +0 -1533
  197. package/dist/esm-DnqE4pfM.mjs +0 -104876
  198. package/dist/execute-BoTKl80U.mjs +0 -1715
  199. package/dist/github-copilot-headers-DWcTgoXr.mjs +0 -22
  200. package/dist/google-generative-ai-Brs5YpJo.mjs +0 -332
  201. package/dist/google-shared-2CyYa4VE.mjs +0 -33438
  202. package/dist/google-vertex-DZDUQPKa.mjs +0 -378
  203. package/dist/hash-DN7ukSfd.mjs +0 -16
  204. package/dist/headers-GhQHLk-3.mjs +0 -17
  205. package/dist/jiti-9kWALm4Y.mjs +0 -5439
  206. package/dist/jiti-loader-f21DrY1K.mjs +0 -27
  207. package/dist/jiti-static-loader-BI_w28l7.mjs +0 -41704
  208. package/dist/json-parse-B2mHg7o7.mjs +0 -381
  209. package/dist/keybinding-hints-D0nLU3ZH.mjs +0 -17899
  210. package/dist/lib-Dj1gKQJc.mjs +0 -24379
  211. package/dist/llama-cpp-classify-C73BoMYd.mjs +0 -344
  212. package/dist/mistral-conversations-DXVR7znL.mjs +0 -698
  213. package/dist/models-DBdii9gQ.mjs +0 -1255
  214. package/dist/multipart-parser-DLw9Z0uJ.mjs +0 -298
  215. package/dist/node-B0NU8X55.mjs +0 -2479
  216. package/dist/node-B8gaKm9g.mjs +0 -23
  217. package/dist/openai-I3_AqKDX.mjs +0 -17357
  218. package/dist/openai-codex-responses-PcZHDuBD.mjs +0 -1198
  219. package/dist/openai-completions-a_mH01ii.mjs +0 -994
  220. package/dist/openai-decisions-Du8y4mQG.mjs +0 -142
  221. package/dist/openai-prompt-cache-Bc6qNWt0.mjs +0 -8
  222. package/dist/openai-responses-a9lV_U7O.mjs +0 -270
  223. package/dist/openai-responses-shared-CDs_PBiH.mjs +0 -598
  224. package/dist/openrouter-images-D0Zc8Cjs.mjs +0 -125
  225. package/dist/photon_rs-DCvMOMu0.mjs +0 -4252
  226. package/dist/pi-messages-B5ietIBq.mjs +0 -306
  227. package/dist/provider-env-BJhgA66g.mjs +0 -37
  228. package/dist/provider-retry-DXYM7rVE.mjs +0 -79
  229. package/dist/runtime-DTkBxiaM.mjs +0 -2822
  230. package/dist/sanitize-unicode-CqChtoM6.mjs +0 -26
  231. package/dist/shell-836_JFnI.mjs +0 -162
  232. package/dist/source-CKPndhKl.mjs +0 -478
  233. package/dist/src-DNm2QRm3.mjs +0 -5028
  234. package/dist/system-one-shared-DUAFtNa8.mjs +0 -75
  235. package/dist/token-DEUkymby.mjs +0 -56
  236. package/dist/token-util-Cx5S4eKt.mjs +0 -3
  237. package/dist/tool-DHDYqsyG.mjs +0 -6673
  238. package/dist/transform-messages-BClk99Vn.mjs +0 -477
  239. package/dist/typesafe-system-one-D2d8j8hZ.mjs +0 -24
  240. package/dist/typescript-Br-vsRJV.mjs +0 -6737
  241. package/dist/uuid-CNCZqNBb.mjs +0 -49
  242. package/dist/v2-1z8ijsD3.mjs +0 -6120
  243. package/dist/viewer/assets/abnfDiagram-VCTEODGH-j5YaKnl9.js +0 -1
  244. package/dist/viewer/assets/actor-avatar-DqmoY8Xc.js +0 -1
  245. package/dist/viewer/assets/architectureDiagram-5GKGNRK7-D80cJKz_.js +0 -36
  246. package/dist/viewer/assets/avatar-BI7D-Aia.js +0 -43
  247. package/dist/viewer/assets/badge-870-A4Y6.js +0 -1
  248. package/dist/viewer/assets/better-delete-confirmation-modal-Dib31LVb.js +0 -1
  249. package/dist/viewer/assets/better-dialog-D3AAiahr.js +0 -1
  250. package/dist/viewer/assets/button-DadqadpO.js +0 -1
  251. package/dist/viewer/assets/channel-DRkt3LIn.js +0 -1
  252. package/dist/viewer/assets/checkbox-BXpR079x.js +0 -1
  253. package/dist/viewer/assets/classDiagram-ZZMXUADV-G5CebNaC.js +0 -1
  254. package/dist/viewer/assets/classDiagram-v2-VYDZK3BY-G5CebNaC.js +0 -1
  255. package/dist/viewer/assets/color-input-Efm-lxDy.js +0 -11
  256. package/dist/viewer/assets/cose-bilkent-JH36ORCC-CrSHFmnp.js +0 -1
  257. package/dist/viewer/assets/cross-button-5Sr5rWVP.js +0 -1
  258. package/dist/viewer/assets/cynefinDiagram-5FMLGOSQ-Bdl_eBdu.js +0 -62
  259. package/dist/viewer/assets/dashboard-diagrams-page-DMupOe1m.js +0 -2
  260. package/dist/viewer/assets/dashboard-diagrams-page-inner-Dh0yKh2A.js +0 -1
  261. package/dist/viewer/assets/dashboard-docs-page-DWJ1qOQz.js +0 -2
  262. package/dist/viewer/assets/dashboard-docs-page-inner-Fs6G3oGo.js +0 -67
  263. package/dist/viewer/assets/dashboard-layout-D36InAaB.js +0 -1
  264. package/dist/viewer/assets/dashboard-lens-layout-Cv1Xx3hY.js +0 -1
  265. package/dist/viewer/assets/dashboard-map-frame-page-CTn61NUO.js +0 -1
  266. package/dist/viewer/assets/dashboard-plans-page-DxFJkrgK.js +0 -1
  267. package/dist/viewer/assets/dashboard-service-apis-BHtD9s5z.js +0 -1
  268. package/dist/viewer/assets/dashboard-service-docs-Uv_1uxxO.js +0 -1
  269. package/dist/viewer/assets/dashboard-services-CUP-L4Jg.js +0 -1
  270. package/dist/viewer/assets/diagram-UQ7AKVKN-DhFcurW6.js +0 -41
  271. package/dist/viewer/assets/diagram-VX7I27RA-DE1nREE8.js +0 -24
  272. package/dist/viewer/assets/diagram-Z3DM3KII-CSrYcCbc.js +0 -24
  273. package/dist/viewer/assets/diagram-live-preview-i5doxXLH.js +0 -2
  274. package/dist/viewer/assets/dialog-D_HtNS17.js +0 -6
  275. package/dist/viewer/assets/ebnfDiagram-PWID7BFC-BfL8m_sf.js +0 -1
  276. package/dist/viewer/assets/flow-diagram-preview-T0Z4iMVU.js +0 -1
  277. package/dist/viewer/assets/ganttDiagram-EL5Y4UJY-CsITpniw.js +0 -292
  278. package/dist/viewer/assets/gitGraphDiagram-WWUBYQGX-B4eCBGoe.js +0 -106
  279. package/dist/viewer/assets/iconBase-BoDZfJgC.js +0 -1
  280. package/dist/viewer/assets/index-5E1tJ7yK.js +0 -125
  281. package/dist/viewer/assets/index-7XpV2DRw.js +0 -1
  282. package/dist/viewer/assets/index-C0Rs3s9Z.js +0 -1
  283. package/dist/viewer/assets/index-CzHjJWeV.js +0 -1
  284. package/dist/viewer/assets/index-DcEA6SIV.js +0 -74
  285. package/dist/viewer/assets/infoDiagram-27XIBGKW-lTebN5Ix.js +0 -2
  286. package/dist/viewer/assets/input-YvHTVS0E.js +0 -1
  287. package/dist/viewer/assets/lens-runs-page-DoAOObxx.js +0 -1
  288. package/dist/viewer/assets/linked-project-dot-Ds2uEmJ9.js +0 -543
  289. package/dist/viewer/assets/mermaid.core-BCRBv8Us.js +0 -312
  290. package/dist/viewer/assets/method-badge-DMYDKdDZ.js +0 -1
  291. package/dist/viewer/assets/nav-links-8vT2ixiI.js +0 -61
  292. package/dist/viewer/assets/not-found-page-CnfLlhS4.js +0 -1
  293. package/dist/viewer/assets/organization-dependency-graph-page-3xqIxjNx.js +0 -1
  294. package/dist/viewer/assets/pegDiagram-XKGWAZYB-CMXqeAum.js +0 -1
  295. package/dist/viewer/assets/popover-CN9ni1N3.js +0 -1
  296. package/dist/viewer/assets/railroadDiagram-O6MQD6OU-CfqToX3W.js +0 -1
  297. package/dist/viewer/assets/react-flow-wrapper-BPlRstyO.js +0 -276
  298. package/dist/viewer/assets/scroll-area-BodE-n7W.js +0 -6
  299. package/dist/viewer/assets/section-loader-BzpYM_Nx.js +0 -1
  300. package/dist/viewer/assets/select-DDtnmSET.js +0 -1
  301. package/dist/viewer/assets/service-database-page-CMi1wF4h.js +0 -2
  302. package/dist/viewer/assets/service-database-page-inner-CoqAj93L.js +0 -85
  303. package/dist/viewer/assets/service-layout-0NMm_bKG.js +0 -1
  304. package/dist/viewer/assets/service-pages-dfnc91SU.js +0 -1
  305. package/dist/viewer/assets/sizeCapture-INFHLROL-BRJi3gCg.js +0 -1
  306. package/dist/viewer/assets/stateDiagram-D77RDMKH-DdLsfxgy.js +0 -1
  307. package/dist/viewer/assets/stateDiagram-v2-MP3YSRHH-DFwg8Qki.js +0 -1
  308. package/dist/viewer/assets/super-circle-loader-D8MElOMh.js +0 -1
  309. package/dist/viewer/assets/super-logo-loader-DJYiRbCS.js +0 -1
  310. package/dist/viewer/assets/swimlanes-42K2YHIH-AuYjrPqh.js +0 -1
  311. package/dist/viewer/assets/swimlanesDiagram-VR7AAH4N-0nIGA8_4.js +0 -8
  312. package/dist/viewer/assets/table-Bi4Auk9Z.js +0 -1
  313. package/dist/viewer/assets/textarea-MgxZ5x6-.js +0 -1
  314. package/dist/viewer/assets/ui-graph-logo-D4jRhd4z.js +0 -1
  315. package/dist/viewer/assets/use-permissions-6JVET753.js +0 -1
  316. package/dist/viewer/assets/useMutation-CmVaR9zz.js +0 -1
  317. package/dist/viewer/assets/useQuery-B8yYhO0c.js +0 -1
  318. package/dist/viewer/assets/zod-Dc4H6VVJ.js +0 -1
  319. package/dist/virtual-modules-DnCx0Gdx.mjs +0 -340
@@ -1,1255 +0,0 @@
1
- import { a as AssistantMessageEventStream, i as formatThrownValue } from "./diagnostics-xdSgQR8t.mjs";
2
- //#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/lazy.js
3
- function createSetupErrorMessage(model, error, timestamp) {
4
- return {
5
- role: "assistant",
6
- content: [],
7
- api: model.api,
8
- provider: model.provider,
9
- model: model.id,
10
- usage: {
11
- input: 0,
12
- output: 0,
13
- cacheRead: 0,
14
- cacheWrite: 0,
15
- totalTokens: 0,
16
- cost: {
17
- input: 0,
18
- output: 0,
19
- cacheRead: 0,
20
- cacheWrite: 0,
21
- total: 0
22
- }
23
- },
24
- stopReason: "error",
25
- errorMessage: error instanceof Error ? error.message : String(error),
26
- timestamp
27
- };
28
- }
29
- function hasResult(source) {
30
- return typeof source.result === "function";
31
- }
32
- async function forwardStream(target, source) {
33
- for await (const event of source) target.push(event);
34
- target.end(hasResult(source) ? await source.result() : void 0);
35
- }
36
- /**
37
- * Returns a stream synchronously while running async setup (auth resolution,
38
- * lazy module loading) behind it. Setup failures terminate the stream with an
39
- * error event.
40
- */
41
- function lazyStream(model, setup) {
42
- const startedAt = Date.now();
43
- const outer = new AssistantMessageEventStream();
44
- setup().then((inner) => forwardStream(outer, inner)).catch((error) => {
45
- const message = createSetupErrorMessage(model, error, startedAt);
46
- outer.push({
47
- type: "error",
48
- reason: "error",
49
- error: message
50
- });
51
- outer.end(message);
52
- });
53
- return outer;
54
- }
55
- function lazyApi(load, capabilities) {
56
- const api = {
57
- stream: (model, context, options) => lazyStream(model, async () => (await load()).stream(model, context, options)),
58
- streamSimple: (model, context, options) => lazyStream(model, async () => (await load()).streamSimple(model, context, options))
59
- };
60
- if (capabilities?.fetchDeferred) api.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {
61
- const implementation = await load();
62
- if (!implementation.fetchDeferred) throw new Error("API does not support deferred responses");
63
- return implementation.fetchDeferred(model, handle, options);
64
- });
65
- if (capabilities?.cancelDeferred) api.cancelDeferred = async (model, handle, options) => {
66
- const implementation = await load();
67
- if (!implementation.cancelDeferred) throw new Error("API cannot cancel deferred responses");
68
- await implementation.cancelDeferred(model, handle, options);
69
- };
70
- return api;
71
- }
72
- //#endregion
73
- //#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/auth/context.js
74
- var __rewriteRelativeImportExtension = function(path, preserveJsx) {
75
- if (typeof path === "string" && /^\.\.?\//.test(path)) return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {
76
- return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js";
77
- });
78
- return path;
79
- };
80
- const importNodeModule = (specifier) => import(__rewriteRelativeImportExtension(specifier));
81
- function getProcessEnv() {
82
- return globalThis.process?.env;
83
- }
84
- /**
85
- * Default auth context: env vars from `process.env` (undefined in browsers),
86
- * file existence via node:fs (always false in browsers).
87
- */
88
- function defaultProviderAuthContext() {
89
- return {
90
- async env(name) {
91
- const value = getProcessEnv()?.[name];
92
- return typeof value === "string" && value.trim().length > 0 ? value : void 0;
93
- },
94
- async fileExists(path) {
95
- try {
96
- const fs = await importNodeModule("node:fs/promises");
97
- let resolved = path;
98
- if (resolved.startsWith("~")) resolved = (await importNodeModule("node:os")).homedir() + resolved.slice(1);
99
- await fs.access(resolved);
100
- return true;
101
- } catch {
102
- return false;
103
- }
104
- }
105
- };
106
- }
107
- //#endregion
108
- //#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/abort.js
109
- function abortReason(signal) {
110
- if (signal.reason !== void 0) return signal.reason;
111
- const error = /* @__PURE__ */ new Error("The operation was aborted");
112
- error.name = "AbortError";
113
- return error;
114
- }
115
- /** Create an operation-local signal for public APIs whose signal is optional. */
116
- function operationSignal(signal) {
117
- return signal ?? new AbortController().signal;
118
- }
119
- /**
120
- * Stop waiting for an operation when its signal aborts while continuing to
121
- * observe the abandoned promise so a later rejection is always handled.
122
- */
123
- function raceWithAbortSignal(operation, signal) {
124
- if (signal.aborted) {
125
- operation.catch(() => {});
126
- return Promise.reject(abortReason(signal));
127
- }
128
- return new Promise((resolve, reject) => {
129
- let settled = false;
130
- const cleanup = () => signal.removeEventListener("abort", onAbort);
131
- const onAbort = () => {
132
- if (settled) return;
133
- settled = true;
134
- cleanup();
135
- reject(abortReason(signal));
136
- };
137
- signal.addEventListener("abort", onAbort, { once: true });
138
- operation.then((value) => {
139
- if (settled) return;
140
- settled = true;
141
- cleanup();
142
- resolve(value);
143
- }, (error) => {
144
- if (settled) return;
145
- settled = true;
146
- cleanup();
147
- reject(error);
148
- });
149
- if (signal.aborted) onAbort();
150
- });
151
- }
152
- //#endregion
153
- //#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/auth/credential-store.js
154
- /**
155
- * Default in-memory credential store. Apps inject persistent stores.
156
- * Keyed by `Provider.id`, one credential per provider; see `CredentialStore`.
157
- * Writes are serialized per provider through a promise chain.
158
- */
159
- var InMemoryCredentialStore = class {
160
- credentials = /* @__PURE__ */ new Map();
161
- chains = /* @__PURE__ */ new Map();
162
- /** Serialize tasks per provider id without releasing the chain before active work settles. */
163
- enqueue(providerId, task, options) {
164
- const signal = operationSignal(options?.signal);
165
- const previous = this.chains.get(providerId) ?? Promise.resolve();
166
- const queued = (async () => {
167
- await previous.catch(() => {});
168
- signal.throwIfAborted();
169
- return task();
170
- })();
171
- const tail = queued.catch(() => {});
172
- this.chains.set(providerId, tail);
173
- tail.then(() => {
174
- if (this.chains.get(providerId) === tail) this.chains.delete(providerId);
175
- });
176
- return raceWithAbortSignal(queued, signal);
177
- }
178
- async read(providerId, options) {
179
- options?.signal?.throwIfAborted();
180
- return this.credentials.get(providerId);
181
- }
182
- async list(options) {
183
- options?.signal?.throwIfAborted();
184
- return [...this.credentials].map(([providerId, credential]) => ({
185
- providerId,
186
- type: credential.type
187
- }));
188
- }
189
- modify(providerId, fn, options) {
190
- return this.enqueue(providerId, async () => {
191
- const current = this.credentials.get(providerId);
192
- const next = await fn(current);
193
- options?.signal?.throwIfAborted();
194
- if (next !== void 0) this.credentials.set(providerId, next);
195
- return next ?? current;
196
- }, options);
197
- }
198
- delete(providerId, options) {
199
- return this.enqueue(providerId, async () => {
200
- this.credentials.delete(providerId);
201
- }, options);
202
- }
203
- };
204
- //#endregion
205
- //#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/models-error.js
206
- var ModelsError = class extends Error {
207
- code;
208
- constructor(code, message, options) {
209
- super(withCauseDetail(message, options?.cause), options);
210
- this.name = "ModelsError";
211
- this.code = code;
212
- }
213
- };
214
- /** Callers surface `error.message` only, so keep the underlying reason in it. */
215
- function withCauseDetail(message, cause) {
216
- if (cause === void 0 || cause === null) return message;
217
- const detail = formatThrownValue(cause).trim();
218
- if (!detail || message.includes(detail)) return message;
219
- return `${message}: ${detail}`;
220
- }
221
- //#endregion
222
- //#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/auth/resolve.js
223
- /**
224
- * Auth resolution shared by all operations in a `Models` collection.
225
- * A stored credential owns the provider: ambient/env is consulted only when
226
- * nothing is stored. No silent env fallback after a failed refresh or for a
227
- * credential type without a matching handler.
228
- */
229
- function resolveProviderAuth(provider, credentials, authContext, overrides) {
230
- const signal = operationSignal(overrides?.signal);
231
- return raceWithAbortSignal(resolveProviderAuthWithSignal(provider, credentials, authContext, overrides, signal), signal);
232
- }
233
- async function resolveProviderAuthWithSignal(provider, credentials, authContext, overrides, signal) {
234
- signal.throwIfAborted();
235
- const requestAuthContext = overrides?.env ? overlayEnvAuthContext(authContext, overrides.env) : authContext;
236
- if (overrides?.apiKey !== void 0 && provider.auth.apiKey) return resolveApiKey(requestAuthContext, provider.auth.apiKey, provider.id, {
237
- type: "api_key",
238
- key: overrides.apiKey,
239
- env: overrides.env
240
- }, signal);
241
- const stored = await readCredential(credentials, provider.id, signal);
242
- if (stored) {
243
- if (stored.type === "oauth" && provider.auth.oauth) return resolveStoredOAuth(credentials, provider.id, provider.auth.oauth, stored, signal, overrides?.minOAuthValidityMs);
244
- if (stored.type === "api_key" && provider.auth.apiKey) {
245
- const credential = overrides?.env ? {
246
- ...stored,
247
- env: {
248
- ...stored.env,
249
- ...overrides.env
250
- }
251
- } : stored;
252
- return resolveApiKey(requestAuthContext, provider.auth.apiKey, provider.id, credential, signal);
253
- }
254
- return;
255
- }
256
- return provider.auth.apiKey ? resolveApiKey(requestAuthContext, provider.auth.apiKey, provider.id, void 0, signal) : void 0;
257
- }
258
- function overlayEnvAuthContext(base, env) {
259
- return {
260
- env: async (name) => env[name] || await base.env(name),
261
- fileExists: (path) => base.fileExists(path)
262
- };
263
- }
264
- const DEFAULT_OAUTH_MINIMUM_VALIDITY_MS = 3e5;
265
- const DEFAULT_OAUTH_REFRESH_TIMEOUT_MS = 15e3;
266
- /**
267
- * Refresh a stored OAuth credential under the credential-store lock and persist
268
- * the result before the lock is released. `needsRefresh` is re-checked under
269
- * the lock, so concurrent callers and processes refresh only once.
270
- *
271
- * `signal` cancels only the wait for the lock. Once a refresh starts, the
272
- * provider may already have rotated the refresh token, so the refresh and its
273
- * persistence ignore `signal` and are bounded only by a timeout. Otherwise a
274
- * cancelled caller could discard the only valid refresh token. Callers that
275
- * must return promptly on cancellation race this promise with their signal.
276
- *
277
- * Resolves with the stored OAuth credential after the operation, or undefined
278
- * when the provider no longer has an OAuth credential.
279
- */
280
- async function refreshStoredOAuthCredential(credentials, providerId, oauth, needsRefresh, signal) {
281
- let post;
282
- const lockWait = new AbortController();
283
- const cancelLockWait = () => lockWait.abort(signal.reason);
284
- signal.addEventListener("abort", cancelLockWait, { once: true });
285
- if (signal.aborted) cancelLockWait();
286
- try {
287
- post = await credentials.modify(providerId, async (current) => {
288
- signal.removeEventListener("abort", cancelLockWait);
289
- signal.throwIfAborted();
290
- if (current?.type !== "oauth") return void 0;
291
- if (!needsRefresh(current)) return void 0;
292
- try {
293
- return await oauth.refresh(current, AbortSignal.timeout(DEFAULT_OAUTH_REFRESH_TIMEOUT_MS));
294
- } catch (error) {
295
- throw new ModelsError("oauth", `OAuth refresh failed for ${providerId}`, { cause: error });
296
- }
297
- }, { signal: lockWait.signal });
298
- } catch (error) {
299
- if (error instanceof ModelsError) throw error;
300
- signal.throwIfAborted();
301
- throw new ModelsError("auth", `Credential store modify failed for ${providerId}`, { cause: error });
302
- } finally {
303
- signal.removeEventListener("abort", cancelLockWait);
304
- }
305
- return post?.type === "oauth" ? post : void 0;
306
- }
307
- /**
308
- * OAuth resolution with double-checked locking: tokens with less than five
309
- * minutes remaining are refreshed through `refreshStoredOAuthCredential`.
310
- */
311
- async function resolveStoredOAuth(credentials, providerId, oauth, stored, signal, minOAuthValidityMs) {
312
- const minimumValidityMs = Math.max(DEFAULT_OAUTH_MINIMUM_VALIDITY_MS, minOAuthValidityMs ?? 0);
313
- const expiresSoon = (credential) => Date.now() + minimumValidityMs >= credential.expires;
314
- let credential = stored;
315
- if (expiresSoon(credential)) {
316
- const post = await refreshStoredOAuthCredential(credentials, providerId, oauth, expiresSoon, signal);
317
- if (!post) return void 0;
318
- credential = post;
319
- if (minOAuthValidityMs !== void 0 && expiresSoon(credential)) throw new ModelsError("oauth", `OAuth refresh returned a token that expires too soon for ${providerId}`);
320
- }
321
- try {
322
- return {
323
- auth: await oauth.toAuth(credential),
324
- source: "OAuth"
325
- };
326
- } catch (error) {
327
- throw new ModelsError("oauth", `OAuth auth derivation failed for ${providerId}`, { cause: error });
328
- }
329
- }
330
- async function resolveApiKey(authContext, apiKey, providerId, credential, signal) {
331
- try {
332
- return await apiKey.resolve({
333
- ctx: authContext,
334
- credential,
335
- signal
336
- });
337
- } catch (error) {
338
- throw new ModelsError("auth", `API key auth failed for provider ${providerId}`, { cause: error });
339
- }
340
- }
341
- async function readCredential(credentials, providerId, signal) {
342
- try {
343
- return await credentials.read(providerId, { signal });
344
- } catch (error) {
345
- throw new ModelsError("auth", `Credential store read failed for ${providerId}`, { cause: error });
346
- }
347
- }
348
- //#endregion
349
- //#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/models-store.js
350
- var InMemoryModelsStore = class {
351
- entries = /* @__PURE__ */ new Map();
352
- async read(providerId, options) {
353
- options?.signal?.throwIfAborted();
354
- const entry = this.entries.get(providerId);
355
- return entry ? structuredClone(entry) : void 0;
356
- }
357
- async write(providerId, entry, options) {
358
- options?.signal?.throwIfAborted();
359
- this.entries.set(providerId, structuredClone(entry));
360
- }
361
- async delete(providerId, options) {
362
- options?.signal?.throwIfAborted();
363
- this.entries.delete(providerId);
364
- }
365
- };
366
- //#endregion
367
- //#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/model-operations.js
368
- /** The type of a model. Models without `type` are chat models. */
369
- function getModelType(model) {
370
- return model.type ?? "chat";
371
- }
372
- /** Runtime-checked model type narrowing, including legacy chat models without `type`. */
373
- function isModelType(model, type) {
374
- return getModelType(model) === type;
375
- }
376
- function assertChatModel(model) {
377
- if (!isModelType(model, "chat")) throw new ModelsError("provider", `Model ${model.provider}/${model.id} is not a chat model`);
378
- }
379
- function assertImageModel(model) {
380
- if (!isModelType(model, "image")) throw new ModelsError("provider", `Model ${model.provider}/${model.id} is not an image model`);
381
- }
382
- function assertClassifierModel(model) {
383
- if (!isModelType(model, "classifier")) throw new ModelsError("provider", `Model ${model.provider}/${model.id} is not a classifier model`);
384
- }
385
- /** Rejects classifier images for models whose catalog entry does not accept image input. */
386
- function assertClassifierInputSupported(model, context) {
387
- if (context.images?.length && !model.input.includes("image")) throw new ModelsError("provider", `Model ${model.provider}/${model.id} does not accept image input`);
388
- }
389
- function imageErrorResult(model, error, aborted = false) {
390
- return {
391
- api: model.api,
392
- provider: model.provider,
393
- model: model.id,
394
- output: [],
395
- stopReason: aborted ? "aborted" : "error",
396
- errorMessage: error instanceof Error ? error.message : String(error),
397
- timestamp: Date.now()
398
- };
399
- }
400
- function classifierErrorResult(model, error, aborted = false) {
401
- return {
402
- api: model.api,
403
- provider: model.provider,
404
- model: model.id,
405
- answers: {},
406
- stopReason: aborted ? "aborted" : "error",
407
- errorMessage: error instanceof Error ? error.message : String(error),
408
- timestamp: Date.now()
409
- };
410
- }
411
- //#endregion
412
- //#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/text.js
413
- /** Extract and join text from message content. */
414
- function contentText(content, separator = "\n") {
415
- if (typeof content === "string") return content;
416
- return content.filter((block) => block.type === "text").map((block) => block.text).join(separator);
417
- }
418
- /** Render a system message as a complete prompt: its content followed by its sections. */
419
- function getSystemMessageText(message) {
420
- const parts = [contentText(message.content)];
421
- for (const text of Object.values(message.sections ?? {})) if (text !== null) parts.push(text);
422
- return parts.filter((part) => part.length > 0).join("\n\n");
423
- }
424
- /**
425
- * Render a later system message for APIs that accept system messages mid-conversation.
426
- * Section changes are framed by name so the model can relate them to the leading prompt.
427
- * This framing is request-time only and may change between versions.
428
- */
429
- function renderSystemMessageUpdate(message) {
430
- const parts = [];
431
- const text = contentText(message.content);
432
- if (text.length > 0) parts.push(text);
433
- for (const [name, value] of Object.entries(message.sections ?? {})) parts.push(value === null ? `Removed system prompt section "${name}".` : `Updated system prompt section "${name}":\n\n${value}`);
434
- return parts.join("\n\n");
435
- }
436
- //#endregion
437
- //#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/transcript.js
438
- /**
439
- * Build the leading system message for a prompt and tool set. Returns undefined when
440
- * both are empty, so an empty transcript stays empty.
441
- */
442
- function createInitialSystemMessage(systemPrompt, tools) {
443
- const hasSystemPrompt = systemPrompt !== void 0 && systemPrompt.length > 0;
444
- const hasTools = tools !== void 0 && tools.length > 0;
445
- if (!hasSystemPrompt && !hasTools) return void 0;
446
- return {
447
- role: "system",
448
- content: systemPrompt ?? "",
449
- ...hasTools ? { toolsAdded: tools } : {},
450
- timestamp: 0
451
- };
452
- }
453
- /**
454
- * Fold `Context.systemPrompt` and `Context.tools` into a leading system message.
455
- * This is the only entry point that produces a {@link TranscriptContext}; every
456
- * provider-facing function expects the result.
457
- */
458
- function normalizeContext(context) {
459
- const initialMessage = createInitialSystemMessage(context.systemPrompt, context.tools);
460
- return { messages: initialMessage ? [initialMessage, ...context.messages] : context.messages };
461
- }
462
- function isSystemMessage(message) {
463
- return message.role === "system";
464
- }
465
- /** Return the leading system message, if the transcript starts with one. */
466
- function getInitialSystemMessage(messages) {
467
- const first = messages[0];
468
- return first && isSystemMessage(first) ? first : void 0;
469
- }
470
- /** Drop the leading system message for APIs that carry the prompt outside the message list. */
471
- function withoutInitialSystemMessage(messages) {
472
- return getInitialSystemMessage(messages) ? messages.slice(1) : messages;
473
- }
474
- /** Resolve the tools available after applying every transcript delta in order. */
475
- function getCurrentTools(messages) {
476
- const tools = /* @__PURE__ */ new Map();
477
- for (const message of messages) {
478
- if (!isSystemMessage(message)) continue;
479
- for (const tool of message.toolsRemoved ?? []) tools.delete(tool.name);
480
- for (const tool of message.toolsAdded ?? []) tools.set(tool.name, tool);
481
- }
482
- return [...tools.values()];
483
- }
484
- /**
485
- * Replay every system message into one leading system message holding the current
486
- * prompt and tools. Later `content` is appended to the base prompt, `sections` are
487
- * patched by name, and tools are resolved with {@link getCurrentTools}.
488
- */
489
- function getCurrentSystemMessage(messages) {
490
- const content = [];
491
- const sections = /* @__PURE__ */ new Map();
492
- let timestamp;
493
- for (const message of messages) {
494
- if (!isSystemMessage(message)) continue;
495
- timestamp ??= message.timestamp;
496
- const text = contentText(message.content);
497
- if (text.length > 0) content.push(text);
498
- for (const [name, value] of Object.entries(message.sections ?? {})) if (value === null) sections.delete(name);
499
- else sections.set(name, value);
500
- }
501
- const tools = getCurrentTools(messages);
502
- if (timestamp === void 0 && tools.length === 0) return void 0;
503
- return {
504
- role: "system",
505
- content: content.join("\n\n"),
506
- ...sections.size > 0 ? { sections: Object.fromEntries(sections) } : {},
507
- ...tools.length > 0 ? { toolsAdded: tools } : {},
508
- timestamp: timestamp ?? 0
509
- };
510
- }
511
- /** Render the current system prompt text after replaying every system message. */
512
- function getCurrentSystemPrompt(messages) {
513
- const message = getCurrentSystemMessage(messages);
514
- return message ? getSystemMessageText(message) : "";
515
- }
516
- /**
517
- * Rebuild the transcript for APIs without mid-conversation system messages: the replayed
518
- * system message leads, and every later system message is dropped.
519
- */
520
- function collapseSystemMessages(context) {
521
- const head = getCurrentSystemMessage(context.messages);
522
- const messages = context.messages.filter((message) => message.role !== "system");
523
- return { messages: head ? [head, ...messages] : messages };
524
- }
525
- /** Keep later system messages in place when the model accepts them; otherwise collapse them. */
526
- function resolveTranscript(context, supportsMidConvoSystemMessages) {
527
- return supportsMidConvoSystemMessages ? context : collapseSystemMessages(context);
528
- }
529
- /** Strip executable and display-only fields from a tool before transcript comparison or persistence. */
530
- function toToolDeclaration(tool) {
531
- return {
532
- name: tool.name,
533
- description: tool.description,
534
- parameters: JSON.parse(JSON.stringify(tool.parameters)),
535
- ...tool.constrainedSampling === void 0 ? {} : { constrainedSampling: tool.constrainedSampling }
536
- };
537
- }
538
- /**
539
- * Whether two tools declare the same interface to the model.
540
- *
541
- * Both sides go through {@link toToolDeclaration} first: its JSON round-trip drops the
542
- * typebox symbol keys and `undefined` fields that a structural comparison would see, and
543
- * builds both objects with the same key order, so comparing the serialized declarations
544
- * is exact. This avoids a deep-equal dependency in a browser-safe package.
545
- */
546
- function declarationsEqual(left, right) {
547
- return JSON.stringify(toToolDeclaration(left)) === JSON.stringify(toToolDeclaration(right));
548
- }
549
- /** Compare two complete tool states. A changed definition is a removal followed by an addition. */
550
- function getToolStateChanges(previous, current) {
551
- const previousTools = new Map(previous.map((tool) => [tool.name, tool]));
552
- const currentTools = new Map(current.map((tool) => [tool.name, tool]));
553
- return {
554
- toolsAdded: current.filter((tool) => {
555
- const previousTool = previousTools.get(tool.name);
556
- return previousTool === void 0 || !declarationsEqual(previousTool, tool);
557
- }).map(toToolDeclaration),
558
- toolsRemoved: previous.filter((tool) => {
559
- const currentTool = currentTools.get(tool.name);
560
- return currentTool === void 0 || !declarationsEqual(tool, currentTool);
561
- }).map((tool) => ({ name: tool.name }))
562
- };
563
- }
564
- /** Every definition referenced by transcript tool state, in first-declaration order. */
565
- function getDeclaredTools(messages) {
566
- const definitions = /* @__PURE__ */ new Map();
567
- for (const message of messages) {
568
- if (!isSystemMessage(message)) continue;
569
- for (const tool of message.toolsAdded ?? []) definitions.set(tool.name, tool);
570
- }
571
- return [...definitions.values()];
572
- }
573
- /**
574
- * Whether a tool name was declared twice with different definitions. A transport that can
575
- * only reference previously declared tools by name cannot replay such a history.
576
- *
577
- * @deprecated No built-in transport needs this anymore: Anthropic expresses redefinitions with
578
- * inline `tool_definition` blocks. Kept for API compatibility and will be removed in a future release.
579
- */
580
- function hasToolRedefinitions(messages) {
581
- const declared = /* @__PURE__ */ new Map();
582
- for (const message of messages) {
583
- if (!isSystemMessage(message)) continue;
584
- for (const tool of message.toolsAdded ?? []) {
585
- const previous = declared.get(tool.name);
586
- if (previous !== void 0 && !declarationsEqual(previous, tool)) return true;
587
- declared.set(tool.name, tool);
588
- }
589
- }
590
- return false;
591
- }
592
- /** Whether tool history contains a removal or same-name redeclaration that an addition-only transport cannot replay. */
593
- function hasNonAdditiveToolChanges(messages) {
594
- const declared = /* @__PURE__ */ new Set();
595
- for (const message of messages) {
596
- if (!isSystemMessage(message)) continue;
597
- if ((message.toolsRemoved?.length ?? 0) > 0) return true;
598
- for (const tool of message.toolsAdded ?? []) {
599
- if (declared.has(tool.name)) return true;
600
- declared.add(tool.name);
601
- }
602
- }
603
- return false;
604
- }
605
- /**
606
- * Split tool declarations between the top-level request field and in-place additions.
607
- * Transports that can anchor additions at a system message keep the initial tools at the
608
- * top and load later ones where they appear; that only works when no tool was removed or
609
- * redeclared, so everything else sends the current tool list.
610
- */
611
- function resolveTranscriptTools(messages, supportsToolAdditions) {
612
- const anchorsAdditions = supportsToolAdditions && !hasNonAdditiveToolChanges(messages);
613
- return {
614
- requestTools: anchorsAdditions ? getInitialSystemMessage(messages)?.toolsAdded ?? [] : getCurrentTools(messages),
615
- anchorsAdditions
616
- };
617
- }
618
- //#endregion
619
- //#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/models.js
620
- const KNOWN_MODEL_TYPES = {
621
- chat: true,
622
- image: true,
623
- classifier: true
624
- };
625
- /** Models from stores and remote sources may have types that only newer versions know. */
626
- function hasKnownModelType(model) {
627
- return Object.hasOwn(KNOWN_MODEL_TYPES, getModelType(model));
628
- }
629
- /** Drops stored models whose type this version does not know. */
630
- function withKnownModelTypes(entry) {
631
- return {
632
- ...entry,
633
- models: entry.models.filter(hasKnownModelType)
634
- };
635
- }
636
- function mergeHeaders(base, override) {
637
- if (!base && !override) return void 0;
638
- const merged = { ...base };
639
- for (const [name, value] of Object.entries(override ?? {})) {
640
- const lowerName = name.toLowerCase();
641
- for (const existingName of Object.keys(merged)) if (existingName.toLowerCase() === lowerName) delete merged[existingName];
642
- merged[name] = value;
643
- }
644
- return merged;
645
- }
646
- var ModelsImpl = class {
647
- providers = /* @__PURE__ */ new Map();
648
- credentials;
649
- modelsStore;
650
- authContext;
651
- refreshGenerations = /* @__PURE__ */ new Map();
652
- refreshControllers = /* @__PURE__ */ new Map();
653
- publicationChains = /* @__PURE__ */ new Map();
654
- constructor(options) {
655
- this.credentials = options?.credentials ?? new InMemoryCredentialStore();
656
- this.modelsStore = options?.modelsStore ?? new InMemoryModelsStore();
657
- this.authContext = options?.authContext ?? defaultProviderAuthContext();
658
- }
659
- setProvider(provider) {
660
- this.supersedeProviderRefresh(provider.id);
661
- this.providers.set(provider.id, provider);
662
- }
663
- deleteProvider(id) {
664
- this.supersedeProviderRefresh(id);
665
- this.providers.delete(id);
666
- }
667
- clearProviders() {
668
- for (const id of /* @__PURE__ */ new Set([...this.providers.keys(), ...this.refreshControllers.keys()])) this.supersedeProviderRefresh(id);
669
- this.providers.clear();
670
- }
671
- getProviders() {
672
- return Array.from(this.providers.values());
673
- }
674
- getProvider(id) {
675
- return this.providers.get(id);
676
- }
677
- getModels(provider) {
678
- if (provider !== void 0) {
679
- const entry = this.providers.get(provider);
680
- if (!entry) return [];
681
- try {
682
- return entry.getModels();
683
- } catch {
684
- return [];
685
- }
686
- }
687
- const models = [];
688
- for (const entry of this.providers.values()) try {
689
- models.push(...entry.getModels());
690
- } catch {}
691
- return models;
692
- }
693
- getAllModels(provider) {
694
- if (provider !== void 0) {
695
- const entry = this.providers.get(provider);
696
- if (!entry) return [];
697
- try {
698
- return entry.getAllModels?.() ?? entry.getModels();
699
- } catch {
700
- return [];
701
- }
702
- }
703
- const models = [];
704
- for (const entry of this.providers.values()) try {
705
- models.push(...entry.getAllModels?.() ?? entry.getModels());
706
- } catch {}
707
- return models;
708
- }
709
- getModelsOfType(type, provider) {
710
- return this.getAllModels(provider).filter((model) => isModelType(model, type));
711
- }
712
- getModel(provider, id) {
713
- return this.getModels(provider).find((model) => model.id === id);
714
- }
715
- getModelOfType(type, provider, id) {
716
- return this.getModelsOfType(type, provider).find((model) => model.id === id);
717
- }
718
- supersedeProviderRefresh(providerId) {
719
- const generation = (this.refreshGenerations.get(providerId) ?? 0) + 1;
720
- this.refreshGenerations.set(providerId, generation);
721
- const previous = this.refreshControllers.get(providerId);
722
- if (previous) {
723
- this.refreshControllers.delete(providerId);
724
- previous.abort();
725
- }
726
- return generation;
727
- }
728
- beginProviderRefresh(providerId) {
729
- const generation = this.supersedeProviderRefresh(providerId);
730
- const controller = new AbortController();
731
- this.refreshControllers.set(providerId, controller);
732
- return {
733
- generation,
734
- controller
735
- };
736
- }
737
- publishProviderModels(providerId, generation, signal, publication) {
738
- const previous = this.publicationChains.get(providerId) ?? Promise.resolve();
739
- const queued = (async () => {
740
- await previous.catch(() => {});
741
- if (signal.aborted || this.refreshGenerations.get(providerId) !== generation) return false;
742
- if (publication.persist === null) await this.modelsStore.delete(providerId, { signal });
743
- else if (publication.persist !== void 0) await this.modelsStore.write(providerId, structuredClone(publication.persist), { signal });
744
- if (signal.aborted || this.refreshGenerations.get(providerId) !== generation) return false;
745
- publication.update?.();
746
- return true;
747
- })();
748
- const tail = queued.catch(() => {});
749
- this.publicationChains.set(providerId, tail);
750
- tail.then(() => {
751
- if (this.publicationChains.get(providerId) === tail) this.publicationChains.delete(providerId);
752
- });
753
- return raceWithAbortSignal(queued, signal);
754
- }
755
- async runProviderRefreshPhase(provider, credential, allowNetwork, force, generation, signal) {
756
- const stored = await this.modelsStore.read(provider.id, { signal });
757
- await provider.refreshModels({
758
- credential,
759
- stored: stored ? withKnownModelTypes(structuredClone(stored)) : void 0,
760
- publish: (publication) => this.publishProviderModels(provider.id, generation, signal, publication),
761
- allowNetwork,
762
- force: allowNetwork ? force : void 0,
763
- signal,
764
- baseUrl: provider.baseUrl
765
- });
766
- }
767
- async refresh(options = {}) {
768
- const allowNetwork = options.allowNetwork ?? true;
769
- const callerSignal = operationSignal(options.signal);
770
- const errors = /* @__PURE__ */ new Map();
771
- if (callerSignal.aborted) return {
772
- aborted: true,
773
- errors
774
- };
775
- const selected = options.providers ? new Set(options.providers) : void 0;
776
- const refreshable = Array.from(this.providers.values()).filter((provider) => provider.refreshModels !== void 0 && (!selected || selected.has(provider.id)));
777
- const refresh = Promise.all(refreshable.map(async (provider) => {
778
- const { generation, controller } = this.beginProviderRefresh(provider.id);
779
- const signal = AbortSignal.any([callerSignal, controller.signal]);
780
- const operation = (async () => {
781
- let storedCredential;
782
- let credentialError;
783
- try {
784
- storedCredential = await this.readCredential(provider.id, signal);
785
- } catch (error) {
786
- credentialError = error;
787
- }
788
- await this.runProviderRefreshPhase(provider, storedCredential, false, void 0, generation, signal);
789
- if (credentialError !== void 0) throw credentialError;
790
- if (!allowNetwork || signal.aborted) return;
791
- const credential = await this.resolveRefreshCredential(provider, storedCredential, signal);
792
- if (!credential) return;
793
- await this.runProviderRefreshPhase(provider, credential, true, options.force, generation, signal);
794
- })();
795
- try {
796
- await raceWithAbortSignal(operation, signal);
797
- } catch (error) {
798
- if (!signal.aborted) errors.set(provider.id, error instanceof Error ? error : new ModelsError("model_source", `Model refresh failed for ${provider.id}`, { cause: error }));
799
- } finally {
800
- if (this.refreshControllers.get(provider.id) === controller) this.refreshControllers.delete(provider.id);
801
- }
802
- }));
803
- try {
804
- await raceWithAbortSignal(refresh, callerSignal);
805
- } catch (error) {
806
- if (!callerSignal.aborted) throw error;
807
- }
808
- return {
809
- aborted: callerSignal.aborted,
810
- errors: new Map(errors)
811
- };
812
- }
813
- async resolveRefreshCredential(provider, stored, signal) {
814
- if (stored?.type === "oauth") {
815
- const oauth = provider.auth.oauth;
816
- if (!oauth) return void 0;
817
- if (Date.now() < stored.expires) return stored;
818
- if (signal.aborted) return void 0;
819
- return refreshStoredOAuthCredential(this.credentials, provider.id, oauth, (current) => Date.now() >= current.expires, signal);
820
- }
821
- const apiKey = provider.auth.apiKey;
822
- if (!apiKey) return void 0;
823
- const credential = stored?.type === "api_key" ? stored : void 0;
824
- const result = await apiKey.resolve({
825
- ctx: this.authContext,
826
- credential,
827
- signal
828
- });
829
- if (!result) return void 0;
830
- return {
831
- type: "api_key",
832
- key: result.auth.apiKey,
833
- env: result.env
834
- };
835
- }
836
- async readCredential(providerId, signal) {
837
- try {
838
- return await this.credentials.read(providerId, { signal });
839
- } catch (error) {
840
- throw new ModelsError("auth", `Credential store read failed for ${providerId}`, { cause: error });
841
- }
842
- }
843
- async checkProviderAuth(provider, credential, signal) {
844
- if (credential?.type === "oauth") return provider.auth.oauth ? {
845
- source: "OAuth",
846
- type: "oauth"
847
- } : void 0;
848
- const apiKey = provider.auth.apiKey;
849
- if (!apiKey) return void 0;
850
- if (apiKey.check) try {
851
- return await apiKey.check({
852
- ctx: this.authContext,
853
- credential: credential?.type === "api_key" ? credential : void 0,
854
- signal
855
- });
856
- } catch (error) {
857
- throw new ModelsError("auth", `API key auth check failed for provider ${provider.id}`, { cause: error });
858
- }
859
- const resolution = await resolveProviderAuth(provider, this.credentials, this.authContext, { signal });
860
- return resolution ? {
861
- source: resolution.source,
862
- type: "api_key"
863
- } : void 0;
864
- }
865
- checkAuth(providerId, options) {
866
- const signal = operationSignal(options?.signal);
867
- return raceWithAbortSignal((async () => {
868
- signal.throwIfAborted();
869
- const provider = this.providers.get(providerId);
870
- if (!provider) return void 0;
871
- return this.checkProviderAuth(provider, await this.readCredential(providerId, signal), signal);
872
- })(), signal);
873
- }
874
- async getAuthenticatedProviders(providerId, signal) {
875
- signal.throwIfAborted();
876
- const providers = providerId ? [this.providers.get(providerId)].filter((entry) => entry !== void 0) : this.getProviders();
877
- return (await Promise.all(providers.map(async (provider) => {
878
- const credential = await this.readCredential(provider.id, signal);
879
- return {
880
- provider,
881
- credential,
882
- auth: await this.checkProviderAuth(provider, credential, signal)
883
- };
884
- }))).filter((entry) => entry.auth !== void 0);
885
- }
886
- getAvailable(providerId, options) {
887
- const signal = operationSignal(options?.signal);
888
- return raceWithAbortSignal((async () => {
889
- return (await this.getAuthenticatedProviders(providerId, signal)).flatMap(({ provider, credential }) => {
890
- const models = provider.getModels();
891
- return provider.filterModels?.(models, credential) ?? models;
892
- });
893
- })(), signal);
894
- }
895
- async getAvailableOfType(type, providerId, options) {
896
- return (await this.getAllAvailable(providerId, options)).filter((model) => isModelType(model, type));
897
- }
898
- getAllAvailable(providerId, options) {
899
- const signal = operationSignal(options?.signal);
900
- return raceWithAbortSignal((async () => {
901
- return (await this.getAuthenticatedProviders(providerId, signal)).flatMap(({ provider, credential }) => {
902
- const models = provider.getAllModels?.() ?? provider.getModels();
903
- if (provider.filterAllModels) return provider.filterAllModels(models, credential);
904
- if (!provider.filterModels) return models;
905
- const availableChatIds = new Set(provider.filterModels(provider.getModels(), credential).map((model) => model.id));
906
- return models.filter((model) => !isModelType(model, "chat") || availableChatIds.has(model.id));
907
- });
908
- })(), signal);
909
- }
910
- async getAuth(providerOrModel, overrides) {
911
- const signal = operationSignal(overrides?.signal);
912
- const providerId = typeof providerOrModel === "string" ? providerOrModel : providerOrModel.provider;
913
- const provider = this.providers.get(providerId);
914
- if (!provider) return void 0;
915
- const result = await resolveProviderAuth(provider, this.credentials, this.authContext, {
916
- ...overrides,
917
- signal
918
- });
919
- if (!result || typeof providerOrModel === "string" || !providerOrModel.headers) return result;
920
- return {
921
- ...result,
922
- auth: {
923
- ...result.auth,
924
- headers: mergeHeaders(result.auth.headers, providerOrModel.headers)
925
- }
926
- };
927
- }
928
- async login(providerId, type, interaction, options) {
929
- const signal = operationSignal(interaction.signal);
930
- signal.throwIfAborted();
931
- const provider = this.providers.get(providerId);
932
- if (!provider) throw new ModelsError("provider", `Unknown provider: ${providerId}`);
933
- const method = type === "oauth" ? provider.auth.oauth : provider.auth.apiKey;
934
- if (!method?.login) throw new ModelsError("auth", `${provider.name} does not support ${type} login`);
935
- const credential = await raceWithAbortSignal(method.login({
936
- ...interaction,
937
- signal
938
- }, options), signal);
939
- let mutationStarted = false;
940
- let markMutationStarted;
941
- const started = new Promise((resolve) => {
942
- markMutationStarted = resolve;
943
- });
944
- const mutation = this.credentials.modify(providerId, async () => {
945
- mutationStarted = true;
946
- markMutationStarted?.();
947
- return credential;
948
- }, { signal });
949
- mutation.catch(() => {});
950
- try {
951
- await new Promise((resolve, reject) => {
952
- const onAbort = () => {
953
- if (!mutationStarted) reject(signal.reason);
954
- };
955
- signal.addEventListener("abort", onAbort, { once: true });
956
- Promise.race([started, mutation]).then(() => {
957
- signal.removeEventListener("abort", onAbort);
958
- resolve();
959
- }, (error) => {
960
- signal.removeEventListener("abort", onAbort);
961
- reject(error);
962
- });
963
- if (signal.aborted) onAbort();
964
- });
965
- await mutation;
966
- } catch (error) {
967
- signal.throwIfAborted();
968
- throw new ModelsError("auth", `Credential store modify failed for ${providerId}`, { cause: error });
969
- }
970
- return credential;
971
- }
972
- async logout(providerId, options) {
973
- const signal = operationSignal(options?.signal);
974
- signal.throwIfAborted();
975
- try {
976
- await this.credentials.delete(providerId, { signal });
977
- } catch (error) {
978
- signal.throwIfAborted();
979
- throw new ModelsError("auth", `Credential store delete failed for ${providerId}`, { cause: error });
980
- }
981
- }
982
- requireProvider(model) {
983
- const provider = this.providers.get(model.provider);
984
- if (!provider) throw new ModelsError("provider", `Unknown provider: ${model.provider}`);
985
- return provider;
986
- }
987
- requireChatProvider(model) {
988
- assertChatModel(model);
989
- return this.requireProvider(model);
990
- }
991
- async applyAuth(model, options) {
992
- this.requireProvider(model);
993
- const resolution = await this.getAuth(model, {
994
- apiKey: options?.apiKey,
995
- env: options?.env,
996
- signal: options?.signal
997
- });
998
- if (!resolution) throw new ModelsError("auth", `Provider is not configured: ${model.provider}`);
999
- const auth = resolution.auth;
1000
- const apiKey = options?.apiKey ?? auth.apiKey;
1001
- let headers = mergeHeaders(auth.headers, options?.headers);
1002
- if (options?.transformHeaders) headers = await options.transformHeaders(headers ?? {});
1003
- const env = resolution.env || options?.env ? {
1004
- ...resolution.env ?? {},
1005
- ...options?.env ?? {}
1006
- } : void 0;
1007
- const requestModel = auth.baseUrl ? {
1008
- ...model,
1009
- baseUrl: auth.baseUrl
1010
- } : model;
1011
- const { transformHeaders: _transformHeaders, ...providerOptions } = options ?? {};
1012
- return {
1013
- requestModel,
1014
- requestOptions: {
1015
- ...providerOptions,
1016
- apiKey,
1017
- headers,
1018
- env
1019
- }
1020
- };
1021
- }
1022
- stream(model, context, options) {
1023
- const transcript = normalizeContext(context);
1024
- return lazyStream(model, async () => {
1025
- const provider = this.requireChatProvider(model);
1026
- const { requestModel, requestOptions } = await this.applyAuth(model, options);
1027
- return provider.stream(requestModel, transcript, requestOptions);
1028
- });
1029
- }
1030
- async complete(model, context, options) {
1031
- return this.stream(model, context, options).result();
1032
- }
1033
- streamSimple(model, context, options) {
1034
- const transcript = normalizeContext(context);
1035
- return lazyStream(model, async () => {
1036
- const provider = this.requireChatProvider(model);
1037
- const { requestModel, requestOptions } = await this.applyAuth(model, options);
1038
- return provider.streamSimple(requestModel, transcript, requestOptions);
1039
- });
1040
- }
1041
- async completeSimple(model, context, options) {
1042
- return this.streamSimple(model, context, options).result();
1043
- }
1044
- streamDeferred(model, handle, options) {
1045
- return lazyStream(model, async () => {
1046
- const provider = this.requireChatProvider(model);
1047
- if (!provider.fetchDeferred) throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
1048
- const { requestModel, requestOptions } = await this.applyAuth(model, options);
1049
- return provider.fetchDeferred(requestModel, handle, requestOptions);
1050
- });
1051
- }
1052
- async fetchDeferred(model, handle, options) {
1053
- return this.streamDeferred(model, handle, options).result();
1054
- }
1055
- async cancelDeferred(model, handle, options) {
1056
- const provider = this.requireChatProvider(model);
1057
- if (!provider.cancelDeferred) throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
1058
- const { requestModel, requestOptions } = await this.applyAuth(model, options);
1059
- await provider.cancelDeferred(requestModel, handle, requestOptions);
1060
- }
1061
- async generateImages(model, context, options) {
1062
- try {
1063
- assertImageModel(model);
1064
- const provider = this.requireProvider(model);
1065
- if (!provider.generateImages) throw new ModelsError("provider", `Provider ${model.provider} does not support image generation`);
1066
- const { requestModel, requestOptions } = await this.applyAuth(model, options);
1067
- return await provider.generateImages(requestModel, context, requestOptions);
1068
- } catch (error) {
1069
- return imageErrorResult(model, error, options?.signal?.aborted);
1070
- }
1071
- }
1072
- async classify(model, context, options) {
1073
- try {
1074
- assertClassifierModel(model);
1075
- assertClassifierInputSupported(model, context);
1076
- const provider = this.requireProvider(model);
1077
- if (!provider.classify) throw new ModelsError("provider", `Provider ${model.provider} does not support classification`);
1078
- const { requestModel, requestOptions } = await this.applyAuth(model, options);
1079
- return await provider.classify(requestModel, context, requestOptions);
1080
- } catch (error) {
1081
- return classifierErrorResult(model, error, options?.signal?.aborted);
1082
- }
1083
- }
1084
- };
1085
- function createModels(options) {
1086
- return new ModelsImpl(options);
1087
- }
1088
- /**
1089
- * Builds a provider from parts. Built-in provider factories and models.json
1090
- * custom providers both go through this. A single `api` streams all chat
1091
- * models; an `api` map dispatches on `model.api`, and a model whose api has
1092
- * no entry produces a stream error. One-shot operation maps dispatch on
1093
- * `model.api` the same way. At least one concrete implementation across
1094
- * `api`/`images`/`classifiers` is required; empty maps are rejected.
1095
- */
1096
- function createProvider(input) {
1097
- const single = input.api && typeof input.api.stream === "function" ? input.api : void 0;
1098
- const byApi = single || !input.api ? void 0 : input.api;
1099
- const images = input.images;
1100
- const classifiers = input.classifiers;
1101
- const streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== void 0);
1102
- const imageImplementations = Object.values(images ?? {}).filter((entry) => entry !== void 0);
1103
- const classifierImplementations = Object.values(classifiers ?? {}).filter((entry) => entry !== void 0);
1104
- if (streams.length === 0 && imageImplementations.length === 0 && classifierImplementations.length === 0) throw new Error(`Provider ${input.id}: at least one of "api", "images", or "classifiers" is required.`);
1105
- const baselineModels = input.models;
1106
- let dynamicModels = [];
1107
- const fetchModels = input.fetchModels;
1108
- const currentModels = () => {
1109
- const merged = [...baselineModels];
1110
- for (const model of dynamicModels) {
1111
- const index = merged.findIndex((entry) => getModelType(entry) === getModelType(model) && entry.id === model.id);
1112
- if (index >= 0) merged[index] = model;
1113
- else merged.push(model);
1114
- }
1115
- return merged;
1116
- };
1117
- const apiFor = (model) => single ?? byApi?.[model.api];
1118
- const dispatch = (model, run) => {
1119
- const streams = apiFor(model);
1120
- if (!streams) return lazyStream(model, async () => {
1121
- throw new ModelsError("stream", `Provider ${input.id} has no API implementation for "${model.api}"`);
1122
- });
1123
- return run(streams);
1124
- };
1125
- const provider = {
1126
- id: input.id,
1127
- name: input.name ?? input.id,
1128
- baseUrl: input.baseUrl,
1129
- headers: input.headers,
1130
- auth: input.auth,
1131
- getModels: () => currentModels().filter((model) => isModelType(model, "chat")),
1132
- getAllModels: currentModels,
1133
- refreshModels: fetchModels ? async (context) => {
1134
- if (context.stored) {
1135
- const restored = context.stored.models.filter((model) => model.provider === input.id).map((model) => model);
1136
- if (!await context.publish({ update: () => {
1137
- dynamicModels = restored;
1138
- } })) return;
1139
- }
1140
- if (!context.allowNetwork || context.signal.aborted) return;
1141
- const fetched = await fetchModels(context);
1142
- if (context.signal.aborted) return;
1143
- const refreshed = fetched.filter(hasKnownModelType);
1144
- await context.publish({
1145
- persist: {
1146
- models: refreshed,
1147
- checkedAt: Date.now()
1148
- },
1149
- update: () => {
1150
- dynamicModels = refreshed;
1151
- }
1152
- });
1153
- } : void 0,
1154
- filterModels: input.filterModels,
1155
- filterAllModels: input.filterAllModels,
1156
- stream: (model, context, options) => dispatch(model, (streams) => streams.stream(model, context, options)),
1157
- streamSimple: (model, context, options) => dispatch(model, (streams) => streams.streamSimple(model, context, options))
1158
- };
1159
- if (streams.some((entry) => entry.fetchDeferred !== void 0)) provider.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {
1160
- const implementation = apiFor(model);
1161
- if (!implementation?.fetchDeferred) throw new ModelsError("provider", `Provider ${input.id} does not support deferred responses for "${model.api}"`);
1162
- return implementation.fetchDeferred(model, handle, options);
1163
- });
1164
- if (streams.some((entry) => entry.cancelDeferred !== void 0)) provider.cancelDeferred = async (model, handle, options) => {
1165
- const implementation = apiFor(model);
1166
- if (!implementation?.cancelDeferred) throw new ModelsError("provider", `Provider ${input.id} cannot cancel deferred responses for "${model.api}"`);
1167
- await implementation.cancelDeferred(model, handle, options);
1168
- };
1169
- if (images && imageImplementations.length > 0) provider.generateImages = async (model, context, options) => {
1170
- const implementation = images[model.api];
1171
- if (!implementation) return imageErrorResult(model, new ModelsError("provider", `Provider ${input.id} has no image generation implementation for "${model.api}"`));
1172
- return implementation.generateImages(model, context, options);
1173
- };
1174
- if (classifiers && classifierImplementations.length > 0) provider.classify = async (model, context, options) => {
1175
- const implementation = classifiers[model.api];
1176
- if (!implementation) return classifierErrorResult(model, new ModelsError("provider", `Provider ${input.id} has no classifier implementation for "${model.api}"`));
1177
- return implementation.classify(model, context, options);
1178
- };
1179
- return provider;
1180
- }
1181
- /**
1182
- * Runtime-checked narrowing for dynamically looked-up models:
1183
- *
1184
- * ```ts
1185
- * const model = models.getModel("anthropic", "claude-opus-4-7");
1186
- * if (model && hasApi(model, "anthropic-messages")) {
1187
- * // model: Model<"anthropic-messages">, stream options fully typed
1188
- * }
1189
- * ```
1190
- *
1191
- * Non-chat models never match, even when their api id equals `api`.
1192
- */
1193
- function hasApi(model, api) {
1194
- return isModelType(model, "chat") && model.api === api;
1195
- }
1196
- function calculateCost(model, usage) {
1197
- const inputTokens = usage.input + usage.cacheRead + usage.cacheWrite;
1198
- let rates = model.cost;
1199
- let matchedThreshold = -1;
1200
- for (const tier of model.cost.tiers ?? []) if (inputTokens > tier.inputTokensAbove && tier.inputTokensAbove > matchedThreshold) {
1201
- rates = tier;
1202
- matchedThreshold = tier.inputTokensAbove;
1203
- }
1204
- const longWrite = usage.cacheWrite1h ?? 0;
1205
- const shortWrite = usage.cacheWrite - longWrite;
1206
- usage.cost.input = rates.input / 1e6 * usage.input;
1207
- usage.cost.output = rates.output / 1e6 * usage.output;
1208
- usage.cost.cacheRead = rates.cacheRead / 1e6 * usage.cacheRead;
1209
- usage.cost.cacheWrite = (rates.cacheWrite * shortWrite + rates.input * 2 * longWrite) / 1e6;
1210
- usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
1211
- return usage.cost;
1212
- }
1213
- const EXTENDED_THINKING_LEVELS = [
1214
- "off",
1215
- "minimal",
1216
- "low",
1217
- "medium",
1218
- "high",
1219
- "xhigh",
1220
- "max"
1221
- ];
1222
- function getSupportedThinkingLevels(model) {
1223
- if (!model.reasoning) return ["off"];
1224
- return EXTENDED_THINKING_LEVELS.filter((level) => {
1225
- const mapped = model.thinkingLevelMap?.[level];
1226
- if (mapped === null) return false;
1227
- if (level === "xhigh" || level === "max") return mapped !== void 0;
1228
- return true;
1229
- });
1230
- }
1231
- function clampThinkingLevel(model, level) {
1232
- const availableLevels = getSupportedThinkingLevels(model);
1233
- if (availableLevels.includes(level)) return level;
1234
- const requestedIndex = EXTENDED_THINKING_LEVELS.indexOf(level);
1235
- if (requestedIndex === -1) return availableLevels[0] ?? "off";
1236
- for (let i = requestedIndex; i < EXTENDED_THINKING_LEVELS.length; i++) {
1237
- const candidate = EXTENDED_THINKING_LEVELS[i];
1238
- if (availableLevels.includes(candidate)) return candidate;
1239
- }
1240
- for (let i = requestedIndex - 1; i >= 0; i--) {
1241
- const candidate = EXTENDED_THINKING_LEVELS[i];
1242
- if (availableLevels.includes(candidate)) return candidate;
1243
- }
1244
- return availableLevels[0] ?? "off";
1245
- }
1246
- /**
1247
- * Check if two models are equal by comparing their type, id, and provider.
1248
- * Returns false if either model is null or undefined.
1249
- */
1250
- function modelsAreEqual(a, b) {
1251
- if (!a || !b) return false;
1252
- return getModelType(a) === getModelType(b) && a.id === b.id && a.provider === b.provider;
1253
- }
1254
- //#endregion
1255
- export { assertImageModel as A, lazyStream as B, withoutInitialSystemMessage as C, assertChatModel as D, renderSystemMessageUpdate as E, InMemoryModelsStore as F, ModelsError as I, InMemoryCredentialStore as L, getModelType as M, imageErrorResult as N, assertClassifierInputSupported as O, isModelType as P, defaultProviderAuthContext as R, toToolDeclaration as S, getSystemMessageText as T, hasNonAdditiveToolChanges as _, getSupportedThinkingLevels as a, resolveTranscript as b, collapseSystemMessages as c, getCurrentSystemMessage as d, getCurrentSystemPrompt as f, getToolStateChanges as g, getInitialSystemMessage as h, createProvider as i, classifierErrorResult as j, assertClassifierModel as k, createInitialSystemMessage as l, getDeclaredTools as m, clampThinkingLevel as n, hasApi as o, getCurrentTools as p, createModels as r, modelsAreEqual as s, calculateCost as t, declarationsEqual as u, hasToolRedefinitions as v, contentText as w, resolveTranscriptTools as x, normalizeContext as y, lazyApi as z };