@datalayer/agent-runtimes 1.3.99 → 1.3.101

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 (292) hide show
  1. package/dist-embed/chunks/{AgentDetails-DDIhoGCr.js → AgentDetails-CO9iM59C.js} +8 -8
  2. package/dist-embed/chunks/{AgentDetailsDialog-DQfL7V4R.js → AgentDetailsDialog-DmD6xm6k.js} +1 -1
  3. package/dist-embed/chunks/{AgentInspector-DaMCROPs.js → AgentInspector-kDMuvh45.js} +1 -1
  4. package/dist-embed/chunks/{AgentInspectorDialog-zGMiFR5z.js → AgentInspectorDialog-fT96Pb4Z.js} +1 -1
  5. package/dist-embed/chunks/Avatar-Dqz3ZWjZ.js +1 -0
  6. package/dist-embed/chunks/{CellSidebarExtension-DAzWlyRN.js → CellSidebarExtension-B-vao30u.js} +1 -1
  7. package/dist-embed/chunks/ChatView-CubqJum2.js +288 -0
  8. package/dist-embed/chunks/{ContextPie-D1eAig1P.js → ContextPie-ltoJ11q_.js} +1 -1
  9. package/dist-embed/chunks/DatalayerAgentBridge-BmJbZ2Lk.js +1 -0
  10. package/dist-embed/chunks/{DeckComponent-lNZXX0qi.js → DeckComponent-Fp6Vw8vN.js} +2 -2
  11. package/dist-embed/chunks/{DocumentView-BKzeMFBq.js → DocumentView-DKUbyyJg.js} +1 -1
  12. package/dist-embed/chunks/{EphemeralDocument-DKtocZ3W.js → EphemeralDocument-CgYPEfGC.js} +1 -1
  13. package/dist-embed/chunks/{EphemeralNotebook-oX8GrXS3.js → EphemeralNotebook-DvDbCKnr.js} +2 -2
  14. package/dist-embed/chunks/{ExcalidrawComponent-B8nrxRST.js → ExcalidrawComponent-BehqBpwC.js} +1 -1
  15. package/dist-embed/chunks/{ExcalidrawModal--K0C_WUL.js → ExcalidrawModal-B2sXbVJB.js} +1 -1
  16. package/dist-embed/chunks/{Flash-DTBPQ4yb.js → Flash-DdFxPtBI.js} +1 -1
  17. package/dist-embed/chunks/{JupyterLexicalExtension-CSMNnVr9.js → JupyterLexicalExtension-CUsjvchq.js} +9 -9
  18. package/dist-embed/chunks/{KernelVariables-D4s9Q5Ng.js → KernelVariables-BUmOt4yF.js} +2 -2
  19. package/dist-embed/chunks/{LexicalToolRegistry-_DH2qwSU.js → LexicalToolRegistry-DoZIM1lF.js} +1 -1
  20. package/dist-embed/chunks/{NotebookSkeleton-BTs2pK7B.js → NotebookSkeleton-D9WNoiWD.js} +1 -1
  21. package/dist-embed/chunks/{NotebookToolbar-B3BFk-WV.js → NotebookToolbar-C2_ZC9Ej.js} +1 -1
  22. package/dist-embed/chunks/{NotebookView-Dl-icjhk.js → NotebookView-BActuABH.js} +1 -1
  23. package/dist-embed/chunks/{SandboxDetailsDialog-22wdG0V-.js → SandboxDetailsDialog-C0afmOA7.js} +1 -1
  24. package/dist-embed/chunks/{SchemaForm-8b_dpfFK.js → SchemaForm-B351kd79.js} +1 -1
  25. package/dist-embed/chunks/{Toolbar-5oT8y_0g.js → Toolbar-B6ROXJ-2.js} +1 -1
  26. package/dist-embed/chunks/{YouTubePlugin-B6pgdGkU.js → YouTubePlugin-CqA-IwCx.js} +1 -1
  27. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-CCRPX817.js → abnfDiagram-VCTEODGH-B2rXJzIG.js} +1 -1
  28. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-Cc9J0KVQ.js → abnfDiagram-VCTEODGH-Celh8uSB.js} +1 -1
  29. package/dist-embed/chunks/{advancedFormat-IOT0HLTV.js → advancedFormat-9fBUVkZ9.js} +1 -1
  30. package/dist-embed/chunks/{ar-SA-G6X2FPQ2-DMIAxeqR.js → ar-SA-G6X2FPQ2-DhQlC4AZ.js} +1 -1
  31. package/dist-embed/chunks/{arc-CN-j54V6.js → arc-BcTWnMdT.js} +1 -1
  32. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-BN7cGeVb.js → architectureDiagram-5GKGNRK7-B1nGp-ab.js} +1 -1
  33. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-De77ckgV.js → architectureDiagram-5GKGNRK7-BtvjVASE.js} +1 -1
  34. package/dist-embed/chunks/{az-AZ-76LH7QW2-DMFqBzG7.js → az-AZ-76LH7QW2-CDvJeI6H.js} +1 -1
  35. package/dist-embed/chunks/{bg-BG-XCXSNQG7-DM9S3yhg.js → bg-BG-XCXSNQG7-B_2t7dwS.js} +1 -1
  36. package/dist-embed/chunks/{blockDiagram-868be97b-CoipBJ9g.js → blockDiagram-868be97b-Ctqgl81i.js} +1 -1
  37. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-CYPYbqjz.js → blockDiagram-I7D4REHJ-B8cdJr95.js} +1 -1
  38. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-Cs7aaFQh.js → blockDiagram-I7D4REHJ-BW7qedxT.js} +1 -1
  39. package/dist-embed/chunks/{bn-BD-2XOGV67Q-CK8aWMNS.js → bn-BD-2XOGV67Q-B7nTDj-4.js} +1 -1
  40. package/dist-embed/chunks/{c4Diagram-3f4bdde3-UwJoyMng.js → c4Diagram-3f4bdde3-0ruvDNdG.js} +1 -1
  41. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-C0lopX7r.js → c4Diagram-7LVT6UL2-D_oBILZn.js} +1 -1
  42. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-DjTuau65.js → c4Diagram-7LVT6UL2-ujGlIhtL.js} +1 -1
  43. package/dist-embed/chunks/{ca-ES-6MX7JW3Y-HslrBDJw.js → ca-ES-6MX7JW3Y-llJD_i9l.js} +1 -1
  44. package/dist-embed/chunks/channel-o04upGuP.js +1 -0
  45. package/dist-embed/chunks/{chunk-2Q5K7J3B-D4cqUYAT.js → chunk-2Q5K7J3B-CwLcj_PJ.js} +1 -1
  46. package/dist-embed/chunks/{chunk-2Q5K7J3B-BVMKDBY8.js → chunk-2Q5K7J3B-DcyPc2RX.js} +1 -1
  47. package/dist-embed/chunks/{chunk-5VM5RSS4-Xhg_BVSp.js → chunk-5VM5RSS4-BkRs7Fna.js} +1 -1
  48. package/dist-embed/chunks/{chunk-5VM5RSS4-CzKuJynz.js → chunk-5VM5RSS4-DMPUDDnV.js} +1 -1
  49. package/dist-embed/chunks/{chunk-F27PBJKO-Bt1Q0fHq.js → chunk-F27PBJKO-BzMwl8_q.js} +1 -1
  50. package/dist-embed/chunks/{chunk-F27PBJKO-BUIdY_4T.js → chunk-F27PBJKO-pG1_v10O.js} +1 -1
  51. package/dist-embed/chunks/{chunk-IMKFNOWR-DpgCTHeS.js → chunk-IMKFNOWR-Bf_-T_nx.js} +1 -1
  52. package/dist-embed/chunks/{chunk-IMKFNOWR-Cy5BRScb.js → chunk-IMKFNOWR-DJta09Af.js} +1 -1
  53. package/dist-embed/chunks/{chunk-JWPE2WC7-D3HcIpVU.js → chunk-JWPE2WC7-DC1wY1Ne.js} +1 -1
  54. package/dist-embed/chunks/{chunk-JWPE2WC7-Diz0u535.js → chunk-JWPE2WC7-SVeaXwdX.js} +1 -1
  55. package/dist-embed/chunks/{chunk-POPQ4Y6H-TbpwubqF.js → chunk-POPQ4Y6H-BHtANfps.js} +1 -1
  56. package/dist-embed/chunks/{chunk-POPQ4Y6H-CkAsArUm.js → chunk-POPQ4Y6H-Cl1LQa-a.js} +1 -1
  57. package/dist-embed/chunks/{chunk-SVP7TREG-_yTXReWy.js → chunk-SVP7TREG-0GCrhixv.js} +1 -1
  58. package/dist-embed/chunks/{chunk-SVP7TREG-Cw20-h7G.js → chunk-SVP7TREG-2ZP0qWw_.js} +1 -1
  59. package/dist-embed/chunks/{chunk-TICWLB2K-BPo6s9dS.js → chunk-TICWLB2K-BcegNV27.js} +1 -1
  60. package/dist-embed/chunks/{chunk-TICWLB2K-Df9jMrfB.js → chunk-TICWLB2K-CZYEMhEE.js} +1 -1
  61. package/dist-embed/chunks/{chunk-XXDRQBXY-CizfVebu.js → chunk-XXDRQBXY-DlOeT6YV.js} +1 -1
  62. package/dist-embed/chunks/{chunk-XXDRQBXY-CQCJr_te.js → chunk-XXDRQBXY-NxzmpYaR.js} +1 -1
  63. package/dist-embed/chunks/classDiagram-ZZMXUADV-BXZxncqO.js +1 -0
  64. package/dist-embed/chunks/classDiagram-ZZMXUADV-DnNeD34Z.js +1 -0
  65. package/dist-embed/chunks/{classDiagram-f62afe4f-BPLoDclf.js → classDiagram-f62afe4f-BD1_NCwH.js} +1 -1
  66. package/dist-embed/chunks/{classDiagram-v2-604399ef-ByLL4G6w.js → classDiagram-v2-604399ef-CxmFuhFb.js} +1 -1
  67. package/dist-embed/chunks/classDiagram-v2-VYDZK3BY-BXZxncqO.js +1 -0
  68. package/dist-embed/chunks/classDiagram-v2-VYDZK3BY-DnNeD34Z.js +1 -0
  69. package/dist-embed/chunks/{code-block-IT6T5CEO-CZdOZWWc.js → code-block-IT6T5CEO-U73VXKeS.js} +1 -1
  70. package/dist-embed/chunks/{component-CCqdcSgN.js → component-COjBgUMr.js} +1 -1
  71. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-D1KcELJ6.js → cose-bilkent-JH36ORCC-71p0f-kJ.js} +1 -1
  72. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-DI7Z4av-.js → cose-bilkent-JH36ORCC-B-Oq7xUI.js} +1 -1
  73. package/dist-embed/chunks/{createText-aed3d8b3-qEBV_LAF.js → createText-aed3d8b3-CmAg0yKd.js} +1 -1
  74. package/dist-embed/chunks/{cs-CZ-2BRQDIVT-D2WZgYFZ.js → cs-CZ-2BRQDIVT-Cm_uiYT0.js} +1 -1
  75. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-D_YG7HzO.js → cynefinDiagram-5FMLGOSQ-BdKZ7Rf2.js} +1 -1
  76. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-zmfGD2O2.js → cynefinDiagram-5FMLGOSQ-NbSU35d_.js} +1 -1
  77. package/dist-embed/chunks/{da-DK-5WZEPLOC-BZhZmwgX.js → da-DK-5WZEPLOC-B0lo6-wZ.js} +1 -1
  78. package/dist-embed/chunks/{dagre-GXQ25YYZ-BcPCMol6.js → dagre-GXQ25YYZ-C2NoVPqt.js} +1 -1
  79. package/dist-embed/chunks/{dagre-GXQ25YYZ-B-pyqr-3.js → dagre-GXQ25YYZ-Cq55WvUn.js} +1 -1
  80. package/dist-embed/chunks/{de-DE-XR44H4JA-CltJ8MP6.js → de-DE-XR44H4JA-DZrN-mJo.js} +1 -1
  81. package/dist-embed/chunks/{diagram-S7CK7UJ4-BmnkJuMF.js → diagram-S7CK7UJ4-CF7XYPSL.js} +1 -1
  82. package/dist-embed/chunks/{diagram-S7CK7UJ4-hhBlnYjW.js → diagram-S7CK7UJ4-Cq78dPrF.js} +1 -1
  83. package/dist-embed/chunks/{diagram-UQ7AKVKN-DPb8MAV_.js → diagram-UQ7AKVKN-BAi-uDI4.js} +1 -1
  84. package/dist-embed/chunks/{diagram-UQ7AKVKN-BN1Xspl9.js → diagram-UQ7AKVKN-DlMLGIyl.js} +1 -1
  85. package/dist-embed/chunks/{diagram-VSXAHHWV-TMd-7Wmo.js → diagram-VSXAHHWV-DRNadpAk.js} +1 -1
  86. package/dist-embed/chunks/{diagram-VSXAHHWV-H5G6hU8P.js → diagram-VSXAHHWV-jJir7z_u.js} +1 -1
  87. package/dist-embed/chunks/{diagram-VX7I27RA-BrkFbK0K.js → diagram-VX7I27RA-BR-L0h0N.js} +1 -1
  88. package/dist-embed/chunks/{diagram-VX7I27RA-DiYNlqCO.js → diagram-VX7I27RA-D_LZ7ttC.js} +1 -1
  89. package/dist-embed/chunks/{diagram-Z3DM3KII-DdG_O5h6.js → diagram-Z3DM3KII-CDeXGbsG.js} +1 -1
  90. package/dist-embed/chunks/{diagram-Z3DM3KII-D1vqz5Ew.js → diagram-Z3DM3KII-CwrX0YEI.js} +1 -1
  91. package/dist-embed/chunks/{document-zcF1SUIy.js → document-B3yvxR3p.js} +1 -1
  92. package/dist-embed/chunks/{drivecontents-Ckcp2ERS.js → drivecontents-BHpoQXqz.js} +1 -1
  93. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-PMrBUO9H.js → ebnfDiagram-PWID7BFC-DJ-S4zNP.js} +1 -1
  94. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-DMXmlTDY.js → ebnfDiagram-PWID7BFC-DktGPWnR.js} +1 -1
  95. package/dist-embed/chunks/{edges-b2856ca0-zod3pf5J.js → edges-b2856ca0-Dl_I1_Tl.js} +1 -1
  96. package/dist-embed/chunks/{el-GR-BZB4AONW-C70uQp6T.js → el-GR-BZB4AONW-C4D5ZbOc.js} +1 -1
  97. package/dist-embed/chunks/{erDiagram-5d81789a-D4Y_ua8V.js → erDiagram-5d81789a-Xh6XZPYE.js} +1 -1
  98. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-COpQ5gec.js → erDiagram-RLTQ6QDP-CvKed34U.js} +1 -1
  99. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-CZNZ_893.js → erDiagram-RLTQ6QDP-Dn5o1zp3.js} +1 -1
  100. package/dist-embed/chunks/{es-ES-U4NZUMDT-Bsjo8e08.js → es-ES-U4NZUMDT-D1yiS-ZI.js} +1 -1
  101. package/dist-embed/chunks/{eu-ES-A7QVB2H4-SVPEle78.js → eu-ES-A7QVB2H4-Zm3lJsL6.js} +1 -1
  102. package/dist-embed/chunks/{fa-IR-HGAKTJCU-CpgfdtSo.js → fa-IR-HGAKTJCU-Dhv2lg_O.js} +1 -1
  103. package/dist-embed/chunks/{fi-FI-Z5N7JZ37-0AIruYqI.js → fi-FI-Z5N7JZ37-QeFFEfyg.js} +1 -1
  104. package/dist-embed/chunks/{flowDb-185abca5-8a6sWoVq.js → flowDb-185abca5-DCi2LSG3.js} +1 -1
  105. package/dist-embed/chunks/{flowDiagram-1629c991-CCbNUYZl.js → flowDiagram-1629c991-1AzvuCps.js} +1 -1
  106. package/dist-embed/chunks/{flowDiagram-HODETNUW-lJ2Z3vFv.js → flowDiagram-HODETNUW-BjiuBN9U.js} +1 -1
  107. package/dist-embed/chunks/{flowDiagram-HODETNUW-CMUxuQ7T.js → flowDiagram-HODETNUW-BoOyNxJY.js} +1 -1
  108. package/dist-embed/chunks/{flowDiagram-v2-1d953310-CEF2SgZr.js → flowDiagram-v2-1d953310-DNyM8Btq.js} +1 -1
  109. package/dist-embed/chunks/{flowchart-elk-definition-6df44142-RHeVm2Vk.js → flowchart-elk-definition-6df44142-DucxAUTE.js} +1 -1
  110. package/dist-embed/chunks/{fr-FR-RHASNOE6-Pv7-mObZ.js → fr-FR-RHASNOE6-DjbRpOS6.js} +1 -1
  111. package/dist-embed/chunks/{ganttDiagram-3b0b3873-wEiuIWcM.js → ganttDiagram-3b0b3873-DLJCN1HW.js} +1 -1
  112. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-BYMiax7v.js → ganttDiagram-EL5Y4UJY-D3bfGcnP.js} +1 -1
  113. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-B5WlwMpk.js → ganttDiagram-EL5Y4UJY-us782PXd.js} +1 -1
  114. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-DYJQ-SIg.js → gitGraphDiagram-WWUBYQGX-BCKtisB_.js} +1 -1
  115. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-D8fVmtc9.js → gitGraphDiagram-WWUBYQGX-DpOwi5a_.js} +1 -1
  116. package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-DxDYtdab.js → gitGraphDiagram-f01e8bc2-B5VZrDor.js} +1 -1
  117. package/dist-embed/chunks/{gl-ES-HMX3MZ6V-CvVsi7_e.js → gl-ES-HMX3MZ6V-C-ev9dqC.js} +1 -1
  118. package/dist-embed/chunks/{hcl-BZsx9glM.js → hcl-hwLh11hJ.js} +1 -1
  119. package/dist-embed/chunks/{he-IL-6SHJWFNN-DR-LBFsb.js → he-IL-6SHJWFNN-DHoNpuA6.js} +1 -1
  120. package/dist-embed/chunks/{hi-IN-IWLTKZ5I-C-7x_jFk.js → hi-IN-IWLTKZ5I-JZJZPoWj.js} +1 -1
  121. package/dist-embed/chunks/{hu-HU-A5ZG7DT2-IRN8uyau.js → hu-HU-A5ZG7DT2-RzCikyBW.js} +1 -1
  122. package/dist-embed/chunks/{id-ID-SAP4L64H-B4acvKcJ.js → id-ID-SAP4L64H-Bn08nS9B.js} +1 -1
  123. package/dist-embed/chunks/{index-CzyPyDL7.js → index-1Ekpl0uC.js} +1 -1
  124. package/dist-embed/chunks/{index-9bae90f3-Byqvc_1J.js → index-9bae90f3-CqVDusDd.js} +1 -1
  125. package/dist-embed/chunks/{index-O05b1yOc.js → index-B1Egld01.js} +1 -1
  126. package/dist-embed/chunks/{index-CkcSokt2.js → index-B2dtLxcg.js} +1 -1
  127. package/dist-embed/chunks/{index-DrTOPxp7.js → index-B5MiaXUV.js} +1 -1
  128. package/dist-embed/chunks/{index-CML3IxdI.js → index-BOvsLtXe.js} +1 -1
  129. package/dist-embed/chunks/{index-C8PIFg_G.js → index-BUbwVG__.js} +4 -4
  130. package/dist-embed/chunks/{index-4cAPvEvs.js → index-BVAnvfbh.js} +1 -1
  131. package/dist-embed/chunks/{index-CBqbd-wN.js → index-BYofH50G.js} +1 -1
  132. package/dist-embed/chunks/{index-BvCNoy7C.js → index-Ba-Kv3yV.js} +1 -1
  133. package/dist-embed/chunks/{index-CFLgmNxm.js → index-BbsUSk_Q.js} +5 -5
  134. package/dist-embed/chunks/{index-DSqW3D0Y.js → index-Bs1pVq7E.js} +1 -1
  135. package/dist-embed/chunks/{index-CkHVrFkx.js → index-BtjXlYA2.js} +1 -1
  136. package/dist-embed/chunks/{index-qS3zZ9pt.js → index-C0iUgNwj.js} +2 -2
  137. package/dist-embed/chunks/{index-BNamX66v.js → index-C5xKtdLU.js} +13 -13
  138. package/dist-embed/chunks/{index-B3E7bXYK.js → index-CGscJbrF.js} +1 -1
  139. package/dist-embed/chunks/{index-CGSmsddM.js → index-Cjx6uk6z.js} +1 -1
  140. package/dist-embed/chunks/{index-DPibz6KG.js → index-CqKV027P.js} +1 -1
  141. package/dist-embed/chunks/{index-Dm4AUkEh.js → index-Cqur_rhw.js} +4 -4
  142. package/dist-embed/chunks/{index-CNx_s591.js → index-D7rnWGLu.js} +2 -2
  143. package/dist-embed/chunks/{index-qoRa7lfq.js → index-DCX_IqLg.js} +1 -1
  144. package/dist-embed/chunks/{index-BY3dr_Yb.js → index-DHVYKZ44.js} +6 -6
  145. package/dist-embed/chunks/{index-Begrz6qi.js → index-DIHzcHI1.js} +1 -1
  146. package/dist-embed/chunks/{index-NHZX5LFG.js → index-DJomc4za.js} +2 -2
  147. package/dist-embed/chunks/{index-DecCuztE.js → index-DLk6Znxv.js} +1 -1
  148. package/dist-embed/chunks/{index-BnowXurk.js → index-DYt0uAs-.js} +1 -1
  149. package/dist-embed/chunks/{index-kuItYEfY.js → index-DeYQGrTz.js} +8 -8
  150. package/dist-embed/chunks/{index-CDSBIJbt.js → index-DgnVcOqG.js} +1 -1
  151. package/dist-embed/chunks/{index-REv48H9T.js → index-DkY_OIbM.js} +1 -1
  152. package/dist-embed/chunks/{index-CaurkNaJ.js → index-DsX9nIHt.js} +1 -1
  153. package/dist-embed/chunks/{index-DKPjJ48t.js → index-DtYYe0Cw.js} +5 -5
  154. package/dist-embed/chunks/{index-CwFAduNg.js → index-aX9x7qni.js} +1 -1
  155. package/dist-embed/chunks/{index-74YA-L1Q.js → index-hib7vWC6.js} +1 -1
  156. package/dist-embed/chunks/{index-DYk4SAGn.js → index-p2ZGnxJX.js} +1 -1
  157. package/dist-embed/chunks/{index-CxSZtb0e.js → index-qzUKNibz.js} +1 -1
  158. package/dist-embed/chunks/{index-5Jo-nwZH.js → index-zr-b1Ds3.js} +1 -1
  159. package/dist-embed/chunks/{index.esm-DOzsYAbC.js → index.esm-CJLAKtMR.js} +1 -1
  160. package/dist-embed/chunks/{index.esm-BpcXmnkv.js → index.esm-DlPZAW-m.js} +1 -1
  161. package/dist-embed/chunks/{infoDiagram-27XIBGKW-CV8wJO56.js → infoDiagram-27XIBGKW-CB1VZqVi.js} +1 -1
  162. package/dist-embed/chunks/{infoDiagram-27XIBGKW-DNSrv0V4.js → infoDiagram-27XIBGKW-s9Lynuxa.js} +1 -1
  163. package/dist-embed/chunks/{infoDiagram-a29d40f1-E8D341jS.js → infoDiagram-a29d40f1-BSyalhIZ.js} +1 -1
  164. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-BRfv59pP.js → ishikawaDiagram-5VMMS53U-BnyB2Q-F.js} +1 -1
  165. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-DmZ-PvsF.js → ishikawaDiagram-5VMMS53U-D-b9zU7V.js} +1 -1
  166. package/dist-embed/chunks/{it-IT-JPQ66NNP-qA6LaRji.js → it-IT-JPQ66NNP-C2vJMuKM.js} +1 -1
  167. package/dist-embed/chunks/{ja-JP-DBVTYXUO-CHmLHAsr.js → ja-JP-DBVTYXUO-C8KOKQt9.js} +1 -1
  168. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-3jE8sGmW.js → journeyDiagram-3NMN7TZE-CZXsMFjb.js} +1 -1
  169. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-itNV2GBs.js → journeyDiagram-3NMN7TZE-Cv3HlmqD.js} +1 -1
  170. package/dist-embed/chunks/{journeyDiagram-95396277-Ba7ZL7z3.js → journeyDiagram-95396277-DnkmTBAP.js} +1 -1
  171. package/dist-embed/chunks/{kaa-6HZHGXH3-CLJsweAJ.js → kaa-6HZHGXH3-CvxJbmMB.js} +1 -1
  172. package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-C5IJJXMt.js → kab-KAB-ZGHBKWFO-CQJhf9Nn.js} +1 -1
  173. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-DraK1j1A.js → kanban-definition-UXKFOSKX-CZ0olp9z.js} +1 -1
  174. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-DLigKnGA.js → kanban-definition-UXKFOSKX-LX8xxzUZ.js} +1 -1
  175. package/dist-embed/chunks/{kk-KZ-P5N5QNE5-CCaxEdfw.js → kk-KZ-P5N5QNE5-Dl6YC0GH.js} +1 -1
  176. package/dist-embed/chunks/{km-KH-HSX4SM5Z-My_ugj4j.js → km-KH-HSX4SM5Z-QYB-tJ4i.js} +1 -1
  177. package/dist-embed/chunks/{ko-KR-MTYHY66A-CHP-oWuX.js → ko-KR-MTYHY66A-D6yzBqJ5.js} +1 -1
  178. package/dist-embed/chunks/{ku-TR-6OUDTVRD-C52g9k3M.js → ku-TR-6OUDTVRD-C43l2362.js} +1 -1
  179. package/dist-embed/chunks/{layout-Dj1wRfbG.js → layout-DC1dN5QV.js} +1 -1
  180. package/dist-embed/chunks/{layout-DNotAWCv.js → layout-DfHqq7Y7.js} +1 -1
  181. package/dist-embed/chunks/{lexicalHooks-kxLGr2aO.js → lexicalHooks-PS_v7JyS.js} +1 -1
  182. package/dist-embed/chunks/{line-DuKLYeqR.js → line-BLnKxlFS.js} +1 -1
  183. package/dist-embed/chunks/{linear-Dg-Vn5Yx.js → linear-bDTv5gmU.js} +1 -1
  184. package/dist-embed/chunks/{lt-LT-XHIRWOB4-DcGTTOch.js → lt-LT-XHIRWOB4-BG1v5NwF.js} +1 -1
  185. package/dist-embed/chunks/{lv-LV-5QDEKY6T-Duj8GAiu.js → lv-LV-5QDEKY6T-CAwm1y_0.js} +1 -1
  186. package/dist-embed/chunks/{mermaid.core-C0gANONu.js → mermaid.core-BS7AlRW2.js} +3 -3
  187. package/dist-embed/chunks/{mermaid.core-BjUO4_Ly.js → mermaid.core-CLv-vCjs.js} +5 -5
  188. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-x4oa4R6v.js → mindmap-definition-YA3MSWOX-BUr4hM7e.js} +1 -1
  189. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-qCMgaWWi.js → mindmap-definition-YA3MSWOX-CwwLX5oJ.js} +1 -1
  190. package/dist-embed/chunks/{mindmap-definition-e4c1d938-Dy5nnqlt.js → mindmap-definition-e4c1d938-B4xy2oKe.js} +1 -1
  191. package/dist-embed/chunks/{model-D8diDS02.js → model-D7a10Ag0.js} +1 -1
  192. package/dist-embed/chunks/{mr-IN-CRQNXWMA-Cm1jPr2r.js → mr-IN-CRQNXWMA-DSk6q1fp.js} +1 -1
  193. package/dist-embed/chunks/{my-MM-5M5IBNSE-CfTzX-Wc.js → my-MM-5M5IBNSE-BRiKXulk.js} +1 -1
  194. package/dist-embed/chunks/{nb-NO-T6EIAALU-DdPxuBWB.js → nb-NO-T6EIAALU-CCDnctVd.js} +1 -1
  195. package/dist-embed/chunks/{nl-NL-IS3SIHDZ-eOHjxC9z.js → nl-NL-IS3SIHDZ-DwStD_Ch.js} +1 -1
  196. package/dist-embed/chunks/{nn-NO-6E72VCQL-DjAv0k1C.js → nn-NO-6E72VCQL-DNcfjETk.js} +1 -1
  197. package/dist-embed/chunks/{oc-FR-POXYY2M6-C0T2Uif7.js → oc-FR-POXYY2M6-BOjjS12P.js} +1 -1
  198. package/dist-embed/chunks/{pa-IN-N4M65BXN-BpX0p08b.js → pa-IN-N4M65BXN-B4y5cv2_.js} +1 -1
  199. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-5jUoEdYP.js → pegDiagram-XKGWAZYB-CVtSqLfc.js} +1 -1
  200. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-Smos5ynL.js → pegDiagram-XKGWAZYB-pdjxeh5M.js} +1 -1
  201. package/dist-embed/chunks/{percentages-BXMCSKIN-CmsGG1KO.js → percentages-BXMCSKIN-BpahO1D1.js} +6 -6
  202. package/dist-embed/chunks/{pica-DvcVbjys.js → pica-CyDhZ1sv.js} +1 -1
  203. package/dist-embed/chunks/{pie-CrFPIYc9.js → pie-CktNGOxo.js} +1 -1
  204. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-D0vDTcE9.js → pieDiagram-E7YTZNPT-D2I7Fwff.js} +1 -1
  205. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-COPe6fPR.js → pieDiagram-E7YTZNPT-JUXSTYxs.js} +1 -1
  206. package/dist-embed/chunks/{pieDiagram-c941bede-65qxkgxB.js → pieDiagram-c941bede-DWhYbfLm.js} +1 -1
  207. package/dist-embed/chunks/{pl-PL-T2D74RX3-ZCXWl-vX.js → pl-PL-T2D74RX3-CfuLoYHB.js} +1 -1
  208. package/dist-embed/chunks/{plugin-Ba5UScsV.js → plugin-DZPXm2dP.js} +1 -1
  209. package/dist-embed/chunks/{pt-BR-5N22H2LF-ClSeRSTv.js → pt-BR-5N22H2LF-Fk60PfdA.js} +1 -1
  210. package/dist-embed/chunks/{pt-PT-UZXXM6DQ-aI3iyXEY.js → pt-PT-UZXXM6DQ-SNAgJ5Vr.js} +1 -1
  211. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-BoEDNaHO.js → quadrantDiagram-AXDQQJYC-Cw8ysOVS.js} +1 -1
  212. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-DvWSIFQv.js → quadrantDiagram-AXDQQJYC-zTpXZRnN.js} +1 -1
  213. package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-DiapetF0.js → quadrantDiagram-cf8b8fe0-DH_dNEld.js} +1 -1
  214. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-LnW8lyjW.js → railroadDiagram-O6MQD6OU-CoMzy1dm.js} +1 -1
  215. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-XyeFPUFA.js → railroadDiagram-O6MQD6OU-DrPiQVOZ.js} +1 -1
  216. package/dist-embed/chunks/{requirementDiagram-53bda41b-NVu0cGYm.js → requirementDiagram-53bda41b-C7A0I5GT.js} +1 -1
  217. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-wRDyhjvw.js → requirementDiagram-BXWQKSXE-B9trBsts.js} +1 -1
  218. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-CtpxXHY5.js → requirementDiagram-BXWQKSXE-BLQtV6jv.js} +1 -1
  219. package/dist-embed/chunks/{ro-RO-JPDTUUEW--yP8WH1q.js → ro-RO-JPDTUUEW-YkxpKkWn.js} +1 -1
  220. package/dist-embed/chunks/{round-BYqUt1IP.js → round-DymJ-a3G.js} +1 -1
  221. package/dist-embed/chunks/{ru-RU-B4JR7IUQ-S6Dpc8ej.js → ru-RU-B4JR7IUQ-CaI1rtvc.js} +1 -1
  222. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-CWsU1zz9.js → sankeyDiagram-P5KCCOFB-Cvxdoq6D.js} +1 -1
  223. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-CkYpEh5o.js → sankeyDiagram-P5KCCOFB-Dwkp-ggM.js} +1 -1
  224. package/dist-embed/chunks/{sankeyDiagram-c3ef121a-D9xzSD-8.js → sankeyDiagram-c3ef121a-DeaFXwir.js} +1 -1
  225. package/dist-embed/chunks/{sequenceDiagram-82a5b84f-DDCEPqNh.js → sequenceDiagram-82a5b84f-fDhOBU7A.js} +1 -1
  226. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-CafPjz3k.js → sequenceDiagram-WJ2MYXX4-Bj9ikwM4.js} +1 -1
  227. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-D-ytwLdK.js → sequenceDiagram-WJ2MYXX4-Bp1oVZMs.js} +1 -1
  228. package/dist-embed/chunks/{sessions-BeSpcqDy.js → sessions-ZDYLkdi_.js} +2 -2
  229. package/dist-embed/chunks/{si-LK-N5RQ5JYF-Bh0-Jjfq.js → si-LK-N5RQ5JYF-CQz29xmh.js} +1 -1
  230. package/dist-embed/chunks/{sizeCapture-INFHLROL-FMWRuKPu.js → sizeCapture-INFHLROL-CMlzK5MC.js} +1 -1
  231. package/dist-embed/chunks/{sizeCapture-INFHLROL-5RviLAUl.js → sizeCapture-INFHLROL-ohpYHAcp.js} +1 -1
  232. package/dist-embed/chunks/{sk-SK-C5VTKIMK-TXk80Xbq.js → sk-SK-C5VTKIMK-CZg7PVzd.js} +1 -1
  233. package/dist-embed/chunks/{sl-SI-NN7IZMDC-DSdu_b8Y.js → sl-SI-NN7IZMDC-D-EjMWyZ.js} +1 -1
  234. package/dist-embed/chunks/{stateDiagram-43e79a5f-Bd0gJvTB.js → stateDiagram-43e79a5f-BFR_IH5W.js} +1 -1
  235. package/dist-embed/chunks/{stateDiagram-D77RDMKH-CsoLoQdw.js → stateDiagram-D77RDMKH-DpOxo9yl.js} +1 -1
  236. package/dist-embed/chunks/{stateDiagram-D77RDMKH-anfAB1CI.js → stateDiagram-D77RDMKH-zWegA-O8.js} +1 -1
  237. package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-Db6Ltf2q.js → stateDiagram-v2-2041ed4f-8TkUHVMG.js} +1 -1
  238. package/dist-embed/chunks/stateDiagram-v2-MP3YSRHH-BZAMPWr5.js +1 -0
  239. package/dist-embed/chunks/stateDiagram-v2-MP3YSRHH-DrTAroDB.js +1 -0
  240. package/dist-embed/chunks/{styles-455b33cd-DjZhq6rj.js → styles-455b33cd-Befvug13.js} +1 -1
  241. package/dist-embed/chunks/{styles-f932cba9-s39yhAcA.js → styles-f932cba9-eBHnVQaE.js} +1 -1
  242. package/dist-embed/chunks/{styles-fcc2142b-QdZsB9tg.js → styles-fcc2142b-BsjaKqGS.js} +1 -1
  243. package/dist-embed/chunks/{subset-shared.chunk-B1SUTh3f.js → subset-shared.chunk-BIvvzzX2.js} +1 -1
  244. package/dist-embed/chunks/{subset-worker.chunk-B24w3nw0.js → subset-worker.chunk-DGgI6iRY.js} +1 -1
  245. package/dist-embed/chunks/{sv-SE-XGPEYMSR-CT10IJuV.js → sv-SE-XGPEYMSR-D8CsNMON.js} +1 -1
  246. package/dist-embed/chunks/{svgDrawCommon-148a3cd9-B38JgGfg.js → svgDrawCommon-148a3cd9-BxzL4r3S.js} +1 -1
  247. package/dist-embed/chunks/{swimlanes-42K2YHIH-CPp_dpjU.js → swimlanes-42K2YHIH-B28jcYJ_.js} +1 -1
  248. package/dist-embed/chunks/{swimlanes-42K2YHIH-DHlC5c8j.js → swimlanes-42K2YHIH-BZP55aw9.js} +1 -1
  249. package/dist-embed/chunks/swimlanesDiagram-VR7AAH4N-BIQqrjYQ.js +8 -0
  250. package/dist-embed/chunks/swimlanesDiagram-VR7AAH4N-hQM0t42-.js +8 -0
  251. package/dist-embed/chunks/{ta-IN-2NMHFXQM-HSbClJ74.js → ta-IN-2NMHFXQM-CvuxKO7t.js} +1 -1
  252. package/dist-embed/chunks/{th-TH-HPSO5L25-B2hciv_c.js → th-TH-HPSO5L25-NgQJigwq.js} +1 -1
  253. package/dist-embed/chunks/{timeline-definition-24CTP7MA-CKyPT4PB.js → timeline-definition-24CTP7MA-CficHg2r.js} +1 -1
  254. package/dist-embed/chunks/{timeline-definition-24CTP7MA-D9gzYUYy.js → timeline-definition-24CTP7MA-De_e-NOu.js} +1 -1
  255. package/dist-embed/chunks/{timeline-definition-7545f45a-BWnp7J60.js → timeline-definition-7545f45a-DqfcISSR.js} +1 -1
  256. package/dist-embed/chunks/{tokens-C8cD27Uo.js → tokens-B5KQP74f.js} +1 -1
  257. package/dist-embed/chunks/{tr-TR-DEFEU3FU-BWwXpAYZ.js → tr-TR-DEFEU3FU-eu9-qLmi.js} +1 -1
  258. package/dist-embed/chunks/{uk-UA-QMV73CPH-Dj7E5VqN.js → uk-UA-QMV73CPH-CbjmuLVL.js} +1 -1
  259. package/dist-embed/chunks/{venn.esm-DCEZyyO1.js → venn.esm-QMuJZ7sT.js} +1 -1
  260. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-bbhu-7hk.js → vennDiagram-4TSXK5OY-DIL1dW8w.js} +1 -1
  261. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-F_ETYUiw.js → vennDiagram-4TSXK5OY-DmLAzLnR.js} +1 -1
  262. package/dist-embed/chunks/{vi-VN-M7AON7JQ-PsrEnccg.js → vi-VN-M7AON7JQ-u84yOuJ-.js} +1 -1
  263. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-DOvpFGv3.js → wardleyDiagram-VM6X3IG4-Cb_52SC-.js} +1 -1
  264. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-3pZGhbDZ.js → wardleyDiagram-VM6X3IG4-DfZqkrsZ.js} +1 -1
  265. package/dist-embed/chunks/{xychartDiagram-3f383b91-DZLtCOMM.js → xychartDiagram-3f383b91-DGvBSaRz.js} +1 -1
  266. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-CFYS5J-K.js → xychartDiagram-S5SC5T6Z-6OM1k4o6.js} +1 -1
  267. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-DSYuijxd.js → xychartDiagram-S5SC5T6Z-xYHAmg9u.js} +1 -1
  268. package/dist-embed/chunks/{zh-CN-LNUGB5OW-BaQu8uAz.js → zh-CN-LNUGB5OW-ojkSgl-t.js} +1 -1
  269. package/dist-embed/chunks/{zh-HK-E62DVLB3-BidFwl7n.js → zh-HK-E62DVLB3-C6M89-Da.js} +1 -1
  270. package/dist-embed/chunks/{zh-TW-RAJ6MFWO-Bm6PhMc5.js → zh-TW-RAJ6MFWO-BaTtFORh.js} +1 -1
  271. package/dist-embed/datalayer-app-main.js +19 -19
  272. package/lib/apps/apps/AppRenderer.d.ts +12 -0
  273. package/lib/apps/apps/AppRenderer.js +38 -5
  274. package/lib/apps/apps/visitorToken.d.ts +29 -0
  275. package/lib/apps/apps/visitorToken.js +57 -0
  276. package/lib/apps/plugins/agents/DatalayerAgentBridge.js +71 -2
  277. package/lib/apps/plugins/agents/switchable.js +3 -2
  278. package/lib/apps/plugins/chat/ChatView.js +11 -1
  279. package/package.json +1 -1
  280. package/scripts/record-scene-checks.py +80 -20
  281. package/dist-embed/chunks/Avatar-VyZWLCFE.js +0 -1
  282. package/dist-embed/chunks/ChatView-Bqiq0mvd.js +0 -288
  283. package/dist-embed/chunks/DatalayerAgentBridge-BhxfUyb7.js +0 -1
  284. package/dist-embed/chunks/channel-gqCIn1TE.js +0 -1
  285. package/dist-embed/chunks/classDiagram-ZZMXUADV-BmkR_bZ0.js +0 -1
  286. package/dist-embed/chunks/classDiagram-ZZMXUADV-Db5VIrmE.js +0 -1
  287. package/dist-embed/chunks/classDiagram-v2-VYDZK3BY-BmkR_bZ0.js +0 -1
  288. package/dist-embed/chunks/classDiagram-v2-VYDZK3BY-Db5VIrmE.js +0 -1
  289. package/dist-embed/chunks/stateDiagram-v2-MP3YSRHH-CHSJtozR.js +0 -1
  290. package/dist-embed/chunks/stateDiagram-v2-MP3YSRHH-Grhw6_l4.js +0 -1
  291. package/dist-embed/chunks/swimlanesDiagram-VR7AAH4N-DA8nqWDf.js +0 -8
  292. package/dist-embed/chunks/swimlanesDiagram-VR7AAH4N-PPX_kI6A.js +0 -8
