@datalayer/agent-runtimes 1.5.22 → 1.5.24

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 (257) hide show
  1. package/dist-embed/chunks/{AgentDetails-B6vekLFY.js → AgentDetails-Xvq2IvHg.js} +1 -1
  2. package/dist-embed/chunks/{AgentDetailsDialog-C-o8qFsS.js → AgentDetailsDialog-DmtKB_5z.js} +1 -1
  3. package/dist-embed/chunks/{CellSidebarExtension-BBXRIRgA.js → CellSidebarExtension-B-73cmcQ.js} +1 -1
  4. package/dist-embed/chunks/{ChatView-BjZ993Ch.js → ChatView-CUWE6I5M.js} +3 -3
  5. package/dist-embed/chunks/{ContextPie-Daf19Ivt.js → ContextPie-DdsXl5s7.js} +1 -1
  6. package/dist-embed/chunks/{DeckComponent-C76a8LYD.js → DeckComponent-ymp4My5d.js} +2 -2
  7. package/dist-embed/chunks/{DocumentView-BZhbQkbP.js → DocumentView-i99p_Qzt.js} +1 -1
  8. package/dist-embed/chunks/{EphemeralDocument-Bzv1mPpG.js → EphemeralDocument--pV47gPl.js} +1 -1
  9. package/dist-embed/chunks/{EphemeralNotebook-C4_wmSgk.js → EphemeralNotebook-BqccUXGd.js} +1 -1
  10. package/dist-embed/chunks/{ExcalidrawComponent-DVOnRDkN.js → ExcalidrawComponent-DgSMy796.js} +1 -1
  11. package/dist-embed/chunks/{ExcalidrawModal-B0h_-M3l.js → ExcalidrawModal-DFJW9pQh.js} +1 -1
  12. package/dist-embed/chunks/{JupyterLexicalExtension-B2PQrLXS.js → JupyterLexicalExtension-CqDatsgf.js} +8 -8
  13. package/dist-embed/chunks/{KernelVariables-trZsXNAi.js → KernelVariables-CS6h5HyK.js} +1 -1
  14. package/dist-embed/chunks/{NotebookToolSurfaces-BuKcXArX.js → NotebookToolSurfaces-CTLbTvsS.js} +1 -1
  15. package/dist-embed/chunks/{NotebookView-Em4y6Een.js → NotebookView-BJpTApeL.js} +1 -1
  16. package/dist-embed/chunks/{Output-DA8Udq91.js → Output-no9rnFJ7.js} +1 -1
  17. package/dist-embed/chunks/{SandboxDetailsDialog-o2z6YFyb.js → SandboxDetailsDialog-BAv6RMed.js} +1 -1
  18. package/dist-embed/chunks/{SchemaForm-DCt_mqR1.js → SchemaForm-CE5NfpBU.js} +1 -1
  19. package/dist-embed/chunks/{WidgetVariableView-CDEFi0p0.js → WidgetVariableView-V4DsgfIK.js} +1 -1
  20. package/dist-embed/chunks/{YouTubePlugin-DxRPFzvS.js → YouTubePlugin-CpgyVTwG.js} +1 -1
  21. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-CsoEWluu.js → abnfDiagram-VCTEODGH-faK2fyHC.js} +1 -1
  22. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-Cit223SC.js → abnfDiagram-VCTEODGH-wvUaPpVC.js} +1 -1
  23. package/dist-embed/chunks/{ar-SA-G6X2FPQ2-CjJtC55z.js → ar-SA-G6X2FPQ2-DwUjDWHp.js} +1 -1
  24. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-DyQuZM-c.js → architectureDiagram-5GKGNRK7-CwbfxDHw.js} +1 -1
  25. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-DfqpfKOB.js → architectureDiagram-5GKGNRK7-DBMLRsbO.js} +1 -1
  26. package/dist-embed/chunks/{az-AZ-76LH7QW2-B7KkL6wt.js → az-AZ-76LH7QW2-DROX4pJc.js} +1 -1
  27. package/dist-embed/chunks/{bg-BG-XCXSNQG7-D7UwtEhO.js → bg-BG-XCXSNQG7-DPLzP9Bm.js} +1 -1
  28. package/dist-embed/chunks/{blockDiagram-868be97b-jJKAH_Up.js → blockDiagram-868be97b-BXBoGds2.js} +1 -1
  29. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-BcQwB7-r.js → blockDiagram-I7D4REHJ-BNkBA3Vb.js} +1 -1
  30. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-z3xnLtdG.js → blockDiagram-I7D4REHJ-DUIcpkIN.js} +1 -1
  31. package/dist-embed/chunks/{bn-BD-2XOGV67Q-pDDWE9Mn.js → bn-BD-2XOGV67Q-CCOU2J2j.js} +1 -1
  32. package/dist-embed/chunks/{c4Diagram-3f4bdde3-DU_-LipO.js → c4Diagram-3f4bdde3-4OdTwU_t.js} +1 -1
  33. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-BeMfCOG_.js → c4Diagram-7LVT6UL2-BGpBMrvl.js} +1 -1
  34. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-DjfnLrWZ.js → c4Diagram-7LVT6UL2-f7UaZWVg.js} +1 -1
  35. package/dist-embed/chunks/{ca-ES-6MX7JW3Y-By1uEeFx.js → ca-ES-6MX7JW3Y-3RgFapBd.js} +1 -1
  36. package/dist-embed/chunks/{chunk-2Q5K7J3B-YWpfqKnX.js → chunk-2Q5K7J3B-BBPiCQqO.js} +1 -1
  37. package/dist-embed/chunks/{chunk-2Q5K7J3B-BGvvv_gg.js → chunk-2Q5K7J3B-P4f8Cifn.js} +1 -1
  38. package/dist-embed/chunks/{chunk-5VM5RSS4-t-8mwHFb.js → chunk-5VM5RSS4-BVaSZr_4.js} +1 -1
  39. package/dist-embed/chunks/{chunk-5VM5RSS4-4bCWL_eZ.js → chunk-5VM5RSS4-CcNPo9qP.js} +1 -1
  40. package/dist-embed/chunks/{chunk-F27PBJKO-De9ONU-g.js → chunk-F27PBJKO-C-90E7AT.js} +1 -1
  41. package/dist-embed/chunks/{chunk-F27PBJKO-3yGsHIDd.js → chunk-F27PBJKO-DTgjd0wN.js} +1 -1
  42. package/dist-embed/chunks/{chunk-IMKFNOWR-DA2KJGep.js → chunk-IMKFNOWR--OZX7QCt.js} +1 -1
  43. package/dist-embed/chunks/{chunk-IMKFNOWR-Bvbi7lre.js → chunk-IMKFNOWR-DuzpuE1w.js} +1 -1
  44. package/dist-embed/chunks/{chunk-JWPE2WC7-w_AaYpEU.js → chunk-JWPE2WC7-CAdvd3EQ.js} +1 -1
  45. package/dist-embed/chunks/{chunk-JWPE2WC7-CVkDZh_H.js → chunk-JWPE2WC7-OHowekj4.js} +1 -1
  46. package/dist-embed/chunks/{chunk-POPQ4Y6H-C1mg0obI.js → chunk-POPQ4Y6H-BgLsR3l7.js} +1 -1
  47. package/dist-embed/chunks/{chunk-POPQ4Y6H-DnstozKC.js → chunk-POPQ4Y6H-Dw1h_9lT.js} +1 -1
  48. package/dist-embed/chunks/{chunk-SVP7TREG-CVLd6GtA.js → chunk-SVP7TREG-VsO48dck.js} +1 -1
  49. package/dist-embed/chunks/{chunk-SVP7TREG-DmKkKduL.js → chunk-SVP7TREG-kM9Erqyf.js} +1 -1
  50. package/dist-embed/chunks/{chunk-TICWLB2K-xv7MPgmq.js → chunk-TICWLB2K-CU2oQRJ9.js} +1 -1
  51. package/dist-embed/chunks/{chunk-TICWLB2K-C-lEt3p0.js → chunk-TICWLB2K-pVdCft0o.js} +1 -1
  52. package/dist-embed/chunks/{chunk-XXDRQBXY-j7xuWjIK.js → chunk-XXDRQBXY-BSfKSQ7y.js} +1 -1
  53. package/dist-embed/chunks/{chunk-XXDRQBXY-Cq8wF2xQ.js → chunk-XXDRQBXY-CL1cUI4w.js} +1 -1
  54. package/dist-embed/chunks/{classDiagram-ZZMXUADV-DRPRMTvC.js → classDiagram-ZZMXUADV-Ctw7VU-m.js} +1 -1
  55. package/dist-embed/chunks/{classDiagram-ZZMXUADV-Dvh08RMu.js → classDiagram-ZZMXUADV-Dq0Eb9fh.js} +1 -1
  56. package/dist-embed/chunks/{classDiagram-f62afe4f-B8-b8b-t.js → classDiagram-f62afe4f-C8j4XsQw.js} +1 -1
  57. package/dist-embed/chunks/{classDiagram-v2-604399ef-CHogX84-.js → classDiagram-v2-604399ef-BVT78aGU.js} +1 -1
  58. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-DRPRMTvC.js → classDiagram-v2-VYDZK3BY-Ctw7VU-m.js} +1 -1
  59. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-Dvh08RMu.js → classDiagram-v2-VYDZK3BY-Dq0Eb9fh.js} +1 -1
  60. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-BrisaBwh.js → cose-bilkent-JH36ORCC-DEGpy0W8.js} +1 -1
  61. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-DGpwW9PH.js → cose-bilkent-JH36ORCC-DrOmRWVI.js} +1 -1
  62. package/dist-embed/chunks/{createText-aed3d8b3-C8C5hNtS.js → createText-aed3d8b3-BukHQ1P8.js} +1 -1
  63. package/dist-embed/chunks/{cs-CZ-2BRQDIVT-TB9QxoL2.js → cs-CZ-2BRQDIVT-BJS7ofhJ.js} +1 -1
  64. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-NXny6Mot.js → cynefinDiagram-5FMLGOSQ-CnZ3wqXe.js} +1 -1
  65. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-B37BRKcq.js → cynefinDiagram-5FMLGOSQ-qZ6StjuY.js} +1 -1
  66. package/dist-embed/chunks/{da-DK-5WZEPLOC-CLl8TZ2P.js → da-DK-5WZEPLOC-BHDT0zzh.js} +1 -1
  67. package/dist-embed/chunks/{dagre-GXQ25YYZ-mM6SsGs8.js → dagre-GXQ25YYZ-Bb0_WA3x.js} +1 -1
  68. package/dist-embed/chunks/{dagre-GXQ25YYZ-b03jeXc5.js → dagre-GXQ25YYZ-Dbp_O7kO.js} +1 -1
  69. package/dist-embed/chunks/{de-DE-XR44H4JA-6gY_Hl4H.js → de-DE-XR44H4JA-CWVJKc9t.js} +1 -1
  70. package/dist-embed/chunks/{diagram-S7CK7UJ4-fpaH_1xM.js → diagram-S7CK7UJ4-CwINt91M.js} +1 -1
  71. package/dist-embed/chunks/{diagram-S7CK7UJ4-C8TF_Y_V.js → diagram-S7CK7UJ4-DHPFd83P.js} +1 -1
  72. package/dist-embed/chunks/{diagram-UQ7AKVKN-CcqaQfbU.js → diagram-UQ7AKVKN-BqXFRP10.js} +1 -1
  73. package/dist-embed/chunks/{diagram-UQ7AKVKN-G8fspx37.js → diagram-UQ7AKVKN-CXRpfLBt.js} +1 -1
  74. package/dist-embed/chunks/{diagram-VSXAHHWV-DLhWEHn-.js → diagram-VSXAHHWV-Bg68Bv82.js} +1 -1
  75. package/dist-embed/chunks/{diagram-VSXAHHWV-B3Q41FOl.js → diagram-VSXAHHWV-DO0toZBQ.js} +1 -1
  76. package/dist-embed/chunks/{diagram-VX7I27RA-Dy-IHeZr.js → diagram-VX7I27RA-BEO0D7jE.js} +1 -1
  77. package/dist-embed/chunks/{diagram-VX7I27RA-Dnbm3teD.js → diagram-VX7I27RA-Diuc1eIf.js} +1 -1
  78. package/dist-embed/chunks/{diagram-Z3DM3KII-BkiB9_Ay.js → diagram-Z3DM3KII-BLJQK61P.js} +1 -1
  79. package/dist-embed/chunks/{diagram-Z3DM3KII-hE5FTtNp.js → diagram-Z3DM3KII-DtauJWd2.js} +1 -1
  80. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-DJhj6Mbd.js → ebnfDiagram-PWID7BFC-6H6OSebp.js} +1 -1
  81. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-DZiCEGSK.js → ebnfDiagram-PWID7BFC-SU3uN2_2.js} +1 -1
  82. package/dist-embed/chunks/{edges-b2856ca0-DuBY_rn3.js → edges-b2856ca0-DbD0XDJS.js} +1 -1
  83. package/dist-embed/chunks/{el-GR-BZB4AONW-CFGi_gqP.js → el-GR-BZB4AONW-2z8DB9lI.js} +1 -1
  84. package/dist-embed/chunks/{erDiagram-5d81789a-BYOejxuX.js → erDiagram-5d81789a-C-Tzt4MD.js} +1 -1
  85. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-v1tF2vX5.js → erDiagram-RLTQ6QDP-C_c-qnRZ.js} +1 -1
  86. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-Bg2UfSBM.js → erDiagram-RLTQ6QDP-DEAWMrMT.js} +1 -1
  87. package/dist-embed/chunks/{es-ES-U4NZUMDT-D_HQumEp.js → es-ES-U4NZUMDT-DzXGWPd4.js} +1 -1
  88. package/dist-embed/chunks/{eu-ES-A7QVB2H4-CvUID20p.js → eu-ES-A7QVB2H4-CslHE4iE.js} +1 -1
  89. package/dist-embed/chunks/{fa-IR-HGAKTJCU-C7_Vi5QP.js → fa-IR-HGAKTJCU-CBWUHs2r.js} +1 -1
  90. package/dist-embed/chunks/{fi-FI-Z5N7JZ37-SBYxKS7Q.js → fi-FI-Z5N7JZ37-MAr8kZMI.js} +1 -1
  91. package/dist-embed/chunks/{flowDb-185abca5-C_IywhMB.js → flowDb-185abca5-Di4aD0Mg.js} +1 -1
  92. package/dist-embed/chunks/{flowDiagram-1629c991-C8JQo90r.js → flowDiagram-1629c991-fImernS2.js} +1 -1
  93. package/dist-embed/chunks/{flowDiagram-HODETNUW-BigtRRvu.js → flowDiagram-HODETNUW-DzoskzA4.js} +1 -1
  94. package/dist-embed/chunks/{flowDiagram-HODETNUW-Cd1y1bVx.js → flowDiagram-HODETNUW-Hr-elwWq.js} +1 -1
  95. package/dist-embed/chunks/{flowDiagram-v2-1d953310-DTH8N-sj.js → flowDiagram-v2-1d953310-P1qDfDo-.js} +1 -1
  96. package/dist-embed/chunks/{flowchart-elk-definition-6df44142-W8s7oFgJ.js → flowchart-elk-definition-6df44142-CXebTCvX.js} +1 -1
  97. package/dist-embed/chunks/{fr-FR-RHASNOE6-fAErz4Nf.js → fr-FR-RHASNOE6-BUz3aHQJ.js} +1 -1
  98. package/dist-embed/chunks/{ganttDiagram-3b0b3873-D_XwfPDh.js → ganttDiagram-3b0b3873-Bupos8HO.js} +1 -1
  99. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-BIsU1Bcw.js → ganttDiagram-EL5Y4UJY-3bErrKpg.js} +1 -1
  100. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-VT_s02F9.js → ganttDiagram-EL5Y4UJY-e3WDalFj.js} +1 -1
  101. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-BvxzF9hn.js → gitGraphDiagram-WWUBYQGX-BiEolUQH.js} +1 -1
  102. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-BDdr_2gq.js → gitGraphDiagram-WWUBYQGX-Ck49f0H9.js} +1 -1
  103. package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-UBa5a0HV.js → gitGraphDiagram-f01e8bc2-DM8FMetI.js} +1 -1
  104. package/dist-embed/chunks/{gl-ES-HMX3MZ6V-DCciQOEM.js → gl-ES-HMX3MZ6V-DvzQmDYv.js} +1 -1
  105. package/dist-embed/chunks/{he-IL-6SHJWFNN-CuQhQVb2.js → he-IL-6SHJWFNN-DKR3cKyQ.js} +1 -1
  106. package/dist-embed/chunks/{hi-IN-IWLTKZ5I-BlH8AK2z.js → hi-IN-IWLTKZ5I-C4tyBNwa.js} +1 -1
  107. package/dist-embed/chunks/{hu-HU-A5ZG7DT2-BaBGhZVQ.js → hu-HU-A5ZG7DT2-C8BnBgH5.js} +1 -1
  108. package/dist-embed/chunks/{id-ID-SAP4L64H-Dkm1zS1g.js → id-ID-SAP4L64H-Bn1hY5OS.js} +1 -1
  109. package/dist-embed/chunks/{index-D5xVRNk8.js → index-5N0EOEHV.js} +1 -1
  110. package/dist-embed/chunks/{index-9bae90f3-CvHGNDGk.js → index-9bae90f3-l9tb84fw.js} +1 -1
  111. package/dist-embed/chunks/{index-DsMBsL3g.js → index-BKB97UwL.js} +1 -1
  112. package/dist-embed/chunks/{index-BQp4l7hT.js → index-BN8Bbau-.js} +2 -2
  113. package/dist-embed/chunks/{index-D2vkNPmG.js → index-BTdq_niO.js} +1 -1
  114. package/dist-embed/chunks/{index-BcdbHyzT.js → index-BTnG8qrO.js} +1 -1
  115. package/dist-embed/chunks/{index-CozDzMOf.js → index-Bhzj1Pnv.js} +1 -1
  116. package/dist-embed/chunks/{index-BDs-ntTo.js → index-BzMt3uYX.js} +1 -1
  117. package/dist-embed/chunks/{index-CUAnjzKL.js → index-CCRwowMu.js} +1 -1
  118. package/dist-embed/chunks/{index-Dp3JEvYy.js → index-CEbnhuIo.js} +1 -1
  119. package/dist-embed/chunks/{index-CrL-deXT.js → index-CRZ1qthh.js} +1 -1
  120. package/dist-embed/chunks/{index-CoxYszKx.js → index-CZB8DyUw.js} +1 -1
  121. package/dist-embed/chunks/{index-bC_5dTbf.js → index-Cd5CgKFr.js} +1 -1
  122. package/dist-embed/chunks/{index-DlYw1KQn.js → index-CkQ6IAoY.js} +1 -1
  123. package/dist-embed/chunks/{index-B9aqZrHy.js → index-Coj9opLJ.js} +1 -1
  124. package/dist-embed/chunks/{index-BqDJ3hYN.js → index-D9_026K2.js} +1 -1
  125. package/dist-embed/chunks/{index-SsFECYMb.js → index-DVaPKQyL.js} +1 -1
  126. package/dist-embed/chunks/{index-DdmqZZnv.js → index-DWfzdTZo.js} +1 -1
  127. package/dist-embed/chunks/{index-CecqH6mN.js → index-DdBQBN76.js} +1 -1
  128. package/dist-embed/chunks/{index-DPHM1WLM.js → index-Di3aBGLV.js} +1 -1
  129. package/dist-embed/chunks/{index-jJxXKHoT.js → index-DiBcWu6d.js} +1 -1
  130. package/dist-embed/chunks/{index-DE_JTiwB.js → index-Gngo0bXi.js} +1 -1
  131. package/dist-embed/chunks/index-S4sn4R3i.js +34 -0
  132. package/dist-embed/chunks/{index-DvyxBamA.js → index-TDpnbl90.js} +4 -4
  133. package/dist-embed/chunks/{index-DAZUOPnd.js → index-Z2pxzg3H.js} +1 -1
  134. package/dist-embed/chunks/{index-Dc5AqaeZ.js → index-_H5U6gal.js} +1 -1
  135. package/dist-embed/chunks/{index-YVrQYH-H.js → index-_nsBY26B.js} +1 -1
  136. package/dist-embed/chunks/{index-D8wHLHbt.js → index-b6e3y1R-.js} +1 -1
  137. package/dist-embed/chunks/{index-CtEseCtc.js → index-fQxrRXLD.js} +1 -1
  138. package/dist-embed/chunks/{index-DMll0Yzi.js → index-szXn1pzS.js} +1 -1
  139. package/dist-embed/chunks/{index.esm-p0OnSU9h.js → index.esm-nZym6gpK.js} +1 -1
  140. package/dist-embed/chunks/{index.esm-q_fIJH5v.js → index.esm-z-R1Ypx2.js} +1 -1
  141. package/dist-embed/chunks/{infoDiagram-27XIBGKW-DIeaDzEK.js → infoDiagram-27XIBGKW-8DlnjSdf.js} +1 -1
  142. package/dist-embed/chunks/{infoDiagram-27XIBGKW-DZ6Xhv3K.js → infoDiagram-27XIBGKW-BjyM865y.js} +1 -1
  143. package/dist-embed/chunks/{infoDiagram-a29d40f1-B9PMyz4X.js → infoDiagram-a29d40f1-DXYFLipl.js} +1 -1
  144. package/dist-embed/chunks/isEqual-g-jK7vY0.js +1 -0
  145. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-CwrdITPn.js → ishikawaDiagram-5VMMS53U-Bb5g5HNe.js} +1 -1
  146. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-BP4Q8nEu.js → ishikawaDiagram-5VMMS53U-ri4cvaWs.js} +1 -1
  147. package/dist-embed/chunks/{it-IT-JPQ66NNP-BrcctIsI.js → it-IT-JPQ66NNP-DEiaanA7.js} +1 -1
  148. package/dist-embed/chunks/{ja-JP-DBVTYXUO-CKuJ3Sod.js → ja-JP-DBVTYXUO-Bb0GBZrQ.js} +1 -1
  149. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-iJrCUeL0.js → journeyDiagram-3NMN7TZE-96VNFopN.js} +1 -1
  150. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-wI34jsXX.js → journeyDiagram-3NMN7TZE-BpYgEBLO.js} +1 -1
  151. package/dist-embed/chunks/{journeyDiagram-95396277-B6WhL2Fl.js → journeyDiagram-95396277-CQ_kN2gp.js} +1 -1
  152. package/dist-embed/chunks/{kaa-6HZHGXH3-ChFYZBwI.js → kaa-6HZHGXH3-DxqTv9uN.js} +1 -1
  153. package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-C7C7EuVk.js → kab-KAB-ZGHBKWFO-D0V0yQgV.js} +1 -1
  154. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-gqU76cK9.js → kanban-definition-UXKFOSKX-B5nUu45Q.js} +1 -1
  155. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-B8AB0LN4.js → kanban-definition-UXKFOSKX-BPsXEKm4.js} +1 -1
  156. package/dist-embed/chunks/{kk-KZ-P5N5QNE5-Bff18CC1.js → kk-KZ-P5N5QNE5-CYyEyHXW.js} +1 -1
  157. package/dist-embed/chunks/{km-KH-HSX4SM5Z-DU2YQt8I.js → km-KH-HSX4SM5Z-CCTEGikY.js} +1 -1
  158. package/dist-embed/chunks/{ko-KR-MTYHY66A-CQruDlRn.js → ko-KR-MTYHY66A-C-QDut19.js} +1 -1
  159. package/dist-embed/chunks/{ku-TR-6OUDTVRD-DoySMeIi.js → ku-TR-6OUDTVRD-CIqn8p2Y.js} +1 -1
  160. package/dist-embed/chunks/{layout-DbdaqszO.js → layout-Bdtul_rg.js} +1 -1
  161. package/dist-embed/chunks/{layout-CJFemkl6.js → layout-Dq0J6INj.js} +1 -1
  162. package/dist-embed/chunks/{lt-LT-XHIRWOB4-72Vmr8iW.js → lt-LT-XHIRWOB4-BDLUWFPH.js} +1 -1
  163. package/dist-embed/chunks/{lv-LV-5QDEKY6T-CxtO97qO.js → lv-LV-5QDEKY6T-BItabIJP.js} +1 -1
  164. package/dist-embed/chunks/{mermaid.core-DaZxhAXO.js → mermaid.core-B9dEBs01.js} +4 -4
  165. package/dist-embed/chunks/{mermaid.core-CAzPWd8O.js → mermaid.core-pflA3DMC.js} +3 -3
  166. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-DPl-uWpT.js → mindmap-definition-YA3MSWOX-CEuIjXO2.js} +1 -1
  167. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-D8W0sJ7P.js → mindmap-definition-YA3MSWOX-DwLQYAqQ.js} +1 -1
  168. package/dist-embed/chunks/{mindmap-definition-e4c1d938-CGXwlH4A.js → mindmap-definition-e4c1d938-CDWIPlcb.js} +1 -1
  169. package/dist-embed/chunks/{mr-IN-CRQNXWMA-BNGEl_QE.js → mr-IN-CRQNXWMA-DXXb8N2w.js} +1 -1
  170. package/dist-embed/chunks/{my-MM-5M5IBNSE-4wIAMvGF.js → my-MM-5M5IBNSE-TidIfjqS.js} +1 -1
  171. package/dist-embed/chunks/{nb-NO-T6EIAALU-z-1s9yX9.js → nb-NO-T6EIAALU-DEINynK7.js} +1 -1
  172. package/dist-embed/chunks/{nl-NL-IS3SIHDZ-CYKGEVB8.js → nl-NL-IS3SIHDZ-D04rJzNe.js} +1 -1
  173. package/dist-embed/chunks/{nn-NO-6E72VCQL-DwQFIFpO.js → nn-NO-6E72VCQL-oWFzCtpf.js} +1 -1
  174. package/dist-embed/chunks/{oc-FR-POXYY2M6-mH2n3eM_.js → oc-FR-POXYY2M6-BmFfP6hk.js} +1 -1
  175. package/dist-embed/chunks/{pa-IN-N4M65BXN-DbixE6jQ.js → pa-IN-N4M65BXN-RkXrgKXw.js} +1 -1
  176. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-D3qs3UBw.js → pegDiagram-XKGWAZYB-CqRRvKft.js} +1 -1
  177. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-DJmZupPa.js → pegDiagram-XKGWAZYB-Cwo6HzRh.js} +1 -1
  178. package/dist-embed/chunks/{percentages-BXMCSKIN-5Q9KX_WU.js → percentages-BXMCSKIN-BL_DuU3S.js} +5 -5
  179. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-CrZQ-dOy.js → pieDiagram-E7YTZNPT-BvBHesgq.js} +1 -1
  180. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-C58cd6s7.js → pieDiagram-E7YTZNPT-CkHpKSua.js} +1 -1
  181. package/dist-embed/chunks/{pieDiagram-c941bede-Dn3GMx6q.js → pieDiagram-c941bede-Bsn1Bxk5.js} +1 -1
  182. package/dist-embed/chunks/{pl-PL-T2D74RX3-jOVonFYe.js → pl-PL-T2D74RX3-DqxkHzTj.js} +1 -1
  183. package/dist-embed/chunks/{pt-BR-5N22H2LF-Cx4MrqgK.js → pt-BR-5N22H2LF-DFA-wWC5.js} +1 -1
  184. package/dist-embed/chunks/{pt-PT-UZXXM6DQ-B2PzNwuF.js → pt-PT-UZXXM6DQ-Z5jw_7aw.js} +1 -1
  185. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-haT-kxqE.js → quadrantDiagram-AXDQQJYC-AaQ_WgXa.js} +1 -1
  186. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-CJn8hkR8.js → quadrantDiagram-AXDQQJYC-nOA8Q9nG.js} +1 -1
  187. package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-B3wudq14.js → quadrantDiagram-cf8b8fe0-BhaNj-gz.js} +1 -1
  188. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-T23yIHww.js → railroadDiagram-O6MQD6OU-BlWFu3pn.js} +1 -1
  189. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-Ty6XXjBy.js → railroadDiagram-O6MQD6OU-D-SNyKIn.js} +1 -1
  190. package/dist-embed/chunks/{renderer-Au1S-H5k.js → renderer-DKKfWkWv.js} +1 -1
  191. package/dist-embed/chunks/{requirementDiagram-53bda41b-B-eAYQ6c.js → requirementDiagram-53bda41b-C2WctYyl.js} +1 -1
  192. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-fpBmgh7Q.js → requirementDiagram-BXWQKSXE-1A97ivzl.js} +1 -1
  193. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-CgkHdmYF.js → requirementDiagram-BXWQKSXE-BpWNFdrw.js} +1 -1
  194. package/dist-embed/chunks/{ro-RO-JPDTUUEW-BCQxuLcc.js → ro-RO-JPDTUUEW-DjC09bHq.js} +1 -1
  195. package/dist-embed/chunks/{ru-RU-B4JR7IUQ-CqSiHvqj.js → ru-RU-B4JR7IUQ-CqwD7Yik.js} +1 -1
  196. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-hDbZE81L.js → sankeyDiagram-P5KCCOFB-DnT5kYW5.js} +1 -1
  197. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-DEGMK43Q.js → sankeyDiagram-P5KCCOFB-ktT6v9aY.js} +1 -1
  198. package/dist-embed/chunks/{sankeyDiagram-c3ef121a-O14jOeqO.js → sankeyDiagram-c3ef121a-3FD4GIJS.js} +1 -1
  199. package/dist-embed/chunks/{sequenceDiagram-82a5b84f-BFFzLElQ.js → sequenceDiagram-82a5b84f-CZQmoHAd.js} +1 -1
  200. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-MrC4K4SC.js → sequenceDiagram-WJ2MYXX4-0HHgJN0L.js} +1 -1
  201. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-wongMGVN.js → sequenceDiagram-WJ2MYXX4-DYY-dZgX.js} +1 -1
  202. package/dist-embed/chunks/{si-LK-N5RQ5JYF-Dbgk5YHt.js → si-LK-N5RQ5JYF-OVf4k6G3.js} +1 -1
  203. package/dist-embed/chunks/{sizeCapture-INFHLROL-CiOiAAo5.js → sizeCapture-INFHLROL-CIF2j9e_.js} +1 -1
  204. package/dist-embed/chunks/{sizeCapture-INFHLROL-j4-sCda0.js → sizeCapture-INFHLROL-DJOph387.js} +1 -1
  205. package/dist-embed/chunks/{sk-SK-C5VTKIMK-OBAaNvVw.js → sk-SK-C5VTKIMK-BG__kjLT.js} +1 -1
  206. package/dist-embed/chunks/{sl-SI-NN7IZMDC-DqLxi4IM.js → sl-SI-NN7IZMDC-CIgxidVH.js} +1 -1
  207. package/dist-embed/chunks/{stateDiagram-43e79a5f-BZm5gFdu.js → stateDiagram-43e79a5f-CMlUXY1x.js} +1 -1
  208. package/dist-embed/chunks/{stateDiagram-D77RDMKH-D7_xyy8n.js → stateDiagram-D77RDMKH-CkICPC-C.js} +1 -1
  209. package/dist-embed/chunks/{stateDiagram-D77RDMKH-DXrbH1aM.js → stateDiagram-D77RDMKH-DVd0MOrg.js} +1 -1
  210. package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-DiXOgJsK.js → stateDiagram-v2-2041ed4f-BcO6vvJA.js} +1 -1
  211. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-ngWpJn6k.js → stateDiagram-v2-MP3YSRHH-BFlXwfgz.js} +1 -1
  212. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-DLsY6ysL.js → stateDiagram-v2-MP3YSRHH-CJD5_Eji.js} +1 -1
  213. package/dist-embed/chunks/{styles-455b33cd-CrHizSU7.js → styles-455b33cd-BfyZJvzN.js} +1 -1
  214. package/dist-embed/chunks/{styles-f932cba9-YuCN7fSa.js → styles-f932cba9-k2wfF-9Q.js} +1 -1
  215. package/dist-embed/chunks/{styles-fcc2142b-tjrOPOh4.js → styles-fcc2142b-z3csTkbW.js} +1 -1
  216. package/dist-embed/chunks/{subset-shared.chunk-Du2agLgk.js → subset-shared.chunk-BR0LJHtQ.js} +1 -1
  217. package/dist-embed/chunks/{subset-worker.chunk-BXR8pgHc.js → subset-worker.chunk-52aAcjvz.js} +1 -1
  218. package/dist-embed/chunks/{sv-SE-XGPEYMSR-BbgHKxhC.js → sv-SE-XGPEYMSR-CYHz3xCa.js} +1 -1
  219. package/dist-embed/chunks/{svgDrawCommon-148a3cd9-DTqtvo5_.js → svgDrawCommon-148a3cd9-NqUFgQ9x.js} +1 -1
  220. package/dist-embed/chunks/{swimlanes-42K2YHIH-B289Mbni.js → swimlanes-42K2YHIH-B6pxWv6a.js} +1 -1
  221. package/dist-embed/chunks/{swimlanes-42K2YHIH-B3H_wpMu.js → swimlanes-42K2YHIH-Cj4fdAYa.js} +1 -1
  222. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-D0ZHzw-_.js → swimlanesDiagram-VR7AAH4N-B2gk37ys.js} +1 -1
  223. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-qWg-2xN_.js → swimlanesDiagram-VR7AAH4N-B9ThT6OH.js} +1 -1
  224. package/dist-embed/chunks/{ta-IN-2NMHFXQM-0pH7gQyu.js → ta-IN-2NMHFXQM-BphRr9QY.js} +1 -1
  225. package/dist-embed/chunks/{th-TH-HPSO5L25-Dvbu09CU.js → th-TH-HPSO5L25-Ba2-2Bo0.js} +1 -1
  226. package/dist-embed/chunks/{timeline-definition-24CTP7MA-DpMq7g2g.js → timeline-definition-24CTP7MA-D5dMAy5U.js} +1 -1
  227. package/dist-embed/chunks/{timeline-definition-24CTP7MA-DUc18SdK.js → timeline-definition-24CTP7MA-DVcslyxd.js} +1 -1
  228. package/dist-embed/chunks/{timeline-definition-7545f45a--4ypi4BE.js → timeline-definition-7545f45a-IhzNtIcW.js} +1 -1
  229. package/dist-embed/chunks/{tr-TR-DEFEU3FU-B6YS3iEB.js → tr-TR-DEFEU3FU-CRKE7Roy.js} +1 -1
  230. package/dist-embed/chunks/{uk-UA-QMV73CPH-DMG9vIVp.js → uk-UA-QMV73CPH-DlNE5CAT.js} +1 -1
  231. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-CvEXE1xX.js → vennDiagram-4TSXK5OY-BMg6wc5A.js} +1 -1
  232. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-CS12EGJw.js → vennDiagram-4TSXK5OY-KKysbuVs.js} +1 -1
  233. package/dist-embed/chunks/{vi-VN-M7AON7JQ-DB3ZrpeP.js → vi-VN-M7AON7JQ-Cp44PRXY.js} +1 -1
  234. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-8LfGni9_.js → wardleyDiagram-VM6X3IG4-C5wMQ_qe.js} +1 -1
  235. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-Bj02LzjH.js → wardleyDiagram-VM6X3IG4-CTed9ps7.js} +1 -1
  236. package/dist-embed/chunks/{xychartDiagram-3f383b91-CE_OY5QR.js → xychartDiagram-3f383b91-CsxcWMT8.js} +1 -1
  237. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-DXqC0l3r.js → xychartDiagram-S5SC5T6Z-DthHDnAV.js} +1 -1
  238. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-BdZi5x4a.js → xychartDiagram-S5SC5T6Z-Kpqryflz.js} +1 -1
  239. package/dist-embed/chunks/{zh-CN-LNUGB5OW-VV-lg83H.js → zh-CN-LNUGB5OW-JHqqwp0j.js} +1 -1
  240. package/dist-embed/chunks/{zh-HK-E62DVLB3-DLoyC6Q9.js → zh-HK-E62DVLB3-YEs97mA8.js} +1 -1
  241. package/dist-embed/chunks/{zh-TW-RAJ6MFWO-DhFllgOW.js → zh-TW-RAJ6MFWO-CgmeTbuy.js} +1 -1
  242. package/dist-embed/datalayer-app-main.js +16 -16
  243. package/lib/chat/presence/Presence.d.ts +4 -4
  244. package/lib/chat/presence/Presence.js +3 -2
  245. package/lib/chat/presence/presenceStatus.d.ts +3 -34
  246. package/lib/chat/presence/presenceStatus.js +4 -46
  247. package/lib/portable/fixtures.d.ts +11 -0
  248. package/lib/portable/fixtures.js +70 -0
  249. package/lib/portable/index.d.ts +3 -0
  250. package/lib/portable/index.js +5 -0
  251. package/lib/portable/presence.d.ts +47 -0
  252. package/lib/portable/presence.js +71 -0
  253. package/lib/portable/views.d.ts +125 -0
  254. package/lib/portable/views.js +52 -0
  255. package/package.json +1 -1
  256. package/dist-embed/chunks/index-a9o1fYab.js +0 -34
  257. package/dist-embed/chunks/isEqual-Cwjr2skl.js +0 -1
