@zythum02/fello-server 0.1.42 → 0.1.46

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 (293) hide show
  1. package/README.md +10 -2
  2. package/out/renderer/assets/{_baseUniq-CNYzw1DB.js → _baseUniq-JI50qq3v.js} +1 -1
  3. package/out/renderer/assets/_baseUniq-JI50qq3v.js.br +0 -0
  4. package/out/renderer/assets/_baseUniq-JI50qq3v.js.gz +0 -0
  5. package/out/renderer/assets/{arc-vyANDg9_.js → arc-D82BffDI.js} +1 -1
  6. package/out/renderer/assets/arc-D82BffDI.js.br +0 -0
  7. package/out/renderer/assets/arc-D82BffDI.js.gz +0 -0
  8. package/out/renderer/assets/{architectureDiagram-Q4EWVU46-BzcUqnqp.js → architectureDiagram-Q4EWVU46-BBRMDHvv.js} +5 -5
  9. package/out/renderer/assets/architectureDiagram-Q4EWVU46-BBRMDHvv.js.br +0 -0
  10. package/out/renderer/assets/architectureDiagram-Q4EWVU46-BBRMDHvv.js.gz +0 -0
  11. package/out/renderer/assets/{blockDiagram-DXYQGD6D-CTEZWa8S.js → blockDiagram-DXYQGD6D-CiCuaiyL.js} +6 -6
  12. package/out/renderer/assets/blockDiagram-DXYQGD6D-CiCuaiyL.js.br +0 -0
  13. package/out/renderer/assets/blockDiagram-DXYQGD6D-CiCuaiyL.js.gz +0 -0
  14. package/out/renderer/assets/{c4Diagram-AHTNJAMY-BuFQdjjc.js → c4Diagram-AHTNJAMY-D9PM_R8p.js} +2 -2
  15. package/out/renderer/assets/c4Diagram-AHTNJAMY-D9PM_R8p.js.br +0 -0
  16. package/out/renderer/assets/c4Diagram-AHTNJAMY-D9PM_R8p.js.gz +0 -0
  17. package/out/renderer/assets/{channel-DyKDQZ32.js → channel-CklIgqOK.js} +1 -1
  18. package/out/renderer/assets/{chunk-4BX2VUAB-BKj1YSOw.js → chunk-4BX2VUAB-DK0KQU1M.js} +1 -1
  19. package/out/renderer/assets/{chunk-4TB4RGXK-CUfY3XSR.js → chunk-4TB4RGXK-CxHdBbdg.js} +5 -5
  20. package/out/renderer/assets/chunk-4TB4RGXK-CxHdBbdg.js.br +0 -0
  21. package/out/renderer/assets/chunk-4TB4RGXK-CxHdBbdg.js.gz +0 -0
  22. package/out/renderer/assets/{chunk-55IACEB6-BPafcNL-.js → chunk-55IACEB6-ykIH_AN3.js} +1 -1
  23. package/out/renderer/assets/{chunk-EDXVE4YY-DlWjafzT.js → chunk-EDXVE4YY-DUOS0pBH.js} +1 -1
  24. package/out/renderer/assets/chunk-EDXVE4YY-DUOS0pBH.js.br +0 -0
  25. package/out/renderer/assets/chunk-EDXVE4YY-DUOS0pBH.js.gz +0 -0
  26. package/out/renderer/assets/{chunk-FMBD7UC4-CI2WhJKs.js → chunk-FMBD7UC4-Bm3BHCuh.js} +1 -1
  27. package/out/renderer/assets/{chunk-OYMX7WX6-1XAYgymx.js → chunk-OYMX7WX6-DH9JMSMI.js} +3 -3
  28. package/out/renderer/assets/chunk-OYMX7WX6-DH9JMSMI.js.br +0 -0
  29. package/out/renderer/assets/{chunk-OYMX7WX6-1XAYgymx.js.gz → chunk-OYMX7WX6-DH9JMSMI.js.gz} +0 -0
  30. package/out/renderer/assets/{chunk-QZHKN3VN-B2Kh1qhq.js → chunk-QZHKN3VN-LffrA1jF.js} +1 -1
  31. package/out/renderer/assets/{chunk-YZCP3GAM-DKTOTV26.js → chunk-YZCP3GAM-B1pm_POM.js} +1 -1
  32. package/out/renderer/assets/chunk-YZCP3GAM-B1pm_POM.js.br +0 -0
  33. package/out/renderer/assets/chunk-YZCP3GAM-B1pm_POM.js.gz +0 -0
  34. package/out/renderer/assets/{classDiagram-6PBFFD2Q-BSxgcC66.js → classDiagram-6PBFFD2Q-O6uMquiH.js} +6 -6
  35. package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-BSxgcC66.js → classDiagram-v2-HSJHXN6E-O6uMquiH.js} +6 -6
  36. package/out/renderer/assets/{clone-B-NXg17n.js → clone-BhlnPWG5.js} +1 -1
  37. package/out/renderer/assets/{cose-bilkent-S5V4N54A-Dr92qdgA.js → cose-bilkent-S5V4N54A-ljZi9cz-.js} +1 -1
  38. package/out/renderer/assets/cose-bilkent-S5V4N54A-ljZi9cz-.js.br +0 -0
  39. package/out/renderer/assets/cose-bilkent-S5V4N54A-ljZi9cz-.js.gz +0 -0
  40. package/out/renderer/assets/{dagre-KV5264BT-7l16BI52.js → dagre-KV5264BT-DqnNoP69.js} +6 -6
  41. package/out/renderer/assets/dagre-KV5264BT-DqnNoP69.js.br +0 -0
  42. package/out/renderer/assets/dagre-KV5264BT-DqnNoP69.js.gz +0 -0
  43. package/out/renderer/assets/{diagram-5BDNPKRD-7J0KHPTw.js → diagram-5BDNPKRD-pBYJseHI.js} +6 -6
  44. package/out/renderer/assets/diagram-5BDNPKRD-pBYJseHI.js.br +0 -0
  45. package/out/renderer/assets/diagram-5BDNPKRD-pBYJseHI.js.gz +0 -0
  46. package/out/renderer/assets/{diagram-G4DWMVQ6-Dgk1T3Ng.js → diagram-G4DWMVQ6-IPm9zWeG.js} +6 -6
  47. package/out/renderer/assets/diagram-G4DWMVQ6-IPm9zWeG.js.br +0 -0
  48. package/out/renderer/assets/diagram-G4DWMVQ6-IPm9zWeG.js.gz +0 -0
  49. package/out/renderer/assets/{diagram-MMDJMWI5-DerRkmYs.js → diagram-MMDJMWI5-DSH58P_m.js} +5 -5
  50. package/out/renderer/assets/diagram-MMDJMWI5-DSH58P_m.js.br +0 -0
  51. package/out/renderer/assets/diagram-MMDJMWI5-DSH58P_m.js.gz +0 -0
  52. package/out/renderer/assets/{diagram-TYMM5635-DR9dcwKl.js → diagram-TYMM5635-Czl-GGCp.js} +5 -5
  53. package/out/renderer/assets/diagram-TYMM5635-Czl-GGCp.js.br +0 -0
  54. package/out/renderer/assets/diagram-TYMM5635-Czl-GGCp.js.gz +0 -0
  55. package/out/renderer/assets/docx_parser_bg-CIRepKGp.wasm +0 -0
  56. package/out/renderer/assets/{erDiagram-SMLLAGMA-CZ2vNtP6.js → erDiagram-SMLLAGMA-BENPNKae.js} +4 -4
  57. package/out/renderer/assets/erDiagram-SMLLAGMA-BENPNKae.js.br +0 -0
  58. package/out/renderer/assets/erDiagram-SMLLAGMA-BENPNKae.js.gz +0 -0
  59. package/out/renderer/assets/{flowDiagram-DWJPFMVM-DOL_mdve.js → flowDiagram-DWJPFMVM-T3H9Pqwa.js} +6 -6
  60. package/out/renderer/assets/flowDiagram-DWJPFMVM-T3H9Pqwa.js.br +0 -0
  61. package/out/renderer/assets/flowDiagram-DWJPFMVM-T3H9Pqwa.js.gz +0 -0
  62. package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-DXfCf0sW.js → ganttDiagram-T4ZO3ILL-Hh-AJvLC.js} +2 -2
  63. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-Hh-AJvLC.js.br +0 -0
  64. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-Hh-AJvLC.js.gz +0 -0
  65. package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-Bi19RzUn.js → gitGraphDiagram-UUTBAWPF-BDXB9jT_.js} +6 -6
  66. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BDXB9jT_.js.br +0 -0
  67. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BDXB9jT_.js.gz +0 -0
  68. package/out/renderer/assets/{graph-BX6gbV3Q.js → graph-MWvZ47Hf.js} +2 -2
  69. package/out/renderer/assets/graph-MWvZ47Hf.js.br +0 -0
  70. package/out/renderer/assets/graph-MWvZ47Hf.js.gz +0 -0
  71. package/out/renderer/assets/{highlighted-body-OFNGDK62-CpZorxCd.js → highlighted-body-OFNGDK62-Bvl34wyh.js} +1 -1
  72. package/out/renderer/assets/{index-BihXRHbW.css → index-BTEKdfpj.css} +1 -1
  73. package/out/renderer/assets/index-BTEKdfpj.css.br +0 -0
  74. package/out/renderer/assets/index-BTEKdfpj.css.gz +0 -0
  75. package/out/renderer/assets/{index-Ckb2j9e5.js → index-BpPCAjGn.js} +49509 -28314
  76. package/out/renderer/assets/index-BpPCAjGn.js.br +0 -0
  77. package/out/renderer/assets/index-BpPCAjGn.js.gz +0 -0
  78. package/out/renderer/assets/{infoDiagram-42DDH7IO-BB7FT1Ls.js → infoDiagram-42DDH7IO-Ca_9-363.js} +4 -4
  79. package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js → ishikawaDiagram-UXIWVN3A-D3GtyA4e.js} +1 -1
  80. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3GtyA4e.js.br +0 -0
  81. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3GtyA4e.js.gz +0 -0
  82. package/out/renderer/assets/{journeyDiagram-VCZTEJTY-bhcMvreZ.js → journeyDiagram-VCZTEJTY-DkQAlc0b.js} +4 -4
  83. package/out/renderer/assets/journeyDiagram-VCZTEJTY-DkQAlc0b.js.br +0 -0
  84. package/out/renderer/assets/journeyDiagram-VCZTEJTY-DkQAlc0b.js.gz +0 -0
  85. package/out/renderer/assets/{kanban-definition-6JOO6SKY-CRg0O3h_.js → kanban-definition-6JOO6SKY-DamLzi6S.js} +2 -2
  86. package/out/renderer/assets/kanban-definition-6JOO6SKY-DamLzi6S.js.br +0 -0
  87. package/out/renderer/assets/kanban-definition-6JOO6SKY-DamLzi6S.js.gz +0 -0
  88. package/out/renderer/assets/{layout-Gz3MMSfR.js → layout-Dw_ZcO_L.js} +4 -4
  89. package/out/renderer/assets/layout-Dw_ZcO_L.js.br +0 -0
  90. package/out/renderer/assets/layout-Dw_ZcO_L.js.gz +0 -0
  91. package/out/renderer/assets/{linear-B-XoCpT2.js → linear-Dh5vwFy4.js} +1 -1
  92. package/out/renderer/assets/linear-Dh5vwFy4.js.br +0 -0
  93. package/out/renderer/assets/linear-Dh5vwFy4.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-DDCW5FhP.js} +2 -2
  98. package/out/renderer/assets/min-DDCW5FhP.js.br +0 -0
  99. package/out/renderer/assets/min-DDCW5FhP.js.gz +0 -0
  100. package/out/renderer/assets/{mindmap-definition-QFDTVHPH-QEcTW8Sk.js → mindmap-definition-QFDTVHPH-B3rcYXPK.js} +3 -3
  101. package/out/renderer/assets/mindmap-definition-QFDTVHPH-B3rcYXPK.js.br +0 -0
  102. package/out/renderer/assets/mindmap-definition-QFDTVHPH-B3rcYXPK.js.gz +0 -0
  103. package/out/renderer/assets/{pdf-worker-wrapper-D9W0fDhT.js → pdf-worker-wrapper-D6dv_dnM.js} +2803 -2560
  104. package/out/renderer/assets/pdf-worker-wrapper-D6dv_dnM.js.br +0 -0
  105. package/out/renderer/assets/pdf-worker-wrapper-D6dv_dnM.js.gz +0 -0
  106. package/out/renderer/assets/{pieDiagram-DEJITSTG-BdyIMG3r.js → pieDiagram-DEJITSTG-CsCXUSKq.js} +6 -6
  107. package/out/renderer/assets/pieDiagram-DEJITSTG-CsCXUSKq.js.br +0 -0
  108. package/out/renderer/assets/pieDiagram-DEJITSTG-CsCXUSKq.js.gz +0 -0
  109. package/out/renderer/assets/pptx_parser_bg-Dnsy0qwf.wasm +0 -0
  110. package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-CO63F50c.js → quadrantDiagram-34T5L4WZ-B91qjO1u.js} +2 -2
  111. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B91qjO1u.js.br +0 -0
  112. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B91qjO1u.js.gz +0 -0
  113. package/out/renderer/assets/render-worker-host-BG3a7brz-Q7Y2znhP.js +25 -0
  114. package/out/renderer/assets/render-worker-host-BG3a7brz-Q7Y2znhP.js.br +0 -0
  115. package/out/renderer/assets/render-worker-host-BG3a7brz-Q7Y2znhP.js.gz +0 -0
  116. package/out/renderer/assets/render-worker-host-CsB-dPJv-gJhIrzf_.js +25 -0
  117. package/out/renderer/assets/render-worker-host-CsB-dPJv-gJhIrzf_.js.br +0 -0
  118. package/out/renderer/assets/render-worker-host-CsB-dPJv-gJhIrzf_.js.gz +0 -0
  119. package/out/renderer/assets/render-worker-host-Cyv5Hkbh-BAiWfcv_.js +25 -0
  120. package/out/renderer/assets/render-worker-host-Cyv5Hkbh-BAiWfcv_.js.br +0 -0
  121. package/out/renderer/assets/render-worker-host-Cyv5Hkbh-BAiWfcv_.js.gz +0 -0
  122. package/out/renderer/assets/{requirementDiagram-MS252O5E-Ch2CVgfZ.js → requirementDiagram-MS252O5E-oDcN7qN5.js} +3 -3
  123. package/out/renderer/assets/requirementDiagram-MS252O5E-oDcN7qN5.js.br +0 -0
  124. package/out/renderer/assets/requirementDiagram-MS252O5E-oDcN7qN5.js.gz +0 -0
  125. package/out/renderer/assets/{sankeyDiagram-XADWPNL6--b1mWkl5.js → sankeyDiagram-XADWPNL6-DNQO_6oX.js} +1 -1
  126. package/out/renderer/assets/sankeyDiagram-XADWPNL6-DNQO_6oX.js.br +0 -0
  127. package/out/renderer/assets/sankeyDiagram-XADWPNL6-DNQO_6oX.js.gz +0 -0
  128. package/out/renderer/assets/{sequenceDiagram-FGHM5R23-CNautoFU.js → sequenceDiagram-FGHM5R23-DCh5u6wY.js} +3 -3
  129. package/out/renderer/assets/sequenceDiagram-FGHM5R23-DCh5u6wY.js.br +0 -0
  130. package/out/renderer/assets/sequenceDiagram-FGHM5R23-DCh5u6wY.js.gz +0 -0
  131. package/out/renderer/assets/{stateDiagram-FHFEXIEX-CKsv5tYk.js → stateDiagram-FHFEXIEX-DV0gaxkj.js} +8 -8
  132. package/out/renderer/assets/stateDiagram-FHFEXIEX-DV0gaxkj.js.br +0 -0
  133. package/out/renderer/assets/stateDiagram-FHFEXIEX-DV0gaxkj.js.gz +0 -0
  134. package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-CkdzkP8w.js → stateDiagram-v2-QKLJ7IA2-D1Sk_TKE.js} +4 -4
  135. package/out/renderer/assets/theming_false-C5NatR_w.js +5 -0
  136. package/out/renderer/assets/theming_false-CG4cvbgC.js +5 -0
  137. package/out/renderer/assets/theming_false-CM9D8h_m.js +5 -0
  138. package/out/renderer/assets/theming_false-CdT0AbCV.js +5 -0
  139. package/out/renderer/assets/theming_false-Cfu67eQJ.js +5 -0
  140. package/out/renderer/assets/theming_false-Cx4KIHFf.js +5 -0
  141. package/out/renderer/assets/theming_false-DT3t1zD4.js +5 -0
  142. package/out/renderer/assets/theming_false-Djik2YgE.js +5 -0
  143. package/out/renderer/assets/theming_false-PG6ooLjt.js +5 -0
  144. package/out/renderer/assets/theming_false-XUCKLqh3.js +5 -0
  145. package/out/renderer/assets/{timeline-definition-GMOUNBTQ-CF_zqktL.js → timeline-definition-GMOUNBTQ-Nq47TkPV.js} +2 -2
  146. package/out/renderer/assets/timeline-definition-GMOUNBTQ-Nq47TkPV.js.br +0 -0
  147. package/out/renderer/assets/timeline-definition-GMOUNBTQ-Nq47TkPV.js.gz +0 -0
  148. package/out/renderer/assets/{vennDiagram-DHZGUBPP-C7q9SHIx.js → vennDiagram-DHZGUBPP-CMbmY-R_.js} +1 -1
  149. package/out/renderer/assets/vennDiagram-DHZGUBPP-CMbmY-R_.js.br +0 -0
  150. package/out/renderer/assets/vennDiagram-DHZGUBPP-CMbmY-R_.js.gz +0 -0
  151. package/out/renderer/assets/{wardley-RL74JXVD-DmW7d79y.js → wardley-RL74JXVD-aLLqbf8o.js} +3 -3
  152. package/out/renderer/assets/wardley-RL74JXVD-aLLqbf8o.js.br +0 -0
  153. package/out/renderer/assets/wardley-RL74JXVD-aLLqbf8o.js.gz +0 -0
  154. package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-1VzGmAot.js → wardleyDiagram-NUSXRM2D-8Kc4VQIw.js} +5 -5
  155. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-8Kc4VQIw.js.br +0 -0
  156. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-8Kc4VQIw.js.gz +0 -0
  157. package/out/renderer/assets/xlsx_parser_bg-BM7cLtfq.wasm +0 -0
  158. package/out/renderer/assets/{xychartDiagram-5P7HB3ND-DznKXnsr.js → xychartDiagram-5P7HB3ND-YtEoXmYf.js} +2 -2
  159. package/out/renderer/assets/xychartDiagram-5P7HB3ND-YtEoXmYf.js.br +0 -0
  160. package/out/renderer/assets/xychartDiagram-5P7HB3ND-YtEoXmYf.js.gz +0 -0
  161. package/out/renderer/index.html +2 -2
  162. package/out/renderer/index.html.br +0 -0
  163. package/out/renderer/index.html.gz +0 -0
  164. package/out/scripts/mcp-image-generation/server.mjs +140 -0
  165. package/out/scripts/mcp-memo/server.mjs +174 -79
  166. package/out/scripts/mcp-memory/server.mjs +61 -45
  167. package/out/scripts/mcp-toolbox/server.mjs +517 -0
  168. package/out/scripts/worker-file-outline/worker.mjs +5 -0
  169. package/out/server/main.js +1551 -374
  170. package/package.json +11 -8
  171. package/out/renderer/assets/_baseUniq-CNYzw1DB.js.br +0 -0
  172. package/out/renderer/assets/_baseUniq-CNYzw1DB.js.gz +0 -0
  173. package/out/renderer/assets/arc-vyANDg9_.js.br +0 -0
  174. package/out/renderer/assets/arc-vyANDg9_.js.gz +0 -0
  175. package/out/renderer/assets/architectureDiagram-Q4EWVU46-BzcUqnqp.js.br +0 -0
  176. package/out/renderer/assets/architectureDiagram-Q4EWVU46-BzcUqnqp.js.gz +0 -0
  177. package/out/renderer/assets/blockDiagram-DXYQGD6D-CTEZWa8S.js.br +0 -0
  178. package/out/renderer/assets/blockDiagram-DXYQGD6D-CTEZWa8S.js.gz +0 -0
  179. package/out/renderer/assets/c4Diagram-AHTNJAMY-BuFQdjjc.js.br +0 -0
  180. package/out/renderer/assets/c4Diagram-AHTNJAMY-BuFQdjjc.js.gz +0 -0
  181. package/out/renderer/assets/chunk-4TB4RGXK-CUfY3XSR.js.br +0 -0
  182. package/out/renderer/assets/chunk-4TB4RGXK-CUfY3XSR.js.gz +0 -0
  183. package/out/renderer/assets/chunk-EDXVE4YY-DlWjafzT.js.br +0 -0
  184. package/out/renderer/assets/chunk-EDXVE4YY-DlWjafzT.js.gz +0 -0
  185. package/out/renderer/assets/chunk-OYMX7WX6-1XAYgymx.js.br +0 -0
  186. package/out/renderer/assets/chunk-YZCP3GAM-DKTOTV26.js.br +0 -0
  187. package/out/renderer/assets/chunk-YZCP3GAM-DKTOTV26.js.gz +0 -0
  188. package/out/renderer/assets/cose-bilkent-S5V4N54A-Dr92qdgA.js.br +0 -0
  189. package/out/renderer/assets/cose-bilkent-S5V4N54A-Dr92qdgA.js.gz +0 -0
  190. package/out/renderer/assets/dagre-KV5264BT-7l16BI52.js.br +0 -0
  191. package/out/renderer/assets/dagre-KV5264BT-7l16BI52.js.gz +0 -0
  192. package/out/renderer/assets/diagram-5BDNPKRD-7J0KHPTw.js.br +0 -0
  193. package/out/renderer/assets/diagram-5BDNPKRD-7J0KHPTw.js.gz +0 -0
  194. package/out/renderer/assets/diagram-G4DWMVQ6-Dgk1T3Ng.js.br +0 -0
  195. package/out/renderer/assets/diagram-G4DWMVQ6-Dgk1T3Ng.js.gz +0 -0
  196. package/out/renderer/assets/diagram-MMDJMWI5-DerRkmYs.js.br +0 -0
  197. package/out/renderer/assets/diagram-MMDJMWI5-DerRkmYs.js.gz +0 -0
  198. package/out/renderer/assets/diagram-TYMM5635-DR9dcwKl.js.br +0 -0
  199. package/out/renderer/assets/diagram-TYMM5635-DR9dcwKl.js.gz +0 -0
  200. package/out/renderer/assets/docx_parser_bg-Dwb1lJCk.wasm +0 -0
  201. package/out/renderer/assets/erDiagram-SMLLAGMA-CZ2vNtP6.js.br +0 -0
  202. package/out/renderer/assets/erDiagram-SMLLAGMA-CZ2vNtP6.js.gz +0 -0
  203. package/out/renderer/assets/flowDiagram-DWJPFMVM-DOL_mdve.js.br +0 -0
  204. package/out/renderer/assets/flowDiagram-DWJPFMVM-DOL_mdve.js.gz +0 -0
  205. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DXfCf0sW.js.br +0 -0
  206. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DXfCf0sW.js.gz +0 -0
  207. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-Bi19RzUn.js.br +0 -0
  208. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-Bi19RzUn.js.gz +0 -0
  209. package/out/renderer/assets/graph-BX6gbV3Q.js.br +0 -0
  210. package/out/renderer/assets/graph-BX6gbV3Q.js.gz +0 -0
  211. package/out/renderer/assets/index-BihXRHbW.css.br +0 -0
  212. package/out/renderer/assets/index-BihXRHbW.css.gz +0 -0
  213. package/out/renderer/assets/index-Ckb2j9e5.js.br +0 -0
  214. package/out/renderer/assets/index-Ckb2j9e5.js.gz +0 -0
  215. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js.br +0 -0
  216. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js.gz +0 -0
  217. package/out/renderer/assets/journeyDiagram-VCZTEJTY-bhcMvreZ.js.br +0 -0
  218. package/out/renderer/assets/journeyDiagram-VCZTEJTY-bhcMvreZ.js.gz +0 -0
  219. package/out/renderer/assets/kanban-definition-6JOO6SKY-CRg0O3h_.js.br +0 -0
  220. package/out/renderer/assets/kanban-definition-6JOO6SKY-CRg0O3h_.js.gz +0 -0
  221. package/out/renderer/assets/layout-Gz3MMSfR.js.br +0 -0
  222. package/out/renderer/assets/layout-Gz3MMSfR.js.gz +0 -0
  223. package/out/renderer/assets/linear-B-XoCpT2.js.br +0 -0
  224. package/out/renderer/assets/linear-B-XoCpT2.js.gz +0 -0
  225. package/out/renderer/assets/min-pbiT8SH0.js.br +0 -0
  226. package/out/renderer/assets/min-pbiT8SH0.js.gz +0 -0
  227. package/out/renderer/assets/mindmap-definition-QFDTVHPH-QEcTW8Sk.js.br +0 -0
  228. package/out/renderer/assets/mindmap-definition-QFDTVHPH-QEcTW8Sk.js.gz +0 -0
  229. package/out/renderer/assets/pdf-worker-wrapper-D9W0fDhT.js.br +0 -0
  230. package/out/renderer/assets/pdf-worker-wrapper-D9W0fDhT.js.gz +0 -0
  231. package/out/renderer/assets/pieDiagram-DEJITSTG-BdyIMG3r.js.br +0 -0
  232. package/out/renderer/assets/pieDiagram-DEJITSTG-BdyIMG3r.js.gz +0 -0
  233. package/out/renderer/assets/pierre-dark-BL-l9r39.js +0 -4
  234. package/out/renderer/assets/pierre-dark-BL-l9r39.js.br +0 -0
  235. package/out/renderer/assets/pierre-dark-BL-l9r39.js.gz +0 -0
  236. package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js +0 -4
  237. package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js.br +0 -0
  238. package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js.gz +0 -0
  239. package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js +0 -4
  240. package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js.br +0 -0
  241. package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js.gz +0 -0
  242. package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js +0 -4
  243. package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js.br +0 -0
  244. package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js.gz +0 -0
  245. package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js +0 -4
  246. package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js.br +0 -0
  247. package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js.gz +0 -0
  248. package/out/renderer/assets/pierre-light-BUzWTcjO.js +0 -4
  249. package/out/renderer/assets/pierre-light-BUzWTcjO.js.br +0 -0
  250. package/out/renderer/assets/pierre-light-BUzWTcjO.js.gz +0 -0
  251. package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js +0 -4
  252. package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js.br +0 -0
  253. package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js.gz +0 -0
  254. package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js +0 -4
  255. package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js.br +0 -0
  256. package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js.gz +0 -0
  257. package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js +0 -4
  258. package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js.br +0 -0
  259. package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js.gz +0 -0
  260. package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js +0 -4
  261. package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js.br +0 -0
  262. package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js.gz +0 -0
  263. package/out/renderer/assets/pptx_parser_bg-N_v237u9.wasm +0 -0
  264. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-CO63F50c.js.br +0 -0
  265. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-CO63F50c.js.gz +0 -0
  266. package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js +0 -25
  267. package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js.br +0 -0
  268. package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js.gz +0 -0
  269. package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js +0 -25
  270. package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js.br +0 -0
  271. package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js.gz +0 -0
  272. package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js +0 -25
  273. package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js.br +0 -0
  274. package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js.gz +0 -0
  275. package/out/renderer/assets/requirementDiagram-MS252O5E-Ch2CVgfZ.js.br +0 -0
  276. package/out/renderer/assets/requirementDiagram-MS252O5E-Ch2CVgfZ.js.gz +0 -0
  277. package/out/renderer/assets/sankeyDiagram-XADWPNL6--b1mWkl5.js.br +0 -0
  278. package/out/renderer/assets/sankeyDiagram-XADWPNL6--b1mWkl5.js.gz +0 -0
  279. package/out/renderer/assets/sequenceDiagram-FGHM5R23-CNautoFU.js.br +0 -0
  280. package/out/renderer/assets/sequenceDiagram-FGHM5R23-CNautoFU.js.gz +0 -0
  281. package/out/renderer/assets/stateDiagram-FHFEXIEX-CKsv5tYk.js.br +0 -0
  282. package/out/renderer/assets/stateDiagram-FHFEXIEX-CKsv5tYk.js.gz +0 -0
  283. package/out/renderer/assets/timeline-definition-GMOUNBTQ-CF_zqktL.js.br +0 -0
  284. package/out/renderer/assets/timeline-definition-GMOUNBTQ-CF_zqktL.js.gz +0 -0
  285. package/out/renderer/assets/vennDiagram-DHZGUBPP-C7q9SHIx.js.br +0 -0
  286. package/out/renderer/assets/vennDiagram-DHZGUBPP-C7q9SHIx.js.gz +0 -0
  287. package/out/renderer/assets/wardley-RL74JXVD-DmW7d79y.js.br +0 -0
  288. package/out/renderer/assets/wardley-RL74JXVD-DmW7d79y.js.gz +0 -0
  289. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-1VzGmAot.js.br +0 -0
  290. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-1VzGmAot.js.gz +0 -0
  291. package/out/renderer/assets/xlsx_parser_bg-CQ5Lc7LS.wasm +0 -0
  292. package/out/renderer/assets/xychartDiagram-5P7HB3ND-DznKXnsr.js.br +0 -0
  293. package/out/renderer/assets/xychartDiagram-5P7HB3ND-DznKXnsr.js.gz +0 -0
