@datalayer/agent-runtimes 1.5.7 → 1.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/dist-embed/chunks/{AgentDetails-KezohVQI.js → AgentDetails-CMBy5o1q.js} +1 -1
  2. package/dist-embed/chunks/{AgentDetailsDialog-CklhMnk7.js → AgentDetailsDialog-D2vH2Nrd.js} +1 -1
  3. package/dist-embed/chunks/{AgentInspector-CtCaRc1L.js → AgentInspector-Bd0oHNAX.js} +1 -1
  4. package/dist-embed/chunks/{AgentInspectorDialog-DB9cx3Gd.js → AgentInspectorDialog-BJUgBPAE.js} +1 -1
  5. package/dist-embed/chunks/{CellSidebarExtension-CfaJL6DQ.js → CellSidebarExtension-CYOVwk1t.js} +6 -6
  6. package/dist-embed/chunks/ChatView-DIdw1rtZ.js +32 -0
  7. package/dist-embed/chunks/{ContextPie-1vP4f-3N.js → ContextPie-B9mAKJc2.js} +1 -1
  8. package/dist-embed/chunks/{DeckComponent-82GVdsoi.js → DeckComponent-CbmzVWcF.js} +2 -2
  9. package/dist-embed/chunks/{DocumentView-SrJloJDo.js → DocumentView-BqsGfNys.js} +1 -1
  10. package/dist-embed/chunks/{EphemeralDocument-t1KulOH8.js → EphemeralDocument-DLaNvwm_.js} +1 -1
  11. package/dist-embed/chunks/{EphemeralNotebook-Co-WQWCc.js → EphemeralNotebook-jnqAJFPI.js} +1 -1
  12. package/dist-embed/chunks/{ExcalidrawComponent-5NeLUYVB.js → ExcalidrawComponent-Cb8yeXqu.js} +1 -1
  13. package/dist-embed/chunks/{ExcalidrawModal-9ZnOB03n.js → ExcalidrawModal-DaPSGYek.js} +1 -1
  14. package/dist-embed/chunks/{JupyterLexicalExtension-Cize8RXy.js → JupyterLexicalExtension-BQINjIFV.js} +9 -9
  15. package/dist-embed/chunks/{KernelVariables-Cl57Zze1.js → KernelVariables-CGQkS5EX.js} +1 -1
  16. package/dist-embed/chunks/{LexicalToolRegistry-CoM9ROsx.js → LexicalToolRegistry-BJ6mpMWn.js} +1 -1
  17. package/dist-embed/chunks/{NotebookToolSurfaces-CWfppxBN.js → NotebookToolSurfaces-DiPifvaW.js} +1 -1
  18. package/dist-embed/chunks/{NotebookView-DOf_K74b.js → NotebookView-IX0wNuX8.js} +1 -1
  19. package/dist-embed/chunks/{Output-9DKTscSv.js → Output-B9XAhyoF.js} +1 -1
  20. package/dist-embed/chunks/{SandboxDetailsDialog-BCfDm6MB.js → SandboxDetailsDialog-COCpmo8m.js} +1 -1
  21. package/dist-embed/chunks/{SchemaForm-BOYPrvf8.js → SchemaForm-WIwdKnrk.js} +1 -1
  22. package/dist-embed/chunks/{WidgetVariableView-BTOwHP78.js → WidgetVariableView-BoGROi-A.js} +1 -1
  23. package/dist-embed/chunks/{YouTubePlugin-Bs4zZIB1.js → YouTubePlugin-BEQBWMwx.js} +1 -1
  24. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-D5p59vS_.js → abnfDiagram-VCTEODGH-CG18Hf18.js} +1 -1
  25. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-DRYbUvhc.js → abnfDiagram-VCTEODGH-D3_T0Lze.js} +1 -1
  26. package/dist-embed/chunks/{ar-SA-G6X2FPQ2-D6XRzkBS.js → ar-SA-G6X2FPQ2-BDWXsTdt.js} +1 -1
  27. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-DQGv0imf.js → architectureDiagram-5GKGNRK7-B1QPAYO8.js} +1 -1
  28. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-B7ITKDup.js → architectureDiagram-5GKGNRK7-B5kSsKje.js} +1 -1
  29. package/dist-embed/chunks/{az-AZ-76LH7QW2-DBTdUiqp.js → az-AZ-76LH7QW2-BGchGiT7.js} +1 -1
  30. package/dist-embed/chunks/{bg-BG-XCXSNQG7-DuhcsaSL.js → bg-BG-XCXSNQG7-vCII6Zuq.js} +1 -1
  31. package/dist-embed/chunks/{blockDiagram-868be97b-DYe-XTjy.js → blockDiagram-868be97b-BvM0ptp7.js} +1 -1
  32. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-y7tEFo3j.js → blockDiagram-I7D4REHJ-B8BmxOM4.js} +1 -1
  33. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-IltJXCd6.js → blockDiagram-I7D4REHJ-ClwWG8yx.js} +1 -1
  34. package/dist-embed/chunks/{bn-BD-2XOGV67Q-CPFeLVSN.js → bn-BD-2XOGV67Q-Beu9yUTu.js} +1 -1
  35. package/dist-embed/chunks/{c4Diagram-3f4bdde3-Bybp0wky.js → c4Diagram-3f4bdde3-S92W2yOx.js} +1 -1
  36. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-DpaHndz8.js → c4Diagram-7LVT6UL2-CNWW_-u7.js} +1 -1
  37. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-CizxVqqX.js → c4Diagram-7LVT6UL2-nSCKKLuX.js} +1 -1
  38. package/dist-embed/chunks/{ca-ES-6MX7JW3Y-gDR_kEC6.js → ca-ES-6MX7JW3Y-CnEo6YQi.js} +1 -1
  39. package/dist-embed/chunks/{celltoolbartracker-DLF4PWyW.js → celltoolbartracker-CO6V5FhH.js} +1 -1
  40. package/dist-embed/chunks/{chunk-2Q5K7J3B-BI6lURun.js → chunk-2Q5K7J3B--r8j4N5L.js} +1 -1
  41. package/dist-embed/chunks/{chunk-2Q5K7J3B-DWoLSrj9.js → chunk-2Q5K7J3B-D3fTIaw3.js} +1 -1
  42. package/dist-embed/chunks/{chunk-5VM5RSS4-SleuNqDC.js → chunk-5VM5RSS4-D76mXyWz.js} +1 -1
  43. package/dist-embed/chunks/{chunk-5VM5RSS4-CDh4wYym.js → chunk-5VM5RSS4-QmrgOATO.js} +1 -1
  44. package/dist-embed/chunks/{chunk-F27PBJKO-h_FwJMTr.js → chunk-F27PBJKO-DdSgBnK0.js} +1 -1
  45. package/dist-embed/chunks/{chunk-F27PBJKO-AvWsNGYY.js → chunk-F27PBJKO-DvNrStTM.js} +1 -1
  46. package/dist-embed/chunks/{chunk-IMKFNOWR-DGRceKiU.js → chunk-IMKFNOWR-DpxND1Ct.js} +1 -1
  47. package/dist-embed/chunks/{chunk-IMKFNOWR-Hx4a5yny.js → chunk-IMKFNOWR-DwqmSZhU.js} +1 -1
  48. package/dist-embed/chunks/{chunk-JWPE2WC7-A4gy2qc4.js → chunk-JWPE2WC7-i7V3vMtZ.js} +1 -1
  49. package/dist-embed/chunks/{chunk-JWPE2WC7-BuJactJo.js → chunk-JWPE2WC7-jla8jvq5.js} +1 -1
  50. package/dist-embed/chunks/{chunk-POPQ4Y6H-CFM-817s.js → chunk-POPQ4Y6H-BGCugXU7.js} +1 -1
  51. package/dist-embed/chunks/{chunk-POPQ4Y6H-CmRF80iG.js → chunk-POPQ4Y6H-ofrenTaa.js} +1 -1
  52. package/dist-embed/chunks/{chunk-SVP7TREG-CryZx9JE.js → chunk-SVP7TREG-2Q2uQyQk.js} +1 -1
  53. package/dist-embed/chunks/{chunk-SVP7TREG-DSNzmytH.js → chunk-SVP7TREG-BIxxVjkU.js} +1 -1
  54. package/dist-embed/chunks/{chunk-TICWLB2K-DyGS3fIj.js → chunk-TICWLB2K-BqA5q52L.js} +1 -1
  55. package/dist-embed/chunks/{chunk-TICWLB2K-CEaDF8ZJ.js → chunk-TICWLB2K-LNiCmYq5.js} +1 -1
  56. package/dist-embed/chunks/{chunk-XXDRQBXY-8Cnzpdjz.js → chunk-XXDRQBXY-CNMg_gvd.js} +1 -1
  57. package/dist-embed/chunks/{chunk-XXDRQBXY-DxQBcVOz.js → chunk-XXDRQBXY-CqtfA3WC.js} +1 -1
  58. package/dist-embed/chunks/{classDiagram-ZZMXUADV-yvP3zMO3.js → classDiagram-ZZMXUADV-Co0jT9i-.js} +1 -1
  59. package/dist-embed/chunks/{classDiagram-ZZMXUADV-BQkO1UYr.js → classDiagram-ZZMXUADV-D6z_X195.js} +1 -1
  60. package/dist-embed/chunks/{classDiagram-f62afe4f-AYfpYKtp.js → classDiagram-f62afe4f-lN62p17q.js} +1 -1
  61. package/dist-embed/chunks/{classDiagram-v2-604399ef-BWyNcT_y.js → classDiagram-v2-604399ef-B_QJ6H8h.js} +1 -1
  62. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-yvP3zMO3.js → classDiagram-v2-VYDZK3BY-Co0jT9i-.js} +1 -1
  63. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-BQkO1UYr.js → classDiagram-v2-VYDZK3BY-D6z_X195.js} +1 -1
  64. package/dist-embed/chunks/{code-block-IT6T5CEO-F4BSIGY6.js → code-block-IT6T5CEO-BA38Km-f.js} +1 -1
  65. package/dist-embed/chunks/{component-DMQ8W8n1.js → component-Chor_J7e.js} +1 -1
  66. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-C3HC0XIY.js → cose-bilkent-JH36ORCC-B5H1cwBa.js} +1 -1
  67. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-MVxlcfpd.js → cose-bilkent-JH36ORCC-C3cTgEcU.js} +1 -1
  68. package/dist-embed/chunks/{createText-aed3d8b3-CEJODAXJ.js → createText-aed3d8b3-BtgHeyNs.js} +1 -1
  69. package/dist-embed/chunks/{cs-CZ-2BRQDIVT-BXQxcYp6.js → cs-CZ-2BRQDIVT-ClBKH9_y.js} +1 -1
  70. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-DNRKTIHx.js → cynefinDiagram-5FMLGOSQ-DPQLh9z7.js} +1 -1
  71. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-D87ENxS0.js → cynefinDiagram-5FMLGOSQ-sdsAonZm.js} +1 -1
  72. package/dist-embed/chunks/{da-DK-5WZEPLOC-Ck3vidj3.js → da-DK-5WZEPLOC-BqFDUAty.js} +1 -1
  73. package/dist-embed/chunks/{dagre-GXQ25YYZ-BOhThFKd.js → dagre-GXQ25YYZ-Bwf_WjLM.js} +1 -1
  74. package/dist-embed/chunks/{dagre-GXQ25YYZ-DscCD5Uq.js → dagre-GXQ25YYZ-DHF-9-7e.js} +1 -1
  75. package/dist-embed/chunks/{de-DE-XR44H4JA-CPZgrOuc.js → de-DE-XR44H4JA-6dsEQn7Z.js} +1 -1
  76. package/dist-embed/chunks/{diagram-S7CK7UJ4-zDQduoQy.js → diagram-S7CK7UJ4-C-N7Ei3I.js} +1 -1
  77. package/dist-embed/chunks/{diagram-S7CK7UJ4-CUhme3Bl.js → diagram-S7CK7UJ4-DEqGRBMT.js} +1 -1
  78. package/dist-embed/chunks/{diagram-UQ7AKVKN-BxhQPjAM.js → diagram-UQ7AKVKN-CvSBE0YU.js} +1 -1
  79. package/dist-embed/chunks/{diagram-UQ7AKVKN-Byi-v8UN.js → diagram-UQ7AKVKN-DACyxI-v.js} +1 -1
  80. package/dist-embed/chunks/{diagram-VSXAHHWV-au-v2v9D.js → diagram-VSXAHHWV-DFze2xro.js} +1 -1
  81. package/dist-embed/chunks/{diagram-VSXAHHWV-CqihYkDH.js → diagram-VSXAHHWV-DOb69VtE.js} +1 -1
  82. package/dist-embed/chunks/{diagram-VX7I27RA-Cd5PaF_n.js → diagram-VX7I27RA-8EKYM_Sx.js} +1 -1
  83. package/dist-embed/chunks/{diagram-VX7I27RA-ETzwrw79.js → diagram-VX7I27RA-CVTSdYyZ.js} +1 -1
  84. package/dist-embed/chunks/{diagram-Z3DM3KII-DkbsvY2A.js → diagram-Z3DM3KII-B-689FF6.js} +1 -1
  85. package/dist-embed/chunks/{diagram-Z3DM3KII-AcMuRFo5.js → diagram-Z3DM3KII-DyiBmBFy.js} +1 -1
  86. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-DuWfMZcD.js → ebnfDiagram-PWID7BFC-DcKvqn_h.js} +1 -1
  87. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-BrEs-SB2.js → ebnfDiagram-PWID7BFC-gj8dgCWR.js} +1 -1
  88. package/dist-embed/chunks/{edges-b2856ca0-Czd3-xvj.js → edges-b2856ca0-BqGGNnb4.js} +1 -1
  89. package/dist-embed/chunks/{el-GR-BZB4AONW-CjQSkw0P.js → el-GR-BZB4AONW-DOMW2ttY.js} +1 -1
  90. package/dist-embed/chunks/{erDiagram-5d81789a-JegaF4gy.js → erDiagram-5d81789a-Bf1Ik49K.js} +1 -1
  91. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-xubaXuKR.js → erDiagram-RLTQ6QDP-B0PyZB_3.js} +1 -1
  92. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-Cpn6_cd1.js → erDiagram-RLTQ6QDP-GSu-_IUJ.js} +1 -1
  93. package/dist-embed/chunks/{es-ES-U4NZUMDT-CQz3Tsxk.js → es-ES-U4NZUMDT-DeyWqjw1.js} +1 -1
  94. package/dist-embed/chunks/{eu-ES-A7QVB2H4-DPwxHXvP.js → eu-ES-A7QVB2H4-CUGbZ0Pv.js} +1 -1
  95. package/dist-embed/chunks/{fa-IR-HGAKTJCU-DlQyRFJP.js → fa-IR-HGAKTJCU-Br8UEVO1.js} +1 -1
  96. package/dist-embed/chunks/{fi-FI-Z5N7JZ37-BL9Dv0rT.js → fi-FI-Z5N7JZ37-BSHjwo8G.js} +1 -1
  97. package/dist-embed/chunks/{flowDb-185abca5-BN_8lgCO.js → flowDb-185abca5-U9PwWSO4.js} +1 -1
  98. package/dist-embed/chunks/{flowDiagram-1629c991-YRlRqB59.js → flowDiagram-1629c991-BecgzQgp.js} +1 -1
  99. package/dist-embed/chunks/{flowDiagram-HODETNUW-lW-icIxi.js → flowDiagram-HODETNUW-2vih3kWM.js} +1 -1
  100. package/dist-embed/chunks/{flowDiagram-HODETNUW-CzRvxVGK.js → flowDiagram-HODETNUW-tcAkcGh4.js} +1 -1
  101. package/dist-embed/chunks/{flowDiagram-v2-1d953310-DBFSFroi.js → flowDiagram-v2-1d953310-Bdmc9G3m.js} +1 -1
  102. package/dist-embed/chunks/{flowchart-elk-definition-6df44142-RjL83g27.js → flowchart-elk-definition-6df44142-oWOWsVNc.js} +1 -1
  103. package/dist-embed/chunks/{fr-FR-RHASNOE6-xB7HyFVv.js → fr-FR-RHASNOE6-BukqZYPz.js} +1 -1
  104. package/dist-embed/chunks/{ganttDiagram-3b0b3873-Dowe9cKl.js → ganttDiagram-3b0b3873-B7lmD9r9.js} +1 -1
  105. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-CNQPBdAP.js → ganttDiagram-EL5Y4UJY-D0E7se_Z.js} +1 -1
  106. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-CLaynGwe.js → ganttDiagram-EL5Y4UJY-DDbqMevq.js} +1 -1
  107. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-CupHqYWl.js → gitGraphDiagram-WWUBYQGX-DK3EJl5z.js} +1 -1
  108. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-CDuBbPX3.js → gitGraphDiagram-WWUBYQGX-DnVwXJWu.js} +1 -1
  109. package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-C06Sje1n.js → gitGraphDiagram-f01e8bc2-B9vpLy6R.js} +1 -1
  110. package/dist-embed/chunks/{gl-ES-HMX3MZ6V-BX50ltap.js → gl-ES-HMX3MZ6V-BxVOJiaI.js} +1 -1
  111. package/dist-embed/chunks/{he-IL-6SHJWFNN-DR3hLzYG.js → he-IL-6SHJWFNN-Dv2VRxlJ.js} +1 -1
  112. package/dist-embed/chunks/{hi-IN-IWLTKZ5I-C3bSDqVc.js → hi-IN-IWLTKZ5I-CFo5RUMz.js} +1 -1
  113. package/dist-embed/chunks/{hu-HU-A5ZG7DT2--mRUDQG6.js → hu-HU-A5ZG7DT2-ul3dS3un.js} +1 -1
  114. package/dist-embed/chunks/{id-ID-SAP4L64H-D6psdwdp.js → id-ID-SAP4L64H-ItVb-zwI.js} +1 -1
  115. package/dist-embed/chunks/{index-qsUgit40.js → index-7FNjj0f2.js} +1 -1
  116. package/dist-embed/chunks/{index-9bae90f3-BY7E8HZU.js → index-9bae90f3-D9849sgo.js} +1 -1
  117. package/dist-embed/chunks/{index-DToDguC3.js → index-B-L6ocEV.js} +1 -1
  118. package/dist-embed/chunks/{index-C01nR1dW.js → index-B0wMyD8Y.js} +1 -1
  119. package/dist-embed/chunks/{index-BzXMsI1v.js → index-B5zrJYwn.js} +6 -6
  120. package/dist-embed/chunks/{index-DcZQ2Oqj.js → index-B764si9c.js} +1 -1
  121. package/dist-embed/chunks/{index-3O3ob63z.js → index-BM6oRiO1.js} +1 -1
  122. package/dist-embed/chunks/{index-DVUMPcVw.js → index-BNFRRs9d.js} +1 -1
  123. package/dist-embed/chunks/{index-D0DBuFMt.js → index-BOYhJnrD.js} +1 -1
  124. package/dist-embed/chunks/{index-CA8D7U2s.js → index-BT4vYFeY.js} +1 -1
  125. package/dist-embed/chunks/{index-C8IekrmL.js → index-BfUXEHI0.js} +1 -1
  126. package/dist-embed/chunks/{index-DvWWLOj6.js → index-BiTIdbkn.js} +1 -1
  127. package/dist-embed/chunks/{index-BhU2ra4k.js → index-BkKEXqQS.js} +1 -1
  128. package/dist-embed/chunks/{index-CpcHHQd7.js → index-BqMoyzEk.js} +1 -1
  129. package/dist-embed/chunks/{index-D1lY79hS.js → index-BrD9dtoV.js} +1 -1
  130. package/dist-embed/chunks/{index-B063q-PC.js → index-CRpZyQIR.js} +4 -4
  131. package/dist-embed/chunks/{index-BblwlEJB.js → index-CZdWsyNw.js} +1 -1
  132. package/dist-embed/chunks/{index-Azo_wV3K.js → index-CjM49jS0.js} +1 -1
  133. package/dist-embed/chunks/{index-rfsiH_M6.js → index-Cp2aJ2ZR.js} +1 -1
  134. package/dist-embed/chunks/{index-Cknn3VQD.js → index-Cql9gOsL.js} +1 -1
  135. package/dist-embed/chunks/{index-jy9kOmqu.js → index-CsgaCZaW.js} +1 -1
  136. package/dist-embed/chunks/{index-DB46n9Tf.js → index-CsxlyZef.js} +1 -1
  137. package/dist-embed/chunks/{index-MTdX216X.js → index-D2LvuQlP.js} +1 -1
  138. package/dist-embed/chunks/{index-s3hayhRS.js → index-DQQXY-7d.js} +2 -2
  139. package/dist-embed/chunks/{index-B0KVfQGJ.js → index-DSF21-29.js} +1 -1
  140. package/dist-embed/chunks/{index-BYMZi_1t.js → index-DSvebR7d.js} +1 -1
  141. package/dist-embed/chunks/{index-a51XM5L8.js → index-DoBEQ07P.js} +3 -3
  142. package/dist-embed/chunks/{index-kpqZuE4J.js → index-O2jaI8TY.js} +1 -1
  143. package/dist-embed/chunks/{index-C6wF35Kk.js → index-QZ3sHHT3.js} +1 -1
  144. package/dist-embed/chunks/{index-BlWZloLe.js → index-TEcp7-f6.js} +2 -2
  145. package/dist-embed/chunks/{index-EpYurdzk.js → index-YlGTgJvL.js} +5 -5
  146. package/dist-embed/chunks/{index-CUL9WiLS.js → index-bm8APcDZ.js} +1 -1
  147. package/dist-embed/chunks/{index-BipXK1tF.js → index-jh9S19of.js} +1 -1
  148. package/dist-embed/chunks/{index-C643Hfu1.js → index-oGqh9y23.js} +1 -1
  149. package/dist-embed/chunks/{index-BdvS7Q4t.js → index-xiH3WzLm.js} +1 -1
  150. package/dist-embed/chunks/{index.esm-CWygaJYM.js → index.esm-B7KoTOBb.js} +1 -1
  151. package/dist-embed/chunks/{index.esm-DYeUXS4c.js → index.esm-CkSite-X.js} +1 -1
  152. package/dist-embed/chunks/{infoDiagram-27XIBGKW-Ctm-zk09.js → infoDiagram-27XIBGKW-DDO50Ria.js} +1 -1
  153. package/dist-embed/chunks/{infoDiagram-27XIBGKW-DRzH33_4.js → infoDiagram-27XIBGKW-O3q53Qe2.js} +1 -1
  154. package/dist-embed/chunks/{infoDiagram-a29d40f1-c78-ZMuT.js → infoDiagram-a29d40f1-jOvOHUyu.js} +1 -1
  155. package/dist-embed/chunks/{isEqual-niFNV5MZ.js → isEqual-CGLTk7wU.js} +1 -1
  156. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-DKv5KL85.js → ishikawaDiagram-5VMMS53U-DuiWhpVW.js} +1 -1
  157. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-CILSTTqm.js → ishikawaDiagram-5VMMS53U-IzmbYzxv.js} +1 -1
  158. package/dist-embed/chunks/{it-IT-JPQ66NNP-BfrG_atL.js → it-IT-JPQ66NNP-BuCUBzia.js} +1 -1
  159. package/dist-embed/chunks/{ja-JP-DBVTYXUO-sahpmNGY.js → ja-JP-DBVTYXUO-BhtQz4sy.js} +1 -1
  160. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-CSMQRlsr.js → journeyDiagram-3NMN7TZE-DGLcsVfC.js} +1 -1
  161. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-DlMPiHSP.js → journeyDiagram-3NMN7TZE-sO-Cfp65.js} +1 -1
  162. package/dist-embed/chunks/{journeyDiagram-95396277-VzHClVrX.js → journeyDiagram-95396277-CA4bGq0G.js} +1 -1
  163. package/dist-embed/chunks/{kaa-6HZHGXH3-BrkhtXQj.js → kaa-6HZHGXH3-B_TI8Aa0.js} +1 -1
  164. package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-DwtFIV_I.js → kab-KAB-ZGHBKWFO-BsSg_l-j.js} +1 -1
  165. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-BkxvAXq2.js → kanban-definition-UXKFOSKX-0wjvwDqk.js} +1 -1
  166. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-esf1amn7.js → kanban-definition-UXKFOSKX-CDtLkjnU.js} +1 -1
  167. package/dist-embed/chunks/{kk-KZ-P5N5QNE5-UxN1LGH5.js → kk-KZ-P5N5QNE5-B7XK5OQq.js} +1 -1
  168. package/dist-embed/chunks/{km-KH-HSX4SM5Z-B7lolfpy.js → km-KH-HSX4SM5Z-Cm2LA9F8.js} +1 -1
  169. package/dist-embed/chunks/{ko-KR-MTYHY66A-CnxefCaN.js → ko-KR-MTYHY66A-CL5s99y5.js} +1 -1
  170. package/dist-embed/chunks/{ku-TR-6OUDTVRD-Bt7bmFnv.js → ku-TR-6OUDTVRD-CiijvKHq.js} +1 -1
  171. package/dist-embed/chunks/{layout-D7Mk1riq.js → layout-BBbB54WC.js} +1 -1
  172. package/dist-embed/chunks/{layout-Sl9Lf6Ae.js → layout-CzrlbzeK.js} +1 -1
  173. package/dist-embed/chunks/{lexicalHooks-DKF-DsxG.js → lexicalHooks-DQxNZEiJ.js} +1 -1
  174. package/dist-embed/chunks/{lt-LT-XHIRWOB4-D6qkXs9m.js → lt-LT-XHIRWOB4-CcA_Z5jR.js} +1 -1
  175. package/dist-embed/chunks/{lv-LV-5QDEKY6T-D8g27j86.js → lv-LV-5QDEKY6T-CAQS9wGm.js} +1 -1
  176. package/dist-embed/chunks/{mermaid.core-BhiOhb5K.js → mermaid.core-DfgoT1cz.js} +3 -3
  177. package/dist-embed/chunks/{mermaid.core-CRlujv29.js → mermaid.core-s-D09gpV.js} +5 -5
  178. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-eCxs0BsL.js → mindmap-definition-YA3MSWOX-B6_K5ZvV.js} +1 -1
  179. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-BJQsz4H1.js → mindmap-definition-YA3MSWOX-BCiSPRJk.js} +1 -1
  180. package/dist-embed/chunks/{mindmap-definition-e4c1d938-DoGG9eDO.js → mindmap-definition-e4c1d938-D7gmABiC.js} +1 -1
  181. package/dist-embed/chunks/{mr-IN-CRQNXWMA-CMbVGyJm.js → mr-IN-CRQNXWMA-DMAAvsDA.js} +1 -1
  182. package/dist-embed/chunks/{my-MM-5M5IBNSE-B-KPsx1j.js → my-MM-5M5IBNSE-t2TKqrjW.js} +1 -1
  183. package/dist-embed/chunks/{nb-NO-T6EIAALU-Cl7QLAt7.js → nb-NO-T6EIAALU-Bi3ZI-HQ.js} +1 -1
  184. package/dist-embed/chunks/{nl-NL-IS3SIHDZ-Brzte_o2.js → nl-NL-IS3SIHDZ-B8UdlW1K.js} +1 -1
  185. package/dist-embed/chunks/{nn-NO-6E72VCQL-CzCKEx02.js → nn-NO-6E72VCQL-Bt87hI27.js} +1 -1
  186. package/dist-embed/chunks/{oc-FR-POXYY2M6-DA72PkVY.js → oc-FR-POXYY2M6-009NL0Pk.js} +1 -1
  187. package/dist-embed/chunks/{pa-IN-N4M65BXN-CzkFYtL0.js → pa-IN-N4M65BXN-BfUtS2yt.js} +1 -1
  188. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-CD3xZvKE.js → pegDiagram-XKGWAZYB-BX0ZYMng.js} +1 -1
  189. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-CV-d6HkK.js → pegDiagram-XKGWAZYB-CBrnWUaX.js} +1 -1
  190. package/dist-embed/chunks/{percentages-BXMCSKIN-mjCCp4uI.js → percentages-BXMCSKIN-CfzulzOv.js} +5 -5
  191. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-toANOh_O.js → pieDiagram-E7YTZNPT-B1My5W85.js} +1 -1
  192. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-DipS--g7.js → pieDiagram-E7YTZNPT-Ct8dzoLU.js} +1 -1
  193. package/dist-embed/chunks/{pieDiagram-c941bede-DytniBrW.js → pieDiagram-c941bede-7DZ-Bl8U.js} +1 -1
  194. package/dist-embed/chunks/{pl-PL-T2D74RX3-F4ebFTYK.js → pl-PL-T2D74RX3-DbtOl9_x.js} +1 -1
  195. package/dist-embed/chunks/{pt-BR-5N22H2LF-B5i8LuE4.js → pt-BR-5N22H2LF-B1pjR1_T.js} +1 -1
  196. package/dist-embed/chunks/{pt-PT-UZXXM6DQ-BQ7hfRRg.js → pt-PT-UZXXM6DQ-takC7TRa.js} +1 -1
  197. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-D_j5dzK-.js → quadrantDiagram-AXDQQJYC-B1mlT7fN.js} +1 -1
  198. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-DlhtjZ-k.js → quadrantDiagram-AXDQQJYC-B7p4unpj.js} +1 -1
  199. package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-BQ2yjLYu.js → quadrantDiagram-cf8b8fe0-CTMh_Ad5.js} +1 -1
  200. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-CZFkdwSz.js → railroadDiagram-O6MQD6OU-CJEwr5d9.js} +1 -1
  201. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-aWlxxhLc.js → railroadDiagram-O6MQD6OU-xr8bPIl7.js} +1 -1
  202. package/dist-embed/chunks/{renderer-2D5v6hpK.js → renderer-Ba0Cwb4p.js} +1 -1
  203. package/dist-embed/chunks/{requirementDiagram-53bda41b-CWV_b9FE.js → requirementDiagram-53bda41b-Dv1Piop_.js} +1 -1
  204. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-EVwiX2gg.js → requirementDiagram-BXWQKSXE-Bw89vFiC.js} +1 -1
  205. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-BSF51uZZ.js → requirementDiagram-BXWQKSXE-rabT3v-j.js} +1 -1
  206. package/dist-embed/chunks/{ro-RO-JPDTUUEW-BdcZRS6h.js → ro-RO-JPDTUUEW-DkkqyFBF.js} +1 -1
  207. package/dist-embed/chunks/{ru-RU-B4JR7IUQ-Cta1z8f6.js → ru-RU-B4JR7IUQ-CikD-ITp.js} +1 -1
  208. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-BqD6w06O.js → sankeyDiagram-P5KCCOFB-5SpI76uK.js} +1 -1
  209. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-t6rHaBZJ.js → sankeyDiagram-P5KCCOFB-D--cx9I2.js} +1 -1
  210. package/dist-embed/chunks/{sankeyDiagram-c3ef121a-C9O52Zx9.js → sankeyDiagram-c3ef121a-DbhtSWkB.js} +1 -1
  211. package/dist-embed/chunks/{sequenceDiagram-82a5b84f-Dga-BwWi.js → sequenceDiagram-82a5b84f-DpxBSKAk.js} +1 -1
  212. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-ih6W0378.js → sequenceDiagram-WJ2MYXX4-DGNwWgf8.js} +1 -1
  213. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-DphVeQVS.js → sequenceDiagram-WJ2MYXX4-D_wK-z7a.js} +1 -1
  214. package/dist-embed/chunks/{sessions-APuuDN3K.js → sessions-DQkTozai.js} +1 -1
  215. package/dist-embed/chunks/{si-LK-N5RQ5JYF-DYy_OKHx.js → si-LK-N5RQ5JYF-BqlWRhwK.js} +1 -1
  216. package/dist-embed/chunks/{sizeCapture-INFHLROL-o0dzt8-T.js → sizeCapture-INFHLROL-4Uh8JUjf.js} +1 -1
  217. package/dist-embed/chunks/{sizeCapture-INFHLROL-CxIMCruL.js → sizeCapture-INFHLROL-g-K-6XON.js} +1 -1
  218. package/dist-embed/chunks/{sk-SK-C5VTKIMK-B4A8rgzq.js → sk-SK-C5VTKIMK-DGsmi02E.js} +1 -1
  219. package/dist-embed/chunks/{sl-SI-NN7IZMDC-Dn2yU1RA.js → sl-SI-NN7IZMDC-HFz45GOs.js} +1 -1
  220. package/dist-embed/chunks/{stateDiagram-43e79a5f-RBFnM6HD.js → stateDiagram-43e79a5f-DxbV4jP9.js} +1 -1
  221. package/dist-embed/chunks/{stateDiagram-D77RDMKH-R5RRRvFY.js → stateDiagram-D77RDMKH-C_wYpqah.js} +1 -1
  222. package/dist-embed/chunks/{stateDiagram-D77RDMKH-DUbaZs3a.js → stateDiagram-D77RDMKH-D-l3u-WY.js} +1 -1
  223. package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-O5FpnsEz.js → stateDiagram-v2-2041ed4f-BzxzaDdI.js} +1 -1
  224. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-xKTLvXGN.js → stateDiagram-v2-MP3YSRHH-BGYkOvTS.js} +1 -1
  225. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-CxTXB7mT.js → stateDiagram-v2-MP3YSRHH-IEMNMwm0.js} +1 -1
  226. package/dist-embed/chunks/{styles-455b33cd-D4Xv2qYx.js → styles-455b33cd-C42Lyulv.js} +1 -1
  227. package/dist-embed/chunks/{styles-f932cba9-BRIqeB8k.js → styles-f932cba9-Bf6H3IMq.js} +1 -1
  228. package/dist-embed/chunks/{styles-fcc2142b-CSNd2DtU.js → styles-fcc2142b-OZg6fE-p.js} +1 -1
  229. package/dist-embed/chunks/{subset-shared.chunk-SugOGKH0.js → subset-shared.chunk-KC0vshev.js} +1 -1
  230. package/dist-embed/chunks/{subset-worker.chunk-CHn-RJwQ.js → subset-worker.chunk-CXZAV_Z5.js} +1 -1
  231. package/dist-embed/chunks/{sv-SE-XGPEYMSR-DIGNKjA1.js → sv-SE-XGPEYMSR-yEdPvwHy.js} +1 -1
  232. package/dist-embed/chunks/{svgDrawCommon-148a3cd9-ioBjWI45.js → svgDrawCommon-148a3cd9-D9MRwoYw.js} +1 -1
  233. package/dist-embed/chunks/{swimlanes-42K2YHIH-DID4P1mJ.js → swimlanes-42K2YHIH-CPkom4Q8.js} +1 -1
  234. package/dist-embed/chunks/{swimlanes-42K2YHIH-BPXSOfWl.js → swimlanes-42K2YHIH-DJLFcHMt.js} +1 -1
  235. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-C5LAWW5q.js → swimlanesDiagram-VR7AAH4N-BJOhuN-y.js} +1 -1
  236. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-B216TpFb.js → swimlanesDiagram-VR7AAH4N-BRTtY1QX.js} +1 -1
  237. package/dist-embed/chunks/{ta-IN-2NMHFXQM-h5n2V9ms.js → ta-IN-2NMHFXQM-0i424YGX.js} +1 -1
  238. package/dist-embed/chunks/{th-TH-HPSO5L25-DPUFV7b6.js → th-TH-HPSO5L25-BidF5zNO.js} +1 -1
  239. package/dist-embed/chunks/{timeline-definition-24CTP7MA-CsrTDzso.js → timeline-definition-24CTP7MA-BasSLg-_.js} +1 -1
  240. package/dist-embed/chunks/{timeline-definition-24CTP7MA-Y3tUsmSp.js → timeline-definition-24CTP7MA-BfGIJi1H.js} +1 -1
  241. package/dist-embed/chunks/{timeline-definition-7545f45a-Dwe7O50H.js → timeline-definition-7545f45a-BWwgvKxJ.js} +1 -1
  242. package/dist-embed/chunks/{tr-TR-DEFEU3FU-BezJkdMx.js → tr-TR-DEFEU3FU-BoHR9SlC.js} +1 -1
  243. package/dist-embed/chunks/{uk-UA-QMV73CPH-CqILlosm.js → uk-UA-QMV73CPH-DfRkqqO0.js} +1 -1
  244. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-BhVdyHxt.js → vennDiagram-4TSXK5OY-D1T__rd2.js} +1 -1
  245. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-ClTlC2ql.js → vennDiagram-4TSXK5OY-DMIYCfJ-.js} +1 -1
  246. package/dist-embed/chunks/{vi-VN-M7AON7JQ-CnkPVQ0a.js → vi-VN-M7AON7JQ-CvZ4wpTw.js} +1 -1
  247. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-kS16z5iB.js → wardleyDiagram-VM6X3IG4-CiKuFI26.js} +1 -1
  248. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-DbWIMpvU.js → wardleyDiagram-VM6X3IG4-DtlNUHLy.js} +1 -1
  249. package/dist-embed/chunks/{xychartDiagram-3f383b91-DYoT_EjG.js → xychartDiagram-3f383b91-DzyuxW4K.js} +1 -1
  250. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-KeQp-cQ1.js → xychartDiagram-S5SC5T6Z-BIeFUHrS.js} +1 -1
  251. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-CdwuwQAF.js → xychartDiagram-S5SC5T6Z-p6pYRkk6.js} +1 -1
  252. package/dist-embed/chunks/{zh-CN-LNUGB5OW-CNdfctAT.js → zh-CN-LNUGB5OW-Cx1Azgu2.js} +1 -1
  253. package/dist-embed/chunks/{zh-HK-E62DVLB3-DEXwa5-T.js → zh-HK-E62DVLB3-DMjy1d4Z.js} +1 -1
  254. package/dist-embed/chunks/{zh-TW-RAJ6MFWO-BF7cCYAK.js → zh-TW-RAJ6MFWO-J-YjINmR.js} +1 -1
  255. package/dist-embed/datalayer-app-main.js +22 -22
  256. package/lib/apps/apps/appspec.d.ts +10 -1
  257. package/lib/apps/apps/appspec.js +104 -7
  258. package/lib/apps/core/index.d.ts +26 -0
  259. package/lib/apps/core/index.js +20 -0
  260. package/lib/apps/plugins/chat/ChatView.js +21 -4
  261. package/lib/protocols/mcp/client.d.ts +73 -0
  262. package/lib/protocols/mcp/client.js +136 -0
  263. package/lib/protocols/mcp/index.d.ts +1 -0
  264. package/lib/protocols/mcp/index.js +3 -1
  265. package/lib/protocols/web-bot-auth/tap.d.ts +56 -0
  266. package/lib/protocols/web-bot-auth/tap.js +185 -0
  267. package/lib/specs/apps.js +56 -26
  268. package/lib/specs/appspecSchema.js +180 -5
  269. package/lib/specs/protocols.js +5 -5
  270. package/lib/types/agentspecs.d.ts +66 -3
  271. package/package.json +3 -1
  272. package/dist-embed/chunks/ChatView-B3QqHhAP.js +0 -32