@@ -9,7 +9,8 @@
9
9
  * @module chat/presence/Presence
10
10
  */
11
11
  import type { ReactNode } from 'react';
12
- import { type PresenceState } from './presenceStatus';
12
+ import { type PresenceLineProps } from '../../portable/views';
13
+ import type { PresenceState } from './presenceStatus';
13
14
  /**
14
15
  * A face at `size`: an emoji drawn in Fluent Emoji, the same on every
15
16
  * platform (LOOP T-20) — the system's, as text, only for one Datalayer ships
@@ -28,6 +29,5 @@ export declare function PresenceFace({ face, size, state, }: {
28
29
  size: number;
29
30
  state: PresenceState;
30
31
  }): import("react").JSX.Element;
31
- export declare function PresenceLine({ state }: {
32
- state: PresenceState;
33
- }): import("react").JSX.Element;
32
+ /** The line beside its face: `portable/views`' contract, as Datalayer Mobile draws it too. */
33
+ export declare function PresenceLine({ state }: PresenceLineProps): import("react").JSX.Element;
@@ -2,7 +2,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { Box } from '@datalayer/primer-addons';
3
3
  import { Text } from '@primer/react';
4
4
  import { FluentEmoji } from '@datalayer/core/lib/components/emoji';
5
- import { PRESENCE_LINES } from './presenceStatus';
5
+ import { presenceLine } from '../../portable/views';
6
6
  const ACCENT = 'var(--theme-accent)';
