@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
@@ -3,42 +3,68 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
3
3
  import { z } from "zod";
4
4
  import * as http from "http";
5
5
  const memoryEntrySchema = z.object({
6
- weight: z.number().int().min(1).max(3).describe("Priority weight: 3=critical, 2=important, 1=general"),
7
- text: z.string().max(200).describe("The memory fact, concise and self-contained"),
8
- date: z.string().describe("Date when this fact was recorded or last updated (YYYY-MM-DD)"),
9
- tags: z.array(z.string()).describe("Category tags: preferences, architecture, commands, corrections, context")
6
+ weight: z.number().int().min(1).max(3).describe(
7
+ "Future-work impact: 3=explicit must-follow constraint, 2=stable work-shaping knowledge, 1=background context"
8
+ ),
9
+ text: z.string().max(512).describe("The memory fact, concise and self-contained"),
10
+ date: z.string().describe("Date when this fact was recorded, updated, or last marked as used (YYYY-MM-DD)"),
11
+ tags: z.array(z.string()).describe("Open-ended semantic keywords used for retrieval; concise and reusable")
10
12
  });
11
13
  z.object({
12
14
  version: z.number().int().describe("Schema version for future migration"),
13
- entries: z.array(memoryEntrySchema).describe("Memory entries sorted by weight descending")
15
+ entries: z.array(memoryEntrySchema).describe("Persistent project memory entries")
14
16
  });
17
+ const memoryEntryIdSchema = z.string().length(16).regex(/^[0-9a-f]{16}$/).describe("Read-only ID derived by the backend from the entry text");
18
+ const mutableWeightSchema = z.number().int().min(1).max(3).describe(
19
+ "New weight. Use 3 only for an explicit durable instruction or prohibition governing how the agent must act."
20
+ );
15
21
  const memoGetCurrentRequestSchema = z.object({});
16
22
  const memoGetCurrentRespondSchema = z.object({
17
- content: z.string().describe("The current memory.json content as a JSON string.")
23
+ content: z.string().describe("JSON text containing the current entries and their read-only IDs.")
24
+ });
25
+ const memoAddRequestSchema = z.object({
26
+ text: z.string().min(1).max(512).describe("New immutable memory fact"),
27
+ weight: mutableWeightSchema,
28
+ tags: z.array(z.string().min(1)).min(1).max(3).describe("Immutable open-ended semantic keywords derived from the text")
29
+ });
30
+ const memoAddRespondSchema = z.object({
31
+ ok: z.boolean(),
32
+ id: memoryEntryIdSchema,
33
+ error: z.literal("content_exists").optional()
34
+ });
35
+ const memoDeleteRequestSchema = z.object({
36
+ id: memoryEntryIdSchema
37
+ });
38
+ const memoDeleteRespondSchema = z.object({
39
+ ok: z.boolean(),
40
+ id: memoryEntryIdSchema,
41
+ error: z.literal("entry_not_found").optional()
18
42
  });
