@datalayer/agent-runtimes 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/dist-embed/chunks/{AgentDetails-Bo0dD1KS.js → AgentDetails-KezohVQI.js} +1 -1
  2. package/dist-embed/chunks/{AgentDetailsDialog-JjCHYxMG.js → AgentDetailsDialog-CklhMnk7.js} +1 -1
  3. package/dist-embed/chunks/{AgentInspector-37Onz4of.js → AgentInspector-CtCaRc1L.js} +1 -1
  4. package/dist-embed/chunks/{AgentInspectorDialog-CCzGVAtX.js → AgentInspectorDialog-DB9cx3Gd.js} +1 -1
  5. package/dist-embed/chunks/Avatar-9MpXENSs.js +1 -0
  6. package/dist-embed/chunks/{CellSidebarExtension-CQlXdanG.js → CellSidebarExtension-CfaJL6DQ.js} +6 -6
  7. package/dist-embed/chunks/ChatView-Dc1x4aBR.js +32 -0
  8. package/dist-embed/chunks/{ContextPie-DBIUoPrq.js → ContextPie-1vP4f-3N.js} +1 -1
  9. package/dist-embed/chunks/DatalayerAgentBridge-D54Z9BZ3.js +1 -0
  10. package/dist-embed/chunks/{DeckComponent-CuRWiARr.js → DeckComponent-82GVdsoi.js} +2 -2
  11. package/dist-embed/chunks/{DocumentView-BYU2HREd.js → DocumentView-SrJloJDo.js} +2 -2
  12. package/dist-embed/chunks/{EphemeralDocument-BjFSuQKH.js → EphemeralDocument-t1KulOH8.js} +1 -1
  13. package/dist-embed/chunks/{EphemeralNotebook-DbS4f6yr.js → EphemeralNotebook-Co-WQWCc.js} +2 -2
  14. package/dist-embed/chunks/{ExcalidrawComponent-CFLnMPnf.js → ExcalidrawComponent-5NeLUYVB.js} +1 -1
  15. package/dist-embed/chunks/{ExcalidrawModal-CB9d5Vpk.js → ExcalidrawModal-9ZnOB03n.js} +1 -1
  16. package/dist-embed/chunks/{JupyterLexicalExtension-CYnZrelh.js → JupyterLexicalExtension-Cize8RXy.js} +29 -29
  17. package/dist-embed/chunks/{KernelVariables-KCUfxhF4.js → KernelVariables-Cl57Zze1.js} +2 -2
  18. package/dist-embed/chunks/{LexicalToolRegistry-CXLITkMD.js → LexicalToolRegistry-CoM9ROsx.js} +3 -3
  19. package/dist-embed/chunks/{NotebookSkeleton-HdM76lOj.js → NotebookSkeleton-CI7ovjNW.js} +1 -1
  20. package/dist-embed/chunks/{NotebookToolSurfaces-D62q-lbb.js → NotebookToolSurfaces-CWfppxBN.js} +1 -1
  21. package/dist-embed/chunks/{NotebookToolbar-DMKCe3c2.js → NotebookToolbar-rtMQZWHQ.js} +1 -1
  22. package/dist-embed/chunks/{NotebookView-Pps9dPZ7.js → NotebookView-DOf_K74b.js} +1 -1
  23. package/dist-embed/chunks/{Output-2KxoKu5F.js → Output-9DKTscSv.js} +10 -10
  24. package/dist-embed/chunks/{SandboxDetailsDialog-pkvlbdM2.js → SandboxDetailsDialog-BCfDm6MB.js} +1 -1
  25. package/dist-embed/chunks/{SchemaForm-Bqor7hh8.js → SchemaForm-BOYPrvf8.js} +1 -1
  26. package/dist-embed/chunks/{Toolbar-6Hdi_m3T.js → Toolbar-CGQDY041.js} +1 -1
  27. package/dist-embed/chunks/{WidgetVariableView-CJTAKqh1.js → WidgetVariableView-BTOwHP78.js} +1 -1
  28. package/dist-embed/chunks/YouTubePlugin-Bs4zZIB1.js +1 -0
  29. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-CWj4pFxo.js → abnfDiagram-VCTEODGH-D5p59vS_.js} +1 -1
  30. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-B4x7mfou.js → abnfDiagram-VCTEODGH-DRYbUvhc.js} +1 -1
  31. package/dist-embed/chunks/{ar-SA-G6X2FPQ2-C-zAYgA-.js → ar-SA-G6X2FPQ2-D6XRzkBS.js} +1 -1
  32. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-CRIN999O.js → architectureDiagram-5GKGNRK7-B7ITKDup.js} +1 -1
  33. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-B2D6lZbf.js → architectureDiagram-5GKGNRK7-DQGv0imf.js} +1 -1
  34. package/dist-embed/chunks/{az-AZ-76LH7QW2-BHq5js6U.js → az-AZ-76LH7QW2-DBTdUiqp.js} +1 -1
  35. package/dist-embed/chunks/{bg-BG-XCXSNQG7-BTcNNcTc.js → bg-BG-XCXSNQG7-DuhcsaSL.js} +1 -1
  36. package/dist-embed/chunks/{blockDiagram-868be97b-bBp9uGVj.js → blockDiagram-868be97b-DYe-XTjy.js} +1 -1
  37. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-DNdo_mUi.js → blockDiagram-I7D4REHJ-IltJXCd6.js} +1 -1
  38. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-CPHEppLa.js → blockDiagram-I7D4REHJ-y7tEFo3j.js} +1 -1
  39. package/dist-embed/chunks/{bn-BD-2XOGV67Q-DXRk27u1.js → bn-BD-2XOGV67Q-CPFeLVSN.js} +1 -1
  40. package/dist-embed/chunks/{c4Diagram-3f4bdde3-cYZlcE7E.js → c4Diagram-3f4bdde3-Bybp0wky.js} +1 -1
  41. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-DTmVwmmb.js → c4Diagram-7LVT6UL2-CizxVqqX.js} +1 -1
  42. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-BM2g5U7R.js → c4Diagram-7LVT6UL2-DpaHndz8.js} +1 -1
  43. package/dist-embed/chunks/{ca-ES-6MX7JW3Y-D-0J9rqp.js → ca-ES-6MX7JW3Y-gDR_kEC6.js} +1 -1
  44. package/dist-embed/chunks/{celltoolbartracker-D67W4XWx.js → celltoolbartracker-DLF4PWyW.js} +1 -1
  45. package/dist-embed/chunks/{chunk-2Q5K7J3B-CsB-r261.js → chunk-2Q5K7J3B-BI6lURun.js} +1 -1
  46. package/dist-embed/chunks/{chunk-2Q5K7J3B-CuegvedF.js → chunk-2Q5K7J3B-DWoLSrj9.js} +1 -1
  47. package/dist-embed/chunks/{chunk-5VM5RSS4-D4Ed2_vW.js → chunk-5VM5RSS4-CDh4wYym.js} +1 -1
  48. package/dist-embed/chunks/{chunk-5VM5RSS4-MJQ9uhYe.js → chunk-5VM5RSS4-SleuNqDC.js} +1 -1
  49. package/dist-embed/chunks/{chunk-F27PBJKO-DnjXjdOV.js → chunk-F27PBJKO-AvWsNGYY.js} +1 -1
  50. package/dist-embed/chunks/{chunk-F27PBJKO-BKTrewOm.js → chunk-F27PBJKO-h_FwJMTr.js} +1 -1
  51. package/dist-embed/chunks/{chunk-IMKFNOWR-Bf7PlvQM.js → chunk-IMKFNOWR-DGRceKiU.js} +1 -1
  52. package/dist-embed/chunks/{chunk-IMKFNOWR-BiXdYxxk.js → chunk-IMKFNOWR-Hx4a5yny.js} +1 -1
  53. package/dist-embed/chunks/{chunk-JWPE2WC7-DcVyhh3j.js → chunk-JWPE2WC7-A4gy2qc4.js} +1 -1
  54. package/dist-embed/chunks/{chunk-JWPE2WC7-DmWR08qa.js → chunk-JWPE2WC7-BuJactJo.js} +1 -1
  55. package/dist-embed/chunks/{chunk-POPQ4Y6H-Bw6JH9TT.js → chunk-POPQ4Y6H-CFM-817s.js} +1 -1
  56. package/dist-embed/chunks/{chunk-POPQ4Y6H-snvBGTqY.js → chunk-POPQ4Y6H-CmRF80iG.js} +1 -1
  57. package/dist-embed/chunks/{chunk-SVP7TREG-DLZdx--b.js → chunk-SVP7TREG-CryZx9JE.js} +1 -1
  58. package/dist-embed/chunks/{chunk-SVP7TREG-dE58fUkJ.js → chunk-SVP7TREG-DSNzmytH.js} +1 -1
  59. package/dist-embed/chunks/{chunk-TICWLB2K-DNXzQOV5.js → chunk-TICWLB2K-CEaDF8ZJ.js} +1 -1
  60. package/dist-embed/chunks/{chunk-TICWLB2K-4NdGhPfF.js → chunk-TICWLB2K-DyGS3fIj.js} +1 -1
  61. package/dist-embed/chunks/{chunk-XXDRQBXY-OKsVfhjO.js → chunk-XXDRQBXY-8Cnzpdjz.js} +1 -1
  62. package/dist-embed/chunks/{chunk-XXDRQBXY-D57w8SHP.js → chunk-XXDRQBXY-DxQBcVOz.js} +1 -1
  63. package/dist-embed/chunks/{classDiagram-ZZMXUADV-oYXGLbJe.js → classDiagram-ZZMXUADV-BQkO1UYr.js} +1 -1
  64. package/dist-embed/chunks/{classDiagram-ZZMXUADV-D35oEC_r.js → classDiagram-ZZMXUADV-yvP3zMO3.js} +1 -1
  65. package/dist-embed/chunks/{classDiagram-f62afe4f-DWY2Ws4r.js → classDiagram-f62afe4f-AYfpYKtp.js} +1 -1
  66. package/dist-embed/chunks/{classDiagram-v2-604399ef-By5ijR28.js → classDiagram-v2-604399ef-BWyNcT_y.js} +1 -1
  67. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-oYXGLbJe.js → classDiagram-v2-VYDZK3BY-BQkO1UYr.js} +1 -1
  68. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-D35oEC_r.js → classDiagram-v2-VYDZK3BY-yvP3zMO3.js} +1 -1
  69. package/dist-embed/chunks/{code-block-IT6T5CEO-DvUhQbDq.js → code-block-IT6T5CEO-F4BSIGY6.js} +1 -1
  70. package/dist-embed/chunks/{component-DquJEKgN.js → component-DMQ8W8n1.js} +3 -3
  71. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-j33onHvG.js → cose-bilkent-JH36ORCC-C3HC0XIY.js} +1 -1
  72. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-CfuJvtzg.js → cose-bilkent-JH36ORCC-MVxlcfpd.js} +1 -1
  73. package/dist-embed/chunks/{createText-aed3d8b3-DvlG46OI.js → createText-aed3d8b3-CEJODAXJ.js} +1 -1
  74. package/dist-embed/chunks/{cs-CZ-2BRQDIVT-CgN3I-57.js → cs-CZ-2BRQDIVT-BXQxcYp6.js} +1 -1
  75. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-YhGHtmc4.js → cynefinDiagram-5FMLGOSQ-D87ENxS0.js} +1 -1
  76. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-CPb2yRsU.js → cynefinDiagram-5FMLGOSQ-DNRKTIHx.js} +1 -1
  77. package/dist-embed/chunks/{da-DK-5WZEPLOC-CHQloSoX.js → da-DK-5WZEPLOC-Ck3vidj3.js} +1 -1
  78. package/dist-embed/chunks/{dagre-GXQ25YYZ-CSSSVwOB.js → dagre-GXQ25YYZ-BOhThFKd.js} +1 -1
  79. package/dist-embed/chunks/{dagre-GXQ25YYZ-bjTeZGWE.js → dagre-GXQ25YYZ-DscCD5Uq.js} +1 -1
  80. package/dist-embed/chunks/{de-DE-XR44H4JA-C-Hq84pe.js → de-DE-XR44H4JA-CPZgrOuc.js} +1 -1
  81. package/dist-embed/chunks/{diagram-S7CK7UJ4-CFdSwdyc.js → diagram-S7CK7UJ4-CUhme3Bl.js} +1 -1
  82. package/dist-embed/chunks/{diagram-S7CK7UJ4-CFDVHfda.js → diagram-S7CK7UJ4-zDQduoQy.js} +1 -1
  83. package/dist-embed/chunks/{diagram-UQ7AKVKN-DDaeau23.js → diagram-UQ7AKVKN-BxhQPjAM.js} +1 -1
  84. package/dist-embed/chunks/{diagram-UQ7AKVKN-GZbDy6ob.js → diagram-UQ7AKVKN-Byi-v8UN.js} +1 -1
  85. package/dist-embed/chunks/{diagram-VSXAHHWV-nXDiS81a.js → diagram-VSXAHHWV-CqihYkDH.js} +1 -1
  86. package/dist-embed/chunks/{diagram-VSXAHHWV-C6q67wko.js → diagram-VSXAHHWV-au-v2v9D.js} +1 -1
  87. package/dist-embed/chunks/{diagram-VX7I27RA-DQUkfMrD.js → diagram-VX7I27RA-Cd5PaF_n.js} +1 -1
  88. package/dist-embed/chunks/{diagram-VX7I27RA-CYLfpYa4.js → diagram-VX7I27RA-ETzwrw79.js} +1 -1
  89. package/dist-embed/chunks/{diagram-Z3DM3KII-DZziYptV.js → diagram-Z3DM3KII-AcMuRFo5.js} +1 -1
  90. package/dist-embed/chunks/{diagram-Z3DM3KII-v-9naUk_.js → diagram-Z3DM3KII-DkbsvY2A.js} +1 -1
  91. package/dist-embed/chunks/{document-BpXPH_dr.js → document-Dluvp7zl.js} +1 -1
  92. package/dist-embed/chunks/{drivecontents-Bg9_6Kmo.js → drivecontents-CxwZz_5W.js} +1 -1
  93. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-EvDUmZgJ.js → ebnfDiagram-PWID7BFC-BrEs-SB2.js} +1 -1
  94. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-CDmryeYY.js → ebnfDiagram-PWID7BFC-DuWfMZcD.js} +1 -1
  95. package/dist-embed/chunks/{edges-b2856ca0-CTakYT6h.js → edges-b2856ca0-Czd3-xvj.js} +1 -1
  96. package/dist-embed/chunks/{el-GR-BZB4AONW-MTzGcSsP.js → el-GR-BZB4AONW-CjQSkw0P.js} +1 -1
  97. package/dist-embed/chunks/{erDiagram-5d81789a-CpiBBm7t.js → erDiagram-5d81789a-JegaF4gy.js} +1 -1
  98. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-B2QZDDaO.js → erDiagram-RLTQ6QDP-Cpn6_cd1.js} +1 -1
  99. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-hsnql-YF.js → erDiagram-RLTQ6QDP-xubaXuKR.js} +1 -1
  100. package/dist-embed/chunks/{es-ES-U4NZUMDT-Thj-4Rwn.js → es-ES-U4NZUMDT-CQz3Tsxk.js} +1 -1
  101. package/dist-embed/chunks/{eu-ES-A7QVB2H4-BEEyNQo-.js → eu-ES-A7QVB2H4-DPwxHXvP.js} +1 -1
  102. package/dist-embed/chunks/{fa-IR-HGAKTJCU-CtUGmNBZ.js → fa-IR-HGAKTJCU-DlQyRFJP.js} +1 -1
  103. package/dist-embed/chunks/{fi-FI-Z5N7JZ37-6GMgpkSu.js → fi-FI-Z5N7JZ37-BL9Dv0rT.js} +1 -1
  104. package/dist-embed/chunks/{flowDb-185abca5-D4uRRPhl.js → flowDb-185abca5-BN_8lgCO.js} +1 -1
  105. package/dist-embed/chunks/{flowDiagram-1629c991-B999anFV.js → flowDiagram-1629c991-YRlRqB59.js} +1 -1
  106. package/dist-embed/chunks/{flowDiagram-HODETNUW-DY4I6lzA.js → flowDiagram-HODETNUW-CzRvxVGK.js} +1 -1
  107. package/dist-embed/chunks/{flowDiagram-HODETNUW-D4E8W9uH.js → flowDiagram-HODETNUW-lW-icIxi.js} +1 -1
  108. package/dist-embed/chunks/{flowDiagram-v2-1d953310-2W9bzV_S.js → flowDiagram-v2-1d953310-DBFSFroi.js} +1 -1
  109. package/dist-embed/chunks/{flowchart-elk-definition-6df44142-Cz-ICcxz.js → flowchart-elk-definition-6df44142-RjL83g27.js} +1 -1
  110. package/dist-embed/chunks/{fr-FR-RHASNOE6-BakNCbxj.js → fr-FR-RHASNOE6-xB7HyFVv.js} +1 -1
  111. package/dist-embed/chunks/{ganttDiagram-3b0b3873-CR9gwUWB.js → ganttDiagram-3b0b3873-Dowe9cKl.js} +1 -1
  112. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-CoCfE73i.js → ganttDiagram-EL5Y4UJY-CLaynGwe.js} +1 -1
  113. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-cZgkz4jA.js → ganttDiagram-EL5Y4UJY-CNQPBdAP.js} +1 -1
  114. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-CZEgVaQ_.js → gitGraphDiagram-WWUBYQGX-CDuBbPX3.js} +1 -1
  115. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-xXoxdFf9.js → gitGraphDiagram-WWUBYQGX-CupHqYWl.js} +1 -1
  116. package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-NdofvPL5.js → gitGraphDiagram-f01e8bc2-C06Sje1n.js} +1 -1
  117. package/dist-embed/chunks/{gl-ES-HMX3MZ6V-Cwkb9OPk.js → gl-ES-HMX3MZ6V-BX50ltap.js} +1 -1
  118. package/dist-embed/chunks/{he-IL-6SHJWFNN-BaMmvCkr.js → he-IL-6SHJWFNN-DR3hLzYG.js} +1 -1
  119. package/dist-embed/chunks/{hi-IN-IWLTKZ5I-1aWewhep.js → hi-IN-IWLTKZ5I-C3bSDqVc.js} +1 -1
  120. package/dist-embed/chunks/{hu-HU-A5ZG7DT2-BIHI23BQ.js → hu-HU-A5ZG7DT2--mRUDQG6.js} +1 -1
  121. package/dist-embed/chunks/{id-ID-SAP4L64H-CYpgmx8X.js → id-ID-SAP4L64H-D6psdwdp.js} +1 -1
  122. package/dist-embed/chunks/{index-W7TVoWP5.js → index-3O3ob63z.js} +15 -15
  123. package/dist-embed/chunks/{index-KgE-JGae.js → index-7F_pA42X.js} +4 -4
  124. package/dist-embed/chunks/{index-9bae90f3-D4JbZiwv.js → index-9bae90f3-BY7E8HZU.js} +1 -1
  125. package/dist-embed/chunks/{index-CMYyiALV.js → index-Azo_wV3K.js} +1 -1
  126. package/dist-embed/chunks/{index-BFPUYxvD.js → index-B063q-PC.js} +4 -4
  127. package/dist-embed/chunks/index-B0KVfQGJ.js +1 -0
  128. package/dist-embed/chunks/{index-BRBFWMMG.js → index-B2He8CnP.js} +1 -1
  129. package/dist-embed/chunks/{index-BAr0Q6NS.js → index-BExwmtFS.js} +1 -1
  130. package/dist-embed/chunks/{index-B3WvcNQa.js → index-BJhxZF_K.js} +1 -1
  131. package/dist-embed/chunks/{index-CXL3UCHy.js → index-BYMZi_1t.js} +1 -1
  132. package/dist-embed/chunks/{index-wovGU2zp.js → index-BblwlEJB.js} +1 -1
  133. package/dist-embed/chunks/{index-Fzz2KjFM.js → index-BdvS7Q4t.js} +1 -1
  134. package/dist-embed/chunks/{index-BbucLMre.js → index-BhU2ra4k.js} +3 -3
  135. package/dist-embed/chunks/{index-j-oeqTuo.js → index-BipXK1tF.js} +1 -1
  136. package/dist-embed/chunks/{index-1wTrAXI1.js → index-BlWZloLe.js} +3 -3
  137. package/dist-embed/chunks/{index-b1yzCiTq.js → index-BzXMsI1v.js} +1 -1
  138. package/dist-embed/chunks/{index-CPY91aGL.js → index-BzxtV5-v.js} +1 -1
  139. package/dist-embed/chunks/{index-C17RrmNV.js → index-C01nR1dW.js} +1 -1
  140. package/dist-embed/chunks/{index-t_gNTVoL.js → index-C643Hfu1.js} +1 -1
  141. package/dist-embed/chunks/{index-DMKsCn-y.js → index-C6wF35Kk.js} +10 -10
  142. package/dist-embed/chunks/{index-BhSMzuKq.js → index-C8IekrmL.js} +1 -1
  143. package/dist-embed/chunks/{index-BxjlpSy4.js → index-C9CpG6Nf.js} +1 -1
  144. package/dist-embed/chunks/{index-BUhqZVtg.js → index-CA8D7U2s.js} +2 -2
  145. package/dist-embed/chunks/{index-EmZm7_bH.js → index-CUL9WiLS.js} +5 -5
  146. package/dist-embed/chunks/{index-DeVZ-nmF.js → index-Cknn3VQD.js} +1 -1
  147. package/dist-embed/chunks/{index-BJ7Yskx5.js → index-CpcHHQd7.js} +1 -1
  148. package/dist-embed/chunks/{index-wzK_9qZx.js → index-CvBxCcaE.js} +1 -1
  149. package/dist-embed/chunks/{index-DkUimZI8.js → index-CzXnKkqM.js} +1 -1
  150. package/dist-embed/chunks/{index-Ck-wonpc.js → index-D0DBuFMt.js} +1 -1
  151. package/dist-embed/chunks/{index-CC-Ht79i.js → index-D1lY79hS.js} +4 -4
  152. package/dist-embed/chunks/{index-BFLtEBuP.js → index-DB46n9Tf.js} +2 -2
  153. package/dist-embed/chunks/{index-B7nmHsEo.js → index-DToDguC3.js} +1 -1
  154. package/dist-embed/chunks/{index-Bi5hexj-.js → index-DVDREi21.js} +1 -1
  155. package/dist-embed/chunks/{index-D18sf241.js → index-DVUMPcVw.js} +1 -1
  156. package/dist-embed/chunks/{index-ZZnjmFwm.js → index-DcZQ2Oqj.js} +1 -1
  157. package/dist-embed/chunks/{index-bRwN_nxZ.js → index-DvWWLOj6.js} +1 -1
  158. package/dist-embed/chunks/{index-Clp8quV1.js → index-Dv_XGY6Q.js} +1 -1
  159. package/dist-embed/chunks/{index-C3oDHYfa.js → index-DxsDy6PY.js} +1 -1
  160. package/dist-embed/chunks/{index-en9Yf1Yz.js → index-EpYurdzk.js} +6 -6
  161. package/dist-embed/chunks/{index-DIOcQUrz.js → index-MTdX216X.js} +1 -1
  162. package/dist-embed/chunks/{index-B2OWWcCj.js → index-YqGHzM2S.js} +1 -1
  163. package/dist-embed/chunks/{index-BvvaLLhn.js → index-a51XM5L8.js} +3 -3
  164. package/dist-embed/chunks/{index-CsZ2HycN.js → index-jy9kOmqu.js} +1 -1
  165. package/dist-embed/chunks/{index-e5PkgYFg.js → index-kpqZuE4J.js} +1 -1
  166. package/dist-embed/chunks/{index-DtlUttQj.js → index-qsUgit40.js} +1 -1
  167. package/dist-embed/chunks/{index-Cq19rGjf.js → index-rfsiH_M6.js} +1 -1
  168. package/dist-embed/chunks/{index-BYQwy0Zx.js → index-s3hayhRS.js} +2 -2
  169. package/dist-embed/chunks/{index.esm-RCuogyl2.js → index.esm-CWygaJYM.js} +1 -1
  170. package/dist-embed/chunks/{index.esm-CVNfNVDy.js → index.esm-DYeUXS4c.js} +1 -1
  171. package/dist-embed/chunks/{infoDiagram-27XIBGKW-DpFWmHEH.js → infoDiagram-27XIBGKW-Ctm-zk09.js} +1 -1
  172. package/dist-embed/chunks/{infoDiagram-27XIBGKW-DRf2y76w.js → infoDiagram-27XIBGKW-DRzH33_4.js} +1 -1
  173. package/dist-embed/chunks/{infoDiagram-a29d40f1-CehVkLUM.js → infoDiagram-a29d40f1-c78-ZMuT.js} +1 -1
  174. package/dist-embed/chunks/{isEqual-BybBNsZK.js → isEqual-niFNV5MZ.js} +1 -1
  175. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-C_d1mmp3.js → ishikawaDiagram-5VMMS53U-CILSTTqm.js} +1 -1
  176. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-B534qRQJ.js → ishikawaDiagram-5VMMS53U-DKv5KL85.js} +1 -1
  177. package/dist-embed/chunks/{it-IT-JPQ66NNP-CLcqplyX.js → it-IT-JPQ66NNP-BfrG_atL.js} +1 -1
  178. package/dist-embed/chunks/{ja-JP-DBVTYXUO-u8Qe6tR7.js → ja-JP-DBVTYXUO-sahpmNGY.js} +1 -1
  179. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-DEeA8WJr.js → journeyDiagram-3NMN7TZE-CSMQRlsr.js} +1 -1
  180. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-C0GQLJYz.js → journeyDiagram-3NMN7TZE-DlMPiHSP.js} +1 -1
  181. package/dist-embed/chunks/{journeyDiagram-95396277-Cwx_BI95.js → journeyDiagram-95396277-VzHClVrX.js} +1 -1
  182. package/dist-embed/chunks/{kaa-6HZHGXH3-BG2kx50I.js → kaa-6HZHGXH3-BrkhtXQj.js} +1 -1
  183. package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-CSYUpRxd.js → kab-KAB-ZGHBKWFO-DwtFIV_I.js} +1 -1
  184. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-DucvIyR1.js → kanban-definition-UXKFOSKX-BkxvAXq2.js} +1 -1
  185. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-Dww2l0wQ.js → kanban-definition-UXKFOSKX-esf1amn7.js} +1 -1
  186. package/dist-embed/chunks/{kk-KZ-P5N5QNE5-CpBMgHAz.js → kk-KZ-P5N5QNE5-UxN1LGH5.js} +1 -1
  187. package/dist-embed/chunks/{km-KH-HSX4SM5Z-CoMUUQMb.js → km-KH-HSX4SM5Z-B7lolfpy.js} +1 -1
  188. package/dist-embed/chunks/{ko-KR-MTYHY66A-DwxY8CGI.js → ko-KR-MTYHY66A-CnxefCaN.js} +1 -1
  189. package/dist-embed/chunks/{ku-TR-6OUDTVRD-UoNYUfm0.js → ku-TR-6OUDTVRD-Bt7bmFnv.js} +1 -1
  190. package/dist-embed/chunks/{layout-DiAMrtPi.js → layout-D7Mk1riq.js} +1 -1
  191. package/dist-embed/chunks/{layout-LNJhMVxV.js → layout-Sl9Lf6Ae.js} +1 -1
  192. package/dist-embed/chunks/{lexicalHooks-DEzWXVZY.js → lexicalHooks-DKF-DsxG.js} +1 -1
  193. package/dist-embed/chunks/{lt-LT-XHIRWOB4-Dr4uXaEj.js → lt-LT-XHIRWOB4-D6qkXs9m.js} +1 -1
  194. package/dist-embed/chunks/{lv-LV-5QDEKY6T-CNC56J-_.js → lv-LV-5QDEKY6T-D8g27j86.js} +1 -1
  195. package/dist-embed/chunks/{mermaid.core-huvnfV8t.js → mermaid.core-BhiOhb5K.js} +3 -3
  196. package/dist-embed/chunks/{mermaid.core-Dw1n-Hii.js → mermaid.core-CRlujv29.js} +5 -5
  197. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-DWUezf-k.js → mindmap-definition-YA3MSWOX-BJQsz4H1.js} +1 -1
  198. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-DKQu2lXp.js → mindmap-definition-YA3MSWOX-eCxs0BsL.js} +1 -1
  199. package/dist-embed/chunks/{mindmap-definition-e4c1d938-DSDPusnk.js → mindmap-definition-e4c1d938-DoGG9eDO.js} +1 -1
  200. package/dist-embed/chunks/{model-BHONoBA6.js → model-BziAhKNp.js} +1 -1
  201. package/dist-embed/chunks/{mr-IN-CRQNXWMA-BKWa9nzZ.js → mr-IN-CRQNXWMA-CMbVGyJm.js} +1 -1
  202. package/dist-embed/chunks/{my-MM-5M5IBNSE-bwAzOWhV.js → my-MM-5M5IBNSE-B-KPsx1j.js} +1 -1
  203. package/dist-embed/chunks/{nb-NO-T6EIAALU-CkpsChor.js → nb-NO-T6EIAALU-Cl7QLAt7.js} +1 -1
  204. package/dist-embed/chunks/{nl-NL-IS3SIHDZ-COVk4rlb.js → nl-NL-IS3SIHDZ-Brzte_o2.js} +1 -1
  205. package/dist-embed/chunks/{nn-NO-6E72VCQL-DlyFF-C1.js → nn-NO-6E72VCQL-CzCKEx02.js} +1 -1
  206. package/dist-embed/chunks/{oc-FR-POXYY2M6-CFDosV2C.js → oc-FR-POXYY2M6-DA72PkVY.js} +1 -1
  207. package/dist-embed/chunks/{pa-IN-N4M65BXN-BKRB3O0U.js → pa-IN-N4M65BXN-CzkFYtL0.js} +1 -1
  208. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-ChXFZFas.js → pegDiagram-XKGWAZYB-CD3xZvKE.js} +1 -1
  209. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-BUPTGFu3.js → pegDiagram-XKGWAZYB-CV-d6HkK.js} +1 -1
  210. package/dist-embed/chunks/{percentages-BXMCSKIN-D7pnqUsZ.js → percentages-BXMCSKIN-mjCCp4uI.js} +6 -6
  211. package/dist-embed/chunks/{pica-BQREYloS.js → pica-5TeyVfIV.js} +1 -1
  212. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-DAuVz3z-.js → pieDiagram-E7YTZNPT-DipS--g7.js} +1 -1
  213. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-BORvsKK0.js → pieDiagram-E7YTZNPT-toANOh_O.js} +1 -1
  214. package/dist-embed/chunks/{pieDiagram-c941bede-FM1PHjj3.js → pieDiagram-c941bede-DytniBrW.js} +1 -1
  215. package/dist-embed/chunks/{pl-PL-T2D74RX3-C5r2Tds7.js → pl-PL-T2D74RX3-F4ebFTYK.js} +1 -1
  216. package/dist-embed/chunks/{plugin-BoxsYxwM.js → plugin-Cf3g-jak.js} +1 -1
  217. package/dist-embed/chunks/plugin-DA_NCYQX.js +1 -0
  218. package/dist-embed/chunks/{pt-BR-5N22H2LF-CDnT98bW.js → pt-BR-5N22H2LF-B5i8LuE4.js} +1 -1
  219. package/dist-embed/chunks/{pt-PT-UZXXM6DQ-C6c4SPk1.js → pt-PT-UZXXM6DQ-BQ7hfRRg.js} +1 -1
  220. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-DpGcSrR9.js → quadrantDiagram-AXDQQJYC-D_j5dzK-.js} +1 -1
  221. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-CZe_C7e2.js → quadrantDiagram-AXDQQJYC-DlhtjZ-k.js} +1 -1
  222. package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-DZNznYqD.js → quadrantDiagram-cf8b8fe0-BQ2yjLYu.js} +1 -1
  223. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-CuL_zbZ8.js → railroadDiagram-O6MQD6OU-CZFkdwSz.js} +1 -1
  224. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-BnCn-tIV.js → railroadDiagram-O6MQD6OU-aWlxxhLc.js} +1 -1
  225. package/dist-embed/chunks/{renderer-lVFw9lw7.js → renderer-2D5v6hpK.js} +1 -1
  226. package/dist-embed/chunks/{requirementDiagram-53bda41b-BLToEv8I.js → requirementDiagram-53bda41b-CWV_b9FE.js} +1 -1
  227. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-KU7DW76t.js → requirementDiagram-BXWQKSXE-BSF51uZZ.js} +1 -1
  228. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-W6Oaw9v0.js → requirementDiagram-BXWQKSXE-EVwiX2gg.js} +1 -1
  229. package/dist-embed/chunks/{ro-RO-JPDTUUEW-CW6pbzEZ.js → ro-RO-JPDTUUEW-BdcZRS6h.js} +1 -1
  230. package/dist-embed/chunks/{ru-RU-B4JR7IUQ-CbaAJG0w.js → ru-RU-B4JR7IUQ-Cta1z8f6.js} +1 -1
  231. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-y5tPDHfE.js → sankeyDiagram-P5KCCOFB-BqD6w06O.js} +1 -1
  232. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-1UXJ4wHP.js → sankeyDiagram-P5KCCOFB-t6rHaBZJ.js} +1 -1
  233. package/dist-embed/chunks/{sankeyDiagram-c3ef121a-6gF3bcjb.js → sankeyDiagram-c3ef121a-C9O52Zx9.js} +1 -1
  234. package/dist-embed/chunks/{sequenceDiagram-82a5b84f-CglVrG1T.js → sequenceDiagram-82a5b84f-Dga-BwWi.js} +1 -1
  235. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-CG-4aOyN.js → sequenceDiagram-WJ2MYXX4-DphVeQVS.js} +1 -1
  236. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-DVcXqRnq.js → sequenceDiagram-WJ2MYXX4-ih6W0378.js} +1 -1
  237. package/dist-embed/chunks/{sessions-3PQsLINe.js → sessions-APuuDN3K.js} +2 -2
  238. package/dist-embed/chunks/{si-LK-N5RQ5JYF-BZkUjpXF.js → si-LK-N5RQ5JYF-DYy_OKHx.js} +1 -1
  239. package/dist-embed/chunks/{sizeCapture-INFHLROL-e294GOp7.js → sizeCapture-INFHLROL-CxIMCruL.js} +1 -1
  240. package/dist-embed/chunks/{sizeCapture-INFHLROL-CCZ7JXfm.js → sizeCapture-INFHLROL-o0dzt8-T.js} +1 -1
  241. package/dist-embed/chunks/{sk-SK-C5VTKIMK-DsfWgpPU.js → sk-SK-C5VTKIMK-B4A8rgzq.js} +1 -1
  242. package/dist-embed/chunks/{sl-SI-NN7IZMDC-Kx0FqxKU.js → sl-SI-NN7IZMDC-Dn2yU1RA.js} +1 -1
  243. package/dist-embed/chunks/{stateDiagram-43e79a5f-DktiQR1L.js → stateDiagram-43e79a5f-RBFnM6HD.js} +1 -1
  244. package/dist-embed/chunks/{stateDiagram-D77RDMKH-Czz7slb9.js → stateDiagram-D77RDMKH-DUbaZs3a.js} +1 -1
  245. package/dist-embed/chunks/{stateDiagram-D77RDMKH-DvgDxPXs.js → stateDiagram-D77RDMKH-R5RRRvFY.js} +1 -1
  246. package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-CGEkaZYz.js → stateDiagram-v2-2041ed4f-O5FpnsEz.js} +1 -1
  247. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-CbzbC1qh.js → stateDiagram-v2-MP3YSRHH-CxTXB7mT.js} +1 -1
  248. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-DGG9ROyK.js → stateDiagram-v2-MP3YSRHH-xKTLvXGN.js} +1 -1
  249. package/dist-embed/chunks/{styles-455b33cd-BpfBULhz.js → styles-455b33cd-D4Xv2qYx.js} +1 -1
  250. package/dist-embed/chunks/{styles-f932cba9-DsM5quNh.js → styles-f932cba9-BRIqeB8k.js} +1 -1
  251. package/dist-embed/chunks/{styles-fcc2142b-bC7I59Fx.js → styles-fcc2142b-CSNd2DtU.js} +1 -1
  252. package/dist-embed/chunks/{subset-shared.chunk-DM3l9OuH.js → subset-shared.chunk-SugOGKH0.js} +1 -1
  253. package/dist-embed/chunks/{subset-worker.chunk-4w4yibm3.js → subset-worker.chunk-CHn-RJwQ.js} +1 -1
  254. package/dist-embed/chunks/{sv-SE-XGPEYMSR-DY0ryO-L.js → sv-SE-XGPEYMSR-DIGNKjA1.js} +1 -1
  255. package/dist-embed/chunks/{svgDrawCommon-148a3cd9-OC_CIhNw.js → svgDrawCommon-148a3cd9-ioBjWI45.js} +1 -1
  256. package/dist-embed/chunks/{swimlanes-42K2YHIH-DLiqjxvc.js → swimlanes-42K2YHIH-BPXSOfWl.js} +1 -1
  257. package/dist-embed/chunks/{swimlanes-42K2YHIH-nfpJsGfW.js → swimlanes-42K2YHIH-DID4P1mJ.js} +1 -1
  258. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-DVkRheaE.js → swimlanesDiagram-VR7AAH4N-B216TpFb.js} +1 -1
  259. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-DjeQ0TlI.js → swimlanesDiagram-VR7AAH4N-C5LAWW5q.js} +1 -1
  260. package/dist-embed/chunks/{ta-IN-2NMHFXQM-CWpIs0i0.js → ta-IN-2NMHFXQM-h5n2V9ms.js} +1 -1
  261. package/dist-embed/chunks/{th-TH-HPSO5L25-Cwkcfb3u.js → th-TH-HPSO5L25-DPUFV7b6.js} +1 -1
  262. package/dist-embed/chunks/{timeline-definition-24CTP7MA-CapVlXMl.js → timeline-definition-24CTP7MA-CsrTDzso.js} +1 -1
  263. package/dist-embed/chunks/{timeline-definition-24CTP7MA-eOK0mNc7.js → timeline-definition-24CTP7MA-Y3tUsmSp.js} +1 -1
  264. package/dist-embed/chunks/{timeline-definition-7545f45a-afx9iuZR.js → timeline-definition-7545f45a-Dwe7O50H.js} +1 -1
  265. package/dist-embed/chunks/{tokens-BfuLIPUq.js → tokens-DTIgYcNS.js} +1 -1
  266. package/dist-embed/chunks/{tr-TR-DEFEU3FU-BqJZZl-Y.js → tr-TR-DEFEU3FU-BezJkdMx.js} +1 -1
  267. package/dist-embed/chunks/{uk-UA-QMV73CPH-Dg213mG4.js → uk-UA-QMV73CPH-CqILlosm.js} +1 -1
  268. package/dist-embed/chunks/{usePrimerThemeBridge-D_1NuGKb.js → usePrimerThemeBridge-CoHussa9.js} +1 -1
  269. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-D12hHdDQ.js → vennDiagram-4TSXK5OY-BhVdyHxt.js} +1 -1
  270. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-CJ0VIZqI.js → vennDiagram-4TSXK5OY-ClTlC2ql.js} +1 -1
  271. package/dist-embed/chunks/{vi-VN-M7AON7JQ-DY94NKxF.js → vi-VN-M7AON7JQ-CnkPVQ0a.js} +1 -1
  272. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-B1FfO2GD.js → wardleyDiagram-VM6X3IG4-DbWIMpvU.js} +1 -1
  273. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-BfuBJbTV.js → wardleyDiagram-VM6X3IG4-kS16z5iB.js} +1 -1
  274. package/dist-embed/chunks/{xychartDiagram-3f383b91-BMDhPCCG.js → xychartDiagram-3f383b91-DYoT_EjG.js} +1 -1
  275. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-xLO3w9Bz.js → xychartDiagram-S5SC5T6Z-CdwuwQAF.js} +1 -1
  276. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-DZ-XUHKl.js → xychartDiagram-S5SC5T6Z-KeQp-cQ1.js} +1 -1
  277. package/dist-embed/chunks/{zh-CN-LNUGB5OW-B6I9A7sA.js → zh-CN-LNUGB5OW-CNdfctAT.js} +1 -1
  278. package/dist-embed/chunks/{zh-HK-E62DVLB3-D3oqgDOt.js → zh-HK-E62DVLB3-DEXwa5-T.js} +1 -1
  279. package/dist-embed/chunks/{zh-TW-RAJ6MFWO-CYwgY0Jo.js → zh-TW-RAJ6MFWO-BF7cCYAK.js} +1 -1
  280. package/dist-embed/datalayer-app-main.js +49 -49
  281. package/lib/apps/apps/appspec.js +22 -0
  282. package/lib/apps/core/index.d.ts +8 -0
  283. package/lib/apps/embed/AppEmbed.js +10 -13
  284. package/lib/apps/embed/hostBridge.d.ts +47 -13
  285. package/lib/apps/embed/hostBridge.js +135 -18
  286. package/lib/apps/index.d.ts +2 -2
  287. package/lib/apps/index.js +2 -2
  288. package/lib/apps/plugins/agents/DatalayerAgentBridge.js +9 -14
  289. package/lib/apps/plugins/agents/index.d.ts +1 -1
  290. package/lib/apps/plugins/agents/index.js +1 -1
  291. package/lib/apps/plugins/agents/plugin.d.ts +10 -0
  292. package/lib/apps/plugins/agents/plugin.js +10 -0
  293. package/lib/apps/plugins/app-elements/QuestionView.d.ts +5 -3
  294. package/lib/apps/plugins/app-elements/QuestionView.js +15 -2
  295. package/lib/apps/plugins/app-page/appPageModel.d.ts +6 -8
  296. package/lib/apps/plugins/app-page/appPageModel.js +0 -2
  297. package/lib/apps/plugins/app-page/pageRun.d.ts +2 -2
  298. package/lib/apps/plugins/app-page/pageRun.js +3 -3
  299. package/lib/apps/plugins/chat/ChatView.js +22 -3
  300. package/lib/chat/base/ChatBase.js +33 -3
  301. package/lib/chat/base/uiFiles.d.ts +29 -0
  302. package/lib/chat/base/uiFiles.js +69 -0
  303. package/lib/chat/messages/ChatMessageList.d.ts +7 -2
  304. package/lib/chat/messages/ChatMessageList.js +2 -2
  305. package/lib/examples/ProtocolSignedRequestsExample.d.ts +10 -0
  306. package/lib/examples/ProtocolSignedRequestsExample.js +41 -0
  307. package/lib/examples/ProtocolUcpCheckoutExample.d.ts +10 -0
  308. package/lib/examples/ProtocolUcpCheckoutExample.js +59 -0
  309. package/lib/examples/example-selector.js +2 -0
  310. package/lib/examples/exampleGroups.d.ts +1 -1
  311. package/lib/examples/exampleGroups.js +4 -0
  312. package/lib/examples/index.d.ts +2 -0
  313. package/lib/examples/index.js +2 -0
  314. package/lib/examples/protocols/signedRequestsDemo.d.ts +27 -0
  315. package/lib/examples/protocols/signedRequestsDemo.js +59 -0
  316. package/lib/examples/protocols/ucpCheckoutDemo.d.ts +36 -0
  317. package/lib/examples/protocols/ucpCheckoutDemo.js +68 -0
  318. package/lib/protocols/a2a/index.js +1 -0
  319. package/lib/protocols/agentic-commerce/index.js +1 -0
  320. package/lib/protocols/core.d.ts +6 -0
  321. package/lib/protocols/mcp/index.js +1 -0
  322. package/lib/protocols/pact/index.js +1 -0
  323. package/lib/protocols/ucp/index.js +1 -0
  324. package/lib/protocols/ucp/merchant.d.ts +15 -0
  325. package/lib/protocols/ucp/merchant.js +257 -0
  326. package/lib/protocols/web-bot-auth/index.js +1 -0
  327. package/lib/specs/apps.js +87 -6
  328. package/lib/specs/appspecSchema.js +43 -0
  329. package/lib/types/agentspecs.d.ts +18 -0
  330. package/lib/types/protocol.d.ts +7 -0
  331. package/package.json +2 -2
  332. package/dist-embed/chunks/Avatar-DbU3YP4x.js +0 -1
  333. package/dist-embed/chunks/ChatView-BpKZPdcp.js +0 -32
  334. package/dist-embed/chunks/DatalayerAgentBridge-Bz2KWRXK.js +0 -1
  335. package/dist-embed/chunks/YouTubePlugin-CjODyxZ2.js +0 -1
  336. package/dist-embed/chunks/index-DlK9qLPz.js +0 -1
  337. package/dist-embed/chunks/plugin-Dz5L6Xn8.js +0 -1
