ryugi-artifacts 1.60.0 → 1.61.0
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 +8 -0
- package/dist/cli.cjs +262 -101
- package/dist/output-bootstrap.cjs +25 -8
- package/dist/server.cjs +522 -283
- package/dist/viewer/AgentStatusPill-Bg3-TfB6.js +1 -0
- package/dist/viewer/ArtboardLayout-fEYVfxn4.js +12 -0
- package/dist/viewer/ArtifactList-DuzFhHUE.js +2 -0
- package/dist/viewer/{AutoPublishPrompt-4NnJXZog.js → AutoPublishPrompt-B8EornjB.js} +1 -1
- package/dist/viewer/{Avatar-dNoe5E1c.js → Avatar-BFlGnh3K.js} +1 -1
- package/dist/viewer/Avatar-DoJIbVRH.js +1 -0
- package/dist/viewer/{Canvas-CNOyUMJm.js → Canvas-BNBbDEQk.js} +1 -1
- package/dist/viewer/DocumentLayout-Dg-bV04g.js +2 -0
- package/dist/viewer/DocumentPage-CzDGbW7J.js +4 -0
- package/dist/viewer/{HtmlLayout-BntwoI3r.js → HtmlLayout-CHC8Wgst.js} +1 -1
- package/dist/viewer/PhoneSheet-COiqG2Qf.js +1 -0
- package/dist/viewer/{Popover-B_CXVR49.js → Popover-APpFVB9l.js} +1 -1
- package/dist/viewer/PreviewLayout-C6AN655_.js +2 -0
- package/dist/viewer/{RailSwitch-Du0xlqfo.js → RailSwitch-CltBH8g4.js} +1 -1
- package/dist/viewer/{Select-Bt3TgRTH.js → Select-Cq0vY0fU.js} +1 -1
- package/dist/viewer/{SelectScrollUpArrow-Bxle5Ik3.js → SelectScrollUpArrow-VBobuSoz.js} +1 -1
- package/dist/viewer/SettingsDialog-DJVNG5Xg.js +1 -0
- package/dist/viewer/SnapshotDocument-BezdwGQl.js +1 -0
- package/dist/viewer/SplitShell-Sl7upggj.js +1 -0
- package/dist/viewer/TooltipPopup-D_x17pfc.js +1 -0
- package/dist/viewer/VirtualizedEditor-D9Ivycdp-BvVanAks.js +1 -0
- package/dist/viewer/{VirtualizedRenderer-C_d95FXi-DlsMCHOp.js → VirtualizedRenderer-C_d95FXi-BfRP_clr.js} +1 -1
- package/dist/viewer/{WarningsBadge-Cm_tPZxD.js → WarningsBadge-BmZsGppu.js} +1 -1
- package/dist/viewer/{abnfDiagram-VCTEODGH-V02w9mmq.js → abnfDiagram-VCTEODGH-Dy-Yd9GT.js} +1 -1
- package/dist/viewer/agentLook-CgpljoOL.js +1 -0
- package/dist/viewer/anchor-C31CS18T.js +1 -0
- package/dist/viewer/{ar-SA-G6X2FPQ2-Ch7uC6Uu.js → ar-SA-G6X2FPQ2-DQEgddf_.js} +1 -1
- package/dist/viewer/{architecture-7GRP2DOG-g5b4QnNK.js → architecture-7GRP2DOG-BRqKI1uU.js} +1 -1
- package/dist/viewer/{architectureDiagram-5GKGNRK7-D5qmUNao.js → architectureDiagram-5GKGNRK7-DYnNQ5GA.js} +1 -1
- package/dist/viewer/arrow-up-BjP7sXQi.js +1 -0
- package/dist/viewer/{az-AZ-76LH7QW2-D_1HMIy0.js → az-AZ-76LH7QW2-BqSwQDgU.js} +1 -1
- package/dist/viewer/{bg-BG-XCXSNQG7-BR4xAQwM.js → bg-BG-XCXSNQG7-D3qaiKCR.js} +1 -1
- package/dist/viewer/{blockDiagram-I7D4REHJ-mLe3Gd_Z.js → blockDiagram-I7D4REHJ-gfOqOqK8.js} +1 -1
- package/dist/viewer/{bn-BD-2XOGV67Q-DuZJy6yQ.js → bn-BD-2XOGV67Q-uueVjSG0.js} +1 -1
- package/dist/viewer/{c4Diagram-7LVT6UL2-CsrmBJ7r.js → c4Diagram-7LVT6UL2-CspixSih.js} +1 -1
- package/dist/viewer/{ca-ES-6MX7JW3Y-0aC8YzCV.js → ca-ES-6MX7JW3Y-BPVc8zQY.js} +1 -1
- package/dist/viewer/channel-BcP7xsGP.js +1 -0
- package/dist/viewer/{channel-BUqsTLoJ.js → channel-CKa-n8no.js} +161 -161
- package/dist/viewer/{chunk-4HAMMTFA-CsS8ySls.js → chunk-4HAMMTFA-OwEqPYqg.js} +1 -1
- package/dist/viewer/{chunk-75Z2AOVW-BA5zQjlf.js → chunk-75Z2AOVW-DEvYTf43.js} +1 -1
- package/dist/viewer/{chunk-DU6HZSFF-CtKmoJBe.js → chunk-DU6HZSFF-Bo8LAnUG.js} +1 -1
- package/dist/viewer/{chunk-EIO257PC-CP9-NY-y.js → chunk-EIO257PC-DOWICayv.js} +1 -1
- package/dist/viewer/{chunk-F27PBJKO-BrzOEdmQ.js → chunk-F27PBJKO-FPprQQwQ.js} +1 -1
- package/dist/viewer/{chunk-GMAD6QVW-BEIQMvPy.js → chunk-GMAD6QVW-CcuMOYFd.js} +1 -1
- package/dist/viewer/{chunk-GVQU2GXP-CHgL6ykK.js → chunk-GVQU2GXP-CwyhLOSe.js} +1 -1
- package/dist/viewer/{chunk-IMKFNOWR-CuVAUnsT.js → chunk-IMKFNOWR-BRcARyIO.js} +1 -1
- package/dist/viewer/{chunk-L3NEJ4N5-rUjkjDEt.js → chunk-L3NEJ4N5-DIvNBSBN.js} +1 -1
- package/dist/viewer/{chunk-OSK3NFVY-AZgoDDlE.js → chunk-OSK3NFVY-DlZAl57I.js} +1 -1
- package/dist/viewer/{chunk-P2QGCYS3-CnqNqmnt.js → chunk-P2QGCYS3-BJ6X1Qvu.js} +1 -1
- package/dist/viewer/{chunk-POPQ4Y6H-C0VQEl8T.js → chunk-POPQ4Y6H-7iiU0DyD.js} +1 -1
- package/dist/viewer/{chunk-PWAF6VOD-N9Uz0jx9.js → chunk-PWAF6VOD-ClGno4La.js} +1 -1
- package/dist/viewer/{chunk-SHT3W25Y-DWL13XB_.js → chunk-SHT3W25Y-BlaWEaK4.js} +1 -1
- package/dist/viewer/{chunk-SVP7TREG-Dq7RxyUW.js → chunk-SVP7TREG-Cba4SxZ5.js} +1 -1
- package/dist/viewer/{chunk-TICWLB2K-6rFQNnYe.js → chunk-TICWLB2K-CZ2y5jMV.js} +1 -1
- package/dist/viewer/classDiagram-ZZMXUADV-Dp5LBWBk.js +1 -0
- package/dist/viewer/classDiagram-v2-VYDZK3BY-Dp5LBWBk.js +1 -0
- package/dist/viewer/{common-mldU7ZsL.js → common-DhR3pjFS.js} +1 -1
- package/dist/viewer/{cs-CZ-2BRQDIVT-i3Iu_puT.js → cs-CZ-2BRQDIVT-a-4qjDc0.js} +1 -1
- package/dist/viewer/{cynefin-OW5HDTMX-bIA2GPJu.js → cynefin-OW5HDTMX-Cjf0AYaV.js} +1 -1
- package/dist/viewer/{cynefinDiagram-5FMLGOSQ-1QdiomNx.js → cynefinDiagram-5FMLGOSQ-Dw7ZdM6T.js} +1 -1
- package/dist/viewer/{da-DK-5WZEPLOC-CgMT5eDO.js → da-DK-5WZEPLOC-DDN5tVhI.js} +1 -1
- package/dist/viewer/{dagre-GXQ25YYZ-C_p1-ufY.js → dagre-GXQ25YYZ-Bp7T7Kmd.js} +1 -1
- package/dist/viewer/{de-DE-XR44H4JA-5M86Gk25.js → de-DE-XR44H4JA-BytQ_CrN.js} +1 -1
- package/dist/viewer/{diagram-S7CK7UJ4-DDzzCIFb.js → diagram-S7CK7UJ4-Dt9i0DU1.js} +1 -1
- package/dist/viewer/{diagram-UQ7AKVKN-DGuPmlxZ.js → diagram-UQ7AKVKN-DSZe0CPN.js} +1 -1
- package/dist/viewer/{diagram-VSXAHHWV-50AodQys.js → diagram-VSXAHHWV-DgFFVfm2.js} +1 -1
- package/dist/viewer/{diagram-VX7I27RA-D98k-lV5.js → diagram-VX7I27RA-Dd2UGWn8.js} +1 -1
- package/dist/viewer/{diagram-Z3DM3KII-DycFDlf3.js → diagram-Z3DM3KII-BPm8itCz.js} +1 -1
- package/dist/viewer/{dist-DX6_l1cB.js → dist-B20NF_1w.js} +1 -1
- package/dist/viewer/{dist-DbM09a29.js → dist-BIXBs5yY.js} +1 -1
- package/dist/viewer/{dist-CdYNWuaW.js → dist-BZQgm0fP.js} +1 -1
- package/dist/viewer/{dist-B4JXI4Si.js → dist-BrgjU6Kj.js} +1 -1
- package/dist/viewer/{dist-D1CJjkJn.js → dist-C6NM4gya.js} +1 -1
- package/dist/viewer/{dist-DDeuapns.js → dist-CAH5wbEo.js} +1 -1
- package/dist/viewer/{dist-DdMCA4Py.js → dist-CCnpKWIt.js} +2 -2
- package/dist/viewer/{dist-CzE4uHhP.js → dist-CJD5icp7.js} +1 -1
- package/dist/viewer/{dist-BDBeTEDr.js → dist-CPZZxnbc.js} +1 -1
- package/dist/viewer/{dist-zuDkqQsP.js → dist-CkbIgyIQ.js} +1 -1
- package/dist/viewer/{dist-DcF5S87J.js → dist-Cv4vuf_b.js} +1 -1
- package/dist/viewer/{dist-BnOZSaxP.js → dist-D2KAT3mC.js} +1 -1
- package/dist/viewer/{dist-BLKN3RJ1.js → dist-DRC0i5gA.js} +2 -2
- package/dist/viewer/{dist-C6m7_IIO.js → dist-DYBFczu0.js} +1 -1
- package/dist/viewer/{dist-DBnftyF_.js → dist-DnGkIFUM.js} +4 -4
- package/dist/viewer/{dist-D1YenQjZ.js → dist-G9zZ1RBJ.js} +1 -1
- package/dist/viewer/dist-J-Ry-abR.js +6 -0
- package/dist/viewer/{dist-aNCGpCGL.js → dist-JHcrIXSF.js} +1 -1
- package/dist/viewer/{dist-3toIv9ax.js → dist-Q_Zx--RV.js} +1 -1
- package/dist/viewer/dist-V-zHhIcO.js +1 -0
- package/dist/viewer/{dist-DrE8ciLv.js → dist-XvS6ci1T.js} +2 -2
- package/dist/viewer/dist-a_UUJo8x.js +23 -0
- package/dist/viewer/{dist-CfW4_4LE.js → dist-ePb257VQ.js} +1 -1
- package/dist/viewer/{dist-CCzd1zK0.js → dist-nTTZk2bO.js} +1 -1
- package/dist/viewer/{ebnfDiagram-PWID7BFC-CORvb246.js → ebnfDiagram-PWID7BFC-BMoELXgl.js} +1 -1
- package/dist/viewer/{el-GR-BZB4AONW-Bc1slvxt.js → el-GR-BZB4AONW-zsoj3bty.js} +1 -1
- package/dist/viewer/{en-B4ZKOASM-C1vlYjE_.js → en-B4ZKOASM-umHmROdK.js} +1 -1
- package/dist/viewer/{erDiagram-RLTQ6QDP-BXDWJpPA.js → erDiagram-RLTQ6QDP-DKLZGQuZ.js} +1 -1
- package/dist/viewer/{es-ES-U4NZUMDT-rZ0sZd3p.js → es-ES-U4NZUMDT-BKvciIF7.js} +1 -1
- package/dist/viewer/{eu-ES-A7QVB2H4-PI8QTaiF.js → eu-ES-A7QVB2H4-CIEtyFuU.js} +1 -1
- package/dist/viewer/{eventmodeling-NTZA5JFV-Cb9m-K7H.js → eventmodeling-NTZA5JFV-DoF-cBhC.js} +1 -1
- package/dist/viewer/{fa-IR-HGAKTJCU-DAwzrpHi.js → fa-IR-HGAKTJCU-0s9_ZrQD.js} +1 -1
- package/dist/viewer/{fi-FI-Z5N7JZ37-BByaX7nJ.js → fi-FI-Z5N7JZ37-DNx5O4ny.js} +1 -1
- package/dist/viewer/flowDiagram-HODETNUW-CAdqr-O0.js +1 -0
- package/dist/viewer/{fr-FR-RHASNOE6-Klk1fzkX.js → fr-FR-RHASNOE6-R14jaePu.js} +1 -1
- package/dist/viewer/ganttDiagram-EL5Y4UJY-BEtMB3Re.js +292 -0
- package/dist/viewer/{gitGraph-4MIJSDKK-isoaKk1X.js → gitGraph-4MIJSDKK-CAknE3UE.js} +1 -1
- package/dist/viewer/{gitGraphDiagram-WWUBYQGX-yWlETb3x.js → gitGraphDiagram-WWUBYQGX-DaF_3psO.js} +1 -1
- package/dist/viewer/{gl-ES-HMX3MZ6V-BJKYEt17.js → gl-ES-HMX3MZ6V-LKgNlnss.js} +1 -1
- package/dist/viewer/{he-IL-6SHJWFNN-kBf37qYy.js → he-IL-6SHJWFNN-BrIuZ8Py.js} +1 -1
- package/dist/viewer/{hi-IN-IWLTKZ5I-CfLTCUTm.js → hi-IN-IWLTKZ5I-CUraB0TV.js} +1 -1
- package/dist/viewer/{hu-HU-A5ZG7DT2-CYYFX46C.js → hu-HU-A5ZG7DT2-DnrESyoD.js} +1 -1
- package/dist/viewer/{id-ID-SAP4L64H-Dvx8IBbU.js → id-ID-SAP4L64H-SUjMkUnN.js} +1 -1
- package/dist/viewer/{image-GAAHSSAO-BRSljglW.js → image-GAAHSSAO-eZswirxU.js} +1 -1
- package/dist/viewer/{imperative-Bl76r1j2.js → imperative-_YhkNLK4.js} +1 -1
- package/dist/viewer/index.html +5 -5
- package/dist/viewer/index.js +2 -2
- package/dist/viewer/index3.css +40 -4
- package/dist/viewer/{info-A6RAGUB7-CCW6I4Wy.js → info-A6RAGUB7-Bsmv3OKw.js} +1 -1
- package/dist/viewer/{infoDiagram-27XIBGKW-DewuEFv-.js → infoDiagram-27XIBGKW-3GhkTSpF.js} +1 -1
- package/dist/viewer/{isElementDisabled-DZok2iqw.js → isElementDisabled-BwUscK-1.js} +1 -1
- package/dist/viewer/{ishikawaDiagram-5VMMS53U-BDDRi495.js → ishikawaDiagram-5VMMS53U-CjPzGmEw.js} +1 -1
- package/dist/viewer/{it-IT-JPQ66NNP-BFWWFlnb.js → it-IT-JPQ66NNP-CVlssRrp.js} +1 -1
- package/dist/viewer/{ja-JP-DBVTYXUO-bpQtg8fw.js → ja-JP-DBVTYXUO-Hp2I9Iyx.js} +1 -1
- package/dist/viewer/{journeyDiagram-3NMN7TZE-BbJ1eZNu.js → journeyDiagram-3NMN7TZE-DhyEZ2I3.js} +1 -1
- package/dist/viewer/{kaa-6HZHGXH3-K5oenSag.js → kaa-6HZHGXH3-7aWlc8ys.js} +1 -1
- package/dist/viewer/{kab-KAB-ZGHBKWFO-DkUxVyw_.js → kab-KAB-ZGHBKWFO-Co-ehoZu.js} +1 -1
- package/dist/viewer/{kanban-definition-UXKFOSKX-B3qZ6Rkk.js → kanban-definition-UXKFOSKX-Dtoq54ES.js} +1 -1
- package/dist/viewer/{kk-KZ-P5N5QNE5-BUjA95mK.js → kk-KZ-P5N5QNE5-DWQlG67D.js} +1 -1
- package/dist/viewer/{km-KH-HSX4SM5Z-D4uRbo6A.js → km-KH-HSX4SM5Z-JtHzzhkf.js} +1 -1
- package/dist/viewer/{ko-KR-MTYHY66A-bLvg0vo1.js → ko-KR-MTYHY66A-SVXw6RP-.js} +1 -1
- package/dist/viewer/{ku-TR-6OUDTVRD-Btg6Cs-I.js → ku-TR-6OUDTVRD-BCl0E9O4.js} +1 -1
- package/dist/viewer/local-split-host-DNVZJL-p.js +1 -0
- package/dist/viewer/{lt-LT-XHIRWOB4-BXtyilKc.js → lt-LT-XHIRWOB4-BM6oy7Qh.js} +1 -1
- package/dist/viewer/{lv-LV-5QDEKY6T-trXznvJJ.js → lv-LV-5QDEKY6T-Dno1GFUx.js} +1 -1
- package/dist/viewer/{mermaid-parser.core-CHSpk_HG.js → mermaid-parser.core-CHryh7q2.js} +3 -3
- package/dist/viewer/messages-ByFQUibx.js +1 -0
- package/dist/viewer/{mindmap-definition-YA3MSWOX-CWPQuuGG.js → mindmap-definition-YA3MSWOX-DcZP0645.js} +1 -1
- package/dist/viewer/{mr-IN-CRQNXWMA-CM5QTzuk.js → mr-IN-CRQNXWMA-CRIolDpf.js} +1 -1
- package/dist/viewer/{my-MM-5M5IBNSE-DUgiCj6u.js → my-MM-5M5IBNSE-MwaIgMgQ.js} +1 -1
- package/dist/viewer/{nb-NO-T6EIAALU-D8rCk2qi.js → nb-NO-T6EIAALU-C6XQwPOX.js} +1 -1
- package/dist/viewer/{nl-NL-IS3SIHDZ-DSR4OK7l.js → nl-NL-IS3SIHDZ-CxSbCT2i.js} +1 -1
- package/dist/viewer/{nn-NO-6E72VCQL-1Hi7xlf5.js → nn-NO-6E72VCQL-CbP2Axky.js} +1 -1
- package/dist/viewer/{oc-FR-POXYY2M6-T-3jTSUi.js → oc-FR-POXYY2M6-Dn7n39jS.js} +1 -1
- package/dist/viewer/{pa-IN-N4M65BXN-xpefY7_A.js → pa-IN-N4M65BXN-DQo8oQqA.js} +1 -1
- package/dist/viewer/{packet-AYTQ26CC-BcLryIwT.js → packet-AYTQ26CC-dnn_KeS8.js} +1 -1
- package/dist/viewer/{pegDiagram-XKGWAZYB-28MmCQx6.js → pegDiagram-XKGWAZYB-2AcyHVIQ.js} +1 -1
- package/dist/viewer/percentages-BXMCSKIN-Ny0Q3EEx.js +1 -0
- package/dist/viewer/{pie-WAS4IAKB-DkoovnS2.js → pie-WAS4IAKB-C-V2of2Z.js} +1 -1
- package/dist/viewer/{pieDiagram-E7YTZNPT-D9tSKQkI.js → pieDiagram-E7YTZNPT-CNl1kvr4.js} +1 -1
- package/dist/viewer/{pl-PL-T2D74RX3-DGg_KuwH.js → pl-PL-T2D74RX3-CHBV_JI8.js} +1 -1
- package/dist/viewer/preview.html +4 -4
- package/dist/viewer/preview.js +1 -1
- package/dist/viewer/{prod-x5m4nnk2.js → prod-GiVGCxPb.js} +9 -9
- package/dist/viewer/{pt-BR-5N22H2LF-Ccab0mQU.js → pt-BR-5N22H2LF-DxJcRGlD.js} +1 -1
- package/dist/viewer/{pt-PT-UZXXM6DQ-CIMND8O_.js → pt-PT-UZXXM6DQ-U93mdWBO.js} +1 -1
- package/dist/viewer/{quadrantDiagram-AXDQQJYC-D8YUh_rr.js → quadrantDiagram-AXDQQJYC-C2yQqGcH.js} +1 -1
- package/dist/viewer/{radar-RG4KPBEZ-maaMLwMS.js → radar-RG4KPBEZ-DEQbufWQ.js} +1 -1
- package/dist/viewer/{railroad-74A4TZTK-BiB5uT6j.js → railroad-74A4TZTK-nycieANE.js} +1 -1
- package/dist/viewer/{railroad-abnf-HS5TGJTU-CilEsgfI.js → railroad-abnf-HS5TGJTU-Q7AD2CxO.js} +1 -1
- package/dist/viewer/{railroad-ebnf-LZEXJU2U-CX5aEvR0.js → railroad-ebnf-LZEXJU2U-BvOZBzTF.js} +1 -1
- package/dist/viewer/{railroad-peg-WCYAUIDC-BxZrwOzZ.js → railroad-peg-WCYAUIDC-CgyxJCgO.js} +1 -1
- package/dist/viewer/{railroadDiagram-O6MQD6OU-C8BzjLMd.js → railroadDiagram-O6MQD6OU-CPqAQg4Z.js} +1 -1
- package/dist/viewer/{requirementDiagram-BXWQKSXE-CFUVLnqw.js → requirementDiagram-BXWQKSXE-xC_LnSVv.js} +1 -1
- package/dist/viewer/{ro-RO-JPDTUUEW-BS1TF72D.js → ro-RO-JPDTUUEW-mIaEDa0N.js} +1 -1
- package/dist/viewer/{route-C680gVZl.js → route-DYaSOkyn.js} +2 -2
- package/dist/viewer/{ru-RU-B4JR7IUQ-CHMlU7kb.js → ru-RU-B4JR7IUQ-Bz3n1Nvv.js} +1 -1
- package/dist/viewer/{sankeyDiagram-P5KCCOFB-Ctqqk5CX.js → sankeyDiagram-P5KCCOFB-CY0RPWoA.js} +1 -1
- package/dist/viewer/{selection-HixnnPur.js → selection-kJ3dxSuU.js} +1 -1
- package/dist/viewer/{sequenceDiagram-WJ2MYXX4-BMF7Yr8w.js → sequenceDiagram-WJ2MYXX4-B-pDfaOI.js} +1 -1
- package/dist/viewer/{settings-dialog-DCHQA2FU.js → settings-dialog-DJBifcsk.js} +1 -1
- package/dist/viewer/{si-LK-N5RQ5JYF-04M_PbX7.js → si-LK-N5RQ5JYF-DK9qNgFK.js} +1 -1
- package/dist/viewer/{sk-SK-C5VTKIMK-npVDEClq.js → sk-SK-C5VTKIMK-Dava3Enb.js} +1 -1
- package/dist/viewer/{sl-SI-NN7IZMDC-eO4SV9v3.js → sl-SI-NN7IZMDC-DHYFwE-d.js} +1 -1
- package/dist/viewer/{split-url-EcmwFhkE.js → split-url-dnlNU15s.js} +1 -1
- package/dist/viewer/{stateDiagram-D77RDMKH-BfYCodpx.js → stateDiagram-D77RDMKH-Z94YnGDy.js} +1 -1
- package/dist/viewer/stateDiagram-v2-MP3YSRHH-CrVY5liO.js +1 -0
- package/dist/viewer/subset-shared.chunk-DieSBWOG.js +1 -0
- package/dist/viewer/{subset-worker.chunk-bPvG0d57.js → subset-worker.chunk-B8bh964c.js} +1 -1
- package/dist/viewer/{sv-SE-XGPEYMSR-bqQ8_wr-.js → sv-SE-XGPEYMSR-CvDLBZBa.js} +1 -1
- package/dist/viewer/{swimlanes-42K2YHIH-dgR9qJGL.js → swimlanes-42K2YHIH-C0TefFPR.js} +1 -1
- package/dist/viewer/swimlanesDiagram-VR7AAH4N-UXgVsias.js +8 -0
- package/dist/viewer/{ta-IN-2NMHFXQM-B-FnwnkD.js → ta-IN-2NMHFXQM-DDYntxFl.js} +1 -1
- package/dist/viewer/{th-TH-HPSO5L25-PdKsfBFn.js → th-TH-HPSO5L25-ZxMqu6gC.js} +1 -1
- package/dist/viewer/{timeline-definition-24CTP7MA-BMCYoChw.js → timeline-definition-24CTP7MA-BKjZneFP.js} +1 -1
- package/dist/viewer/{tr-TR-DEFEU3FU-B4qIeS8D.js → tr-TR-DEFEU3FU-B2pq5a2N.js} +1 -1
- package/dist/viewer/{treeView-Q6P3EWNA-BY1SPiGu.js → treeView-Q6P3EWNA-CzRKPU-u.js} +1 -1
- package/dist/viewer/{treemap-WGGIJYW6-C0VMGONw.js → treemap-WGGIJYW6-CJ9mgExM.js} +1 -1
- package/dist/viewer/{uk-UA-QMV73CPH-D7drZA64.js → uk-UA-QMV73CPH-DliJo-Ys.js} +1 -1
- package/dist/viewer/useArtifactFeed-BwcxmGxv.js +1 -0
- package/dist/viewer/useCloudStatus-BGo294ml.js +1 -0
- package/dist/viewer/useMedia-D8CjE-j8.js +1 -0
- package/dist/viewer/{useOpenInteractionType-DXxloYK-.js → useOpenInteractionType-CKJQyk9S.js} +1 -1
- package/dist/viewer/{useTranslation-Pzj8jSZg.js → useTranslation-t8jNxSf7.js} +1 -1
- package/dist/viewer/useTypeFavicon-DdgEBY2z.js +1 -0
- package/dist/viewer/{vennDiagram-4TSXK5OY-BZvfzbkk.js → vennDiagram-4TSXK5OY-DFKX_VPB.js} +1 -1
- package/dist/viewer/verdicts-DTCoDGyi.js +1 -0
- package/dist/viewer/{vi-VN-M7AON7JQ-C4JGfMaF.js → vi-VN-M7AON7JQ-B4ooV6-0.js} +1 -1
- package/dist/viewer/{view-CEDIINbK.js → view-DAv-p29M.js} +1 -1
- package/dist/viewer/{viewport-CFJHn_Y6-EKV3XlAA.js → viewport-CFJHn_Y6-7cOMixnT.js} +1 -1
- package/dist/viewer/{wardley-WFR3VGLG-DpyQ2UuG.js → wardley-WFR3VGLG-DUTPfGqO.js} +1 -1
- package/dist/viewer/{wardleyDiagram-VM6X3IG4-BQ6o0RYp.js → wardleyDiagram-VM6X3IG4-D-YIXTi3.js} +1 -1
- package/dist/viewer/{xychartDiagram-S5SC5T6Z-C7Zmu8u-.js → xychartDiagram-S5SC5T6Z-CrfV8Z2r.js} +2 -2
- package/dist/viewer/{zh-CN-LNUGB5OW-HH9iFktL.js → zh-CN-LNUGB5OW-DV5Sf1hZ.js} +1 -1
- package/dist/viewer/{zh-HK-E62DVLB3-CQs9vPCC.js → zh-HK-E62DVLB3-DqdoMgey.js} +1 -1
- package/dist/viewer/{zh-TW-RAJ6MFWO-BrJH7r4M.js → zh-TW-RAJ6MFWO-Bp2Aj3WE.js} +1 -1
- package/dist/viewer-lib/{BottomSheet-CmQ-mlg3.js → BottomSheet-6PyEWu_I.js} +2 -2
- package/dist/viewer-lib/{Canvas-zsUI5R_r.js → Canvas-CLHk5G2x.js} +142 -115
- package/dist/viewer-lib/{PreviewView-sdm-qrv7.js → PreviewView-Cwd9OwHs.js} +2 -2
- package/dist/viewer-lib/{SnapshotDocument-BRrf3bYP.js → SnapshotDocument-LOn7Pshr.js} +35 -35
- package/dist/viewer-lib/{VirtualizedEditor-D9Ivycdp-CKmY-oBS.js → VirtualizedEditor-D9Ivycdp-BM9t5-Th.js} +2 -2
- package/dist/viewer-lib/{VirtualizedRenderer-C_d95FXi-CRCHpfEc.js → VirtualizedRenderer-C_d95FXi-CB_Lm4Tu.js} +3 -3
- package/dist/viewer-lib/{WarningsBadge-CP8suzTb.js → WarningsBadge-DNC7NkUF.js} +1 -1
- package/dist/viewer-lib/{abnfDiagram-VCTEODGH-BcqIWXiN.js → abnfDiagram-VCTEODGH-CaS0VFx0.js} +2 -2
- package/dist/viewer-lib/{agentLook-JAlLJ_KQ.js → agentLook-BSHloVwx.js} +1 -1
- package/dist/viewer-lib/{ar-SA-G6X2FPQ2-C9GRL_5j.js → ar-SA-G6X2FPQ2-QikTuJ6H.js} +1 -1
- package/dist/viewer-lib/{architectureDiagram-5GKGNRK7-CdWD82aP.js → architectureDiagram-5GKGNRK7-FUNSgbrA.js} +3 -3
- package/dist/viewer-lib/{az-AZ-76LH7QW2-Bzvwk86v.js → az-AZ-76LH7QW2-kkLTB1rg.js} +1 -1
- package/dist/viewer-lib/{bg-BG-XCXSNQG7-BnpAqy1u.js → bg-BG-XCXSNQG7-Bg9mtvaJ.js} +1 -1
- package/dist/viewer-lib/{blockDiagram-I7D4REHJ-b3mcK6pX.js → blockDiagram-I7D4REHJ-D57ACiLL.js} +5 -5
- package/dist/viewer-lib/{bn-BD-2XOGV67Q-D_2DZRzE.js → bn-BD-2XOGV67Q-XBc68o9d.js} +1 -1
- package/dist/viewer-lib/{c4Diagram-7LVT6UL2-IPVOeGBM.js → c4Diagram-7LVT6UL2-BWFr8EY8.js} +3 -3
- package/dist/viewer-lib/{ca-ES-6MX7JW3Y-B9pr5fXX.js → ca-ES-6MX7JW3Y-boToPDu2.js} +1 -1
- package/dist/viewer-lib/{chunk-4HAMMTFA-DRZlxcJK.js → chunk-4HAMMTFA-CkKDgg0R.js} +2 -2
- package/dist/viewer-lib/{chunk-EIO257PC-Csle0Z6K.js → chunk-EIO257PC-BhJQeVEB.js} +1 -1
- package/dist/viewer-lib/{chunk-GMAD6QVW-Dv9-FWAD.js → chunk-GMAD6QVW-CuiBT4rF.js} +1 -1
- package/dist/viewer-lib/{chunk-GVQU2GXP-BgYFpEUK.js → chunk-GVQU2GXP-PiMT9J_e.js} +1 -1
- package/dist/viewer-lib/{chunk-IMKFNOWR-CeHdonLi.js → chunk-IMKFNOWR-BsU2ugOL.js} +1 -1
- package/dist/viewer-lib/{chunk-L3NEJ4N5-DZiUeBIT.js → chunk-L3NEJ4N5-bhJ_l0rD.js} +3 -3
- package/dist/viewer-lib/{chunk-OSK3NFVY-CPK5Cy4R.js → chunk-OSK3NFVY-SejOGw3K.js} +4 -4
- package/dist/viewer-lib/{chunk-PWAF6VOD-DHxPdi5T.js → chunk-PWAF6VOD-DW3aSujp.js} +1 -1
- package/dist/viewer-lib/{chunk-SHT3W25Y-LOvf3hk7.js → chunk-SHT3W25Y-DrnhXJn1.js} +2 -2
- package/dist/viewer-lib/{chunk-SVP7TREG-DCUAISUY.js → chunk-SVP7TREG-DxtGuYE_.js} +1 -1
- package/dist/viewer-lib/{chunk-TICWLB2K-ByMAX8gU.js → chunk-TICWLB2K-PwAERtPL.js} +1 -1
- package/dist/viewer-lib/{classDiagram-ZZMXUADV-CTNifYSG.js → classDiagram-ZZMXUADV-BjcIz4KM.js} +8 -8
- package/dist/viewer-lib/{classDiagram-v2-VYDZK3BY-DPrdiRUa.js → classDiagram-v2-VYDZK3BY-D8Skaixn.js} +8 -8
- package/dist/viewer-lib/core.js +3 -3
- package/dist/viewer-lib/{cs-CZ-2BRQDIVT-BTChkIYu.js → cs-CZ-2BRQDIVT-ClM_vRAm.js} +1 -1
- package/dist/viewer-lib/{cynefinDiagram-5FMLGOSQ-CJqj0WaL.js → cynefinDiagram-5FMLGOSQ-BlUjtF3U.js} +1 -1
- package/dist/viewer-lib/{da-DK-5WZEPLOC-t_4lopIQ.js → da-DK-5WZEPLOC-DJwAGxDn.js} +1 -1
- package/dist/viewer-lib/{dagre-GXQ25YYZ-C-Tlx0XY.js → dagre-GXQ25YYZ-BTEYeKQY.js} +7 -7
- package/dist/viewer-lib/{de-DE-XR44H4JA-1muDYa7q.js → de-DE-XR44H4JA-B_VfQ-2v.js} +1 -1
- package/dist/viewer-lib/{diagram-S7CK7UJ4-Dvu3Flg-.js → diagram-S7CK7UJ4-Bq6cvpPE.js} +2 -2
- package/dist/viewer-lib/{diagram-UQ7AKVKN-DKdXjDs2.js → diagram-UQ7AKVKN-BFpYj8D9.js} +1 -1
- package/dist/viewer-lib/{diagram-VX7I27RA-C1a4YeFj.js → diagram-VX7I27RA-CZJIvtMv.js} +2 -2
- package/dist/viewer-lib/{diagram-Z3DM3KII-BkXxEH5E.js → diagram-Z3DM3KII-B009LTl6.js} +1 -1
- package/dist/viewer-lib/{dist-BUboBstj.js → dist-0BbZqtqQ.js} +3 -3
- package/dist/viewer-lib/{dist-B1PqUp83.js → dist-BOEUR9tt.js} +2 -2
- package/dist/viewer-lib/{dist-D-7VBnnE.js → dist-BSHzBH45.js} +4 -4
- package/dist/viewer-lib/{dist-Ddn-ZW9x.js → dist-B_jrXFz4.js} +2 -2
- package/dist/viewer-lib/{dist-DbanN8W9.js → dist-BdZLaZs9.js} +3 -3
- package/dist/viewer-lib/{dist-UXF2UOX-.js → dist-BlUF4IaO.js} +2 -2
- package/dist/viewer-lib/{dist-sH8SwUeH.js → dist-C7cs1DYp.js} +3 -3
- package/dist/viewer-lib/{dist-DTu9gvb9.js → dist-CA9eEwxZ.js} +3 -3
- package/dist/viewer-lib/{dist-BTOt7KE6.js → dist-CKtcXXnp.js} +2 -2
- package/dist/viewer-lib/{dist-CKT6VPOt.js → dist-CMb9V6AI.js} +2 -2
- package/dist/viewer-lib/{dist-Dd94-nUb.js → dist-CgeC5vzP.js} +3 -3
- package/dist/viewer-lib/{dist-CW4BqRiO.js → dist-CwkLFmtg.js} +1 -1
- package/dist/viewer-lib/{dist-brZt020-.js → dist-D4ihNzpJ.js} +3 -3
- package/dist/viewer-lib/{dist-Ck2QIOBP.js → dist-DOnavGjd.js} +3 -3
- package/dist/viewer-lib/{dist-T_M2R-mU.js → dist-DaLGOpZ0.js} +2 -2
- package/dist/viewer-lib/{dist-DshrM5NU.js → dist-Df2ZzhMm.js} +3 -3
- package/dist/viewer-lib/{dist-B6UGwggQ.js → dist-DsQWJDDp.js} +4 -4
- package/dist/viewer-lib/{dist-BIlVb4s5.js → dist-Dw8vWuOF.js} +2 -2
- package/dist/viewer-lib/{dist-4d_5T54o.js → dist-DyNR_ARp.js} +1 -1
- package/dist/viewer-lib/{dist-DcaboDn3.js → dist-PIGTNSZn.js} +3 -3
- package/dist/viewer-lib/{dist-Cjimm-Jl.js → dist-XlhrQdHn.js} +2 -2
- package/dist/viewer-lib/{dist-D16sPdym.js → dist-brqPUpgR.js} +3 -3
- package/dist/viewer-lib/{dist-C2MyLee5.js → dist-kxkFqjxk.js} +43 -43
- package/dist/viewer-lib/{dist-DZUqL8d-.js → dist-y61uVn7g.js} +4 -4
- package/dist/viewer-lib/document.js +41 -22
- package/dist/viewer-lib/{ebnfDiagram-PWID7BFC-Cm7Ab-sV.js → ebnfDiagram-PWID7BFC-s9Ka95mL.js} +2 -2
- package/dist/viewer-lib/{el-GR-BZB4AONW-CE4Sdzuz.js → el-GR-BZB4AONW-BksF2U0i.js} +1 -1
- package/dist/viewer-lib/{en-B4ZKOASM-ByJIU_CM.js → en-B4ZKOASM-BHdkkDnU.js} +1 -1
- package/dist/viewer-lib/{erDiagram-RLTQ6QDP-Dw2k-b8X.js → erDiagram-RLTQ6QDP-DLEkCbHx.js} +7 -7
- package/dist/viewer-lib/{es-ES-U4NZUMDT-CdVsjw7_.js → es-ES-U4NZUMDT-D7frP5H5.js} +1 -1
- package/dist/viewer-lib/{eu-ES-A7QVB2H4-C_mFymvA.js → eu-ES-A7QVB2H4-CIitEizR.js} +1 -1
- package/dist/viewer-lib/{fa-IR-HGAKTJCU-ByRuU7uQ.js → fa-IR-HGAKTJCU-DG4i9E4t.js} +1 -1
- package/dist/viewer-lib/{fi-FI-Z5N7JZ37-DCy5msMW.js → fi-FI-Z5N7JZ37-B0A8Sbor.js} +1 -1
- package/dist/viewer-lib/flowDiagram-HODETNUW-CFQD1uO6.js +15 -0
- package/dist/viewer-lib/{fr-FR-RHASNOE6-Js8LEXaG.js → fr-FR-RHASNOE6-Cigp9xJY.js} +1 -1
- package/dist/viewer-lib/{ganttDiagram-EL5Y4UJY-ojCIdqy5.js → ganttDiagram-EL5Y4UJY-BzcHHdr3.js} +1 -1
- package/dist/viewer-lib/{gl-ES-HMX3MZ6V-DXYxWA9n.js → gl-ES-HMX3MZ6V-De1l8aoj.js} +1 -1
- package/dist/viewer-lib/{he-IL-6SHJWFNN-DXkUBR8K.js → he-IL-6SHJWFNN-DfaMFN91.js} +1 -1
- package/dist/viewer-lib/{hi-IN-IWLTKZ5I-D5U6H5z-.js → hi-IN-IWLTKZ5I-CHP3sOje.js} +1 -1
- package/dist/viewer-lib/{hu-HU-A5ZG7DT2-DDa7gVCP.js → hu-HU-A5ZG7DT2-B-Wtga39.js} +1 -1
- package/dist/viewer-lib/{i18n-BPoZ83u5.js → i18n-DgnmyJzy.js} +20 -0
- package/dist/viewer-lib/{id-ID-SAP4L64H-BIQxeAER.js → id-ID-SAP4L64H-BYVUO2Uk.js} +1 -1
- package/dist/viewer-lib/{image-GAAHSSAO-Bi64DG9r.js → image-GAAHSSAO-p6UjpkEQ.js} +1 -1
- package/dist/viewer-lib/index.js +605 -600
- package/dist/viewer-lib/{infoDiagram-27XIBGKW-BUp2-126.js → infoDiagram-27XIBGKW-Dg3R-2jC.js} +1 -1
- package/dist/viewer-lib/{ishikawaDiagram-5VMMS53U-BCijsdRK.js → ishikawaDiagram-5VMMS53U-o8M0zr6b.js} +1 -1
- package/dist/viewer-lib/{it-IT-JPQ66NNP-B8zwF05Q.js → it-IT-JPQ66NNP-D_HLXpbm.js} +1 -1
- package/dist/viewer-lib/{ja-JP-DBVTYXUO-D8svaAtt.js → ja-JP-DBVTYXUO-CEo26FZs.js} +1 -1
- package/dist/viewer-lib/{journeyDiagram-3NMN7TZE-GC8hOs3H.js → journeyDiagram-3NMN7TZE-IKKA2odG.js} +1 -1
- package/dist/viewer-lib/{kaa-6HZHGXH3-CUkX7Esz.js → kaa-6HZHGXH3-Clv2CAEn.js} +1 -1
- package/dist/viewer-lib/{kab-KAB-ZGHBKWFO-B3wNptDE.js → kab-KAB-ZGHBKWFO-Bm8q76_P.js} +1 -1
- package/dist/viewer-lib/{kanban-definition-UXKFOSKX-DgTcKCkc.js → kanban-definition-UXKFOSKX-j_ouX3pt.js} +6 -6
- package/dist/viewer-lib/{kk-KZ-P5N5QNE5-BCCrWYvW.js → kk-KZ-P5N5QNE5-BdPH7ns0.js} +1 -1
- package/dist/viewer-lib/{km-KH-HSX4SM5Z-BtxxgcVG.js → km-KH-HSX4SM5Z-CYzSP_Wz.js} +1 -1
- package/dist/viewer-lib/{ko-KR-MTYHY66A-DWQyZku6.js → ko-KR-MTYHY66A-BvjphoRF.js} +1 -1
- package/dist/viewer-lib/{ku-TR-6OUDTVRD-Bvz63KqZ.js → ku-TR-6OUDTVRD-B9bT8-oY.js} +1 -1
- package/dist/viewer-lib/{lt-LT-XHIRWOB4-C9hKOOFk.js → lt-LT-XHIRWOB4-n8ThfFZX.js} +1 -1
- package/dist/viewer-lib/{lv-LV-5QDEKY6T-CcSv3YIv.js → lv-LV-5QDEKY6T-Dc7Ovfir.js} +1 -1
- package/dist/viewer-lib/{mindmap-definition-YA3MSWOX-DkYON3LI.js → mindmap-definition-YA3MSWOX-DRQKmldL.js} +7 -7
- package/dist/viewer-lib/{mr-IN-CRQNXWMA-B7Fkafce.js → mr-IN-CRQNXWMA-Xot9_Rfp.js} +1 -1
- package/dist/viewer-lib/{my-MM-5M5IBNSE-3sFKtmpR.js → my-MM-5M5IBNSE-DndQX8Jm.js} +1 -1
- package/dist/viewer-lib/{nb-NO-T6EIAALU-CBIrmzXA.js → nb-NO-T6EIAALU-C3-O3O3q.js} +1 -1
- package/dist/viewer-lib/{nl-NL-IS3SIHDZ-D-7E7BWK.js → nl-NL-IS3SIHDZ-BzlZ2P0b.js} +1 -1
- package/dist/viewer-lib/{nn-NO-6E72VCQL-BE0N1SpI.js → nn-NO-6E72VCQL-kYugECen.js} +1 -1
- package/dist/viewer-lib/{oc-FR-POXYY2M6-CZdzcnlV.js → oc-FR-POXYY2M6-sDMgcduE.js} +1 -1
- package/dist/viewer-lib/{pa-IN-N4M65BXN-Cy5dIrii.js → pa-IN-N4M65BXN-B565I1l2.js} +1 -1
- package/dist/viewer-lib/{pegDiagram-XKGWAZYB-_z_9ahsa.js → pegDiagram-XKGWAZYB-D_yqrOMS.js} +2 -2
- package/dist/viewer-lib/percentages-BXMCSKIN-BL1yYGJJ.js +1 -0
- package/dist/viewer-lib/{pieDiagram-E7YTZNPT-ozmxheeh.js → pieDiagram-E7YTZNPT-BZxECmkG.js} +2 -2
- package/dist/viewer-lib/{pl-PL-T2D74RX3-45L7cZ3M.js → pl-PL-T2D74RX3-CbdkYzou.js} +1 -1
- package/dist/viewer-lib/{plugin-_bGVeqI0-BSPgvD7m.js → plugin-_bGVeqI0-DA4IV5I1.js} +1 -1
- package/dist/viewer-lib/{prod-gq5WhEDa.js → prod-llK5wpAC.js} +61 -61
- package/dist/viewer-lib/{pt-BR-5N22H2LF-BLmx2uhv.js → pt-BR-5N22H2LF-DQv1ybQ8.js} +1 -1
- package/dist/viewer-lib/{pt-PT-UZXXM6DQ-lyzgNGbx.js → pt-PT-UZXXM6DQ-CP3V_8X2.js} +1 -1
- package/dist/viewer-lib/{quadrantDiagram-AXDQQJYC-O5HVk-fl.js → quadrantDiagram-AXDQQJYC-BfzBhDDA.js} +1 -1
- package/dist/viewer-lib/{railroadDiagram-O6MQD6OU-CrCFPBb1.js → railroadDiagram-O6MQD6OU-DUEpFqjB.js} +2 -2
- package/dist/viewer-lib/{requirementDiagram-BXWQKSXE-itQjHrCZ.js → requirementDiagram-BXWQKSXE-Drgz4NCl.js} +7 -7
- package/dist/viewer-lib/{ro-RO-JPDTUUEW-CAG1RMKi.js → ro-RO-JPDTUUEW-C4vtGNDF.js} +1 -1
- package/dist/viewer-lib/{ru-RU-B4JR7IUQ-DcRA0eFi.js → ru-RU-B4JR7IUQ-DB_JA5cm.js} +1 -1
- package/dist/viewer-lib/{sequenceDiagram-WJ2MYXX4-DlkJYYc-.js → sequenceDiagram-WJ2MYXX4-BKsJiG6S.js} +1 -1
- package/dist/viewer-lib/{si-LK-N5RQ5JYF-CvTHO8RZ.js → si-LK-N5RQ5JYF-BCKr33di.js} +1 -1
- package/dist/viewer-lib/{sk-SK-C5VTKIMK-DYe4CrYi.js → sk-SK-C5VTKIMK-Dfag8d_3.js} +1 -1
- package/dist/viewer-lib/{sl-SI-NN7IZMDC-ChXQR2a1.js → sl-SI-NN7IZMDC-VbBSUOUJ.js} +1 -1
- package/dist/viewer-lib/{stateDiagram-D77RDMKH-DOyMGBzi.js → stateDiagram-D77RDMKH-Dtdw1Ipn.js} +9 -9
- package/dist/viewer-lib/{stateDiagram-v2-MP3YSRHH-Evkc2VhV.js → stateDiagram-v2-MP3YSRHH-B1wQoHXi.js} +8 -8
- package/dist/viewer-lib/{stylex-ADNt4DYX.css → stylex-CibYRSc3.css} +4 -4
- package/dist/viewer-lib/subset-shared.chunk-BmoZNBrB.js +2 -0
- package/dist/viewer-lib/{subset-worker.chunk-CqRZNp0D.js → subset-worker.chunk-BaG_gcml.js} +2 -2
- package/dist/viewer-lib/{sv-SE-XGPEYMSR-Cqpzdflw.js → sv-SE-XGPEYMSR-uGek8WLx.js} +1 -1
- package/dist/viewer-lib/{swimlanes-42K2YHIH-Clk2tUDm.js → swimlanes-42K2YHIH-CJp4Ujis.js} +7 -7
- package/dist/viewer-lib/{swimlanesDiagram-VR7AAH4N-E--6xQOc.js → swimlanesDiagram-VR7AAH4N-B8nsdv6K.js} +8 -8
- package/dist/viewer-lib/{ta-IN-2NMHFXQM-BdkwgU_E.js → ta-IN-2NMHFXQM-CD89DKSY.js} +1 -1
- package/dist/viewer-lib/{th-TH-HPSO5L25-8E8IRdKX.js → th-TH-HPSO5L25-B8ajl7oq.js} +1 -1
- package/dist/viewer-lib/{timeline-definition-24CTP7MA-oJk6CQ62.js → timeline-definition-24CTP7MA-r6rQsm5j.js} +2 -2
- package/dist/viewer-lib/{tr-TR-DEFEU3FU-CwVRRypN.js → tr-TR-DEFEU3FU-B1uetpiQ.js} +1 -1
- package/dist/viewer-lib/types/src/shared/agent-status.d.ts +20 -0
- package/dist/viewer-lib/types/src/shared/types.d.ts +4 -0
- package/dist/viewer-lib/types/src/viewer/components/Canvas.d.ts +4 -1
- package/dist/viewer-lib/types/src/viewer/document/useCloudRefBoard.d.ts +1 -0
- package/dist/viewer-lib/types/src/viewer/hooks/useCanvasData.d.ts +2 -1
- package/dist/viewer-lib/types/src/viewer/hooks/useCursorParked.d.ts +1 -0
- package/dist/viewer-lib/types/src/viewer/layouts/ArtboardView.d.ts +3 -1
- package/dist/viewer-lib/types/src/viewer/layouts/PhoneArtboard.d.ts +3 -1
- package/dist/viewer-lib/types/src/viewer/lib/cursorPark.d.ts +13 -0
- package/dist/viewer-lib/types/src/viewer/lib/feed.d.ts +2 -0
- package/dist/viewer-lib/{uk-UA-QMV73CPH-k8lrIltz.js → uk-UA-QMV73CPH-B7A02qBP.js} +1 -1
- package/dist/viewer-lib/{vennDiagram-4TSXK5OY-B831nqfc.js → vennDiagram-4TSXK5OY-h8monHL9.js} +1 -1
- package/dist/viewer-lib/{vi-VN-M7AON7JQ-BOSWpRVj.js → vi-VN-M7AON7JQ-DS76pp2k.js} +1 -1
- package/dist/viewer-lib/{viewport-CFJHn_Y6-LaFiTbTr.js → viewport-CFJHn_Y6-Bxae2L9X.js} +1 -1
- package/dist/viewer-lib/{wardleyDiagram-VM6X3IG4-D8hama2v.js → wardleyDiagram-VM6X3IG4-BRtvuiN8.js} +1 -1
- package/dist/viewer-lib/{xychartDiagram-S5SC5T6Z-BgF6DuGP.js → xychartDiagram-S5SC5T6Z-CpFKUIWd.js} +4 -4
- package/dist/viewer-lib/{zh-CN-LNUGB5OW-DC5QUJ1S.js → zh-CN-LNUGB5OW-C-xg90Aa.js} +1 -1
- package/dist/viewer-lib/{zh-HK-E62DVLB3-DpCawjf0.js → zh-HK-E62DVLB3-BJmaecPz.js} +1 -1
- package/dist/viewer-lib/{zh-TW-RAJ6MFWO-DtYt9wQa.js → zh-TW-RAJ6MFWO-C0oCsL-1.js} +1 -1
- package/package.json +1 -1
- package/dist/viewer/ArtboardLayout-Bn13zoQ0.js +0 -12
- package/dist/viewer/ArtifactList-xPH03ekM.js +0 -2
- package/dist/viewer/DocumentLayout-BTPD7t8z.js +0 -2
- package/dist/viewer/DocumentPage-AxyoH_UG.js +0 -4
- package/dist/viewer/PreviewLayout-BYHbU8pA.js +0 -2
- package/dist/viewer/SettingsDialog-DuGcfRD6.js +0 -1
- package/dist/viewer/SnapshotDocument-BdixBnqr.js +0 -1
- package/dist/viewer/SplitShell-DbDyQWmx.js +0 -1
- package/dist/viewer/TooltipPopup-BkLxWk5U.js +0 -1
- package/dist/viewer/VirtualizedEditor-D9Ivycdp-D_m5rZu5.js +0 -1
- package/dist/viewer/agentLook-XVxxsZ0G.js +0 -1
- package/dist/viewer/channel-CU8wzXfN.js +0 -1
- package/dist/viewer/classDiagram-ZZMXUADV-Bjg3chE2.js +0 -1
- package/dist/viewer/classDiagram-v2-VYDZK3BY-Bjg3chE2.js +0 -1
- package/dist/viewer/dist-BVso9ZnX.js +0 -23
- package/dist/viewer/dist-C40aE18e.js +0 -6
- package/dist/viewer/dist-CRGDTKo5.js +0 -1
- package/dist/viewer/flowDiagram-HODETNUW-yoSwUZRV.js +0 -1
- package/dist/viewer/ganttDiagram-EL5Y4UJY-CXpcZBGV.js +0 -292
- package/dist/viewer/local-split-host-81-CNYzg.js +0 -1
- package/dist/viewer/motion-DuWNLoOD.js +0 -1
- package/dist/viewer/percentages-BXMCSKIN-CVjj6sZf.js +0 -1
- package/dist/viewer/stateDiagram-v2-MP3YSRHH-fUvYDEUV.js +0 -1
- package/dist/viewer/subset-shared.chunk-DhgHzOaH.js +0 -1
- package/dist/viewer/swimlanesDiagram-VR7AAH4N-DO1nuuiZ.js +0 -8
- package/dist/viewer/useArtifactFeed-xA-zirbh.js +0 -1
- package/dist/viewer/useArtifactSocket-OyJ8LQZj.js +0 -1
- package/dist/viewer/useCloudStatus-BmjNxiD8.js +0 -1
- package/dist/viewer/useTypeFavicon-CdSjEdzV.js +0 -1
- package/dist/viewer/verdicts-BWM_HBw0.js +0 -1
- package/dist/viewer-lib/flowDiagram-HODETNUW-CBIDl6cb.js +0 -15
- package/dist/viewer-lib/percentages-BXMCSKIN-BuYxllSX.js +0 -1
- package/dist/viewer-lib/subset-shared.chunk-Dr3q7Pia.js +0 -2
package/dist/server.cjs
CHANGED
|
@@ -8794,12 +8794,12 @@ var require_websocket_server = __commonJS({
|
|
|
8794
8794
|
// src/server/main.ts
|
|
8795
8795
|
var import_node_child_process5 = require("node:child_process");
|
|
8796
8796
|
var import_node_crypto13 = __toESM(require("node:crypto"), 1);
|
|
8797
|
-
var
|
|
8797
|
+
var import_node_fs42 = __toESM(require("node:fs"), 1);
|
|
8798
8798
|
var import_node_os2 = __toESM(require("node:os"), 1);
|
|
8799
|
-
var
|
|
8799
|
+
var import_node_path37 = __toESM(require("node:path"), 1);
|
|
8800
8800
|
|
|
8801
8801
|
// package.json
|
|
8802
|
-
var version = "1.
|
|
8802
|
+
var version = "1.61.0";
|
|
8803
8803
|
|
|
8804
8804
|
// src/server/browser-focus.ts
|
|
8805
8805
|
var import_node_child_process = require("node:child_process");
|
|
@@ -9491,9 +9491,9 @@ function clearCredentials(file) {
|
|
|
9491
9491
|
}
|
|
9492
9492
|
|
|
9493
9493
|
// src/server/hub.ts
|
|
9494
|
-
var
|
|
9494
|
+
var import_node_fs39 = __toESM(require("node:fs"), 1);
|
|
9495
9495
|
var import_node_http2 = __toESM(require("node:http"), 1);
|
|
9496
|
-
var
|
|
9496
|
+
var import_node_path35 = __toESM(require("node:path"), 1);
|
|
9497
9497
|
|
|
9498
9498
|
// src/server/access.ts
|
|
9499
9499
|
var LOOPBACK = /* @__PURE__ */ new Set(["localhost", "::1", "[::1]"]);
|
|
@@ -9520,9 +9520,9 @@ var originAllowed = (policy, origin, { cloud = false } = {}) => origin === void
|
|
|
9520
9520
|
var navigationAllowed = (secFetchSite) => secFetchSite === void 0 || secFetchSite === "none" || secFetchSite === "same-origin";
|
|
9521
9521
|
|
|
9522
9522
|
// src/server/app.ts
|
|
9523
|
-
var
|
|
9523
|
+
var import_node_fs36 = __toESM(require("node:fs"), 1);
|
|
9524
9524
|
var import_node_http = __toESM(require("node:http"), 1);
|
|
9525
|
-
var
|
|
9525
|
+
var import_node_path32 = __toESM(require("node:path"), 1);
|
|
9526
9526
|
|
|
9527
9527
|
// src/shared/cloud.ts
|
|
9528
9528
|
var MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
|
|
@@ -9868,6 +9868,8 @@ function watchArtifacts(ctx) {
|
|
|
9868
9868
|
}
|
|
9869
9869
|
for (const [key2, { ref, files: changed }] of byArtifact) {
|
|
9870
9870
|
const dir = resolveArtifactDir(root, ref.type, ref.id);
|
|
9871
|
+
if (ref.type === "artboard" && (changed.some((file) => file !== "comments.json") || changed.length === 0))
|
|
9872
|
+
documents.artboardChanged(ref.id);
|
|
9871
9873
|
if (!dir) {
|
|
9872
9874
|
signatures.delete(key2);
|
|
9873
9875
|
ctx.autoPublisher?.removed(key2);
|
|
@@ -9912,9 +9914,9 @@ function watchArtifacts(ctx) {
|
|
|
9912
9914
|
var PAGE_CSP = "sandbox allow-scripts allow-modals allow-forms allow-popups allow-downloads";
|
|
9913
9915
|
var DOCUMENT_ASSET_CSP = "sandbox; default-src 'none'";
|
|
9914
9916
|
var ISOLATED_BOARD_CSP = "worker-src 'none'";
|
|
9915
|
-
function contentCsp(type,
|
|
9917
|
+
function contentCsp(type, path38, ownOrigin) {
|
|
9916
9918
|
if (type === "html") return PAGE_CSP;
|
|
9917
|
-
if (type === "document") return
|
|
9919
|
+
if (type === "document") return path38.endsWith(".html") ? PAGE_CSP : DOCUMENT_ASSET_CSP;
|
|
9918
9920
|
return ownOrigin ? ISOLATED_BOARD_CSP : "sandbox allow-scripts";
|
|
9919
9921
|
}
|
|
9920
9922
|
|
|
@@ -9942,8 +9944,8 @@ function routeBoardRequest(req, pathname) {
|
|
|
9942
9944
|
}
|
|
9943
9945
|
|
|
9944
9946
|
// src/server/context.ts
|
|
9945
|
-
var
|
|
9946
|
-
var
|
|
9947
|
+
var import_node_fs32 = __toESM(require("node:fs"), 1);
|
|
9948
|
+
var import_node_path28 = __toESM(require("node:path"), 1);
|
|
9947
9949
|
|
|
9948
9950
|
// src/server/agent-review.ts
|
|
9949
9951
|
var import_node_crypto5 = __toESM(require("node:crypto"), 1);
|
|
@@ -10477,6 +10479,15 @@ var requiredReviewFields = {
|
|
|
10477
10479
|
groups: ["id", "kind", "verdict", "choice"],
|
|
10478
10480
|
rounds: ["id", "state"]
|
|
10479
10481
|
};
|
|
10482
|
+
var reviewSectionsFor = (artifact) => artifact.startsWith("document/") ? ["threads", "asks"] : ["threads", "groups", "rounds"];
|
|
10483
|
+
function validateReviewBundle(input, artifact) {
|
|
10484
|
+
if (input.section) return "Choose section or sections, not both.";
|
|
10485
|
+
if (!input.sections.length || new Set(input.sections).size !== input.sections.length || input.sections.some((section) => !reviewSectionsFor(artifact).includes(section)))
|
|
10486
|
+
return "Choose distinct review sections supported by this artifact.";
|
|
10487
|
+
if (input.fields || input.cursor || input.snapshot || input.thread || input.filters && Object.values(input.filters).some((value) => value !== void 0))
|
|
10488
|
+
return "Fields, filters, thread, cursor and snapshot require a single --section. Follow each collection continuation separately.";
|
|
10489
|
+
return null;
|
|
10490
|
+
}
|
|
10480
10491
|
function validateReviewQuery(input) {
|
|
10481
10492
|
const { section, filters: filters2 } = input;
|
|
10482
10493
|
if (!section && (input.detail || input.cursor || input.fields || filters2 && Object.values(filters2).some(Boolean)))
|
|
@@ -10805,9 +10816,133 @@ function createAgentReview(stateDir, options2 = {}) {
|
|
|
10805
10816
|
};
|
|
10806
10817
|
}
|
|
10807
10818
|
|
|
10819
|
+
// src/server/agent-status.ts
|
|
10820
|
+
var import_node_fs9 = __toESM(require("node:fs"), 1);
|
|
10821
|
+
var import_node_path8 = __toESM(require("node:path"), 1);
|
|
10822
|
+
|
|
10823
|
+
// src/shared/agent-status.ts
|
|
10824
|
+
var AGENT_HOST_NAMES = {
|
|
10825
|
+
claude: "Claude Code",
|
|
10826
|
+
codex: "Codex"
|
|
10827
|
+
};
|
|
10828
|
+
|
|
10829
|
+
// src/server/agent-status.ts
|
|
10830
|
+
var ACTIVE_TTL_MS = 30 * 6e4;
|
|
10831
|
+
var IDLE_TTL_MS = 8 * 60 * 6e4;
|
|
10832
|
+
var ARTIFACT_TYPES2 = /* @__PURE__ */ new Set(["artboard", "document", "html"]);
|
|
10833
|
+
var ARTIFACT_ID = /^[a-z0-9][a-z0-9-]*$/;
|
|
10834
|
+
var USER_WAIT_TOOLS = /* @__PURE__ */ new Set(["AskUserQuestion", "ExitPlanMode"]);
|
|
10835
|
+
var TRANSITIONS = {
|
|
10836
|
+
UserPromptSubmit: { state: "thinking", clearArtifacts: true, endTurn: true },
|
|
10837
|
+
PreToolUse: { state: "running" },
|
|
10838
|
+
PostToolUse: { state: "thinking", clearArtifacts: true },
|
|
10839
|
+
PostToolUseFailure: { state: "thinking", clearArtifacts: true },
|
|
10840
|
+
PermissionRequest: { state: "needs-approval" },
|
|
10841
|
+
PermissionDenied: { state: "thinking", clearArtifacts: true },
|
|
10842
|
+
Stop: { state: "your-turn", clearArtifacts: true, endTurn: true },
|
|
10843
|
+
Interrupt: { state: "your-turn", clearArtifacts: true, endTurn: true },
|
|
10844
|
+
SessionEnd: "end"
|
|
10845
|
+
};
|
|
10846
|
+
var HUB_TEMP_FILE = /\.\d+\.tmp$/;
|
|
10847
|
+
var HUB_WRITTEN = /* @__PURE__ */ new Set(["doc.xml", "comments.json"]);
|
|
10848
|
+
var agentWrittenFiles = (files) => files.filter((file) => !HUB_WRITTEN.has(file.replace(HUB_TEMP_FILE, "")));
|
|
10849
|
+
function realpathOr(dir) {
|
|
10850
|
+
try {
|
|
10851
|
+
return import_node_fs9.default.realpathSync(dir);
|
|
10852
|
+
} catch {
|
|
10853
|
+
return import_node_path8.default.resolve(dir);
|
|
10854
|
+
}
|
|
10855
|
+
}
|
|
10856
|
+
function realpathOfNew(file) {
|
|
10857
|
+
let dir = import_node_path8.default.resolve(file);
|
|
10858
|
+
const rest = [];
|
|
10859
|
+
while (dir !== import_node_path8.default.dirname(dir)) {
|
|
10860
|
+
try {
|
|
10861
|
+
return import_node_path8.default.join(import_node_fs9.default.realpathSync(dir), ...rest);
|
|
10862
|
+
} catch {
|
|
10863
|
+
rest.unshift(import_node_path8.default.basename(dir));
|
|
10864
|
+
dir = import_node_path8.default.dirname(dir);
|
|
10865
|
+
}
|
|
10866
|
+
}
|
|
10867
|
+
return import_node_path8.default.resolve(file);
|
|
10868
|
+
}
|
|
10869
|
+
function createAgentStatus(root) {
|
|
10870
|
+
const bases = [.../* @__PURE__ */ new Set([import_node_path8.default.resolve(root), realpathOr(root)])];
|
|
10871
|
+
const entries2 = /* @__PURE__ */ new Map();
|
|
10872
|
+
const keyOf = (file) => {
|
|
10873
|
+
if (!import_node_path8.default.isAbsolute(file)) return null;
|
|
10874
|
+
const candidates = [.../* @__PURE__ */ new Set([import_node_path8.default.resolve(file), realpathOfNew(file)])];
|
|
10875
|
+
for (const base of bases)
|
|
10876
|
+
for (const candidate of candidates) {
|
|
10877
|
+
const parts = import_node_path8.default.relative(base, candidate).split(import_node_path8.default.sep);
|
|
10878
|
+
if (parts.length < 3 || parts[0] === "..") continue;
|
|
10879
|
+
const [type, id2] = parts;
|
|
10880
|
+
if (ARTIFACT_TYPES2.has(type) && ARTIFACT_ID.test(id2)) return `${type}/${id2}`;
|
|
10881
|
+
}
|
|
10882
|
+
return null;
|
|
10883
|
+
};
|
|
10884
|
+
const add2 = (list2, keys2) => [.../* @__PURE__ */ new Set([...list2, ...keys2])];
|
|
10885
|
+
return {
|
|
10886
|
+
apply(event) {
|
|
10887
|
+
const transition = TRANSITIONS[event.event];
|
|
10888
|
+
if (!transition) return false;
|
|
10889
|
+
const id2 = `${event.host}:${event.session}`;
|
|
10890
|
+
const entry = entries2.get(id2);
|
|
10891
|
+
if (entry && event.at < entry.lastAt) return false;
|
|
10892
|
+
if (transition === "end") return entries2.delete(id2);
|
|
10893
|
+
if (event.event === "PreToolUse" && entry?.session.state === "needs-approval") {
|
|
10894
|
+
entry.lastAt = event.at;
|
|
10895
|
+
return false;
|
|
10896
|
+
}
|
|
10897
|
+
const keys2 = (event.paths ?? []).flatMap((file) => keyOf(file) ?? []);
|
|
10898
|
+
const previous = entry?.session;
|
|
10899
|
+
const turnArtifacts = transition.endTurn ? [] : previous?.turnArtifacts ?? [];
|
|
10900
|
+
const artifacts = transition.clearArtifacts ? [] : previous?.artifacts ?? [];
|
|
10901
|
+
const waitsOnUser = event.event === "PreToolUse" && USER_WAIT_TOOLS.has(event.tool ?? "");
|
|
10902
|
+
const session = {
|
|
10903
|
+
id: event.session,
|
|
10904
|
+
host: event.host,
|
|
10905
|
+
agent: AGENT_HOST_NAMES[event.host],
|
|
10906
|
+
state: waitsOnUser ? "needs-approval" : transition.state,
|
|
10907
|
+
since: previous?.state === transition.state && !waitsOnUser ? previous.since : event.at,
|
|
10908
|
+
artifacts: add2(artifacts, keys2),
|
|
10909
|
+
turnArtifacts: add2(turnArtifacts, keys2)
|
|
10910
|
+
};
|
|
10911
|
+
entries2.set(id2, { session, lastAt: event.at });
|
|
10912
|
+
return true;
|
|
10913
|
+
},
|
|
10914
|
+
touched(key2) {
|
|
10915
|
+
let changed = false;
|
|
10916
|
+
for (const entry of entries2.values()) {
|
|
10917
|
+
const { session } = entry;
|
|
10918
|
+
if (session.state !== "running" || session.artifacts.includes(key2)) continue;
|
|
10919
|
+
entry.session = {
|
|
10920
|
+
...session,
|
|
10921
|
+
artifacts: add2(session.artifacts, [key2]),
|
|
10922
|
+
turnArtifacts: add2(session.turnArtifacts, [key2])
|
|
10923
|
+
};
|
|
10924
|
+
changed = true;
|
|
10925
|
+
}
|
|
10926
|
+
return changed;
|
|
10927
|
+
},
|
|
10928
|
+
expire(now) {
|
|
10929
|
+
let changed = false;
|
|
10930
|
+
for (const [id2, entry] of entries2) {
|
|
10931
|
+
const waiting = entry.session.state === "your-turn" || entry.session.state === "needs-approval";
|
|
10932
|
+
const ttl = waiting ? IDLE_TTL_MS : ACTIVE_TTL_MS;
|
|
10933
|
+
if (now - entry.lastAt >= ttl) changed = entries2.delete(id2) || changed;
|
|
10934
|
+
}
|
|
10935
|
+
return changed;
|
|
10936
|
+
},
|
|
10937
|
+
sessions() {
|
|
10938
|
+
return [...entries2.values()].map((entry) => entry.session);
|
|
10939
|
+
}
|
|
10940
|
+
};
|
|
10941
|
+
}
|
|
10942
|
+
|
|
10808
10943
|
// src/server/auto-publish.ts
|
|
10809
10944
|
var import_node_crypto6 = __toESM(require("node:crypto"), 1);
|
|
10810
|
-
var
|
|
10945
|
+
var import_node_fs10 = __toESM(require("node:fs"), 1);
|
|
10811
10946
|
var IDLE_MS = 5 * 60 * 1e3;
|
|
10812
10947
|
var MAX_WAIT_MS = 15 * 60 * 1e3;
|
|
10813
10948
|
var SIGNED_OUT_MESSAGE = "auto-publish paused: the Ryugi Cloud sign-in expired";
|
|
@@ -10820,7 +10955,7 @@ function isNotice(value) {
|
|
|
10820
10955
|
function readAutoPublishState(file) {
|
|
10821
10956
|
let raw = {};
|
|
10822
10957
|
try {
|
|
10823
|
-
const parsed = JSON.parse(
|
|
10958
|
+
const parsed = JSON.parse(import_node_fs10.default.readFileSync(file, "utf8"));
|
|
10824
10959
|
if (typeof parsed === "object" && parsed !== null) raw = parsed;
|
|
10825
10960
|
} catch {
|
|
10826
10961
|
}
|
|
@@ -11025,8 +11160,8 @@ function unreferencedChoiceWarnings(slug, backlinks, canvas, hasDocuments) {
|
|
|
11025
11160
|
|
|
11026
11161
|
// src/server/board-comments.ts
|
|
11027
11162
|
var import_node_crypto9 = __toESM(require("node:crypto"), 1);
|
|
11028
|
-
var
|
|
11029
|
-
var
|
|
11163
|
+
var import_node_fs15 = __toESM(require("node:fs"), 1);
|
|
11164
|
+
var import_node_path12 = __toESM(require("node:path"), 1);
|
|
11030
11165
|
|
|
11031
11166
|
// src/shared/board-comments.ts
|
|
11032
11167
|
var isChoiceRecord = (thread) => thread.anchor.choice !== void 0 || thread.anchor.submit !== void 0;
|
|
@@ -11209,8 +11344,8 @@ function groupVerdict(threads2, group, stale) {
|
|
|
11209
11344
|
}
|
|
11210
11345
|
|
|
11211
11346
|
// src/server/board-choices.ts
|
|
11212
|
-
var
|
|
11213
|
-
var
|
|
11347
|
+
var import_node_fs11 = __toESM(require("node:fs"), 1);
|
|
11348
|
+
var import_node_path9 = __toESM(require("node:path"), 1);
|
|
11214
11349
|
|
|
11215
11350
|
// src/shared/rounds.ts
|
|
11216
11351
|
function pageTitles(canvas, layout, page) {
|
|
@@ -11257,7 +11392,7 @@ var roundOfGroup = (rounds, group) => rounds.find((round) => round.groups.includ
|
|
|
11257
11392
|
// src/server/board-choices.ts
|
|
11258
11393
|
function choiceContext(dir) {
|
|
11259
11394
|
try {
|
|
11260
|
-
const canvas = JSON.parse(
|
|
11395
|
+
const canvas = JSON.parse(import_node_fs11.default.readFileSync(import_node_path9.default.join(dir, "canvas.json"), "utf8"));
|
|
11261
11396
|
if (!Array.isArray(canvas.pages) || typeof canvas.boards !== "object" || !canvas.boards)
|
|
11262
11397
|
return { canvas: null, rounds: [] };
|
|
11263
11398
|
return { canvas, rounds: choiceRounds(canvas, computeLayout(canvas)) };
|
|
@@ -11355,12 +11490,12 @@ function agentSubmitAnchor(context2, id2, submit) {
|
|
|
11355
11490
|
}
|
|
11356
11491
|
|
|
11357
11492
|
// src/server/comment-cursors.ts
|
|
11358
|
-
var
|
|
11359
|
-
var
|
|
11360
|
-
var cursorsFile = (stateDir, id2, type = "document") =>
|
|
11493
|
+
var import_node_fs12 = __toESM(require("node:fs"), 1);
|
|
11494
|
+
var import_node_path10 = __toESM(require("node:path"), 1);
|
|
11495
|
+
var cursorsFile = (stateDir, id2, type = "document") => import_node_path10.default.join(stateDir, type, id2, "comment-cursors.json");
|
|
11361
11496
|
function read(file) {
|
|
11362
11497
|
try {
|
|
11363
|
-
const value = JSON.parse(
|
|
11498
|
+
const value = JSON.parse(import_node_fs12.default.readFileSync(file, "utf8"));
|
|
11364
11499
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return {};
|
|
11365
11500
|
return Object.fromEntries(
|
|
11366
11501
|
Object.entries(value).filter(
|
|
@@ -11384,7 +11519,7 @@ function createCommentCursors(stateDir, type = "document") {
|
|
|
11384
11519
|
}
|
|
11385
11520
|
|
|
11386
11521
|
// src/server/document-comments.ts
|
|
11387
|
-
var
|
|
11522
|
+
var import_node_fs13 = __toESM(require("node:fs"), 1);
|
|
11388
11523
|
|
|
11389
11524
|
// ../../node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/index.js
|
|
11390
11525
|
var import_node_crypto8 = require("node:crypto");
|
|
@@ -11493,12 +11628,12 @@ function createStore(file, rules, names = noNames, now = () => (/* @__PURE__ */
|
|
|
11493
11628
|
let loaded = false;
|
|
11494
11629
|
const write = () => {
|
|
11495
11630
|
writeJsonAtomic(file, current);
|
|
11496
|
-
lastSeen =
|
|
11631
|
+
lastSeen = import_node_fs13.default.readFileSync(file, "utf8");
|
|
11497
11632
|
};
|
|
11498
11633
|
const sync = () => {
|
|
11499
11634
|
let text4;
|
|
11500
11635
|
try {
|
|
11501
|
-
text4 =
|
|
11636
|
+
text4 = import_node_fs13.default.readFileSync(file, "utf8");
|
|
11502
11637
|
} catch {
|
|
11503
11638
|
return false;
|
|
11504
11639
|
}
|
|
@@ -11542,13 +11677,13 @@ function createStore(file, rules, names = noNames, now = () => (/* @__PURE__ */
|
|
|
11542
11677
|
}
|
|
11543
11678
|
|
|
11544
11679
|
// src/server/listening.ts
|
|
11545
|
-
var
|
|
11546
|
-
var
|
|
11680
|
+
var import_node_fs14 = __toESM(require("node:fs"), 1);
|
|
11681
|
+
var import_node_path11 = __toESM(require("node:path"), 1);
|
|
11547
11682
|
var HOSTS = ["claude", "codex"];
|
|
11548
11683
|
var FRESH_MS = 1e4;
|
|
11549
11684
|
function readSubscription(file) {
|
|
11550
11685
|
try {
|
|
11551
|
-
const value = JSON.parse(
|
|
11686
|
+
const value = JSON.parse(import_node_fs14.default.readFileSync(file, "utf8"));
|
|
11552
11687
|
return Array.isArray(value.artifacts) ? value.artifacts.filter((a5) => typeof a5 === "string") : [];
|
|
11553
11688
|
} catch {
|
|
11554
11689
|
return [];
|
|
@@ -11556,7 +11691,7 @@ function readSubscription(file) {
|
|
|
11556
11691
|
}
|
|
11557
11692
|
function beatAt(file) {
|
|
11558
11693
|
try {
|
|
11559
|
-
const stamp3 = Number(
|
|
11694
|
+
const stamp3 = Number(import_node_fs14.default.readFileSync(file, "utf8"));
|
|
11560
11695
|
return Number.isFinite(stamp3) ? stamp3 : null;
|
|
11561
11696
|
} catch {
|
|
11562
11697
|
return null;
|
|
@@ -11564,18 +11699,18 @@ function beatAt(file) {
|
|
|
11564
11699
|
}
|
|
11565
11700
|
function listeningOn(stateDir, artifact, now = Date.now()) {
|
|
11566
11701
|
for (const host of HOSTS) {
|
|
11567
|
-
const dir =
|
|
11702
|
+
const dir = import_node_path11.default.join(stateDir, `${host}-comment-watch`);
|
|
11568
11703
|
let names;
|
|
11569
11704
|
try {
|
|
11570
|
-
names =
|
|
11705
|
+
names = import_node_fs14.default.readdirSync(dir);
|
|
11571
11706
|
} catch {
|
|
11572
11707
|
continue;
|
|
11573
11708
|
}
|
|
11574
11709
|
for (const name of names) {
|
|
11575
11710
|
if (!name.endsWith(".json")) continue;
|
|
11576
|
-
const artifacts = readSubscription(
|
|
11711
|
+
const artifacts = readSubscription(import_node_path11.default.join(dir, name));
|
|
11577
11712
|
if (!artifacts.includes("*") && !artifacts.includes(artifact)) continue;
|
|
11578
|
-
const beat = beatAt(
|
|
11713
|
+
const beat = beatAt(import_node_path11.default.join(dir, name.replace(/\.json$/, ".alive")));
|
|
11579
11714
|
if (beat !== null && now - beat < FRESH_MS) return true;
|
|
11580
11715
|
}
|
|
11581
11716
|
}
|
|
@@ -11624,7 +11759,7 @@ function asBoardAgentOp(value) {
|
|
|
11624
11759
|
}
|
|
11625
11760
|
function readCanvasJson(dir) {
|
|
11626
11761
|
try {
|
|
11627
|
-
return JSON.parse(
|
|
11762
|
+
return JSON.parse(import_node_fs15.default.readFileSync(import_node_path12.default.join(dir, "canvas.json"), "utf8"));
|
|
11628
11763
|
} catch {
|
|
11629
11764
|
return {};
|
|
11630
11765
|
}
|
|
@@ -11683,11 +11818,11 @@ function fileHash(dir, relative) {
|
|
|
11683
11818
|
const file = resolveBoardFile(dir, relative);
|
|
11684
11819
|
if (!file) return null;
|
|
11685
11820
|
try {
|
|
11686
|
-
const stat =
|
|
11821
|
+
const stat = import_node_fs15.default.statSync(file);
|
|
11687
11822
|
const stamp3 = `${stat.size}:${stat.mtimeMs}`;
|
|
11688
11823
|
const cached = hashCache.get(file);
|
|
11689
11824
|
if (cached?.stamp === stamp3) return cached.hash;
|
|
11690
|
-
const hash2 = import_node_crypto9.default.createHash("sha1").update(
|
|
11825
|
+
const hash2 = import_node_crypto9.default.createHash("sha1").update(import_node_fs15.default.readFileSync(file)).digest("hex").slice(0, 12);
|
|
11691
11826
|
hashCache.set(file, { stamp: stamp3, hash: hash2 });
|
|
11692
11827
|
return hash2;
|
|
11693
11828
|
} catch {
|
|
@@ -11730,11 +11865,11 @@ function createBoardCommentRegistry(options2) {
|
|
|
11730
11865
|
const lastListening = /* @__PURE__ */ new Map();
|
|
11731
11866
|
const listening = (id2) => listeningOn(options2.stateDir, `artboard/${id2}`);
|
|
11732
11867
|
const cursors = createCommentCursors(options2.stateDir, "artboard");
|
|
11733
|
-
const dirOf = (id2) =>
|
|
11868
|
+
const dirOf = (id2) => import_node_path12.default.join(options2.root, "artboard", id2);
|
|
11734
11869
|
const store = (id2) => {
|
|
11735
11870
|
let found = stores.get(id2);
|
|
11736
11871
|
if (!found) {
|
|
11737
|
-
found = createStore(
|
|
11872
|
+
found = createStore(import_node_path12.default.join(dirOf(id2), "comments.json"), boardRules, options2.names);
|
|
11738
11873
|
stores.set(id2, found);
|
|
11739
11874
|
}
|
|
11740
11875
|
return found;
|
|
@@ -11777,12 +11912,12 @@ function createBoardCommentRegistry(options2) {
|
|
|
11777
11912
|
hashes.delete(id2);
|
|
11778
11913
|
return currentHashes(id2);
|
|
11779
11914
|
};
|
|
11780
|
-
const roundsFile = (id2) =>
|
|
11915
|
+
const roundsFile = (id2) => import_node_path12.default.join(options2.stateDir, "artboard", id2, "rounds.json");
|
|
11781
11916
|
const writeRounds = (id2) => {
|
|
11782
11917
|
const context2 = choiceContext(dirOf(id2));
|
|
11783
11918
|
if (!context2.canvas) return;
|
|
11784
11919
|
const rounds = roundViews(context2, store(id2).current().threads);
|
|
11785
|
-
if (rounds.length === 0 && !
|
|
11920
|
+
if (rounds.length === 0 && !import_node_fs15.default.existsSync(roundsFile(id2))) return;
|
|
11786
11921
|
writeJsonAtomic(roundsFile(id2), { rounds });
|
|
11787
11922
|
};
|
|
11788
11923
|
const forAgent2 = (id2, staleIds) => {
|
|
@@ -11920,7 +12055,7 @@ function createBoardCommentRegistry(options2) {
|
|
|
11920
12055
|
boardsChanged: (id2) => {
|
|
11921
12056
|
fresh(id2);
|
|
11922
12057
|
writeRounds(id2);
|
|
11923
|
-
if (!stores.has(id2) && !
|
|
12058
|
+
if (!stores.has(id2) && !import_node_fs15.default.existsSync(import_node_path12.default.join(dirOf(id2), "comments.json"))) return;
|
|
11924
12059
|
if (JSON.stringify(stale(id2)) !== (lastStale.get(id2) ?? "[]")) push2(id2);
|
|
11925
12060
|
}
|
|
11926
12061
|
};
|
|
@@ -12256,8 +12391,8 @@ function callbackPage(result, locale = "en") {
|
|
|
12256
12391
|
}
|
|
12257
12392
|
|
|
12258
12393
|
// src/server/config.ts
|
|
12259
|
-
var
|
|
12260
|
-
var
|
|
12394
|
+
var import_node_fs16 = __toESM(require("node:fs"), 1);
|
|
12395
|
+
var import_node_path13 = __toESM(require("node:path"), 1);
|
|
12261
12396
|
var defaults = () => ({ version: 1, artifacts: {} });
|
|
12262
12397
|
function isCloudRecord(value) {
|
|
12263
12398
|
if (typeof value !== "object" || value === null) return false;
|
|
@@ -12298,7 +12433,7 @@ function normalize(raw) {
|
|
|
12298
12433
|
function readConfig(file) {
|
|
12299
12434
|
let text4;
|
|
12300
12435
|
try {
|
|
12301
|
-
text4 =
|
|
12436
|
+
text4 = import_node_fs16.default.readFileSync(file, "utf8");
|
|
12302
12437
|
} catch {
|
|
12303
12438
|
return { config: defaults() };
|
|
12304
12439
|
}
|
|
@@ -12313,22 +12448,22 @@ function readConfig(file) {
|
|
|
12313
12448
|
}
|
|
12314
12449
|
var IGNORED = ["config.json", "artifacts/*", "!artifacts/document/", "artifacts/document/*/.artifact-id"];
|
|
12315
12450
|
function ensureGitignore(dir) {
|
|
12316
|
-
const file =
|
|
12451
|
+
const file = import_node_path13.default.join(dir, ".gitignore");
|
|
12317
12452
|
let current = "";
|
|
12318
12453
|
try {
|
|
12319
|
-
current =
|
|
12454
|
+
current = import_node_fs16.default.readFileSync(file, "utf8");
|
|
12320
12455
|
} catch {
|
|
12321
12456
|
}
|
|
12322
12457
|
const present = new Set(current.split(/\r?\n/).map((line) => line.trim()));
|
|
12323
12458
|
const missing = IGNORED.filter((line) => !present.has(line));
|
|
12324
12459
|
if (missing.length === 0) return;
|
|
12325
|
-
|
|
12460
|
+
import_node_fs16.default.writeFileSync(file, `${current}${current === "" || current.endsWith("\n") ? "" : "\n"}${missing.join("\n")}
|
|
12326
12461
|
`);
|
|
12327
12462
|
}
|
|
12328
12463
|
function ensureConfig(file) {
|
|
12329
|
-
|
|
12330
|
-
ensureGitignore(
|
|
12331
|
-
if (!
|
|
12464
|
+
import_node_fs16.default.mkdirSync(import_node_path13.default.dirname(file), { recursive: true });
|
|
12465
|
+
ensureGitignore(import_node_path13.default.dirname(file));
|
|
12466
|
+
if (!import_node_fs16.default.existsSync(file)) writeJsonAtomic(file, defaults());
|
|
12332
12467
|
}
|
|
12333
12468
|
function updateArtifactConfig(file, key2, patch) {
|
|
12334
12469
|
const { config, warning } = readConfig(file);
|
|
@@ -12348,27 +12483,27 @@ function setProjectAutoPublish(file, value) {
|
|
|
12348
12483
|
if (warning) throw new Error(warning);
|
|
12349
12484
|
if (value === null) delete config.autoPublish;
|
|
12350
12485
|
else config.autoPublish = value;
|
|
12351
|
-
|
|
12486
|
+
import_node_fs16.default.mkdirSync(import_node_path13.default.dirname(file), { recursive: true });
|
|
12352
12487
|
writeJsonAtomic(file, config);
|
|
12353
12488
|
}
|
|
12354
12489
|
|
|
12355
12490
|
// src/server/host-id.ts
|
|
12356
|
-
var
|
|
12357
|
-
var
|
|
12491
|
+
var import_node_fs17 = __toESM(require("node:fs"), 1);
|
|
12492
|
+
var import_node_path14 = __toESM(require("node:path"), 1);
|
|
12358
12493
|
function hostIdFor(credentialsFile2) {
|
|
12359
|
-
const file =
|
|
12494
|
+
const file = import_node_path14.default.join(import_node_path14.default.dirname(credentialsFile2), "host-id");
|
|
12360
12495
|
const saved = readPersisted(file);
|
|
12361
12496
|
if (/^[\w-]{16,64}$/.test(saved)) return saved;
|
|
12362
12497
|
const id2 = randomToken();
|
|
12363
|
-
|
|
12364
|
-
|
|
12498
|
+
import_node_fs17.default.mkdirSync(import_node_path14.default.dirname(file), { recursive: true, mode: 448 });
|
|
12499
|
+
import_node_fs17.default.writeFileSync(file, `${id2}
|
|
12365
12500
|
`, { mode: 384 });
|
|
12366
12501
|
return id2;
|
|
12367
12502
|
}
|
|
12368
12503
|
|
|
12369
12504
|
// src/server/pack.ts
|
|
12370
|
-
var
|
|
12371
|
-
var
|
|
12505
|
+
var import_node_fs18 = __toESM(require("node:fs"), 1);
|
|
12506
|
+
var import_node_path15 = __toESM(require("node:path"), 1);
|
|
12372
12507
|
var ArtifactTooLarge = class extends Error {
|
|
12373
12508
|
};
|
|
12374
12509
|
var excluded = (type, relative) => (type === "document" || type === "artboard") && relative === "comments.json";
|
|
@@ -12376,22 +12511,22 @@ function packArtifact(dir, type, {
|
|
|
12376
12511
|
maxBytes = MAX_ARTIFACT_BYTES,
|
|
12377
12512
|
overrides
|
|
12378
12513
|
} = {}) {
|
|
12379
|
-
const rootReal =
|
|
12514
|
+
const rootReal = import_node_fs18.default.realpathSync(dir);
|
|
12380
12515
|
const found = [];
|
|
12381
12516
|
const visited = /* @__PURE__ */ new Set([rootReal]);
|
|
12382
12517
|
let total = 0;
|
|
12383
12518
|
const walk = (current) => {
|
|
12384
|
-
for (const entry of
|
|
12519
|
+
for (const entry of import_node_fs18.default.readdirSync(current, { withFileTypes: true })) {
|
|
12385
12520
|
if (entry.name.startsWith(".")) continue;
|
|
12386
|
-
const full =
|
|
12521
|
+
const full = import_node_path15.default.join(current, entry.name);
|
|
12387
12522
|
let real;
|
|
12388
12523
|
try {
|
|
12389
|
-
real =
|
|
12524
|
+
real = import_node_fs18.default.realpathSync(full);
|
|
12390
12525
|
} catch {
|
|
12391
12526
|
continue;
|
|
12392
12527
|
}
|
|
12393
|
-
if (!real.startsWith(rootReal +
|
|
12394
|
-
const stat =
|
|
12528
|
+
if (!real.startsWith(rootReal + import_node_path15.default.sep)) continue;
|
|
12529
|
+
const stat = import_node_fs18.default.statSync(real);
|
|
12395
12530
|
if (stat.isDirectory()) {
|
|
12396
12531
|
if (visited.has(real)) continue;
|
|
12397
12532
|
visited.add(real);
|
|
@@ -12399,7 +12534,7 @@ function packArtifact(dir, type, {
|
|
|
12399
12534
|
continue;
|
|
12400
12535
|
}
|
|
12401
12536
|
if (!stat.isFile()) continue;
|
|
12402
|
-
const relative =
|
|
12537
|
+
const relative = import_node_path15.default.relative(dir, full).split(import_node_path15.default.sep).join("/");
|
|
12403
12538
|
if (excluded(type, relative)) continue;
|
|
12404
12539
|
if (!overrides?.has(relative)) total += stat.size;
|
|
12405
12540
|
found.push({ path: relative, real });
|
|
@@ -12413,14 +12548,14 @@ function packArtifact(dir, type, {
|
|
|
12413
12548
|
);
|
|
12414
12549
|
}
|
|
12415
12550
|
return [
|
|
12416
|
-
...found.filter((file) => !overrides?.has(file.path)).map((file) => ({ path: file.path, data:
|
|
12551
|
+
...found.filter((file) => !overrides?.has(file.path)).map((file) => ({ path: file.path, data: import_node_fs18.default.readFileSync(file.real) })),
|
|
12417
12552
|
...[...overrides ?? []].flatMap(([file, data]) => data ? [{ path: file, data }] : [])
|
|
12418
12553
|
];
|
|
12419
12554
|
}
|
|
12420
12555
|
|
|
12421
12556
|
// src/server/publish-payload.ts
|
|
12422
|
-
var
|
|
12423
|
-
var
|
|
12557
|
+
var import_node_fs19 = __toESM(require("node:fs"), 1);
|
|
12558
|
+
var import_node_path16 = __toESM(require("node:path"), 1);
|
|
12424
12559
|
|
|
12425
12560
|
// ../../node_modules/.pnpm/nanoid@6.0.2/node_modules/nanoid/url-alphabet/index.js
|
|
12426
12561
|
var urlAlphabet2 = "57X6y3wQZNzYjJB2L_10pxbackgroundhimselfUTF-8DEMOGRAPHICSVqvt4KW9";
|
|
@@ -26238,7 +26373,7 @@ function publishPayload(ref, dir, title, payload, comments = emptyComments()) {
|
|
|
26238
26373
|
if (ref.type === "document")
|
|
26239
26374
|
return {
|
|
26240
26375
|
title,
|
|
26241
|
-
state: parseDocument2(
|
|
26376
|
+
state: parseDocument2(import_node_fs19.default.readFileSync(import_node_path16.default.join(dir, "doc.xml"), "utf8")),
|
|
26242
26377
|
comments: sharedComments(comments)
|
|
26243
26378
|
};
|
|
26244
26379
|
return { title };
|
|
@@ -26260,12 +26395,12 @@ function withCloudRuntime(type, files) {
|
|
|
26260
26395
|
}
|
|
26261
26396
|
|
|
26262
26397
|
// src/server/settings.ts
|
|
26263
|
-
var
|
|
26264
|
-
var
|
|
26265
|
-
var settingsFileFor = (credentialsFile2) =>
|
|
26398
|
+
var import_node_fs20 = __toESM(require("node:fs"), 1);
|
|
26399
|
+
var import_node_path17 = __toESM(require("node:path"), 1);
|
|
26400
|
+
var settingsFileFor = (credentialsFile2) => import_node_path17.default.join(import_node_path17.default.dirname(credentialsFile2), "config.json");
|
|
26266
26401
|
function readSettings(file) {
|
|
26267
26402
|
try {
|
|
26268
|
-
const raw = JSON.parse(
|
|
26403
|
+
const raw = JSON.parse(import_node_fs20.default.readFileSync(file, "utf8"));
|
|
26269
26404
|
return typeof raw === "object" && raw !== null && !Array.isArray(raw) ? raw : {};
|
|
26270
26405
|
} catch {
|
|
26271
26406
|
return {};
|
|
@@ -26276,7 +26411,7 @@ function readGlobalAutoPublish(file) {
|
|
|
26276
26411
|
return typeof value === "boolean" ? value : void 0;
|
|
26277
26412
|
}
|
|
26278
26413
|
function writeGlobalAutoPublish(file, value) {
|
|
26279
|
-
|
|
26414
|
+
import_node_fs20.default.mkdirSync(import_node_path17.default.dirname(file), { recursive: true, mode: 448 });
|
|
26280
26415
|
writeJsonAtomic(file, { ...readSettings(file), autoPublish: value });
|
|
26281
26416
|
}
|
|
26282
26417
|
function postponeGlobalAutoPublish(file) {
|
|
@@ -26285,7 +26420,7 @@ function postponeGlobalAutoPublish(file) {
|
|
|
26285
26420
|
writeGlobalAutoPublish(file, false);
|
|
26286
26421
|
return "off";
|
|
26287
26422
|
}
|
|
26288
|
-
|
|
26423
|
+
import_node_fs20.default.mkdirSync(import_node_path17.default.dirname(file), { recursive: true, mode: 448 });
|
|
26289
26424
|
writeJsonAtomic(file, { ...settings, autoPublishPostponed: true });
|
|
26290
26425
|
return "postponed";
|
|
26291
26426
|
}
|
|
@@ -26422,7 +26557,7 @@ function createCloudRoutes(options2) {
|
|
|
26422
26557
|
const challenge = import_node_crypto10.default.createHash("sha256").update(verifier).digest("base64url");
|
|
26423
26558
|
return `${origin}/auth/cli?port=${options2.port()}&state=${state2}&challenge=${challenge}`;
|
|
26424
26559
|
};
|
|
26425
|
-
const cloudFetch = async (method,
|
|
26560
|
+
const cloudFetch = async (method, path38, body) => {
|
|
26426
26561
|
const credentials = readCredentials(credentialsFile2, origin);
|
|
26427
26562
|
if (!credentials) throw new SignedOut();
|
|
26428
26563
|
const headers = { Authorization: `Bearer ${credentials.token}` };
|
|
@@ -26436,7 +26571,7 @@ function createCloudRoutes(options2) {
|
|
|
26436
26571
|
}
|
|
26437
26572
|
let res;
|
|
26438
26573
|
try {
|
|
26439
|
-
res = await fetch(`${origin}${
|
|
26574
|
+
res = await fetch(`${origin}${path38}`, { method, headers, body: payload });
|
|
26440
26575
|
} catch (err) {
|
|
26441
26576
|
throw new CloudRefused(502, `could not reach ${origin}: ${err.message}`);
|
|
26442
26577
|
}
|
|
@@ -26572,7 +26707,7 @@ function createCloudRoutes(options2) {
|
|
|
26572
26707
|
const content = {
|
|
26573
26708
|
title: inspected.title,
|
|
26574
26709
|
payload: inspected.payload,
|
|
26575
|
-
files: hashed.map(({ path:
|
|
26710
|
+
files: hashed.map(({ path: path38, hash: hash2 }) => ({ path: path38, hash: hash2 }))
|
|
26576
26711
|
};
|
|
26577
26712
|
const fingerprint = sha(
|
|
26578
26713
|
JSON.stringify({
|
|
@@ -27006,7 +27141,7 @@ function createCloudRoutes(options2) {
|
|
|
27006
27141
|
|
|
27007
27142
|
// src/server/comment-names.ts
|
|
27008
27143
|
var import_node_child_process2 = require("node:child_process");
|
|
27009
|
-
var
|
|
27144
|
+
var import_node_fs21 = __toESM(require("node:fs"), 1);
|
|
27010
27145
|
|
|
27011
27146
|
// src/server/agent.ts
|
|
27012
27147
|
var NAMES = {
|
|
@@ -27099,7 +27234,7 @@ function commentNames({ agentFile, projectDir, cloud }) {
|
|
|
27099
27234
|
agent: () => {
|
|
27100
27235
|
try {
|
|
27101
27236
|
return detectAgent(
|
|
27102
|
-
JSON.parse(
|
|
27237
|
+
JSON.parse(import_node_fs21.default.readFileSync(agentFile, "utf8"))
|
|
27103
27238
|
);
|
|
27104
27239
|
} catch {
|
|
27105
27240
|
return void 0;
|
|
@@ -27179,28 +27314,28 @@ function createDirectRelay(options2) {
|
|
|
27179
27314
|
}
|
|
27180
27315
|
|
|
27181
27316
|
// src/server/document.ts
|
|
27182
|
-
var
|
|
27183
|
-
var
|
|
27317
|
+
var import_node_fs23 = __toESM(require("node:fs"), 1);
|
|
27318
|
+
var import_node_path19 = __toESM(require("node:path"), 1);
|
|
27184
27319
|
|
|
27185
27320
|
// src/server/html.ts
|
|
27186
|
-
var
|
|
27187
|
-
var
|
|
27321
|
+
var import_node_fs22 = __toESM(require("node:fs"), 1);
|
|
27322
|
+
var import_node_path18 = __toESM(require("node:path"), 1);
|
|
27188
27323
|
var TITLE = /<title[^>]*>([\s\S]*?)<\/title>/i;
|
|
27189
27324
|
function latestMtime(dir) {
|
|
27190
27325
|
let latest2 = 0;
|
|
27191
27326
|
let entries2;
|
|
27192
27327
|
try {
|
|
27193
|
-
entries2 =
|
|
27328
|
+
entries2 = import_node_fs22.default.readdirSync(dir, { withFileTypes: true });
|
|
27194
27329
|
} catch {
|
|
27195
27330
|
return latest2;
|
|
27196
27331
|
}
|
|
27197
27332
|
for (const entry of entries2) {
|
|
27198
27333
|
if (entry.name.startsWith(".")) continue;
|
|
27199
|
-
const full =
|
|
27334
|
+
const full = import_node_path18.default.join(dir, entry.name);
|
|
27200
27335
|
try {
|
|
27201
27336
|
latest2 = Math.max(
|
|
27202
27337
|
latest2,
|
|
27203
|
-
entry.isDirectory() ? latestMtime(full) :
|
|
27338
|
+
entry.isDirectory() ? latestMtime(full) : import_node_fs22.default.statSync(full).mtimeMs
|
|
27204
27339
|
);
|
|
27205
27340
|
} catch {
|
|
27206
27341
|
continue;
|
|
@@ -27211,7 +27346,7 @@ function latestMtime(dir) {
|
|
|
27211
27346
|
function readHtml(dir, id2) {
|
|
27212
27347
|
let source;
|
|
27213
27348
|
try {
|
|
27214
|
-
source =
|
|
27349
|
+
source = import_node_fs22.default.readFileSync(import_node_path18.default.join(dir, ENTRY_FILE.html), "utf8");
|
|
27215
27350
|
} catch {
|
|
27216
27351
|
return { title: id2, warnings: ["index.html not found"], version: latestMtime(dir) };
|
|
27217
27352
|
}
|
|
@@ -27224,7 +27359,7 @@ var FIRST_HEADING = /<h[1-6]\b[^>]*>([\s\S]*?)<\/h[1-6]>/i;
|
|
|
27224
27359
|
function readDocument(dir, id2) {
|
|
27225
27360
|
let source;
|
|
27226
27361
|
try {
|
|
27227
|
-
source =
|
|
27362
|
+
source = import_node_fs23.default.readFileSync(import_node_path19.default.join(dir, ENTRY_FILE.document), "utf8");
|
|
27228
27363
|
} catch {
|
|
27229
27364
|
return { title: id2, warnings: ["doc.xml not found"], version: latestMtime(dir) };
|
|
27230
27365
|
}
|
|
@@ -27233,17 +27368,17 @@ function readDocument(dir, id2) {
|
|
|
27233
27368
|
}
|
|
27234
27369
|
|
|
27235
27370
|
// src/server/documents.ts
|
|
27236
|
-
var
|
|
27237
|
-
var
|
|
27371
|
+
var import_node_fs26 = __toESM(require("node:fs"), 1);
|
|
27372
|
+
var import_node_path23 = __toESM(require("node:path"), 1);
|
|
27238
27373
|
|
|
27239
27374
|
// src/server/change-cursors.ts
|
|
27240
|
-
var
|
|
27241
|
-
var
|
|
27242
|
-
var cursorsFile2 = (stateDir, id2) =>
|
|
27375
|
+
var import_node_fs24 = __toESM(require("node:fs"), 1);
|
|
27376
|
+
var import_node_path20 = __toESM(require("node:path"), 1);
|
|
27377
|
+
var cursorsFile2 = (stateDir, id2) => import_node_path20.default.join(stateDir, "document", id2, "change-cursors.json");
|
|
27243
27378
|
var isOpId = (value) => typeof value === "object" && value !== null && typeof value.peer === "string" && Number.isInteger(value.counter);
|
|
27244
27379
|
function read2(file) {
|
|
27245
27380
|
try {
|
|
27246
|
-
const value = JSON.parse(
|
|
27381
|
+
const value = JSON.parse(import_node_fs24.default.readFileSync(file, "utf8"));
|
|
27247
27382
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return {};
|
|
27248
27383
|
return Object.fromEntries(
|
|
27249
27384
|
Object.entries(value).filter(
|
|
@@ -27265,8 +27400,8 @@ function createChangeCursors(stateDir) {
|
|
|
27265
27400
|
}
|
|
27266
27401
|
|
|
27267
27402
|
// src/server/document-asks.ts
|
|
27268
|
-
var
|
|
27269
|
-
var
|
|
27403
|
+
var import_node_fs25 = __toESM(require("node:fs"), 1);
|
|
27404
|
+
var import_node_path21 = __toESM(require("node:path"), 1);
|
|
27270
27405
|
var blockOf = (asks, ask) => asks.find((a5) => a5.id === ask)?.blockId ?? "*";
|
|
27271
27406
|
function humanAskOp(asks, threads2, op) {
|
|
27272
27407
|
if (op.op !== "create") {
|
|
@@ -27311,8 +27446,8 @@ function askListing(asks, threads2) {
|
|
|
27311
27446
|
};
|
|
27312
27447
|
}
|
|
27313
27448
|
function writeAsksFile(stateDir, id2, asks, threads2) {
|
|
27314
|
-
const file =
|
|
27315
|
-
if (!asks.length && !
|
|
27449
|
+
const file = import_node_path21.default.join(stateDir, "document", id2, "asks.json");
|
|
27450
|
+
if (!asks.length && !import_node_fs25.default.existsSync(file)) return;
|
|
27316
27451
|
const latest2 = latestSubmission(threads2);
|
|
27317
27452
|
writeJsonAtomic(file, {
|
|
27318
27453
|
latest: latest2 ? { id: latest2.id, at: latest2.at, withdrawn: latest2.withdrawn } : null
|
|
@@ -27321,7 +27456,7 @@ function writeAsksFile(stateDir, id2, asks, threads2) {
|
|
|
27321
27456
|
|
|
27322
27457
|
// src/server/document-session.ts
|
|
27323
27458
|
var import_promises = __toESM(require("node:fs/promises"), 1);
|
|
27324
|
-
var
|
|
27459
|
+
var import_node_path22 = __toESM(require("node:path"), 1);
|
|
27325
27460
|
|
|
27326
27461
|
// ../../node_modules/.pnpm/lexical@0.53.0_typescript@6.0.3/node_modules/lexical/dist/Lexical.dev.js
|
|
27327
27462
|
var Lexical_dev_exports = {};
|
|
@@ -28677,19 +28812,19 @@ var ElementDOMSlot = class _ElementDOMSlot extends DOMSlot {
|
|
|
28677
28812
|
}
|
|
28678
28813
|
};
|
|
28679
28814
|
function indexPath(root, child) {
|
|
28680
|
-
const
|
|
28815
|
+
const path38 = [];
|
|
28681
28816
|
let node = child;
|
|
28682
28817
|
for (; node !== root && node !== null; node = node.parentNode) {
|
|
28683
28818
|
let i6 = 0;
|
|
28684
28819
|
for (let sibling = node.previousSibling; sibling !== null; sibling = sibling.previousSibling) {
|
|
28685
28820
|
i6++;
|
|
28686
28821
|
}
|
|
28687
|
-
|
|
28822
|
+
path38.push(i6);
|
|
28688
28823
|
}
|
|
28689
28824
|
if (!(node === root)) {
|
|
28690
28825
|
formatDevErrorMessage(`indexPath: root is not a parent of child`);
|
|
28691
28826
|
}
|
|
28692
|
-
return
|
|
28827
|
+
return path38.reverse();
|
|
28693
28828
|
}
|
|
28694
28829
|
var TEXT_MUTATION_VARIANCE = 100;
|
|
28695
28830
|
var isProcessingMutations = false;
|
|
@@ -38049,9 +38184,9 @@ function getActiveElementDeep(root) {
|
|
|
38049
38184
|
function getComposedEventTarget(event) {
|
|
38050
38185
|
const target = event.target;
|
|
38051
38186
|
if (target !== null && isHTMLElement(target) && target.shadowRoot !== null && typeof event.composedPath === "function") {
|
|
38052
|
-
const
|
|
38053
|
-
if (
|
|
38054
|
-
return
|
|
38187
|
+
const path38 = event.composedPath();
|
|
38188
|
+
if (path38.length > 0) {
|
|
38189
|
+
return path38[0];
|
|
38055
38190
|
}
|
|
38056
38191
|
}
|
|
38057
38192
|
return target;
|
|
@@ -50345,7 +50480,7 @@ var as = null;
|
|
|
50345
50480
|
function us(t7) {
|
|
50346
50481
|
as = t7;
|
|
50347
50482
|
}
|
|
50348
|
-
var
|
|
50483
|
+
var fs26 = /* @__PURE__ */ Symbol("INTERNAL_SKIP_AFTER_CLONE_FROM");
|
|
50349
50484
|
var ds = 1;
|
|
50350
50485
|
function hs() {
|
|
50351
50486
|
ds = 1;
|
|
@@ -50817,7 +50952,7 @@ function Il(t7) {
|
|
|
50817
50952
|
return ci(t7) || Fl(t7);
|
|
50818
50953
|
}
|
|
50819
50954
|
function Ll(t7, e5 = false) {
|
|
50820
|
-
const n8 = t7.constructor.clone(t7,
|
|
50955
|
+
const n8 = t7.constructor.clone(t7, fs26);
|
|
50821
50956
|
return Ds(n8, null), n8.afterCloneFrom(t7), e5 || n8.resetOnCopyNodeFrom(t7), n8;
|
|
50822
50957
|
}
|
|
50823
50958
|
function Kl(t7) {
|
|
@@ -51062,7 +51197,7 @@ function wc(t7) {
|
|
|
51062
51197
|
})(t7), Tc.set(t7, n8)), n8;
|
|
51063
51198
|
}
|
|
51064
51199
|
function Ec(t7) {
|
|
51065
|
-
const e5 = t7.constructor.clone(t7,
|
|
51200
|
+
const e5 = t7.constructor.clone(t7, fs26);
|
|
51066
51201
|
return e5.afterCloneFrom(t7), e5;
|
|
51067
51202
|
}
|
|
51068
51203
|
function Ac(t7) {
|
|
@@ -51209,7 +51344,7 @@ function Bc(t7) {
|
|
|
51209
51344
|
if (Kc(t9, "clone") || (t9.clone = (e7, n12) => {
|
|
51210
51345
|
us(e7);
|
|
51211
51346
|
const o10 = new t9();
|
|
51212
|
-
return n12 !==
|
|
51347
|
+
return n12 !== fs26 && o10.afterCloneFrom(e7), o10;
|
|
51213
51348
|
}), Kc(t9, "importJSON") || (t9.importJSON = o9 && o9.$importJSON || /* @__PURE__ */ (function(t10) {
|
|
51214
51349
|
return (e7) => {
|
|
51215
51350
|
const n12 = ga(t10);
|
|
@@ -55059,10 +55194,10 @@ function _loadWasmModule(sync, filepath, src, imports2) {
|
|
|
55059
55194
|
var buf = null;
|
|
55060
55195
|
var isNode2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null;
|
|
55061
55196
|
if (filepath && isNode2) {
|
|
55062
|
-
var
|
|
55063
|
-
var
|
|
55197
|
+
var fs45 = null;
|
|
55198
|
+
var path38 = null;
|
|
55064
55199
|
return new Promise((resolve, reject) => {
|
|
55065
|
-
|
|
55200
|
+
fs45.readFile(path38.resolve(__dirname, filepath), (error, buffer) => {
|
|
55066
55201
|
if (error != null) {
|
|
55067
55202
|
reject(error);
|
|
55068
55203
|
} else {
|
|
@@ -56365,10 +56500,10 @@ var LoroDoc = class _LoroDoc {
|
|
|
56365
56500
|
* @param {string} path
|
|
56366
56501
|
* @returns {Value | Container | undefined}
|
|
56367
56502
|
*/
|
|
56368
|
-
getByPath(
|
|
56503
|
+
getByPath(path38) {
|
|
56369
56504
|
try {
|
|
56370
56505
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
56371
|
-
const ptr0 = passStringToWasm0(
|
|
56506
|
+
const ptr0 = passStringToWasm0(path38, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
56372
56507
|
const len0 = WASM_VECTOR_LEN;
|
|
56373
56508
|
wasm.lorodoc_getByPath(retptr, this.__wbg_ptr, ptr0, len0);
|
|
56374
56509
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
@@ -63989,16 +64124,16 @@ var Diff = class {
|
|
|
63989
64124
|
}
|
|
63990
64125
|
}
|
|
63991
64126
|
}
|
|
63992
|
-
addToPath(
|
|
63993
|
-
const last =
|
|
64127
|
+
addToPath(path38, added, removed, oldPosInc, options2) {
|
|
64128
|
+
const last = path38.lastComponent;
|
|
63994
64129
|
if (last && !options2.oneChangePerToken && last.added === added && last.removed === removed) {
|
|
63995
64130
|
return {
|
|
63996
|
-
oldPos:
|
|
64131
|
+
oldPos: path38.oldPos + oldPosInc,
|
|
63997
64132
|
lastComponent: { count: last.count + 1, added, removed, previousComponent: last.previousComponent }
|
|
63998
64133
|
};
|
|
63999
64134
|
} else {
|
|
64000
64135
|
return {
|
|
64001
|
-
oldPos:
|
|
64136
|
+
oldPos: path38.oldPos + oldPosInc,
|
|
64002
64137
|
lastComponent: { count: 1, added, removed, previousComponent: last }
|
|
64003
64138
|
};
|
|
64004
64139
|
}
|
|
@@ -96642,10 +96777,10 @@ function $placeBlocks(runtime, $isTarget) {
|
|
|
96642
96777
|
}
|
|
96643
96778
|
const documentKey = $documentKey();
|
|
96644
96779
|
for (const [key2, frame] of targets) {
|
|
96645
|
-
const
|
|
96646
|
-
let id2 = derivePositionalId(documentKey,
|
|
96780
|
+
const path38 = placeOf(frame);
|
|
96781
|
+
let id2 = derivePositionalId(documentKey, path38);
|
|
96647
96782
|
for (let attempt = 1; taken.has(id2); attempt++) {
|
|
96648
|
-
id2 = derivePositionalId(documentKey, `${
|
|
96783
|
+
id2 = derivePositionalId(documentKey, `${path38}#${attempt}`);
|
|
96649
96784
|
}
|
|
96650
96785
|
taken.add(id2);
|
|
96651
96786
|
placed.set(key2, id2);
|
|
@@ -100955,7 +101090,7 @@ async function readText(file) {
|
|
|
100955
101090
|
}
|
|
100956
101091
|
}
|
|
100957
101092
|
async function writeAtomic(file, data) {
|
|
100958
|
-
await import_promises.default.mkdir(
|
|
101093
|
+
await import_promises.default.mkdir(import_node_path22.default.dirname(file), { recursive: true });
|
|
100959
101094
|
const tmp = `${file}.${process.pid}.tmp`;
|
|
100960
101095
|
await import_promises.default.writeFile(tmp, data);
|
|
100961
101096
|
await import_promises.default.rename(tmp, file);
|
|
@@ -100989,7 +101124,7 @@ async function createDocumentSession(options2) {
|
|
|
100989
101124
|
let lastGoodText = null;
|
|
100990
101125
|
let lastAgentText = null;
|
|
100991
101126
|
let lastFileText = await readText(file) ?? "";
|
|
100992
|
-
const activityFile =
|
|
101127
|
+
const activityFile = import_node_path22.default.join(import_node_path22.default.dirname(snapshotFile), "agent-active");
|
|
100993
101128
|
let agentActiveAt = await lastAgentWrite(activityFile, file);
|
|
100994
101129
|
let activitySaved = Promise.resolve();
|
|
100995
101130
|
const emitStatus = () => emit({ type: "status", outcome, streaming: streaming > 0, agentActiveAt });
|
|
@@ -101059,6 +101194,14 @@ async function createDocumentSession(options2) {
|
|
|
101059
101194
|
}
|
|
101060
101195
|
});
|
|
101061
101196
|
};
|
|
101197
|
+
const refreshRefs = () => {
|
|
101198
|
+
if (!options2.fillRefs || outcome.kind === "rejected" || streaming > 0) return;
|
|
101199
|
+
const current = editor.getEditorState().toJSON();
|
|
101200
|
+
const filled = options2.fillRefs(current);
|
|
101201
|
+
if (JSON.stringify(filled) === JSON.stringify(current)) return;
|
|
101202
|
+
reconcileWithIds(editor, filled, () => loro.setNextCommitMessage("refs"));
|
|
101203
|
+
scheduleWrite();
|
|
101204
|
+
};
|
|
101062
101205
|
const saveSnapshot = async () => {
|
|
101063
101206
|
if (!snapshotDirty) return;
|
|
101064
101207
|
snapshotDirty = false;
|
|
@@ -101152,6 +101295,7 @@ async function createDocumentSession(options2) {
|
|
|
101152
101295
|
scheduleWrite();
|
|
101153
101296
|
},
|
|
101154
101297
|
onFileText,
|
|
101298
|
+
refreshRefs,
|
|
101155
101299
|
subscribe: (listener) => {
|
|
101156
101300
|
listeners.add(listener);
|
|
101157
101301
|
return () => listeners.delete(listener);
|
|
@@ -101260,7 +101404,8 @@ function createDocumentRegistry(options2) {
|
|
|
101260
101404
|
return session && !session.streaming() ? refWarnings(refsIn(session.state()), refLookup) : [];
|
|
101261
101405
|
};
|
|
101262
101406
|
const warnings = /* @__PURE__ */ new Map();
|
|
101263
|
-
const
|
|
101407
|
+
const rechecks = /* @__PURE__ */ new Map();
|
|
101408
|
+
const docFile = (id2) => import_node_path23.default.join(options2.root, "document", id2, "doc.xml");
|
|
101264
101409
|
const commentStores = /* @__PURE__ */ new Map();
|
|
101265
101410
|
const cursors = createCommentCursors(options2.stateDir);
|
|
101266
101411
|
const changeCursors = createChangeCursors(options2.stateDir);
|
|
@@ -101268,7 +101413,7 @@ function createDocumentRegistry(options2) {
|
|
|
101268
101413
|
let store = commentStores.get(id2);
|
|
101269
101414
|
if (!store) {
|
|
101270
101415
|
store = createCommentStore(
|
|
101271
|
-
|
|
101416
|
+
import_node_path23.default.join(options2.root, "document", id2, "comments.json"),
|
|
101272
101417
|
options2.names
|
|
101273
101418
|
);
|
|
101274
101419
|
commentStores.set(id2, store);
|
|
@@ -101301,10 +101446,10 @@ function createDocumentRegistry(options2) {
|
|
|
101301
101446
|
if (JSON.stringify(store.warnings()) !== before2) options2.onWarningsChange(id2);
|
|
101302
101447
|
};
|
|
101303
101448
|
const create3 = async (id2) => {
|
|
101304
|
-
if (!
|
|
101449
|
+
if (!import_node_fs26.default.existsSync(docFile(id2))) return null;
|
|
101305
101450
|
const session = await createDocumentSession({
|
|
101306
101451
|
file: docFile(id2),
|
|
101307
|
-
snapshotFile:
|
|
101452
|
+
snapshotFile: import_node_path23.default.join(options2.stateDir, "document", id2, "doc.loro"),
|
|
101308
101453
|
fillRefs: (state2) => fillRefIds(state2, refLookup),
|
|
101309
101454
|
...options2.timing,
|
|
101310
101455
|
log: options2.log
|
|
@@ -101323,6 +101468,7 @@ function createDocumentRegistry(options2) {
|
|
|
101323
101468
|
return outcome.kind === "rejected" ? outcomeWarnings(outcome) : [...outcomeWarnings(outcome), ...diagramWarnings(session), ...liveRefWarnings(id2)];
|
|
101324
101469
|
};
|
|
101325
101470
|
setWarnings(currentWarnings());
|
|
101471
|
+
rechecks.set(id2, () => setWarnings(currentWarnings()));
|
|
101326
101472
|
session.subscribe((event) => {
|
|
101327
101473
|
if (event.type === "update") {
|
|
101328
101474
|
options2.broadcast({
|
|
@@ -101346,6 +101492,7 @@ function createDocumentRegistry(options2) {
|
|
|
101346
101492
|
if (!event.streaming) refsChanged(id2, session);
|
|
101347
101493
|
}
|
|
101348
101494
|
});
|
|
101495
|
+
session.refreshRefs();
|
|
101349
101496
|
return session;
|
|
101350
101497
|
};
|
|
101351
101498
|
const open = (id2) => {
|
|
@@ -101364,11 +101511,18 @@ function createDocumentRegistry(options2) {
|
|
|
101364
101511
|
};
|
|
101365
101512
|
return {
|
|
101366
101513
|
open,
|
|
101514
|
+
artboardChanged: (slug) => {
|
|
101515
|
+
for (const [id2, session] of ready) {
|
|
101516
|
+
if (!refsIn(session.state()).some((ref) => ref.artboard === slug)) continue;
|
|
101517
|
+
session.refreshRefs();
|
|
101518
|
+
rechecks.get(id2)?.();
|
|
101519
|
+
}
|
|
101520
|
+
},
|
|
101367
101521
|
fileChanged: (id2) => {
|
|
101368
101522
|
const known = sessions.has(id2);
|
|
101369
101523
|
void open(id2).then((session) => {
|
|
101370
101524
|
if (!session || !known) return;
|
|
101371
|
-
|
|
101525
|
+
import_node_fs26.default.readFile(docFile(id2), "utf8", (err, text4) => {
|
|
101372
101526
|
if (!err) session.onFileText(text4);
|
|
101373
101527
|
});
|
|
101374
101528
|
});
|
|
@@ -101443,13 +101597,14 @@ function createDocumentRegistry(options2) {
|
|
|
101443
101597
|
await Promise.all(all.map((session) => session?.close()));
|
|
101444
101598
|
sessions.clear();
|
|
101445
101599
|
ready.clear();
|
|
101600
|
+
rechecks.clear();
|
|
101446
101601
|
}
|
|
101447
101602
|
};
|
|
101448
101603
|
}
|
|
101449
101604
|
|
|
101450
101605
|
// src/server/dynamic-blocks.ts
|
|
101451
|
-
var
|
|
101452
|
-
var
|
|
101606
|
+
var import_node_fs27 = __toESM(require("node:fs"), 1);
|
|
101607
|
+
var import_node_path24 = __toESM(require("node:path"), 1);
|
|
101453
101608
|
function dynamicUrls(xml) {
|
|
101454
101609
|
const urls = /* @__PURE__ */ new Set();
|
|
101455
101610
|
for (const match of stripOpaque(xml).matchAll(TAG)) {
|
|
@@ -101462,7 +101617,7 @@ function dynamicUrls(xml) {
|
|
|
101462
101617
|
}
|
|
101463
101618
|
var mtimeOf = (file) => {
|
|
101464
101619
|
try {
|
|
101465
|
-
return
|
|
101620
|
+
return import_node_fs27.default.statSync(file).mtimeMs;
|
|
101466
101621
|
} catch {
|
|
101467
101622
|
return -1;
|
|
101468
101623
|
}
|
|
@@ -101479,7 +101634,7 @@ function createDynamicBlocks(limits) {
|
|
|
101479
101634
|
};
|
|
101480
101635
|
const entry = (id2, dir, file) => {
|
|
101481
101636
|
const map = files(id2);
|
|
101482
|
-
const mtime = mtimeOf(
|
|
101637
|
+
const mtime = mtimeOf(import_node_path24.default.join(dir, file));
|
|
101483
101638
|
let state2 = map.get(file);
|
|
101484
101639
|
if (!state2 || state2.mtime !== mtime) {
|
|
101485
101640
|
state2 = { mtime, errors: [], ran: false };
|
|
@@ -101504,19 +101659,19 @@ function createDynamicBlocks(limits) {
|
|
|
101504
101659
|
state(id2, dir) {
|
|
101505
101660
|
let xml;
|
|
101506
101661
|
try {
|
|
101507
|
-
xml =
|
|
101662
|
+
xml = import_node_fs27.default.readFileSync(import_node_path24.default.join(dir, "doc.xml"), "utf8");
|
|
101508
101663
|
} catch {
|
|
101509
101664
|
return { warnings: [], dynamic: {} };
|
|
101510
101665
|
}
|
|
101511
101666
|
const urls = dynamicUrls(xml);
|
|
101512
101667
|
const map = files(id2);
|
|
101513
101668
|
for (const [file, state2] of map) {
|
|
101514
|
-
if (!urls.includes(file) || state2.mtime !== mtimeOf(
|
|
101669
|
+
if (!urls.includes(file) || state2.mtime !== mtimeOf(import_node_path24.default.join(dir, file))) map.delete(file);
|
|
101515
101670
|
}
|
|
101516
101671
|
const warnings = [];
|
|
101517
101672
|
const dynamic = {};
|
|
101518
101673
|
for (const url of urls) {
|
|
101519
|
-
if (!
|
|
101674
|
+
if (!import_node_fs27.default.existsSync(import_node_path24.default.join(dir, url))) warnings.push(`${url} not found`);
|
|
101520
101675
|
const state2 = map.get(url);
|
|
101521
101676
|
for (const error of state2?.errors ?? []) warnings.push(`runtime: ${url}: ${error}`);
|
|
101522
101677
|
dynamic[url] = { ran: state2?.ran ?? false };
|
|
@@ -101532,7 +101687,7 @@ var MAX_COMMENT_OP = 64 * 1024;
|
|
|
101532
101687
|
var MAX_DOCUMENT_UPDATE = 8 * 1024 * 1024;
|
|
101533
101688
|
|
|
101534
101689
|
// src/server/artifact-file.ts
|
|
101535
|
-
var
|
|
101690
|
+
var import_node_fs28 = __toESM(require("node:fs"), 1);
|
|
101536
101691
|
var RESOLVE = {
|
|
101537
101692
|
artboard: resolveBoardFile,
|
|
101538
101693
|
document: resolveDocumentAsset,
|
|
@@ -101545,8 +101700,8 @@ function readArtifactFile(dir, type, relative, uiRuntimeUrl, maxBytes = Infinity
|
|
|
101545
101700
|
if (!target) return null;
|
|
101546
101701
|
let data;
|
|
101547
101702
|
try {
|
|
101548
|
-
if (
|
|
101549
|
-
data =
|
|
101703
|
+
if (import_node_fs28.default.statSync(target).size > maxBytes) throw new RangeError("too large");
|
|
101704
|
+
data = import_node_fs28.default.readFileSync(target);
|
|
101550
101705
|
} catch (err) {
|
|
101551
101706
|
if (err instanceof RangeError) throw err;
|
|
101552
101707
|
return null;
|
|
@@ -101696,8 +101851,8 @@ async function handleRelay(ctx, key2, body, conn, contentOrigin = "") {
|
|
|
101696
101851
|
}
|
|
101697
101852
|
|
|
101698
101853
|
// src/server/selection.ts
|
|
101699
|
-
var
|
|
101700
|
-
var
|
|
101854
|
+
var import_node_fs29 = __toESM(require("node:fs"), 1);
|
|
101855
|
+
var import_node_path25 = __toESM(require("node:path"), 1);
|
|
101701
101856
|
|
|
101702
101857
|
// src/shared/selection.ts
|
|
101703
101858
|
var SELECTION_FULL_NODES = 20;
|
|
@@ -101812,7 +101967,7 @@ function readAnySelection(value) {
|
|
|
101812
101967
|
function createSelectionStore(stateDir, exists) {
|
|
101813
101968
|
const tabs = /* @__PURE__ */ new Map();
|
|
101814
101969
|
let clock = 0;
|
|
101815
|
-
const fileOf2 = (kind, id2) =>
|
|
101970
|
+
const fileOf2 = (kind, id2) => import_node_path25.default.join(stateDir, kind, id2, "selection.json");
|
|
101816
101971
|
const write = (kind, id2) => {
|
|
101817
101972
|
let winner;
|
|
101818
101973
|
for (const tab of tabs.values()) {
|
|
@@ -101820,7 +101975,7 @@ function createSelectionStore(stateDir, exists) {
|
|
|
101820
101975
|
if (!winner || tab.humanAt > winner.humanAt || tab.humanAt === winner.humanAt && tab.seenAt > winner.seenAt)
|
|
101821
101976
|
winner = tab;
|
|
101822
101977
|
}
|
|
101823
|
-
if (!winner?.state)
|
|
101978
|
+
if (!winner?.state) import_node_fs29.default.rmSync(fileOf2(kind, id2), { force: true });
|
|
101824
101979
|
else
|
|
101825
101980
|
writeJsonAtomic(fileOf2(kind, id2), {
|
|
101826
101981
|
artifact: `${kind}/${id2}`,
|
|
@@ -101862,11 +102017,11 @@ function createSelectionStore(stateDir, exists) {
|
|
|
101862
102017
|
for (const kind of ["artboard", "document"]) {
|
|
101863
102018
|
let ids;
|
|
101864
102019
|
try {
|
|
101865
|
-
ids =
|
|
102020
|
+
ids = import_node_fs29.default.readdirSync(import_node_path25.default.join(stateDir, kind));
|
|
101866
102021
|
} catch {
|
|
101867
102022
|
continue;
|
|
101868
102023
|
}
|
|
101869
|
-
for (const id2 of ids)
|
|
102024
|
+
for (const id2 of ids) import_node_fs29.default.rmSync(fileOf2(kind, id2), { force: true });
|
|
101870
102025
|
}
|
|
101871
102026
|
}
|
|
101872
102027
|
};
|
|
@@ -101874,13 +102029,13 @@ function createSelectionStore(stateDir, exists) {
|
|
|
101874
102029
|
|
|
101875
102030
|
// src/server/verify-recordings.ts
|
|
101876
102031
|
var import_node_crypto11 = __toESM(require("node:crypto"), 1);
|
|
101877
|
-
var
|
|
101878
|
-
var
|
|
102032
|
+
var import_node_fs31 = __toESM(require("node:fs"), 1);
|
|
102033
|
+
var import_node_path27 = __toESM(require("node:path"), 1);
|
|
101879
102034
|
|
|
101880
102035
|
// src/server/recording-trim.ts
|
|
101881
102036
|
var import_node_child_process3 = require("node:child_process");
|
|
101882
|
-
var
|
|
101883
|
-
var
|
|
102037
|
+
var import_node_fs30 = __toESM(require("node:fs"), 1);
|
|
102038
|
+
var import_node_path26 = __toESM(require("node:path"), 1);
|
|
101884
102039
|
function run2(command, args, signal3) {
|
|
101885
102040
|
return new Promise((resolve, reject) => {
|
|
101886
102041
|
(0, import_node_child_process3.execFile)(
|
|
@@ -101900,7 +102055,7 @@ function run2(command, args, signal3) {
|
|
|
101900
102055
|
});
|
|
101901
102056
|
}
|
|
101902
102057
|
async function trimRecording(input, output, signal3) {
|
|
101903
|
-
if (input === output ||
|
|
102058
|
+
if (input === output || import_node_fs30.default.existsSync(output))
|
|
101904
102059
|
throw new Error("Choose a new output path; existing files are never overwritten.");
|
|
101905
102060
|
const probe = JSON.parse(
|
|
101906
102061
|
(await run2(
|
|
@@ -101972,9 +102127,9 @@ async function trimRecording(input, output, signal3) {
|
|
|
101972
102127
|
if (start > 0 || end < duration) status = "trimmed";
|
|
101973
102128
|
}
|
|
101974
102129
|
if (status === "trimmed") {
|
|
101975
|
-
const temporary =
|
|
102130
|
+
const temporary = import_node_fs30.default.mkdtempSync(import_node_path26.default.join(import_node_path26.default.dirname(output), ".trim-"));
|
|
101976
102131
|
try {
|
|
101977
|
-
const encoded =
|
|
102132
|
+
const encoded = import_node_path26.default.join(temporary, "clip.mp4");
|
|
101978
102133
|
await run2(
|
|
101979
102134
|
"ffmpeg",
|
|
101980
102135
|
[
|
|
@@ -102010,9 +102165,9 @@ async function trimRecording(input, output, signal3) {
|
|
|
102010
102165
|
],
|
|
102011
102166
|
signal3
|
|
102012
102167
|
);
|
|
102013
|
-
|
|
102168
|
+
import_node_fs30.default.linkSync(encoded, output);
|
|
102014
102169
|
} finally {
|
|
102015
|
-
|
|
102170
|
+
import_node_fs30.default.rmSync(temporary, { recursive: true, force: true });
|
|
102016
102171
|
}
|
|
102017
102172
|
}
|
|
102018
102173
|
return { duration, start, end, removed: duration - (end - start), status };
|
|
@@ -102023,7 +102178,7 @@ var POLICY = "idle-ends-v2";
|
|
|
102023
102178
|
var STABLE_MS = 750;
|
|
102024
102179
|
var digest2 = (data) => import_node_crypto11.default.createHash("sha256").update(data).digest("hex");
|
|
102025
102180
|
var stamp2 = (file) => {
|
|
102026
|
-
const stat =
|
|
102181
|
+
const stat = import_node_fs31.default.statSync(file);
|
|
102027
102182
|
return `${stat.dev}:${stat.ino}:${stat.size}:${stat.mtimeMs}:${stat.ctimeMs}`;
|
|
102028
102183
|
};
|
|
102029
102184
|
function createVerifyRecordings(options2) {
|
|
@@ -102037,7 +102192,7 @@ function createVerifyRecordings(options2) {
|
|
|
102037
102192
|
const notify = (job) => {
|
|
102038
102193
|
if (current(job)) options2.onChange(job.artifact);
|
|
102039
102194
|
};
|
|
102040
|
-
const cacheDir =
|
|
102195
|
+
const cacheDir = import_node_path27.default.join(options2.stateDir, "recordings");
|
|
102041
102196
|
async function process2(job) {
|
|
102042
102197
|
let temporary;
|
|
102043
102198
|
try {
|
|
@@ -102046,7 +102201,7 @@ function createVerifyRecordings(options2) {
|
|
|
102046
102201
|
options2.onChange(job.artifact);
|
|
102047
102202
|
return;
|
|
102048
102203
|
}
|
|
102049
|
-
const bytes = await
|
|
102204
|
+
const bytes = await import_node_fs31.default.promises.readFile(job.file);
|
|
102050
102205
|
if (!current(job)) return;
|
|
102051
102206
|
if (stamp2(job.file) !== job.stamp) {
|
|
102052
102207
|
jobs.delete(job.key);
|
|
@@ -102054,22 +102209,22 @@ function createVerifyRecordings(options2) {
|
|
|
102054
102209
|
return;
|
|
102055
102210
|
}
|
|
102056
102211
|
const key2 = digest2(`${POLICY}:${digest2(bytes)}`);
|
|
102057
|
-
const dir =
|
|
102058
|
-
const output =
|
|
102059
|
-
const metadata =
|
|
102212
|
+
const dir = import_node_path27.default.join(cacheDir, key2);
|
|
102213
|
+
const output = import_node_path27.default.join(dir, "clip.mp4");
|
|
102214
|
+
const metadata = import_node_path27.default.join(dir, "result.json");
|
|
102060
102215
|
let cached;
|
|
102061
102216
|
try {
|
|
102062
|
-
const saved = JSON.parse(
|
|
102063
|
-
if (saved.result.status !== "trimmed" ||
|
|
102217
|
+
const saved = JSON.parse(import_node_fs31.default.readFileSync(metadata, "utf8"));
|
|
102218
|
+
if (saved.result.status !== "trimmed" || import_node_fs31.default.existsSync(output) && saved.hash === digest2(import_node_fs31.default.readFileSync(output)))
|
|
102064
102219
|
cached = saved;
|
|
102065
102220
|
} catch {
|
|
102066
102221
|
}
|
|
102067
102222
|
if (!cached) {
|
|
102068
|
-
|
|
102069
|
-
temporary =
|
|
102070
|
-
const input =
|
|
102071
|
-
const prepared =
|
|
102072
|
-
|
|
102223
|
+
import_node_fs31.default.mkdirSync(cacheDir, { recursive: true });
|
|
102224
|
+
temporary = import_node_fs31.default.mkdtempSync(import_node_path27.default.join(cacheDir, ".prepare-"));
|
|
102225
|
+
const input = import_node_path27.default.join(temporary, "capture");
|
|
102226
|
+
const prepared = import_node_path27.default.join(temporary, "clip.mp4");
|
|
102227
|
+
import_node_fs31.default.writeFileSync(input, bytes);
|
|
102073
102228
|
const result = await (options2.prepare ?? trimRecording)(
|
|
102074
102229
|
input,
|
|
102075
102230
|
prepared,
|
|
@@ -102081,9 +102236,9 @@ function createVerifyRecordings(options2) {
|
|
|
102081
102236
|
options2.onChange(job.artifact);
|
|
102082
102237
|
return;
|
|
102083
102238
|
}
|
|
102084
|
-
|
|
102085
|
-
const hash2 = result.status === "trimmed" ? digest2(
|
|
102086
|
-
if (result.status === "trimmed")
|
|
102239
|
+
import_node_fs31.default.mkdirSync(dir, { recursive: true });
|
|
102240
|
+
const hash2 = result.status === "trimmed" ? digest2(import_node_fs31.default.readFileSync(prepared)) : void 0;
|
|
102241
|
+
if (result.status === "trimmed") import_node_fs31.default.copyFileSync(prepared, output);
|
|
102087
102242
|
cached = { result, ...hash2 ? { hash: hash2 } : {} };
|
|
102088
102243
|
writeJsonAtomic(metadata, cached);
|
|
102089
102244
|
}
|
|
@@ -102116,7 +102271,7 @@ function createVerifyRecordings(options2) {
|
|
|
102116
102271
|
};
|
|
102117
102272
|
notify(job);
|
|
102118
102273
|
} finally {
|
|
102119
|
-
if (temporary)
|
|
102274
|
+
if (temporary) import_node_fs31.default.rmSync(temporary, { recursive: true, force: true });
|
|
102120
102275
|
}
|
|
102121
102276
|
}
|
|
102122
102277
|
function pump() {
|
|
@@ -102182,7 +102337,7 @@ function createVerifyRecordings(options2) {
|
|
|
102182
102337
|
if (job.state.status === "processing") pending.add(boardId);
|
|
102183
102338
|
if (job.virtual && job.output) {
|
|
102184
102339
|
canvas.boards[boardId] = { ...board, file: job.virtual, src: job.virtual };
|
|
102185
|
-
versions[job.virtual] =
|
|
102340
|
+
versions[job.virtual] = import_node_fs31.default.statSync(job.output).mtimeMs;
|
|
102186
102341
|
}
|
|
102187
102342
|
}
|
|
102188
102343
|
for (const job of jobs.values()) if (job.artifact === id2 && !active.has(job.key)) stop(job);
|
|
@@ -102211,7 +102366,7 @@ function createVerifyRecordings(options2) {
|
|
|
102211
102366
|
continue;
|
|
102212
102367
|
const original = job.key.slice(id2.length + 1);
|
|
102213
102368
|
if (!referenced.has(original)) overrides.set(original, null);
|
|
102214
|
-
overrides.set(job.virtual,
|
|
102369
|
+
overrides.set(job.virtual, import_node_fs31.default.readFileSync(job.output));
|
|
102215
102370
|
}
|
|
102216
102371
|
if (overrides.size) overrides.set("canvas.json", Buffer.from(JSON.stringify(payload.canvas)));
|
|
102217
102372
|
return overrides;
|
|
@@ -102251,18 +102406,18 @@ function titleOf(payload) {
|
|
|
102251
102406
|
return "Untitled artifact";
|
|
102252
102407
|
}
|
|
102253
102408
|
function createServerContext(options2) {
|
|
102254
|
-
const root =
|
|
102255
|
-
const viewerDir =
|
|
102256
|
-
const runtimeDir = options2.runtimeDir ?
|
|
102257
|
-
const stateDir =
|
|
102258
|
-
|
|
102259
|
-
|
|
102409
|
+
const root = import_node_path28.default.resolve(options2.root);
|
|
102410
|
+
const viewerDir = import_node_path28.default.resolve(options2.viewerDir);
|
|
102411
|
+
const runtimeDir = options2.runtimeDir ? import_node_path28.default.resolve(options2.runtimeDir) : null;
|
|
102412
|
+
const stateDir = import_node_path28.default.join(root, ".state");
|
|
102413
|
+
import_node_fs32.default.mkdirSync(stateDir, { recursive: true, mode: 448 });
|
|
102414
|
+
import_node_fs32.default.writeFileSync(import_node_path28.default.join(stateDir, ".gitignore"), "*\n");
|
|
102260
102415
|
if (options2.configFile) ensureConfig(options2.configFile);
|
|
102261
|
-
const portFile =
|
|
102262
|
-
const tokenFile =
|
|
102416
|
+
const portFile = import_node_path28.default.join(stateDir, ".last-port");
|
|
102417
|
+
const tokenFile = import_node_path28.default.join(stateDir, ".last-token");
|
|
102263
102418
|
const mount = options2.mount;
|
|
102264
102419
|
const token = mount?.token ?? (readPersisted(tokenFile) || randomToken());
|
|
102265
|
-
if (!mount)
|
|
102420
|
+
if (!mount) import_node_fs32.default.writeFileSync(tokenFile, `${token}
|
|
102266
102421
|
`, { mode: 384 });
|
|
102267
102422
|
const contentToken = randomToken();
|
|
102268
102423
|
const loopback = isLoopbackHost(options2.host);
|
|
@@ -102296,6 +102451,22 @@ function createServerContext(options2) {
|
|
|
102296
102451
|
);
|
|
102297
102452
|
selections.clearAll();
|
|
102298
102453
|
const changeListeners = [];
|
|
102454
|
+
const agentStatus = createAgentStatus(root);
|
|
102455
|
+
const agentStatusFrame = () => textFrame(
|
|
102456
|
+
JSON.stringify({
|
|
102457
|
+
type: "agent-status",
|
|
102458
|
+
artifact: "*",
|
|
102459
|
+
sessions: agentStatus.sessions()
|
|
102460
|
+
})
|
|
102461
|
+
);
|
|
102462
|
+
const publishAgentStatus = () => {
|
|
102463
|
+
const frame = agentStatusFrame();
|
|
102464
|
+
for (const socket of clients) socket.write(frame);
|
|
102465
|
+
};
|
|
102466
|
+
changeListeners.push((ref, _payload, files) => {
|
|
102467
|
+
if (agentWrittenFiles(files).length > 0 && agentStatus.touched(`${ref.type}/${ref.id}`))
|
|
102468
|
+
publishAgentStatus();
|
|
102469
|
+
});
|
|
102299
102470
|
const activityListeners = [];
|
|
102300
102471
|
const startedAt = Date.now();
|
|
102301
102472
|
const touch = () => {
|
|
@@ -102318,8 +102489,8 @@ function createServerContext(options2) {
|
|
|
102318
102489
|
};
|
|
102319
102490
|
const avatars = createAvatars(options2.fetch);
|
|
102320
102491
|
const names = commentNames({
|
|
102321
|
-
agentFile:
|
|
102322
|
-
projectDir:
|
|
102492
|
+
agentFile: import_node_path28.default.join(stateDir, "agent"),
|
|
102493
|
+
projectDir: import_node_path28.default.resolve(root, "../.."),
|
|
102323
102494
|
cloud: options2.cloud
|
|
102324
102495
|
});
|
|
102325
102496
|
const recordings = createVerifyRecordings({
|
|
@@ -102373,6 +102544,7 @@ function createServerContext(options2) {
|
|
|
102373
102544
|
const listeningTimer = setInterval(() => {
|
|
102374
102545
|
boardComments.refreshListening();
|
|
102375
102546
|
documents.refreshListening();
|
|
102547
|
+
if (agentStatus.expire(Date.now())) publishAgentStatus();
|
|
102376
102548
|
}, 3e3);
|
|
102377
102549
|
listeningTimer.unref();
|
|
102378
102550
|
const inspect = async (ref) => {
|
|
@@ -102414,13 +102586,13 @@ function createServerContext(options2) {
|
|
|
102414
102586
|
const cloud = options2.cloud && options2.configFile ? createCloudRoutes({
|
|
102415
102587
|
...options2.cloud,
|
|
102416
102588
|
configFile: options2.configFile,
|
|
102417
|
-
project:
|
|
102589
|
+
project: import_node_path28.default.basename(import_node_path28.default.resolve(root, "../..")),
|
|
102418
102590
|
address: (ref) => artifactPath(root, ref.type, ref.id).split("/").pop(),
|
|
102419
102591
|
references: (ref) => {
|
|
102420
102592
|
if (ref.type !== "document") return [];
|
|
102421
102593
|
const dir = resolveArtifactDir(root, "document", ref.id);
|
|
102422
|
-
const file = dir ?
|
|
102423
|
-
const xml = file &&
|
|
102594
|
+
const file = dir ? import_node_path28.default.join(dir, "doc.xml") : null;
|
|
102595
|
+
const xml = file && import_node_fs32.default.existsSync(file) ? import_node_fs32.default.readFileSync(file, "utf8") : "";
|
|
102424
102596
|
return [...xml.matchAll(REF_ARTBOARD)].map((match) => match[1]).filter((slug) => resolveArtifactDir(root, "artboard", slug) !== null);
|
|
102425
102597
|
},
|
|
102426
102598
|
port: () => ctx.port,
|
|
@@ -102430,7 +102602,7 @@ function createServerContext(options2) {
|
|
|
102430
102602
|
}
|
|
102431
102603
|
}) : null;
|
|
102432
102604
|
const autoPublisher = cloud ? createAutoPublisher({
|
|
102433
|
-
stateFile:
|
|
102605
|
+
stateFile: import_node_path28.default.join(stateDir, "auto-publish.json"),
|
|
102434
102606
|
enabled: cloud.autoPublishEnabled,
|
|
102435
102607
|
token: cloud.token,
|
|
102436
102608
|
publish: async (key2) => {
|
|
@@ -102492,7 +102664,7 @@ function createServerContext(options2) {
|
|
|
102492
102664
|
);
|
|
102493
102665
|
if (ref.type === "artboard")
|
|
102494
102666
|
writeJsonAtomic(
|
|
102495
|
-
|
|
102667
|
+
import_node_path28.default.join(stateDir, "artboard", ref.id, "backlinks.json"),
|
|
102496
102668
|
backlinksOf(ref.id)
|
|
102497
102669
|
);
|
|
102498
102670
|
} catch (err) {
|
|
@@ -102558,6 +102730,9 @@ function createServerContext(options2) {
|
|
|
102558
102730
|
clients,
|
|
102559
102731
|
selections,
|
|
102560
102732
|
changeListeners,
|
|
102733
|
+
agentStatus,
|
|
102734
|
+
agentStatusFrame,
|
|
102735
|
+
publishAgentStatus,
|
|
102561
102736
|
activityListeners,
|
|
102562
102737
|
relayListeners,
|
|
102563
102738
|
direct,
|
|
@@ -102582,7 +102757,7 @@ function createServerContext(options2) {
|
|
|
102582
102757
|
};
|
|
102583
102758
|
return ctx;
|
|
102584
102759
|
}
|
|
102585
|
-
var projectName = (ctx) =>
|
|
102760
|
+
var projectName = (ctx) => import_node_path28.default.basename(import_node_path28.default.dirname(import_node_path28.default.dirname(ctx.root)));
|
|
102586
102761
|
|
|
102587
102762
|
// ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/wrapper.mjs
|
|
102588
102763
|
var import_stream = __toESM(require_stream(), 1);
|
|
@@ -102730,8 +102905,8 @@ function createRelayClient(options2) {
|
|
|
102730
102905
|
}
|
|
102731
102906
|
|
|
102732
102907
|
// src/server/routes/content.ts
|
|
102733
|
-
var
|
|
102734
|
-
var
|
|
102908
|
+
var import_node_fs33 = __toESM(require("node:fs"), 1);
|
|
102909
|
+
var import_node_path29 = __toESM(require("node:path"), 1);
|
|
102735
102910
|
function serveContent(ctx, res, rest, range, mode = "main") {
|
|
102736
102911
|
const { root, runtimeDir, recordings, options: options2 } = ctx;
|
|
102737
102912
|
if (rest.startsWith("runtime/")) {
|
|
@@ -102782,7 +102957,7 @@ function serveContent(ctx, res, rest, range, mode = "main") {
|
|
|
102782
102957
|
sendFile(res, target, headers, range);
|
|
102783
102958
|
return;
|
|
102784
102959
|
}
|
|
102785
|
-
|
|
102960
|
+
import_node_fs33.default.readFile(target, "utf8", (err, source) => {
|
|
102786
102961
|
if (err) send(res, 404, "Not found");
|
|
102787
102962
|
else {
|
|
102788
102963
|
const uiRuntimeUrl = runtimeDir ? `${mode === "board" ? "/c/" : ctx.contentPrefix}runtime/ryugi-ui.js` : void 0;
|
|
@@ -102818,7 +102993,7 @@ var robotsRoute = {
|
|
|
102818
102993
|
path: "/robots.txt",
|
|
102819
102994
|
auth: "public",
|
|
102820
102995
|
handle: (_req, res, ctx) => {
|
|
102821
|
-
sendFile(res,
|
|
102996
|
+
sendFile(res, import_node_path29.default.join(ctx.viewerDir, "robots.txt"));
|
|
102822
102997
|
}
|
|
102823
102998
|
};
|
|
102824
102999
|
var contentRoute = {
|
|
@@ -102865,8 +103040,8 @@ var createBoardRequestHandler = (ctx) => (req, res) => {
|
|
|
102865
103040
|
};
|
|
102866
103041
|
|
|
102867
103042
|
// src/server/routes/agent.ts
|
|
102868
|
-
var
|
|
102869
|
-
var
|
|
103043
|
+
var import_node_fs34 = __toESM(require("node:fs"), 1);
|
|
103044
|
+
var import_node_path30 = __toESM(require("node:path"), 1);
|
|
102870
103045
|
|
|
102871
103046
|
// src/server/routes/comments.ts
|
|
102872
103047
|
var API_BOARD_COMMENTS_ROUTE = /^\/api\/artboard\/([^/]+)\/comments$/;
|
|
@@ -102921,7 +103096,7 @@ var CHECK_MERGE_WAIT_MS = 6e4;
|
|
|
102921
103096
|
var agentName = (fields) => typeof fields.agent === "string" && fields.agent.length > 0 && fields.agent.length <= 100 ? fields.agent : void 0;
|
|
102922
103097
|
var blockIdsOf = async (ctx, id2, dir) => {
|
|
102923
103098
|
await (await ctx.documents.open(id2))?.flush();
|
|
102924
|
-
const state2 = parseDocument2(
|
|
103099
|
+
const state2 = parseDocument2(import_node_fs34.default.readFileSync(import_node_path30.default.join(dir, "doc.xml"), "utf8"));
|
|
102925
103100
|
return new Set(
|
|
102926
103101
|
state2.root.children.flatMap(
|
|
102927
103102
|
(block) => block.$?.blockId ? [block.$.blockId] : []
|
|
@@ -103003,8 +103178,10 @@ function agentAskRequest(fields) {
|
|
|
103003
103178
|
}
|
|
103004
103179
|
function agentVerdictOf(fields) {
|
|
103005
103180
|
const verdict = fields.verdict;
|
|
103006
|
-
if (verdict !== "pass" && verdict !== "reject")
|
|
103007
|
-
|
|
103181
|
+
if (verdict !== "pass" && verdict !== "reject")
|
|
103182
|
+
throw new Error('verdict needs {verdict: "pass" | "reject"}');
|
|
103183
|
+
if (fields.all !== true && !isId(fields.group))
|
|
103184
|
+
throw new Error("verdict needs {group} or {all: true}");
|
|
103008
103185
|
const text4 = typeof fields.text === "string" ? fields.text.trim() : "";
|
|
103009
103186
|
if (verdict === "reject" && !text4) throw new Error("a reject needs a reason: pass {text}");
|
|
103010
103187
|
return {
|
|
@@ -103096,7 +103273,7 @@ async function serveAgentCheck(res, ctx, type, id2) {
|
|
|
103096
103273
|
let merging = false;
|
|
103097
103274
|
if (ref.type === "document") {
|
|
103098
103275
|
const session = await documents.open(ref.id);
|
|
103099
|
-
const text4 = await
|
|
103276
|
+
const text4 = await import_node_fs34.default.promises.readFile(import_node_path30.default.join(dir, "doc.xml"), "utf8").catch(() => null);
|
|
103100
103277
|
if (session && text4 !== null) {
|
|
103101
103278
|
session.onFileText(text4);
|
|
103102
103279
|
const timeout = new Promise(
|
|
@@ -103106,14 +103283,20 @@ async function serveAgentCheck(res, ctx, type, id2) {
|
|
|
103106
103283
|
}
|
|
103107
103284
|
}
|
|
103108
103285
|
const payload = ctx.writeState(ref, dir);
|
|
103109
|
-
const state2 = JSON.parse(
|
|
103286
|
+
const state2 = JSON.parse(
|
|
103287
|
+
await import_node_fs34.default.promises.readFile(import_node_path30.default.join(stateDir, ref.type, ref.id, "warnings.json"), "utf8")
|
|
103288
|
+
);
|
|
103110
103289
|
const dynamic = Object.values(state2.dynamic ?? {});
|
|
103111
103290
|
const required = ref.type === "html" || dynamic.length > 0 || ref.type === "artboard" && "canvas" in payload && Object.values(payload.canvas?.boards ?? {}).some((board) => !isMediaBoard(board));
|
|
103112
103291
|
const observed = ref.type === "html" ? state2.ran : dynamic.length ? dynamic.every((block) => block.ran === true) : required ? void 0 : true;
|
|
103113
103292
|
sendJson(res, 200, {
|
|
103114
103293
|
...state2,
|
|
103115
103294
|
...merging ? { merging: true } : {},
|
|
103116
|
-
evidence: {
|
|
103295
|
+
evidence: {
|
|
103296
|
+
required,
|
|
103297
|
+
observed,
|
|
103298
|
+
fresh: !merging && signatures.get(key2) === artifactSignature(dir, ref.type)
|
|
103299
|
+
}
|
|
103117
103300
|
});
|
|
103118
103301
|
}
|
|
103119
103302
|
async function serveAgentChanges(req, res, ctx, id2) {
|
|
@@ -103123,7 +103306,11 @@ async function serveAgentChanges(req, res, ctx, id2) {
|
|
|
103123
103306
|
}
|
|
103124
103307
|
const body = await readCommentBody(req);
|
|
103125
103308
|
const fields = typeof body === "object" && body !== null ? body : {};
|
|
103126
|
-
const changes = await ctx.documents.changes(
|
|
103309
|
+
const changes = await ctx.documents.changes(
|
|
103310
|
+
id2,
|
|
103311
|
+
agentName(fields) ?? "Agent",
|
|
103312
|
+
fields.all === true
|
|
103313
|
+
);
|
|
103127
103314
|
if (!changes) {
|
|
103128
103315
|
sendJson(res, 404, { error: `document/${id2} not found` });
|
|
103129
103316
|
return;
|
|
@@ -103154,6 +103341,28 @@ var agentCheckRoute = {
|
|
|
103154
103341
|
auth: "agent",
|
|
103155
103342
|
handle: (_req, res, ctx, { match }) => serveAgentCheck(res, ctx, match[1], match[2])
|
|
103156
103343
|
};
|
|
103344
|
+
var isAgentEvent = (value) => {
|
|
103345
|
+
if (typeof value !== "object" || value === null) return false;
|
|
103346
|
+
const event = value;
|
|
103347
|
+
const text4 = (field, max) => typeof field === "string" && field.length > 0 && field.length <= max;
|
|
103348
|
+
return (event.host === "claude" || event.host === "codex") && text4(event.session, 200) && text4(event.event, 64) && typeof event.at === "number" && Number.isFinite(event.at) && (event.tool === void 0 || text4(event.tool, 64)) && (event.paths === void 0 || Array.isArray(event.paths) && event.paths.length <= 64 && event.paths.every((file) => text4(file, 4096)));
|
|
103349
|
+
};
|
|
103350
|
+
var agentEventRoute = {
|
|
103351
|
+
path: "/api/agent/event",
|
|
103352
|
+
methods: ["POST"],
|
|
103353
|
+
auth: "agent",
|
|
103354
|
+
handle: async (req, res, ctx) => {
|
|
103355
|
+
const body = await readCommentBody(req);
|
|
103356
|
+
if (!isAgentEvent(body)) {
|
|
103357
|
+
sendJson(res, 400, {
|
|
103358
|
+
error: "not an agent event: need host, session, event, at and optional paths"
|
|
103359
|
+
});
|
|
103360
|
+
return;
|
|
103361
|
+
}
|
|
103362
|
+
if (ctx.agentStatus.apply(body)) ctx.publishAgentStatus();
|
|
103363
|
+
send(res, 204, "");
|
|
103364
|
+
}
|
|
103365
|
+
};
|
|
103157
103366
|
|
|
103158
103367
|
// src/server/routes/agent-review.ts
|
|
103159
103368
|
var schema = "ryugi.review/v1";
|
|
@@ -103178,7 +103387,9 @@ function options(body, artifact) {
|
|
|
103178
103387
|
}
|
|
103179
103388
|
async function threads(ctx, type, id2, input) {
|
|
103180
103389
|
if (type === "document") {
|
|
103181
|
-
const views2 = new Map(
|
|
103390
|
+
const views2 = new Map(
|
|
103391
|
+
ctx.documents.listComments(id2, input.agent, true).map((thread) => [thread.id, thread])
|
|
103392
|
+
);
|
|
103182
103393
|
const file2 = ctx.documents.comments(id2);
|
|
103183
103394
|
return ctx.agentReview.threads({
|
|
103184
103395
|
...input,
|
|
@@ -103189,7 +103400,9 @@ async function threads(ctx, type, id2, input) {
|
|
|
103189
103400
|
}))
|
|
103190
103401
|
});
|
|
103191
103402
|
}
|
|
103192
|
-
const views = new Map(
|
|
103403
|
+
const views = new Map(
|
|
103404
|
+
ctx.boardComments.list(id2, input.agent, true).map((thread) => [thread.id, thread])
|
|
103405
|
+
);
|
|
103193
103406
|
const file = ctx.boardComments.comments(id2);
|
|
103194
103407
|
return ctx.agentReview.threads({
|
|
103195
103408
|
...input,
|
|
@@ -103202,7 +103415,8 @@ async function threads(ctx, type, id2, input) {
|
|
|
103202
103415
|
}
|
|
103203
103416
|
async function state(ctx, type, id2, input, section) {
|
|
103204
103417
|
let items = [];
|
|
103205
|
-
if (section === "asks" && type === "document")
|
|
103418
|
+
if (section === "asks" && type === "document")
|
|
103419
|
+
items = (await ctx.documents.asks(id2)).asks.map((ask) => ({ ...ask }));
|
|
103206
103420
|
else if (section === "groups" && type === "artboard")
|
|
103207
103421
|
items = ctx.boardComments.groups(id2).map((group) => ({ ...group }));
|
|
103208
103422
|
else if (section === "rounds" && type === "artboard")
|
|
@@ -103238,9 +103452,13 @@ async function serve(req, res, ctx, type, id2, operation) {
|
|
|
103238
103452
|
return;
|
|
103239
103453
|
}
|
|
103240
103454
|
if (operation === "changes") {
|
|
103241
|
-
if (type !== "document")
|
|
103455
|
+
if (type !== "document")
|
|
103456
|
+
throw new ReviewError("E_ARGUMENT_INVALID", "Changes apply to documents only.");
|
|
103242
103457
|
if (input.detail && (input.limit !== void 0 || input.cursor || input.fields))
|
|
103243
|
-
throw new ReviewError(
|
|
103458
|
+
throw new ReviewError(
|
|
103459
|
+
"E_ARGUMENT_INVALID",
|
|
103460
|
+
"A complete diff cannot use pagination or fields."
|
|
103461
|
+
);
|
|
103244
103462
|
const session = await ctx.documents.open(id2);
|
|
103245
103463
|
if (!session) throw new ReviewError("E_ARTIFACT_NOT_FOUND", "Document not found.", 404);
|
|
103246
103464
|
const value = await ctx.agentReview.changes({
|
|
@@ -103253,7 +103471,26 @@ async function serve(req, res, ctx, type, id2, operation) {
|
|
|
103253
103471
|
const section = body.op === "read" ? "threads" : text2(body.section);
|
|
103254
103472
|
if (body.op !== "list" && body.op !== "read")
|
|
103255
103473
|
throw new ReviewError("E_ARGUMENT_INVALID", "Expected list, read or ack.");
|
|
103256
|
-
if (body.op === "read" && !input.thread)
|
|
103474
|
+
if (body.op === "read" && !input.thread)
|
|
103475
|
+
throw new ReviewError("E_ARGUMENT_INVALID", "A thread ID is required.");
|
|
103476
|
+
if (body.sections !== void 0) {
|
|
103477
|
+
if (body.op !== "list" || !Array.isArray(body.sections) || !body.sections.every((item2) => typeof item2 === "string"))
|
|
103478
|
+
throw new ReviewError(
|
|
103479
|
+
"E_ARGUMENT_INVALID",
|
|
103480
|
+
"sections requires a list of collection names and op=list."
|
|
103481
|
+
);
|
|
103482
|
+
const error = validateReviewBundle(
|
|
103483
|
+
{ ...input, section, sections: body.sections },
|
|
103484
|
+
input.artifact
|
|
103485
|
+
);
|
|
103486
|
+
if (error) throw new ReviewError("E_ARGUMENT_INVALID", error);
|
|
103487
|
+
const sections = {};
|
|
103488
|
+
for (const name of body.sections) {
|
|
103489
|
+
sections[name] = name === "threads" ? await threads(ctx, type, id2, input) : await state(ctx, type, id2, input, name);
|
|
103490
|
+
}
|
|
103491
|
+
sendJson(res, 200, { schema, artifact: input.artifact, sections });
|
|
103492
|
+
return;
|
|
103493
|
+
}
|
|
103257
103494
|
validateSection(input, section);
|
|
103258
103495
|
if (section === "threads")
|
|
103259
103496
|
sendJson(res, 200, {
|
|
@@ -103787,6 +104024,7 @@ var clientSocketRoute = {
|
|
|
103787
104024
|
handle: (_req, socket, ctx, { clientKey }) => {
|
|
103788
104025
|
completeHandshake(socket, clientKey);
|
|
103789
104026
|
ctx.clients.add(socket);
|
|
104027
|
+
socket.write(ctx.agentStatusFrame());
|
|
103790
104028
|
handleClientFrames(socket, (text4) => onClientText(ctx, socket, text4));
|
|
103791
104029
|
const forget = () => {
|
|
103792
104030
|
ctx.clients.delete(socket);
|
|
@@ -103803,8 +104041,8 @@ var clientSocketRoute = {
|
|
|
103803
104041
|
};
|
|
103804
104042
|
|
|
103805
104043
|
// src/server/routes/viewer.ts
|
|
103806
|
-
var
|
|
103807
|
-
var
|
|
104044
|
+
var import_node_fs35 = __toESM(require("node:fs"), 1);
|
|
104045
|
+
var import_node_path31 = __toESM(require("node:path"), 1);
|
|
103808
104046
|
|
|
103809
104047
|
// src/shared/type-icons.ts
|
|
103810
104048
|
var TYPE_GLYPHS = {
|
|
@@ -103924,8 +104162,8 @@ function serveShell(req, res, ctx, { pathname, key: key2 }, embedded) {
|
|
|
103924
104162
|
if (ref) headers["Referrer-Policy"] = "same-origin";
|
|
103925
104163
|
if (key2 !== null && !loopback)
|
|
103926
104164
|
headers["Set-Cookie"] = `${ctx.cookieName}=${ctx.token}; HttpOnly; SameSite=Strict; Path=/`;
|
|
103927
|
-
const entry = preview2 &&
|
|
103928
|
-
void
|
|
104165
|
+
const entry = preview2 && import_node_fs35.default.existsSync(import_node_path31.default.join(viewerDir, "preview.html")) ? "preview.html" : "index.html";
|
|
104166
|
+
void import_node_fs35.default.promises.readFile(import_node_path31.default.join(viewerDir, entry), "utf8").then((template) => {
|
|
103929
104167
|
const html = viewerPage(template, {
|
|
103930
104168
|
title,
|
|
103931
104169
|
description,
|
|
@@ -103994,6 +104232,7 @@ var HTTP_ROUTES = [
|
|
|
103994
104232
|
agentChangesRoute,
|
|
103995
104233
|
agentBoardCommentsRoute,
|
|
103996
104234
|
agentCheckRoute,
|
|
104235
|
+
agentEventRoute,
|
|
103997
104236
|
boardCommentsRoute,
|
|
103998
104237
|
documentStateRoute,
|
|
103999
104238
|
documentWriteRoute,
|
|
@@ -104141,7 +104380,7 @@ async function startArtifactsServer(options2) {
|
|
|
104141
104380
|
} catch {
|
|
104142
104381
|
ctx.port = await listen(server, options2.host, 0);
|
|
104143
104382
|
}
|
|
104144
|
-
|
|
104383
|
+
import_node_fs36.default.writeFileSync(ctx.portFile, `${ctx.port}
|
|
104145
104384
|
`, { mode: 384 });
|
|
104146
104385
|
}
|
|
104147
104386
|
const port = ctx.port;
|
|
@@ -104150,7 +104389,7 @@ async function startArtifactsServer(options2) {
|
|
|
104150
104389
|
const boardServer = import_node_http.default.createServer(handleBoardRequest);
|
|
104151
104390
|
if (mount) ctx.boardPort = mount.boardPort;
|
|
104152
104391
|
else if (loopback) {
|
|
104153
|
-
const boardPortFile =
|
|
104392
|
+
const boardPortFile = import_node_path32.default.join(stateDir, BOARD_PORT_FILE);
|
|
104154
104393
|
const previousBoardPort = Number(readPersisted(boardPortFile));
|
|
104155
104394
|
try {
|
|
104156
104395
|
ctx.boardPort = await listen(
|
|
@@ -104161,7 +104400,7 @@ async function startArtifactsServer(options2) {
|
|
|
104161
104400
|
} catch {
|
|
104162
104401
|
ctx.boardPort = await listen(boardServer, options2.host, 0);
|
|
104163
104402
|
}
|
|
104164
|
-
|
|
104403
|
+
import_node_fs36.default.writeFileSync(boardPortFile, `${ctx.boardPort}
|
|
104165
104404
|
`, { mode: 384 });
|
|
104166
104405
|
}
|
|
104167
104406
|
const boardPort = ctx.boardPort;
|
|
@@ -104180,7 +104419,7 @@ async function startArtifactsServer(options2) {
|
|
|
104180
104419
|
initialChanges.push({ ref: entry, payload, files: [] });
|
|
104181
104420
|
if (entry.type === "document") void ctx.documents.open(entry.id);
|
|
104182
104421
|
}
|
|
104183
|
-
writeJsonAtomic(
|
|
104422
|
+
writeJsonAtomic(import_node_path32.default.join(stateDir, "server-info"), {
|
|
104184
104423
|
type: "server-started",
|
|
104185
104424
|
url,
|
|
104186
104425
|
port,
|
|
@@ -104263,66 +104502,66 @@ async function startArtifactsServer(options2) {
|
|
|
104263
104502
|
server.closeAllConnections();
|
|
104264
104503
|
});
|
|
104265
104504
|
await ctx.documents.close().catch(() => void 0);
|
|
104266
|
-
if (mount)
|
|
104505
|
+
if (mount) import_node_fs36.default.rmSync(import_node_path32.default.join(stateDir, "server-info"), { force: true });
|
|
104267
104506
|
}
|
|
104268
104507
|
};
|
|
104269
104508
|
}
|
|
104270
104509
|
var mountArtifactsProject = (options2) => startArtifactsServer(options2);
|
|
104271
104510
|
|
|
104272
104511
|
// src/server/artifact-index.ts
|
|
104273
|
-
var
|
|
104274
|
-
var
|
|
104512
|
+
var import_node_fs38 = __toESM(require("node:fs"), 1);
|
|
104513
|
+
var import_node_path34 = __toESM(require("node:path"), 1);
|
|
104275
104514
|
|
|
104276
104515
|
// src/server/machine.ts
|
|
104277
|
-
var
|
|
104516
|
+
var import_node_fs37 = __toESM(require("node:fs"), 1);
|
|
104278
104517
|
var import_node_os = __toESM(require("node:os"), 1);
|
|
104279
|
-
var
|
|
104518
|
+
var import_node_path33 = __toESM(require("node:path"), 1);
|
|
104280
104519
|
var DORMANT_AFTER_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
104281
104520
|
function machinePaths(env = process.env, homedir = import_node_os.default.homedir()) {
|
|
104282
|
-
const home = env.RYUGI_SERVER_HOME ||
|
|
104521
|
+
const home = env.RYUGI_SERVER_HOME || import_node_path33.default.join(homedir, ".ryugi", "server");
|
|
104283
104522
|
return {
|
|
104284
104523
|
home,
|
|
104285
|
-
pid:
|
|
104286
|
-
serverId:
|
|
104287
|
-
info:
|
|
104288
|
-
log:
|
|
104289
|
-
version:
|
|
104290
|
-
lock:
|
|
104291
|
-
key:
|
|
104292
|
-
projects:
|
|
104293
|
-
settings:
|
|
104294
|
-
stopped:
|
|
104524
|
+
pid: import_node_path33.default.join(home, "server.pid"),
|
|
104525
|
+
serverId: import_node_path33.default.join(home, "server-instance-id"),
|
|
104526
|
+
info: import_node_path33.default.join(home, "server-info"),
|
|
104527
|
+
log: import_node_path33.default.join(home, "server.log"),
|
|
104528
|
+
version: import_node_path33.default.join(home, "server-version"),
|
|
104529
|
+
lock: import_node_path33.default.join(home, "start.lock"),
|
|
104530
|
+
key: import_node_path33.default.join(home, "key"),
|
|
104531
|
+
projects: import_node_path33.default.join(home, "projects.json"),
|
|
104532
|
+
settings: import_node_path33.default.join(home, "settings.json"),
|
|
104533
|
+
stopped: import_node_path33.default.join(home, "server-stopped")
|
|
104295
104534
|
};
|
|
104296
104535
|
}
|
|
104297
104536
|
function ensureHome(home) {
|
|
104298
|
-
|
|
104299
|
-
|
|
104537
|
+
import_node_fs37.default.mkdirSync(home, { recursive: true, mode: 448 });
|
|
104538
|
+
import_node_fs37.default.chmodSync(home, 448);
|
|
104300
104539
|
}
|
|
104301
104540
|
var realDir = (dir) => {
|
|
104302
104541
|
try {
|
|
104303
|
-
return
|
|
104542
|
+
return import_node_fs37.default.realpathSync(import_node_path33.default.resolve(dir));
|
|
104304
104543
|
} catch {
|
|
104305
|
-
return
|
|
104544
|
+
return import_node_path33.default.resolve(dir);
|
|
104306
104545
|
}
|
|
104307
104546
|
};
|
|
104308
104547
|
var validEntry = (value) => {
|
|
104309
104548
|
const entry = value;
|
|
104310
|
-
return !!entry && typeof entry.dir === "string" &&
|
|
104549
|
+
return !!entry && typeof entry.dir === "string" && import_node_path33.default.isAbsolute(entry.dir) && Number.isFinite(entry.registeredAt) && Number.isFinite(entry.lastUsedAt);
|
|
104311
104550
|
};
|
|
104312
104551
|
function readProjects(file) {
|
|
104313
104552
|
try {
|
|
104314
|
-
const value = JSON.parse(
|
|
104553
|
+
const value = JSON.parse(import_node_fs37.default.readFileSync(file, "utf8"));
|
|
104315
104554
|
return Array.isArray(value.projects) ? value.projects.filter(validEntry) : [];
|
|
104316
104555
|
} catch {
|
|
104317
104556
|
return [];
|
|
104318
104557
|
}
|
|
104319
104558
|
}
|
|
104320
104559
|
function writeProjects(file, projects) {
|
|
104321
|
-
ensureHome(
|
|
104560
|
+
ensureHome(import_node_path33.default.dirname(file));
|
|
104322
104561
|
const tmp = `${file}.${process.pid}.tmp`;
|
|
104323
|
-
|
|
104562
|
+
import_node_fs37.default.writeFileSync(tmp, `${JSON.stringify({ projects }, null, 2)}
|
|
104324
104563
|
`, { mode: 384 });
|
|
104325
|
-
|
|
104564
|
+
import_node_fs37.default.renameSync(tmp, file);
|
|
104326
104565
|
}
|
|
104327
104566
|
function registerProject(file, projectDir, now = Date.now()) {
|
|
104328
104567
|
const dir = realDir(projectDir);
|
|
@@ -104339,10 +104578,10 @@ function removeProject(file, projectDir) {
|
|
|
104339
104578
|
const kept = projects.filter((entry) => entry.dir !== dir);
|
|
104340
104579
|
if (kept.length !== projects.length) writeProjects(file, kept);
|
|
104341
104580
|
}
|
|
104342
|
-
var artifactsRootOf = (projectDir) =>
|
|
104581
|
+
var artifactsRootOf = (projectDir) => import_node_path33.default.join(projectDir, ".ryugi", "artifacts");
|
|
104343
104582
|
function pruneProjects(file) {
|
|
104344
104583
|
const projects = readProjects(file);
|
|
104345
|
-
const kept = projects.filter((entry) =>
|
|
104584
|
+
const kept = projects.filter((entry) => import_node_fs37.default.existsSync(artifactsRootOf(entry.dir)));
|
|
104346
104585
|
if (kept.length !== projects.length) writeProjects(file, kept);
|
|
104347
104586
|
return kept;
|
|
104348
104587
|
}
|
|
@@ -104351,7 +104590,7 @@ var isDormant = (entry, now = Date.now()) => now - entry.lastUsedAt > DORMANT_AF
|
|
|
104351
104590
|
// src/server/artifact-index.ts
|
|
104352
104591
|
var readAddress = (dir) => {
|
|
104353
104592
|
try {
|
|
104354
|
-
const value =
|
|
104593
|
+
const value = import_node_fs38.default.readFileSync(import_node_path34.default.join(dir, ".artifact-id"), "utf8").trim();
|
|
104355
104594
|
return isArtifactAddress(value) ? value : null;
|
|
104356
104595
|
} catch {
|
|
104357
104596
|
return null;
|
|
@@ -104359,7 +104598,7 @@ var readAddress = (dir) => {
|
|
|
104359
104598
|
};
|
|
104360
104599
|
var mtimeOf2 = (dir) => {
|
|
104361
104600
|
try {
|
|
104362
|
-
return
|
|
104601
|
+
return import_node_fs38.default.statSync(dir).mtimeMs;
|
|
104363
104602
|
} catch {
|
|
104364
104603
|
return 0;
|
|
104365
104604
|
}
|
|
@@ -104458,7 +104697,7 @@ var ARTIFACT_KEY = /^(?:artboard|document|html)\/[a-z0-9][a-z0-9-]*$/;
|
|
|
104458
104697
|
var SEP = "\n";
|
|
104459
104698
|
var realDir2 = (dir) => {
|
|
104460
104699
|
try {
|
|
104461
|
-
return
|
|
104700
|
+
return import_node_fs39.default.realpathSync(import_node_path35.default.resolve(dir));
|
|
104462
104701
|
} catch {
|
|
104463
104702
|
return null;
|
|
104464
104703
|
}
|
|
@@ -104516,7 +104755,7 @@ async function startHub(options2) {
|
|
|
104516
104755
|
runtimeDir: options2.runtimeDir,
|
|
104517
104756
|
host: options2.host,
|
|
104518
104757
|
urlHost: options2.urlHost,
|
|
104519
|
-
configFile:
|
|
104758
|
+
configFile: import_node_path35.default.join(project, ".ryugi", "config.json"),
|
|
104520
104759
|
cloud: options2.cloud,
|
|
104521
104760
|
fetch: options2.fetch,
|
|
104522
104761
|
debounceMs: options2.debounceMs,
|
|
@@ -104531,7 +104770,7 @@ async function startHub(options2) {
|
|
|
104531
104770
|
}
|
|
104532
104771
|
return pending;
|
|
104533
104772
|
};
|
|
104534
|
-
const configFileOf = (project) =>
|
|
104773
|
+
const configFileOf = (project) => import_node_path35.default.join(project, ".ryugi", "config.json");
|
|
104535
104774
|
const servedBy = (project) => {
|
|
104536
104775
|
const mounted = ready.get(project);
|
|
104537
104776
|
if (mounted) return mounted.served();
|
|
@@ -104578,10 +104817,10 @@ async function startHub(options2) {
|
|
|
104578
104817
|
}) : null;
|
|
104579
104818
|
const origin = `http://${urlHostForHttp(options2.urlHost)}:${port}`;
|
|
104580
104819
|
const url = loopback ? `${origin}/` : `${origin}/?key=${options2.token}`;
|
|
104581
|
-
const infoFileOf = (project) =>
|
|
104820
|
+
const infoFileOf = (project) => import_node_path35.default.join(artifactsRootOf(project), ".state", "server-info");
|
|
104582
104821
|
const writeCompatInfo = (project) => {
|
|
104583
104822
|
try {
|
|
104584
|
-
|
|
104823
|
+
import_node_fs39.default.mkdirSync(import_node_path35.default.dirname(infoFileOf(project)), { recursive: true, mode: 448 });
|
|
104585
104824
|
writeJsonAtomic(infoFileOf(project), {
|
|
104586
104825
|
type: "server-started",
|
|
104587
104826
|
url,
|
|
@@ -104600,7 +104839,7 @@ async function startHub(options2) {
|
|
|
104600
104839
|
counts.set(entry.project, (counts.get(entry.project) ?? 0) + 1);
|
|
104601
104840
|
return ordered2().map((entry) => ({
|
|
104602
104841
|
dir: entry.dir,
|
|
104603
|
-
name:
|
|
104842
|
+
name: import_node_path35.default.basename(entry.dir),
|
|
104604
104843
|
lastUsedAt: entry.lastUsedAt,
|
|
104605
104844
|
dormant: isDormant(entry),
|
|
104606
104845
|
artifacts: counts.get(entry.dir) ?? 0
|
|
@@ -104613,7 +104852,7 @@ async function startHub(options2) {
|
|
|
104613
104852
|
const root = artifactsRootOf(entry.dir);
|
|
104614
104853
|
const listed = listArtifacts(root);
|
|
104615
104854
|
for (const warning of listed.warnings)
|
|
104616
|
-
warnings.push(`${
|
|
104855
|
+
warnings.push(`${import_node_path35.default.basename(entry.dir)}: ${warning}`);
|
|
104617
104856
|
for (const artifact of listed.artifacts) {
|
|
104618
104857
|
try {
|
|
104619
104858
|
artifacts.push({
|
|
@@ -104664,7 +104903,7 @@ async function startHub(options2) {
|
|
|
104664
104903
|
};
|
|
104665
104904
|
const publishedIn = (project, cloudId) => {
|
|
104666
104905
|
try {
|
|
104667
|
-
const { artifacts } = readConfig(
|
|
104906
|
+
const { artifacts } = readConfig(import_node_path35.default.join(project, ".ryugi", "config.json")).config;
|
|
104668
104907
|
return Object.values(artifacts).some((entry) => entry.cloud?.id === cloudId);
|
|
104669
104908
|
} catch {
|
|
104670
104909
|
return false;
|
|
@@ -104727,7 +104966,7 @@ async function startHub(options2) {
|
|
|
104727
104966
|
const register = async (dir, open) => {
|
|
104728
104967
|
const real = realDir2(dir);
|
|
104729
104968
|
if (!real) throw new Error(`Project directory not found: ${dir}`);
|
|
104730
|
-
|
|
104969
|
+
import_node_fs39.default.mkdirSync(artifactsRootOf(real), { recursive: true });
|
|
104731
104970
|
const entry = registerProject(projectsFile, real);
|
|
104732
104971
|
index.rescan();
|
|
104733
104972
|
writeCompatInfo(real);
|
|
@@ -104737,10 +104976,10 @@ async function startHub(options2) {
|
|
|
104737
104976
|
return entry;
|
|
104738
104977
|
};
|
|
104739
104978
|
const remove2 = async (dir) => {
|
|
104740
|
-
const real = realDir2(dir) ??
|
|
104979
|
+
const real = realDir2(dir) ?? import_node_path35.default.resolve(dir);
|
|
104741
104980
|
removeProject(projectsFile, real);
|
|
104742
104981
|
index.rescan();
|
|
104743
|
-
|
|
104982
|
+
import_node_fs39.default.rmSync(infoFileOf(real), { force: true });
|
|
104744
104983
|
const pending = mounts.get(real);
|
|
104745
104984
|
mounts.delete(real);
|
|
104746
104985
|
ready.delete(real);
|
|
@@ -104748,17 +104987,17 @@ async function startHub(options2) {
|
|
|
104748
104987
|
};
|
|
104749
104988
|
const logTail = (project) => {
|
|
104750
104989
|
try {
|
|
104751
|
-
const fd2 =
|
|
104990
|
+
const fd2 = import_node_fs39.default.openSync(options2.paths.log, "r");
|
|
104752
104991
|
try {
|
|
104753
|
-
const size =
|
|
104992
|
+
const size = import_node_fs39.default.fstatSync(fd2).size;
|
|
104754
104993
|
const length = Math.min(size, LOG_TAIL_BYTES);
|
|
104755
104994
|
const buffer = Buffer.alloc(length);
|
|
104756
|
-
|
|
104995
|
+
import_node_fs39.default.readSync(fd2, buffer, 0, length, size - length);
|
|
104757
104996
|
const lines = buffer.toString("utf8").split("\n").filter(Boolean);
|
|
104758
104997
|
if (length < size) lines.shift();
|
|
104759
104998
|
return lines.filter((line) => !project || line.includes(project)).slice(-LOG_TAIL_LINES);
|
|
104760
104999
|
} finally {
|
|
104761
|
-
|
|
105000
|
+
import_node_fs39.default.closeSync(fd2);
|
|
104762
105001
|
}
|
|
104763
105002
|
} catch {
|
|
104764
105003
|
return [];
|
|
@@ -104895,7 +105134,7 @@ async function startHub(options2) {
|
|
|
104895
105134
|
mounts.clear();
|
|
104896
105135
|
ready.clear();
|
|
104897
105136
|
await Promise.all(all.map(async (pending) => (await pending.catch(() => null))?.close()));
|
|
104898
|
-
for (const entry of ordered2())
|
|
105137
|
+
for (const entry of ordered2()) import_node_fs39.default.rmSync(infoFileOf(entry.dir), { force: true });
|
|
104899
105138
|
for (const server of [front, board]) server.closeAllConnections();
|
|
104900
105139
|
await Promise.all(stopped);
|
|
104901
105140
|
}
|
|
@@ -104904,8 +105143,8 @@ async function startHub(options2) {
|
|
|
104904
105143
|
|
|
104905
105144
|
// src/server/relaunch.ts
|
|
104906
105145
|
var import_node_child_process4 = require("node:child_process");
|
|
104907
|
-
var
|
|
104908
|
-
var
|
|
105146
|
+
var import_node_fs40 = __toESM(require("node:fs"), 1);
|
|
105147
|
+
var import_node_path36 = __toESM(require("node:path"), 1);
|
|
104909
105148
|
var LAUNCHER_COMMAND = /^node "(.+)"$/;
|
|
104910
105149
|
var WAIT_THEN_RUN = `
|
|
104911
105150
|
const [pid, file, ...args] = process.argv.slice(1);
|
|
@@ -104919,20 +105158,20 @@ tick();
|
|
|
104919
105158
|
function relaunchCommand(env, serverDir) {
|
|
104920
105159
|
const launcher = LAUNCHER_COMMAND.exec(env.RYUGI_ARTIFACTS_LAUNCHER ?? "")?.[1];
|
|
104921
105160
|
if (launcher) return [process.execPath, launcher];
|
|
104922
|
-
const cli =
|
|
104923
|
-
return
|
|
105161
|
+
const cli = import_node_path36.default.join(serverDir, "cli.cjs");
|
|
105162
|
+
return import_node_fs40.default.existsSync(cli) ? [process.execPath, cli] : null;
|
|
104924
105163
|
}
|
|
104925
105164
|
function pinLauncherRelease(env, homedir, version2, now = Date.now()) {
|
|
104926
|
-
const releases =
|
|
104927
|
-
env.XDG_CACHE_HOME ||
|
|
105165
|
+
const releases = import_node_path36.default.join(
|
|
105166
|
+
env.XDG_CACHE_HOME || import_node_path36.default.join(homedir, ".cache"),
|
|
104928
105167
|
"ryugi",
|
|
104929
105168
|
"artifacts"
|
|
104930
105169
|
);
|
|
104931
|
-
|
|
104932
|
-
const file =
|
|
105170
|
+
import_node_fs40.default.mkdirSync(releases, { recursive: true });
|
|
105171
|
+
const file = import_node_path36.default.join(releases, "latest.json");
|
|
104933
105172
|
const tmp = `${file}.${process.pid}`;
|
|
104934
|
-
|
|
104935
|
-
|
|
105173
|
+
import_node_fs40.default.writeFileSync(tmp, JSON.stringify({ version: version2, checkedAt: now }));
|
|
105174
|
+
import_node_fs40.default.renameSync(tmp, file);
|
|
104936
105175
|
}
|
|
104937
105176
|
function spawnAfterExit(pid, argv, env = process.env) {
|
|
104938
105177
|
const [file, ...args] = argv;
|
|
@@ -104946,7 +105185,7 @@ function spawnAfterExit(pid, argv, env = process.env) {
|
|
|
104946
105185
|
}
|
|
104947
105186
|
|
|
104948
105187
|
// src/server/update-check.ts
|
|
104949
|
-
var
|
|
105188
|
+
var import_node_fs41 = __toESM(require("node:fs"), 1);
|
|
104950
105189
|
var REGISTRY_URL = "https://registry.npmjs.org/ryugi-artifacts/latest";
|
|
104951
105190
|
var DAY_MS = 24 * 60 * 60 * 1e3;
|
|
104952
105191
|
var TIMEOUT_MS2 = 5e3;
|
|
@@ -104961,7 +105200,7 @@ function newerVersion(candidate, current) {
|
|
|
104961
105200
|
}
|
|
104962
105201
|
function readCache(file) {
|
|
104963
105202
|
try {
|
|
104964
|
-
const value = JSON.parse(
|
|
105203
|
+
const value = JSON.parse(import_node_fs41.default.readFileSync(file, "utf8"));
|
|
104965
105204
|
return typeof value.version === "string" && Number.isFinite(value.checkedAt) ? value : null;
|
|
104966
105205
|
} catch {
|
|
104967
105206
|
return null;
|
|
@@ -104985,7 +105224,7 @@ function createUpdateCheck(options2) {
|
|
|
104985
105224
|
const { version: version2 } = await res.json();
|
|
104986
105225
|
if (typeof version2 !== "string") return;
|
|
104987
105226
|
cached = { version: version2, checkedAt: now() };
|
|
104988
|
-
|
|
105227
|
+
import_node_fs41.default.writeFileSync(options2.cacheFile, `${JSON.stringify(cached)}
|
|
104989
105228
|
`, { mode: 384 });
|
|
104990
105229
|
} catch {
|
|
104991
105230
|
}
|
|
@@ -104997,12 +105236,12 @@ function createUpdateCheck(options2) {
|
|
|
104997
105236
|
var UPDATE_POLL_MS = 60 * 60 * 1e3;
|
|
104998
105237
|
function machineKey(file) {
|
|
104999
105238
|
try {
|
|
105000
|
-
const key3 =
|
|
105239
|
+
const key3 = import_node_fs42.default.readFileSync(file, "utf8").trim();
|
|
105001
105240
|
if (/^[a-f0-9]{48}$/.test(key3)) return key3;
|
|
105002
105241
|
} catch {
|
|
105003
105242
|
}
|
|
105004
105243
|
const key2 = import_node_crypto13.default.randomBytes(24).toString("hex");
|
|
105005
|
-
|
|
105244
|
+
import_node_fs42.default.writeFileSync(file, `${key2}
|
|
105006
105245
|
`, { mode: 384 });
|
|
105007
105246
|
return key2;
|
|
105008
105247
|
}
|
|
@@ -105011,14 +105250,14 @@ async function main() {
|
|
|
105011
105250
|
const paths = machinePaths();
|
|
105012
105251
|
ensureHome(paths.home);
|
|
105013
105252
|
const updates = createUpdateCheck({
|
|
105014
|
-
cacheFile:
|
|
105253
|
+
cacheFile: import_node_path37.default.join(paths.home, "latest.json"),
|
|
105015
105254
|
current: version
|
|
105016
105255
|
});
|
|
105017
105256
|
const hub = await startHub({
|
|
105018
105257
|
host: config.host,
|
|
105019
105258
|
urlHost: config.urlHost,
|
|
105020
|
-
viewerDir:
|
|
105021
|
-
runtimeDir:
|
|
105259
|
+
viewerDir: import_node_path37.default.join(__dirname, "viewer"),
|
|
105260
|
+
runtimeDir: import_node_path37.default.join(__dirname, "runtime"),
|
|
105022
105261
|
ports: config.ports,
|
|
105023
105262
|
boardPorts: config.boardPorts,
|
|
105024
105263
|
paths,
|
|
@@ -105055,14 +105294,14 @@ async function main() {
|
|
|
105055
105294
|
if (stopping) return;
|
|
105056
105295
|
stopping = true;
|
|
105057
105296
|
console.info(JSON.stringify({ type: "server-stopped", reason, at: (/* @__PURE__ */ new Date()).toISOString() }));
|
|
105058
|
-
|
|
105297
|
+
import_node_fs42.default.rmSync(paths.info, { force: true });
|
|
105059
105298
|
if (intended) writeJsonAtomic(paths.stopped, { reason, timestamp: Date.now() });
|
|
105060
105299
|
await hub.close();
|
|
105061
105300
|
process.exit(0);
|
|
105062
105301
|
}
|
|
105063
105302
|
function readRunningVersion() {
|
|
105064
105303
|
try {
|
|
105065
|
-
return
|
|
105304
|
+
return import_node_fs42.default.readFileSync(paths.version, "utf8").trim() || version;
|
|
105066
105305
|
} catch {
|
|
105067
105306
|
return version;
|
|
105068
105307
|
}
|
|
@@ -105105,7 +105344,7 @@ async function main() {
|
|
|
105105
105344
|
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
105106
105345
|
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
105107
105346
|
process.on("SIGHUP", () => void shutdown("SIGHUP"));
|
|
105108
|
-
|
|
105347
|
+
import_node_fs42.default.rmSync(paths.stopped, { force: true });
|
|
105109
105348
|
const started = {
|
|
105110
105349
|
type: "server-started",
|
|
105111
105350
|
url: hub.url,
|