@@ -252,5 +252,17 @@ export declare const DATALAYER_BOOTSTRAP_AGENTSPEC = "example-simple";
252
252
  * Naming none, it wears the theme's own colours: nothing is laid.
253
253
  */
254
254
  export declare function appThemeOverrides(app: AppSpec): ThemeOverrides | undefined;
255
+ /**
256
+ * The agent an application's chat speaks to (STUDIO D-15): its own, made
257
+ * under its id — or, for a visitor without an account, the one of the
258
+ * visitors' runtime their token reaches (`visitorAgentOf`): an example's by
259
+ * its id, an application at its address by `at-<slug>`. A token for another
260
+ * example than the one drawn is a problem said in place, never spoken with.
261
+ */
262
+ export declare function appAgentOf(app: Pick<AppSpec, 'id'>, visitorsApp?: string): {
263
+ agentId: string;
264
+ } | {
265
+ problem: string;
266
+ };
255
267
  export declare function AppRenderer({ app, plugins, instance, onPresence, onSaying, paused, sidebar, computer, frame, page, pluginsOff, language, ...embed }: AppRendererProps): React.JSX.Element;
256
268
  export default AppRenderer;
@@ -73,6 +73,7 @@ import { ChatLanguage } from '../../chat/ChatLanguage';
73
73
  import { defineAppRuntimePlugin } from './AppRuntimePlugins';
