@datalayer/agent-runtimes 1.5.7 → 1.5.8

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 (265) 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 +64 -6
  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/specs/apps.js +38 -16
  262. package/lib/specs/appspecSchema.js +75 -2
  263. package/lib/types/agentspecs.d.ts +32 -1
  264. package/package.json +1 -1
  265. 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),
@@ -297,6 +315,7 @@ function dumpPap(pap) {
297
315
  if (!pap)
298
316
  return {};
299
317
  return new Writer()
318
+ .text('profile', pap.profile, '\u0000')
300
319
  .list('connections', pap.connections.map(connection => new Writer()
301
320
  .text('id', connection.id, '\u0000')
302
321
  .text('company', connection.company, '\u0000')
@@ -322,8 +341,15 @@ function dumpPap(pap) {
322
341
  .text('summary', operation.summary, '\u0000')
323
342
  .value('user_approval_required', operation.userApprovalRequired, true).data)).data).data;
324
343
  }
325
- /** PACT (AGENT_PROTOCOLS PI-01): the businesses it asks for each person. */
344
+ /** PACT (AGENT_PROTOCOLS PI-01): the businesses it asks for each person, and as one (PR-13). */
326
345
  function parsePact(data) {
346
+ const business = isData(data.business) ? data.business : {};
347
+ const scopes = {};
348
+ if (isData(business.scopes)) {
349
+ for (const [scope, said] of Object.entries(business.scopes)) {
350
+ scopes[scope] = text(said);
351
+ }
352
+ }
327
353
  return {
328
354
  connections: records(data.connections).map(connection => ({
329
355
  id: text(connection.id),
@@ -332,6 +358,15 @@ function parsePact(data) {
332
358
  access: oneOf(connection.access, ['read', 'write'], 'read'),
333
359
  scopes: texts(connection.scopes),
334
360
  })),
361
+ business: {
362
+ enabled: flag(business.enabled, false),
363
+ brand: text(business.brand),
364
+ scopes,
365
+ registeredAgents: records(business.registered_agents).map(agent => ({
366
+ issuer: text(agent.issuer),
367
+ jwksUri: text(agent.jwks_uri),
368
+ })),
369
+ },
335
370
  };
336
371
  }
337
372
  /** Commerce (AGENT_PROTOCOLS PI-01): the merchants it shops at for each person. */
@@ -373,12 +408,26 @@ function dumpCommerce(commerce) {
373
408
  function dumpPact(pact) {
374
409
  if (!pact)
375
410
  return {};
376
- return new Writer().list('connections', pact.connections.map(connection => new Writer()
411
+ const business = pact.business ?? {
412
+ enabled: false,
413
+ brand: '',
414
+ scopes: {},
415
+ registeredAgents: [],
416
+ };
417
+ return new Writer()
418
+ .list('connections', pact.connections.map(connection => new Writer()
377
419
  .text('id', connection.id, '\u0000')
378
420
  .text('brand', connection.brand, '\u0000')
379
421
  .text('audience', connection.audience, '\u0000')
380
422
  .value('access', connection.access, 'read')
381
- .list('scopes', connection.scopes).data)).data;
423
+ .list('scopes', connection.scopes).data))
424
+ .part('business', new Writer()
425
+ .value('enabled', business.enabled, false)
426
+ .text('brand', business.brand)
427
+ .part('scopes', { ...business.scopes })
428
+ .list('registered_agents', business.registeredAgents.map(agent => new Writer()
429
+ .text('issuer', agent.issuer, '\u0000')
430
+ .text('jwks_uri', agent.jwksUri, '\u0000').data)).data).data;
382
431
  }
383
432
  /** A2A (AGENT_PROTOCOLS PR-02): the extensions its Agent Card advertises. */
384
433
  function parseA2A(data) {
@@ -942,8 +991,16 @@ export function parseAppspec(document) {
942
991
  if (isData(data.decision)) {
943
992
  app.decision = parseDecision(data.decision);
944
993
  }
945
- if (isData(data.pap)) {
946
- app.pap = parsePap(data.pap);
994
+ // A `pap` block names a profile Datalayer speaks, or it is refused and not
995
+ // read (PAP_DATALAYER S-03); a block saying nothing is no block.
996
+ if (isData(data.pap) && Object.keys(data.pap).length > 0) {
997
+ const problem = papProfileProblem(data.pap.profile);
998
+ if (problem) {
999
+ problems.push(problem);
1000
+ }
1001
+ else {
1002
+ app.pap = parsePap(data.pap);
1003
+ }
947
1004
  }
948
1005
  if (isData(data.pact)) {
949
1006
  app.pact = parsePact(data.pact);
@@ -1006,7 +1063,8 @@ export function protocolsProblems(app) {
1006
1063
  }
1007
1064
  const configured = {
1008
1065
  pap: Boolean(app.pap && (app.pap.connections.length > 0 || app.pap.company.enabled)),
1009
- pact: Boolean(app.pact && app.pact.connections.length > 0),
1066
+ pact: Boolean(app.pact &&
1067
+ (app.pact.connections.length > 0 || app.pact.business?.enabled)),
1010
1068
  a2a: Boolean(app.a2a && app.a2a.extensions.length > 0),
1011
1069
  };
1012
1070
  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,
package/lib/specs/apps.js CHANGED
@@ -194,6 +194,7 @@ export const BOOKKEEPING_DESK_APP_0_0_1 = {
194
194
  protocols: ['pap'],
195
195
  ui: [],
196
196
  pap: {
197
+ profile: 'draft-01',
197
198
  connections: [
198
199
  {
199
200
  id: 'northwind',
@@ -1570,6 +1571,7 @@ export const EXCHANGE_DESK_APP_0_0_1 = {
1570
1571
  protocols: ['pap'],
1571
1572
  ui: [],
1572
1573
  pap: {
1574
+ profile: 'draft-01',
1573
1575
  connections: [],
1574
1576
  company: {
1575
1577
  enabled: true,
@@ -1902,6 +1904,7 @@ export const LIVE_SHOP_CHAT_APP_0_0_1 = {
1902
1904
  protocols: ['pap'],
1903
1905
  ui: [],
1904
1906
  pap: {
1907
+ profile: 'draft-01',
1905
1908
  connections: [
1906
1909
  {
1907
1910
  id: 'manzanita',
@@ -2474,10 +2477,11 @@ export const ORDER_DESK_APP_0_0_1 = {
2474
2477
  protocols: ['pap'],
2475
2478
  ui: [],
2476
2479
  pap: {
2480
+ profile: 'draft-01',
2477
2481
  connections: [
2478
2482
  {
2479
2483
  id: 'manzanita',
2480
- company: 'manzanita.example',
2484
+ company: 'manzanita.examples.datalayer.run',
2481
2485
  access: 'write',
2482
2486
  as: 'user',
2483
2487
  scopes: ['orders:read', 'orders:write'],
@@ -2582,7 +2586,7 @@ export const ORDER_DESK_APP_0_0_1 = {
2582
2586
  "The journey is the Personal Agent Protocol SDK's recorded journey user-with-a-company (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
2583
2587
  ],
2584
2588
  unverified: [
2585
- 'No company answers on Datalayer yet: no test company is served on r1, so it has not run in the Studio against one.',
2589
+ 'It has not run in the Studio against the hosted Manzanita (manzanita.examples.datalayer.run) from this example yet.',
2586
2590
  ],
2587
2591
  },
2588
2592
  },
@@ -2642,6 +2646,7 @@ export const ORDER_TRACKER_APP_0_0_1 = {
2642
2646
  protocols: ['pap'],
2643
2647
  ui: [],
2644
2648
  pap: {
2649
+ profile: 'draft-01',
2645
2650
  connections: [
2646
2651
  {
2647
2652
  id: 'manzanita',
@@ -3650,6 +3655,7 @@ export const RETURNS_DESK_APP_0_0_1 = {
3650
3655
  protocols: ['pap'],
3651
3656
  ui: [],
3652
3657
  pap: {
3658
+ profile: 'draft-01',
3653
3659
  connections: [
3654
3660
  {
3655
3661
  id: 'manzanita',
@@ -4175,6 +4181,7 @@ export const SHOP_CONCIERGE_APP_0_0_1 = {
4175
4181
  protocols: ['pap'],
4176
4182
  ui: [],
4177
4183
  pap: {
4184
+ profile: 'draft-01',
4178
4185
  connections: [
4179
4186
  {
4180
4187
  id: 'manzanita',
@@ -4340,7 +4347,7 @@ export const SHOPPING_DESK_APP_0_0_1 = {
4340
4347
  {
4341
4348
  id: 'example-store',
4342
4349
  protocol: 'ucp',
4343
- merchant: 'store.example',
4350
+ merchant: 'store.examples.datalayer.run',
4344
4351
  access: 'write',
4345
4352
  limit: {
4346
4353
  amount: '50',
@@ -4350,7 +4357,7 @@ export const SHOPPING_DESK_APP_0_0_1 = {
4350
4357
  {
4351
4358
  id: 'example-outfitters',
4352
4359
  protocol: 'acp',
4353
- merchant: 'outfitters.example',
4360
+ merchant: 'outfitters.examples.datalayer.run',
4354
4361
  access: 'write',
4355
4362
  limit: {
4356
4363
  amount: '150',
@@ -4443,7 +4450,7 @@ export const SHOPPING_DESK_APP_0_0_1 = {
4443
4450
  "The checkout at Example Outfitters is the developers' ACP example (examples/protocols/agentic_commerce/checkout.py), run in its own tests.",
4444
4451
  ],
4445
4452
  unverified: [
4446
- "No shop answers UCP or ACP on Datalayer yet: the gateway's ucp and acp toolsets are built, not deployed.",
4453
+ 'It has not run in the Studio against the hosted Example Store and Example Outfitters (store.examples.datalayer.run, outfitters.examples.datalayer.run) from this example yet.',
4447
4454
  ],
4448
4455
  },
4449
4456
  },
@@ -4503,6 +4510,7 @@ export const SIGN_IN_DESK_APP_0_0_1 = {
4503
4510
  protocols: ['pap'],
4504
4511
  ui: [],
4505
4512
  pap: {
4513
+ profile: 'draft-01',
4506
4514
  connections: [
4507
4515
  {
4508
4516
  id: 'manzanita',
@@ -5191,12 +5199,18 @@ export const TRAVEL_DESK_APP_0_0_1 = {
5191
5199
  connections: [
5192
5200
  {
5193
5201
  id: 'example-air',
5194
- brand: 'air.example',
5195
- audience: 'https://provider.example/a2a',
5202
+ brand: 'air.examples.datalayer.run',
5203
+ audience: 'https://air.examples.datalayer.run/a2a',
5196
5204
  access: 'write',
5197
5205
  scopes: ['bookings:read', 'bookings:change'],
5198
5206
  },
5199
5207
  ],
5208
+ business: {
5209
+ enabled: false,
5210
+ brand: '',
5211
+ scopes: {},
5212
+ registeredAgents: [],
5213
+ },
5200
5214
  },
5201
5215
  rules: [
5202
5216
  {
@@ -5272,7 +5286,7 @@ export const TRAVEL_DESK_APP_0_0_1 = {
5272
5286
  "The journey is the developers' PACT example (examples/protocols/pact/personal_agent.py) against its local Provider, Example Air, run in its own tests (version 1.3.112).",
5273
5287
  ],
5274
5288
  unverified: [
5275
- "No airline answers PACT on Datalayer yet: the gateway's pact toolset is built, not deployed.",
5289
+ 'It has not run in the Studio against the hosted Example Air (air.examples.datalayer.run) from this example yet; the hosted Example Air keeps registrations in memory, so an application is registered there again after each restart.',
5276
5290
  ],
5277
5291
  },
5278
5292
  },
@@ -5621,6 +5635,7 @@ export const APP_SOURCES = {
5621
5635
  ],
5622
5636
  protocols: ['pap'],
5623
5637
  pap: {
5638
+ profile: 'draft-01',
5624
5639
  connections: [
5625
5640
  {
5626
5641
  id: 'northwind',
@@ -6460,6 +6475,7 @@ export const APP_SOURCES = {
6460
6475
  ],
6461
6476
  protocols: ['pap'],
6462
6477
  pap: {
6478
+ profile: 'draft-01',
6463
6479
  company: {
6464
6480
  enabled: true,
6465
6481
  interfaces: ['agent', 'openapi'],
@@ -6662,6 +6678,7 @@ export const APP_SOURCES = {
6662
6678
  instructions: "You relay the person's questions to Manzanita Outfitters' own agent, through its tools, and show what the shop writes as it arrives, as the shop's words. Never finish the shop's sentences for it.",
6663
6679
  protocols: ['pap'],
6664
6680
  pap: {
6681
+ profile: 'draft-01',
6665
6682
  connections: [
6666
6683
  {
6667
6684
  id: 'manzanita',
@@ -7013,10 +7030,11 @@ export const APP_SOURCES = {
7013
7030
  instructions: 'You work with Manzanita Outfitters for the person you talk to, through its tools. Ask the shop before saying anything about an order; when it asks the person to sign in, say so and wait. Never confirm what the shop proposes on your own: the person approves it, word for word, on Waiting for you.',
7014
7031
  protocols: ['pap'],
7015
7032
  pap: {
7033
+ profile: 'draft-01',
7016
7034
  connections: [
7017
7035
  {
7018
7036
  id: 'manzanita',
7019
- company: 'manzanita.example',
7037
+ company: 'manzanita.examples.datalayer.run',
7020
7038
  access: 'write',
7021
7039
  scopes: ['orders:read', 'orders:write'],
7022
7040
  extensions: ['operations'],
@@ -7080,7 +7098,7 @@ export const APP_SOURCES = {
7080
7098
  "The journey is the Personal Agent Protocol SDK's recorded journey user-with-a-company (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
7081
7099
  ],
7082
7100
  unverified: [
7083
- 'No company answers on Datalayer yet: no test company is served on r1, so it has not run in the Studio against one.',
7101
+ 'It has not run in the Studio against the hosted Manzanita (manzanita.examples.datalayer.run) from this example yet.',
7084
7102
  ],
7085
7103
  },
7086
7104
  },
@@ -7107,6 +7125,7 @@ export const APP_SOURCES = {
7107
7125
  instructions: "You read the person's orders at Manzanita Outfitters, through its tools, and change nothing. When the shop asks the person to sign in, say so and wait. If they ask to stop, tell them Disconnect under In your name ends the sign-in.",
7108
7126
  protocols: ['pap'],
7109
7127
  pap: {
7128
+ profile: 'draft-01',
7110
7129
  connections: [
7111
7130
  {
7112
7131
  id: 'manzanita',
@@ -7852,6 +7871,7 @@ export const APP_SOURCES = {
7852
7871
  instructions: 'You arrange returns and repairs at Manzanita Outfitters for the person, through its tools. The shop proposes each one with its terms: show them, word for word, and never confirm on your own; the person approves it on Waiting for you.',
7853
7872
  protocols: ['pap'],
7854
7873
  pap: {
7874
+ profile: 'draft-01',
7855
7875
  connections: [
7856
7876
  {
7857
7877
  id: 'manzanita',
@@ -8157,6 +8177,7 @@ export const APP_SOURCES = {
8157
8177
  instructions: "You talk with Manzanita Outfitters' own agent for the person, through its tools, in one conversation. When they ask for a person at the shop, ask the shop for one of its people and say who answers. Every message to the shop goes out in their name: send it only once they agreed.",
8158
8178
  protocols: ['pap'],
8159
8179
  pap: {
8180
+ profile: 'draft-01',
8160
8181
  connections: [
8161
8182
  {
8162
8183
  id: 'manzanita',
@@ -8247,7 +8268,7 @@ export const APP_SOURCES = {
8247
8268
  {
8248
8269
  id: 'example-store',
8249
8270
  protocol: 'ucp',
8250
- merchant: 'store.example',
8271
+ merchant: 'store.examples.datalayer.run',
8251
8272
  access: 'write',
8252
8273
  limit: {
8253
8274
  amount: '50',
@@ -8257,7 +8278,7 @@ export const APP_SOURCES = {
8257
8278
  {
8258
8279
  id: 'example-outfitters',
8259
8280
  protocol: 'acp',
8260
- merchant: 'outfitters.example',
8281
+ merchant: 'outfitters.examples.datalayer.run',
8261
8282
  access: 'write',
8262
8283
  limit: {
8263
8284
  amount: '150',
@@ -8322,7 +8343,7 @@ export const APP_SOURCES = {
8322
8343
  "The checkout at Example Outfitters is the developers' ACP example (examples/protocols/agentic_commerce/checkout.py), run in its own tests.",
8323
8344
  ],
8324
8345
  unverified: [
8325
- "No shop answers UCP or ACP on Datalayer yet: the gateway's ucp and acp toolsets are built, not deployed.",
8346
+ 'It has not run in the Studio against the hosted Example Store and Example Outfitters (store.examples.datalayer.run, outfitters.examples.datalayer.run) from this example yet.',
8326
8347
  ],
8327
8348
  },
8328
8349
  },
@@ -8349,6 +8370,7 @@ export const APP_SOURCES = {
8349
8370
  instructions: 'You help the person at Manzanita Outfitters, through its tools. When the shop needs them signed in, show its protected form and wait. Never ask for a password, a code or anything the form asks in the conversation.',
8350
8371
  protocols: ['pap'],
8351
8372
  pap: {
8373
+ profile: 'draft-01',
8352
8374
  connections: [
8353
8375
  {
8354
8376
  id: 'manzanita',
@@ -8812,8 +8834,8 @@ export const APP_SOURCES = {
8812
8834
  connections: [
8813
8835
  {
8814
8836
  id: 'example-air',
8815
- brand: 'air.example',
8816
- audience: 'https://provider.example/a2a',
8837
+ brand: 'air.examples.datalayer.run',
8838
+ audience: 'https://air.examples.datalayer.run/a2a',
8817
8839
  access: 'write',
8818
8840
  scopes: ['bookings:read', 'bookings:change'],
8819
8841
  },
@@ -8865,7 +8887,7 @@ export const APP_SOURCES = {
8865
8887
  "The journey is the developers' PACT example (examples/protocols/pact/personal_agent.py) against its local Provider, Example Air, run in its own tests (version 1.3.112).",
8866
8888
  ],
8867
8889
  unverified: [
8868
- "No airline answers PACT on Datalayer yet: the gateway's pact toolset is built, not deployed.",
8890
+ 'It has not run in the Studio against the hosted Example Air (air.examples.datalayer.run) from this example yet; the hosted Example Air keeps registrations in memory, so an application is registered there again after each restart.',
8869
8891
  ],
8870
8892
  },
8871
8893
  },
@@ -921,7 +921,7 @@ export const APPSPEC_SCHEMA = {
921
921
  },
922
922
  AppPact: {
923
923
  additionalProperties: false,
924
- description: 'PACT: the businesses it asks for each person (AGENT_PROTOCOLS PI-01).',
924
+ description: 'PACT: the businesses it asks for each person (AGENT_PROTOCOLS PI-01), and\nwhether it answers as one (PR-13).',
925
925
  properties: {
926
926
  connections: {
927
927
  description: 'Businesses, over PACT',
@@ -931,10 +931,50 @@ export const APPSPEC_SCHEMA = {
931
931
  title: 'Connections',
932
932
  type: 'array',
933
933
  },
934
+ business: {
935
+ $ref: '#/$defs/AppPactBusiness',
936
+ description: 'As a business',
937
+ },
934
938
  },
935
939
  title: 'AppPact',
936
940
  type: 'object',
937
941
  },
942
+ AppPactBusiness: {
943
+ additionalProperties: false,
944
+ description: "The application answers as a PACT business (AGENT_PROTOCOLS PR-13, PI-32; decided 2026-10-13).\n\nPublished at its deployment's own address: its A2A Agent Card names\nDatalayer as the Provider and the application's owner as the Brand; its\nA2A interface verifies each personal-agent JWT against a registered\nissuer's keys (§3.1); with `scopes`, a person delegates to a personal agent\nthrough the Provider's device-code sign-in — their Datalayer sign-in — and\nevery answer under their delegation carries a signed receipt (§5).",
945
+ properties: {
946
+ enabled: {
947
+ default: false,
948
+ description: 'Whether it is published as a business at Ship',
949
+ title: 'Enabled',
950
+ type: 'boolean',
951
+ },
952
+ brand: {
953
+ default: '',
954
+ description: "The Brand's name on its card: the application's `owner` when unsaid",
955
+ title: 'Brand',
956
+ type: 'string',
957
+ },
958
+ scopes: {
959
+ additionalProperties: {
960
+ type: 'string',
961
+ },
962
+ description: 'What a person may let a personal agent do, `{scope: what the person is shown}`: `bookings:read: See your bookings`; none, it answers personal agents alone',
963
+ title: 'Scopes',
964
+ type: 'object',
965
+ },
966
+ registered_agents: {
967
+ description: 'The personal agents it accepts, each its issuer and its keys',
968
+ items: {
969
+ $ref: '#/$defs/AppPactRegisteredAgent',
970
+ },
971
+ title: 'Registered Agents',
972
+ type: 'array',
973
+ },
974
+ },
975
+ title: 'AppPactBusiness',
976
+ type: 'object',
977
+ },
938
978
  AppPactConnection: {
939
979
  additionalProperties: false,
940
980
  description: "A business the application asks for each person, over PACT 1.0 (AGENT_PROTOCOLS PI-01).\n\nThe Brand is named by its domain — its Agent Card is at\n`https://<brand>/.well-known/agent-card.json` (PACT §2.1) — and its\nProvider's `audience`, which the Provider assigns at registration and\nthe personal-agent JWT carries (§3.1). Always in each person's own name:\nPACT acts for a person. No credential is ever part of a spec.",
@@ -972,6 +1012,25 @@ export const APPSPEC_SCHEMA = {
972
1012
  title: 'AppPactConnection',
973
1013
  type: 'object',
974
1014
  },
1015
+ AppPactRegisteredAgent: {
1016
+ additionalProperties: false,
1017
+ description: 'A personal agent the business accepts (PACT 1.0 §3.1): its issuer, and where its keys are.\n\nRegistered by the Maker, as `pap.company.registered_agents` (AGENT_PROTOCOLS PR-13,\ndecided 2026-10-13): a personal-agent JWT is verified against the keys of a registered\nissuer only, and any other is refused.',
1018
+ properties: {
1019
+ issuer: {
1020
+ description: "The personal agent's `iss`, an HTTPS URL",
1021
+ title: 'Issuer',
1022
+ type: 'string',
1023
+ },
1024
+ jwks_uri: {
1025
+ description: 'Where its public keys are (a JWKS), an HTTPS URL',
1026
+ title: 'Jwks Uri',
1027
+ type: 'string',
1028
+ },
1029
+ },
1030
+ required: ['issuer', 'jwks_uri'],
1031
+ title: 'AppPactRegisteredAgent',
1032
+ type: 'object',
1033
+ },
975
1034
  AppPage: {
976
1035
  additionalProperties: false,
977
1036
  description: "A widget's page written in its code (LOOP P-05): `@app.page`.\n\nIts inputs are a form, drawn on the page; as one changes, the function\nof its code runs again on them and the page shows what it returned, in\nplace. Without its file nothing runs it, and validation says so.",
@@ -1057,8 +1116,22 @@ export const APPSPEC_SCHEMA = {
1057
1116
  },
1058
1117
  AppPap: {
1059
1118
  additionalProperties: false,
1060
- description: 'Personal Agent Protocol: the companies it works with, and whether it is one.',
1119
+ description: 'Personal Agent Protocol: the companies it works with, and whether it is one.\n\nA `pap` block names the profile it is written for (PAP_DATALAYER S-03): one\nDatalayer speaks, or it is refused in a sentence. An application without the\nblock has none.',
1061
1120
  properties: {
1121
+ profile: {
1122
+ anyOf: [
1123
+ {
1124
+ const: 'draft-01',
1125
+ type: 'string',
1126
+ },
1127
+ {
1128
+ type: 'null',
1129
+ },
1130
+ ],
1131
+ default: null,
1132
+ description: 'The Personal Agent Protocol profile it is written for: `draft-01`',
1133
+ title: 'Profile',
1134
+ },
1062
1135
  connections: {
1063
1136
  description: 'Companies, as a personal agent',
1064
1137
  items: {