@@ -0,0 +1,517 @@
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
+ const qrCodeRequestSchema = z.object({
133
+ text: z.string().min(1).describe("Text to encode in the QR code."),
134
+ output: z.string().optional().describe("Output PNG path. If omitted, saves as 'qrcode.png' in the project root."),
135
+ size: z.number().int().min(1).max(50).default(5).describe("Size of each QR module in pixels (1-50). Default: 5."),
136
+ margin: z.number().int().min(0).max(100).default(4).describe("White-space margin around the QR code in modules (0-100). Default: 4."),
137
+ errorCorrection: z.enum(["L", "M", "Q", "H"]).default("M").describe("Error correction level. Default: M.")
138
+ });
139
+ const qrCodeRespondSchema = z.object({
140
+ result: z.object({
141
+ output: z.string()
142
+ })
143
+ });
144
+ function getArg(name) {
145
+ const idx = process.argv.indexOf(`--${name}`);
146
+ return idx !== -1 ? process.argv[idx + 1] : void 0;
147
+ }
148
+ const socketPath = getArg("socket-path");
149
+ const projectDir = getArg("project-dir");
150
+ if (!socketPath) {
151
+ console.error("[mcp-toolbox] Missing required argument: --socket-path");
152
+ process.exit(1);
153
+ }
154
+ if (!projectDir) {
155
+ console.error("[mcp-toolbox] Missing required argument: --project-dir");
156
+ process.exit(1);
157
+ }
158
+ const server = new McpServer({
159
+ name: "Toolbox",
160
+ version: "1.0.0",
161
+ description: "Built-in utility tools: base64, URL encode/decode, hash, time, UUID, random, etc."
162
+ });
163
+ server.registerTool(
164
+ "base64_encode",
165
+ {
166
+ description: "Encode a text string into Base64 format. Supports UTF-8 text.",
167
+ inputSchema: base64EncodeRequestSchema
168
+ },
169
+ async (input) => {
170
+ try {
171
+ const res = base64EncodeRespondSchema.parse(
172
+ await postToSocket("/toolbox/base64-encode", { text: input.text })
173
+ );
174
+ return { content: [{ type: "text", text: res.result }] };
175
+ } catch (err) {
176
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
177
+ }
178
+ }
179
+ );
180
+ server.registerTool(
181
+ "base64_decode",
182
+ {
183
+ description: "Decode a Base64-encoded string back into UTF-8 text.",
184
+ inputSchema: base64DecodeRequestSchema
185
+ },
186
+ async (input) => {
187
+ try {
188
+ const res = base64DecodeRespondSchema.parse(
189
+ await postToSocket("/toolbox/base64-decode", { base64: input.base64 })
190
+ );
191
+ return { content: [{ type: "text", text: res.result }] };
192
+ } catch (err) {
193
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
194
+ }
195
+ }
196
+ );
197
+ server.registerTool(
198
+ "url_encode",
199
+ {
200
+ description: "URL-encode a text string (percent-encoding).",
201
+ inputSchema: urlEncodeRequestSchema
202
+ },
203
+ async (input) => {
204
+ try {
205
+ const res = urlEncodeRespondSchema.parse(
206
+ await postToSocket("/toolbox/url-encode", { text: input.text })
207
+ );
208
+ return { content: [{ type: "text", text: res.result }] };
209
+ } catch (err) {
210
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
211
+ }
212
+ }
213
+ );
214
+ server.registerTool(
215
+ "url_decode",
216
+ {
217
+ description: "Decode a URL-encoded (percent-encoded) string back into text.",
218
+ inputSchema: urlDecodeRequestSchema
219
+ },
220
+ async (input) => {
221
+ try {
222
+ const res = urlDecodeRespondSchema.parse(
223
+ await postToSocket("/toolbox/url-decode", { text: input.text })
224
+ );
225
+ return { content: [{ type: "text", text: res.result }] };
226
+ } catch (err) {
227
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
228
+ }
229
+ }
230
+ );
231
+ server.registerTool(
232
+ "hash",
233
+ {
234
+ description: "Compute a hash (MD5, SHA1, or SHA256) of a text string. Returns hex digest.",
235
+ inputSchema: hashRequestSchema
236
+ },
237
+ async (input) => {
238
+ try {
239
+ const res = hashRespondSchema.parse(
240
+ await postToSocket("/toolbox/hash", {
241
+ text: input.text,
242
+ algorithm: input.algorithm
243
+ })
244
+ );
245
+ return { content: [{ type: "text", text: res.result }] };
246
+ } catch (err) {
247
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
248
+ }
249
+ }
250
+ );
251
+ server.registerTool(
252
+ "time",
253
+ {
254
+ description: "Get the current time. Returns either an ISO 8601 string or a Unix timestamp in seconds.",
255
+ inputSchema: timeRequestSchema
256
+ },
257
+ async (input) => {
258
+ try {
259
+ const res = timeRespondSchema.parse(
260
+ await postToSocket("/toolbox/time", { format: input.format })
261
+ );
262
+ return { content: [{ type: "text", text: String(res.result) }] };
263
+ } catch (err) {
264
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
265
+ }
266
+ }
267
+ );
268
+ server.registerTool(
269
+ "uuid",
270
+ {
271
+ description: "Generate a random UUID v4.",
272
+ inputSchema: uuidRequestSchema
273
+ },
274
+ async () => {
275
+ try {
276
+ const res = uuidRespondSchema.parse(await postToSocket("/toolbox/uuid", {}));
277
+ return { content: [{ type: "text", text: res.result }] };
278
+ } catch (err) {
279
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
280
+ }
281
+ }
282
+ );
283
+ server.registerTool(
284
+ "short_id",
285
+ {
286
+ description: "Generate a short random alphanumeric ID.",
287
+ inputSchema: shortIdRequestSchema
288
+ },
289
+ async (input) => {
290
+ try {
291
+ const res = shortIdRespondSchema.parse(
292
+ await postToSocket("/toolbox/short-id", { length: input.length })
293
+ );
294
+ return { content: [{ type: "text", text: res.result }] };
295
+ } catch (err) {
296
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
297
+ }
298
+ }
299
+ );
300
+ server.registerTool(
301
+ "random",
302
+ {
303
+ description: "Generate a random string with specified length and character set.",
304
+ inputSchema: randomRequestSchema
305
+ },
306
+ async (input) => {
307
+ try {
308
+ const res = randomRespondSchema.parse(
309
+ await postToSocket("/toolbox/random", {
310
+ length: input.length,
311
+ charset: input.charset
312
+ })
313
+ );
314
+ return { content: [{ type: "text", text: res.result }] };
315
+ } catch (err) {
316
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
317
+ }
318
+ }
319
+ );
320
+ server.registerTool(
321
+ "rand_int",
322
+ {
323
+ description: "Generate a random integer between min and max (inclusive).",
324
+ inputSchema: randIntRequestSchema
325
+ },
326
+ async (input) => {
327
+ try {
328
+ const res = randIntRespondSchema.parse(
329
+ await postToSocket("/toolbox/rand-int", { min: input.min, max: input.max })
330
+ );
331
+ return { content: [{ type: "text", text: String(res.result) }] };
332
+ } catch (err) {
333
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
334
+ }
335
+ }
336
+ );
337
+ server.registerTool(
338
+ "choice",
339
+ {
340
+ description: "Pick a random item from an array.",
341
+ inputSchema: choiceRequestSchema
342
+ },
343
+ async (input) => {
344
+ try {
345
+ const res = choiceRespondSchema.parse(
346
+ await postToSocket("/toolbox/choice", { items: input.items })
347
+ );
348
+ return { content: [{ type: "text", text: res.result }] };
349
+ } catch (err) {
350
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
351
+ }
352
+ }
353
+ );
354
+ server.registerTool(
355
+ "shuffle",
356
+ {
357
+ description: "Shuffle an array randomly (Fisher-Yates).",
358
+ inputSchema: shuffleRequestSchema
359
+ },
360
+ async (input) => {
361
+ try {
362
+ const res = shuffleRespondSchema.parse(
363
+ await postToSocket("/toolbox/shuffle", { items: input.items })
364
+ );
365
+ return { content: [{ type: "text", text: JSON.stringify(res.result) }] };
366
+ } catch (err) {
367
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
368
+ }
369
+ }
370
+ );
371
+ server.registerTool(
372
+ "image_metadata",
373
+ {
374
+ description: "Read image metadata (width, height, format, color space, channels, etc.) from a file.",
375
+ inputSchema: imageMetadataRequestSchema
376
+ },
377
+ async (input) => {
378
+ try {
379
+ const res = imageMetadataRespondSchema.parse(
380
+ await postToSocket("/toolbox/image-metadata", { path: input.path })
381
+ );
382
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
383
+ } catch (err) {
384
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
385
+ }
386
+ }
387
+ );
388
+ server.registerTool(
389
+ "image_thumbnail",
390
+ {
391
+ description: "Generate a thumbnail from an image. Returns the output file path and new image metadata.",
392
+ inputSchema: imageThumbnailRequestSchema
393
+ },
394
+ async (input) => {
395
+ try {
396
+ const res = imageThumbnailRespondSchema.parse(
397
+ await postToSocket("/toolbox/image-thumbnail", {
398
+ path: input.path,
399
+ width: input.width,
400
+ output: input.output
401
+ })
402
+ );
403
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
404
+ } catch (err) {
405
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
406
+ }
407
+ }
408
+ );
409
+ server.registerTool(
410
+ "image_resize",
411
+ {
412
+ description: "Resize an image to specified dimensions. Returns the output file path and new image metadata.",
413
+ inputSchema: imageResizeRequestSchema
414
+ },
415
+ async (input) => {
416
+ try {
417
+ const res = imageResizeRespondSchema.parse(
418
+ await postToSocket("/toolbox/image-resize", {
419
+ path: input.path,
420
+ width: input.width,
421
+ height: input.height,
422
+ fit: input.fit,
423
+ output: input.output
424
+ })
425
+ );
426
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
427
+ } catch (err) {
428
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
429
+ }
430
+ }
431
+ );
432
+ server.registerTool(
433
+ "image_convert",
434
+ {
435
+ description: "Convert an image to a different format (jpeg, png, webp, avif, tiff). Returns the output file path and new image metadata.",
436
+ inputSchema: imageConvertRequestSchema
437
+ },
438
+ async (input) => {
439
+ try {
440
+ const res = imageConvertRespondSchema.parse(
441
+ await postToSocket("/toolbox/image-convert", {
442
+ path: input.path,
443
+ format: input.format,
444
+ quality: input.quality,
445
+ output: input.output
446
+ })
447
+ );
448
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
449
+ } catch (err) {
450
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
451
+ }
452
+ }
453
+ );
454
+ server.registerTool(
455
+ "image_qrcode",
456
+ {
457
+ description: "Generate a PNG QR code image from text.",
458
+ inputSchema: qrCodeRequestSchema
459
+ },
460
+ async (input) => {
461
+ try {
462
+ const res = qrCodeRespondSchema.parse(
463
+ await postToSocket("/toolbox/image-qrcode", {
464
+ text: input.text,
465
+ output: input.output,
466
+ size: input.size,
467
+ margin: input.margin,
468
+ errorCorrection: input.errorCorrection
469
+ })
470
+ );
471
+ return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
472
+ } catch (err) {
473
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
474
+ }
475
+ }
476
+ );
477
+ function postToSocket(path, body) {
478
+ return new Promise((resolve, reject) => {
479
+ const data = JSON.stringify(body);
480
+ const options = {
481
+ socketPath,
482
+ path,
483
+ method: "POST",
484
+ headers: {
485
+ "Content-Type": "application/json",
486
+ "Content-Length": Buffer.byteLength(data)
487
+ }
488
+ };
489
+ const req = http.request(options, (res) => {
490
+ const chunks = [];
491
+ res.on("data", (chunk) => chunks.push(chunk));
492
+ res.on("end", () => {
493
+ const raw = Buffer.concat(chunks).toString("utf8");
494
+ try {
495
+ const parsed = JSON.parse(raw);
496
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
497
+ resolve(parsed);
498
+ } else {
499
+ reject(new Error(parsed.error || `HTTP ${res.statusCode}: ${raw}`));
500
+ }
501
+ } catch {
502
+ reject(new Error(`Invalid response (${res.statusCode}): ${raw}`));
503
+ }
504
+ });
505
+ });
506
+ req.on("error", (err) => {
507
+ reject(new Error(`Socket request failed: ${err.message}`));
508
+ });
509
+ req.write(data);
510
+ req.end();
511
+ });
512
+ }
513
+ async function main() {
514
+ const transport = new StdioServerTransport();
515
+ await server.connect(transport);
516
+ }
517
+ 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;