@zythum02/fello-server 0.1.42 → 0.1.45

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 (247) hide show
  1. package/README.md +10 -2
  2. package/out/renderer/assets/{_baseUniq-CNYzw1DB.js → _baseUniq-B2L-gQdU.js} +1 -1
  3. package/out/renderer/assets/_baseUniq-B2L-gQdU.js.br +0 -0
  4. package/out/renderer/assets/_baseUniq-B2L-gQdU.js.gz +0 -0
  5. package/out/renderer/assets/{arc-vyANDg9_.js → arc-Dh0s2UpX.js} +1 -1
  6. package/out/renderer/assets/arc-Dh0s2UpX.js.br +0 -0
  7. package/out/renderer/assets/arc-Dh0s2UpX.js.gz +0 -0
  8. package/out/renderer/assets/{architectureDiagram-Q4EWVU46-BzcUqnqp.js → architectureDiagram-Q4EWVU46-CQ2ioqAL.js} +5 -5
  9. package/out/renderer/assets/architectureDiagram-Q4EWVU46-CQ2ioqAL.js.br +0 -0
  10. package/out/renderer/assets/{architectureDiagram-Q4EWVU46-BzcUqnqp.js.gz → architectureDiagram-Q4EWVU46-CQ2ioqAL.js.gz} +0 -0
  11. package/out/renderer/assets/{blockDiagram-DXYQGD6D-CTEZWa8S.js → blockDiagram-DXYQGD6D-Wh0G1xzO.js} +6 -6
  12. package/out/renderer/assets/blockDiagram-DXYQGD6D-Wh0G1xzO.js.br +0 -0
  13. package/out/renderer/assets/blockDiagram-DXYQGD6D-Wh0G1xzO.js.gz +0 -0
  14. package/out/renderer/assets/{c4Diagram-AHTNJAMY-BuFQdjjc.js → c4Diagram-AHTNJAMY-BYn4M8r3.js} +2 -2
  15. package/out/renderer/assets/c4Diagram-AHTNJAMY-BYn4M8r3.js.br +0 -0
  16. package/out/renderer/assets/{c4Diagram-AHTNJAMY-BuFQdjjc.js.gz → c4Diagram-AHTNJAMY-BYn4M8r3.js.gz} +0 -0
  17. package/out/renderer/assets/{channel-DyKDQZ32.js → channel-BbsS770v.js} +1 -1
  18. package/out/renderer/assets/{chunk-4BX2VUAB-BKj1YSOw.js → chunk-4BX2VUAB-BqmuvYx4.js} +1 -1
  19. package/out/renderer/assets/{chunk-4TB4RGXK-CUfY3XSR.js → chunk-4TB4RGXK-CGWvo0MB.js} +5 -5
  20. package/out/renderer/assets/chunk-4TB4RGXK-CGWvo0MB.js.br +0 -0
  21. package/out/renderer/assets/chunk-4TB4RGXK-CGWvo0MB.js.gz +0 -0
  22. package/out/renderer/assets/{chunk-55IACEB6-BPafcNL-.js → chunk-55IACEB6-B2F_rVhp.js} +1 -1
  23. package/out/renderer/assets/{chunk-EDXVE4YY-DlWjafzT.js → chunk-EDXVE4YY-rv_Sxmdr.js} +1 -1
  24. package/out/renderer/assets/chunk-EDXVE4YY-rv_Sxmdr.js.br +0 -0
  25. package/out/renderer/assets/chunk-EDXVE4YY-rv_Sxmdr.js.gz +0 -0
  26. package/out/renderer/assets/{chunk-FMBD7UC4-CI2WhJKs.js → chunk-FMBD7UC4-B5pWdaON.js} +1 -1
  27. package/out/renderer/assets/{chunk-OYMX7WX6-1XAYgymx.js → chunk-OYMX7WX6-CK7U7B55.js} +3 -3
  28. package/out/renderer/assets/chunk-OYMX7WX6-CK7U7B55.js.br +0 -0
  29. package/out/renderer/assets/chunk-OYMX7WX6-CK7U7B55.js.gz +0 -0
  30. package/out/renderer/assets/{chunk-QZHKN3VN-B2Kh1qhq.js → chunk-QZHKN3VN-CEGxn157.js} +1 -1
  31. package/out/renderer/assets/{chunk-YZCP3GAM-DKTOTV26.js → chunk-YZCP3GAM-CP9VxQ_4.js} +1 -1
  32. package/out/renderer/assets/chunk-YZCP3GAM-CP9VxQ_4.js.br +0 -0
  33. package/out/renderer/assets/chunk-YZCP3GAM-CP9VxQ_4.js.gz +0 -0
  34. package/out/renderer/assets/{classDiagram-6PBFFD2Q-BSxgcC66.js → classDiagram-6PBFFD2Q-DDq47uie.js} +6 -6
  35. package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-BSxgcC66.js → classDiagram-v2-HSJHXN6E-DDq47uie.js} +6 -6
  36. package/out/renderer/assets/{clone-B-NXg17n.js → clone-D_yz9tHs.js} +1 -1
  37. package/out/renderer/assets/{cose-bilkent-S5V4N54A-Dr92qdgA.js → cose-bilkent-S5V4N54A-4f3CSmy0.js} +1 -1
  38. package/out/renderer/assets/cose-bilkent-S5V4N54A-4f3CSmy0.js.br +0 -0
  39. package/out/renderer/assets/cose-bilkent-S5V4N54A-4f3CSmy0.js.gz +0 -0
  40. package/out/renderer/assets/{dagre-KV5264BT-7l16BI52.js → dagre-KV5264BT-CUE2rJbD.js} +6 -6
  41. package/out/renderer/assets/dagre-KV5264BT-CUE2rJbD.js.br +0 -0
  42. package/out/renderer/assets/dagre-KV5264BT-CUE2rJbD.js.gz +0 -0
  43. package/out/renderer/assets/{diagram-5BDNPKRD-7J0KHPTw.js → diagram-5BDNPKRD-pp0PcxKz.js} +6 -6
  44. package/out/renderer/assets/diagram-5BDNPKRD-pp0PcxKz.js.br +0 -0
  45. package/out/renderer/assets/diagram-5BDNPKRD-pp0PcxKz.js.gz +0 -0
  46. package/out/renderer/assets/{diagram-G4DWMVQ6-Dgk1T3Ng.js → diagram-G4DWMVQ6-C-riu5J4.js} +6 -6
  47. package/out/renderer/assets/diagram-G4DWMVQ6-C-riu5J4.js.br +0 -0
  48. package/out/renderer/assets/diagram-G4DWMVQ6-C-riu5J4.js.gz +0 -0
  49. package/out/renderer/assets/{diagram-MMDJMWI5-DerRkmYs.js → diagram-MMDJMWI5-qa5mZzds.js} +5 -5
  50. package/out/renderer/assets/diagram-MMDJMWI5-qa5mZzds.js.br +0 -0
  51. package/out/renderer/assets/diagram-MMDJMWI5-qa5mZzds.js.gz +0 -0
  52. package/out/renderer/assets/{diagram-TYMM5635-DR9dcwKl.js → diagram-TYMM5635-BJb8gvcB.js} +5 -5
  53. package/out/renderer/assets/diagram-TYMM5635-BJb8gvcB.js.br +0 -0
  54. package/out/renderer/assets/diagram-TYMM5635-BJb8gvcB.js.gz +0 -0
  55. package/out/renderer/assets/docx_parser_bg-B5rV91hd.wasm +0 -0
  56. package/out/renderer/assets/{erDiagram-SMLLAGMA-CZ2vNtP6.js → erDiagram-SMLLAGMA-BImpezHs.js} +4 -4
  57. package/out/renderer/assets/erDiagram-SMLLAGMA-BImpezHs.js.br +0 -0
  58. package/out/renderer/assets/erDiagram-SMLLAGMA-BImpezHs.js.gz +0 -0
  59. package/out/renderer/assets/{flowDiagram-DWJPFMVM-DOL_mdve.js → flowDiagram-DWJPFMVM-BGPw25aw.js} +6 -6
  60. package/out/renderer/assets/flowDiagram-DWJPFMVM-BGPw25aw.js.br +0 -0
  61. package/out/renderer/assets/flowDiagram-DWJPFMVM-BGPw25aw.js.gz +0 -0
  62. package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-DXfCf0sW.js → ganttDiagram-T4ZO3ILL-DcKLeP7M.js} +2 -2
  63. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DcKLeP7M.js.br +0 -0
  64. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DcKLeP7M.js.gz +0 -0
  65. package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-Bi19RzUn.js → gitGraphDiagram-UUTBAWPF-BQE3VROE.js} +6 -6
  66. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BQE3VROE.js.br +0 -0
  67. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BQE3VROE.js.gz +0 -0
  68. package/out/renderer/assets/{graph-BX6gbV3Q.js → graph-BpsL6VlK.js} +2 -2
  69. package/out/renderer/assets/graph-BpsL6VlK.js.br +0 -0
  70. package/out/renderer/assets/graph-BpsL6VlK.js.gz +0 -0
  71. package/out/renderer/assets/{highlighted-body-OFNGDK62-CpZorxCd.js → highlighted-body-OFNGDK62-BKJZddky.js} +1 -1
  72. package/out/renderer/assets/{index-BihXRHbW.css → index-C-1Mla-o.css} +1 -1
  73. package/out/renderer/assets/index-C-1Mla-o.css.br +0 -0
  74. package/out/renderer/assets/index-C-1Mla-o.css.gz +0 -0
  75. package/out/renderer/assets/{index-Ckb2j9e5.js → index-Dd5g6jOl.js} +29689 -13825
  76. package/out/renderer/assets/index-Dd5g6jOl.js.br +0 -0
  77. package/out/renderer/assets/index-Dd5g6jOl.js.gz +0 -0
  78. package/out/renderer/assets/{infoDiagram-42DDH7IO-BB7FT1Ls.js → infoDiagram-42DDH7IO-BfDiSuRt.js} +4 -4
  79. package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js → ishikawaDiagram-UXIWVN3A-D3NlGVXH.js} +1 -1
  80. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3NlGVXH.js.br +0 -0
  81. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3NlGVXH.js.gz +0 -0
  82. package/out/renderer/assets/{journeyDiagram-VCZTEJTY-bhcMvreZ.js → journeyDiagram-VCZTEJTY-DqeLAWW-.js} +4 -4
  83. package/out/renderer/assets/journeyDiagram-VCZTEJTY-DqeLAWW-.js.br +0 -0
  84. package/out/renderer/assets/journeyDiagram-VCZTEJTY-DqeLAWW-.js.gz +0 -0
  85. package/out/renderer/assets/{kanban-definition-6JOO6SKY-CRg0O3h_.js → kanban-definition-6JOO6SKY-C25BBRvk.js} +2 -2
  86. package/out/renderer/assets/kanban-definition-6JOO6SKY-C25BBRvk.js.br +0 -0
  87. package/out/renderer/assets/kanban-definition-6JOO6SKY-C25BBRvk.js.gz +0 -0
  88. package/out/renderer/assets/{layout-Gz3MMSfR.js → layout-DtW-aq94.js} +4 -4
  89. package/out/renderer/assets/layout-DtW-aq94.js.br +0 -0
  90. package/out/renderer/assets/layout-DtW-aq94.js.gz +0 -0
  91. package/out/renderer/assets/{linear-B-XoCpT2.js → linear-rNBYTEYz.js} +1 -1
  92. package/out/renderer/assets/linear-rNBYTEYz.js.br +0 -0
  93. package/out/renderer/assets/linear-rNBYTEYz.js.gz +0 -0
  94. package/out/renderer/assets/mathjax-stix2-M8xawHNZ.js +15 -0
  95. package/out/renderer/assets/mathjax-stix2-M8xawHNZ.js.br +0 -0
  96. package/out/renderer/assets/mathjax-stix2-M8xawHNZ.js.gz +0 -0
  97. package/out/renderer/assets/{min-pbiT8SH0.js → min-MG_Ci7_B.js} +2 -2
  98. package/out/renderer/assets/min-MG_Ci7_B.js.br +0 -0
  99. package/out/renderer/assets/min-MG_Ci7_B.js.gz +0 -0
  100. package/out/renderer/assets/{mindmap-definition-QFDTVHPH-QEcTW8Sk.js → mindmap-definition-QFDTVHPH-C67ROQav.js} +3 -3
  101. package/out/renderer/assets/mindmap-definition-QFDTVHPH-C67ROQav.js.br +0 -0
  102. package/out/renderer/assets/mindmap-definition-QFDTVHPH-C67ROQav.js.gz +0 -0
  103. package/out/renderer/assets/{pieDiagram-DEJITSTG-BdyIMG3r.js → pieDiagram-DEJITSTG-DE1aBCQW.js} +6 -6
  104. package/out/renderer/assets/pieDiagram-DEJITSTG-DE1aBCQW.js.br +0 -0
  105. package/out/renderer/assets/pieDiagram-DEJITSTG-DE1aBCQW.js.gz +0 -0
  106. package/out/renderer/assets/pptx_parser_bg-C6x8HRdb.wasm +0 -0
  107. package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-CO63F50c.js → quadrantDiagram-34T5L4WZ-B5mGDuN5.js} +2 -2
  108. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B5mGDuN5.js.br +0 -0
  109. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B5mGDuN5.js.gz +0 -0
  110. package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js +25 -0
  111. package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js.br +0 -0
  112. package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js.gz +0 -0
  113. package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js +25 -0
  114. package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js.br +0 -0
  115. package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js.gz +0 -0
  116. package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js +25 -0
  117. package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js.br +0 -0
  118. package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js.gz +0 -0
  119. package/out/renderer/assets/{requirementDiagram-MS252O5E-Ch2CVgfZ.js → requirementDiagram-MS252O5E-CiGX4Xpv.js} +3 -3
  120. package/out/renderer/assets/requirementDiagram-MS252O5E-CiGX4Xpv.js.br +0 -0
  121. package/out/renderer/assets/requirementDiagram-MS252O5E-CiGX4Xpv.js.gz +0 -0
  122. package/out/renderer/assets/{sankeyDiagram-XADWPNL6--b1mWkl5.js → sankeyDiagram-XADWPNL6-BPM4lpDs.js} +1 -1
  123. package/out/renderer/assets/sankeyDiagram-XADWPNL6-BPM4lpDs.js.br +0 -0
  124. package/out/renderer/assets/sankeyDiagram-XADWPNL6-BPM4lpDs.js.gz +0 -0
  125. package/out/renderer/assets/{sequenceDiagram-FGHM5R23-CNautoFU.js → sequenceDiagram-FGHM5R23-D1Ok0mDp.js} +3 -3
  126. package/out/renderer/assets/sequenceDiagram-FGHM5R23-D1Ok0mDp.js.br +0 -0
  127. package/out/renderer/assets/sequenceDiagram-FGHM5R23-D1Ok0mDp.js.gz +0 -0
  128. package/out/renderer/assets/{stateDiagram-FHFEXIEX-CKsv5tYk.js → stateDiagram-FHFEXIEX-C0DqB63K.js} +8 -8
  129. package/out/renderer/assets/stateDiagram-FHFEXIEX-C0DqB63K.js.br +0 -0
  130. package/out/renderer/assets/stateDiagram-FHFEXIEX-C0DqB63K.js.gz +0 -0
  131. package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-CkdzkP8w.js → stateDiagram-v2-QKLJ7IA2-CcTyZcy9.js} +4 -4
  132. package/out/renderer/assets/{timeline-definition-GMOUNBTQ-CF_zqktL.js → timeline-definition-GMOUNBTQ-CY70j9aj.js} +2 -2
  133. package/out/renderer/assets/timeline-definition-GMOUNBTQ-CY70j9aj.js.br +0 -0
  134. package/out/renderer/assets/timeline-definition-GMOUNBTQ-CY70j9aj.js.gz +0 -0
  135. package/out/renderer/assets/{vennDiagram-DHZGUBPP-C7q9SHIx.js → vennDiagram-DHZGUBPP-DpZP-SME.js} +1 -1
  136. package/out/renderer/assets/vennDiagram-DHZGUBPP-DpZP-SME.js.br +0 -0
  137. package/out/renderer/assets/vennDiagram-DHZGUBPP-DpZP-SME.js.gz +0 -0
  138. package/out/renderer/assets/{wardley-RL74JXVD-DmW7d79y.js → wardley-RL74JXVD-DUTOcssT.js} +3 -3
  139. package/out/renderer/assets/wardley-RL74JXVD-DUTOcssT.js.br +0 -0
  140. package/out/renderer/assets/wardley-RL74JXVD-DUTOcssT.js.gz +0 -0
  141. package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-1VzGmAot.js → wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js} +5 -5
  142. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js.br +0 -0
  143. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js.gz +0 -0
  144. package/out/renderer/assets/xlsx_parser_bg-ByWgODYl.wasm +0 -0
  145. package/out/renderer/assets/{xychartDiagram-5P7HB3ND-DznKXnsr.js → xychartDiagram-5P7HB3ND-B8kViTNI.js} +2 -2
  146. package/out/renderer/assets/xychartDiagram-5P7HB3ND-B8kViTNI.js.br +0 -0
  147. package/out/renderer/assets/xychartDiagram-5P7HB3ND-B8kViTNI.js.gz +0 -0
  148. package/out/renderer/index.html +2 -2
  149. package/out/renderer/index.html.br +0 -0
  150. package/out/renderer/index.html.gz +0 -0
  151. package/out/scripts/mcp-image-generation/server.mjs +140 -0
  152. package/out/scripts/mcp-memo/server.mjs +174 -79
  153. package/out/scripts/mcp-memory/server.mjs +61 -45
  154. package/out/scripts/mcp-toolbox/server.mjs +482 -0
  155. package/out/scripts/worker-file-outline/worker.mjs +5 -0
  156. package/out/server/main.js +1521 -367
  157. package/package.json +3 -1
  158. package/out/renderer/assets/_baseUniq-CNYzw1DB.js.br +0 -0
  159. package/out/renderer/assets/_baseUniq-CNYzw1DB.js.gz +0 -0
  160. package/out/renderer/assets/arc-vyANDg9_.js.br +0 -0
  161. package/out/renderer/assets/arc-vyANDg9_.js.gz +0 -0
  162. package/out/renderer/assets/architectureDiagram-Q4EWVU46-BzcUqnqp.js.br +0 -0
  163. package/out/renderer/assets/blockDiagram-DXYQGD6D-CTEZWa8S.js.br +0 -0
  164. package/out/renderer/assets/blockDiagram-DXYQGD6D-CTEZWa8S.js.gz +0 -0
  165. package/out/renderer/assets/c4Diagram-AHTNJAMY-BuFQdjjc.js.br +0 -0
  166. package/out/renderer/assets/chunk-4TB4RGXK-CUfY3XSR.js.br +0 -0
  167. package/out/renderer/assets/chunk-4TB4RGXK-CUfY3XSR.js.gz +0 -0
  168. package/out/renderer/assets/chunk-EDXVE4YY-DlWjafzT.js.br +0 -0
  169. package/out/renderer/assets/chunk-EDXVE4YY-DlWjafzT.js.gz +0 -0
  170. package/out/renderer/assets/chunk-OYMX7WX6-1XAYgymx.js.br +0 -0
  171. package/out/renderer/assets/chunk-OYMX7WX6-1XAYgymx.js.gz +0 -0
  172. package/out/renderer/assets/chunk-YZCP3GAM-DKTOTV26.js.br +0 -0
  173. package/out/renderer/assets/chunk-YZCP3GAM-DKTOTV26.js.gz +0 -0
  174. package/out/renderer/assets/cose-bilkent-S5V4N54A-Dr92qdgA.js.br +0 -0
  175. package/out/renderer/assets/cose-bilkent-S5V4N54A-Dr92qdgA.js.gz +0 -0
  176. package/out/renderer/assets/dagre-KV5264BT-7l16BI52.js.br +0 -0
  177. package/out/renderer/assets/dagre-KV5264BT-7l16BI52.js.gz +0 -0
  178. package/out/renderer/assets/diagram-5BDNPKRD-7J0KHPTw.js.br +0 -0
  179. package/out/renderer/assets/diagram-5BDNPKRD-7J0KHPTw.js.gz +0 -0
  180. package/out/renderer/assets/diagram-G4DWMVQ6-Dgk1T3Ng.js.br +0 -0
  181. package/out/renderer/assets/diagram-G4DWMVQ6-Dgk1T3Ng.js.gz +0 -0
  182. package/out/renderer/assets/diagram-MMDJMWI5-DerRkmYs.js.br +0 -0
  183. package/out/renderer/assets/diagram-MMDJMWI5-DerRkmYs.js.gz +0 -0
  184. package/out/renderer/assets/diagram-TYMM5635-DR9dcwKl.js.br +0 -0
  185. package/out/renderer/assets/diagram-TYMM5635-DR9dcwKl.js.gz +0 -0
  186. package/out/renderer/assets/docx_parser_bg-Dwb1lJCk.wasm +0 -0
  187. package/out/renderer/assets/erDiagram-SMLLAGMA-CZ2vNtP6.js.br +0 -0
  188. package/out/renderer/assets/erDiagram-SMLLAGMA-CZ2vNtP6.js.gz +0 -0
  189. package/out/renderer/assets/flowDiagram-DWJPFMVM-DOL_mdve.js.br +0 -0
  190. package/out/renderer/assets/flowDiagram-DWJPFMVM-DOL_mdve.js.gz +0 -0
  191. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DXfCf0sW.js.br +0 -0
  192. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DXfCf0sW.js.gz +0 -0
  193. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-Bi19RzUn.js.br +0 -0
  194. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-Bi19RzUn.js.gz +0 -0
  195. package/out/renderer/assets/graph-BX6gbV3Q.js.br +0 -0
  196. package/out/renderer/assets/graph-BX6gbV3Q.js.gz +0 -0
  197. package/out/renderer/assets/index-BihXRHbW.css.br +0 -0
  198. package/out/renderer/assets/index-BihXRHbW.css.gz +0 -0
  199. package/out/renderer/assets/index-Ckb2j9e5.js.br +0 -0
  200. package/out/renderer/assets/index-Ckb2j9e5.js.gz +0 -0
  201. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js.br +0 -0
  202. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js.gz +0 -0
  203. package/out/renderer/assets/journeyDiagram-VCZTEJTY-bhcMvreZ.js.br +0 -0
  204. package/out/renderer/assets/journeyDiagram-VCZTEJTY-bhcMvreZ.js.gz +0 -0
  205. package/out/renderer/assets/kanban-definition-6JOO6SKY-CRg0O3h_.js.br +0 -0
  206. package/out/renderer/assets/kanban-definition-6JOO6SKY-CRg0O3h_.js.gz +0 -0
  207. package/out/renderer/assets/layout-Gz3MMSfR.js.br +0 -0
  208. package/out/renderer/assets/layout-Gz3MMSfR.js.gz +0 -0
  209. package/out/renderer/assets/linear-B-XoCpT2.js.br +0 -0
  210. package/out/renderer/assets/linear-B-XoCpT2.js.gz +0 -0
  211. package/out/renderer/assets/min-pbiT8SH0.js.br +0 -0
  212. package/out/renderer/assets/min-pbiT8SH0.js.gz +0 -0
  213. package/out/renderer/assets/mindmap-definition-QFDTVHPH-QEcTW8Sk.js.br +0 -0
  214. package/out/renderer/assets/mindmap-definition-QFDTVHPH-QEcTW8Sk.js.gz +0 -0
  215. package/out/renderer/assets/pieDiagram-DEJITSTG-BdyIMG3r.js.br +0 -0
  216. package/out/renderer/assets/pieDiagram-DEJITSTG-BdyIMG3r.js.gz +0 -0
  217. package/out/renderer/assets/pptx_parser_bg-N_v237u9.wasm +0 -0
  218. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-CO63F50c.js.br +0 -0
  219. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-CO63F50c.js.gz +0 -0
  220. package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js +0 -25
  221. package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js.br +0 -0
  222. package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js.gz +0 -0
  223. package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js +0 -25
  224. package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js.br +0 -0
  225. package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js.gz +0 -0
  226. package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js +0 -25
  227. package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js.br +0 -0
  228. package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js.gz +0 -0
  229. package/out/renderer/assets/requirementDiagram-MS252O5E-Ch2CVgfZ.js.br +0 -0
  230. package/out/renderer/assets/requirementDiagram-MS252O5E-Ch2CVgfZ.js.gz +0 -0
  231. package/out/renderer/assets/sankeyDiagram-XADWPNL6--b1mWkl5.js.br +0 -0
  232. package/out/renderer/assets/sankeyDiagram-XADWPNL6--b1mWkl5.js.gz +0 -0
  233. package/out/renderer/assets/sequenceDiagram-FGHM5R23-CNautoFU.js.br +0 -0
  234. package/out/renderer/assets/sequenceDiagram-FGHM5R23-CNautoFU.js.gz +0 -0
  235. package/out/renderer/assets/stateDiagram-FHFEXIEX-CKsv5tYk.js.br +0 -0
  236. package/out/renderer/assets/stateDiagram-FHFEXIEX-CKsv5tYk.js.gz +0 -0
  237. package/out/renderer/assets/timeline-definition-GMOUNBTQ-CF_zqktL.js.br +0 -0
  238. package/out/renderer/assets/timeline-definition-GMOUNBTQ-CF_zqktL.js.gz +0 -0
  239. package/out/renderer/assets/vennDiagram-DHZGUBPP-C7q9SHIx.js.br +0 -0
  240. package/out/renderer/assets/vennDiagram-DHZGUBPP-C7q9SHIx.js.gz +0 -0
  241. package/out/renderer/assets/wardley-RL74JXVD-DmW7d79y.js.br +0 -0
  242. package/out/renderer/assets/wardley-RL74JXVD-DmW7d79y.js.gz +0 -0
  243. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-1VzGmAot.js.br +0 -0
  244. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-1VzGmAot.js.gz +0 -0
  245. package/out/renderer/assets/xlsx_parser_bg-CQ5Lc7LS.wasm +0 -0
  246. package/out/renderer/assets/xychartDiagram-5P7HB3ND-DznKXnsr.js.br +0 -0
  247. package/out/renderer/assets/xychartDiagram-5P7HB3ND-DznKXnsr.js.gz +0 -0