7
7
  /**
8
8
  * A face at `size`: an emoji drawn in Fluent Emoji, the same on every
@@ -22,6 +22,7 @@ export function PresenceFace({ face, size, state, }) {
22
22
  },
23
23
  } }), _jsx(Box, { as: "span", display: "inline-flex", opacity: paused ? 0.55 : 1, filter: paused ? 'grayscale(0.6)' : 'none', transition: "opacity var(--theme-motion-status, 0ms) var(--theme-motion-easing, ease)", children: _jsx(FaceDrawing, { face: face, size: size }) })] }));
24
24
  }
25
+ /** The line beside its face: `portable/views`' contract, as Datalayer Mobile draws it too. */
25
26
  export function PresenceLine({ state }) {
26
27
  return (_jsx(Text, { role: "status", "aria-live": "polite", "data-presence-line": state, sx: {
27
28
  fontSize: 0,
@@ -29,5 +30,5 @@ export function PresenceLine({ state }) {
29
30
  fontWeight: state === 'waiting' ? 'semibold' : 'normal',
30
31
  whiteSpace: 'nowrap',
31
32
  flexShrink: 0,
32
- }, children: PRESENCE_LINES[state] }));
33
+ }, children: presenceLine({ state }) }));
33
34
  }
@@ -1,38 +1,7 @@
1
1
  /**
2
- * What an application is doing, in plain words (LOOP T-08): the one line of
3
- * status beside its face.
2
+ * What an application is doing, in plain words (LOOP T-08): kept in
3
+ * `portable/presence`, which Datalayer Mobile reads too (MOBILE M-030).
4
4
  *
5
5
  * @module chat/presence/presenceStatus
6
6
  */
