excalidrop 0.1.4 → 0.2.2
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 +70 -125
- package/dist/cli.d.ts +7 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +936 -389
- package/dist/cli.js.map +1 -1
- package/dist/frontend/assets/{advancedFormat-tiBAHNGo.js → advancedFormat-Be4KR5mp.js} +1 -1
- package/dist/frontend/assets/{ar-SA-G6X2FPQ2-DVxiWV5Z.js → ar-SA-G6X2FPQ2-B6ekz3Ba.js} +1 -1
- package/dist/frontend/assets/arc-DlgXyGPj.js +1 -0
- package/dist/frontend/assets/{az-AZ-76LH7QW2-Z_2BqDo-.js → az-AZ-76LH7QW2-01MDUsF0.js} +1 -1
- package/dist/frontend/assets/{bg-BG-XCXSNQG7-DrxGJZOG.js → bg-BG-XCXSNQG7--fArB8Ao.js} +1 -1
- package/dist/frontend/assets/{blockDiagram-38ab4fdb-CDnkTFfP.js → blockDiagram-38ab4fdb-CmsVhOwi.js} +1 -1
- package/dist/frontend/assets/{blockDiagram-68f4deed-Bb0W6mxN.js → blockDiagram-68f4deed-DU_wNYlO.js} +6 -6
- package/dist/frontend/assets/{bn-BD-2XOGV67Q-BkGJ-w8k.js → bn-BD-2XOGV67Q-h8juqzfQ.js} +1 -1
- package/dist/frontend/assets/{c4Diagram-15b5d702-ByRV0tka.js → c4Diagram-15b5d702-ClZalz0L.js} +1 -1
- package/dist/frontend/assets/{c4Diagram-3d4e48cf-QSVnzYYK.js → c4Diagram-3d4e48cf-BkFVM0tP.js} +1 -1
- package/dist/frontend/assets/{ca-ES-6MX7JW3Y-BBJvOPE1.js → ca-ES-6MX7JW3Y-DMBR3qVX.js} +1 -1
- package/dist/frontend/assets/channel-BxFR7168.js +1 -0
- package/dist/frontend/assets/{classDiagram-70f12bd4-DDFBNGUt.js → classDiagram-70f12bd4-BXAJnakg.js} +1 -1
- package/dist/frontend/assets/{classDiagram-d40c83e7-cgC3s7Nz.js → classDiagram-d40c83e7-DVhipa45.js} +1 -1
- package/dist/frontend/assets/classDiagram-v2-d5a6b087-CiHMsbhj.js +2 -0
- package/dist/frontend/assets/{classDiagram-v2-f2320105-Dtywkpeg.js → classDiagram-v2-f2320105-1CqIxWOB.js} +2 -2
- package/dist/frontend/assets/clone-CMl85WSi.js +1 -0
- package/dist/frontend/assets/{createText-2e5e7dd3-CqY00v-4.js → createText-2e5e7dd3-D3kSz3YE.js} +1 -1
- package/dist/frontend/assets/{createText-d213de94-D59sBfqq.js → createText-d213de94-DvJeLlQX.js} +4 -4
- package/dist/frontend/assets/{cs-CZ-2BRQDIVT-CK09MAsg.js → cs-CZ-2BRQDIVT-BUcdPrAr.js} +1 -1
- package/dist/frontend/assets/{cytoscape-cose-bilkent-CKy_tuGZ.js → cytoscape-cose-bilkent-CKoSm_2z.js} +1 -1
- package/dist/frontend/assets/{da-DK-5WZEPLOC-V4hdLKuT.js → da-DK-5WZEPLOC-C1nkchuC.js} +1 -1
- package/dist/frontend/assets/{de-DE-XR44H4JA-Dw8qkP9g.js → de-DE-XR44H4JA-DO2_bO1X.js} +1 -1
- package/dist/frontend/assets/{edges-332bd1c7-D-u0KMZB.js → edges-332bd1c7-C5qM1sDU.js} +1 -1
- package/dist/frontend/assets/{edges-e0da2a9e-B3UFqLqY.js → edges-e0da2a9e-BRt7qomS.js} +1 -1
- package/dist/frontend/assets/{el-GR-BZB4AONW-BUdBQbYg.js → el-GR-BZB4AONW-CrjSdaU2.js} +1 -1
- package/dist/frontend/assets/{elk.bundled-BZA3Xcoo.js → elk.bundled-Dmec6Rq6.js} +1 -1
- package/dist/frontend/assets/{erDiagram-880f2ed8-CNxm7e1x.js → erDiagram-880f2ed8-BI7kP523.js} +4 -4
- package/dist/frontend/assets/{erDiagram-9861fffd-C2u_ziAM.js → erDiagram-9861fffd-DMyCDrgI.js} +1 -1
- package/dist/frontend/assets/{es-ES-U4NZUMDT-DS0FAZqX.js → es-ES-U4NZUMDT-rrdjPi-M.js} +1 -1
- package/dist/frontend/assets/{eu-ES-A7QVB2H4-D-D5uidc.js → eu-ES-A7QVB2H4-uYn3S3D5.js} +1 -1
- package/dist/frontend/assets/{fa-IR-HGAKTJCU-mAW_2-jg.js → fa-IR-HGAKTJCU-DWW_BVFR.js} +1 -1
- package/dist/frontend/assets/{fi-FI-Z5N7JZ37-B9mW6nxS.js → fi-FI-Z5N7JZ37-CMXxeZ4W.js} +1 -1
- package/dist/frontend/assets/{flowDb-7c981674-6JB2gd0I.js → flowDb-7c981674-Dsj6xMzr.js} +1 -1
- package/dist/frontend/assets/{flowDb-956e92f1-BbpkWRi7.js → flowDb-956e92f1-26g7kJju.js} +1 -1
- package/dist/frontend/assets/{flowDiagram-66a62f08-DrhrQuXc.js → flowDiagram-66a62f08-C9eQZtdf.js} +1 -1
- package/dist/frontend/assets/{flowDiagram-cbd28bf7-BmNY7bvJ.js → flowDiagram-cbd28bf7-D051xFrI.js} +3 -3
- package/dist/frontend/assets/flowDiagram-v2-96b9c2cf-DIa4RdMh.js +1 -0
- package/dist/frontend/assets/flowDiagram-v2-ffc7f31a-CnvFT8HV.js +1 -0
- package/dist/frontend/assets/{flowchart-elk-definition-36e2d292-4G1YiIlk.js → flowchart-elk-definition-36e2d292-C9fsvhV-.js} +2 -2
- package/dist/frontend/assets/{flowchart-elk-definition-4a651766-Cm94SrrQ.js → flowchart-elk-definition-4a651766-BkVNuJOw.js} +1 -1
- package/dist/frontend/assets/{fr-FR-RHASNOE6-BXnmUxTA.js → fr-FR-RHASNOE6-DIfK_rjW.js} +1 -1
- package/dist/frontend/assets/{ganttDiagram-04f9e578-X0BweAnG.js → ganttDiagram-04f9e578-CZeF2a4Y.js} +1 -1
- package/dist/frontend/assets/{ganttDiagram-c361ad54-D3vxZ5MQ.js → ganttDiagram-c361ad54-DbkIZ-wU.js} +1 -1
- package/dist/frontend/assets/{gitGraphDiagram-21fc4d3e-wznrpRWn.js → gitGraphDiagram-21fc4d3e-CLqlSEuE.js} +6 -6
- package/dist/frontend/assets/{gitGraphDiagram-72cf32ee-B9zCS3Pw.js → gitGraphDiagram-72cf32ee-Cvf9uYWB.js} +1 -1
- package/dist/frontend/assets/{gl-ES-HMX3MZ6V-CrUx-ab6.js → gl-ES-HMX3MZ6V-CCxCH2oK.js} +1 -1
- package/dist/frontend/assets/{graph-BQZ6SIVr.js → graph-MptL1QoF.js} +1 -1
- package/dist/frontend/assets/{graph-Cda8xSTx.js → graph-Mzuu2QFH.js} +1 -1
- package/dist/frontend/assets/{he-IL-6SHJWFNN-D33eaw6-.js → he-IL-6SHJWFNN-CJuJutJZ.js} +1 -1
- package/dist/frontend/assets/{hi-IN-IWLTKZ5I-DEnStF-g.js → hi-IN-IWLTKZ5I-BORPH6vU.js} +1 -1
- package/dist/frontend/assets/{hu-HU-A5ZG7DT2-BjH2w8Sn.js → hu-HU-A5ZG7DT2-Dr7UDbjo.js} +1 -1
- package/dist/frontend/assets/{id-ID-SAP4L64H-Bc6R-JEz.js → id-ID-SAP4L64H-D0Widkq7.js} +1 -1
- package/dist/frontend/assets/{index-3862675e-CpYfS3Db.js → index-3862675e-DVT5-vN2.js} +1 -1
- package/dist/frontend/assets/{index-6079d271-Y2bgyRpa.js → index-6079d271-R4KRnW5Z.js} +1 -1
- package/dist/frontend/assets/{index-D7eYnAQp.js → index-B45XzZiR.js} +4 -4
- package/dist/frontend/assets/index-Bd-8869C.js +349 -0
- package/dist/frontend/assets/{infoDiagram-4a4f5b27-Bm3Oq-Rq.js → infoDiagram-4a4f5b27-BvY1qS17.js} +3 -3
- package/dist/frontend/assets/{infoDiagram-f8f76790-oNVitBKM.js → infoDiagram-f8f76790-D60YvG33.js} +1 -1
- package/dist/frontend/assets/{it-IT-JPQ66NNP-BcxQABF2.js → it-IT-JPQ66NNP-C08Vu0BG.js} +1 -1
- package/dist/frontend/assets/{ja-JP-DBVTYXUO-D1zIM-nt.js → ja-JP-DBVTYXUO-Ciu7LaRi.js} +1 -1
- package/dist/frontend/assets/{journeyDiagram-29694f62-CamPk_3P.js → journeyDiagram-29694f62-DvrnJXsd.js} +5 -5
- package/dist/frontend/assets/{journeyDiagram-49397b02-D6w3tLtf.js → journeyDiagram-49397b02-Dy9LU86E.js} +1 -1
- package/dist/frontend/assets/{kaa-6HZHGXH3-CoILysVg.js → kaa-6HZHGXH3-GhGTIjpu.js} +1 -1
- package/dist/frontend/assets/{kab-KAB-ZGHBKWFO-B9ZbybBt.js → kab-KAB-ZGHBKWFO-B3q4BqYw.js} +1 -1
- package/dist/frontend/assets/{kk-KZ-P5N5QNE5-Dxi4GIQ7.js → kk-KZ-P5N5QNE5-GWoLZvco.js} +1 -1
- package/dist/frontend/assets/{km-KH-HSX4SM5Z-DaJ7EtO2.js → km-KH-HSX4SM5Z-CnAQJCYr.js} +1 -1
- package/dist/frontend/assets/{ko-KR-MTYHY66A-DG57Ah12.js → ko-KR-MTYHY66A-B2Rh9krp.js} +1 -1
- package/dist/frontend/assets/{ku-TR-6OUDTVRD-DnDf9E8a.js → ku-TR-6OUDTVRD-C27elmON.js} +1 -1
- package/dist/frontend/assets/{layout-Drr-66M9.js → layout-D1hl6oKi.js} +1 -1
- package/dist/frontend/assets/{layout-BsWfhUAF.js → layout-c-hOA8zE.js} +1 -1
- package/dist/frontend/assets/{line-DwQObOhP.js → line-DtMz1ssZ.js} +1 -1
- package/dist/frontend/assets/{linear-C36MjJps.js → linear-D-Y4WtO_.js} +1 -1
- package/dist/frontend/assets/{lt-LT-XHIRWOB4-D_zqS0yg.js → lt-LT-XHIRWOB4-B6jd693w.js} +1 -1
- package/dist/frontend/assets/{lv-LV-5QDEKY6T-owIsIh1b.js → lv-LV-5QDEKY6T-sXB-8i6R.js} +1 -1
- package/dist/frontend/assets/{mindmap-definition-ac74a2e8-Cf9JbrBJ.js → mindmap-definition-ac74a2e8-CawO9I_f.js} +6 -6
- package/dist/frontend/assets/{mindmap-definition-fc14e90a-BpsNCNCp.js → mindmap-definition-fc14e90a-CXMNA68v.js} +4 -4
- package/dist/frontend/assets/{mr-IN-CRQNXWMA-CS9XUj74.js → mr-IN-CRQNXWMA-BJ6QSiPi.js} +1 -1
- package/dist/frontend/assets/{my-MM-5M5IBNSE-BKB060k9.js → my-MM-5M5IBNSE-BMdOIRP5.js} +1 -1
- package/dist/frontend/assets/{nb-NO-T6EIAALU-CkmLUrvm.js → nb-NO-T6EIAALU-BVG6JUMN.js} +1 -1
- package/dist/frontend/assets/{nl-NL-IS3SIHDZ-DdiLyJoz.js → nl-NL-IS3SIHDZ-ZprCvTYR.js} +1 -1
- package/dist/frontend/assets/{nn-NO-6E72VCQL-Yevp6f_Y.js → nn-NO-6E72VCQL-CcljFAGy.js} +1 -1
- package/dist/frontend/assets/{oc-FR-POXYY2M6-D_M6GHup.js → oc-FR-POXYY2M6-zCuu6Ns2.js} +1 -1
- package/dist/frontend/assets/{pa-IN-N4M65BXN-1vuACN9n.js → pa-IN-N4M65BXN-D_iftL9v.js} +1 -1
- package/dist/frontend/assets/{pica-DDDx0iqx.js → pica-DsW4eP6T.js} +1 -1
- package/dist/frontend/assets/{pie-CFIpuQMO.js → pie-U_uHwWsL.js} +1 -1
- package/dist/frontend/assets/{pieDiagram-421022e6-DO7e_Qgw.js → pieDiagram-421022e6-naaI7HiE.js} +5 -5
- package/dist/frontend/assets/{pieDiagram-8a3498a8-BEoqChXo.js → pieDiagram-8a3498a8-m6nTf1O_.js} +1 -1
- package/dist/frontend/assets/{pl-PL-T2D74RX3-Cc6Q5nSh.js → pl-PL-T2D74RX3-CRQQfZUe.js} +1 -1
- package/dist/frontend/assets/{pt-BR-5N22H2LF-3eEiAax3.js → pt-BR-5N22H2LF-DLvfG7RR.js} +1 -1
- package/dist/frontend/assets/{pt-PT-UZXXM6DQ-CgnF0Le7.js → pt-PT-UZXXM6DQ-Chkg6-JC.js} +1 -1
- package/dist/frontend/assets/{quadrantDiagram-0957ecba-C1Eo-ZUY.js → quadrantDiagram-0957ecba-BJR82kAx.js} +3 -3
- package/dist/frontend/assets/{quadrantDiagram-120e2f19-Bdfsl_O7.js → quadrantDiagram-120e2f19-CsWgLp5e.js} +1 -1
- package/dist/frontend/assets/relay-BSVGqyIy.js +2 -0
- package/dist/frontend/assets/{requirementDiagram-23d650b8-DiOK6QW3.js → requirementDiagram-23d650b8-CHmg-ycX.js} +1 -1
- package/dist/frontend/assets/{requirementDiagram-deff3bca-BDJ-7T4h.js → requirementDiagram-deff3bca-LIsyxsZZ.js} +1 -1
- package/dist/frontend/assets/{ro-RO-JPDTUUEW-CbJ3IB7a.js → ro-RO-JPDTUUEW-B_a5A5-x.js} +1 -1
- package/dist/frontend/assets/{ru-RU-B4JR7IUQ-PQGmeGG4.js → ru-RU-B4JR7IUQ-CY5sI1Ru.js} +1 -1
- package/dist/frontend/assets/{sankeyDiagram-04a897e0-DV25bgN2.js → sankeyDiagram-04a897e0-DN5e16d0.js} +1 -1
- package/dist/frontend/assets/{sankeyDiagram-23345273-szSb_Sei.js → sankeyDiagram-23345273-BBjQCtHz.js} +1 -1
- package/dist/frontend/assets/{selectAll-DsrPvhqV.js → selectAll-Dcq-dC_E.js} +1 -1
- package/dist/frontend/assets/{sequenceDiagram-17ac3bff-Dg88bSlc.js → sequenceDiagram-17ac3bff-CIXyQiN6.js} +1 -1
- package/dist/frontend/assets/{sequenceDiagram-704730f1-DRIjLCxx.js → sequenceDiagram-704730f1-BmDwBhsF.js} +1 -1
- package/dist/frontend/assets/{si-LK-N5RQ5JYF-BtIIudm3.js → si-LK-N5RQ5JYF-DEPKL_1i.js} +1 -1
- package/dist/frontend/assets/{sk-SK-C5VTKIMK-CIwXticU.js → sk-SK-C5VTKIMK-XqrGDM2K.js} +1 -1
- package/dist/frontend/assets/{sl-SI-NN7IZMDC-CXEdg57y.js → sl-SI-NN7IZMDC-Dia3d1Yy.js} +1 -1
- package/dist/frontend/assets/{stateDiagram-587899a1-BwRwgRo6.js → stateDiagram-587899a1-CY1BCaUa.js} +1 -1
- package/dist/frontend/assets/{stateDiagram-9c5f0230-C8n96rER.js → stateDiagram-9c5f0230-gyjWQtSe.js} +1 -1
- package/dist/frontend/assets/{stateDiagram-v2-51a3dcff-B7e5E4J7.js → stateDiagram-v2-51a3dcff-CAIiXqRE.js} +1 -1
- package/dist/frontend/assets/{stateDiagram-v2-d93cdb3a-B18iZQLw.js → stateDiagram-v2-d93cdb3a-DvUpzRiQ.js} +1 -1
- package/dist/frontend/assets/{styles-2ab5d517-CfWubwio.js → styles-2ab5d517-BE3yBf4Z.js} +3 -3
- package/dist/frontend/assets/{styles-5f03d8d2-C-_n19AB.js → styles-5f03d8d2-CGBEZiW_.js} +3 -3
- package/dist/frontend/assets/{styles-6aaf32cf-Dh-DHkVP.js → styles-6aaf32cf-JdIhb4_Y.js} +1 -1
- package/dist/frontend/assets/{styles-9a916d00-Boy0hUEG.js → styles-9a916d00-DRmxoyEF.js} +1 -1
- package/dist/frontend/assets/{styles-c10674c1-BfxiK3Ns.js → styles-c10674c1-C3TEvIjw.js} +1 -1
- package/dist/frontend/assets/{styles-edf9a4b0-T7mKViRF.js → styles-edf9a4b0-B_FeyXdP.js} +1 -1
- package/dist/frontend/assets/subset-shared.chunk.js +9 -9
- package/dist/frontend/assets/subset-worker.chunk.js +1 -1
- package/dist/frontend/assets/{sv-SE-XGPEYMSR-dVrUAqld.js → sv-SE-XGPEYMSR-CBrvnOWh.js} +1 -1
- package/dist/frontend/assets/{svgDrawCommon-08f97a94-fsWk6SQc.js → svgDrawCommon-08f97a94-DI4ZG6xI.js} +1 -1
- package/dist/frontend/assets/{svgDrawCommon-3ba9043b-BJ8X3qS-.js → svgDrawCommon-3ba9043b-Dl5HsA0X.js} +1 -1
- package/dist/frontend/assets/{ta-IN-2NMHFXQM-CtVVZfIT.js → ta-IN-2NMHFXQM-DGYl9sGK.js} +1 -1
- package/dist/frontend/assets/{th-TH-HPSO5L25-Do90CyDN.js → th-TH-HPSO5L25-Bq3K3L0F.js} +1 -1
- package/dist/frontend/assets/{timeline-definition-7e6b55e7-D_iHA485.js → timeline-definition-7e6b55e7-DWL-fZtL.js} +3 -3
- package/dist/frontend/assets/{timeline-definition-85554ec2-nhT8QMsO.js → timeline-definition-85554ec2-C14kwDFd.js} +1 -1
- package/dist/frontend/assets/{tr-TR-DEFEU3FU-MfR-IQke.js → tr-TR-DEFEU3FU-CSwI35xw.js} +1 -1
- package/dist/frontend/assets/{uk-UA-QMV73CPH-CPet8B1O.js → uk-UA-QMV73CPH-Dxy7prmb.js} +1 -1
- package/dist/frontend/assets/{union-BgYwhB7T.js → union-DQ7m6Pel.js} +1 -1
- package/dist/frontend/assets/{vi-VN-M7AON7JQ-3HD06T_8.js → vi-VN-M7AON7JQ-BNyYTgjT.js} +1 -1
- package/dist/frontend/assets/{xychartDiagram-b6496bcd-D5vSaFT2.js → xychartDiagram-b6496bcd-DWKYL0ZD.js} +4 -4
- package/dist/frontend/assets/{xychartDiagram-e933f94c-DLIHXsUi.js → xychartDiagram-e933f94c-Bw4brW9l.js} +1 -1
- package/dist/frontend/assets/youtubeResume-DPG81gOQ.js +1 -0
- package/dist/frontend/assets/{zh-CN-LNUGB5OW-t2RyWPw2.js → zh-CN-LNUGB5OW-BNhZCPEt.js} +1 -1
- package/dist/frontend/assets/{zh-HK-E62DVLB3-Bj22hc7e.js → zh-HK-E62DVLB3-D_rDALSq.js} +1 -1
- package/dist/frontend/assets/{zh-TW-RAJ6MFWO-CBRhqhU1.js → zh-TW-RAJ6MFWO-rUlbmCTA.js} +1 -1
- package/dist/frontend/assets/zipObject-Db5-6vIz.js +1 -0
- package/dist/frontend/index.html +172 -236
- package/dist/{index.d.ts → mcp.d.ts} +1 -1
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +1183 -0
- package/dist/mcp.js.map +1 -0
- package/package.json +19 -34
- package/skills/excalidraw-skill/SKILL.md +42 -55
- package/skills/excalidraw-skill/references/cheatsheet.md +23 -56
- package/skills/excalidraw-skill/scripts/clear-canvas.cjs +9 -32
- package/skills/excalidraw-skill/scripts/create-element.cjs +18 -61
- package/skills/excalidraw-skill/scripts/delete-element.cjs +12 -42
- package/skills/excalidraw-skill/scripts/export-elements.cjs +17 -44
- package/skills/excalidraw-skill/scripts/gh-helper.cjs +58 -0
- package/skills/excalidraw-skill/scripts/healthcheck.cjs +8 -29
- package/skills/excalidraw-skill/scripts/import-elements.cjs +20 -70
- package/skills/excalidraw-skill/scripts/update-element.cjs +19 -63
- package/tsconfig.json +3 -2
- package/vite.config.js +3 -10
- package/dist/frontend/assets/arc-Cc3ncJ1n.js +0 -1
- package/dist/frontend/assets/channel-BQSIb3i3.js +0 -1
- package/dist/frontend/assets/classDiagram-v2-d5a6b087-BgB8AG2e.js +0 -2
- package/dist/frontend/assets/clone-BoZziNL9.js +0 -1
- package/dist/frontend/assets/flowDiagram-v2-96b9c2cf-Z3H2d3Wj.js +0 -1
- package/dist/frontend/assets/flowDiagram-v2-ffc7f31a-CIQOMghC.js +0 -1
- package/dist/frontend/assets/index-DIz4WrSB.js +0 -349
- package/dist/frontend/assets/zipObject-DMfHW2o8.js +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2279
- package/dist/index.js.map +0 -1
- package/dist/remote.d.ts +0 -5
- package/dist/remote.d.ts.map +0 -1
- package/dist/remote.js +0 -129
- package/dist/remote.js.map +0 -1
- package/dist/server.d.ts +0 -4
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -1208
- package/dist/server.js.map +0 -1
- package/dist/target.d.ts +0 -38
- package/dist/target.d.ts.map +0 -1
- package/dist/target.js +0 -225
- package/dist/target.js.map +0 -1
- package/dist/types.d.ts +0 -228
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -45
- package/dist/types.js.map +0 -1
- package/dist/utils/auth.d.ts +0 -14
- package/dist/utils/auth.d.ts.map +0 -1
- package/dist/utils/auth.js +0 -67
- package/dist/utils/auth.js.map +0 -1
- package/dist/utils/github.d.ts +0 -24
- package/dist/utils/github.d.ts.map +0 -1
- package/dist/utils/github.js +0 -132
- package/dist/utils/github.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -4
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -25
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/r2store.d.ts +0 -12
- package/dist/utils/r2store.d.ts.map +0 -1
- package/dist/utils/r2store.js +0 -75
- package/dist/utils/r2store.js.map +0 -1
- package/frontend/drop.png +0 -0
- package/frontend/index.html +0 -339
- package/frontend/src/App.tsx +0 -1091
- package/frontend/src/main.tsx +0 -15
- package/frontend/src/utils/ghSync.ts +0 -234
- package/frontend/src/utils/mermaidConverter.ts +0 -43
- package/frontend/src/utils/webmcp.ts +0 -265
- package/scripts/check-local-bind.mjs +0 -164
- package/scripts/postinstall.mjs +0 -23
- package/scripts/publish-pages.sh +0 -39
- package/scripts/seed-r2.mjs +0 -9
- package/src/cli.ts +0 -528
- package/src/index.ts +0 -2538
- package/src/remote.ts +0 -92
- package/src/server.ts +0 -1349
- package/src/target.ts +0 -198
- package/src/types.ts +0 -336
- package/src/utils/auth.ts +0 -61
- package/src/utils/github.ts +0 -121
- package/src/utils/logger.ts +0 -35
- package/src/utils/r2store.ts +0 -70
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { spawn } from 'node:child_process';
|
|
4
|
-
import { basename, dirname, join } from 'node:path';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
|
|
7
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
-
const __dirname = dirname(__filename);
|
|
9
|
-
const repoRoot = join(__dirname, '..');
|
|
10
|
-
const serverPath = join(repoRoot, 'dist', 'server.js');
|
|
11
|
-
const runtime = process.env.CANVAS_RUNTIME || process.execPath;
|
|
12
|
-
const runtimeName = basename(runtime).toLowerCase();
|
|
13
|
-
const runtimeArgs = runtimeName.includes('bun') ? ['run', serverPath] : [serverPath];
|
|
14
|
-
const port = Number(process.env.PORT || 32000 + Math.floor(Math.random() * 2000));
|
|
15
|
-
const startupTimeoutMs = 5000;
|
|
16
|
-
const duplicateExitTimeoutMs = 2500;
|
|
17
|
-
|
|
18
|
-
function spawnCanvas(host) {
|
|
19
|
-
const env = {
|
|
20
|
-
...process.env,
|
|
21
|
-
PORT: String(port),
|
|
22
|
-
LOG_LEVEL: 'error',
|
|
23
|
-
};
|
|
24
|
-
if (host) {
|
|
25
|
-
env.HOST = host;
|
|
26
|
-
} else {
|
|
27
|
-
delete env.HOST;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return spawn(runtime, runtimeArgs, {
|
|
31
|
-
cwd: repoRoot,
|
|
32
|
-
env,
|
|
33
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function collectOutput(child) {
|
|
38
|
-
let output = '';
|
|
39
|
-
child.stdout.on('data', chunk => {
|
|
40
|
-
output += chunk.toString();
|
|
41
|
-
});
|
|
42
|
-
child.stderr.on('data', chunk => {
|
|
43
|
-
output += chunk.toString();
|
|
44
|
-
});
|
|
45
|
-
return () => output.trim();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async function endpointResponds(url, timeoutMs = 500) {
|
|
49
|
-
const controller = new AbortController();
|
|
50
|
-
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
51
|
-
try {
|
|
52
|
-
const response = await fetch(url, { signal: controller.signal });
|
|
53
|
-
return response.ok;
|
|
54
|
-
} catch {
|
|
55
|
-
return false;
|
|
56
|
-
} finally {
|
|
57
|
-
clearTimeout(timeout);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async function waitForHealth(url, timeoutMs, child, getOutput) {
|
|
62
|
-
const start = Date.now();
|
|
63
|
-
while (Date.now() - start < timeoutMs) {
|
|
64
|
-
if (child && (child.exitCode !== null || child.signalCode !== null)) {
|
|
65
|
-
const status = child.exitCode !== null ? `exit code ${child.exitCode}` : `signal ${child.signalCode}`;
|
|
66
|
-
const output = getOutput ? getOutput() : '';
|
|
67
|
-
throw new Error(`Canvas server exited before health check with ${status}.${output ? `\n${output}` : ''}`);
|
|
68
|
-
}
|
|
69
|
-
if (await endpointResponds(url)) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
73
|
-
}
|
|
74
|
-
throw new Error(`Timed out waiting for ${url}`);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function waitForExit(child, timeoutMs) {
|
|
78
|
-
return new Promise(resolve => {
|
|
79
|
-
const timeout = setTimeout(() => {
|
|
80
|
-
cleanup();
|
|
81
|
-
resolve(null);
|
|
82
|
-
}, timeoutMs);
|
|
83
|
-
|
|
84
|
-
const onExit = (code, signal) => {
|
|
85
|
-
cleanup();
|
|
86
|
-
resolve({ code, signal });
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
const cleanup = () => {
|
|
90
|
-
clearTimeout(timeout);
|
|
91
|
-
child.off('exit', onExit);
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
child.once('exit', onExit);
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async function killChild(child) {
|
|
99
|
-
if (child.exitCode !== null || child.signalCode !== null) return;
|
|
100
|
-
child.kill('SIGTERM');
|
|
101
|
-
const exit = await waitForExit(child, 1000);
|
|
102
|
-
if (!exit) {
|
|
103
|
-
child.kill('SIGKILL');
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
let first;
|
|
108
|
-
let second;
|
|
109
|
-
let bindAll;
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
first = spawnCanvas();
|
|
113
|
-
const firstOutput = collectOutput(first);
|
|
114
|
-
|
|
115
|
-
await waitForHealth(`http://127.0.0.1:${port}/health`, startupTimeoutMs, first, firstOutput);
|
|
116
|
-
|
|
117
|
-
if (await endpointResponds(`http://[::1]:${port}/health`)) {
|
|
118
|
-
throw new Error('Default canvas server should not listen on IPv6 loopback.');
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
second = spawnCanvas();
|
|
122
|
-
const secondOutput = collectOutput(second);
|
|
123
|
-
const duplicateExit = await waitForExit(second, duplicateExitTimeoutMs);
|
|
124
|
-
|
|
125
|
-
if (!duplicateExit) {
|
|
126
|
-
throw new Error('Second canvas server stayed running on the same local port.');
|
|
127
|
-
}
|
|
128
|
-
if (duplicateExit.code === 0) {
|
|
129
|
-
throw new Error('Second canvas server exited successfully instead of failing.');
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
bindAll = spawnCanvas('::');
|
|
133
|
-
const bindAllOutput = collectOutput(bindAll);
|
|
134
|
-
const bindAllExit = await waitForExit(bindAll, duplicateExitTimeoutMs);
|
|
135
|
-
|
|
136
|
-
if (!bindAllExit) {
|
|
137
|
-
throw new Error('Canvas server with HOST=:: stayed running while a loopback server was active.');
|
|
138
|
-
}
|
|
139
|
-
if (bindAllExit.code === 0) {
|
|
140
|
-
throw new Error('Canvas server with HOST=:: exited successfully instead of failing.');
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
console.log(
|
|
144
|
-
`Local bind check passed on port ${port} using ${runtimeName}: ` +
|
|
145
|
-
'default bind is IPv4 loopback only, duplicate startup fails, and HOST=:: is guarded.'
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
await killChild(first);
|
|
149
|
-
if (process.env.DEBUG_BIND_CHECK && firstOutput()) {
|
|
150
|
-
console.error(firstOutput());
|
|
151
|
-
}
|
|
152
|
-
if (process.env.DEBUG_BIND_CHECK && secondOutput()) {
|
|
153
|
-
console.error(secondOutput());
|
|
154
|
-
}
|
|
155
|
-
if (process.env.DEBUG_BIND_CHECK && bindAllOutput()) {
|
|
156
|
-
console.error(bindAllOutput());
|
|
157
|
-
}
|
|
158
|
-
} catch (error) {
|
|
159
|
-
if (bindAll) await killChild(bindAll);
|
|
160
|
-
if (second) await killChild(second);
|
|
161
|
-
if (first) await killChild(first);
|
|
162
|
-
console.error((error instanceof Error) ? error.message : String(error));
|
|
163
|
-
process.exit(1);
|
|
164
|
-
}
|
package/scripts/postinstall.mjs
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Postinstall hint for `npm i -D excalidrop`.
|
|
3
|
-
// Print-only: npm blocks interactive stdin during postinstall, so the actual
|
|
4
|
-
// setup (port pick + agent install) happens via `npx excalidrop init`.
|
|
5
|
-
if (process.env.EXCALIDROP_NO_POSTINSTALL) process.exit(0);
|
|
6
|
-
|
|
7
|
-
console.log(`
|
|
8
|
-
excalidrop installed.
|
|
9
|
-
|
|
10
|
-
Remote canvas (recommended — GitHub-backed, works on any repo):
|
|
11
|
-
|
|
12
|
-
npx excalidrop setup
|
|
13
|
-
|
|
14
|
-
checks gh auth, publishes the viewer to gh-pages, prints the app-install
|
|
15
|
-
link and verifies the site is live. Then tell your agent:
|
|
16
|
-
|
|
17
|
-
switch_remote { target: "<your Pages URL>" }
|
|
18
|
-
|
|
19
|
-
Local canvas instead:
|
|
20
|
-
|
|
21
|
-
npx excalidrop init # picks a free port, offers AI-agent install
|
|
22
|
-
npx excalidrop up
|
|
23
|
-
`);
|
package/scripts/publish-pages.sh
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Zero-config publish: auto-detects repo from git remote, enables Pages via gh.
|
|
3
|
-
# Usage: ./scripts/publish-pages.sh (or npx excalidrop publish)
|
|
4
|
-
set -euo pipefail
|
|
5
|
-
PKG_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
6
|
-
REPO="${REPO_SLUG:-$(git config --get remote.origin.url | sed -E -e 's/\.git$//' -e 's#.*github.com[:/]##')}"
|
|
7
|
-
echo "Repo: $REPO"
|
|
8
|
-
WORK=$(mktemp -d)
|
|
9
|
-
trap "rm -rf $WORK" EXIT
|
|
10
|
-
npm --prefix "$PKG_DIR" run build:frontend >/dev/null
|
|
11
|
-
git clone --depth 1 --branch gh-pages "git@github.com:${REPO}.git" "$WORK" 2>/dev/null || { git init -b gh-pages "$WORK"; git -C "$WORK" remote add origin "git@github.com:${REPO}.git"; }
|
|
12
|
-
cp -r "$PKG_DIR/dist/frontend/"* "$WORK"/
|
|
13
|
-
cp "$PKG_DIR/canvas.excalidraw" "$WORK"/ 2>/dev/null || echo '{"type":"excalidraw","version":2,"elements":[]}' > "$WORK/canvas.excalidraw"
|
|
14
|
-
git -C "$WORK" add -A && git -C "$WORK" -c user.name=excalidrop -c user.email=excalidrop@local commit -m "excalidrop: publish viewer" --allow-empty && git -C "$WORK" push origin gh-pages --force
|
|
15
|
-
# Seed `main` on empty repos and keep it the default branch.
|
|
16
|
-
# Without this, gh-pages is the only branch and GitHub makes it the default.
|
|
17
|
-
# Never touch the default branch of repos that already have a `main`.
|
|
18
|
-
if ! gh api "repos/${REPO}/git/ref/heads/main" >/dev/null 2>&1; then
|
|
19
|
-
SEED=$(mktemp -d)
|
|
20
|
-
git init -b main "$SEED" >/dev/null
|
|
21
|
-
# Empty commit only: main must exist so it stays the default branch,
|
|
22
|
-
# but setup puts NO files there (no canvas, no README). The canvas
|
|
23
|
-
# lives on gh-pages until the agent's first draw commits it.
|
|
24
|
-
git -C "$SEED" -c user.name=excalidrop -c user.email=excalidrop@local commit --allow-empty -m "init main" --quiet
|
|
25
|
-
git -C "$SEED" remote add origin "git@github.com:${REPO}.git"
|
|
26
|
-
git -C "$SEED" push origin main >/dev/null
|
|
27
|
-
rm -rf "$SEED"
|
|
28
|
-
if [ "$(gh api "repos/${REPO}" --jq '.default_branch' 2>/dev/null)" != "main" ]; then
|
|
29
|
-
gh api "repos/${REPO}" -X PATCH -f default_branch=main >/dev/null
|
|
30
|
-
fi
|
|
31
|
-
fi
|
|
32
|
-
# Point Pages at the gh-pages branch (PUT works whether Pages is on or off)
|
|
33
|
-
CUR="$(gh api "repos/${REPO}/pages" --jq '.source.branch' 2>/dev/null || echo none)"
|
|
34
|
-
if [ "$CUR" = "none" ]; then
|
|
35
|
-
gh api "repos/${REPO}/pages" -X POST -f build_type=legacy -f 'source[branch]=gh-pages' -f 'source[path]=/' >/dev/null
|
|
36
|
-
elif [ "$CUR" != "gh-pages" ]; then
|
|
37
|
-
gh api "repos/${REPO}/pages" -X PUT -f build_type=legacy -f 'source[branch]=gh-pages' -f 'source[path]=/' >/dev/null
|
|
38
|
-
fi
|
|
39
|
-
echo "Pages: https://$(echo "$REPO" | tr '[:upper:]' '[:lower:]' | cut -d/ -f1).github.io/$(echo "$REPO" | cut -d/ -f2)/"
|
package/scripts/seed-r2.mjs
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Seeds canvas.excalidraw into R2 so Pages + API share state. No-op without creds.
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
const root = path.resolve(process.cwd(), '../..');
|
|
6
|
-
const sceneFile = path.join(root, 'canvas.excalidraw');
|
|
7
|
-
if (!fs.existsSync(sceneFile)) { console.log('no canvas.excalidraw, skipping'); process.exit(0); }
|
|
8
|
-
if (!process.env.CLOUDFLARER2TOKEN && !process.env.R2_ACCESS_KEY_ID) { console.log('no R2 creds, skipping'); process.exit(0); }
|
|
9
|
-
console.log('R2 seed: credentials present; server lazy-loads/persists at runtime. OK');
|