@datalayer/agent-runtimes 1.5.18 → 1.5.19

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 (272) hide show
  1. package/dist-embed/chunks/{AgentDetails-CMBy5o1q.js → AgentDetails-jDVTZOUO.js} +1 -1
  2. package/dist-embed/chunks/{AgentDetailsDialog-D2vH2Nrd.js → AgentDetailsDialog-BLC4yhCo.js} +1 -1
  3. package/dist-embed/chunks/{AgentInspector-Bd0oHNAX.js → AgentInspector-DBI8tAJ0.js} +1 -1
  4. package/dist-embed/chunks/{AgentInspectorDialog-BJUgBPAE.js → AgentInspectorDialog-xW2BjxJT.js} +1 -1
  5. package/dist-embed/chunks/{CellSidebarExtension-CYOVwk1t.js → CellSidebarExtension-D4_DkfUV.js} +1 -1
  6. package/dist-embed/chunks/ChatView-CpY0werd.js +32 -0
  7. package/dist-embed/chunks/{ContextPie-B9mAKJc2.js → ContextPie-Cebjx8jR.js} +1 -1
  8. package/dist-embed/chunks/{DeckComponent-CbmzVWcF.js → DeckComponent-B0pIJhTp.js} +2 -2
  9. package/dist-embed/chunks/{DocumentView-BqsGfNys.js → DocumentView-CS_ILd4O.js} +1 -1
  10. package/dist-embed/chunks/{EphemeralDocument-DLaNvwm_.js → EphemeralDocument-CwauqhmY.js} +1 -1
  11. package/dist-embed/chunks/{EphemeralNotebook-jnqAJFPI.js → EphemeralNotebook-BgC-YEtX.js} +1 -1
  12. package/dist-embed/chunks/{ExcalidrawComponent-Cb8yeXqu.js → ExcalidrawComponent-jOeuq53P.js} +1 -1
  13. package/dist-embed/chunks/{ExcalidrawModal-DaPSGYek.js → ExcalidrawModal-RsJGL2o8.js} +1 -1
  14. package/dist-embed/chunks/{JupyterLexicalExtension-BQINjIFV.js → JupyterLexicalExtension-BgcLmrzO.js} +9 -9
  15. package/dist-embed/chunks/{KernelVariables-CGQkS5EX.js → KernelVariables-cBMhcW1H.js} +1 -1
  16. package/dist-embed/chunks/{LexicalToolRegistry-BJ6mpMWn.js → LexicalToolRegistry-0QBhZnFO.js} +1 -1
  17. package/dist-embed/chunks/{NotebookToolSurfaces-DiPifvaW.js → NotebookToolSurfaces-D1GnK3rj.js} +1 -1
  18. package/dist-embed/chunks/{NotebookView-IX0wNuX8.js → NotebookView-CC5s4q0A.js} +1 -1
  19. package/dist-embed/chunks/{Output-B9XAhyoF.js → Output-B4b0TC6x.js} +1 -1
  20. package/dist-embed/chunks/{SandboxDetailsDialog-COCpmo8m.js → SandboxDetailsDialog-DhH0cSRN.js} +1 -1
  21. package/dist-embed/chunks/{SchemaForm-WIwdKnrk.js → SchemaForm-CPiM13ub.js} +1 -1
  22. package/dist-embed/chunks/{WidgetVariableView-BoGROi-A.js → WidgetVariableView-CUqRH-Wi.js} +1 -1
  23. package/dist-embed/chunks/{YouTubePlugin-BEQBWMwx.js → YouTubePlugin-CGKNamMP.js} +1 -1
  24. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-D3_T0Lze.js → abnfDiagram-VCTEODGH-DRoYJDMb.js} +1 -1
  25. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-CG18Hf18.js → abnfDiagram-VCTEODGH-DqGkvvLU.js} +1 -1
  26. package/dist-embed/chunks/{ar-SA-G6X2FPQ2-BDWXsTdt.js → ar-SA-G6X2FPQ2-BdYlCgqh.js} +1 -1
  27. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-B1QPAYO8.js → architectureDiagram-5GKGNRK7-B4WL7dDA.js} +1 -1
  28. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-B5kSsKje.js → architectureDiagram-5GKGNRK7-BfuR2k3K.js} +1 -1
  29. package/dist-embed/chunks/{az-AZ-76LH7QW2-BGchGiT7.js → az-AZ-76LH7QW2-BAJSVApS.js} +1 -1
  30. package/dist-embed/chunks/{bg-BG-XCXSNQG7-vCII6Zuq.js → bg-BG-XCXSNQG7-CutR4A8o.js} +1 -1
  31. package/dist-embed/chunks/{blockDiagram-868be97b-BvM0ptp7.js → blockDiagram-868be97b-gX0yvAGO.js} +1 -1
  32. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-ClwWG8yx.js → blockDiagram-I7D4REHJ-BzMuNIFV.js} +1 -1
  33. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-B8BmxOM4.js → blockDiagram-I7D4REHJ-CI05Fmnw.js} +1 -1
  34. package/dist-embed/chunks/{bn-BD-2XOGV67Q-Beu9yUTu.js → bn-BD-2XOGV67Q-CjPnVerm.js} +1 -1
  35. package/dist-embed/chunks/{c4Diagram-3f4bdde3-S92W2yOx.js → c4Diagram-3f4bdde3-CWKvySqQ.js} +1 -1
  36. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-CNWW_-u7.js → c4Diagram-7LVT6UL2-BVZdygZu.js} +1 -1
  37. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-nSCKKLuX.js → c4Diagram-7LVT6UL2-BfaHhF7Y.js} +1 -1
  38. package/dist-embed/chunks/{ca-ES-6MX7JW3Y-CnEo6YQi.js → ca-ES-6MX7JW3Y-D0HWiwHb.js} +1 -1
  39. package/dist-embed/chunks/{celltoolbartracker-CO6V5FhH.js → celltoolbartracker-DB7Qnu48.js} +1 -1
  40. package/dist-embed/chunks/{chunk-2Q5K7J3B--r8j4N5L.js → chunk-2Q5K7J3B-Ck5gIh4V.js} +1 -1
  41. package/dist-embed/chunks/{chunk-2Q5K7J3B-D3fTIaw3.js → chunk-2Q5K7J3B-DEZpvDtA.js} +1 -1
  42. package/dist-embed/chunks/{chunk-5VM5RSS4-D76mXyWz.js → chunk-5VM5RSS4-BFWTcAj1.js} +1 -1
  43. package/dist-embed/chunks/{chunk-5VM5RSS4-QmrgOATO.js → chunk-5VM5RSS4-DVfmoMLA.js} +1 -1
  44. package/dist-embed/chunks/{chunk-F27PBJKO-DvNrStTM.js → chunk-F27PBJKO-BjmQwwGl.js} +1 -1
  45. package/dist-embed/chunks/{chunk-F27PBJKO-DdSgBnK0.js → chunk-F27PBJKO-wR8Z4fpP.js} +1 -1
  46. package/dist-embed/chunks/{chunk-IMKFNOWR-DpxND1Ct.js → chunk-IMKFNOWR-DnYdav9f.js} +1 -1
  47. package/dist-embed/chunks/{chunk-IMKFNOWR-DwqmSZhU.js → chunk-IMKFNOWR-Dzk9sHxf.js} +1 -1
  48. package/dist-embed/chunks/{chunk-JWPE2WC7-i7V3vMtZ.js → chunk-JWPE2WC7-Ble97p_W.js} +1 -1
  49. package/dist-embed/chunks/{chunk-JWPE2WC7-jla8jvq5.js → chunk-JWPE2WC7-DyqhVk-0.js} +1 -1
  50. package/dist-embed/chunks/{chunk-POPQ4Y6H-BGCugXU7.js → chunk-POPQ4Y6H-CQpYIqjb.js} +1 -1
  51. package/dist-embed/chunks/{chunk-POPQ4Y6H-ofrenTaa.js → chunk-POPQ4Y6H-CtT0-VOM.js} +1 -1
  52. package/dist-embed/chunks/{chunk-SVP7TREG-BIxxVjkU.js → chunk-SVP7TREG-BTtpQsSJ.js} +1 -1
  53. package/dist-embed/chunks/{chunk-SVP7TREG-2Q2uQyQk.js → chunk-SVP7TREG-CwdiQONE.js} +1 -1
  54. package/dist-embed/chunks/{chunk-TICWLB2K-BqA5q52L.js → chunk-TICWLB2K-BfGhImQo.js} +1 -1
  55. package/dist-embed/chunks/{chunk-TICWLB2K-LNiCmYq5.js → chunk-TICWLB2K-D3UY4Hgl.js} +1 -1
  56. package/dist-embed/chunks/{chunk-XXDRQBXY-CqtfA3WC.js → chunk-XXDRQBXY-BaxFY2Jg.js} +1 -1
  57. package/dist-embed/chunks/{chunk-XXDRQBXY-CNMg_gvd.js → chunk-XXDRQBXY-a1EY5SM8.js} +1 -1
  58. package/dist-embed/chunks/{classDiagram-ZZMXUADV-D6z_X195.js → classDiagram-ZZMXUADV-C0eJXn7r.js} +1 -1
  59. package/dist-embed/chunks/{classDiagram-ZZMXUADV-Co0jT9i-.js → classDiagram-ZZMXUADV-Cop7Dp41.js} +1 -1
  60. package/dist-embed/chunks/{classDiagram-f62afe4f-lN62p17q.js → classDiagram-f62afe4f-BGkVvslN.js} +1 -1
  61. package/dist-embed/chunks/{classDiagram-v2-604399ef-B_QJ6H8h.js → classDiagram-v2-604399ef-CPwahFkc.js} +1 -1
  62. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-D6z_X195.js → classDiagram-v2-VYDZK3BY-C0eJXn7r.js} +1 -1
  63. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-Co0jT9i-.js → classDiagram-v2-VYDZK3BY-Cop7Dp41.js} +1 -1
  64. package/dist-embed/chunks/{code-block-IT6T5CEO-BA38Km-f.js → code-block-IT6T5CEO-DEZxRmcq.js} +1 -1
  65. package/dist-embed/chunks/{component-Chor_J7e.js → component-B8gGyr50.js} +1 -1
  66. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-B5H1cwBa.js → cose-bilkent-JH36ORCC-CQ3UHpys.js} +1 -1
  67. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-C3cTgEcU.js → cose-bilkent-JH36ORCC-whW3Ickm.js} +1 -1
  68. package/dist-embed/chunks/{createText-aed3d8b3-BtgHeyNs.js → createText-aed3d8b3-BdWXGDj2.js} +1 -1
  69. package/dist-embed/chunks/{cs-CZ-2BRQDIVT-ClBKH9_y.js → cs-CZ-2BRQDIVT-DHo-9UK-.js} +1 -1
  70. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-sdsAonZm.js → cynefinDiagram-5FMLGOSQ-C1dAzTZy.js} +1 -1
  71. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-DPQLh9z7.js → cynefinDiagram-5FMLGOSQ-DKngj3tn.js} +1 -1
  72. package/dist-embed/chunks/{da-DK-5WZEPLOC-BqFDUAty.js → da-DK-5WZEPLOC-BLw7PbxL.js} +1 -1
  73. package/dist-embed/chunks/{dagre-GXQ25YYZ-DHF-9-7e.js → dagre-GXQ25YYZ-Bom0Ow10.js} +1 -1
  74. package/dist-embed/chunks/{dagre-GXQ25YYZ-Bwf_WjLM.js → dagre-GXQ25YYZ-BuHKUFJc.js} +1 -1
  75. package/dist-embed/chunks/{de-DE-XR44H4JA-6dsEQn7Z.js → de-DE-XR44H4JA-DqCVLDRk.js} +1 -1
  76. package/dist-embed/chunks/{diagram-S7CK7UJ4-DEqGRBMT.js → diagram-S7CK7UJ4-4zEkI5rV.js} +1 -1
  77. package/dist-embed/chunks/{diagram-S7CK7UJ4-C-N7Ei3I.js → diagram-S7CK7UJ4-H6Kef58R.js} +1 -1
  78. package/dist-embed/chunks/{diagram-UQ7AKVKN-DACyxI-v.js → diagram-UQ7AKVKN-DVAC1okH.js} +1 -1
  79. package/dist-embed/chunks/{diagram-UQ7AKVKN-CvSBE0YU.js → diagram-UQ7AKVKN-DeXqnBhe.js} +1 -1
  80. package/dist-embed/chunks/{diagram-VSXAHHWV-DFze2xro.js → diagram-VSXAHHWV-BYu3Niho.js} +1 -1
  81. package/dist-embed/chunks/{diagram-VSXAHHWV-DOb69VtE.js → diagram-VSXAHHWV-DJvcLGGT.js} +1 -1
  82. package/dist-embed/chunks/{diagram-VX7I27RA-CVTSdYyZ.js → diagram-VX7I27RA-BeOTI_JX.js} +1 -1
  83. package/dist-embed/chunks/{diagram-VX7I27RA-8EKYM_Sx.js → diagram-VX7I27RA-Cd39Txmj.js} +1 -1
  84. package/dist-embed/chunks/{diagram-Z3DM3KII-B-689FF6.js → diagram-Z3DM3KII-Ccg8IzPs.js} +1 -1
  85. package/dist-embed/chunks/{diagram-Z3DM3KII-DyiBmBFy.js → diagram-Z3DM3KII-DV4M-vr2.js} +1 -1
  86. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-DcKvqn_h.js → ebnfDiagram-PWID7BFC-Ci7iqdKR.js} +1 -1
  87. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-gj8dgCWR.js → ebnfDiagram-PWID7BFC-JrHbupeR.js} +1 -1
  88. package/dist-embed/chunks/{edges-b2856ca0-BqGGNnb4.js → edges-b2856ca0-D0Ve_cWg.js} +1 -1
  89. package/dist-embed/chunks/{el-GR-BZB4AONW-DOMW2ttY.js → el-GR-BZB4AONW-DWIe_es3.js} +1 -1
  90. package/dist-embed/chunks/{erDiagram-5d81789a-Bf1Ik49K.js → erDiagram-5d81789a-_wYWwZkR.js} +1 -1
  91. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-B0PyZB_3.js → erDiagram-RLTQ6QDP-CgP-DSWO.js} +1 -1
  92. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-GSu-_IUJ.js → erDiagram-RLTQ6QDP-D2UUMLBd.js} +1 -1
  93. package/dist-embed/chunks/{es-ES-U4NZUMDT-DeyWqjw1.js → es-ES-U4NZUMDT-C4nVLuzt.js} +1 -1
  94. package/dist-embed/chunks/{eu-ES-A7QVB2H4-CUGbZ0Pv.js → eu-ES-A7QVB2H4-DNtU9lgI.js} +1 -1
  95. package/dist-embed/chunks/{fa-IR-HGAKTJCU-Br8UEVO1.js → fa-IR-HGAKTJCU-C9d2dVkk.js} +1 -1
  96. package/dist-embed/chunks/{fi-FI-Z5N7JZ37-BSHjwo8G.js → fi-FI-Z5N7JZ37-BtMDQ3ec.js} +1 -1
  97. package/dist-embed/chunks/{flowDb-185abca5-U9PwWSO4.js → flowDb-185abca5-w4ZLOMwa.js} +1 -1
  98. package/dist-embed/chunks/{flowDiagram-1629c991-BecgzQgp.js → flowDiagram-1629c991-CrRVLCnt.js} +1 -1
  99. package/dist-embed/chunks/{flowDiagram-HODETNUW-2vih3kWM.js → flowDiagram-HODETNUW-BJpTxK5i.js} +1 -1
  100. package/dist-embed/chunks/{flowDiagram-HODETNUW-tcAkcGh4.js → flowDiagram-HODETNUW-DtWilAWc.js} +1 -1
  101. package/dist-embed/chunks/{flowDiagram-v2-1d953310-Bdmc9G3m.js → flowDiagram-v2-1d953310-tzv2aPj8.js} +1 -1
  102. package/dist-embed/chunks/{flowchart-elk-definition-6df44142-oWOWsVNc.js → flowchart-elk-definition-6df44142-C8Gjf4Dy.js} +1 -1
  103. package/dist-embed/chunks/{fr-FR-RHASNOE6-BukqZYPz.js → fr-FR-RHASNOE6-D1fqP_vI.js} +1 -1
  104. package/dist-embed/chunks/{ganttDiagram-3b0b3873-B7lmD9r9.js → ganttDiagram-3b0b3873-WkbnZ3Zy.js} +1 -1
  105. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-D0E7se_Z.js → ganttDiagram-EL5Y4UJY-B1hq5rq9.js} +1 -1
  106. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-DDbqMevq.js → ganttDiagram-EL5Y4UJY-DiSce27A.js} +1 -1
  107. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-DK3EJl5z.js → gitGraphDiagram-WWUBYQGX-BoqOxrkd.js} +1 -1
  108. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-DnVwXJWu.js → gitGraphDiagram-WWUBYQGX-Dfl4EOB8.js} +1 -1
  109. package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-B9vpLy6R.js → gitGraphDiagram-f01e8bc2-DxsYooak.js} +1 -1
  110. package/dist-embed/chunks/{gl-ES-HMX3MZ6V-BxVOJiaI.js → gl-ES-HMX3MZ6V-BkLcCFrx.js} +1 -1
  111. package/dist-embed/chunks/{he-IL-6SHJWFNN-Dv2VRxlJ.js → he-IL-6SHJWFNN-By48peS7.js} +1 -1
  112. package/dist-embed/chunks/{hi-IN-IWLTKZ5I-CFo5RUMz.js → hi-IN-IWLTKZ5I-386dm1ZK.js} +1 -1
  113. package/dist-embed/chunks/{hu-HU-A5ZG7DT2-ul3dS3un.js → hu-HU-A5ZG7DT2-B2wmIkDO.js} +1 -1
  114. package/dist-embed/chunks/{id-ID-SAP4L64H-ItVb-zwI.js → id-ID-SAP4L64H-Bc22Fq5f.js} +1 -1
  115. package/dist-embed/chunks/{index-9bae90f3-D9849sgo.js → index-9bae90f3-0dEQW6X4.js} +1 -1
  116. package/dist-embed/chunks/{index-oGqh9y23.js → index-B2eXWNhX.js} +1 -1
  117. package/dist-embed/chunks/{index-DSvebR7d.js → index-B5UP_2-0.js} +1 -1
  118. package/dist-embed/chunks/{index-YlGTgJvL.js → index-BEuw5cVO.js} +1 -1
  119. package/dist-embed/chunks/{index-CsgaCZaW.js → index-BMlDZi3F.js} +1 -1
  120. package/dist-embed/chunks/{index-BNFRRs9d.js → index-BW1nTf3r.js} +1 -1
  121. package/dist-embed/chunks/{index-xiH3WzLm.js → index-Ba1_ej_S.js} +1 -1
  122. package/dist-embed/chunks/{index-CjM49jS0.js → index-Bf3G_UXi.js} +1 -1
  123. package/dist-embed/chunks/{index-BOYhJnrD.js → index-BlBHM8M3.js} +1 -1
  124. package/dist-embed/chunks/{index-B5zrJYwn.js → index-Bw3Ijhff.js} +1 -1
  125. package/dist-embed/chunks/{index-BT4vYFeY.js → index-C5TEB73S.js} +1 -1
  126. package/dist-embed/chunks/{index-BkKEXqQS.js → index-CD5d-0QJ.js} +1 -1
  127. package/dist-embed/chunks/{index-D2LvuQlP.js → index-CTSvc7kN.js} +1 -1
  128. package/dist-embed/chunks/{index-B-L6ocEV.js → index-CaBZ6zn5.js} +1 -1
  129. package/dist-embed/chunks/{index-DSF21-29.js → index-Ce0tqSYG.js} +1 -1
  130. package/dist-embed/chunks/{index-BfUXEHI0.js → index-CeDsYtrC.js} +1 -1
  131. package/dist-embed/chunks/{index-Cp2aJ2ZR.js → index-Ckzgd1GV.js} +1 -1
  132. package/dist-embed/chunks/{index-jh9S19of.js → index-Crj6AD3D.js} +1 -1
  133. package/dist-embed/chunks/{index-bm8APcDZ.js → index-Cs7fNnHI.js} +4 -4
  134. package/dist-embed/chunks/{index-DoBEQ07P.js → index-D2V9YBSL.js} +2 -2
  135. package/dist-embed/chunks/{index-B764si9c.js → index-D4xDU_cs.js} +1 -1
  136. package/dist-embed/chunks/{index-O2jaI8TY.js → index-DB3vaYGl.js} +1 -1
  137. package/dist-embed/chunks/{index-B0wMyD8Y.js → index-DGpvT0SW.js} +1 -1
  138. package/dist-embed/chunks/{index-CRpZyQIR.js → index-DIGoR1Tz.js} +4 -4
  139. package/dist-embed/chunks/{index-CZdWsyNw.js → index-DTF28A2w.js} +1 -1
  140. package/dist-embed/chunks/{index-7FNjj0f2.js → index-DdBEMKdr.js} +1 -1
  141. package/dist-embed/chunks/{index-BrD9dtoV.js → index-DiBjbJad.js} +1 -1
  142. package/dist-embed/chunks/{index-BM6oRiO1.js → index-DkAo6nTX.js} +1 -1
  143. package/dist-embed/chunks/{index-TEcp7-f6.js → index-DmlogZBL.js} +2 -2
  144. package/dist-embed/chunks/{index-Cql9gOsL.js → index-DmzlqRz3.js} +1 -1
  145. package/dist-embed/chunks/{index-CsxlyZef.js → index-DodMg2uF.js} +1 -1
  146. package/dist-embed/chunks/{index-BiTIdbkn.js → index-DwKNt0FO.js} +1 -1
  147. package/dist-embed/chunks/{index-BqMoyzEk.js → index-I5uUezOA.js} +1 -1
  148. package/dist-embed/chunks/{index-DQQXY-7d.js → index-TzvZ9g2T.js} +2 -2
  149. package/dist-embed/chunks/{index-QZ3sHHT3.js → index-wWGi6oM9.js} +10 -10
  150. package/dist-embed/chunks/{index.esm-CkSite-X.js → index.esm-DFA6Rod9.js} +1 -1
  151. package/dist-embed/chunks/{index.esm-B7KoTOBb.js → index.esm-De-JJWit.js} +1 -1
  152. package/dist-embed/chunks/{infoDiagram-27XIBGKW-DDO50Ria.js → infoDiagram-27XIBGKW-B6fdV0Xc.js} +1 -1
  153. package/dist-embed/chunks/{infoDiagram-27XIBGKW-O3q53Qe2.js → infoDiagram-27XIBGKW-C6J796kn.js} +1 -1
  154. package/dist-embed/chunks/{infoDiagram-a29d40f1-jOvOHUyu.js → infoDiagram-a29d40f1-BjFaAu0-.js} +1 -1
  155. package/dist-embed/chunks/isEqual-BxgGIFfN.js +1 -0
  156. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-DuiWhpVW.js → ishikawaDiagram-5VMMS53U-CZVbbiJE.js} +1 -1
  157. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-IzmbYzxv.js → ishikawaDiagram-5VMMS53U-sjolONOj.js} +1 -1
  158. package/dist-embed/chunks/{it-IT-JPQ66NNP-BuCUBzia.js → it-IT-JPQ66NNP-Cyadykvb.js} +1 -1
  159. package/dist-embed/chunks/{ja-JP-DBVTYXUO-BhtQz4sy.js → ja-JP-DBVTYXUO-DYq7TJf3.js} +1 -1
  160. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-sO-Cfp65.js → journeyDiagram-3NMN7TZE-BJ-6GyhB.js} +1 -1
  161. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-DGLcsVfC.js → journeyDiagram-3NMN7TZE-CNoB-K6t.js} +1 -1
  162. package/dist-embed/chunks/{journeyDiagram-95396277-CA4bGq0G.js → journeyDiagram-95396277-E32TRIvj.js} +1 -1
  163. package/dist-embed/chunks/{kaa-6HZHGXH3-B_TI8Aa0.js → kaa-6HZHGXH3-qdjcAwd_.js} +1 -1
  164. package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-BsSg_l-j.js → kab-KAB-ZGHBKWFO-DHVNVHkT.js} +1 -1
  165. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-CDtLkjnU.js → kanban-definition-UXKFOSKX-2elwU70n.js} +1 -1
  166. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-0wjvwDqk.js → kanban-definition-UXKFOSKX-ZErtzIYn.js} +1 -1
  167. package/dist-embed/chunks/{kk-KZ-P5N5QNE5-B7XK5OQq.js → kk-KZ-P5N5QNE5-DtQCYXHl.js} +1 -1
  168. package/dist-embed/chunks/{km-KH-HSX4SM5Z-Cm2LA9F8.js → km-KH-HSX4SM5Z-B_GLLzdn.js} +1 -1
  169. package/dist-embed/chunks/{ko-KR-MTYHY66A-CL5s99y5.js → ko-KR-MTYHY66A-B8OMm-h5.js} +1 -1
  170. package/dist-embed/chunks/{ku-TR-6OUDTVRD-CiijvKHq.js → ku-TR-6OUDTVRD-_gB3JeJW.js} +1 -1
  171. package/dist-embed/chunks/{layout-CzrlbzeK.js → layout-DV2JdCx0.js} +1 -1
  172. package/dist-embed/chunks/{layout-BBbB54WC.js → layout-Di1pO_ld.js} +1 -1
  173. package/dist-embed/chunks/{lexicalHooks-DQxNZEiJ.js → lexicalHooks-DuWTjfdx.js} +1 -1
  174. package/dist-embed/chunks/{lt-LT-XHIRWOB4-CcA_Z5jR.js → lt-LT-XHIRWOB4-judKfepg.js} +1 -1
  175. package/dist-embed/chunks/{lv-LV-5QDEKY6T-CAQS9wGm.js → lv-LV-5QDEKY6T-C-9ZhYTf.js} +1 -1
  176. package/dist-embed/chunks/{mermaid.core-DfgoT1cz.js → mermaid.core-CH9h-G6m.js} +3 -3
  177. package/dist-embed/chunks/{mermaid.core-s-D09gpV.js → mermaid.core-DmeLLEp4.js} +5 -5
  178. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-BCiSPRJk.js → mindmap-definition-YA3MSWOX-CH32-IRq.js} +1 -1
  179. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-B6_K5ZvV.js → mindmap-definition-YA3MSWOX-DQTfxlEc.js} +1 -1
  180. package/dist-embed/chunks/{mindmap-definition-e4c1d938-D7gmABiC.js → mindmap-definition-e4c1d938-BgjFyiku.js} +1 -1
  181. package/dist-embed/chunks/{mr-IN-CRQNXWMA-DMAAvsDA.js → mr-IN-CRQNXWMA-B7W8v3Ft.js} +1 -1
  182. package/dist-embed/chunks/{my-MM-5M5IBNSE-t2TKqrjW.js → my-MM-5M5IBNSE-e3nyuoTM.js} +1 -1
  183. package/dist-embed/chunks/{nb-NO-T6EIAALU-Bi3ZI-HQ.js → nb-NO-T6EIAALU-Dq2hr8f4.js} +1 -1
  184. package/dist-embed/chunks/{nl-NL-IS3SIHDZ-B8UdlW1K.js → nl-NL-IS3SIHDZ-BPpJK4bx.js} +1 -1
  185. package/dist-embed/chunks/{nn-NO-6E72VCQL-Bt87hI27.js → nn-NO-6E72VCQL-TlFEoum0.js} +1 -1
  186. package/dist-embed/chunks/{oc-FR-POXYY2M6-009NL0Pk.js → oc-FR-POXYY2M6-CnSPPsW-.js} +1 -1
  187. package/dist-embed/chunks/{pa-IN-N4M65BXN-BfUtS2yt.js → pa-IN-N4M65BXN-DOLWrPsW.js} +1 -1
  188. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-CBrnWUaX.js → pegDiagram-XKGWAZYB-n8BSl7l3.js} +1 -1
  189. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-BX0ZYMng.js → pegDiagram-XKGWAZYB-oyZR3LwE.js} +1 -1
  190. package/dist-embed/chunks/{percentages-BXMCSKIN-CfzulzOv.js → percentages-BXMCSKIN-CGGUos_k.js} +5 -5
  191. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-Ct8dzoLU.js → pieDiagram-E7YTZNPT-BW48oEVe.js} +1 -1
  192. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-B1My5W85.js → pieDiagram-E7YTZNPT-t7G_PNXz.js} +1 -1
  193. package/dist-embed/chunks/{pieDiagram-c941bede-7DZ-Bl8U.js → pieDiagram-c941bede-Ci9AzDtZ.js} +1 -1
  194. package/dist-embed/chunks/{pl-PL-T2D74RX3-DbtOl9_x.js → pl-PL-T2D74RX3-hlaxloT-.js} +1 -1
  195. package/dist-embed/chunks/{pt-BR-5N22H2LF-B1pjR1_T.js → pt-BR-5N22H2LF-Zzt5dIRi.js} +1 -1
  196. package/dist-embed/chunks/{pt-PT-UZXXM6DQ-takC7TRa.js → pt-PT-UZXXM6DQ-DclavEOo.js} +1 -1
  197. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-B1mlT7fN.js → quadrantDiagram-AXDQQJYC-BLT8OFPd.js} +1 -1
  198. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-B7p4unpj.js → quadrantDiagram-AXDQQJYC-CqCRrPOH.js} +1 -1
  199. package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-CTMh_Ad5.js → quadrantDiagram-cf8b8fe0-CCwvL59h.js} +1 -1
  200. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-CJEwr5d9.js → railroadDiagram-O6MQD6OU-CArU1lc_.js} +1 -1
  201. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-xr8bPIl7.js → railroadDiagram-O6MQD6OU-h7bwNVOI.js} +1 -1
  202. package/dist-embed/chunks/{renderer-Ba0Cwb4p.js → renderer-B7ulbNbj.js} +1 -1
  203. package/dist-embed/chunks/{requirementDiagram-53bda41b-Dv1Piop_.js → requirementDiagram-53bda41b-DwpbUtUG.js} +1 -1
  204. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-Bw89vFiC.js → requirementDiagram-BXWQKSXE-DjSU8lt8.js} +1 -1
  205. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-rabT3v-j.js → requirementDiagram-BXWQKSXE-DouRs4yi.js} +1 -1
  206. package/dist-embed/chunks/{ro-RO-JPDTUUEW-DkkqyFBF.js → ro-RO-JPDTUUEW-cgDkcR_I.js} +1 -1
  207. package/dist-embed/chunks/{ru-RU-B4JR7IUQ-CikD-ITp.js → ru-RU-B4JR7IUQ-9-oBtsiZ.js} +1 -1
  208. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-D--cx9I2.js → sankeyDiagram-P5KCCOFB-CBWfRlJB.js} +1 -1
  209. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-5SpI76uK.js → sankeyDiagram-P5KCCOFB-DjzmT1hm.js} +1 -1
  210. package/dist-embed/chunks/{sankeyDiagram-c3ef121a-DbhtSWkB.js → sankeyDiagram-c3ef121a-9XuKuXG6.js} +1 -1
  211. package/dist-embed/chunks/{sequenceDiagram-82a5b84f-DpxBSKAk.js → sequenceDiagram-82a5b84f-BG9YQ6K-.js} +1 -1
  212. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-D_wK-z7a.js → sequenceDiagram-WJ2MYXX4-B9mfZJzJ.js} +1 -1
  213. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-DGNwWgf8.js → sequenceDiagram-WJ2MYXX4-CosODaLN.js} +1 -1
  214. package/dist-embed/chunks/{sessions-DQkTozai.js → sessions-D0uw83Dx.js} +1 -1
  215. package/dist-embed/chunks/{si-LK-N5RQ5JYF-BqlWRhwK.js → si-LK-N5RQ5JYF-DwwdanqB.js} +1 -1
  216. package/dist-embed/chunks/{sizeCapture-INFHLROL-4Uh8JUjf.js → sizeCapture-INFHLROL-CwVsdbq8.js} +1 -1
  217. package/dist-embed/chunks/{sizeCapture-INFHLROL-g-K-6XON.js → sizeCapture-INFHLROL-H5_9Te0l.js} +1 -1
  218. package/dist-embed/chunks/{sk-SK-C5VTKIMK-DGsmi02E.js → sk-SK-C5VTKIMK-Bx7Xeegg.js} +1 -1
  219. package/dist-embed/chunks/{sl-SI-NN7IZMDC-HFz45GOs.js → sl-SI-NN7IZMDC-BnRYm8hb.js} +1 -1
  220. package/dist-embed/chunks/{stateDiagram-43e79a5f-DxbV4jP9.js → stateDiagram-43e79a5f-DqSNbxpV.js} +1 -1
  221. package/dist-embed/chunks/{stateDiagram-D77RDMKH-D-l3u-WY.js → stateDiagram-D77RDMKH-CFvF2i-n.js} +1 -1
  222. package/dist-embed/chunks/{stateDiagram-D77RDMKH-C_wYpqah.js → stateDiagram-D77RDMKH-CM0rQJN-.js} +1 -1
  223. package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-BzxzaDdI.js → stateDiagram-v2-2041ed4f-DEAOSRqx.js} +1 -1
  224. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-IEMNMwm0.js → stateDiagram-v2-MP3YSRHH-BNF3zl7F.js} +1 -1
  225. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-BGYkOvTS.js → stateDiagram-v2-MP3YSRHH-x4Ke6-d0.js} +1 -1
  226. package/dist-embed/chunks/{styles-455b33cd-C42Lyulv.js → styles-455b33cd-CGv1xv-g.js} +1 -1
  227. package/dist-embed/chunks/{styles-f932cba9-Bf6H3IMq.js → styles-f932cba9-BcvypeEH.js} +1 -1
  228. package/dist-embed/chunks/{styles-fcc2142b-OZg6fE-p.js → styles-fcc2142b-Bm-8o0Wg.js} +1 -1
  229. package/dist-embed/chunks/{subset-shared.chunk-KC0vshev.js → subset-shared.chunk-E0MJmgRL.js} +1 -1
  230. package/dist-embed/chunks/{subset-worker.chunk-CXZAV_Z5.js → subset-worker.chunk-C8uhAh2D.js} +1 -1
  231. package/dist-embed/chunks/{sv-SE-XGPEYMSR-yEdPvwHy.js → sv-SE-XGPEYMSR-CsQ6HfG0.js} +1 -1
  232. package/dist-embed/chunks/{svgDrawCommon-148a3cd9-D9MRwoYw.js → svgDrawCommon-148a3cd9-CfBqsI2Z.js} +1 -1
  233. package/dist-embed/chunks/{swimlanes-42K2YHIH-CPkom4Q8.js → swimlanes-42K2YHIH-C5u-jMMX.js} +1 -1
  234. package/dist-embed/chunks/{swimlanes-42K2YHIH-DJLFcHMt.js → swimlanes-42K2YHIH-DSy5A1Br.js} +1 -1
  235. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-BJOhuN-y.js → swimlanesDiagram-VR7AAH4N-DiCCWeyH.js} +1 -1
  236. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-BRTtY1QX.js → swimlanesDiagram-VR7AAH4N-Dz7sQXaA.js} +1 -1
  237. package/dist-embed/chunks/{ta-IN-2NMHFXQM-0i424YGX.js → ta-IN-2NMHFXQM-fGjZyqzP.js} +1 -1
  238. package/dist-embed/chunks/{th-TH-HPSO5L25-BidF5zNO.js → th-TH-HPSO5L25-mRygXByj.js} +1 -1
  239. package/dist-embed/chunks/{timeline-definition-24CTP7MA-BasSLg-_.js → timeline-definition-24CTP7MA-BbGhqNW7.js} +1 -1
  240. package/dist-embed/chunks/{timeline-definition-24CTP7MA-BfGIJi1H.js → timeline-definition-24CTP7MA-YHoSditW.js} +1 -1
  241. package/dist-embed/chunks/{timeline-definition-7545f45a-BWwgvKxJ.js → timeline-definition-7545f45a-Cgha50uP.js} +1 -1
  242. package/dist-embed/chunks/{tr-TR-DEFEU3FU-BoHR9SlC.js → tr-TR-DEFEU3FU-CSMtrw8Q.js} +1 -1
  243. package/dist-embed/chunks/{uk-UA-QMV73CPH-DfRkqqO0.js → uk-UA-QMV73CPH-CLyS0aEW.js} +1 -1
  244. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-D1T__rd2.js → vennDiagram-4TSXK5OY-CP_KbGdD.js} +1 -1
  245. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-DMIYCfJ-.js → vennDiagram-4TSXK5OY-DEMghTP3.js} +1 -1
  246. package/dist-embed/chunks/{vi-VN-M7AON7JQ-CvZ4wpTw.js → vi-VN-M7AON7JQ-DI90c6Zt.js} +1 -1
  247. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-DtlNUHLy.js → wardleyDiagram-VM6X3IG4-BKwp7C6o.js} +1 -1
  248. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-CiKuFI26.js → wardleyDiagram-VM6X3IG4-CBfVN6X9.js} +1 -1
  249. package/dist-embed/chunks/{xychartDiagram-3f383b91-DzyuxW4K.js → xychartDiagram-3f383b91-CyeoV8HA.js} +1 -1
  250. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-p6pYRkk6.js → xychartDiagram-S5SC5T6Z-BdfPJ1NZ.js} +1 -1
  251. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-BIeFUHrS.js → xychartDiagram-S5SC5T6Z-DOiTJUlh.js} +1 -1
  252. package/dist-embed/chunks/{zh-CN-LNUGB5OW-Cx1Azgu2.js → zh-CN-LNUGB5OW-BhtQOj8w.js} +1 -1
  253. package/dist-embed/chunks/{zh-HK-E62DVLB3-DMjy1d4Z.js → zh-HK-E62DVLB3-BwejmqFd.js} +1 -1
  254. package/dist-embed/chunks/{zh-TW-RAJ6MFWO-J-YjINmR.js → zh-TW-RAJ6MFWO-CXYEZutZ.js} +1 -1
  255. package/dist-embed/datalayer-app-main.js +67 -67
  256. package/lib/apps/plugins/chat/ChatView.js +10 -2
  257. package/lib/hooks/ownRoutes.d.ts +27 -0
  258. package/lib/hooks/ownRoutes.js +33 -0
  259. package/lib/hooks/useAgentRuntimes.d.ts +5 -0
  260. package/lib/hooks/useAgentRuntimes.js +29 -26
  261. package/lib/specs/voices.d.ts +2 -0
  262. package/lib/specs/voices.js +5 -0
  263. package/lib/voice/hearing.js +5 -3
  264. package/lib/voice/pinned.d.ts +3 -1
  265. package/lib/voice/pinned.js +17 -3
  266. package/package.json +1 -1
  267. package/scripts/codegen/generate_voices.py +3 -0
  268. package/scripts/voice/measure.py +9 -4
  269. package/scripts/voice/pin_store.py +11 -5
  270. package/scripts/voice/serve_store.py +2 -2
  271. package/dist-embed/chunks/ChatView-Bz0eyWo6.js +0 -32
  272. package/dist-embed/chunks/isEqual-CGLTk7wU.js +0 -1
