ryugi-artifacts 1.8.0 → 1.9.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/bin/ryugi-artifacts.cjs +1 -52
- package/dist/cli.cjs +594 -0
- package/dist/server.cjs +196 -38
- package/dist/viewer/{CloudDocument-Ba6KrnqA.js → CloudDocument-Dguokp_6.js} +1 -1
- package/dist/viewer/{DocumentEditor-BS16Wb_Z.js → DocumentEditor-rRoUyzj5.js} +81 -81
- package/dist/viewer/DocumentPage-C0_SVGNv.js +1 -0
- package/dist/viewer/{abnfDiagram-VCTEODGH-DuJfhZTl.js → abnfDiagram-VCTEODGH-Cd62lXYi.js} +1 -1
- package/dist/viewer/{ar-SA-G6X2FPQ2-CVlRFGvR.js → ar-SA-G6X2FPQ2-k4wcXC0w.js} +1 -1
- package/dist/viewer/{architectureDiagram-5GKGNRK7-Ca-sK1k9.js → architectureDiagram-5GKGNRK7-BqGRfF7K.js} +1 -1
- package/dist/viewer/{az-AZ-76LH7QW2-CzO5U4tE.js → az-AZ-76LH7QW2-DjkRWALq.js} +1 -1
- package/dist/viewer/{bg-BG-XCXSNQG7-DLheLFGn.js → bg-BG-XCXSNQG7-CUOyMSFg.js} +1 -1
- package/dist/viewer/{blockDiagram-I7D4REHJ-CVWXNFVb.js → blockDiagram-I7D4REHJ-DLj9e678.js} +1 -1
- package/dist/viewer/{bn-BD-2XOGV67Q-DvnFf2ym.js → bn-BD-2XOGV67Q-CPw_5I7i.js} +1 -1
- package/dist/viewer/{c4Diagram-7LVT6UL2-CddHgiim.js → c4Diagram-7LVT6UL2-D9FPioA_.js} +1 -1
- package/dist/viewer/{ca-ES-6MX7JW3Y-1SQM_Wxy.js → ca-ES-6MX7JW3Y-Bl_ggxy-.js} +1 -1
- package/dist/viewer/{chunk-4HAMMTFA-B7k7y3et.js → chunk-4HAMMTFA-B8CHZ2iu.js} +1 -1
- package/dist/viewer/{chunk-75Z2AOVW-Dmt3SQH3.js → chunk-75Z2AOVW-BLvzzoaA.js} +1 -1
- package/dist/viewer/{chunk-EIO257PC-CNxgWaGL.js → chunk-EIO257PC-BkhwQy9u.js} +1 -1
- package/dist/viewer/{chunk-GMAD6QVW-Do0Tih79.js → chunk-GMAD6QVW-BIxPNzf_.js} +1 -1
- package/dist/viewer/{chunk-GVQU2GXP-C9mWLYpa.js → chunk-GVQU2GXP-BcbkZdgL.js} +1 -1
- package/dist/viewer/{chunk-IMKFNOWR-BqsuylOZ.js → chunk-IMKFNOWR-BlVm2eW6.js} +1 -1
- package/dist/viewer/{chunk-L3NEJ4N5-D_AVAMEp.js → chunk-L3NEJ4N5-DPP-Uqzz.js} +1 -1
- package/dist/viewer/{chunk-OSK3NFVY-BKczRUt9.js → chunk-OSK3NFVY-DvWBYW0M.js} +1 -1
- package/dist/viewer/{chunk-PWAF6VOD-CcIRMiiP.js → chunk-PWAF6VOD-Df9WdVJL.js} +1 -1
- package/dist/viewer/{chunk-SHT3W25Y-D8R29R_u.js → chunk-SHT3W25Y-BSCi7YG7.js} +1 -1
- package/dist/viewer/{chunk-SVP7TREG-DvPbOdMe.js → chunk-SVP7TREG-Bxv2fp8X.js} +1 -1
- package/dist/viewer/{chunk-TICWLB2K-v1pSr6BB.js → chunk-TICWLB2K-MSpOEdcV.js} +1 -1
- package/dist/viewer/classDiagram-ZZMXUADV-YWXPsH1o.js +1 -0
- package/dist/viewer/classDiagram-v2-VYDZK3BY-YWXPsH1o.js +1 -0
- package/dist/viewer/{cs-CZ-2BRQDIVT-CuIWOyM9.js → cs-CZ-2BRQDIVT-VpdA_B_0.js} +1 -1
- package/dist/viewer/{cynefinDiagram-5FMLGOSQ-CarHaJWA.js → cynefinDiagram-5FMLGOSQ-CCIqA18s.js} +1 -1
- package/dist/viewer/{da-DK-5WZEPLOC-BNpk9O4Z.js → da-DK-5WZEPLOC-Bikfnz1b.js} +1 -1
- package/dist/viewer/{dagre-GXQ25YYZ-jKxlutMc.js → dagre-GXQ25YYZ-DeVnyw6S.js} +1 -1
- package/dist/viewer/{de-DE-XR44H4JA-DeRYYEYN.js → de-DE-XR44H4JA-5nJunltn.js} +1 -1
- package/dist/viewer/{diagram-S7CK7UJ4-BzGz76pK.js → diagram-S7CK7UJ4-rcnT6Csv.js} +1 -1
- package/dist/viewer/{diagram-UQ7AKVKN-DDsoAc73.js → diagram-UQ7AKVKN-D6yGL_te.js} +1 -1
- package/dist/viewer/{diagram-VSXAHHWV-HxtxJg2X.js → diagram-VSXAHHWV-C8eVmzD7.js} +1 -1
- package/dist/viewer/{diagram-VX7I27RA-BIeolo3r.js → diagram-VX7I27RA-BVBGylbn.js} +1 -1
- package/dist/viewer/{diagram-Z3DM3KII-CU7mw2ow.js → diagram-Z3DM3KII-DnsHEfda.js} +1 -1
- package/dist/viewer/{dist-DqbHnPRI.js → dist-BGR5ezDy.js} +1 -1
- package/dist/viewer/{dist-DC1HltnF.js → dist-BPa5yz1M.js} +1 -1
- package/dist/viewer/{dist-BgSBKOA3.js → dist-BSqmGdSf.js} +1 -1
- package/dist/viewer/{dist-Bu_voPaa.js → dist-Bn3GpIIQ.js} +1 -1
- package/dist/viewer/{dist-BSeJYKLj.js → dist-C2UdEldV.js} +1 -1
- package/dist/viewer/{dist-DX3SNcdm.js → dist-C46f_skK.js} +1 -1
- package/dist/viewer/{dist-AH0bdIVa.js → dist-CNSswqVs.js} +1 -1
- package/dist/viewer/{dist-CgYgXYmt.js → dist-CPg9Exib.js} +1 -1
- package/dist/viewer/{dist-CddCPamz.js → dist-CWy1mEqq.js} +1 -1
- package/dist/viewer/{dist-CHLFapPp.js → dist-C_2nvGGH.js} +1 -1
- package/dist/viewer/{dist-CZsxPTNE.js → dist-CjSSDaiM.js} +1 -1
- package/dist/viewer/{dist-C-ieEyE1.js → dist-CyR9uUsj.js} +1 -1
- package/dist/viewer/{dist-CvB831yK.js → dist-DOLGlCIF.js} +1 -1
- package/dist/viewer/{dist-Cu6PLla0.js → dist-DOpcb4fi.js} +1 -1
- package/dist/viewer/{dist-CbHHxvP1.js → dist-DRJfWmsE.js} +1 -1
- package/dist/viewer/{dist-BeULvDu_.js → dist-DU3q2qgP.js} +1 -1
- package/dist/viewer/{dist-BlXyXxst.js → dist-DeqL7hkG.js} +1 -1
- package/dist/viewer/{dist-BppD0RS2.js → dist-DlPVPwB6.js} +1 -1
- package/dist/viewer/{dist-BbW5iWCe.js → dist-JNndX187.js} +1 -1
- package/dist/viewer/{dist-C21gJBBO.js → dist-bznEISxg.js} +1 -1
- package/dist/viewer/{dist-DA8TW41P.js → dist-gtpBaWjz.js} +1 -1
- package/dist/viewer/{dist-Cackv1h9.js → dist-oPn-5997.js} +1 -1
- package/dist/viewer/{dist-CitzQ6z1.js → dist-rkIdnkmY.js} +4 -4
- package/dist/viewer/{dist-D_Vtqh_s.js → dist-s3i70bod.js} +1 -1
- package/dist/viewer/{ebnfDiagram-PWID7BFC-BUmzlASS.js → ebnfDiagram-PWID7BFC-c_bXfo9C.js} +1 -1
- package/dist/viewer/{el-GR-BZB4AONW-CU9I6jx_.js → el-GR-BZB4AONW-DuM6nGWb.js} +1 -1
- package/dist/viewer/{en-B4ZKOASM-DGboqHSv.js → en-B4ZKOASM-Cr7s3JvY.js} +1 -1
- package/dist/viewer/{erDiagram-RLTQ6QDP-DRUmIoEG.js → erDiagram-RLTQ6QDP-B-DgtUd4.js} +1 -1
- package/dist/viewer/{es-ES-U4NZUMDT-j5HevUjd.js → es-ES-U4NZUMDT-DNvSsfqo.js} +1 -1
- package/dist/viewer/{eu-ES-A7QVB2H4-FpISoaoc.js → eu-ES-A7QVB2H4-NECtmtc_.js} +1 -1
- package/dist/viewer/{fa-IR-HGAKTJCU-COJsQztN.js → fa-IR-HGAKTJCU-fp_dFFfn.js} +1 -1
- package/dist/viewer/{fi-FI-Z5N7JZ37-BNHsLnGq.js → fi-FI-Z5N7JZ37-uZ8T0uZ2.js} +1 -1
- package/dist/viewer/flowDiagram-HODETNUW-QbMFIBc7.js +1 -0
- package/dist/viewer/{fr-FR-RHASNOE6-CM9a28Dh.js → fr-FR-RHASNOE6-DYF69T_L.js} +1 -1
- package/dist/viewer/{ganttDiagram-EL5Y4UJY-BVcwKFHE.js → ganttDiagram-EL5Y4UJY-C7nYK4VV.js} +1 -1
- package/dist/viewer/{gitGraphDiagram-WWUBYQGX-CZxp-Wm4.js → gitGraphDiagram-WWUBYQGX-BYs6a9XC.js} +1 -1
- package/dist/viewer/{gl-ES-HMX3MZ6V-C5aDlPBE.js → gl-ES-HMX3MZ6V-Cjlf8qDo.js} +1 -1
- package/dist/viewer/{he-IL-6SHJWFNN-eFs-GSWn.js → he-IL-6SHJWFNN-B44gxQ_q.js} +1 -1
- package/dist/viewer/{hi-IN-IWLTKZ5I-O1MAguUp.js → hi-IN-IWLTKZ5I-DHRyKjrX.js} +1 -1
- package/dist/viewer/{hu-HU-A5ZG7DT2-B3meydQb.js → hu-HU-A5ZG7DT2-B0x2fwF-.js} +1 -1
- package/dist/viewer/{id-ID-SAP4L64H-PHNH2hzW.js → id-ID-SAP4L64H-Xxsnu-eK.js} +1 -1
- package/dist/viewer/{image-GAAHSSAO-BJifdIGE.js → image-GAAHSSAO-DmsBDNOK.js} +1 -1
- package/dist/viewer/index.js +2 -2
- package/dist/viewer/index2.css +20 -0
- package/dist/viewer/{infoDiagram-27XIBGKW-D5Ag03ug.js → infoDiagram-27XIBGKW-OPdlHu-j.js} +1 -1
- package/dist/viewer/{ishikawaDiagram-5VMMS53U-B9SCwzFe.js → ishikawaDiagram-5VMMS53U-3fyfjNAh.js} +1 -1
- package/dist/viewer/{it-IT-JPQ66NNP-DHOLiY7r.js → it-IT-JPQ66NNP-B0X8yQyS.js} +1 -1
- package/dist/viewer/{ja-JP-DBVTYXUO-DTOuZQy0.js → ja-JP-DBVTYXUO-CnhqD0fK.js} +1 -1
- package/dist/viewer/{journeyDiagram-3NMN7TZE-CQvvWgCk.js → journeyDiagram-3NMN7TZE-BD_Ll3Bo.js} +1 -1
- package/dist/viewer/{kaa-6HZHGXH3-1d0tKthK.js → kaa-6HZHGXH3-BzhTyhLc.js} +1 -1
- package/dist/viewer/{kab-KAB-ZGHBKWFO-BaPyqYzR.js → kab-KAB-ZGHBKWFO-DGiUv22x.js} +1 -1
- package/dist/viewer/{kanban-definition-UXKFOSKX-Bg-Q4j28.js → kanban-definition-UXKFOSKX-BspaC3q1.js} +1 -1
- package/dist/viewer/{kk-KZ-P5N5QNE5-BqF9n_h-.js → kk-KZ-P5N5QNE5-DH8jyrO_.js} +1 -1
- package/dist/viewer/{km-KH-HSX4SM5Z-DPTb_KDC.js → km-KH-HSX4SM5Z-CTtH-yq7.js} +1 -1
- package/dist/viewer/{ko-KR-MTYHY66A-DxGidADD.js → ko-KR-MTYHY66A-kp3bbs3q.js} +1 -1
- package/dist/viewer/{ku-TR-6OUDTVRD-BECmOCof.js → ku-TR-6OUDTVRD-CniHyrQH.js} +1 -1
- package/dist/viewer/{lt-LT-XHIRWOB4-DKQm4SS0.js → lt-LT-XHIRWOB4-C5_ErQjQ.js} +1 -1
- package/dist/viewer/{lv-LV-5QDEKY6T-C4kUM3XE.js → lv-LV-5QDEKY6T-DH2pmwSL.js} +1 -1
- package/dist/viewer/{mindmap-definition-YA3MSWOX-DRQfDlAQ.js → mindmap-definition-YA3MSWOX-gbG6Nf0i.js} +1 -1
- package/dist/viewer/{mr-IN-CRQNXWMA-CutHorlk.js → mr-IN-CRQNXWMA-4I7m5ob-.js} +1 -1
- package/dist/viewer/{my-MM-5M5IBNSE-BqscH03z.js → my-MM-5M5IBNSE-0nHUTGbL.js} +1 -1
- package/dist/viewer/{nb-NO-T6EIAALU-Dqflwtt9.js → nb-NO-T6EIAALU-DfqC7CQ7.js} +1 -1
- package/dist/viewer/{nl-NL-IS3SIHDZ-BFq09PQX.js → nl-NL-IS3SIHDZ-Bjzz0r--.js} +1 -1
- package/dist/viewer/{nn-NO-6E72VCQL-BNIuUKOs.js → nn-NO-6E72VCQL-m2jjAc9n.js} +1 -1
- package/dist/viewer/{oc-FR-POXYY2M6-Bz0jVYcW.js → oc-FR-POXYY2M6-CAVYt9Ft.js} +1 -1
- package/dist/viewer/{pa-IN-N4M65BXN-Diu6ZQtk.js → pa-IN-N4M65BXN-CrcUCfFF.js} +1 -1
- package/dist/viewer/{pegDiagram-XKGWAZYB-COMSnXOr.js → pegDiagram-XKGWAZYB-MIcAh6C6.js} +1 -1
- package/dist/viewer/percentages-BXMCSKIN-I1K7WJgu.js +1 -0
- package/dist/viewer/{pieDiagram-E7YTZNPT-gHe-bm7N.js → pieDiagram-E7YTZNPT-mI3-_ikZ.js} +1 -1
- package/dist/viewer/{pl-PL-T2D74RX3-CCwgP0Tt.js → pl-PL-T2D74RX3-CGPvBMhq.js} +1 -1
- package/dist/viewer/{prod-iZwju1YX.js → prod-DdQVR1xL.js} +8 -8
- package/dist/viewer/{pt-BR-5N22H2LF-CNn18ypM.js → pt-BR-5N22H2LF-jUQJyEPF.js} +1 -1
- package/dist/viewer/{pt-PT-UZXXM6DQ-BMoRZ8jH.js → pt-PT-UZXXM6DQ-4quEbcoT.js} +1 -1
- package/dist/viewer/{quadrantDiagram-AXDQQJYC-YkFWTX48.js → quadrantDiagram-AXDQQJYC-qOr_Ag5n.js} +1 -1
- package/dist/viewer/{railroadDiagram-O6MQD6OU-BP58ggYs.js → railroadDiagram-O6MQD6OU-C8uzuX6Z.js} +1 -1
- package/dist/viewer/{requirementDiagram-BXWQKSXE-B4RcZ6Uz.js → requirementDiagram-BXWQKSXE-Dz0j-_Ul.js} +1 -1
- package/dist/viewer/{ro-RO-JPDTUUEW-SoalcNvO.js → ro-RO-JPDTUUEW-Fux6vqWg.js} +1 -1
- package/dist/viewer/{ru-RU-B4JR7IUQ-DkWHaRhg.js → ru-RU-B4JR7IUQ-Dfr69XLN.js} +1 -1
- package/dist/viewer/{sequenceDiagram-WJ2MYXX4-C5uL0tpK.js → sequenceDiagram-WJ2MYXX4-DJU5fD19.js} +1 -1
- package/dist/viewer/{si-LK-N5RQ5JYF-eD68JhLY.js → si-LK-N5RQ5JYF-Cb-bjtRn.js} +1 -1
- package/dist/viewer/{sk-SK-C5VTKIMK-EXqkY3Ta.js → sk-SK-C5VTKIMK-CohdnzY8.js} +1 -1
- package/dist/viewer/{sl-SI-NN7IZMDC-D2V_J_sw.js → sl-SI-NN7IZMDC-DHVdRHE2.js} +1 -1
- package/dist/viewer/{stateDiagram-D77RDMKH-DkyLdU7q.js → stateDiagram-D77RDMKH-Rooio_TB.js} +1 -1
- package/dist/viewer/stateDiagram-v2-MP3YSRHH-DU1T3Lmf.js +1 -0
- package/dist/viewer/subset-shared.chunk-CrkhCoQF.js +1 -0
- package/dist/viewer/{subset-worker.chunk-B92dIZyQ.js → subset-worker.chunk-Zq5HEGfq.js} +1 -1
- package/dist/viewer/{sv-SE-XGPEYMSR-Bzbzaslo.js → sv-SE-XGPEYMSR-BU075tJ9.js} +1 -1
- package/dist/viewer/{swimlanes-42K2YHIH-BWEGkPBm.js → swimlanes-42K2YHIH-BBJBvoSV.js} +1 -1
- package/dist/viewer/swimlanesDiagram-VR7AAH4N-NfEcSN_S.js +8 -0
- package/dist/viewer/{ta-IN-2NMHFXQM-BkRw8Ab-.js → ta-IN-2NMHFXQM-D5U6fuX5.js} +1 -1
- package/dist/viewer/{th-TH-HPSO5L25-DpxjfRSg.js → th-TH-HPSO5L25-5svbXPdz.js} +1 -1
- package/dist/viewer/{timeline-definition-24CTP7MA-BEYELt88.js → timeline-definition-24CTP7MA-B0TrCHZJ.js} +1 -1
- package/dist/viewer/{tr-TR-DEFEU3FU-CDIHZRzE.js → tr-TR-DEFEU3FU-CtJIUVOL.js} +1 -1
- package/dist/viewer/{uk-UA-QMV73CPH-BX8bS5mk.js → uk-UA-QMV73CPH-BUwW5t5R.js} +1 -1
- package/dist/viewer/{vennDiagram-4TSXK5OY-CWnDIkB0.js → vennDiagram-4TSXK5OY-I1KbtT6m.js} +1 -1
- package/dist/viewer/{vi-VN-M7AON7JQ-uPTH0PFh.js → vi-VN-M7AON7JQ-CEi077aa.js} +1 -1
- package/dist/viewer/{wardleyDiagram-VM6X3IG4-DazKGA6Y.js → wardleyDiagram-VM6X3IG4-BBsUCECp.js} +1 -1
- package/dist/viewer/{xychartDiagram-S5SC5T6Z-sQuCm3yV.js → xychartDiagram-S5SC5T6Z-CVMwOWKp.js} +1 -1
- package/dist/viewer/{zh-CN-LNUGB5OW-CSw936pf.js → zh-CN-LNUGB5OW-BSFQBwv1.js} +1 -1
- package/dist/viewer/{zh-HK-E62DVLB3-D5pp2ILq.js → zh-HK-E62DVLB3-C_UX1aQ7.js} +1 -1
- package/dist/viewer/{zh-TW-RAJ6MFWO-DUVdEREg.js → zh-TW-RAJ6MFWO-BvBIQhnc.js} +1 -1
- package/package.json +7 -5
- package/dist/start-server.sh +0 -359
- package/dist/viewer/DocumentPage-DQmrD0th.js +0 -1
- package/dist/viewer/classDiagram-ZZMXUADV-BJqflR68.js +0 -1
- package/dist/viewer/classDiagram-v2-VYDZK3BY-BJqflR68.js +0 -1
- package/dist/viewer/flowDiagram-HODETNUW-BIce5Xbz.js +0 -1
- package/dist/viewer/percentages-BXMCSKIN-C4UC-sd0.js +0 -1
- package/dist/viewer/stateDiagram-v2-MP3YSRHH-BMCqlN4T.js +0 -1
- package/dist/viewer/subset-shared.chunk-pCVh-jxe.js +0 -1
- package/dist/viewer/swimlanesDiagram-VR7AAH4N-a8X5vJTG.js +0 -8
package/dist/server.cjs
CHANGED
|
@@ -1562,13 +1562,13 @@ var require_canvas = __commonJS({
|
|
|
1562
1562
|
});
|
|
1563
1563
|
|
|
1564
1564
|
// src/server/main.ts
|
|
1565
|
-
var
|
|
1566
|
-
var
|
|
1565
|
+
var import_node_child_process2 = require("node:child_process");
|
|
1566
|
+
var import_node_fs19 = __toESM(require("node:fs"), 1);
|
|
1567
1567
|
var import_node_os = __toESM(require("node:os"), 1);
|
|
1568
1568
|
var import_node_path17 = __toESM(require("node:path"), 1);
|
|
1569
1569
|
|
|
1570
1570
|
// src/server/app.ts
|
|
1571
|
-
var
|
|
1571
|
+
var import_node_fs17 = __toESM(require("node:fs"), 1);
|
|
1572
1572
|
var import_node_http = __toESM(require("node:http"), 1);
|
|
1573
1573
|
var import_node_path16 = __toESM(require("node:path"), 1);
|
|
1574
1574
|
|
|
@@ -1755,6 +1755,16 @@ function parseComments(text2) {
|
|
|
1755
1755
|
});
|
|
1756
1756
|
return raw;
|
|
1757
1757
|
}
|
|
1758
|
+
var isSavedMessage = (m11) => !!m11.id && (m11.author === "human" || m11.author === "agent") && typeof m11.text === "string" && typeof m11.at === "string";
|
|
1759
|
+
function savedComments(incoming) {
|
|
1760
|
+
const threads = [];
|
|
1761
|
+
for (const t7 of incoming.threads) {
|
|
1762
|
+
if (!t7.id || !t7.anchor?.blockId || !t7.statusAt || t7.status !== "open" && t7.status !== "resolved") continue;
|
|
1763
|
+
const messages = (t7.messages ?? []).filter(isSavedMessage);
|
|
1764
|
+
threads.push({ id: t7.id, anchor: { blockId: t7.anchor.blockId, quote: t7.anchor.quote ?? "" }, status: t7.status, statusAt: t7.statusAt, messages });
|
|
1765
|
+
}
|
|
1766
|
+
return { version: 1, threads };
|
|
1767
|
+
}
|
|
1758
1768
|
var stampOf = (m11) => m11.editedAt ?? m11.at;
|
|
1759
1769
|
function mergeMessage(base, incoming, origin, now, warnings) {
|
|
1760
1770
|
if (base.deleted) return base;
|
|
@@ -1770,7 +1780,8 @@ function mergeMessage(base, incoming, origin, now, warnings) {
|
|
|
1770
1780
|
if (deleting) return { ...base, text: "", deleted: true, editedAt: now };
|
|
1771
1781
|
return { ...base, text: incoming.text, editedAt: incomingStamp === stampOf(base) ? now : incomingStamp };
|
|
1772
1782
|
}
|
|
1773
|
-
|
|
1783
|
+
var personOf = (who) => ({ ...who?.name ? { name: who.name } : {}, ...who?.avatar ? { avatar: who.avatar } : {} });
|
|
1784
|
+
function mergeThread(base, incoming, origin, now, newId, warnings, name) {
|
|
1774
1785
|
const messages = [...base.messages];
|
|
1775
1786
|
for (const message of incoming.messages ?? []) {
|
|
1776
1787
|
const index = message.id ? messages.findIndex((m11) => m11.id === message.id) : -1;
|
|
@@ -1785,7 +1796,7 @@ function mergeThread(base, incoming, origin, now, newId, warnings) {
|
|
|
1785
1796
|
continue;
|
|
1786
1797
|
}
|
|
1787
1798
|
if (typeof message.text !== "string" || message.text.length === 0) continue;
|
|
1788
|
-
messages.push({ id: message.id ?? newId(), author, text: message.text, at: message.at ?? now });
|
|
1799
|
+
messages.push({ id: message.id ?? newId(), author, ...personOf({ name }), text: message.text, at: message.at ?? now });
|
|
1789
1800
|
}
|
|
1790
1801
|
messages.sort((a5, b6) => a5.at < b6.at ? -1 : a5.at > b6.at ? 1 : 0);
|
|
1791
1802
|
let { status, statusAt } = base;
|
|
@@ -1799,13 +1810,13 @@ function mergeThread(base, incoming, origin, now, newId, warnings) {
|
|
|
1799
1810
|
return { ...base, status, statusAt, messages };
|
|
1800
1811
|
}
|
|
1801
1812
|
var sameUnsavedThread = (existing, incoming) => existing.anchor.blockId === incoming.anchor?.blockId && existing.anchor.quote === (incoming.anchor?.quote ?? "") && existing.messages[0]?.text === incoming.messages?.[0]?.text;
|
|
1802
|
-
function mergeComments(base, incoming, origin, now, newId) {
|
|
1813
|
+
function mergeComments(base, incoming, origin, now, newId, name) {
|
|
1803
1814
|
const warnings = [];
|
|
1804
1815
|
const threads = [...base.threads];
|
|
1805
1816
|
for (const thread of incoming.threads) {
|
|
1806
1817
|
const index = thread.id ? threads.findIndex((t7) => t7.id === thread.id) : threads.findIndex((t7) => sameUnsavedThread(t7, thread));
|
|
1807
1818
|
if (index >= 0) {
|
|
1808
|
-
threads[index] = mergeThread(threads[index], thread, origin, now, newId, warnings);
|
|
1819
|
+
threads[index] = mergeThread(threads[index], thread, origin, now, newId, warnings, name);
|
|
1809
1820
|
continue;
|
|
1810
1821
|
}
|
|
1811
1822
|
if (!thread.anchor?.blockId) {
|
|
@@ -1819,7 +1830,7 @@ function mergeComments(base, incoming, origin, now, newId) {
|
|
|
1819
1830
|
statusAt: now,
|
|
1820
1831
|
messages: []
|
|
1821
1832
|
};
|
|
1822
|
-
threads.push(mergeThread(fresh, { ...thread, status: thread.status ?? "open" }, origin, now, newId, warnings));
|
|
1833
|
+
threads.push(mergeThread(fresh, { ...thread, status: thread.status ?? "open" }, origin, now, newId, warnings, name));
|
|
1823
1834
|
}
|
|
1824
1835
|
return { file: { version: 1, threads }, warnings };
|
|
1825
1836
|
}
|
|
@@ -1831,7 +1842,7 @@ var updateHumanMessage = (thread, messageId, update2) => ({
|
|
|
1831
1842
|
...thread,
|
|
1832
1843
|
messages: thread.messages.map((m11) => m11.id === messageId && m11.author === "human" && !m11.deleted ? update2(m11) : m11)
|
|
1833
1844
|
});
|
|
1834
|
-
function applyHumanOp(file, op, now, newId) {
|
|
1845
|
+
function applyHumanOp(file, op, now, newId, who) {
|
|
1835
1846
|
switch (op.op) {
|
|
1836
1847
|
case "create":
|
|
1837
1848
|
return {
|
|
@@ -1843,12 +1854,12 @@ function applyHumanOp(file, op, now, newId) {
|
|
|
1843
1854
|
anchor: { blockId: op.blockId, quote: op.quote },
|
|
1844
1855
|
status: "open",
|
|
1845
1856
|
statusAt: now,
|
|
1846
|
-
messages: [{ id: newId(), author: "human", text: op.text, at: now }]
|
|
1857
|
+
messages: [{ id: newId(), author: "human", ...personOf(who), text: op.text, at: now }]
|
|
1847
1858
|
}
|
|
1848
1859
|
]
|
|
1849
1860
|
};
|
|
1850
1861
|
case "reply":
|
|
1851
|
-
return updateThread(file, op.threadId, (t7) => ({ ...t7, messages: [...t7.messages, { id: newId(), author: "human", text: op.text, at: now }] }));
|
|
1862
|
+
return updateThread(file, op.threadId, (t7) => ({ ...t7, messages: [...t7.messages, { id: newId(), author: "human", ...personOf(who), text: op.text, at: now }] }));
|
|
1852
1863
|
case "edit":
|
|
1853
1864
|
return updateThread(file, op.threadId, (t7) => updateHumanMessage(t7, op.messageId, (m11) => ({ ...m11, text: op.text, editedAt: now })));
|
|
1854
1865
|
case "delete":
|
|
@@ -2208,10 +2219,12 @@ function asHumanOp(value) {
|
|
|
2208
2219
|
return null;
|
|
2209
2220
|
}
|
|
2210
2221
|
}
|
|
2211
|
-
|
|
2222
|
+
var noNames = { human: () => void 0, agent: () => void 0 };
|
|
2223
|
+
function createCommentStore(file, names = noNames, now = () => (/* @__PURE__ */ new Date()).toISOString(), newId = () => nanoid(10)) {
|
|
2212
2224
|
let current = emptyComments();
|
|
2213
2225
|
let lastSeen = null;
|
|
2214
2226
|
let warnings = [];
|
|
2227
|
+
let loaded = false;
|
|
2215
2228
|
const write = () => {
|
|
2216
2229
|
writeJsonAtomic(file, current);
|
|
2217
2230
|
lastSeen = import_node_fs6.default.readFileSync(file, "utf8");
|
|
@@ -2226,7 +2239,9 @@ function createCommentStore(file, now = () => (/* @__PURE__ */ new Date()).toISO
|
|
|
2226
2239
|
if (text2 === lastSeen) return false;
|
|
2227
2240
|
lastSeen = text2;
|
|
2228
2241
|
try {
|
|
2229
|
-
const
|
|
2242
|
+
const incoming = parseComments(text2);
|
|
2243
|
+
const base = loaded ? current : savedComments(incoming);
|
|
2244
|
+
const merged = mergeComments(base, incoming, "agent", now(), newId, names.agent());
|
|
2230
2245
|
current = merged.file;
|
|
2231
2246
|
warnings = merged.warnings;
|
|
2232
2247
|
if (`${JSON.stringify(current, null, 2)}
|
|
@@ -2237,13 +2252,14 @@ function createCommentStore(file, now = () => (/* @__PURE__ */ new Date()).toISO
|
|
|
2237
2252
|
return true;
|
|
2238
2253
|
};
|
|
2239
2254
|
sync();
|
|
2255
|
+
loaded = true;
|
|
2240
2256
|
return {
|
|
2241
2257
|
current: () => current,
|
|
2242
2258
|
warnings: () => warnings,
|
|
2243
2259
|
sync,
|
|
2244
2260
|
apply: (op) => {
|
|
2245
2261
|
sync();
|
|
2246
|
-
current = applyHumanOp(current, op, now(), newId);
|
|
2262
|
+
current = applyHumanOp(current, op, now(), newId, names.human());
|
|
2247
2263
|
write();
|
|
2248
2264
|
return current;
|
|
2249
2265
|
}
|
|
@@ -28004,10 +28020,10 @@ function _loadWasmModule(sync, filepath, src, imports2) {
|
|
|
28004
28020
|
var buf = null;
|
|
28005
28021
|
var isNode2 = typeof process !== "undefined" && process.versions != null && process.versions.node != null;
|
|
28006
28022
|
if (filepath && isNode2) {
|
|
28007
|
-
var
|
|
28023
|
+
var fs22 = null;
|
|
28008
28024
|
var path18 = null;
|
|
28009
28025
|
return new Promise((resolve, reject) => {
|
|
28010
|
-
|
|
28026
|
+
fs22.readFile(path18.resolve(__dirname, filepath), (error, buffer) => {
|
|
28011
28027
|
if (error != null) {
|
|
28012
28028
|
reject(error);
|
|
28013
28029
|
} else {
|
|
@@ -83875,7 +83891,7 @@ function createDocumentRegistry(options) {
|
|
|
83875
83891
|
const commentStore = (id2) => {
|
|
83876
83892
|
let store = commentStores.get(id2);
|
|
83877
83893
|
if (!store) {
|
|
83878
|
-
store = createCommentStore(import_node_path7.default.join(options.root, "document", id2, "comments.json"));
|
|
83894
|
+
store = createCommentStore(import_node_path7.default.join(options.root, "document", id2, "comments.json"), options.names);
|
|
83879
83895
|
commentStores.set(id2, store);
|
|
83880
83896
|
}
|
|
83881
83897
|
return store;
|
|
@@ -84814,8 +84830,49 @@ function updateArtifactConfig(file, key2, patch) {
|
|
|
84814
84830
|
return entry;
|
|
84815
84831
|
}
|
|
84816
84832
|
|
|
84833
|
+
// src/server/avatars.ts
|
|
84834
|
+
var import_node_crypto3 = require("node:crypto");
|
|
84835
|
+
var AVATAR_ROUTE = /^\/api\/avatar\/([a-z]+)\/([^/]+)$/;
|
|
84836
|
+
var MAX_BYTES = 512 * 1024;
|
|
84837
|
+
var TIMEOUT_MS = 5e3;
|
|
84838
|
+
var SOURCES = {
|
|
84839
|
+
github: { valid: /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38})$/, url: (id2) => `https://avatars.githubusercontent.com/${id2}?s=64` },
|
|
84840
|
+
gravatar: { valid: /^[0-9a-f]{64}$/, url: (id2) => `https://gravatar.com/avatar/${id2}?s=64&d=404` }
|
|
84841
|
+
};
|
|
84842
|
+
var githubAvatar = (login) => `/api/avatar/github/${login}`;
|
|
84843
|
+
var gravatarAvatar = (email) => `/api/avatar/gravatar/${(0, import_node_crypto3.createHash)("sha256").update(email.trim().toLowerCase()).digest("hex")}`;
|
|
84844
|
+
function createAvatars(fetchImpl = fetch) {
|
|
84845
|
+
const cache = /* @__PURE__ */ new Map();
|
|
84846
|
+
const fetchAvatar = async (url) => {
|
|
84847
|
+
try {
|
|
84848
|
+
const res = await fetchImpl(url, { signal: AbortSignal.timeout(TIMEOUT_MS) });
|
|
84849
|
+
const type = res.headers.get("content-type") ?? "";
|
|
84850
|
+
if (!res.ok || !type.startsWith("image/")) return { status: 404 };
|
|
84851
|
+
const body = Buffer.from(await res.arrayBuffer());
|
|
84852
|
+
return body.length > MAX_BYTES ? { status: 404 } : { status: 200, type, body };
|
|
84853
|
+
} catch {
|
|
84854
|
+
return { status: 502 };
|
|
84855
|
+
}
|
|
84856
|
+
};
|
|
84857
|
+
return {
|
|
84858
|
+
load(source, id2) {
|
|
84859
|
+
const known = SOURCES[source];
|
|
84860
|
+
if (!known || !known.valid.test(id2)) return Promise.resolve({ status: 404 });
|
|
84861
|
+
const key2 = `${source}/${id2}`;
|
|
84862
|
+
const cached = cache.get(key2);
|
|
84863
|
+
if (cached) return cached;
|
|
84864
|
+
const pending = fetchAvatar(known.url(id2)).then((result) => {
|
|
84865
|
+
if (result.status === 502) cache.delete(key2);
|
|
84866
|
+
return result;
|
|
84867
|
+
});
|
|
84868
|
+
cache.set(key2, pending);
|
|
84869
|
+
return pending;
|
|
84870
|
+
}
|
|
84871
|
+
};
|
|
84872
|
+
}
|
|
84873
|
+
|
|
84817
84874
|
// src/server/cloud.ts
|
|
84818
|
-
var
|
|
84875
|
+
var import_node_crypto4 = __toESM(require("node:crypto"), 1);
|
|
84819
84876
|
|
|
84820
84877
|
// src/shared/brand.ts
|
|
84821
84878
|
var RYUGI_MARK_VIEWBOX = "0 0 512 512";
|
|
@@ -85065,7 +85122,7 @@ function createCloudRoutes(options) {
|
|
|
85065
85122
|
const state = randomToken();
|
|
85066
85123
|
const verifier = randomToken();
|
|
85067
85124
|
pendingStates.set(state, { expires: now + LOGIN_STATE_TTL_MS, verifier });
|
|
85068
|
-
const challenge =
|
|
85125
|
+
const challenge = import_node_crypto4.default.createHash("sha256").update(verifier).digest("base64url");
|
|
85069
85126
|
return `${origin}/auth/cli?port=${options.port()}&state=${state}&challenge=${challenge}`;
|
|
85070
85127
|
};
|
|
85071
85128
|
const cloudFetch = async (method, path18, body) => {
|
|
@@ -85106,7 +85163,7 @@ function createCloudRoutes(options) {
|
|
|
85106
85163
|
}
|
|
85107
85164
|
const key2 = `${ref.type}/${ref.id}`;
|
|
85108
85165
|
const entry = artifactEntry(key2);
|
|
85109
|
-
const hashed = files.map((file) => ({ ...file, hash:
|
|
85166
|
+
const hashed = files.map((file) => ({ ...file, hash: import_node_crypto4.default.createHash("sha256").update(file.data).digest("hex") }));
|
|
85110
85167
|
const byHash = new Map(hashed.map((file) => [file.hash, file.data]));
|
|
85111
85168
|
const manifest = hashed.map(({ path: path18, hash }) => ({ path: path18, hash }));
|
|
85112
85169
|
const version = (visibility) => ({ title: inspected.title, payload: inspected.payload, files: manifest, ...visibility ? { visibility } : {} });
|
|
@@ -85285,6 +85342,97 @@ function createCloudRoutes(options) {
|
|
|
85285
85342
|
};
|
|
85286
85343
|
}
|
|
85287
85344
|
|
|
85345
|
+
// src/server/comment-names.ts
|
|
85346
|
+
var import_node_child_process = require("node:child_process");
|
|
85347
|
+
var import_node_fs15 = __toESM(require("node:fs"), 1);
|
|
85348
|
+
|
|
85349
|
+
// src/server/agent.ts
|
|
85350
|
+
var NAMES = {
|
|
85351
|
+
claude: "Claude Code",
|
|
85352
|
+
"claude-code": "Claude Code",
|
|
85353
|
+
cowork: "Claude Cowork",
|
|
85354
|
+
codex: "Codex",
|
|
85355
|
+
cursor: "Cursor",
|
|
85356
|
+
"cursor-cli": "Cursor",
|
|
85357
|
+
gemini: "Gemini CLI",
|
|
85358
|
+
"gemini-cli": "Gemini CLI",
|
|
85359
|
+
"github-copilot": "GitHub Copilot",
|
|
85360
|
+
"github-copilot-cli": "GitHub Copilot",
|
|
85361
|
+
kilo: "Kilo Code",
|
|
85362
|
+
opencode: "OpenCode",
|
|
85363
|
+
"qwen-code": "Qwen Code",
|
|
85364
|
+
antigravity: "Antigravity",
|
|
85365
|
+
augment: "Augment",
|
|
85366
|
+
"augment-cli": "Augment",
|
|
85367
|
+
goose: "Goose",
|
|
85368
|
+
amp: "Amp",
|
|
85369
|
+
cline: "Cline",
|
|
85370
|
+
roo: "Roo Code",
|
|
85371
|
+
devin: "Devin",
|
|
85372
|
+
replit: "Replit",
|
|
85373
|
+
v0: "v0"
|
|
85374
|
+
};
|
|
85375
|
+
var AGENT_DISPLAY_NAMES = [...new Set(Object.values(NAMES))];
|
|
85376
|
+
var MARKERS = [
|
|
85377
|
+
["cowork", (env) => !!env.CLAUDE_CODE_IS_COWORK],
|
|
85378
|
+
["kilo", (env) => !!env.KILO],
|
|
85379
|
+
["codex", (env) => !!(env.CODEX_THREAD_ID || env.CODEX_SANDBOX || env.CODEX_CI)],
|
|
85380
|
+
["cursor", (env) => !!(env.CURSOR_AGENT || env.CURSOR_TRACE_ID)],
|
|
85381
|
+
["gemini", (env) => !!env.GEMINI_CLI],
|
|
85382
|
+
["github-copilot", (env) => !!env.COPILOT_CLI],
|
|
85383
|
+
["opencode", (env) => env.OPENCODE === "1" || !!env.OPENCODE_CLIENT],
|
|
85384
|
+
["qwen-code", (env) => !!env.QWEN_CODE],
|
|
85385
|
+
["antigravity", (env) => !!env.ANTIGRAVITY_AGENT],
|
|
85386
|
+
["augment", (env) => !!env.AUGMENT_AGENT],
|
|
85387
|
+
["cline", (env) => !!env.CLINE_ACTIVE],
|
|
85388
|
+
["roo", (env) => !!env.ROO_ACTIVE],
|
|
85389
|
+
["claude", (env) => !!(env.CLAUDECODE || env.CLAUDE_CODE)]
|
|
85390
|
+
];
|
|
85391
|
+
var declaredName = (value) => value?.trim().split(/[@_]/)[0]?.toLowerCase() || void 0;
|
|
85392
|
+
function detectAgent(env) {
|
|
85393
|
+
if (env.CLAUDE_CODE_IS_COWORK) return NAMES.cowork;
|
|
85394
|
+
const declared = declaredName(env.AI_AGENT);
|
|
85395
|
+
if (declared) return NAMES[declared] ?? declared;
|
|
85396
|
+
const marked = MARKERS.find(([, test]) => test(env))?.[0];
|
|
85397
|
+
if (marked) return NAMES[marked];
|
|
85398
|
+
const agent = declaredName(env.AGENT);
|
|
85399
|
+
if (agent && !/^(1|true|yes)$/.test(agent)) return NAMES[agent] ?? agent;
|
|
85400
|
+
return void 0;
|
|
85401
|
+
}
|
|
85402
|
+
|
|
85403
|
+
// src/server/comment-names.ts
|
|
85404
|
+
function gitConfig(cwd, key2) {
|
|
85405
|
+
try {
|
|
85406
|
+
return (0, import_node_child_process.execFileSync)("git", ["config", key2], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 2e3 }).trim() || void 0;
|
|
85407
|
+
} catch {
|
|
85408
|
+
return void 0;
|
|
85409
|
+
}
|
|
85410
|
+
}
|
|
85411
|
+
function gitPerson(cwd) {
|
|
85412
|
+
const name = gitConfig(cwd, "user.name");
|
|
85413
|
+
if (!name) return void 0;
|
|
85414
|
+
const email = gitConfig(cwd, "user.email");
|
|
85415
|
+
return email ? { name, avatar: gravatarAvatar(email) } : { name };
|
|
85416
|
+
}
|
|
85417
|
+
function commentNames({ agentFile, projectDir, cloud }) {
|
|
85418
|
+
let git;
|
|
85419
|
+
return {
|
|
85420
|
+
human: () => {
|
|
85421
|
+
const login = cloud ? readCredentials(cloud.credentialsFile, cloud.origin)?.login : void 0;
|
|
85422
|
+
if (login) return { name: login, avatar: githubAvatar(login) };
|
|
85423
|
+
git ??= { person: gitPerson(projectDir) };
|
|
85424
|
+
return git.person;
|
|
85425
|
+
},
|
|
85426
|
+
agent: () => {
|
|
85427
|
+
try {
|
|
85428
|
+
return detectAgent(JSON.parse(import_node_fs15.default.readFileSync(agentFile, "utf8")));
|
|
85429
|
+
} catch {
|
|
85430
|
+
return void 0;
|
|
85431
|
+
}
|
|
85432
|
+
}
|
|
85433
|
+
};
|
|
85434
|
+
}
|
|
85435
|
+
|
|
85288
85436
|
// src/server/viewer-page.ts
|
|
85289
85437
|
var escapeHtml2 = (value) => value.replace(/[&<>"']/g, (ch) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[ch]);
|
|
85290
85438
|
function viewerPage(template, page) {
|
|
@@ -85305,14 +85453,14 @@ function viewerPage(template, page) {
|
|
|
85305
85453
|
}
|
|
85306
85454
|
|
|
85307
85455
|
// src/server/watch.ts
|
|
85308
|
-
var
|
|
85456
|
+
var import_node_fs16 = __toESM(require("node:fs"), 1);
|
|
85309
85457
|
var import_node_path15 = __toESM(require("node:path"), 1);
|
|
85310
85458
|
var toPosix = (file) => file.split(import_node_path15.default.sep).join("/");
|
|
85311
85459
|
var ignored = (file) => file === ".state" || file.startsWith(".state/");
|
|
85312
85460
|
function snapshot(root, dir = root, out = /* @__PURE__ */ new Map()) {
|
|
85313
85461
|
let entries2;
|
|
85314
85462
|
try {
|
|
85315
|
-
entries2 =
|
|
85463
|
+
entries2 = import_node_fs16.default.readdirSync(dir, { withFileTypes: true });
|
|
85316
85464
|
} catch {
|
|
85317
85465
|
return out;
|
|
85318
85466
|
}
|
|
@@ -85323,7 +85471,7 @@ function snapshot(root, dir = root, out = /* @__PURE__ */ new Map()) {
|
|
|
85323
85471
|
if (entry.isDirectory()) snapshot(root, full, out);
|
|
85324
85472
|
else {
|
|
85325
85473
|
try {
|
|
85326
|
-
out.set(rel,
|
|
85474
|
+
out.set(rel, import_node_fs16.default.statSync(full).mtimeMs);
|
|
85327
85475
|
} catch {
|
|
85328
85476
|
}
|
|
85329
85477
|
}
|
|
@@ -85356,7 +85504,7 @@ function watchTree(root, onChange, debounceMs = 120, backupPollMs = 1e3) {
|
|
|
85356
85504
|
}, debounceMs);
|
|
85357
85505
|
};
|
|
85358
85506
|
try {
|
|
85359
|
-
const watcher =
|
|
85507
|
+
const watcher = import_node_fs16.default.watch(root, { recursive: true }, (_event, filename) => {
|
|
85360
85508
|
if (filename) queue([toPosix(filename.toString())]);
|
|
85361
85509
|
});
|
|
85362
85510
|
watcher.on("error", () => {
|
|
@@ -85381,7 +85529,7 @@ function watchTree(root, onChange, debounceMs = 120, backupPollMs = 1e3) {
|
|
|
85381
85529
|
}
|
|
85382
85530
|
|
|
85383
85531
|
// src/server/ws.ts
|
|
85384
|
-
var
|
|
85532
|
+
var import_node_crypto5 = __toESM(require("node:crypto"), 1);
|
|
85385
85533
|
var WS_MAGIC = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
85386
85534
|
var OPCODE_TEXT = 1;
|
|
85387
85535
|
var OPCODE_CLOSE = 8;
|
|
@@ -85389,7 +85537,7 @@ var OPCODE_PING = 9;
|
|
|
85389
85537
|
var OPCODE_PONG = 10;
|
|
85390
85538
|
var MAX_CLIENT_FRAME = 8 * 1024 * 1024;
|
|
85391
85539
|
function acceptKey(clientKey) {
|
|
85392
|
-
return
|
|
85540
|
+
return import_node_crypto5.default.createHash("sha1").update(clientKey + WS_MAGIC).digest("base64");
|
|
85393
85541
|
}
|
|
85394
85542
|
function encodeFrame(opcode, payload) {
|
|
85395
85543
|
const len = payload.length;
|
|
@@ -85511,13 +85659,13 @@ async function startArtifactsServer(options) {
|
|
|
85511
85659
|
const viewerDir = import_node_path16.default.resolve(options.viewerDir);
|
|
85512
85660
|
const runtimeDir = options.runtimeDir ? import_node_path16.default.resolve(options.runtimeDir) : null;
|
|
85513
85661
|
const stateDir = import_node_path16.default.join(root, ".state");
|
|
85514
|
-
|
|
85515
|
-
|
|
85662
|
+
import_node_fs17.default.mkdirSync(stateDir, { recursive: true, mode: 448 });
|
|
85663
|
+
import_node_fs17.default.writeFileSync(import_node_path16.default.join(stateDir, ".gitignore"), "*\n");
|
|
85516
85664
|
if (options.configFile) ensureConfig(options.configFile);
|
|
85517
85665
|
const portFile = import_node_path16.default.join(stateDir, ".last-port");
|
|
85518
85666
|
const tokenFile = import_node_path16.default.join(stateDir, ".last-token");
|
|
85519
85667
|
const token = readPersisted(tokenFile) || randomToken();
|
|
85520
|
-
|
|
85668
|
+
import_node_fs17.default.writeFileSync(tokenFile, `${token}
|
|
85521
85669
|
`, { mode: 384 });
|
|
85522
85670
|
const contentToken = randomToken();
|
|
85523
85671
|
const runtimeWarnings = /* @__PURE__ */ new Map();
|
|
@@ -85537,11 +85685,13 @@ async function startArtifactsServer(options) {
|
|
|
85537
85685
|
const frame = textFrame(JSON.stringify(message));
|
|
85538
85686
|
for (const socket of clients) socket.write(frame);
|
|
85539
85687
|
};
|
|
85688
|
+
const avatars = createAvatars(options.fetch);
|
|
85540
85689
|
const documents = createDocumentRegistry({
|
|
85541
85690
|
root,
|
|
85542
85691
|
stateDir,
|
|
85543
85692
|
timing: options.documentTiming,
|
|
85544
85693
|
broadcast,
|
|
85694
|
+
names: commentNames({ agentFile: import_node_path16.default.join(stateDir, "agent"), projectDir: import_node_path16.default.resolve(root, "../.."), cloud: options.cloud }),
|
|
85545
85695
|
onWarningsChange: (id2) => {
|
|
85546
85696
|
const dir = resolveArtifactDir(root, "document", id2);
|
|
85547
85697
|
if (!dir) return;
|
|
@@ -85684,7 +85834,7 @@ async function startArtifactsServer(options) {
|
|
|
85684
85834
|
sendFile(res, target, headers);
|
|
85685
85835
|
return;
|
|
85686
85836
|
}
|
|
85687
|
-
|
|
85837
|
+
import_node_fs17.default.readFile(target, "utf8", (err, source) => {
|
|
85688
85838
|
if (err) send(res, 404, "Not found");
|
|
85689
85839
|
else {
|
|
85690
85840
|
const uiRuntimeUrl = runtimeDir ? `${contentPrefix}runtime/ryugi-ui.js` : void 0;
|
|
@@ -85792,6 +85942,14 @@ async function startArtifactsServer(options) {
|
|
|
85792
85942
|
serveList(res);
|
|
85793
85943
|
return;
|
|
85794
85944
|
}
|
|
85945
|
+
const avatarMatch = AVATAR_ROUTE.exec(pathname);
|
|
85946
|
+
if (avatarMatch) {
|
|
85947
|
+
void avatars.load(avatarMatch[1], avatarMatch[2]).then(({ status, type, body }) => {
|
|
85948
|
+
if (body && type) send(res, status, body, { "Content-Type": type, "Cache-Control": "private, max-age=86400" });
|
|
85949
|
+
else send(res, status, "No avatar");
|
|
85950
|
+
});
|
|
85951
|
+
return;
|
|
85952
|
+
}
|
|
85795
85953
|
const previewMatch = API_PREVIEW_ROUTE.exec(pathname);
|
|
85796
85954
|
if (previewMatch) {
|
|
85797
85955
|
const [, type = "", id2 = ""] = previewMatch;
|
|
@@ -85843,7 +86001,7 @@ async function startArtifactsServer(options) {
|
|
|
85843
86001
|
"Content-Security-Policy": PREVIEW_ROUTE.test(pathname) ? VIEWER_CSP.replace("frame-ancestors 'none'", "frame-ancestors 'self'") : VIEWER_CSP
|
|
85844
86002
|
};
|
|
85845
86003
|
if (key2 !== null) headers["Set-Cookie"] = `${cookieName}=${token}; HttpOnly; SameSite=Strict; Path=/`;
|
|
85846
|
-
void
|
|
86004
|
+
void import_node_fs17.default.promises.readFile(import_node_path16.default.join(viewerDir, "index.html"), "utf8").then((template) => send(res, 200, viewerPage(template, { title, description, url: canonical }), headers)).catch((err) => send(res, err.code === "ENOENT" ? 404 : 500, "Viewer unavailable"));
|
|
85847
86005
|
return;
|
|
85848
86006
|
}
|
|
85849
86007
|
const target = resolveInside(viewerDir, pathname.slice(1));
|
|
@@ -85890,7 +86048,7 @@ async function startArtifactsServer(options) {
|
|
|
85890
86048
|
port = await listen(server, options.host, 0);
|
|
85891
86049
|
}
|
|
85892
86050
|
cookieName = `ryugi_artifacts_${port}`;
|
|
85893
|
-
|
|
86051
|
+
import_node_fs17.default.writeFileSync(portFile, `${port}
|
|
85894
86052
|
`, { mode: 384 });
|
|
85895
86053
|
const origin = `http://${urlHostForHttp(options.urlHost)}:${port}`;
|
|
85896
86054
|
const url = `${origin}/?key=${token}`;
|
|
@@ -85974,7 +86132,7 @@ async function startArtifactsServer(options) {
|
|
|
85974
86132
|
}
|
|
85975
86133
|
|
|
85976
86134
|
// src/server/lifecycle.ts
|
|
85977
|
-
var
|
|
86135
|
+
var import_node_fs18 = __toESM(require("node:fs"), 1);
|
|
85978
86136
|
var DEFAULT_IDLE_TIMEOUT_MS = 4 * 60 * 60 * 1e3;
|
|
85979
86137
|
var DEFAULT_LIFECYCLE_CHECK_MS = 60 * 1e3;
|
|
85980
86138
|
var SERVER_ID_ARG = "--artifacts-server-id=";
|
|
@@ -86006,7 +86164,7 @@ function parseEnv(env, argv = []) {
|
|
|
86006
86164
|
function readOwners(file) {
|
|
86007
86165
|
let text2;
|
|
86008
86166
|
try {
|
|
86009
|
-
text2 =
|
|
86167
|
+
text2 = import_node_fs18.default.readFileSync(file, "utf8");
|
|
86010
86168
|
} catch {
|
|
86011
86169
|
return [];
|
|
86012
86170
|
}
|
|
@@ -86094,12 +86252,12 @@ async function main() {
|
|
|
86094
86252
|
if (server.clientCount() > 0) return;
|
|
86095
86253
|
const link = server.linkFor(ref.type, ref.id);
|
|
86096
86254
|
if (config.openCmd) {
|
|
86097
|
-
(0,
|
|
86255
|
+
(0, import_node_child_process2.exec)(`${config.openCmd} ${JSON.stringify(link)}`, () => {
|
|
86098
86256
|
});
|
|
86099
86257
|
return;
|
|
86100
86258
|
}
|
|
86101
86259
|
const launcher = browserLauncher(process.platform, link);
|
|
86102
|
-
if (launcher) (0,
|
|
86260
|
+
if (launcher) (0, import_node_child_process2.execFile)(launcher.bin, launcher.args, () => {
|
|
86103
86261
|
});
|
|
86104
86262
|
});
|
|
86105
86263
|
let stopping = false;
|
|
@@ -86107,7 +86265,7 @@ async function main() {
|
|
|
86107
86265
|
if (stopping) return;
|
|
86108
86266
|
stopping = true;
|
|
86109
86267
|
console.log(JSON.stringify({ type: "server-stopped", reason }));
|
|
86110
|
-
|
|
86268
|
+
import_node_fs19.default.rmSync(import_node_path17.default.join(stateDir, "server-info"), { force: true });
|
|
86111
86269
|
writeJsonAtomic(import_node_path17.default.join(stateDir, "server-stopped"), { reason, timestamp: Date.now() });
|
|
86112
86270
|
await server.close();
|
|
86113
86271
|
process.exit(0);
|
|
@@ -86126,7 +86284,7 @@ async function main() {
|
|
|
86126
86284
|
timer.unref();
|
|
86127
86285
|
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
86128
86286
|
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
86129
|
-
|
|
86287
|
+
import_node_fs19.default.rmSync(import_node_path17.default.join(stateDir, "server-stopped"), { force: true });
|
|
86130
86288
|
console.log(JSON.stringify({ type: "server-started", url: server.url, port: server.port, root }));
|
|
86131
86289
|
}
|
|
86132
86290
|
main().catch((err) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{c as r,l as i,n as a,o,r as s,s as c}from"./DocumentEditor-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{c as r,l as i,n as a,o,r as s,s as c}from"./DocumentEditor-rRoUyzj5.js";var l=e(t(),1),u=n();function d(){let e=(0,l.useMemo)(()=>window.matchMedia(`(prefers-color-scheme: dark)`),[]),[t,n]=(0,l.useState)(e.matches);return(0,l.useEffect)(()=>{let t=()=>n(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[e]),t}function f({id:e,state:t,contentBase:n}){let f=d(),p=(0,l.useMemo)(()=>({artifact:`cloud/${e}`,contentBase:n,channel:c(),send:()=>void 0}),[e,n]);return(0,l.useEffect)(()=>{let e=document.createElement(`base`);return e.href=n,document.head.prepend(e),()=>e.remove()},[n]),(0,u.jsx)(`div`,{className:`x1us19tq x1rozbrz xo2rkog`,className:`ryugi-doc ${{className:`x1us19tq x1rozbrz xo2rkog`}.className??``}`,children:(0,u.jsx)(`article`,{className:`xrgej4m xvueqy4 x1axd487 x4l9tsp`,children:(0,u.jsx)(o.Provider,{value:p,children:(0,u.jsx)(i,{variant:`article`,theme:f?`dark`:`light`,initialValue:t,extraNodes:a,rendererConfig:s,onEditorReady:e=>e?.setEditable(!1),children:(0,u.jsx)(r,{})})})})})}export{f as default};
|