@zythum02/fello-server 0.1.42 → 0.1.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/out/renderer/assets/{_baseUniq-CNYzw1DB.js → _baseUniq-B2L-gQdU.js} +1 -1
- package/out/renderer/assets/_baseUniq-B2L-gQdU.js.br +0 -0
- package/out/renderer/assets/_baseUniq-B2L-gQdU.js.gz +0 -0
- package/out/renderer/assets/{arc-vyANDg9_.js → arc-Dh0s2UpX.js} +1 -1
- package/out/renderer/assets/arc-Dh0s2UpX.js.br +0 -0
- package/out/renderer/assets/arc-Dh0s2UpX.js.gz +0 -0
- package/out/renderer/assets/{architectureDiagram-Q4EWVU46-BzcUqnqp.js → architectureDiagram-Q4EWVU46-CQ2ioqAL.js} +5 -5
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-CQ2ioqAL.js.br +0 -0
- package/out/renderer/assets/{architectureDiagram-Q4EWVU46-BzcUqnqp.js.gz → architectureDiagram-Q4EWVU46-CQ2ioqAL.js.gz} +0 -0
- package/out/renderer/assets/{blockDiagram-DXYQGD6D-CTEZWa8S.js → blockDiagram-DXYQGD6D-Wh0G1xzO.js} +6 -6
- package/out/renderer/assets/blockDiagram-DXYQGD6D-Wh0G1xzO.js.br +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-Wh0G1xzO.js.gz +0 -0
- package/out/renderer/assets/{c4Diagram-AHTNJAMY-BuFQdjjc.js → c4Diagram-AHTNJAMY-BYn4M8r3.js} +2 -2
- package/out/renderer/assets/c4Diagram-AHTNJAMY-BYn4M8r3.js.br +0 -0
- package/out/renderer/assets/{c4Diagram-AHTNJAMY-BuFQdjjc.js.gz → c4Diagram-AHTNJAMY-BYn4M8r3.js.gz} +0 -0
- package/out/renderer/assets/{channel-DyKDQZ32.js → channel-BbsS770v.js} +1 -1
- package/out/renderer/assets/{chunk-4BX2VUAB-BKj1YSOw.js → chunk-4BX2VUAB-BqmuvYx4.js} +1 -1
- package/out/renderer/assets/{chunk-4TB4RGXK-CUfY3XSR.js → chunk-4TB4RGXK-CGWvo0MB.js} +5 -5
- package/out/renderer/assets/chunk-4TB4RGXK-CGWvo0MB.js.br +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-CGWvo0MB.js.gz +0 -0
- package/out/renderer/assets/{chunk-55IACEB6-BPafcNL-.js → chunk-55IACEB6-B2F_rVhp.js} +1 -1
- package/out/renderer/assets/{chunk-EDXVE4YY-DlWjafzT.js → chunk-EDXVE4YY-rv_Sxmdr.js} +1 -1
- package/out/renderer/assets/chunk-EDXVE4YY-rv_Sxmdr.js.br +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-rv_Sxmdr.js.gz +0 -0
- package/out/renderer/assets/{chunk-FMBD7UC4-CI2WhJKs.js → chunk-FMBD7UC4-B5pWdaON.js} +1 -1
- package/out/renderer/assets/{chunk-OYMX7WX6-1XAYgymx.js → chunk-OYMX7WX6-CK7U7B55.js} +3 -3
- package/out/renderer/assets/chunk-OYMX7WX6-CK7U7B55.js.br +0 -0
- package/out/renderer/assets/chunk-OYMX7WX6-CK7U7B55.js.gz +0 -0
- package/out/renderer/assets/{chunk-QZHKN3VN-B2Kh1qhq.js → chunk-QZHKN3VN-CEGxn157.js} +1 -1
- package/out/renderer/assets/{chunk-YZCP3GAM-DKTOTV26.js → chunk-YZCP3GAM-CP9VxQ_4.js} +1 -1
- package/out/renderer/assets/chunk-YZCP3GAM-CP9VxQ_4.js.br +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-CP9VxQ_4.js.gz +0 -0
- package/out/renderer/assets/{classDiagram-6PBFFD2Q-BSxgcC66.js → classDiagram-6PBFFD2Q-DDq47uie.js} +6 -6
- package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-BSxgcC66.js → classDiagram-v2-HSJHXN6E-DDq47uie.js} +6 -6
- package/out/renderer/assets/{clone-B-NXg17n.js → clone-D_yz9tHs.js} +1 -1
- package/out/renderer/assets/{cose-bilkent-S5V4N54A-Dr92qdgA.js → cose-bilkent-S5V4N54A-4f3CSmy0.js} +1 -1
- package/out/renderer/assets/cose-bilkent-S5V4N54A-4f3CSmy0.js.br +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-4f3CSmy0.js.gz +0 -0
- package/out/renderer/assets/{dagre-KV5264BT-7l16BI52.js → dagre-KV5264BT-CUE2rJbD.js} +6 -6
- package/out/renderer/assets/dagre-KV5264BT-CUE2rJbD.js.br +0 -0
- package/out/renderer/assets/dagre-KV5264BT-CUE2rJbD.js.gz +0 -0
- package/out/renderer/assets/{diagram-5BDNPKRD-7J0KHPTw.js → diagram-5BDNPKRD-pp0PcxKz.js} +6 -6
- package/out/renderer/assets/diagram-5BDNPKRD-pp0PcxKz.js.br +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-pp0PcxKz.js.gz +0 -0
- package/out/renderer/assets/{diagram-G4DWMVQ6-Dgk1T3Ng.js → diagram-G4DWMVQ6-C-riu5J4.js} +6 -6
- package/out/renderer/assets/diagram-G4DWMVQ6-C-riu5J4.js.br +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-C-riu5J4.js.gz +0 -0
- package/out/renderer/assets/{diagram-MMDJMWI5-DerRkmYs.js → diagram-MMDJMWI5-qa5mZzds.js} +5 -5
- package/out/renderer/assets/diagram-MMDJMWI5-qa5mZzds.js.br +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-qa5mZzds.js.gz +0 -0
- package/out/renderer/assets/{diagram-TYMM5635-DR9dcwKl.js → diagram-TYMM5635-BJb8gvcB.js} +5 -5
- package/out/renderer/assets/diagram-TYMM5635-BJb8gvcB.js.br +0 -0
- package/out/renderer/assets/diagram-TYMM5635-BJb8gvcB.js.gz +0 -0
- package/out/renderer/assets/docx_parser_bg-B5rV91hd.wasm +0 -0
- package/out/renderer/assets/{erDiagram-SMLLAGMA-CZ2vNtP6.js → erDiagram-SMLLAGMA-BImpezHs.js} +4 -4
- package/out/renderer/assets/erDiagram-SMLLAGMA-BImpezHs.js.br +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-BImpezHs.js.gz +0 -0
- package/out/renderer/assets/{flowDiagram-DWJPFMVM-DOL_mdve.js → flowDiagram-DWJPFMVM-BGPw25aw.js} +6 -6
- package/out/renderer/assets/flowDiagram-DWJPFMVM-BGPw25aw.js.br +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-BGPw25aw.js.gz +0 -0
- package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-DXfCf0sW.js → ganttDiagram-T4ZO3ILL-DcKLeP7M.js} +2 -2
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DcKLeP7M.js.br +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-DcKLeP7M.js.gz +0 -0
- package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-Bi19RzUn.js → gitGraphDiagram-UUTBAWPF-BQE3VROE.js} +6 -6
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BQE3VROE.js.br +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BQE3VROE.js.gz +0 -0
- package/out/renderer/assets/{graph-BX6gbV3Q.js → graph-BpsL6VlK.js} +2 -2
- package/out/renderer/assets/graph-BpsL6VlK.js.br +0 -0
- package/out/renderer/assets/graph-BpsL6VlK.js.gz +0 -0
- package/out/renderer/assets/{highlighted-body-OFNGDK62-CpZorxCd.js → highlighted-body-OFNGDK62-BKJZddky.js} +1 -1
- package/out/renderer/assets/{index-BihXRHbW.css → index-C-1Mla-o.css} +1 -1
- package/out/renderer/assets/index-C-1Mla-o.css.br +0 -0
- package/out/renderer/assets/index-C-1Mla-o.css.gz +0 -0
- package/out/renderer/assets/{index-Ckb2j9e5.js → index-Dd5g6jOl.js} +29689 -13825
- package/out/renderer/assets/index-Dd5g6jOl.js.br +0 -0
- package/out/renderer/assets/index-Dd5g6jOl.js.gz +0 -0
- package/out/renderer/assets/{infoDiagram-42DDH7IO-BB7FT1Ls.js → infoDiagram-42DDH7IO-BfDiSuRt.js} +4 -4
- package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-LTRPX_Lf.js → ishikawaDiagram-UXIWVN3A-D3NlGVXH.js} +1 -1
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3NlGVXH.js.br +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3NlGVXH.js.gz +0 -0
- package/out/renderer/assets/{journeyDiagram-VCZTEJTY-bhcMvreZ.js → journeyDiagram-VCZTEJTY-DqeLAWW-.js} +4 -4
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-DqeLAWW-.js.br +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-DqeLAWW-.js.gz +0 -0
- package/out/renderer/assets/{kanban-definition-6JOO6SKY-CRg0O3h_.js → kanban-definition-6JOO6SKY-C25BBRvk.js} +2 -2
- package/out/renderer/assets/kanban-definition-6JOO6SKY-C25BBRvk.js.br +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-C25BBRvk.js.gz +0 -0
- package/out/renderer/assets/{layout-Gz3MMSfR.js → layout-DtW-aq94.js} +4 -4
- package/out/renderer/assets/layout-DtW-aq94.js.br +0 -0
- package/out/renderer/assets/layout-DtW-aq94.js.gz +0 -0
- package/out/renderer/assets/{linear-B-XoCpT2.js → linear-rNBYTEYz.js} +1 -1
- package/out/renderer/assets/linear-rNBYTEYz.js.br +0 -0
- package/out/renderer/assets/linear-rNBYTEYz.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-MG_Ci7_B.js} +2 -2
- package/out/renderer/assets/min-MG_Ci7_B.js.br +0 -0
- package/out/renderer/assets/min-MG_Ci7_B.js.gz +0 -0
- package/out/renderer/assets/{mindmap-definition-QFDTVHPH-QEcTW8Sk.js → mindmap-definition-QFDTVHPH-C67ROQav.js} +3 -3
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-C67ROQav.js.br +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-C67ROQav.js.gz +0 -0
- package/out/renderer/assets/{pieDiagram-DEJITSTG-BdyIMG3r.js → pieDiagram-DEJITSTG-DE1aBCQW.js} +6 -6
- package/out/renderer/assets/pieDiagram-DEJITSTG-DE1aBCQW.js.br +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-DE1aBCQW.js.gz +0 -0
- package/out/renderer/assets/pptx_parser_bg-C6x8HRdb.wasm +0 -0
- package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-CO63F50c.js → quadrantDiagram-34T5L4WZ-B5mGDuN5.js} +2 -2
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B5mGDuN5.js.br +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B5mGDuN5.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js +25 -0
- package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js.br +0 -0
- package/out/renderer/assets/render-worker-host-B-Y1DmN9-CMFsEp7s.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js +25 -0
- package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js.br +0 -0
- package/out/renderer/assets/render-worker-host-B5otq5TA-D0PN4GJN.js.gz +0 -0
- package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js +25 -0
- package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js.br +0 -0
- package/out/renderer/assets/render-worker-host-GGVmi0tj-BJOvCVyx.js.gz +0 -0
- package/out/renderer/assets/{requirementDiagram-MS252O5E-Ch2CVgfZ.js → requirementDiagram-MS252O5E-CiGX4Xpv.js} +3 -3
- package/out/renderer/assets/requirementDiagram-MS252O5E-CiGX4Xpv.js.br +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-CiGX4Xpv.js.gz +0 -0
- package/out/renderer/assets/{sankeyDiagram-XADWPNL6--b1mWkl5.js → sankeyDiagram-XADWPNL6-BPM4lpDs.js} +1 -1
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-BPM4lpDs.js.br +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-BPM4lpDs.js.gz +0 -0
- package/out/renderer/assets/{sequenceDiagram-FGHM5R23-CNautoFU.js → sequenceDiagram-FGHM5R23-D1Ok0mDp.js} +3 -3
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-D1Ok0mDp.js.br +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-D1Ok0mDp.js.gz +0 -0
- package/out/renderer/assets/{stateDiagram-FHFEXIEX-CKsv5tYk.js → stateDiagram-FHFEXIEX-C0DqB63K.js} +8 -8
- package/out/renderer/assets/stateDiagram-FHFEXIEX-C0DqB63K.js.br +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-C0DqB63K.js.gz +0 -0
- package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-CkdzkP8w.js → stateDiagram-v2-QKLJ7IA2-CcTyZcy9.js} +4 -4
- package/out/renderer/assets/{timeline-definition-GMOUNBTQ-CF_zqktL.js → timeline-definition-GMOUNBTQ-CY70j9aj.js} +2 -2
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-CY70j9aj.js.br +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-CY70j9aj.js.gz +0 -0
- package/out/renderer/assets/{vennDiagram-DHZGUBPP-C7q9SHIx.js → vennDiagram-DHZGUBPP-DpZP-SME.js} +1 -1
- package/out/renderer/assets/vennDiagram-DHZGUBPP-DpZP-SME.js.br +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-DpZP-SME.js.gz +0 -0
- package/out/renderer/assets/{wardley-RL74JXVD-DmW7d79y.js → wardley-RL74JXVD-DUTOcssT.js} +3 -3
- package/out/renderer/assets/wardley-RL74JXVD-DUTOcssT.js.br +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-DUTOcssT.js.gz +0 -0
- package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-1VzGmAot.js → wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js} +5 -5
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js.br +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-ZVKE_8YQ.js.gz +0 -0
- package/out/renderer/assets/xlsx_parser_bg-ByWgODYl.wasm +0 -0
- package/out/renderer/assets/{xychartDiagram-5P7HB3ND-DznKXnsr.js → xychartDiagram-5P7HB3ND-B8kViTNI.js} +2 -2
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-B8kViTNI.js.br +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-B8kViTNI.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 +482 -0
- package/out/scripts/worker-file-outline/worker.mjs +5 -0
- package/out/server/main.js +1521 -367
- package/package.json +3 -1
- 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/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/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-OYMX7WX6-1XAYgymx.js.gz +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/pieDiagram-DEJITSTG-BdyIMG3r.js.br +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-BdyIMG3r.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,482 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import * as http from "http";
|
|
5
|
+
const base64EncodeRequestSchema = z.object({
|
|
6
|
+
text: z.string().describe("The text string to encode into Base64.")
|
|
7
|
+
});
|
|
8
|
+
const base64EncodeRespondSchema = z.object({
|
|
9
|
+
result: z.string()
|
|
10
|
+
});
|
|
11
|
+
const base64DecodeRequestSchema = z.object({
|
|
12
|
+
base64: z.string().describe("The Base64-encoded string to decode back into text.")
|
|
13
|
+
});
|
|
14
|
+
const base64DecodeRespondSchema = z.object({
|
|
15
|
+
result: z.string()
|
|
16
|
+
});
|
|
17
|
+
const urlEncodeRequestSchema = z.object({
|
|
18
|
+
text: z.string().describe("The text string to URL-encode.")
|
|
19
|
+
});
|
|
20
|
+
const urlEncodeRespondSchema = z.object({
|
|
21
|
+
result: z.string()
|
|
22
|
+
});
|
|
23
|
+
const urlDecodeRequestSchema = z.object({
|
|
24
|
+
text: z.string().describe("The URL-encoded string to decode.")
|
|
25
|
+
});
|
|
26
|
+
const urlDecodeRespondSchema = z.object({
|
|
27
|
+
result: z.string()
|
|
28
|
+
});
|
|
29
|
+
const hashRequestSchema = z.object({
|
|
30
|
+
text: z.string().describe("The text to hash."),
|
|
31
|
+
algorithm: z.enum(["md5", "sha1", "sha256"]).default("sha256").describe("Hash algorithm: md5, sha1, or sha256. Default: sha256.")
|
|
32
|
+
});
|
|
33
|
+
const hashRespondSchema = z.object({
|
|
34
|
+
result: z.string()
|
|
35
|
+
});
|
|
36
|
+
const timeRequestSchema = z.object({
|
|
37
|
+
format: z.enum(["iso", "timestamp"]).default("iso").describe(
|
|
38
|
+
"Output format: 'iso' for ISO 8601 string, 'timestamp' for Unix timestamp in seconds."
|
|
39
|
+
)
|
|
40
|
+
});
|
|
41
|
+
const timeRespondSchema = z.object({
|
|
42
|
+
result: z.union([z.string(), z.number()])
|
|
43
|
+
});
|
|
44
|
+
const uuidRequestSchema = z.object({});
|
|
45
|
+
const uuidRespondSchema = z.object({
|
|
46
|
+
result: z.string()
|
|
47
|
+
});
|
|
48
|
+
const shortIdRequestSchema = z.object({
|
|
49
|
+
length: z.number().int().min(4).max(32).default(8).describe("Length of the short ID (4-32). Default: 8.")
|
|
50
|
+
});
|
|
51
|
+
const shortIdRespondSchema = z.object({
|
|
52
|
+
result: z.string()
|
|
53
|
+
});
|
|
54
|
+
const randomRequestSchema = z.object({
|
|
55
|
+
length: z.number().int().min(1).max(256).default(16).describe("Length of the random string (1-256). Default: 16."),
|
|
56
|
+
charset: z.enum(["alphanumeric", "alpha", "numeric", "hex"]).default("alphanumeric").describe("Character set: alphanumeric, alpha, numeric, or hex. Default: alphanumeric.")
|
|
57
|
+
});
|
|
58
|
+
const randomRespondSchema = z.object({
|
|
59
|
+
result: z.string()
|
|
60
|
+
});
|
|
61
|
+
const randIntRequestSchema = z.object({
|
|
62
|
+
min: z.number().int().describe("Minimum value (inclusive)."),
|
|
63
|
+
max: z.number().int().describe("Maximum value (inclusive).")
|
|
64
|
+
});
|
|
65
|
+
const randIntRespondSchema = z.object({
|
|
66
|
+
result: z.number().int()
|
|
67
|
+
});
|
|
68
|
+
const choiceRequestSchema = z.object({
|
|
69
|
+
items: z.array(z.string()).min(1).describe("Array of items to choose from.")
|
|
70
|
+
});
|
|
71
|
+
const choiceRespondSchema = z.object({
|
|
72
|
+
result: z.string()
|
|
73
|
+
});
|
|
74
|
+
const shuffleRequestSchema = z.object({
|
|
75
|
+
items: z.array(z.string()).min(1).describe("Array of items to shuffle.")
|
|
76
|
+
});
|
|
77
|
+
const shuffleRespondSchema = z.object({
|
|
78
|
+
result: z.array(z.string())
|
|
79
|
+
});
|
|
80
|
+
const imageMetadataRequestSchema = z.object({
|
|
81
|
+
path: z.string().describe("Absolute or project-relative path to the image file.")
|
|
82
|
+
});
|
|
83
|
+
const imageMetadataRespondSchema = z.object({
|
|
84
|
+
result: z.object({
|
|
85
|
+
width: z.number().optional(),
|
|
86
|
+
height: z.number().optional(),
|
|
87
|
+
format: z.string().optional(),
|
|
88
|
+
space: z.string().optional(),
|
|
89
|
+
channels: z.number().optional(),
|
|
90
|
+
depth: z.string().optional(),
|
|
91
|
+
density: z.number().optional(),
|
|
92
|
+
hasAlpha: z.boolean().optional(),
|
|
93
|
+
size: z.number().optional()
|
|
94
|
+
})
|
|
95
|
+
});
|
|
96
|
+
const imageThumbnailRequestSchema = z.object({
|
|
97
|
+
path: z.string().describe("Absolute or project-relative path to the source image."),
|
|
98
|
+
width: z.number().int().min(1).max(1024).default(200).describe("Thumbnail width in pixels (1-1024). Default: 200."),
|
|
99
|
+
output: z.string().optional().describe("Output path. If omitted, saves alongside source with '.thumb{width}' suffix.")
|
|
100
|
+
});
|
|
101
|
+
const imageThumbnailRespondSchema = z.object({
|
|
102
|
+
result: z.object({
|
|
103
|
+
output: z.string(),
|
|
104
|
+
metadata: imageMetadataRespondSchema.shape.result
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
const imageResizeRequestSchema = z.object({
|
|
108
|
+
path: z.string().describe("Absolute or project-relative path to the source image."),
|
|
109
|
+
width: z.number().int().min(1).optional().describe("Target width in pixels."),
|
|
110
|
+
height: z.number().int().min(1).optional().describe("Target height in pixels."),
|
|
111
|
+
fit: z.enum(["cover", "contain", "fill", "inside", "outside"]).default("inside").describe("How to fit the image: cover, contain, fill, inside, outside. Default: inside."),
|
|
112
|
+
output: z.string().optional().describe("Output path. If omitted, saves alongside source with '.{width}x{height}' suffix.")
|
|
113
|
+
});
|
|
114
|
+
const imageResizeRespondSchema = z.object({
|
|
115
|
+
result: z.object({
|
|
116
|
+
output: z.string(),
|
|
117
|
+
metadata: imageMetadataRespondSchema.shape.result
|
|
118
|
+
})
|
|
119
|
+
});
|
|
120
|
+
const imageConvertRequestSchema = z.object({
|
|
121
|
+
path: z.string().describe("Absolute or project-relative path to the source image."),
|
|
122
|
+
format: z.enum(["jpeg", "png", "webp", "avif", "tiff"]).describe("Target image format."),
|
|
123
|
+
quality: z.number().int().min(1).max(100).optional().describe("Quality for lossy formats (1-100). Applies to jpeg, webp, avif."),
|
|
124
|
+
output: z.string().optional().describe("Output path. If omitted, saves alongside source with new extension.")
|
|
125
|
+
});
|
|
126
|
+
const imageConvertRespondSchema = z.object({
|
|
127
|
+
result: z.object({
|
|
128
|
+
output: z.string(),
|
|
129
|
+
metadata: imageMetadataRespondSchema.shape.result
|
|
130
|
+
})
|
|
131
|
+
});
|
|
132
|
+
function getArg(name) {
|
|
133
|
+
const idx = process.argv.indexOf(`--${name}`);
|
|
134
|
+
return idx !== -1 ? process.argv[idx + 1] : void 0;
|
|
135
|
+
}
|
|
136
|
+
const socketPath = getArg("socket-path");
|
|
137
|
+
const projectDir = getArg("project-dir");
|
|
138
|
+
if (!socketPath) {
|
|
139
|
+
console.error("[mcp-toolbox] Missing required argument: --socket-path");
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
if (!projectDir) {
|
|
143
|
+
console.error("[mcp-toolbox] Missing required argument: --project-dir");
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
const server = new McpServer({
|
|
147
|
+
name: "Toolbox",
|
|
148
|
+
version: "1.0.0",
|
|
149
|
+
description: "Built-in utility tools: base64, URL encode/decode, hash, time, UUID, random, etc."
|
|
150
|
+
});
|
|
151
|
+
server.registerTool(
|
|
152
|
+
"base64_encode",
|
|
153
|
+
{
|
|
154
|
+
description: "Encode a text string into Base64 format. Supports UTF-8 text.",
|
|
155
|
+
inputSchema: base64EncodeRequestSchema
|
|
156
|
+
},
|
|
157
|
+
async (input) => {
|
|
158
|
+
try {
|
|
159
|
+
const res = base64EncodeRespondSchema.parse(
|
|
160
|
+
await postToSocket("/toolbox/base64-encode", { text: input.text })
|
|
161
|
+
);
|
|
162
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
163
|
+
} catch (err) {
|
|
164
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
);
|
|
168
|
+
server.registerTool(
|
|
169
|
+
"base64_decode",
|
|
170
|
+
{
|
|
171
|
+
description: "Decode a Base64-encoded string back into UTF-8 text.",
|
|
172
|
+
inputSchema: base64DecodeRequestSchema
|
|
173
|
+
},
|
|
174
|
+
async (input) => {
|
|
175
|
+
try {
|
|
176
|
+
const res = base64DecodeRespondSchema.parse(
|
|
177
|
+
await postToSocket("/toolbox/base64-decode", { base64: input.base64 })
|
|
178
|
+
);
|
|
179
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
180
|
+
} catch (err) {
|
|
181
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
);
|
|
185
|
+
server.registerTool(
|
|
186
|
+
"url_encode",
|
|
187
|
+
{
|
|
188
|
+
description: "URL-encode a text string (percent-encoding).",
|
|
189
|
+
inputSchema: urlEncodeRequestSchema
|
|
190
|
+
},
|
|
191
|
+
async (input) => {
|
|
192
|
+
try {
|
|
193
|
+
const res = urlEncodeRespondSchema.parse(
|
|
194
|
+
await postToSocket("/toolbox/url-encode", { text: input.text })
|
|
195
|
+
);
|
|
196
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
197
|
+
} catch (err) {
|
|
198
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
);
|
|
202
|
+
server.registerTool(
|
|
203
|
+
"url_decode",
|
|
204
|
+
{
|
|
205
|
+
description: "Decode a URL-encoded (percent-encoded) string back into text.",
|
|
206
|
+
inputSchema: urlDecodeRequestSchema
|
|
207
|
+
},
|
|
208
|
+
async (input) => {
|
|
209
|
+
try {
|
|
210
|
+
const res = urlDecodeRespondSchema.parse(
|
|
211
|
+
await postToSocket("/toolbox/url-decode", { text: input.text })
|
|
212
|
+
);
|
|
213
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
214
|
+
} catch (err) {
|
|
215
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
);
|
|
219
|
+
server.registerTool(
|
|
220
|
+
"hash",
|
|
221
|
+
{
|
|
222
|
+
description: "Compute a hash (MD5, SHA1, or SHA256) of a text string. Returns hex digest.",
|
|
223
|
+
inputSchema: hashRequestSchema
|
|
224
|
+
},
|
|
225
|
+
async (input) => {
|
|
226
|
+
try {
|
|
227
|
+
const res = hashRespondSchema.parse(
|
|
228
|
+
await postToSocket("/toolbox/hash", {
|
|
229
|
+
text: input.text,
|
|
230
|
+
algorithm: input.algorithm
|
|
231
|
+
})
|
|
232
|
+
);
|
|
233
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
234
|
+
} catch (err) {
|
|
235
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
);
|
|
239
|
+
server.registerTool(
|
|
240
|
+
"time",
|
|
241
|
+
{
|
|
242
|
+
description: "Get the current time. Returns either an ISO 8601 string or a Unix timestamp in seconds.",
|
|
243
|
+
inputSchema: timeRequestSchema
|
|
244
|
+
},
|
|
245
|
+
async (input) => {
|
|
246
|
+
try {
|
|
247
|
+
const res = timeRespondSchema.parse(
|
|
248
|
+
await postToSocket("/toolbox/time", { format: input.format })
|
|
249
|
+
);
|
|
250
|
+
return { content: [{ type: "text", text: String(res.result) }] };
|
|
251
|
+
} catch (err) {
|
|
252
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
);
|
|
256
|
+
server.registerTool(
|
|
257
|
+
"uuid",
|
|
258
|
+
{
|
|
259
|
+
description: "Generate a random UUID v4.",
|
|
260
|
+
inputSchema: uuidRequestSchema
|
|
261
|
+
},
|
|
262
|
+
async () => {
|
|
263
|
+
try {
|
|
264
|
+
const res = uuidRespondSchema.parse(await postToSocket("/toolbox/uuid", {}));
|
|
265
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
266
|
+
} catch (err) {
|
|
267
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
);
|
|
271
|
+
server.registerTool(
|
|
272
|
+
"short_id",
|
|
273
|
+
{
|
|
274
|
+
description: "Generate a short random alphanumeric ID.",
|
|
275
|
+
inputSchema: shortIdRequestSchema
|
|
276
|
+
},
|
|
277
|
+
async (input) => {
|
|
278
|
+
try {
|
|
279
|
+
const res = shortIdRespondSchema.parse(
|
|
280
|
+
await postToSocket("/toolbox/short-id", { length: input.length })
|
|
281
|
+
);
|
|
282
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
283
|
+
} catch (err) {
|
|
284
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
);
|
|
288
|
+
server.registerTool(
|
|
289
|
+
"random",
|
|
290
|
+
{
|
|
291
|
+
description: "Generate a random string with specified length and character set.",
|
|
292
|
+
inputSchema: randomRequestSchema
|
|
293
|
+
},
|
|
294
|
+
async (input) => {
|
|
295
|
+
try {
|
|
296
|
+
const res = randomRespondSchema.parse(
|
|
297
|
+
await postToSocket("/toolbox/random", {
|
|
298
|
+
length: input.length,
|
|
299
|
+
charset: input.charset
|
|
300
|
+
})
|
|
301
|
+
);
|
|
302
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
303
|
+
} catch (err) {
|
|
304
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
);
|
|
308
|
+
server.registerTool(
|
|
309
|
+
"rand_int",
|
|
310
|
+
{
|
|
311
|
+
description: "Generate a random integer between min and max (inclusive).",
|
|
312
|
+
inputSchema: randIntRequestSchema
|
|
313
|
+
},
|
|
314
|
+
async (input) => {
|
|
315
|
+
try {
|
|
316
|
+
const res = randIntRespondSchema.parse(
|
|
317
|
+
await postToSocket("/toolbox/rand-int", { min: input.min, max: input.max })
|
|
318
|
+
);
|
|
319
|
+
return { content: [{ type: "text", text: String(res.result) }] };
|
|
320
|
+
} catch (err) {
|
|
321
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
);
|
|
325
|
+
server.registerTool(
|
|
326
|
+
"choice",
|
|
327
|
+
{
|
|
328
|
+
description: "Pick a random item from an array.",
|
|
329
|
+
inputSchema: choiceRequestSchema
|
|
330
|
+
},
|
|
331
|
+
async (input) => {
|
|
332
|
+
try {
|
|
333
|
+
const res = choiceRespondSchema.parse(
|
|
334
|
+
await postToSocket("/toolbox/choice", { items: input.items })
|
|
335
|
+
);
|
|
336
|
+
return { content: [{ type: "text", text: res.result }] };
|
|
337
|
+
} catch (err) {
|
|
338
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
);
|
|
342
|
+
server.registerTool(
|
|
343
|
+
"shuffle",
|
|
344
|
+
{
|
|
345
|
+
description: "Shuffle an array randomly (Fisher-Yates).",
|
|
346
|
+
inputSchema: shuffleRequestSchema
|
|
347
|
+
},
|
|
348
|
+
async (input) => {
|
|
349
|
+
try {
|
|
350
|
+
const res = shuffleRespondSchema.parse(
|
|
351
|
+
await postToSocket("/toolbox/shuffle", { items: input.items })
|
|
352
|
+
);
|
|
353
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result) }] };
|
|
354
|
+
} catch (err) {
|
|
355
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
);
|
|
359
|
+
server.registerTool(
|
|
360
|
+
"image_metadata",
|
|
361
|
+
{
|
|
362
|
+
description: "Read image metadata (width, height, format, color space, channels, etc.) from a file.",
|
|
363
|
+
inputSchema: imageMetadataRequestSchema
|
|
364
|
+
},
|
|
365
|
+
async (input) => {
|
|
366
|
+
try {
|
|
367
|
+
const res = imageMetadataRespondSchema.parse(
|
|
368
|
+
await postToSocket("/toolbox/image-metadata", { path: input.path })
|
|
369
|
+
);
|
|
370
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
371
|
+
} catch (err) {
|
|
372
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
);
|
|
376
|
+
server.registerTool(
|
|
377
|
+
"image_thumbnail",
|
|
378
|
+
{
|
|
379
|
+
description: "Generate a thumbnail from an image. Returns the output file path and new image metadata.",
|
|
380
|
+
inputSchema: imageThumbnailRequestSchema
|
|
381
|
+
},
|
|
382
|
+
async (input) => {
|
|
383
|
+
try {
|
|
384
|
+
const res = imageThumbnailRespondSchema.parse(
|
|
385
|
+
await postToSocket("/toolbox/image-thumbnail", {
|
|
386
|
+
path: input.path,
|
|
387
|
+
width: input.width,
|
|
388
|
+
output: input.output
|
|
389
|
+
})
|
|
390
|
+
);
|
|
391
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
392
|
+
} catch (err) {
|
|
393
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
);
|
|
397
|
+
server.registerTool(
|
|
398
|
+
"image_resize",
|
|
399
|
+
{
|
|
400
|
+
description: "Resize an image to specified dimensions. Returns the output file path and new image metadata.",
|
|
401
|
+
inputSchema: imageResizeRequestSchema
|
|
402
|
+
},
|
|
403
|
+
async (input) => {
|
|
404
|
+
try {
|
|
405
|
+
const res = imageResizeRespondSchema.parse(
|
|
406
|
+
await postToSocket("/toolbox/image-resize", {
|
|
407
|
+
path: input.path,
|
|
408
|
+
width: input.width,
|
|
409
|
+
height: input.height,
|
|
410
|
+
fit: input.fit,
|
|
411
|
+
output: input.output
|
|
412
|
+
})
|
|
413
|
+
);
|
|
414
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
415
|
+
} catch (err) {
|
|
416
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
);
|
|
420
|
+
server.registerTool(
|
|
421
|
+
"image_convert",
|
|
422
|
+
{
|
|
423
|
+
description: "Convert an image to a different format (jpeg, png, webp, avif, tiff). Returns the output file path and new image metadata.",
|
|
424
|
+
inputSchema: imageConvertRequestSchema
|
|
425
|
+
},
|
|
426
|
+
async (input) => {
|
|
427
|
+
try {
|
|
428
|
+
const res = imageConvertRespondSchema.parse(
|
|
429
|
+
await postToSocket("/toolbox/image-convert", {
|
|
430
|
+
path: input.path,
|
|
431
|
+
format: input.format,
|
|
432
|
+
quality: input.quality,
|
|
433
|
+
output: input.output
|
|
434
|
+
})
|
|
435
|
+
);
|
|
436
|
+
return { content: [{ type: "text", text: JSON.stringify(res.result, null, 2) }] };
|
|
437
|
+
} catch (err) {
|
|
438
|
+
return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
);
|
|
442
|
+
function postToSocket(path, body) {
|
|
443
|
+
return new Promise((resolve, reject) => {
|
|
444
|
+
const data = JSON.stringify(body);
|
|
445
|
+
const options = {
|
|
446
|
+
socketPath,
|
|
447
|
+
path,
|
|
448
|
+
method: "POST",
|
|
449
|
+
headers: {
|
|
450
|
+
"Content-Type": "application/json",
|
|
451
|
+
"Content-Length": Buffer.byteLength(data)
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
const req = http.request(options, (res) => {
|
|
455
|
+
const chunks = [];
|
|
456
|
+
res.on("data", (chunk) => chunks.push(chunk));
|
|
457
|
+
res.on("end", () => {
|
|
458
|
+
const raw = Buffer.concat(chunks).toString("utf8");
|
|
459
|
+
try {
|
|
460
|
+
const parsed = JSON.parse(raw);
|
|
461
|
+
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
462
|
+
resolve(parsed);
|
|
463
|
+
} else {
|
|
464
|
+
reject(new Error(parsed.error || `HTTP ${res.statusCode}: ${raw}`));
|
|
465
|
+
}
|
|
466
|
+
} catch {
|
|
467
|
+
reject(new Error(`Invalid response (${res.statusCode}): ${raw}`));
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
});
|
|
471
|
+
req.on("error", (err) => {
|
|
472
|
+
reject(new Error(`Socket request failed: ${err.message}`));
|
|
473
|
+
});
|
|
474
|
+
req.write(data);
|
|
475
|
+
req.end();
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
async function main() {
|
|
479
|
+
const transport = new StdioServerTransport();
|
|
480
|
+
await server.connect(transport);
|
|
481
|
+
}
|
|
482
|
+
main().catch(console.error);
|
|
@@ -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;
|