zombie-mermaid 2.2.3 → 2.2.6
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 +4 -4
- package/dist/ascii.cjs +1 -11
- package/dist/ascii.d.cts +1 -167
- package/dist/ascii.d.ts +1 -167
- package/dist/ascii.js +1 -6591
- package/dist/cli.js +836 -10946
- package/dist/index.cjs +2 -81
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -680
- package/dist/index.d.ts +42 -680
- package/dist/index.js +408 -10002
- package/dist/index.js.map +1 -1
- package/dist/mcp.cjs +1 -17909
- package/dist/mcp.d.cts +1 -11
- package/dist/mcp.d.ts +1 -11
- package/dist/mcp.js +1 -17884
- package/package.json +29 -29
- package/src/__tests__/workspace-package-boundaries.test.ts +15 -16
- package/src/__tests__/xychart-parser-categories.test.ts +78 -0
- package/src/ascii-entry.ts +14 -0
- package/src/cli/html-viewer.ts +5 -0
- package/src/mcp-entry.ts +21 -0
- package/dist/ascii.cjs.map +0 -1
- package/dist/ascii.js.map +0 -1
- package/dist/mcp.cjs.map +0 -1
- package/dist/mcp.js.map +0 -1
- package/packages/ascii-renderer/LICENSE +0 -22
- package/packages/ascii-renderer/src/ansi.ts +0 -490
- package/packages/ascii-renderer/src/canvas.ts +0 -658
- package/packages/ascii-renderer/src/class-diagram.ts +0 -2001
- package/packages/ascii-renderer/src/converter.ts +0 -446
- package/packages/ascii-renderer/src/coords.ts +0 -58
- package/packages/ascii-renderer/src/display-width.ts +0 -151
- package/packages/ascii-renderer/src/draw-arrows.ts +0 -549
- package/packages/ascii-renderer/src/draw-boxes.ts +0 -267
- package/packages/ascii-renderer/src/draw-bundles.ts +0 -611
- package/packages/ascii-renderer/src/draw-lines.ts +0 -174
- package/packages/ascii-renderer/src/draw-subgraphs.ts +0 -108
- package/packages/ascii-renderer/src/draw.ts +0 -337
- package/packages/ascii-renderer/src/edge-bundling.ts +0 -435
- package/packages/ascii-renderer/src/edge-cell-styles.ts +0 -81
- package/packages/ascii-renderer/src/edge-routing.ts +0 -1049
- package/packages/ascii-renderer/src/er-diagram.ts +0 -1488
- package/packages/ascii-renderer/src/flowchart.ts +0 -94
- package/packages/ascii-renderer/src/grid-occupancy.ts +0 -234
- package/packages/ascii-renderer/src/grid.ts +0 -1267
- package/packages/ascii-renderer/src/hyperlinks.ts +0 -248
- package/packages/ascii-renderer/src/index.ts +0 -163
- package/packages/ascii-renderer/src/lane-search.ts +0 -68
- package/packages/ascii-renderer/src/multiline-utils.ts +0 -82
- package/packages/ascii-renderer/src/pathfinder.ts +0 -448
- package/packages/ascii-renderer/src/registry.ts +0 -88
- package/packages/ascii-renderer/src/sequence.ts +0 -1318
- package/packages/ascii-renderer/src/shapes/circle.ts +0 -31
- package/packages/ascii-renderer/src/shapes/corners.ts +0 -273
- package/packages/ascii-renderer/src/shapes/diamond.ts +0 -31
- package/packages/ascii-renderer/src/shapes/hexagon.ts +0 -31
- package/packages/ascii-renderer/src/shapes/index.ts +0 -123
- package/packages/ascii-renderer/src/shapes/rectangle.ts +0 -199
- package/packages/ascii-renderer/src/shapes/rounded.ts +0 -31
- package/packages/ascii-renderer/src/shapes/special.ts +0 -352
- package/packages/ascii-renderer/src/shapes/stadium.ts +0 -122
- package/packages/ascii-renderer/src/shapes/state.ts +0 -204
- package/packages/ascii-renderer/src/shapes/types.ts +0 -78
- package/packages/ascii-renderer/src/territory.ts +0 -136
- package/packages/ascii-renderer/src/types.ts +0 -454
- package/packages/ascii-renderer/src/validate.ts +0 -189
- package/packages/ascii-renderer/src/xychart.ts +0 -1085
- package/packages/core/LICENSE +0 -22
- package/packages/core/src/click-directive.ts +0 -106
- package/packages/core/src/color-utils.ts +0 -205
- package/packages/core/src/diagram-type.ts +0 -35
- package/packages/core/src/direction-override.ts +0 -46
- package/packages/core/src/direction.ts +0 -56
- package/packages/core/src/index.ts +0 -34
- package/packages/core/src/init-directive.ts +0 -248
- package/packages/core/src/multiline-utils.ts +0 -275
- package/packages/core/src/statements.ts +0 -197
- package/packages/core/src/style-directives.ts +0 -214
- package/packages/core/src/text-metrics.ts +0 -498
- package/packages/core/src/theme.ts +0 -696
- package/packages/core/src/types.ts +0 -670
- package/packages/mcp/LICENSE +0 -22
- package/packages/mcp/src/index.ts +0 -17
- package/packages/mcp/src/server.ts +0 -135
- package/packages/mcp/src/tools/check-sequence-activations.ts +0 -91
- package/packages/mcp/src/tools/fix-sequence-activations.ts +0 -77
- package/packages/mcp/src/tools/render-ascii.ts +0 -99
- package/packages/mcp/src/tools/render-svg.ts +0 -95
- package/packages/mermaid-parser/LICENSE +0 -22
- package/packages/mermaid-parser/src/class/format.ts +0 -15
- package/packages/mermaid-parser/src/class/parser.ts +0 -593
- package/packages/mermaid-parser/src/class/types.ts +0 -166
- package/packages/mermaid-parser/src/er/parser.ts +0 -286
- package/packages/mermaid-parser/src/er/types.ts +0 -99
- package/packages/mermaid-parser/src/expanded-shapes.ts +0 -376
- package/packages/mermaid-parser/src/index.ts +0 -48
- package/packages/mermaid-parser/src/sequence/activation-check.ts +0 -149
- package/packages/mermaid-parser/src/sequence/activation-fix.ts +0 -112
- package/packages/mermaid-parser/src/sequence/box-color.ts +0 -85
- package/packages/mermaid-parser/src/sequence/parser.ts +0 -613
- package/packages/mermaid-parser/src/sequence/types.ts +0 -242
- package/packages/mermaid-parser/src/xychart/colors.ts +0 -177
- package/packages/mermaid-parser/src/xychart/parser.ts +0 -203
- package/packages/mermaid-parser/src/xychart/types.ts +0 -150
- package/packages/svg-renderer/LICENSE +0 -22
- package/packages/svg-renderer/src/class/layout.ts +0 -360
- package/packages/svg-renderer/src/class/renderer.ts +0 -636
- package/packages/svg-renderer/src/edge-curves.ts +0 -204
- package/packages/svg-renderer/src/elk-instance.ts +0 -292
- package/packages/svg-renderer/src/er/layout.ts +0 -200
- package/packages/svg-renderer/src/er/renderer.ts +0 -493
- package/packages/svg-renderer/src/index.ts +0 -58
- package/packages/svg-renderer/src/layout-engine/constants.ts +0 -19
- package/packages/svg-renderer/src/layout-engine/edge-bundling.ts +0 -379
- package/packages/svg-renderer/src/layout-engine/elk-adapter-utils.ts +0 -81
- package/packages/svg-renderer/src/layout-engine/elk-graph-builder.ts +0 -240
- package/packages/svg-renderer/src/layout-engine/from-elk.ts +0 -685
- package/packages/svg-renderer/src/layout-engine/layer-alignment.ts +0 -174
- package/packages/svg-renderer/src/layout-engine/to-elk.ts +0 -695
- package/packages/svg-renderer/src/layout-engine.ts +0 -74
- package/packages/svg-renderer/src/layout.ts +0 -8
- package/packages/svg-renderer/src/renderer.ts +0 -1485
- package/packages/svg-renderer/src/resolve-colors.ts +0 -339
- package/packages/svg-renderer/src/sequence/layout.ts +0 -698
- package/packages/svg-renderer/src/sequence/renderer.ts +0 -546
- package/packages/svg-renderer/src/shape-clipping.ts +0 -197
- package/packages/svg-renderer/src/styles.ts +0 -118
- package/packages/svg-renderer/src/xychart/layout.ts +0 -682
- package/packages/svg-renderer/src/xychart/renderer.ts +0 -684
- package/src/__tests__/ascii-canvas-write.test.ts +0 -137
- package/src/__tests__/ascii-charset-border-junctions.test.ts +0 -63
- package/src/__tests__/ascii-cjk-width.test.ts +0 -150
- package/src/__tests__/ascii-class-box-occupancy.test.ts +0 -462
- package/src/__tests__/ascii-class-column-width-488-489.test.ts +0 -639
- package/src/__tests__/ascii-class-cross-level-jog-corruption.test.ts +0 -187
- package/src/__tests__/ascii-class-detour-label-routing-487.test.ts +0 -114
- package/src/__tests__/ascii-class-diagram-compartments.test.ts +0 -70
- package/src/__tests__/ascii-class-label-box-collision.test.ts +0 -60
- package/src/__tests__/ascii-class-label-row-collision-531.test.ts +0 -135
- package/src/__tests__/ascii-class-label-territory-row-awareness.test.ts +0 -57
- package/src/__tests__/ascii-class-padding.test.ts +0 -104
- package/src/__tests__/ascii-class-parent-alignment-971.test.ts +0 -139
- package/src/__tests__/ascii-class-parent-alignment-972.test.ts +0 -208
- package/src/__tests__/ascii-class-reciprocal-relationships-448.test.ts +0 -169
- package/src/__tests__/ascii-combining-mark-width.test.ts +0 -70
- package/src/__tests__/ascii-coords-overlay.test.ts +0 -64
- package/src/__tests__/ascii-decision-lr-box-start.test.ts +0 -106
- package/src/__tests__/ascii-display-width-unit.test.ts +0 -154
- package/src/__tests__/ascii-draw-arrows-coverage.test.ts +0 -171
- package/src/__tests__/ascii-draw-arrows-single-point-path.test.ts +0 -112
- package/src/__tests__/ascii-edge-bundling-rank-violation-454.test.ts +0 -72
- package/src/__tests__/ascii-edge-ending-glyphs.test.ts +0 -206
- package/src/__tests__/ascii-edge-label-diagonal-fallback-418.test.ts +0 -95
- package/src/__tests__/ascii-edge-routing-fixes.test.ts +0 -178
- package/src/__tests__/ascii-edge-routing-single-point-path.test.ts +0 -107
- package/src/__tests__/ascii-edge-styles.test.ts +0 -149
- package/src/__tests__/ascii-emoji-cluster-width.test.ts +0 -101
- package/src/__tests__/ascii-er-box-occupancy.test.ts +0 -251
- package/src/__tests__/ascii-er-cardinality.test.ts +0 -40
- package/src/__tests__/ascii-er-corner-glyphs.test.ts +0 -249
- package/src/__tests__/ascii-er-jog-stray-line.test.ts +0 -111
- package/src/__tests__/ascii-er-label-padding.test.ts +0 -118
- package/src/__tests__/ascii-er-padding.test.ts +0 -114
- package/src/__tests__/ascii-er-relationship-label-corruption-350.test.ts +0 -458
- package/src/__tests__/ascii-er-relationship-overwrite.test.ts +0 -325
- package/src/__tests__/ascii-er-stray-connectors.test.ts +0 -347
- package/src/__tests__/ascii-er-unrelated-stem-separation-411.test.ts +0 -98
- package/src/__tests__/ascii-er-vertical-one-marker.test.ts +0 -110
- package/src/__tests__/ascii-label-line-terminal-fallback.test.ts +0 -172
- package/src/__tests__/ascii-lane-search.test.ts +0 -207
- package/src/__tests__/ascii-multibox-cjk-width.test.ts +0 -184
- package/src/__tests__/ascii-multiline.test.ts +0 -291
- package/src/__tests__/ascii-padding-edge-cases.test.ts +0 -154
- package/src/__tests__/ascii-pathfinder-route-edge.test.ts +0 -194
- package/src/__tests__/ascii-sequence-alt-else-label.test.ts +0 -236
- package/src/__tests__/ascii-sequence-block-wall-clearance.test.ts +0 -217
- package/src/__tests__/ascii-sequence-box-group.test.ts +0 -159
- package/src/__tests__/ascii-sequence-cjk-width.test.ts +0 -235
- package/src/__tests__/ascii-sequence-create-destroy.test.ts +0 -114
- package/src/__tests__/ascii-sequence-form-invariants.test.ts +0 -432
- package/src/__tests__/ascii-sequence-mermaid-parity.test.ts +0 -219
- package/src/__tests__/ascii-sequence-notes.test.ts +0 -61
- package/src/__tests__/ascii-sequence-padding.test.ts +0 -119
- package/src/__tests__/ascii-sequence-self-arrow.test.ts +0 -206
- package/src/__tests__/ascii-shape-diamond.test.ts +0 -38
- package/src/__tests__/ascii-shape-rectangle.test.ts +0 -258
- package/src/__tests__/ascii-shape-rounded.test.ts +0 -36
- package/src/__tests__/ascii-shapes-circle.test.ts +0 -41
- package/src/__tests__/ascii-shapes-hexagon.test.ts +0 -42
- package/src/__tests__/ascii-shapes-special.test.ts +0 -349
- package/src/__tests__/ascii-shapes-stadium.test.ts +0 -217
- package/src/__tests__/ascii-shapes-state.test.ts +0 -234
- package/src/__tests__/ascii-state-bidirectional-label-swap-530.test.ts +0 -130
- package/src/__tests__/ascii-subgraph-direction-honored-445.test.ts +0 -90
- package/src/__tests__/ascii-subgraph-label-border-clip.test.ts +0 -152
- package/src/__tests__/ascii-subgraph-title-padding.test.ts +0 -77
- package/src/__tests__/ascii-territory-unit.test.ts +0 -219
- package/src/__tests__/ascii-validate.test.ts +0 -220
- package/src/__tests__/ascii.test.ts +0 -328
- package/src/__tests__/box-color.test.ts +0 -80
- package/src/__tests__/class-arrow-directions.test.ts +0 -505
- package/src/__tests__/click-directive.test.ts +0 -63
- package/src/__tests__/color-utils.test.ts +0 -186
- package/src/__tests__/diagram-type.test.ts +0 -28
- package/src/__tests__/draw-lines.test.ts +0 -93
- package/src/__tests__/edge-cell-styles.test.ts +0 -180
- package/src/__tests__/elk-adapter-utils.test.ts +0 -166
- package/src/__tests__/grid-occupancy.test.ts +0 -240
- package/src/__tests__/helpers/ascii-form.ts +0 -142
- package/src/__tests__/helpers/terminal-display-width.ts +0 -74
- package/src/__tests__/mcp-check-sequence-activations-tool.test.ts +0 -85
- package/src/__tests__/mcp-fix-sequence-activations-tool.test.ts +0 -134
- package/src/__tests__/mcp-server.test.ts +0 -163
- package/src/__tests__/pathfinder.test.ts +0 -246
- package/src/__tests__/sequence-activation-fix.test.ts +0 -91
- package/src/__tests__/testdata/ascii/ampersand_lhs.txt +0 -18
- package/src/__tests__/testdata/ascii/ampersand_lhs_and_rhs.txt +0 -18
- package/src/__tests__/testdata/ascii/ampersand_rhs.txt +0 -18
- package/src/__tests__/testdata/ascii/ampersand_td_fanin.txt +0 -18
- package/src/__tests__/testdata/ascii/ampersand_td_fanout.txt +0 -18
- package/src/__tests__/testdata/ascii/ampersand_without_edge.txt +0 -18
- package/src/__tests__/testdata/ascii/back_reference_from_child.txt +0 -10
- package/src/__tests__/testdata/ascii/backlink_from_bottom.txt +0 -22
- package/src/__tests__/testdata/ascii/backlink_from_top.txt +0 -22
- package/src/__tests__/testdata/ascii/backlink_with_short_y_padding.txt +0 -20
- package/src/__tests__/testdata/ascii/cls_all_relationships.txt +0 -19
- package/src/__tests__/testdata/ascii/cls_annotation.txt +0 -29
- package/src/__tests__/testdata/ascii/cls_association.txt +0 -14
- package/src/__tests__/testdata/ascii/cls_basic.txt +0 -15
- package/src/__tests__/testdata/ascii/cls_dependency.txt +0 -14
- package/src/__tests__/testdata/ascii/cls_inheritance.txt +0 -20
- package/src/__tests__/testdata/ascii/cls_methods.txt +0 -21
- package/src/__tests__/testdata/ascii/comments.txt +0 -23
- package/src/__tests__/testdata/ascii/custom_padding.txt +0 -10
- package/src/__tests__/testdata/ascii/duplicate_labels.txt +0 -19
- package/src/__tests__/testdata/ascii/er_attributes.txt +0 -21
- package/src/__tests__/testdata/ascii/er_basic.txt +0 -8
- package/src/__tests__/testdata/ascii/er_identifying.txt +0 -18
- package/src/__tests__/testdata/ascii/flowchart_tb_simple.txt +0 -29
- package/src/__tests__/testdata/ascii/graph_bt_direction.txt +0 -28
- package/src/__tests__/testdata/ascii/graph_tb_direction.txt +0 -26
- package/src/__tests__/testdata/ascii/nested_subgraphs_with_labels.txt +0 -36
- package/src/__tests__/testdata/ascii/preserve_order_of_definition.txt +0 -23
- package/src/__tests__/testdata/ascii/self_reference.txt +0 -10
- package/src/__tests__/testdata/ascii/self_reference_with_edge.txt +0 -10
- package/src/__tests__/testdata/ascii/seq_basic.txt +0 -17
- package/src/__tests__/testdata/ascii/seq_multiple_messages.txt +0 -25
- package/src/__tests__/testdata/ascii/seq_self_message.txt +0 -18
- package/src/__tests__/testdata/ascii/single_node.txt +0 -8
- package/src/__tests__/testdata/ascii/single_node_longer_name.txt +0 -8
- package/src/__tests__/testdata/ascii/subgraph_complex_mixed.txt +0 -38
- package/src/__tests__/testdata/ascii/subgraph_complex_nested.txt +0 -49
- package/src/__tests__/testdata/ascii/subgraph_direction_override.txt +0 -47
- package/src/__tests__/testdata/ascii/subgraph_empty.txt +0 -10
- package/src/__tests__/testdata/ascii/subgraph_mixed_nodes.txt +0 -20
- package/src/__tests__/testdata/ascii/subgraph_mixed_nodes_td.txt +0 -48
- package/src/__tests__/testdata/ascii/subgraph_multiple_edges.txt +0 -32
- package/src/__tests__/testdata/ascii/subgraph_multiple_nodes.txt +0 -16
- package/src/__tests__/testdata/ascii/subgraph_nested.txt +0 -24
- package/src/__tests__/testdata/ascii/subgraph_nested_with_external.txt +0 -30
- package/src/__tests__/testdata/ascii/subgraph_node_outside_lr.txt +0 -17
- package/src/__tests__/testdata/ascii/subgraph_single_node.txt +0 -16
- package/src/__tests__/testdata/ascii/subgraph_td_direction.txt +0 -26
- package/src/__tests__/testdata/ascii/subgraph_td_multiple.txt +0 -44
- package/src/__tests__/testdata/ascii/subgraph_td_multiple_paddingy.txt +0 -42
- package/src/__tests__/testdata/ascii/subgraph_three_levels_nested.txt +0 -32
- package/src/__tests__/testdata/ascii/subgraph_three_separate.txt +0 -24
- package/src/__tests__/testdata/ascii/subgraph_two_separate.txt +0 -20
- package/src/__tests__/testdata/ascii/subgraph_with_labels.txt +0 -20
- package/src/__tests__/testdata/ascii/three_nodes.txt +0 -9
- package/src/__tests__/testdata/ascii/three_nodes_single_line.txt +0 -8
- package/src/__tests__/testdata/ascii/two_layer_single_graph.txt +0 -19
- package/src/__tests__/testdata/ascii/two_layer_single_graph_longer_names.txt +0 -19
- package/src/__tests__/testdata/ascii/two_nodes_linked.txt +0 -8
- package/src/__tests__/testdata/ascii/two_nodes_longer_names.txt +0 -8
- package/src/__tests__/testdata/ascii/two_root_nodes.txt +0 -19
- package/src/__tests__/testdata/ascii/two_root_nodes_longer_names.txt +0 -19
- package/src/__tests__/testdata/ascii/two_single_root_nodes.txt +0 -19
- package/src/__tests__/testdata/unicode/ampersand_lhs.txt +0 -18
- package/src/__tests__/testdata/unicode/ampersand_lhs_and_rhs.txt +0 -18
- package/src/__tests__/testdata/unicode/ampersand_rhs.txt +0 -18
- package/src/__tests__/testdata/unicode/ampersand_without_edge.txt +0 -18
- package/src/__tests__/testdata/unicode/back_reference_from_child.txt +0 -10
- package/src/__tests__/testdata/unicode/backlink_from_bottom.txt +0 -22
- package/src/__tests__/testdata/unicode/backlink_from_top.txt +0 -22
- package/src/__tests__/testdata/unicode/cls_all_relationships.txt +0 -19
- package/src/__tests__/testdata/unicode/cls_annotation.txt +0 -29
- package/src/__tests__/testdata/unicode/cls_association.txt +0 -14
- package/src/__tests__/testdata/unicode/cls_basic.txt +0 -15
- package/src/__tests__/testdata/unicode/cls_dependency.txt +0 -14
- package/src/__tests__/testdata/unicode/cls_inheritance.txt +0 -20
- package/src/__tests__/testdata/unicode/cls_methods.txt +0 -21
- package/src/__tests__/testdata/unicode/comments.txt +0 -23
- package/src/__tests__/testdata/unicode/duplicate_labels.txt +0 -19
- package/src/__tests__/testdata/unicode/er_attributes.txt +0 -21
- package/src/__tests__/testdata/unicode/er_basic.txt +0 -8
- package/src/__tests__/testdata/unicode/er_identifying.txt +0 -18
- package/src/__tests__/testdata/unicode/graph_bt_direction.txt +0 -28
- package/src/__tests__/testdata/unicode/preserve_order_of_definition.txt +0 -23
- package/src/__tests__/testdata/unicode/self_reference.txt +0 -10
- package/src/__tests__/testdata/unicode/self_reference_with_edge.txt +0 -10
- package/src/__tests__/testdata/unicode/seq_basic.txt +0 -17
- package/src/__tests__/testdata/unicode/seq_multiple_messages.txt +0 -25
- package/src/__tests__/testdata/unicode/seq_self_message.txt +0 -18
- package/src/__tests__/testdata/unicode/single_node.txt +0 -8
- package/src/__tests__/testdata/unicode/single_node_longer_name.txt +0 -8
- package/src/__tests__/testdata/unicode/three_nodes.txt +0 -9
- package/src/__tests__/testdata/unicode/three_nodes_single_line.txt +0 -8
- package/src/__tests__/testdata/unicode/two_layer_single_graph.txt +0 -19
- package/src/__tests__/testdata/unicode/two_layer_single_graph_longer_names.txt +0 -19
- package/src/__tests__/testdata/unicode/two_nodes_linked.txt +0 -8
- package/src/__tests__/testdata/unicode/two_nodes_longer_names.txt +0 -8
- package/src/__tests__/testdata/unicode/two_root_nodes.txt +0 -19
- package/src/__tests__/testdata/unicode/two_root_nodes_longer_names.txt +0 -19
- package/src/__tests__/testdata/unicode/two_single_root_nodes.txt +0 -19
- package/src/__tests__/text-metrics.test.ts +0 -473
- package/src/__tests__/theme-palette-contrast.test.ts +0 -84
- package/src/__tests__/theme.test.ts +0 -132
- package/src/__tests__/xychart-ascii.test.ts +0 -376
- package/src/__tests__/xychart-colors.test.ts +0 -149
package/packages/mcp/LICENSE
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Craft Docs
|
|
4
|
-
Copyright (c) 2026 Dustin Fadler
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
in the Software without restriction, including without limitation the rights
|
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
furnished to do so, subject to the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be included in all
|
|
14
|
-
copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
-
SOFTWARE.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// zombie-mermaid/mcp — MCP server entry point
|
|
3
|
-
//
|
|
4
|
-
// Exposes the library's SVG/ASCII rendering as Model Context Protocol
|
|
5
|
-
// tools. Import `createMcpServer()` to embed the server in your own
|
|
6
|
-
// process and connect it to any MCP Transport, or run `zombie-mermaid mcp`
|
|
7
|
-
// from the CLI for a ready-to-use stdio server (see src/cli/mcp.ts).
|
|
8
|
-
//
|
|
9
|
-
// Usage:
|
|
10
|
-
// import { createMcpServer } from 'zombie-mermaid/mcp'
|
|
11
|
-
// import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
12
|
-
//
|
|
13
|
-
// const server = createMcpServer()
|
|
14
|
-
// await server.connect(new StdioServerTransport())
|
|
15
|
-
// ============================================================================
|
|
16
|
-
|
|
17
|
-
export { createMcpServer } from './server.ts'
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// zombie-mermaid MCP server
|
|
3
|
-
//
|
|
4
|
-
// Wires the library's existing SVG/ASCII rendering functions, plus a
|
|
5
|
-
// mechanical sequence-diagram semantic check, up as Model Context Protocol
|
|
6
|
-
// tools. No rendering or checking logic lives here — see src/mcp/tools/*.ts
|
|
7
|
-
// for the thin per-tool adapters, src/index.ts / src/ascii/index.ts for the
|
|
8
|
-
// actual renderers, and packages/mermaid-parser/src/sequence/activation-check.ts
|
|
9
|
-
// for the check.
|
|
10
|
-
// ============================================================================
|
|
11
|
-
|
|
12
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
13
|
-
import { getPackageVersion } from '../../../src/package-info.ts'
|
|
14
|
-
import { renderSvgInputShape, renderSvgHandler } from './tools/render-svg.ts'
|
|
15
|
-
import {
|
|
16
|
-
renderAsciiInputShape,
|
|
17
|
-
renderAsciiHandler,
|
|
18
|
-
} from './tools/render-ascii.ts'
|
|
19
|
-
import {
|
|
20
|
-
checkSequenceActivationsInputShape,
|
|
21
|
-
checkSequenceActivationsHandler,
|
|
22
|
-
} from './tools/check-sequence-activations.ts'
|
|
23
|
-
import {
|
|
24
|
-
fixSequenceActivationsInputShape,
|
|
25
|
-
fixSequenceActivationsHandler,
|
|
26
|
-
} from './tools/fix-sequence-activations.ts'
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Build a zombie-mermaid MCP server exposing `render_mermaid_svg`,
|
|
30
|
-
* `render_mermaid_ascii`, and `check_mermaid_sequence_activations` tools.
|
|
31
|
-
*
|
|
32
|
-
* Not connected to any transport — callers wire it up. See
|
|
33
|
-
* src/cli/mcp.ts for the stdio entry point used by `zombie-mermaid mcp`,
|
|
34
|
-
* or connect it to the MCP SDK's `InMemoryTransport` to embed/test it
|
|
35
|
-
* in-process without spawning anything.
|
|
36
|
-
*/
|
|
37
|
-
export function createMcpServer(): McpServer {
|
|
38
|
-
const server = new McpServer({
|
|
39
|
-
name: 'zombie-mermaid',
|
|
40
|
-
version: getPackageVersion(),
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
server.registerTool(
|
|
44
|
-
'render_mermaid_svg',
|
|
45
|
-
{
|
|
46
|
-
title: 'Render Mermaid diagram to SVG',
|
|
47
|
-
description:
|
|
48
|
-
'Render Mermaid diagram source to a self-contained SVG string. ' +
|
|
49
|
-
'Supports flowcharts, state diagrams, sequence diagrams, class ' +
|
|
50
|
-
'diagrams, ER diagrams, and XY charts.',
|
|
51
|
-
inputSchema: renderSvgInputShape,
|
|
52
|
-
annotations: {
|
|
53
|
-
title: 'Render Mermaid diagram to SVG',
|
|
54
|
-
readOnlyHint: true,
|
|
55
|
-
destructiveHint: false,
|
|
56
|
-
idempotentHint: true,
|
|
57
|
-
openWorldHint: false,
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
renderSvgHandler,
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
server.registerTool(
|
|
64
|
-
'render_mermaid_ascii',
|
|
65
|
-
{
|
|
66
|
-
title: 'Render Mermaid diagram to ASCII/Unicode art',
|
|
67
|
-
description:
|
|
68
|
-
'Render Mermaid diagram source to a plain-text ASCII or Unicode ' +
|
|
69
|
-
'box-drawing diagram, suitable for a terminal or a chat/agent ' +
|
|
70
|
-
'context. Supports flowcharts, state diagrams, sequence diagrams, ' +
|
|
71
|
-
'class diagrams, and ER diagrams.',
|
|
72
|
-
inputSchema: renderAsciiInputShape,
|
|
73
|
-
annotations: {
|
|
74
|
-
title: 'Render Mermaid diagram to ASCII/Unicode art',
|
|
75
|
-
readOnlyHint: true,
|
|
76
|
-
destructiveHint: false,
|
|
77
|
-
idempotentHint: true,
|
|
78
|
-
openWorldHint: false,
|
|
79
|
-
},
|
|
80
|
-
},
|
|
81
|
-
renderAsciiHandler,
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
server.registerTool(
|
|
85
|
-
'check_mermaid_sequence_activations',
|
|
86
|
-
{
|
|
87
|
-
title: 'Check Mermaid sequence diagram activation balance',
|
|
88
|
-
description:
|
|
89
|
-
'Check a Mermaid sequence diagram for activation/deactivation ' +
|
|
90
|
-
'imbalance: every "activate X" (or "+" arrow shorthand) must be ' +
|
|
91
|
-
'closed by a matching "deactivate X" ("-" shorthand). Returns a ' +
|
|
92
|
-
'JSON report ({ ok, issues }) rather than rendering anything. ' +
|
|
93
|
-
'Mechanical and deterministic — no LLM judgment involved. Only ' +
|
|
94
|
-
'sequence diagrams are supported.',
|
|
95
|
-
inputSchema: checkSequenceActivationsInputShape,
|
|
96
|
-
annotations: {
|
|
97
|
-
title: 'Check Mermaid sequence diagram activation balance',
|
|
98
|
-
readOnlyHint: true,
|
|
99
|
-
destructiveHint: false,
|
|
100
|
-
idempotentHint: true,
|
|
101
|
-
openWorldHint: false,
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
checkSequenceActivationsHandler,
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
server.registerTool(
|
|
108
|
-
'fix_mermaid_sequence_activations',
|
|
109
|
-
{
|
|
110
|
-
title: 'Fix Mermaid sequence diagram activation balance',
|
|
111
|
-
description:
|
|
112
|
-
'Check a Mermaid sequence diagram for activation/deactivation ' +
|
|
113
|
-
'imbalance and, where mechanically safe, return a corrected ' +
|
|
114
|
-
'version: a dangling "activate X" (or "+" shorthand) with no ' +
|
|
115
|
-
'matching "deactivate X" gets one appended. An unmatched ' +
|
|
116
|
-
'"deactivate X" with nothing open is reported but not auto-fixed ' +
|
|
117
|
-
'(no safe, unambiguous edit exists without source-position ' +
|
|
118
|
-
'tracking). Returns a JSON report ({ ok, fixedDiagram, ' +
|
|
119
|
-
'fixesApplied, remainingIssues }) rather than rendering anything. ' +
|
|
120
|
-
'Mechanical and deterministic — no LLM judgment involved. Only ' +
|
|
121
|
-
'sequence diagrams are supported.',
|
|
122
|
-
inputSchema: fixSequenceActivationsInputShape,
|
|
123
|
-
annotations: {
|
|
124
|
-
title: 'Fix Mermaid sequence diagram activation balance',
|
|
125
|
-
readOnlyHint: true,
|
|
126
|
-
destructiveHint: false,
|
|
127
|
-
idempotentHint: true,
|
|
128
|
-
openWorldHint: false,
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
fixSequenceActivationsHandler,
|
|
132
|
-
)
|
|
133
|
-
|
|
134
|
-
return server
|
|
135
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// zombie-mermaid MCP server — `check_mermaid_sequence_activations` tool
|
|
3
|
-
//
|
|
4
|
-
// A mechanical, deterministic semantic check that complements the existing
|
|
5
|
-
// render tools: every "activate X" (or "+" arrow shorthand) in a Mermaid
|
|
6
|
-
// sequence diagram must be closed by a matching "deactivate X" ("-"
|
|
7
|
-
// shorthand) before the diagram ends. No LLM judge involved — see
|
|
8
|
-
// packages/mermaid-parser/src/sequence/activation-check.ts for the actual
|
|
9
|
-
// check, which reuses the same activation-stack bookkeeping
|
|
10
|
-
// packages/svg-renderer/src/sequence/layout.ts already runs to *draw*
|
|
11
|
-
// activation bars.
|
|
12
|
-
//
|
|
13
|
-
// Why this tool, and why it isn't duplicating agentic-mermaid's `verify`
|
|
14
|
-
// tool (github.com/adewale/agentic-mermaid): that tool's own docs describe
|
|
15
|
-
// it as reporting "structural, geometric, and lint warnings" — dangling
|
|
16
|
-
// edges, label overflow, duplicate/unreachable nodes — a general
|
|
17
|
-
// graph-structure check with no sequence-diagram-specific handling. Neither
|
|
18
|
-
// it nor ordinary Mermaid syntax validators check activation/deactivation
|
|
19
|
-
// balance, which research behind issue #536 found is where LLM-generated
|
|
20
|
-
// sequence diagrams actually go wrong most often (not basic syntax).
|
|
21
|
-
// ============================================================================
|
|
22
|
-
|
|
23
|
-
import { z } from 'zod'
|
|
24
|
-
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js'
|
|
25
|
-
import { detectDiagramType, splitStatements } from '@zombie-mermaid/core'
|
|
26
|
-
import {
|
|
27
|
-
parseSequenceDiagram,
|
|
28
|
-
checkActivationBalance,
|
|
29
|
-
} from '@zombie-mermaid/mermaid-parser'
|
|
30
|
-
|
|
31
|
-
export const checkSequenceActivationsInputShape = {
|
|
32
|
-
diagram: z
|
|
33
|
-
.string()
|
|
34
|
-
.min(1, 'diagram must not be empty')
|
|
35
|
-
.describe(
|
|
36
|
-
'Mermaid sequence diagram source text, e.g. "sequenceDiagram\\n ' +
|
|
37
|
-
'A->>+B: hi\\n B-->>-A: bye". Must start with "sequenceDiagram" ' +
|
|
38
|
-
'— this tool does not check other diagram types.',
|
|
39
|
-
),
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface CheckSequenceActivationsToolArgs {
|
|
43
|
-
diagram: string
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* MCP tool handler for `check_mermaid_sequence_activations`. Parses the
|
|
48
|
-
* given source as a Mermaid sequence diagram and reports every
|
|
49
|
-
* activation/deactivation imbalance as a structured JSON result (`ok` plus
|
|
50
|
-
* an `issues` array) — this tool never renders anything.
|
|
51
|
-
*
|
|
52
|
-
* Returns an MCP tool error (`isError: true`, not a thrown exception) both
|
|
53
|
-
* for invalid Mermaid syntax and for a non-sequence diagram, since this
|
|
54
|
-
* check only makes sense for `sequenceDiagram` source.
|
|
55
|
-
*/
|
|
56
|
-
export function checkSequenceActivationsHandler(
|
|
57
|
-
input: CheckSequenceActivationsToolArgs,
|
|
58
|
-
): CallToolResult {
|
|
59
|
-
try {
|
|
60
|
-
const diagramType = detectDiagramType(input.diagram)
|
|
61
|
-
if (diagramType !== 'sequence') {
|
|
62
|
-
return {
|
|
63
|
-
isError: true,
|
|
64
|
-
content: [
|
|
65
|
-
{
|
|
66
|
-
type: 'text',
|
|
67
|
-
text:
|
|
68
|
-
'This tool only checks sequence diagrams (source must start ' +
|
|
69
|
-
`with "sequenceDiagram"); detected diagram type: "${diagramType}".`,
|
|
70
|
-
},
|
|
71
|
-
],
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const lines = splitStatements(input.diagram)
|
|
75
|
-
const diagram = parseSequenceDiagram(lines)
|
|
76
|
-
const result = checkActivationBalance(diagram)
|
|
77
|
-
return {
|
|
78
|
-
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
79
|
-
}
|
|
80
|
-
} catch (err) {
|
|
81
|
-
return {
|
|
82
|
-
isError: true,
|
|
83
|
-
content: [
|
|
84
|
-
{
|
|
85
|
-
type: 'text',
|
|
86
|
-
text: `Failed to check diagram activations: ${err instanceof Error ? err.message : String(err)}`,
|
|
87
|
-
},
|
|
88
|
-
],
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// zombie-mermaid MCP server — `fix_mermaid_sequence_activations` tool
|
|
3
|
-
//
|
|
4
|
-
// The "optionally proposes a fix" half of issue #539, complementing
|
|
5
|
-
// `check_mermaid_sequence_activations` (which only reports issues). Reuses
|
|
6
|
-
// packages/mermaid-parser/src/sequence/activation-fix.ts, which — see that
|
|
7
|
-
// file's header — only auto-fixes DANGLING_ACTIVATION (a mechanically safe,
|
|
8
|
-
// unambiguous append); UNMATCHED_DEACTIVATION comes back as a remaining
|
|
9
|
-
// issue for a human (or a future LLM-based layer) to resolve rather than
|
|
10
|
-
// risk an incorrect text edit.
|
|
11
|
-
// ============================================================================
|
|
12
|
-
|
|
13
|
-
import { z } from 'zod'
|
|
14
|
-
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js'
|
|
15
|
-
import { detectDiagramType } from '@zombie-mermaid/core'
|
|
16
|
-
import { fixActivationBalance } from '@zombie-mermaid/mermaid-parser'
|
|
17
|
-
|
|
18
|
-
export const fixSequenceActivationsInputShape = {
|
|
19
|
-
diagram: z
|
|
20
|
-
.string()
|
|
21
|
-
.min(1, 'diagram must not be empty')
|
|
22
|
-
.describe(
|
|
23
|
-
'Mermaid sequence diagram source text, e.g. "sequenceDiagram\\n ' +
|
|
24
|
-
'activate A\\n A->>B: hi". Must start with "sequenceDiagram" — ' +
|
|
25
|
-
'this tool does not check other diagram types.',
|
|
26
|
-
),
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface FixSequenceActivationsToolArgs {
|
|
30
|
-
diagram: string
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* MCP tool handler for `fix_mermaid_sequence_activations`. Parses the given
|
|
35
|
-
* source as a Mermaid sequence diagram, checks activation/deactivation
|
|
36
|
-
* balance, and returns a structured JSON result: `ok`, the (possibly
|
|
37
|
-
* unchanged) `fixedDiagram`, `fixesApplied` (human-readable descriptions),
|
|
38
|
-
* and any `remainingIssues` that couldn't be auto-fixed.
|
|
39
|
-
*
|
|
40
|
-
* Returns an MCP tool error (`isError: true`, not a thrown exception) both
|
|
41
|
-
* for invalid Mermaid syntax and for a non-sequence diagram, matching
|
|
42
|
-
* `check-sequence-activations.ts`'s error handling.
|
|
43
|
-
*/
|
|
44
|
-
export function fixSequenceActivationsHandler(
|
|
45
|
-
input: FixSequenceActivationsToolArgs,
|
|
46
|
-
): CallToolResult {
|
|
47
|
-
try {
|
|
48
|
-
const diagramType = detectDiagramType(input.diagram)
|
|
49
|
-
if (diagramType !== 'sequence') {
|
|
50
|
-
return {
|
|
51
|
-
isError: true,
|
|
52
|
-
content: [
|
|
53
|
-
{
|
|
54
|
-
type: 'text',
|
|
55
|
-
text:
|
|
56
|
-
'This tool only fixes sequence diagrams (source must start ' +
|
|
57
|
-
`with "sequenceDiagram"); detected diagram type: "${diagramType}".`,
|
|
58
|
-
},
|
|
59
|
-
],
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
const result = fixActivationBalance(input.diagram)
|
|
63
|
-
return {
|
|
64
|
-
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
65
|
-
}
|
|
66
|
-
} catch (err) {
|
|
67
|
-
return {
|
|
68
|
-
isError: true,
|
|
69
|
-
content: [
|
|
70
|
-
{
|
|
71
|
-
type: 'text',
|
|
72
|
-
text: `Failed to fix diagram activations: ${err instanceof Error ? err.message : String(err)}`,
|
|
73
|
-
},
|
|
74
|
-
],
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// zombie-mermaid MCP server — `render_mermaid_ascii` tool
|
|
3
|
-
//
|
|
4
|
-
// Thin MCP adapter around the library's own renderMermaidASCII(). No new
|
|
5
|
-
// rendering logic lives here — this only maps a validated tool call onto
|
|
6
|
-
// AsciiRenderOptions and back onto an MCP CallToolResult.
|
|
7
|
-
// ============================================================================
|
|
8
|
-
|
|
9
|
-
import { z } from 'zod'
|
|
10
|
-
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js'
|
|
11
|
-
import { renderMermaidASCII } from '@zombie-mermaid/ascii-renderer'
|
|
12
|
-
import type { AsciiRenderOptions } from '@zombie-mermaid/ascii-renderer'
|
|
13
|
-
|
|
14
|
-
export const renderAsciiInputShape = {
|
|
15
|
-
diagram: z
|
|
16
|
-
.string()
|
|
17
|
-
.min(1, 'diagram must not be empty')
|
|
18
|
-
.describe(
|
|
19
|
-
'Mermaid diagram source text, e.g. "graph LR\\n A --> B". Supports ' +
|
|
20
|
-
'flowcharts, state diagrams, sequence diagrams, class diagrams, and ' +
|
|
21
|
-
'ER diagrams.',
|
|
22
|
-
),
|
|
23
|
-
useAscii: z
|
|
24
|
-
.boolean()
|
|
25
|
-
.optional()
|
|
26
|
-
.describe(
|
|
27
|
-
'true = plain ASCII characters (+, -, |, >); false/unset = Unicode ' +
|
|
28
|
-
'box-drawing characters (┌, ─, │, ►). Default: false.',
|
|
29
|
-
),
|
|
30
|
-
paddingX: z
|
|
31
|
-
.number()
|
|
32
|
-
.int()
|
|
33
|
-
.nonnegative()
|
|
34
|
-
.optional()
|
|
35
|
-
.describe(
|
|
36
|
-
'Horizontal spacing between nodes. Default: 5. Flowchart/state diagrams only.',
|
|
37
|
-
),
|
|
38
|
-
paddingY: z
|
|
39
|
-
.number()
|
|
40
|
-
.int()
|
|
41
|
-
.nonnegative()
|
|
42
|
-
.optional()
|
|
43
|
-
.describe(
|
|
44
|
-
'Vertical spacing between nodes. Default: 5. Flowchart/state diagrams only.',
|
|
45
|
-
),
|
|
46
|
-
boxBorderPadding: z
|
|
47
|
-
.number()
|
|
48
|
-
.int()
|
|
49
|
-
.nonnegative()
|
|
50
|
-
.optional()
|
|
51
|
-
.describe(
|
|
52
|
-
'Padding inside node boxes. Default: 1. Flowchart/state diagrams only.',
|
|
53
|
-
),
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export interface RenderAsciiToolArgs {
|
|
57
|
-
diagram: string
|
|
58
|
-
useAscii?: boolean | undefined
|
|
59
|
-
paddingX?: number | undefined
|
|
60
|
-
paddingY?: number | undefined
|
|
61
|
-
boxBorderPadding?: number | undefined
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* MCP tool handler for `render_mermaid_ascii`. Renders Mermaid source to a
|
|
66
|
-
* plain ASCII/Unicode-art string.
|
|
67
|
-
*
|
|
68
|
-
* Color mode is deliberately fixed to `'none'` rather than exposed as an
|
|
69
|
-
* option: the CLI's `--theme` flag produces ANSI color escapes meant for a
|
|
70
|
-
* real terminal, but an MCP tool result is text inserted into a chat/agent
|
|
71
|
-
* context, where raw ANSI escapes would render as garbage rather than
|
|
72
|
-
* color. (In practice `renderMermaidASCII`'s own auto-detection already
|
|
73
|
-
* resolves to `'none'` here, since the MCP server's stdout is a pipe used
|
|
74
|
-
* for the JSON-RPC transport, not a TTY — this makes that outcome explicit
|
|
75
|
-
* instead of incidental.)
|
|
76
|
-
*/
|
|
77
|
-
export function renderAsciiHandler(input: RenderAsciiToolArgs): CallToolResult {
|
|
78
|
-
try {
|
|
79
|
-
const options: AsciiRenderOptions = {
|
|
80
|
-
useAscii: input.useAscii,
|
|
81
|
-
paddingX: input.paddingX,
|
|
82
|
-
paddingY: input.paddingY,
|
|
83
|
-
boxBorderPadding: input.boxBorderPadding,
|
|
84
|
-
colorMode: 'none',
|
|
85
|
-
}
|
|
86
|
-
const ascii = renderMermaidASCII(input.diagram, options)
|
|
87
|
-
return { content: [{ type: 'text', text: ascii }] }
|
|
88
|
-
} catch (err) {
|
|
89
|
-
return {
|
|
90
|
-
isError: true,
|
|
91
|
-
content: [
|
|
92
|
-
{
|
|
93
|
-
type: 'text',
|
|
94
|
-
text: `Failed to render diagram to ASCII: ${err instanceof Error ? err.message : String(err)}`,
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// zombie-mermaid MCP server — `render_mermaid_svg` tool
|
|
3
|
-
//
|
|
4
|
-
// Thin MCP adapter around the library's own renderMermaidSVG(). No new
|
|
5
|
-
// rendering logic lives here — this only maps a validated tool call onto
|
|
6
|
-
// RenderOptions and back onto an MCP CallToolResult.
|
|
7
|
-
// ============================================================================
|
|
8
|
-
|
|
9
|
-
import { z } from 'zod'
|
|
10
|
-
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js'
|
|
11
|
-
import { renderMermaidSVG } from '../../../../src/index.ts'
|
|
12
|
-
import { THEMES } from '@zombie-mermaid/core'
|
|
13
|
-
import type { DiagramColors } from '@zombie-mermaid/core'
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Narrow a string array to zod's required non-empty-tuple shape without an
|
|
17
|
-
* `as` assertion. `THEMES` always has entries (it's a populated module-level
|
|
18
|
-
* const), but `Object.keys()` returns a plain `string[]` the type system
|
|
19
|
-
* can't statically know is non-empty.
|
|
20
|
-
*/
|
|
21
|
-
function toNonEmptyStringTuple(values: string[]): [string, ...string[]] {
|
|
22
|
-
const [first, ...rest] = values
|
|
23
|
-
if (first === undefined) {
|
|
24
|
-
throw new Error('Expected at least one built-in theme to be registered')
|
|
25
|
-
}
|
|
26
|
-
return [first, ...rest]
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const themeNames = toNonEmptyStringTuple(Object.keys(THEMES))
|
|
30
|
-
|
|
31
|
-
export const renderSvgInputShape = {
|
|
32
|
-
diagram: z
|
|
33
|
-
.string()
|
|
34
|
-
.min(1, 'diagram must not be empty')
|
|
35
|
-
.describe(
|
|
36
|
-
'Mermaid diagram source text, e.g. "graph TD\\n A --> B". Supports ' +
|
|
37
|
-
'flowcharts, state diagrams, sequence diagrams, class diagrams, ER ' +
|
|
38
|
-
'diagrams, and XY charts.',
|
|
39
|
-
),
|
|
40
|
-
theme: z
|
|
41
|
-
.enum(themeNames)
|
|
42
|
-
.optional()
|
|
43
|
-
.describe(`Built-in theme name. One of: ${themeNames.join(', ')}`),
|
|
44
|
-
transparent: z
|
|
45
|
-
.boolean()
|
|
46
|
-
.optional()
|
|
47
|
-
.describe(
|
|
48
|
-
'Render with a transparent background instead of the theme background color. Default: false.',
|
|
49
|
-
),
|
|
50
|
-
font: z
|
|
51
|
-
.string()
|
|
52
|
-
.optional()
|
|
53
|
-
.describe('Font family for diagram text. Default: "Inter".'),
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export interface RenderSvgToolArgs {
|
|
57
|
-
diagram: string
|
|
58
|
-
theme?: string | undefined
|
|
59
|
-
transparent?: boolean | undefined
|
|
60
|
-
font?: string | undefined
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* MCP tool handler for `render_mermaid_svg`. Renders Mermaid source to a
|
|
65
|
-
* self-contained SVG string, returned as `text` content — SVG is XML text,
|
|
66
|
-
* not the raster image the `image` content type expects.
|
|
67
|
-
*
|
|
68
|
-
* Catches rendering errors (e.g. invalid Mermaid syntax) and returns them
|
|
69
|
-
* as an MCP tool error result (`isError: true`) instead of throwing, so a
|
|
70
|
-
* bad diagram from the caller surfaces as a normal tool response rather
|
|
71
|
-
* than a protocol-level failure.
|
|
72
|
-
*/
|
|
73
|
-
export function renderSvgHandler(input: RenderSvgToolArgs): CallToolResult {
|
|
74
|
-
try {
|
|
75
|
-
const themeColors: DiagramColors | undefined = input.theme
|
|
76
|
-
? THEMES[input.theme]
|
|
77
|
-
: undefined
|
|
78
|
-
const svg = renderMermaidSVG(input.diagram, {
|
|
79
|
-
...themeColors,
|
|
80
|
-
transparent: input.transparent,
|
|
81
|
-
font: input.font,
|
|
82
|
-
})
|
|
83
|
-
return { content: [{ type: 'text', text: svg }] }
|
|
84
|
-
} catch (err) {
|
|
85
|
-
return {
|
|
86
|
-
isError: true,
|
|
87
|
-
content: [
|
|
88
|
-
{
|
|
89
|
-
type: 'text',
|
|
90
|
-
text: `Failed to render diagram to SVG: ${err instanceof Error ? err.message : String(err)}`,
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Craft Docs
|
|
4
|
-
Copyright (c) 2026 Dustin Fadler
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
in the Software without restriction, including without limitation the rights
|
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
furnished to do so, subject to the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be included in all
|
|
14
|
-
copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
-
SOFTWARE.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// Class member formatting — shared between the SVG (layout.ts) and ASCII
|
|
3
|
-
// (ascii/class-diagram.ts) renderers so method parentheses/params can't drift
|
|
4
|
-
// between the two again. See issue #290.
|
|
5
|
-
// ============================================================================
|
|
6
|
-
|
|
7
|
-
import type { ClassMember } from './types.ts'
|
|
8
|
-
|
|
9
|
-
/** Format a class member as a display string: visibility + name(+params for methods) + optional type */
|
|
10
|
-
export function formatClassMember(m: ClassMember): string {
|
|
11
|
-
const vis = m.visibility ? `${m.visibility} ` : ''
|
|
12
|
-
const name = m.isMethod ? `${m.name}(${m.params || ''})` : m.name
|
|
13
|
-
const type = m.type ? `: ${m.type}` : ''
|
|
14
|
-
return `${vis}${name}${type}`
|
|
15
|
-
}
|