74
74
  import { hasFolderModules } from './customComponents';
75
75
  import { appPluginPair } from './pluginPair';
76
+ import { visitorAgentOf } from './visitorToken';
76
77
  /** The id of an agent or a Cog, without its version. */
77
78
  export const agentIdOf = (app) => {
78
79
  const reference = app.agent || app.team;
@@ -332,6 +333,30 @@ export function appThemeOverrides(app) {
332
333
  }
333
334
  : undefined;
334
335
  }
336
+ /**
337
+ * The agent an application's chat speaks to (STUDIO D-15): its own, made
338
+ * under its id — or, for a visitor without an account, the one of the
339
+ * visitors' runtime their token reaches (`visitorAgentOf`): an example's by
340
+ * its id, an application at its address by `at-<slug>`. A token for another
341
+ * example than the one drawn is a problem said in place, never spoken with.
342
+ */
343
+ export function appAgentOf(app, visitorsApp) {
344
+ if (!visitorsApp) {
345
+ return { agentId: app.id };
346
+ }
347
+ try {
348
+ const agentId = visitorAgentOf(visitorsApp);
349
+ if (!visitorsApp.startsWith('at:') && agentId !== app.id) {
350
+ return {
351
+ problem: `This visitor’s token is for ${visitorsApp}, not for ${app.id}.`,
352
+ };
353
+ }
354
+ return { agentId };
355
+ }
356
+ catch (error) {
357
+ return { problem: error instanceof Error ? error.message : String(error) };
358
+ }
359
+ }
335
360
  export function AppRenderer({ app, plugins = NO_PLUGINS, instance, onPresence, onSaying, paused = false, sidebar = false, computer = false, frame = false, page, pluginsOff, language, ...embed }) {
336
361
  /*
337
362
  * The kind's plugins, made once per application. `LoopEmbed` rebuilds its
@@ -423,19 +448,27 @@ export function AppRenderer({ app, plugins = NO_PLUGINS, instance, onPresence, o
423
448
  const themeOverrides = useMemo(() => appThemeOverrides(app),
424
449
  // eslint-disable-next-line react-hooks/exhaustive-deps
425
450
  [accent]);
426
- if ('problem' in preset) {
427
- return (_jsx("div", { role: "status", style: { padding: 16 }, children: preset.problem }));
451
+ const agent = appAgentOf(app, embed.datalayerVisitors?.app);
452
+ const problem = 'problem' in preset
453
+ ? preset.problem
454
+ : 'problem' in agent
455
+ ? agent.problem
456
+ : undefined;
457
+ if ('problem' in preset || 'problem' in agent) {
458
+ return (_jsx("div", { role: "status", style: { padding: 16 }, children: problem }));
428
459
  }
429
460
  return (
430
461
  // The chat's own words in the person's language too (P-26): the host's,
431
462
  // else the browser's.
432
463
  _jsx(ChatLanguage, { language: language, children: _jsx(LoopEmbed
433
464
  // The application's own agent: created under its id, so that its
434
- // spec is applied to an agent of its own, never to the one it extends.
465
+ // spec is applied to an agent of its own, never to the one it extends
466
+ // — or, for a visitor, the one their token reaches (D-15).
435
467
  , {
436
468
  // The application's own agent: created under its id, so that its
437
- // spec is applied to an agent of its own, never to the one it extends.
438
- agentId: app.id, ...preset.workspace, ...(frame
469
+ // spec is applied to an agent of its own, never to the one it extends
470
+ // — or, for a visitor, the one their token reaches (D-15).
471
+ agentId: agent.agentId, ...preset.workspace, ...(frame
439
472
  ? {
440
473
  frameTitle: [app.emoji, shown.name].filter(Boolean).join(' '),
441
474
  }
@@ -33,3 +33,32 @@ export declare function useVisitorToken(visitors: DatalayerVisitors | undefined)
33
33
  token?: string;
34
34
  error?: string;
35
35
  };
36
+ /**
37
+ * The agent of the visitors' runtime a visitor's token reaches, as the
38
+ * runtime names it (`agent_of` in `agent_runtimes.loop.apps.visitors`): an
39
+ * example's by its id, an application at its address by `at-<slug>`. The
40
+ * chat speaks to that agent and to no other: the token reaches no other.
41
+ *
42
+ * @throws When `app` is an address with no valid slug.
43
+ */
44
+ export declare function visitorAgentOf(app: string): string;
45
+ /** The agent the visitors' runtime holds for a visitor, and the application it runs. */
46
+ export type VisitorAgent = {
47
+ agent: string;
48
+ appId: string;
49
+ };
50
+ /**
51
+ * Ask the visitors' runtime for the agent a visitor's token names, made
52
+ * there if it is not (`POST /api/v1/apps/visitors/agent`, STUDIO D-15): an
53
+ * application at its address has its agent made as it is first opened, so
54
+ * that the runtime holds the application before the page follows it.
55
+ * Throws with the runtime's sentence when it refuses.
56
+ */
57
+ export declare function fetchVisitorAgent(runtimeUrl: string, token: string, fetcher?: typeof fetch): Promise<VisitorAgent>;
58
+ /**
59
+ * The application's agent made on the visitors' runtime for this visitor,
60
+ * and checked to be the one the page runs: the agent the token reaches
61
+ * (`visitorAgentOf`) running the application of `appId`. Throws with the
62
+ * sentence a visitor is told otherwise.
63
+ */
64
+ export declare function ensureVisitorAgent(visitors: DatalayerVisitors, appId: string, fetcher?: typeof fetch): Promise<VisitorAgent>;
@@ -112,3 +112,60 @@ export function useVisitorToken(visitors) {
112
112
  }, [app, inferenceUrl]);
