@shaykec/bridge 0.4.19 → 0.4.21
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/README.md +2 -2
- package/canvas-dist/assets/{_basePickBy-BOTBlJNd.js → _basePickBy-BovdgFIW.js} +1 -1
- package/canvas-dist/assets/_basePickBy-BtkHe2u_.js +1 -0
- package/canvas-dist/assets/_basePickBy-C0936578.js +1 -0
- package/canvas-dist/assets/_basePickBy-CE2Qvuh7.js +1 -0
- package/canvas-dist/assets/_basePickBy-DV6sX4CG.js +1 -0
- package/canvas-dist/assets/_basePickBy-DZX6ZNMT.js +1 -0
- package/canvas-dist/assets/{_baseUniq-EF6Y2_Wm.js → _baseUniq-B7dN28TM.js} +1 -1
- package/canvas-dist/assets/_baseUniq-Cl23fCdR.js +1 -0
- package/canvas-dist/assets/_baseUniq-CojWFw7B.js +1 -0
- package/canvas-dist/assets/_baseUniq-DA640BJl.js +1 -0
- package/canvas-dist/assets/_baseUniq-Ds-62CCj.js +1 -0
- package/canvas-dist/assets/_baseUniq-KG7SRw9H.js +1 -0
- package/canvas-dist/assets/{arc-C_vIirh2.js → arc-7E9FFKlC.js} +1 -1
- package/canvas-dist/assets/arc-BSMfRZtt.js +1 -0
- package/canvas-dist/assets/arc-C6nT-koR.js +1 -0
- package/canvas-dist/assets/arc-D_fOnjmo.js +1 -0
- package/canvas-dist/assets/arc-Khfvgkr3.js +1 -0
- package/canvas-dist/assets/arc-ieS-i42x.js +1 -0
- package/canvas-dist/assets/{architectureDiagram-VXUJARFQ-EvM6tQ7I.js → architectureDiagram-VXUJARFQ-DF4t6GQD.js} +1 -1
- package/canvas-dist/assets/architectureDiagram-VXUJARFQ-DXgSlsio.js +36 -0
- package/canvas-dist/assets/architectureDiagram-VXUJARFQ-DiomxPB4.js +36 -0
- package/canvas-dist/assets/architectureDiagram-VXUJARFQ-DnFaxvXD.js +36 -0
- package/canvas-dist/assets/architectureDiagram-VXUJARFQ-Dt38C0LJ.js +36 -0
- package/canvas-dist/assets/architectureDiagram-VXUJARFQ-egbtMwua.js +36 -0
- package/canvas-dist/assets/{blockDiagram-VD42YOAC-B_rbZyqc.js → blockDiagram-VD42YOAC-CUNKQd-b.js} +1 -1
- package/canvas-dist/assets/blockDiagram-VD42YOAC-D-NiLXxd.js +122 -0
- package/canvas-dist/assets/blockDiagram-VD42YOAC-Dx6Dh9gg.js +122 -0
- package/canvas-dist/assets/blockDiagram-VD42YOAC-_r-PmlQy.js +122 -0
- package/canvas-dist/assets/blockDiagram-VD42YOAC-bvYKZLMc.js +122 -0
- package/canvas-dist/assets/blockDiagram-VD42YOAC-l85QT9Ig.js +122 -0
- package/canvas-dist/assets/{c4Diagram-YG6GDRKO-J9PHecY3.js → c4Diagram-YG6GDRKO-BWKCTyQi.js} +1 -1
- package/canvas-dist/assets/c4Diagram-YG6GDRKO-CbXs2xzC.js +10 -0
- package/canvas-dist/assets/c4Diagram-YG6GDRKO-CjiS-GNK.js +10 -0
- package/canvas-dist/assets/c4Diagram-YG6GDRKO-D7SnLlHp.js +10 -0
- package/canvas-dist/assets/c4Diagram-YG6GDRKO-RTTCSVf2.js +10 -0
- package/canvas-dist/assets/c4Diagram-YG6GDRKO-yvqJ_AqX.js +10 -0
- package/canvas-dist/assets/channel-CSXq7GP6.js +1 -0
- package/canvas-dist/assets/channel-CvujjGiJ.js +1 -0
- package/canvas-dist/assets/channel-D959Iony.js +1 -0
- package/canvas-dist/assets/channel-DOSwCnrB.js +1 -0
- package/canvas-dist/assets/channel-sw61LzxF.js +1 -0
- package/canvas-dist/assets/channel-vZVnNhOK.js +1 -0
- package/canvas-dist/assets/{chunk-4BX2VUAB-DjcN96Mk.js → chunk-4BX2VUAB-BBjuAwXr.js} +1 -1
- package/canvas-dist/assets/chunk-4BX2VUAB-BXRNyucU.js +1 -0
- package/canvas-dist/assets/chunk-4BX2VUAB-Bgq5Z77T.js +1 -0
- package/canvas-dist/assets/chunk-4BX2VUAB-BuoMCMCr.js +1 -0
- package/canvas-dist/assets/chunk-4BX2VUAB-COD5n7vg.js +1 -0
- package/canvas-dist/assets/chunk-4BX2VUAB-K8DepKJO.js +1 -0
- package/canvas-dist/assets/{chunk-55IACEB6-CTdcUQSV.js → chunk-55IACEB6-Bic_bMrQ.js} +1 -1
- package/canvas-dist/assets/chunk-55IACEB6-DEy2QUDq.js +1 -0
- package/canvas-dist/assets/chunk-55IACEB6-Dcgbmfzg.js +1 -0
- package/canvas-dist/assets/chunk-55IACEB6-DfmuNm_E.js +1 -0
- package/canvas-dist/assets/chunk-55IACEB6-DlQRcczm.js +1 -0
- package/canvas-dist/assets/chunk-55IACEB6-p2qMY-fm.js +1 -0
- package/canvas-dist/assets/{chunk-B4BG7PRW-Dcov7eRi.js → chunk-B4BG7PRW-BpbyxBP2.js} +1 -1
- package/canvas-dist/assets/chunk-B4BG7PRW-CCPqvPrP.js +165 -0
- package/canvas-dist/assets/chunk-B4BG7PRW-CEeDPAki.js +165 -0
- package/canvas-dist/assets/chunk-B4BG7PRW-D2UFN_2M.js +165 -0
- package/canvas-dist/assets/chunk-B4BG7PRW-DFI5h6HC.js +165 -0
- package/canvas-dist/assets/chunk-B4BG7PRW-DKOiFGMU.js +165 -0
- package/canvas-dist/assets/{chunk-DI55MBZ5-DUJCBZzM.js → chunk-DI55MBZ5-BV6nHjNQ.js} +1 -1
- package/canvas-dist/assets/chunk-DI55MBZ5-CEZJmC0E.js +220 -0
- package/canvas-dist/assets/chunk-DI55MBZ5-DOZT99Ek.js +220 -0
- package/canvas-dist/assets/chunk-DI55MBZ5-DmC2LoG2.js +220 -0
- package/canvas-dist/assets/chunk-DI55MBZ5-DpkcJdZP.js +220 -0
- package/canvas-dist/assets/chunk-DI55MBZ5-fVTGx0zh.js +220 -0
- package/canvas-dist/assets/{chunk-FMBD7UC4-EfGA9ufe.js → chunk-FMBD7UC4-BOCyQpI7.js} +1 -1
- package/canvas-dist/assets/chunk-FMBD7UC4-C76FrRL8.js +15 -0
- package/canvas-dist/assets/chunk-FMBD7UC4-CAq-btWc.js +15 -0
- package/canvas-dist/assets/chunk-FMBD7UC4-CidVsej6.js +15 -0
- package/canvas-dist/assets/chunk-FMBD7UC4-DPpfskdX.js +15 -0
- package/canvas-dist/assets/chunk-FMBD7UC4-DnLtclge.js +15 -0
- package/canvas-dist/assets/{chunk-QN33PNHL-Cu6V1xBU.js → chunk-QN33PNHL-BclpCUi8.js} +1 -1
- package/canvas-dist/assets/chunk-QN33PNHL-DDUw8IU1.js +1 -0
- package/canvas-dist/assets/chunk-QN33PNHL-DdJFAUXw.js +1 -0
- package/canvas-dist/assets/chunk-QN33PNHL-DjV4jUn9.js +1 -0
- package/canvas-dist/assets/chunk-QN33PNHL-N-HTycqU.js +1 -0
- package/canvas-dist/assets/chunk-QN33PNHL-sd8p21DW.js +1 -0
- package/canvas-dist/assets/{chunk-QZHKN3VN-avF3sH_r.js → chunk-QZHKN3VN-B6mT-JkP.js} +1 -1
- package/canvas-dist/assets/chunk-QZHKN3VN-BCo8pc7x.js +1 -0
- package/canvas-dist/assets/chunk-QZHKN3VN-C8IIu6es.js +1 -0
- package/canvas-dist/assets/chunk-QZHKN3VN-D9FF492U.js +1 -0
- package/canvas-dist/assets/chunk-QZHKN3VN-DWMbUjXT.js +1 -0
- package/canvas-dist/assets/chunk-QZHKN3VN-l5FBJ77g.js +1 -0
- package/canvas-dist/assets/{chunk-TZMSLE5B-CkWW-qpk.js → chunk-TZMSLE5B-BASt-UWt.js} +1 -1
- package/canvas-dist/assets/chunk-TZMSLE5B-BCfaZWLT.js +1 -0
- package/canvas-dist/assets/chunk-TZMSLE5B-BKIk_hBR.js +1 -0
- package/canvas-dist/assets/chunk-TZMSLE5B-C4pt-Ir8.js +1 -0
- package/canvas-dist/assets/chunk-TZMSLE5B-DwGlELvo.js +1 -0
- package/canvas-dist/assets/chunk-TZMSLE5B-jJKG-WvJ.js +1 -0
- package/canvas-dist/assets/classDiagram-2ON5EDUG-B7YQfPU4.js +1 -0
- package/canvas-dist/assets/classDiagram-2ON5EDUG-BZ61MaHY.js +1 -0
- package/canvas-dist/assets/classDiagram-2ON5EDUG-CGseYor2.js +1 -0
- package/canvas-dist/assets/classDiagram-2ON5EDUG-CKzOc99J.js +1 -0
- package/canvas-dist/assets/classDiagram-2ON5EDUG-Ce_LPjwW.js +1 -0
- package/canvas-dist/assets/classDiagram-2ON5EDUG-DorPdibv.js +1 -0
- package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-B7YQfPU4.js +1 -0
- package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-BZ61MaHY.js +1 -0
- package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-CGseYor2.js +1 -0
- package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-CKzOc99J.js +1 -0
- package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-Ce_LPjwW.js +1 -0
- package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-DorPdibv.js +1 -0
- package/canvas-dist/assets/clone-74KSto7H.js +1 -0
- package/canvas-dist/assets/clone-CJQgAYVe.js +1 -0
- package/canvas-dist/assets/clone-DLeTuhHE.js +1 -0
- package/canvas-dist/assets/clone-D_IHK_lQ.js +1 -0
- package/canvas-dist/assets/clone-DxMUv1L9.js +1 -0
- package/canvas-dist/assets/clone-UNKf_nED.js +1 -0
- package/canvas-dist/assets/{cose-bilkent-S5V4N54A-DDE4zf7X.js → cose-bilkent-S5V4N54A-BTyQiCkr.js} +1 -1
- package/canvas-dist/assets/cose-bilkent-S5V4N54A-BtPAe24N.js +1 -0
- package/canvas-dist/assets/cose-bilkent-S5V4N54A-DIjE7V3m.js +1 -0
- package/canvas-dist/assets/cose-bilkent-S5V4N54A-DKL_BGvE.js +1 -0
- package/canvas-dist/assets/cose-bilkent-S5V4N54A-LZ4OsCLU.js +1 -0
- package/canvas-dist/assets/cose-bilkent-S5V4N54A-XWeJtgga.js +1 -0
- package/canvas-dist/assets/{dagre-6UL2VRFP-BD6MGb7B.js → dagre-6UL2VRFP-BJ2vcFwR.js} +1 -1
- package/canvas-dist/assets/dagre-6UL2VRFP-C1FlE5s8.js +4 -0
- package/canvas-dist/assets/dagre-6UL2VRFP-C3BWFgl6.js +4 -0
- package/canvas-dist/assets/dagre-6UL2VRFP-CUnx73Rf.js +4 -0
- package/canvas-dist/assets/dagre-6UL2VRFP-Do10BY1y.js +4 -0
- package/canvas-dist/assets/dagre-6UL2VRFP-rOZEkrsg.js +4 -0
- package/canvas-dist/assets/diagram-PSM6KHXK-BGi_qzbq.js +24 -0
- package/canvas-dist/assets/diagram-PSM6KHXK-C3Nv7h_j.js +24 -0
- package/canvas-dist/assets/diagram-PSM6KHXK-CsMy-r0n.js +24 -0
- package/canvas-dist/assets/diagram-PSM6KHXK-Dj8g7kGt.js +24 -0
- package/canvas-dist/assets/diagram-PSM6KHXK-Dxb1w_7r.js +24 -0
- package/canvas-dist/assets/{diagram-PSM6KHXK-yyu-ytzf.js → diagram-PSM6KHXK-kVMBkEyV.js} +1 -1
- package/canvas-dist/assets/{diagram-QEK2KX5R-B_H957Uf.js → diagram-QEK2KX5R-4bsrr1WZ.js} +1 -1
- package/canvas-dist/assets/diagram-QEK2KX5R-Bv7BmKfI.js +43 -0
- package/canvas-dist/assets/diagram-QEK2KX5R-C_FLN6hv.js +43 -0
- package/canvas-dist/assets/diagram-QEK2KX5R-Csuk5L3z.js +43 -0
- package/canvas-dist/assets/diagram-QEK2KX5R-D5Aszgz4.js +43 -0
- package/canvas-dist/assets/diagram-QEK2KX5R-DX58f87l.js +43 -0
- package/canvas-dist/assets/{diagram-S2PKOQOG-DuebuBVv.js → diagram-S2PKOQOG-1Q7hwiSd.js} +1 -1
- package/canvas-dist/assets/diagram-S2PKOQOG-Bz9Vxi5V.js +24 -0
- package/canvas-dist/assets/diagram-S2PKOQOG-CdWgZIIc.js +24 -0
- package/canvas-dist/assets/diagram-S2PKOQOG-DBicbKFU.js +24 -0
- package/canvas-dist/assets/diagram-S2PKOQOG-DsXKwPtU.js +24 -0
- package/canvas-dist/assets/diagram-S2PKOQOG-L_SMHLXs.js +24 -0
- package/canvas-dist/assets/{erDiagram-Q2GNP2WA-AxqPt6IZ.js → erDiagram-Q2GNP2WA-BYu7fh6H.js} +1 -1
- package/canvas-dist/assets/erDiagram-Q2GNP2WA-CvnQ69BF.js +60 -0
- package/canvas-dist/assets/erDiagram-Q2GNP2WA-D3xm-Tdm.js +60 -0
- package/canvas-dist/assets/erDiagram-Q2GNP2WA-DIPpD8sj.js +60 -0
- package/canvas-dist/assets/erDiagram-Q2GNP2WA-DNgu6dMd.js +60 -0
- package/canvas-dist/assets/erDiagram-Q2GNP2WA-Decm8aB4.js +60 -0
- package/canvas-dist/assets/{flowDiagram-NV44I4VS-mDhW3D3Q.js → flowDiagram-NV44I4VS-2ymk2kw2.js} +1 -1
- package/canvas-dist/assets/flowDiagram-NV44I4VS-BEPFOt6U.js +162 -0
- package/canvas-dist/assets/flowDiagram-NV44I4VS-BwqXYGfK.js +162 -0
- package/canvas-dist/assets/flowDiagram-NV44I4VS-CS1jax_z.js +162 -0
- package/canvas-dist/assets/flowDiagram-NV44I4VS-DQz5bf7r.js +162 -0
- package/canvas-dist/assets/flowDiagram-NV44I4VS-KW4T1sqF.js +162 -0
- package/canvas-dist/assets/{ganttDiagram-JELNMOA3-sA8pHJPp.js → ganttDiagram-JELNMOA3-B811prZt.js} +1 -1
- package/canvas-dist/assets/ganttDiagram-JELNMOA3-C75pWm7X.js +267 -0
- package/canvas-dist/assets/ganttDiagram-JELNMOA3-CWsbo0fn.js +267 -0
- package/canvas-dist/assets/ganttDiagram-JELNMOA3-CbJozPBN.js +267 -0
- package/canvas-dist/assets/ganttDiagram-JELNMOA3-Co0cFt4c.js +267 -0
- package/canvas-dist/assets/ganttDiagram-JELNMOA3-I4PDqrRh.js +267 -0
- package/canvas-dist/assets/{gitGraphDiagram-V2S2FVAM-CvLzvhKr.js → gitGraphDiagram-V2S2FVAM-B-z0cLPt.js} +1 -1
- package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-Be40z-LF.js +65 -0
- package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-BejNaAVm.js +65 -0
- package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-BqWDYr0X.js +65 -0
- package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-DSvWGY-e.js +65 -0
- package/canvas-dist/assets/gitGraphDiagram-V2S2FVAM-HLYbyNJ5.js +65 -0
- package/canvas-dist/assets/{graph-BVZqMrwW.js → graph-BE8KKsdf.js} +1 -1
- package/canvas-dist/assets/graph-D6DzzszU.js +1 -0
- package/canvas-dist/assets/graph-DFR8Y_8s.js +1 -0
- package/canvas-dist/assets/graph-Da385cDY.js +1 -0
- package/canvas-dist/assets/graph-MU7gZz2B.js +1 -0
- package/canvas-dist/assets/graph-wjSBJwnf.js +1 -0
- package/canvas-dist/assets/index--ztw-8Rw.js +647 -0
- package/canvas-dist/assets/{index-CF3qc2Xb.js → index-5TpIM6B1.js} +1 -1
- package/canvas-dist/assets/index-6GBZ9nXN.css +32 -0
- package/canvas-dist/assets/index-BSswTuBk.js +11 -0
- package/canvas-dist/assets/index-BVvhMmjs.js +11 -0
- package/canvas-dist/assets/index-BY92Mj5g.js +572 -0
- package/canvas-dist/assets/index-CV7palC3.js +572 -0
- package/canvas-dist/assets/index-D9bmQGsB.js +11 -0
- package/canvas-dist/assets/index-DDIKkGv8.js +592 -0
- package/canvas-dist/assets/index-Dyo0NkPb.js +574 -0
- package/canvas-dist/assets/index-iQWajCow.js +572 -0
- package/canvas-dist/assets/index-m68YlAMU.js +11 -0
- package/canvas-dist/assets/index-mEoP57az.js +11 -0
- package/canvas-dist/assets/{infoDiagram-HS3SLOUP-D1Kg3Q9d.js → infoDiagram-HS3SLOUP--9BirqgJ.js} +1 -1
- package/canvas-dist/assets/infoDiagram-HS3SLOUP-CSJVED2y.js +2 -0
- package/canvas-dist/assets/infoDiagram-HS3SLOUP-D68HIb2t.js +2 -0
- package/canvas-dist/assets/infoDiagram-HS3SLOUP-DK2VLGGz.js +2 -0
- package/canvas-dist/assets/infoDiagram-HS3SLOUP-PaFhn4yD.js +2 -0
- package/canvas-dist/assets/infoDiagram-HS3SLOUP-zLNG47sU.js +2 -0
- package/canvas-dist/assets/{journeyDiagram-XKPGCS4Q-D7ogbx9z.js → journeyDiagram-XKPGCS4Q-Bue2dR2X.js} +1 -1
- package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-CrgZfpdU.js +139 -0
- package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-DUxWmkkC.js +139 -0
- package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-OTFkv4pd.js +139 -0
- package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-eK2_Zuu3.js +139 -0
- package/canvas-dist/assets/journeyDiagram-XKPGCS4Q-uds5Tz8D.js +139 -0
- package/canvas-dist/assets/{kanban-definition-3W4ZIXB7-CDcnICM9.js → kanban-definition-3W4ZIXB7-BETdiI7I.js} +1 -1
- package/canvas-dist/assets/kanban-definition-3W4ZIXB7-BdVh7KdN.js +89 -0
- package/canvas-dist/assets/kanban-definition-3W4ZIXB7-Cxl8UM9S.js +89 -0
- package/canvas-dist/assets/kanban-definition-3W4ZIXB7-DVPlx3I2.js +89 -0
- package/canvas-dist/assets/kanban-definition-3W4ZIXB7-LtNWeoYB.js +89 -0
- package/canvas-dist/assets/kanban-definition-3W4ZIXB7-uvhEMvyE.js +89 -0
- package/canvas-dist/assets/{layout-CuaK7i3M.js → layout-1OzszN14.js} +1 -1
- package/canvas-dist/assets/layout-CJSupFcF.js +1 -0
- package/canvas-dist/assets/layout-DFRmxN_c.js +1 -0
- package/canvas-dist/assets/layout-DSu-zk7y.js +1 -0
- package/canvas-dist/assets/layout-TGcrvApd.js +1 -0
- package/canvas-dist/assets/layout-eStc8SYK.js +1 -0
- package/canvas-dist/assets/{linear-CLSTOJ0g.js → linear-9qlE6xa7.js} +1 -1
- package/canvas-dist/assets/linear-CBfFWnLD.js +1 -0
- package/canvas-dist/assets/linear-Cv4ai8Hq.js +1 -0
- package/canvas-dist/assets/linear-DDzz65E6.js +1 -0
- package/canvas-dist/assets/linear-wbIqhwDf.js +1 -0
- package/canvas-dist/assets/linear-wyNKl76F.js +1 -0
- package/canvas-dist/assets/{mindmap-definition-VGOIOE7T-TrK7CIKt.js → mindmap-definition-VGOIOE7T-3l4YzhEM.js} +1 -1
- package/canvas-dist/assets/mindmap-definition-VGOIOE7T-B-KkpNlw.js +68 -0
- package/canvas-dist/assets/mindmap-definition-VGOIOE7T-DHMHWgmT.js +68 -0
- package/canvas-dist/assets/mindmap-definition-VGOIOE7T-Dqfyg4Z2.js +68 -0
- package/canvas-dist/assets/mindmap-definition-VGOIOE7T-NeRYOzsq.js +68 -0
- package/canvas-dist/assets/mindmap-definition-VGOIOE7T-xyu628P9.js +68 -0
- package/canvas-dist/assets/{pieDiagram-ADFJNKIX-BcIKTRbi.js → pieDiagram-ADFJNKIX-BWNzVAGj.js} +1 -1
- package/canvas-dist/assets/pieDiagram-ADFJNKIX-Bm3PXYs-.js +30 -0
- package/canvas-dist/assets/pieDiagram-ADFJNKIX-BvvN7VvQ.js +30 -0
- package/canvas-dist/assets/pieDiagram-ADFJNKIX-BwU7AN7W.js +30 -0
- package/canvas-dist/assets/pieDiagram-ADFJNKIX-CHgwWCaM.js +30 -0
- package/canvas-dist/assets/pieDiagram-ADFJNKIX-DlZc8YOh.js +30 -0
- package/canvas-dist/assets/{quadrantDiagram-AYHSOK5B-EOHXFGoQ.js → quadrantDiagram-AYHSOK5B-B-Zd8OFp.js} +1 -1
- package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-B1CnJyxI.js +7 -0
- package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-C0Qo00b9.js +7 -0
- package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-C9bx3nEJ.js +7 -0
- package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-UHENkiRO.js +7 -0
- package/canvas-dist/assets/quadrantDiagram-AYHSOK5B-jKfurTPU.js +7 -0
- package/canvas-dist/assets/{requirementDiagram-UZGBJVZJ-CJ8lImGs.js → requirementDiagram-UZGBJVZJ-BPpNNusD.js} +1 -1
- package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-BwZF1NIK.js +64 -0
- package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-CaT3Frtk.js +64 -0
- package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-Dfoz7R_7.js +64 -0
- package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-DsrX4TT-.js +64 -0
- package/canvas-dist/assets/requirementDiagram-UZGBJVZJ-dmouSXOl.js +64 -0
- package/canvas-dist/assets/{sankeyDiagram-TZEHDZUN-4cANY87E.js → sankeyDiagram-TZEHDZUN-BEy-A1Fu.js} +1 -1
- package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-BViMBiAQ.js +10 -0
- package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-BqrM-qWN.js +10 -0
- package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-DRkRC9qB.js +10 -0
- package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-DbuzKCtn.js +10 -0
- package/canvas-dist/assets/sankeyDiagram-TZEHDZUN-_aHMKbpw.js +10 -0
- package/canvas-dist/assets/{sequenceDiagram-WL72ISMW-D9HrEsci.js → sequenceDiagram-WL72ISMW-B8FOaL2Q.js} +1 -1
- package/canvas-dist/assets/sequenceDiagram-WL72ISMW-C02NQwOB.js +145 -0
- package/canvas-dist/assets/sequenceDiagram-WL72ISMW-CgyHivPj.js +145 -0
- package/canvas-dist/assets/sequenceDiagram-WL72ISMW-CzW1WaEm.js +145 -0
- package/canvas-dist/assets/sequenceDiagram-WL72ISMW-DJhHI1pe.js +145 -0
- package/canvas-dist/assets/sequenceDiagram-WL72ISMW-VFkpAeoG.js +145 -0
- package/canvas-dist/assets/{stateDiagram-FKZM4ZOC-qVbMjauZ.js → stateDiagram-FKZM4ZOC-BSqFX4PJ.js} +1 -1
- package/canvas-dist/assets/stateDiagram-FKZM4ZOC-BnXhhxkN.js +1 -0
- package/canvas-dist/assets/stateDiagram-FKZM4ZOC-ClARVrvt.js +1 -0
- package/canvas-dist/assets/stateDiagram-FKZM4ZOC-CuC6xesY.js +1 -0
- package/canvas-dist/assets/stateDiagram-FKZM4ZOC-DcAiGjph.js +1 -0
- package/canvas-dist/assets/stateDiagram-FKZM4ZOC-aBg0hjTp.js +1 -0
- package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-8fib9ftc.js +1 -0
- package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-B-DO0ZqO.js +1 -0
- package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-BksbsE4k.js +1 -0
- package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-C2DJCNPK.js +1 -0
- package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-CeA5jba6.js +1 -0
- package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-zsAyq0tK.js +1 -0
- package/canvas-dist/assets/{timeline-definition-IT6M3QCI-DDBlkydm.js → timeline-definition-IT6M3QCI-BaHdYD2h.js} +1 -1
- package/canvas-dist/assets/timeline-definition-IT6M3QCI-Bl2hg8IM.js +61 -0
- package/canvas-dist/assets/timeline-definition-IT6M3QCI-CrVwLiGm.js +61 -0
- package/canvas-dist/assets/timeline-definition-IT6M3QCI-DrXGRjnB.js +61 -0
- package/canvas-dist/assets/timeline-definition-IT6M3QCI-cYAwshf6.js +61 -0
- package/canvas-dist/assets/timeline-definition-IT6M3QCI-flyL0y-3.js +61 -0
- package/canvas-dist/assets/{treemap-GDKQZRPO-D4a8udjO.js → treemap-GDKQZRPO-C4Hg8kJ_.js} +1 -1
- package/canvas-dist/assets/treemap-GDKQZRPO-DVY2G9qY.js +162 -0
- package/canvas-dist/assets/treemap-GDKQZRPO-DpLWPA1z.js +162 -0
- package/canvas-dist/assets/treemap-GDKQZRPO-Ds86cUVw.js +162 -0
- package/canvas-dist/assets/treemap-GDKQZRPO-DwmoI6tH.js +162 -0
- package/canvas-dist/assets/treemap-GDKQZRPO-SsGFkgVd.js +162 -0
- package/canvas-dist/assets/{xychartDiagram-PRI3JC2R-DteXAAAu.js → xychartDiagram-PRI3JC2R-B9c1iLBf.js} +1 -1
- package/canvas-dist/assets/xychartDiagram-PRI3JC2R-BpX6MPWa.js +7 -0
- package/canvas-dist/assets/xychartDiagram-PRI3JC2R-CEgW_j0p.js +7 -0
- package/canvas-dist/assets/xychartDiagram-PRI3JC2R-CSEFGEQX.js +7 -0
- package/canvas-dist/assets/xychartDiagram-PRI3JC2R-CnG4XoMc.js +7 -0
- package/canvas-dist/assets/xychartDiagram-PRI3JC2R-Dftj3Bt3.js +7 -0
- package/canvas-dist/index.html +3 -2
- package/package.json +4 -2
- package/src/protocol.js +1 -1
- package/src/protocol.test.js +1 -1
- package/src/pty-manager.js +281 -0
- package/src/pty-manager.test.js +212 -0
- package/src/router.js +31 -1
- package/src/router.test.js +1 -1
- package/src/sdk-e2e.test.js +101 -0
- package/src/server.e2e.test.js +812 -177
- package/src/server.js +1516 -264
- package/src/session-store.js +260 -0
- package/src/session-store.test.js +235 -0
- package/src/templates.js +1 -1
- package/src/templates.test.js +1 -1
- package/src/terminal.js +3 -3
- package/src/terminal.test.js +12 -12
- package/src/visual-interceptor.js +450 -0
- package/src/visual-interceptor.test.js +943 -0
- package/src/workshop-parser.js +251 -0
- package/src/workshop-parser.test.js +179 -0
- package/templates/celebrate.html +1 -1
- package/templates/code-playground.html +1 -1
- package/templates/dashboard.html +7 -8
- package/templates/diagram-architecture.html +1 -1
- package/templates/diagram-flow.html +1 -1
- package/templates/diagram-mermaid.html +1 -1
- package/templates/game-speed-round.html +1 -1
- package/templates/quiz-drag-order.html +1 -1
- package/templates/quiz-fill-blank.html +1 -1
- package/templates/quiz-matching.html +1 -1
- package/templates/quiz-timed-choice.html +1 -1
- package/templates/welcome.html +7 -7
- package/canvas-dist/assets/channel-saCUO1KA.js +0 -1
- package/canvas-dist/assets/classDiagram-2ON5EDUG-CBLbQwHx.js +0 -1
- package/canvas-dist/assets/classDiagram-v2-WZHVMYZB-CBLbQwHx.js +0 -1
- package/canvas-dist/assets/clone-DXnda9BY.js +0 -1
- package/canvas-dist/assets/index-DYNtb52W.js +0 -426
- package/canvas-dist/assets/stateDiagram-v2-4FDKWEC3-MT16RLO4.js +0 -1
- package/src/claude-session.js +0 -414
- package/src/claude-session.test.js +0 -326
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { ClaudeSessionManager } from './claude-session.js';
|
|
3
|
-
|
|
4
|
-
describe('ClaudeSessionManager', () => {
|
|
5
|
-
let manager;
|
|
6
|
-
let emittedMessages;
|
|
7
|
-
let mockSDK;
|
|
8
|
-
|
|
9
|
-
function makeMockSession(id) {
|
|
10
|
-
return {
|
|
11
|
-
sessionId: id,
|
|
12
|
-
send: vi.fn(),
|
|
13
|
-
stream: vi.fn(),
|
|
14
|
-
close: vi.fn(),
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
beforeEach(() => {
|
|
19
|
-
vi.clearAllMocks();
|
|
20
|
-
emittedMessages = [];
|
|
21
|
-
mockSDK = {
|
|
22
|
-
unstable_v2_createSession: vi.fn(),
|
|
23
|
-
unstable_v2_resumeSession: vi.fn(),
|
|
24
|
-
listSessions: vi.fn(),
|
|
25
|
-
};
|
|
26
|
-
manager = new ClaudeSessionManager(mockSDK);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
const mockOnMessage = (envelope) => {
|
|
30
|
-
emittedMessages.push(envelope);
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
describe('createSession', () => {
|
|
34
|
-
it('creates a session and emits started status', async () => {
|
|
35
|
-
const mockSession = makeMockSession('sdk-id-1');
|
|
36
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
37
|
-
|
|
38
|
-
const sessionId = await manager.createSession({ onMessage: mockOnMessage });
|
|
39
|
-
|
|
40
|
-
// sessionId is a UUID we generate, not the SDK's
|
|
41
|
-
expect(sessionId).toMatch(/^[0-9a-f-]{36}$/);
|
|
42
|
-
expect(manager.isActive(sessionId)).toBe(true);
|
|
43
|
-
expect(emittedMessages).toHaveLength(1);
|
|
44
|
-
expect(emittedMessages[0].type).toBe('chat:status');
|
|
45
|
-
expect(emittedMessages[0].payload.status).toBe('started');
|
|
46
|
-
expect(emittedMessages[0].payload.sessionId).toBe(sessionId);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('passes model, cwd and pluginDir to the SDK', async () => {
|
|
50
|
-
const mockSession = makeMockSession('s1');
|
|
51
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
52
|
-
|
|
53
|
-
await manager.createSession({
|
|
54
|
-
cwd: '/test/dir',
|
|
55
|
-
pluginDir: '/test/plugin',
|
|
56
|
-
onMessage: mockOnMessage,
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
const opts = mockSDK.unstable_v2_createSession.mock.calls[0][0];
|
|
60
|
-
expect(opts.model).toBe('claude-sonnet-4-6');
|
|
61
|
-
expect(opts.cwd).toBe('/test/dir');
|
|
62
|
-
expect(opts.plugins).toEqual([{ type: 'local', path: '/test/plugin' }]);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('emits error status on SDK failure', async () => {
|
|
66
|
-
mockSDK.unstable_v2_createSession.mockImplementation(() => {
|
|
67
|
-
throw new Error('SDK init failed');
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
await expect(
|
|
71
|
-
manager.createSession({ onMessage: mockOnMessage })
|
|
72
|
-
).rejects.toThrow('SDK init failed');
|
|
73
|
-
|
|
74
|
-
expect(emittedMessages[0].type).toBe('chat:status');
|
|
75
|
-
expect(emittedMessages[0].payload.status).toBe('error');
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
describe('resumeSession', () => {
|
|
80
|
-
it('resumes a session by ID', async () => {
|
|
81
|
-
const mockSession = makeMockSession('existing-session');
|
|
82
|
-
mockSDK.unstable_v2_resumeSession.mockReturnValue(mockSession);
|
|
83
|
-
|
|
84
|
-
const sessionId = await manager.resumeSession('existing-session', { onMessage: mockOnMessage });
|
|
85
|
-
|
|
86
|
-
expect(sessionId).toBe('existing-session');
|
|
87
|
-
expect(mockSDK.unstable_v2_resumeSession).toHaveBeenCalledWith('existing-session', expect.any(Object));
|
|
88
|
-
expect(emittedMessages[0].payload.status).toBe('resumed');
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
describe('sendMessage', () => {
|
|
93
|
-
it('throws if no active session', async () => {
|
|
94
|
-
await expect(manager.sendMessage('nonexistent', 'hello')).rejects.toThrow('No active session');
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('sends a message and streams response', async () => {
|
|
98
|
-
async function* fakeStream() {
|
|
99
|
-
yield { type: 'assistant', message: { content: [{ type: 'text', text: 'Hello' }] } };
|
|
100
|
-
yield { type: 'result' };
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const mockSession = makeMockSession('stream-test');
|
|
104
|
-
mockSession.stream.mockReturnValue(fakeStream());
|
|
105
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
106
|
-
const sessionId = await manager.createSession({ onMessage: mockOnMessage });
|
|
107
|
-
|
|
108
|
-
emittedMessages = [];
|
|
109
|
-
await manager.sendMessage(sessionId, 'test message');
|
|
110
|
-
|
|
111
|
-
expect(mockSession.send).toHaveBeenCalledWith('test message');
|
|
112
|
-
expect(mockSession.stream).toHaveBeenCalled();
|
|
113
|
-
|
|
114
|
-
const types = emittedMessages.map(m => m.type);
|
|
115
|
-
expect(types).toContain('chat:status');
|
|
116
|
-
expect(types).toContain('chat:stream');
|
|
117
|
-
expect(types).toContain('chat:assistant');
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('captures SDK sessionId during streaming', async () => {
|
|
121
|
-
async function* fakeStream() {
|
|
122
|
-
yield { type: 'system' };
|
|
123
|
-
yield { type: 'assistant', message: { content: [{ type: 'text', text: 'Hi' }] } };
|
|
124
|
-
yield { type: 'result' };
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const mockSession = makeMockSession('real-sdk-id');
|
|
128
|
-
mockSession.stream.mockReturnValue(fakeStream());
|
|
129
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
130
|
-
const sessionId = await manager.createSession({ onMessage: mockOnMessage });
|
|
131
|
-
|
|
132
|
-
expect(manager.getSdkSessionId(sessionId)).toBeNull();
|
|
133
|
-
|
|
134
|
-
await manager.sendMessage(sessionId, 'test');
|
|
135
|
-
|
|
136
|
-
expect(manager.getSdkSessionId(sessionId)).toBe('real-sdk-id');
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it('emits tool-use and tool-result events', async () => {
|
|
140
|
-
async function* fakeStream() {
|
|
141
|
-
yield { type: 'tool_use', name: 'Bash', id: 'tool-1', input: { command: 'ls' } };
|
|
142
|
-
yield { type: 'tool_result', tool_use_id: 'tool-1', content: 'file1\nfile2' };
|
|
143
|
-
yield { type: 'result' };
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const mockSession = makeMockSession('tool-test');
|
|
147
|
-
mockSession.stream.mockReturnValue(fakeStream());
|
|
148
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
149
|
-
const sessionId = await manager.createSession({ onMessage: mockOnMessage });
|
|
150
|
-
|
|
151
|
-
emittedMessages = [];
|
|
152
|
-
await manager.sendMessage(sessionId, 'list files');
|
|
153
|
-
|
|
154
|
-
const toolUse = emittedMessages.find(m => m.type === 'chat:tool-use');
|
|
155
|
-
expect(toolUse).toBeDefined();
|
|
156
|
-
expect(toolUse.payload.toolName).toBe('Bash');
|
|
157
|
-
|
|
158
|
-
const toolResult = emittedMessages.find(m => m.type === 'chat:tool-result');
|
|
159
|
-
expect(toolResult).toBeDefined();
|
|
160
|
-
expect(toolResult.payload.toolId).toBe('tool-1');
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
describe('multiple sessions', () => {
|
|
165
|
-
it('supports multiple concurrent sessions', async () => {
|
|
166
|
-
const session1 = makeMockSession('sdk-1');
|
|
167
|
-
const session2 = makeMockSession('sdk-2');
|
|
168
|
-
mockSDK.unstable_v2_createSession
|
|
169
|
-
.mockReturnValueOnce(session1)
|
|
170
|
-
.mockReturnValueOnce(session2);
|
|
171
|
-
|
|
172
|
-
const messages1 = [];
|
|
173
|
-
const messages2 = [];
|
|
174
|
-
|
|
175
|
-
const id1 = await manager.createSession({ onMessage: (e) => messages1.push(e) });
|
|
176
|
-
const id2 = await manager.createSession({ onMessage: (e) => messages2.push(e) });
|
|
177
|
-
|
|
178
|
-
expect(id1).not.toBe(id2);
|
|
179
|
-
expect(manager.isActive(id1)).toBe(true);
|
|
180
|
-
expect(manager.isActive(id2)).toBe(true);
|
|
181
|
-
expect(manager.getActiveSessionIds()).toHaveLength(2);
|
|
182
|
-
|
|
183
|
-
// Status messages go to the right callback
|
|
184
|
-
expect(messages1[0].payload.sessionId).toBe(id1);
|
|
185
|
-
expect(messages2[0].payload.sessionId).toBe(id2);
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it('closing one session does not affect others', async () => {
|
|
189
|
-
const session1 = makeMockSession('sdk-1');
|
|
190
|
-
const session2 = makeMockSession('sdk-2');
|
|
191
|
-
mockSDK.unstable_v2_createSession
|
|
192
|
-
.mockReturnValueOnce(session1)
|
|
193
|
-
.mockReturnValueOnce(session2);
|
|
194
|
-
|
|
195
|
-
const id1 = await manager.createSession({ onMessage: mockOnMessage });
|
|
196
|
-
const id2 = await manager.createSession({ onMessage: mockOnMessage });
|
|
197
|
-
|
|
198
|
-
await manager.closeSession(id1);
|
|
199
|
-
|
|
200
|
-
expect(manager.isActive(id1)).toBe(false);
|
|
201
|
-
expect(manager.isActive(id2)).toBe(true);
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
it('closeAll closes all sessions', async () => {
|
|
205
|
-
const session1 = makeMockSession('sdk-1');
|
|
206
|
-
const session2 = makeMockSession('sdk-2');
|
|
207
|
-
mockSDK.unstable_v2_createSession
|
|
208
|
-
.mockReturnValueOnce(session1)
|
|
209
|
-
.mockReturnValueOnce(session2);
|
|
210
|
-
|
|
211
|
-
await manager.createSession({ onMessage: mockOnMessage });
|
|
212
|
-
await manager.createSession({ onMessage: mockOnMessage });
|
|
213
|
-
|
|
214
|
-
await manager.closeAll();
|
|
215
|
-
|
|
216
|
-
expect(manager.getActiveSessionIds()).toHaveLength(0);
|
|
217
|
-
expect(session1.close).toHaveBeenCalled();
|
|
218
|
-
expect(session2.close).toHaveBeenCalled();
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
describe('stop', () => {
|
|
223
|
-
it('is a no-op when not streaming', async () => {
|
|
224
|
-
const mockSession = makeMockSession('s1');
|
|
225
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
226
|
-
const sessionId = await manager.createSession({ onMessage: mockOnMessage });
|
|
227
|
-
|
|
228
|
-
emittedMessages = [];
|
|
229
|
-
await manager.stop(sessionId);
|
|
230
|
-
|
|
231
|
-
// Session is still active since it wasn't streaming
|
|
232
|
-
expect(manager.isActive(sessionId)).toBe(true);
|
|
233
|
-
expect(emittedMessages).toHaveLength(0);
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
describe('listSessions', () => {
|
|
238
|
-
it('returns mapped session list', async () => {
|
|
239
|
-
mockSDK.listSessions.mockResolvedValue([
|
|
240
|
-
{ sessionId: 's1', summary: 'Test', lastModified: 12345 },
|
|
241
|
-
{ sessionId: 's2', summary: 'Other', lastModified: 67890 },
|
|
242
|
-
]);
|
|
243
|
-
|
|
244
|
-
const sessions = await manager.listSessions('/test');
|
|
245
|
-
expect(sessions).toHaveLength(2);
|
|
246
|
-
expect(sessions[0].sessionId).toBe('s1');
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
it('returns empty array on error', async () => {
|
|
250
|
-
mockSDK.listSessions.mockRejectedValue(new Error('fail'));
|
|
251
|
-
const sessions = await manager.listSessions('/test');
|
|
252
|
-
expect(sessions).toEqual([]);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
describe('closeSession', () => {
|
|
257
|
-
it('closes active session and removes from map', async () => {
|
|
258
|
-
const mockSession = makeMockSession('s1');
|
|
259
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
260
|
-
const sessionId = await manager.createSession({ onMessage: mockOnMessage });
|
|
261
|
-
|
|
262
|
-
expect(manager.isActive(sessionId)).toBe(true);
|
|
263
|
-
await manager.closeSession(sessionId);
|
|
264
|
-
expect(manager.isActive(sessionId)).toBe(false);
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
describe('isAvailable', () => {
|
|
269
|
-
it('returns true when SDK is available', async () => {
|
|
270
|
-
const available = await manager.isAvailable();
|
|
271
|
-
expect(available).toBe(true);
|
|
272
|
-
});
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
describe('sendMessage edge cases', () => {
|
|
276
|
-
it('throws if already streaming', async () => {
|
|
277
|
-
async function* slowStream() {
|
|
278
|
-
yield { type: 'assistant', message: { content: [{ type: 'text', text: 'Hi' }] } };
|
|
279
|
-
// never yields 'result' — hangs forever
|
|
280
|
-
await new Promise(() => {});
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
const mockSession = makeMockSession('busy');
|
|
284
|
-
mockSession.stream.mockReturnValue(slowStream());
|
|
285
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
286
|
-
const sessionId = await manager.createSession({ onMessage: mockOnMessage });
|
|
287
|
-
|
|
288
|
-
// Start streaming (don't await — it won't finish)
|
|
289
|
-
const streamPromise = manager.sendMessage(sessionId, 'first');
|
|
290
|
-
|
|
291
|
-
// Wait a tick for streaming flag to be set
|
|
292
|
-
await new Promise(r => setTimeout(r, 10));
|
|
293
|
-
|
|
294
|
-
await expect(manager.sendMessage(sessionId, 'second')).rejects.toThrow('Already streaming');
|
|
295
|
-
|
|
296
|
-
// Clean up
|
|
297
|
-
await manager.closeSession(sessionId);
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
it('emits error status on stream failure', async () => {
|
|
301
|
-
async function* failStream() {
|
|
302
|
-
throw new Error('stream broke');
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
const mockSession = makeMockSession('fail-stream');
|
|
306
|
-
mockSession.stream.mockReturnValue(failStream());
|
|
307
|
-
mockSDK.unstable_v2_createSession.mockReturnValue(mockSession);
|
|
308
|
-
const sessionId = await manager.createSession({ onMessage: mockOnMessage });
|
|
309
|
-
|
|
310
|
-
emittedMessages = [];
|
|
311
|
-
await manager.sendMessage(sessionId, 'test');
|
|
312
|
-
|
|
313
|
-
const errorStatus = emittedMessages.find(
|
|
314
|
-
m => m.type === 'chat:status' && m.payload.status === 'error'
|
|
315
|
-
);
|
|
316
|
-
expect(errorStatus).toBeDefined();
|
|
317
|
-
expect(errorStatus.payload.message).toBe('stream broke');
|
|
318
|
-
|
|
319
|
-
// Should return to idle after error
|
|
320
|
-
const idleStatus = emittedMessages.find(
|
|
321
|
-
m => m.type === 'chat:status' && m.payload.status === 'idle'
|
|
322
|
-
);
|
|
323
|
-
expect(idleStatus).toBeDefined();
|
|
324
|
-
});
|
|
325
|
-
});
|
|
326
|
-
});
|