7
- /**
8
- * The states a person is told about. Paused is its deployment's: its owner
9
- * paused it (LOOP R-17), and it answers nobody until it is resumed.
10
- */
11
- export type PresenceState = 'idle' | 'thinking' | 'working' | 'waiting' | 'paused';
12
- /** The line each state is said by. */
13
- export declare const PRESENCE_LINES: Record<PresenceState, string>;
14
- /** The newest tool call of the conversation, as far as presence reads it. */
15
- export interface PresenceTool {
16
- /** It has not returned. */
17
- open: boolean;
18
- /** It waits on a person's approval. */
19
- pendingApproval: boolean;
20
- }
21
- /**
22
- * The state, from whether a turn is running, the newest tool call, and
23
- * whether its deployment is paused.
24
- *
25
- * Paused wins: a paused application does nothing, whatever its last turn
26
- * left behind.
27
- * Waiting for an approval is said whether or not the turn is still
28
- * streaming — the stream may end while the approval is asked. A tool that
29
- * has not returned counts as work only during a turn: a stopped turn can
30
- * leave one open, and the application is not working then.
31
- */
32
- export declare function presenceState(busy: boolean, tool?: PresenceTool, paused?: boolean): PresenceState;
33
- /**
34
- * The newest tool call of the conversation: whether it has not returned, and
35
- * whether it waits on a person's approval. A tool call is an item with a
36
- * tool name and a call id; it has returned once it is complete or failed.
37
- */
38
- export declare function presenceToolOf(items: readonly unknown[]): PresenceTool;
7
+ export { PRESENCE_LINES, presenceOfConversation, presenceState, presenceToolOf, type PresenceState, type PresenceTool, } from '../../portable/presence';
@@ -2,52 +2,10 @@
2
2
  * Copyright (c) 2025-2026 Datalayer, Inc.
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
- /** The line each state is said by. */
6
- export const PRESENCE_LINES = {
7
- idle: 'Ready',
8
- thinking: 'Thinking…',
9
- working: 'Working…',
10
- waiting: 'Waiting for you',
11
- paused: 'Paused',
12
- };
13
5
  /**
14
- * The state, from whether a turn is running, the newest tool call, and
15
- * whether its deployment is paused.
6
+ * What an application is doing, in plain words (LOOP T-08): kept in
7
+ * `portable/presence`, which Datalayer Mobile reads too (MOBILE M-030).
16
8
  *
17
- * Paused wins: a paused application does nothing, whatever its last turn
18
- * left behind.
19
- * Waiting for an approval is said whether or not the turn is still
20
- * streaming — the stream may end while the approval is asked. A tool that
21
- * has not returned counts as work only during a turn: a stopped turn can
22
- * leave one open, and the application is not working then.
9
+ * @module chat/presence/presenceStatus
23
10
  */