@@ -0,0 +1,482 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { z } from "zod";
4
+ import * as http from "http";
5
+ const base64EncodeRequestSchema = z.object({
6
+ text: z.string().describe("The text string to encode into Base64.")
7
+ });
8
+ const base64EncodeRespondSchema = z.object({
9
+ result: z.string()
10
+ });
11
+ const base64DecodeRequestSchema = z.object({
12
+ base64: z.string().describe("The Base64-encoded string to decode back into text.")
13
+ });
14
+ const base64DecodeRespondSchema = z.object({
15
+ result: z.string()
16
+ });
17
+ const urlEncodeRequestSchema = z.object({
18
+ text: z.string().describe("The text string to URL-encode.")
19
+ });
20
+ const urlEncodeRespondSchema = z.object({
21
+ result: z.string()
22
+ });
23
+ const urlDecodeRequestSchema = z.object({
24
+ text: z.string().describe("The URL-encoded string to decode.")
25
+ });
26
+ const urlDecodeRespondSchema = z.object({
27
+ result: z.string()
28
+ });
29
+ const hashRequestSchema = z.object({
30
+ text: z.string().describe("The text to hash."),
31
+ algorithm: z.enum(["md5", "sha1", "sha256"]).default("sha256").describe("Hash algorithm: md5, sha1, or sha256. Default: sha256.")
32
+ });
33
+ const hashRespondSchema = z.object({
34
+ result: z.string()
35
+ });
36
+ const timeRequestSchema = z.object({
37
+ format: z.enum(["iso", "timestamp"]).default("iso").describe(
38
+ "Output format: 'iso' for ISO 8601 string, 'timestamp' for Unix timestamp in seconds."
39
+ )
40
+ });
41
+ const timeRespondSchema = z.object({
42
+ result: z.union([z.string(), z.number()])
43
+ });
44
+ const uuidRequestSchema = z.object({});
45
+ const uuidRespondSchema = z.object({
46
+ result: z.string()
47
+ });
48
+ const shortIdRequestSchema = z.object({
49
+ length: z.number().int().min(4).max(32).default(8).describe("Length of the short ID (4-32). Default: 8.")
50
+ });
51
+ const shortIdRespondSchema = z.object({
52
+ result: z.string()
53
+ });
54
+ const randomRequestSchema = z.object({
55
+ length: z.number().int().min(1).max(256).default(16).describe("Length of the random string (1-256). Default: 16."),
56
+ charset: z.enum(["alphanumeric", "alpha", "numeric", "hex"]).default("alphanumeric").describe("Character set: alphanumeric, alpha, numeric, or hex. Default: alphanumeric.")
57
+ });
58
+ const randomRespondSchema = z.object({
59
+ result: z.string()
60
+ });
61
+ const randIntRequestSchema = z.object({
62
+ min: z.number().int().describe("Minimum value (inclusive)."),
63
+ max: z.number().int().describe("Maximum value (inclusive).")
64
+ });
65
+ const randIntRespondSchema = z.object({
66
+ result: z.number().int()
67
+ });
68
+ const choiceRequestSchema = z.object({
69
+ items: z.array(z.string()).min(1).describe("Array of items to choose from.")
70
+ });
71
+ const choiceRespondSchema = z.object({
72
+ result: z.string()
73
+ });
74
+ const shuffleRequestSchema = z.object({
75
+ items: z.array(z.string()).min(1).describe("Array of items to shuffle.")
76
+ });
77
+ const shuffleRespondSchema = z.object({
78
+ result: z.array(z.string())
79
+ });
80
+ const imageMetadataRequestSchema = z.object({
81
+ path: z.string().describe("Absolute or project-relative path to the image file.")
82
+ });
83
+ const imageMetadataRespondSchema = z.object({
84
+ result: z.object({
85
+ width: z.number().optional(),
86
+ height: z.number().optional(),
87
+ format: z.string().optional(),
88
+ space: z.string().optional(),
89
+ channels: z.number().optional(),
90
+ depth: z.string().optional(),
91
+ density: z.number().optional(),
92
+ hasAlpha: z.boolean().optional(),
93
+ size: z.number().optional()
94
+ })
95
+ });
96
+ const imageThumbnailRequestSchema = z.object({
97
+ path: z.string().describe("Absolute or project-relative path to the source image."),
98
+ width: z.number().int().min(1).max(1024).default(200).describe("Thumbnail width in pixels (1-1024). Default: 200."),
99
+ output: z.string().optional().describe("Output path. If omitted, saves alongside source with '.thumb{width}' suffix.")
100
+ });
101
+ const imageThumbnailRespondSchema = z.object({
102
+ result: z.object({
103
+ output: z.string(),
104
+ metadata: imageMetadataRespondSchema.shape.result
105
+ })
106
+ });
107
+ const imageResizeRequestSchema = z.object({
108
+ path: z.string().describe("Absolute or project-relative path to the source image."),
109
+ width: z.number().int().min(1).optional().describe("Target width in pixels."),
110
+ height: z.number().int().min(1).optional().describe("Target height in pixels."),
111
+ fit: z.enum(["cover", "contain", "fill", "inside", "outside"]).default("inside").describe("How to fit the image: cover, contain, fill, inside, outside. Default: inside."),
112
+ output: z.string().optional().describe("Output path. If omitted, saves alongside source with '.{width}x{height}' suffix.")
113
+ });
114
+ const imageResizeRespondSchema = z.object({
115
+ result: z.object({
116
+ output: z.string(),
117
+ metadata: imageMetadataRespondSchema.shape.result
118
+ })
119
+ });
120
+ const imageConvertRequestSchema = z.object({
121
+ path: z.string().describe("Absolute or project-relative path to the source image."),
122
+ format: z.enum(["jpeg", "png", "webp", "avif", "tiff"]).describe("Target image format."),
123
+ quality: z.number().int().min(1).max(100).optional().describe("Quality for lossy formats (1-100). Applies to jpeg, webp, avif."),
124
+ output: z.string().optional().describe("Output path. If omitted, saves alongside source with new extension.")
125
+ });
126
+ const imageConvertRespondSchema = z.object({
127
+ result: z.object({
128
+ output: z.string(),
129
+ metadata: imageMetadataRespondSchema.shape.result
130
+ })
131
+ });
132
+ function getArg(name) {
133
+ const idx = process.argv.indexOf(`--${name}`);
134
+ return idx !== -1 ? process.argv[idx + 1] : void 0;
135
+ }
136
+ const socketPath = getArg("socket-path");
137
+ const projectDir = getArg("project-dir");
138
+ if (!socketPath) {
139
+ console.error("[mcp-toolbox] Missing required argument: --socket-path");
140
+ process.exit(1);
141
+ }
142
+ if (!projectDir) {
143
+ console.error("[mcp-toolbox] Missing required argument: --project-dir");
144
+ process.exit(1);
145
+ }
146
+ const server = new McpServer({
147
+ name: "Toolbox",
148
+ version: "1.0.0",
149
+ description: "Built-in utility tools: base64, URL encode/decode, hash, time, UUID, random, etc."
150
+ });
151
+ server.registerTool(
152
+ "base64_encode",
153
+ {
154
+ description: "Encode a text string into Base64 format. Supports UTF-8 text.",
155
+ inputSchema: base64EncodeRequestSchema
156
+ },
157
+ async (input) => {
158
+ try {
159
+ const res = base64EncodeRespondSchema.parse(
160
+ await postToSocket("/toolbox/base64-encode", { text: input.text })
161
+ );
162
+ return { content: [{ type: "text", text: res.result }] };
163
+ } catch (err) {
164
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
165
+ }
166
+ }
167
+ );
168
+ server.registerTool(
169
+ "base64_decode",
170
+ {
171
+ description: "Decode a Base64-encoded string back into UTF-8 text.",
172
+ inputSchema: base64DecodeRequestSchema
173
+ },
174
+ async (input) => {
175
+ try {
176
+ const res = base64DecodeRespondSchema.parse(
177
+ await postToSocket("/toolbox/base64-decode", { base64: input.base64 })
178
+ );
179
+ return { content: [{ type: "text", text: res.result }] };
180
+ } catch (err) {
181
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
182
+ }
183
+ }
184
+ );
185
+ server.registerTool(
186
+ "url_encode",
187
+ {
188
+ description: "URL-encode a text string (percent-encoding).",
189
+ inputSchema: urlEncodeRequestSchema
190
+ },
191
+ async (input) => {
192
+ try {
193
+ const res = urlEncodeRespondSchema.parse(
194
+ await postToSocket("/toolbox/url-encode", { text: input.text })
195
+ );
196
+ return { content: [{ type: "text", text: res.result }] };
197
+ } catch (err) {
198
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
199
+ }
200
+ }
201
+ );
202
+ server.registerTool(
203
+ "url_decode",
204
+ {
205
+ description: "Decode a URL-encoded (percent-encoded) string back into text.",
206
+ inputSchema: urlDecodeRequestSchema
207
+ },
208
+ async (input) => {
209
+ try {
210
+ const res = urlDecodeRespondSchema.parse(
211
+ await postToSocket("/toolbox/url-decode", { text: input.text })
212
+ );
213
+ return { content: [{ type: "text", text: res.result }] };
214
+ } catch (err) {
215
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
216
+ }
217
+ }
218
+ );
219
+ server.registerTool(
220
+ "hash",
221
+ {
222
+ description: "Compute a hash (MD5, SHA1, or SHA256) of a text string. Returns hex digest.",
223
+ inputSchema: hashRequestSchema
224
+ },
225
+ async (input) => {
226
+ try {
227
+ const res = hashRespondSchema.parse(
228
+ await postToSocket("/toolbox/hash", {
229
+ text: input.text,
230
+ algorithm: input.algorithm
231
+ })
232
+ );
233
+ return { content: [{ type: "text", text: res.result }] };
234
+ } catch (err) {
235
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
236
+ }
237
+ }
238
+ );
239
+ server.registerTool(
240
+ "time",
241
+ {
242
+ description: "Get the current time. Returns either an ISO 8601 string or a Unix timestamp in seconds.",
243
+ inputSchema: timeRequestSchema
244
+ },
245
+ async (input) => {
246
+ try {
247
+ const res = timeRespondSchema.parse(
248
+ await postToSocket("/toolbox/time", { format: input.format })
249
+ );
250
+ return { content: [{ type: "text", text: String(res.result) }] };
251
+ } catch (err) {
252
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
253
+ }
254
+ }
255
+ );
256
+ server.registerTool(
257
+ "uuid",
258
+ {
259
+ description: "Generate a random UUID v4.",
260
+ inputSchema: uuidRequestSchema
261
+ },
262
+ async () => {
263
+ try {
264
+ const res = uuidRespondSchema.parse(await postToSocket("/toolbox/uuid", {}));
265
+ return { content: [{ type: "text", text: res.result }] };
266
+ } catch (err) {
267
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
268
+ }
269
+ }
270
+ );
271
+ server.registerTool(
272
+ "short_id",
273
+ {
274
+ description: "Generate a short random alphanumeric ID.",
275
+ inputSchema: shortIdRequestSchema
276
+ },
277
+ async (input) => {
278
+ try {
279
+ const res = shortIdRespondSchema.parse(
280
+ await postToSocket("/toolbox/short-id", { length: input.length })
281
+ );
282
+ return { content: [{ type: "text", text: res.result }] };
283
+ } catch (err) {
284
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
285
+ }
286
+ }
287
+ );
288
+ server.registerTool(
289
+ "random",
290
+ {
291
+ description: "Generate a random string with specified length and character set.",
292
+ inputSchema: randomRequestSchema
293
+ },
294
+ async (input) => {
295
+ try {
296
+ const res = randomRespondSchema.parse(
297
+ await postToSocket("/toolbox/random", {
298
+ length: input.length,
299
+ charset: input.charset
300
+ })
301
+ );
302
+ return { content: [{ type: "text", text: res.result }] };
303
+ } catch (err) {
304
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
305
+ }
306
+ }
307
+ );
308
+ server.registerTool(
309
+ "rand_int",
310
+ {
311
+ description: "Generate a random integer between min and max (inclusive).",
312
+ inputSchema: randIntRequestSchema
313
+ },
314
+ async (input) => {
315
+ try {
316
+ const res = randIntRespondSchema.parse(
317
+ await postToSocket("/toolbox/rand-int", { min: input.min, max: input.max })
318
+ );
319
+ return { content: [{ type: "text", text: String(res.result) }] };
320
+ } catch (err) {
321
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
322
+ }
323
+ }
324
+ );
325
+ server.registerTool(
326
+ "choice",
327
+ {
328
+ description: "Pick a random item from an array.",
329
+ inputSchema: choiceRequestSchema
330
+ },
331
+ async (input) => {
332
+ try {
333
+ const res = choiceRespondSchema.parse(
334
+ await postToSocket("/toolbox/choice", { items: input.items })
335
+ );
336
+ return { content: [{ type: "text", text: res.result }] };
337
+ } catch (err) {
338
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
339
+ }
340
+ }
341
+ );
342
+ server.registerTool(
343
+ "shuffle",
344
+ {
345
+ description: "Shuffle an array randomly (Fisher-Yates).",
346
+ inputSchema: shuffleRequestSchema
347
+ },
348
+ async (input) => {
349
+ try {
350
+ const res = shuffleRespondSchema.parse(
351
+ await postToSocket("/toolbox/shuffle", { items: input.items })
352
+ );
353
+ return { content: [{ type: "text", text: JSON.stringify(res.result) }] };
354
+ } catch (err) {
355
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
356
+ }
357
+ }
358
+ );
359
+ server.registerTool(
360
+ "image_metadata",
361
+ {
362
+ description: "Read image metadata (width, height, format, color space, channels, etc.) from a file.",
363
+ inputSchema: imageMetadataRequestSchema
364
+ },
365
+ async (input) => {
366
+ try {
367
+ const res = imageMetadataRespondSchema.parse(
368
+ await postToSocket("/toolbox/image-metadata", { path: input.path })
369
+ );
370
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
371
+ } catch (err) {
372
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
373
+ }
374
+ }
375
+ );
376
+ server.registerTool(
377
+ "image_thumbnail",
378
+ {
379
+ description: "Generate a thumbnail from an image. Returns the output file path and new image metadata.",
380
+ inputSchema: imageThumbnailRequestSchema
381
+ },
382
+ async (input) => {
383
+ try {
384
+ const res = imageThumbnailRespondSchema.parse(
385
+ await postToSocket("/toolbox/image-thumbnail", {
386
+ path: input.path,
387
+ width: input.width,
388
+ output: input.output
389
+ })
390
+ );
391
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
392
+ } catch (err) {
393
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
394
+ }
395
+ }
396
+ );
397
+ server.registerTool(
398
+ "image_resize",
399
+ {
400
+ description: "Resize an image to specified dimensions. Returns the output file path and new image metadata.",
401
+ inputSchema: imageResizeRequestSchema
402
+ },
403
+ async (input) => {
404
+ try {
405
+ const res = imageResizeRespondSchema.parse(
406
+ await postToSocket("/toolbox/image-resize", {
407
+ path: input.path,
408
+ width: input.width,
409
+ height: input.height,
410
+ fit: input.fit,
411
+ output: input.output
412
+ })
413
+ );
414
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
415
+ } catch (err) {
416
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
417
+ }
418
+ }
419
+ );
420
+ server.registerTool(
421
+ "image_convert",
422
+ {
423
+ description: "Convert an image to a different format (jpeg, png, webp, avif, tiff). Returns the output file path and new image metadata.",
424
+ inputSchema: imageConvertRequestSchema
425
+ },
426
+ async (input) => {
427
+ try {
428
+ const res = imageConvertRespondSchema.parse(
429
+ await postToSocket("/toolbox/image-convert", {
430
+ path: input.path,
431
+ format: input.format,
432
+ quality: input.quality,
433
+ output: input.output
434
+ })
435
+ );
436
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
437
+ } catch (err) {
438
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
439
+ }
440
+ }
441
+ );
442
+ function postToSocket(path, body) {
443
+ return new Promise((resolve, reject) => {
444
+ const data = JSON.stringify(body);
445
+ const options = {
446
+ socketPath,
447
+ path,
448
+ method: "POST",
449
+ headers: {
450
+ "Content-Type": "application/json",
451
+ "Content-Length": Buffer.byteLength(data)
452
+ }
453
+ };
454
+ const req = http.request(options, (res) => {
455
+ const chunks = [];
456
+ res.on("data", (chunk) => chunks.push(chunk));
457
+ res.on("end", () => {
458
+ const raw = Buffer.concat(chunks).toString("utf8");
459
+ try {
460
+ const parsed = JSON.parse(raw);
461
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
462
+ resolve(parsed);
463
+ } else {
464
+ reject(new Error(parsed.error || `HTTP ${res.statusCode}: ${raw}`));
465
+ }
466
+ } catch {
467
+ reject(new Error(`Invalid response (${res.statusCode}): ${raw}`));
468
+ }
469
+ });
470
+ });
471
+ req.on("error", (err) => {
472
+ reject(new Error(`Socket request failed: ${err.message}`));
473
+ });
474
+ req.write(data);
475
+ req.end();
476
+ });
477
+ }
478
+ async function main() {
479
+ const transport = new StdioServerTransport();
480
+ await server.connect(transport);
481
+ }
482
+ main().catch(console.error);
@@ -232,6 +232,7 @@ async function parse(req) {
232
232
  if (!tree) throw new Error("Failed to parse");
233
233
  let result = [];
234
234
  const typeSet = new Set(req.symbols.flatMap((s) => s.types));
235
+ const symbolScanBoundaryTypes = new Set(req.symbolScanBoundaryTypes || []);
235
236
  const detailLabels = req.statementDetail ? new Set(req.statementDetail.labels || DEFAULT_DETAIL_LABELS) : null;
236
237
  const cursor = tree.walk();
237
238
  try {
@@ -289,6 +290,10 @@ async function parse(req) {
289
290
  }
290
291
  }
291
292
  }
293
+ if (descend && symbolScanBoundaryTypes.has(t)) {
294
+ descend = false;
295
+ continue;
296
+ }
292
297
  if (descend && cursor.gotoFirstChild()) continue;
293
298
  if (cursor.gotoNextSibling()) {
294
299
  descend = true;