@@ -24,7 +24,7 @@
24
24
  *
25
25
  * @module apps/apps/appspec
26
26
  */
27
- import type { AppAccent, AppThemeMode, AppThemeVariant, AppAssistantCharacter, AppEmbedMode, AppCustomComponentSpec, AppVoiceSpec, AppKind, AppLayout, AppPageOutputComponent, AppSpec } from '../../types/agentspecs';
27
+ import type { AppAccent, AppThemeMode, AppThemeVariant, AppAssistantCharacter, AppEmbedMode, PapProfile, AppCustomComponentSpec, AppVoiceSpec, AppKind, AppLayout, AppPageOutputComponent, AppSpec } from '../../types/agentspecs';
28
28
  /** The version of the spec itself. */
29
29
  export declare const APP_SCHEMA = "loop.app/v1";
30
30
  /** The language an application's own words are in, unless it says (LOOP P-26). */
@@ -60,6 +60,15 @@ type Data = Record<string, unknown>;
60
60
  export declare function retentionDays(keepFor: string): number;
61
61
  /** An application with nothing said: what *Start blank* opens. */
62
62
  export declare function emptyAppspec(kind?: AppKind): AppSpec;
63
+ /** The Personal Agent Protocol profiles Datalayer speaks, as agentspecs' `PAP_PROFILES` (PAP_DATALAYER S-03). */
64
+ export declare const PAP_PROFILES: readonly PapProfile[];
65
+ /** The profile a `pap` block is written for when the Studio or a builder starts one. */
66
+ export declare const PAP_PROFILE: PapProfile;
67
+ /**
68
+ * What is wrong with a `pap` block's profile, in agentspecs' sentence
69
+ * (`pap_profile_problem`); `undefined` when it is one Datalayer speaks.
70
+ */
71
+ export declare function papProfileProblem(value: unknown): string | undefined;
63
72
  /** An application's voice (VOICE.md VO-41): off unless said. */