@@ -40,6 +40,7 @@ import { useVisitorToken } from '../../apps/visitorToken';
40
40
  import { AGENTS_PLUGIN_NAME, } from '../agents/plugin';
41
41
  import { BROWSER_CODE_TOOL, dataUrlBase64, givenFilesSentence, sandboxFileName, writeFilesCode, } from '../../apps/browserSandbox';
42
42
  import { useConfig } from '../../../hooks/useConfig';
43
+ import { runtimeModelsUrl } from '../../../hooks/ownRoutes';
43
44
  import { useSkills, useSkillActions } from '../../../hooks/useSkills';
44
45
  import { AI_MODEL_CATALOGUE, isChatModel } from '../../../specs/models';
45
46
  import { LoopAgentBlueprint, LoopAgentGate, LoopChatComposer, sendInstead, LoopChatExtras, LoopChatHeader, LoopChatLayout, LoopChatSuggestion, LoopChatSurface, LoopChatTurn, LoopCommand, LoopFrontendTool, LoopRunProps, LoopSlots, agentServerOf, noRuntimeSaid, canOpenView, runForwardedProps, onPromptFocusRequest, onSurfaceRequest, useLoopPromptStore, } from '../../core';
@@ -1488,10 +1489,17 @@ export default function ChatView({ workspace }) {
1488
1489
  if (inPage || agentServerUrl === undefined) {
1489
1490
  return undefined;
1490
1491
  }
1492
+ // A deployment's runtime does not answer it (OwnRoutesOnly): nothing to
1493
+ // offer, as when a runtime does not answer, and its selector is hidden.
1494
+ const modelsUrl = runtimeModelsUrl(agentServerUrl, agentId, ownRoutesOnly);
1495
+ if (!modelsUrl) {
1496
+ setCatalogModels([]);
1497
+ return undefined;
1498
+ }
1491
1499
  let cancelled = false;
1492
1500
  // The agent's own models (its model and model_additionals), each saying
1493
1501
  // whether its inference serves it.
1494
- void fetch(`${agentServerUrl}/api/v1/configure/models?agent_id=${encodeURIComponent(agentId)}`)
1502
+ void fetch(modelsUrl)
1495
1503
  .then(response => (response.ok ? response.json() : null))
1496
1504
  .then(payload => {
1497
1505
  if (!cancelled) {
@@ -1514,7 +1522,7 @@ export default function ChatView({ workspace }) {
1514
1522
  return () => {
1515
1523
  cancelled = true;
1516
1524
  };
1517
- }, [agentServerUrl, agentId, inPage]);
1525
+ }, [agentServerUrl, agentId, inPage, ownRoutesOnly]);
1518
1526
  /*
1519
1527
  * What to offer when the server has no catalogue of its own.
1520
1528
  *
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The runtime routes a page calls besides an application's own, and when it
3
+ * does not (PAP_DATALAYER's release gates, decided 14 October 2026).
4
+ *
5
+ * A runtime that serves a deployment — kept always on, or launched by its
6
+ * hosted page — and the visitors' runtime answer only the application's own
7
+ * routes (`OwnRoutesOnly`, the same `ownRoutesOnly` its chat is told). The
8
+ * page then asks nothing else of it: not the agent's status, not deleting
9
+ * its agent, not the runtime's model catalogue. Each is `undefined` there,
10
+ * and the caller asks nothing.
11
+ *
12
+ * Pure, so it is read without the agent hook's runtime stack.
13
+ *
14
+ * @module hooks/ownRoutes
15
+ */
16
+ import type { AppLaunch } from './useAgentRuntimes';
17
+ /**
18
+ * Whether the runtime launched for an application answers only its own
19
+ * routes: it is launched for a deployment. A Preview runs on its Maker's.
20
+ */
21
+ export declare function launchesOwnRoutesOnly(appLaunch?: AppLaunch): boolean;
22
+ /** `GET /api/v1/runtime/status` for an agent, or none on such a runtime. */
23
+ export declare function runtimeStatusUrl(agentBaseUrl: string, agentId: string, ownRoutesOnly: boolean): string | undefined;
24
+ /** `DELETE /api/v1/agents/{id}`, or none on such a runtime: its agent is the deployment's. */
25
+ export declare function agentDeletionUrl(agentBaseUrl: string, agentId: string, ownRoutesOnly: boolean): string | undefined;
26
+ /** `GET /api/v1/configure/models` for an agent, or none on such a runtime. */
27
+ export declare function runtimeModelsUrl(agentServerUrl: string, agentId: string, ownRoutesOnly: boolean): string | undefined;
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * Whether the runtime launched for an application answers only its own
7
+ * routes: it is launched for a deployment. A Preview runs on its Maker's.
8
+ */
9
+ export function launchesOwnRoutesOnly(appLaunch) {
10
+ return Boolean(appLaunch?.deploymentUid);
11
+ }
12
+ const base = (url) => url.trim().replace(/\/$/, '');
13
+ /** `GET /api/v1/runtime/status` for an agent, or none on such a runtime. */
14
+ export function runtimeStatusUrl(agentBaseUrl, agentId, ownRoutesOnly) {
15
+ if (ownRoutesOnly) {
16
+ return undefined;
17
+ }
18
+ return `${base(agentBaseUrl)}/api/v1/runtime/status?agent_id=${encodeURIComponent(agentId)}`;
19
+ }
20
+ /** `DELETE /api/v1/agents/{id}`, or none on such a runtime: its agent is the deployment's. */
21
+ export function agentDeletionUrl(agentBaseUrl, agentId, ownRoutesOnly) {
22
+ if (ownRoutesOnly) {
23
+ return undefined;
24
+ }
25
+ return `${base(agentBaseUrl)}/api/v1/agents/${encodeURIComponent(agentId)}`;
26
+ }
27
+ /** `GET /api/v1/configure/models` for an agent, or none on such a runtime. */
28
+ export function runtimeModelsUrl(agentServerUrl, agentId, ownRoutesOnly) {
29
+ if (ownRoutesOnly) {
30
+ return undefined;
31
+ }
32
+ return `${base(agentServerUrl)}/api/v1/configure/models?agent_id=${encodeURIComponent(agentId)}`;
33
+ }
@@ -130,6 +130,11 @@ export interface AgentSandboxConnectionInfo {
130
130
  agentId?: string;
131
131
  agentBaseUrl?: string;
132
132
  runtimeEnvironment?: RuntimeEnvironmentDetails;
133
+ /**
134
+ * The runtime answers only the application's own routes (OwnRoutesOnly):
135
+ * its agent's status is not asked, and the ingress given is used.
136
+ */
137
+ ownRoutesOnly?: boolean;
133
138
  }
134
139
  export interface RuntimeEnvironmentDetails {
135
140
  environmentName?: string;
@@ -24,6 +24,7 @@ import { parseAgentStreamMessage, } from '../types/stream';
24
24
  import { DEFAULT_AGENT_CONFIG } from '../types/config';
25
25
  import { ServiceManager } from '@jupyterlab/services/lib/manager';
26
26
  import { disposeSandboxServiceManagers } from '../services/sandboxServiceManagers';
27
+ import { agentDeletionUrl, launchesOwnRoutesOnly, runtimeStatusUrl, } from './ownRoutes';
27
28
  import { runtimeUrl, runtimesUrl } from '../runtimes/lifecycle';
28
29
  import { legacyTargetOf, locationOf, runsInBrowser, toAgentRuntimeVariant, } from '../runtimes/variants';
29
30
  // ═══════════════════════════════════════════════════════════════════════════
@@ -232,26 +233,22 @@ export async function createServiceManagerFromAgentSandbox(info, authToken) {
232
233
  .replace(/\/$/, '');
233
234
  const agentId = String(info.agentId || '').trim();
234
235
  const bearer = String(authToken || '').trim();
235
- if (agentBaseUrl && agentId && bearer) {
236
- const statusCandidates = [
237
- `${agentBaseUrl}/api/v1/runtime/status?agent_id=${encodeURIComponent(agentId)}`,
238
- ];
239
- for (const statusUrl of statusCandidates) {
240
- try {
241
- const response = await fetch(statusUrl, {
242
- headers: {
243
- Authorization: `Bearer ${bearer}`,
244
- },
245
- });
246
- if (!response.ok) {
247
- continue;
248
- }
249
- const payload = (await response
236
+ const statusUrl = agentBaseUrl && agentId && bearer
237
+ ? runtimeStatusUrl(agentBaseUrl, agentId, Boolean(info.ownRoutesOnly))
238
+ : undefined;
239
+ if (statusUrl) {
240
+ try {
241
+ const response = await fetch(statusUrl, {
242
+ headers: {
243
+ Authorization: `Bearer ${bearer}`,
244
+ },
245
+ });
246
+ const payload = response.ok
247
+ ? (await response
250
248
  .json()
251
- .catch(() => null));
252
- if (!payload) {
253
- continue;
254
- }
249
+ .catch(() => null))
250
+ : null;
251
+ if (payload) {
255
252
  payloadFromStatus = payload;
256
253
  const ingressFromStatus = resolveSandboxIngress(payload);
257
254
  if (ingressFromStatus) {
@@ -268,12 +265,11 @@ export async function createServiceManagerFromAgentSandbox(info, authToken) {
268
265
  }
269
266
  }
270
267
  tokenFromStatus = resolveSandboxToken(payload);
271
- break;
272
- }
273
- catch {
274
- // Keep fallback ingress/token when status endpoint is unavailable.
275
268
  }
276
269
  }
270
+ catch {
271
+ // Keep fallback ingress/token when status endpoint is unavailable.
272
+ }
277
273
  }
278
274
  let ingress = resolvedIngress.replace(/\/$/, '');
279
275
  let tokenFromIngress = '';
@@ -366,6 +362,9 @@ export function useAgentRuntimes(options = {}) {
366
362
  // Both vocabularies funnel into one value here, so no branch below has to
367
363
  // remember that the old names exist.
368
364
  const variant = toAgentRuntimeVariant(variantOption ?? runtimeCreationTarget);
365
+ // Launched for a deployment, its runtime answers only the application's
366
+ // own routes (OwnRoutesOnly): nothing else is asked of it.
367
+ const ownRoutesOnly = launchesOwnRoutesOnly(appLaunch);
369
368
  const { configuration } = useCoreStore();
370
369
  // Base store state
371
370
  const runtime = useAgentRuntimeConnection();
@@ -575,10 +574,14 @@ export function useAgentRuntimes(options = {}) {
575
574
  const teardown = useCallback(async () => {
576
575
  const agentId = runtime?.agentId;
577
576
  const agentBaseUrl = runtime?.agentBaseUrl;
578
- if (agentId && agentBaseUrl) {
577
+ // A deployment's runtime keeps its agent: nobody outside deletes it.
578
+ const deletion = agentId && agentBaseUrl
579
+ ? agentDeletionUrl(agentBaseUrl, agentId, ownRoutesOnly)
580
+ : undefined;
581
+ if (deletion) {
579
582
  try {
580
583
  const { token } = await getAuthHeaders();
581
- await fetch(`${agentBaseUrl}/api/v1/agents/${encodeURIComponent(agentId)}`, {
584
+ await fetch(deletion, {
582
585
  method: 'DELETE',
583
586
  headers: token ? { Authorization: `Bearer ${token}` } : {},
584
587
  });
@@ -593,7 +596,7 @@ export function useAgentRuntimes(options = {}) {
593
596
  setLifecycleStatus('idle');
594
597
  setLifecycleError(null);
595
598
  agentRuntimeStore.getState().reset();
596
- }, [runtime?.agentId, runtime?.agentBaseUrl, getAuthHeaders]);
599
+ }, [runtime?.agentId, runtime?.agentBaseUrl, getAuthHeaders, ownRoutesOnly]);
597
600
  // ─── Auto-create agent when runtime is ready (connect mode) ───────
598
601
  useEffect(() => {
599
602
  if (!hasSpec &&
@@ -47,6 +47,8 @@ export interface SpeechModelSpec {
47
47
  name: string;
48
48
  /** What it is for, in a sentence or two. */
49
49
  description: string;
50
+ /** Who published it: the folder Datalayer's storage keeps it under, `<provider>/<id>/<path>`. */
51
+ provider: string;
50
52
  task: 'stt' | 'tts' | 'vad';
51
53
  engine: string;
52
54
  dtype: string;
@@ -73,6 +73,7 @@ export const SPEECH_MODEL_CATALOGUE = {
73
73
  version: '0.0.1',
74
74
  name: 'Kokoro 82M',
75
75
  description: "Text to speech on Datalayer's servers, on CPU: hexgrad's Kokoro-82M v1.0 exported to ONNX, in full precision, with the voices file that holds its 54 voices, run by kokoro-onnx. Its phonemes come from eSpeak NG (GPL-3.0), which runs on the server and is never sent to a browser. Full precision, not the 8-bit export: on a 16-core CPU the 8-bit one speaks slower than real time (6 s for 3.9 s of speech), this one about four times faster than real time (1 s).",
76
+ provider: 'hexgrad',
76
77
  task: 'tts',
77
78
  engine: 'kokoro-onnx',
78
79
  dtype: 'fp32',
@@ -104,6 +105,7 @@ export const SPEECH_MODEL_CATALOGUE = {
104
105
  version: '0.0.1',
105
106
  name: 'Moonshine Base (English)',
106
107
  description: "Speech to text in the browser, in English: Useful Sensors' Moonshine Base (61M parameters), its ONNX export quantized to 8 bits, run by transformers.js. One of the English models whose weights are MIT; the legacy non-English Moonshine models are under a non-commercial licence and are not listed.",
108
+ provider: 'usefulsensors',
107
109
  task: 'stt',
108
110
  engine: 'transformers.js',
109
111
  dtype: 'q8',
@@ -165,6 +167,7 @@ export const SPEECH_MODEL_CATALOGUE = {
165
167
  version: '0.0.1',
166
168
  name: 'Moonshine Tiny (English)',
167
169
  description: "Speech to text in the browser, in English: Useful Sensors' Moonshine Tiny (27M parameters), its ONNX export quantized to 8 bits, run by transformers.js. One of the English models whose weights are MIT; the legacy non-English Moonshine models are under a non-commercial licence and are not listed.",
170
+ provider: 'usefulsensors',
168
171
  task: 'stt',
169
172
  engine: 'transformers.js',
170
173
  dtype: 'q8',
@@ -226,6 +229,7 @@ export const SPEECH_MODEL_CATALOGUE = {
226
229
  version: '0.0.1',
227
230
  name: 'Silero VAD',
228
231
  description: 'Where speech starts and ends in what the microphone heard, in the browser: Silero VAD (about 2 MB), the build @ricky0123/vad-web 0.0.31 ships and runs on onnxruntime-web. Push-to-talk keeps the speech it finds and drops the rest.',
232
+ provider: 'snakers4',
229
233
  task: 'vad',
230
234
  engine: 'vad-web',
231
235
  dtype: 'fp32',
@@ -252,6 +256,7 @@ export const SPEECH_MODEL_CATALOGUE = {
252
256
  version: '0.0.1',
253
257
  name: 'Whisper Base',
254
258
  description: "Speech to text in the browser for the languages Moonshine's MIT models do not speak, French first: OpenAI's Whisper base (74M parameters, 99 languages), its ONNX export quantized to 8 bits, run by transformers.js. A clip at a time.",
259
+ provider: 'openai',
255
260
  task: 'stt',
256
261
  engine: 'transformers.js',
257
262
  dtype: 'q8',
@@ -12,7 +12,7 @@
12
12
  * @module voice/hearing
13
13
  */
14
14
  import { SPEECH_MODEL_CATALOGUE, transcriberFor } from '../specs/voices';
15
- import { pinnedBytes, pinnedFetch, downloadSize } from './pinned';
15
+ import { pinnedBytes, pinnedFetch, downloadSize, modelFolder } from './pinned';
16
16
  import { HEARING_RATE } from './capture';
17
17
  /** A language no device model hears. */
18
18
  export class NotHeardHere extends Error {
@@ -84,7 +84,9 @@ export class DeviceHearing {
84
84
  }
85
85
  const total = downloadSize(model.id);
86
86
  const loaded = new Map();
87
- const recognizer = await transformers.pipeline('automatic-speech-recognition', model.id, {
87
+ const recognizer = await transformers.pipeline('automatic-speech-recognition',
88
+ // Read at `<origin>/<provider>/<model id>/`, as the store keeps it.
89
+ modelFolder(model.id), {
88
90
  dtype: model.dtype,
89
91
  device: 'wasm',
90
92
  progress_callback: (info) => {
@@ -106,7 +108,7 @@ export class DeviceHearing {
106
108
  activity() {
107
109
  if (!this.vad) {
108
110
  const file = SPEECH_MODEL_CATALOGUE['silero-vad'].files[0].path;
109
- const url = `${this.modelsUrl.replace(/\/+$/, '')}/silero-vad/${file}`;
111
+ const url = `${this.modelsUrl.replace(/\/+$/, '')}/${modelFolder('silero-vad')}/${file}`;
110
112
  this.vad = this.engines.vad().then(module => module.NonRealTimeVAD.new({
111
113
  modelURL: url,
112
114
  modelFetcher: path => pinnedBytes(this.modelsUrl, path),
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The browser's models, from Datalayer's origin and as pinned (VOICE.md
3
3
  * VO-49, VO-03): every file a model is made of is fetched from the models'
4
- * origin, laid out as the pinned store is (`<model id>/<path>`), and its
4
+ * origin, laid out as the pinned store is (`<provider>/<model id>/<path>`), and its
5
5
  * SHA-256 checked against the catalogue before anything reads it. A file
6
6
  * that is not the one pinned is refused; nothing is asked of another origin.
7
7
  *
@@ -24,5 +24,7 @@ export declare function sha256Hex(bytes: ArrayBuffer): Promise<string>;
24
24
  export declare function pinnedFetch(base: string, fetcher?: typeof fetch): (input: string | URL, init?: RequestInit) => Promise<Response>;
25
25
  /** A model's file as bytes, checked against its pin. */
26
26
  export declare function pinnedBytes(base: string, url: string, fetcher?: typeof fetch): Promise<ArrayBuffer>;
27
+ /** Where a model's files are, under the models' origin: `<provider>/<model id>` (VO-48). */
28
+ export declare function modelFolder(modelId: string): string;
27
29
  /** What a first use downloads for a model, in bytes. */
28
30
  export declare function downloadSize(modelId: string): number;
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * The browser's models, from Datalayer's origin and as pinned (VOICE.md
7
7
  * VO-49, VO-03): every file a model is made of is fetched from the models'
8
- * origin, laid out as the pinned store is (`<model id>/<path>`), and its
8
+ * origin, laid out as the pinned store is (`<provider>/<model id>/<path>`), and its
9
9
  * SHA-256 checked against the catalogue before anything reads it. A file
10
10
  * that is not the one pinned is refused; nothing is asked of another origin.
11
11
  *
@@ -21,9 +21,15 @@ export function pinOf(base, url) {
21
21
  if (!url.startsWith(root)) {
22
22
  return undefined;
23
23
  }
24
- const [model, ...rest] = url.slice(root.length).split('?')[0].split('/');
24
+ const [provider, model, ...rest] = url
25
+ .slice(root.length)
26
+ .split('?')[0]
27
+ .split('/');
25
28
  const path = rest.join('/');
26
- return SPEECH_MODEL_CATALOGUE[model]?.files.find(file => file.path === path);
29
+ const spec = SPEECH_MODEL_CATALOGUE[model];
30
+ return spec?.provider === provider
31
+ ? spec.files.find(file => file.path === path)
32
+ : undefined;
27
33
  }
28
34
  /** The SHA-256 of some bytes, in hex. */
29
35
  export async function sha256Hex(bytes) {
@@ -69,6 +75,14 @@ export async function pinnedBytes(base, url, fetcher) {
69
75
  }
70
76
  return answered.arrayBuffer();
71
77
  }
78
+ /** Where a model's files are, under the models' origin: `<provider>/<model id>` (VO-48). */
79
+ export function modelFolder(modelId) {
80
+ const model = SPEECH_MODEL_CATALOGUE[modelId];
81
+ if (!model) {
82
+ throw new PinRefused(`The voice catalogue has no speech model ${modelId}.`);
83
+ }
84
+ return `${model.provider}/${model.id}`;
85
+ }
72
86
  /** What a first use downloads for a model, in bytes. */
73
87
  export function downloadSize(modelId) {
74
88
  return (SPEECH_MODEL_CATALOGUE[modelId]?.files ?? []).reduce((total, file) => total + file.size, 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/agent-runtimes",
3
- "version": "1.5.18",
3
+ "version": "1.5.19",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -46,6 +46,7 @@ def _model(model: Any) -> dict[str, Any]:
46
46
  "version": model.version,
47
47
  "name": model.name,
48
48
  "description": " ".join(model.description.split()),
49
+ "provider": model.provider,
49
50
  "task": model.task,
50
51
  "engine": model.engine,
51
52
  "dtype": model.dtype,
@@ -195,6 +196,8 @@ def generate_typescript_code(
195
196
  " name: string;",
196
197
  " /** What it is for, in a sentence or two. */",
197
198
  " description: string;",
199
+ " /** Who published it: the folder Datalayer's storage keeps it under, `<provider>/<id>/<path>`. */",
200
+ " provider: string;",
198
201
  " task: 'stt' | 'tts' | 'vad';",
199
202
  " engine: string;",
200
203
  " dtype: string;",
@@ -4,7 +4,7 @@
4
4
 
5
5
  """Measure the speech models on the recorded fixtures (VOICE.md VO-05, VO-51, VO-52).
6
6
 
7
- python scripts/voice/measure.py --store ~/.cache/speech-store
7
+ python scripts/voice/measure.py --store ~/.cache/voice-work/store
8
8
 
9
9
  Writes ``tests/voice/measured/*.json``, which ``test_voice_wer.py`` checks
10
10
  against ``tests/voice/baselines.json``:
@@ -136,7 +136,7 @@ def main() -> int:
136
136
  print(f"{model['id']} on {len(clips)} {language} clips", flush=True)
137
137
  heard = transcribe(
138
138
  args.store,
139
- model["id"],
139
+ f"{model['provider']}/{model['id']}",
140
140
  language,
141
141
  [wavs[c["id"]] for c in clips],
142
142
  env,
@@ -168,7 +168,8 @@ def main() -> int:
168
168
  # --- text to speech, and what the device hears of it -----------------------
169
169
  from kokoro_onnx import Kokoro
170
170
 
171
- kokoro_dir = args.store / "kokoro-82m"
171
+ kokoro_spec = voices.SPEECH_MODEL_CATALOGUE["kokoro-82m"]
172
+ kokoro_dir = args.store / kokoro_spec["provider"] / "kokoro-82m"
172
173
  files = {
173
174
  item["path"]
174
175
  for item in voices.SPEECH_MODEL_CATALOGUE["kokoro-82m"]["files"]
@@ -206,7 +207,11 @@ def main() -> int:
206
207
  ]
207
208
  items = [item for item in spoken if item["language"] == base]
208
209
  heard = transcribe(
209
- args.store, model["id"], base, [item["wav"] for item in items], env
210
+ args.store,
211
+ f"{model['provider']}/{model['id']}",
212
+ base,
213
+ [item["wav"] for item in items],
214
+ env,
210
215
  )
211
216
  for item, result in zip(items, heard["results"]):
212
217
  round_trips.append(
@@ -5,13 +5,14 @@
5
5
  """The pinned-file store of the speech models (VOICE.md VO-03, VO-48, VO-49).
6
6
 
7
7
  Every file of every speech model of the catalogue, laid out as
8
- ``<store>/<model id>/<path>`` and checked against the SHA-256 and the size
8
+ ``<store>/<provider>/<model id>/<path>`` — as Datalayer's storage keeps them,
9
+ ``s3://datalayer-models-speech`` behind ``https://models-speech.datalayer.tech`` — and checked against the SHA-256 and the size
9
10
  the catalogue pins. The store is filled **once**, from where each model was
10
11
  published, and then copied to Datalayer's storage; the browser and the speech
11
12
  service read it from there and never from a third party's hub.
12
13
 
13
- python scripts/voice/pin_store.py --store ~/.cache/speech-store [--from DIR]
14
- python scripts/voice/pin_store.py --store ~/.cache/speech-store --verify
14
+ python scripts/voice/pin_store.py --store ~/.cache/voice-work/store [--from DIR]
15
+ python scripts/voice/pin_store.py --store ~/.cache/voice-work/store --verify
15
16
 
16
17
  ``--from`` takes files already downloaded (any layout) whose hash matches,
17
18
  instead of downloading them again. ``--verify`` downloads nothing and fails
@@ -102,6 +103,11 @@ def _download(url: str, target: Path) -> None:
102
103
  stream.write(block)
103
104
 
104
105
 
106
+ def folder_of(model: Dict[str, Any]) -> str:
107
+ """Where a model's files are kept: `<provider>/<model id>`, as Datalayer's storage keeps them (VO-48)."""
108
+ return f"{model['provider']}/{model['id']}"
109
+
110
+
105
111
  def files() -> Iterator[tuple[Dict[str, Any], Dict[str, Any]]]:
106
112
  for model in SPEECH_MODEL_CATALOGUE.values():
107
113
  for item in model["files"]:
@@ -117,7 +123,7 @@ def main() -> int:
117
123
  problems = []
118
124
  total = 0
119
125
  for model, item in files():
120
- target = args.store / model["id"] / item["path"]
126
+ target = args.store / folder_of(model) / item["path"]
121
127
  total += item["size"]
122
128
  if (
123
129
  target.is_file()
@@ -127,7 +133,7 @@ def main() -> int:
127
133
  continue
128
134
  if args.verify:
129
135
  problems.append(
130
- f"{model['id']}/{item['path']} is missing or does not match its pin"
136
+ f"{folder_of(model)}/{item['path']} is missing or does not match its pin"
131
137
  )
132
138
  continue
133
139
  target.parent.mkdir(parents=True, exist_ok=True)
@@ -4,9 +4,9 @@
4
4
 
5
5
  """Serve the pinned store to a page on this machine, as Datalayer's origin serves it (VOICE.md VO-49).
6
6
 
7
- python scripts/voice/serve_store.py --store ~/.cache/speech-store [--port 8770]
7
+ python scripts/voice/serve_store.py --store ~/.cache/voice-work/store [--port 8770]
8
8
 
9
- The browser's models at ``/<model id>/<path>`` and onnxruntime-web's own
9
+ The browser's models at ``/<provider>/<model id>/<path>`` and onnxruntime-web's own
10
10
  files at ``/onnxruntime-web/<version>/``, from the onnxruntime-web the page
11
11
  bundles (``--node-modules`` when it is not this checkout's), with the CORS
12
12
  headers a page on another port needs. For a local run only: in production
@@ -1,32 +0,0 @@
1
- import{E as N,eN as fo,r as o,j as t,eO as po,eP as mo,b_ as Cn,B as f,H as dt,T as H,c as G,cu as Ot,eu as Nt,eQ as ae,co as ut,e as go,eR as ho,eS as bo,e3 as xo,eT as So,aH as vo,dX as Un,dV as yo,dY as Bt,eU as wo,eV as Co,eW as jo,eX as ko,eY as jn,eZ as Eo,e_ as Io,e$ as To,d3 as Ro,a_ as Ao,f0 as Po,f1 as Mo,f2 as $o,f3 as Oo,f4 as Uo,f5 as Fo,x as Ut,f6 as Lo,f7 as _o,f8 as zo,f9 as No,fa as Bo,fb as Vo,fc as Ho,fd as Wo,fe as Do,ff as Go,fg as Ko,fh as Yo,fi as qo,fj as Jo,fk as Qo,fl as Xo,fm as Zo,fn as es,fo as ts,fp as ns,fq as Ge,fr as os,fs as ss,ft as as,fu as is,fv as kn,fw as rs,fx as Pe,fy as ls,fz as cs,a$ as ft,fA as ds,fB as us,fC as En,fD as fs,fE as ps,eC as ms,fF as Ft,fG as ve,fH as gs,fI as hs,fJ as In,fK as bs,fL as xs,fM as Ss,fN as vs,fO as ys,fP as ws,fQ as Cs,fR as js,fS as ks,fT as pt,fU as Es,fV as Is,I as Ts,fW as Rs,fX as As,fY as Tn,fZ as Ps,f_ as Ms,f$ as $s,g0 as Vt,g1 as Os,g2 as Us,ek as Lt,g3 as Fs,g4 as Ls}from"../datalayer-app-main.js";import{S as _s,E as zs,a as Ns}from"./SignInIcon-4HkE48mS.js";import{F as Bs,a as Vs,b as Hs}from"./LinkedInGreyIcon-BoWXE-HS.js";function Fn(){const n=N(fo);return o.useMemo(()=>n.map(s=>s.value),[n])}const _t={github:{name:"github",oauth2CallbackServerRoute:"jupyter_iam/oauth2/callback",oauth2CallbackUIRoute:"/iam/oauth2/github/callback"},google:{name:"google",oauth2CallbackServerRoute:"jupyter_iam/oauth2/callback",oauth2CallbackUIRoute:"/iam/oauth2/google/callback"},linkedin:{name:"linkedin",oauth2CallbackServerRoute:"jupyter_iam/oauth2/callback",oauth2CallbackUIRoute:"/iam/oauth2/linkedin/callback"}},Rn=()=>{if(typeof document>"u")return"";const n=document.getElementById("datalayer-config-data");if(!n?.textContent)return"";try{const s=JSON.parse(n.textContent);return String(s?.iamUrl||"").replace(/\/$/,"")}catch{return""}},Ws=(n,s="Unable to start social sign-in.")=>{if(n instanceof Error&&n.message)return n.message;if(typeof n=="string"&&n.trim())return n;if(n&&typeof n=="object"&&"message"in n){const c=n.message;if(typeof c=="string"&&c.trim())return c}return s},Ds=So`
2
- .signin-input-theme-scope input:-webkit-autofill,
3
- .signin-input-theme-scope input:-webkit-autofill:hover,
4
- .signin-input-theme-scope input:-webkit-autofill:focus,
5
- .signin-input-theme-scope input:-webkit-autofill:active,
6
- .signin-input-theme-scope input:-webkit-autofill:disabled,
7
- .signin-input-theme-scope textarea:-webkit-autofill,
8
- .signin-input-theme-scope textarea:-webkit-autofill:hover,
9
- .signin-input-theme-scope textarea:-webkit-autofill:focus,
10
- .signin-input-theme-scope textarea:-webkit-autofill:active,
11
- .signin-input-theme-scope textarea:-webkit-autofill:disabled {
12
- -webkit-text-fill-color: var(--fgColor-default) !important;
13
- caret-color: var(--fgColor-default) !important;
14
- -webkit-box-shadow: 0 0 0 1000px var(--bgColor-default) inset !important;
15
- box-shadow: 0 0 0 1000px var(--bgColor-default) inset !important;
16
- background-color: var(--bgColor-default) !important;
17
- transition: background-color 9999s ease-in-out 0s !important;
18
- }
19
-
20
- .signin-input-theme-scope input:disabled,
21
- .signin-input-theme-scope textarea:disabled {
22
- -webkit-text-fill-color: var(--fgColor-muted) !important;
23
- -webkit-box-shadow: 0 0 0 1000px var(--bgColor-default) inset !important;
24
- box-shadow: 0 0 0 1000px var(--bgColor-default) inset !important;
25
- background-color: var(--bgColor-default) !important;
26
- opacity: 1 !important;
27
- }
28
- `,Gs=({onSignIn:n,onApiKeySignIn:s,loginUrl:c,name:a,title:d="Datalayer OTEL",description:b="Sign in to access the observability dashboard.",icon:S,leadingIcon:w=t.jsx(xo,{size:24}),github:p=!1,google:K=!1,linkedin:B=!1,apiKey:Ke=!1,signUp:F=!0,socialSignInNavigationTarget:Z,asDoc:v=!1,fillHeight:I=!0,hideHero:ee=!1,calloutTitle:Me,calloutDescription:Ye,passwordToggleLabel:ie="Sign in with a password",signUpTitle:Ht="Don't have an account?",signUpDescription:Y="Create a free Datalayer account with your email address.",signUpLabel:mt="Sign up with email",signUpHref:$e="https://datalayer.ai/signup",onSignUp:V,forgotPasswordHref:q="/password",forgotPasswordLabel:Oe="Forgot password?",showForgotPassword:gt=!0,socialButtonMarginTop:x=3,actionButtonMaxWidth:J=320})=>{const te=v&&!ee,qe=a??(v&&d==="Datalayer OTEL"?"Datalayer Sign In":d),ht=S??(v?t.jsx(_s,{size:24}):w),L=o.useMemo(()=>{if(c)return c;const i=Rn();return i?`${i}/api/iam/v1/login`:"/api/iam/v1/login"},[c]),[W,ye]=o.useState(""),[re,bt]=o.useState(""),[Je,le]=o.useState(!1),[ce,Qe]=o.useState(!1),[j,we]=o.useState(!1),[de,Ce]=o.useState(!1),[Ue,Xe]=o.useState(null),[_,je]=o.useState(null),[ne,Ze]=o.useState(""),[ue,et]=o.useState(null),[Fe,M]=o.useState(null),{enqueueToast:fe}=po(),[pe,E]=o.useState(!1),[Q,oe]=o.useState(""),D=o.useRef(null),Le=o.useCallback(i=>mo()?Cn.URLExt.join(Cn.PageConfig.getBaseUrl(),i.oauth2CallbackServerRoute):`${window.location.protocol}//${window.location.hostname}${window.location.port?`:${window.location.port}`:""}${i.oauth2CallbackUIRoute}`,[]),me=o.useMemo(()=>{if(typeof window>"u")return"/";const i=`${window.location.pathname}${window.location.search}${window.location.hash}`;return i.startsWith("/")?i:"/"},[]),ke=o.useCallback(async i=>{if(!de){M(null),Xe(i.name),Ce(!0);try{const g=Rn(),m=new URLSearchParams({provider:i.name,callback_uri:Le(i)}),R=Z===void 0?void 0:String(Z||"").trim(),y=R===void 0?me&&me!=="/"?me:void 0:R&&R.startsWith("/")&&!R.startsWith("//")?R:void 0;y&&m.set("post_auth_redirect",y);const ze=`${g||""}/api/iam/v1/oauth2/authz/url?${m.toString()}`,k=await fetch(ze),se=await k.json(),Ne=se?.autorization_url;if(!k.ok||!Ne)throw new Error(se?.message||"Unable to start social sign-in.");window.location.assign(Ne)}catch(g){const m=Ws(g);M(m),fe(m,{variant:"error"}),Xe(null),Ce(!1)}}},[Le,me,fe,de,Z]);o.useEffect(()=>{pe&&D.current?.focus()},[pe]);const $=o.useCallback(()=>{E(!1),oe("")},[]),xt=o.useCallback(()=>{!Q.trim()||!s||(s(Q.trim()),$())},[Q,s,$]),St=o.useCallback(()=>{if(V){V();return}window.location.assign($e)},[V,$e]),vt=o.useCallback(()=>{if(q){if(q.startsWith("http://")||q.startsWith("https://")){window.open(q,"_blank","noopener,noreferrer");return}window.location.assign(q)}},[q]),_e=o.useCallback(async()=>{if(!(v||!W||!re||j)){we(!0),M(null);try{const i=await fetch(L,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({handle:W,password:re})});if(!i.ok)throw new Error(`HTTP ${i.status}`);const g=await i.json();if(g.success&&g.token){const m=String(g?.user?.id||g?.user?.uid||"").trim();if(!!g?.user?.mfaUrl&&m){je(m),et(g.token),M(null);return}n&&n(g.token,W)}else M(g.message||"Invalid username or password.")}catch(i){M(i instanceof Error?i.message:String(i))}finally{we(!1)}}},[v,W,re,j,L,n]),ge=o.useCallback(async()=>{if(!(v||j||!_||!ne.trim()||!ue)){we(!0),M(null);try{const i=new URL(L,window.location.origin),g=i.pathname.endsWith("/api/iam/v1/login")?i.href.replace(/\/api\/iam\/v1\/login$/,""):`${i.origin}`,m=await fetch(`${g}/api/iam/v1/users/${_}/mfa/validate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userUid:_,code:ne.trim()})}),R=await m.json();if(!m.ok||!R?.success)throw new Error(R?.message||"Failed to validate your MFA code.");n&&n(ue,W)}catch(i){const g=i instanceof Error?i.message:String(i);M(g),fe(g,{variant:"error"})}finally{we(!1)}}},[v,fe,W,j,L,ne,ue,_,n]),Ee=o.useCallback(i=>{i.key==="Enter"&&(_?ge():_e())},[_,_e,ge]),he=de||j||v;return t.jsxs(f,{className:"signin-input-theme-scope",display:"flex",alignItems:ee||te||!I?"flex-start":"center",justifyContent:"center",minHeight:ee||te||!I?"auto":"100vh",bg:ee?"transparent":"canvas.default",color:"fg.default",py:ee?0:te?2:4,children:[t.jsx(Ds,{}),t.jsxs(f,{width:"100%",maxWidth:440,p:0,children:[!ee&&t.jsxs(t.Fragment,{children:[t.jsxs(f,{display:"flex",alignItems:"center",gap:2,mb:te?2:3,justifyContent:"center",children:[ht,t.jsx(dt,{sx:{fontSize:3},children:qe})]}),t.jsx(H,{as:"p",sx:{fontSize:1,color:"fg.muted",mb:te?2:3,textAlign:"center"},children:b})]}),(Me||Ye)&&t.jsxs(f,{mb:3,textAlign:"center",children:[Me&&t.jsx(dt,{as:"h3",sx:{fontSize:2,mb:1},children:Me}),Ye&&t.jsx(H,{sx:{color:"fg.muted",fontSize:1},children:Ye})]}),!_&&(p||K||B)&&t.jsxs(t.Fragment,{children:[p&&t.jsx(G,{block:!0,size:"large",leadingVisual:Ue==="github"?()=>t.jsx(Ot,{size:"small"}):Bs,disabled:he,onClick:()=>ke(_t.github),sx:{mt:x,maxWidth:J,mx:"auto"},children:"Sign in with GitHub"}),K&&t.jsx(G,{block:!0,size:"large",leadingVisual:Ue==="google"?()=>t.jsx(Ot,{size:"small"}):Vs,disabled:he,onClick:()=>ke(_t.google),sx:{mt:x,maxWidth:J,mx:"auto"},children:"Sign in with Google"}),B&&t.jsx(G,{block:!0,size:"large",leadingVisual:Ue==="linkedin"?()=>t.jsx(Ot,{size:"small"}):Hs,disabled:he,onClick:()=>ke(_t.linkedin),sx:{mt:x,maxWidth:J,mx:"auto"},children:"Sign in with LinkedIn"})]}),!_&&!Je&&t.jsx(f,{mt:3,display:"flex",justifyContent:"center",children:t.jsx(G,{leadingVisual:Nt,size:"large",block:!0,disabled:v||j||de,onClick:()=>le(!0),sx:{maxWidth:J,mx:"auto"},children:ie})}),!_&&Je&&t.jsxs(f,{mt:4,children:[t.jsxs(ae,{required:!0,sx:{mb:3},children:[t.jsx(ae.Label,{children:"Username"}),t.jsx(ut,{autoFocus:!0,block:!0,placeholder:"Your username",value:W,disabled:j||v,onChange:i=>ye(i.target.value),onKeyDown:Ee})]}),t.jsxs(ae,{required:!0,sx:{mb:3},children:[t.jsx(ae.Label,{children:"Password"}),t.jsx(ut,{block:!0,placeholder:"Your password",type:ce?"text":"password",value:re,disabled:j||v,onChange:i=>bt(i.target.value),onKeyDown:Ee,trailingAction:t.jsx(ut.Action,{onClick:()=>Qe(!ce),disabled:j||v,icon:ce?zs:Ns,"aria-label":ce?"Hide password":"Show password",sx:{color:"var(--fgColor-muted)"}})})]}),t.jsxs(f,{display:"flex",alignItems:"center",justifyContent:"space-between",mt:3,children:[t.jsx(G,{variant:"primary",disabled:j||v||!W||!re,onClick:_e,children:j?"Signing in…":"Sign In"}),gt&&t.jsx(go,{as:"button",sx:{fontSize:1,cursor:v?"not-allowed":"pointer",background:"none",border:"none",opacity:v?.6:1},onClick:()=>{v||j||vt()},children:Oe})]})]}),_&&t.jsxs(t.Fragment,{children:[t.jsxs(ae,{required:!0,sx:{mb:3,mt:2},children:[t.jsx(ae.Label,{children:"MFA Code"}),t.jsx(ut,{autoFocus:!0,block:!0,placeholder:"Your MFA code",value:ne,disabled:j||v,onChange:i=>Ze(i.target.value),onKeyDown:Ee})]}),t.jsx(G,{variant:"primary",block:!0,disabled:j||v||!ne.trim(),onClick:ge,sx:{maxWidth:J,mx:"auto"},children:j?"Validating…":"Validate MFA Code"})]}),Fe&&t.jsx(H,{sx:{color:"danger.fg",fontSize:1,mt:3,display:"block"},children:Fe}),F&&t.jsxs(f,{mt:4,pt:4,textAlign:"center",borderTop:"1px solid",borderColor:"border.muted",children:[t.jsx(dt,{as:"h3",sx:{fontSize:2,mb:2},children:Ht}),t.jsx(H,{as:"p",sx:{color:"fg.muted",fontSize:1,mb:3},children:Y}),t.jsx(f,{display:"flex",justifyContent:"center",children:t.jsx(G,{variant:"primary",size:"large",leadingVisual:ho,disabled:v||j,onClick:St,children:mt})})]}),Ke&&s&&t.jsxs(t.Fragment,{children:[t.jsxs(f,{display:"flex",alignItems:"center",gap:2,my:3,children:[t.jsx(f,{flex:1,height:"1px",bg:"border.default"}),t.jsx(H,{sx:{fontSize:0,color:"fg.muted"},children:"or"}),t.jsx(f,{flex:1,height:"1px",bg:"border.default"})]}),t.jsx(G,{block:!0,leadingVisual:Nt,disabled:v||j||de,onClick:()=>E(!0),sx:{maxWidth:J,mx:"auto"},children:"Sign in with an API Key"}),pe&&t.jsx(f,{role:"dialog","aria-modal":"true","aria-labelledby":"signin-api-key-title",onKeyDown:i=>{i.key==="Escape"&&$()},onClick:$,position:"fixed",inset:0,zIndex:200,p:3,bg:"canvas.backdrop",display:"flex",alignItems:"center",justifyContent:"center",children:t.jsxs(f,{as:"form",onClick:i=>i.stopPropagation(),onSubmit:i=>{i.preventDefault(),xt()},width:"min(560px, 100%)",p:3,borderRadius:2,border:"1px solid",borderColor:"border.default",bg:"canvas.overlay",color:"fg.default",boxShadow:"shadow.large",children:[t.jsx(dt,{id:"signin-api-key-title",sx:{fontSize:2,mb:2},children:"Enter your API Key"}),t.jsxs(ae,{required:!0,children:[t.jsx(ae.Label,{children:"API Key"}),t.jsx(bo,{block:!0,required:!0,autoFocus:!0,placeholder:"Paste your API key here",value:Q,onInput:i=>oe(i.currentTarget.value),ref:D})]}),t.jsxs(f,{mt:3,display:"flex",justifyContent:"flex-end",gap:2,children:[t.jsx(G,{type:"button",onClick:$,children:"Cancel"}),t.jsx(G,{type:"submit",variant:"primary",disabled:!Q.trim(),children:"Authenticate"})]})]})})]})]})]})};function Ks(n){const{agentId:s,instructions:c,model:a,frontendTools:d,inference:b,subagents:S,sharing:w,onSubagentEvent:p,modeEffect:K}=n;return{type:"browser-vercel-ai",endpoint:"",agentId:s,enableConfigQuery:!1,options:{instructions:c,model:a,frontendTools:d,inference:b,subagents:S,sharing:w,onSubagentEvent:p,modeEffect:K}}}const An=vo((n,s)=>({pending:void 0,suggest:(c,a)=>{const d=c.trim();d&&n({pending:{text:d,submit:a?.submit??!1,nonce:(s().pending?.nonce??0)+1}})},consume:()=>n({pending:void 0})}));function Ys({agentName:n,sandboxStillRuns:s=!1,temporary:c=!0,onSignedIn:a,onSignUp:d}){const{configuration:b}=Un(),S=o.useCallback(w=>{yo.getState().checkIAMToken(w),a?.()},[a]);return t.jsx(f,{height:"100%",minHeight:0,overflowY:"auto",bg:"canvas.default",px:4,py:4,children:t.jsxs(f,{maxWidth:440,mx:"auto",children:[t.jsxs(f,{display:"flex",alignItems:"center",justifyContent:"center",gap:2,color:"attention.fg",mb:2,children:[t.jsx(Nt,{size:20}),t.jsx(H,{sx:{fontSize:2,fontWeight:"semibold",color:"fg.default"},children:c?"This demo runs on a shared key":"Your key has expired"})]}),t.jsxs(H,{as:"p",sx:{fontSize:1,color:"fg.muted",textAlign:"center",mb:3},children:[c?`${n??"The agent"} has used the time this key allows. Sign in to point your own agent at it, use your own data, and drop the time limit.`:`${n??"The agent"} stopped because your session ran out.`,s?" Your notebook is still running in this page.":""]}),t.jsx(Gs,{hideHero:!0,fillHeight:!1,calloutTitle:"Sign in to keep going",github:!0,google:!0,linkedin:!0,socialSignInNavigationTarget:typeof window>"u"?void 0:`${window.location.pathname}${window.location.search}`,loginUrl:b?.iamUrl?`${b.iamUrl}/api/iam/v1/login`:void 0,onSignIn:S,onSignUp:d})]})})}const qs="https://r1.datalayer.run";function Js(n=!0){const{configuration:s}=Un(),c=Bt(w=>w.token),a=s?.aiInferenceUrl||qs,d=wo(a,n&&!c),b=c||d.token,S=o.useMemo(()=>({inferenceUrl:a,token:b||void 0}),[a,b]);return{inference:S,needsSignIn:Co(S),anonymous:d,inferenceUrl:a}}const Qs={name:"general-purpose",description:"A capable generalist for a task none of the specialists covers: research, reasoning, drafting, checking.",instructions:"You are a capable general-purpose assistant. Carry out the task you are given completely and report the result plainly, saying what you could not do."};function Pn(n){const s=n?.subagents;if(!s)return[];const c=(s.subagents??[]).map(a=>{const d=a.ref?jo(a.ref):void 0;return{name:a.name,description:a.description||d?.description||a.name,instructions:a.instructions??d?.systemPrompt,model:a.model??d?.model??s.defaultModel,icon:d?.icon}});return s.includeGeneralPurpose?[...c,Qs]:c}function Xs(n){return n.replace(/^datalayer_/,"").replace(/_lexical$/,"")}function Zs(n){const s=Xs(n);return/^executeCodeIn(Notebook|Document)$/.test(s)||/^(read|list)[A-Z]/.test(s)}function ea(n,s){return n.filter(c=>s?.has(c.name)||Zs(c.name))}function ta(n,s){const c=a=>s&&a.value.id===`${s}-tools`?0:a.value.id==="notebook-tools"?1:2;return n.map((a,d)=>({entry:a,index:d,rank:c(a)})).sort((a,d)=>a.rank-d.rank||a.index-d.index).map(a=>a.entry)}function na(n,s,c){if(!c||!n.endsWith("-tools"))return!1;const a=n.slice(0,-6);return s.has(a)&&a!==c}const oa={type:"object",properties:{}};function sa(n,s){const c=new Set(n.toolset);return n.commands.filter(a=>c.has(a.name)).map(a=>({name:a.name,description:a.description,parameters:a.parameters??oa,location:"frontend",handler:async d=>{if(!s)throw new Error(`${a.name}: the ${n.plugin??n.id} plugin is not mounted on this page.`);const b=Object.keys(d??{}).length>0?d:void 0,S=await s.executeCommand(a.command,b);return S===void 0?{ok:!0,command:a.command,argument:b}:S}}))}function Ln(n,s){return n.flatMap(c=>sa(c,s))}function aa(){const n=ko(),s=Fn();return o.useMemo(()=>Ln(s,n),[s,n])}const Mn={opening:"Opening your conversation…",notOpened:n=>`Your conversation could not be opened, so this is a new one: ${n}`};function ia(n){const s=n?.app_instance;if(!s||typeof s!="object")return"";const c=s.deployment_uid;return typeof c=="string"?c.trim():""}function ra(n,s,c){return n||!s?n:{id:c,messages:[]}}function la(n){let s;for(const c of n.split(/\r?\n\r?\n/)){const a=c.split(/\r?\n/).filter(d=>d.startsWith("data:")).map(d=>d.slice(5).trim()).join("");if(a)try{const d=JSON.parse(a);d.type==="MESSAGES_SNAPSHOT"&&Array.isArray(d.messages)&&(s=d.messages)}catch{}}return s}async function $n(n){try{const s=await n.json();if(typeof s.detail=="string"&&s.detail)return s.detail}catch{}return`${n.status}`}async function ca({agentBaseUrl:n,agentId:s,uid:c,token:a,fetcher:d=fetch}){const b=`${n.replace(/\/+$/,"")}/api/v1/apps/sessions/${encodeURIComponent(c)}`,S=a?{Authorization:`Bearer ${a}`}:{},w=await d(`${b}/messages`,{headers:S});if(w.ok){const B=await w.json();return jn(B.messages)}if(w.status!==404)throw new Error(await $n(w));const p=await d(`${b}/resume`,{method:"POST",headers:{"Content-Type":"application/json",...S},body:JSON.stringify({agent:s})});if(!p.ok)throw new Error(await $n(p));const K=la(await p.text());if(!K)throw new Error(`The runtime said nothing of session ${c}.`);return jn(K)}const da="var(--theme-accent)";function _n({face:n,size:s}){return typeof n=="string"?t.jsx(Eo,{emoji:n,size:s,label:""}):t.jsx(t.Fragment,{children:n})}function ua({face:n,size:s,state:c}){const a=c==="thinking"||c==="working",d=c==="paused";return t.jsxs(f,{as:"span","aria-hidden":!0,"data-presence":c,position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",width:s+8,height:s+8,flexShrink:0,fontSize:s,lineHeight:1,children:[t.jsx(f,{as:"span",position:"absolute",inset:0,borderRadius:"50%",boxShadow:d?"none":`0 0 0 2px ${da}`,border:d?"2px dashed":"none",borderColor:"border.default",opacity:a||c==="waiting"||d?.9:0,transition:"opacity var(--theme-motion-status, 0ms) var(--theme-motion-easing, ease)",animation:a?"loopPresenceBreath 1.8s ease-in-out infinite":"none",reducedMotion:{animation:"none"},sx:{"@keyframes loopPresenceBreath":{"0%, 100%":{transform:"scale(0.92)",opacity:.35},"50%":{transform:"scale(1.06)",opacity:.9}}}}),t.jsx(f,{as:"span",display:"inline-flex",opacity:d?.55:1,filter:d?"grayscale(0.6)":"none",transition:"opacity var(--theme-motion-status, 0ms) var(--theme-motion-easing, ease)",children:t.jsx(_n,{face:n,size:s})})]})}function fa({state:n}){return t.jsx(H,{role:"status","aria-live":"polite","data-presence-line":n,sx:{fontSize:0,color:n==="waiting"?"fg.default":"fg.muted",fontWeight:n==="waiting"?"semibold":"normal",whiteSpace:"nowrap",flexShrink:0},children:Io[n]})}const pa=Vt(void 0),ma=Vt(""),ga=Vt({}),X="",ha=1400,On=parseInt(Fs["--loop-face-large"],10);function ya({workspace:n}){const s=To(),c=Ro(),a=o.useRef(null),{setViewControls:d}=n,[b,S]=o.useState(null),w=Ao(),p=w.getConfig(Po),K=p?.placeholder||s.placeholder,B=p?.defaultSurface??"notebook",Ke=w.getConfig(Mo),[F,Z]=o.useState(X),v=o.useRef(!1),I=N($o),ee=N(Oo),Me=N(Uo),ie=N(Fo)[0]?.value,Y=Ut(ie?.promptStance??pa)??ie?.prompt,mt=N(Lo),$e=_o(mt[0]?.value),V=o.useRef($e);V.current=$e;const q=o.useRef(""),Oe=N(zo),gt=o.useMemo(()=>No(()=>Oe.reduce((e,r)=>({...e,...r.value.extras.value}),{})),[Oe]),x=Ut(Oe.length>0?gt:ga),J=o.useRef(new Set),te=Bo(Os,n),qe=!te.allowed,ht=qe?te.reason??"Chat is unavailable for this sandbox":void 0,[L,W]=o.useState(!1),[ye,re]=o.useState(!1),[bt,Je]=o.useState({open:!1,pendingApproval:!1}),le=Vo(L,bt,p?.presence?.paused===!0),ce=p?.presence?.onPresence;o.useEffect(()=>{ce?.(le),V.current?.setPresence(le)},[ce,le]);const Qe=o.useRef(p?.presence?.onSaying);Qe.current=p?.presence?.onSaying;const j=o.useRef({answering:!1}),we=o.useCallback(e=>{a.current=e,re(!!e)},[]),de=o.useCallback(e=>{const{open:r,pendingApproval:l}=Ho(e);Je(Se=>Se.open===r&&Se.pendingApproval===l?Se:{open:r,pendingApproval:l});const h={saying:Do(e),answering:Wo(e)},u=j.current;(u.saying?.id!==h.saying?.id||u.saying?.text!==h.saying?.text||u.answering!==h.answering)&&(j.current=h,Qe.current?.(h));const U=V.current;if(!U)return;U.items(e);const P=new Set(["complete","completed","done","error","failed","cancelled","canceled","rejected","denied","stopped"]),A={insertcell:"adding a cell",updatecell:"editing a cell",runcell:"running a cell",deletecells:"removing cells",readallcells:"reading the notebook",readcell:"reading a cell",executecode:"running code",insertblock:"adding a block",updateblock:"editing a block",runblock:"running a block",readdocument:"reading the document"};let C;for(let Se=e.length-1;Se>=0;Se-=1){const ct=e[Se];if(typeof ct.toolName=="string"&&ct.toolCallId){P.has(String(ct.status).toLowerCase())||(C=ct);break}}if(!C){U.activity(void 0);return}const $t=C.toolName.toLowerCase().replace(/^datalayer_/,"").replace(/_lexical$/,"").replace(/[^a-z]/g,""),uo=A[$t]??`using ${C.toolName}`;U.activity(`${q.current||"The agent"} is ${uo}…`)},[]),Ce=o.useRef(x);Ce.current=x;const Ue=o.useCallback(e=>{Yn(e),V.current?.usage(e),Ce.current.onUsage?.(e)},[]),Xe=o.useCallback(e=>{W(e),e||V.current?.end("done")},[]),_=o.useCallback(e=>{const r=V.current;if(!r)return;let l=-1;for(let u=e.length-1;u>=0;u-=1)if(e[u].role==="user"){l=u;break}const h=e.slice(l+1).filter(u=>u.role==="assistant").map(Go).filter(u=>u.trim().length>0).join(`
29
-
30
- `);r.assistant(h)},[]),je=o.useRef([]),ne=o.useRef(!1),Ze=o.useRef(void 0),ue=o.useRef(void 0),et=N(Ko),Fe=o.useRef(et);Fe.current=et;const M=o.useCallback((e,r)=>{if(ue.current)return ue.current;const l=Yo(Fe.current.map(U=>U.value),r),h=l?.loop;if(ne.current&&h?.files&&h.files.length>0){const U=Ze.current;if(!U)return"A file is given to an application running on a runtime: run it on Datalayer or on your machine to give it one.";let P;try{P=h.files.map(A=>({file:Jo(String(A.name??"")),base64:qo(String(A.data_url??""))}))}catch(A){return A instanceof Error?A.message:String(A)}U.execute(Qo(P)).then(A=>{if(!A.success){S(`The files could not be put in the sandbox: ${A.error??"it failed"}.`);return}M(`${e}
31
-
32
- ${Xo(P.map(C=>C.file))}`,{...l,loop:Object.fromEntries(Object.entries(h).filter(([C])=>C!=="files"))})});return}V.current?.begin(e,a.current?.thread());const u=a.current?.send;if(!u){je.current.push([e,l]);return}u(e,l)},[]);o.useEffect(()=>{d(ye?{busy:L,stop:a.current?.stop,newChat:a.current?.newChat,send:M}:null)},[L,ye,d,M]),o.useEffect(()=>()=>d(null),[d]),o.useEffect(()=>n.prompts.subscribe(M),[n.prompts,M]),o.useEffect(()=>{if(!ye||je.current.length===0)return;const e=je.current.splice(0,je.current.length);for(const[r,l]of e)a.current?.send(r,l)},[ye]);const fe=o.useRef(!1),pe=o.useCallback(async e=>{S(null);const r=await Zo(Ce.current,e);if(r){r.sent?st(""):S(r.refused);return}fe.current||(fe.current=!0,Ke?.firstPromptHook?.());const l=await n.submit(e);if(!l.handled){S(l.reason??null);return}st(""),l.result?.content&&S(l.result.content)},[n,Ke?.firstPromptHook]),E=o.useMemo(()=>I.find(e=>e.value.surfaceId===F)?.value,[I,F]),Q=o.useCallback(e=>{v.current=!0,Z(e)},[]);o.useEffect(()=>es(Q),[Q]),o.useEffect(()=>{ts(I.map(e=>e.value.surfaceId))},[I]),o.useEffect(()=>{ns(F&&F!==X?F:Ls)},[F]);const oe=o.useMemo(()=>B===X||B==="none"?void 0:I.find(e=>e.value.surfaceId===B),[I,B]);o.useEffect(()=>{v.current||!oe||Ge(oe.value,n)&&Z(B)},[oe,n,B]);const[D,Le]=o.useState(null),me=o.useRef(null),ke=p?.fullScreenTopOffset??0,{fullScreen:$,usingApi:xt,toggle:St,topOffsetPx:vt}=os(me,{forceOverlay:!!ke,topOffset:ke}),[_e,ge]=o.useState(!1),Ee=o.useRef(!1);o.useEffect(()=>{!L||Ee.current||$||(Ee.current=!0,ge(!0))},[L,$]),o.useEffect(()=>{$&&ge(!1)},[$]),o.useEffect(()=>{E&&!Ge(E,n)&&(Le(E.surfaceId),Z(X))},[E,n]);const he=o.useMemo(()=>{if(D)return I.find(e=>e.value.surfaceId===D)?.value;if(!v.current&&F===X)return oe?.value},[I,D,F,oe]);o.useEffect(()=>{if(!D||F!==X)return;const e=I.find(r=>r.value.surfaceId===D);e&&Ge(e.value,n)&&(Le(null),Z(D))},[I,F,D,n]);const i=n.agentId?.trim()||"default",g=ss(n.sandbox.target??"local");ne.current=g;const m=as(),R=Ut(m?.selected??ma),y=m?.members.find(e=>e.id===R),yt=N(is)[0]?.value,ze=yt?.specId,k=kn(y?.specId??i)??(ze?kn(ze):void 0),se=y?void 0:yt,Ne=g&&!y?$s(ze,k):void 0;q.current=y?.name??k?.name??i;const Wt=N(rs),Dt=x.hiddenOpeners,Gt=x.hideOpeners,wt=x.openers,Ct=o.useMemo(()=>{if(Gt)return[];const e=new Set(Dt??[]),r=C=>e.size===0?C:C.filter($t=>!e.has($t.text));if(wt)return r(wt);const l=Wt.flatMap(C=>C.value.suggestions);if(l.length>0)return r(l);const h=r(k?.suggestions??[]),u=r(m?.team.suggestions??[]);if(u.length===0)return h;const U=new Set(u.map(C=>C.text)),P=m?.team.name??"Team",A=y?.name??k?.name??i;return[...u.map(C=>({...C,group:P})),...h.filter(C=>!U.has(C.text)).map(C=>({...C,group:A}))]},[Wt,m,k,y,i,Dt,Gt,wt]),tt=o.useMemo(()=>Ct.map(e=>({title:e.summary??e.text,message:e.message??e.text,group:e.group})),[Ct]),jt=Pe(k?.icon),z=p?.presence,zn=Pe(m?.team.icon),Kt=N(ls),nt=o.useMemo(()=>{const e=[],r=new Map,l=new Set,h=new Set(I.map(u=>u.value.surfaceId));for(const u of ta(Kt,E?.surfaceId)){if(na(u.value.id,h,E?.surfaceId))continue;let U;try{U=u.value.tools(n)}catch(P){console.warn(`[loop] frontend tools from '${u.plugin}' failed:`,P);continue}for(const P of U){const A=r.get(P.name);if(A){console.warn(`[loop] frontend tool '${P.name}' from '${u.plugin}' is shadowed by the one from '${A}'.`);continue}r.set(P.name,u.plugin),e.push(P),u.value.chatView&&l.add(P.name)}}for(const u of x.frontendTools??[])r.has(u.name)||(r.set(u.name,"chat-extras"),e.push(u),l.add(u.name));return E?e:ea(e,l)},[Kt,n.surfaceId,n.agentId,x.frontendTools,E?.surfaceId,I]),kt=aa(),Be=o.useMemo(()=>{if(kt.length===0)return nt;const e=new Set(nt.map(r=>r.name));return[...nt,...kt.filter(r=>!e.has(r.name))]},[nt,kt]),Yt=Fn(),Et=x.agentToolBundles,Nn=o.useMemo(()=>{const e=x.frontendTools??[];if(!Et?.length)return x.frontendTools;const r=Ln(Yt.filter(h=>Et.includes(h.id)),w),l=new Set(e.map(h=>h.name));return[...e,...r.filter(h=>!l.has(h.name))]},[x.frontendTools,Et,Yt,w]);Ze.current=g&&Be.some(e=>e.name===cs)?w.getOutput(ft)?.sandbox:void 0;const T=ds(n.sandbox,n.serverUrl),qt=N(us),Bn=o.useMemo(()=>qt.filter(e=>e.value.composer).map(e=>({name:e.value.name,description:e.value.description})),[qt]),Vn=o.useMemo(()=>{if(!m||!y)return Pn(k).map(l=>({name:l.name,description:l.description,icon:Pe(l.icon)}));const e=m.members.map(l=>({name:l.name,description:l.description,emoji:l.emoji,icon:Pe(l.icon),disabled:l.id===y.id,disabledReason:l.id===y.id?`You are already talking to ${l.name}`:void 0})),r=En(m.team,y.id).filter(l=>!m.members.some(h=>h.name===l.name)).map(l=>({name:l.name,description:l.description,icon:Pe(l.icon)}));return[...e,...r]},[m,y,k]),{inference:Jt,anonymous:Hn}=Js(g),Wn=Bt(e=>e.user),It=g&&Hn.status==="expired",Qt=!Wn,Ve=fs();ue.current=Ve.disabled?Ve.disableReason||"This conversation is closed here.":void 0;const Tt=T===void 0?ps(n.sandbox,s):void 0,ot=qe||It||!!Ne||!!Tt||Ve.disabled,Xt=It?Qt?s.demoKeyExpired:s.keyExpired:Ne??Tt??ht??(Ve.disabled?Ve.disableReason:void 0),[Zt,st]=o.useState(""),[Dn,en]=o.useState(),at=Dn??se?.model??k?.model??n.model??"",Ie=ms(),tn=o.useRef(Ie),nn=o.useRef(R),on=o.useRef(Ie);on.current=Ie,o.useEffect(()=>{nn.current!==R&&(nn.current=R,tn.current=on.current,en(void 0))},[R]);const Gn=Ie&&Ie!==tn.current?Ie:null,[Kn,Yn]=o.useState(),qn=Gn??Kn??null,Jn=Ft(ve.inpromptMenu),Qn=Ft(ve.promptAction),sn=Ft(ve.chatHeader),Xn=o.useMemo(()=>m?.members.map(e=>({id:e.id,name:e.name,description:e.description,icon:Pe(e.icon)}))??[],[m]),be=An(e=>e.pending),[an,Zn]=o.useState(0);o.useEffect(()=>gs(()=>Zn(e=>e+1)),[]),o.useEffect(()=>{be&&(st(be.text),An.getState().consume(),be.submit&&pe(be.text))},[be]);const rn=w.getConfig(ft)?.datalayerCreatePayload,xe=!!(se?.createPayload?.app_spec||rn?.app_spec),Rt=ia(rn),eo=Bt(e=>e.token),At=w.getConfig(ft)?.datalayerVisitors,to=hs(At),no=w.getConfig(ft)?.embedToken,He=At?to.token:no||eo,Te=!!(Rt||At);if(Te&&!xe)throw new Error("A deployment’s page runs its application: its host gave no app_spec.");const[ln]=o.useState(In),O=o.useMemo(()=>ra(p?.thread,Rt,ln),[p?.thread,Rt,ln]),[Re,cn]=o.useState(null),oo=!!(O?.fromRuntime&&Re?.given!==O.id);o.useEffect(()=>{if(!O?.fromRuntime||!xe||!T)return;let e=!0;return(async()=>{let r="";for(let l=0;l<4&&e;l+=1)try{const h=await ca({agentBaseUrl:T,agentId:i,uid:O.id,token:He});e&&cn({given:O.id,thread:{...O,fromRuntime:!1,messages:h}});return}catch(h){r=h instanceof Error?h.message:String(h),await new Promise(u=>setTimeout(u,1500))}e&&cn({given:O.id,thread:{id:In(),messages:[],onStarted:O.onStarted},said:Mn.notOpened(r)})})(),()=>{e=!1}},[O?.id,O?.fromRuntime,xe,T,i,He]);const dn=O?.fromRuntime?Re?.given===O.id?Re.thread:void 0:O,Pt=o.useMemo(()=>g?Ks({agentId:y?.specId??i,instructions:bs(k,se?.instructions),model:at||void 0,inference:Jt,frontendTools:Be,subagents:m&&y?En(m.team,y.id):Pn(k),sharing:m?.sharing,onSubagentEvent:e=>Us.getState().appendSubagentEvent(e),modeEffect:se?.modeEffect}):T!==void 0?{type:"ag-ui",endpoint:xe?`${T}/api/v1/apps/agents/${encodeURIComponent(i)}/ag-ui/`:`${T}/api/v1/ag-ui/${i}/`,...xe&&He?{authToken:He}:{},...xe?{uiSocket:`${T.replace(/^http/,"ws")}/api/v1/apps/ui`,uiFiles:`${T}/api/v1/apps/agents/${encodeURIComponent(i)}/files`,appSessions:`${T}/api/v1/apps/sessions`,...Te?{ownRoutesOnly:!0}:{}}:{},agentId:i,configEndpoint:`${T}/api/v1/configure`,enableConfigQuery:!0}:void 0,[i,g,Jt,y,Be,m,k,se,at,T,xe,He,Te]),it=xs(!g,Pt?.type==="ag-ui"?Pt.configEndpoint:void 0,void 0,i),We=Ss(),rt=vs(i),[un,fn]=o.useState(void 0),[so,ao]=o.useState(void 0);o.useEffect(()=>{if(g||T===void 0)return;let e=!1;return fetch(`${T}/api/v1/configure/models?agent_id=${encodeURIComponent(i)}`).then(r=>r.ok?r.json():null).then(r=>{e||(fn(r?ys(r):[]),ao(r?ws(r):void 0))}).catch(()=>{e||fn([])}),()=>{e=!0}},[T,i,g]);const io=o.useMemo(()=>Cs(un,()=>Object.values(js).filter(e=>e.available&&ks(e)).map(e=>({id:e.id,name:e.name,provider:e.provider}))),[un]),pn=o.useMemo(()=>{const e=it.data?.builtinTools??[],r=new Set(e.map(l=>l.name));return{runtime:e,frontend:Be.filter(l=>!r.has(l.name)).map(l=>({id:l.name,name:l.name}))}},[it.data?.builtinTools,Be]),mn=o.useMemo(()=>new Set((We.data?.skills??[]).filter(e=>e.status==="enabled"||e.status==="loaded").map(e=>e.id)),[We.data]),ro=o.useCallback(async e=>{if(Te)throw new Error("A deployment’s chat does not switch its runtime’s model.");en(e),!(g||T===void 0)&&await fetch(`${T}/api/v1/configure/inference/provider`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({model:e})}).catch(()=>{})},[T,g,Te]),gn=p?.promptPlacement==="bottom-chat",lo=p?.promptPlacement==="floating",Ae=p?.promptPlacement==="top",De=p?.hidePrompt===!0||x.hidePrompt===!0,co={onSend:()=>{pe(Zt)},input:Zt,setInput:st,focusTrigger:be||an?(be?.nonce??0)+an:void 0,placement:lo||Y==="floating"||Y==="floating-top"||Y==="floating-bottom"?"floating":"docked",floatingAnchor:Y==="floating-top"?"top":"bottom",isLoading:L,onStop:()=>n.viewControls.stop?.(),placeholder:Xt??x.sendInstead?.says??K,typingSuggestions:Ct.map(e=>e.text),suggestions:tt,disableInputPrompt:ot,connectionConfirmed:!ot,padding:Ae||Y==="floating-top"||Y==="floating-bottom"||Y==="docked-top"?2:3,promptVariant:"lexical",autoFocus:p?.autoFocusPrompt??!0,mentionableAgents:Vn,promptCommands:Bn,headerContent:Jn.length>0?t.jsx(pt,{slot:ve.inpromptMenu,props:{workspace:n}}):void 0,footerExtras:Qn.length>0?t.jsx(pt,{slot:ve.promptAction,props:{workspace:n}}):void 0,showAgentsMenu:!z,showInlineAgentsMenu:!1,agents:Xn,selectedAgentId:R,onSelectAgent:e=>m?.select(e),showTokenUsage:x.showTokenUsage??p?.showTokenUsage??!0,showContextRing:!0,agentUsage:qn??void 0,showModelSelector:!z&&!Te,models:io,decisions:so,selectedModel:at,onModelSelect:e=>{ro(e)},showToolsMenu:!z,availableTools:pn.runtime,availableFrontendTools:pn.frontend,mcpServers:it.data?.mcpServers??[],mcpStatusData:x.mcpStatusData??void 0,showSkillsMenu:!z,skills:We.data?.skills??[],skillsLoading:We.isLoading,enabledSkills:mn,onToggleSkill:e=>mn.has(e)?rt.disableSkill(e):rt.enableSkill(e),onToggleAllSkills:(e,r)=>e.forEach(l=>r?rt.enableSkill(l):rt.disableSkill(l)),codemodeEnabled:x.codemodeEnabled??!1,onToggleCodemode:x.onToggleCodemode,isA2AProtocol:!1,hasConfigData:!!it.data,hasSkillsData:!!We.data},hn=ee[0]?.value.Component,Mt=Me[0]?.value.Component,bn=!p?.hideHeader&&!!Mt,lt=hn?t.jsx(hn,{workspace:n,composer:co}):null,xn=I.length>0&&p?.showSurfaceSelector!==!1?t.jsx(ba,{surfaces:I.map(e=>e.value),active:E?.surfaceId??he?.surfaceId??X,onChange:Q,workspace:n}):null,Sn=t.jsxs(t.Fragment,{children:[I.map(e=>{const r=e.value,l=E?.surfaceId===r.surfaceId;return l||J.current.has(r.surfaceId)||Ge(r,n)?(J.current.add(r.surfaceId),t.jsx(f,{sx:l?{flex:"1 1 0",minWidth:0,minHeight:0}:{position:"absolute",inset:0,visibility:"hidden",pointerEvents:"none",zIndex:-1},children:t.jsx(Es,{load:r.load,props:{surfaceId:r.surfaceId,workspace:n},fallback:t.jsxs(zt,{children:["Loading ",r.title,"…"]}),errorFallback:u=>t.jsxs(zt,{children:[r.title," failed to load: ",u.message]})})},r.surfaceId)):null}),!E&&he?t.jsx(f,{flex:"1 1 0",minWidth:0,minHeight:0,children:t.jsxs(zt,{children:["Starting ",he.title,"…"]})}):null]}),vn=t.jsx(t.Fragment,{children:t.jsxs(f,{flex:Ae&&E?"0 0 34%":"1 1 0",maxWidth:Ae&&E?460:void 0,minWidth:0,minHeight:0,display:"flex",flexDirection:"column",borderLeft:E?"1px solid":void 0,borderColor:"border.default",position:"relative",children:[x.errorBanner?t.jsx(f,{flexShrink:0,px:3,py:2,fontSize:1,borderBottom:"1px solid",bg:x.errorBanner.variant==="warning"?"attention.subtle":"danger.subtle",color:x.errorBanner.variant==="warning"?"attention.fg":"danger.fg",borderColor:x.errorBanner.variant==="warning"?"attention.muted":"danger.muted",children:x.errorBanner.message}):null,Re?.said&&Re.given===O?.id?t.jsx(H,{as:"p",role:"status",sx:{m:0,px:3,py:2,fontSize:1,color:"fg.muted"},children:Re.said}):null,t.jsx(f,{flex:"1 1 auto",minHeight:0,display:"flex",children:oo?t.jsx(H,{as:"p",role:"status",sx:{m:0,p:3,fontSize:1,color:"fg.muted"},children:Mn.opening}):t.jsx(Is,{themeVariant:p?.themeVariant,themeOverrides:p?.themeOverrides,colorMode:p?.colorMode,thread:dn,disabled:ot,disableReason:Xt,protocol:Pt,frontendTools:g?void 0:Nn,initialModel:at||void 0,title:z?.name??y?.name??k?.name??i,description:z?.welcome??k?.description,brandIcon:z?.face?t.jsx(ua,{face:z.face,size:20,state:le}):t.jsx(jt,{size:20}),headerContent:z&&!Tt?t.jsx(fa,{state:le}):void 0,emptyState:{icon:z?.face?t.jsx("span",{"aria-hidden":!0,style:{fontSize:On,lineHeight:1},children:t.jsx(_n,{face:z.face,size:On})}):t.jsx(jt,{size:48}),title:z?.name??y?.name??k?.name??i,...m&&y?{sections:[{group:m.team.name,icon:t.jsx(zn,{size:48}),title:m.team.name,subtitle:m.team.description},{group:y.name,icon:t.jsx(jt,{size:32}),title:y.name,subtitle:k?.description}]}:null},suggestions:Ae||ie||p?.suggestionLabels===!1?[]:tt,showHeader:bn,headerButtons:{showNewChat:p?.headerButtons?.newChat??!1,showClear:p?.headerButtons?.clear??!1},renderHeader:Mt?e=>t.jsx(Mt,{workspace:n,header:n.chatViewModes?{...e,chatViewMode:n.chatViewModes.value,onChatViewModeChange:n.chatViewModes.onChange,offeredViewModes:n.chatViewModes.offered}:e}):void 0,showInformation:!0,headerActions:t.jsxs(f,{display:"inline-flex",alignItems:"center",gap:2,children:[n.chatHeaderActions,sn.length>0?t.jsx(pt,{slot:ve.chatHeader,props:{workspace:n}}):null,t.jsx(Ts,{icon:$?Rs:As,"aria-label":$?"Exit full screen":"Enter full screen",variant:"invisible",size:"small",onClick:()=>{ge(!1),St()},sx:_e?{"@keyframes dla-fullscreen-hint":{"0%, 100%":{opacity:1},"50%":{opacity:.4}},"&&":{bg:`color-mix(in srgb, ${c.primary} 16%, transparent)`,boxShadow:`inset 0 0 0 1.5px ${c.primary}`,animation:`dla-fullscreen-hint ${ha}ms ease-in-out infinite`},"@media (prefers-reduced-motion: reduce)":{"&&":{animation:"none"}}}:void 0})]}),showInput:!1,onSendReady:we,notebookToolSurfacesId:E?void 0:n.surfaceId,showTurnFooter:x.showTokenUsage??p?.showTokenUsage??!0,onContextSnapshot:Ue,onLoadingChange:Xe,onItemsChange:_,onDisplayItemsChange:de,enableStreaming:!0},dn?.id)}),!bn&&sn.length>0?t.jsx(f,{hidden:!0,children:t.jsx(pt,{slot:ve.chatHeader,props:{workspace:n}})}):null,gn&&!De?lt:null]})}),yn=p?.suggestionLabels!==!1&&tt.length>0?t.jsx(f,{"aria-label":s.suggestedPrompts,display:"flex",flexWrap:"wrap",gap:2,px:2,pb:"6px",children:tt.map(e=>t.jsx(f,{as:"button",type:"button",title:e.message,disabled:L||ot,onClick:()=>{pe(e.message)},appearance:"none",font:"inherit",fontSize:0,fontWeight:"semibold",lineHeight:1.25,px:"10px",py:"5px",width:Tn,flex:`0 0 ${Tn}px`,borderRadius:"999px",border:"1px solid",bg:"canvas.subtle",whiteSpace:"nowrap",sx:{borderColor:"border.default",color:"fg.default",cursor:"pointer","&:hover:not(:disabled)":{borderColor:"accent.fg",color:"accent.fg"},"&:disabled":{opacity:.5,cursor:"default"}},children:t.jsx(Ps,{title:e.title,maxWidth:"100%",sx:{minWidth:0},children:e.title})},e.title))}):null,wn=b?t.jsx(f,{flex:"0 0 auto",px:3,py:2,borderTop:"1px solid",borderColor:"border.default",bg:"canvas.subtle",fontSize:1,maxHeight:"40%",overflowY:"auto",children:b}):null;return t.jsxs(f,{ref:me,sx:{height:"100%",minHeight:0,display:"flex",flexDirection:"column",position:"relative",...$?{bg:"canvas.default"}:null,...$&&!xt.current?{position:"fixed",top:vt,right:0,bottom:0,left:0,height:"auto",zIndex:1e3}:null},children:[ie?t.jsx(ie.Component,{workspace:n,editors:Sn,hasEditor:!!E,transcript:vn,prompt:De?null:lt,chips:De?null:yn,picker:xn,transient:wn}):t.jsxs(t.Fragment,{children:[Ae&&!De?t.jsxs(f,{flex:"0 0 auto",borderBottom:"1px solid",borderColor:"border.default",children:[lt,yn]}):null,xn,t.jsxs(f,{flex:"1 1 auto",minHeight:0,display:"flex",position:"relative",children:[Sn,vn]}),wn,gn||De||Ae?null:lt]}),It?t.jsx(f,{position:"absolute",inset:0,zIndex:5,bg:"canvas.default",display:"flex",flexDirection:"column",minHeight:0,children:t.jsx(Ys,{agentName:y?.name??k?.name,sandboxStillRuns:g,temporary:Qt,onSignedIn:()=>Ms.getState().clear()})}):null]})}function ba({surfaces:n,active:s,onChange:c,workspace:a}){const d=[...n].sort((b,S)=>(b.order??100)-(S.order??100));return t.jsxs(f,{flex:"0 0 auto",display:"flex",alignItems:"center",gap:2,px:3,py:2,borderBottom:"1px solid",borderColor:"border.default",children:[t.jsx(H,{sx:{fontSize:0,color:"fg.muted"},children:"Beside the chat"}),t.jsxs(Lt,{"aria-label":"Editor beside the chat",size:"small",children:[t.jsx(Lt.Button,{selected:s===X,onClick:()=>c(X),children:"Chat"}),d.map(b=>{const S=Ge(b,a),w=S?void 0:b.unavailableReason?.(a)??"Not available right now";return t.jsx(Lt.Button,{selected:s===b.surfaceId,"aria-disabled":!S,title:w??b.title,leadingIcon:b.icon,onClick:()=>{S&&c(b.surfaceId)},children:b.title},b.surfaceId)})]})]})}function zt({children:n}){return t.jsx(f,{height:"100%",display:"flex",alignItems:"center",justifyContent:"center",color:"fg.muted",fontSize:1,px:3,textAlign:"center",children:n})}export{ya as default};
@@ -1 +0,0 @@
1
- import{g8 as se,g9 as fe,ga as te,gb as _e,gc as le,gd as ge,ge as ve,gf as qe,gg as de,gh as Ae,gi as ye}from"../datalayer-app-main.js";var D,X;function ce(){if(X)return D;X=1;var u="__lodash_hash_undefined__";function e(_){return this.__data__.set(_,u),this}return D=e,D}var H,Y;function pe(){if(Y)return H;Y=1;function u(e){return this.__data__.has(e)}return H=u,H}var B,Z;function Te(){if(Z)return B;Z=1;var u=se(),e=ce(),_=pe();function a(f){var t=-1,r=f==null?0:f.length;for(this.__data__=new u;++t<r;)this.add(f[t])}return a.prototype.add=a.prototype.push=e,a.prototype.has=_,B=a,B}var M,$;function Ee(){if($)return M;$=1;function u(e,_){for(var a=-1,f=e==null?0:e.length;++a<f;)if(_(e[a],a,e))return!0;return!1}return M=u,M}var x,W;function Oe(){if(W)return x;W=1;function u(e,_){return e.has(_)}return x=u,x}var G,j;function ue(){if(j)return G;j=1;var u=Te(),e=Ee(),_=Oe(),a=1,f=2;function t(r,v,T,O,d,l){var S=T&a,R=r.length,I=v.length;if(R!=I&&!(S&&I>R))return!1;var A=l.get(r),q=l.get(v);if(A&&q)return A==v&&q==r;var g=-1,y=!0,c=T&f?new u:void 0;for(l.set(r,v),l.set(v,r);++g<R;){var i=r[g],p=v[g];if(O)var s=S?O(p,i,g,v,r,l):O(i,p,g,r,v,l);if(s!==void 0){if(s)continue;y=!1;break}if(c){if(!e(v,function(n,E){if(!_(c,E)&&(i===n||d(i,n,T,O,l)))return c.push(E)})){y=!1;break}}else if(!(i===p||d(i,p,T,O,l))){y=!1;break}}return l.delete(r),l.delete(v),y}return G=t,G}var N,z;function Re(){if(z)return N;z=1;function u(e){var _=-1,a=Array(e.size);return e.forEach(function(f,t){a[++_]=[t,f]}),a}return N=u,N}var U,V;function he(){if(V)return U;V=1;function u(e){var _=-1,a=Array(e.size);return e.forEach(function(f){a[++_]=f}),a}return U=u,U}var m,k;function Se(){if(k)return m;k=1;var u=fe(),e=te(),_=_e(),a=ue(),f=Re(),t=he(),r=1,v=2,T="[object Boolean]",O="[object Date]",d="[object Error]",l="[object Map]",S="[object Number]",R="[object RegExp]",I="[object Set]",A="[object String]",q="[object Symbol]",g="[object ArrayBuffer]",y="[object DataView]",c=u?u.prototype:void 0,i=c?c.valueOf:void 0;function p(s,n,E,h,w,C,P){switch(E){case y:if(s.byteLength!=n.byteLength||s.byteOffset!=n.byteOffset)return!1;s=s.buffer,n=n.buffer;case g:return!(s.byteLength!=n.byteLength||!C(new e(s),new e(n)));case T:case O:case S:return _(+s,+n);case d:return s.name==n.name&&s.message==n.message;case R:case A:return s==n+"";case l:var L=f;case I:var o=h&r;if(L||(L=t),s.size!=n.size&&!o)return!1;var b=P.get(s);if(b)return b==n;h|=v,P.set(s,n);var ie=a(L(s),L(n),h,w,C,P);return P.delete(s),ie;case q:if(i)return i.call(s)==i.call(n)}return!1}return m=p,m}var F,ee;function Ie(){if(ee)return F;ee=1;var u=le(),e=1,_=Object.prototype,a=_.hasOwnProperty;function f(t,r,v,T,O,d){var l=v&e,S=u(t),R=S.length,I=u(r),A=I.length;if(R!=A&&!l)return!1;for(var q=R;q--;){var g=S[q];if(!(l?g in r:a.call(r,g)))return!1}var y=d.get(t),c=d.get(r);if(y&&c)return y==r&&c==t;var i=!0;d.set(t,r),d.set(r,t);for(var p=l;++q<R;){g=S[q];var s=t[g],n=r[g];if(T)var E=l?T(n,s,g,r,t,d):T(s,n,g,t,r,d);if(!(E===void 0?s===n||O(s,n,v,T,d):E)){i=!1;break}p||(p=g=="constructor")}if(i&&!p){var h=t.constructor,w=r.constructor;h!=w&&"constructor"in t&&"constructor"in r&&!(typeof h=="function"&&h instanceof h&&typeof w=="function"&&w instanceof w)&&(i=!1)}return d.delete(t),d.delete(r),i}return F=f,F}var K,re;function we(){if(re)return K;re=1;var u=ge(),e=ue(),_=Se(),a=Ie(),f=ve(),t=qe(),r=de(),v=Ae(),T=1,O="[object Arguments]",d="[object Array]",l="[object Object]",S=Object.prototype,R=S.hasOwnProperty;function I(A,q,g,y,c,i){var p=t(A),s=t(q),n=p?d:f(A),E=s?d:f(q);n=n==O?l:n,E=E==O?l:E;var h=n==l,w=E==l,C=n==E;if(C&&r(A)){if(!r(q))return!1;p=!0,h=!1}if(C&&!h)return i||(i=new u),p||v(A)?e(A,q,g,y,c,i):_(A,q,n,g,y,c,i);if(!(g&T)){var P=h&&R.call(A,"__wrapped__"),L=w&&R.call(q,"__wrapped__");if(P||L){var o=P?A.value():A,b=L?q.value():q;return i||(i=new u),c(o,b,g,y,i)}}return C?(i||(i=new u),a(A,q,g,y,c,i)):!1}return K=I,K}var J,ae;function Pe(){if(ae)return J;ae=1;var u=we(),e=ye();function _(a,f,t,r,v){return a===f?!0:a==null||f==null||!e(a)&&!e(f)?a!==a&&f!==f:u(a,f,t,r,_,v)}return J=_,J}var Q,ne;function Ce(){if(ne)return Q;ne=1;var u=Pe();function e(_,a){return u(_,a)}return Q=e,Q}export{Pe as a,he as b,Te as c,Oe as d,Ce as r};