113
113
  return state;
114
114
  }
115
+ /** What a token for an application at its address names: `at:<slug>`. */
116
+ const AT_PREFIX = 'at:';
117
+ /** The slug of an address, as ai-agents allows it. */
118
+ const SLUG = /^[a-z0-9][a-z0-9-]{0,99}$/;
119
+ /**
120
+ * The agent of the visitors' runtime a visitor's token reaches, as the
121
+ * runtime names it (`agent_of` in `agent_runtimes.loop.apps.visitors`): an
122
+ * example's by its id, an application at its address by `at-<slug>`. The
123
+ * chat speaks to that agent and to no other: the token reaches no other.
124
+ *
125
+ * @throws When `app` is an address with no valid slug.
126
+ */
127
+ export function visitorAgentOf(app) {
128
+ if (!app.startsWith(AT_PREFIX)) {
129
+ return app;
130
+ }
131
+ const slug = app.slice(AT_PREFIX.length);
132
+ if (!SLUG.test(slug)) {
133
+ throw new Error(`“${app}” is no application’s address.`);
134
+ }
135
+ return `at-${slug}`;
136
+ }
137
+ /**
138
+ * Ask the visitors' runtime for the agent a visitor's token names, made
139
+ * there if it is not (`POST /api/v1/apps/visitors/agent`, STUDIO D-15): an
140
+ * application at its address has its agent made as it is first opened, so
141
+ * that the runtime holds the application before the page follows it.
142
+ * Throws with the runtime's sentence when it refuses.
143
+ */
144
+ export async function fetchVisitorAgent(runtimeUrl, token, fetcher = fetch) {
145
+ const base = runtimeUrl.replace(/\/+$/, '');
146
+ const response = await fetcher(`${base}/api/v1/apps/visitors/agent`, {
147
+ method: 'POST',
148
+ headers: { Authorization: `Bearer ${token}` },
149
+ });
150
+ const body = (await response.json().catch(() => ({})));
151
+ if (!response.ok || !body.agent || !body.app_id) {
152
+ throw new Error(body.detail ||
153
+ `The visitors’ runtime at ${base} did not make the application’s agent (HTTP ${response.status}).`);
154
+ }
155
+ return { agent: body.agent, appId: body.app_id };
156
+ }
157
+ /**
158
+ * The application's agent made on the visitors' runtime for this visitor,
159
+ * and checked to be the one the page runs: the agent the token reaches
160
+ * (`visitorAgentOf`) running the application of `appId`. Throws with the
161
+ * sentence a visitor is told otherwise.
162
+ */
163
+ export async function ensureVisitorAgent(visitors, appId, fetcher = fetch) {
164
+ const minted = await fetchVisitorToken(visitors.inferenceUrl, visitors.app, keptVisitorId(), fetcher);
165
+ const held = await fetchVisitorAgent(visitors.url, minted.token, fetcher);
166
+ const expected = visitorAgentOf(visitors.app);
167
+ if (held.agent !== expected || held.appId !== appId) {
168
+ throw new Error(`The visitors’ runtime holds ${held.appId} as ${held.agent} for “${visitors.app}”, not ${appId} as ${expected}: reload the page.`);
169
+ }
170
+ return held;
171
+ }
@@ -2,9 +2,10 @@
2
2
  * Copyright (c) 2025-2026 Datalayer, Inc.
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
- import { useEffect, useMemo } from 'react';
5
+ import { useEffect, useMemo, useState } from 'react';
6
6
  import { useReactorPlatform, useSignalValue } from '@datalayer/reactor/react';
