@zythum02/fello-server 0.1.39 → 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 (294) hide show
  1. package/README.md +10 -2
  2. package/out/renderer/assets/{_baseUniq-BonfEMiF.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-Do8LbeMR.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-B8pyh3AH.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-CQ2ioqAL.js.gz +0 -0
  11. package/out/renderer/assets/{blockDiagram-DXYQGD6D-DxehDaBQ.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-BwVB2HtH.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-BwVB2HtH.js.gz → c4Diagram-AHTNJAMY-BYn4M8r3.js.gz} +0 -0
  17. package/out/renderer/assets/{channel-DoK5PQCo.js → channel-BbsS770v.js} +1 -1
  18. package/out/renderer/assets/{chunk-4BX2VUAB-B5UbKm2i.js → chunk-4BX2VUAB-BqmuvYx4.js} +1 -1
  19. package/out/renderer/assets/{chunk-4TB4RGXK-Mp3JyPop.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-BpQS-lsN.js → chunk-55IACEB6-B2F_rVhp.js} +1 -1
  23. package/out/renderer/assets/{chunk-EDXVE4YY-BQEQxqzJ.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-dCqprN1e.js → chunk-FMBD7UC4-B5pWdaON.js} +1 -1
  27. package/out/renderer/assets/{chunk-OYMX7WX6-D19mZGkc.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-DzWTtEnO.js → chunk-QZHKN3VN-CEGxn157.js} +1 -1
  31. package/out/renderer/assets/{chunk-YZCP3GAM-BEBfdXkA.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-BosKSo4l.js → classDiagram-6PBFFD2Q-DDq47uie.js} +6 -6
  35. package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-BosKSo4l.js → classDiagram-v2-HSJHXN6E-DDq47uie.js} +6 -6
  36. package/out/renderer/assets/{clone-C281XDWZ.js → clone-D_yz9tHs.js} +1 -1
  37. package/out/renderer/assets/{cose-bilkent-S5V4N54A-6SeriN8Z.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-gXq994RD.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-GOebOMWt.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-BkQmAuCz.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-Q9B0Tkq3.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-5wNVFKxe.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-DRxQnVgW.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-3uIpRmli.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-CFxauQFp.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-CDBCF75U.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-B77t0Iut.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-BOhs9DFu.js → highlighted-body-OFNGDK62-BKJZddky.js} +1 -1
  72. package/out/renderer/assets/index-C-1Mla-o.css +6729 -0
  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-l_WeGi7a.js → index-Dd5g6jOl.js} +67828 -26949
  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-C3TJqapp.js → infoDiagram-42DDH7IO-BfDiSuRt.js} +4 -4
  79. package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-C59I-VqG.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-B6jawzfM.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-BCXhVxbs.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-BCXhVxbs.js.gz → kanban-definition-6JOO6SKY-C25BBRvk.js.gz} +0 -0
  88. package/out/renderer/assets/{layout-zx9noErc.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-Bo25ELwI.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-eGRLXD6u.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-PUpW_gKO.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/{pdf-worker-wrapper-Do-ikGHl.js → pdf-worker-wrapper-D9W0fDhT.js} +6514 -5934
  104. package/out/renderer/assets/pdf-worker-wrapper-D9W0fDhT.js.br +0 -0
  105. package/out/renderer/assets/pdf-worker-wrapper-D9W0fDhT.js.gz +0 -0
  106. package/out/renderer/assets/{pieDiagram-DEJITSTG-BrSaX9YD.js → pieDiagram-DEJITSTG-DE1aBCQW.js} +6 -6
  107. package/out/renderer/assets/pieDiagram-DEJITSTG-DE1aBCQW.js.br +0 -0
  108. package/out/renderer/assets/pieDiagram-DEJITSTG-DE1aBCQW.js.gz +0 -0
  109. package/out/renderer/assets/pierre-dark-BL-l9r39.js +4 -0
  110. package/out/renderer/assets/pierre-dark-BL-l9r39.js.br +0 -0
  111. package/out/renderer/assets/pierre-dark-BL-l9r39.js.gz +0 -0
  112. package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js +4 -0
  113. package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js.br +0 -0
  114. package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js.gz +0 -0
  115. package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js +4 -0
  116. package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js.br +0 -0
  117. package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js.gz +0 -0
  118. package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js +4 -0
  119. package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js.br +0 -0
  120. package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js.gz +0 -0
  121. package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js +4 -0
  122. package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js.br +0 -0
  123. package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js.gz +0 -0
  124. package/out/renderer/assets/pierre-light-BUzWTcjO.js +4 -0
  125. package/out/renderer/assets/pierre-light-BUzWTcjO.js.br +0 -0
  126. package/out/renderer/assets/pierre-light-BUzWTcjO.js.gz +0 -0
  127. package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js +4 -0
  128. package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js.br +0 -0
  129. package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js.gz +0 -0
  130. package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js +4 -0
  131. package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js.br +0 -0
  132. package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js.gz +0 -0
  133. package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js +4 -0
  134. package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js.br +0 -0
  135. package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js.gz +0 -0
  136. package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js +4 -0
  137. package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js.br +0 -0
  138. package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js.gz +0 -0
  139. package/out/renderer/assets/pptx_parser_bg-C6x8HRdb.wasm +0 -0
  140. package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-B_oUGzKN.js → quadrantDiagram-34T5L4WZ-B5mGDuN5.js} +2 -2
  141. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B5mGDuN5.js.br +0 -0
  142. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B5mGDuN5.js.gz +0 -0
  143. package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js +25 -0
  144. package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js.br +0 -0
  145. package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js.gz +0 -0
  146. package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js +25 -0
  147. package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js.br +0 -0
  148. package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js.gz +0 -0
  149. package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js +25 -0
  150. package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js.br +0 -0
  151. package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js.gz +0 -0
  152. package/out/renderer/assets/{requirementDiagram-MS252O5E-LQY3T05J.js → requirementDiagram-MS252O5E-CiGX4Xpv.js} +3 -3
  153. package/out/renderer/assets/requirementDiagram-MS252O5E-CiGX4Xpv.js.br +0 -0
  154. package/out/renderer/assets/requirementDiagram-MS252O5E-CiGX4Xpv.js.gz +0 -0
  155. package/out/renderer/assets/{sankeyDiagram-XADWPNL6-BZrdYvkl.js → sankeyDiagram-XADWPNL6-BPM4lpDs.js} +1 -1
  156. package/out/renderer/assets/sankeyDiagram-XADWPNL6-BPM4lpDs.js.br +0 -0
  157. package/out/renderer/assets/sankeyDiagram-XADWPNL6-BPM4lpDs.js.gz +0 -0
  158. package/out/renderer/assets/{sequenceDiagram-FGHM5R23-DT03DGl3.js → sequenceDiagram-FGHM5R23-D1Ok0mDp.js} +3 -3
  159. package/out/renderer/assets/sequenceDiagram-FGHM5R23-D1Ok0mDp.js.br +0 -0
  160. package/out/renderer/assets/sequenceDiagram-FGHM5R23-D1Ok0mDp.js.gz +0 -0
  161. package/out/renderer/assets/{stateDiagram-FHFEXIEX-XxvRQ2fw.js → stateDiagram-FHFEXIEX-C0DqB63K.js} +8 -8
  162. package/out/renderer/assets/stateDiagram-FHFEXIEX-C0DqB63K.js.br +0 -0
  163. package/out/renderer/assets/stateDiagram-FHFEXIEX-C0DqB63K.js.gz +0 -0
  164. package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-C8lZQVxS.js → stateDiagram-v2-QKLJ7IA2-CcTyZcy9.js} +4 -4
  165. package/out/renderer/assets/{timeline-definition-GMOUNBTQ-BThN9RD2.js → timeline-definition-GMOUNBTQ-CY70j9aj.js} +2 -2
  166. package/out/renderer/assets/timeline-definition-GMOUNBTQ-CY70j9aj.js.br +0 -0
  167. package/out/renderer/assets/timeline-definition-GMOUNBTQ-CY70j9aj.js.gz +0 -0
  168. package/out/renderer/assets/{vennDiagram-DHZGUBPP-DvL9CApP.js → vennDiagram-DHZGUBPP-DpZP-SME.js} +1 -1
  169. package/out/renderer/assets/vennDiagram-DHZGUBPP-DpZP-SME.js.br +0 -0
  170. package/out/renderer/assets/vennDiagram-DHZGUBPP-DpZP-SME.js.gz +0 -0
  171. package/out/renderer/assets/{wardley-RL74JXVD-B4vPxA-A.js → wardley-RL74JXVD-DUTOcssT.js} +3 -3
  172. package/out/renderer/assets/wardley-RL74JXVD-DUTOcssT.js.br +0 -0
  173. package/out/renderer/assets/{wardley-RL74JXVD-B4vPxA-A.js.gz → wardley-RL74JXVD-DUTOcssT.js.gz} +0 -0
  174. package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-A3F8zuNA.js → wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js} +5 -5
  175. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js.br +0 -0
  176. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js.gz +0 -0
  177. package/out/renderer/assets/xlsx_parser_bg-ByWgODYl.wasm +0 -0
  178. package/out/renderer/assets/{xychartDiagram-5P7HB3ND-BxjT7l5Q.js → xychartDiagram-5P7HB3ND-B8kViTNI.js} +2 -2
  179. package/out/renderer/assets/xychartDiagram-5P7HB3ND-B8kViTNI.js.br +0 -0
  180. package/out/renderer/assets/xychartDiagram-5P7HB3ND-B8kViTNI.js.gz +0 -0
  181. package/out/renderer/index.html +2 -2
  182. package/out/renderer/index.html.br +0 -0
  183. package/out/renderer/index.html.gz +0 -0
  184. package/out/scripts/electron-preload/preload.mjs +21 -0
  185. package/out/scripts/mcp-image-generation/server.mjs +140 -0
  186. package/out/scripts/mcp-memo/server.mjs +268 -0
  187. package/out/scripts/mcp-memory/server.mjs +183 -0
  188. package/out/scripts/mcp-search/server.mjs +1 -1
  189. package/out/scripts/mcp-toolbox/server.mjs +482 -0
  190. package/out/scripts/worker-file-outline/worker.mjs +242 -28
  191. package/out/server/main.js +3548 -1332
  192. package/package.json +16 -13
  193. package/resources/tree-sitter-wasm/tree-sitter-dart.wasm +0 -0
  194. package/out/renderer/assets/_baseUniq-BonfEMiF.js.br +0 -0
  195. package/out/renderer/assets/_baseUniq-BonfEMiF.js.gz +0 -0
  196. package/out/renderer/assets/arc-Do8LbeMR.js.br +0 -0
  197. package/out/renderer/assets/arc-Do8LbeMR.js.gz +0 -0
  198. package/out/renderer/assets/architectureDiagram-Q4EWVU46-B8pyh3AH.js.br +0 -0
  199. package/out/renderer/assets/architectureDiagram-Q4EWVU46-B8pyh3AH.js.gz +0 -0
  200. package/out/renderer/assets/blockDiagram-DXYQGD6D-DxehDaBQ.js.br +0 -0
  201. package/out/renderer/assets/blockDiagram-DXYQGD6D-DxehDaBQ.js.gz +0 -0
  202. package/out/renderer/assets/c4Diagram-AHTNJAMY-BwVB2HtH.js.br +0 -0
  203. package/out/renderer/assets/chunk-4TB4RGXK-Mp3JyPop.js.br +0 -0
  204. package/out/renderer/assets/chunk-4TB4RGXK-Mp3JyPop.js.gz +0 -0
  205. package/out/renderer/assets/chunk-EDXVE4YY-BQEQxqzJ.js.br +0 -0
  206. package/out/renderer/assets/chunk-EDXVE4YY-BQEQxqzJ.js.gz +0 -0
  207. package/out/renderer/assets/chunk-OYMX7WX6-D19mZGkc.js.br +0 -0
  208. package/out/renderer/assets/chunk-OYMX7WX6-D19mZGkc.js.gz +0 -0
  209. package/out/renderer/assets/chunk-YZCP3GAM-BEBfdXkA.js.br +0 -0
  210. package/out/renderer/assets/chunk-YZCP3GAM-BEBfdXkA.js.gz +0 -0
  211. package/out/renderer/assets/cose-bilkent-S5V4N54A-6SeriN8Z.js.br +0 -0
  212. package/out/renderer/assets/cose-bilkent-S5V4N54A-6SeriN8Z.js.gz +0 -0
  213. package/out/renderer/assets/dagre-KV5264BT-gXq994RD.js.br +0 -0
  214. package/out/renderer/assets/dagre-KV5264BT-gXq994RD.js.gz +0 -0
  215. package/out/renderer/assets/diagram-5BDNPKRD-GOebOMWt.js.br +0 -0
  216. package/out/renderer/assets/diagram-5BDNPKRD-GOebOMWt.js.gz +0 -0
  217. package/out/renderer/assets/diagram-G4DWMVQ6-BkQmAuCz.js.br +0 -0
  218. package/out/renderer/assets/diagram-G4DWMVQ6-BkQmAuCz.js.gz +0 -0
  219. package/out/renderer/assets/diagram-MMDJMWI5-Q9B0Tkq3.js.br +0 -0
  220. package/out/renderer/assets/diagram-MMDJMWI5-Q9B0Tkq3.js.gz +0 -0
  221. package/out/renderer/assets/diagram-TYMM5635-5wNVFKxe.js.br +0 -0
  222. package/out/renderer/assets/diagram-TYMM5635-5wNVFKxe.js.gz +0 -0
  223. package/out/renderer/assets/erDiagram-SMLLAGMA-DRxQnVgW.js.br +0 -0
  224. package/out/renderer/assets/erDiagram-SMLLAGMA-DRxQnVgW.js.gz +0 -0
  225. package/out/renderer/assets/flowDiagram-DWJPFMVM-3uIpRmli.js.br +0 -0
  226. package/out/renderer/assets/flowDiagram-DWJPFMVM-3uIpRmli.js.gz +0 -0
  227. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-CFxauQFp.js.br +0 -0
  228. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-CFxauQFp.js.gz +0 -0
  229. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-CDBCF75U.js.br +0 -0
  230. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-CDBCF75U.js.gz +0 -0
  231. package/out/renderer/assets/graph-B77t0Iut.js.br +0 -0
  232. package/out/renderer/assets/graph-B77t0Iut.js.gz +0 -0
  233. package/out/renderer/assets/index-CTSkyk5N.css +0 -7619
  234. package/out/renderer/assets/index-CTSkyk5N.css.br +0 -0
  235. package/out/renderer/assets/index-CTSkyk5N.css.gz +0 -0
  236. package/out/renderer/assets/index-l_WeGi7a.js.br +0 -0
  237. package/out/renderer/assets/index-l_WeGi7a.js.gz +0 -0
  238. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-C59I-VqG.js.br +0 -0
  239. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-C59I-VqG.js.gz +0 -0
  240. package/out/renderer/assets/journeyDiagram-VCZTEJTY-B6jawzfM.js.br +0 -0
  241. package/out/renderer/assets/journeyDiagram-VCZTEJTY-B6jawzfM.js.gz +0 -0
  242. package/out/renderer/assets/kanban-definition-6JOO6SKY-BCXhVxbs.js.br +0 -0
  243. package/out/renderer/assets/layout-zx9noErc.js.br +0 -0
  244. package/out/renderer/assets/layout-zx9noErc.js.gz +0 -0
  245. package/out/renderer/assets/linear-Bo25ELwI.js.br +0 -0
  246. package/out/renderer/assets/linear-Bo25ELwI.js.gz +0 -0
  247. package/out/renderer/assets/min-eGRLXD6u.js.br +0 -0
  248. package/out/renderer/assets/min-eGRLXD6u.js.gz +0 -0
  249. package/out/renderer/assets/mindmap-definition-QFDTVHPH-PUpW_gKO.js.br +0 -0
  250. package/out/renderer/assets/mindmap-definition-QFDTVHPH-PUpW_gKO.js.gz +0 -0
  251. package/out/renderer/assets/pdf-worker-wrapper-Do-ikGHl.js.br +0 -0
  252. package/out/renderer/assets/pdf-worker-wrapper-Do-ikGHl.js.gz +0 -0
  253. package/out/renderer/assets/pieDiagram-DEJITSTG-BrSaX9YD.js.br +0 -0
  254. package/out/renderer/assets/pieDiagram-DEJITSTG-BrSaX9YD.js.gz +0 -0
  255. package/out/renderer/assets/pierre-dark-C-Drv5KU.js +0 -4
  256. package/out/renderer/assets/pierre-dark-C-Drv5KU.js.br +0 -0
  257. package/out/renderer/assets/pierre-dark-C-Drv5KU.js.gz +0 -0
  258. package/out/renderer/assets/pierre-dark-soft-Cd74uQaL.js +0 -4
  259. package/out/renderer/assets/pierre-dark-soft-Cd74uQaL.js.br +0 -0
  260. package/out/renderer/assets/pierre-dark-soft-Cd74uQaL.js.gz +0 -0
  261. package/out/renderer/assets/pierre-light-CfQnmt6J.js +0 -4
  262. package/out/renderer/assets/pierre-light-CfQnmt6J.js.br +0 -0
  263. package/out/renderer/assets/pierre-light-CfQnmt6J.js.gz +0 -0
  264. package/out/renderer/assets/pierre-light-soft-DMVdU74b.js +0 -4
  265. package/out/renderer/assets/pierre-light-soft-DMVdU74b.js.br +0 -0
  266. package/out/renderer/assets/pierre-light-soft-DMVdU74b.js.gz +0 -0
  267. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B_oUGzKN.js.br +0 -0
  268. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B_oUGzKN.js.gz +0 -0
  269. package/out/renderer/assets/render-worker-host-4IbvpiUo-Dc5a8nQ-.js +0 -25
  270. package/out/renderer/assets/render-worker-host-4IbvpiUo-Dc5a8nQ-.js.br +0 -0
  271. package/out/renderer/assets/render-worker-host-4IbvpiUo-Dc5a8nQ-.js.gz +0 -0
  272. package/out/renderer/assets/render-worker-host-BdfGz_ou-AC9asZT1.js +0 -25
  273. package/out/renderer/assets/render-worker-host-BdfGz_ou-AC9asZT1.js.br +0 -0
  274. package/out/renderer/assets/render-worker-host-BdfGz_ou-AC9asZT1.js.gz +0 -0
  275. package/out/renderer/assets/render-worker-host-awn_IPjt-Bowndb19.js +0 -25
  276. package/out/renderer/assets/render-worker-host-awn_IPjt-Bowndb19.js.br +0 -0
  277. package/out/renderer/assets/render-worker-host-awn_IPjt-Bowndb19.js.gz +0 -0
  278. package/out/renderer/assets/requirementDiagram-MS252O5E-LQY3T05J.js.br +0 -0
  279. package/out/renderer/assets/requirementDiagram-MS252O5E-LQY3T05J.js.gz +0 -0
  280. package/out/renderer/assets/sankeyDiagram-XADWPNL6-BZrdYvkl.js.br +0 -0
  281. package/out/renderer/assets/sankeyDiagram-XADWPNL6-BZrdYvkl.js.gz +0 -0
  282. package/out/renderer/assets/sequenceDiagram-FGHM5R23-DT03DGl3.js.br +0 -0
  283. package/out/renderer/assets/sequenceDiagram-FGHM5R23-DT03DGl3.js.gz +0 -0
  284. package/out/renderer/assets/stateDiagram-FHFEXIEX-XxvRQ2fw.js.br +0 -0
  285. package/out/renderer/assets/stateDiagram-FHFEXIEX-XxvRQ2fw.js.gz +0 -0
  286. package/out/renderer/assets/timeline-definition-GMOUNBTQ-BThN9RD2.js.br +0 -0
  287. package/out/renderer/assets/timeline-definition-GMOUNBTQ-BThN9RD2.js.gz +0 -0
  288. package/out/renderer/assets/vennDiagram-DHZGUBPP-DvL9CApP.js.br +0 -0
  289. package/out/renderer/assets/vennDiagram-DHZGUBPP-DvL9CApP.js.gz +0 -0
  290. package/out/renderer/assets/wardley-RL74JXVD-B4vPxA-A.js.br +0 -0
  291. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-A3F8zuNA.js.br +0 -0
  292. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-A3F8zuNA.js.gz +0 -0
  293. package/out/renderer/assets/xychartDiagram-5P7HB3ND-BxjT7l5Q.js.br +0 -0
  294. package/out/renderer/assets/xychartDiagram-5P7HB3ND-BxjT7l5Q.js.gz +0 -0