64
73
  export declare const DEFAULT_VOICE: AppVoiceSpec;
65
74
  /** What a page's output may be drawn with (LOOP P-05), and the property of each that shows its value. */
@@ -248,6 +248,23 @@ function parseConnection(data) {
248
248
  only: texts(data.only),
249
249
  };
250
250
  }
251
+ /** The Personal Agent Protocol profiles Datalayer speaks, as agentspecs' `PAP_PROFILES` (PAP_DATALAYER S-03). */
252
+ export const PAP_PROFILES = ['draft-01'];
253
+ /** The profile a `pap` block is written for when the Studio or a builder starts one. */
254
+ export const PAP_PROFILE = PAP_PROFILES[PAP_PROFILES.length - 1];
255
+ /**
256
+ * What is wrong with a `pap` block's profile, in agentspecs' sentence
257
+ * (`pap_profile_problem`); `undefined` when it is one Datalayer speaks.
258
+ */
259
+ export function papProfileProblem(value) {
260
+ if (value === undefined || value === null || value === '') {
261
+ return `Its \`pap\` block names no Personal Agent Protocol profile: add \`profile: ${PAP_PROFILE}\`.`;
262
+ }
263
+ if (!PAP_PROFILES.includes(value)) {
264
+ return `This application asks for Personal Agent Protocol profile “${String(value)}”; Datalayer speaks ${PAP_PROFILES.join(' or ')}.`;
265
+ }
266
+ return undefined;
267
+ }
251
268
  const PAP_INTERFACES = ['agent', 'openapi', 'mcp', 'web'];