@@ -145,6 +145,7 @@ export function emptyAppspec(kind = 'chat') {
145
145
  starters: [],
146
146
  commands: [],
147
147
  modes: [],
148
+ actions: [],
148
149
  profiles: [],
149
150
  language: DEFAULT_LANGUAGE,
150
151
  translations: {},
@@ -374,6 +375,17 @@ function parseRule(data) {
374
375
  };
375
376
  }
376
377
  /** A slash command (LOOP P-19); a wrong one is said by the checks. */
378
+ /** An action of its code, typed (REACTOR_UI RU-5): its payload's schema kept as written. */
379
+ function parseAction(data) {
380
+ const action = { name: text(data.name) };
381
+ if (text(data.description)) {
382
+ action.description = text(data.description);
383
+ }
384
+ if (isData(data.payload)) {
385
+ action.payload = JSON.parse(JSON.stringify(data.payload));
386
+ }
387
+ return action;
388
+ }
377
389
  function parseCommand(data) {
378
390
  return {
379
391
  name: text(data.name),
@@ -615,6 +627,7 @@ function parseInterface(data, kind) {
615
627
  starters: records(data.starters).map(parseStarter),
616
628
  commands: records(data.commands).map(parseCommand),
617
629
  modes: records(data.modes).map(parseMode),
630
+ actions: records(data.actions).map(parseAction),
618
631
  profiles: records(data.profiles).map(parseProfile),
619
632
  language: text(data.language, DEFAULT_LANGUAGE),
620
633
  translations: mapValues(recordsBy(data.translations), parseTranslation),
@@ -1084,6 +1097,15 @@ function dumpInterface(spec, kind) {
1084
1097
  written.data.default = mode.default;
1085
1098
  }
1086
1099
  return written.data;
1100
+ }))
1101
+ .list('actions', (spec.actions ?? []).map(action => {
1102
+ const written = new Writer()
1103
+ .text('name', action.name, '\u0000')
1104
+ .text('description', action.description ?? '');
1105
+ if (action.payload) {
1106
+ written.data.payload = { ...action.payload };
1107
+ }
1108
+ return written.data;
1087
1109
  }))
