excalidrop 0.1.1

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.
Files changed (234) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +411 -0
  3. package/dist/cli.d.ts +24 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +533 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/frontend/assets/Assistant-Bold-gm-uSS1B.woff2 +0 -0
  8. package/dist/frontend/assets/Assistant-Medium-DrcxCXg3.woff2 +0 -0
  9. package/dist/frontend/assets/Assistant-Regular-DVxZuzxb.woff2 +0 -0
  10. package/dist/frontend/assets/Assistant-SemiBold-SCI4bEL9.woff2 +0 -0
  11. package/dist/frontend/assets/Tableau10-B-NsZVaP.js +1 -0
  12. package/dist/frontend/assets/_commonjs-dynamic-modules-TDtrdbi3.js +1 -0
  13. package/dist/frontend/assets/advancedFormat-bKUmsig-.js +1 -0
  14. package/dist/frontend/assets/ar-SA-G6X2FPQ2-C7K_UR3P.js +10 -0
  15. package/dist/frontend/assets/arc-BI_FJWE7.js +1 -0
  16. package/dist/frontend/assets/array-BKyUJesY.js +1 -0
  17. package/dist/frontend/assets/az-AZ-76LH7QW2-PkhuRuSr.js +1 -0
  18. package/dist/frontend/assets/band-dPffDWoQ.js +1 -0
  19. package/dist/frontend/assets/bg-BG-XCXSNQG7-CgLRSYTl.js +5 -0
  20. package/dist/frontend/assets/blockDiagram-38ab4fdb-BFdBRYSn.js +118 -0
  21. package/dist/frontend/assets/blockDiagram-68f4deed-Ynbqr7bQ.js +118 -0
  22. package/dist/frontend/assets/bn-BD-2XOGV67Q-CEvkU0mz.js +5 -0
  23. package/dist/frontend/assets/c4Diagram-15b5d702-Dm7F1Pn_.js +10 -0
  24. package/dist/frontend/assets/c4Diagram-3d4e48cf-COkK-e67.js +10 -0
  25. package/dist/frontend/assets/ca-ES-6MX7JW3Y-DzP6q9bE.js +8 -0
  26. package/dist/frontend/assets/channel-BqCiG5n3.js +1 -0
  27. package/dist/frontend/assets/classDiagram-70f12bd4-CRzulwvH.js +2 -0
  28. package/dist/frontend/assets/classDiagram-d40c83e7-DNbA-n-a.js +2 -0
  29. package/dist/frontend/assets/classDiagram-v2-d5a6b087-l-GglywH.js +2 -0
  30. package/dist/frontend/assets/classDiagram-v2-f2320105-B_TY1zoc.js +2 -0
  31. package/dist/frontend/assets/clone-B6Jqcrku.js +1 -0
  32. package/dist/frontend/assets/createText-2e5e7dd3-DB_k52Pn.js +5 -0
  33. package/dist/frontend/assets/createText-d213de94-D-G49giw.js +5 -0
  34. package/dist/frontend/assets/cs-CZ-2BRQDIVT-Bf4TOzpR.js +11 -0
  35. package/dist/frontend/assets/cytoscape-cose-bilkent-DQYypj0P.js +331 -0
  36. package/dist/frontend/assets/da-DK-5WZEPLOC-jO-5kyXb.js +5 -0
  37. package/dist/frontend/assets/de-DE-XR44H4JA-BkNXWOVh.js +8 -0
  38. package/dist/frontend/assets/directory-open-01563666-DWU9wJ6I.js +1 -0
  39. package/dist/frontend/assets/directory-open-4ed118d0-BzWybGaI.js +1 -0
  40. package/dist/frontend/assets/edges-332bd1c7-CVvMtkTa.js +4 -0
  41. package/dist/frontend/assets/edges-e0da2a9e-DQBAvC8-.js +4 -0
  42. package/dist/frontend/assets/el-GR-BZB4AONW-Dv7Y9hMk.js +10 -0
  43. package/dist/frontend/assets/elk.bundled-YVS3PsMH.js +26 -0
  44. package/dist/frontend/assets/erDiagram-880f2ed8-BjBeR38f.js +51 -0
  45. package/dist/frontend/assets/erDiagram-9861fffd-B2Bi3R45.js +51 -0
  46. package/dist/frontend/assets/es-ES-U4NZUMDT-CWhs0SQY.js +9 -0
  47. package/dist/frontend/assets/eu-ES-A7QVB2H4-BfkFwc3e.js +11 -0
  48. package/dist/frontend/assets/fa-IR-HGAKTJCU-BgWzSj46.js +8 -0
  49. package/dist/frontend/assets/fi-FI-Z5N7JZ37-CUyvkum-.js +6 -0
  50. package/dist/frontend/assets/file-open-002ab408-DIuFHtCF.js +1 -0
  51. package/dist/frontend/assets/file-open-7c801643-684qeFg4.js +1 -0
  52. package/dist/frontend/assets/file-save-3189631c-x92wctJd.js +1 -0
  53. package/dist/frontend/assets/file-save-745eba88-Bb9F9Kg7.js +1 -0
  54. package/dist/frontend/assets/flowDb-7c981674-BSZyyVBf.js +10 -0
  55. package/dist/frontend/assets/flowDb-956e92f1-BC3-CLkF.js +10 -0
  56. package/dist/frontend/assets/flowDiagram-66a62f08-H57DAvmM.js +4 -0
  57. package/dist/frontend/assets/flowDiagram-cbd28bf7-Bw4Z2nBD.js +4 -0
  58. package/dist/frontend/assets/flowDiagram-v2-96b9c2cf-CBjbm_oB.js +1 -0
  59. package/dist/frontend/assets/flowDiagram-v2-ffc7f31a-CoQufPp2.js +1 -0
  60. package/dist/frontend/assets/flowchart-elk-definition-36e2d292-1kZNdf3X.js +114 -0
  61. package/dist/frontend/assets/flowchart-elk-definition-4a651766-DDhG2Esi.js +114 -0
  62. package/dist/frontend/assets/fr-FR-RHASNOE6-7xzoRwbd.js +9 -0
  63. package/dist/frontend/assets/ganttDiagram-04f9e578-CtUSsXCz.js +257 -0
  64. package/dist/frontend/assets/ganttDiagram-c361ad54-K42AklFY.js +257 -0
  65. package/dist/frontend/assets/gitGraphDiagram-21fc4d3e-uW6XA6Y6.js +70 -0
  66. package/dist/frontend/assets/gitGraphDiagram-72cf32ee-CCNbhnBg.js +70 -0
  67. package/dist/frontend/assets/gl-ES-HMX3MZ6V-CXuDDwNP.js +10 -0
  68. package/dist/frontend/assets/graph-CYOmcSYN.js +1 -0
  69. package/dist/frontend/assets/graph-o42dOfI7.js +1 -0
  70. package/dist/frontend/assets/he-IL-6SHJWFNN-O9dzh9EM.js +10 -0
  71. package/dist/frontend/assets/hi-IN-IWLTKZ5I-DlrOXhWs.js +4 -0
  72. package/dist/frontend/assets/hu-HU-A5ZG7DT2-C3eNg-uI.js +7 -0
  73. package/dist/frontend/assets/id-ID-SAP4L64H-6iM4pI5c.js +10 -0
  74. package/dist/frontend/assets/image-blob-reduce.esm-B6b2_-a4.js +7 -0
  75. package/dist/frontend/assets/index-3862675e-DrvLhypC.js +1 -0
  76. package/dist/frontend/assets/index-6079d271-BgVTRqg2.js +1 -0
  77. package/dist/frontend/assets/index-BRA5OktX.css +1 -0
  78. package/dist/frontend/assets/index-D-cr7jpJ.js +349 -0
  79. package/dist/frontend/assets/index-DGmpr33w.js +3 -0
  80. package/dist/frontend/assets/index-HkUXslJy.js +87 -0
  81. package/dist/frontend/assets/infoDiagram-4a4f5b27-ZxmAcaW1.js +7 -0
  82. package/dist/frontend/assets/infoDiagram-f8f76790-Bn-PhiFG.js +7 -0
  83. package/dist/frontend/assets/init-Gi6I4Gst.js +1 -0
  84. package/dist/frontend/assets/it-IT-JPQ66NNP-B26NQzGp.js +11 -0
  85. package/dist/frontend/assets/ja-JP-DBVTYXUO-CB0fvnYJ.js +8 -0
  86. package/dist/frontend/assets/journeyDiagram-29694f62-ggDKs06f.js +139 -0
  87. package/dist/frontend/assets/journeyDiagram-49397b02-pdDS-n-z.js +139 -0
  88. package/dist/frontend/assets/kaa-6HZHGXH3-YNdBdcwJ.js +1 -0
  89. package/dist/frontend/assets/kab-KAB-ZGHBKWFO-D86pwZO0.js +8 -0
  90. package/dist/frontend/assets/katex-ChWnQ-fc.js +261 -0
  91. package/dist/frontend/assets/kk-KZ-P5N5QNE5-CpG5oheM.js +1 -0
  92. package/dist/frontend/assets/km-KH-HSX4SM5Z-DYOZ3Azw.js +11 -0
  93. package/dist/frontend/assets/ko-KR-MTYHY66A-BHorm6lC.js +9 -0
  94. package/dist/frontend/assets/ku-TR-6OUDTVRD-CM9RgEHv.js +9 -0
  95. package/dist/frontend/assets/layout-CCtkxrAf.js +1 -0
  96. package/dist/frontend/assets/layout-DW9Qf-At.js +1 -0
  97. package/dist/frontend/assets/line-DvZfgg9P.js +1 -0
  98. package/dist/frontend/assets/linear-FwFrGRfa.js +1 -0
  99. package/dist/frontend/assets/lt-LT-XHIRWOB4-DvriKXBj.js +3 -0
  100. package/dist/frontend/assets/lv-LV-5QDEKY6T-DzQpwk87.js +7 -0
  101. package/dist/frontend/assets/mindmap-definition-ac74a2e8-DsRo8f2w.js +95 -0
  102. package/dist/frontend/assets/mindmap-definition-fc14e90a-dQ9reluI.js +95 -0
  103. package/dist/frontend/assets/mr-IN-CRQNXWMA-C7RzxxP5.js +13 -0
  104. package/dist/frontend/assets/my-MM-5M5IBNSE-B-RRuy29.js +1 -0
  105. package/dist/frontend/assets/nb-NO-T6EIAALU-B47x16Ik.js +10 -0
  106. package/dist/frontend/assets/nl-NL-IS3SIHDZ-BxAKoQne.js +8 -0
  107. package/dist/frontend/assets/nn-NO-6E72VCQL-dfpbEDSZ.js +8 -0
  108. package/dist/frontend/assets/oc-FR-POXYY2M6-gv6geBjV.js +8 -0
  109. package/dist/frontend/assets/ordinal-Cboi1Yqb.js +1 -0
  110. package/dist/frontend/assets/pa-IN-N4M65BXN-CY30-qH7.js +4 -0
  111. package/dist/frontend/assets/path-CbwjOpE9.js +1 -0
  112. package/dist/frontend/assets/pica-DWYGHLQV.js +7 -0
  113. package/dist/frontend/assets/pie-CDiWh1rj.js +1 -0
  114. package/dist/frontend/assets/pieDiagram-421022e6-Bgy-duyf.js +35 -0
  115. package/dist/frontend/assets/pieDiagram-8a3498a8-DH7FsbPK.js +35 -0
  116. package/dist/frontend/assets/pl-PL-T2D74RX3-TrHugsIA.js +9 -0
  117. package/dist/frontend/assets/pt-BR-5N22H2LF-CJxdFp9c.js +9 -0
  118. package/dist/frontend/assets/pt-PT-UZXXM6DQ-CB-1q6YJ.js +9 -0
  119. package/dist/frontend/assets/quadrantDiagram-0957ecba-DcwYI1oi.js +7 -0
  120. package/dist/frontend/assets/quadrantDiagram-120e2f19-CvHU5a9v.js +7 -0
  121. package/dist/frontend/assets/requirementDiagram-23d650b8-tdagN8HP.js +52 -0
  122. package/dist/frontend/assets/requirementDiagram-deff3bca-BMGM-fSI.js +52 -0
  123. package/dist/frontend/assets/ro-RO-JPDTUUEW-DQq9DBOd.js +11 -0
  124. package/dist/frontend/assets/roundRect-0PYZxl1G.js +1 -0
  125. package/dist/frontend/assets/ru-RU-B4JR7IUQ-CWX32rfh.js +9 -0
  126. package/dist/frontend/assets/sankeyDiagram-04a897e0-3i6zWpY2.js +8 -0
  127. package/dist/frontend/assets/sankeyDiagram-23345273-ncj1Ol7S.js +8 -0
  128. package/dist/frontend/assets/sankeyLinkHorizontal-DgqkLiUE.js +1 -0
  129. package/dist/frontend/assets/selectAll-DJwesbwT.js +1 -0
  130. package/dist/frontend/assets/sequenceDiagram-17ac3bff-ChyKKRZA.js +122 -0
  131. package/dist/frontend/assets/sequenceDiagram-704730f1-D57_wP9k.js +122 -0
  132. package/dist/frontend/assets/si-LK-N5RQ5JYF-Lkc5ZxyG.js +1 -0
  133. package/dist/frontend/assets/sk-SK-C5VTKIMK-DyvYXjqZ.js +6 -0
  134. package/dist/frontend/assets/sl-SI-NN7IZMDC-D_MvP9Rh.js +6 -0
  135. package/dist/frontend/assets/stateDiagram-587899a1-OjFTnFLS.js +1 -0
  136. package/dist/frontend/assets/stateDiagram-9c5f0230-BzU36S5C.js +1 -0
  137. package/dist/frontend/assets/stateDiagram-v2-51a3dcff-CfX1qo7U.js +1 -0
  138. package/dist/frontend/assets/stateDiagram-v2-d93cdb3a-BH7Ud4sU.js +1 -0
  139. package/dist/frontend/assets/styles-2ab5d517-CA8x9Nh5.js +116 -0
  140. package/dist/frontend/assets/styles-5f03d8d2-BnO2pLhV.js +160 -0
  141. package/dist/frontend/assets/styles-6aaf32cf-COnot1ea.js +207 -0
  142. package/dist/frontend/assets/styles-9a916d00-C3QkBgTF.js +160 -0
  143. package/dist/frontend/assets/styles-c10674c1-CPAG2_rr.js +116 -0
  144. package/dist/frontend/assets/styles-edf9a4b0-B8Q9fyu0.js +207 -0
  145. package/dist/frontend/assets/subset-shared.chunk.js +84 -0
  146. package/dist/frontend/assets/subset-worker.chunk.js +1 -0
  147. package/dist/frontend/assets/sv-SE-XGPEYMSR-t6voGQSI.js +10 -0
  148. package/dist/frontend/assets/svgDrawCommon-08f97a94-CdT21LWf.js +1 -0
  149. package/dist/frontend/assets/svgDrawCommon-3ba9043b-D1MU7jAE.js +1 -0
  150. package/dist/frontend/assets/ta-IN-2NMHFXQM-7VmfDDyV.js +9 -0
  151. package/dist/frontend/assets/th-TH-HPSO5L25-B5rLEY9P.js +2 -0
  152. package/dist/frontend/assets/timeline-definition-7e6b55e7-BIcL44O_.js +61 -0
  153. package/dist/frontend/assets/timeline-definition-85554ec2-TgrYYwpU.js +61 -0
  154. package/dist/frontend/assets/tr-TR-DEFEU3FU-0CgOHXTn.js +7 -0
  155. package/dist/frontend/assets/uk-UA-QMV73CPH-CzSFsIsx.js +6 -0
  156. package/dist/frontend/assets/union-CnQAJu0l.js +1 -0
  157. package/dist/frontend/assets/vi-VN-M7AON7JQ-Bhx3rYU9.js +5 -0
  158. package/dist/frontend/assets/xml-BOsq7VnW.js +1 -0
  159. package/dist/frontend/assets/xychartDiagram-b6496bcd-BMKDop6v.js +7 -0
  160. package/dist/frontend/assets/xychartDiagram-e933f94c-DAWithrN.js +7 -0
  161. package/dist/frontend/assets/zh-CN-LNUGB5OW-Br52_wH4.js +10 -0
  162. package/dist/frontend/assets/zh-HK-E62DVLB3-Cj6mnIQ9.js +1 -0
  163. package/dist/frontend/assets/zh-TW-RAJ6MFWO-yLEsVBbC.js +9 -0
  164. package/dist/frontend/assets/zipObject-BeXj5PVd.js +1 -0
  165. package/dist/frontend/index.html +339 -0
  166. package/dist/index.d.ts +4 -0
  167. package/dist/index.d.ts.map +1 -0
  168. package/dist/index.js +2305 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/remote.d.ts +4 -0
  171. package/dist/remote.d.ts.map +1 -0
  172. package/dist/remote.js +133 -0
  173. package/dist/remote.js.map +1 -0
  174. package/dist/server.d.ts +4 -0
  175. package/dist/server.d.ts.map +1 -0
  176. package/dist/server.js +1217 -0
  177. package/dist/server.js.map +1 -0
  178. package/dist/target.d.ts +41 -0
  179. package/dist/target.d.ts.map +1 -0
  180. package/dist/target.js +244 -0
  181. package/dist/target.js.map +1 -0
  182. package/dist/types.d.ts +228 -0
  183. package/dist/types.d.ts.map +1 -0
  184. package/dist/types.js +53 -0
  185. package/dist/types.js.map +1 -0
  186. package/dist/utils/auth.d.ts +15 -0
  187. package/dist/utils/auth.d.ts.map +1 -0
  188. package/dist/utils/auth.js +68 -0
  189. package/dist/utils/auth.js.map +1 -0
  190. package/dist/utils/github.d.ts +26 -0
  191. package/dist/utils/github.d.ts.map +1 -0
  192. package/dist/utils/github.js +111 -0
  193. package/dist/utils/github.js.map +1 -0
  194. package/dist/utils/logger.d.ts +4 -0
  195. package/dist/utils/logger.d.ts.map +1 -0
  196. package/dist/utils/logger.js +25 -0
  197. package/dist/utils/logger.js.map +1 -0
  198. package/dist/utils/r2store.d.ts +19 -0
  199. package/dist/utils/r2store.d.ts.map +1 -0
  200. package/dist/utils/r2store.js +75 -0
  201. package/dist/utils/r2store.js.map +1 -0
  202. package/frontend/index.html +338 -0
  203. package/frontend/src/App.tsx +1091 -0
  204. package/frontend/src/main.tsx +15 -0
  205. package/frontend/src/utils/ghSync.ts +171 -0
  206. package/frontend/src/utils/mermaidConverter.ts +49 -0
  207. package/frontend/src/utils/webmcp.ts +285 -0
  208. package/package.json +101 -0
  209. package/scripts/check-local-bind.mjs +164 -0
  210. package/scripts/postinstall.mjs +23 -0
  211. package/scripts/publish-pages.sh +39 -0
  212. package/scripts/seed-r2.mjs +9 -0
  213. package/skills/excalidraw-skill/SKILL.md +303 -0
  214. package/skills/excalidraw-skill/evals/evals.json +23 -0
  215. package/skills/excalidraw-skill/references/cheatsheet.md +142 -0
  216. package/skills/excalidraw-skill/scripts/clear-canvas.cjs +38 -0
  217. package/skills/excalidraw-skill/scripts/create-element.cjs +68 -0
  218. package/skills/excalidraw-skill/scripts/delete-element.cjs +48 -0
  219. package/skills/excalidraw-skill/scripts/export-elements.cjs +53 -0
  220. package/skills/excalidraw-skill/scripts/healthcheck.cjs +35 -0
  221. package/skills/excalidraw-skill/scripts/import-elements.cjs +81 -0
  222. package/skills/excalidraw-skill/scripts/update-element.cjs +70 -0
  223. package/src/cli.ts +559 -0
  224. package/src/index.ts +2557 -0
  225. package/src/remote.ts +96 -0
  226. package/src/server.ts +1349 -0
  227. package/src/target.ts +208 -0
  228. package/src/types.ts +338 -0
  229. package/src/utils/auth.ts +61 -0
  230. package/src/utils/github.ts +93 -0
  231. package/src/utils/logger.ts +35 -0
  232. package/src/utils/r2store.ts +76 -0
  233. package/tsconfig.json +50 -0
  234. package/vite.config.js +37 -0
