ryugi-artifacts 1.29.1 → 1.31.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/dist/cli.cjs +121 -81
- package/dist/server.cjs +64 -23
- package/dist/viewer/CloudDocument-F3ikpU1A.js +1 -0
- package/dist/viewer/{CloudLiveDocument-qcS9WpDB.js → CloudLiveDocument-QtuyKZMs.js} +1 -1
- package/dist/viewer/{DocumentLayout-DYTnCgfH.js → DocumentLayout-CDZm1Mud.js} +156 -154
- package/dist/viewer/DocumentPage-DJWzglCT.js +1 -0
- package/dist/viewer/DocumentPage-RHTp39ah.css +1 -0
- package/dist/viewer/{abnfDiagram-VCTEODGH-B4hF9R2U.js → abnfDiagram-VCTEODGH-bIgNbjEv.js} +1 -1
- package/dist/viewer/{ar-SA-G6X2FPQ2-B0MSU5l9.js → ar-SA-G6X2FPQ2-CBD4Eb4b.js} +1 -1
- package/dist/viewer/{architectureDiagram-5GKGNRK7-Cd8Xx-hV.js → architectureDiagram-5GKGNRK7-DmUtD0jW.js} +1 -1
- package/dist/viewer/{az-AZ-76LH7QW2-DQpVWUnU.js → az-AZ-76LH7QW2-Dawes6_l.js} +1 -1
- package/dist/viewer/{bg-BG-XCXSNQG7-CFWizXaa.js → bg-BG-XCXSNQG7-BjL-bwQR.js} +1 -1
- package/dist/viewer/{blockDiagram-I7D4REHJ-C2yu7mK-.js → blockDiagram-I7D4REHJ-DecnBxKr.js} +1 -1
- package/dist/viewer/{bn-BD-2XOGV67Q-DoeoV9n5.js → bn-BD-2XOGV67Q-DazPpl6F.js} +1 -1
- package/dist/viewer/{c4Diagram-7LVT6UL2-B5orhRgE.js → c4Diagram-7LVT6UL2-CyUvAiLu.js} +1 -1
- package/dist/viewer/{ca-ES-6MX7JW3Y-B6_hkxTX.js → ca-ES-6MX7JW3Y-CHN5F-MT.js} +1 -1
- package/dist/viewer/{chunk-4HAMMTFA-BGybz_si.js → chunk-4HAMMTFA-BqCV0tLQ.js} +1 -1
- package/dist/viewer/{chunk-EIO257PC-D9F5NHVA.js → chunk-EIO257PC-CI3oDVqd.js} +1 -1
- package/dist/viewer/{chunk-GMAD6QVW-C0XbWNVH.js → chunk-GMAD6QVW-_ArBNgmm.js} +1 -1
- package/dist/viewer/{chunk-GVQU2GXP-vRk2m9ao.js → chunk-GVQU2GXP-Bp9ybMmF.js} +1 -1
- package/dist/viewer/{chunk-IMKFNOWR-DmpawLXk.js → chunk-IMKFNOWR-B_rSZWOf.js} +1 -1
- package/dist/viewer/{chunk-L3NEJ4N5-DUZfiZWj.js → chunk-L3NEJ4N5-BoNmCXoa.js} +1 -1
- package/dist/viewer/{chunk-OSK3NFVY-BvVtm98g.js → chunk-OSK3NFVY-BULGZbtp.js} +1 -1
- package/dist/viewer/chunk-PWAF6VOD-CAWzBUKW.js +1 -0
- package/dist/viewer/{chunk-SHT3W25Y-BIOqc_9G.js → chunk-SHT3W25Y-BJQbbp7D.js} +1 -1
- package/dist/viewer/{chunk-SVP7TREG-CzXvGBkp.js → chunk-SVP7TREG-CtvQoWMe.js} +1 -1
- package/dist/viewer/{chunk-TICWLB2K-BGDOLNPy.js → chunk-TICWLB2K-Bv95TsNF.js} +1 -1
- package/dist/viewer/{classDiagram-ZZMXUADV-1LD9MdPj.js → classDiagram-ZZMXUADV-HxzLFa3r.js} +1 -1
- package/dist/viewer/{classDiagram-v2-VYDZK3BY-1LD9MdPj.js → classDiagram-v2-VYDZK3BY-HxzLFa3r.js} +1 -1
- package/dist/viewer/{cs-CZ-2BRQDIVT-DvQX9epx.js → cs-CZ-2BRQDIVT-DgtgaiDS.js} +1 -1
- package/dist/viewer/{cynefinDiagram-5FMLGOSQ-Ck6iqdN1.js → cynefinDiagram-5FMLGOSQ-COYP2ZfW.js} +1 -1
- package/dist/viewer/{da-DK-5WZEPLOC-CIkD-mT-.js → da-DK-5WZEPLOC-3I0OTBiS.js} +1 -1
- package/dist/viewer/{dagre-GXQ25YYZ-Bw4MivVe.js → dagre-GXQ25YYZ-D1rndX4t.js} +1 -1
- package/dist/viewer/{de-DE-XR44H4JA-CkZg3nnD.js → de-DE-XR44H4JA-B9iziAr2.js} +1 -1
- package/dist/viewer/{diagram-S7CK7UJ4-DcU-yw6G.js → diagram-S7CK7UJ4-p76_pN6n.js} +1 -1
- package/dist/viewer/{diagram-UQ7AKVKN-DnKTK9PW.js → diagram-UQ7AKVKN-BZeUM6LQ.js} +1 -1
- package/dist/viewer/{diagram-VX7I27RA-BBU-ZVb0.js → diagram-VX7I27RA-BH6DOtBA.js} +1 -1
- package/dist/viewer/{diagram-Z3DM3KII-CKk14xfI.js → diagram-Z3DM3KII-sfyUv_ve.js} +1 -1
- package/dist/viewer/{dist-CqRkCb8-.js → dist-3LZ0NP21.js} +1 -1
- package/dist/viewer/dist-B8MRULN_.js +6 -0
- package/dist/viewer/{dist-D_WrKoQ5.js → dist-BA4-A1Cd.js} +4 -4
- package/dist/viewer/{dist-DImjGUkS.js → dist-BM_aMsng.js} +1 -1
- package/dist/viewer/{dist-BKBE5pov.js → dist-BqWUq_oe.js} +1 -1
- package/dist/viewer/dist-BxVKiIee.js +1 -0
- package/dist/viewer/dist-C47_vNXB.js +1 -0
- package/dist/viewer/{dist-8kfzVrJL.js → dist-CEMvvLBZ.js} +1 -1
- package/dist/viewer/dist-CGRa5563.js +9 -0
- package/dist/viewer/{dist-uAqigpP8.js → dist-CK9txTdI.js} +1 -1
- package/dist/viewer/dist-CjL7F6gd.js +1 -0
- package/dist/viewer/{dist-7oXSkB_P.js → dist-DBvKpXmJ.js} +2 -2
- package/dist/viewer/{dist-DcUDFAUF.js → dist-DK-B8LN7.js} +5 -5
- package/dist/viewer/{dist-Dj78KV6Q.js → dist-DMMVvQeB.js} +1 -1
- package/dist/viewer/{dist-CYozWt7T.js → dist-Drowm01h.js} +1 -1
- package/dist/viewer/{dist-BhZ13kjD.js → dist-DyDaX5RO.js} +1 -1
- package/dist/viewer/{dist-CCKpuvTI.js → dist-Edi9zuA8.js} +1 -1
- package/dist/viewer/dist-YDT1APnG.js +1 -0
- package/dist/viewer/{dist-DH-ho6_2.js → dist-Zi8sHrLY.js} +1 -1
- package/dist/viewer/{dist-B9K9D6SC.js → dist-_r49mWqe.js} +1 -1
- package/dist/viewer/{dist-BRb242lg.js → dist-cVUMcmuG.js} +1 -1
- package/dist/viewer/{dist-C_kp_dU8.js → dist-eWnihDK-.js} +1 -1
- package/dist/viewer/{dist-B5g7S3C3.js → dist-s15uIKEV.js} +1 -1
- package/dist/viewer/{dist-DpLi82dR.js → dist-vujJ95vP.js} +2 -2
- package/dist/viewer/{ebnfDiagram-PWID7BFC-CUH9C71X.js → ebnfDiagram-PWID7BFC-Cwzg9YYr.js} +1 -1
- package/dist/viewer/{el-GR-BZB4AONW-Cl1kWlzB.js → el-GR-BZB4AONW-Bpku_fd2.js} +1 -1
- package/dist/viewer/{en-B4ZKOASM-CT3OzVWV.js → en-B4ZKOASM-JcO5O6ZA.js} +1 -1
- package/dist/viewer/{erDiagram-RLTQ6QDP-BZbuVZrG.js → erDiagram-RLTQ6QDP-fnZn2zGn.js} +1 -1
- package/dist/viewer/{es-ES-U4NZUMDT-BAD-ccHs.js → es-ES-U4NZUMDT-c2vvUvhU.js} +1 -1
- package/dist/viewer/{eu-ES-A7QVB2H4-Cj2NDws-.js → eu-ES-A7QVB2H4-C-syu7wy.js} +1 -1
- package/dist/viewer/{fa-IR-HGAKTJCU-C0FVEGIZ.js → fa-IR-HGAKTJCU-2ZjoxLW1.js} +1 -1
- package/dist/viewer/{fi-FI-Z5N7JZ37-D2AdBx48.js → fi-FI-Z5N7JZ37-Cm2EWw3m.js} +1 -1
- package/dist/viewer/flowDiagram-HODETNUW-BWCd1R3C.js +1 -0
- package/dist/viewer/{fr-FR-RHASNOE6-BFreNJCR.js → fr-FR-RHASNOE6-kwukqNI-.js} +1 -1
- package/dist/viewer/ganttDiagram-EL5Y4UJY-CfW25j5s.js +292 -0
- package/dist/viewer/{gl-ES-HMX3MZ6V-DkkhEoWc.js → gl-ES-HMX3MZ6V-DctejPjR.js} +1 -1
- package/dist/viewer/{he-IL-6SHJWFNN-VvaCcliL.js → he-IL-6SHJWFNN-BbKgaNUV.js} +1 -1
- package/dist/viewer/{hi-IN-IWLTKZ5I-DJSuk02I.js → hi-IN-IWLTKZ5I-_zDSxbjx.js} +1 -1
- package/dist/viewer/{hu-HU-A5ZG7DT2-CNvqWgoH.js → hu-HU-A5ZG7DT2-zY2bFqfB.js} +1 -1
- package/dist/viewer/{id-ID-SAP4L64H-BdPRkPOp.js → id-ID-SAP4L64H-BJOftWhs.js} +1 -1
- package/dist/viewer/{image-GAAHSSAO-C5hSHSJ9.js → image-GAAHSSAO-B0SzUEyg.js} +1 -1
- package/dist/viewer/index.html +1 -1
- package/dist/viewer/index.js +8 -8
- package/dist/viewer/index2.css +4 -0
- package/dist/viewer/{infoDiagram-27XIBGKW-Dz669Ti5.js → infoDiagram-27XIBGKW-i0jDaaMj.js} +1 -1
- package/dist/viewer/{ishikawaDiagram-5VMMS53U-BO2EV1vm.js → ishikawaDiagram-5VMMS53U-BkPu7Jq-.js} +1 -1
- package/dist/viewer/{it-IT-JPQ66NNP-BAm2zqLD.js → it-IT-JPQ66NNP-D6NtFjc_.js} +1 -1
- package/dist/viewer/{ja-JP-DBVTYXUO-Dux__a-p.js → ja-JP-DBVTYXUO-dfhQ8Eqf.js} +1 -1
- package/dist/viewer/{journeyDiagram-3NMN7TZE-B8pnfhpY.js → journeyDiagram-3NMN7TZE-DXHqPWxU.js} +1 -1
- package/dist/viewer/{kaa-6HZHGXH3-5P_fyC_H.js → kaa-6HZHGXH3-D_iRpg5w.js} +1 -1
- package/dist/viewer/{kab-KAB-ZGHBKWFO-9hTPNvCU.js → kab-KAB-ZGHBKWFO-cuwM4TOO.js} +1 -1
- package/dist/viewer/{kanban-definition-UXKFOSKX-B8Pjf3dY.js → kanban-definition-UXKFOSKX-DukKBuS_.js} +1 -1
- package/dist/viewer/{kk-KZ-P5N5QNE5-CGou3WF6.js → kk-KZ-P5N5QNE5-Cu2Xwqho.js} +1 -1
- package/dist/viewer/{km-KH-HSX4SM5Z-DOyT_tEV.js → km-KH-HSX4SM5Z-C2519YyM.js} +1 -1
- package/dist/viewer/{ko-KR-MTYHY66A-DftVvGn6.js → ko-KR-MTYHY66A-rDIeV__F.js} +1 -1
- package/dist/viewer/{ku-TR-6OUDTVRD-CVdlBZmx.js → ku-TR-6OUDTVRD-Dp1Pftew.js} +1 -1
- package/dist/viewer/{lt-LT-XHIRWOB4-CUlT0RyT.js → lt-LT-XHIRWOB4-CzjYAKUN.js} +1 -1
- package/dist/viewer/{lv-LV-5QDEKY6T-6wWFJoM0.js → lv-LV-5QDEKY6T-CjR7CWID.js} +1 -1
- package/dist/viewer/{mindmap-definition-YA3MSWOX-BcDNUqMO.js → mindmap-definition-YA3MSWOX-B0XyshNq.js} +1 -1
- package/dist/viewer/{mr-IN-CRQNXWMA-DnzpVGTc.js → mr-IN-CRQNXWMA-BUdSFgBe.js} +1 -1
- package/dist/viewer/{my-MM-5M5IBNSE-Cm4pCcPj.js → my-MM-5M5IBNSE-hDaDBPRH.js} +1 -1
- package/dist/viewer/{nb-NO-T6EIAALU-BcuxE4U7.js → nb-NO-T6EIAALU-BKm89ZTQ.js} +1 -1
- package/dist/viewer/{nl-NL-IS3SIHDZ-CQexxASS.js → nl-NL-IS3SIHDZ-BqhTIFG4.js} +1 -1
- package/dist/viewer/{nn-NO-6E72VCQL-C6pPjApO.js → nn-NO-6E72VCQL-CIzmcY9M.js} +1 -1
- package/dist/viewer/{oc-FR-POXYY2M6-CovxAT6s.js → oc-FR-POXYY2M6-DN0amV9z.js} +1 -1
- package/dist/viewer/{pa-IN-N4M65BXN-CM-0Bi_k.js → pa-IN-N4M65BXN-BBDfy7a_.js} +1 -1
- package/dist/viewer/{pegDiagram-XKGWAZYB-DHtXRebi.js → pegDiagram-XKGWAZYB-CyYKmP8R.js} +1 -1
- package/dist/viewer/percentages-BXMCSKIN-D6mV4By3.js +1 -0
- package/dist/viewer/{pieDiagram-E7YTZNPT-CxPTGmMv.js → pieDiagram-E7YTZNPT-C6zpNDN7.js} +3 -3
- package/dist/viewer/{pl-PL-T2D74RX3-Ce8egCLJ.js → pl-PL-T2D74RX3-uxeYKI3E.js} +1 -1
- package/dist/viewer/{prod-DLkZlcd2.js → prod-CqlW_rj5.js} +9 -9
- package/dist/viewer/{pt-BR-5N22H2LF-CwjXtf87.js → pt-BR-5N22H2LF-C1Z9eZIX.js} +1 -1
- package/dist/viewer/{pt-PT-UZXXM6DQ-Q9ejxTg5.js → pt-PT-UZXXM6DQ-C0y_uQrS.js} +1 -1
- package/dist/viewer/{quadrantDiagram-AXDQQJYC-z7Tz0_0k.js → quadrantDiagram-AXDQQJYC-C_dg2m-b.js} +1 -1
- package/dist/viewer/{railroadDiagram-O6MQD6OU-DwyNHCPY.js → railroadDiagram-O6MQD6OU-CqSn-tUv.js} +1 -1
- package/dist/viewer/{requirementDiagram-BXWQKSXE-BTL35j9A.js → requirementDiagram-BXWQKSXE-BifGv7Yp.js} +1 -1
- package/dist/viewer/{ro-RO-JPDTUUEW-J9XQ6U80.js → ro-RO-JPDTUUEW-C3XSytg4.js} +1 -1
- package/dist/viewer/{ru-RU-B4JR7IUQ-BBA1AdyW.js → ru-RU-B4JR7IUQ-DQIBK3MO.js} +1 -1
- package/dist/viewer/{sequenceDiagram-WJ2MYXX4-DLJNXQ8o.js → sequenceDiagram-WJ2MYXX4-17ZZS3Xp.js} +1 -1
- package/dist/viewer/{si-LK-N5RQ5JYF-U__xLKqD.js → si-LK-N5RQ5JYF-CykyDGoa.js} +1 -1
- package/dist/viewer/{sk-SK-C5VTKIMK-DnbPvh29.js → sk-SK-C5VTKIMK-zaXAzBEq.js} +1 -1
- package/dist/viewer/{sl-SI-NN7IZMDC-C8Eoz0pl.js → sl-SI-NN7IZMDC-VL133hzg.js} +1 -1
- package/dist/viewer/stateDiagram-D77RDMKH-CDp1mhdn.js +1 -0
- package/dist/viewer/{stateDiagram-v2-MP3YSRHH-CXwzb1Xj.js → stateDiagram-v2-MP3YSRHH-CznJp7-4.js} +1 -1
- package/dist/viewer/subset-shared.chunk-BZZzz7hv.js +1 -0
- package/dist/viewer/{subset-worker.chunk-B0UjzhBX.js → subset-worker.chunk-CpBimtVU.js} +1 -1
- package/dist/viewer/{sv-SE-XGPEYMSR-B82M1B45.js → sv-SE-XGPEYMSR-DorRBqhq.js} +1 -1
- package/dist/viewer/{swimlanes-42K2YHIH-CVnTCkti.js → swimlanes-42K2YHIH-DArQjMFS.js} +1 -1
- package/dist/viewer/{swimlanesDiagram-VR7AAH4N-CAsLGxAi.js → swimlanesDiagram-VR7AAH4N-BsHu3KM8.js} +1 -1
- package/dist/viewer/{ta-IN-2NMHFXQM-CDtoSBaY.js → ta-IN-2NMHFXQM-nmSQGl6D.js} +1 -1
- package/dist/viewer/{th-TH-HPSO5L25-CiNISjF4.js → th-TH-HPSO5L25-DbUatfoe.js} +1 -1
- package/dist/viewer/{timeline-definition-24CTP7MA-DCb3aOrx.js → timeline-definition-24CTP7MA-Bzg9DS-G.js} +1 -1
- package/dist/viewer/{tr-TR-DEFEU3FU-CJmFpjiQ.js → tr-TR-DEFEU3FU-CzemawLb.js} +1 -1
- package/dist/viewer/{uk-UA-QMV73CPH-BMLxQJ4h.js → uk-UA-QMV73CPH-s2YqebSD.js} +1 -1
- package/dist/viewer/{useSandboxFrame-rZO0A3sZ.js → useSandboxFrame-DJc_WnFq.js} +8 -8
- package/dist/viewer/{vennDiagram-4TSXK5OY-CuIg1PcQ.js → vennDiagram-4TSXK5OY-Cn2PBzsD.js} +1 -1
- package/dist/viewer/{vi-VN-M7AON7JQ-BOwqnpoG.js → vi-VN-M7AON7JQ-CNV_0Z3D.js} +1 -1
- package/dist/viewer/{wardleyDiagram-VM6X3IG4-D7TjtyXK.js → wardleyDiagram-VM6X3IG4-WYlJVagH.js} +1 -1
- package/dist/viewer/{xychartDiagram-S5SC5T6Z-D6WkQ4f2.js → xychartDiagram-S5SC5T6Z-aiKJ08dD.js} +2 -2
- package/dist/viewer/{zh-CN-LNUGB5OW-BGvgy1n4.js → zh-CN-LNUGB5OW-xMrtVmHe.js} +1 -1
- package/dist/viewer/{zh-HK-E62DVLB3-D7vhuMPK.js → zh-HK-E62DVLB3-CFjWlXxH.js} +1 -1
- package/dist/viewer/{zh-TW-RAJ6MFWO-vpZcm2KN.js → zh-TW-RAJ6MFWO-fjFsXTim.js} +1 -1
- package/package.json +3 -1
- package/dist/viewer/CloudDocument-DaS9ceOa.js +0 -1
- package/dist/viewer/DocumentPage-BLL9x3pY.js +0 -1
- package/dist/viewer/chunk-PWAF6VOD-BugGgSc5.js +0 -1
- package/dist/viewer/dist-B0J-I7r2.js +0 -6
- package/dist/viewer/dist-BUHcTBPN.js +0 -1
- package/dist/viewer/dist-BkV7Dy_o.js +0 -1
- package/dist/viewer/dist-CGL9Y16x.js +0 -9
- package/dist/viewer/dist-DVVjoE8q.js +0 -1
- package/dist/viewer/dist-DmaYQh00.js +0 -1
- package/dist/viewer/flowDiagram-HODETNUW-CAHqUwH1.js +0 -1
- package/dist/viewer/ganttDiagram-EL5Y4UJY-CF5GNdln.js +0 -292
- package/dist/viewer/percentages-BXMCSKIN-dSCeY2Vz.js +0 -1
- package/dist/viewer/stateDiagram-D77RDMKH-BfdN30HE.js +0 -1
- package/dist/viewer/subset-shared.chunk-Cd4b8GJL.js +0 -1
package/dist/cli.cjs
CHANGED
|
@@ -27,85 +27,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
27
|
var import_node_child_process3 = require("node:child_process");
|
|
28
28
|
var import_node_util = require("node:util");
|
|
29
29
|
|
|
30
|
-
// src/cli/comment.ts
|
|
31
|
-
var import_node_fs3 = __toESM(require("node:fs"), 1);
|
|
32
|
-
|
|
33
|
-
// src/server/agent.ts
|
|
34
|
-
var NAMES = {
|
|
35
|
-
claude: "Claude Code",
|
|
36
|
-
"claude-code": "Claude Code",
|
|
37
|
-
cowork: "Claude Cowork",
|
|
38
|
-
codex: "Codex",
|
|
39
|
-
cursor: "Cursor",
|
|
40
|
-
"cursor-cli": "Cursor",
|
|
41
|
-
gemini: "Gemini CLI",
|
|
42
|
-
"gemini-cli": "Gemini CLI",
|
|
43
|
-
"github-copilot": "GitHub Copilot",
|
|
44
|
-
"github-copilot-cli": "GitHub Copilot",
|
|
45
|
-
kilo: "Kilo Code",
|
|
46
|
-
opencode: "OpenCode",
|
|
47
|
-
"qwen-code": "Qwen Code",
|
|
48
|
-
antigravity: "Antigravity",
|
|
49
|
-
augment: "Augment",
|
|
50
|
-
"augment-cli": "Augment",
|
|
51
|
-
goose: "Goose",
|
|
52
|
-
amp: "Amp",
|
|
53
|
-
cline: "Cline",
|
|
54
|
-
roo: "Roo Code",
|
|
55
|
-
devin: "Devin",
|
|
56
|
-
replit: "Replit",
|
|
57
|
-
v0: "v0"
|
|
58
|
-
};
|
|
59
|
-
var AGENT_DISPLAY_NAMES = [...new Set(Object.values(NAMES))];
|
|
60
|
-
var MARKERS = [
|
|
61
|
-
["cowork", (env) => !!env.CLAUDE_CODE_IS_COWORK],
|
|
62
|
-
["kilo", (env) => !!env.KILO],
|
|
63
|
-
["codex", (env) => !!(env.CODEX_THREAD_ID || env.CODEX_SANDBOX || env.CODEX_CI)],
|
|
64
|
-
["cursor", (env) => !!(env.CURSOR_AGENT || env.CURSOR_TRACE_ID)],
|
|
65
|
-
["gemini", (env) => !!env.GEMINI_CLI],
|
|
66
|
-
["github-copilot", (env) => !!env.COPILOT_CLI],
|
|
67
|
-
["opencode", (env) => env.OPENCODE === "1" || !!env.OPENCODE_CLIENT],
|
|
68
|
-
["qwen-code", (env) => !!env.QWEN_CODE],
|
|
69
|
-
["antigravity", (env) => !!env.ANTIGRAVITY_AGENT],
|
|
70
|
-
["augment", (env) => !!env.AUGMENT_AGENT],
|
|
71
|
-
["cline", (env) => !!env.CLINE_ACTIVE],
|
|
72
|
-
["roo", (env) => !!env.ROO_ACTIVE],
|
|
73
|
-
["claude", (env) => !!(env.CLAUDECODE || env.CLAUDE_CODE)]
|
|
74
|
-
];
|
|
75
|
-
var AGENT_MARKERS = [
|
|
76
|
-
"AI_AGENT",
|
|
77
|
-
"AGENT",
|
|
78
|
-
"CLAUDE_CODE_IS_COWORK",
|
|
79
|
-
"KILO",
|
|
80
|
-
"CODEX_THREAD_ID",
|
|
81
|
-
"CODEX_SANDBOX",
|
|
82
|
-
"CODEX_CI",
|
|
83
|
-
"CURSOR_AGENT",
|
|
84
|
-
"CURSOR_TRACE_ID",
|
|
85
|
-
"GEMINI_CLI",
|
|
86
|
-
"COPILOT_CLI",
|
|
87
|
-
"OPENCODE",
|
|
88
|
-
"OPENCODE_CLIENT",
|
|
89
|
-
"QWEN_CODE",
|
|
90
|
-
"ANTIGRAVITY_AGENT",
|
|
91
|
-
"AUGMENT_AGENT",
|
|
92
|
-
"CLINE_ACTIVE",
|
|
93
|
-
"ROO_ACTIVE",
|
|
94
|
-
"CLAUDECODE",
|
|
95
|
-
"CLAUDE_CODE"
|
|
96
|
-
];
|
|
97
|
-
var declaredName = (value) => value?.trim().split(/[@_]/)[0]?.toLowerCase() || void 0;
|
|
98
|
-
function detectAgent(env) {
|
|
99
|
-
if (env.CLAUDE_CODE_IS_COWORK) return NAMES.cowork;
|
|
100
|
-
const declared = declaredName(env.AI_AGENT);
|
|
101
|
-
if (declared) return NAMES[declared] ?? declared;
|
|
102
|
-
const marked = MARKERS.find(([, test]) => test(env))?.[0];
|
|
103
|
-
if (marked) return NAMES[marked];
|
|
104
|
-
const agent = declaredName(env.AGENT);
|
|
105
|
-
if (agent && !/^(1|true|yes)$/.test(agent)) return NAMES[agent] ?? agent;
|
|
106
|
-
return void 0;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
30
|
// src/cli/paths.ts
|
|
110
31
|
var import_node_fs = __toESM(require("node:fs"), 1);
|
|
111
32
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
@@ -230,6 +151,114 @@ function serverClient(projectDir) {
|
|
|
230
151
|
};
|
|
231
152
|
}
|
|
232
153
|
|
|
154
|
+
// src/cli/check.ts
|
|
155
|
+
async function check(options, emit) {
|
|
156
|
+
if (!options.artifact || !ARTIFACT_PATTERN.test(options.artifact)) throw new CliError(ARTIFACT_ERROR);
|
|
157
|
+
const server = serverClient(options.projectDir);
|
|
158
|
+
const { status, json } = await server.call("POST", `/api/agent/${options.artifact}/check`);
|
|
159
|
+
if (status === 404 && typeof json.error !== "string") {
|
|
160
|
+
throw new CliError(`The running artifacts server is older than this CLI. Run \`${invocation()} start --project-dir ${server.project}\` to replace it, then run this again.`);
|
|
161
|
+
}
|
|
162
|
+
if (status < 200 || status >= 300) throw new CliError(json.error || `HTTP ${status}`);
|
|
163
|
+
emit({ type: "checked", artifact: options.artifact, ...json });
|
|
164
|
+
return 0;
|
|
165
|
+
}
|
|
166
|
+
function checkText(value) {
|
|
167
|
+
if (value.type !== "checked") return null;
|
|
168
|
+
const warnings = value.warnings ?? [];
|
|
169
|
+
const pending = value.pending ?? [];
|
|
170
|
+
const dynamic = value.dynamic ?? {};
|
|
171
|
+
const unrun = Object.entries(dynamic).filter(([, block]) => block.ran === false).map(([file]) => file);
|
|
172
|
+
const lines = [
|
|
173
|
+
...warnings.map((warning) => `warning: ${warning}`),
|
|
174
|
+
...pending.length ? [`pending: ${pending.join(", ")}`] : [],
|
|
175
|
+
...value.merging ? ["still merging the last edit; check again"] : [],
|
|
176
|
+
...value.ran === false ? ["not run in a browser yet"] : [],
|
|
177
|
+
...unrun.length ? [`not run in a browser yet: ${unrun.join(", ")}`] : []
|
|
178
|
+
];
|
|
179
|
+
return lines.length ? `${value.artifact}
|
|
180
|
+
${lines.join("\n")}` : `${value.artifact}: no warnings`;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// src/cli/comment.ts
|
|
184
|
+
var import_node_fs3 = __toESM(require("node:fs"), 1);
|
|
185
|
+
|
|
186
|
+
// src/server/agent.ts
|
|
187
|
+
var NAMES = {
|
|
188
|
+
claude: "Claude Code",
|
|
189
|
+
"claude-code": "Claude Code",
|
|
190
|
+
cowork: "Claude Cowork",
|
|
191
|
+
codex: "Codex",
|
|
192
|
+
cursor: "Cursor",
|
|
193
|
+
"cursor-cli": "Cursor",
|
|
194
|
+
gemini: "Gemini CLI",
|
|
195
|
+
"gemini-cli": "Gemini CLI",
|
|
196
|
+
"github-copilot": "GitHub Copilot",
|
|
197
|
+
"github-copilot-cli": "GitHub Copilot",
|
|
198
|
+
kilo: "Kilo Code",
|
|
199
|
+
opencode: "OpenCode",
|
|
200
|
+
"qwen-code": "Qwen Code",
|
|
201
|
+
antigravity: "Antigravity",
|
|
202
|
+
augment: "Augment",
|
|
203
|
+
"augment-cli": "Augment",
|
|
204
|
+
goose: "Goose",
|
|
205
|
+
amp: "Amp",
|
|
206
|
+
cline: "Cline",
|
|
207
|
+
roo: "Roo Code",
|
|
208
|
+
devin: "Devin",
|
|
209
|
+
replit: "Replit",
|
|
210
|
+
v0: "v0"
|
|
211
|
+
};
|
|
212
|
+
var AGENT_DISPLAY_NAMES = [...new Set(Object.values(NAMES))];
|
|
213
|
+
var MARKERS = [
|
|
214
|
+
["cowork", (env) => !!env.CLAUDE_CODE_IS_COWORK],
|
|
215
|
+
["kilo", (env) => !!env.KILO],
|
|
216
|
+
["codex", (env) => !!(env.CODEX_THREAD_ID || env.CODEX_SANDBOX || env.CODEX_CI)],
|
|
217
|
+
["cursor", (env) => !!(env.CURSOR_AGENT || env.CURSOR_TRACE_ID)],
|
|
218
|
+
["gemini", (env) => !!env.GEMINI_CLI],
|
|
219
|
+
["github-copilot", (env) => !!env.COPILOT_CLI],
|
|
220
|
+
["opencode", (env) => env.OPENCODE === "1" || !!env.OPENCODE_CLIENT],
|
|
221
|
+
["qwen-code", (env) => !!env.QWEN_CODE],
|
|
222
|
+
["antigravity", (env) => !!env.ANTIGRAVITY_AGENT],
|
|
223
|
+
["augment", (env) => !!env.AUGMENT_AGENT],
|
|
224
|
+
["cline", (env) => !!env.CLINE_ACTIVE],
|
|
225
|
+
["roo", (env) => !!env.ROO_ACTIVE],
|
|
226
|
+
["claude", (env) => !!(env.CLAUDECODE || env.CLAUDE_CODE)]
|
|
227
|
+
];
|
|
228
|
+
var AGENT_MARKERS = [
|
|
229
|
+
"AI_AGENT",
|
|
230
|
+
"AGENT",
|
|
231
|
+
"CLAUDE_CODE_IS_COWORK",
|
|
232
|
+
"KILO",
|
|
233
|
+
"CODEX_THREAD_ID",
|
|
234
|
+
"CODEX_SANDBOX",
|
|
235
|
+
"CODEX_CI",
|
|
236
|
+
"CURSOR_AGENT",
|
|
237
|
+
"CURSOR_TRACE_ID",
|
|
238
|
+
"GEMINI_CLI",
|
|
239
|
+
"COPILOT_CLI",
|
|
240
|
+
"OPENCODE",
|
|
241
|
+
"OPENCODE_CLIENT",
|
|
242
|
+
"QWEN_CODE",
|
|
243
|
+
"ANTIGRAVITY_AGENT",
|
|
244
|
+
"AUGMENT_AGENT",
|
|
245
|
+
"CLINE_ACTIVE",
|
|
246
|
+
"ROO_ACTIVE",
|
|
247
|
+
"CLAUDECODE",
|
|
248
|
+
"CLAUDE_CODE"
|
|
249
|
+
];
|
|
250
|
+
var declaredName = (value) => value?.trim().split(/[@_]/)[0]?.toLowerCase() || void 0;
|
|
251
|
+
function detectAgent(env) {
|
|
252
|
+
if (env.CLAUDE_CODE_IS_COWORK) return NAMES.cowork;
|
|
253
|
+
const declared = declaredName(env.AI_AGENT);
|
|
254
|
+
if (declared) return NAMES[declared] ?? declared;
|
|
255
|
+
const marked = MARKERS.find(([, test]) => test(env))?.[0];
|
|
256
|
+
if (marked) return NAMES[marked];
|
|
257
|
+
const agent = declaredName(env.AGENT);
|
|
258
|
+
if (agent && !/^(1|true|yes)$/.test(agent)) return NAMES[agent] ?? agent;
|
|
259
|
+
return void 0;
|
|
260
|
+
}
|
|
261
|
+
|
|
233
262
|
// src/cli/comment.ts
|
|
234
263
|
var COMMENT_ACTIONS = ["list", "add", "reply", "resolve"];
|
|
235
264
|
var ARTIFACT = /^(document|artboard)\/[a-z0-9][a-z0-9-]*$/;
|
|
@@ -655,7 +684,7 @@ async function start(options, emit) {
|
|
|
655
684
|
const lines = (readText(paths.log) ?? "").split("\n");
|
|
656
685
|
const started = lines.find((line) => line.includes('"server-started"'));
|
|
657
686
|
if (started) {
|
|
658
|
-
for (let
|
|
687
|
+
for (let check2 = 0; check2 < 20; check2++) {
|
|
659
688
|
if (!alive(child.pid)) throw new CliError(`Server started but was killed. Retry in a persistent terminal with: ${invocation()} start --project-dir ${paths.project}${options.artifact ? ` --artifact ${options.artifact}` : ""} --host ${options.host} --url-host ${options.urlHost} --foreground`);
|
|
660
689
|
await sleep(100);
|
|
661
690
|
}
|
|
@@ -782,6 +811,8 @@ running until Ctrl+C.
|
|
|
782
811
|
Commands:
|
|
783
812
|
start Start the project's artifacts server, or reuse the running one
|
|
784
813
|
stop Stop the project's artifacts server; the artifacts are kept
|
|
814
|
+
check Wait until the server has checked the latest write, then print its warnings (needs a running server):
|
|
815
|
+
--artifact <type>/<id>
|
|
785
816
|
publish Publish an artifact to the Ryugi cloud (needs a running server):
|
|
786
817
|
--artifact <type>/<id> [--public | --private] [--unpublish]
|
|
787
818
|
--list | --delete <cloud-id> | --login | --logout
|
|
@@ -822,6 +853,8 @@ function text(value) {
|
|
|
822
853
|
${value.url}`;
|
|
823
854
|
if (value.type === "published") return `${value.url} (${value.visibility})`;
|
|
824
855
|
if (value.type === "auto-publish") return `Auto-publish: ${value.global === null ? "not decided" : value.global ? "on" : "off"} for every project${value.project === null ? "" : `, ${value.project ? "on" : "off"} for this project`}.`;
|
|
856
|
+
const checked = checkText(value);
|
|
857
|
+
if (checked !== null) return checked;
|
|
825
858
|
const commented = commentText(value);
|
|
826
859
|
if (commented !== null) return commented;
|
|
827
860
|
if (typeof value.status === "string") return value.status === "stopped" ? "Stopped." : value.status.replace(/_/g, " ");
|
|
@@ -890,6 +923,13 @@ async function main(argv) {
|
|
|
890
923
|
const { values, positionals } = parse(rest, {}, 1);
|
|
891
924
|
return await stop(values["project-dir"] ?? positionals[0] ?? process.cwd(), emit);
|
|
892
925
|
}
|
|
926
|
+
if (command === "check") {
|
|
927
|
+
const { values } = parse(rest, { artifact: { type: "string" } });
|
|
928
|
+
return await check({
|
|
929
|
+
projectDir: values["project-dir"] ?? process.cwd(),
|
|
930
|
+
artifact: values.artifact
|
|
931
|
+
}, emit);
|
|
932
|
+
}
|
|
893
933
|
if (command === "publish") {
|
|
894
934
|
const { values } = parse(rest, {
|
|
895
935
|
artifact: { type: "string" },
|
|
@@ -947,7 +987,7 @@ async function main(argv) {
|
|
|
947
987
|
}, emit);
|
|
948
988
|
}
|
|
949
989
|
if (command === "--version" || command === "-v") {
|
|
950
|
-
console.log("1.
|
|
990
|
+
console.log("1.31.0");
|
|
951
991
|
return 0;
|
|
952
992
|
}
|
|
953
993
|
if (command === "--help" || command === "-h") {
|
package/dist/server.cjs
CHANGED
|
@@ -5186,6 +5186,7 @@ var BOARD_TYPES = ["html", "image", "video"];
|
|
|
5186
5186
|
var isMediaBoard = (board) => board.type === "image" || board.type === "video";
|
|
5187
5187
|
|
|
5188
5188
|
// src/server/artifacts.ts
|
|
5189
|
+
var import_node_crypto = __toESM(require("node:crypto"), 1);
|
|
5189
5190
|
var import_node_fs = __toESM(require("node:fs"), 1);
|
|
5190
5191
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
5191
5192
|
|
|
@@ -5233,9 +5234,9 @@ function artifactKeyOf(relative) {
|
|
|
5233
5234
|
return { type, id: id2 };
|
|
5234
5235
|
}
|
|
5235
5236
|
function artifactSignature(dir, type) {
|
|
5236
|
-
let count = 0;
|
|
5237
5237
|
let size = 0;
|
|
5238
5238
|
let latest = 0;
|
|
5239
|
+
const names = [];
|
|
5239
5240
|
const walk = (current) => {
|
|
5240
5241
|
let entries2;
|
|
5241
5242
|
try {
|
|
@@ -5249,7 +5250,7 @@ function artifactSignature(dir, type) {
|
|
|
5249
5250
|
const full = import_node_path.default.join(current, entry.name);
|
|
5250
5251
|
try {
|
|
5251
5252
|
const stat = import_node_fs.default.statSync(full);
|
|
5252
|
-
|
|
5253
|
+
names.push(import_node_path.default.relative(dir, full));
|
|
5253
5254
|
latest = Math.max(latest, stat.mtimeMs);
|
|
5254
5255
|
if (entry.isDirectory()) walk(full);
|
|
5255
5256
|
else size += stat.size;
|
|
@@ -5259,7 +5260,8 @@ function artifactSignature(dir, type) {
|
|
|
5259
5260
|
}
|
|
5260
5261
|
};
|
|
5261
5262
|
walk(dir);
|
|
5262
|
-
|
|
5263
|
+
const hash = import_node_crypto.default.createHash("sha1").update(names.sort().join("\0")).digest("hex").slice(0, 12);
|
|
5264
|
+
return `${names.length}:${size}:${latest}:${hash}`;
|
|
5263
5265
|
}
|
|
5264
5266
|
|
|
5265
5267
|
// src/server/document.ts
|
|
@@ -17573,7 +17575,7 @@ setPrototypeOf(Document4, Document2).prototype = Document2.prototype;
|
|
|
17573
17575
|
registerParseHTML((html) => parseHTML2(html).document);
|
|
17574
17576
|
|
|
17575
17577
|
// node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/index.js
|
|
17576
|
-
var
|
|
17578
|
+
var import_node_crypto2 = require("node:crypto");
|
|
17577
17579
|
|
|
17578
17580
|
// node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/url-alphabet/index.js
|
|
17579
17581
|
var urlAlphabet2 = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
@@ -17587,10 +17589,10 @@ function fillPool(bytes) {
|
|
|
17587
17589
|
try {
|
|
17588
17590
|
if (!pool || pool.length < bytes) {
|
|
17589
17591
|
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
|
|
17590
|
-
|
|
17592
|
+
import_node_crypto2.webcrypto.getRandomValues(pool);
|
|
17591
17593
|
poolOffset = 0;
|
|
17592
17594
|
} else if (poolOffset + bytes > pool.length) {
|
|
17593
|
-
|
|
17595
|
+
import_node_crypto2.webcrypto.getRandomValues(pool);
|
|
17594
17596
|
poolOffset = 0;
|
|
17595
17597
|
}
|
|
17596
17598
|
} catch (e5) {
|
|
@@ -17800,7 +17802,7 @@ function boxDrawingDiagrams(state) {
|
|
|
17800
17802
|
}
|
|
17801
17803
|
|
|
17802
17804
|
// src/server/board-comments.ts
|
|
17803
|
-
var
|
|
17805
|
+
var import_node_crypto3 = __toESM(require("node:crypto"), 1);
|
|
17804
17806
|
var import_node_fs8 = __toESM(require("node:fs"), 1);
|
|
17805
17807
|
var import_node_path7 = __toESM(require("node:path"), 1);
|
|
17806
17808
|
|
|
@@ -18663,7 +18665,7 @@ function fileHash(dir, relative) {
|
|
|
18663
18665
|
const stamp2 = `${stat.size}:${stat.mtimeMs}`;
|
|
18664
18666
|
const cached = hashCache.get(file);
|
|
18665
18667
|
if (cached?.stamp === stamp2) return cached.hash;
|
|
18666
|
-
const hash =
|
|
18668
|
+
const hash = import_node_crypto3.default.createHash("sha1").update(import_node_fs8.default.readFileSync(file)).digest("hex").slice(0, 12);
|
|
18667
18669
|
hashCache.set(file, { stamp: stamp2, hash });
|
|
18668
18670
|
return hash;
|
|
18669
18671
|
} catch {
|
|
@@ -88956,7 +88958,7 @@ function injectRuntime(html, options = {}) {
|
|
|
88956
88958
|
}
|
|
88957
88959
|
|
|
88958
88960
|
// src/server/http.ts
|
|
88959
|
-
var
|
|
88961
|
+
var import_node_crypto4 = __toESM(require("node:crypto"), 1);
|
|
88960
88962
|
var import_node_fs10 = __toESM(require("node:fs"), 1);
|
|
88961
88963
|
var import_node_path10 = __toESM(require("node:path"), 1);
|
|
88962
88964
|
var MIME2 = {
|
|
@@ -88982,11 +88984,11 @@ var MIME2 = {
|
|
|
88982
88984
|
".webm": "video/webm"
|
|
88983
88985
|
};
|
|
88984
88986
|
var mimeOf = (file) => MIME2[import_node_path10.default.extname(file).toLowerCase()] ?? "application/octet-stream";
|
|
88985
|
-
var randomToken = () =>
|
|
88987
|
+
var randomToken = () => import_node_crypto4.default.randomBytes(24).toString("base64url");
|
|
88986
88988
|
function safeEqual(a5, b6) {
|
|
88987
88989
|
const ab = Buffer.from(a5);
|
|
88988
88990
|
const bb = Buffer.from(b6);
|
|
88989
|
-
return ab.length === bb.length &&
|
|
88991
|
+
return ab.length === bb.length && import_node_crypto4.default.timingSafeEqual(ab, bb);
|
|
88990
88992
|
}
|
|
88991
88993
|
function parseCookies(header) {
|
|
88992
88994
|
const cookies = {};
|
|
@@ -89499,7 +89501,7 @@ function createRelayClient(options) {
|
|
|
89499
89501
|
}
|
|
89500
89502
|
|
|
89501
89503
|
// src/server/ws.ts
|
|
89502
|
-
var
|
|
89504
|
+
var import_node_crypto5 = __toESM(require("node:crypto"), 1);
|
|
89503
89505
|
var WS_MAGIC = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
89504
89506
|
var OPCODE_TEXT = 1;
|
|
89505
89507
|
var OPCODE_CLOSE = 8;
|
|
@@ -89507,7 +89509,7 @@ var OPCODE_PING = 9;
|
|
|
89507
89509
|
var OPCODE_PONG = 10;
|
|
89508
89510
|
var MAX_CLIENT_FRAME = 8 * 1024 * 1024;
|
|
89509
89511
|
function acceptKey(clientKey) {
|
|
89510
|
-
return
|
|
89512
|
+
return import_node_crypto5.default.createHash("sha1").update(clientKey + WS_MAGIC).digest("base64");
|
|
89511
89513
|
}
|
|
89512
89514
|
function encodeFrame(opcode, payload) {
|
|
89513
89515
|
const len = payload.length;
|
|
@@ -89646,7 +89648,7 @@ function hostIdFor(credentialsFile2) {
|
|
|
89646
89648
|
}
|
|
89647
89649
|
|
|
89648
89650
|
// src/server/avatars.ts
|
|
89649
|
-
var
|
|
89651
|
+
var import_node_crypto6 = require("node:crypto");
|
|
89650
89652
|
var AVATAR_ROUTE = /^\/api\/avatar\/([a-z]+)\/([^/]+)$/;
|
|
89651
89653
|
var MAX_BYTES = 512 * 1024;
|
|
89652
89654
|
var TIMEOUT_MS = 5e3;
|
|
@@ -89655,7 +89657,7 @@ var SOURCES = {
|
|
|
89655
89657
|
gravatar: { valid: /^[0-9a-f]{64}$/, url: (id2) => `https://gravatar.com/avatar/${id2}?s=64&d=404` }
|
|
89656
89658
|
};
|
|
89657
89659
|
var githubAvatar = (login) => `/api/avatar/github/${login}`;
|
|
89658
|
-
var gravatarAvatar = (email) => `/api/avatar/gravatar/${(0,
|
|
89660
|
+
var gravatarAvatar = (email) => `/api/avatar/gravatar/${(0, import_node_crypto6.createHash)("sha256").update(email.trim().toLowerCase()).digest("hex")}`;
|
|
89659
89661
|
function createAvatars(fetchImpl = fetch) {
|
|
89660
89662
|
const cache = /* @__PURE__ */ new Map();
|
|
89661
89663
|
const fetchAvatar = async (url) => {
|
|
@@ -89687,7 +89689,7 @@ function createAvatars(fetchImpl = fetch) {
|
|
|
89687
89689
|
}
|
|
89688
89690
|
|
|
89689
89691
|
// src/server/cloud.ts
|
|
89690
|
-
var
|
|
89692
|
+
var import_node_crypto7 = __toESM(require("node:crypto"), 1);
|
|
89691
89693
|
|
|
89692
89694
|
// src/shared/brand.ts
|
|
89693
89695
|
var RYUGI_MARK_VIEWBOX = "0 0 512 512";
|
|
@@ -90002,7 +90004,7 @@ function createCloudRoutes(options) {
|
|
|
90002
90004
|
const state = randomToken();
|
|
90003
90005
|
const verifier = randomToken();
|
|
90004
90006
|
pendingStates.set(state, { expires: now + LOGIN_STATE_TTL_MS, verifier });
|
|
90005
|
-
const challenge =
|
|
90007
|
+
const challenge = import_node_crypto7.default.createHash("sha256").update(verifier).digest("base64url");
|
|
90006
90008
|
return `${origin}/auth/cli?port=${options.port()}&state=${state}&challenge=${challenge}`;
|
|
90007
90009
|
};
|
|
90008
90010
|
const cloudFetch = async (method, path22, body) => {
|
|
@@ -90074,7 +90076,7 @@ function createCloudRoutes(options) {
|
|
|
90074
90076
|
} catch (err) {
|
|
90075
90077
|
throw new CloudRefused(413, err.message);
|
|
90076
90078
|
}
|
|
90077
|
-
const sha = (data) =>
|
|
90079
|
+
const sha = (data) => import_node_crypto7.default.createHash("sha256").update(data).digest("hex");
|
|
90078
90080
|
const hashed = withCloudRuntime(ref.type, packed).map((file) => ({ ...file, hash: sha(file.data) }));
|
|
90079
90081
|
const content = { title: inspected.title, payload: inspected.payload, files: hashed.map(({ path: path22, hash }) => ({ path: path22, hash })) };
|
|
90080
90082
|
const fingerprint = sha(JSON.stringify({ title: inspected.title, payload: fingerprintPayload(inspected.payload), files: packed.map((file) => ({ path: file.path, hash: sha(file.data) })) }));
|
|
@@ -90448,7 +90450,7 @@ function commentNames({ agentFile, projectDir, cloud }) {
|
|
|
90448
90450
|
}
|
|
90449
90451
|
|
|
90450
90452
|
// src/server/viewer-page.ts
|
|
90451
|
-
var
|
|
90453
|
+
var import_node_crypto8 = require("node:crypto");
|
|
90452
90454
|
var escapeHtml2 = (value) => value.replace(/[&<>"']/g, (ch) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[ch]);
|
|
90453
90455
|
function viewerPage(template, page) {
|
|
90454
90456
|
const values = {
|
|
@@ -90468,12 +90470,12 @@ function viewerPage(template, page) {
|
|
|
90468
90470
|
}
|
|
90469
90471
|
var INLINE_SCRIPT = /<script\b(?![^>]*\bsrc=)[^>]*>([\s\S]*?)<\/script>/gi;
|
|
90470
90472
|
function allowInlineScripts(csp, html) {
|
|
90471
|
-
const hashes = [...html.matchAll(INLINE_SCRIPT)].map(([, body]) => `'sha256-${(0,
|
|
90473
|
+
const hashes = [...html.matchAll(INLINE_SCRIPT)].map(([, body]) => `'sha256-${(0, import_node_crypto8.createHash)("sha256").update(body).digest("base64")}'`);
|
|
90472
90474
|
return hashes.length ? csp.replace(/script-src [^;]*/, (directive) => `${directive} ${hashes.join(" ")}`) : csp;
|
|
90473
90475
|
}
|
|
90474
90476
|
|
|
90475
90477
|
// src/server/auto-publish.ts
|
|
90476
|
-
var
|
|
90478
|
+
var import_node_crypto9 = __toESM(require("node:crypto"), 1);
|
|
90477
90479
|
var import_node_fs20 = __toESM(require("node:fs"), 1);
|
|
90478
90480
|
var IDLE_MS = 5 * 60 * 1e3;
|
|
90479
90481
|
var MAX_WAIT_MS = 15 * 60 * 1e3;
|
|
@@ -90508,7 +90510,7 @@ function createAutoPublisher(options) {
|
|
|
90508
90510
|
const failures = /* @__PURE__ */ new Map();
|
|
90509
90511
|
const save = () => writeJsonAtomic(options.stateFile, { dirty: [...dirty], notice, paused });
|
|
90510
90512
|
const raise = (kind, message, upgradeUrl) => {
|
|
90511
|
-
if (notice?.kind !== kind) notice = { id:
|
|
90513
|
+
if (notice?.kind !== kind) notice = { id: import_node_crypto9.default.randomUUID(), kind, message, ...upgradeUrl ? { upgradeUrl } : {} };
|
|
90512
90514
|
};
|
|
90513
90515
|
let idleTimer = null;
|
|
90514
90516
|
let maxTimer = null;
|
|
@@ -90723,9 +90725,12 @@ var MAX_COMMENT_OP = 64 * 1024;
|
|
|
90723
90725
|
var API_AGENT_COMMENTS_ROUTE = /^\/api\/agent\/document\/([^/]+)\/comments$/;
|
|
90724
90726
|
var API_BOARD_COMMENTS_ROUTE = /^\/api\/artboard\/([^/]+)\/comments$/;
|
|
90725
90727
|
var API_AGENT_BOARD_COMMENTS_ROUTE = /^\/api\/agent\/artboard\/([^/]+)\/comments$/;
|
|
90728
|
+
var API_AGENT_CHECK_ROUTE = /^\/api\/agent\/([^/]+)\/([^/]+)\/check$/;
|
|
90726
90729
|
var MAX_DOCUMENT_UPDATE = 8 * 1024 * 1024;
|
|
90727
90730
|
var MAX_RELAY_FILE = 8 * 1024 * 1024;
|
|
90728
90731
|
var MAX_RUNTIME_MESSAGE = 2048;
|
|
90732
|
+
var CHECK_WATCH_WAIT_MS = 2e3;
|
|
90733
|
+
var CHECK_MERGE_WAIT_MS = 6e4;
|
|
90729
90734
|
var MAX_RUNTIME_WARNINGS = 20;
|
|
90730
90735
|
function readArtifact(dir, ref, runtime = []) {
|
|
90731
90736
|
if (ref.type === "artboard") return readCanvas(dir);
|
|
@@ -91235,6 +91240,17 @@ async function startArtifactsServer(options) {
|
|
|
91235
91240
|
});
|
|
91236
91241
|
return;
|
|
91237
91242
|
}
|
|
91243
|
+
const agentCheckMatch = API_AGENT_CHECK_ROUTE.exec(pathname);
|
|
91244
|
+
if (agentCheckMatch) {
|
|
91245
|
+
if (req.method !== "POST" || key2 === null || !safeEqual(key2, token)) {
|
|
91246
|
+
send(res, 403, "Forbidden: agent calls need ?key=");
|
|
91247
|
+
return;
|
|
91248
|
+
}
|
|
91249
|
+
void serveAgentCheck(res, agentCheckMatch[1], agentCheckMatch[2]).catch((err) => {
|
|
91250
|
+
if (!res.headersSent) send(res, 500, `Artifacts error: ${err.message}`);
|
|
91251
|
+
});
|
|
91252
|
+
return;
|
|
91253
|
+
}
|
|
91238
91254
|
const boardCommentsMatch = API_BOARD_COMMENTS_ROUTE.exec(pathname);
|
|
91239
91255
|
if (boardCommentsMatch) {
|
|
91240
91256
|
void serveBoardComments(req, res, boardCommentsMatch[1]).catch((err) => {
|
|
@@ -91431,6 +91447,31 @@ async function startArtifactsServer(options) {
|
|
|
91431
91447
|
}
|
|
91432
91448
|
}
|
|
91433
91449
|
}) : null;
|
|
91450
|
+
const serveAgentCheck = async (res, type, id2) => {
|
|
91451
|
+
const ref = artifactKeyOf(`${type}/${id2}`);
|
|
91452
|
+
const dir = ref && resolveArtifactDir(root, ref.type, ref.id);
|
|
91453
|
+
if (!ref || !dir) {
|
|
91454
|
+
sendJson(res, 404, { error: `${type}/${id2} not found in ${root}` });
|
|
91455
|
+
return;
|
|
91456
|
+
}
|
|
91457
|
+
const key2 = `${ref.type}/${ref.id}`;
|
|
91458
|
+
for (let waited = 0; waited < CHECK_WATCH_WAIT_MS && signatures.get(key2) !== artifactSignature(dir, ref.type); waited += 50) {
|
|
91459
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
91460
|
+
}
|
|
91461
|
+
let merging = false;
|
|
91462
|
+
if (ref.type === "document") {
|
|
91463
|
+
const session = await documents.open(ref.id);
|
|
91464
|
+
const text2 = await import_node_fs23.default.promises.readFile(import_node_path20.default.join(dir, "doc.xml"), "utf8").catch(() => null);
|
|
91465
|
+
if (session && text2 !== null) {
|
|
91466
|
+
session.onFileText(text2);
|
|
91467
|
+
const timeout = new Promise((resolve) => setTimeout(() => resolve("timeout"), CHECK_MERGE_WAIT_MS).unref());
|
|
91468
|
+
merging = await Promise.race([session.settled(), timeout]) === "timeout";
|
|
91469
|
+
}
|
|
91470
|
+
}
|
|
91471
|
+
writeState(ref, dir);
|
|
91472
|
+
const state = JSON.parse(await import_node_fs23.default.promises.readFile(import_node_path20.default.join(stateDir, ref.type, ref.id, "warnings.json"), "utf8"));
|
|
91473
|
+
sendJson(res, 200, merging ? { ...state, merging: true } : state);
|
|
91474
|
+
};
|
|
91434
91475
|
const watcher = watchTree(
|
|
91435
91476
|
root,
|
|
91436
91477
|
(files) => {
|
|
@@ -91601,7 +91642,7 @@ function openReady(payload) {
|
|
|
91601
91642
|
}
|
|
91602
91643
|
|
|
91603
91644
|
// package.json
|
|
91604
|
-
var version = "1.
|
|
91645
|
+
var version = "1.31.0";
|
|
91605
91646
|
|
|
91606
91647
|
// src/server/main.ts
|
|
91607
91648
|
async function main() {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{a as r,x as i}from"./useSandboxFrame-DJc_WnFq.js";import{E as a,T as o,d as s,f as c,k as l,t as u,y as d}from"./DocumentLayout-CDZm1Mud.js";var f=e(t(),1),p=n();function m(){let e=(0,f.useMemo)(()=>window.matchMedia(`(prefers-color-scheme: dark)`),[]),[t,n]=(0,f.useState)(e.matches);return(0,f.useEffect)(()=>{let t=()=>n(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[e]),t}function h({id:e,state:t,contentBase:n,comments:h=i(),offline:g=!1}){let _=m(),[v,y]=(0,f.useState)(null),b=(0,f.useMemo)(()=>({artifact:`cloud/${e}`,contentBase:n,channel:o(),send:()=>void 0}),[e,n]),x=r(e,{comments:h.threads.filter(e=>e.status===`open`).length,activity:null,retrying:!1,reason:null,history:!1,historyOpen:!1});return(0,f.useEffect)(()=>{let e=document.createElement(`base`);return e.href=n,document.head.prepend(e),()=>e.remove()},[n]),(0,p.jsxs)(`div`,{className:`x1us19tq x1rozbrz xo2rkog`,className:`ryugi-doc ${{className:`x1us19tq x1rozbrz xo2rkog`}.className??``}`,children:[x?null:(0,p.jsxs)(`div`,{className:`x78zum5 x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61`,children:[(0,p.jsx)(`button`,{type:`button`,className:`doc-history-entry`,disabled:!0,title:`电脑离线,历史暂不可用`,children:`历史记录`}),(0,p.jsx)(`span`,{children:`电脑离线,历史暂不可用`})]}),g?(0,p.jsxs)(`div`,{...{0:{className:`x78zum5 x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61`},1:{className:`x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61 x1s85apg x1ux6vrq`}}[!!x|0],children:[(0,p.jsx)(`i`,{className:`xci0xqf x1hagigm x16rqkct xxwmxtg`}),`电脑离线,暂时不能评论`]}):null,(0,p.jsx)(u,{editor:v,threads:h.threads,children:(0,p.jsx)(d.Provider,{value:b,children:(0,p.jsx)(l,{variant:`article`,theme:_?`dark`:`light`,initialValue:t,extraNodes:s,rendererConfig:c,onEditorReady:e=>{e?.setEditable(!1),y(e??null)},children:(0,p.jsx)(a,{})})})})]})}export{h as default};
|
|
@@ -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{a as r}from"./useSandboxFrame-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{a as r}from"./useSandboxFrame-DJc_WnFq.js";import{t as i}from"./index.js";import a from"./CloudDocument-F3ikpU1A.js";import{DocumentView as o,t as s}from"./DocumentPage-DJWzglCT.js";var c=e(t(),1),l=`1.31.0`,u=e=>/^(\d+)\.(\d+)\./.exec(e??``)?.slice(1,3).join(`.`)??null;function d(e,t){let n=u(e);return n!==null&&n===u(t)}var f=(e,t)=>`电脑上的 ryugi 是 ${t??`未知版本`},网页是 ${e},版本对上之前只能评论`,p=n();function m({id:e,state:t,contentBase:n,liveContentBase:u,comments:m}){let{transport:h,presence:g}=s(e,u??n??``),_=g?.online??!1;r(e,{online:g?.online??null});let[v,y]=(0,c.useState)(!1);if((0,c.useEffect)(()=>{_&&y(!0)},[_]),!h||!(v||_))return!t||!n?(0,p.jsx)(i,{children:g===null?`正在连接…`:`还没发布。电脑在线时,这里会实时显示。`}):(0,p.jsx)(a,{id:e,state:t,contentBase:n,comments:m,offline:g!==null&&!_});let b=_&&d(l,g?.version??null),x=_&&!b?f(l,g?.version??null):null;return(0,p.jsx)(o,{id:e,transport:h,live:_,cloud:{online:_,canEdit:b,reason:x}})}export{m as default};
|