24
- export function presenceState(busy, tool, paused = false) {
25
- if (paused) {
26
- return 'paused';
27
- }
28
- if (tool?.open && tool.pendingApproval) {
29
- return 'waiting';
30
- }
31
- if (!busy) {
32
- return 'idle';
33
- }
34
- return tool?.open ? 'working' : 'thinking';
35
- }
36
- /**
37
- * The newest tool call of the conversation: whether it has not returned, and
38
- * whether it waits on a person's approval. A tool call is an item with a
39
- * tool name and a call id; it has returned once it is complete or failed.
40
- */
41
- export function presenceToolOf(items) {
42
- for (let index = items.length - 1; index >= 0; index -= 1) {
43
- const item = items[index];
44
- if (typeof item.toolName === 'string' && item.toolCallId) {
45
- const open = item.status !== 'complete' && item.status !== 'error';
46
- const pendingApproval = open &&
47
- item.result
48
- ?.pending_approval === true;
49
- return { open, pendingApproval };
50
- }
51
- }
52
- return { open: false, pendingApproval: false };
53
- }
11
+ export { PRESENCE_LINES, presenceOfConversation, presenceState, presenceToolOf, } from '../../portable/presence';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * A conversation with one row of every kind, and a question waiting: the
3
+ * fixture every renderer of `portable/views` is tested against — the web's
4
+ * and Datalayer Mobile's (MOBILE §4.2) — so that a change of a row's words or
5
+ * states is caught once.
6
+ *
7
+ * @module portable/fixtures
8
+ */
9
+ import { type ConversationState } from './conversation';
10
+ /** A fresh copy of the fixture conversation. */
11
+ export declare function conversationFixture(): ConversationState;
@@ -0,0 +1,70 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * A conversation with one row of every kind, and a question waiting: the
7
+ * fixture every renderer of `portable/views` is tested against — the web's
8
+ * and Datalayer Mobile's (MOBILE §4.2) — so that a change of a row's words or
9
+ * states is caught once.
10
+ *
11
+ * @module portable/fixtures
12
+ */
13
+ import { emptyConversation } from './conversation';
14
+ import { RUN_END_WORDS } from './records';
15
+ /** A fresh copy of the fixture conversation. */
16
+ export function conversationFixture() {
17
+ return {
18
+ ...emptyConversation(),
19
+ items: [
20
+ {
21
+ kind: 'message',
22
+ id: 'm-1',
23
+ role: 'user',
24
+ text: 'Where is order 7?',
25
+ streaming: false,
26
+ },
27
+ {
28
+ kind: 'tool',
29
+ id: 't-1',
30
+ name: 'lookup_order',
31
+ args: '{"order":7}',
32
+ status: 'complete',
33
+ result: 'Shipped on Monday.',
34
+ error: '',
35
+ },
36
+ {
37
+ kind: 'tool',
38
+ id: 't-2',
39
+ name: 'send_mail',
40
+ args: '{}',
41
+ status: 'error',
42
+ result: '',
43
+ error: 'Refused by its rule.',
44
+ },
45
+ {
46
+ kind: 'step',
47
+ id: 's-1',
48
+ name: 'Check the carrier',
49
+ status: 'complete',
50
+ },
51
+ {
52
+ kind: 'message',
53
+ id: 'm-2',
54
+ role: 'assistant',
55
+ text: 'It **shipped** on Monday.',
56
+ streaming: false,
57
+ },
58
+ { kind: 'end', id: 'e-1', end: 'stopped', words: RUN_END_WORDS.stopped },
59
+ { kind: 'error', id: 'x-1', text: 'The runtime did not answer.' },
60
+ ],
61
+ asking: {
62
+ kind: 'choice',
63
+ prompt: 'Track it by mail?',
64
+ options: ['Yes', 'No'],
65
+ schema: null,
66
+ accept: [],
67
+ },
68
+ dropped: 3,
69
+ };
70
+ }
@@ -12,5 +12,8 @@ export { AG_UI_NOT_ALLOWED, AG_UI_NOT_ON_RUNTIME, agUiRefusal, refusalBody, refu
12
12
  export { ASKED_FOR_TAG, askedOf, RUN_END_WORDS } from './records';
13
13
  export { messagesOfThread, openThread, snapshotOfStream, THREAD_WORDS, } from './thread';
14
14
  export { CUT_MARK, DIAGNOSTIC_LIMIT, emptyConversation, formFieldsOf, ITEM_LIMIT, MESSAGE_TEXT_LIMIT, questionOf, questionWords, reduceConversation, TOOL_TEXT_LIMIT, withError, withPrompt, withTurnEnded, type ConversationItem, type ConversationQuestion, type ConversationState, type TurnEnd, } from './conversation';
15
+ export { PRESENCE_LINES, presenceOfConversation, presenceState, presenceToolOf, type PresenceState, type PresenceTool, } from './presence';
16
+ export { ANSWER_BELOW, ANSWER_COMPLETE, composerOf, droppedWords, ENDED_WORDS, messageLabel, OPENING_WORDS, presenceLine, showsQuestion, stepLine, TOOL_STATUS_WORDS, toolLabel, type ComposerProps, type ComposerState, type ConversationViewProps, type ErrorItem, type ErrorRowProps, type MessageItem, type MessageRowProps, type PresenceLineProps, type QuestionCardProps, type StepItem, type StepRowProps, type ToolItem, type ToolRowProps, type TurnEndItem, type TurnEndRowProps, } from './views';
17
+ export { conversationFixture } from './fixtures';
15
18
  export { agentRunClient, agentRuntimesUrlOf, appSessionsClient, RuntimeRefusal, type AgentRunClient, type AgentTurn, type AppSessionsClient, type RuntimeClientOptions, type SessionStart, type StreamOptions, } from './sessions';
16
19
  export type { ChatMessage } from '../types/messages';
@@ -19,5 +19,10 @@ export { ASKED_FOR_TAG, askedOf, RUN_END_WORDS } from './records';
19
19
  export { messagesOfThread, openThread, snapshotOfStream, THREAD_WORDS, } from './thread';
20
20
  // A conversation as its stream builds it, for a native client.
21
21
  export { CUT_MARK, DIAGNOSTIC_LIMIT, emptyConversation, formFieldsOf, ITEM_LIMIT, MESSAGE_TEXT_LIMIT, questionOf, questionWords, reduceConversation, TOOL_TEXT_LIMIT, withError, withPrompt, withTurnEnded, } from './conversation';
22
+ // What an application is doing, in the words beside its face (LOOP T-08).
23
+ export { PRESENCE_LINES, presenceOfConversation, presenceState, presenceToolOf, } from './presence';
24
+ // One contract for every renderer of a conversation's components.
25
+ export { ANSWER_BELOW, ANSWER_COMPLETE, composerOf, droppedWords, ENDED_WORDS, messageLabel, OPENING_WORDS, presenceLine, showsQuestion, stepLine, TOOL_STATUS_WORDS, toolLabel, } from './views';
26
+ export { conversationFixture } from './fixtures';
22
27
  // The runtime's routes a native client drives.
23
28
  export { agentRunClient, agentRuntimesUrlOf, appSessionsClient, RuntimeRefusal, } from './sessions';
@@ -0,0 +1,47 @@
1
+ /**
2
+ * What an application is doing, in plain words (LOOP T-08): the one line of
3
+ * status beside its face — the same states and words in the web chat
4
+ * (`chat/presence`) and on Datalayer Mobile (MOBILE M-030).
5
+ *
6
+ * @module portable/presence
7
+ */
8
+ import type { ConversationState } from './conversation';
9
+ /**
10
+ * The states a person is told about. Paused is its deployment's: its owner
11
+ * paused it (LOOP R-17), and it answers nobody until it is resumed.
12
+ */
13
+ export type PresenceState = 'idle' | 'thinking' | 'working' | 'waiting' | 'paused';
14
+ /** The line each state is said by. */
15
+ export declare const PRESENCE_LINES: Record<PresenceState, string>;
16
+ /** The newest tool call of the conversation, as far as presence reads it. */
17
+ export interface PresenceTool {
18
+ /** It has not returned. */
19
+ open: boolean;
20
+ /** It waits on a person's approval. */
21
+ pendingApproval: boolean;
22
+ }
23
+ /**
24
+ * The state, from whether a turn is running, the newest tool call, and
25
+ * whether its deployment is paused.
26
+ *
27
+ * Paused wins: a paused application does nothing, whatever its last turn
28
+ * left behind.
29
+ * Waiting for an approval is said whether or not the turn is still
30
+ * streaming — the stream may end while the approval is asked. A tool that
31
+ * has not returned counts as work only during a turn: a stopped turn can
32
+ * leave one open, and the application is not working then.
33
+ */
34
+ export declare function presenceState(busy: boolean, tool?: PresenceTool, paused?: boolean): PresenceState;
35
+ /**
36
+ * The newest tool call of the conversation: whether it has not returned, and
37
+ * whether it waits on a person's approval. A tool call is an item with a
38
+ * tool name and a call id; it has returned once it is complete or failed.
39
+ */
40
+ export declare function presenceToolOf(items: readonly unknown[]): PresenceTool;
41
+ /**
42
+ * The state of a conversation a native client holds (`reduceConversation`):
43
+ * from whether its turn streams, its newest tool call, the question its
44
+ * application waits on, and whether its deployment is paused. A question
45
+ * asked and not answered is waiting for the person, as an approval is.
46
+ */
47
+ export declare function presenceOfConversation(state: Pick<ConversationState, 'items' | 'running' | 'asking'>, paused?: boolean): PresenceState;
@@ -0,0 +1,71 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /** The line each state is said by. */
6
+ export const PRESENCE_LINES = {
7
+ idle: 'Ready',
8
+ thinking: 'Thinking…',
9
+ working: 'Working…',
10
+ waiting: 'Waiting for you',
11
+ paused: 'Paused',
12
+ };
13
+ /**
14
+ * The state, from whether a turn is running, the newest tool call, and
15
+ * whether its deployment is paused.
16
+ *
17
+ * Paused wins: a paused application does nothing, whatever its last turn
18
+ * left behind.
19
+ * Waiting for an approval is said whether or not the turn is still
20
+ * streaming — the stream may end while the approval is asked. A tool that
21
+ * has not returned counts as work only during a turn: a stopped turn can
22
+ * leave one open, and the application is not working then.
23
+ */
24
+ export function presenceState(busy, tool, paused = false) {
25
+ if (paused) {
26
+ return 'paused';
27
+ }
28
+ if (tool?.open && tool.pendingApproval) {
29
+ return 'waiting';
30
+ }
31
+ if (!busy) {
32
+ return 'idle';
33
+ }
34
+ return tool?.open ? 'working' : 'thinking';
35
+ }
36
+ /**
37
+ * The newest tool call of the conversation: whether it has not returned, and
38
+ * whether it waits on a person's approval. A tool call is an item with a
39
+ * tool name and a call id; it has returned once it is complete or failed.
40
+ */
41
+ export function presenceToolOf(items) {
42
+ for (let index = items.length - 1; index >= 0; index -= 1) {
43
+ const item = items[index];
44
+ if (typeof item.toolName === 'string' && item.toolCallId) {
45
+ const open = item.status !== 'complete' && item.status !== 'error';
46
+ const pendingApproval = open &&
47
+ item.result
48
+ ?.pending_approval === true;
49
+ return { open, pendingApproval };
50
+ }
51
+ }
52
+ return { open: false, pendingApproval: false };
53
+ }
54
+ /**
55
+ * The state of a conversation a native client holds (`reduceConversation`):
56
+ * from whether its turn streams, its newest tool call, the question its
57
+ * application waits on, and whether its deployment is paused. A question
58
+ * asked and not answered is waiting for the person, as an approval is.
59
+ */
60
+ export function presenceOfConversation(state, paused = false) {
61
+ let tool;
62
+ for (let index = state.items.length - 1; index >= 0; index -= 1) {
63
+ const item = state.items[index];
64
+ if (item.kind === 'tool') {
65
+ tool = { open: item.status === 'running', pendingApproval: false };
66
+ break;
67
+ }
68
+ }
69
+ const said = presenceState(state.running, tool, paused);
70
+ return said === 'idle' && state.asking ? 'waiting' : said;
71
+ }
@@ -0,0 +1,125 @@
1
+ /**
2
+ * The conversation's components, as one contract for every renderer (MOBILE
3
+ * §4.1–4.2, M-032): the props each one takes, and what each says — to the
4
+ * eye and to a screen reader — computed here once, so that a native renderer
5
+ * (Datalayer Mobile's `.native` views) and the web's draw the same rows with
6
+ * the same words and states, over `reduceConversation`'s state.
7
+ *
8
+ * A renderer owns its markup and its look, never these words, these states or
9
+ * the rule of when a person may type.
10
+ *
11
+ * @module portable/views
12
+ */
13
+ import type { ConversationItem, ConversationQuestion, ConversationState } from './conversation';
14
+ import { type PresenceState } from './presence';
15
+ export type MessageItem = Extract<ConversationItem, {
16
+ kind: 'message';
17
+ }>;
18
+ export type ToolItem = Extract<ConversationItem, {
19
+ kind: 'tool';
20
+ }>;
21
+ export type StepItem = Extract<ConversationItem, {
22
+ kind: 'step';
23
+ }>;
24
+ export type TurnEndItem = Extract<ConversationItem, {
25
+ kind: 'end';
26
+ }>;
27
+ export type ErrorItem = Extract<ConversationItem, {
28
+ kind: 'error';
29
+ }>;
30
+ /** A message: the person's words as they are, an answer through the safe Markdown subset. */
31
+ export type MessageRowProps = {
32
+ item: MessageItem;
33
+ };
34
+ /** A tool call, collapsed until the person opens it. */
35
+ export type ToolRowProps = {
36
+ item: ToolItem;
37
+ expanded: boolean;
38
+ onToggle: () => void;
39
+ };
40
+ /** A step of the application's code. */
41
+ export type StepRowProps = {
42
+ item: StepItem;
43
+ };
44
+ /** How a turn that said nothing ended. */
45
+ export type TurnEndRowProps = {
46
+ item: TurnEndItem;
47
+ };
48
+ /** A failure, announced. */
49
+ export type ErrorRowProps = {
50
+ item: ErrorItem;
51
+ };
52
+ /** What the application waits for the person to answer (`loop.ask`). */
53
+ export type QuestionCardProps = {
54
+ question: ConversationQuestion;
55
+ busy: boolean;
56
+ /** A choice, or words, answered by a message. */
57
+ onChoose: (option: string) => void;
58
+ /** A form, answered by a settings change. */
59
+ onForm: (values: Record<string, unknown>) => void;
60
+ };
61
+ /** The line beside the application's face. */
62
+ export type PresenceLineProps = {
63
+ state: PresenceState;
64
+ };
65
+ /** The message box and its one button: Send, or Stop while a turn streams. */
66
+ export type ComposerProps = ComposerState & {
67
+ draft: string;
68
+ onDraft: (draft: string) => void;
69
+ onSend: () => void;
70
+ onStop: () => void;
71
+ };
72
+ /** A whole conversation: its state and what the person can do to it. */
73
+ export type ConversationViewProps = {
74
+ state: ConversationState;
75
+ /** It is being read from the server. */
76
+ opening: boolean;
77
+ /** It was ended; its record stays. */
78
+ ended: boolean;
79
+ /** Why nothing can be sent, when nothing can (paused, closed). */
80
+ closed?: string;
81
+ placeholder: string;
82
+ onSend: (words: string) => void;
83
+ onStop: () => void;
84
+ onForm: (values: Record<string, unknown>) => void;
85
+ };
86
+ /** A tool call's state, in words. */
87
+ export declare const TOOL_STATUS_WORDS: Record<ToolItem['status'], string>;
88
+ /** Said while a conversation is read from the server. */
89
+ export declare const OPENING_WORDS = "Opening your conversation\u2026";
90
+ /** Said once an answer is complete — once, never token by token. */
91
+ export declare const ANSWER_COMPLETE = "The answer is complete.";
92
+ /** Said in place of the message box of an ended conversation. */
93
+ export declare const ENDED_WORDS = "This conversation has ended. Its record stays.";
94
+ /** Said under a question answered in the message box. */
95
+ export declare const ANSWER_BELOW = "Answer in the message box below.";
96
+ /** What a message says to a screen reader: whose, and its words. */
97
+ export declare const messageLabel: (item: MessageItem) => string;
98
+ /** A tool call's one line: its name and its state. */
99
+ export declare const toolLabel: (item: ToolItem) => string;
100
+ /** A step's one line: running or done, and its name. */
101
+ export declare const stepLine: (item: StepItem) => string;
102
+ /** Said of the oldest rows a device did not keep, or nothing. */
103
+ export declare const droppedWords: (dropped: number) => string;
104
+ /** The line of a presence state. */
105
+ export declare const presenceLine: ({ state }: PresenceLineProps) => string;
106
+ /** Whether the person may type, why not, and what the box says. */
107
+ export type ComposerState = {
108
+ /** Why nothing can be sent; `''` when something can. */
109
+ blocked: string;
110
+ canType: boolean;
111
+ /** A turn is streaming: the button is Stop. */
112
+ running: boolean;
113
+ placeholder: string;
114
+ };
115
+ /**
116
+ * The message box, from the conversation: closed or ended, nothing is sent;
117
+ * while it opens or a turn streams, nothing is typed; a form or a file
118
+ * question is answered elsewhere; a text question puts its prompt in the box.
119
+ */
120
+ export declare function composerOf({ state, opening, ended, closed, placeholder, running, }: Pick<ConversationViewProps, 'state' | 'opening' | 'ended' | 'closed' | 'placeholder'> & {
121
+ /** A turn is running, as its client knows it before its first event. */
122
+ running?: boolean;
123
+ }): ComposerState;
124
+ /** Whether the question card is shown: asked, and no turn streaming. */
125
+ export declare const showsQuestion: (state: ConversationState, running?: boolean) => boolean;
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { PRESENCE_LINES } from './presence';
6
+ /** A tool call's state, in words. */
7
+ export const TOOL_STATUS_WORDS = {
8
+ running: 'running',
9
+ complete: 'done',
10
+ error: 'failed',
11
+ };
12
+ /** Said while a conversation is read from the server. */
13
+ export const OPENING_WORDS = 'Opening your conversation…';
14
+ /** Said once an answer is complete — once, never token by token. */
15
+ export const ANSWER_COMPLETE = 'The answer is complete.';
16
+ /** Said in place of the message box of an ended conversation. */
17
+ export const ENDED_WORDS = 'This conversation has ended. Its record stays.';
18
+ /** Said under a question answered in the message box. */
19
+ export const ANSWER_BELOW = 'Answer in the message box below.';
20
+ /** What a message says to a screen reader: whose, and its words. */
21
+ export const messageLabel = (item) => `${item.role === 'user' ? 'You' : 'Answer'}: ${item.text}`;
22
+ /** A tool call's one line: its name and its state. */
23
+ export const toolLabel = (item) => `Tool ${item.name || 'call'}, ${TOOL_STATUS_WORDS[item.status]}`;
24
+ /** A step's one line: running or done, and its name. */
25
+ export const stepLine = (item) => `${item.status === 'running' ? '…' : '✓'} ${item.name}`;
26
+ /** Said of the oldest rows a device did not keep, or nothing. */
27
+ export const droppedWords = (dropped) => dropped > 0
28
+ ? `${dropped} earlier ${dropped === 1 ? 'row is' : 'rows are'} not kept on this device.`
29
+ : '';
30
+ /** The line of a presence state. */
31
+ export const presenceLine = ({ state }) => PRESENCE_LINES[state];
32
+ /**
33
+ * The message box, from the conversation: closed or ended, nothing is sent;
34
+ * while it opens or a turn streams, nothing is typed; a form or a file
35
+ * question is answered elsewhere; a text question puts its prompt in the box.
36
+ */
37
+ export function composerOf({ state, opening, ended, closed, placeholder, running = state.running, }) {
38
+ const blocked = closed || (ended ? ENDED_WORDS : '');
39
+ const asking = state.asking;
40
+ return {
41
+ blocked,
42
+ running,
43
+ canType: !blocked &&
44
+ !opening &&
45
+ !running &&
46
+ asking?.kind !== 'form' &&
47
+ asking?.kind !== 'file',
48
+ placeholder: asking?.kind === 'text' ? asking.prompt : placeholder,
49
+ };
50
+ }
51
+ /** Whether the question card is shown: asked, and no turn streaming. */
52
+ export const showsQuestion = (state, running = state.running) => Boolean(state.asking) && !running;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/agent-runtimes",
3
- "version": "1.5.22",
3
+ "version": "1.5.24",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",