@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.
- package/README.md +10 -2
- package/out/renderer/assets/{_baseUniq-CNYzw1DB.js → _baseUniq-JI50qq3v.js} +1 -1
- package/out/renderer/assets/_baseUniq-JI50qq3v.js.br +0 -0
- package/out/renderer/assets/_baseUniq-JI50qq3v.js.gz +0 -0
- package/out/renderer/assets/{arc-vyANDg9_.js → arc-D82BffDI.js} +1 -1
- package/out/renderer/assets/arc-D82BffDI.js.br +0 -0
- package/out/renderer/assets/arc-D82BffDI.js.gz +0 -0
- package/out/renderer/assets/{architectureDiagram-Q4EWVU46-BzcUqnqp.js → architectureDiagram-Q4EWVU46-BBRMDHvv.js} +5 -5
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-BBRMDHvv.js.br +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-BBRMDHvv.js.gz +0 -0
- package/out/renderer/assets/{blockDiagram-DXYQGD6D-CTEZWa8S.js → blockDiagram-DXYQGD6D-CiCuaiyL.js} +6 -6
- package/out/renderer/assets/blockDiagram-DXYQGD6D-CiCuaiyL.js.br +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-CiCuaiyL.js.gz +0 -0
- package/out/renderer/assets/{c4Diagram-AHTNJAMY-BuFQdjjc.js → c4Diagram-AHTNJAMY-D9PM_R8p.js} +2 -2
- package/out/renderer/assets/c4Diagram-AHTNJAMY-D9PM_R8p.js.br +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-D9PM_R8p.js.gz +0 -0
- package/out/renderer/assets/{channel-DyKDQZ32.js → channel-CklIgqOK.js} +1 -1
- package/out/renderer/assets/{chunk-4BX2VUAB-BKj1YSOw.js → chunk-4BX2VUAB-DK0KQU1M.js} +1 -1
- package/out/renderer/assets/{chunk-4TB4RGXK-CUfY3XSR.js → chunk-4TB4RGXK-CxHdBbdg.js} +5 -5
- package/out/renderer/assets/chunk-4TB4RGXK-CxHdBbdg.js.br +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-CxHdBbdg.js.gz +0 -0
- package/out/renderer/assets/{chunk-55IACEB6-BPafcNL-.js → chunk-55IACEB6-ykIH_AN3.js} +1 -1
- package/out/renderer/assets/{chunk-EDXVE4YY-DlWjafzT.js → chunk-EDXVE4YY-DUOS0pBH.js} +1 -1
- package/out/renderer/assets/chunk-EDXVE4YY-DUOS0pBH.js.br +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-DUOS0pBH.js.gz +0 -0
- package/out/renderer/assets/{chunk-FMBD7UC4-CI2WhJKs.js → chunk-FMBD7UC4-Bm3BHCuh.js} +1 -1
- package/out/renderer/assets/{chunk-OYMX7WX6-1XAYgymx.js → chunk-OYMX7WX6-DH9JMSMI.js} +3 -3
- package/out/renderer/assets/chunk-OYMX7WX6-DH9JMSMI.js.br +0 -0
- package/out/renderer/assets/{chunk-OYMX7WX6-1XAYgymx.js.gz → chunk-OYMX7WX6-DH9JMSMI.js.gz} +0 -0
- package/out/renderer/assets/{chunk-QZHKN3VN-B2Kh1qhq.js → chunk-QZHKN3VN-LffrA1jF.js} +1 -1
- package/out/renderer/assets/{chunk-YZCP3GAM-DKTOTV26.js → chunk-YZCP3GAM-B1pm_POM.js} +1 -1
- package/out/renderer/assets/chunk-YZCP3GAM-B1pm_POM.js.br +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-B1pm_POM.js.gz +0 -0
- package/out/renderer/assets/{classDiagram-6PBFFD2Q-BSxgcC66.js → classDiagram-6PBFFD2Q-O6uMquiH.js} +6 -6
- package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-BSxgcC66.js → classDiagram-v2-HSJHXN6E-O6uMquiH.js} +6 -6
- package/out/renderer/assets/{clone-B-NXg17n.js → clone-BhlnPWG5.js} +1 -1
- package/out/renderer/assets/{cose-bilkent-S5V4N54A-Dr92qdgA.js → cose-bilkent-S5V4N54A-ljZi9cz-.js} +1 -1
- package/out/renderer/assets/cose-bilkent-S5V4N54A-ljZi9cz-.js.br +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-ljZi9cz-.js.gz +0 -0
- package/out/renderer/assets/{dagre-KV5264BT-7l16BI52.js → dagre-KV5264BT-DqnNoP69.js} +6 -6
- package/out/renderer/assets/dagre-KV5264BT-DqnNoP69.js.br +0 -0
- package/out/renderer/assets/dagre-KV5264BT-DqnNoP69.js.gz +0 -0
- package/out/renderer/assets/{diagram-5BDNPKRD-7J0KHPTw.js → diagram-5BDNPKRD-pBYJseHI.js} +6 -6
- package/out/renderer/assets/diagram-5BDNPKRD-pBYJseHI.js.br +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-pBYJseHI.js.gz +0 -0
- package/out/renderer/assets/{diagram-G4DWMVQ6-Dgk1T3Ng.js → diagram-G4DWMVQ6-IPm9zWeG.js} +6 -6
- package/out/renderer/assets/diagram-G4DWMVQ6-IPm9zWeG.js.br +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-IPm9zWeG.js.gz +0 -0
- package/out/renderer/assets/{diagram-MMDJMWI5-DerRkmYs.js → diagram-MMDJMWI5-DSH58P_m.js} +5 -5
- package/out/renderer/assets/diagram-MMDJMWI5-DSH58P_m.js.br +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-DSH58P_m.js.gz +0 -0
- package/out/renderer/assets/{diagram-TYMM5635-DR9dcwKl.js → diagram-TYMM5635-Czl-GGCp.js} +5 -5
- package/out/renderer/assets/diagram-TYMM5635-Czl-GGCp.js.br +0 -0
- package/out/renderer/assets/diagram-TYMM5635-Czl-GGCp.js.gz +0 -0
- package/out/renderer/assets/docx_parser_bg-CIRepKGp.wasm +0 -0
- package/out/renderer/assets/{erDiagram-SMLLAGMA-CZ2vNtP6.js → erDiagram-SMLLAGMA-BENPNKae.js} +4 -4
- package/out/renderer/assets/erDiagram-SMLLAGMA-BENPNKae.js.br +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-BENPNKae.js.gz +0 -0
- package/out/renderer/assets/{flowDiagram-DWJPFMVM-DOL_mdve.js → flowDiagram-DWJPFMVM-T3H9Pqwa.js} +6 -6
- package/out/renderer/assets/flowDiagram-DWJPFMVM-T3H9Pqwa.js.br +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-T3H9Pqwa.js.gz +0 -0
- package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-DXfCf0sW.js → ganttDiagram-T4ZO3ILL-Hh-AJvLC.js} +2 -2
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-Hh-AJvLC.js.br +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-Hh-AJvLC.js.gz +0 -0
- package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-Bi19RzUn.js → gitGraphDiagram-UUTBAWPF-BDXB9jT_.js} +6 -6
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BDXB9jT_.js.br +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BDXB9jT_.js.gz +0 -0
- package/out/renderer/assets/{graph-BX6gbV3Q.js → graph-MWvZ47Hf.js} +2 -2
- package/out/renderer/assets/graph-MWvZ47Hf.js.br +0 -0
- package/out/renderer/assets/graph-MWvZ47Hf.js.gz +0 -0
- package/out/renderer/assets/{highlighted-body-OFNGDK62-CpZorxCd.js → highlighted-body-OFNGDK62-Bvl34wyh.js} +1 -1
- package/out/renderer/assets/{index-BihXRHbW.css → index-BTEKdfpj.css} +1 -1
- package/out/renderer/assets/index-BTEKdfpj.css.br +0 -0
- package/out/renderer/assets/index-BTEKdfpj.css.gz +0 -0
- package/out/renderer/assets/{index-Ckb2j9e5.js → index-BpPCAjGn.js} +49509 -28314
- package/out/renderer/assets/index-BpPCAjGn.js.br +0 -0
- package/out/renderer/assets/index-BpPCAjGn.js.gz +0 -0
- package/out/renderer/assets/{infoDiagram-42DDH7IO-BB7FT1Ls.js → infoDiagram-42DDH7IO-Ca_9-363.js} +4 -4
- package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js → ishikawaDiagram-UXIWVN3A-D3GtyA4e.js} +1 -1
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3GtyA4e.js.br +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3GtyA4e.js.gz +0 -0
- package/out/renderer/assets/{journeyDiagram-VCZTEJTY-bhcMvreZ.js → journeyDiagram-VCZTEJTY-DkQAlc0b.js} +4 -4
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-DkQAlc0b.js.br +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-DkQAlc0b.js.gz +0 -0
- package/out/renderer/assets/{kanban-definition-6JOO6SKY-CRg0O3h_.js → kanban-definition-6JOO6SKY-DamLzi6S.js} +2 -2
- package/out/renderer/assets/kanban-definition-6JOO6SKY-DamLzi6S.js.br +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-DamLzi6S.js.gz +0 -0
- package/out/renderer/assets/{layout-Gz3MMSfR.js → layout-Dw_ZcO_L.js} +4 -4
- package/out/renderer/assets/layout-Dw_ZcO_L.js.br +0 -0
- package/out/renderer/assets/layout-Dw_ZcO_L.js.gz +0 -0
- package/out/renderer/assets/{linear-B-XoCpT2.js → linear-Dh5vwFy4.js} +1 -1
- package/out/renderer/assets/linear-Dh5vwFy4.js.br +0 -0
- package/out/renderer/assets/linear-Dh5vwFy4.js.gz +0 -0
- package/out/renderer/assets/mathjax-stix2-M8xawHNZ.js +15 -0
- package/out/renderer/assets/mathjax-stix2-M8xawHNZ.js.br +0 -0
- package/out/renderer/assets/mathjax-stix2-M8xawHNZ.js.gz +0 -0
- package/out/renderer/assets/{min-pbiT8SH0.js → min-DDCW5FhP.js} +2 -2
- package/out/renderer/assets/min-DDCW5FhP.js.br +0 -0
- package/out/renderer/assets/min-DDCW5FhP.js.gz +0 -0
- package/out/renderer/assets/{mindmap-definition-QFDTVHPH-QEcTW8Sk.js → mindmap-definition-QFDTVHPH-B3rcYXPK.js} +3 -3
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-B3rcYXPK.js.br +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-B3rcYXPK.js.gz +0 -0
- package/out/renderer/assets/{pdf-worker-wrapper-D9W0fDhT.js → pdf-worker-wrapper-D6dv_dnM.js} +2803 -2560
- package/out/renderer/assets/pdf-worker-wrapper-D6dv_dnM.js.br +0 -0
- package/out/renderer/assets/pdf-worker-wrapper-D6dv_dnM.js.gz +0 -0
- package/out/renderer/assets/{pieDiagram-DEJITSTG-BdyIMG3r.js → pieDiagram-DEJITSTG-CsCXUSKq.js} +6 -6
- package/out/renderer/assets/pieDiagram-DEJITSTG-CsCXUSKq.js.br +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-CsCXUSKq.js.gz +0 -0
- package/out/renderer/assets/pptx_parser_bg-Dnsy0qwf.wasm +0 -0
- package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-CO63F50c.js → quadrantDiagram-34T5L4WZ-B91qjO1u.js} +2 -2
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B91qjO1u.js.br +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B91qjO1u.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-BG3a7brz-Q7Y2znhP.js +25 -0
- package/out/renderer/assets/render-worker-host-BG3a7brz-Q7Y2znhP.js.br +0 -0
- package/out/renderer/assets/render-worker-host-BG3a7brz-Q7Y2znhP.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-CsB-dPJv-gJhIrzf_.js +25 -0
- package/out/renderer/assets/render-worker-host-CsB-dPJv-gJhIrzf_.js.br +0 -0
- package/out/renderer/assets/render-worker-host-CsB-dPJv-gJhIrzf_.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-Cyv5Hkbh-BAiWfcv_.js +25 -0
- package/out/renderer/assets/render-worker-host-Cyv5Hkbh-BAiWfcv_.js.br +0 -0
- package/out/renderer/assets/render-worker-host-Cyv5Hkbh-BAiWfcv_.js.gz +0 -0
- package/out/renderer/assets/{requirementDiagram-MS252O5E-Ch2CVgfZ.js → requirementDiagram-MS252O5E-oDcN7qN5.js} +3 -3
- package/out/renderer/assets/requirementDiagram-MS252O5E-oDcN7qN5.js.br +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-oDcN7qN5.js.gz +0 -0
- package/out/renderer/assets/{sankeyDiagram-XADWPNL6--b1mWkl5.js → sankeyDiagram-XADWPNL6-DNQO_6oX.js} +1 -1
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-DNQO_6oX.js.br +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-DNQO_6oX.js.gz +0 -0
- package/out/renderer/assets/{sequenceDiagram-FGHM5R23-CNautoFU.js → sequenceDiagram-FGHM5R23-DCh5u6wY.js} +3 -3
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-DCh5u6wY.js.br +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-DCh5u6wY.js.gz +0 -0
- package/out/renderer/assets/{stateDiagram-FHFEXIEX-CKsv5tYk.js → stateDiagram-FHFEXIEX-DV0gaxkj.js} +8 -8
- package/out/renderer/assets/stateDiagram-FHFEXIEX-DV0gaxkj.js.br +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-DV0gaxkj.js.gz +0 -0
- package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-CkdzkP8w.js → stateDiagram-v2-QKLJ7IA2-D1Sk_TKE.js} +4 -4
- package/out/renderer/assets/theming_false-C5NatR_w.js +5 -0
- package/out/renderer/assets/theming_false-CG4cvbgC.js +5 -0
- package/out/renderer/assets/theming_false-CM9D8h_m.js +5 -0
- package/out/renderer/assets/theming_false-CdT0AbCV.js +5 -0
- package/out/renderer/assets/theming_false-Cfu67eQJ.js +5 -0
- package/out/renderer/assets/theming_false-Cx4KIHFf.js +5 -0
- package/out/renderer/assets/theming_false-DT3t1zD4.js +5 -0
- package/out/renderer/assets/theming_false-Djik2YgE.js +5 -0
- package/out/renderer/assets/theming_false-PG6ooLjt.js +5 -0
- package/out/renderer/assets/theming_false-XUCKLqh3.js +5 -0
- package/out/renderer/assets/{timeline-definition-GMOUNBTQ-CF_zqktL.js → timeline-definition-GMOUNBTQ-Nq47TkPV.js} +2 -2
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-Nq47TkPV.js.br +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-Nq47TkPV.js.gz +0 -0
- package/out/renderer/assets/{vennDiagram-DHZGUBPP-C7q9SHIx.js → vennDiagram-DHZGUBPP-CMbmY-R_.js} +1 -1
- package/out/renderer/assets/vennDiagram-DHZGUBPP-CMbmY-R_.js.br +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-CMbmY-R_.js.gz +0 -0
- package/out/renderer/assets/{wardley-RL74JXVD-DmW7d79y.js → wardley-RL74JXVD-aLLqbf8o.js} +3 -3
- package/out/renderer/assets/wardley-RL74JXVD-aLLqbf8o.js.br +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-aLLqbf8o.js.gz +0 -0
- package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-1VzGmAot.js → wardleyDiagram-NUSXRM2D-8Kc4VQIw.js} +5 -5
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-8Kc4VQIw.js.br +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-8Kc4VQIw.js.gz +0 -0
- package/out/renderer/assets/xlsx_parser_bg-BM7cLtfq.wasm +0 -0
- package/out/renderer/assets/{xychartDiagram-5P7HB3ND-DznKXnsr.js → xychartDiagram-5P7HB3ND-YtEoXmYf.js} +2 -2
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-YtEoXmYf.js.br +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-YtEoXmYf.js.gz +0 -0
- package/out/renderer/index.html +2 -2
- package/out/renderer/index.html.br +0 -0
- package/out/renderer/index.html.gz +0 -0
- package/out/scripts/mcp-image-generation/server.mjs +140 -0
- package/out/scripts/mcp-memo/server.mjs +174 -79
- package/out/scripts/mcp-memory/server.mjs +61 -45
- package/out/scripts/mcp-toolbox/server.mjs +517 -0
- package/out/scripts/worker-file-outline/worker.mjs +5 -0
- package/out/server/main.js +1551 -374
- package/package.json +11 -8
- package/out/renderer/assets/_baseUniq-CNYzw1DB.js.br +0 -0
- package/out/renderer/assets/_baseUniq-CNYzw1DB.js.gz +0 -0
- package/out/renderer/assets/arc-vyANDg9_.js.br +0 -0
- package/out/renderer/assets/arc-vyANDg9_.js.gz +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-BzcUqnqp.js.br +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-BzcUqnqp.js.gz +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-CTEZWa8S.js.br +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-CTEZWa8S.js.gz +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-BuFQdjjc.js.br +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-BuFQdjjc.js.gz +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-CUfY3XSR.js.br +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-CUfY3XSR.js.gz +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-DlWjafzT.js.br +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-DlWjafzT.js.gz +0 -0
- package/out/renderer/assets/chunk-OYMX7WX6-1XAYgymx.js.br +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-DKTOTV26.js.br +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-DKTOTV26.js.gz +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-Dr92qdgA.js.br +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-Dr92qdgA.js.gz +0 -0
- package/out/renderer/assets/dagre-KV5264BT-7l16BI52.js.br +0 -0
- package/out/renderer/assets/dagre-KV5264BT-7l16BI52.js.gz +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-7J0KHPTw.js.br +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-7J0KHPTw.js.gz +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-Dgk1T3Ng.js.br +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-Dgk1T3Ng.js.gz +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-DerRkmYs.js.br +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-DerRkmYs.js.gz +0 -0
- package/out/renderer/assets/diagram-TYMM5635-DR9dcwKl.js.br +0 -0
- package/out/renderer/assets/diagram-TYMM5635-DR9dcwKl.js.gz +0 -0
- package/out/renderer/assets/docx_parser_bg-Dwb1lJCk.wasm +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-CZ2vNtP6.js.br +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-CZ2vNtP6.js.gz +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-DOL_mdve.js.br +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-DOL_mdve.js.gz +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DXfCf0sW.js.br +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DXfCf0sW.js.gz +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-Bi19RzUn.js.br +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-Bi19RzUn.js.gz +0 -0
- package/out/renderer/assets/graph-BX6gbV3Q.js.br +0 -0
- package/out/renderer/assets/graph-BX6gbV3Q.js.gz +0 -0
- package/out/renderer/assets/index-BihXRHbW.css.br +0 -0
- package/out/renderer/assets/index-BihXRHbW.css.gz +0 -0
- package/out/renderer/assets/index-Ckb2j9e5.js.br +0 -0
- package/out/renderer/assets/index-Ckb2j9e5.js.gz +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js.br +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js.gz +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-bhcMvreZ.js.br +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-bhcMvreZ.js.gz +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-CRg0O3h_.js.br +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-CRg0O3h_.js.gz +0 -0
- package/out/renderer/assets/layout-Gz3MMSfR.js.br +0 -0
- package/out/renderer/assets/layout-Gz3MMSfR.js.gz +0 -0
- package/out/renderer/assets/linear-B-XoCpT2.js.br +0 -0
- package/out/renderer/assets/linear-B-XoCpT2.js.gz +0 -0
- package/out/renderer/assets/min-pbiT8SH0.js.br +0 -0
- package/out/renderer/assets/min-pbiT8SH0.js.gz +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-QEcTW8Sk.js.br +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-QEcTW8Sk.js.gz +0 -0
- package/out/renderer/assets/pdf-worker-wrapper-D9W0fDhT.js.br +0 -0
- package/out/renderer/assets/pdf-worker-wrapper-D9W0fDhT.js.gz +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-BdyIMG3r.js.br +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-BdyIMG3r.js.gz +0 -0
- package/out/renderer/assets/pierre-dark-BL-l9r39.js +0 -4
- package/out/renderer/assets/pierre-dark-BL-l9r39.js.br +0 -0
- package/out/renderer/assets/pierre-dark-BL-l9r39.js.gz +0 -0
- package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js +0 -4
- package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js.br +0 -0
- package/out/renderer/assets/pierre-dark-protanopia-deuteranopia-BBjGuJQU.js.gz +0 -0
- package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js +0 -4
- package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js.br +0 -0
- package/out/renderer/assets/pierre-dark-soft-B6TBhICr.js.gz +0 -0
- package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js +0 -4
- package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js.br +0 -0
- package/out/renderer/assets/pierre-dark-tritanopia-f-j_EX9A.js.gz +0 -0
- package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js +0 -4
- package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js.br +0 -0
- package/out/renderer/assets/pierre-dark-vibrant-yElMGqZN.js.gz +0 -0
- package/out/renderer/assets/pierre-light-BUzWTcjO.js +0 -4
- package/out/renderer/assets/pierre-light-BUzWTcjO.js.br +0 -0
- package/out/renderer/assets/pierre-light-BUzWTcjO.js.gz +0 -0
- package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js +0 -4
- package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js.br +0 -0
- package/out/renderer/assets/pierre-light-protanopia-deuteranopia-DlvVSCaI.js.gz +0 -0
- package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js +0 -4
- package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js.br +0 -0
- package/out/renderer/assets/pierre-light-soft-CCMU-Zh0.js.gz +0 -0
- package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js +0 -4
- package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js.br +0 -0
- package/out/renderer/assets/pierre-light-tritanopia-v4xacE1C.js.gz +0 -0
- package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js +0 -4
- package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js.br +0 -0
- package/out/renderer/assets/pierre-light-vibrant-BRUbQnMc.js.gz +0 -0
- package/out/renderer/assets/pptx_parser_bg-N_v237u9.wasm +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-CO63F50c.js.br +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-CO63F50c.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js +0 -25
- package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js.br +0 -0
- package/out/renderer/assets/render-worker-host-B5esxBj--BJuDnELc.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js +0 -25
- package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js.br +0 -0
- package/out/renderer/assets/render-worker-host-BzhGwe0I-Cw8cuLG0.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js +0 -25
- package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js.br +0 -0
- package/out/renderer/assets/render-worker-host-Cg60RAG_-C8N4a8W-.js.gz +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-Ch2CVgfZ.js.br +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-Ch2CVgfZ.js.gz +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6--b1mWkl5.js.br +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6--b1mWkl5.js.gz +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-CNautoFU.js.br +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-CNautoFU.js.gz +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-CKsv5tYk.js.br +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-CKsv5tYk.js.gz +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-CF_zqktL.js.br +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-CF_zqktL.js.gz +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-C7q9SHIx.js.br +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-C7q9SHIx.js.gz +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-DmW7d79y.js.br +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-DmW7d79y.js.gz +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-1VzGmAot.js.br +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-1VzGmAot.js.gz +0 -0
- package/out/renderer/assets/xlsx_parser_bg-CQ5Lc7LS.wasm +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-DznKXnsr.js.br +0 -0
- 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(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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("
|
|
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("
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
)
|
|
43
|
+
const memoSetWeightRequestSchema = z.object({
|
|
44
|
+
id: memoryEntryIdSchema,
|
|
45
|
+
weight: mutableWeightSchema
|
|
23
46
|
});
|
|
24
|
-
const
|
|
47
|
+
const memoSetWeightRespondSchema = z.object({
|
|
25
48
|
ok: z.boolean(),
|
|
26
|
-
|
|
49
|
+
id: memoryEntryIdSchema,
|
|
50
|
+
error: z.literal("entry_not_found").optional()
|
|
27
51
|
});
|
|
28
52
|
const memoTouchRequestSchema = z.object({
|
|
29
|
-
|
|
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
|
|
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:
|
|
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 || "
|
|
90
|
+
text: result.content || '{"entries":[]}'
|
|
65
91
|
}
|
|
66
92
|
]
|
|
67
93
|
};
|
|
68
|
-
} catch (
|
|
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
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
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", (
|
|
163
|
-
reject(new Error(`Socket request failed: ${
|
|
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
|
-
"
|
|
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
|
|
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(
|
|
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.
|
|
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
|
|
28
|
-
|
|
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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
46
|
-
if (
|
|
37
|
+
function loadCriticalMemories(filePath) {
|
|
38
|
+
if (!filePath) return [];
|
|
47
39
|
try {
|
|
48
|
-
|
|
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
|
-
|
|
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
|
|
69
|
+
description: `Query the project's persistent memory.${criticalMemoryDescription}
|
|
65
70
|
|
|
66
|
-
|
|
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
|
-
|
|
72
|
-
|
|
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 (
|
|
89
|
+
} catch (error) {
|
|
88
90
|
return {
|
|
89
|
-
content: [
|
|
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
|
-
|
|
101
|
-
-
|
|
102
|
-
- You discover a project convention or architectural decision
|
|
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
|
|
104
115
|
|
|
105
|
-
|
|
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.
|
|
128
|
+
text: result.message || `Stored ${result.stored} fact(s) to project memory.`
|
|
116
129
|
}
|
|
117
130
|
]
|
|
118
131
|
};
|
|
119
|
-
} catch (
|
|
132
|
+
} catch (error) {
|
|
120
133
|
return {
|
|
121
|
-
content: [
|
|
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
|
-
|
|
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", (
|
|
157
|
-
reject(new Error(`Socket request failed: ${
|
|
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();
|