@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
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import * as http from "http";
|
|
5
|
+
const base64EncodeRequestSchema = z.object({
|
|
6
|
+
text: z.string().describe("The text string to encode into Base64.")
|
|
7
|
+
});
|
|
8
|
+
const base64EncodeRespondSchema = z.object({
|
|
9
|
+
result: z.string()
|
|
10
|
+
});
|
|
11
|
+
const base64DecodeRequestSchema = z.object({
|
|
12
|
+
base64: z.string().describe("The Base64-encoded string to decode back into text.")
|
|
13
|
+
});
|
|
14
|
+
const base64DecodeRespondSchema = z.object({
|
|
15
|
+
result: z.string()
|
|
16
|
+
});
|
|
17
|
+
const urlEncodeRequestSchema = z.object({
|
|
18
|
+
text: z.string().describe("The text string to URL-encode.")
|
|
19
|
+
});
|
|
20
|
+
const urlEncodeRespondSchema = z.object({
|
|
21
|
+
result: z.string()
|
|
22
|
+
});
|
|
23
|
+
const urlDecodeRequestSchema = z.object({
|
|
24
|
+
text: z.string().describe("The URL-encoded string to decode.")
|
|
25
|
+
});
|
|
26
|
+
const urlDecodeRespondSchema = z.object({
|
|
27
|
+
result: z.string()
|
|
28
|
+
});
|
|
29
|
+
const hashRequestSchema = z.object({
|
|
30
|
+
text: z.string().describe("The text to hash."),
|
|
31
|
+
algorithm: z.enum(["md5", "sha1", "sha256"]).default("sha256").describe("Hash algorithm: md5, sha1, or sha256. Default: sha256.")
|
|
32
|
+
});
|
|
33
|
+
const hashRespondSchema = z.object({
|
|
34
|
+
result: z.string()
|
|
35
|
+
});
|
|
36
|
+
const timeRequestSchema = z.object({
|
|
37
|
+
format: z.enum(["iso", "timestamp"]).default("iso").describe(
|
|
38
|
+
"Output format: 'iso' for ISO 8601 string, 'timestamp' for Unix timestamp in seconds."
|
|
39
|
+
)
|
|
40
|
+
});
|
|
41
|
+
const timeRespondSchema = z.object({
|
|
42
|
+
result: z.union([z.string(), z.number()])
|
|
43
|
+
});
|
|
44
|
+
const uuidRequestSchema = z.object({});
|
|
45
|
+
const uuidRespondSchema = z.object({
|
|
46
|
+
result: z.string()
|
|
47
|
+
});
|
|
48
|
+
const shortIdRequestSchema = z.object({
|
|
49
|
+
length: z.number().int().min(4).max(32).default(8).describe("Length of the short ID (4-32). Default: 8.")
|
|
50
|
+
});
|
|
51
|
+
const shortIdRespondSchema = z.object({
|
|
52
|
+
result: z.string()
|
|
53
|
+
});
|
|
54
|
+
const randomRequestSchema = z.object({
|
|
55
|
+
length: z.number().int().min(1).max(256).default(16).describe("Length of the random string (1-256). Default: 16."),
|
|
56
|
+
charset: z.enum(["alphanumeric", "alpha", "numeric", "hex"]).default("alphanumeric").describe("Character set: alphanumeric, alpha, numeric, or hex. Default: alphanumeric.")
|
|
57
|
+
});
|
|
58
|
+
const randomRespondSchema = z.object({
|
|
59
|
+
result: z.string()
|
|
60
|
+
});
|
|
61
|
+
const randIntRequestSchema = z.object({
|
|
62
|
+
min: z.number().int().describe("Minimum value (inclusive)."),
|
|
63
|
+
max: z.number().int().describe("Maximum value (inclusive).")
|
|
64
|
+
});
|
|
65
|
+
const randIntRespondSchema = z.object({
|
|
66
|
+
result: z.number().int()
|
|
67
|
+
});
|
|
68
|
+
const choiceRequestSchema = z.object({
|
|
69
|
+
items: z.array(z.string()).min(1).describe("Array of items to choose from.")
|
|
70
|
+
});
|
|
71
|
+
const choiceRespondSchema = z.object({
|
|
72
|
+
result: z.string()
|
|
73
|
+
});
|
|
74
|
+
const shuffleRequestSchema = z.object({
|
|
75
|
+
items: z.array(z.string()).min(1).describe("Array of items to shuffle.")
|
|
76
|
+
});
|
|
77
|
+
const shuffleRespondSchema = z.object({
|
|
78
|
+
result: z.array(z.string())
|
|
79
|
+
});
|
|
80
|
+
const imageMetadataRequestSchema = z.object({
|
|
81
|
+
path: z.string().describe("Absolute or project-relative path to the image file.")
|
|
82
|
+
});
|
|
83
|
+
const imageMetadataRespondSchema = z.object({
|
|
84
|
+
result: z.object({
|
|
85
|
+
width: z.number().optional(),
|
|
86
|
+
height: z.number().optional(),
|
|
87
|
+
format: z.string().optional(),
|
|
88
|
+
space: z.string().optional(),
|
|
89
|
+
channels: z.number().optional(),
|
|
90
|
+
depth: z.string().optional(),
|
|
91
|
+
density: z.number().optional(),
|
|
92
|
+
hasAlpha: z.boolean().optional(),
|
|
93
|
+
size: z.number().optional()
|
|
94
|
+
})
|
|
95
|
+
});
|
|
96
|
+
const imageThumbnailRequestSchema = z.object({
|
|
97
|
+
path: z.string().describe("Absolute or project-relative path to the source image."),
|
|
98
|
+
width: z.number().int().min(1).max(1024).default(200).describe("Thumbnail width in pixels (1-1024). Default: 200."),
|
|
99
|
+
output: z.string().optional().describe("Output path. If omitted, saves alongside source with '.thumb{width}' suffix.")
|
|
100
|
+
});
|
|
101
|
+
const imageThumbnailRespondSchema = z.object({
|
|
102
|
+
result: z.object({
|
|
103
|
+
output: z.string(),
|
|
104
|
+
metadata: imageMetadataRespondSchema.shape.result
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
const imageResizeRequestSchema = z.object({
|
|
108
|
+
path: z.string().describe("Absolute or project-relative path to the source image."),
|
|
109
|
+
width: z.number().int().min(1).optional().describe("Target width in pixels."),
|
|
110
|
+
height: z.number().int().min(1).optional().describe("Target height in pixels."),
|
|
111
|
+
fit: z.enum(["cover", "contain", "fill", "inside", "outside"]).default("inside").describe("How to fit the image: cover, contain, fill, inside, outside. Default: inside."),
|
|
112
|
+
output: z.string().optional().describe("Output path. If omitted, saves alongside source with '.{width}x{height}' suffix.")
|
|
113
|
+
});
|
|
114
|
+
const imageResizeRespondSchema = z.object({
|
|
115
|
+
result: z.object({
|
|
116
|
+
output: z.string(),
|
|
117
|
+
metadata: imageMetadataRespondSchema.shape.result
|
|
118
|
+
})
|
|
119
|
+
});
|
|
120
|
+
const imageConvertRequestSchema = z.object({
|
|
121
|
+
path: z.string().describe("Absolute or project-relative path to the source image."),
|
|
122
|
+
format: z.enum(["jpeg", "png", "webp", "avif", "tiff"]).describe("Target image format."),
|
|
123
|
+
quality: z.number().int().min(1).max(100).optional().describe("Quality for lossy formats (1-100). Applies to jpeg, webp, avif."),
|
|
124
|
+
output: z.string().optional().describe("Output path. If omitted, saves alongside source with new extension.")
|
|
125
|
+
});
|
|
126
|
+
const imageConvertRespondSchema = z.object({
|
|
127
|
+
result: z.object({
|
|
128
|
+
output: z.string(),
|
|
129
|
+
metadata: imageMetadataRespondSchema.shape.result
|
|
130
|
+
})
|
|
131
|
+
});
|
|
132
|
+
const qrCodeRequestSchema = z.object({
|
|
133
|
+
text: z.string().min(1).describe("Text to encode in the QR code."),
|
|
134
|
+
output: z.string().optional().describe("Output PNG path. If omitted, saves as 'qrcode.png' in the project root."),
|
|
135
|
+
size: z.number().int().min(1).max(50).default(5).describe("Size of each QR module in pixels (1-50). Default: 5."),
|
|
136
|
+
margin: z.number().int().min(0).max(100).default(4).describe("White-space margin around the QR code in modules (0-100). Default: 4."),
|
|
137
|
+
errorCorrection: z.enum(["L", "M", "Q", "H"]).default("M").describe("Error correction level. Default: M.")
|
|
138
|
+
});
|
|
139
|
+
const qrCodeRespondSchema = z.object({
|
|
140
|
+
result: z.object({
|
|
141
|
+
output: z.string()
|
|
142
|
+
})
|
|
143
|
+
});
|
|
144
|
+
function getArg(name) {
|
|
145
|
+
const idx = process.argv.indexOf(`--${name}`);
|
|
146
|
+
return idx !== -1 ? process.argv[idx + 1] : void 0;
|
|
147
|
+
}
|
|
148
|
+
const socketPath = getArg("socket-path");
|
|
149
|
+
const projectDir = getArg("project-dir");
|
|
150
|
+
if (!socketPath) {
|
|
151
|
+
console.error("[mcp-toolbox] Missing required argument: --socket-path");
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
if (!projectDir) {
|
|
155
|
+
console.error("[mcp-toolbox] Missing required argument: --project-dir");
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
const server = new McpServer({
|
|
159
|
+
name: "Toolbox",
|
|
160
|
+
version: "1.0.0",
|
|
161
|
+
description: "Built-in utility tools: base64, URL encode/decode, hash, time, UUID, random, etc."
|
|
162
|
+
});
|
|
163
|
+
server.registerTool(
|
|
164
|
+
"base64_encode",
|
|
165
|
+
{
|
|
166
|
+
description: "Encode a text string into Base64 format. Supports UTF-8 text.",
|
|
167
|
+
inputSchema: base64EncodeRequestSchema
|
|
168
|
+
},
|
|
169
|
+
async (input) => {
|
|
170
|
+
try {
|
|
171
|
+
const res = base64EncodeRespondSchema.parse(
|
|
172
|
+
await postToSocket("/toolbox/base64-encode", { text: input.text })
|
|
173
|
+
);
|
|
174
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
175
|
+
} catch (err) {
|
|
176
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
);
|
|
180
|
+
server.registerTool(
|
|
181
|
+
"base64_decode",
|
|
182
|
+
{
|
|
183
|
+
description: "Decode a Base64-encoded string back into UTF-8 text.",
|
|
184
|
+
inputSchema: base64DecodeRequestSchema
|
|
185
|
+
},
|
|
186
|
+
async (input) => {
|
|
187
|
+
try {
|
|
188
|
+
const res = base64DecodeRespondSchema.parse(
|
|
189
|
+
await postToSocket("/toolbox/base64-decode", { base64: input.base64 })
|
|
190
|
+
);
|
|
191
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
192
|
+
} catch (err) {
|
|
193
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
);
|
|
197
|
+
server.registerTool(
|
|
198
|
+
"url_encode",
|
|
199
|
+
{
|
|
200
|
+
description: "URL-encode a text string (percent-encoding).",
|
|
201
|
+
inputSchema: urlEncodeRequestSchema
|
|
202
|
+
},
|
|
203
|
+
async (input) => {
|
|
204
|
+
try {
|
|
205
|
+
const res = urlEncodeRespondSchema.parse(
|
|
206
|
+
await postToSocket("/toolbox/url-encode", { text: input.text })
|
|
207
|
+
);
|
|
208
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
209
|
+
} catch (err) {
|
|
210
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
);
|
|
214
|
+
server.registerTool(
|
|
215
|
+
"url_decode",
|
|
216
|
+
{
|
|
217
|
+
description: "Decode a URL-encoded (percent-encoded) string back into text.",
|
|
218
|
+
inputSchema: urlDecodeRequestSchema
|
|
219
|
+
},
|
|
220
|
+
async (input) => {
|
|
221
|
+
try {
|
|
222
|
+
const res = urlDecodeRespondSchema.parse(
|
|
223
|
+
await postToSocket("/toolbox/url-decode", { text: input.text })
|
|
224
|
+
);
|
|
225
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
226
|
+
} catch (err) {
|
|
227
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
);
|
|
231
|
+
server.registerTool(
|
|
232
|
+
"hash",
|
|
233
|
+
{
|
|
234
|
+
description: "Compute a hash (MD5, SHA1, or SHA256) of a text string. Returns hex digest.",
|
|
235
|
+
inputSchema: hashRequestSchema
|
|
236
|
+
},
|
|
237
|
+
async (input) => {
|
|
238
|
+
try {
|
|
239
|
+
const res = hashRespondSchema.parse(
|
|
240
|
+
await postToSocket("/toolbox/hash", {
|
|
241
|
+
text: input.text,
|
|
242
|
+
algorithm: input.algorithm
|
|
243
|
+
})
|
|
244
|
+
);
|
|
245
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
246
|
+
} catch (err) {
|
|
247
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
);
|
|
251
|
+
server.registerTool(
|
|
252
|
+
"time",
|
|
253
|
+
{
|
|
254
|
+
description: "Get the current time. Returns either an ISO 8601 string or a Unix timestamp in seconds.",
|
|
255
|
+
inputSchema: timeRequestSchema
|
|
256
|
+
},
|
|
257
|
+
async (input) => {
|
|
258
|
+
try {
|
|
259
|
+
const res = timeRespondSchema.parse(
|
|
260
|
+
await postToSocket("/toolbox/time", { format: input.format })
|
|
261
|
+
);
|
|
262
|
+
return { content: [{ type: "text", text: String(res.result) }] };
|
|
263
|
+
} catch (err) {
|
|
264
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
server.registerTool(
|
|
269
|
+
"uuid",
|
|
270
|
+
{
|
|
271
|
+
description: "Generate a random UUID v4.",
|
|
272
|
+
inputSchema: uuidRequestSchema
|
|
273
|
+
},
|
|
274
|
+
async () => {
|
|
275
|
+
try {
|
|
276
|
+
const res = uuidRespondSchema.parse(await postToSocket("/toolbox/uuid", {}));
|
|
277
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
278
|
+
} catch (err) {
|
|
279
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
);
|
|
283
|
+
server.registerTool(
|
|
284
|
+
"short_id",
|
|
285
|
+
{
|
|
286
|
+
description: "Generate a short random alphanumeric ID.",
|
|
287
|
+
inputSchema: shortIdRequestSchema
|
|
288
|
+
},
|
|
289
|
+
async (input) => {
|
|
290
|
+
try {
|
|
291
|
+
const res = shortIdRespondSchema.parse(
|
|
292
|
+
await postToSocket("/toolbox/short-id", { length: input.length })
|
|
293
|
+
);
|
|
294
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
295
|
+
} catch (err) {
|
|
296
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
);
|
|
300
|
+
server.registerTool(
|
|
301
|
+
"random",
|
|
302
|
+
{
|
|
303
|
+
description: "Generate a random string with specified length and character set.",
|
|
304
|
+
inputSchema: randomRequestSchema
|
|
305
|
+
},
|
|
306
|
+
async (input) => {
|
|
307
|
+
try {
|
|
308
|
+
const res = randomRespondSchema.parse(
|
|
309
|
+
await postToSocket("/toolbox/random", {
|
|
310
|
+
length: input.length,
|
|
311
|
+
charset: input.charset
|
|
312
|
+
})
|
|
313
|
+
);
|
|
314
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
315
|
+
} catch (err) {
|
|
316
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
);
|
|
320
|
+
server.registerTool(
|
|
321
|
+
"rand_int",
|
|
322
|
+
{
|
|
323
|
+
description: "Generate a random integer between min and max (inclusive).",
|
|
324
|
+
inputSchema: randIntRequestSchema
|
|
325
|
+
},
|
|
326
|
+
async (input) => {
|
|
327
|
+
try {
|
|
328
|
+
const res = randIntRespondSchema.parse(
|
|
329
|
+
await postToSocket("/toolbox/rand-int", { min: input.min, max: input.max })
|
|
330
|
+
);
|
|
331
|
+
return { content: [{ type: "text", text: String(res.result) }] };
|
|
332
|
+
} catch (err) {
|
|
333
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
);
|
|
337
|
+
server.registerTool(
|
|
338
|
+
"choice",
|
|
339
|
+
{
|
|
340
|
+
description: "Pick a random item from an array.",
|
|
341
|
+
inputSchema: choiceRequestSchema
|
|
342
|
+
},
|
|
343
|
+
async (input) => {
|
|
344
|
+
try {
|
|
345
|
+
const res = choiceRespondSchema.parse(
|
|
346
|
+
await postToSocket("/toolbox/choice", { items: input.items })
|
|
347
|
+
);
|
|
348
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
349
|
+
} catch (err) {
|
|
350
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
);
|
|
354
|
+
server.registerTool(
|
|
355
|
+
"shuffle",
|
|
356
|
+
{
|
|
357
|
+
description: "Shuffle an array randomly (Fisher-Yates).",
|
|
358
|
+
inputSchema: shuffleRequestSchema
|
|
359
|
+
},
|
|
360
|
+
async (input) => {
|
|
361
|
+
try {
|
|
362
|
+
const res = shuffleRespondSchema.parse(
|
|
363
|
+
await postToSocket("/toolbox/shuffle", { items: input.items })
|
|
364
|
+
);
|
|
365
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result) }] };
|
|
366
|
+
} catch (err) {
|
|
367
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
);
|
|
371
|
+
server.registerTool(
|
|
372
|
+
"image_metadata",
|
|
373
|
+
{
|
|
374
|
+
description: "Read image metadata (width, height, format, color space, channels, etc.) from a file.",
|
|
375
|
+
inputSchema: imageMetadataRequestSchema
|
|
376
|
+
},
|
|
377
|
+
async (input) => {
|
|
378
|
+
try {
|
|
379
|
+
const res = imageMetadataRespondSchema.parse(
|
|
380
|
+
await postToSocket("/toolbox/image-metadata", { path: input.path })
|
|
381
|
+
);
|
|
382
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
383
|
+
} catch (err) {
|
|
384
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
);
|
|
388
|
+
server.registerTool(
|
|
389
|
+
"image_thumbnail",
|
|
390
|
+
{
|
|
391
|
+
description: "Generate a thumbnail from an image. Returns the output file path and new image metadata.",
|
|
392
|
+
inputSchema: imageThumbnailRequestSchema
|
|
393
|
+
},
|
|
394
|
+
async (input) => {
|
|
395
|
+
try {
|
|
396
|
+
const res = imageThumbnailRespondSchema.parse(
|
|
397
|
+
await postToSocket("/toolbox/image-thumbnail", {
|
|
398
|
+
path: input.path,
|
|
399
|
+
width: input.width,
|
|
400
|
+
output: input.output
|
|
401
|
+
})
|
|
402
|
+
);
|
|
403
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
404
|
+
} catch (err) {
|
|
405
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
);
|
|
409
|
+
server.registerTool(
|
|
410
|
+
"image_resize",
|
|
411
|
+
{
|
|
412
|
+
description: "Resize an image to specified dimensions. Returns the output file path and new image metadata.",
|
|
413
|
+
inputSchema: imageResizeRequestSchema
|
|
414
|
+
},
|
|
415
|
+
async (input) => {
|
|
416
|
+
try {
|
|
417
|
+
const res = imageResizeRespondSchema.parse(
|
|
418
|
+
await postToSocket("/toolbox/image-resize", {
|
|
419
|
+
path: input.path,
|
|
420
|
+
width: input.width,
|
|
421
|
+
height: input.height,
|
|
422
|
+
fit: input.fit,
|
|
423
|
+
output: input.output
|
|
424
|
+
})
|
|
425
|
+
);
|
|
426
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
427
|
+
} catch (err) {
|
|
428
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
);
|
|
432
|
+
server.registerTool(
|
|
433
|
+
"image_convert",
|
|
434
|
+
{
|
|
435
|
+
description: "Convert an image to a different format (jpeg, png, webp, avif, tiff). Returns the output file path and new image metadata.",
|
|
436
|
+
inputSchema: imageConvertRequestSchema
|
|
437
|
+
},
|
|
438
|
+
async (input) => {
|
|
439
|
+
try {
|
|
440
|
+
const res = imageConvertRespondSchema.parse(
|
|
441
|
+
await postToSocket("/toolbox/image-convert", {
|
|
442
|
+
path: input.path,
|
|
443
|
+
format: input.format,
|
|
444
|
+
quality: input.quality,
|
|
445
|
+
output: input.output
|
|
446
|
+
})
|
|
447
|
+
);
|
|
448
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
449
|
+
} catch (err) {
|
|
450
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
);
|
|
454
|
+
server.registerTool(
|
|
455
|
+
"image_qrcode",
|
|
456
|
+
{
|
|
457
|
+
description: "Generate a PNG QR code image from text.",
|
|
458
|
+
inputSchema: qrCodeRequestSchema
|
|
459
|
+
},
|
|
460
|
+
async (input) => {
|
|
461
|
+
try {
|
|
462
|
+
const res = qrCodeRespondSchema.parse(
|
|
463
|
+
await postToSocket("/toolbox/image-qrcode", {
|
|
464
|
+
text: input.text,
|
|
465
|
+
output: input.output,
|
|
466
|
+
size: input.size,
|
|
467
|
+
margin: input.margin,
|
|
468
|
+
errorCorrection: input.errorCorrection
|
|
469
|
+
})
|
|
470
|
+
);
|
|
471
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
472
|
+
} catch (err) {
|
|
473
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
);
|
|
477
|
+
function postToSocket(path, body) {
|
|
478
|
+
return new Promise((resolve, reject) => {
|
|
479
|
+
const data = JSON.stringify(body);
|
|
480
|
+
const options = {
|
|
481
|
+
socketPath,
|
|
482
|
+
path,
|
|
483
|
+
method: "POST",
|
|
484
|
+
headers: {
|
|
485
|
+
"Content-Type": "application/json",
|
|
486
|
+
"Content-Length": Buffer.byteLength(data)
|
|
487
|
+
}
|
|
488
|
+
};
|
|
489
|
+
const req = http.request(options, (res) => {
|
|
490
|
+
const chunks = [];
|
|
491
|
+
res.on("data", (chunk) => chunks.push(chunk));
|
|
492
|
+
res.on("end", () => {
|
|
493
|
+
const raw = Buffer.concat(chunks).toString("utf8");
|
|
494
|
+
try {
|
|
495
|
+
const parsed = JSON.parse(raw);
|
|
496
|
+
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
497
|
+
resolve(parsed);
|
|
498
|
+
} else {
|
|
499
|
+
reject(new Error(parsed.error || `HTTP ${res.statusCode}: ${raw}`));
|
|
500
|
+
}
|
|
501
|
+
} catch {
|
|
502
|
+
reject(new Error(`Invalid response (${res.statusCode}): ${raw}`));
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
});
|
|
506
|
+
req.on("error", (err) => {
|
|
507
|
+
reject(new Error(`Socket request failed: ${err.message}`));
|
|
508
|
+
});
|
|
509
|
+
req.write(data);
|
|
510
|
+
req.end();
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
async function main() {
|
|
514
|
+
const transport = new StdioServerTransport();
|
|
515
|
+
await server.connect(transport);
|
|
516
|
+
}
|
|
517
|
+
main().catch(console.error);
|
|
@@ -232,6 +232,7 @@ async function parse(req) {
|
|
|
232
232
|
if (!tree) throw new Error("Failed to parse");
|
|
233
233
|
let result = [];
|
|
234
234
|
const typeSet = new Set(req.symbols.flatMap((s) => s.types));
|
|
235
|
+
const symbolScanBoundaryTypes = new Set(req.symbolScanBoundaryTypes || []);
|
|
235
236
|
const detailLabels = req.statementDetail ? new Set(req.statementDetail.labels || DEFAULT_DETAIL_LABELS) : null;
|
|
236
237
|
const cursor = tree.walk();
|
|
237
238
|
try {
|
|
@@ -289,6 +290,10 @@ async function parse(req) {
|
|
|
289
290
|
}
|
|
290
291
|
}
|
|
291
292
|
}
|
|
293
|
+
if (descend && symbolScanBoundaryTypes.has(t)) {
|
|
294
|
+
descend = false;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
292
297
|
if (descend && cursor.gotoFirstChild()) continue;
|
|
293
298
|
if (cursor.gotoNextSibling()) {
|
|
294
299
|
descend = true;
|