@datalayer/agent-runtimes 1.5.17 → 1.5.19
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-CMBy5o1q.js → AgentDetails-jDVTZOUO.js} +1 -1
- package/dist-embed/chunks/{AgentDetailsDialog-D2vH2Nrd.js → AgentDetailsDialog-BLC4yhCo.js} +1 -1
- package/dist-embed/chunks/{AgentInspector-Bd0oHNAX.js → AgentInspector-DBI8tAJ0.js} +1 -1
- package/dist-embed/chunks/{AgentInspectorDialog-BJUgBPAE.js → AgentInspectorDialog-xW2BjxJT.js} +1 -1
- package/dist-embed/chunks/{CellSidebarExtension-CYOVwk1t.js → CellSidebarExtension-D4_DkfUV.js} +1 -1
- package/dist-embed/chunks/ChatView-CpY0werd.js +32 -0
- package/dist-embed/chunks/{ContextPie-B9mAKJc2.js → ContextPie-Cebjx8jR.js} +1 -1
- package/dist-embed/chunks/{DeckComponent-CbmzVWcF.js → DeckComponent-B0pIJhTp.js} +2 -2
- package/dist-embed/chunks/{DocumentView-BqsGfNys.js → DocumentView-CS_ILd4O.js} +1 -1
- package/dist-embed/chunks/{EphemeralDocument-DLaNvwm_.js → EphemeralDocument-CwauqhmY.js} +1 -1
- package/dist-embed/chunks/{EphemeralNotebook-jnqAJFPI.js → EphemeralNotebook-BgC-YEtX.js} +1 -1
- package/dist-embed/chunks/{ExcalidrawComponent-Cb8yeXqu.js → ExcalidrawComponent-jOeuq53P.js} +1 -1
- package/dist-embed/chunks/{ExcalidrawModal-DaPSGYek.js → ExcalidrawModal-RsJGL2o8.js} +1 -1
- package/dist-embed/chunks/{JupyterLexicalExtension-BQINjIFV.js → JupyterLexicalExtension-BgcLmrzO.js} +9 -9
- package/dist-embed/chunks/{KernelVariables-CGQkS5EX.js → KernelVariables-cBMhcW1H.js} +1 -1
- package/dist-embed/chunks/{LexicalToolRegistry-BJ6mpMWn.js → LexicalToolRegistry-0QBhZnFO.js} +1 -1
- package/dist-embed/chunks/{NotebookToolSurfaces-DiPifvaW.js → NotebookToolSurfaces-D1GnK3rj.js} +1 -1
- package/dist-embed/chunks/{NotebookView-IX0wNuX8.js → NotebookView-CC5s4q0A.js} +1 -1
- package/dist-embed/chunks/{Output-B9XAhyoF.js → Output-B4b0TC6x.js} +1 -1
- package/dist-embed/chunks/{SandboxDetailsDialog-COCpmo8m.js → SandboxDetailsDialog-DhH0cSRN.js} +1 -1
- package/dist-embed/chunks/{SchemaForm-WIwdKnrk.js → SchemaForm-CPiM13ub.js} +1 -1
- package/dist-embed/chunks/{WidgetVariableView-BoGROi-A.js → WidgetVariableView-CUqRH-Wi.js} +1 -1
- package/dist-embed/chunks/{YouTubePlugin-BEQBWMwx.js → YouTubePlugin-CGKNamMP.js} +1 -1
- package/dist-embed/chunks/{abnfDiagram-VCTEODGH-D3_T0Lze.js → abnfDiagram-VCTEODGH-DRoYJDMb.js} +1 -1
- package/dist-embed/chunks/{abnfDiagram-VCTEODGH-CG18Hf18.js → abnfDiagram-VCTEODGH-DqGkvvLU.js} +1 -1
- package/dist-embed/chunks/{ar-SA-G6X2FPQ2-BDWXsTdt.js → ar-SA-G6X2FPQ2-BdYlCgqh.js} +1 -1
- package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-B1QPAYO8.js → architectureDiagram-5GKGNRK7-B4WL7dDA.js} +1 -1
- package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-B5kSsKje.js → architectureDiagram-5GKGNRK7-BfuR2k3K.js} +1 -1
- package/dist-embed/chunks/{az-AZ-76LH7QW2-BGchGiT7.js → az-AZ-76LH7QW2-BAJSVApS.js} +1 -1
- package/dist-embed/chunks/{bg-BG-XCXSNQG7-vCII6Zuq.js → bg-BG-XCXSNQG7-CutR4A8o.js} +1 -1
- package/dist-embed/chunks/{blockDiagram-868be97b-BvM0ptp7.js → blockDiagram-868be97b-gX0yvAGO.js} +1 -1
- package/dist-embed/chunks/{blockDiagram-I7D4REHJ-ClwWG8yx.js → blockDiagram-I7D4REHJ-BzMuNIFV.js} +1 -1
- package/dist-embed/chunks/{blockDiagram-I7D4REHJ-B8BmxOM4.js → blockDiagram-I7D4REHJ-CI05Fmnw.js} +1 -1
- package/dist-embed/chunks/{bn-BD-2XOGV67Q-Beu9yUTu.js → bn-BD-2XOGV67Q-CjPnVerm.js} +1 -1
- package/dist-embed/chunks/{c4Diagram-3f4bdde3-S92W2yOx.js → c4Diagram-3f4bdde3-CWKvySqQ.js} +1 -1
- package/dist-embed/chunks/{c4Diagram-7LVT6UL2-CNWW_-u7.js → c4Diagram-7LVT6UL2-BVZdygZu.js} +1 -1
- package/dist-embed/chunks/{c4Diagram-7LVT6UL2-nSCKKLuX.js → c4Diagram-7LVT6UL2-BfaHhF7Y.js} +1 -1
- package/dist-embed/chunks/{ca-ES-6MX7JW3Y-CnEo6YQi.js → ca-ES-6MX7JW3Y-D0HWiwHb.js} +1 -1
- package/dist-embed/chunks/{celltoolbartracker-CO6V5FhH.js → celltoolbartracker-DB7Qnu48.js} +1 -1
- package/dist-embed/chunks/{chunk-2Q5K7J3B--r8j4N5L.js → chunk-2Q5K7J3B-Ck5gIh4V.js} +1 -1
- package/dist-embed/chunks/{chunk-2Q5K7J3B-D3fTIaw3.js → chunk-2Q5K7J3B-DEZpvDtA.js} +1 -1
- package/dist-embed/chunks/{chunk-5VM5RSS4-D76mXyWz.js → chunk-5VM5RSS4-BFWTcAj1.js} +1 -1
- package/dist-embed/chunks/{chunk-5VM5RSS4-QmrgOATO.js → chunk-5VM5RSS4-DVfmoMLA.js} +1 -1
- package/dist-embed/chunks/{chunk-F27PBJKO-DvNrStTM.js → chunk-F27PBJKO-BjmQwwGl.js} +1 -1
- package/dist-embed/chunks/{chunk-F27PBJKO-DdSgBnK0.js → chunk-F27PBJKO-wR8Z4fpP.js} +1 -1
- package/dist-embed/chunks/{chunk-IMKFNOWR-DpxND1Ct.js → chunk-IMKFNOWR-DnYdav9f.js} +1 -1
- package/dist-embed/chunks/{chunk-IMKFNOWR-DwqmSZhU.js → chunk-IMKFNOWR-Dzk9sHxf.js} +1 -1
- package/dist-embed/chunks/{chunk-JWPE2WC7-i7V3vMtZ.js → chunk-JWPE2WC7-Ble97p_W.js} +1 -1
- package/dist-embed/chunks/{chunk-JWPE2WC7-jla8jvq5.js → chunk-JWPE2WC7-DyqhVk-0.js} +1 -1
- package/dist-embed/chunks/{chunk-POPQ4Y6H-BGCugXU7.js → chunk-POPQ4Y6H-CQpYIqjb.js} +1 -1
- package/dist-embed/chunks/{chunk-POPQ4Y6H-ofrenTaa.js → chunk-POPQ4Y6H-CtT0-VOM.js} +1 -1
- package/dist-embed/chunks/{chunk-SVP7TREG-BIxxVjkU.js → chunk-SVP7TREG-BTtpQsSJ.js} +1 -1
- package/dist-embed/chunks/{chunk-SVP7TREG-2Q2uQyQk.js → chunk-SVP7TREG-CwdiQONE.js} +1 -1
- package/dist-embed/chunks/{chunk-TICWLB2K-BqA5q52L.js → chunk-TICWLB2K-BfGhImQo.js} +1 -1
- package/dist-embed/chunks/{chunk-TICWLB2K-LNiCmYq5.js → chunk-TICWLB2K-D3UY4Hgl.js} +1 -1
- package/dist-embed/chunks/{chunk-XXDRQBXY-CqtfA3WC.js → chunk-XXDRQBXY-BaxFY2Jg.js} +1 -1
- package/dist-embed/chunks/{chunk-XXDRQBXY-CNMg_gvd.js → chunk-XXDRQBXY-a1EY5SM8.js} +1 -1
- package/dist-embed/chunks/{classDiagram-ZZMXUADV-D6z_X195.js → classDiagram-ZZMXUADV-C0eJXn7r.js} +1 -1
- package/dist-embed/chunks/{classDiagram-ZZMXUADV-Co0jT9i-.js → classDiagram-ZZMXUADV-Cop7Dp41.js} +1 -1
- package/dist-embed/chunks/{classDiagram-f62afe4f-lN62p17q.js → classDiagram-f62afe4f-BGkVvslN.js} +1 -1
- package/dist-embed/chunks/{classDiagram-v2-604399ef-B_QJ6H8h.js → classDiagram-v2-604399ef-CPwahFkc.js} +1 -1
- package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-D6z_X195.js → classDiagram-v2-VYDZK3BY-C0eJXn7r.js} +1 -1
- package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-Co0jT9i-.js → classDiagram-v2-VYDZK3BY-Cop7Dp41.js} +1 -1
- package/dist-embed/chunks/{code-block-IT6T5CEO-BA38Km-f.js → code-block-IT6T5CEO-DEZxRmcq.js} +1 -1
- package/dist-embed/chunks/{component-Chor_J7e.js → component-B8gGyr50.js} +1 -1
- package/dist-embed/chunks/{cose-bilkent-JH36ORCC-B5H1cwBa.js → cose-bilkent-JH36ORCC-CQ3UHpys.js} +1 -1
- package/dist-embed/chunks/{cose-bilkent-JH36ORCC-C3cTgEcU.js → cose-bilkent-JH36ORCC-whW3Ickm.js} +1 -1
- package/dist-embed/chunks/{createText-aed3d8b3-BtgHeyNs.js → createText-aed3d8b3-BdWXGDj2.js} +1 -1
- package/dist-embed/chunks/{cs-CZ-2BRQDIVT-ClBKH9_y.js → cs-CZ-2BRQDIVT-DHo-9UK-.js} +1 -1
- package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-sdsAonZm.js → cynefinDiagram-5FMLGOSQ-C1dAzTZy.js} +1 -1
- package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-DPQLh9z7.js → cynefinDiagram-5FMLGOSQ-DKngj3tn.js} +1 -1
- package/dist-embed/chunks/{da-DK-5WZEPLOC-BqFDUAty.js → da-DK-5WZEPLOC-BLw7PbxL.js} +1 -1
- package/dist-embed/chunks/{dagre-GXQ25YYZ-DHF-9-7e.js → dagre-GXQ25YYZ-Bom0Ow10.js} +1 -1
- package/dist-embed/chunks/{dagre-GXQ25YYZ-Bwf_WjLM.js → dagre-GXQ25YYZ-BuHKUFJc.js} +1 -1
- package/dist-embed/chunks/{de-DE-XR44H4JA-6dsEQn7Z.js → de-DE-XR44H4JA-DqCVLDRk.js} +1 -1
- package/dist-embed/chunks/{diagram-S7CK7UJ4-DEqGRBMT.js → diagram-S7CK7UJ4-4zEkI5rV.js} +1 -1
- package/dist-embed/chunks/{diagram-S7CK7UJ4-C-N7Ei3I.js → diagram-S7CK7UJ4-H6Kef58R.js} +1 -1
- package/dist-embed/chunks/{diagram-UQ7AKVKN-DACyxI-v.js → diagram-UQ7AKVKN-DVAC1okH.js} +1 -1
- package/dist-embed/chunks/{diagram-UQ7AKVKN-CvSBE0YU.js → diagram-UQ7AKVKN-DeXqnBhe.js} +1 -1
- package/dist-embed/chunks/{diagram-VSXAHHWV-DFze2xro.js → diagram-VSXAHHWV-BYu3Niho.js} +1 -1
- package/dist-embed/chunks/{diagram-VSXAHHWV-DOb69VtE.js → diagram-VSXAHHWV-DJvcLGGT.js} +1 -1
- package/dist-embed/chunks/{diagram-VX7I27RA-CVTSdYyZ.js → diagram-VX7I27RA-BeOTI_JX.js} +1 -1
- package/dist-embed/chunks/{diagram-VX7I27RA-8EKYM_Sx.js → diagram-VX7I27RA-Cd39Txmj.js} +1 -1
- package/dist-embed/chunks/{diagram-Z3DM3KII-B-689FF6.js → diagram-Z3DM3KII-Ccg8IzPs.js} +1 -1
- package/dist-embed/chunks/{diagram-Z3DM3KII-DyiBmBFy.js → diagram-Z3DM3KII-DV4M-vr2.js} +1 -1
- package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-DcKvqn_h.js → ebnfDiagram-PWID7BFC-Ci7iqdKR.js} +1 -1
- package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-gj8dgCWR.js → ebnfDiagram-PWID7BFC-JrHbupeR.js} +1 -1
- package/dist-embed/chunks/{edges-b2856ca0-BqGGNnb4.js → edges-b2856ca0-D0Ve_cWg.js} +1 -1
- package/dist-embed/chunks/{el-GR-BZB4AONW-DOMW2ttY.js → el-GR-BZB4AONW-DWIe_es3.js} +1 -1
- package/dist-embed/chunks/{erDiagram-5d81789a-Bf1Ik49K.js → erDiagram-5d81789a-_wYWwZkR.js} +1 -1
- package/dist-embed/chunks/{erDiagram-RLTQ6QDP-B0PyZB_3.js → erDiagram-RLTQ6QDP-CgP-DSWO.js} +1 -1
- package/dist-embed/chunks/{erDiagram-RLTQ6QDP-GSu-_IUJ.js → erDiagram-RLTQ6QDP-D2UUMLBd.js} +1 -1
- package/dist-embed/chunks/{es-ES-U4NZUMDT-DeyWqjw1.js → es-ES-U4NZUMDT-C4nVLuzt.js} +1 -1
- package/dist-embed/chunks/{eu-ES-A7QVB2H4-CUGbZ0Pv.js → eu-ES-A7QVB2H4-DNtU9lgI.js} +1 -1
- package/dist-embed/chunks/{fa-IR-HGAKTJCU-Br8UEVO1.js → fa-IR-HGAKTJCU-C9d2dVkk.js} +1 -1
- package/dist-embed/chunks/{fi-FI-Z5N7JZ37-BSHjwo8G.js → fi-FI-Z5N7JZ37-BtMDQ3ec.js} +1 -1
- package/dist-embed/chunks/{flowDb-185abca5-U9PwWSO4.js → flowDb-185abca5-w4ZLOMwa.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-1629c991-BecgzQgp.js → flowDiagram-1629c991-CrRVLCnt.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-HODETNUW-2vih3kWM.js → flowDiagram-HODETNUW-BJpTxK5i.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-HODETNUW-tcAkcGh4.js → flowDiagram-HODETNUW-DtWilAWc.js} +1 -1
- package/dist-embed/chunks/{flowDiagram-v2-1d953310-Bdmc9G3m.js → flowDiagram-v2-1d953310-tzv2aPj8.js} +1 -1
- package/dist-embed/chunks/{flowchart-elk-definition-6df44142-oWOWsVNc.js → flowchart-elk-definition-6df44142-C8Gjf4Dy.js} +1 -1
- package/dist-embed/chunks/{fr-FR-RHASNOE6-BukqZYPz.js → fr-FR-RHASNOE6-D1fqP_vI.js} +1 -1
- package/dist-embed/chunks/{ganttDiagram-3b0b3873-B7lmD9r9.js → ganttDiagram-3b0b3873-WkbnZ3Zy.js} +1 -1
- package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-D0E7se_Z.js → ganttDiagram-EL5Y4UJY-B1hq5rq9.js} +1 -1
- package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-DDbqMevq.js → ganttDiagram-EL5Y4UJY-DiSce27A.js} +1 -1
- package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-DK3EJl5z.js → gitGraphDiagram-WWUBYQGX-BoqOxrkd.js} +1 -1
- package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-DnVwXJWu.js → gitGraphDiagram-WWUBYQGX-Dfl4EOB8.js} +1 -1
- package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-B9vpLy6R.js → gitGraphDiagram-f01e8bc2-DxsYooak.js} +1 -1
- package/dist-embed/chunks/{gl-ES-HMX3MZ6V-BxVOJiaI.js → gl-ES-HMX3MZ6V-BkLcCFrx.js} +1 -1
- package/dist-embed/chunks/{he-IL-6SHJWFNN-Dv2VRxlJ.js → he-IL-6SHJWFNN-By48peS7.js} +1 -1
- package/dist-embed/chunks/{hi-IN-IWLTKZ5I-CFo5RUMz.js → hi-IN-IWLTKZ5I-386dm1ZK.js} +1 -1
- package/dist-embed/chunks/{hu-HU-A5ZG7DT2-ul3dS3un.js → hu-HU-A5ZG7DT2-B2wmIkDO.js} +1 -1
- package/dist-embed/chunks/{id-ID-SAP4L64H-ItVb-zwI.js → id-ID-SAP4L64H-Bc22Fq5f.js} +1 -1
- package/dist-embed/chunks/{index-9bae90f3-D9849sgo.js → index-9bae90f3-0dEQW6X4.js} +1 -1
- package/dist-embed/chunks/{index-oGqh9y23.js → index-B2eXWNhX.js} +1 -1
- package/dist-embed/chunks/{index-DSvebR7d.js → index-B5UP_2-0.js} +1 -1
- package/dist-embed/chunks/{index-YlGTgJvL.js → index-BEuw5cVO.js} +1 -1
- package/dist-embed/chunks/{index-CsgaCZaW.js → index-BMlDZi3F.js} +1 -1
- package/dist-embed/chunks/{index-BNFRRs9d.js → index-BW1nTf3r.js} +1 -1
- package/dist-embed/chunks/{index-xiH3WzLm.js → index-Ba1_ej_S.js} +1 -1
- package/dist-embed/chunks/{index-CjM49jS0.js → index-Bf3G_UXi.js} +1 -1
- package/dist-embed/chunks/{index-BOYhJnrD.js → index-BlBHM8M3.js} +1 -1
- package/dist-embed/chunks/{index-B5zrJYwn.js → index-Bw3Ijhff.js} +1 -1
- package/dist-embed/chunks/{index-BT4vYFeY.js → index-C5TEB73S.js} +1 -1
- package/dist-embed/chunks/{index-BkKEXqQS.js → index-CD5d-0QJ.js} +1 -1
- package/dist-embed/chunks/{index-D2LvuQlP.js → index-CTSvc7kN.js} +1 -1
- package/dist-embed/chunks/{index-B-L6ocEV.js → index-CaBZ6zn5.js} +1 -1
- package/dist-embed/chunks/{index-DSF21-29.js → index-Ce0tqSYG.js} +1 -1
- package/dist-embed/chunks/{index-BfUXEHI0.js → index-CeDsYtrC.js} +1 -1
- package/dist-embed/chunks/{index-Cp2aJ2ZR.js → index-Ckzgd1GV.js} +1 -1
- package/dist-embed/chunks/{index-jh9S19of.js → index-Crj6AD3D.js} +1 -1
- package/dist-embed/chunks/{index-bm8APcDZ.js → index-Cs7fNnHI.js} +4 -4
- package/dist-embed/chunks/{index-DoBEQ07P.js → index-D2V9YBSL.js} +2 -2
- package/dist-embed/chunks/{index-B764si9c.js → index-D4xDU_cs.js} +1 -1
- package/dist-embed/chunks/{index-O2jaI8TY.js → index-DB3vaYGl.js} +1 -1
- package/dist-embed/chunks/{index-B0wMyD8Y.js → index-DGpvT0SW.js} +1 -1
- package/dist-embed/chunks/{index-CRpZyQIR.js → index-DIGoR1Tz.js} +4 -4
- package/dist-embed/chunks/{index-CZdWsyNw.js → index-DTF28A2w.js} +1 -1
- package/dist-embed/chunks/{index-7FNjj0f2.js → index-DdBEMKdr.js} +1 -1
- package/dist-embed/chunks/{index-BrD9dtoV.js → index-DiBjbJad.js} +1 -1
- package/dist-embed/chunks/{index-BM6oRiO1.js → index-DkAo6nTX.js} +1 -1
- package/dist-embed/chunks/{index-TEcp7-f6.js → index-DmlogZBL.js} +2 -2
- package/dist-embed/chunks/{index-Cql9gOsL.js → index-DmzlqRz3.js} +1 -1
- package/dist-embed/chunks/{index-CsxlyZef.js → index-DodMg2uF.js} +1 -1
- package/dist-embed/chunks/{index-BiTIdbkn.js → index-DwKNt0FO.js} +1 -1
- package/dist-embed/chunks/{index-BqMoyzEk.js → index-I5uUezOA.js} +1 -1
- package/dist-embed/chunks/{index-DQQXY-7d.js → index-TzvZ9g2T.js} +2 -2
- package/dist-embed/chunks/{index-QZ3sHHT3.js → index-wWGi6oM9.js} +10 -10
- package/dist-embed/chunks/{index.esm-CkSite-X.js → index.esm-DFA6Rod9.js} +1 -1
- package/dist-embed/chunks/{index.esm-B7KoTOBb.js → index.esm-De-JJWit.js} +1 -1
- package/dist-embed/chunks/{infoDiagram-27XIBGKW-DDO50Ria.js → infoDiagram-27XIBGKW-B6fdV0Xc.js} +1 -1
- package/dist-embed/chunks/{infoDiagram-27XIBGKW-O3q53Qe2.js → infoDiagram-27XIBGKW-C6J796kn.js} +1 -1
- package/dist-embed/chunks/{infoDiagram-a29d40f1-jOvOHUyu.js → infoDiagram-a29d40f1-BjFaAu0-.js} +1 -1
- package/dist-embed/chunks/isEqual-BxgGIFfN.js +1 -0
- package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-DuiWhpVW.js → ishikawaDiagram-5VMMS53U-CZVbbiJE.js} +1 -1
- package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-IzmbYzxv.js → ishikawaDiagram-5VMMS53U-sjolONOj.js} +1 -1
- package/dist-embed/chunks/{it-IT-JPQ66NNP-BuCUBzia.js → it-IT-JPQ66NNP-Cyadykvb.js} +1 -1
- package/dist-embed/chunks/{ja-JP-DBVTYXUO-BhtQz4sy.js → ja-JP-DBVTYXUO-DYq7TJf3.js} +1 -1
- package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-sO-Cfp65.js → journeyDiagram-3NMN7TZE-BJ-6GyhB.js} +1 -1
- package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-DGLcsVfC.js → journeyDiagram-3NMN7TZE-CNoB-K6t.js} +1 -1
- package/dist-embed/chunks/{journeyDiagram-95396277-CA4bGq0G.js → journeyDiagram-95396277-E32TRIvj.js} +1 -1
- package/dist-embed/chunks/{kaa-6HZHGXH3-B_TI8Aa0.js → kaa-6HZHGXH3-qdjcAwd_.js} +1 -1
- package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-BsSg_l-j.js → kab-KAB-ZGHBKWFO-DHVNVHkT.js} +1 -1
- package/dist-embed/chunks/{kanban-definition-UXKFOSKX-CDtLkjnU.js → kanban-definition-UXKFOSKX-2elwU70n.js} +1 -1
- package/dist-embed/chunks/{kanban-definition-UXKFOSKX-0wjvwDqk.js → kanban-definition-UXKFOSKX-ZErtzIYn.js} +1 -1
- package/dist-embed/chunks/{kk-KZ-P5N5QNE5-B7XK5OQq.js → kk-KZ-P5N5QNE5-DtQCYXHl.js} +1 -1
- package/dist-embed/chunks/{km-KH-HSX4SM5Z-Cm2LA9F8.js → km-KH-HSX4SM5Z-B_GLLzdn.js} +1 -1
- package/dist-embed/chunks/{ko-KR-MTYHY66A-CL5s99y5.js → ko-KR-MTYHY66A-B8OMm-h5.js} +1 -1
- package/dist-embed/chunks/{ku-TR-6OUDTVRD-CiijvKHq.js → ku-TR-6OUDTVRD-_gB3JeJW.js} +1 -1
- package/dist-embed/chunks/{layout-CzrlbzeK.js → layout-DV2JdCx0.js} +1 -1
- package/dist-embed/chunks/{layout-BBbB54WC.js → layout-Di1pO_ld.js} +1 -1
- package/dist-embed/chunks/{lexicalHooks-DQxNZEiJ.js → lexicalHooks-DuWTjfdx.js} +1 -1
- package/dist-embed/chunks/{lt-LT-XHIRWOB4-CcA_Z5jR.js → lt-LT-XHIRWOB4-judKfepg.js} +1 -1
- package/dist-embed/chunks/{lv-LV-5QDEKY6T-CAQS9wGm.js → lv-LV-5QDEKY6T-C-9ZhYTf.js} +1 -1
- package/dist-embed/chunks/{mermaid.core-DfgoT1cz.js → mermaid.core-CH9h-G6m.js} +3 -3
- package/dist-embed/chunks/{mermaid.core-s-D09gpV.js → mermaid.core-DmeLLEp4.js} +5 -5
- package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-BCiSPRJk.js → mindmap-definition-YA3MSWOX-CH32-IRq.js} +1 -1
- package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-B6_K5ZvV.js → mindmap-definition-YA3MSWOX-DQTfxlEc.js} +1 -1
- package/dist-embed/chunks/{mindmap-definition-e4c1d938-D7gmABiC.js → mindmap-definition-e4c1d938-BgjFyiku.js} +1 -1
- package/dist-embed/chunks/{mr-IN-CRQNXWMA-DMAAvsDA.js → mr-IN-CRQNXWMA-B7W8v3Ft.js} +1 -1
- package/dist-embed/chunks/{my-MM-5M5IBNSE-t2TKqrjW.js → my-MM-5M5IBNSE-e3nyuoTM.js} +1 -1
- package/dist-embed/chunks/{nb-NO-T6EIAALU-Bi3ZI-HQ.js → nb-NO-T6EIAALU-Dq2hr8f4.js} +1 -1
- package/dist-embed/chunks/{nl-NL-IS3SIHDZ-B8UdlW1K.js → nl-NL-IS3SIHDZ-BPpJK4bx.js} +1 -1
- package/dist-embed/chunks/{nn-NO-6E72VCQL-Bt87hI27.js → nn-NO-6E72VCQL-TlFEoum0.js} +1 -1
- package/dist-embed/chunks/{oc-FR-POXYY2M6-009NL0Pk.js → oc-FR-POXYY2M6-CnSPPsW-.js} +1 -1
- package/dist-embed/chunks/{pa-IN-N4M65BXN-BfUtS2yt.js → pa-IN-N4M65BXN-DOLWrPsW.js} +1 -1
- package/dist-embed/chunks/{pegDiagram-XKGWAZYB-CBrnWUaX.js → pegDiagram-XKGWAZYB-n8BSl7l3.js} +1 -1
- package/dist-embed/chunks/{pegDiagram-XKGWAZYB-BX0ZYMng.js → pegDiagram-XKGWAZYB-oyZR3LwE.js} +1 -1
- package/dist-embed/chunks/{percentages-BXMCSKIN-CfzulzOv.js → percentages-BXMCSKIN-CGGUos_k.js} +5 -5
- package/dist-embed/chunks/{pieDiagram-E7YTZNPT-Ct8dzoLU.js → pieDiagram-E7YTZNPT-BW48oEVe.js} +1 -1
- package/dist-embed/chunks/{pieDiagram-E7YTZNPT-B1My5W85.js → pieDiagram-E7YTZNPT-t7G_PNXz.js} +1 -1
- package/dist-embed/chunks/{pieDiagram-c941bede-7DZ-Bl8U.js → pieDiagram-c941bede-Ci9AzDtZ.js} +1 -1
- package/dist-embed/chunks/{pl-PL-T2D74RX3-DbtOl9_x.js → pl-PL-T2D74RX3-hlaxloT-.js} +1 -1
- package/dist-embed/chunks/{pt-BR-5N22H2LF-B1pjR1_T.js → pt-BR-5N22H2LF-Zzt5dIRi.js} +1 -1
- package/dist-embed/chunks/{pt-PT-UZXXM6DQ-takC7TRa.js → pt-PT-UZXXM6DQ-DclavEOo.js} +1 -1
- package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-B1mlT7fN.js → quadrantDiagram-AXDQQJYC-BLT8OFPd.js} +1 -1
- package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-B7p4unpj.js → quadrantDiagram-AXDQQJYC-CqCRrPOH.js} +1 -1
- package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-CTMh_Ad5.js → quadrantDiagram-cf8b8fe0-CCwvL59h.js} +1 -1
- package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-CJEwr5d9.js → railroadDiagram-O6MQD6OU-CArU1lc_.js} +1 -1
- package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-xr8bPIl7.js → railroadDiagram-O6MQD6OU-h7bwNVOI.js} +1 -1
- package/dist-embed/chunks/{renderer-Ba0Cwb4p.js → renderer-B7ulbNbj.js} +1 -1
- package/dist-embed/chunks/{requirementDiagram-53bda41b-Dv1Piop_.js → requirementDiagram-53bda41b-DwpbUtUG.js} +1 -1
- package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-Bw89vFiC.js → requirementDiagram-BXWQKSXE-DjSU8lt8.js} +1 -1
- package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-rabT3v-j.js → requirementDiagram-BXWQKSXE-DouRs4yi.js} +1 -1
- package/dist-embed/chunks/{ro-RO-JPDTUUEW-DkkqyFBF.js → ro-RO-JPDTUUEW-cgDkcR_I.js} +1 -1
- package/dist-embed/chunks/{ru-RU-B4JR7IUQ-CikD-ITp.js → ru-RU-B4JR7IUQ-9-oBtsiZ.js} +1 -1
- package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-D--cx9I2.js → sankeyDiagram-P5KCCOFB-CBWfRlJB.js} +1 -1
- package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-5SpI76uK.js → sankeyDiagram-P5KCCOFB-DjzmT1hm.js} +1 -1
- package/dist-embed/chunks/{sankeyDiagram-c3ef121a-DbhtSWkB.js → sankeyDiagram-c3ef121a-9XuKuXG6.js} +1 -1
- package/dist-embed/chunks/{sequenceDiagram-82a5b84f-DpxBSKAk.js → sequenceDiagram-82a5b84f-BG9YQ6K-.js} +1 -1
- package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-D_wK-z7a.js → sequenceDiagram-WJ2MYXX4-B9mfZJzJ.js} +1 -1
- package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-DGNwWgf8.js → sequenceDiagram-WJ2MYXX4-CosODaLN.js} +1 -1
- package/dist-embed/chunks/{sessions-DQkTozai.js → sessions-D0uw83Dx.js} +1 -1
- package/dist-embed/chunks/{si-LK-N5RQ5JYF-BqlWRhwK.js → si-LK-N5RQ5JYF-DwwdanqB.js} +1 -1
- package/dist-embed/chunks/{sizeCapture-INFHLROL-4Uh8JUjf.js → sizeCapture-INFHLROL-CwVsdbq8.js} +1 -1
- package/dist-embed/chunks/{sizeCapture-INFHLROL-g-K-6XON.js → sizeCapture-INFHLROL-H5_9Te0l.js} +1 -1
- package/dist-embed/chunks/{sk-SK-C5VTKIMK-DGsmi02E.js → sk-SK-C5VTKIMK-Bx7Xeegg.js} +1 -1
- package/dist-embed/chunks/{sl-SI-NN7IZMDC-HFz45GOs.js → sl-SI-NN7IZMDC-BnRYm8hb.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-43e79a5f-DxbV4jP9.js → stateDiagram-43e79a5f-DqSNbxpV.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-D77RDMKH-D-l3u-WY.js → stateDiagram-D77RDMKH-CFvF2i-n.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-D77RDMKH-C_wYpqah.js → stateDiagram-D77RDMKH-CM0rQJN-.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-BzxzaDdI.js → stateDiagram-v2-2041ed4f-DEAOSRqx.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-IEMNMwm0.js → stateDiagram-v2-MP3YSRHH-BNF3zl7F.js} +1 -1
- package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-BGYkOvTS.js → stateDiagram-v2-MP3YSRHH-x4Ke6-d0.js} +1 -1
- package/dist-embed/chunks/{styles-455b33cd-C42Lyulv.js → styles-455b33cd-CGv1xv-g.js} +1 -1
- package/dist-embed/chunks/{styles-f932cba9-Bf6H3IMq.js → styles-f932cba9-BcvypeEH.js} +1 -1
- package/dist-embed/chunks/{styles-fcc2142b-OZg6fE-p.js → styles-fcc2142b-Bm-8o0Wg.js} +1 -1
- package/dist-embed/chunks/{subset-shared.chunk-KC0vshev.js → subset-shared.chunk-E0MJmgRL.js} +1 -1
- package/dist-embed/chunks/{subset-worker.chunk-CXZAV_Z5.js → subset-worker.chunk-C8uhAh2D.js} +1 -1
- package/dist-embed/chunks/{sv-SE-XGPEYMSR-yEdPvwHy.js → sv-SE-XGPEYMSR-CsQ6HfG0.js} +1 -1
- package/dist-embed/chunks/{svgDrawCommon-148a3cd9-D9MRwoYw.js → svgDrawCommon-148a3cd9-CfBqsI2Z.js} +1 -1
- package/dist-embed/chunks/{swimlanes-42K2YHIH-CPkom4Q8.js → swimlanes-42K2YHIH-C5u-jMMX.js} +1 -1
- package/dist-embed/chunks/{swimlanes-42K2YHIH-DJLFcHMt.js → swimlanes-42K2YHIH-DSy5A1Br.js} +1 -1
- package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-BJOhuN-y.js → swimlanesDiagram-VR7AAH4N-DiCCWeyH.js} +1 -1
- package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-BRTtY1QX.js → swimlanesDiagram-VR7AAH4N-Dz7sQXaA.js} +1 -1
- package/dist-embed/chunks/{ta-IN-2NMHFXQM-0i424YGX.js → ta-IN-2NMHFXQM-fGjZyqzP.js} +1 -1
- package/dist-embed/chunks/{th-TH-HPSO5L25-BidF5zNO.js → th-TH-HPSO5L25-mRygXByj.js} +1 -1
- package/dist-embed/chunks/{timeline-definition-24CTP7MA-BasSLg-_.js → timeline-definition-24CTP7MA-BbGhqNW7.js} +1 -1
- package/dist-embed/chunks/{timeline-definition-24CTP7MA-BfGIJi1H.js → timeline-definition-24CTP7MA-YHoSditW.js} +1 -1
- package/dist-embed/chunks/{timeline-definition-7545f45a-BWwgvKxJ.js → timeline-definition-7545f45a-Cgha50uP.js} +1 -1
- package/dist-embed/chunks/{tr-TR-DEFEU3FU-BoHR9SlC.js → tr-TR-DEFEU3FU-CSMtrw8Q.js} +1 -1
- package/dist-embed/chunks/{uk-UA-QMV73CPH-DfRkqqO0.js → uk-UA-QMV73CPH-CLyS0aEW.js} +1 -1
- package/dist-embed/chunks/{vennDiagram-4TSXK5OY-D1T__rd2.js → vennDiagram-4TSXK5OY-CP_KbGdD.js} +1 -1
- package/dist-embed/chunks/{vennDiagram-4TSXK5OY-DMIYCfJ-.js → vennDiagram-4TSXK5OY-DEMghTP3.js} +1 -1
- package/dist-embed/chunks/{vi-VN-M7AON7JQ-CvZ4wpTw.js → vi-VN-M7AON7JQ-DI90c6Zt.js} +1 -1
- package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-DtlNUHLy.js → wardleyDiagram-VM6X3IG4-BKwp7C6o.js} +1 -1
- package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-CiKuFI26.js → wardleyDiagram-VM6X3IG4-CBfVN6X9.js} +1 -1
- package/dist-embed/chunks/{xychartDiagram-3f383b91-DzyuxW4K.js → xychartDiagram-3f383b91-CyeoV8HA.js} +1 -1
- package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-p6pYRkk6.js → xychartDiagram-S5SC5T6Z-BdfPJ1NZ.js} +1 -1
- package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-BIeFUHrS.js → xychartDiagram-S5SC5T6Z-DOiTJUlh.js} +1 -1
- package/dist-embed/chunks/{zh-CN-LNUGB5OW-Cx1Azgu2.js → zh-CN-LNUGB5OW-BhtQOj8w.js} +1 -1
- package/dist-embed/chunks/{zh-HK-E62DVLB3-DMjy1d4Z.js → zh-HK-E62DVLB3-BwejmqFd.js} +1 -1
- package/dist-embed/chunks/{zh-TW-RAJ6MFWO-J-YjINmR.js → zh-TW-RAJ6MFWO-CXYEZutZ.js} +1 -1
- package/dist-embed/datalayer-app-main.js +85 -85
- package/lib/apps/apps/appspec.d.ts +31 -1
- package/lib/apps/apps/appspec.js +66 -15
- package/lib/apps/plugins/chat/ChatView.js +31 -4
- package/lib/chat/ChatFloating.js +12 -4
- package/lib/chat/base/ChatBase.js +31 -5
- package/lib/chat/messages/ChatMessageList.js +1 -1
- package/lib/examples/AgentA2ATeamExample.js +6 -5
- package/lib/examples/ChatExample.js +2 -2
- package/lib/examples/VoiceChatExample.js +9 -3
- package/lib/hooks/ownRoutes.d.ts +27 -0
- package/lib/hooks/ownRoutes.js +33 -0
- package/lib/hooks/useAgentRuntimes.d.ts +5 -0
- package/lib/hooks/useAgentRuntimes.js +29 -26
- package/lib/hooks/useBrowserAgent.d.ts +1 -1
- package/lib/hooks/useBrowserAgent.js +1 -1
- package/lib/protocols/AGUIAdapter.d.ts +11 -0
- package/lib/protocols/AGUIAdapter.js +27 -2
- package/lib/specs/apps.d.ts +32 -32
- package/lib/specs/apps.js +620 -139
- package/lib/specs/protocols.js +2 -2
- package/lib/specs/scenes.js +7 -7
- package/lib/specs/teams/teams.js +11 -11
- package/lib/specs/voices.d.ts +4 -0
- package/lib/specs/voices.js +10 -0
- package/lib/types/agentspecs.d.ts +5 -0
- package/lib/types/chat.d.ts +6 -0
- package/lib/types/protocol.d.ts +17 -0
- package/lib/utils/utils.js +8 -1
- package/lib/voice/ReadAloud.d.ts +35 -0
- package/lib/voice/ReadAloud.js +29 -0
- package/lib/voice/hearing.js +5 -3
- package/lib/voice/index.d.ts +7 -2
- package/lib/voice/index.js +1 -0
- package/lib/voice/pinned.d.ts +3 -1
- package/lib/voice/pinned.js +17 -3
- package/package.json +2 -2
- package/scripts/codegen/generate_agents.py +34 -2
- package/scripts/codegen/generate_voices.py +8 -1
- package/scripts/voice/measure.py +9 -4
- package/scripts/voice/pin_store.py +11 -5
- package/scripts/voice/serve_store.py +2 -2
- package/dist-embed/chunks/ChatView-Dr-1g_cg.js +0 -32
- package/dist-embed/chunks/isEqual-CGLTk7wU.js +0 -1
package/lib/specs/protocols.js
CHANGED
|
@@ -128,12 +128,12 @@ export const TAP_PROTOCOL_0_0_1 = {
|
|
|
128
128
|
id: 'tap',
|
|
129
129
|
version: '0.0.1',
|
|
130
130
|
name: 'Trusted Agent Protocol',
|
|
131
|
-
description: "An agent-recognition profile over Web Bot Auth for merchants: a signature tagged agent-browser-auth to browse or agent-payer-auth to pay.
|
|
131
|
+
description: "An agent-recognition profile over Web Bot Auth for merchants: a signature tagged agent-browser-auth to browse or agent-payer-auth to pay. Still a draft profile, built from Visa's public Merchant Specifications (2026-10-13) until Visa confirms it. In applications at test merchants only (decided 2026-10-14): the MCP gateway signs each UCP or ACP purchase with agent-payer-auth under the application's own key, and the test merchants verify it; browsing stays Web Bot Auth.",
|
|
132
132
|
publisher: 'Visa',
|
|
133
133
|
layer: 'identity',
|
|
134
134
|
specUrl: 'https://developer.visa.com/capabilities/trusted-agent-protocol/trusted-agent-protocol-specifications',
|
|
135
135
|
specVersion: 'draft (Merchant Specifications, read 2026-10-13)',
|
|
136
|
-
status: '
|
|
136
|
+
status: 'shipped',
|
|
137
137
|
connects: 'Merchants that recognise an agent by its signature',
|
|
138
138
|
packages: {
|
|
139
139
|
python: ['agent-runtimes'],
|
package/lib/specs/scenes.js
CHANGED
|
@@ -17,7 +17,7 @@ export const CROP_MONITORING_SCENE_0_0_1 = {
|
|
|
17
17
|
cast: [
|
|
18
18
|
{
|
|
19
19
|
member: 'crop-monitoring',
|
|
20
|
-
app: 'crop-monitoring:0.0.
|
|
20
|
+
app: 'crop-monitoring:0.0.2',
|
|
21
21
|
ref: '',
|
|
22
22
|
server: '',
|
|
23
23
|
role: 'initiator',
|
|
@@ -330,7 +330,7 @@ export const DISASTER_ASSESSMENT_SCENE_0_0_1 = {
|
|
|
330
330
|
cast: [
|
|
331
331
|
{
|
|
332
332
|
member: 'event-response',
|
|
333
|
-
app: 'event-response:0.0.
|
|
333
|
+
app: 'event-response:0.0.3',
|
|
334
334
|
ref: '',
|
|
335
335
|
server: '',
|
|
336
336
|
role: 'initiator',
|
|
@@ -354,7 +354,7 @@ export const DISASTER_ASSESSMENT_SCENE_0_0_1 = {
|
|
|
354
354
|
},
|
|
355
355
|
{
|
|
356
356
|
member: 'disaster-assessment',
|
|
357
|
-
app: 'disaster-assessment:0.0.
|
|
357
|
+
app: 'disaster-assessment:0.0.2',
|
|
358
358
|
ref: '',
|
|
359
359
|
server: '',
|
|
360
360
|
role: 'contributor',
|
|
@@ -368,7 +368,7 @@ export const DISASTER_ASSESSMENT_SCENE_0_0_1 = {
|
|
|
368
368
|
},
|
|
369
369
|
{
|
|
370
370
|
member: 'change-detection',
|
|
371
|
-
app: 'change-detection:0.0.
|
|
371
|
+
app: 'change-detection:0.0.2',
|
|
372
372
|
ref: '',
|
|
373
373
|
server: '',
|
|
374
374
|
role: 'contributor',
|
|
@@ -755,7 +755,7 @@ export const MONTH_END_CLOSE_SCENE_0_0_1 = {
|
|
|
755
755
|
cast: [
|
|
756
756
|
{
|
|
757
757
|
member: 'month-end-close',
|
|
758
|
-
app: 'month-end-close:0.0.
|
|
758
|
+
app: 'month-end-close:0.0.2',
|
|
759
759
|
ref: '',
|
|
760
760
|
server: '',
|
|
761
761
|
role: 'initiator',
|
|
@@ -1912,7 +1912,7 @@ export const SALES_AND_ACCOUNTING_SCENE_0_0_1 = {
|
|
|
1912
1912
|
cast: [
|
|
1913
1913
|
{
|
|
1914
1914
|
member: 'sales',
|
|
1915
|
-
app: 'sales:0.0.
|
|
1915
|
+
app: 'sales:0.0.3',
|
|
1916
1916
|
ref: '',
|
|
1917
1917
|
server: '',
|
|
1918
1918
|
role: 'initiator',
|
|
@@ -1932,7 +1932,7 @@ export const SALES_AND_ACCOUNTING_SCENE_0_0_1 = {
|
|
|
1932
1932
|
},
|
|
1933
1933
|
{
|
|
1934
1934
|
member: 'accounting',
|
|
1935
|
-
app: 'accounting:0.0.
|
|
1935
|
+
app: 'accounting:0.0.2',
|
|
1936
1936
|
ref: '',
|
|
1937
1937
|
server: '',
|
|
1938
1938
|
role: 'contributor',
|
package/lib/specs/teams/teams.js
CHANGED
|
@@ -727,7 +727,7 @@ export const CROP_MONITORING_TEAM_SPEC_0_0_1 = {
|
|
|
727
727
|
supervisor: {
|
|
728
728
|
name: 'Crop Monitoring',
|
|
729
729
|
ref: '',
|
|
730
|
-
app: 'crop-monitoring:0.0.
|
|
730
|
+
app: 'crop-monitoring:0.0.2',
|
|
731
731
|
model: '',
|
|
732
732
|
goal: ``,
|
|
733
733
|
instructions: ``,
|
|
@@ -766,7 +766,7 @@ export const CROP_MONITORING_TEAM_SPEC_0_0_1 = {
|
|
|
766
766
|
id: 'crop-monitoring',
|
|
767
767
|
name: '',
|
|
768
768
|
ref: '',
|
|
769
|
-
app: 'crop-monitoring:0.0.
|
|
769
|
+
app: 'crop-monitoring:0.0.2',
|
|
770
770
|
runsIn: 'runtime',
|
|
771
771
|
role: 'initiator',
|
|
772
772
|
goal: `Take the person's field and period, search the imagery that covers them, and report the vigour, the growth and the fields to watch.`,
|
|
@@ -804,7 +804,7 @@ export const DISASTER_ASSESSMENT_TEAM_SPEC_0_0_1 = {
|
|
|
804
804
|
supervisor: {
|
|
805
805
|
name: 'Event response',
|
|
806
806
|
ref: '',
|
|
807
|
-
app: 'event-response:0.0.
|
|
807
|
+
app: 'event-response:0.0.3',
|
|
808
808
|
model: '',
|
|
809
809
|
goal: ``,
|
|
810
810
|
instructions: ``,
|
|
@@ -843,7 +843,7 @@ export const DISASTER_ASSESSMENT_TEAM_SPEC_0_0_1 = {
|
|
|
843
843
|
id: 'event-response',
|
|
844
844
|
name: '',
|
|
845
845
|
ref: '',
|
|
846
|
-
app: 'event-response:0.0.
|
|
846
|
+
app: 'event-response:0.0.3',
|
|
847
847
|
runsIn: 'browser',
|
|
848
848
|
talksTo: [
|
|
849
849
|
{ member: 'disaster-assessment', over: 'a2a' },
|
|
@@ -863,7 +863,7 @@ export const DISASTER_ASSESSMENT_TEAM_SPEC_0_0_1 = {
|
|
|
863
863
|
id: 'disaster-assessment',
|
|
864
864
|
name: '',
|
|
865
865
|
ref: '',
|
|
866
|
-
app: 'disaster-assessment:0.0.
|
|
866
|
+
app: 'disaster-assessment:0.0.2',
|
|
867
867
|
runsIn: 'runtime',
|
|
868
868
|
role: 'contributor',
|
|
869
869
|
goal: `Estimate the area the event affected and the extent of the damage from the imagery before and after it, over A2A.`,
|
|
@@ -879,7 +879,7 @@ export const DISASTER_ASSESSMENT_TEAM_SPEC_0_0_1 = {
|
|
|
879
879
|
id: 'change-detection',
|
|
880
880
|
name: '',
|
|
881
881
|
ref: '',
|
|
882
|
-
app: 'change-detection:0.0.
|
|
882
|
+
app: 'change-detection:0.0.2',
|
|
883
883
|
runsIn: 'runtime',
|
|
884
884
|
role: 'contributor',
|
|
885
885
|
goal: `Find what changed on the ground between the two dates from the imagery, over A2A.`,
|
|
@@ -1133,7 +1133,7 @@ export const MONTH_END_CLOSE_TEAM_SPEC_0_0_1 = {
|
|
|
1133
1133
|
supervisor: {
|
|
1134
1134
|
name: 'Month-end Close',
|
|
1135
1135
|
ref: '',
|
|
1136
|
-
app: 'month-end-close:0.0.
|
|
1136
|
+
app: 'month-end-close:0.0.2',
|
|
1137
1137
|
model: '',
|
|
1138
1138
|
goal: ``,
|
|
1139
1139
|
instructions: ``,
|
|
@@ -1169,7 +1169,7 @@ export const MONTH_END_CLOSE_TEAM_SPEC_0_0_1 = {
|
|
|
1169
1169
|
id: 'month-end-close',
|
|
1170
1170
|
name: '',
|
|
1171
1171
|
ref: '',
|
|
1172
|
-
app: 'month-end-close:0.0.
|
|
1172
|
+
app: 'month-end-close:0.0.2',
|
|
1173
1173
|
runsIn: 'runtime',
|
|
1174
1174
|
role: 'initiator',
|
|
1175
1175
|
goal: `Take the person's request, read the period's books, and report where the close stands: what is done, what is to book, what is still open.`,
|
|
@@ -1735,7 +1735,7 @@ export const SALES_AND_ACCOUNTING_TEAM_SPEC_0_0_1 = {
|
|
|
1735
1735
|
supervisor: {
|
|
1736
1736
|
name: 'Sales',
|
|
1737
1737
|
ref: '',
|
|
1738
|
-
app: 'sales:0.0.
|
|
1738
|
+
app: 'sales:0.0.3',
|
|
1739
1739
|
model: '',
|
|
1740
1740
|
goal: ``,
|
|
1741
1741
|
instructions: ``,
|
|
@@ -1774,7 +1774,7 @@ export const SALES_AND_ACCOUNTING_TEAM_SPEC_0_0_1 = {
|
|
|
1774
1774
|
id: 'sales',
|
|
1775
1775
|
name: '',
|
|
1776
1776
|
ref: '',
|
|
1777
|
-
app: 'sales:0.0.
|
|
1777
|
+
app: 'sales:0.0.3',
|
|
1778
1778
|
runsIn: 'browser',
|
|
1779
1779
|
talksTo: [{ member: 'accounting', over: 'a2a' }],
|
|
1780
1780
|
role: 'initiator',
|
|
@@ -1791,7 +1791,7 @@ export const SALES_AND_ACCOUNTING_TEAM_SPEC_0_0_1 = {
|
|
|
1791
1791
|
id: 'accounting',
|
|
1792
1792
|
name: '',
|
|
1793
1793
|
ref: '',
|
|
1794
|
-
app: 'accounting:0.0.
|
|
1794
|
+
app: 'accounting:0.0.2',
|
|
1795
1795
|
runsIn: 'runtime',
|
|
1796
1796
|
role: 'contributor',
|
|
1797
1797
|
goal: `Answer report requests from the Odoo books, read only, over A2A.`,
|
package/lib/specs/voices.d.ts
CHANGED
|
@@ -45,6 +45,10 @@ export interface SpeechModelSpec {
|
|
|
45
45
|
id: string;
|
|
46
46
|
version: string;
|
|
47
47
|
name: string;
|
|
48
|
+
/** What it is for, in a sentence or two. */
|
|
49
|
+
description: string;
|
|
50
|
+
/** Who published it: the folder Datalayer's storage keeps it under, `<provider>/<id>/<path>`. */
|
|
51
|
+
provider: string;
|
|
48
52
|
task: 'stt' | 'tts' | 'vad';
|
|
49
53
|
engine: string;
|
|
50
54
|
dtype: string;
|
package/lib/specs/voices.js
CHANGED
|
@@ -72,6 +72,8 @@ export const SPEECH_MODEL_CATALOGUE = {
|
|
|
72
72
|
id: 'kokoro-82m',
|
|
73
73
|
version: '0.0.1',
|
|
74
74
|
name: 'Kokoro 82M',
|
|
75
|
+
description: "Text to speech on Datalayer's servers, on CPU: hexgrad's Kokoro-82M v1.0 exported to ONNX, in full precision, with the voices file that holds its 54 voices, run by kokoro-onnx. Its phonemes come from eSpeak NG (GPL-3.0), which runs on the server and is never sent to a browser. Full precision, not the 8-bit export: on a 16-core CPU the 8-bit one speaks slower than real time (6 s for 3.9 s of speech), this one about four times faster than real time (1 s).",
|
|
76
|
+
provider: 'hexgrad',
|
|
75
77
|
task: 'tts',
|
|
76
78
|
engine: 'kokoro-onnx',
|
|
77
79
|
dtype: 'fp32',
|
|
@@ -102,6 +104,8 @@ export const SPEECH_MODEL_CATALOGUE = {
|
|
|
102
104
|
id: 'moonshine-base-en',
|
|
103
105
|
version: '0.0.1',
|
|
104
106
|
name: 'Moonshine Base (English)',
|
|
107
|
+
description: "Speech to text in the browser, in English: Useful Sensors' Moonshine Base (61M parameters), its ONNX export quantized to 8 bits, run by transformers.js. One of the English models whose weights are MIT; the legacy non-English Moonshine models are under a non-commercial licence and are not listed.",
|
|
108
|
+
provider: 'usefulsensors',
|
|
105
109
|
task: 'stt',
|
|
106
110
|
engine: 'transformers.js',
|
|
107
111
|
dtype: 'q8',
|
|
@@ -162,6 +166,8 @@ export const SPEECH_MODEL_CATALOGUE = {
|
|
|
162
166
|
id: 'moonshine-tiny-en',
|
|
163
167
|
version: '0.0.1',
|
|
164
168
|
name: 'Moonshine Tiny (English)',
|
|
169
|
+
description: "Speech to text in the browser, in English: Useful Sensors' Moonshine Tiny (27M parameters), its ONNX export quantized to 8 bits, run by transformers.js. One of the English models whose weights are MIT; the legacy non-English Moonshine models are under a non-commercial licence and are not listed.",
|
|
170
|
+
provider: 'usefulsensors',
|
|
165
171
|
task: 'stt',
|
|
166
172
|
engine: 'transformers.js',
|
|
167
173
|
dtype: 'q8',
|
|
@@ -222,6 +228,8 @@ export const SPEECH_MODEL_CATALOGUE = {
|
|
|
222
228
|
id: 'silero-vad',
|
|
223
229
|
version: '0.0.1',
|
|
224
230
|
name: 'Silero VAD',
|
|
231
|
+
description: 'Where speech starts and ends in what the microphone heard, in the browser: Silero VAD (about 2 MB), the build @ricky0123/vad-web 0.0.31 ships and runs on onnxruntime-web. Push-to-talk keeps the speech it finds and drops the rest.',
|
|
232
|
+
provider: 'snakers4',
|
|
225
233
|
task: 'vad',
|
|
226
234
|
engine: 'vad-web',
|
|
227
235
|
dtype: 'fp32',
|
|
@@ -247,6 +255,8 @@ export const SPEECH_MODEL_CATALOGUE = {
|
|
|
247
255
|
id: 'whisper-base',
|
|
248
256
|
version: '0.0.1',
|
|
249
257
|
name: 'Whisper Base',
|
|
258
|
+
description: "Speech to text in the browser for the languages Moonshine's MIT models do not speak, French first: OpenAI's Whisper base (74M parameters, 99 languages), its ONNX export quantized to 8 bits, run by transformers.js. A clip at a time.",
|
|
259
|
+
provider: 'openai',
|
|
250
260
|
task: 'stt',
|
|
251
261
|
engine: 'transformers.js',
|
|
252
262
|
dtype: 'q8',
|
|
@@ -1483,6 +1483,11 @@ export interface Agentspec {
|
|
|
1483
1483
|
parameters?: Record<string, any>;
|
|
1484
1484
|
/** Subagent delegation configuration. */
|
|
1485
1485
|
subagents?: SubAgentsConfig;
|
|
1486
|
+
/**
|
|
1487
|
+
* Its voice, for an agent that is not an application (VOICE.md VO-41):
|
|
1488
|
+
* the fields an Appspec says under `interface.voice`; absent when unsaid.
|
|
1489
|
+
*/
|
|
1490
|
+
voice?: AppVoiceSpec;
|
|
1486
1491
|
}
|
|
1487
1492
|
/**
|
|
1488
1493
|
* Where a subagent reached over A2A lives, or how to launch it.
|
package/lib/types/chat.d.ts
CHANGED
|
@@ -1004,6 +1004,12 @@ export interface ChatBaseProps {
|
|
|
1004
1004
|
voiceSpeaking?: boolean;
|
|
1005
1005
|
/** Stops the agent's voice: the composer's *Stop speaking*, and the microphone opening (VO-13). */
|
|
1006
1006
|
onStopSpeaking?: () => void;
|
|
1007
|
+
/**
|
|
1008
|
+
* Reads an answer aloud (VOICE.md VO-21): given, each answer the agent has
|
|
1009
|
+
* finished writing has a *Read aloud* under it, which calls it with the
|
|
1010
|
+
* answer's text.
|
|
1011
|
+
*/
|
|
1012
|
+
onReadAloud?: (answer: string) => void;
|
|
1007
1013
|
/**
|
|
1008
1014
|
* Show the information icon in the header.
|
|
1009
1015
|
* When clicked, fires onInformationClick.
|
package/lib/types/protocol.d.ts
CHANGED
|
@@ -59,6 +59,23 @@ export interface ProtocolConfig {
|
|
|
59
59
|
* never the bytes. Set for an application's agent.
|
|
60
60
|
*/
|
|
61
61
|
uiFiles?: string;
|
|
62
|
+
/**
|
|
63
|
+
* The application's sessions (`…/api/v1/apps/sessions`), each AG-UI thread
|
|
64
|
+
* one of them: Stop is its session's (`{appSessions}/{thread}/stop`). Set
|
|
65
|
+
* for an application's agent. The runtime's generic `/ag-ui/terminate`
|
|
66
|
+
* never knew a session's thread, and a deployment's runtime does not
|
|
67
|
+
* answer it (OwnRoutesOnly).
|
|
68
|
+
*/
|
|
69
|
+
appSessions?: string;
|
|
70
|
+
/**
|
|
71
|
+
* The runtime answers only the application's own routes (OwnRoutesOnly,
|
|
72
|
+
* PAP_DATALAYER's release gates): it serves a deployment — kept always on,
|
|
73
|
+
* launched by a hosted page for it — or is the visitors' runtime. Nothing
|
|
74
|
+
* outside them is opened: not the monitoring stream (an application's
|
|
75
|
+
* session asks its approvals in the conversation, over `uiSocket`), not
|
|
76
|
+
* the sandbox's socket, nor any runtime-wide setting. Needs `appSessions`.
|
|
77
|
+
*/
|
|
78
|
+
ownRoutesOnly?: boolean;
|
|
62
79
|
/** Additional protocol options */
|
|
63
80
|
options?: Record<string, unknown>;
|
|
64
81
|
}
|
package/lib/utils/utils.js
CHANGED
|
@@ -195,7 +195,14 @@ export function createProtocolAdapter(config) {
|
|
|
195
195
|
};
|
|
196
196
|
switch (config.type) {
|
|
197
197
|
case 'ag-ui':
|
|
198
|
-
|
|
198
|
+
if (config.ownRoutesOnly && !config.appSessions) {
|
|
199
|
+
// Its runtime answers no generic Stop: an application's own or none.
|
|
200
|
+
throw new Error('A chat whose runtime answers only the application’s own routes is an application’s: it needs its sessions (appSessions).');
|
|
201
|
+
}
|
|
202
|
+
return new AGUIAdapter({
|
|
203
|
+
...adapterConfig,
|
|
204
|
+
...(config.appSessions ? { appSessions: config.appSessions } : {}),
|
|
205
|
+
});
|
|
199
206
|
case 'a2a':
|
|
200
207
|
return new A2AAdapter(adapterConfig);
|
|
201
208
|
case 'vercel-ai':
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* *Read aloud*, under an answer (VOICE.md VO-21, `on_request`): the answer,
|
|
3
|
+
* read as plain words and cut into sentences, given to the speaker — what it
|
|
4
|
+
* was saying stops first. The press is the gesture a browser plays sound
|
|
5
|
+
* after.
|
|
6
|
+
*
|
|
7
|
+
* @module voice/ReadAloud
|
|
8
|
+
*/
|
|
9
|
+
import type { JSX } from 'react';
|
|
10
|
+
import type { SentenceSink } from './useSpokenAnswers';
|
|
11
|
+
/** What *Read aloud* gives an answer to: a sink a press may unlock. */
|
|
12
|
+
export interface ReadingSink extends SentenceSink {
|
|
13
|
+
unlock?: () => void;
|
|
14
|
+
}
|
|
15
|
+
/** An answer read from its start: what was being said stops, its sentences follow. */
|
|
16
|
+
export declare function readAloud(sink: ReadingSink, answer: string): string[];
|
|
17
|
+
/** A message, as far as *Read aloud* reads it. */
|
|
18
|
+
export interface ReadableMessage {
|
|
19
|
+
id: string;
|
|
20
|
+
role: string;
|
|
21
|
+
live?: boolean;
|
|
22
|
+
note?: unknown;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Whether a message has *Read aloud* under it: an answer of the agent with
|
|
26
|
+
* words, finished — not live, and not the one the agent is writing now.
|
|
27
|
+
*/
|
|
28
|
+
export declare function readsAloud(message: ReadableMessage, text: string, writingId: string | undefined): boolean;
|
|
29
|
+
export interface ReadAloudProps {
|
|
30
|
+
/** Reads the answer aloud. */
|
|
31
|
+
onRead: () => void;
|
|
32
|
+
}
|
|
33
|
+
/** The button under an answer. */
|
|
34
|
+
export declare function ReadAloud({ onRead }: ReadAloudProps): JSX.Element;
|
|
35
|
+
export default ReadAloud;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { IconButton, Tooltip } from '@primer/react';
|
|
3
|
+
import { UnmuteIcon } from '@primer/octicons-react';
|
|
4
|
+
import { SentenceCutter } from './sentences';
|
|
5
|
+
/** An answer read from its start: what was being said stops, its sentences follow. */
|
|
6
|
+
export function readAloud(sink, answer) {
|
|
7
|
+
sink.unlock?.();
|
|
8
|
+
sink.stop();
|
|
9
|
+
const cutter = new SentenceCutter();
|
|
10
|
+
const sentences = [...cutter.feed(answer), ...cutter.end(answer)];
|
|
11
|
+
sentences.forEach(sentence => sink.say(sentence));
|
|
12
|
+
return sentences;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Whether a message has *Read aloud* under it: an answer of the agent with
|
|
16
|
+
* words, finished — not live, and not the one the agent is writing now.
|
|
17
|
+
*/
|
|
18
|
+
export function readsAloud(message, text, writingId) {
|
|
19
|
+
return (message.role === 'assistant' &&
|
|
20
|
+
!message.live &&
|
|
21
|
+
!message.note &&
|
|
22
|
+
message.id !== writingId &&
|
|
23
|
+
text.trim().length > 0);
|
|
24
|
+
}
|
|
25
|
+
/** The button under an answer. */
|
|
26
|
+
export function ReadAloud({ onRead }) {
|
|
27
|
+
return (_jsx(Tooltip, { text: "Read aloud", direction: "n", children: _jsx(IconButton, { "data-read-aloud": "", icon: UnmuteIcon, "aria-label": "Read aloud", size: "small", variant: "invisible", onClick: onRead }) }));
|
|
28
|
+
}
|
|
29
|
+
export default ReadAloud;
|
package/lib/voice/hearing.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* @module voice/hearing
|
|
13
13
|
*/
|
|
14
14
|
import { SPEECH_MODEL_CATALOGUE, transcriberFor } from '../specs/voices';
|
|
15
|
-
import { pinnedBytes, pinnedFetch, downloadSize } from './pinned';
|
|
15
|
+
import { pinnedBytes, pinnedFetch, downloadSize, modelFolder } from './pinned';
|
|
16
16
|
import { HEARING_RATE } from './capture';
|
|
17
17
|
/** A language no device model hears. */
|
|
18
18
|
export class NotHeardHere extends Error {
|
|
@@ -84,7 +84,9 @@ export class DeviceHearing {
|
|
|
84
84
|
}
|
|
85
85
|
const total = downloadSize(model.id);
|
|
86
86
|
const loaded = new Map();
|
|
87
|
-
const recognizer = await transformers.pipeline('automatic-speech-recognition',
|
|
87
|
+
const recognizer = await transformers.pipeline('automatic-speech-recognition',
|
|
88
|
+
// Read at `<origin>/<provider>/<model id>/`, as the store keeps it.
|
|
89
|
+
modelFolder(model.id), {
|
|
88
90
|
dtype: model.dtype,
|
|
89
91
|
device: 'wasm',
|
|
90
92
|
progress_callback: (info) => {
|
|
@@ -106,7 +108,7 @@ export class DeviceHearing {
|
|
|
106
108
|
activity() {
|
|
107
109
|
if (!this.vad) {
|
|
108
110
|
const file = SPEECH_MODEL_CATALOGUE['silero-vad'].files[0].path;
|
|
109
|
-
const url = `${this.modelsUrl.replace(/\/+$/, '')}
|
|
111
|
+
const url = `${this.modelsUrl.replace(/\/+$/, '')}/${modelFolder('silero-vad')}/${file}`;
|
|
110
112
|
this.vad = this.engines.vad().then(module => module.NonRealTimeVAD.new({
|
|
111
113
|
modelURL: url,
|
|
112
114
|
modelFetcher: path => pinnedBytes(this.modelsUrl, path),
|
package/lib/voice/index.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export * from './consent';
|
|
|
18
18
|
export * from './useSpokenAnswers';
|
|
19
19
|
export { VoiceInput } from './VoiceInput';
|
|
20
20
|
export type { VoiceInputProps, ListeningState } from './VoiceInput';
|
|
21
|
+
export { ReadAloud, readAloud, readsAloud } from './ReadAloud';
|
|
22
|
+
export type { ReadAloudProps, ReadableMessage, ReadingSink } from './ReadAloud';
|
|
21
23
|
/**
|
|
22
24
|
* A chat's voice: what a host gives `ChatBase` and `ChatFloating` to let a
|
|
23
25
|
* person talk to the agent and hear it — the Appspec's `interface.voice`,
|
|
@@ -28,8 +30,11 @@ export interface ChatVoice {
|
|
|
28
30
|
language: string;
|
|
29
31
|
/** `push_to_talk`, or `off`. Hands-free is Phase V3. */
|
|
30
32
|
input: 'off' | 'push_to_talk';
|
|
31
|
-
/**
|
|
32
|
-
|
|
33
|
+
/**
|
|
34
|
+
* When answers are heard: `always`, as they are written; `on_request`, a
|
|
35
|
+
* *Read aloud* under each answer (VO-21); or `off`.
|
|
36
|
+
*/
|
|
37
|
+
output: 'off' | 'on_request' | 'always';
|
|
33
38
|
/** The voice of the catalogue answers are spoken with. */
|
|
34
39
|
voice: string;
|
|
35
40
|
/** Datalayer's origin for the browser's models: the pinned store. */
|
package/lib/voice/index.js
CHANGED
package/lib/voice/pinned.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The browser's models, from Datalayer's origin and as pinned (VOICE.md
|
|
3
3
|
* VO-49, VO-03): every file a model is made of is fetched from the models'
|
|
4
|
-
* origin, laid out as the pinned store is (`<model id>/<path>`), and its
|
|
4
|
+
* origin, laid out as the pinned store is (`<provider>/<model id>/<path>`), and its
|
|
5
5
|
* SHA-256 checked against the catalogue before anything reads it. A file
|
|
6
6
|
* that is not the one pinned is refused; nothing is asked of another origin.
|
|
7
7
|
*
|
|
@@ -24,5 +24,7 @@ export declare function sha256Hex(bytes: ArrayBuffer): Promise<string>;
|
|
|
24
24
|
export declare function pinnedFetch(base: string, fetcher?: typeof fetch): (input: string | URL, init?: RequestInit) => Promise<Response>;
|
|
25
25
|
/** A model's file as bytes, checked against its pin. */
|
|
26
26
|
export declare function pinnedBytes(base: string, url: string, fetcher?: typeof fetch): Promise<ArrayBuffer>;
|
|
27
|
+
/** Where a model's files are, under the models' origin: `<provider>/<model id>` (VO-48). */
|
|
28
|
+
export declare function modelFolder(modelId: string): string;
|
|
27
29
|
/** What a first use downloads for a model, in bytes. */
|
|
28
30
|
export declare function downloadSize(modelId: string): number;
|
package/lib/voice/pinned.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* The browser's models, from Datalayer's origin and as pinned (VOICE.md
|
|
7
7
|
* VO-49, VO-03): every file a model is made of is fetched from the models'
|
|
8
|
-
* origin, laid out as the pinned store is (`<model id>/<path>`), and its
|
|
8
|
+
* origin, laid out as the pinned store is (`<provider>/<model id>/<path>`), and its
|
|
9
9
|
* SHA-256 checked against the catalogue before anything reads it. A file
|
|
10
10
|
* that is not the one pinned is refused; nothing is asked of another origin.
|
|
11
11
|
*
|
|
@@ -21,9 +21,15 @@ export function pinOf(base, url) {
|
|
|
21
21
|
if (!url.startsWith(root)) {
|
|
22
22
|
return undefined;
|
|
23
23
|
}
|
|
24
|
-
const [model, ...rest] = url
|
|
24
|
+
const [provider, model, ...rest] = url
|
|
25
|
+
.slice(root.length)
|
|
26
|
+
.split('?')[0]
|
|
27
|
+
.split('/');
|
|
25
28
|
const path = rest.join('/');
|
|
26
|
-
|
|
29
|
+
const spec = SPEECH_MODEL_CATALOGUE[model];
|
|
30
|
+
return spec?.provider === provider
|
|
31
|
+
? spec.files.find(file => file.path === path)
|
|
32
|
+
: undefined;
|
|
27
33
|
}
|
|
28
34
|
/** The SHA-256 of some bytes, in hex. */
|
|
29
35
|
export async function sha256Hex(bytes) {
|
|
@@ -69,6 +75,14 @@ export async function pinnedBytes(base, url, fetcher) {
|
|
|
69
75
|
}
|
|
70
76
|
return answered.arrayBuffer();
|
|
71
77
|
}
|
|
78
|
+
/** Where a model's files are, under the models' origin: `<provider>/<model id>` (VO-48). */
|
|
79
|
+
export function modelFolder(modelId) {
|
|
80
|
+
const model = SPEECH_MODEL_CATALOGUE[modelId];
|
|
81
|
+
if (!model) {
|
|
82
|
+
throw new PinRefused(`The voice catalogue has no speech model ${modelId}.`);
|
|
83
|
+
}
|
|
84
|
+
return `${model.provider}/${model.id}`;
|
|
85
|
+
}
|
|
72
86
|
/** What a first use downloads for a model, in bytes. */
|
|
73
87
|
export function downloadSize(modelId) {
|
|
74
88
|
return (SPEECH_MODEL_CATALOGUE[modelId]?.files ?? []).reduce((total, file) => total + file.size, 0);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datalayer/agent-runtimes",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.19",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
".",
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"@datalayer/lexical-loro": "^1.0.6",
|
|
161
161
|
"@datalayer/primer-addons": "^1.0.39",
|
|
162
162
|
"@datalayer/primer-rjsf": "^1.0.3",
|
|
163
|
-
"@datalayer/personal-agent-protocol": "^0.
|
|
163
|
+
"@datalayer/personal-agent-protocol": "^0.24.0",
|
|
164
164
|
"@datalayer/reactor": "^1.3.0",
|
|
165
165
|
"@datalayer/reactor-commands": "^1.0.4",
|
|
166
166
|
"@datalayer/reactor-manager": "^1.0.4",
|
|
@@ -304,9 +304,33 @@ def load_yaml_specs(specs_dir: Path) -> List[tuple[str, Dict[str, Any]]]:
|
|
|
304
304
|
|
|
305
305
|
check_model_additionals(resolved, load_model_ids(specs_dir))
|
|
306
306
|
check_protocols(resolved, load_protocol_ids(specs_dir))
|
|
307
|
+
check_voices(resolved)
|
|
307
308
|
return resolved
|
|
308
309
|
|
|
309
310
|
|
|
311
|
+
def check_voices(specs: List[tuple[str, Dict[str, Any]]]) -> None:
|
|
312
|
+
"""Refuse an agent whose `voice` is not an `interface.voice` block of the voice catalogue (VOICE.md VO-41)."""
|
|
313
|
+
from agentspecs.apps import agent_voice_problems
|
|
314
|
+
|
|
315
|
+
problems = [
|
|
316
|
+
problem
|
|
317
|
+
for _, spec in specs
|
|
318
|
+
if "voice" in spec
|
|
319
|
+
for problem in agent_voice_problems(str(spec.get("id")), spec["voice"])
|
|
320
|
+
]
|
|
321
|
+
if problems:
|
|
322
|
+
raise SystemExit("\n".join(problems))
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def voice_of(spec: Dict[str, Any]) -> Dict[str, Any] | None:
|
|
326
|
+
"""An agent's voice with every field said, as the Appspec's block reads it; None when unsaid."""
|
|
327
|
+
if "voice" not in spec:
|
|
328
|
+
return None
|
|
329
|
+
from agentspecs.apps import AppVoice
|
|
330
|
+
|
|
331
|
+
return AppVoice(**spec["voice"]).model_dump(mode="json")
|
|
332
|
+
|
|
333
|
+
|
|
310
334
|
def load_protocol_ids(specs_dir: Path) -> set[str]:
|
|
311
335
|
"""Every id of the protocols catalogue (`agentspecs/protocols`, AGENT_PROTOCOLS PS-01)."""
|
|
312
336
|
ids: set[str] = set()
|
|
@@ -525,6 +549,10 @@ from agent_runtimes.types import (
|
|
|
525
549
|
if model_additionals
|
|
526
550
|
else ""
|
|
527
551
|
)
|
|
552
|
+
voice = voice_of(spec)
|
|
553
|
+
voice_py_line = (
|
|
554
|
+
f" voice={_fmt_py_literal(voice)},\n" if voice is not None else ""
|
|
555
|
+
)
|
|
528
556
|
inference_provider = spec.get("inference_provider")
|
|
529
557
|
inference_provider_str = (
|
|
530
558
|
f'"{inference_provider}"' if inference_provider else "None"
|
|
@@ -687,7 +715,7 @@ from agent_runtimes.types import (
|
|
|
687
715
|
tool_hooks={_fmt_py_literal(tool_hooks_val)},
|
|
688
716
|
parameters={_fmt_py_literal(parameters_val)},
|
|
689
717
|
subagents={subagents_str},
|
|
690
|
-
)
|
|
718
|
+
{voice_py_line})
|
|
691
719
|
|
|
692
720
|
'''
|
|
693
721
|
|
|
@@ -1154,6 +1182,10 @@ const FRONTEND_TOOL_MAP: Record<string, any> = {
|
|
|
1154
1182
|
if model_additionals
|
|
1155
1183
|
else ""
|
|
1156
1184
|
)
|
|
1185
|
+
voice = voice_of(spec)
|
|
1186
|
+
voice_ts_line = (
|
|
1187
|
+
f" voice: {_fmt_ts_literal(voice)},\n" if voice is not None else ""
|
|
1188
|
+
)
|
|
1157
1189
|
inference_provider = spec.get("inference_provider")
|
|
1158
1190
|
inference_provider_ts = (
|
|
1159
1191
|
f"'{inference_provider}'" if inference_provider else "undefined"
|
|
@@ -1262,7 +1294,7 @@ const FRONTEND_TOOL_MAP: Record<string, any> = {
|
|
|
1262
1294
|
toolHooks: {_fmt_ts_literal(tool_hooks_val)},
|
|
1263
1295
|
parameters: {_fmt_ts_literal(parameters_val)},
|
|
1264
1296
|
subagents: {subagents_ts},
|
|
1265
|
-
}};
|
|
1297
|
+
{voice_ts_line}}};
|
|
1266
1298
|
|
|
1267
1299
|
"""
|
|
1268
1300
|
|
|
@@ -45,6 +45,8 @@ def _model(model: Any) -> dict[str, Any]:
|
|
|
45
45
|
"id": model.id,
|
|
46
46
|
"version": model.version,
|
|
47
47
|
"name": model.name,
|
|
48
|
+
"description": " ".join(model.description.split()),
|
|
49
|
+
"provider": model.provider,
|
|
48
50
|
"task": model.task,
|
|
49
51
|
"engine": model.engine,
|
|
50
52
|
"dtype": model.dtype,
|
|
@@ -120,7 +122,8 @@ def generate_python_code(
|
|
|
120
122
|
" base = (language or '').strip()",
|
|
121
123
|
" exact = [v for v in VOICE_CATALOGUE.values() if base in v['languages']]",
|
|
122
124
|
" near = [v for v in VOICE_CATALOGUE.values() if voice_speaks(v, base.split('-')[0])]",
|
|
123
|
-
"
|
|
125
|
+
" found = exact or near",
|
|
126
|
+
" return found[0] if found else None",
|
|
124
127
|
"",
|
|
125
128
|
]
|
|
126
129
|
)
|
|
@@ -191,6 +194,10 @@ def generate_typescript_code(
|
|
|
191
194
|
" id: string;",
|
|
192
195
|
" version: string;",
|
|
193
196
|
" name: string;",
|
|
197
|
+
" /** What it is for, in a sentence or two. */",
|
|
198
|
+
" description: string;",
|
|
199
|
+
" /** Who published it: the folder Datalayer's storage keeps it under, `<provider>/<id>/<path>`. */",
|
|
200
|
+
" provider: string;",
|
|
194
201
|
" task: 'stt' | 'tts' | 'vad';",
|
|
195
202
|
" engine: string;",
|
|
196
203
|
" dtype: string;",
|
package/scripts/voice/measure.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
"""Measure the speech models on the recorded fixtures (VOICE.md VO-05, VO-51, VO-52).
|
|
6
6
|
|
|
7
|
-
python scripts/voice/measure.py --store ~/.cache/
|
|
7
|
+
python scripts/voice/measure.py --store ~/.cache/voice-work/store
|
|
8
8
|
|
|
9
9
|
Writes ``tests/voice/measured/*.json``, which ``test_voice_wer.py`` checks
|
|
10
10
|
against ``tests/voice/baselines.json``:
|
|
@@ -136,7 +136,7 @@ def main() -> int:
|
|
|
136
136
|
print(f"{model['id']} on {len(clips)} {language} clips", flush=True)
|
|
137
137
|
heard = transcribe(
|
|
138
138
|
args.store,
|
|
139
|
-
model[
|
|
139
|
+
f"{model['provider']}/{model['id']}",
|
|
140
140
|
language,
|
|
141
141
|
[wavs[c["id"]] for c in clips],
|
|
142
142
|
env,
|
|
@@ -168,7 +168,8 @@ def main() -> int:
|
|
|
168
168
|
# --- text to speech, and what the device hears of it -----------------------
|
|
169
169
|
from kokoro_onnx import Kokoro
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
kokoro_spec = voices.SPEECH_MODEL_CATALOGUE["kokoro-82m"]
|
|
172
|
+
kokoro_dir = args.store / kokoro_spec["provider"] / "kokoro-82m"
|
|
172
173
|
files = {
|
|
173
174
|
item["path"]
|
|
174
175
|
for item in voices.SPEECH_MODEL_CATALOGUE["kokoro-82m"]["files"]
|
|
@@ -206,7 +207,11 @@ def main() -> int:
|
|
|
206
207
|
]
|
|
207
208
|
items = [item for item in spoken if item["language"] == base]
|
|
208
209
|
heard = transcribe(
|
|
209
|
-
args.store,
|
|
210
|
+
args.store,
|
|
211
|
+
f"{model['provider']}/{model['id']}",
|
|
212
|
+
base,
|
|
213
|
+
[item["wav"] for item in items],
|
|
214
|
+
env,
|
|
210
215
|
)
|
|
211
216
|
for item, result in zip(items, heard["results"]):
|
|
212
217
|
round_trips.append(
|