@datalayer/agent-runtimes 1.4.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-embed/chunks/{AgentDetails-Bo0dD1KS.js → AgentDetails-KezohVQI.js} +1 -1
- package/dist-embed/chunks/{AgentDetailsDialog-JjCHYxMG.js → AgentDetailsDialog-CklhMnk7.js} +1 -1
- package/dist-embed/chunks/{AgentInspector-37Onz4of.js → AgentInspector-CtCaRc1L.js} +1 -1
- package/dist-embed/chunks/{AgentInspectorDialog-CCzGVAtX.js → AgentInspectorDialog-DB9cx3Gd.js} +1 -1
- package/dist-embed/chunks/Avatar-9MpXENSs.js +1 -0
- package/dist-embed/chunks/{CellSidebarExtension-CQlXdanG.js → CellSidebarExtension-CfaJL6DQ.js} +6 -6
- package/dist-embed/chunks/ChatView-Dc1x4aBR.js +32 -0
- package/dist-embed/chunks/{ContextPie-DBIUoPrq.js → ContextPie-1vP4f-3N.js} +1 -1
- package/dist-embed/chunks/DatalayerAgentBridge-D54Z9BZ3.js +1 -0
- package/dist-embed/chunks/{DeckComponent-CuRWiARr.js → DeckComponent-82GVdsoi.js} +2 -2
- package/dist-embed/chunks/{DocumentView-BYU2HREd.js → DocumentView-SrJloJDo.js} +2 -2
- package/dist-embed/chunks/{EphemeralDocument-BjFSuQKH.js → EphemeralDocument-t1KulOH8.js} +1 -1
- package/dist-embed/chunks/{EphemeralNotebook-DbS4f6yr.js → EphemeralNotebook-Co-WQWCc.js} +2 -2
- package/dist-embed/chunks/{ExcalidrawComponent-CFLnMPnf.js → ExcalidrawComponent-5NeLUYVB.js} +1 -1
- package/dist-embed/chunks/{ExcalidrawModal-CB9d5Vpk.js → ExcalidrawModal-9ZnOB03n.js} +1 -1
- package/dist-embed/chunks/{JupyterLexicalExtension-CYnZrelh.js → JupyterLexicalExtension-Cize8RXy.js} +29 -29
- package/dist-embed/chunks/{KernelVariables-KCUfxhF4.js → KernelVariables-Cl57Zze1.js} +2 -2
- package/dist-embed/chunks/{LexicalToolRegistry-CXLITkMD.js → LexicalToolRegistry-CoM9ROsx.js} +3 -3
- package/dist-embed/chunks/{NotebookSkeleton-HdM76lOj.js → NotebookSkeleton-CI7ovjNW.js} +1 -1
- package/dist-embed/chunks/{NotebookToolSurfaces-D62q-lbb.js → NotebookToolSurfaces-CWfppxBN.js} +1 -1
- package/dist-embed/chunks/{NotebookToolbar-DMKCe3c2.js → NotebookToolbar-rtMQZWHQ.js} +1 -1
- package/dist-embed/chunks/{NotebookView-Pps9dPZ7.js → NotebookView-DOf_K74b.js} +1 -1
- package/dist-embed/chunks/{Output-2KxoKu5F.js → Output-9DKTscSv.js} +10 -10
- package/dist-embed/chunks/{SandboxDetailsDialog-pkvlbdM2.js → SandboxDetailsDialog-BCfDm6MB.js} +1 -1
- package/dist-embed/chunks/{SchemaForm-Bqor7hh8.js → SchemaForm-BOYPrvf8.js} +1 -1
- package/dist-embed/chunks/{Toolbar-6Hdi_m3T.js → Toolbar-CGQDY041.js} +1 -1
- package/dist-embed/chunks/{WidgetVariableView-CJTAKqh1.js → WidgetVariableView-BTOwHP78.js} +1 -1
- package/dist-embed/chunks/YouTubePlugin-Bs4zZIB1.js +1 -0
- package/dist-embed/chunks/{abnfDiagram-VCTEODGH-CWj4pFxo.js → abnfDiagram-VCTEODGH-D5p59vS_.js} +1 -1
- package/dist-embed/chunks/{abnfDiagram-VCTEODGH-B4x7mfou.js → abnfDiagram-VCTEODGH-DRYbUvhc.js} +1 -1
- package/dist-embed/chunks/{ar-SA-G6X2FPQ2-C-zAYgA-.js → ar-SA-G6X2FPQ2-D6XRzkBS.js} +1 -1
- package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-CRIN999O.js → architectureDiagram-5GKGNRK7-B7ITKDup.js} +1 -1
- package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-B2D6lZbf.js → architectureDiagram-5GKGNRK7-DQGv0imf.js} +1 -1
- package/dist-embed/chunks/{az-AZ-76LH7QW2-BHq5js6U.js → az-AZ-76LH7QW2-DBTdUiqp.js} +1 -1
- package/dist-embed/chunks/{bg-BG-XCXSNQG7-BTcNNcTc.js → bg-BG-XCXSNQG7-DuhcsaSL.js} +1 -1
- package/dist-embed/chunks/{blockDiagram-868be97b-bBp9uGVj.js → blockDiagram-868be97b-DYe-XTjy.js} +1 -1
- package/dist-embed/chunks/{blockDiagram-I7D4REHJ-DNdo_mUi.js → blockDiagram-I7D4REHJ-IltJXCd6.js} +1 -1
- package/dist-embed/chunks/{blockDiagram-I7D4REHJ-CPHEppLa.js → blockDiagram-I7D4REHJ-y7tEFo3j.js} +1 -1
- package/dist-embed/chunks/{bn-BD-2XOGV67Q-DXRk27u1.js → bn-BD-2XOGV67Q-CPFeLVSN.js} +1 -1
- package/dist-embed/chunks/{c4Diagram-3f4bdde3-cYZlcE7E.js → c4Diagram-3f4bdde3-Bybp0wky.js} +1 -1
- package/dist-embed/chunks/{c4Diagram-7LVT6UL2-DTmVwmmb.js → c4Diagram-7LVT6UL2-CizxVqqX.js} +1 -1
- package/dist-embed/chunks/{c4Diagram-7LVT6UL2-BM2g5U7R.js → c4Diagram-7LVT6UL2-DpaHndz8.js} +1 -1
- package/dist-embed/chunks/{ca-ES-6MX7JW3Y-D-0J9rqp.js → ca-ES-6MX7JW3Y-gDR_kEC6.js} +1 -1
- package/dist-embed/chunks/{celltoolbartracker-D67W4XWx.js → celltoolbartracker-DLF4PWyW.js} +1 -1
- package/dist-embed/chunks/{chunk-2Q5K7J3B-CsB-r261.js → chunk-2Q5K7J3B-BI6lURun.js} +1 -1
- package/dist-embed/chunks/{chunk-2Q5K7J3B-CuegvedF.js → chunk-2Q5K7J3B-DWoLSrj9.js} +1 -1
- package/dist-embed/chunks/{chunk-5VM5RSS4-D4Ed2_vW.js → chunk-5VM5RSS4-CDh4wYym.js} +1 -1
- package/dist-embed/chunks/{chunk-5VM5RSS4-MJQ9uhYe.js → chunk-5VM5RSS4-SleuNqDC.js} +1 -1
- package/dist-embed/chunks/{chunk-F27PBJKO-DnjXjdOV.js → chunk-F27PBJKO-AvWsNGYY.js} +1 -1
- package/dist-embed/chunks/{chunk-F27PBJKO-BKTrewOm.js → chunk-F27PBJKO-h_FwJMTr.js} +1 -1
- package/dist-embed/chunks/{chunk-IMKFNOWR-Bf7PlvQM.js → chunk-IMKFNOWR-DGRceKiU.js} +1 -1
- package/dist-embed/chunks/{chunk-IMKFNOWR-BiXdYxxk.js → chunk-IMKFNOWR-Hx4a5yny.js} +1 -1
- package/dist-embed/chunks/{chunk-JWPE2WC7-DcVyhh3j.js → chunk-JWPE2WC7-A4gy2qc4.js} +1 -1
- package/dist-embed/chunks/{chunk-JWPE2WC7-DmWR08qa.js → chunk-JWPE2WC7-BuJactJo.js} +1 -1
- package/dist-embed/chunks/{chunk-POPQ4Y6H-Bw6JH9TT.js → chunk-POPQ4Y6H-CFM-817s.js} +1 -1
- package/dist-embed/chunks/{chunk-POPQ4Y6H-snvBGTqY.js → chunk-POPQ4Y6H-CmRF80iG.js} +1 -1
- package/dist-embed/chunks/{chunk-SVP7TREG-DLZdx--b.js → chunk-SVP7TREG-CryZx9JE.js} +1 -1
- package/dist-embed/chunks/{chunk-SVP7TREG-dE58fUkJ.js → chunk-SVP7TREG-DSNzmytH.js} +1 -1
- package/dist-embed/chunks/{chunk-TICWLB2K-DNXzQOV5.js → chunk-TICWLB2K-CEaDF8ZJ.js} +1 -1
- package/dist-embed/chunks/{chunk-TICWLB2K-4NdGhPfF.js → chunk-TICWLB2K-DyGS3fIj.js} +1 -1
- package/dist-embed/chunks/{chunk-XXDRQBXY-OKsVfhjO.js → chunk-XXDRQBXY-8Cnzpdjz.js} +1 -1
- package/dist-embed/chunks/{chunk-XXDRQBXY-D57w8SHP.js → chunk-XXDRQBXY-DxQBcVOz.js} +1 -1
- package/dist-embed/chunks/{classDiagram-ZZMXUADV-oYXGLbJe.js → classDiagram-ZZMXUADV-BQkO1UYr.js} +1 -1
- package/dist-embed/chunks/{classDiagram-ZZMXUADV-D35oEC_r.js → classDiagram-ZZMXUADV-yvP3zMO3.js} +1 -1
- package/dist-embed/chunks/{classDiagram-f62afe4f-DWY2Ws4r.js → classDiagram-f62afe4f-AYfpYKtp.js} +1 -1
- package/dist-embed/chunks/{classDiagram-v2-604399ef-By5ijR28.js → classDiagram-v2-604399ef-BWyNcT_y.js} +1 -1
- package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-oYXGLbJe.js → classDiagram-v2-VYDZK3BY-BQkO1UYr.js} +1 -1
- package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-D35oEC_r.js → classDiagram-v2-VYDZK3BY-yvP3zMO3.js} +1 -1
- package/dist-embed/chunks/{code-block-IT6T5CEO-DvUhQbDq.js → code-block-IT6T5CEO-F4BSIGY6.js} +1 -1
- package/dist-embed/chunks/{component-DquJEKgN.js → component-DMQ8W8n1.js} +3 -3
- package/dist-embed/chunks/{cose-bilkent-JH36ORCC-j33onHvG.js → cose-bilkent-JH36ORCC-C3HC0XIY.js} +1 -1
- package/dist-embed/chunks/{cose-bilkent-JH36ORCC-CfuJvtzg.js → cose-bilkent-JH36ORCC-MVxlcfpd.js} +1 -1
- package/dist-embed/chunks/{createText-aed3d8b3-DvlG46OI.js → createText-aed3d8b3-CEJODAXJ.js} +1 -1
- package/dist-embed/chunks/{cs-CZ-2BRQDIVT-CgN3I-57.js → cs-CZ-2BRQDIVT-BXQxcYp6.js} +1 -1
- package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-YhGHtmc4.js → cynefinDiagram-5FMLGOSQ-D87ENxS0.js} +1 -1
- package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-CPb2yRsU.js → cynefinDiagram-5FMLGOSQ-DNRKTIHx.js} +1 -1
- package/dist-embed/chunks/{da-DK-5WZEPLOC-CHQloSoX.js → da-DK-5WZEPLOC-Ck3vidj3.js} +1 -1
- package/dist-embed/chunks/{dagre-GXQ25YYZ-CSSSVwOB.js → dagre-GXQ25YYZ-BOhThFKd.js} +1 -1
- package/dist-embed/chunks/{dagre-GXQ25YYZ-bjTeZGWE.js → dagre-GXQ25YYZ-DscCD5Uq.js} +1 -1
- package/dist-embed/chunks/{de-DE-XR44H4JA-C-Hq84pe.js → de-DE-XR44H4JA-CPZgrOuc.js} +1 -1
- package/dist-embed/chunks/{diagram-S7CK7UJ4-CFdSwdyc.js → diagram-S7CK7UJ4-CUhme3Bl.js} +1 -1
- package/dist-embed/chunks/{diagram-S7CK7UJ4-CFDVHfda.js → diagram-S7CK7UJ4-zDQduoQy.js} +1 -1
- package/dist-embed/chunks/{diagram-UQ7AKVKN-DDaeau23.js → diagram-UQ7AKVKN-BxhQPjAM.js} +1 -1
- package/dist-embed/chunks/{diagram-UQ7AKVKN-GZbDy6ob.js → diagram-UQ7AKVKN-Byi-v8UN.js} +1 -1
- package/dist-embed/chunks/{diagram-VSXAHHWV-nXDiS81a.js → diagram-VSXAHHWV-CqihYkDH.js} +1 -1
- package/dist-embed/chunks/{diagram-VSXAHHWV-C6q67wko.js → diagram-VSXAHHWV-au-v2v9D.js} +1 -1
- package/dist-embed/chunks/{diagram-VX7I27RA-DQUkfMrD.js → diagram-VX7I27RA-Cd5PaF_n.js} +1 -1
- package/dist-embed/chunks/{diagram-VX7I27RA-CYLfpYa4.js → diagram-VX7I27RA-ETzwrw79.js} +1 -1
- package/dist-embed/chunks/{diagram-Z3DM3KII-DZziYptV.js → diagram-Z3DM3KII-AcMuRFo5.js} +1 -1
- package/dist-embed/chunks/{diagram-Z3DM3KII-v-9naUk_.js → diagram-Z3DM3KII-DkbsvY2A.js} +1 -1
- package/dist-embed/chunks/{document-BpXPH_dr.js → document-Dluvp7zl.js} +1 -1
- package/dist-embed/chunks/{drivecontents-Bg9_6Kmo.js → drivecontents-CxwZz_5W.js} +1 -1
- package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-EvDUmZgJ.js → ebnfDiagram-PWID7BFC-BrEs-SB2.js} +1 -1
- package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-CDmryeYY.js → ebnfDiagram-PWID7BFC-DuWfMZcD.js} +1 -1
- package/dist-embed/chunks/{edges-b2856ca0-CTakYT6h.js → edges-b2856ca0-Czd3-xvj.js} +1 -1
- package/dist-embed/chunks/{el-GR-BZB4AONW-MTzGcSsP.js → el-GR-BZB4AONW-CjQSkw0P.js} +1 -1
- package/dist-embed/chunks/{erDiagram-5d81789a-CpiBBm7t.js → erDiagram-5d81789a-JegaF4gy.js} +1 -1
- package/dist-embed/chunks/{erDiagram-RLTQ6QDP-B2QZDDaO.js → erDiagram-RLTQ6QDP-Cpn6_cd1.js} +1 -1
- package/dist-embed/chunks/{erDiagram-RLTQ6QDP-hsnql-YF.js → erDiagram-RLTQ6QDP-xubaXuKR.js} +1 -1
- package/dist-embed/chunks/{es-ES-U4NZUMDT-Thj-4Rwn.js → es-ES-U4NZUMDT-CQz3Tsxk.js} +1 -1
- package/dist-embed/chunks/{eu-ES-A7QVB2H4-BEEyNQo-.js → eu-ES-A7QVB2H4-DPwxHXvP.js} +1 -1
- package/dist-embed/chunks/{fa-IR-HGAKTJCU-CtUGmNBZ.js → fa-IR-HGAKTJCU-DlQyRFJP.js} +1 -1
- package/dist-embed/chunks/{fi-FI-Z5N7JZ37-6GMgpkSu.js → fi-FI-Z5N7JZ37-BL9Dv0rT.js} +1 -1
- package/dist-embed/chunks/{flowDb-185abca5-D4uRRPhl.js → flowDb-185abca5-BN_8lgCO.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-1629c991-B999anFV.js → flowDiagram-1629c991-YRlRqB59.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-HODETNUW-DY4I6lzA.js → flowDiagram-HODETNUW-CzRvxVGK.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-HODETNUW-D4E8W9uH.js → flowDiagram-HODETNUW-lW-icIxi.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-v2-1d953310-2W9bzV_S.js → flowDiagram-v2-1d953310-DBFSFroi.js} +1 -1
- package/dist-embed/chunks/{flowchart-elk-definition-6df44142-Cz-ICcxz.js → flowchart-elk-definition-6df44142-RjL83g27.js} +1 -1
- package/dist-embed/chunks/{fr-FR-RHASNOE6-BakNCbxj.js → fr-FR-RHASNOE6-xB7HyFVv.js} +1 -1
- package/dist-embed/chunks/{ganttDiagram-3b0b3873-CR9gwUWB.js → ganttDiagram-3b0b3873-Dowe9cKl.js} +1 -1
- package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-CoCfE73i.js → ganttDiagram-EL5Y4UJY-CLaynGwe.js} +1 -1
- package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-cZgkz4jA.js → ganttDiagram-EL5Y4UJY-CNQPBdAP.js} +1 -1
- package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-CZEgVaQ_.js → gitGraphDiagram-WWUBYQGX-CDuBbPX3.js} +1 -1
- package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-xXoxdFf9.js → gitGraphDiagram-WWUBYQGX-CupHqYWl.js} +1 -1
- package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-NdofvPL5.js → gitGraphDiagram-f01e8bc2-C06Sje1n.js} +1 -1
- package/dist-embed/chunks/{gl-ES-HMX3MZ6V-Cwkb9OPk.js → gl-ES-HMX3MZ6V-BX50ltap.js} +1 -1
- package/dist-embed/chunks/{he-IL-6SHJWFNN-BaMmvCkr.js → he-IL-6SHJWFNN-DR3hLzYG.js} +1 -1
- package/dist-embed/chunks/{hi-IN-IWLTKZ5I-1aWewhep.js → hi-IN-IWLTKZ5I-C3bSDqVc.js} +1 -1
- package/dist-embed/chunks/{hu-HU-A5ZG7DT2-BIHI23BQ.js → hu-HU-A5ZG7DT2--mRUDQG6.js} +1 -1
- package/dist-embed/chunks/{id-ID-SAP4L64H-CYpgmx8X.js → id-ID-SAP4L64H-D6psdwdp.js} +1 -1
- package/dist-embed/chunks/{index-W7TVoWP5.js → index-3O3ob63z.js} +15 -15
- package/dist-embed/chunks/{index-KgE-JGae.js → index-7F_pA42X.js} +4 -4
- package/dist-embed/chunks/{index-9bae90f3-D4JbZiwv.js → index-9bae90f3-BY7E8HZU.js} +1 -1
- package/dist-embed/chunks/{index-CMYyiALV.js → index-Azo_wV3K.js} +1 -1
- package/dist-embed/chunks/{index-BFPUYxvD.js → index-B063q-PC.js} +4 -4
- package/dist-embed/chunks/index-B0KVfQGJ.js +1 -0
- package/dist-embed/chunks/{index-BRBFWMMG.js → index-B2He8CnP.js} +1 -1
- package/dist-embed/chunks/{index-BAr0Q6NS.js → index-BExwmtFS.js} +1 -1
- package/dist-embed/chunks/{index-B3WvcNQa.js → index-BJhxZF_K.js} +1 -1
- package/dist-embed/chunks/{index-CXL3UCHy.js → index-BYMZi_1t.js} +1 -1
- package/dist-embed/chunks/{index-wovGU2zp.js → index-BblwlEJB.js} +1 -1
- package/dist-embed/chunks/{index-Fzz2KjFM.js → index-BdvS7Q4t.js} +1 -1
- package/dist-embed/chunks/{index-BbucLMre.js → index-BhU2ra4k.js} +3 -3
- package/dist-embed/chunks/{index-j-oeqTuo.js → index-BipXK1tF.js} +1 -1
- package/dist-embed/chunks/{index-1wTrAXI1.js → index-BlWZloLe.js} +3 -3
- package/dist-embed/chunks/{index-b1yzCiTq.js → index-BzXMsI1v.js} +1 -1
- package/dist-embed/chunks/{index-CPY91aGL.js → index-BzxtV5-v.js} +1 -1
- package/dist-embed/chunks/{index-C17RrmNV.js → index-C01nR1dW.js} +1 -1
- package/dist-embed/chunks/{index-t_gNTVoL.js → index-C643Hfu1.js} +1 -1
- package/dist-embed/chunks/{index-DMKsCn-y.js → index-C6wF35Kk.js} +10 -10
- package/dist-embed/chunks/{index-BhSMzuKq.js → index-C8IekrmL.js} +1 -1
- package/dist-embed/chunks/{index-BxjlpSy4.js → index-C9CpG6Nf.js} +1 -1
- package/dist-embed/chunks/{index-BUhqZVtg.js → index-CA8D7U2s.js} +2 -2
- package/dist-embed/chunks/{index-EmZm7_bH.js → index-CUL9WiLS.js} +5 -5
- package/dist-embed/chunks/{index-DeVZ-nmF.js → index-Cknn3VQD.js} +1 -1
- package/dist-embed/chunks/{index-BJ7Yskx5.js → index-CpcHHQd7.js} +1 -1
- package/dist-embed/chunks/{index-wzK_9qZx.js → index-CvBxCcaE.js} +1 -1
- package/dist-embed/chunks/{index-DkUimZI8.js → index-CzXnKkqM.js} +1 -1
- package/dist-embed/chunks/{index-Ck-wonpc.js → index-D0DBuFMt.js} +1 -1
- package/dist-embed/chunks/{index-CC-Ht79i.js → index-D1lY79hS.js} +4 -4
- package/dist-embed/chunks/{index-BFLtEBuP.js → index-DB46n9Tf.js} +2 -2
- package/dist-embed/chunks/{index-B7nmHsEo.js → index-DToDguC3.js} +1 -1
- package/dist-embed/chunks/{index-Bi5hexj-.js → index-DVDREi21.js} +1 -1
- package/dist-embed/chunks/{index-D18sf241.js → index-DVUMPcVw.js} +1 -1
- package/dist-embed/chunks/{index-ZZnjmFwm.js → index-DcZQ2Oqj.js} +1 -1
- package/dist-embed/chunks/{index-bRwN_nxZ.js → index-DvWWLOj6.js} +1 -1
- package/dist-embed/chunks/{index-Clp8quV1.js → index-Dv_XGY6Q.js} +1 -1
- package/dist-embed/chunks/{index-C3oDHYfa.js → index-DxsDy6PY.js} +1 -1
- package/dist-embed/chunks/{index-en9Yf1Yz.js → index-EpYurdzk.js} +6 -6
- package/dist-embed/chunks/{index-DIOcQUrz.js → index-MTdX216X.js} +1 -1
- package/dist-embed/chunks/{index-B2OWWcCj.js → index-YqGHzM2S.js} +1 -1
- package/dist-embed/chunks/{index-BvvaLLhn.js → index-a51XM5L8.js} +3 -3
- package/dist-embed/chunks/{index-CsZ2HycN.js → index-jy9kOmqu.js} +1 -1
- package/dist-embed/chunks/{index-e5PkgYFg.js → index-kpqZuE4J.js} +1 -1
- package/dist-embed/chunks/{index-DtlUttQj.js → index-qsUgit40.js} +1 -1
- package/dist-embed/chunks/{index-Cq19rGjf.js → index-rfsiH_M6.js} +1 -1
- package/dist-embed/chunks/{index-BYQwy0Zx.js → index-s3hayhRS.js} +2 -2
- package/dist-embed/chunks/{index.esm-RCuogyl2.js → index.esm-CWygaJYM.js} +1 -1
- package/dist-embed/chunks/{index.esm-CVNfNVDy.js → index.esm-DYeUXS4c.js} +1 -1
- package/dist-embed/chunks/{infoDiagram-27XIBGKW-DpFWmHEH.js → infoDiagram-27XIBGKW-Ctm-zk09.js} +1 -1
- package/dist-embed/chunks/{infoDiagram-27XIBGKW-DRf2y76w.js → infoDiagram-27XIBGKW-DRzH33_4.js} +1 -1
- package/dist-embed/chunks/{infoDiagram-a29d40f1-CehVkLUM.js → infoDiagram-a29d40f1-c78-ZMuT.js} +1 -1
- package/dist-embed/chunks/{isEqual-BybBNsZK.js → isEqual-niFNV5MZ.js} +1 -1
- package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-C_d1mmp3.js → ishikawaDiagram-5VMMS53U-CILSTTqm.js} +1 -1
- package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-B534qRQJ.js → ishikawaDiagram-5VMMS53U-DKv5KL85.js} +1 -1
- package/dist-embed/chunks/{it-IT-JPQ66NNP-CLcqplyX.js → it-IT-JPQ66NNP-BfrG_atL.js} +1 -1
- package/dist-embed/chunks/{ja-JP-DBVTYXUO-u8Qe6tR7.js → ja-JP-DBVTYXUO-sahpmNGY.js} +1 -1
- package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-DEeA8WJr.js → journeyDiagram-3NMN7TZE-CSMQRlsr.js} +1 -1
- package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-C0GQLJYz.js → journeyDiagram-3NMN7TZE-DlMPiHSP.js} +1 -1
- package/dist-embed/chunks/{journeyDiagram-95396277-Cwx_BI95.js → journeyDiagram-95396277-VzHClVrX.js} +1 -1
- package/dist-embed/chunks/{kaa-6HZHGXH3-BG2kx50I.js → kaa-6HZHGXH3-BrkhtXQj.js} +1 -1
- package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-CSYUpRxd.js → kab-KAB-ZGHBKWFO-DwtFIV_I.js} +1 -1
- package/dist-embed/chunks/{kanban-definition-UXKFOSKX-DucvIyR1.js → kanban-definition-UXKFOSKX-BkxvAXq2.js} +1 -1
- package/dist-embed/chunks/{kanban-definition-UXKFOSKX-Dww2l0wQ.js → kanban-definition-UXKFOSKX-esf1amn7.js} +1 -1
- package/dist-embed/chunks/{kk-KZ-P5N5QNE5-CpBMgHAz.js → kk-KZ-P5N5QNE5-UxN1LGH5.js} +1 -1
- package/dist-embed/chunks/{km-KH-HSX4SM5Z-CoMUUQMb.js → km-KH-HSX4SM5Z-B7lolfpy.js} +1 -1
- package/dist-embed/chunks/{ko-KR-MTYHY66A-DwxY8CGI.js → ko-KR-MTYHY66A-CnxefCaN.js} +1 -1
- package/dist-embed/chunks/{ku-TR-6OUDTVRD-UoNYUfm0.js → ku-TR-6OUDTVRD-Bt7bmFnv.js} +1 -1
- package/dist-embed/chunks/{layout-DiAMrtPi.js → layout-D7Mk1riq.js} +1 -1
- package/dist-embed/chunks/{layout-LNJhMVxV.js → layout-Sl9Lf6Ae.js} +1 -1
- package/dist-embed/chunks/{lexicalHooks-DEzWXVZY.js → lexicalHooks-DKF-DsxG.js} +1 -1
- package/dist-embed/chunks/{lt-LT-XHIRWOB4-Dr4uXaEj.js → lt-LT-XHIRWOB4-D6qkXs9m.js} +1 -1
- package/dist-embed/chunks/{lv-LV-5QDEKY6T-CNC56J-_.js → lv-LV-5QDEKY6T-D8g27j86.js} +1 -1
- package/dist-embed/chunks/{mermaid.core-huvnfV8t.js → mermaid.core-BhiOhb5K.js} +3 -3
- package/dist-embed/chunks/{mermaid.core-Dw1n-Hii.js → mermaid.core-CRlujv29.js} +5 -5
- package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-DWUezf-k.js → mindmap-definition-YA3MSWOX-BJQsz4H1.js} +1 -1
- package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-DKQu2lXp.js → mindmap-definition-YA3MSWOX-eCxs0BsL.js} +1 -1
- package/dist-embed/chunks/{mindmap-definition-e4c1d938-DSDPusnk.js → mindmap-definition-e4c1d938-DoGG9eDO.js} +1 -1
- package/dist-embed/chunks/{model-BHONoBA6.js → model-BziAhKNp.js} +1 -1
- package/dist-embed/chunks/{mr-IN-CRQNXWMA-BKWa9nzZ.js → mr-IN-CRQNXWMA-CMbVGyJm.js} +1 -1
- package/dist-embed/chunks/{my-MM-5M5IBNSE-bwAzOWhV.js → my-MM-5M5IBNSE-B-KPsx1j.js} +1 -1
- package/dist-embed/chunks/{nb-NO-T6EIAALU-CkpsChor.js → nb-NO-T6EIAALU-Cl7QLAt7.js} +1 -1
- package/dist-embed/chunks/{nl-NL-IS3SIHDZ-COVk4rlb.js → nl-NL-IS3SIHDZ-Brzte_o2.js} +1 -1
- package/dist-embed/chunks/{nn-NO-6E72VCQL-DlyFF-C1.js → nn-NO-6E72VCQL-CzCKEx02.js} +1 -1
- package/dist-embed/chunks/{oc-FR-POXYY2M6-CFDosV2C.js → oc-FR-POXYY2M6-DA72PkVY.js} +1 -1
- package/dist-embed/chunks/{pa-IN-N4M65BXN-BKRB3O0U.js → pa-IN-N4M65BXN-CzkFYtL0.js} +1 -1
- package/dist-embed/chunks/{pegDiagram-XKGWAZYB-ChXFZFas.js → pegDiagram-XKGWAZYB-CD3xZvKE.js} +1 -1
- package/dist-embed/chunks/{pegDiagram-XKGWAZYB-BUPTGFu3.js → pegDiagram-XKGWAZYB-CV-d6HkK.js} +1 -1
- package/dist-embed/chunks/{percentages-BXMCSKIN-D7pnqUsZ.js → percentages-BXMCSKIN-mjCCp4uI.js} +6 -6
- package/dist-embed/chunks/{pica-BQREYloS.js → pica-5TeyVfIV.js} +1 -1
- package/dist-embed/chunks/{pieDiagram-E7YTZNPT-DAuVz3z-.js → pieDiagram-E7YTZNPT-DipS--g7.js} +1 -1
- package/dist-embed/chunks/{pieDiagram-E7YTZNPT-BORvsKK0.js → pieDiagram-E7YTZNPT-toANOh_O.js} +1 -1
- package/dist-embed/chunks/{pieDiagram-c941bede-FM1PHjj3.js → pieDiagram-c941bede-DytniBrW.js} +1 -1
- package/dist-embed/chunks/{pl-PL-T2D74RX3-C5r2Tds7.js → pl-PL-T2D74RX3-F4ebFTYK.js} +1 -1
- package/dist-embed/chunks/{plugin-BoxsYxwM.js → plugin-Cf3g-jak.js} +1 -1
- package/dist-embed/chunks/plugin-DA_NCYQX.js +1 -0
- package/dist-embed/chunks/{pt-BR-5N22H2LF-CDnT98bW.js → pt-BR-5N22H2LF-B5i8LuE4.js} +1 -1
- package/dist-embed/chunks/{pt-PT-UZXXM6DQ-C6c4SPk1.js → pt-PT-UZXXM6DQ-BQ7hfRRg.js} +1 -1
- package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-DpGcSrR9.js → quadrantDiagram-AXDQQJYC-D_j5dzK-.js} +1 -1
- package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-CZe_C7e2.js → quadrantDiagram-AXDQQJYC-DlhtjZ-k.js} +1 -1
- package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-DZNznYqD.js → quadrantDiagram-cf8b8fe0-BQ2yjLYu.js} +1 -1
- package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-CuL_zbZ8.js → railroadDiagram-O6MQD6OU-CZFkdwSz.js} +1 -1
- package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-BnCn-tIV.js → railroadDiagram-O6MQD6OU-aWlxxhLc.js} +1 -1
- package/dist-embed/chunks/{renderer-lVFw9lw7.js → renderer-2D5v6hpK.js} +1 -1
- package/dist-embed/chunks/{requirementDiagram-53bda41b-BLToEv8I.js → requirementDiagram-53bda41b-CWV_b9FE.js} +1 -1
- package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-KU7DW76t.js → requirementDiagram-BXWQKSXE-BSF51uZZ.js} +1 -1
- package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-W6Oaw9v0.js → requirementDiagram-BXWQKSXE-EVwiX2gg.js} +1 -1
- package/dist-embed/chunks/{ro-RO-JPDTUUEW-CW6pbzEZ.js → ro-RO-JPDTUUEW-BdcZRS6h.js} +1 -1
- package/dist-embed/chunks/{ru-RU-B4JR7IUQ-CbaAJG0w.js → ru-RU-B4JR7IUQ-Cta1z8f6.js} +1 -1
- package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-y5tPDHfE.js → sankeyDiagram-P5KCCOFB-BqD6w06O.js} +1 -1
- package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-1UXJ4wHP.js → sankeyDiagram-P5KCCOFB-t6rHaBZJ.js} +1 -1
- package/dist-embed/chunks/{sankeyDiagram-c3ef121a-6gF3bcjb.js → sankeyDiagram-c3ef121a-C9O52Zx9.js} +1 -1
- package/dist-embed/chunks/{sequenceDiagram-82a5b84f-CglVrG1T.js → sequenceDiagram-82a5b84f-Dga-BwWi.js} +1 -1
- package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-CG-4aOyN.js → sequenceDiagram-WJ2MYXX4-DphVeQVS.js} +1 -1
- package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-DVcXqRnq.js → sequenceDiagram-WJ2MYXX4-ih6W0378.js} +1 -1
- package/dist-embed/chunks/{sessions-3PQsLINe.js → sessions-APuuDN3K.js} +2 -2
- package/dist-embed/chunks/{si-LK-N5RQ5JYF-BZkUjpXF.js → si-LK-N5RQ5JYF-DYy_OKHx.js} +1 -1
- package/dist-embed/chunks/{sizeCapture-INFHLROL-e294GOp7.js → sizeCapture-INFHLROL-CxIMCruL.js} +1 -1
- package/dist-embed/chunks/{sizeCapture-INFHLROL-CCZ7JXfm.js → sizeCapture-INFHLROL-o0dzt8-T.js} +1 -1
- package/dist-embed/chunks/{sk-SK-C5VTKIMK-DsfWgpPU.js → sk-SK-C5VTKIMK-B4A8rgzq.js} +1 -1
- package/dist-embed/chunks/{sl-SI-NN7IZMDC-Kx0FqxKU.js → sl-SI-NN7IZMDC-Dn2yU1RA.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-43e79a5f-DktiQR1L.js → stateDiagram-43e79a5f-RBFnM6HD.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-D77RDMKH-Czz7slb9.js → stateDiagram-D77RDMKH-DUbaZs3a.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-D77RDMKH-DvgDxPXs.js → stateDiagram-D77RDMKH-R5RRRvFY.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-CGEkaZYz.js → stateDiagram-v2-2041ed4f-O5FpnsEz.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-CbzbC1qh.js → stateDiagram-v2-MP3YSRHH-CxTXB7mT.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-DGG9ROyK.js → stateDiagram-v2-MP3YSRHH-xKTLvXGN.js} +1 -1
- package/dist-embed/chunks/{styles-455b33cd-BpfBULhz.js → styles-455b33cd-D4Xv2qYx.js} +1 -1
- package/dist-embed/chunks/{styles-f932cba9-DsM5quNh.js → styles-f932cba9-BRIqeB8k.js} +1 -1
- package/dist-embed/chunks/{styles-fcc2142b-bC7I59Fx.js → styles-fcc2142b-CSNd2DtU.js} +1 -1
- package/dist-embed/chunks/{subset-shared.chunk-DM3l9OuH.js → subset-shared.chunk-SugOGKH0.js} +1 -1
- package/dist-embed/chunks/{subset-worker.chunk-4w4yibm3.js → subset-worker.chunk-CHn-RJwQ.js} +1 -1
- package/dist-embed/chunks/{sv-SE-XGPEYMSR-DY0ryO-L.js → sv-SE-XGPEYMSR-DIGNKjA1.js} +1 -1
- package/dist-embed/chunks/{svgDrawCommon-148a3cd9-OC_CIhNw.js → svgDrawCommon-148a3cd9-ioBjWI45.js} +1 -1
- package/dist-embed/chunks/{swimlanes-42K2YHIH-DLiqjxvc.js → swimlanes-42K2YHIH-BPXSOfWl.js} +1 -1
- package/dist-embed/chunks/{swimlanes-42K2YHIH-nfpJsGfW.js → swimlanes-42K2YHIH-DID4P1mJ.js} +1 -1
- package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-DVkRheaE.js → swimlanesDiagram-VR7AAH4N-B216TpFb.js} +1 -1
- package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-DjeQ0TlI.js → swimlanesDiagram-VR7AAH4N-C5LAWW5q.js} +1 -1
- package/dist-embed/chunks/{ta-IN-2NMHFXQM-CWpIs0i0.js → ta-IN-2NMHFXQM-h5n2V9ms.js} +1 -1
- package/dist-embed/chunks/{th-TH-HPSO5L25-Cwkcfb3u.js → th-TH-HPSO5L25-DPUFV7b6.js} +1 -1
- package/dist-embed/chunks/{timeline-definition-24CTP7MA-CapVlXMl.js → timeline-definition-24CTP7MA-CsrTDzso.js} +1 -1
- package/dist-embed/chunks/{timeline-definition-24CTP7MA-eOK0mNc7.js → timeline-definition-24CTP7MA-Y3tUsmSp.js} +1 -1
- package/dist-embed/chunks/{timeline-definition-7545f45a-afx9iuZR.js → timeline-definition-7545f45a-Dwe7O50H.js} +1 -1
- package/dist-embed/chunks/{tokens-BfuLIPUq.js → tokens-DTIgYcNS.js} +1 -1
- package/dist-embed/chunks/{tr-TR-DEFEU3FU-BqJZZl-Y.js → tr-TR-DEFEU3FU-BezJkdMx.js} +1 -1
- package/dist-embed/chunks/{uk-UA-QMV73CPH-Dg213mG4.js → uk-UA-QMV73CPH-CqILlosm.js} +1 -1
- package/dist-embed/chunks/{usePrimerThemeBridge-D_1NuGKb.js → usePrimerThemeBridge-CoHussa9.js} +1 -1
- package/dist-embed/chunks/{vennDiagram-4TSXK5OY-D12hHdDQ.js → vennDiagram-4TSXK5OY-BhVdyHxt.js} +1 -1
- package/dist-embed/chunks/{vennDiagram-4TSXK5OY-CJ0VIZqI.js → vennDiagram-4TSXK5OY-ClTlC2ql.js} +1 -1
- package/dist-embed/chunks/{vi-VN-M7AON7JQ-DY94NKxF.js → vi-VN-M7AON7JQ-CnkPVQ0a.js} +1 -1
- package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-B1FfO2GD.js → wardleyDiagram-VM6X3IG4-DbWIMpvU.js} +1 -1
- package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-BfuBJbTV.js → wardleyDiagram-VM6X3IG4-kS16z5iB.js} +1 -1
- package/dist-embed/chunks/{xychartDiagram-3f383b91-BMDhPCCG.js → xychartDiagram-3f383b91-DYoT_EjG.js} +1 -1
- package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-xLO3w9Bz.js → xychartDiagram-S5SC5T6Z-CdwuwQAF.js} +1 -1
- package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-DZ-XUHKl.js → xychartDiagram-S5SC5T6Z-KeQp-cQ1.js} +1 -1
- package/dist-embed/chunks/{zh-CN-LNUGB5OW-B6I9A7sA.js → zh-CN-LNUGB5OW-CNdfctAT.js} +1 -1
- package/dist-embed/chunks/{zh-HK-E62DVLB3-D3oqgDOt.js → zh-HK-E62DVLB3-DEXwa5-T.js} +1 -1
- package/dist-embed/chunks/{zh-TW-RAJ6MFWO-CYwgY0Jo.js → zh-TW-RAJ6MFWO-BF7cCYAK.js} +1 -1
- package/dist-embed/datalayer-app-main.js +49 -49
- package/lib/apps/apps/appspec.js +22 -0
- package/lib/apps/core/index.d.ts +8 -0
- package/lib/apps/embed/AppEmbed.js +10 -13
- package/lib/apps/embed/hostBridge.d.ts +47 -13
- package/lib/apps/embed/hostBridge.js +135 -18
- package/lib/apps/index.d.ts +2 -2
- package/lib/apps/index.js +2 -2
- package/lib/apps/plugins/agents/DatalayerAgentBridge.js +9 -14
- package/lib/apps/plugins/agents/index.d.ts +1 -1
- package/lib/apps/plugins/agents/index.js +1 -1
- package/lib/apps/plugins/agents/plugin.d.ts +10 -0
- package/lib/apps/plugins/agents/plugin.js +10 -0
- package/lib/apps/plugins/app-elements/QuestionView.d.ts +5 -3
- package/lib/apps/plugins/app-elements/QuestionView.js +15 -2
- package/lib/apps/plugins/app-page/appPageModel.d.ts +6 -8
- package/lib/apps/plugins/app-page/appPageModel.js +0 -2
- package/lib/apps/plugins/app-page/pageRun.d.ts +2 -2
- package/lib/apps/plugins/app-page/pageRun.js +3 -3
- package/lib/apps/plugins/chat/ChatView.js +22 -3
- package/lib/chat/base/ChatBase.js +33 -3
- package/lib/chat/base/uiFiles.d.ts +29 -0
- package/lib/chat/base/uiFiles.js +69 -0
- package/lib/chat/messages/ChatMessageList.d.ts +7 -2
- package/lib/chat/messages/ChatMessageList.js +2 -2
- package/lib/examples/ProtocolSignedRequestsExample.d.ts +10 -0
- package/lib/examples/ProtocolSignedRequestsExample.js +41 -0
- package/lib/examples/ProtocolUcpCheckoutExample.d.ts +10 -0
- package/lib/examples/ProtocolUcpCheckoutExample.js +59 -0
- package/lib/examples/example-selector.js +2 -0
- package/lib/examples/exampleGroups.d.ts +1 -1
- package/lib/examples/exampleGroups.js +4 -0
- package/lib/examples/index.d.ts +2 -0
- package/lib/examples/index.js +2 -0
- package/lib/examples/protocols/signedRequestsDemo.d.ts +27 -0
- package/lib/examples/protocols/signedRequestsDemo.js +59 -0
- package/lib/examples/protocols/ucpCheckoutDemo.d.ts +36 -0
- package/lib/examples/protocols/ucpCheckoutDemo.js +68 -0
- package/lib/protocols/a2a/index.js +1 -0
- package/lib/protocols/agentic-commerce/index.js +1 -0
- package/lib/protocols/core.d.ts +6 -0
- package/lib/protocols/mcp/index.js +1 -0
- package/lib/protocols/pact/index.js +1 -0
- package/lib/protocols/ucp/index.js +1 -0
- package/lib/protocols/ucp/merchant.d.ts +15 -0
- package/lib/protocols/ucp/merchant.js +257 -0
- package/lib/protocols/web-bot-auth/index.js +1 -0
- package/lib/specs/apps.js +87 -6
- package/lib/specs/appspecSchema.js +43 -0
- package/lib/types/agentspecs.d.ts +18 -0
- package/lib/types/protocol.d.ts +7 -0
- package/package.json +2 -2
- package/dist-embed/chunks/Avatar-DbU3YP4x.js +0 -1
- package/dist-embed/chunks/ChatView-BpKZPdcp.js +0 -32
- package/dist-embed/chunks/DatalayerAgentBridge-Bz2KWRXK.js +0 -1
- package/dist-embed/chunks/YouTubePlugin-CjODyxZ2.js +0 -1
- package/dist-embed/chunks/index-DlK9qLPz.js +0 -1
- package/dist-embed/chunks/plugin-Dz5L6Xn8.js +0 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The *UCP checkout* gallery example's work (AGENT_PROTOCOLS EX-10, after
|
|
7
|
+
* EX-04): the UCP client buying from *Example Store*, the local test
|
|
8
|
+
* merchant running in the page (`protocols/ucp/merchant`). A checkout is
|
|
9
|
+
* proposed as an exact, revisioned purchase; completing it asks the host's
|
|
10
|
+
* approver — the page's card — once, and the proposal is spent whatever the
|
|
11
|
+
* answer. The payment is the test handler's; its token is never shown.
|
|
12
|
+
*
|
|
13
|
+
* @module examples/protocols/ucpCheckoutDemo
|
|
14
|
+
*/
|
|
15
|
+
import { contribution, definePlugin, } from '@datalayer/reactor';
|
|
16
|
+
import { buildProtocolsReactor } from '../../protocols/agentProtocols';
|
|
17
|
+
import { UcpApprovers, UcpClient, UcpPaymentInstruments, checkoutSummary, proposalSummary, } from '../../protocols/ucp';
|
|
18
|
+
import { EXAMPLE_STORE_HANDLER_ID, exampleStore, } from '../../protocols/ucp/merchant';
|
|
19
|
+
export const STORE = 'https://store.example';
|
|
20
|
+
export const AGENT_PROFILE = 'https://agent.example/.well-known/ucp';
|
|
21
|
+
/** The test payment's token: held by the host, never in a summary or a proposal. */
|
|
22
|
+
export const TEST_TOKEN = 'tok_test_gallery_never_shown';
|
|
23
|
+
/** The client, the store, and a host whose approver is `decide`. */
|
|
24
|
+
export function ucpCheckoutDemo(decide) {
|
|
25
|
+
const store = exampleStore(STORE);
|
|
26
|
+
const host = definePlugin({
|
|
27
|
+
name: 'gallery-host',
|
|
28
|
+
contributes: [
|
|
29
|
+
contribution(UcpApprovers, { approve: decide }, { id: 'person', order: 10 }),
|
|
30
|
+
contribution(UcpPaymentInstruments, {
|
|
31
|
+
instrument: async () => ({
|
|
32
|
+
id: 'pi_1',
|
|
33
|
+
handler_id: EXAMPLE_STORE_HANDLER_ID,
|
|
34
|
+
type: 'card',
|
|
35
|
+
credential: { type: 'PAYMENT_GATEWAY', token: TEST_TOKEN },
|
|
36
|
+
}),
|
|
37
|
+
}, { id: 'custody', order: 10 }),
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
client: new UcpClient(STORE, AGENT_PROFILE, store.fetch),
|
|
42
|
+
reactor: buildProtocolsReactor([host]),
|
|
43
|
+
orders: store.orders,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Find the tea, put `quantity` in a checkout with the buyer's email, and propose it. */
|
|
47
|
+
export async function proposeTea(demo, quantity = 2, email = 'ana@example.com') {
|
|
48
|
+
const [product] = await demo.client.search('sencha');
|
|
49
|
+
const created = await demo.client.createCheckout([
|
|
50
|
+
{ id: product.id, quantity },
|
|
51
|
+
]);
|
|
52
|
+
await demo.client.updateCheckout(created.id, { buyer: { email } });
|
|
53
|
+
const proposal = await demo.client.proposeCompletion(created.id);
|
|
54
|
+
return { proposal, says: proposalSummary(proposal) };
|
|
55
|
+
}
|
|
56
|
+
/** Complete the proposal: the approver is asked; the order, or why not. */
|
|
57
|
+
export async function buy(demo, proposal) {
|
|
58
|
+
try {
|
|
59
|
+
const done = checkoutSummary(await demo.client.complete(proposal, demo.reactor));
|
|
60
|
+
return {
|
|
61
|
+
ok: true,
|
|
62
|
+
says: `Bought: order ${done.order?.id}, ${done.status}.`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
return { ok: false, says: `Not bought: ${error.message}.` };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -56,6 +56,7 @@ export const A2APlugin = definePlugin({
|
|
|
56
56
|
status: 'implemented',
|
|
57
57
|
specification: 'https://a2a-protocol.org/latest/specification/',
|
|
58
58
|
plugin: A2A_PLUGIN,
|
|
59
|
+
catalogue: 'a2a',
|
|
59
60
|
points: EXTENSION_POINTS.map(point => point.id),
|
|
60
61
|
}, { id: 'a2a', order: DEFAULT_ORDER }),
|
|
61
62
|
contribution(A2AOrchestrationExtensions, orchestration, {
|
|
@@ -59,6 +59,7 @@ export const AgenticCommercePlugin = definePlugin({
|
|
|
59
59
|
status: 'partial',
|
|
60
60
|
specification: `https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/tree/main/spec/${AGENTIC_COMMERCE_VERSION}`,
|
|
61
61
|
plugin: AGENTIC_COMMERCE_PLUGIN,
|
|
62
|
+
catalogue: 'acp',
|
|
62
63
|
points: POINTS.map(point => point.id),
|
|
63
64
|
}, { id: 'agentic_commerce', order: DEFAULT_ORDER }),
|
|
64
65
|
],
|
package/lib/protocols/core.d.ts
CHANGED
|
@@ -26,6 +26,12 @@ export interface ProtocolDescription {
|
|
|
26
26
|
status: 'implemented' | 'partial' | 'planned';
|
|
27
27
|
specification: string;
|
|
28
28
|
plugin: string;
|
|
29
|
+
/**
|
|
30
|
+
* Its id in the agentspecs protocols catalogue (`agentspecs/protocols`,
|
|
31
|
+
* AGENT_PROTOCOLS PS-01): `web-bot-auth`, `acp`… — how Studio reads a
|
|
32
|
+
* runtime's answer against the catalogue (PR-50).
|
|
33
|
+
*/
|
|
34
|
+
catalogue: string;
|
|
29
35
|
/** The contribution points its plugin declares, its extensions' included. */
|
|
30
36
|
points: string[];
|
|
31
37
|
}
|
|
@@ -69,6 +69,7 @@ export const PactPlugin = definePlugin({
|
|
|
69
69
|
status: 'partial',
|
|
70
70
|
specification: 'https://github.com/openpactprotocol/openpactprotocol/blob/main/docs/spec.md',
|
|
71
71
|
plugin: PACT_PLUGIN,
|
|
72
|
+
catalogue: 'pact',
|
|
72
73
|
points: POINTS.map(point => point.id),
|
|
73
74
|
}, { id: 'pact', order: DEFAULT_ORDER }),
|
|
74
75
|
contribution(PactDelegatedProfiles, { grantType: DEVICE_CODE_GRANT }, { id: 'device-code', order: DEFAULT_ORDER }),
|
|
@@ -64,6 +64,7 @@ export const UcpPlugin = definePlugin({
|
|
|
64
64
|
status: 'partial',
|
|
65
65
|
specification: `https://ucp.dev/${UCP_VERSION}/specification/overview`,
|
|
66
66
|
plugin: UCP_PLUGIN,
|
|
67
|
+
catalogue: 'ucp',
|
|
67
68
|
points: UCP_POINTS.map(point => point.id),
|
|
68
69
|
}, { id: 'ucp', order: DEFAULT_ORDER }),
|
|
69
70
|
],
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** The store's products, as the Python store lists them. */
|
|
2
|
+
export declare const EXAMPLE_STORE_CATALOG: Record<string, {
|
|
3
|
+
title: string;
|
|
4
|
+
price: number;
|
|
5
|
+
}>;
|
|
6
|
+
/** The one payment handler it takes, and the prefix of its test tokens. */
|
|
7
|
+
export declare const EXAMPLE_STORE_HANDLER_ID = "test_pay_1";
|
|
8
|
+
/** The store: its `fetch`, and the orders it took. */
|
|
9
|
+
export declare function exampleStore(base?: string): {
|
|
10
|
+
fetch: typeof fetch;
|
|
11
|
+
orders: Array<{
|
|
12
|
+
order: string;
|
|
13
|
+
checkout: string;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* *Example Store*, the local UCP test merchant, as a `fetch` (AGENT_PROTOCOLS
|
|
7
|
+
* EX-04, EX-10): the same catalogue, totals, email gate, idempotency and
|
|
8
|
+
* test payment as `agent_runtimes.protocols.ucp.merchant.ExampleStore`, so a
|
|
9
|
+
* page or a test buys from it with no network. A test merchant only: it keeps
|
|
10
|
+
* nothing beyond the page, and refuses any payment but its test handler's.
|
|
11
|
+
*
|
|
12
|
+
* @module protocols/ucp/merchant
|
|
13
|
+
*/
|
|
14
|
+
import { CHECKOUT_CAPABILITY, SHOPPING_SERVICE, UCP_VERSION } from './index';
|
|
15
|
+
/** The store's products, as the Python store lists them. */
|
|
16
|
+
export const EXAMPLE_STORE_CATALOG = {
|
|
17
|
+
tea_sencha: { title: 'Sencha green tea, 100 g', price: 1250 },
|
|
18
|
+
tea_assam: { title: 'Assam black tea, 250 g', price: 1800 },
|
|
19
|
+
mug: { title: 'Stoneware mug', price: 2400 },
|
|
20
|
+
};
|
|
21
|
+
/** The one payment handler it takes, and the prefix of its test tokens. */
|
|
22
|
+
export const EXAMPLE_STORE_HANDLER_ID = 'test_pay_1';
|
|
23
|
+
const TEST_TOKEN_PREFIX = 'tok_test_';
|
|
24
|
+
const json = (body, status = 200) => new Response(JSON.stringify(body), {
|
|
25
|
+
status,
|
|
26
|
+
headers: { 'content-type': 'application/json' },
|
|
27
|
+
});
|
|
28
|
+
const refuse = (status, code, content) => json({
|
|
29
|
+
ucp: { version: UCP_VERSION, status: 'error' },
|
|
30
|
+
messages: [{ type: 'error', code, content, severity: 'recoverable' }],
|
|
31
|
+
}, status);
|
|
32
|
+
const meta = () => ({
|
|
33
|
+
version: UCP_VERSION,
|
|
34
|
+
status: 'success',
|
|
35
|
+
capabilities: { [CHECKOUT_CAPABILITY]: [{ version: UCP_VERSION }] },
|
|
36
|
+
payment_handlers: {
|
|
37
|
+
'com.example.test_pay': [
|
|
38
|
+
{
|
|
39
|
+
id: EXAMPLE_STORE_HANDLER_ID,
|
|
40
|
+
version: UCP_VERSION,
|
|
41
|
+
available_instruments: [{ type: 'card' }],
|
|
42
|
+
config: {},
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
async function fingerprint(path, body) {
|
|
48
|
+
const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(path + body));
|
|
49
|
+
return Array.from(new Uint8Array(digest), b => b.toString(16).padStart(2, '0')).join('');
|
|
50
|
+
}
|
|
51
|
+
/** The store: its `fetch`, and the orders it took. */
|
|
52
|
+
export function exampleStore(base = 'https://store.example') {
|
|
53
|
+
const checkouts = new Map();
|
|
54
|
+
const replies = new Map();
|
|
55
|
+
const orders = [];
|
|
56
|
+
const render = (checkout) => {
|
|
57
|
+
let subtotal = 0;
|
|
58
|
+
const lines = checkout.lines.map((line, index) => {
|
|
59
|
+
const product = EXAMPLE_STORE_CATALOG[line.id];
|
|
60
|
+
const amount = product.price * line.quantity;
|
|
61
|
+
subtotal += amount;
|
|
62
|
+
return {
|
|
63
|
+
id: `li_${index + 1}`,
|
|
64
|
+
item: { id: line.id, title: product.title, price: product.price },
|
|
65
|
+
quantity: line.quantity,
|
|
66
|
+
totals: [
|
|
67
|
+
{ type: 'subtotal', amount },
|
|
68
|
+
{ type: 'total', amount },
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
const tax = Math.round(subtotal * 0.08);
|
|
73
|
+
const messages = [];
|
|
74
|
+
if (['incomplete', 'ready_for_complete'].includes(checkout.status)) {
|
|
75
|
+
checkout.status = checkout.buyer?.email
|
|
76
|
+
? 'ready_for_complete'
|
|
77
|
+
: 'incomplete';
|
|
78
|
+
if (!checkout.buyer?.email) {
|
|
79
|
+
messages.push({
|
|
80
|
+
type: 'error',
|
|
81
|
+
code: 'missing',
|
|
82
|
+
path: '$.buyer.email',
|
|
83
|
+
content: 'Buyer email is required',
|
|
84
|
+
severity: 'recoverable',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
ucp: meta(),
|
|
90
|
+
id: checkout.id,
|
|
91
|
+
status: checkout.status,
|
|
92
|
+
currency: 'USD',
|
|
93
|
+
line_items: lines,
|
|
94
|
+
totals: [
|
|
95
|
+
{ type: 'subtotal', amount: subtotal },
|
|
96
|
+
{ type: 'tax', amount: tax },
|
|
97
|
+
{ type: 'total', amount: subtotal + tax },
|
|
98
|
+
],
|
|
99
|
+
links: [{ type: 'terms_of_service', url: `${base}/terms` }],
|
|
100
|
+
expires_at: checkout.expiresAt,
|
|
101
|
+
...(messages.length ? { messages } : {}),
|
|
102
|
+
...(checkout.buyer?.email ? { buyer: checkout.buyer } : {}),
|
|
103
|
+
...(checkout.order ? { order: checkout.order } : {}),
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
const linesOf = (body) => {
|
|
107
|
+
const lines = [];
|
|
108
|
+
for (const line of body.line_items ?? []) {
|
|
109
|
+
const id = line?.item?.id;
|
|
110
|
+
if (!(id in EXAMPLE_STORE_CATALOG)) {
|
|
111
|
+
return `No product ${id}`;
|
|
112
|
+
}
|
|
113
|
+
lines.push({ id, quantity: Number(line.quantity ?? 1) });
|
|
114
|
+
}
|
|
115
|
+
return lines;
|
|
116
|
+
};
|
|
117
|
+
const handle = (method, path, body) => {
|
|
118
|
+
if (method === 'POST' && path === '/checkout-sessions') {
|
|
119
|
+
const lines = linesOf(body);
|
|
120
|
+
if (typeof lines === 'string') {
|
|
121
|
+
return { status: 404, body: { messages: [{ content: lines }] } };
|
|
122
|
+
}
|
|
123
|
+
const checkout = {
|
|
124
|
+
id: `chk_${crypto.randomUUID().slice(0, 12)}`,
|
|
125
|
+
status: 'incomplete',
|
|
126
|
+
lines,
|
|
127
|
+
buyer: body.buyer ?? {},
|
|
128
|
+
expiresAt: new Date(Date.now() + 60 * 60 * 1000).toISOString(),
|
|
129
|
+
};
|
|
130
|
+
checkouts.set(checkout.id, checkout);
|
|
131
|
+
return { status: 201, body: render(checkout) };
|
|
132
|
+
}
|
|
133
|
+
const [, , id, action] = path.split('/');
|
|
134
|
+
const checkout = checkouts.get(id);
|
|
135
|
+
if (!checkout) {
|
|
136
|
+
return { status: 404, body: { messages: [{ content: 'No checkout' }] } };
|
|
137
|
+
}
|
|
138
|
+
if (method === 'PUT' && !action) {
|
|
139
|
+
if (!['incomplete', 'ready_for_complete'].includes(checkout.status)) {
|
|
140
|
+
return { status: 409, body: render(checkout) };
|
|
141
|
+
}
|
|
142
|
+
if (body.buyer) {
|
|
143
|
+
checkout.buyer = body.buyer;
|
|
144
|
+
}
|
|
145
|
+
if (body.line_items) {
|
|
146
|
+
const lines = linesOf(body);
|
|
147
|
+
if (typeof lines === 'string') {
|
|
148
|
+
return { status: 404, body: { messages: [{ content: lines }] } };
|
|
149
|
+
}
|
|
150
|
+
checkout.lines = lines;
|
|
151
|
+
}
|
|
152
|
+
return { status: 200, body: render(checkout) };
|
|
153
|
+
}
|
|
154
|
+
if (method === 'POST' && action === 'complete') {
|
|
155
|
+
if (checkout.status !== 'ready_for_complete') {
|
|
156
|
+
return { status: 200, body: render(checkout) };
|
|
157
|
+
}
|
|
158
|
+
const [instrument] = body.payment?.instruments ?? [{}];
|
|
159
|
+
const token = String(instrument?.credential?.token ?? '');
|
|
160
|
+
if (instrument?.handler_id !== EXAMPLE_STORE_HANDLER_ID ||
|
|
161
|
+
!token.startsWith(TEST_TOKEN_PREFIX)) {
|
|
162
|
+
return {
|
|
163
|
+
status: 402,
|
|
164
|
+
body: {
|
|
165
|
+
ucp: { version: UCP_VERSION, status: 'error' },
|
|
166
|
+
messages: [
|
|
167
|
+
{
|
|
168
|
+
type: 'error',
|
|
169
|
+
code: 'payment_declined',
|
|
170
|
+
content: 'The payment was declined',
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const order = {
|
|
177
|
+
id: `ord_${crypto.randomUUID().slice(0, 10)}`,
|
|
178
|
+
permalink_url: `${base}/orders/${checkout.id}`,
|
|
179
|
+
};
|
|
180
|
+
checkout.status = 'completed';
|
|
181
|
+
checkout.order = order;
|
|
182
|
+
orders.push({ order: order.id, checkout: checkout.id });
|
|
183
|
+
return { status: 200, body: render(checkout) };
|
|
184
|
+
}
|
|
185
|
+
if (method === 'POST' && action === 'cancel') {
|
|
186
|
+
if (checkout.status !== 'completed') {
|
|
187
|
+
checkout.status = 'canceled';
|
|
188
|
+
}
|
|
189
|
+
return { status: 200, body: render(checkout) };
|
|
190
|
+
}
|
|
191
|
+
if (method === 'GET' && !action) {
|
|
192
|
+
return { status: 200, body: render(checkout) };
|
|
193
|
+
}
|
|
194
|
+
return { status: 405, body: {} };
|
|
195
|
+
};
|
|
196
|
+
const fetchImpl = (async (input, init) => {
|
|
197
|
+
const url = new URL(String(input));
|
|
198
|
+
if (url.pathname === '/.well-known/ucp') {
|
|
199
|
+
return json({
|
|
200
|
+
ucp: {
|
|
201
|
+
version: UCP_VERSION,
|
|
202
|
+
services: {
|
|
203
|
+
[SHOPPING_SERVICE]: [
|
|
204
|
+
{
|
|
205
|
+
version: UCP_VERSION,
|
|
206
|
+
transport: 'rest',
|
|
207
|
+
endpoint: `${base}/ucp/v1`,
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
},
|
|
211
|
+
capabilities: { [CHECKOUT_CAPABILITY]: [{ version: UCP_VERSION }] },
|
|
212
|
+
payment_handlers: meta().payment_handlers,
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
const headers = new Headers(init?.headers);
|
|
217
|
+
const agent = headers.get('UCP-Agent') ?? '';
|
|
218
|
+
if (!/^profile="https:\/\/[^"]+"$/.test(agent)) {
|
|
219
|
+
return refuse(400, 'invalid_ucp_agent', 'UCP-Agent names its profile over https');
|
|
220
|
+
}
|
|
221
|
+
if (!headers.get('Request-Id')) {
|
|
222
|
+
return refuse(400, 'missing_request_id', 'Request-Id is required');
|
|
223
|
+
}
|
|
224
|
+
const method = (init?.method ?? 'GET').toUpperCase();
|
|
225
|
+
const path = url.pathname.replace(/^\/ucp\/v1/, '');
|
|
226
|
+
const raw = typeof init?.body === 'string' ? init.body : '';
|
|
227
|
+
const body = raw ? JSON.parse(raw) : {};
|
|
228
|
+
if (path === '/catalog/search') {
|
|
229
|
+
const query = String(body.query ?? '').toLowerCase();
|
|
230
|
+
return json({
|
|
231
|
+
ucp: { version: UCP_VERSION },
|
|
232
|
+
products: Object.entries(EXAMPLE_STORE_CATALOG)
|
|
233
|
+
.filter(([, product]) => product.title.toLowerCase().includes(query))
|
|
234
|
+
.map(([id, product]) => ({ id, title: product.title })),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
if (method === 'GET') {
|
|
238
|
+
const answer = handle(method, path, body);
|
|
239
|
+
return json(answer.body, answer.status);
|
|
240
|
+
}
|
|
241
|
+
const key = headers.get('Idempotency-Key');
|
|
242
|
+
if (!key) {
|
|
243
|
+
return refuse(400, 'missing_idempotency_key', 'Idempotency-Key is required');
|
|
244
|
+
}
|
|
245
|
+
const seen = await fingerprint(url.pathname, raw);
|
|
246
|
+
const replied = replies.get(key);
|
|
247
|
+
if (replied) {
|
|
248
|
+
return replied.seen === seen
|
|
249
|
+
? json(replied.body, replied.status)
|
|
250
|
+
: refuse(409, 'idempotency_conflict', 'the key was used for another request');
|
|
251
|
+
}
|
|
252
|
+
const answer = handle(method, path, body);
|
|
253
|
+
replies.set(key, { seen, ...answer });
|
|
254
|
+
return json(answer.body, answer.status);
|
|
255
|
+
});
|
|
256
|
+
return { fetch: fetchImpl, orders };
|
|
257
|
+
}
|
|
@@ -324,6 +324,7 @@ export const WebBotAuthPlugin = definePlugin({
|
|
|
324
324
|
status: 'implemented',
|
|
325
325
|
specification: 'https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/',
|
|
326
326
|
plugin: WEB_BOT_AUTH_PLUGIN,
|
|
327
|
+
catalogue: 'web-bot-auth',
|
|
327
328
|
points: WEB_BOT_AUTH_POINTS.map(point => point.id),
|
|
328
329
|
}, { id: 'web_bot_auth', order: DEFAULT_ORDER }),
|
|
329
330
|
contribution(WebBotAuthDirectoryDiscoveries, directoryDiscovery(), {
|