package/dist/cli.js ADDED
@@ -0,0 +1,533 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * excalidrop — per-project Excalidraw canvas + MCP server setup.
4
+ *
5
+ * Modelled on the `chrome-devtools-mcp` install pattern (`npx -y <pkg>` +
6
+ * `mcpServers` JSON), with one addition: per-project dynamic port selection
7
+ * so multiple checkouts can run their own canvas concurrently.
8
+ *
9
+ * How the dynamic port works:
10
+ * - `excalidrop init` picks a free port (default scan from 3030) and writes
11
+ * it to `.excalidrop.json` in the project root.
12
+ * - `excalidrop mcp` (what the AI agent runs via stdio) resolves that same
13
+ * file by walking up from cwd, so each project transparently gets its own
14
+ * canvas URL with nothing hardcoded in the agent config.
15
+ *
16
+ * Commands:
17
+ * init pick a port, write .excalidrop.json + .mcp.json, offer agent install
18
+ * up start the canvas server on this project's port
19
+ * mcp run the MCP stdio server pointed at this project's canvas (for agents)
20
+ * status show resolved port + canvas health
21
+ * add print / run AI-agent install commands
22
+ */
23
+ import { spawn, spawnSync } from 'node:child_process';
24
+ import { createConnection } from 'node:net';
25
+ import fs from 'node:fs';
26
+ import path from 'node:path';
27
+ import readline from 'node:readline';
28
+ import { fileURLToPath } from 'node:url';
29
+ const __filename = fileURLToPath(import.meta.url);
30
+ const __dirname = path.dirname(__filename);
31
+ const CONFIG_NAME = '.excalidrop.json';
32
+ const MCP_JSON = '.mcp.json';
33
+ const SERVER_ENTRY = path.join(__dirname, 'server.js');
34
+ const MCP_ENTRY = path.join(__dirname, 'index.js');
35
+ const DEFAULT_START_PORT = 3030;
36
+ const PORT_SCAN_SIZE = 200;
37
+ // ─── port utils ──────────────────────────────────────────────────────────────
38
+ function isPortFree(port, host = '127.0.0.1', timeoutMs = 300) {
39
+ return new Promise((resolve) => {
40
+ let settled = false;
41
+ const socket = createConnection({ host, port });
42
+ const done = (free) => {
43
+ if (settled)
44
+ return;
45
+ settled = true;
46
+ socket.destroy();
47
+ resolve(free);
48
+ };
49
+ socket.setTimeout(timeoutMs);
50
+ socket.once('connect', () => done(false)); // something listens → taken
51
+ socket.once('timeout', () => done(true));
52
+ socket.once('error', () => done(true)); // ECONNREFUSED → free
53
+ });
54
+ }
55
+ async function findFreePort(preferred, start = DEFAULT_START_PORT) {
56
+ if (preferred && preferred > 0 && preferred < 65536 && (await isPortFree(preferred))) {
57
+ return preferred;
58
+ }
59
+ for (let port = start; port < start + PORT_SCAN_SIZE; port++) {
60
+ if (await isPortFree(port))
61
+ return port;
62
+ }
63
+ // Fallback: random high port
64
+ for (let i = 0; i < 50; i++) {
65
+ const port = 32000 + Math.floor(Math.random() * 2000);
66
+ if (await isPortFree(port))
67
+ return port;
68
+ }
69
+ throw new Error('Could not find a free port for the excalidrop canvas server.');
70
+ }
71
+ // ─── config discovery ────────────────────────────────────────────────────────
72
+ function findProjectRoot(cwd) {
73
+ let dir = path.resolve(cwd);
74
+ const home = process.env.HOME || process.env.USERPROFILE || '/';
75
+ while (true) {
76
+ if (fs.existsSync(path.join(dir, 'package.json')) || fs.existsSync(path.join(dir, '.git'))) {
77
+ return dir;
78
+ }
79
+ const parent = path.dirname(dir);
80
+ if (parent === dir || dir === home)
81
+ return path.resolve(cwd);
82
+ dir = parent;
83
+ }
84
+ }
85
+ function findDropConfig(cwd) {
86
+ let dir = path.resolve(cwd);
87
+ const root = path.parse(dir).root;
88
+ while (true) {
89
+ const file = path.join(dir, CONFIG_NAME);
90
+ if (fs.existsSync(file)) {
91
+ try {
92
+ const raw = JSON.parse(fs.readFileSync(file, 'utf8'));
93
+ if (typeof raw.port === 'number') {
94
+ return {
95
+ dir,
96
+ config: {
97
+ port: raw.port,
98
+ canvasUrl: raw.canvasUrl || `http://127.0.0.1:${raw.port}`,
99
+ },
100
+ };
101
+ }
102
+ }
103
+ catch {
104
+ // corrupt config → ignore, treat as missing
105
+ }
106
+ }
107
+ if (dir === root)
108
+ return null;
109
+ dir = path.dirname(dir);
110
+ }
111
+ }
112
+ function portFromExpressUrl(url) {
113
+ if (!url)
114
+ return undefined;
115
+ try {
116
+ const port = Number(new URL(url).port);
117
+ return Number.isFinite(port) && port > 0 ? port : undefined;
118
+ }
119
+ catch {
120
+ return undefined;
121
+ }
122
+ }
123
+ /** Resolve this project's canvas port without side effects (used by `mcp`). */
124
+ function resolveSavedPort(cwd) {
125
+ const envPort = Number(process.env.EXCALIDROP_PORT);
126
+ if (Number.isFinite(envPort) && envPort > 0)
127
+ return envPort;
128
+ const envUrlPort = portFromExpressUrl(process.env.EXPRESS_SERVER_URL);
129
+ if (envUrlPort)
130
+ return envUrlPort;
131
+ const found = findDropConfig(cwd);
132
+ if (found)
133
+ return found.config.port;
134
+ return DEFAULT_START_PORT;
135
+ }
136
+ // ─── agent config snippets (chrome-devtools-mcp style) ───────────────────────
137
+ function mcpServerJson() {
138
+ // No hardcoded port: `excalidrop mcp` resolves `.excalidrop.json` at runtime,
139
+ // so the same snippet works for every project, concurrently.
140
+ return {
141
+ mcpServers: {
142
+ excalidrop: {
143
+ command: 'npx',
144
+ args: ['excalidrop', 'mcp'],
145
+ },
146
+ },
147
+ };
148
+ }
149
+ function agentCommands() {
150
+ return [
151
+ {
152
+ name: 'Claude Code (project scope)',
153
+ command: 'claude mcp add excalidrop --scope project -- npx excalidrop mcp',
154
+ },
155
+ {
156
+ name: 'Claude Code (user scope)',
157
+ command: 'claude mcp add excalidraw --scope user -- npx excalidrop mcp',
158
+ },
159
+ {
160
+ name: 'Codex CLI',
161
+ command: 'codex mcp add excalidrop -- npx excalidrop mcp',
162
+ },
163
+ {
164
+ name: 'Gemini CLI',
165
+ command: 'gemini mcp add excalidrop npx excalidrop mcp',
166
+ },
167
+ {
168
+ name: 'Cursor (.cursor/mcp.json) / Claude Desktop / Antigravity',
169
+ command: JSON.stringify(mcpServerJson(), null, 2),
170
+ },
171
+ {
172
+ name: 'OpenCode (opencode.json)',
173
+ command: JSON.stringify({
174
+ $schema: 'https://opencode.ai/config.json',
175
+ mcp: {
176
+ excalidrop: {
177
+ type: 'local',
178
+ command: ['npx', 'excalidrop', 'mcp'],
179
+ enabled: true,
180
+ },
181
+ },
182
+ }, null, 2),
183
+ },
184
+ ];
185
+ }
186
+ function prompt(question) {
187
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
188
+ return new Promise((resolve) => {
189
+ rl.question(question, (answer) => {
190
+ rl.close();
191
+ resolve(answer.trim());
192
+ });
193
+ });
194
+ }
195
+ function commandExists(cmd) {
196
+ const probe = spawnSync(process.platform === 'win32' ? 'where' : 'command', ['-v', cmd], {
197
+ stdio: 'ignore',
198
+ shell: process.platform === 'win32',
199
+ });
200
+ return probe.status === 0;
201
+ }
202
+ // ─── commands ────────────────────────────────────────────────────────────────
203
+ function detectSlug() {
204
+ try {
205
+ const url = spawnSync('git', ['config', '--get', 'remote.origin.url'], { encoding: 'utf8' }).stdout.trim().replace(/\.git$/, '');
206
+ return url.match(/github\.com[:/](.+)/)?.[1] || '';
207
+ }
208
+ catch {
209
+ return '';
210
+ }
211
+ }
212
+ function ghAuthed() {
213
+ return spawnSync('gh', ['auth', 'status'], { stdio: 'ignore' }).status === 0;
214
+ }
215
+ async function cmdInit(args) {
216
+ const portFlag = args.find((a) => a.startsWith('--port='));
217
+ const preferred = portFlag ? Number(portFlag.split('=')[1]) : undefined;
218
+ const noPrompt = args.includes('--no-prompt') || args.includes('-y');
219
+ const root = findProjectRoot(process.cwd());
220
+ const slug = detectSlug();
221
+ const port = await findFreePort(preferred);
222
+ // Preselect this repo as the remote canvas: the MCP auto-loads it, so the
223
+ // agent never needs switch_remote for its home project (chrome-devtools-mcp
224
+ // wrapper pattern: in-memory default + persisted startup target — ours
225
+ // persists in .excalidrop.json so it survives restarts too).
226
+ const config = { port, canvasUrl: `http://127.0.0.1:${port}`, ...(slug ? { remote: slug } : {}) };
227
+ fs.writeFileSync(path.join(root, CONFIG_NAME), JSON.stringify(config, null, 2) + '\n');
228
+ console.log(`\nexcalidrop: canvas port ${port} saved to ${path.join(root, CONFIG_NAME)}`);
229
+ if (slug)
230
+ console.log(`excalidrop: remote canvas preselected: ${slug} (agent uses it automatically)`);
231
+ // Seed canvas.excalidraw so `npm i -D excalidrop` leaves a visible file
232
+ // that export_scene/import_scene round-trip through.
233
+ const scenePath = path.join(root, 'canvas.excalidraw');
234
+ if (!fs.existsSync(scenePath)) {
235
+ fs.writeFileSync(scenePath, JSON.stringify({ type: 'excalidraw', version: 2, source: 'excalidrop', elements: [], appState: { viewBackgroundColor: '#ffffff', gridSize: null }, files: {} }, null, 2) + '\n');
236
+ console.log(`excalidrop: empty scene written to ${scenePath}`);
237
+ }
238
+ // Merge into .mcp.json (generic MCP clients + Claude Code project scope)
239
+ const mcpPath = path.join(root, MCP_JSON);
240
+ let mcp = {};
241
+ if (fs.existsSync(mcpPath)) {
242
+ try {
243
+ mcp = JSON.parse(fs.readFileSync(mcpPath, 'utf8'));
244
+ }
245
+ catch {
246
+ console.warn(`excalidrop: existing ${MCP_JSON} is not valid JSON, leaving it untouched.`);
247
+ }
248
+ }
249
+ if (!mcp.mcpServers || typeof mcp.mcpServers !== 'object')
250
+ mcp.mcpServers = {};
251
+ mcp.mcpServers.excalidrop = { command: 'npx', args: ['excalidrop', 'mcp'] };
252
+ if (Object.keys(mcp).length > 0) {
253
+ fs.writeFileSync(mcpPath, JSON.stringify(mcp, null, 2) + '\n');
254
+ console.log(`excalidrop: MCP server entry written to ${mcpPath}`);
255
+ }
256
+ console.log('\nStart the canvas for this project with:');
257
+ console.log(` npx excalidrop up # ${config.canvasUrl}\n`);
258
+ if (noPrompt) {
259
+ printAgentCommands();
260
+ return;
261
+ }
262
+ // Guided remote setup: gh auth → publish empty canvas → agent install → login
263
+ if (slug) {
264
+ if (!ghAuthed()) {
265
+ console.log('GitHub: not logged in. Run `gh auth login` first (2FA via GitHub), then re-run init.\n');
266
+ }
267
+ else {
268
+ const pub = await prompt(`Publish an empty canvas to ${slug} (creates gh-pages + enables Pages)? [Y/n] `);
269
+ if (!pub || /^(y|yes)$/i.test(pub)) {
270
+ const r = spawnSync('bash', [path.join(__dirname, '../scripts/publish-pages.sh')], {
271
+ stdio: 'inherit', env: { ...process.env, REPO_SLUG: slug },
272
+ });
273
+ if (r.status === 0) {
274
+ const [owner, repo] = slug.split('/');
275
+ console.log(`\nCanvas live at https://${owner}.github.io/${repo}/`);
276
+ const appSlug = process.env.EXCALIDROP_APP_SLUG || 'excalidrop';
277
+ console.log(`Install the app once per repo: https://github.com/apps/${appSlug}/installations/new`);
278
+ }
279
+ }
280
+ }
281
+ }
282
+ const answer = await prompt('Install the excalidrop MCP server into your AI agent now? [Y/n] ');
283
+ if (answer && !/^(y|yes)$/i.test(answer)) {
284
+ printAgentCommands();
285
+ return;
286
+ }
287
+ // Try the CLIs that exist; fall back to printing snippets.
288
+ let installed = false;
289
+ if (commandExists('claude')) {
290
+ const scopeAnswer = await prompt('Claude Code scope? [project/user] (default: project) ');
291
+ const scope = /user/i.test(scopeAnswer) ? 'user' : 'project';
292
+ const r = spawnSync('claude', ['mcp', 'add', 'excalidrop', '--scope', scope, '--', 'npx', 'excalidrop', 'mcp'], {
293
+ stdio: 'inherit',
294
+ });
295
+ installed = r.status === 0;
296
+ }
297
+ if (!installed && commandExists('codex')) {
298
+ const useIt = await prompt('Run `codex mcp add excalidrop`? [Y/n] ');
299
+ if (!useIt || /^(y|yes)$/i.test(useIt)) {
300
+ const r = spawnSync('codex', ['mcp', 'add', 'excalidrop', '--', 'npx', 'excalidrop', 'mcp'], {
301
+ stdio: 'inherit',
302
+ });
303
+ installed = r.status === 0;
304
+ }
305
+ }
306
+ if (!installed)
307
+ printAgentCommands();
308
+ }
309
+ function printAgentCommands() {
310
+ console.log('Add excalidrop to your AI agent (same pattern as chrome-devtools-mcp):\n');
311
+ for (const c of agentCommands()) {
312
+ console.log(`## ${c.name}\n${c.command}\n`);
313
+ }
314
+ }
315
+ async function cmdUp(args) {
316
+ const portFlag = args.find((a) => a.startsWith('--port='));
317
+ const preferred = portFlag ? Number(portFlag.split('=')[1]) : undefined;
318
+ const root = findProjectRoot(process.cwd());
319
+ const existing = findDropConfig(process.cwd());
320
+ // Reuse the saved port if it's still free (stable URL per project),
321
+ // otherwise claim a new one so concurrent projects never collide.
322
+ let port;
323
+ if (preferred) {
324
+ port = await findFreePort(preferred);
325
+ }
326
+ else if (existing && (await isPortFree(existing.config.port))) {
327
+ port = existing.config.port;
328
+ }
329
+ else {
330
+ port = await findFreePort(existing?.config.port ?? DEFAULT_START_PORT);
331
+ }
332
+ fs.writeFileSync(path.join(existing?.dir ?? root, CONFIG_NAME), JSON.stringify({ port, canvasUrl: `http://127.0.0.1:${port}` }, null, 2) + '\n');
333
+ const host = process.env.HOST || '127.0.0.1';
334
+ console.log(`excalidrop: starting canvas on http://${host === '0.0.0.0' ? '127.0.0.1' : host}:${port}`);
335
+ const child = spawn(process.execPath, [SERVER_ENTRY], {
336
+ stdio: 'inherit',
337
+ env: { ...process.env, PORT: String(port), HOST: host },
338
+ });
339
+ child.on('exit', (code) => process.exit(code ?? 0));
340
+ }
341
+ function cmdMcp() {
342
+ // What the agent runs over stdio. Port resolves per-project at runtime.
343
+ const port = resolveSavedPort(process.cwd());
344
+ const canvasUrl = process.env.EXPRESS_SERVER_URL || `http://127.0.0.1:${port}`;
345
+ const child = spawn(process.execPath, [MCP_ENTRY], {
346
+ stdio: 'inherit',
347
+ env: { ...process.env, EXPRESS_SERVER_URL: canvasUrl },
348
+ });
349
+ child.on('exit', (code) => process.exit(code ?? 0));
350
+ }
351
+ async function cmdStatus() {
352
+ const found = findDropConfig(process.cwd());
353
+ const port = found?.config.port ?? resolveSavedPort(process.cwd());
354
+ const url = process.env.EXPRESS_SERVER_URL || `http://127.0.0.1:${port}`;
355
+ console.log(`config: ${found ? path.join(found.dir, CONFIG_NAME) : '(none — using defaults)'}`);
356
+ console.log(`canvas: ${url}`);
357
+ try {
358
+ const res = await fetch(`${url}/health`);
359
+ console.log(`health: ${res.ok ? 'ok' : `HTTP ${res.status}`} ${res.ok ? '' : await res.text()}`);
360
+ if (res.ok)
361
+ console.log(await res.text());
362
+ }
363
+ catch (err) {
364
+ console.log(`health: unreachable (${err.message}) — start it with \`npx excalidrop up\``);
365
+ }
366
+ }
367
+ async function cmdPages(_args) {
368
+ console.log(`excalidrop pages (GitHub as source of truth, no Actions, no setup)\n`);
369
+ console.log('1. Publish viewer: npx excalidrop publish');
370
+ console.log(' (uses `gh auth` — repo auto-detected, Pages auto-enabled.)\n');
371
+ console.log('2. In your agent: switch_remote { target: "<owner>.github.io/<repo>" }');
372
+ console.log(' Draw as usual — commits land on GitHub, viewer updates on gh-pages.\n');
373
+ console.log('3. Login: ask the agent to run github_login (device flow, 2FA via GitHub),');
374
+ console.log(' or paste a token (`gh auth token`) on the viewer login pill.\n');
375
+ console.log('Rule: never edit the canvas locally — the Pages site + GitHub repo are the canvas.');
376
+ }
377
+ function cmdRemote() {
378
+ const child = spawn(process.execPath, [path.join(__dirname, 'remote.js')], { stdio: 'inherit', env: process.env });
379
+ child.on('exit', (code) => process.exit(code ?? 0));
380
+ }
381
+ /** One-command per-user setup on ANY repo: gh auth → publish viewer → app install link. */
382
+ async function cmdSetup(args = []) {
383
+ if (args.includes('--help') || args.includes('-h')) {
384
+ console.log('Usage: npx excalidrop setup\n\nChecks `gh auth`, publishes the viewer to this repo\'s gh-pages\n(enabling Pages if needed), then prints the app-install link and next steps.');
385
+ return;
386
+ }
387
+ console.log('excalidrop setup — works on any repo you own or can access\n');
388
+ // 1. gh auth (the only prerequisite; 2FA enforced by GitHub itself)
389
+ const auth = spawnSync('gh', ['auth', 'status'], { stdio: 'pipe', encoding: 'utf8' });
390
+ if (auth.status !== 0) {
391
+ console.error('Not logged in to GitHub. Run this first:\n\n gh auth login\n');
392
+ process.exit(1);
393
+ }
394
+ const slug = (() => {
395
+ try {
396
+ const url = spawnSync('git', ['config', '--get', 'remote.origin.url'], { encoding: 'utf8' }).stdout.trim().replace(/\.git$/, '');
397
+ const m = url.match(/github\.com[:/](.+)/);
398
+ return m?.[1] || '';
399
+ }
400
+ catch {
401
+ return '';
402
+ }
403
+ })();
404
+ if (!slug) {
405
+ console.error('No GitHub remote detected. Run setup inside a cloned repo.\n');
406
+ process.exit(1);
407
+ }
408
+ console.log(`Repo: ${slug} (detected from git remote)\n`);
409
+ // 2. publish viewer (auto-enables Pages, auto-syncs scene)
410
+ await new Promise((resolve, reject) => {
411
+ const child = spawn('bash', [path.join(__dirname, '../scripts/publish-pages.sh')], { stdio: 'inherit', env: { ...process.env, REPO_SLUG: slug } });
412
+ child.on('exit', (code) => (code === 0 ? resolve() : reject(new Error(`publish failed (exit ${code})`))));
413
+ });
414
+ // 3. remember the target: agent auto-loads it, no switch_remote needed
415
+ try {
416
+ const cfgFile = path.join(process.cwd(), CONFIG_NAME);
417
+ const cfg = fs.existsSync(cfgFile) ? JSON.parse(fs.readFileSync(cfgFile, 'utf8')) : {};
418
+ fs.writeFileSync(cfgFile, JSON.stringify({ port: cfg.port || 3030, canvasUrl: cfg.canvasUrl || 'http://127.0.0.1:3030', ...cfg, remote: slug }, null, 2) + '\n');
419
+ console.log(`Remote target remembered in ${CONFIG_NAME} (agent uses it automatically).`);
420
+ }
421
+ catch { /* non-fatal */ }
422
+ // 4. verify: Pages serves the viewer AND the scene file
423
+ const [sOwner, sRepo] = slug.split('/');
424
+ let verified = false;
425
+ for (let i = 0; i < 12; i++) {
426
+ await new Promise((r) => setTimeout(r, 10000));
427
+ try {
428
+ const res = await fetch(`https://${sOwner}.github.io/${sRepo}/canvas.excalidraw`, { signal: AbortSignal.timeout(15000) });
429
+ if (res.ok) {
430
+ verified = true;
431
+ break;
432
+ }
433
+ }
434
+ catch { /* Pages build still running */ }
435
+ }
436
+ console.log(verified ? 'Verified: viewer + scene live.' : 'Note: Pages still building — check back in a minute.');
437
+ // 4. next steps: install the shared app + draw
438
+ const appSlug = process.env.EXCALIDROP_APP_SLUG || 'excalidrop';
439
+ console.log(`\nDone. Your canvas: https://${sOwner}.github.io/${sRepo}/\n`);
440
+ console.log('Two remaining clicks (one time per repo):');
441
+ console.log(` 1. Install the Excalidrop app on this repo:\n https://github.com/apps/${appSlug}/installations/new\n`);
442
+ console.log(' 2. In your agent: switch_remote { target: "<that canvas URL>" }');
443
+ console.log(' then draw — commits land on GitHub, the viewer updates itself.');
444
+ console.log('\nLogin on the page: pill → device code → github.com/login/device (2FA via GitHub).');
445
+ }
446
+ /** Terminal GitHub login via device flow (same flow the agent's github_login uses). */
447
+ async function cmdLogin() {
448
+ const { APP_CLIENT_ID } = await import('./target.js');
449
+ const clientId = process.env.GITHUB_OAUTH_CLIENT_ID || APP_CLIENT_ID;
450
+ if (!clientId) {
451
+ console.error('No GitHub App Client ID configured yet.');
452
+ console.error('Set GITHUB_OAUTH_CLIENT_ID (or wait for the shared excalidrop app),');
453
+ console.error('or just run `gh auth login` — the MCP picks that token up automatically.');
454
+ process.exit(1);
455
+ }
456
+ // Dynamic import to avoid loading MCP deps in CLI path
457
+ const mod = await import('./target.js');
458
+ console.log('Starting GitHub device login…');
459
+ const dev = await mod.deviceStart(clientId);
460
+ console.log(`\nOpen ${dev.verification_uri} and enter code: ${dev.user_code}\n`);
461
+ const repoId = undefined; // unrestricted; pass --repo owner/repo? (future: parse argv)
462
+ const token = await mod.devicePoll(clientId, dev.device_code, dev.interval || 5, 300, repoId);
463
+ console.log('Logged in — token stored in ~/.config/excalidrop/gh_token');
464
+ void token;
465
+ }
466
+ function printHelp() {
467
+ console.log(`excalidrop — drop an Excalidraw canvas + MCP server into any project
468
+
469
+ Usage:
470
+ npx excalidrop init [--port=N] [--no-prompt] pick a free port, write .excalidrop.json + .mcp.json
471
+ npx excalidrop up [--port=N] start this project's canvas server
472
+ npx excalidrop setup one-command setup on any repo (gh auth + publish + guide)
473
+ npx excalidrop login GitHub device-flow login from the terminal
474
+ npx excalidrop pages GitHub-truth + gh-pages publish guide
475
+ npx excalidrop remote run remote MCP-v2 (GitHub-backed, multi-project)
476
+ npx excalidrop publish publish viewer straight to gh-pages (no Actions)
477
+ npx excalidrop mcp run MCP stdio server (used by AI agents)
478
+ npx excalidrop status show port + canvas health
479
+ npx excalidrop add print AI-agent install commands
480
+
481
+ Install:
482
+ npm i -D excalidrop && npx excalidrop init
483
+
484
+ Each project gets its own port (scanned free from ${DEFAULT_START_PORT}), so several
485
+ checkouts can run concurrently. Agent config needs no hardcoded port.`);
486
+ }
487
+ // ─── entry ───────────────────────────────────────────────────────────────────
488
+ async function main() {
489
+ const [cmd, ...rest] = process.argv.slice(2);
490
+ switch (cmd) {
491
+ case 'init':
492
+ await cmdInit(rest);
493
+ break;
494
+ case 'up':
495
+ await cmdUp(rest);
496
+ break;
497
+ case 'mcp':
498
+ cmdMcp();
499
+ break;
500
+ case 'status':
501
+ await cmdStatus();
502
+ break;
503
+ case 'pages':
504
+ await cmdPages(rest);
505
+ break;
506
+ case 'remote':
507
+ cmdRemote();
508
+ break;
509
+ case 'setup':
510
+ await cmdSetup(rest);
511
+ break;
512
+ case 'login':
513
+ await cmdLogin();
514
+ break;
515
+ case 'publish': {
516
+ const child = spawn('bash', [path.join(__dirname, '../scripts/publish-pages.sh')], { stdio: 'inherit', env: process.env });
517
+ child.on('exit', (code) => process.exit(code ?? 0));
518
+ break;
519
+ }
520
+ case 'add':
521
+ printAgentCommands();
522
+ break;
523
+ default:
524
+ printHelp();
525
+ if (cmd && cmd !== '--help' && cmd !== '-h')
526
+ process.exitCode = 1;
527
+ }
528
+ }
529
+ main().catch((err) => {
530
+ console.error(`excalidrop: ${err.message}`);
531
+ process.exit(1);
532
+ });
533
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ function o(e){for(var c=e.length/6|0,n=new Array(c),a=0;a<c;)n[a]="#"+e.slice(a*6,++a*6);return n}const r=o("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");export{r as s};
@@ -0,0 +1 @@
1
+ function r(o){throw new Error('Could not dynamically require "'+o+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}export{r as c};