7
7
  import { useAgentRuntimes } from '../../../hooks/useAgentRuntimes';
8
+ import { ensureVisitorAgent } from '../../apps/visitorToken';
8
9
  import { AGENTSPECS } from '../../../specs/agents/agents';
9
10
  import { IDLE_SANDBOX_TARGET_SIGNAL } from '../../core';
10
11
  import { appLaunchOf } from './appLaunch';
@@ -34,6 +35,55 @@ export function DatalayerAgentBridge() {
34
35
  const service = useOptionalSandboxService();
35
36
  const target = useSignalValue(service?.target ?? IDLE_SANDBOX_TARGET_SIGNAL);
36
37
  const onDatalayer = target === 'datalayer';
38
+ /*
39
+ * On the visitors' runtime, the application's agent made before the page
40
+ * follows it (STUDIO D-15): an application at its address has none until
41
+ * a visitor opens it, and its runtime holds no plugin of it until then —
42
+ * so the page's plugin of the pair (F-15) would stand down and its chat
43
+ * have nothing to speak to. Asked with a visitor's token, the runtime
44
+ * makes it and says which agent it is; the runtime is reported only then,
45
+ * and its refusal is said in its sentence.
46
+ */
47
+ const visitorAppId = createPayload?.app_spec
48
+ ?.id;
49
+ const [visitorAgent, setVisitorAgent] = useState({});
50
+ useEffect(() => {
51
+ setVisitorAgent({});
52
+ if (!visitors || !onDatalayer) {
53
+ return;
54
+ }
55
+ if (typeof visitorAppId !== 'string' || !visitorAppId) {
56
+ setVisitorAgent({
57
+ error: 'A conversation without an account runs an application: none was given.',
58
+ });
59
+ return;
60
+ }
61
+ let current = true;
62
+ ensureVisitorAgent(visitors, visitorAppId)
63
+ .then(() => {
64
+ if (current) {
65
+ setVisitorAgent({ ready: true });
66
+ }
67
+ })
68
+ .catch((error) => {
69
+ if (current) {
70
+ setVisitorAgent({
71
+ error: error instanceof Error ? error.message : String(error),
72
+ });
73
+ }
74
+ });
75
+ return () => {
76
+ current = false;
77
+ };
78
+ // By what it is, not by the host's object.
79
+ // eslint-disable-next-line react-hooks/exhaustive-deps
80
+ }, [
81
+ visitors?.url,
82
+ visitors?.app,
83
+ visitors?.inferenceUrl,
84
+ visitorAppId,
85
+ onDatalayer,
86
+ ]);
37
87
  /*
38
88
  * The agent hook, asked for a spec.
39
89
  *
@@ -91,6 +141,16 @@ export function DatalayerAgentBridge() {
91
141
  if (!service || !onDatalayer) {
92
142
  return;
93
143
  }
144
+ if (visitors) {
145
+ if (visitorAgent.error) {
146
+ service.setState('error', visitorAgent.error);
147
+ return;
148
+ }
149
+ if (!visitorAgent.ready) {
150
+ service.setState('starting');
151
+ return;
152
+ }
153
+ }
94
154
  if (already) {
95
155
  service.report({
96
156
  variant: 'datalayer',
@@ -135,7 +195,16 @@ export function DatalayerAgentBridge() {
135
195
  // host's server for an agent that is not on it.
136
196
  agent_base_url: runtime.agentBaseUrl,
137
197
  });
138
- }, [service, onDatalayer, runtime, status, error, already]);
198
+ }, [
199
+ service,
200
+ onDatalayer,
201
+ runtime,
202
+ status,
203
+ error,
204
+ already,
205
+ visitors,
206
+ visitorAgent,
207
+ ]);
139
208
  return null;
140
209
  }
141
210
  export default DatalayerAgentBridge;
@@ -266,8 +266,9 @@ export function createSwitchableSandboxService({ serverUrl, initialTarget = 'loc
266
266
  report(next) {
267
267
  active.peek().report(next);
268
268
  },
269
- setState(state) {
270
- active.peek().setState(state);
269
+ setState(state, reason) {
270
+ // With its reason: the chat says why there is nothing to talk to.
271
+ active.peek().setState(state, reason);
271
272
  },
272
273
  execute(code) {
273
274
  return active.peek().execute(code);
@@ -1187,7 +1187,17 @@ export default function ChatView({ workspace }) {
1187
1187
  * An application's session checks who is calling (LOOP R-32, R-04): its
1188
1188
  * chat says so with the person's token. The embed hands its own.
1189
1189
  */
1190
- const runsApp = Boolean(blueprintTurn?.createPayload?.app_spec);
1190
+ /*
1191
+ * Whether its host runs an application here, said by the host — not by
1192
+ * whether the application's plugin is up: while its runtime does not hold
1193
+ * it, its page plugin stands down (F-15), and its chat is then never sent
1194
+ * to the runtime's bare agent route — on the visitors' runtime one that is
1195
+ * not published (STUDIO D-15). It speaks to the application's session API,
1196
+ * whose refusal says why.
1197
+ */
1198
+ const runsApp = Boolean(blueprintTurn?.createPayload?.app_spec ||
1199
+ reactor.getConfig(AGENTS_PLUGIN_NAME)?.datalayerCreatePayload
1200
+ ?.app_spec);
1191
1201
  const memberToken = useIAMStore(state => state.token);
1192
1202
  /*
1193
1203
  * Without an account (LOOP R-30) the application runs on the visitors'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/agent-runtimes",
3
- "version": "1.3.99",
3
+ "version": "1.3.101",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -184,7 +184,10 @@ CASES: List[Dict[str, str]] = [
184
184
  },
185
185
  {
186
186
  "name": "a Frame the catalogue has not",
187
- "yaml": HEAD + "entry: sales\ncast:\n" + SALES + "setting:\n frames:\n - nosuch\n",
187
+ "yaml": HEAD
188
+ + "entry: sales\ncast:\n"
189
+ + SALES
190
+ + "setting:\n frames:\n - nosuch\n",
188
191
  },
189
192
  {
190
193
  "name": "the stage places someone not in the cast",
@@ -195,7 +198,10 @@ CASES: List[Dict[str, str]] = [
195
198
  },
196
199
  {
197
200
  "name": "a balloon opens first for someone not in the cast",
198
- "yaml": HEAD + "entry: sales\ncast:\n" + SALES + "stage:\n opens_first: ghost\n",
201
+ "yaml": HEAD
202
+ + "entry: sales\ncast:\n"
203
+ + SALES
204
+ + "stage:\n opens_first: ghost\n",
199
205
  },
200
206
  {
201
207
  "name": "an address for someone not in the cast",
@@ -458,40 +464,60 @@ rehearsal:
458
464
  # is played, and nothing of what each is (`scene_problems`).
459
465
  {
460
466
  "name": "a scene of a team that plays",
461
- "yaml": HEAD + "team: sales-and-accounting\ncast:\n - member: sales\n persona:\n name: Sales\n brief: Ask for the open invoices.\n",
467
+ "yaml": HEAD
468
+ + "team: sales-and-accounting\ncast:\n - member: sales\n persona:\n name: Sales\n brief: Ask for the open invoices.\n",
462
469
  },
463
470
  {
464
471
  "name": "a cast under a team names someone not in it",
465
- "yaml": HEAD + "team: sales-and-accounting\ncast:\n - member: ghost\n persona:\n name: Ghost\n",
472
+ "yaml": HEAD
473
+ + "team: sales-and-accounting\ncast:\n - member: ghost\n persona:\n name: Ghost\n",
466
474
  },
467
475
  {
468
476
  "name": "a cast under a team says what a member is",
469
- "yaml": HEAD + "team: sales-and-accounting\ncast:\n - member: sales\n app: sales\n persona:\n name: Sales\n",
477
+ "yaml": HEAD
478
+ + "team: sales-and-accounting\ncast:\n - member: sales\n app: sales\n persona:\n name: Sales\n",
470
479
  },
471
480
  # --- a tool a system is asked for: offered, offered for this, reached ---
472
481
  # What agentspecs reads of the catalogue's servers and connections
473
482
  # (`_tool_problem`): on a move of the script, and on a rehearsal's line.
474
483
  {
475
484
  "name": "a move asks a system for a tool it does not offer",
476
- "yaml": TOOL_SCENE.format(member="books", app="accounting", persona="Accounting", server="odoo-accounting")
485
+ "yaml": TOOL_SCENE.format(
486
+ member="books",
487
+ app="accounting",
488
+ persona="Accounting",
489
+ server="odoo-accounting",
490
+ )
477
491
  + "script:\n - id: open\n cue:\n say: Show the books\n expect: It is answered\n moves:\n"
478
492
  + " - who: books\n asks: odoo-accounting\n over: mcp\n tool: odoo_accounting_burn_the_books\n",
479
493
  },
480
494
  {
481
495
  "name": "a move asks for a tool to do what it does not",
482
- "yaml": TOOL_SCENE.format(member="crop", app="crop-monitoring", persona="Crop", server="earthdata")
496
+ "yaml": TOOL_SCENE.format(
497
+ member="crop", app="crop-monitoring", persona="Crop", server="earthdata"
498
+ )
483
499
  + "script:\n - id: look\n cue:\n say: What is there\n expect: It is answered\n moves:\n"
484
500
  + " - who: crop\n asks: earthdata\n over: mcp\n tool: download_earth_data_granules\n does: read\n",
485
501
  },
486
502
  {
487
503
  "name": "a move asks for a tool no connection of the member offers",
488
- "yaml": TOOL_SCENE.format(member="inbox", app="inbox-triage", persona="Inbox", server="google-workspace")
504
+ "yaml": TOOL_SCENE.format(
505
+ member="inbox",
506
+ app="inbox-triage",
507
+ persona="Inbox",
508
+ server="google-workspace",
509
+ )
489
510
  + "script:\n - id: mail\n cue:\n say: What came in\n expect: It is answered\n moves:\n"
490
511
  + " - who: inbox\n asks: google-workspace\n over: mcp\n tool: list_calendar_events\n",
491
512
  },
492
513
  {
493
514
  "name": "a rehearsal expects a tool a system does not offer",
494
- "yaml": TOOL_SCENE.format(member="books", app="accounting", persona="Accounting", server="odoo-accounting")
515
+ "yaml": TOOL_SCENE.format(
516
+ member="books",
517
+ app="accounting",
518
+ persona="Accounting",
519
+ server="odoo-accounting",
520
+ )
495
521
  + "script:\n - id: open\n cue:\n say: Show the books\n expect: It is answered\n moves:\n"
496
522
  + " - who: books\n answers: table\n"
497
523
  + "rehearsal:\n beats:\n - beat: open\n lines:\n"
@@ -508,7 +534,9 @@ rehearsal:
508
534
  },
509
535
  {
510
536
  "name": "a name that is a number",
511
- "yaml": HEAD.replace("name: Probe", "name: 123") + "entry: sales\ncast:\n" + SALES,
537
+ "yaml": HEAD.replace("name: Probe", "name: 123")
538
+ + "entry: sales\ncast:\n"
539
+ + SALES,
512
540
  },
513
541
  {
514
542
  "name": "a scene with no name",
@@ -524,11 +552,15 @@ rehearsal:
524
552
  },
525
553
  {
526
554
  "name": "a member running nowhere",
527
- "yaml": HEAD + "entry: sales\ncast:\n" + SALES.replace("runs_in: runtime", "runs_in: nowhere"),
555
+ "yaml": HEAD
556
+ + "entry: sales\ncast:\n"
557
+ + SALES.replace("runs_in: runtime", "runs_in: nowhere"),
528
558
  },
529
559
  {
530
560
  "name": "a member's role nobody plays",
531
- "yaml": HEAD + "entry: sales\ncast:\n" + SALES.replace("role: initiator", "role: boss"),
561
+ "yaml": HEAD
562
+ + "entry: sales\ncast:\n"
563
+ + SALES.replace("role: initiator", "role: boss"),
532
564
  },
533
565
  {
534
566
  "name": "an audience that is a word",
@@ -536,15 +568,24 @@ rehearsal:
536
568
  },
537
569
  {
538
570
  "name": "an audience nobody can be",
539
- "yaml": HEAD + "entry: sales\ncast:\n" + SALES + "audience:\n who: nobody-at-all\n",
571
+ "yaml": HEAD
572
+ + "entry: sales\ncast:\n"
573
+ + SALES
574
+ + "audience:\n who: nobody-at-all\n",
540
575
  },
541
576
  {
542
577
  "name": "a ceiling below nothing",
543
- "yaml": HEAD + "entry: sales\ncast:\n" + SALES + "audience:\n ceiling_per_ask: -1\n",
578
+ "yaml": HEAD
579
+ + "entry: sales\ncast:\n"
580
+ + SALES
581
+ + "audience:\n ceiling_per_ask: -1\n",
544
582
  },
545
583
  {
546
584
  "name": "a ceiling that is no number",
547
- "yaml": HEAD + "entry: sales\ncast:\n" + SALES + "audience:\n ceiling_per_ask: lots\n",
585
+ "yaml": HEAD
586
+ + "entry: sales\ncast:\n"
587
+ + SALES
588
+ + "audience:\n ceiling_per_ask: lots\n",
548
589
  },
549
590
  {
550
591
  "name": "a rehearsal bound that is no duration",
@@ -556,7 +597,10 @@ rehearsal:
556
597
  },
557
598
  {
558
599
  "name": "places that are a word",
559
- "yaml": HEAD + "entry: sales\ncast:\n" + SALES + "stage:\n positions: everywhere\n",
600
+ "yaml": HEAD
601
+ + "entry: sales\ncast:\n"
602
+ + SALES
603
+ + "stage:\n positions: everywhere\n",
560
604
  },
561
605
  {
562
606
  "name": "two things wrong at once",
@@ -567,13 +611,27 @@ rehearsal:
567
611
 
568
612
  def main() -> int:
569
613
  parser = argparse.ArgumentParser(description=__doc__)
570
- parser.add_argument("--agentspecs", type=Path, required=True, help="The agentspecs clone to read the checks from")
571
- parser.add_argument("--output", type=Path, required=True, help="The JSON table the browser's checks are held to")
614
+ parser.add_argument(
615
+ "--agentspecs",
616
+ type=Path,
617
+ required=True,
618
+ help="The agentspecs clone to read the checks from",
619
+ )
620
+ parser.add_argument(
621
+ "--output",
622
+ type=Path,
623
+ required=True,
624
+ help="The JSON table the browser's checks are held to",
625
+ )
572
626
  args = parser.parse_args()
573
627
 
574
628
  sys.path.insert(0, str(args.agentspecs.resolve()))
575
629
  import yaml # noqa: PLC0415
576
- from agentspecs.scenes import SceneError, parse_scene, scene_problems # noqa: PLC0415
630
+ from agentspecs.scenes import ( # noqa: PLC0415
631
+ SceneError,
632
+ parse_scene,
633
+ scene_problems,
634
+ )
577
635
 
578
636
  recorded: List[Dict[str, Any]] = []
579
637
  for case in CASES:
@@ -591,7 +649,9 @@ def main() -> int:
591
649
  "recordedWith": "scripts/record-scene-checks.py",
592
650
  "cases": recorded,
593
651
  }
594
- args.output.write_text(json.dumps(table, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
652
+ args.output.write_text(
653
+ json.dumps(table, indent=2, ensure_ascii=False) + "\n", encoding="utf-8"
654
+ )
595
655
  print(f"{len(recorded)} cases written to {args.output}")
596
656
  return 0
597
657
 
@@ -1 +0,0 @@
1
- import{v as E,be as $,cC as q,cD as y,j as D,bg as V}from"../datalayer-app-main.js";var k={Avatar:"prc-Avatar-Avatar-ZRS-m"};const w=20,T=E.forwardRef(function(A,u){const s=$.c(29);let o,i,a,l,n,d,f;s[0]!==A?({alt:n,size:d,square:f,sx:l,className:o,style:a,...i}=A,s[0]=A,s[1]=o,s[2]=i,s[3]=a,s[4]=l,s[5]=n,s[6]=d,s[7]=f):(o=s[1],i=s[2],a=s[3],l=s[4],n=s[5],d=s[6],f=s[7]);const m=n===void 0?"":n,t=d===void 0?w:d,g=f===void 0?!1:f;let p;s[8]!==t?(p=q(t),s[8]=t,s[9]=p):p=s[9];const r=p;let e;if(s[10]!==r||s[11]!==t){if(e={},r)for(const[h,j]of Object.entries(t))e[`--avatarSize-${h}`]=`${j}px`;else e["--avatarSize-regular"]=`${t}px`;s[10]=r,s[11]=t,s[12]=e}else e=s[12];let c;s[13]!==o?(c=y(o,k.Avatar),s[13]=o,s[14]=c):c=s[14];const R=r?"":void 0,z=g?"":void 0,S=r?void 0:t,b=r?void 0:t;let v;s[15]!==e||s[16]!==a?(v=a?{...e,...a}:e,s[15]=e,s[16]=a,s[17]=v):v=s[17];let x;return s[18]!==m||s[19]!==u||s[20]!==i||s[21]!==l||s[22]!==v||s[23]!==c||s[24]!==R||s[25]!==z||s[26]!==S||s[27]!==b?(x=D.jsx(V,{as:"img","data-component":"Avatar",className:c,ref:u,alt:m,"data-responsive":R,"data-square":z,width:S,height:b,style:v,sx:l,...i}),s[18]=m,s[19]=u,s[20]=i,s[21]=l,s[22]=v,s[23]=c,s[24]=R,s[25]=z,s[26]=S,s[27]=b,s[28]=x):x=s[28],x});export{T as A,w as D};