@datalayer/agent-runtimes 1.5.21 → 1.5.23
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-C7tCazwB.js → AgentDetails-Xvq2IvHg.js} +1 -1
- package/dist-embed/chunks/{AgentDetailsDialog-Cwps4GeH.js → AgentDetailsDialog-DmtKB_5z.js} +1 -1
- package/dist-embed/chunks/{AgentInspector-Gk7jbg8t.js → AgentInspector-EiBHJgc9.js} +1 -1
- package/dist-embed/chunks/{AgentInspectorDialog-BSSDOFrT.js → AgentInspectorDialog-3fbLXnLP.js} +1 -1
- package/dist-embed/chunks/{CellSidebarExtension-p2BAkwis.js → CellSidebarExtension-CDnzN9Cb.js} +8 -8
- package/dist-embed/chunks/ChatView-BjZ993Ch.js +32 -0
- package/dist-embed/chunks/{ContextPie-bd_YOjzP.js → ContextPie-DdsXl5s7.js} +1 -1
- package/dist-embed/chunks/{DeckComponent-4gxuEH4A.js → DeckComponent-Cb4_dZpN.js} +2 -2
- package/dist-embed/chunks/{DocumentView-BZSYqTh_.js → DocumentView-Caxb2xz-.js} +1 -1
- package/dist-embed/chunks/{EphemeralDocument-Cevnk5OF.js → EphemeralDocument-DIHjR5l8.js} +1 -1
- package/dist-embed/chunks/{EphemeralNotebook-JvALIbK2.js → EphemeralNotebook-1Rwa3anx.js} +1 -1
- package/dist-embed/chunks/{ExcalidrawComponent-CbghNk-F.js → ExcalidrawComponent-vJQwgcUt.js} +1 -1
- package/dist-embed/chunks/{ExcalidrawModal-BOVvWzYQ.js → ExcalidrawModal-BDgjdSz2.js} +1 -1
- package/dist-embed/chunks/{JupyterLexicalExtension-CRccZ2h7.js → JupyterLexicalExtension-_7FM5Om8.js} +28 -28
- package/dist-embed/chunks/{KernelVariables-ompObBEM.js → KernelVariables-CKIqy599.js} +1 -1
- package/dist-embed/chunks/{LexicalToolRegistry-BlBEZPP4.js → LexicalToolRegistry-8wJyLumb.js} +1 -1
- package/dist-embed/chunks/{NotebookToolSurfaces-DP8sWqVy.js → NotebookToolSurfaces-YAM1bvZS.js} +1 -1
- package/dist-embed/chunks/{NotebookView-DC6BDVEp.js → NotebookView-C8RCvsR1.js} +1 -1
- package/dist-embed/chunks/{Output-C4hBhZ5k.js → Output-BWClePP-.js} +1 -1
- package/dist-embed/chunks/{SandboxDetailsDialog-CX8wvCLJ.js → SandboxDetailsDialog-CDSxIC0-.js} +1 -1
- package/dist-embed/chunks/{SchemaForm-BuhXDyz6.js → SchemaForm-CO_2yGg2.js} +1 -1
- package/dist-embed/chunks/{WidgetVariableView-C2X5Ehcg.js → WidgetVariableView--osoOLv8.js} +1 -1
- package/dist-embed/chunks/{YouTubePlugin-CjgOnMCz.js → YouTubePlugin-BB7Z7INn.js} +1 -1
- package/dist-embed/chunks/{abnfDiagram-VCTEODGH-kzVu7pzT.js → abnfDiagram-VCTEODGH-faK2fyHC.js} +1 -1
- package/dist-embed/chunks/{ar-SA-G6X2FPQ2-ArgZTGSp.js → ar-SA-G6X2FPQ2-D6Ko4I2x.js} +1 -1
- package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-DVZUrWEx.js → architectureDiagram-5GKGNRK7-DBMLRsbO.js} +1 -1
- package/dist-embed/chunks/{az-AZ-76LH7QW2-DQgz6n32.js → az-AZ-76LH7QW2-B3UhxnSz.js} +1 -1
- package/dist-embed/chunks/{bg-BG-XCXSNQG7-Cx0dPt6-.js → bg-BG-XCXSNQG7-BS-QRZjB.js} +1 -1
- package/dist-embed/chunks/{blockDiagram-868be97b-DEQh5CUO.js → blockDiagram-868be97b-BXBoGds2.js} +1 -1
- package/dist-embed/chunks/{blockDiagram-I7D4REHJ-C6gbEBfg.js → blockDiagram-I7D4REHJ-BNkBA3Vb.js} +1 -1
- package/dist-embed/chunks/{bn-BD-2XOGV67Q-BkekmuYO.js → bn-BD-2XOGV67Q-DNg0uIV0.js} +1 -1
- package/dist-embed/chunks/{c4Diagram-3f4bdde3-CUcRctJE.js → c4Diagram-3f4bdde3-4OdTwU_t.js} +1 -1
- package/dist-embed/chunks/{c4Diagram-7LVT6UL2-DSQiEaxC.js → c4Diagram-7LVT6UL2-BGpBMrvl.js} +1 -1
- package/dist-embed/chunks/{ca-ES-6MX7JW3Y-Yr14RtMP.js → ca-ES-6MX7JW3Y-Bn4yHfTY.js} +1 -1
- package/dist-embed/chunks/{celltoolbartracker-Bx9x9aeh.js → celltoolbartracker-DcYHi8Du.js} +1 -1
- package/dist-embed/chunks/{chunk-2Q5K7J3B-DbzMjK_L.js → chunk-2Q5K7J3B-P4f8Cifn.js} +1 -1
- package/dist-embed/chunks/{chunk-5VM5RSS4-rEZEdbpi.js → chunk-5VM5RSS4-BVaSZr_4.js} +1 -1
- package/dist-embed/chunks/{chunk-F27PBJKO-BH7lDumP.js → chunk-F27PBJKO-C-90E7AT.js} +1 -1
- package/dist-embed/chunks/{chunk-IMKFNOWR-BA-vmq_V.js → chunk-IMKFNOWR--OZX7QCt.js} +1 -1
- package/dist-embed/chunks/{chunk-JWPE2WC7-BfRI4eJ2.js → chunk-JWPE2WC7-OHowekj4.js} +1 -1
- package/dist-embed/chunks/{chunk-POPQ4Y6H-B7pT6rUf.js → chunk-POPQ4Y6H-BgLsR3l7.js} +1 -1
- package/dist-embed/chunks/{chunk-SVP7TREG-BxpYXJab.js → chunk-SVP7TREG-kM9Erqyf.js} +1 -1
- package/dist-embed/chunks/{chunk-TICWLB2K-LCiyX33a.js → chunk-TICWLB2K-pVdCft0o.js} +1 -1
- package/dist-embed/chunks/{chunk-XXDRQBXY-islJGiCO.js → chunk-XXDRQBXY-BSfKSQ7y.js} +1 -1
- package/dist-embed/chunks/{classDiagram-ZZMXUADV-C7-Ca_nP.js → classDiagram-ZZMXUADV-Dq0Eb9fh.js} +1 -1
- package/dist-embed/chunks/{classDiagram-f62afe4f-BaJUb6H9.js → classDiagram-f62afe4f-C8j4XsQw.js} +1 -1
- package/dist-embed/chunks/{classDiagram-v2-604399ef-s6LKeK41.js → classDiagram-v2-604399ef-BVT78aGU.js} +1 -1
- package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-C7-Ca_nP.js → classDiagram-v2-VYDZK3BY-Dq0Eb9fh.js} +1 -1
- package/dist-embed/chunks/{code-block-IT6T5CEO-BieLU8ls.js → code-block-IT6T5CEO-Dbm1cj5T.js} +1 -1
- package/dist-embed/chunks/{component-p2xkjXeh.js → component-CsXw-w1P.js} +1 -1
- package/dist-embed/chunks/{cose-bilkent-JH36ORCC-BkezndW_.js → cose-bilkent-JH36ORCC-DEGpy0W8.js} +1 -1
- package/dist-embed/chunks/{createText-aed3d8b3-Dw8k7JC8.js → createText-aed3d8b3-BukHQ1P8.js} +1 -1
- package/dist-embed/chunks/{cs-CZ-2BRQDIVT-DYR-S6bD.js → cs-CZ-2BRQDIVT-DUGnyonZ.js} +1 -1
- package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-DqoI6t3s.js → cynefinDiagram-5FMLGOSQ-CnZ3wqXe.js} +1 -1
- package/dist-embed/chunks/{da-DK-5WZEPLOC-DhaHIgKI.js → da-DK-5WZEPLOC-Is8nybqO.js} +1 -1
- package/dist-embed/chunks/{dagre-GXQ25YYZ-pcAHu_bK.js → dagre-GXQ25YYZ-Dbp_O7kO.js} +1 -1
- package/dist-embed/chunks/{de-DE-XR44H4JA-CJpRH2Fy.js → de-DE-XR44H4JA-D54sMa4L.js} +1 -1
- package/dist-embed/chunks/{diagram-S7CK7UJ4-W17wgXHY.js → diagram-S7CK7UJ4-DHPFd83P.js} +1 -1
- package/dist-embed/chunks/{diagram-UQ7AKVKN-mH7QBO8y.js → diagram-UQ7AKVKN-BqXFRP10.js} +1 -1
- package/dist-embed/chunks/{diagram-VSXAHHWV-CFHqpDaB.js → diagram-VSXAHHWV-DO0toZBQ.js} +1 -1
- package/dist-embed/chunks/{diagram-VX7I27RA-DQ6XlKLw.js → diagram-VX7I27RA-Diuc1eIf.js} +1 -1
- package/dist-embed/chunks/{diagram-Z3DM3KII-Cenqf76m.js → diagram-Z3DM3KII-DtauJWd2.js} +1 -1
- package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-Cqmnghct.js → ebnfDiagram-PWID7BFC-SU3uN2_2.js} +1 -1
- package/dist-embed/chunks/{edges-b2856ca0-ChO7JKaP.js → edges-b2856ca0-DbD0XDJS.js} +1 -1
- package/dist-embed/chunks/{el-GR-BZB4AONW-DPGB1p8K.js → el-GR-BZB4AONW-CvM3SWat.js} +1 -1
- package/dist-embed/chunks/{erDiagram-5d81789a-jzhAXdZi.js → erDiagram-5d81789a-C-Tzt4MD.js} +1 -1
- package/dist-embed/chunks/{erDiagram-RLTQ6QDP-hAbP0vV0.js → erDiagram-RLTQ6QDP-C_c-qnRZ.js} +1 -1
- package/dist-embed/chunks/{es-ES-U4NZUMDT-CLztgM3g.js → es-ES-U4NZUMDT-BZDRRuRf.js} +1 -1
- package/dist-embed/chunks/{eu-ES-A7QVB2H4--ffZf65_.js → eu-ES-A7QVB2H4-DAmknI9y.js} +1 -1
- package/dist-embed/chunks/{fa-IR-HGAKTJCU-Cwwej6FC.js → fa-IR-HGAKTJCU-CQhKri4O.js} +1 -1
- package/dist-embed/chunks/{fi-FI-Z5N7JZ37-Tw-dUSxy.js → fi-FI-Z5N7JZ37-DzEDoP64.js} +1 -1
- package/dist-embed/chunks/{flowDb-185abca5-DDUaXZ_Q.js → flowDb-185abca5-Di4aD0Mg.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-1629c991-DpvDtFPK.js → flowDiagram-1629c991-fImernS2.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-HODETNUW-DENY4Bvt.js → flowDiagram-HODETNUW-DzoskzA4.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-v2-1d953310-TxFSXMN7.js → flowDiagram-v2-1d953310-P1qDfDo-.js} +1 -1
- package/dist-embed/chunks/{flowchart-elk-definition-6df44142-BGFxwidp.js → flowchart-elk-definition-6df44142-CXebTCvX.js} +1 -1
- package/dist-embed/chunks/{fr-FR-RHASNOE6-CT1NyjSV.js → fr-FR-RHASNOE6-DiSkyvEB.js} +1 -1
- package/dist-embed/chunks/{ganttDiagram-3b0b3873-DJqKtGUz.js → ganttDiagram-3b0b3873-Bupos8HO.js} +1 -1
- package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-Ddh9hVkO.js → ganttDiagram-EL5Y4UJY-e3WDalFj.js} +1 -1
- package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-B3BVHs36.js → gitGraphDiagram-WWUBYQGX-Ck49f0H9.js} +1 -1
- package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-vOvP_sU8.js → gitGraphDiagram-f01e8bc2-DM8FMetI.js} +1 -1
- package/dist-embed/chunks/{gl-ES-HMX3MZ6V-BKTaXj_2.js → gl-ES-HMX3MZ6V-3AJMzY-I.js} +1 -1
- package/dist-embed/chunks/{he-IL-6SHJWFNN-BJ5SwTG5.js → he-IL-6SHJWFNN-Cuh5an4X.js} +1 -1
- package/dist-embed/chunks/{hi-IN-IWLTKZ5I-D5ZQxogx.js → hi-IN-IWLTKZ5I-BbeuFB83.js} +1 -1
- package/dist-embed/chunks/{hu-HU-A5ZG7DT2-CoAAAzpy.js → hu-HU-A5ZG7DT2-C1OMfhob.js} +1 -1
- package/dist-embed/chunks/{id-ID-SAP4L64H-DFWbGjYj.js → id-ID-SAP4L64H-BzKILJTZ.js} +1 -1
- package/dist-embed/chunks/{index-9bae90f3-YA-Pbv-C.js → index-9bae90f3-l9tb84fw.js} +1 -1
- package/dist-embed/chunks/{index-CIDdX0nc.js → index-BFdE0KFI.js} +1 -1
- package/dist-embed/chunks/{index-Db1qHC1a.js → index-BMandbJB.js} +1 -1
- package/dist-embed/chunks/{index-BTeNnRc_.js → index-BO6VQLH6.js} +4 -4
- package/dist-embed/chunks/{index-1MXuxaax.js → index-BTnG8qrO.js} +1 -1
- package/dist-embed/chunks/{index-BVzIb3Wy.js → index-BktUM85c.js} +1 -1
- package/dist-embed/chunks/{index-BuyZwxeT.js → index-CAd5YQQl.js} +1 -1
- package/dist-embed/chunks/{index-DMf0f7ny.js → index-CFP9psRB.js} +2 -2
- package/dist-embed/chunks/{index-DPzPvDBn.js → index-CKFrz1es.js} +1 -1
- package/dist-embed/chunks/{index-DTCcg1ap.js → index-CM7xo08K.js} +1 -1
- package/dist-embed/chunks/{index-8Jy3Vws8.js → index-CPpm1tqJ.js} +6 -6
- package/dist-embed/chunks/{index-B0MhQWhs.js → index-CRZ1qthh.js} +1 -1
- package/dist-embed/chunks/{index-FbZJIbu_.js → index-CWwj0zW9.js} +1 -1
- package/dist-embed/chunks/{index-CCA_V9Td.js → index-Cu0bp_EI.js} +1 -1
- package/dist-embed/chunks/{index-BfMo5nXi.js → index-CyQgE_Es.js} +2 -2
- package/dist-embed/chunks/{index-BzQxauhZ.js → index-D4QM3qbA.js} +1 -1
- package/dist-embed/chunks/{index-D62kZnWZ.js → index-D64QvG43.js} +5 -5
- package/dist-embed/chunks/{index-JhvHCMRQ.js → index-DEjLPUAD.js} +1 -1
- package/dist-embed/chunks/{index-CkOZcvYl.js → index-DLimRfHQ.js} +1 -1
- package/dist-embed/chunks/{index-B0omKuYl.js → index-DN-cizG6.js} +1 -1
- package/dist-embed/chunks/{index-C7os26P7.js → index-DSN70XMH.js} +2 -2
- package/dist-embed/chunks/{index-CxIZHPCc.js → index-DY8mjz1l.js} +1 -1
- package/dist-embed/chunks/{index-BgWf1G8H.js → index-Dobs-OKl.js} +1 -1
- package/dist-embed/chunks/index-DyVR0igi.js +34 -0
- package/dist-embed/chunks/{index-6feFd5AZ.js → index-PqsSImlj.js} +1 -1
- package/dist-embed/chunks/{index-BNFZYAJT.js → index-SbFvdBPQ.js} +1 -1
- package/dist-embed/chunks/{index-B9vBhR-p.js → index-dYwQAVs_.js} +1 -1
- package/dist-embed/chunks/{index-DTbF6Y7O.js → index-f418CYn7.js} +1 -1
- package/dist-embed/chunks/{index-BL4KuFQP.js → index-f9WZsG2n.js} +1 -1
- package/dist-embed/chunks/{index-DSgHh0-i.js → index-noRoZrq5.js} +1 -1
- package/dist-embed/chunks/{index-B8y71UkT.js → index-wk9vl2uW.js} +1 -1
- package/dist-embed/chunks/{index-Dw1P-H6s.js → index-x45cMPwN.js} +1 -1
- package/dist-embed/chunks/{index.esm-B6P80s3J.js → index.esm-p0OnSU9h.js} +1 -1
- package/dist-embed/chunks/{infoDiagram-27XIBGKW-CZPNcDbH.js → infoDiagram-27XIBGKW-BjyM865y.js} +1 -1
- package/dist-embed/chunks/{infoDiagram-a29d40f1-Di_kmyTC.js → infoDiagram-a29d40f1-DXYFLipl.js} +1 -1
- package/dist-embed/chunks/{isEqual-D0eOPSLC.js → isEqual-Cwjr2skl.js} +1 -1
- package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-DD5TaPvH.js → ishikawaDiagram-5VMMS53U-Bb5g5HNe.js} +1 -1
- package/dist-embed/chunks/{it-IT-JPQ66NNP-C7p9bCWQ.js → it-IT-JPQ66NNP-DuG05fUR.js} +1 -1
- package/dist-embed/chunks/{ja-JP-DBVTYXUO-DupAM7Cv.js → ja-JP-DBVTYXUO-DeDfL3Bk.js} +1 -1
- package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-1NqbTyL4.js → journeyDiagram-3NMN7TZE-96VNFopN.js} +1 -1
- package/dist-embed/chunks/{journeyDiagram-95396277-xr9Xk_mL.js → journeyDiagram-95396277-CQ_kN2gp.js} +1 -1
- package/dist-embed/chunks/{kaa-6HZHGXH3-DrthOcPY.js → kaa-6HZHGXH3-BRKFVG6s.js} +1 -1
- package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-C4hr0kbU.js → kab-KAB-ZGHBKWFO-Uqakmhz5.js} +1 -1
- package/dist-embed/chunks/{kanban-definition-UXKFOSKX-DlSwjr3b.js → kanban-definition-UXKFOSKX-BPsXEKm4.js} +1 -1
- package/dist-embed/chunks/{kk-KZ-P5N5QNE5-CrjDkh9r.js → kk-KZ-P5N5QNE5-DWMXMIAK.js} +1 -1
- package/dist-embed/chunks/{km-KH-HSX4SM5Z-JHWf7VZ6.js → km-KH-HSX4SM5Z-BXNl9QnV.js} +1 -1
- package/dist-embed/chunks/{ko-KR-MTYHY66A-CJ4JxKMG.js → ko-KR-MTYHY66A-BZgIqTuN.js} +1 -1
- package/dist-embed/chunks/{ku-TR-6OUDTVRD-YSlLPag_.js → ku-TR-6OUDTVRD-CQNa5i5U.js} +1 -1
- package/dist-embed/chunks/{layout-5FOjTADt.js → layout-Dq0J6INj.js} +1 -1
- package/dist-embed/chunks/{lexicalHooks-eqXJbnX9.js → lexicalHooks-Pqoe8h_O.js} +1 -1
- package/dist-embed/chunks/{lt-LT-XHIRWOB4-2v6r2YYq.js → lt-LT-XHIRWOB4-BQW2k7iv.js} +1 -1
- package/dist-embed/chunks/{lv-LV-5QDEKY6T-DVGd68q4.js → lv-LV-5QDEKY6T-B0HRRCC4.js} +1 -1
- package/dist-embed/chunks/{mermaid.core-BU1Nkb56.js → mermaid.core-B9dEBs01.js} +4 -4
- package/dist-embed/chunks/{mermaid.core-DY5DKOtx.js → mermaid.core-pflA3DMC.js} +2 -2
- package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-sSfUfKt8.js → mindmap-definition-YA3MSWOX-DwLQYAqQ.js} +1 -1
- package/dist-embed/chunks/{mindmap-definition-e4c1d938-btrk6STt.js → mindmap-definition-e4c1d938-CDWIPlcb.js} +1 -1
- package/dist-embed/chunks/{mr-IN-CRQNXWMA-D1q8zjMr.js → mr-IN-CRQNXWMA-DXR6sWSH.js} +1 -1
- package/dist-embed/chunks/{my-MM-5M5IBNSE-CCWuEpIN.js → my-MM-5M5IBNSE-BZ5_9oCm.js} +1 -1
- package/dist-embed/chunks/{nb-NO-T6EIAALU-eJ92wx2h.js → nb-NO-T6EIAALU-CBtv36wZ.js} +1 -1
- package/dist-embed/chunks/{nl-NL-IS3SIHDZ-DmkMgsvp.js → nl-NL-IS3SIHDZ-CcqE3cY8.js} +1 -1
- package/dist-embed/chunks/{nn-NO-6E72VCQL-CWYEaXBn.js → nn-NO-6E72VCQL-Cl9wPgpU.js} +1 -1
- package/dist-embed/chunks/{oc-FR-POXYY2M6-CayriaEZ.js → oc-FR-POXYY2M6-CQEkV2p1.js} +1 -1
- package/dist-embed/chunks/{pa-IN-N4M65BXN-CydiKcR8.js → pa-IN-N4M65BXN-CaE6yG0U.js} +1 -1
- package/dist-embed/chunks/{pegDiagram-XKGWAZYB--dcG-x2B.js → pegDiagram-XKGWAZYB-Cwo6HzRh.js} +1 -1
- package/dist-embed/chunks/{percentages-BXMCSKIN-fzYCDL7m.js → percentages-BXMCSKIN-Bk5xifLL.js} +3 -3
- package/dist-embed/chunks/{pieDiagram-E7YTZNPT-D-uncTun.js → pieDiagram-E7YTZNPT-BvBHesgq.js} +1 -1
- package/dist-embed/chunks/{pieDiagram-c941bede-BoVaJIdw.js → pieDiagram-c941bede-Bsn1Bxk5.js} +1 -1
- package/dist-embed/chunks/{pl-PL-T2D74RX3-DhiK4YSC.js → pl-PL-T2D74RX3-M1pQcF2j.js} +1 -1
- package/dist-embed/chunks/{pt-BR-5N22H2LF-CwSVxIqs.js → pt-BR-5N22H2LF-BFDHu72z.js} +1 -1
- package/dist-embed/chunks/{pt-PT-UZXXM6DQ-BnxquNJT.js → pt-PT-UZXXM6DQ-DFcZY1Gz.js} +1 -1
- package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-ClE_bWPS.js → quadrantDiagram-AXDQQJYC-AaQ_WgXa.js} +1 -1
- package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-V_e2KgDu.js → quadrantDiagram-cf8b8fe0-BhaNj-gz.js} +1 -1
- package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-CkhmY0tS.js → railroadDiagram-O6MQD6OU-BlWFu3pn.js} +1 -1
- package/dist-embed/chunks/{renderer-BwlsmtXF.js → renderer-Dy4lZ1KZ.js} +1 -1
- package/dist-embed/chunks/{requirementDiagram-53bda41b-BZw7Ipej.js → requirementDiagram-53bda41b-C2WctYyl.js} +1 -1
- package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-BXwXUXrr.js → requirementDiagram-BXWQKSXE-BpWNFdrw.js} +1 -1
- package/dist-embed/chunks/{ro-RO-JPDTUUEW-D3G2f_fQ.js → ro-RO-JPDTUUEW-BGm_Xwik.js} +1 -1
- package/dist-embed/chunks/{ru-RU-B4JR7IUQ-SnVfNwaW.js → ru-RU-B4JR7IUQ-BsrZ_x8p.js} +1 -1
- package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-0B_Kvjm2.js → sankeyDiagram-P5KCCOFB-DnT5kYW5.js} +1 -1
- package/dist-embed/chunks/{sankeyDiagram-c3ef121a-e1QLivkZ.js → sankeyDiagram-c3ef121a-3FD4GIJS.js} +1 -1
- package/dist-embed/chunks/{sequenceDiagram-82a5b84f-N-16oABv.js → sequenceDiagram-82a5b84f-CZQmoHAd.js} +1 -1
- package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-CtbkJYCv.js → sequenceDiagram-WJ2MYXX4-0HHgJN0L.js} +1 -1
- package/dist-embed/chunks/{sessions-C9DBCyZI.js → sessions-BRALW9Yv.js} +1 -1
- package/dist-embed/chunks/{si-LK-N5RQ5JYF-Da7Bfexz.js → si-LK-N5RQ5JYF-BfaYS44g.js} +1 -1
- package/dist-embed/chunks/{sizeCapture-INFHLROL-B3xt8UaI.js → sizeCapture-INFHLROL-CIF2j9e_.js} +1 -1
- package/dist-embed/chunks/{sk-SK-C5VTKIMK-BB-Ks1b-.js → sk-SK-C5VTKIMK-D-K9yMTN.js} +1 -1
- package/dist-embed/chunks/{sl-SI-NN7IZMDC-DF3fUKHX.js → sl-SI-NN7IZMDC-B48XvZUw.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-43e79a5f-BJcJNr41.js → stateDiagram-43e79a5f-CMlUXY1x.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-D77RDMKH-LjWP-fRB.js → stateDiagram-D77RDMKH-CkICPC-C.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-DTEruWg2.js → stateDiagram-v2-2041ed4f-BcO6vvJA.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-_xCQcvgo.js → stateDiagram-v2-MP3YSRHH-BFlXwfgz.js} +1 -1
- package/dist-embed/chunks/{styles-455b33cd-OIhmfs6N.js → styles-455b33cd-BfyZJvzN.js} +1 -1
- package/dist-embed/chunks/{styles-f932cba9-CwLjreIv.js → styles-f932cba9-k2wfF-9Q.js} +1 -1
- package/dist-embed/chunks/{styles-fcc2142b-DP74dQpR.js → styles-fcc2142b-z3csTkbW.js} +1 -1
- package/dist-embed/chunks/{subset-shared.chunk-Cf9zgTA9.js → subset-shared.chunk-DzA7mJjZ.js} +1 -1
- package/dist-embed/chunks/{subset-worker.chunk-WYW3AHku.js → subset-worker.chunk-CsTEdHAt.js} +1 -1
- package/dist-embed/chunks/{sv-SE-XGPEYMSR-CeR-pJHy.js → sv-SE-XGPEYMSR-DfhLO_Vt.js} +1 -1
- package/dist-embed/chunks/{svgDrawCommon-148a3cd9-CgE5QJIv.js → svgDrawCommon-148a3cd9-NqUFgQ9x.js} +1 -1
- package/dist-embed/chunks/{swimlanes-42K2YHIH-CZyflHYJ.js → swimlanes-42K2YHIH-B6pxWv6a.js} +1 -1
- package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-Bmr6N4fj.js → swimlanesDiagram-VR7AAH4N-B9ThT6OH.js} +1 -1
- package/dist-embed/chunks/{ta-IN-2NMHFXQM-lmsodGuU.js → ta-IN-2NMHFXQM-EZA_oxSt.js} +1 -1
- package/dist-embed/chunks/{th-TH-HPSO5L25-DQCWr96I.js → th-TH-HPSO5L25-G9vy_zQH.js} +1 -1
- package/dist-embed/chunks/{timeline-definition-24CTP7MA-DqY5EM6p.js → timeline-definition-24CTP7MA-DVcslyxd.js} +1 -1
- package/dist-embed/chunks/{timeline-definition-7545f45a-B8wMEyZY.js → timeline-definition-7545f45a-IhzNtIcW.js} +1 -1
- package/dist-embed/chunks/{tr-TR-DEFEU3FU-CqnvlGZW.js → tr-TR-DEFEU3FU-DBj_G5CD.js} +1 -1
- package/dist-embed/chunks/{uk-UA-QMV73CPH-DdWFjbHe.js → uk-UA-QMV73CPH-DN7lMu5H.js} +1 -1
- package/dist-embed/chunks/{vennDiagram-4TSXK5OY-63-O_xI8.js → vennDiagram-4TSXK5OY-KKysbuVs.js} +1 -1
- package/dist-embed/chunks/{vi-VN-M7AON7JQ-CydTT0Fi.js → vi-VN-M7AON7JQ-LoT02qgd.js} +1 -1
- package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-C9vLUvHf.js → wardleyDiagram-VM6X3IG4-CTed9ps7.js} +1 -1
- package/dist-embed/chunks/{xychartDiagram-3f383b91-BfoQg8n9.js → xychartDiagram-3f383b91-CsxcWMT8.js} +1 -1
- package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-BZr3T3n_.js → xychartDiagram-S5SC5T6Z-Kpqryflz.js} +1 -1
- package/dist-embed/chunks/{zh-CN-LNUGB5OW-DEn1TFfK.js → zh-CN-LNUGB5OW-CjexwOqT.js} +1 -1
- package/dist-embed/chunks/{zh-HK-E62DVLB3-DJQRmOHH.js → zh-HK-E62DVLB3-B0ys_HV6.js} +1 -1
- package/dist-embed/chunks/{zh-TW-RAJ6MFWO-B7s9vmSf.js → zh-TW-RAJ6MFWO-tQJWLJuU.js} +1 -1
- package/dist-embed/datalayer-app-main.js +19 -19
- package/lib/apps/apps/records.d.ts +0 -29
- package/lib/apps/apps/records.js +11 -34
- package/lib/apps/apps/threads.d.ts +2 -21
- package/lib/apps/apps/threads.js +0 -75
- package/lib/apps/embed/embedSession.d.ts +0 -8
- package/lib/apps/embed/embedSession.js +1 -38
- package/lib/apps/embed/visitorApp.d.ts +22 -3
- package/lib/apps/embed/visitorApp.js +42 -4
- package/lib/apps/plugins/chat/ChatView.js +2 -1
- package/lib/chat/base/ChatBase.js +1 -1
- package/lib/chat/base/fullContextMessages.js +1 -1
- package/lib/hooks/useAgUi.js +1 -1
- package/lib/hooks/useToolApprovals.d.ts +1 -1
- package/lib/hooks/useToolApprovals.js +1 -1
- package/lib/{protocols → portable}/agUiRefusal.d.ts +1 -1
- package/lib/{protocols → portable}/agUiRefusal.js +1 -1
- package/lib/portable/agui.d.ts +72 -0
- package/lib/portable/agui.js +174 -0
- package/lib/portable/conversation.d.ts +124 -0
- package/lib/portable/conversation.js +357 -0
- package/lib/portable/index.d.ts +11 -6
- package/lib/portable/index.js +14 -11
- package/lib/portable/records.d.ts +27 -0
- package/lib/portable/records.js +46 -0
- package/lib/portable/sessions.d.ts +92 -0
- package/lib/portable/sessions.js +134 -0
- package/lib/portable/thread.d.ts +41 -0
- package/lib/portable/thread.js +102 -0
- package/lib/protocols/AGUIAdapter.d.ts +0 -2
- package/lib/protocols/AGUIAdapter.js +39 -74
- package/package.json +1 -1
- package/dist-embed/chunks/ChatView-fHb_i4kH.js +0 -32
- package/dist-embed/chunks/index-DpJpQnPn.js +0 -34
- /package/lib/{utils → portable}/approvals.d.ts +0 -0
- /package/lib/{utils → portable}/approvals.js +0 -0
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The record of an application (LOOP R-07), as ai-agents keeps it: what it
|
|
3
|
-
* did, session by session, written by the runtime it ran on — read here for
|
|
4
|
-
* its activity feed (R-01b, R-15): the sessions, newest first, and what each
|
|
5
|
-
* one did, step by step.
|
|
6
|
-
*
|
|
7
|
-
* Pure but for `fetch`: no React.
|
|
8
|
-
*
|
|
9
|
-
* @module apps/apps/records
|
|
10
|
-
*/
|
|
11
1
|
/** What a record entry is. */
|
|
12
2
|
export type RecordKind = 'session' | 'tool_call' | 'decision' | 'check' | 'approval' | 'output' | 'feedback'
|
|
13
3
|
/** A turn of a conversation: what was asked, what it answered. */
|
|
@@ -38,29 +28,10 @@ export type RecordsContext = {
|
|
|
38
28
|
export declare const RECORD_KIND_WORDS: Record<RecordKind, string>;
|
|
39
29
|
/** An entry as ai-agents answers with it. */
|
|
40
30
|
export declare function entryOf(raw: Record<string, unknown>): RecordEntry;
|
|
41
|
-
/**
|
|
42
|
-
* How a run ended, in the `output` entry every run ends with, kept whatever
|
|
43
|
-
* the application's `record.include` says (PAP_DATALAYER R-01): its words
|
|
44
|
-
* only when it keeps `outputs`.
|
|
45
|
-
*/
|
|
46
|
-
export declare const RUN_END_WORDS: Record<string, string>;
|
|
47
31
|
/** How the run an entry ends ended: `answered`, `stopped`, `gone`; `''` for any other entry. */
|
|
48
32
|
export declare function runEndOf(entry: RecordEntry): string;
|
|
49
33
|
/** An entry in words: its summary, or how its run ended when its words are not kept. */
|
|
50
34
|
export declare function entrySaid(entry: RecordEntry): string;
|
|
51
|
-
/**
|
|
52
|
-
* The mark around what the runtime tells an application of a turn a personal
|
|
53
|
-
* agent asked over PAP or PACT, before the request (`asked_for_said`,
|
|
54
|
-
* `ASKED_FOR_TAG` in agent_runtimes.loop.apps.pap_company).
|
|
55
|
-
*/
|
|
56
|
-
export declare const ASKED_FOR_TAG = "asked-for";
|
|
57
|
-
/**
|
|
58
|
-
* What a person asked, as they are shown it: without what the runtime told
|
|
59
|
-
* the application before their words (PAP_DATALAYER, decided 2026-10-14).
|
|
60
|
-
* The record keeps it for the application's builder; the person never wrote
|
|
61
|
-
* it, so *Your conversations* and a thread opened again leave it out.
|
|
62
|
-
*/
|
|
63
|
-
export declare function askedOf(text: string): string;
|
|
64
35
|
/** A session in a sentence: how many calls, what stopped it, how it ended. */
|
|
65
36
|
export declare function sessionSentence(entries: readonly RecordEntry[]): string;
|
|
66
37
|
/**
|
package/lib/apps/apps/records.js
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
3
|
* Distributed under the terms of the Modified BSD License.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* The record of an application (LOOP R-07), as ai-agents keeps it: what it
|
|
7
|
+
* did, session by session, written by the runtime it ran on — read here for
|
|
8
|
+
* its activity feed (R-01b, R-15): the sessions, newest first, and what each
|
|
9
|
+
* one did, step by step.
|
|
10
|
+
*
|
|
11
|
+
* Pure but for `fetch`: no React.
|
|
12
|
+
*
|
|
13
|
+
* @module apps/apps/records
|
|
14
|
+
*/
|
|
15
|
+
import { RUN_END_WORDS } from '../../portable/records';
|
|
5
16
|
/** Each kind in a word, as the feed labels it. */
|
|
6
17
|
export const RECORD_KIND_WORDS = {
|
|
7
18
|
session: 'Session',
|
|
@@ -30,16 +41,6 @@ export function entryOf(raw) {
|
|
|
30
41
|
createdAt: String(raw.created_at ?? ''),
|
|
31
42
|
};
|
|
32
43
|
}
|
|
33
|
-
/**
|
|
34
|
-
* How a run ended, in the `output` entry every run ends with, kept whatever
|
|
35
|
-
* the application's `record.include` says (PAP_DATALAYER R-01): its words
|
|
36
|
-
* only when it keeps `outputs`.
|
|
37
|
-
*/
|
|
38
|
-
export const RUN_END_WORDS = {
|
|
39
|
-
answered: 'Answered',
|
|
40
|
-
stopped: 'Stopped',
|
|
41
|
-
gone: 'Its client went before the answer',
|
|
42
|
-
};
|
|
43
44
|
/** How the run an entry ends ended: `answered`, `stopped`, `gone`; `''` for any other entry. */
|
|
44
45
|
export function runEndOf(entry) {
|
|
45
46
|
const status = entry.kind === 'output' ? entry.payload.status : undefined;
|
|
@@ -49,30 +50,6 @@ export function runEndOf(entry) {
|
|
|
49
50
|
export function entrySaid(entry) {
|
|
50
51
|
return entry.summary || RUN_END_WORDS[runEndOf(entry)] || '';
|
|
51
52
|
}
|
|
52
|
-
/**
|
|
53
|
-
* The mark around what the runtime tells an application of a turn a personal
|
|
54
|
-
* agent asked over PAP or PACT, before the request (`asked_for_said`,
|
|
55
|
-
* `ASKED_FOR_TAG` in agent_runtimes.loop.apps.pap_company).
|
|
56
|
-
*/
|
|
57
|
-
export const ASKED_FOR_TAG = 'asked-for';
|
|
58
|
-
/**
|
|
59
|
-
* What a person asked, as they are shown it: without what the runtime told
|
|
60
|
-
* the application before their words (PAP_DATALAYER, decided 2026-10-14).
|
|
61
|
-
* The record keeps it for the application's builder; the person never wrote
|
|
62
|
-
* it, so *Your conversations* and a thread opened again leave it out.
|
|
63
|
-
*/
|
|
64
|
-
export function askedOf(text) {
|
|
65
|
-
const open = `<${ASKED_FOR_TAG}>`;
|
|
66
|
-
const close = `</${ASKED_FOR_TAG}>`;
|
|
67
|
-
if (!text.startsWith(open)) {
|
|
68
|
-
return text;
|
|
69
|
-
}
|
|
70
|
-
const end = text.indexOf(close);
|
|
71
|
-
if (end < 0) {
|
|
72
|
-
throw new Error(`What was asked opens <${ASKED_FOR_TAG}> and never closes it.`);
|
|
73
|
-
}
|
|
74
|
-
return text.slice(end + close.length).trimStart();
|
|
75
|
-
}
|
|
76
53
|
/** A session in a sentence: how many calls, what stopped it, how it ended. */
|
|
77
54
|
export function sessionSentence(entries) {
|
|
78
55
|
const calls = entries.filter(entry => entry.kind === 'tool_call').length;
|
|
@@ -9,17 +9,12 @@
|
|
|
9
9
|
* stream's `MESSAGES_SNAPSHOT` says what it holds — and the chat draws it
|
|
10
10
|
* and goes on with it on the same thread.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
12
|
+
* Opening it is `openThread` (`portable/thread`), as every client opens one;
|
|
13
|
+
* here is what a deployment's chat decides of the thread it opens on.
|
|
13
14
|
*
|
|
14
15
|
* @module apps/apps/threads
|
|
15
16
|
*/
|
|
16
17
|
import type { ResumedThread } from '../../types/chat';
|
|
17
|
-
import type { ChatMessage } from '../../types/messages';
|
|
18
|
-
/** What opening a thread says, in a person's words. */
|
|
19
|
-
export declare const THREAD_WORDS: {
|
|
20
|
-
readonly opening: "Opening your conversation…";
|
|
21
|
-
readonly notOpened: (detail: string) => string;
|
|
22
|
-
};
|
|
23
18
|
/**
|
|
24
19
|
* The deployment an application's agent is created for, as its create
|
|
25
20
|
* payload names it (`app_instance.deployment_uid`, `appDatalayerCreatePayload`),
|
|
@@ -39,17 +34,3 @@ export declare function deploymentOfPayload(createPayload: Record<string, unknow
|
|
|
39
34
|
* no deployment, keeps what it was given.
|
|
40
35
|
*/
|
|
41
36
|
export declare function threadOfVisit(given: ResumedThread | undefined, deploymentUid: string, id: string): ResumedThread | undefined;
|
|
42
|
-
/** The AG-UI messages a session-API stream's `MESSAGES_SNAPSHOT` carries, if one does. */
|
|
43
|
-
export declare function snapshotOfStream(text: string): unknown[] | undefined;
|
|
44
|
-
/**
|
|
45
|
-
* A thread's conversation, read from the runtime its application runs on:
|
|
46
|
-
* held there, or resumed from its record. Throws the runtime's sentence when
|
|
47
|
-
* neither answers.
|
|
48
|
-
*/
|
|
49
|
-
export declare function openThread({ agentBaseUrl, agentId, uid, token, fetcher, }: {
|
|
50
|
-
agentBaseUrl: string;
|
|
51
|
-
agentId: string;
|
|
52
|
-
uid: string;
|
|
53
|
-
token?: string | null;
|
|
54
|
-
fetcher?: typeof fetch;
|
|
55
|
-
}): Promise<ChatMessage[]>;
|
package/lib/apps/apps/threads.js
CHANGED
|
@@ -2,12 +2,6 @@
|
|
|
2
2
|
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
3
|
* Distributed under the terms of the Modified BSD License.
|
|
4
4
|
*/
|
|
5
|
-
import { messagesOfThread } from '../embed/embedSession';
|
|
6
|
-
/** What opening a thread says, in a person's words. */
|
|
7
|
-
export const THREAD_WORDS = {
|
|
8
|
-
opening: 'Opening your conversation…',
|
|
9
|
-
notOpened: (detail) => `Your conversation could not be opened, so this is a new one: ${detail}`,
|
|
10
|
-
};
|
|
11
5
|
/**
|
|
12
6
|
* The deployment an application's agent is created for, as its create
|
|
13
7
|
* payload names it (`app_instance.deployment_uid`, `appDatalayerCreatePayload`),
|
|
@@ -39,72 +33,3 @@ export function threadOfVisit(given, deploymentUid, id) {
|
|
|
39
33
|
}
|
|
40
34
|
return { id, messages: [] };
|
|
41
35
|
}
|
|
42
|
-
/** The AG-UI messages a session-API stream's `MESSAGES_SNAPSHOT` carries, if one does. */
|
|
43
|
-
export function snapshotOfStream(text) {
|
|
44
|
-
let found;
|
|
45
|
-
for (const block of text.split(/\r?\n\r?\n/)) {
|
|
46
|
-
const data = block
|
|
47
|
-
.split(/\r?\n/)
|
|
48
|
-
.filter(line => line.startsWith('data:'))
|
|
49
|
-
.map(line => line.slice('data:'.length).trim())
|
|
50
|
-
.join('');
|
|
51
|
-
if (!data) {
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
try {
|
|
55
|
-
const event = JSON.parse(data);
|
|
56
|
-
if (event.type === 'MESSAGES_SNAPSHOT' && Array.isArray(event.messages)) {
|
|
57
|
-
found = event.messages;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
// Not an event: skipped.
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return found;
|
|
65
|
-
}
|
|
66
|
-
async function detailOf(response) {
|
|
67
|
-
try {
|
|
68
|
-
const body = (await response.json());
|
|
69
|
-
if (typeof body.detail === 'string' && body.detail) {
|
|
70
|
-
return body.detail;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// No sentence: the status says it.
|
|
75
|
-
}
|
|
76
|
-
return `${response.status}`;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* A thread's conversation, read from the runtime its application runs on:
|
|
80
|
-
* held there, or resumed from its record. Throws the runtime's sentence when
|
|
81
|
-
* neither answers.
|
|
82
|
-
*/
|
|
83
|
-
export async function openThread({ agentBaseUrl, agentId, uid, token, fetcher = fetch, }) {
|
|
84
|
-
const base = `${agentBaseUrl.replace(/\/+$/, '')}/api/v1/apps/sessions/${encodeURIComponent(uid)}`;
|
|
85
|
-
const authorization = token
|
|
86
|
-
? { Authorization: `Bearer ${token}` }
|
|
87
|
-
: {};
|
|
88
|
-
const held = await fetcher(`${base}/messages`, { headers: authorization });
|
|
89
|
-
if (held.ok) {
|
|
90
|
-
const body = (await held.json());
|
|
91
|
-
return messagesOfThread(body.messages);
|
|
92
|
-
}
|
|
93
|
-
if (held.status !== 404) {
|
|
94
|
-
throw new Error(await detailOf(held));
|
|
95
|
-
}
|
|
96
|
-
// Not held here: resumed from its record, under the same uid.
|
|
97
|
-
const resumed = await fetcher(`${base}/resume`, {
|
|
98
|
-
method: 'POST',
|
|
99
|
-
headers: { 'Content-Type': 'application/json', ...authorization },
|
|
100
|
-
body: JSON.stringify({ agent: agentId }),
|
|
101
|
-
});
|
|
102
|
-
if (!resumed.ok) {
|
|
103
|
-
throw new Error(await detailOf(resumed));
|
|
104
|
-
}
|
|
105
|
-
const snapshot = snapshotOfStream(await resumed.text());
|
|
106
|
-
if (!snapshot) {
|
|
107
|
-
throw new Error(`The runtime said nothing of session ${uid}.`);
|
|
108
|
-
}
|
|
109
|
-
return messagesOfThread(snapshot);
|
|
110
|
-
}
|
|
@@ -48,14 +48,6 @@ export declare function sessionKeeper({ persist, storage, }: {
|
|
|
48
48
|
}): SessionKeeper;
|
|
49
49
|
/** Forget what this page holds in memory (a test). */
|
|
50
50
|
export declare function forgetSessionsInMemory(): void;
|
|
51
|
-
/**
|
|
52
|
-
* A session's conversation as the chat draws it, from the AG-UI messages
|
|
53
|
-
* the runtime says (`GET …/sessions/{uid}/messages`): what was said and
|
|
54
|
-
* answered, in words. What its messages showed comes on the conversation's
|
|
55
|
-
* ui socket once the chat opens it (REACTOR_UI RU-W), never here: a
|
|
56
|
-
* `reactor.ui` activity in a thread is refused.
|
|
57
|
-
*/
|
|
58
|
-
export declare function messagesOfThread(messages: unknown): ChatMessage[];
|
|
59
51
|
/** What asking for a kept session found. */
|
|
60
52
|
export type Reattached = {
|
|
61
53
|
kind: 'resumed';
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
* Distributed under the terms of the Modified BSD License.
|
|
4
4
|
*/
|
|
5
5
|
import { windowTurnErrorOf } from '../../chat/base/loopWindow';
|
|
6
|
-
import {
|
|
7
|
-
import { askedOf } from '../apps/records';
|
|
6
|
+
import { messagesOfThread } from '../../portable/thread';
|
|
8
7
|
/** Where a visit's session is kept in the host's storage: `<prefix>:<app>:<visit>`. */
|
|
9
8
|
export const EMBED_SESSION_KEY_PREFIX = 'datalayer-app:session';
|
|
10
9
|
/**
|
|
@@ -92,42 +91,6 @@ export function sessionKeeper({ persist, storage = hostStorage, }) {
|
|
|
92
91
|
export function forgetSessionsInMemory() {
|
|
93
92
|
IN_MEMORY.clear();
|
|
94
93
|
}
|
|
95
|
-
/**
|
|
96
|
-
* A session's conversation as the chat draws it, from the AG-UI messages
|
|
97
|
-
* the runtime says (`GET …/sessions/{uid}/messages`): what was said and
|
|
98
|
-
* answered, in words. What its messages showed comes on the conversation's
|
|
99
|
-
* ui socket once the chat opens it (REACTOR_UI RU-W), never here: a
|
|
100
|
-
* `reactor.ui` activity in a thread is refused.
|
|
101
|
-
*/
|
|
102
|
-
export function messagesOfThread(messages) {
|
|
103
|
-
if (!Array.isArray(messages)) {
|
|
104
|
-
return [];
|
|
105
|
-
}
|
|
106
|
-
const drawn = [];
|
|
107
|
-
for (const message of messages) {
|
|
108
|
-
if (!message || typeof message !== 'object') {
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
const { id, role, content, activityType } = message;
|
|
112
|
-
if (role === 'activity' && activityType === AGUI_NAME) {
|
|
113
|
-
throw new Error(`Activity ${String(id)}: what a message showed comes on the ui socket (REACTOR_UI RU-W)`);
|
|
114
|
-
}
|
|
115
|
-
if ((role === 'user' || role === 'assistant') &&
|
|
116
|
-
typeof id === 'string' &&
|
|
117
|
-
typeof content === 'string' &&
|
|
118
|
-
content.trim()) {
|
|
119
|
-
// A turn a personal agent asked: what the runtime told the application
|
|
120
|
-
// before the person's words is never shown to them (decided 2026-10-14).
|
|
121
|
-
drawn.push({
|
|
122
|
-
id,
|
|
123
|
-
role,
|
|
124
|
-
content: role === 'user' ? askedOf(content) : content,
|
|
125
|
-
createdAt: new Date(),
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return drawn;
|
|
130
|
-
}
|
|
131
94
|
/**
|
|
132
95
|
* Ask the server that runs the application for a session's conversation,
|
|
133
96
|
* with the visit's token. Anything but an answer — a session the runtime
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
* `GET /apps/deployments/at/<slug>` without a token says what its page is
|
|
14
14
|
* drawn from — the Appspec of the version it runs — and whether somebody
|
|
15
15
|
* signed out may talk to it (`session.opens`); the visitors' runtime
|
|
16
|
-
* answers `at:<slug>`, making the address's agent when first talked to
|
|
16
|
+
* answers `at:<slug>`, making the address's agent when first talked to —
|
|
17
|
+
* or, for a version with code of its own (`runs_code`), the runtime its
|
|
18
|
+
* deployment is kept on (`kept.url`), which runs that code;
|
|
17
19
|
* - **a decision**, named by its id (`01M…`): framed from Datalayer's run
|
|
18
20
|
* page, as before.
|
|
19
21
|
*
|
|
@@ -62,8 +64,12 @@ export type VisitorApp =
|
|
|
62
64
|
kind: 'said';
|
|
63
65
|
text: string;
|
|
64
66
|
};
|
|
65
|
-
/**
|
|
66
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Where a visitor's conversation with `app` runs: the visitors' runtime beside
|
|
69
|
+
* ai-agents — or `runtime`, the one a deployment with code of its own is
|
|
70
|
+
* kept on (R-30) — its token from ai-inference.
|
|
71
|
+
*/
|
|
72
|
+
export declare function visitorsAt(api: string, app: string, runtime?: string): DatalayerVisitors;
|
|
67
73
|
/** What an embed without a token is told it takes. */
|
|
68
74
|
export declare const TOKEN_HINT = "Embedded for a visitor it refuses, it takes its embed token (the \"token\" attribute).";
|
|
69
75
|
/** The sentence for an example the visitors' runtime does not keep. */
|
|
@@ -85,3 +91,16 @@ export declare function readVisitorApp({ api, app, fetcher, catalogue, }: {
|
|
|
85
91
|
fetcher?: typeof fetch;
|
|
86
92
|
catalogue?: (ref: string) => AppSpec | undefined;
|
|
87
93
|
}): Promise<VisitorApp>;
|
|
94
|
+
/**
|
|
95
|
+
* Where somebody without an account talks to an address, as ai-agents says
|
|
96
|
+
* it (R-30, decided 14 October 2026): written as a spec, on the visitors'
|
|
97
|
+
* runtime (`url` unsaid); with code of its own (`runs_code`), on the runtime
|
|
98
|
+
* its deployment is kept on (`kept.url`), which runs that code — never the
|
|
99
|
+
* visitors', where its plain agent would answer in its code's place. An
|
|
100
|
+
* answer that does not say, or says code with no runtime, is not run.
|
|
101
|
+
*/
|
|
102
|
+
export declare function signedOutRuntime(body: Record<string, unknown>): {
|
|
103
|
+
url?: string;
|
|
104
|
+
} | {
|
|
105
|
+
said: string;
|
|
106
|
+
};
|
|
@@ -20,10 +20,18 @@ export const DEFAULT_API = 'https://prod1.datalayer.run';
|
|
|
20
20
|
export const isAppUid = (value) => /^[0-9A-HJKMNP-TV-Z]{26}$/.test(value);
|
|
21
21
|
/** An address, as ai-agents spells one. */
|
|
22
22
|
const SLUG = /^[a-z0-9][a-z0-9-]{0,62}$/;
|
|
23
|
-
/**
|
|
24
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Where a visitor's conversation with `app` runs: the visitors' runtime beside
|
|
25
|
+
* ai-agents — or `runtime`, the one a deployment with code of its own is
|
|
26
|
+
* kept on (R-30) — its token from ai-inference.
|
|
27
|
+
*/
|
|
28
|
+
export function visitorsAt(api, app, runtime) {
|
|
25
29
|
const base = api.replace(/\/+$/, '');
|
|
26
|
-
return {
|
|
30
|
+
return {
|
|
31
|
+
url: runtime ? runtime.replace(/\/+$/, '') : `${base}${VISITORS_PATH}`,
|
|
32
|
+
app,
|
|
33
|
+
inferenceUrl: base,
|
|
34
|
+
};
|
|
27
35
|
}
|
|
28
36
|
/** What an embed without a token is told it takes. */
|
|
29
37
|
export const TOKEN_HINT = 'Embedded for a visitor it refuses, it takes its embed token (the "token" attribute).';
|
|
@@ -95,9 +103,39 @@ export async function readVisitorApp({ api = DEFAULT_API, app, fetcher = fetch,
|
|
|
95
103
|
const name = typeof deployment.app_name === 'string' && deployment.app_name
|
|
96
104
|
? deployment.app_name
|
|
97
105
|
: parsed.app.name;
|
|
106
|
+
const runtime = signedOutRuntime(body);
|
|
107
|
+
if ('said' in runtime) {
|
|
108
|
+
return { kind: 'said', text: refusedSentence(runtime.said) };
|
|
109
|
+
}
|
|
98
110
|
return {
|
|
99
111
|
kind: 'visitors',
|
|
100
112
|
app: runnable({ app: { ...parsed.app, name }, problems: parsed.problems }),
|
|
101
|
-
visitors: visitorsAt(api, `${AT_PREFIX}${named}
|
|
113
|
+
visitors: visitorsAt(api, `${AT_PREFIX}${named}`, runtime.url),
|
|
102
114
|
};
|
|
103
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Where somebody without an account talks to an address, as ai-agents says
|
|
118
|
+
* it (R-30, decided 14 October 2026): written as a spec, on the visitors'
|
|
119
|
+
* runtime (`url` unsaid); with code of its own (`runs_code`), on the runtime
|
|
120
|
+
* its deployment is kept on (`kept.url`), which runs that code — never the
|
|
121
|
+
* visitors', where its plain agent would answer in its code's place. An
|
|
122
|
+
* answer that does not say, or says code with no runtime, is not run.
|
|
123
|
+
*/
|
|
124
|
+
export function signedOutRuntime(body) {
|
|
125
|
+
if (typeof body.runs_code !== 'boolean') {
|
|
126
|
+
return {
|
|
127
|
+
said: 'Datalayer did not say whether it runs code of its own, so it is not run.',
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (!body.runs_code) {
|
|
131
|
+
return {};
|
|
132
|
+
}
|
|
133
|
+
const kept = (body.kept ?? {});
|
|
134
|
+
const url = typeof kept.url === 'string' ? kept.url.trim() : '';
|
|
135
|
+
if (!url) {
|
|
136
|
+
return {
|
|
137
|
+
said: 'It runs its own code on a runtime kept for it, and none is running now.',
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return { url };
|
|
141
|
+
}
|
|
@@ -49,7 +49,8 @@ import { isInactiveSurfaceContribution, orderToolContributions, toolsForChatView
|
|
|
49
49
|
import { agentBundleToolDefinitions, useAgentCommandTools, } from '../../../tools/adapters/commands';
|
|
50
50
|
import { NONE_EDITOR, seedEditorChoice, setEditorOptions, } from '../shell/editorChoice';
|
|
51
51
|
import { generateMessageId } from '../../../types/messages';
|
|
52
|
-
import { deploymentOfPayload,
|
|
52
|
+
import { deploymentOfPayload, threadOfVisit } from '../../apps/threads';
|
|
53
|
+
import { openThread, THREAD_WORDS } from '../../../portable/thread';
|
|
53
54
|
import { FaceDrawing, PresenceFace, PresenceLine, } from '../../../chat/presence/Presence';
|
|
54
55
|
import { presenceState, presenceToolOf, } from '../../../chat/presence/presenceStatus';
|
|
55
56
|
import { latestSaying, newestIsAnswer, } from '../../../chat/assistant/state';
|
|
@@ -32,7 +32,7 @@ import { useCoreStore } from '@datalayer/core';
|
|
|
32
32
|
import { DEFAULT_SERVICE_URLS } from '@datalayer/core/lib/api/constants';
|
|
33
33
|
import { useChatStore } from '../../stores/chatStore';
|
|
34
34
|
import { useConversationStore } from '../../stores/conversationStore';
|
|
35
|
-
import { askedOf } from '../../
|
|
35
|
+
import { askedOf } from '../../portable/records';
|
|
36
36
|
import { extractChatMessagesFromFullContext } from './fullContextMessages';
|
|
37
37
|
import { generateMessageId, createUserMessage, createAssistantMessage, } from '../../types/messages';
|
|
38
38
|
import { AI_MODEL_CATALOGUE, DEFAULT_MODEL, isChatModel, } from '../../specs/models';
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* preamble the runtime told the application (`<asked-for>…</asked-for>`) is
|
|
13
13
|
* kept in the record for the builder and never shown to the person.
|
|
14
14
|
*/
|
|
15
|
-
import { askedOf } from '../../
|
|
15
|
+
import { askedOf } from '../../portable/records';
|
|
16
16
|
export function extractChatMessagesFromFullContext(fullContext) {
|
|
17
17
|
if (!fullContext) {
|
|
18
18
|
return [];
|
package/lib/hooks/useAgUi.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Distributed under the terms of the Modified BSD License.
|
|
4
4
|
*/
|
|
5
5
|
import { useCallback, useEffect, useState } from 'react';
|
|
6
|
-
import { agUiRefusal, refusalBody } from '../
|
|
6
|
+
import { agUiRefusal, refusalBody } from '../portable/agUiRefusal';
|
|
7
7
|
/**
|
|
8
8
|
* Hook to manage chat state with AG-UI protocol.
|
|
9
9
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ToolApprovalFilters } from '../types/tool-approvals';
|
|
2
|
-
import { type ApprovalRecord } from '../
|
|
2
|
+
import { type ApprovalRecord } from '../portable/approvals';
|
|
3
3
|
export type { ApprovalRecord };
|
|
4
4
|
interface ApprovalsQueryData {
|
|
5
5
|
approvals: ApprovalRecord[];
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
22
22
|
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
23
23
|
import { useAIAgentsWebSocket } from './useAIAgentsWebSocket';
|
|
24
|
-
import { normalizeApproval } from '../
|
|
24
|
+
import { normalizeApproval } from '../portable/approvals';
|
|
25
25
|
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
26
26
|
const APPROVALS_ROOT_KEY = ['tool-approvals'];
|
|
27
27
|
function matchesFilter(a, filters) {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* Pure, so the hook, the adapter and the tests read a refusal the same way
|
|
17
17
|
* (the repo's jest/vitest rule: rules live outside components).
|
|
18
18
|
*
|
|
19
|
-
* @module
|
|
19
|
+
* @module portable/agUiRefusal
|
|
20
20
|
*/
|
|
21
21
|
/** What the page says when an agent's AG-UI address answers nothing. */
|
|
22
22
|
export declare const AG_UI_NOT_ON_RUNTIME: string;
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* Pure, so the hook, the adapter and the tests read a refusal the same way
|
|
21
21
|
* (the repo's jest/vitest rule: rules live outside components).
|
|
22
22
|
*
|
|
23
|
-
* @module
|
|
23
|
+
* @module portable/agUiRefusal
|
|
24
24
|
*/
|
|
25
25
|
/** What the page says when an agent's AG-UI address answers nothing. */
|
|
26
26
|
export const AG_UI_NOT_ON_RUNTIME = 'This agent is not on the runtime the page is addressing: its AG-UI address answered nothing. ' +
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An AG-UI run stream as any JavaScript runtime reads it: the
|
|
3
|
+
* `text/event-stream` frames a run answers, read into AG-UI events, and how a
|
|
4
|
+
* run is known to have ended. The web chat's `AGUIAdapter` and Datalayer
|
|
5
|
+
* Mobile read a stream with these, so that a stream is read one way.
|
|
6
|
+
*
|
|
7
|
+
* No React, DOM, Node or Reactor module: a phone passes a `fetch` whose
|
|
8
|
+
* response body streams (Expo's `expo/fetch`).
|
|
9
|
+
*
|
|
10
|
+
* @module portable/agui
|
|
11
|
+
*/
|
|
12
|
+
/** One AG-UI event, as a run stream carries it (`type` first, its fields beside it). */
|
|
13
|
+
export type AgUiEvent = {
|
|
14
|
+
type: string;
|
|
15
|
+
[field: string]: unknown;
|
|
16
|
+
};
|
|
17
|
+
/** What the page says when a run's stream closes before the run said how it ended. */
|
|
18
|
+
export declare const RUN_CUT_SHORT = "The run stopped before it finished, without an answer or an error: send it again.";
|
|
19
|
+
/**
|
|
20
|
+
* The name of `reactor.ui` (Reactor's `AGUI_NAME`): its ops come over the
|
|
21
|
+
* conversation's ui socket, never a run stream (REACTOR_UI RU-W). Held here
|
|
22
|
+
* so that a reader of a run needs no Reactor module; a test holds it to
|
|
23
|
+
* Reactor's.
|
|
24
|
+
*/
|
|
25
|
+
export declare const REACTOR_UI_NAME = "reactor.ui";
|
|
26
|
+
/** What the page says when a `reactor.ui` op comes on a run stream. */
|
|
27
|
+
export declare const UI_ON_RUN = "A reactor.ui op came on the run stream: it comes over the ui socket (REACTOR_UI RU-W).";
|
|
28
|
+
/** What is said when the `fetch` given cannot read a response as it streams. */
|
|
29
|
+
export declare const NOT_STREAMING = "This fetch does not stream a response: give one whose response body has getReader (expo/fetch on a phone).";
|
|
30
|
+
/** Whether an event ends a run: the run said how it ended. */
|
|
31
|
+
export declare const endsRun: (event: AgUiEvent) => boolean;
|
|
32
|
+
/**
|
|
33
|
+
* The `text/event-stream` of a run, read as it arrives: text in, one AG-UI
|
|
34
|
+
* event out per frame. A frame is its `data:` lines up to a blank line; a
|
|
35
|
+
* frame whose data is not JSON is handed to `malformed`, never guessed at.
|
|
36
|
+
*/
|
|
37
|
+
export declare class AgUiFrames {
|
|
38
|
+
private readonly malformed;
|
|
39
|
+
private buffer;
|
|
40
|
+
private data;
|
|
41
|
+
constructor(malformed?: (data: string) => void);
|
|
42
|
+
/** The events the text completes. */
|
|
43
|
+
push(text: string): AgUiEvent[];
|
|
44
|
+
/** The events left when the stream closes: a last frame without its blank line. */
|
|
45
|
+
end(): AgUiEvent[];
|
|
46
|
+
private line;
|
|
47
|
+
private dispatch;
|
|
48
|
+
}
|
|
49
|
+
/** Every event a complete stream's text holds: a stream already read whole. */
|
|
50
|
+
export declare function eventsOfStream(text: string): AgUiEvent[];
|
|
51
|
+
/**
|
|
52
|
+
* Read a run's stream to its end, each event handed to `onEvent` as it
|
|
53
|
+
* arrives. Throws `RUN_CUT_SHORT` when the stream closes before the run said
|
|
54
|
+
* how it ended, and `NOT_STREAMING` for a response that cannot be read as it
|
|
55
|
+
* streams. An abort ends the reading with the caller's `AbortError`.
|
|
56
|
+
*/
|
|
57
|
+
export declare function readRunStream(response: {
|
|
58
|
+
body?: unknown;
|
|
59
|
+
}, onEvent: (event: AgUiEvent) => void, malformed?: (data: string) => void): Promise<void>;
|
|
60
|
+
/** A tool's result as a run says it (`TOOL_CALL_RESULT`): what it gave, and whether it failed. */
|
|
61
|
+
export type ToolResultSaid = {
|
|
62
|
+
/** The result: its JSON read when it is JSON, else its text. */
|
|
63
|
+
result: unknown;
|
|
64
|
+
success: boolean;
|
|
65
|
+
error?: string;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* A tool result's content, read as the chat reads it: JSON when it is JSON,
|
|
69
|
+
* and failed when the execution result says so (`execution_ok: false`, a
|
|
70
|
+
* `code_error`, or an `error` without `success`).
|
|
71
|
+
*/
|
|
72
|
+
export declare function toolResultOf(content: unknown): ToolResultSaid;
|