252
269
  const PAP_SIGN_IN = ['direct', 'device', 'mediated'];
253
270
  const PAP_DEFAULT_INTERFACES = ['agent'];
@@ -265,6 +282,7 @@ const enumsOf = (value, allowed, otherwise) => {
265
282
  function parsePap(data) {
266
283
  const company = isData(data.company) ? data.company : {};
267
284
  return {
285
+ profile: data.profile,
268
286
  connections: records(data.connections).map(connection => ({
269
287
  id: text(connection.id),
270
288
  company: text(connection.company),
@@ -286,17 +304,53 @@ function parsePap(data) {
286
304
  operations: records(company.operations).map(operation => ({
287
305
  action: text(operation.action),
288
306
  tool: text(operation.tool),
307
+ ...(isData(operation.allows)
308
+ ? { allows: parsePapStanding(operation.allows) }
309
+ : {}),
289
310
  summary: text(operation.summary),
290
311
  userApprovalRequired: flag(operation.user_approval_required, true),
291
312
  })),
292
313
  },
293
314
  };
294
315
  }
316
+ /** A standing permission an operation gives (PAP_DATALAYER R-07), as agentspecs reads it. */
317
+ function parsePapStanding(data) {
318
+ return {
319
+ connection: text(data.connection),
320
+ action: oneOf(data.action, ['write', 'buy'], 'buy'),
321
+ limits: records(data.limits).map(limit => ({
322
+ path: text(limit.path),
323
+ ...(typeof limit.maximum === 'string'
324
+ ? { maximum: text(limit.maximum) }
325
+ : {}),
326
+ ...(typeof limit.allowed === 'string'
327
+ ? { allowed: text(limit.allowed) }
328
+ : {}),
329
+ })),
330
+ uses: text(data.uses),
331
+ days: text(data.days),
332
+ };
333
+ }
334
+ /** A standing permission as its document says it: every field, none has a default. */
335
+ function dumpPapStanding(standing) {
336
+ return {
337
+ connection: standing.connection,
338
+ action: standing.action,
339
+ limits: standing.limits.map(limit => ({
340
+ path: limit.path,
341
+ ...(limit.maximum !== undefined ? { maximum: limit.maximum } : {}),
342
+ ...(limit.allowed !== undefined ? { allowed: limit.allowed } : {}),
343
+ })),
344
+ uses: standing.uses,
345
+ days: standing.days,
346
+ };
347
+ }
295
348
  /** Personal Agent Protocol as its document says it, nothing at its default. */
296
349
  function dumpPap(pap) {
297
350
  if (!pap)
298
351
  return {};
299
352
  return new Writer()
353
+ .text('profile', pap.profile, '\u0000')
300
354
  .list('connections', pap.connections.map(connection => new Writer()
301
355
  .text('id', connection.id, '\u0000')
302
356
  .text('company', connection.company, '\u0000')
@@ -318,12 +372,23 @@ function dumpPap(pap) {
318
372
  .list('registered_agents', pap.company.registeredAgents)
319
373
  .list('operations', pap.company.operations.map(operation => new Writer()
320
374
  .text('action', operation.action, '\u0000')
321
- .text('tool', operation.tool, '\u0000')
375
+ // An operation that allows a standing permission calls no tool (R-07).
376
+ .text('tool', operation.tool, operation.allows ? '' : '\u0000')
377
+ .present('allows', operation.allows
378
+ ? dumpPapStanding(operation.allows)
379
+ : undefined)
322
380
  .text('summary', operation.summary, '\u0000')
323
381
  .value('user_approval_required', operation.userApprovalRequired, true).data)).data).data;
324
382
  }
325
- /** PACT (AGENT_PROTOCOLS PI-01): the businesses it asks for each person. */
383
+ /** PACT (AGENT_PROTOCOLS PI-01): the businesses it asks for each person, and as one (PR-13). */
326
384
  function parsePact(data) {
385
+ const business = isData(data.business) ? data.business : {};
386
+ const scopes = {};
387
+ if (isData(business.scopes)) {
388
+ for (const [scope, said] of Object.entries(business.scopes)) {
389
+ scopes[scope] = text(said);
390
+ }
391
+ }
327
392
  return {
328
393
  connections: records(data.connections).map(connection => ({
329
394
  id: text(connection.id),
@@ -332,6 +397,15 @@ function parsePact(data) {
332
397
  access: oneOf(connection.access, ['read', 'write'], 'read'),
333
398
  scopes: texts(connection.scopes),
334
399
  })),
400
+ business: {
401
+ enabled: flag(business.enabled, false),
402
+ brand: text(business.brand),
403
+ scopes,
404
+ registeredAgents: records(business.registered_agents).map(agent => ({
405
+ issuer: text(agent.issuer),
406
+ jwksUri: text(agent.jwks_uri),
407
+ })),
408
+ },
335
409
  };
336
410
  }
337
411
  /** Commerce (AGENT_PROTOCOLS PI-01): the merchants it shops at for each person. */
@@ -373,12 +447,26 @@ function dumpCommerce(commerce) {
373
447
  function dumpPact(pact) {
374
448
  if (!pact)
375
449
  return {};
376
- return new Writer().list('connections', pact.connections.map(connection => new Writer()
450
+ const business = pact.business ?? {
451
+ enabled: false,
452
+ brand: '',
453
+ scopes: {},
454
+ registeredAgents: [],
455
+ };
456
+ return new Writer()
457
+ .list('connections', pact.connections.map(connection => new Writer()
377
458
  .text('id', connection.id, '\u0000')
378
459
  .text('brand', connection.brand, '\u0000')
379
460
  .text('audience', connection.audience, '\u0000')
380
461
  .value('access', connection.access, 'read')
381
- .list('scopes', connection.scopes).data)).data;
462
+ .list('scopes', connection.scopes).data))
463
+ .part('business', new Writer()
464
+ .value('enabled', business.enabled, false)
465
+ .text('brand', business.brand)
466
+ .part('scopes', { ...business.scopes })
467
+ .list('registered_agents', business.registeredAgents.map(agent => new Writer()
468
+ .text('issuer', agent.issuer, '\u0000')
469
+ .text('jwks_uri', agent.jwksUri, '\u0000').data)).data).data;
382
470
  }
383
471
  /** A2A (AGENT_PROTOCOLS PR-02): the extensions its Agent Card advertises. */
384
472
  function parseA2A(data) {
@@ -942,8 +1030,16 @@ export function parseAppspec(document) {
942
1030
  if (isData(data.decision)) {
943
1031
  app.decision = parseDecision(data.decision);
944
1032
  }
945
- if (isData(data.pap)) {
946
- app.pap = parsePap(data.pap);
1033
+ // A `pap` block names a profile Datalayer speaks, or it is refused and not
1034
+ // read (PAP_DATALAYER S-03); a block saying nothing is no block.
1035
+ if (isData(data.pap) && Object.keys(data.pap).length > 0) {
1036
+ const problem = papProfileProblem(data.pap.profile);
1037
+ if (problem) {
1038
+ problems.push(problem);
1039
+ }
1040
+ else {
1041
+ app.pap = parsePap(data.pap);
1042
+ }
947
1043
  }
948
1044
  if (isData(data.pact)) {
949
1045
  app.pact = parsePact(data.pact);
@@ -1006,7 +1102,8 @@ export function protocolsProblems(app) {
1006
1102
  }
1007
1103
  const configured = {
1008
1104
  pap: Boolean(app.pap && (app.pap.connections.length > 0 || app.pap.company.enabled)),
1009
- pact: Boolean(app.pact && app.pact.connections.length > 0),
1105
+ pact: Boolean(app.pact &&
1106
+ (app.pact.connections.length > 0 || app.pact.business?.enabled)),
1010
1107
  a2a: Boolean(app.a2a && app.a2a.extensions.length > 0),
1011
1108
  };
1012
1109
  for (const spec of Object.values(PROTOCOL_CATALOGUE)) {
@@ -710,7 +710,33 @@ export type LoopChatExtrasValue = {
710
710
  * every snapshot the chat receives, `undefined` included.
711
711
  */
712
712
  onUsage?: (snapshot: ContextSnapshotData | undefined) => void;
713
+ /**
714
+ * What the person types goes somewhere else than the agent, live.
715
+ *
716
+ * While set, the composer's placeholder is `says` and sending hands the
717
+ * words to `send`, never to the model or the runtime: a person talking with
718
+ * a company themselves in a Direct Conversation (PAP_DATALAYER P-08), their
719
+ * own words sent as theirs. A refusal `send` throws is said under the
720
+ * composer and the words stay where they were typed. Unset, the composer
721
+ * talks to the agent again.
722
+ */
723
+ sendInstead?: {
724
+ /** Where the words go, in the person's words, in place of the placeholder. */
725
+ says: string;
726
+ send: (text: string) => Promise<void>;
727
+ };
713
728
  };
729
+ /**
730
+ * The words sent where the extras say instead of to the agent
731
+ * (`sendInstead`): `null` when they go to the agent as usual; else whether
732
+ * they were taken, and the refusal in a sentence when they were not.
733
+ */
734
+ export declare function sendInstead(extras: Pick<LoopChatExtrasValue, 'sendInstead'>, message: string): Promise<{
735
+ sent: true;
736
+ } | {
737
+ sent: false;
738
+ refused: string;
739
+ } | null>;
714
740
  export type ChatExtrasContribution = {
715
741
  /** Stable id, for the registry and the graph. */
716
742
  id: string;
@@ -181,6 +181,26 @@ export { LoopA2uiComponent, } from './a2uiComponents';
181
181
  // Where the files of an application's folder are served (LOOP P-29): said
182
182
  // by the page side its package carries.
183
183
  export { LoopAppFiles } from './appFiles';
184
+ /**
185
+ * The words sent where the extras say instead of to the agent
186
+ * (`sendInstead`): `null` when they go to the agent as usual; else whether
187
+ * they were taken, and the refusal in a sentence when they were not.
188
+ */
189
+ export async function sendInstead(extras, message) {
190
+ if (!extras.sendInstead) {
191
+ return null;
192
+ }
193
+ try {
194
+ await extras.sendInstead.send(message);
195
+ return { sent: true };
196
+ }
197
+ catch (error) {
198
+ return {
199
+ sent: false,
200
+ refused: error instanceof Error ? error.message : String(error),
201
+ };
202
+ }
203
+ }
184
204
  export const LoopChatExtras = defineContributionPoint('loop.chat.extras');
185
205
  export const LoopOpeningNotebook = defineContributionPoint('loop.notebook.opening');
186
206
  export const LoopOpeningDocument = defineContributionPoint('loop.document.opening');
@@ -42,7 +42,7 @@ import { BROWSER_CODE_TOOL, dataUrlBase64, givenFilesSentence, sandboxFileName,
42
42
  import { useConfig } from '../../../hooks/useConfig';
43
43
  import { useSkills, useSkillActions } from '../../../hooks/useSkills';
44
44
  import { AI_MODEL_CATALOGUE, isChatModel } from '../../../specs/models';
45
- import { LoopAgentBlueprint, LoopAgentGate, LoopChatComposer, LoopChatExtras, LoopChatHeader, LoopChatLayout, LoopChatSuggestion, LoopChatSurface, LoopChatTurn, LoopCommand, LoopFrontendTool, LoopRunProps, LoopSlots, agentServerOf, noRuntimeSaid, canOpenView, runForwardedProps, onPromptFocusRequest, onSurfaceRequest, useLoopPromptStore, } from '../../core';
45
+ import { LoopAgentBlueprint, LoopAgentGate, LoopChatComposer, sendInstead, LoopChatExtras, LoopChatHeader, LoopChatLayout, LoopChatSuggestion, LoopChatSurface, LoopChatTurn, LoopCommand, LoopFrontendTool, LoopRunProps, LoopSlots, agentServerOf, noRuntimeSaid, canOpenView, runForwardedProps, onPromptFocusRequest, onSurfaceRequest, useLoopPromptStore, } from '../../core';
46
46
  import { messageText, turnWritersOf } from './turnState';
47
47
  import { isInactiveSurfaceContribution, orderToolContributions, toolsForChatView, } from './chatViewTools';
48
48
  import { agentBundleToolDefinitions, useAgentCommandTools, } from '../../../tools/adapters/commands';
@@ -486,11 +486,27 @@ export default function ChatView({ workspace }) {
486
486
  * place "the first prompt" means the same thing regardless of which one
487
487
  * a person or a host used.
488
488
  */
489
+ setTransient(null);
490
+ /*
491
+ * Words that go elsewhere than the agent (`sendInstead`, PAP_DATALAYER
492
+ * P-08): a Direct Conversation with a company, the person's own words
493
+ * sent as theirs. Neither a command nor a turn, and never the model's;
494
+ * refused, the words stay where they were typed and the reason is said.
495
+ */
496
+ const elsewhere = await sendInstead(chatExtrasRef.current, message);
497
+ if (elsewhere) {
498
+ if (elsewhere.sent) {
499
+ setDraft('');
500
+ }
501
+ else {
502
+ setTransient(elsewhere.refused);
503
+ }
504
+ return;
505
+ }
489
506
  if (!firstPromptFired.current) {
490
507
  firstPromptFired.current = true;
491
508
  inputPromptConfig?.firstPromptHook?.();
492
509
  }
493
- setTransient(null);
494
510
  // The turn begins where the message goes out (`sendNow`): a command
495
511
  // the workspace runs is not one.
496
512
  const outcome = await workspace.submit(message);
@@ -1594,8 +1610,9 @@ export default function ChatView({ workspace }) {
1594
1610
  // send button into a stop — the person keeps a way out.
1595
1611
  isLoading: busy,
1596
1612
  onStop: () => workspace.viewControls.stop?.(),
1597
- // The reason where the typing would go, read before the person types.
1598
- placeholder: disabledReason ?? placeholder,
1613
+ // The reason where the typing would go, read before the person types;
1614
+ // where it goes when it goes elsewhere than the agent (P-08).
1615
+ placeholder: disabledReason ?? chatExtras.sendInstead?.says ?? placeholder,
1599
1616
  typingSuggestions: suggestions.map(item => item.text),
1600
1617
  // The same openers behind the composer's suggestions control.
1601
1618
  suggestions: chatSuggestions,
@@ -0,0 +1,73 @@
1
+ import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
2
+ import type { CallToolResult, GetPromptResult, ReadResourceResult, Tool } from '@modelcontextprotocol/sdk/types.js';
3
+ /** A listed tool as a client reads it. */
4
+ export interface McpToolReading {
5
+ name: string;
6
+ title: string | null;
7
+ description: string | null;
8
+ /** Its parameters' names, sorted. */
9
+ parameters: string[];
10
+ /** Those it requires, sorted. */
11
+ required: string[];
12
+ /** Whether it says an output schema (answers structured content). */
13
+ structured: boolean;
14
+ readOnly: boolean;
15
+ destructive: boolean;
16
+ idempotent: boolean;
17
+ openWorld: boolean;
18
+ }
19
+ /** A tool's answer as a client reads it. */
20
+ export interface McpCallReading {
21
+ isError: boolean;
22
+ /** Its text parts, joined by a newline. */
23
+ text: string;
24
+ structured: Record<string, unknown> | null;
25
+ }
26
+ /** A text resource's contents as a client reads them. */
27
+ export interface McpResourceReading {
28
+ uri: string;
29
+ mimeType: string | null;
30
+ text: string;
31
+ }
32
+ /** A prompt's message as a client reads it. */
33
+ export interface McpPromptReading {
34
+ role: 'user' | 'assistant';
35
+ text: string;
36
+ }
37
+ /** A listed tool: its parameters, whether it answers structured, its hints. */
38
+ export declare function toolReading(tool: Tool): McpToolReading;
39
+ /** A tool's answer: refused or not, its text parts joined, its structured content. */
40
+ export declare function callReading(result: CallToolResult): McpCallReading;
41
+ /** A resource's text contents; a binary one is refused, never decoded here. */
42
+ export declare function resourceReading(result: ReadResourceResult): McpResourceReading[];
43
+ /** A prompt's messages as text; a message of another kind is refused. */
44
+ export declare function promptReading(result: GetPromptResult): McpPromptReading[];
45
+ /** Where an `McpClient` connects: a Streamable HTTP endpoint, or any transport. */
46
+ export type McpServerAddress = {
47
+ url: string;
48
+ /** Headers sent with every request (a bearer, for one). */
49
+ headers?: Record<string, string>;
50
+ } | {
51
+ transport: Transport;
52
+ };
53
+ /**
54
+ * An MCP client: connects, lists and calls tools, reads resources, gets
55
+ * prompts, and answers each as the readings above. The SDK's `Client` does
56
+ * the protocol (the initialize handshake, the version negotiated, a
57
+ * structured answer checked against the tool's output schema).
58
+ */
59
+ export declare class McpClient {
60
+ private readonly client;
61
+ private readonly agreed;
62
+ private constructor();
63
+ /** Connected to `server`, said to it as `name` at `version`. */
64
+ static connect(server: McpServerAddress, name?: string, version?: string): Promise<McpClient>;
65
+ /** The protocol version agreed with the server. */
66
+ get protocolVersion(): string;
67
+ /** Every tool the server lists, through its pages. */
68
+ listTools(): Promise<McpToolReading[]>;
69
+ callTool(name: string, args: Record<string, unknown>): Promise<McpCallReading>;
70
+ readResource(uri: string): Promise<McpResourceReading[]>;
71
+ getPrompt(name: string, args: Record<string, string>): Promise<McpPromptReading[]>;
72
+ close(): Promise<void>;
73
+ }
@@ -0,0 +1,136 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * An MCP client in TypeScript, on the official `@modelcontextprotocol/sdk`
7
+ * (AGENT_PROTOCOLS PR-51, decided 2026-10-13), and what it reads from a
8
+ * server's answers — the twin of `agent_runtimes.protocols.mcp.reading`.
9
+ *
10
+ * The readings are the plain shape both languages agree on, held to
11
+ * `agent_runtimes/protocols/mcp/fixtures/session.json` by the pytest and the
12
+ * vitest. A tool's missing annotations are read with the specification's
13
+ * defaults (`readOnlyHint` false, `destructiveHint` true, `idempotentHint`
14
+ * false, `openWorldHint` true), so a server that says nothing is never read
15
+ * as harmless; `destructiveHint` means something only when the tool is not
16
+ * read-only, so a read-only tool is never destructive.
17
+ *
18
+ * @module protocols/mcp/client
19
+ */
20
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
21
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
22
+ const sorted = (values) => [...values].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
23
+ /** A listed tool: its parameters, whether it answers structured, its hints. */
24
+ export function toolReading(tool) {
25
+ const hints = tool.annotations;
26
+ const readOnly = hints?.readOnlyHint === true;
27
+ return {
28
+ name: tool.name,
29
+ title: tool.title ?? null,
30
+ description: tool.description ?? null,
31
+ parameters: sorted(Object.keys(tool.inputSchema.properties ?? {})),
32
+ required: sorted(tool.inputSchema.required ?? []),
33
+ structured: tool.outputSchema !== undefined,
34
+ readOnly,
35
+ destructive: !readOnly && hints?.destructiveHint !== false,
36
+ idempotent: hints?.idempotentHint === true,
37
+ openWorld: hints?.openWorldHint !== false,
38
+ };
39
+ }
40
+ /** A tool's answer: refused or not, its text parts joined, its structured content. */
41
+ export function callReading(result) {
42
+ return {
43
+ isError: result.isError === true,
44
+ text: result.content
45
+ .flatMap(part => (part.type === 'text' ? [part.text] : []))
46
+ .join('\n'),
47
+ structured: result.structuredContent ?? null,
48
+ };
49
+ }
50
+ /** A resource's text contents; a binary one is refused, never decoded here. */
51
+ export function resourceReading(result) {
52
+ return result.contents.map(part => {
53
+ if (!('text' in part) || typeof part.text !== 'string') {
54
+ throw new Error(`${part.uri} is not text.`);
55
+ }
56
+ return { uri: part.uri, mimeType: part.mimeType ?? null, text: part.text };
57
+ });
58
+ }
59
+ /** A prompt's messages as text; a message of another kind is refused. */
60
+ export function promptReading(result) {
61
+ return result.messages.map(message => {
62
+ if (message.content.type !== 'text') {
63
+ throw new Error(`A ${message.role} message is not text.`);
64
+ }
65
+ return { role: message.role, text: message.content.text };
66
+ });
67
+ }
68
+ /**
69
+ * An MCP client: connects, lists and calls tools, reads resources, gets
70
+ * prompts, and answers each as the readings above. The SDK's `Client` does
71
+ * the protocol (the initialize handshake, the version negotiated, a
72
+ * structured answer checked against the tool's output schema).
73
+ */
74
+ export class McpClient {
75
+ client;
76
+ agreed;
77
+ constructor(client, agreed) {
78
+ this.client = client;
79
+ this.agreed = agreed;
80
+ }
81
+ /** Connected to `server`, said to it as `name` at `version`. */
82
+ static async connect(server, name = 'agent-runtimes', version = '1.0.0') {
83
+ const transport = 'transport' in server
84
+ ? server.transport
85
+ : new StreamableHTTPClientTransport(new URL(server.url), {
86
+ requestInit: server.headers
87
+ ? { headers: server.headers }
88
+ : undefined,
89
+ });
90
+ // The SDK hands the version agreed at initialize to the transport alone.
91
+ let agreed;
92
+ const setProtocolVersion = transport.setProtocolVersion?.bind(transport);
93
+ transport.setProtocolVersion = (protocolVersion) => {
94
+ agreed = protocolVersion;
95
+ setProtocolVersion?.(protocolVersion);
96
+ };
97
+ const client = new Client({ name, version });
98
+ await client.connect(transport);
99
+ return new McpClient(client, () => agreed);
100
+ }
101
+ /** The protocol version agreed with the server. */
102
+ get protocolVersion() {
103
+ const version = this.agreed();
104
+ if (!version) {
105
+ throw new Error('The MCP client is not connected.');
106
+ }
107
+ return version;
108
+ }
109
+ /** Every tool the server lists, through its pages. */
110
+ async listTools() {
111
+ const tools = [];
112
+ let cursor;
113
+ do {
114
+ const page = await this.client.listTools(cursor ? { cursor } : {});
115
+ tools.push(...page.tools.map(toolReading));
116
+ cursor = page.nextCursor;
117
+ } while (cursor);
118
+ return tools;
119
+ }
120
+ async callTool(name, args) {
121
+ const result = await this.client.callTool({ name, arguments: args });
122
+ if (!Array.isArray(result.content)) {
123
+ throw new Error(`${name} answered in the form before MCP 2024-11-05.`);
124
+ }
125
+ return callReading(result);
126
+ }
127
+ async readResource(uri) {
128
+ return resourceReading(await this.client.readResource({ uri }));
129
+ }
130
+ async getPrompt(name, args) {
131
+ return promptReading(await this.client.getPrompt({ name, arguments: args }));
132
+ }
133
+ async close() {
134
+ await this.client.close();
135
+ }
136
+ }
@@ -2,3 +2,4 @@ export declare const MCP_PLUGIN = "agent-runtimes.protocols.mcp";
2
2
  /** The MCP specification version of the `@modelcontextprotocol/sdk` installed (1.32: `LATEST_PROTOCOL_VERSION`); Python's `mcp` 2.1 speaks 2026-07-28. */
3
3
  export declare const MCP_SPECIFICATION_VERSION = "2025-11-25";
4
4
  export declare const McpPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, unknown>;
5
+ export * from './client';
@@ -7,7 +7,8 @@
7
7
  * declares no point yet: MCP's optional capabilities and extensions become
8
8
  * `mcp.extension.<name>` points when the MCP client and server read them
9
9
  * from contributions (AGENT_PROTOCOLS PR-01). The twin of
10
- * `agent_runtimes.protocols.mcp`.
10
+ * `agent_runtimes.protocols.mcp`. Its client, on the official
11
+ * `@modelcontextprotocol/sdk`, is `./client` (PR-51).
11
12
  *
12
13
  * @module protocols/mcp
13
14
  */
@@ -36,3 +37,4 @@ export const McpPlugin = definePlugin({
36
37
  }, { id: 'mcp', order: DEFAULT_ORDER }),
37
38
  ],
38
39
  });
40
+ export * from './client';
@@ -0,0 +1,56 @@
1
+ import { type HttpSigner, type NonceStore } from './index';
2
+ /** Draft until Visa confirms it. */
3
+ export declare const TAP_STATUS = "draft";
4
+ /** Where the profile was read, 2026-10-13. */
5
+ export declare const TAP_SOURCES: readonly ["https://developer.visa.com/capabilities/trusted-agent-protocol/trusted-agent-protocol-specifications", "https://developer.visa.com/capabilities/trusted-agent-protocol/overview", "https://github.com/visa/trusted-agent-protocol"];
6
+ /** Visa's key directory, as its page says it. */
7
+ export declare const VISA_JWKS = "https://mcp.visa.com/.well-known/jwks";
8
+ export declare const TAP_BROWSE_TAG = "agent-browser-auth";
9
+ export declare const TAP_PAY_TAG = "agent-payer-auth";
10
+ export type TapIntent = 'browse' | 'pay';
11
+ export declare const TAP_TAGS: Record<TapIntent, string>;
12
+ export declare const TAP_REQUIRED_COMPONENTS: readonly ["@authority", "@path"];
13
+ export declare const TAP_REQUIRED_PARAMS: readonly ["created", "keyid", "alg", "expires", "nonce", "tag"];
14
+ /** `alg` as Visa writes it. */
15
+ export declare const TAP_ALG = "Ed25519";
16
+ /** The longest window, and how long a nonce is remembered. */
17
+ export declare const TAP_MAX_WINDOW_SECONDS: number;
18
+ export interface TapSignOptions {
19
+ intent: TapIntent;
20
+ label?: string;
21
+ /** Covered: at least `@authority` and `@path` (the default). */
22
+ components?: string[];
23
+ /** Unix seconds; now by default. */
24
+ created?: number;
25
+ /** Seconds, at most 8 minutes (the default). */
26
+ lifetime?: number;
27
+ nonce?: string;
28
+ }
29
+ export interface TapSignedHeaders {
30
+ 'Signature-Input': string;
31
+ Signature: string;
32
+ }
33
+ /** What verifying a TAP signature found; `reason` when it does not hold. */
34
+ export interface TapVerification {
35
+ verified: boolean;
36
+ reason?: string;
37
+ intent?: TapIntent;
38
+ keyid?: string;
39
+ nonce?: string;
40
+ }
41
+ /** Sign one request as a TAP agent browsing or paying, under an Ed25519 key. */
42
+ export declare function signTapRequest(request: {
43
+ method: string;
44
+ url: string;
45
+ }, signer: HttpSigner, options: TapSignOptions): Promise<TapSignedHeaders>;
46
+ /**
47
+ * Verify the TAP signature of one request against Ed25519 keys known by
48
+ * `keyid` (Visa's directory, or a registry's). A request with no TAP tag is
49
+ * no trusted agent's; the merchant decides what to do with it.
50
+ */
51
+ export declare function verifyTapRequest(request: Request, keys: Map<string, JsonWebKey>, options: {
52
+ nonceStore: NonceStore;
53
+ now?: number;
54
+ }): Promise<TapVerification>;
55
+ /** The `keyid` of an Ed25519 public JWK, as a TAP key list is indexed when it says none. */
56
+ export declare function tapKeys(jwks: JsonWebKey[]): Promise<Map<string, JsonWebKey>>;