@@ -0,0 +1,183 @@
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 fs from "fs";
5
+ import * as http from "http";
6
+ const memoryQueryRequestSchema = z.object({
7
+ query: z.string().min(1).optional().describe(
8
+ "Focused topic to retrieve. Required for every specific task, question, recommendation, or domain discussion; never omit it merely to discover whether relevant memories exist. Omit only when a broad project-memory briefing is genuinely needed."
9
+ )
10
+ });
11
+ const memoryQueryRespondSchema = z.object({
12
+ content: z.string().describe("The generated project briefing or relevant memory details.")
13
+ });
14
+ const memoryStoreRequestSchema = z.object({
15
+ facts: z.array(
16
+ z.object({
17
+ text: z.string().max(512).describe("The fact to remember, concise and self-contained."),
18
+ reason: z.string().max(300).optional().describe(
19
+ "Why this should be remembered — context that helps determine weight and tags (e.g. if the user strongly emphasized it or corrected the agent)."
20
+ )
21
+ })
22
+ ).min(1).max(10).describe(
23
+ "Facts to remember. The system will organize, deduplicate, and assign priority in the background."
24
+ )
25
+ });
26
+ const memoryStoreRespondSchema = z.object({
27
+ stored: z.number().describe("Number of facts submitted for integration."),
28
+ message: z.string().optional().describe("Brief confirmation of the memory operation.")
29
+ });
30
+ function getArg(name) {
31
+ const idx = process.argv.indexOf(`--${name}`);
32
+ return idx !== -1 ? process.argv[idx + 1] : void 0;
33
+ }
34
+ function getErrorMessage(error) {
35
+ return error instanceof Error ? error.message : String(error);
36
+ }
37
+ function loadCriticalMemories(filePath) {
38
+ if (!filePath) return [];
39
+ try {
40
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
41
+ return Array.isArray(parsed) ? parsed.filter((entry) => typeof entry === "string") : [];
42
+ } catch (error) {
43
+ console.error(`[mcp-memory] Failed to load critical memories: ${getErrorMessage(error)}`);
44
+ return [];
45
+ } finally {
46
+ fs.rmSync(filePath, { force: true });
47
+ }
48
+ }
49
+ const socketPath = getArg("socket-path");
50
+ const criticalMemories = loadCriticalMemories(getArg("critical-memory"));
51
+ if (!socketPath) {
52
+ console.error("[mcp-memory] Missing required argument: --socket-path");
53
+ process.exit(1);
54
+ }
55
+ const criticalMemoryDescription = criticalMemories.length === 0 ? "" : `
56
+
57
+ Automatically loaded critical project memories — always follow these:
58
+ ${criticalMemories.map((memory) => `- ${memory.replaceAll("\n", "\n ")}`).join("\n")}
59
+
60
+ These are only the highest-priority project constraints, not the complete project memory. Do not treat the absence of a detail here as evidence that no relevant memory exists. This list does not replace task-specific retrieval.`;
61
+ const server = new McpServer({
62
+ name: "Memory",
63
+ version: "1.0.0",
64
+ description: "Provides memory_query and memory_store tools for persistent project-level memory."
65
+ });
66
+ server.registerTool(
67
+ "memory_query",
68
+ {
69
+ description: `Query the project's persistent memory.${criticalMemoryDescription}
70
+
71
+ For every specific task, question, recommendation, or domain discussion that may depend on memory, provide a focused query. Include all relevant dimensions in that query, such as applicable conventions, preferences, decisions, corrections, architecture, or commands.
72
+
73
+ Never omit query merely to discover whether relevant memories exist. Omit it only when a broad project-memory briefing is genuinely needed, such as when the user asks what is remembered.
74
+
75
+ A focused query returns relevant details. An omitted query generates a current summary from the stored entries. In either mode, memories included in the response are marked as used.`,
76
+ inputSchema: memoryQueryRequestSchema
77
+ },
78
+ async (input) => {
79
+ try {
80
+ const result = memoryQueryRespondSchema.parse(await postToSocket("/memory/query", input));
81
+ return {
82
+ content: [
83
+ {
84
+ type: "text",
85
+ text: result.content || "(no project memories stored yet)"
86
+ }
87
+ ]
88
+ };
89
+ } catch (error) {
90
+ return {
91
+ content: [
92
+ { type: "text", text: `Error querying memory: ${getErrorMessage(error)}` }
93
+ ],
94
+ isError: true
95
+ };
96
+ }
97
+ }
98
+ );
99
+ server.registerTool(
100
+ "memory_store",
101
+ {
102
+ description: `Store facts into persistent project memory for future sessions.
103
+
104
+ Proactively store facts worth remembering for future sessions. Common triggers:
105
+ - User states a preference, makes a choice, or corrects your behavior (even subtly)
106
+ - You discover a project convention, tech stack detail, or architectural decision
107
+ - User emphasizes something with "always", "never", "remember", "一定", "不要"
108
+ - User explicitly asks you to remember something
109
+
110
+ Also store when:
111
+ - User explains why they do something a certain way
112
+ - User mentions a tool, framework, or library choice
113
+ - You make a decision during the conversation that affects future work
114
+ - User tells you to skip or avoid something
115
+
116
+ When in doubt about whether to store — store it. Forgetting costs more than duplicating.
117
+
118
+ Each fact should be a concise, self-contained statement. Include a reason when the context helps determine importance (e.g. if the user strongly emphasized it or corrected the agent).`,
119
+ inputSchema: memoryStoreRequestSchema
120
+ },
121
+ async (input) => {
122
+ try {
123
+ const result = memoryStoreRespondSchema.parse(await postToSocket("/memory/store", input));
124
+ return {
125
+ content: [
126
+ {
127
+ type: "text",
128
+ text: result.message || `Stored ${result.stored} fact(s) to project memory.`
129
+ }
130
+ ]
131
+ };
132
+ } catch (error) {
133
+ return {
134
+ content: [
135
+ { type: "text", text: `Error storing memory: ${getErrorMessage(error)}` }
136
+ ],
137
+ isError: true
138
+ };
139
+ }
140
+ }
141
+ );
142
+ function postToSocket(path, body) {
143
+ return new Promise((resolve, reject) => {
144
+ const data = JSON.stringify(body);
145
+ const options = {
146
+ socketPath,
147
+ path,
148
+ method: "POST",
149
+ headers: {
150
+ "Content-Type": "application/json",
151
+ "Content-Length": Buffer.byteLength(data)
152
+ }
153
+ };
154
+ const req = http.request(options, (res) => {
155
+ const chunks = [];
156
+ res.on("data", (chunk) => chunks.push(chunk));
157
+ res.on("end", () => {
158
+ const raw = Buffer.concat(chunks).toString("utf8");
159
+ try {
160
+ const parsed = JSON.parse(raw);
161
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
162
+ resolve(parsed);
163
+ } else {
164
+ const message = typeof parsed === "object" && parsed && "error" in parsed ? String(parsed.error) : `HTTP ${res.statusCode}: ${raw}`;
165
+ reject(new Error(message));
166
+ }
167
+ } catch {
168
+ reject(new Error(`Invalid response (${res.statusCode}): ${raw}`));
169
+ }
170
+ });
171
+ });
172
+ req.on("error", (error) => {
173
+ reject(new Error(`Socket request failed: ${error.message}`));
174
+ });
175
+ req.write(data);
176
+ req.end();
177
+ });
178
+ }
179
+ async function main() {
180
+ const transport = new StdioServerTransport();
181
+ await server.connect(transport);
182
+ }
183
+ main().catch(console.error);
@@ -161,7 +161,7 @@ Uses tree-sitter WASM parsing to extract function/class/interface/type/property
161
161
  Returns tree-structured metadata only - no code body is included.
162
162
  Use this first before ReadFile to understand a file's structure.
163
163
 
164
- Supports: TypeScript (.ts), JavaScript/JSX (.js/.jsx/.mjs/.cjs), TSX (.tsx), Python (.py), Go (.go), C (.c/.h), C++ (.cpp/.cc/.cxx/.hpp/.hxx/.hh), Swift (.swift), Kotlin (.kt/.kts), Markdown (.md/.mdx/.markdown).
164
+ Supports: TypeScript (.ts), JavaScript/JSX (.js/.jsx/.mjs/.cjs), TSX (.tsx), Python (.py), Go (.go), C (.c/.h), C++ (.cpp/.cc/.cxx/.hpp/.hxx/.hh), Swift (.swift), Kotlin (.kt/.kts), Dart (.dart), Markdown (.md/.mdx/.markdown).
165
165
 
166
166
  The path parameter accepts:
167
167
  - Relative path (relative to project root): "src/app.ts", "./lib/utils.ts"
@@ -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);