1088
1110
  .list('profiles', (spec.profiles ?? []).map(profile => new Writer()
1089
1111
  .text('id', profile.id, '\u0000')
@@ -634,6 +634,14 @@ export type LoopChatExtrasValue = {
634
634
  * client tool — A2UI Jupyter Output's `run_jupyter_output_demo`.
635
635
  */
636
636
  frontendTools?: FrontendToolDefinition[];
637
+ /**
638
+ * The ids of the `AgentTools` bundles (Reactor's) the chat hands its agent
639
+ * wherever it runs — on a runtime too, where the plugins' bundles are not
640
+ * otherwise given — each tool running its command on this workspace's
641
+ * reactor (REACTOR_UI RU-7): the host page's (`host`), which an embedded
642
+ * application calls as `host_<name>`.
643
+ */
644
+ agentToolBundles?: string[];
637
645
  /**
638
646
  * Take the composer off the screen, live.
639
647
  *
@@ -51,8 +51,7 @@ import { ChatFloating } from '../../chat/ChatFloating';
51
51
  import { AppRenderer, } from '../apps/AppRenderer';
52
52
  import { AssistantCharactersPlugin, assistantCharacterFor, assistantCharactersFrom, } from '../plugins/assistant-characters';
53
53
  import { floatingViewOf } from './embedConfig';
54
- import { createChatExtrasPlugin } from '../plugins/chat-extras';
55
- import { hostFrontendTools, hostUserRunProps, } from './hostBridge';
54
+ import { hostPlugin, hostUserRunProps } from './hostBridge';
56
55
  import { LoopRunProps } from '../core';
57
56
  import { embedThemeOverrides, embedThemeStyles } from './embedTheme';
58
57
  import { WINDOW_NOT_YET, embedSessionKey, postWindowMessage, reattachSession, sessionGoneSentence, sessionKeeper, visitOfToken, } from './embedSession';
@@ -185,16 +184,14 @@ const NO_HOST_PLUGINS = [];
185
184
  export function useHostBridge(app, host) {
186
185
  const hostRef = useRef(host);
187
186
  hostRef.current = host;
188
- const handle = useMemo(() => createChatExtrasPlugin(), []);
189
187
  const bridge = app.deployment.embedded?.host;
190
188
  const key = JSON.stringify([bridge ?? null, app.rules, app.connections]);
191
- useEffect(() => {
192
- handle.setExtras({
193
- frontendTools: hostFrontendTools(app, () => hostRef.current ?? {}),
194
- });
195
- // The tools change with what the Appspec names, and the rules that decide them.
196
- // eslint-disable-next-line react-hooks/exhaustive-deps
197
- }, [handle, key]);
189
+ // The host's plugin (REACTOR_UI RU-7): the page's functions as its
190
+ // commands, named for the agent by its agent tools bundle — made again
191
+ // when what the Appspec names, or the rules that decide them, change.
192
+ const hosting = useMemo(() => hostPlugin(app, () => hostRef.current ?? {}),
193
+ // eslint-disable-next-line react-hooks/exhaustive-deps
194
+ [app.id, key]);
198
195
  // Who its user is (D-21): the token the host's server signed goes with
199
196
  // every run, for an application that takes only a signed user.
200
197
  const signed = bridge?.user === 'signed';
@@ -215,9 +212,9 @@ export function useHostBridge(app, host) {
215
212
  // Made again only when whether it is signed changes.
216
213
  // eslint-disable-next-line react-hooks/exhaustive-deps
217
214
  }, [app.id, signed]);
218
- const plugins = useMemo(() => bridge
219
- ? [handle.plugin, ...(userPlugin ? [userPlugin] : [])]
220
- : NO_HOST_PLUGINS, [bridge, handle, userPlugin]);
215
+ const plugins = useMemo(() => hosting
216
+ ? [hosting, ...(userPlugin ? [userPlugin] : [])]
217
+ : NO_HOST_PLUGINS, [hosting, userPlugin]);
221
218
  // What its code tells the page during a turn (LOOP P-25), raised on it.
222
219
  useEffect(() => onLoopWindowMessage(data => hostRef.current?.onEvent?.({
223
220
  type: 'window-message',
@@ -27,20 +27,26 @@
27
27
  * reaches the page.
28
28
  *
29
29
  * Offered: the functions of the page its Appspec names
30
- * (`deployment.embedded.host.functions`), each called by its agent as the
31
- * tool `host_<name>`. Every one of these tools is decided in the page by
32
- * the rule that names it (`behaviourFor`), before the page is called: one no
33
- * rule names, or *leave it to me*, is refused; *ask me first* and *do it if
34
- * I asked* ask the person on the page (`ask`, else the browser's `confirm`),
35
- * and a call they do not allow is refused; *do it* is done.
30
+ * (`deployment.embedded.host.functions`), as Reactor has a plugin offer
31
+ * what it does (REACTOR_UI RU-7): each a **command** of the host's plugin,
32
+ * `host.<name>` (`host.context` for the values it passes), and the plugin's
33
+ * **agent tools** bundle (`AgentTools`, id `host`) naming them for its agent
34
+ * as the tools `host_<name>` and `host_context` — which the chat turns into
35
+ * tools that run `reactor.executeCommand`, as for any plugin's bundle, and
36
+ * hands its agent wherever it runs (`agentToolBundles`). Every one of these
37
+ * commands is decided in the page by the rule that names its tool
38
+ * (`behaviourFor`), before the page is called: one no rule names, or
39
+ * *leave it to me*, is refused; *ask me first* and *do it if I asked* ask
40
+ * the person on the page (`ask`, else the browser's `confirm`), and a call
41
+ * they do not allow is refused; *do it* is done.
36
42
  *
37
- * Pure: the tools call the page, and ask, through what they are given.
43
+ * Pure: the commands call the page, and ask, through what they are given.
38
44
  *
39
45
  * @module apps/embed/hostBridge
40
46
  */
47
+ import { type AgentToolBundle, type ReactorCommand, type ReactorPlugin } from '@datalayer/reactor';
41
48
  import type { AppSpec } from '../../types/agentspecs';
42
- import type { FrontendToolDefinition } from '../../types/tools';
43
- import type { RunPropsContribution } from '../core';
49
+ import { type RunPropsContribution } from '../core';
44
50
  import { HOST_CONTEXT_TOOL, HOST_NAME, hostTool, hostToolsOf, signedUser } from '../apps/hostTools';
45
51
  export { HOST_CONTEXT_TOOL, HOST_NAME, hostTool, hostToolsOf, signedUser };
46
52
  /** What the application tells the page it sits in. */
@@ -109,12 +115,40 @@ export type HostQuestion = {
109
115
  export declare const hostRefused: (tool: string) => string;
110
116
  /** The sentence a call is refused with when the person did not allow it. */
111
117
  export declare const hostNotAllowed: (tool: string) => string;
118
+ /** The command that reads what the page passes (`host_context`). */
119
+ export declare const HOST_CONTEXT_COMMAND = "host.context";
120
+ /** The command a function of the page runs as. */
121
+ export declare const hostCommand: (name: string) => string;
122
+ /** The id of the host plugin's agent tools bundle. */
123
+ export declare const HOST_TOOLS_BUNDLE = "host";
124
+ /** What a command of the host answers its tool: what came back, or why not. */
125
+ export type HostAnswer = {
126
+ values: Record<string, unknown>;
127
+ unsaid?: string[];
128
+ } | {
129
+ result?: unknown;
130
+ error?: string;
131
+ };
132
+ type HostCommand = ReactorCommand<Record<string, unknown> | undefined, HostAnswer>;
133
+ /**
134
+ * The host plugin's commands (REACTOR_UI RU-7): `host.context` when the
135
+ * Appspec names values, and `host.<name>` for each function it names, each
136
+ * decided by the rule naming its tool before the page is called. `host` is
137
+ * read at each call, so that what the page passes is the newest.
138
+ */
139
+ export declare function hostCommands(app: Pick<AppSpec, 'name' | 'connections' | 'rules' | 'deployment'>, host: () => AppEmbedHost): HostCommand[];
140
+ /**
141
+ * The host plugin's agent tools (REACTOR_UI RU-7): `host_context` and
142
+ * `host_<name>`, each running its command; `null` for an application the
143
+ * Appspec embeds with no host bridge.
144
+ */
145
+ export declare function hostAgentTools(app: Pick<AppSpec, 'name' | 'deployment'>): AgentToolBundle | null;
112
146
  /**
113
- * The frontend tools its agent is given for the page: `host_context` when
114
- * the Appspec names values, and `host_<name>` for each function it names.
115
- * `host` is read at each call, so that what the page passes is the newest.
147
+ * The host's plugin (REACTOR_UI RU-7): its commands, its agent tools bundle,
148
+ * and the chat extras that hand the bundle to the chat's agent wherever it
149
+ * runs. `null` for an application with no host bridge.
116
150
  */
117
- export declare function hostFrontendTools(app: Pick<AppSpec, 'connections' | 'rules' | 'deployment'>, host: () => AppEmbedHost): FrontendToolDefinition[];
151
+ export declare function hostPlugin(app: Pick<AppSpec, 'id' | 'name' | 'connections' | 'rules' | 'deployment'>, host: () => AppEmbedHost): ReactorPlugin<Record<string, never>, unknown, unknown> | null;
118
152
  /**
119
153
  * What goes with every run for the host's user (LOOP D-21): the token the
120
154
  * host's server signed, as `forwardedProps.loop.user_token`, for an
@@ -2,6 +2,54 @@
2
2
  * Copyright (c) 2025-2026 Datalayer, Inc.
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
+ /**
6
+ * The host page and an embedded application, talking (LOOP D-10).
7
+ *
8
+ * In: the values the page passes — `user`, `page`, or names of its own —
9
+ * read by the application's agent with the tool `host_context`, only those
10
+ * its Appspec names (`deployment.embedded.host.context`).
11
+ *
12
+ * Out: what the application does, as events — `message` when it has said
13
+ * something, `action` when it called a function of the page,
14
+ * `window-message` when its code told the page something outside the
15
+ * conversation (LOOP P-25, `session.send_window_message`) — beside the
16
+ * `decision` and `token-expired` the element raises already.
17
+ *
18
+ * Window messages, in (P-25): the page posts one with
19
+ * `element.postWindowMessage(data)`; its code's `@app.window` reads it, on
20
+ * the host's own server (`server`), and what it answers comes back as
21
+ * `window-message` events.
22
+ *
23
+ * Who its user is (LOOP D-21): what the page says as `user` is a claim.
24
+ * An application whose Appspec says `deployment.embedded.host.user: signed`
25
+ * takes only a token the host's **server** signed with the deployment's
26
+ * secret (HS256: `sub`, `name`, `exp` at most an hour away), which the page
27
+ * hands over as `userToken` (the element's `user-token`). It goes with every
28
+ * run as `forwardedProps.loop.user_token` (`hostUserRunProps`); the runtime
29
+ * verifies it where the session opens, refuses the session without it, and
30
+ * answers `host_context`'s `user` with the user it names. The secret never
31
+ * reaches the page.
32
+ *
33
+ * Offered: the functions of the page its Appspec names
34
+ * (`deployment.embedded.host.functions`), as Reactor has a plugin offer
35
+ * what it does (REACTOR_UI RU-7): each a **command** of the host's plugin,
36
+ * `host.<name>` (`host.context` for the values it passes), and the plugin's
37
+ * **agent tools** bundle (`AgentTools`, id `host`) naming them for its agent
38
+ * as the tools `host_<name>` and `host_context` — which the chat turns into
39
+ * tools that run `reactor.executeCommand`, as for any plugin's bundle, and
40
+ * hands its agent wherever it runs (`agentToolBundles`). Every one of these
41
+ * commands is decided in the page by the rule that names its tool
42
+ * (`behaviourFor`), before the page is called: one no rule names, or
43
+ * *leave it to me*, is refused; *ask me first* and *do it if I asked* ask
44
+ * the person on the page (`ask`, else the browser's `confirm`), and a call
45
+ * they do not allow is refused; *do it* is done.
46
+ *
47
+ * Pure: the commands call the page, and ask, through what they are given.
48
+ *
49
+ * @module apps/embed/hostBridge
50
+ */
51
+ import { AgentTools, contribution, defineAgentTools, definePlugin, signal, } from '@datalayer/reactor';
52
+ import { LoopChatExtras, } from '../core';
5
53
  import { behaviourFor } from '../apps/rules';
6
54
  import { HOST_CONTEXT_TOOL, HOST_NAME, hostTool, hostToolsOf, signedUser, } from '../apps/hostTools';
7
55
  export { HOST_CONTEXT_TOOL, HOST_NAME, hostTool, hostToolsOf, signedUser };
@@ -15,26 +63,33 @@ const confirmOnPage = (question) => typeof window !== 'undefined' && typeof wind
15
63
  : false;
16
64
  /** The words of the rule that names the tool, for the question. */
17
65
  const actionOf = (app, tool) => app.rules.find(rule => rule.appliesTo.includes(tool))?.action;
66
+ /** The command that reads what the page passes (`host_context`). */
67
+ export const HOST_CONTEXT_COMMAND = 'host.context';
68
+ /** The command a function of the page runs as. */
69
+ export const hostCommand = (name) => `host.${name}`;
70
+ /** The id of the host plugin's agent tools bundle. */
71
+ export const HOST_TOOLS_BUNDLE = 'host';
18
72
  /**
19
- * The frontend tools its agent is given for the page: `host_context` when
20
- * the Appspec names values, and `host_<name>` for each function it names.
21
- * `host` is read at each call, so that what the page passes is the newest.
73
+ * The host plugin's commands (REACTOR_UI RU-7): `host.context` when the
74
+ * Appspec names values, and `host.<name>` for each function it names, each
75
+ * decided by the rule naming its tool before the page is called. `host` is
76
+ * read at each call, so that what the page passes is the newest.
22
77
  */
23
- export function hostFrontendTools(app, host) {
78
+ export function hostCommands(app, host) {
24
79
  const bridge = app.deployment.embedded?.host;
25
80
  if (!bridge) {
26
81
  return [];
27
82
  }
28
83
  const behaviour = (tool) => behaviourFor(app, tool);
29
84
  const ruled = (tool) => behaviour(tool) !== 'leave_to_me';
30
- const tools = [];
85
+ const commands = [];
31
86
  if (bridge.context.length > 0) {
32
- tools.push({
33
- name: HOST_CONTEXT_TOOL,
34
- description: `What the page you are embedded in says of its visitor and of itself: ${bridge.context.join(', ')}. Read it before answering what depends on them.`,
35
- parameters: { type: 'object', properties: {} },
36
- location: 'frontend',
37
- handler: async () => {
87
+ commands.push({
88
+ id: HOST_CONTEXT_COMMAND,
89
+ name: `What the page says to ${app.name}`,
90
+ description: `Read ${bridge.context.join(', ')} from the page.`,
91
+ category: 'Host',
92
+ execute: async () => {
38
93
  if (!ruled(HOST_CONTEXT_TOOL)) {
39
94
  return { error: hostRefused(HOST_CONTEXT_TOOL) };
40
95
  }
@@ -55,12 +110,13 @@ export function hostFrontendTools(app, host) {
55
110
  }
56
111
  for (const fn of bridge.functions) {
57
112
  const tool = hostTool(fn.name);
58
- tools.push({
59
- name: tool,
60
- description: fn.description,
61
- parameters: fn.parameters,
62
- location: 'frontend',
63
- handler: async (args) => {
113
+ commands.push({
114
+ id: hostCommand(fn.name),
115
+ name: fn.description,
116
+ description: `The page's ${fn.name}.`,
117
+ category: 'Host',
118
+ execute: async (given) => {
119
+ const args = given ?? {};
64
120
  const said = (detail) => {
65
121
  host().onEvent?.({
66
122
  type: 'action',
@@ -100,7 +156,68 @@ export function hostFrontendTools(app, host) {
100
156
  },
101
157
  });
102
158
  }
103
- return tools;
159
+ return commands;
160
+ }
161
+ /**
162
+ * The host plugin's agent tools (REACTOR_UI RU-7): `host_context` and
163
+ * `host_<name>`, each running its command; `null` for an application the
164
+ * Appspec embeds with no host bridge.
165
+ */
166
+ export function hostAgentTools(app) {
167
+ const bridge = app.deployment.embedded?.host;
168
+ if (!bridge) {
169
+ return null;
170
+ }
171
+ return defineAgentTools({
172
+ id: HOST_TOOLS_BUNDLE,
173
+ name: `The page ${app.name} is embedded in`,
174
+ description: 'What the host page passes, and the functions it offers.',
175
+ commands: [
176
+ ...(bridge.context.length > 0
177
+ ? [
178
+ {
179
+ name: HOST_CONTEXT_TOOL,
180
+ command: HOST_CONTEXT_COMMAND,
181
+ description: `What the page you are embedded in says of its visitor and of itself: ${bridge.context.join(', ')}. Read it before answering what depends on them.`,
182
+ parameters: { type: 'object', properties: {} },
183
+ },
184
+ ]
185
+ : []),
186
+ ...bridge.functions.map(fn => ({
187
+ name: hostTool(fn.name),
188
+ command: hostCommand(fn.name),
189
+ description: fn.description,
190
+ parameters: fn.parameters,
191
+ })),
192
+ ],
193
+ });
194
+ }
195
+ /**
196
+ * The host's plugin (REACTOR_UI RU-7): its commands, its agent tools bundle,
197
+ * and the chat extras that hand the bundle to the chat's agent wherever it
198
+ * runs. `null` for an application with no host bridge.
199
+ */
200
+ export function hostPlugin(app, host) {
201
+ const bundle = hostAgentTools(app);
202
+ if (!bundle) {
203
+ return null;
204
+ }
205
+ const extras = {
206
+ id: `host-${app.id}`,
207
+ extras: signal({ agentToolBundles: [bundle.id] }),
208
+ };
209
+ return definePlugin({
210
+ name: `loop-host-${app.id}`,
211
+ displayName: `${app.name}: its host page`,
212
+ description: `The values the page passes ${app.name} and the functions it offers, as commands and agent tools.`,
213
+ octicon: 'browser',
214
+ emoji: '\u{1F310}',
215
+ commands: hostCommands(app, host),
216
+ contributes: [
217
+ contribution(AgentTools, bundle, { id: bundle.id }),
218
+ contribution(LoopChatExtras, extras, { id: extras.id }),
219
+ ],
220
+ });
104
221
  }
105
222
  /**
106
223
  * What goes with every run for the host's user (LOOP D-21): the token the
@@ -57,7 +57,7 @@ export { APP_ACTIVITY_PLUGIN_NAME, APP_ACTIVITY_WORDS, AppActivity, defineAppAct
57
57
  export { APP_COMPUTER_PLUGIN_NAME, AppComputer, defineAppComputerPlugin, } from './plugins/app-computer';
58
58
  export { GraphViewPlugin, GRAPH_PLUGIN_NAME, GRAPH_VIEW_TYPE, } from './plugins/graph';
59
59
  export { PluginsPanelPlugin, PLUGINS_PANEL_PLUGIN_NAME, PluginsPanel, } from './plugins/plugins-panel';
60
- export { AGENTS_PLUGIN_NAME, AgentsPlugin, SandboxSelector, browserSource, createBrowserSandboxService, createServerSandboxService, createSwitchableSandboxService, suppliedSource, useOptionalSandboxService, useSandboxService, type AgentsConfig, type AgentsOutput, type SandboxExecution, type SandboxService, type SandboxTarget, type ServiceManagerSource, type SwitchableSandboxService, } from './plugins/agents';
60
+ export { AGENTS_PLUGIN_NAME, AgentsPlugin, DEFAULT_DATALAYER_AGENTSPEC, SandboxSelector, browserSource, createBrowserSandboxService, createServerSandboxService, createSwitchableSandboxService, suppliedSource, useOptionalSandboxService, useSandboxService, type AgentsConfig, type AgentsOutput, type SandboxExecution, type SandboxService, type SandboxTarget, type ServiceManagerSource, type SwitchableSandboxService, } from './plugins/agents';
61
61
  export { DocumentPlugin, DOCUMENT_PLUGIN_NAME } from './plugins/document';
62
62
  export { DocumentToolbarPlugin, DOCUMENT_TOOLBAR_PLUGIN_NAME, } from './plugins/document-toolbar';
63
63
  export { ShellPlugin, EditorSelector, SHELL_PLUGIN_NAME, NONE_EDITOR, chooseEditor, EditorsPlugin, EDITORS_PLUGIN_NAME, type ShellPluginConfig, } from './plugins/shell';
@@ -70,7 +70,7 @@ export { PromptPlugin, PROMPT_PLUGIN_NAME } from './plugins/prompt';
70
70
  export { LoopEmbed, type LoopEmbedProps } from './embed/LoopEmbed';
71
71
  export { AppEmbed, AppFloating, embedAssistantCharacter, type AppEmbedProps, type AppFloatingProps, type EmbedSession, useEmbedSession, useHostBridge, } from './embed/AppEmbed';
72
72
  export { EMBED_SESSION_KEY_PREFIX, embedSessionKey, visitOfToken, } from './embed/embedSession';
73
- export { HOST_CONTEXT_TOOL, hostFrontendTools, hostNotAllowed, hostRefused, hostTool, hostToolsOf, hostUserRunProps, fetchUserToken, signedUser, type SignedUserToken, type AppEmbedHost, type HostEvent, type HostFunction, type HostQuestion, } from './embed/hostBridge';
73
+ export { HOST_CONTEXT_COMMAND, HOST_CONTEXT_TOOL, HOST_TOOLS_BUNDLE, hostAgentTools, hostCommand, hostCommands, hostPlugin, hostNotAllowed, hostRefused, hostTool, hostToolsOf, hostUserRunProps, fetchUserToken, signedUser, type SignedUserToken, type AppEmbedHost, type HostEvent, type HostFunction, type HostQuestion, } from './embed/hostBridge';
74
74
  export { defineDatalayerAppElement, type DatalayerAppElementOptions, } from './embed/element';
75
75
  export { EMBED_ATTRIBUTES, EMBED_HOST_VARIABLES, EMBED_TAG, embedLookOf, embedSnippetOf, floatingViewOf, languageOf, resumeOf, type EmbedLook, type EmbedSnippetOptions, } from './embed/embedConfig';
76
76
  export { SubagentActivityPlugin, SubagentPulse, SUBAGENT_ACTIVITY_PLUGIN_NAME, } from './plugins/subagent-activity';
package/lib/apps/index.js CHANGED
@@ -70,7 +70,7 @@ export { APP_ACTIVITY_PLUGIN_NAME, APP_ACTIVITY_WORDS, AppActivity, defineAppAct
70
70
  export { APP_COMPUTER_PLUGIN_NAME, AppComputer, defineAppComputerPlugin, } from './plugins/app-computer';
71
71
  export { GraphViewPlugin, GRAPH_PLUGIN_NAME, GRAPH_VIEW_TYPE, } from './plugins/graph';
72
72
  export { PluginsPanelPlugin, PLUGINS_PANEL_PLUGIN_NAME, PluginsPanel, } from './plugins/plugins-panel';
73
- export { AGENTS_PLUGIN_NAME, AgentsPlugin, SandboxSelector, browserSource, createBrowserSandboxService, createServerSandboxService, createSwitchableSandboxService, suppliedSource, useOptionalSandboxService, useSandboxService, } from './plugins/agents';
73
+ export { AGENTS_PLUGIN_NAME, AgentsPlugin, DEFAULT_DATALAYER_AGENTSPEC, SandboxSelector, browserSource, createBrowserSandboxService, createServerSandboxService, createSwitchableSandboxService, suppliedSource, useOptionalSandboxService, useSandboxService, } from './plugins/agents';
74
74
  export { DocumentPlugin, DOCUMENT_PLUGIN_NAME } from './plugins/document';
75
75
  export { DocumentToolbarPlugin, DOCUMENT_TOOLBAR_PLUGIN_NAME, } from './plugins/document-toolbar';
76
76
  export { ShellPlugin, EditorSelector, SHELL_PLUGIN_NAME, NONE_EDITOR, chooseEditor,
@@ -91,7 +91,7 @@ export { LoopEmbed } from './embed/LoopEmbed';
91
91
  export { AppEmbed, AppFloating, embedAssistantCharacter, useEmbedSession, useHostBridge, } from './embed/AppEmbed';
92
92
  export { EMBED_SESSION_KEY_PREFIX, embedSessionKey, visitOfToken, } from './embed/embedSession';
93
93
  // The host page and an embedded application, talking (LOOP D-10).
94
- export { HOST_CONTEXT_TOOL, hostFrontendTools, hostNotAllowed, hostRefused, hostTool, hostToolsOf, hostUserRunProps, fetchUserToken, signedUser, } from './embed/hostBridge';
94
+ export { HOST_CONTEXT_COMMAND, HOST_CONTEXT_TOOL, HOST_TOOLS_BUNDLE, hostAgentTools, hostCommand, hostCommands, hostPlugin, hostNotAllowed, hostRefused, hostTool, hostToolsOf, hostUserRunProps, fetchUserToken, signedUser, } from './embed/hostBridge';
95
95
  export { defineDatalayerAppElement, } from './embed/element';
96
96
  export { EMBED_ATTRIBUTES, EMBED_HOST_VARIABLES, EMBED_TAG, embedLookOf, embedSnippetOf, floatingViewOf, languageOf, resumeOf, } from './embed/embedConfig';
97
97
  export { SubagentActivityPlugin, SubagentPulse, SUBAGENT_ACTIVITY_PLUGIN_NAME, } from './plugins/subagent-activity';
@@ -9,16 +9,8 @@ import { ensureVisitorAgent } from '../../apps/visitorToken';
9
9
  import { AGENTSPECS } from '../../../specs/agents/agents';
10
10
  import { IDLE_SANDBOX_TARGET_SIGNAL } from '../../core';
11
11
  import { appLaunchOf } from './appLaunch';
12
- import { AGENTS_PLUGIN_NAME } from './plugin';
12
+ import { AGENTS_PLUGIN_NAME, DEFAULT_DATALAYER_AGENTSPEC, } from './plugin';
13
13
  import { useOptionalSandboxService } from './useSandboxService';
14
- /**
15
- * The tutor.
16
- *
17
- * The front door of the notebook team, and the agent a person landing on a
18
- * Datalayer runtime should meet first. A host that wants another names it in
19
- * this plugin's config.
20
- */
21
- const DEFAULT_DATALAYER_AGENTSPEC = 'jupyter-tutor';
22
14
  export function DatalayerAgentBridge() {
23
15
  const reactor = useReactorPlatform();
24
16
  const agentsConfig = reactor.getConfig(AGENTS_PLUGIN_NAME);
@@ -107,13 +99,16 @@ export function DatalayerAgentBridge() {
107
99
  */
108
100
  // An application names its own agent and transport; a bare spec, the spec's.
109
101
  const agentName = typeof createPayload?.name === 'string' ? createPayload.name : agentSpecId;
110
- const protocol = createPayload?.transport === 'ag-ui' ||
111
- createPayload?.transport === 'vercel-ai'
112
- ? createPayload.transport
113
- : undefined;
102
+ /*
103
+ * AG-UI unless the application names another: the workspace's chat speaks
104
+ * AG-UI to an agent on a server (`/api/v1/ag-ui/<agent>/`). Left unsaid, a
105
+ * bare spec's agent was created with the runtime's default, Vercel AI, and
106
+ * every message the workspace sent it on Datalayer was a 404 (2026-10-12).
107
+ */
108
+ const protocol = createPayload?.transport === 'vercel-ai' ? 'vercel-ai' : 'ag-ui';
114
109
  const agentConfig = useMemo(() => ({
115
110
  name: agentName,
116
- ...(protocol ? { protocol } : {}),
111
+ protocol,
117
112
  agentSpecId,
118
113
  model: AGENTSPECS[agentSpecId]?.model,
119
114
  description: AGENTSPECS[agentSpecId]?.description,
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module apps/plugins/agents
5
5
  */
6
- export { AGENTS_PLUGIN_NAME, AgentsPlugin, type AgentsConfig, type AgentsOutput, } from './plugin';
6
+ export { AGENTS_PLUGIN_NAME, AgentsPlugin, DEFAULT_DATALAYER_AGENTSPEC, type AgentsConfig, type AgentsOutput, } from './plugin';
7
7
  export { AgentsPlugin as default } from './plugin';
8
8
  export { browserSource, createBrowserSandboxService, suppliedSource, type BrowserSandboxService, type ServiceManagerSource, } from './browserService';
9
9
  export { createServerSandboxService, summarize, type SandboxExecution, type SandboxService, type SandboxStatusPayload, } from './service';
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module apps/plugins/agents
9
9
  */
10
- export { AGENTS_PLUGIN_NAME, AgentsPlugin, } from './plugin';
10
+ export { AGENTS_PLUGIN_NAME, AgentsPlugin, DEFAULT_DATALAYER_AGENTSPEC, } from './plugin';
11
11
  export { AgentsPlugin as default } from './plugin';
12
12
  export { browserSource, createBrowserSandboxService, suppliedSource, } from './browserService';
13
13
  export { createServerSandboxService, summarize, } from './service';
@@ -20,6 +20,16 @@ import type { ReactorSlotComponent } from '@datalayer/reactor/react';
20
20
  import type { ServiceManagerSource } from './browserService';
21
21
  import { type TeamSelection } from './team';
22
22
  import { type SandboxTarget, type SwitchableSandboxService } from './switchable';
23
+ /**
24
+ * The tutor.
25
+ *
26
+ * The front door of the notebook team, and the agent a person landing on a
27
+ * Datalayer runtime should meet first. A host that wants another names it in
28
+ * this plugin's config. Here, beside the plugin rather than in the bridge, so
29
+ * that a host describing the agent its workspace runs on Datalayer can name
30
+ * it without loading the bridge's runtime stack.
31
+ */
32
+ export declare const DEFAULT_DATALAYER_AGENTSPEC = "jupyter-tutor";
23
33
  export declare const AGENTS_PLUGIN_NAME = "@datalayer/loop-plugin-agents";
24
34
  export type AgentsConfig = {
25
35
  /** Server the server-backed targets are reached through. */
@@ -13,6 +13,16 @@ import { SandboxSelector } from './SandboxSelector';
13
13
  import { TeamMemberPicker } from './TeamMemberPicker';
14
14
  import { createTeamSelection } from './team';
15
15
  import { createSwitchableSandboxService, heldTargetReason, TARGET_SPECS, targetHasAgent, } from './switchable';
16
+ /**
17
+ * The tutor.
18
+ *
19
+ * The front door of the notebook team, and the agent a person landing on a
20
+ * Datalayer runtime should meet first. A host that wants another names it in
21
+ * this plugin's config. Here, beside the plugin rather than in the bridge, so
22
+ * that a host describing the agent its workspace runs on Datalayer can name
23
+ * it without loading the bridge's runtime stack.
24
+ */
25
+ export const DEFAULT_DATALAYER_AGENTSPEC = 'jupyter-tutor';
16
26
  export const AGENTS_PLUGIN_NAME = '@datalayer/loop-plugin-agents';
17
27
  /** The target asked for, or the page itself when this page holds it. */
18
28
  const offeredTarget = (target, serverUrl) => (heldTargetReason(target, serverUrl) ? 'browser' : target);
@@ -4,8 +4,10 @@
4
4
  * message that asks it in words. A choice is its buttons — a rule's prompt
5
5
  * is Allow and Refuse — the words a field, a form its fields; each press of
6
6
  * it is `reactor.answer`, through the display's `act`, which the chat sends
7
- * up the conversation's ui socket. A file is attached in the composer (until
8
- * RU-6). Answered, it says what answered it, and offers nothing.
7
+ * up the conversation's ui socket. A file is chosen here, uploaded first
8
+ * through the display's `upload`, and its ref is the answer (RU-6): its
9
+ * bytes never ride in the press. Answered, it says what answered it, and
10
+ * offers nothing.
9
11
  *
10
12
  * @module apps/plugins/app-elements/QuestionView
11
13
  */
@@ -24,5 +26,5 @@ export declare function questionOf(display: Display): {
24
26
  answered: string | null;
25
27
  answerable: boolean;
26
28
  };
27
- export declare function QuestionView({ display, act }: RendererProps): JSX.Element;
29
+ export declare function QuestionView({ display, act, upload, }: RendererProps): JSX.Element;
28
30
  export default QuestionView;
@@ -32,7 +32,7 @@ export function questionOf(display) {
32
32
  answerable: (display.actions ?? []).some(offer => offer.name === ANSWER_ACTION),
33
33
  };
34
34
  }
35
- export function QuestionView({ display, act }) {
35
+ export function QuestionView({ display, act, upload, }) {
36
36
  const question = questionOf(display);
37
37
  const [words, setWords] = useState('');
38
38
  const [said, setSaid] = useState(null);
@@ -52,6 +52,19 @@ export function QuestionView({ display, act }) {
52
52
  event.preventDefault();
53
53
  if (words.trim())
54
54
  answer(words.trim());
55
- }, children: [_jsx(TextInput, { "aria-label": question.prompt, value: words, disabled: !live, onChange: event => setWords(event.target.value) }), _jsx(Button, { type: "submit", size: "small", disabled: !live || !words.trim(), children: "Answer" })] })) : null, question.kind === 'form' ? (_jsx(Suspense, { fallback: null, children: _jsx(SchemaForm, { schema: question.form, disabled: !live, onSubmit: ({ formData }) => answer(formData ?? {}) }) })) : null, question.kind === 'file' ? (_jsxs(Text, { as: "p", sx: { color: 'fg.muted', fontSize: 1, m: 0 }, children: ["Attach the file in the message box", question.accept.length ? ` (${question.accept.join(', ')})` : '', "."] })) : null, said ? (_jsx(Text, { as: "p", sx: { color: 'danger.fg', fontSize: 1, m: 0 }, children: said })) : null] }));
55
+ }, children: [_jsx(TextInput, { "aria-label": question.prompt, value: words, disabled: !live, onChange: event => setWords(event.target.value) }), _jsx(Button, { type: "submit", size: "small", disabled: !live || !words.trim(), children: "Answer" })] })) : null, question.kind === 'form' ? (_jsx(Suspense, { fallback: null, children: _jsx(SchemaForm, { schema: question.form, disabled: !live, onSubmit: ({ formData }) => answer(formData ?? {}) }) })) : null, question.kind === 'file' ? (_jsx("input", { type: "file", "aria-label": question.prompt, accept: question.accept.join(',') || undefined, disabled: !live || !upload, onChange: event => {
56
+ const chosen = event.target.files?.[0];
57
+ if (!chosen)
58
+ return;
59
+ if (!upload) {
60
+ setSaid('The chat cannot take a file here.');
61
+ return;
62
+ }
63
+ setSaid(null);
64
+ // Uploaded first: the answer is its ref (REACTOR_UI RU-6).
65
+ void upload(chosen)
66
+ .then(ref => answer(ref))
67
+ .catch((failure) => setSaid(failure instanceof Error ? failure.message : String(failure)));
68
+ } })) : null, said ? (_jsx(Text, { as: "p", sx: { color: 'danger.fg', fontSize: 1, m: 0 }, children: said })) : null] }));
56
69
  }
57
70
  export default QuestionView;
@@ -162,16 +162,14 @@ export declare function settingsOf(app: Pick<AppSpec, 'interface'>, inputs: unkn
162
162
  */
163
163
  export declare function pageInputsOf(app: Pick<AppSpec, 'kind' | 'interface'>, inputs: unknown): Record<string, unknown>;
164
164
  /**
165
- * What the page did besides its message, for the session API: the action of
166
- * the block pressed, the files given with it, the settings it holds. Sent
167
- * with the chat's own run (AG-UI's `forwardedProps.loop`), so that what it
168
- * answers streams in the conversation (LOOP R-04).
165
+ * What the page did besides its message, for the session API: the files
166
+ * given with it, the settings it holds. Sent with the chat's own run (AG-UI's
167
+ * `forwardedProps.loop`), so that what it answers streams in the
168
+ * conversation (LOOP R-04). A block sends a message, never an action of its
169
+ * own: an action of the application's code is pressed with the token its
170
+ * session offered, up the ui socket (REACTOR_UI RU-5).
169
171
  */
170
172
  export type AppPageLoop = {
171
- action: {
172
- name: string;
173
- payload: Record<string, unknown>;
174
- };
175
173
  files?: GivenFile[];
176
174
  settings?: Record<string, unknown>;
177
175
  };
@@ -474,9 +474,7 @@ export function appPageAction(app, event, read, lastInputs = '') {
474
474
  const message = typeof given === 'string' ? given.trim() : '';
475
475
  const inputs = paths.inputs ? inputsInWords(app, read('/inputs')) : '';
476
476
  const settings = paths.inputs ? settingsOf(app, read('/inputs')) : undefined;
477
- const payload = Object.fromEntries(Object.entries(event.context ?? {}).filter(([key]) => key !== 'message' && key !== 'files'));
478
477
  const loop = (files) => ({
479
- action: { name: event.name, payload },
480
478
  ...(files && files.length > 0 ? { files } : {}),
481
479
  ...(settings ? { settings } : {}),
482
480
  });
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * The page opens a session of the application's agent on its runtime
5
5
  * (`POST /api/v1/apps/sessions`), then, each time an input changes, sends
6
- * them all as the session's `page` action (`POST …/sessions/{uid}/actions`,
7
- * `{name: "page", payload: {inputs}}`). The runtime checks them against the
6
+ * them all to its page (`POST …/sessions/{uid}/page`, `{inputs}`) — not an
7
+ * action of its code (REACTOR_UI RU-5). The runtime checks them against the
8
8
  * page's form — refused with 422 and a sentence — runs its code's
9
9
  * `@app.page` on them, and answers its outputs as a `CUSTOM` event named
10
10
  * `loop.page`, `{inputs, outputs}`, which the page shows in place. Nothing is