19
- const memoSaveRequestSchema = z.object({
20
- content: z.string().max(16e3).describe(
21
- "The complete memory content as a JSON string. Must conform to the memory file schema: { version, entries: [...] }"
22
- )
43
+ const memoSetWeightRequestSchema = z.object({
44
+ id: memoryEntryIdSchema,
45
+ weight: mutableWeightSchema
23
46
  });
24
- const memoSaveRespondSchema = z.object({
47
+ const memoSetWeightRespondSchema = z.object({
25
48
  ok: z.boolean(),
26
- entries: z.number().describe("Number of entries saved.")
49
+ id: memoryEntryIdSchema,
50
+ error: z.literal("entry_not_found").optional()
27
51
  });
28
52
  const memoTouchRequestSchema = z.object({
29
- indices: z.array(z.number().int().min(0)).min(1).describe(
30
- "Indices of entries in the entries array that were relevant/used. Updates their date to today."
31
- )
53
+ ids: z.array(memoryEntryIdSchema).min(1).describe("IDs of entries represented in the final response; updates their date to today")
32
54
  });
33
55
  const memoTouchRespondSchema = z.object({
34
56
  ok: z.boolean(),
35
- touched: z.number().describe("Number of entries touched.")
57
+ touched: z.number().describe("Number of entries touched")
36
58
  });
37
59
  function getArg(name) {
38
60
  const idx = process.argv.indexOf(`--${name}`);
39
61
  return idx !== -1 ? process.argv[idx + 1] : void 0;
40
62
  }
63
+ function getErrorMessage(error) {
64
+ return error instanceof Error ? error.message : String(error);
65
+ }
41
66
  const socketPath = getArg("socket-path");
67
+ const writable = process.argv.includes("--writable");
42
68
  if (!socketPath) {
43
69
  console.error("[mcp-memo] Missing required argument: --socket-path");
44
70
  process.exit(1);
@@ -46,12 +72,12 @@ if (!socketPath) {
46
72
  const server = new McpServer({
47
73
  name: "Memo",
48
74
  version: "1.0.0",
49
- description: "Provides memo_get_current and memo_save tools for the memory organizer agent."
75
+ description: writable ? "Provides transactional tools for organizing project memory entries." : "Provides tools to retrieve and mark project memory entries as used."
50
76
  });
51
77
  server.registerTool(
52
78
  "memo_get_current",
53
79
  {
54
- description: `Read the current project memory file. Call this first to see what's already stored before making changes.`,
80
+ description: "Read the current project memory entries and their backend-generated, read-only IDs. Call this exactly once before any other memo tool.",
55
81
  inputSchema: memoGetCurrentRequestSchema
56
82
  },
57
83
  async () => {
@@ -61,75 +87,143 @@ server.registerTool(
61
87
  content: [
62
88
  {
63
89
  type: "text",
64
- text: result.content || "(empty - no memories stored yet)"
90
+ text: result.content || '{"entries":[]}'
65
91
  }
66
92
  ]
67
93
  };
68
- } catch (err) {
69
- return {
70
- content: [{ type: "text", text: `Error reading memory: ${err.message}` }],
71
- isError: true
72
- };
73
- }
74
- }
75
- );
76
- server.registerTool(
77
- "memo_save",
78
- {
79
- description: `Save the complete organized memory content as a JSON string. This replaces the entire memory file.
80
- The JSON must be an object with: { "version": 1, "entries": [...] }
81
- Each entry has fields: weight (number), text (string), date (string), tags (string[]).
82
- Entries must be sorted by weight descending. You MUST include all entries you want to keep.`,
83
- inputSchema: memoSaveRequestSchema
84
- },
85
- async (input) => {
86
- try {
87
- const result = memoSaveRespondSchema.parse(
88
- await postToSocket("/memo/save", { content: input.content })
89
- );
94
+ } catch (error) {
90
95
  return {
91
96
  content: [
92
- {
93
- type: "text",
94
- text: `Memory saved (${result.entries} entries).`
95
- }
96
- ]
97
- };
98
- } catch (err) {
99
- return {
100
- content: [{ type: "text", text: `Error saving memory: ${err.message}` }],
97
+ { type: "text", text: `Error reading memory: ${getErrorMessage(error)}` }
98
+ ],
101
99
  isError: true
102
100
  };
103
101
  }
104
102
  }
105
103
  );
106
- server.registerTool(
107
- "memo_touch",
108
- {
109
- description: `Mark memory entries as "used" by updating their date to today. Call this after retrieving memories to indicate which entries were relevant to the query. This prevents active entries from being evicted by age-based cleanup.`,
110
- inputSchema: memoTouchRequestSchema
111
- },
112
- async (input) => {
113
- try {
114
- const result = memoTouchRespondSchema.parse(
115
- await postToSocket("/memo/touch", { indices: input.indices })
116
- );
117
- return {
118
- content: [
119
- {
120
- type: "text",
121
- text: `Touched ${result.touched} entries.`
122
- }
123
- ]
124
- };
125
- } catch (err) {
126
- return {
127
- content: [{ type: "text", text: `Error touching entries: ${err.message}` }],
128
- isError: true
129
- };
104
+ if (writable) {
105
+ server.registerTool(
106
+ "memo_add",
107
+ {
108
+ description: `Add one new immutable memory entry to the current transaction draft. The backend generates its ID and date.
109
+ Use weight 3 only for an explicit durable instruction or prohibition governing how the agent must act. If the same text already exists, the tool reports content_exists and leaves the draft unchanged.`,
110
+ inputSchema: memoAddRequestSchema
111
+ },
112
+ async (input) => {
113
+ try {
114
+ const result = memoAddRespondSchema.parse(await postToSocket("/memo/add", input));
115
+ return {
116
+ content: [
117
+ {
118
+ type: "text",
119
+ text: result.ok ? `Added memory entry ${result.id}.` : `Content already exists as memory entry ${result.id}. Decide whether no further action is needed or whether the existing entry must first be deleted and replaced.`
120
+ }
121
+ ]
122
+ };
123
+ } catch (error) {
124
+ return {
125
+ content: [
126
+ { type: "text", text: `Error adding memory: ${getErrorMessage(error)}` }
127
+ ],
128
+ isError: true
129
+ };
130
+ }
130
131
  }
131
- }
132
- );
132
+ );
133
+ server.registerTool(
134
+ "memo_delete",
135
+ {
136
+ description: "Delete one entry from the current transaction draft by its read-only ID. Use delete plus add when immutable text or tags must be replaced.",
137
+ inputSchema: memoDeleteRequestSchema
138
+ },
139
+ async (input) => {
140
+ try {
141
+ const result = memoDeleteRespondSchema.parse(await postToSocket("/memo/delete", input));
142
+ return {
143
+ content: [
144
+ {
145
+ type: "text",
146
+ text: result.ok ? `Deleted memory entry ${result.id}.` : `Memory entry ${result.id} was not found; the draft was unchanged.`
147
+ }
148
+ ]
149
+ };
150
+ } catch (error) {
151
+ return {
152
+ content: [
153
+ { type: "text", text: `Error deleting memory: ${getErrorMessage(error)}` }
154
+ ],
155
+ isError: true
156
+ };
157
+ }
158
+ }
159
+ );
160
+ server.registerTool(
161
+ "memo_set_weight",
162
+ {
163
+ description: `Set one entry's weight in the current transaction draft. This always refreshes its date.
164
+ Use weight 3 only for an explicit durable instruction or prohibition governing how the agent must act; repetition, correction, urgency, or technical necessity alone never justify weight 3.`,
165
+ inputSchema: memoSetWeightRequestSchema
166
+ },
167
+ async (input) => {
168
+ try {
169
+ const result = memoSetWeightRespondSchema.parse(
170
+ await postToSocket("/memo/set-weight", input)
171
+ );
172
+ return {
173
+ content: [
174
+ {
175
+ type: "text",
176
+ text: result.ok ? `Updated memory entry ${result.id} weight.` : `Memory entry ${result.id} was not found; the draft was unchanged.`
177
+ }
178
+ ]
179
+ };
180
+ } catch (error) {
181
+ return {
182
+ content: [
183
+ {
184
+ type: "text",
185
+ text: `Error setting memory weight: ${getErrorMessage(error)}`
186
+ }
187
+ ],
188
+ isError: true
189
+ };
190
+ }
191
+ }
192
+ );
193
+ } else {
194
+ server.registerTool(
195
+ "memo_touch",
196
+ {
197
+ description: "Mark only the entries represented in the final retrieval response as used by refreshing their date. Pass their read-only IDs, not array indices.",
198
+ inputSchema: memoTouchRequestSchema
199
+ },
200
+ async (input) => {
201
+ try {
202
+ const result = memoTouchRespondSchema.parse(
203
+ await postToSocket("/memo/touch", { ids: input.ids })
204
+ );
205
+ return {
206
+ content: [
207
+ {
208
+ type: "text",
209
+ text: `Touched ${result.touched} entries.`
210
+ }
211
+ ]
212
+ };
213
+ } catch (error) {
214
+ return {
215
+ content: [
216
+ {
217
+ type: "text",
218
+ text: `Error touching entries: ${getErrorMessage(error)}`
219
+ }
220
+ ],
221
+ isError: true
222
+ };
223
+ }
224
+ }
225
+ );
226
+ }
133
227
  function postToSocket(path, body) {
134
228
  return new Promise((resolve, reject) => {
135
229
  const data = JSON.stringify(body);
@@ -152,15 +246,16 @@ function postToSocket(path, body) {
152
246
  if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
153
247
  resolve(parsed);
154
248
  } else {
155
- reject(new Error(parsed.error || `HTTP ${res.statusCode}: ${raw}`));
249
+ const message = typeof parsed === "object" && parsed && "error" in parsed ? String(parsed.error) : `HTTP ${res.statusCode}: ${raw}`;
250
+ reject(new Error(message));
156
251
  }
157
252
  } catch {
158
253
  reject(new Error(`Invalid response (${res.statusCode}): ${raw}`));
159
254
  }
160
255
  });
161
256
  });
162
- req.on("error", (err) => {
163
- reject(new Error(`Socket request failed: ${err.message}`));
257
+ req.on("error", (error) => {
258
+ reject(new Error(`Socket request failed: ${error.message}`));
164
259
  });
165
260
  req.write(data);
166
261
  req.end();
@@ -4,19 +4,19 @@ import { z } from "zod";
4
4
  import * as fs from "fs";
5
5
  import * as http from "http";
6
6
  const memoryQueryRequestSchema = z.object({
7
- query: z.string().min(1).describe(
8
- "What to search for in memory. Describe what you need to recall (e.g. 'tech stack', 'user preferences', 'build commands')."
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
9
  )
10
10
  });
11
11
  const memoryQueryRespondSchema = z.object({
12
- content: z.string().describe("The memory content (full or filtered).")
12
+ content: z.string().describe("The generated project briefing or relevant memory details.")
13
13
  });
14
14
  const memoryStoreRequestSchema = z.object({
15
15
  facts: z.array(
16
16
  z.object({
17
- text: z.string().max(200).describe("The fact to remember, concise and self-contained."),
17
+ text: z.string().max(512).describe("The fact to remember, concise and self-contained."),
18
18
  reason: z.string().max(300).optional().describe(
19
- "Why this should be remembered — context that helps determine weight and tags (e.g. 'user explicitly corrected me', 'user emphasized with 一定/never')."
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
20
  )
21
21
  })
22
22
  ).min(1).max(10).describe(
@@ -24,35 +24,40 @@ const memoryStoreRequestSchema = z.object({
24
24
  )
25
25
  });
26
26
  const memoryStoreRespondSchema = z.object({
27
- stored: z.number().describe("Number of facts successfully integrated."),
28
- summary: z.string().optional().describe("Brief confirmation of what was stored.")
27
+ stored: z.number().describe("Number of facts submitted for integration."),
28
+ message: z.string().optional().describe("Brief confirmation of the memory operation.")
29
29
  });
30
30
  function getArg(name) {
31
31
  const idx = process.argv.indexOf(`--${name}`);
32
32
  return idx !== -1 ? process.argv[idx + 1] : void 0;
33
33
  }
34
- const socketPath = getArg("socket-path");
35
- const projectDir = getArg("project-dir");
36
- const memorySummaryFile = getArg("memory-summary");
37
- if (!socketPath) {
38
- console.error("[mcp-memory] Missing required argument: --socket-path");
39
- process.exit(1);
40
- }
41
- if (!projectDir) {
42
- console.error("[mcp-memory] Missing required argument: --project-dir");
43
- process.exit(1);
34
+ function getErrorMessage(error) {
35
+ return error instanceof Error ? error.message : String(error);
44
36
  }
45
- let initialMemorySummary = "";
46
- if (memorySummaryFile) {
37
+ function loadCriticalMemories(filePath) {
38
+ if (!filePath) return [];
47
39
  try {
48
- initialMemorySummary = fs.readFileSync(memorySummaryFile, "utf8").trim();
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 [];
49
45
  } finally {
50
- try {
51
- fs.unlinkSync(memorySummaryFile);
52
- } catch {
53
- }
46
+ fs.rmSync(filePath, { force: true });
54
47
  }
55
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.`;
56
61
  const server = new McpServer({
57
62
  name: "Memory",
58
63
  version: "1.0.0",
@@ -61,16 +66,13 @@ const server = new McpServer({
61
66
  server.registerTool(
62
67
  "memory_query",
63
68
  {
64
- description: `Query the project's persistent memory. Performs semantic retrieval to find memories relevant to your question.
69
+ description: `Query the project's persistent memory.${criticalMemoryDescription}
65
70
 
66
- Use this to recall project conventions, user preferences, past decisions, or corrections.
67
- Provide a descriptive query about what you need (e.g. "tech stack and build tools", "user's coding style preferences", "things to avoid").` + (() => {
68
- if (!initialMemorySummary) return "";
69
- return `
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.
70
72
 
71
- Key memories (high priority — always consider these):
72
- ${initialMemorySummary}`;
73
- })(),
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.`,
74
76
  inputSchema: memoryQueryRequestSchema
75
77
  },
76
78
  async (input) => {
@@ -84,9 +86,11 @@ ${initialMemorySummary}`;
84
86
  }
85
87
  ]
86
88
  };
87
- } catch (err) {
89
+ } catch (error) {
88
90
  return {
89
- content: [{ type: "text", text: `Error querying memory: ${err.message}` }],
91
+ content: [
92
+ { type: "text", text: `Error querying memory: ${getErrorMessage(error)}` }
93
+ ],
90
94
  isError: true
91
95
  };
92
96
  }
@@ -97,12 +101,21 @@ server.registerTool(
97
101
  {
98
102
  description: `Store facts into persistent project memory for future sessions.
99
103
 
100
- Use this when:
101
- - The user states a preference or corrects your behavior
102
- - You discover a project convention or architectural decision
103
- - The user explicitly asks you to remember something
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
104
115
 
105
- 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 something, or corrected you).`,
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).`,
106
119
  inputSchema: memoryStoreRequestSchema
107
120
  },
108
121
  async (input) => {
@@ -112,13 +125,15 @@ Each fact should be a concise, self-contained statement. Include a reason when t
112
125
  content: [
113
126
  {
114
127
  type: "text",
115
- text: result.summary || `Stored ${result.stored} fact(s) to project memory.`
128
+ text: result.message || `Stored ${result.stored} fact(s) to project memory.`
116
129
  }
117
130
  ]
118
131
  };
119
- } catch (err) {
132
+ } catch (error) {
120
133
  return {
121
- content: [{ type: "text", text: `Error storing memory: ${err.message}` }],
134
+ content: [
135
+ { type: "text", text: `Error storing memory: ${getErrorMessage(error)}` }
136
+ ],
122
137
  isError: true
123
138
  };
124
139
  }
@@ -146,15 +161,16 @@ function postToSocket(path, body) {
146
161
  if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
147
162
  resolve(parsed);
148
163
  } else {
149
- reject(new Error(parsed.error || `HTTP ${res.statusCode}: ${raw}`));
164
+ const message = typeof parsed === "object" && parsed && "error" in parsed ? String(parsed.error) : `HTTP ${res.statusCode}: ${raw}`;
165
+ reject(new Error(message));
150
166
  }
151
167
  } catch {
152
168
  reject(new Error(`Invalid response (${res.statusCode}): ${raw}`));
153
169
  }
154
170
  });
155
171
  });
156
- req.on("error", (err) => {
157
- reject(new Error(`Socket request failed: ${err.message}`));
172
+ req.on("error", (error) => {
173
+ reject(new Error(`Socket request failed: ${error.message}`));
158
174
  });
159
175
  req.write(data);
160
176
  req.end();