@eclipse-glsp/server-mcp 2.7.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/LICENSE +642 -0
  2. package/README.md +57 -0
  3. package/lib/index.d.ts +66 -0
  4. package/lib/index.d.ts.map +1 -0
  5. package/lib/index.js +82 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/modules/mcp-diagram-module.d.ts +123 -0
  8. package/lib/modules/mcp-diagram-module.d.ts.map +1 -0
  9. package/lib/modules/mcp-diagram-module.js +202 -0
  10. package/lib/modules/mcp-diagram-module.js.map +1 -0
  11. package/lib/modules/mcp-server-module.d.ts +143 -0
  12. package/lib/modules/mcp-server-module.d.ts.map +1 -0
  13. package/lib/modules/mcp-server-module.js +251 -0
  14. package/lib/modules/mcp-server-module.js.map +1 -0
  15. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.d.ts +44 -0
  16. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.d.ts.map +1 -0
  17. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.js +102 -0
  18. package/lib/prompts/handlers/describe-diagram-mcp-prompt-handler.js.map +1 -0
  19. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.d.ts +44 -0
  20. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.d.ts.map +1 -0
  21. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.js +99 -0
  22. package/lib/prompts/handlers/suggest-improvements-mcp-prompt-handler.js.map +1 -0
  23. package/lib/resources/handlers/diagram-png-mcp-resource-handler.d.ts +84 -0
  24. package/lib/resources/handlers/diagram-png-mcp-resource-handler.d.ts.map +1 -0
  25. package/lib/resources/handlers/diagram-png-mcp-resource-handler.js +177 -0
  26. package/lib/resources/handlers/diagram-png-mcp-resource-handler.js.map +1 -0
  27. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.d.ts +55 -0
  28. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.d.ts.map +1 -0
  29. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.js +99 -0
  30. package/lib/resources/handlers/diagram-svg-mcp-resource-handler.js.map +1 -0
  31. package/lib/resources/services/element-types-provider.d.ts +65 -0
  32. package/lib/resources/services/element-types-provider.d.ts.map +1 -0
  33. package/lib/resources/services/element-types-provider.js +81 -0
  34. package/lib/resources/services/element-types-provider.js.map +1 -0
  35. package/lib/resources/services/mcp-model-serializer.d.ts +78 -0
  36. package/lib/resources/services/mcp-model-serializer.d.ts.map +1 -0
  37. package/lib/resources/services/mcp-model-serializer.js +188 -0
  38. package/lib/resources/services/mcp-model-serializer.js.map +1 -0
  39. package/lib/server/glsp-mcp-server.d.ts +82 -0
  40. package/lib/server/glsp-mcp-server.d.ts.map +1 -0
  41. package/lib/server/glsp-mcp-server.js +140 -0
  42. package/lib/server/glsp-mcp-server.js.map +1 -0
  43. package/lib/server/lru-event-store.d.ts +53 -0
  44. package/lib/server/lru-event-store.d.ts.map +1 -0
  45. package/lib/server/lru-event-store.js +100 -0
  46. package/lib/server/lru-event-store.js.map +1 -0
  47. package/lib/server/mcp-diagram-handler-dispatcher.d.ts +144 -0
  48. package/lib/server/mcp-diagram-handler-dispatcher.d.ts.map +1 -0
  49. package/lib/server/mcp-diagram-handler-dispatcher.js +382 -0
  50. package/lib/server/mcp-diagram-handler-dispatcher.js.map +1 -0
  51. package/lib/server/mcp-diagram-prompt-handler-registry.d.ts +33 -0
  52. package/lib/server/mcp-diagram-prompt-handler-registry.d.ts.map +1 -0
  53. package/lib/server/mcp-diagram-prompt-handler-registry.js +76 -0
  54. package/lib/server/mcp-diagram-prompt-handler-registry.js.map +1 -0
  55. package/lib/server/mcp-diagram-resource-handler-registry.d.ts +35 -0
  56. package/lib/server/mcp-diagram-resource-handler-registry.d.ts.map +1 -0
  57. package/lib/server/mcp-diagram-resource-handler-registry.js +94 -0
  58. package/lib/server/mcp-diagram-resource-handler-registry.js.map +1 -0
  59. package/lib/server/mcp-diagram-tool-handler-registry.d.ts +57 -0
  60. package/lib/server/mcp-diagram-tool-handler-registry.d.ts.map +1 -0
  61. package/lib/server/mcp-diagram-tool-handler-registry.js +111 -0
  62. package/lib/server/mcp-diagram-tool-handler-registry.js.map +1 -0
  63. package/lib/server/mcp-handler-shared.d.ts +142 -0
  64. package/lib/server/mcp-handler-shared.d.ts.map +1 -0
  65. package/lib/server/mcp-handler-shared.js +199 -0
  66. package/lib/server/mcp-handler-shared.js.map +1 -0
  67. package/lib/server/mcp-http-transport.d.ts +93 -0
  68. package/lib/server/mcp-http-transport.d.ts.map +1 -0
  69. package/lib/server/mcp-http-transport.js +350 -0
  70. package/lib/server/mcp-http-transport.js.map +1 -0
  71. package/lib/server/mcp-id-alias-service.d.ts +70 -0
  72. package/lib/server/mcp-id-alias-service.d.ts.map +1 -0
  73. package/lib/server/mcp-id-alias-service.js +85 -0
  74. package/lib/server/mcp-id-alias-service.js.map +1 -0
  75. package/lib/server/mcp-input-schemas.d.ts +73 -0
  76. package/lib/server/mcp-input-schemas.d.ts.map +1 -0
  77. package/lib/server/mcp-input-schemas.js +67 -0
  78. package/lib/server/mcp-input-schemas.js.map +1 -0
  79. package/lib/server/mcp-label-provider.d.ts +45 -0
  80. package/lib/server/mcp-label-provider.d.ts.map +1 -0
  81. package/lib/server/mcp-label-provider.js +42 -0
  82. package/lib/server/mcp-label-provider.js.map +1 -0
  83. package/lib/server/mcp-log-level-registry.d.ts +54 -0
  84. package/lib/server/mcp-log-level-registry.d.ts.map +1 -0
  85. package/lib/server/mcp-log-level-registry.js +80 -0
  86. package/lib/server/mcp-log-level-registry.js.map +1 -0
  87. package/lib/server/mcp-logger.d.ts +59 -0
  88. package/lib/server/mcp-logger.d.ts.map +1 -0
  89. package/lib/server/mcp-logger.js +104 -0
  90. package/lib/server/mcp-logger.js.map +1 -0
  91. package/lib/server/mcp-mime-types.d.ts +28 -0
  92. package/lib/server/mcp-mime-types.d.ts.map +1 -0
  93. package/lib/server/mcp-mime-types.js +18 -0
  94. package/lib/server/mcp-mime-types.js.map +1 -0
  95. package/lib/server/mcp-options.d.ts +39 -0
  96. package/lib/server/mcp-options.d.ts.map +1 -0
  97. package/lib/server/mcp-options.js +53 -0
  98. package/lib/server/mcp-options.js.map +1 -0
  99. package/lib/server/mcp-progress-reporter.d.ts +48 -0
  100. package/lib/server/mcp-progress-reporter.d.ts.map +1 -0
  101. package/lib/server/mcp-progress-reporter.js +66 -0
  102. package/lib/server/mcp-progress-reporter.js.map +1 -0
  103. package/lib/server/mcp-prompt-handler.d.ts +120 -0
  104. package/lib/server/mcp-prompt-handler.d.ts.map +1 -0
  105. package/lib/server/mcp-prompt-handler.js +131 -0
  106. package/lib/server/mcp-prompt-handler.js.map +1 -0
  107. package/lib/server/mcp-request-context.d.ts +37 -0
  108. package/lib/server/mcp-request-context.d.ts.map +1 -0
  109. package/lib/server/mcp-request-context.js +37 -0
  110. package/lib/server/mcp-request-context.js.map +1 -0
  111. package/lib/server/mcp-resource-handler.d.ts +212 -0
  112. package/lib/server/mcp-resource-handler.d.ts.map +1 -0
  113. package/lib/server/mcp-resource-handler.js +298 -0
  114. package/lib/server/mcp-resource-handler.js.map +1 -0
  115. package/lib/server/mcp-server-launcher.d.ts +143 -0
  116. package/lib/server/mcp-server-launcher.d.ts.map +1 -0
  117. package/lib/server/mcp-server-launcher.js +355 -0
  118. package/lib/server/mcp-server-launcher.js.map +1 -0
  119. package/lib/server/mcp-session.d.ts +44 -0
  120. package/lib/server/mcp-session.d.ts.map +1 -0
  121. package/lib/server/mcp-session.js +18 -0
  122. package/lib/server/mcp-session.js.map +1 -0
  123. package/lib/server/mcp-tool-handler.d.ts +259 -0
  124. package/lib/server/mcp-tool-handler.d.ts.map +1 -0
  125. package/lib/server/mcp-tool-handler.js +355 -0
  126. package/lib/server/mcp-tool-handler.js.map +1 -0
  127. package/lib/tools/handlers/count-elements-mcp-tool-handler.d.ts +47 -0
  128. package/lib/tools/handlers/count-elements-mcp-tool-handler.d.ts.map +1 -0
  129. package/lib/tools/handlers/count-elements-mcp-tool-handler.js +77 -0
  130. package/lib/tools/handlers/count-elements-mcp-tool-handler.js.map +1 -0
  131. package/lib/tools/handlers/create-edges-mcp-tool-handler.d.ts +113 -0
  132. package/lib/tools/handlers/create-edges-mcp-tool-handler.d.ts.map +1 -0
  133. package/lib/tools/handlers/create-edges-mcp-tool-handler.js +191 -0
  134. package/lib/tools/handlers/create-edges-mcp-tool-handler.js.map +1 -0
  135. package/lib/tools/handlers/create-nodes-mcp-tool-handler.d.ts +82 -0
  136. package/lib/tools/handlers/create-nodes-mcp-tool-handler.d.ts.map +1 -0
  137. package/lib/tools/handlers/create-nodes-mcp-tool-handler.js +124 -0
  138. package/lib/tools/handlers/create-nodes-mcp-tool-handler.js.map +1 -0
  139. package/lib/tools/handlers/delete-elements-mcp-tool-handler.d.ts +53 -0
  140. package/lib/tools/handlers/delete-elements-mcp-tool-handler.d.ts.map +1 -0
  141. package/lib/tools/handlers/delete-elements-mcp-tool-handler.js +74 -0
  142. package/lib/tools/handlers/delete-elements-mcp-tool-handler.js.map +1 -0
  143. package/lib/tools/handlers/diagram-model-mcp-tool-handler.d.ts +60 -0
  144. package/lib/tools/handlers/diagram-model-mcp-tool-handler.d.ts.map +1 -0
  145. package/lib/tools/handlers/diagram-model-mcp-tool-handler.js +79 -0
  146. package/lib/tools/handlers/diagram-model-mcp-tool-handler.js.map +1 -0
  147. package/lib/tools/handlers/element-types-mcp-tool-handler.d.ts +98 -0
  148. package/lib/tools/handlers/element-types-mcp-tool-handler.d.ts.map +1 -0
  149. package/lib/tools/handlers/element-types-mcp-tool-handler.js +156 -0
  150. package/lib/tools/handlers/element-types-mcp-tool-handler.js.map +1 -0
  151. package/lib/tools/handlers/get-selection-mcp-tool-handler.d.ts +44 -0
  152. package/lib/tools/handlers/get-selection-mcp-tool-handler.d.ts.map +1 -0
  153. package/lib/tools/handlers/get-selection-mcp-tool-handler.js +70 -0
  154. package/lib/tools/handlers/get-selection-mcp-tool-handler.js.map +1 -0
  155. package/lib/tools/handlers/layout-mcp-tool-handler.d.ts +44 -0
  156. package/lib/tools/handlers/layout-mcp-tool-handler.d.ts.map +1 -0
  157. package/lib/tools/handlers/layout-mcp-tool-handler.js +72 -0
  158. package/lib/tools/handlers/layout-mcp-tool-handler.js.map +1 -0
  159. package/lib/tools/handlers/modify-edges-mcp-tool-handler.d.ts +79 -0
  160. package/lib/tools/handlers/modify-edges-mcp-tool-handler.d.ts.map +1 -0
  161. package/lib/tools/handlers/modify-edges-mcp-tool-handler.js +138 -0
  162. package/lib/tools/handlers/modify-edges-mcp-tool-handler.js.map +1 -0
  163. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.d.ts +93 -0
  164. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.d.ts.map +1 -0
  165. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.js +127 -0
  166. package/lib/tools/handlers/modify-nodes-mcp-tool-handler.js.map +1 -0
  167. package/lib/tools/handlers/query-elements-mcp-tool-handler.d.ts +103 -0
  168. package/lib/tools/handlers/query-elements-mcp-tool-handler.d.ts.map +1 -0
  169. package/lib/tools/handlers/query-elements-mcp-tool-handler.js +160 -0
  170. package/lib/tools/handlers/query-elements-mcp-tool-handler.js.map +1 -0
  171. package/lib/tools/handlers/redo-mcp-tool-handler.d.ts +46 -0
  172. package/lib/tools/handlers/redo-mcp-tool-handler.d.ts.map +1 -0
  173. package/lib/tools/handlers/redo-mcp-tool-handler.js +75 -0
  174. package/lib/tools/handlers/redo-mcp-tool-handler.js.map +1 -0
  175. package/lib/tools/handlers/save-model-mcp-tool-handler.d.ts +57 -0
  176. package/lib/tools/handlers/save-model-mcp-tool-handler.d.ts.map +1 -0
  177. package/lib/tools/handlers/save-model-mcp-tool-handler.js +93 -0
  178. package/lib/tools/handlers/save-model-mcp-tool-handler.js.map +1 -0
  179. package/lib/tools/handlers/session-info-mcp-tool-handler.d.ts +66 -0
  180. package/lib/tools/handlers/session-info-mcp-tool-handler.d.ts.map +1 -0
  181. package/lib/tools/handlers/session-info-mcp-tool-handler.js +109 -0
  182. package/lib/tools/handlers/session-info-mcp-tool-handler.js.map +1 -0
  183. package/lib/tools/handlers/set-selection-mcp-tool-handler.d.ts +61 -0
  184. package/lib/tools/handlers/set-selection-mcp-tool-handler.d.ts.map +1 -0
  185. package/lib/tools/handlers/set-selection-mcp-tool-handler.js +104 -0
  186. package/lib/tools/handlers/set-selection-mcp-tool-handler.js.map +1 -0
  187. package/lib/tools/handlers/set-view-mcp-tool-handler.d.ts +111 -0
  188. package/lib/tools/handlers/set-view-mcp-tool-handler.d.ts.map +1 -0
  189. package/lib/tools/handlers/set-view-mcp-tool-handler.js +144 -0
  190. package/lib/tools/handlers/set-view-mcp-tool-handler.js.map +1 -0
  191. package/lib/tools/handlers/undo-mcp-tool-handler.d.ts +46 -0
  192. package/lib/tools/handlers/undo-mcp-tool-handler.d.ts.map +1 -0
  193. package/lib/tools/handlers/undo-mcp-tool-handler.js +76 -0
  194. package/lib/tools/handlers/undo-mcp-tool-handler.js.map +1 -0
  195. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.d.ts +67 -0
  196. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.d.ts.map +1 -0
  197. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.js +0 -0
  198. package/lib/tools/handlers/validate-diagram-mcp-tool-handler.js.map +1 -0
  199. package/lib/util/markdown-util.d.ts +20 -0
  200. package/lib/util/markdown-util.d.ts.map +1 -0
  201. package/lib/util/markdown-util.js +45 -0
  202. package/lib/util/markdown-util.js.map +1 -0
  203. package/lib/util/mcp-util.d.ts +22 -0
  204. package/lib/util/mcp-util.d.ts.map +1 -0
  205. package/lib/util/mcp-util.js +29 -0
  206. package/lib/util/mcp-util.js.map +1 -0
  207. package/package.json +63 -0
  208. package/src/index.ts +65 -0
  209. package/src/modules/mcp-diagram-module.ts +247 -0
  210. package/src/modules/mcp-server-module.ts +289 -0
  211. package/src/prompts/handlers/describe-diagram-mcp-prompt-handler.ts +88 -0
  212. package/src/prompts/handlers/suggest-improvements-mcp-prompt-handler.ts +85 -0
  213. package/src/resources/handlers/diagram-png-mcp-resource-handler.ts +177 -0
  214. package/src/resources/handlers/diagram-svg-mcp-resource-handler.ts +85 -0
  215. package/src/resources/services/element-types-provider.ts +105 -0
  216. package/src/resources/services/mcp-model-serializer.ts +211 -0
  217. package/src/server/glsp-mcp-server.spec.ts +73 -0
  218. package/src/server/glsp-mcp-server.ts +196 -0
  219. package/src/server/lru-event-store.spec.ts +121 -0
  220. package/src/server/lru-event-store.ts +112 -0
  221. package/src/server/mcp-diagram-handler-dispatcher.spec.ts +231 -0
  222. package/src/server/mcp-diagram-handler-dispatcher.ts +459 -0
  223. package/src/server/mcp-diagram-prompt-handler-registry.ts +59 -0
  224. package/src/server/mcp-diagram-resource-handler-registry.ts +73 -0
  225. package/src/server/mcp-diagram-tool-handler-registry.ts +97 -0
  226. package/src/server/mcp-handler-shared.spec.ts +53 -0
  227. package/src/server/mcp-handler-shared.ts +247 -0
  228. package/src/server/mcp-http-transport-e2e.spec.ts +151 -0
  229. package/src/server/mcp-http-transport.spec.ts +385 -0
  230. package/src/server/mcp-http-transport.ts +368 -0
  231. package/src/server/mcp-id-alias-service.spec.ts +106 -0
  232. package/src/server/mcp-id-alias-service.ts +104 -0
  233. package/src/server/mcp-input-schemas.ts +82 -0
  234. package/src/server/mcp-label-provider.ts +52 -0
  235. package/src/server/mcp-log-level-registry.spec.ts +75 -0
  236. package/src/server/mcp-log-level-registry.ts +90 -0
  237. package/src/server/mcp-logger.spec.ts +227 -0
  238. package/src/server/mcp-logger.ts +91 -0
  239. package/src/server/mcp-mime-types.ts +31 -0
  240. package/src/server/mcp-options.ts +43 -0
  241. package/src/server/mcp-progress-reporter.spec.ts +93 -0
  242. package/src/server/mcp-progress-reporter.ts +67 -0
  243. package/src/server/mcp-prompt-handler.ts +157 -0
  244. package/src/server/mcp-request-context.ts +39 -0
  245. package/src/server/mcp-resource-handler.ts +389 -0
  246. package/src/server/mcp-server-launcher.spec.ts +173 -0
  247. package/src/server/mcp-server-launcher.ts +369 -0
  248. package/src/server/mcp-session.ts +45 -0
  249. package/src/server/mcp-tool-handler.spec.ts +182 -0
  250. package/src/server/mcp-tool-handler.ts +431 -0
  251. package/src/server/raw-http.spec.ts +59 -0
  252. package/src/tools/handlers/count-elements-mcp-tool-handler.spec.ts +101 -0
  253. package/src/tools/handlers/count-elements-mcp-tool-handler.ts +68 -0
  254. package/src/tools/handlers/create-edges-mcp-tool-handler.spec.ts +198 -0
  255. package/src/tools/handlers/create-edges-mcp-tool-handler.ts +200 -0
  256. package/src/tools/handlers/create-nodes-mcp-tool-handler.spec.ts +199 -0
  257. package/src/tools/handlers/create-nodes-mcp-tool-handler.ts +126 -0
  258. package/src/tools/handlers/delete-elements-mcp-tool-handler.ts +69 -0
  259. package/src/tools/handlers/diagram-model-mcp-tool-handler.ts +68 -0
  260. package/src/tools/handlers/element-types-mcp-tool-handler.ts +152 -0
  261. package/src/tools/handlers/get-selection-mcp-tool-handler.ts +56 -0
  262. package/src/tools/handlers/layout-mcp-tool-handler.ts +58 -0
  263. package/src/tools/handlers/modify-edges-mcp-tool-handler.ts +142 -0
  264. package/src/tools/handlers/modify-nodes-mcp-tool-handler.ts +134 -0
  265. package/src/tools/handlers/query-elements-mcp-tool-handler.spec.ts +212 -0
  266. package/src/tools/handlers/query-elements-mcp-tool-handler.ts +157 -0
  267. package/src/tools/handlers/redo-mcp-tool-handler.ts +64 -0
  268. package/src/tools/handlers/save-model-mcp-tool-handler.ts +74 -0
  269. package/src/tools/handlers/session-info-mcp-tool-handler.spec.ts +152 -0
  270. package/src/tools/handlers/session-info-mcp-tool-handler.ts +98 -0
  271. package/src/tools/handlers/set-selection-mcp-tool-handler.spec.ts +120 -0
  272. package/src/tools/handlers/set-selection-mcp-tool-handler.ts +92 -0
  273. package/src/tools/handlers/set-view-mcp-tool-handler.ts +156 -0
  274. package/src/tools/handlers/undo-mcp-tool-handler.ts +63 -0
  275. package/src/tools/handlers/validate-diagram-mcp-tool-handler.ts +0 -0
  276. package/src/tools/tool-annotations.spec.ts +141 -0
  277. package/src/util/markdown-util.ts +44 -0
  278. package/src/util/mcp-util.ts +25 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2026 EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the Eclipse Public License v. 2.0 which is available at
7
+ * http://www.eclipse.org/legal/epl-2.0.
8
+ *
9
+ * This Source Code may also be made available under the following Secondary
10
+ * Licenses when the conditions for such availability set forth in the Eclipse
11
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ * with the GNU Classpath Exception which is available at
13
+ * https://www.gnu.org/software/classpath/license.html.
14
+ *
15
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
+ ********************************************************************************/
17
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
22
+ };
23
+ var __metadata = (this && this.__metadata) || function (k, v) {
24
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
+ };
26
+ var SuggestImprovementsMcpPromptHandler_1;
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.SuggestImprovementsMcpPromptHandler = exports.SuggestImprovementsArgsSchema = void 0;
29
+ const server_1 = require("@eclipse-glsp/server");
30
+ const inversify_1 = require("inversify");
31
+ const z = require("zod/v4");
32
+ const mcp_handler_shared_1 = require("../../server/mcp-handler-shared");
33
+ const mcp_prompt_handler_1 = require("../../server/mcp-prompt-handler");
34
+ const diagram_model_mcp_tool_handler_1 = require("../../tools/handlers/diagram-model-mcp-tool-handler");
35
+ const query_elements_mcp_tool_handler_1 = require("../../tools/handlers/query-elements-mcp-tool-handler");
36
+ const set_selection_mcp_tool_handler_1 = require("../../tools/handlers/set-selection-mcp-tool-handler");
37
+ const validate_diagram_mcp_tool_handler_1 = require("../../tools/handlers/validate-diagram-mcp-tool-handler");
38
+ exports.SuggestImprovementsArgsSchema = z.object({
39
+ sessionId: z
40
+ .string()
41
+ .optional()
42
+ .describe('GLSP client session id (open diagram). Defaults to the only open session; required when multiple are open.')
43
+ });
44
+ /**
45
+ * Prompt template that asks the agent to review the diagram and propose concrete improvements
46
+ * (validation issues, structural smells, missing labels, etc.). The agent orchestrates the
47
+ * tool calls; this prompt only frames the task.
48
+ *
49
+ * Server-scope on purpose — the prompt itself has no per-session state, so we avoid forcing
50
+ * the user to type a sessionId in the common single-diagram case.
51
+ */
52
+ let SuggestImprovementsMcpPromptHandler = SuggestImprovementsMcpPromptHandler_1 = class SuggestImprovementsMcpPromptHandler extends mcp_prompt_handler_1.AbstractMcpPromptHandler {
53
+ constructor() {
54
+ super(...arguments);
55
+ this.name = SuggestImprovementsMcpPromptHandler_1.NAME;
56
+ this.title = 'Suggest Diagram Improvements';
57
+ this.description = 'Review an open diagram and propose concrete improvements grouped by severity ' +
58
+ '(must-fix vs. nice-to-have). The agent runs validation, checks connectivity, looks for unclear labels, ' +
59
+ 'and flags structural inconsistencies, then names the specific element ids for each suggestion so the user ' +
60
+ 'can act on them. Read-only by intent — the prompt instructs the agent not to modify the diagram, only propose. ' +
61
+ '`sessionId` is optional — defaults to the only open session.';
62
+ this.argsSchema = exports.SuggestImprovementsArgsSchema;
63
+ }
64
+ referencedToolNames() {
65
+ return [
66
+ validate_diagram_mcp_tool_handler_1.ValidateDiagramMcpToolHandler.NAME,
67
+ diagram_model_mcp_tool_handler_1.DiagramModelMcpToolHandler.NAME,
68
+ query_elements_mcp_tool_handler_1.QueryElementsMcpToolHandler.NAME,
69
+ set_selection_mcp_tool_handler_1.SetSelectionMcpToolHandler.NAME
70
+ ];
71
+ }
72
+ createResult(args) {
73
+ const sessionId = (0, mcp_handler_shared_1.resolveActiveSessionId)(this.clientSessionManager, args.sessionId);
74
+ const text = `Review the diagram for session \`${sessionId}\` and propose concrete improvements. Focus on:\n\n` +
75
+ `1. **Validation issues** — run \`${validate_diagram_mcp_tool_handler_1.ValidateDiagramMcpToolHandler.NAME}\` and surface any markers.\n` +
76
+ `2. **Connectivity** — load the model (\`${diagram_model_mcp_tool_handler_1.DiagramModelMcpToolHandler.NAME}\`) and flag unconnected ` +
77
+ `nodes or orphaned subgraphs.\n` +
78
+ `3. **Labelling** — use \`${query_elements_mcp_tool_handler_1.QueryElementsMcpToolHandler.NAME}\` to find nodes that lack a meaningful ` +
79
+ `label, and edges with missing or unclear text.\n` +
80
+ `4. **Structure** — call out elements whose type or placement looks inconsistent with ` +
81
+ `the rest of the diagram.\n\n` +
82
+ `Group findings by severity (must-fix vs. nice-to-have). ` +
83
+ `When naming elements, prefer their label or type with the alias in parens — e.g. ` +
84
+ `"the 'Brew' task (#7)" or "the decision node (#9)" — never the bare alias alone, since aliases mean nothing to the user. ` +
85
+ `Point at each suggestion via \`${set_selection_mcp_tool_handler_1.SetSelectionMcpToolHandler.NAME}\` so the user can navigate. ` +
86
+ `Do not modify the diagram — only propose.`;
87
+ return { messages: [{ role: 'user', content: { type: 'text', text } }] };
88
+ }
89
+ };
90
+ exports.SuggestImprovementsMcpPromptHandler = SuggestImprovementsMcpPromptHandler;
91
+ SuggestImprovementsMcpPromptHandler.NAME = 'suggest-improvements';
92
+ __decorate([
93
+ (0, inversify_1.inject)(server_1.ClientSessionManager),
94
+ __metadata("design:type", Object)
95
+ ], SuggestImprovementsMcpPromptHandler.prototype, "clientSessionManager", void 0);
96
+ exports.SuggestImprovementsMcpPromptHandler = SuggestImprovementsMcpPromptHandler = SuggestImprovementsMcpPromptHandler_1 = __decorate([
97
+ (0, inversify_1.injectable)()
98
+ ], SuggestImprovementsMcpPromptHandler);
99
+ //# sourceMappingURL=suggest-improvements-mcp-prompt-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest-improvements-mcp-prompt-handler.js","sourceRoot":"","sources":["../../../src/prompts/handlers/suggest-improvements-mcp-prompt-handler.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;;;;;;;;;;;AAElF,iDAA4D;AAC5D,yCAA+C;AAC/C,4BAA4B;AAC5B,wEAA0F;AAC1F,wEAA2E;AAC3E,wGAAiG;AACjG,0GAAmG;AACnG,wGAAiG;AACjG,8GAAuG;AAE1F,QAAA,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,SAAS,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4GAA4G,CAAC;CAC9H,CAAC,CAAC;AAGH;;;;;;;GAOG;AAEI,IAAM,mCAAmC,2CAAzC,MAAM,mCAAoC,SAAQ,6CAAiD;IAAnG;;QAEM,SAAI,GAAG,qCAAmC,CAAC,IAAI,CAAC;QACvC,UAAK,GAAG,8BAA8B,CAAC;QAChD,gBAAW,GAChB,+EAA+E;YAC/E,yGAAyG;YACzG,4GAA4G;YAC5G,iHAAiH;YACjH,8DAA8D,CAAC;QAC1D,eAAU,GAAG,qCAA6B,CAAC;IA+BxD,CAAC;IA3BY,mBAAmB;QACxB,OAAO;YACH,iEAA6B,CAAC,IAAI;YAClC,2DAA0B,CAAC,IAAI;YAC/B,6DAA2B,CAAC,IAAI;YAChC,2DAA0B,CAAC,IAAI;SAClC,CAAC;IACN,CAAC;IAES,YAAY,CAAC,IAA6B;QAChD,MAAM,SAAS,GAAG,IAAA,2CAAsB,EAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpF,MAAM,IAAI,GACN,oCAAoC,SAAS,qDAAqD;YAClG,oCAAoC,iEAA6B,CAAC,IAAI,+BAA+B;YACrG,2CAA2C,2DAA0B,CAAC,IAAI,2BAA2B;YACrG,gCAAgC;YAChC,4BAA4B,6DAA2B,CAAC,IAAI,0CAA0C;YACtG,kDAAkD;YAClD,uFAAuF;YACvF,8BAA8B;YAC9B,0DAA0D;YAC1D,mFAAmF;YACnF,2HAA2H;YAC3H,kCAAkC,2DAA0B,CAAC,IAAI,+BAA+B;YAChG,2CAA2C,CAAC;QAChD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC;;AAxCQ,kFAAmC;AAC5B,wCAAI,GAAG,sBAAsB,AAAzB,CAA0B;AAWN;IAAvC,IAAA,kBAAM,EAAC,6BAAoB,CAAC;;iFAAsD;8CAZ1E,mCAAmC;IAD/C,IAAA,sBAAU,GAAE;GACA,mCAAmC,CAyC/C"}
@@ -0,0 +1,84 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import { Role } from '@modelcontextprotocol/sdk/types.js';
17
+ import * as z from 'zod/v4';
18
+ import { McpResourceContent } from '../../server/mcp-handler-shared';
19
+ import { McpMimeType } from '../../server/mcp-mime-types';
20
+ import { McpProgressReporter } from '../../server/mcp-progress-reporter';
21
+ import { AbstractMcpDiagramResourceHandler, McpResourceUri } from '../../server/mcp-resource-handler';
22
+ export declare const DiagramPngInputSchema: z.ZodObject<{
23
+ sessionId: z.ZodString;
24
+ scale: z.ZodOptional<z.ZodNumber>;
25
+ width: z.ZodOptional<z.ZodNumber>;
26
+ height: z.ZodOptional<z.ZodNumber>;
27
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
28
+ }, z.core.$strip>;
29
+ export type DiagramPngInput = z.infer<typeof DiagramPngInputSchema>;
30
+ /** Rendering lives on the client — `RequestExportAction('png')` routes to the registered PNG exporter, which returns base64 via `ExportResultAction`. */
31
+ export declare class DiagramPngMcpResourceHandler extends AbstractMcpDiagramResourceHandler<DiagramPngInput> {
32
+ /** Default timeout (in ms) used when the call doesn't override `timeoutMs`. Override via subclass + rebind. */
33
+ protected readonly defaultTimeoutMs: number;
34
+ /**
35
+ * Default `scale` multiplier when the caller doesn't pin `width`/`height`/`scale`. `1` means
36
+ * "render at the diagram's natural extent" — sharp because the client rasterises the SVG
37
+ * at the requested size. Adopters override (e.g. to `2` for a high-DPI deployment) via
38
+ * subclass + rebind.
39
+ */
40
+ protected readonly defaultScale: number;
41
+ static readonly NAME = "diagram-png";
42
+ readonly name = "diagram-png";
43
+ readonly title = "Diagram Model PNG";
44
+ readonly description: string;
45
+ readonly mimeType: McpMimeType;
46
+ readonly uri: McpResourceUri;
47
+ /** Both the user (visual artifact) and the assistant (visual reasoning) consume the rendered diagram. */
48
+ readonly audience: Role[];
49
+ /** Useful when relevant, but not always-relevant — clients may skip when text-only reasoning suffices. */
50
+ readonly priority = 0.6;
51
+ readonly toolAlternativeInputSchema: z.ZodObject<{
52
+ sessionId: z.ZodString;
53
+ scale: z.ZodOptional<z.ZodNumber>;
54
+ width: z.ZodOptional<z.ZodNumber>;
55
+ height: z.ZodOptional<z.ZodNumber>;
56
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
57
+ }, z.core.$strip>;
58
+ protected progress: McpProgressReporter;
59
+ protected clientActionKinds: Set<string>;
60
+ /** Skip-bind when the GLSP client doesn't speak `RequestExportAction` — every read would otherwise time out. */
61
+ canRegister(): boolean;
62
+ protected createResult({ scale, width, height, timeoutMs }: DiagramPngInput): Promise<McpResourceContent>;
63
+ /**
64
+ * Resolve the final render size with this precedence:
65
+ * - `width` and `height` both given → use as-is.
66
+ * - only one of `width`/`height` given → derive the other from the diagram aspect ratio.
67
+ * - neither dimension given → natural × (`scale` ?? {@link defaultScale}).
68
+ */
69
+ protected resolveSize(scale: number | undefined, width: number | undefined, height: number | undefined): {
70
+ width: number;
71
+ height: number;
72
+ };
73
+ /**
74
+ * Compute the diagram's natural extent as the bounding box of every {@link isGBoundsAware}
75
+ * element with both `position` and `size`. Throws when the model has no positioned elements
76
+ * — a 1×1 PNG of an empty diagram is technically renderable but useless, and surfacing it
77
+ * as a self-correctable error lets the LLM react (e.g. wait for layout, ask the user).
78
+ */
79
+ protected computeNaturalSize(): {
80
+ width: number;
81
+ height: number;
82
+ };
83
+ }
84
+ //# sourceMappingURL=diagram-png-mcp-resource-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-png-mcp-resource-handler.d.ts","sourceRoot":"","sources":["../../../src/resources/handlers/diagram-png-mcp-resource-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAGlF,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAgB,MAAM,iCAAiC,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iCAAiC,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEtG,eAAO,MAAM,qBAAqB;;;;;;iBA+BhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,yJAAyJ;AACzJ,qBACa,4BAA6B,SAAQ,iCAAiC,CAAC,eAAe,CAAC;IAChG,+GAA+G;IAC/G,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAQ;IAEnD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAK;IAE5C,MAAM,CAAC,QAAQ,CAAC,IAAI,iBAAiB;IACrC,QAAQ,CAAC,IAAI,iBAAqC;IAClD,SAAkB,KAAK,uBAAuB;IAC9C,QAAQ,CAAC,WAAW,SAO4F;IAChH,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAe;IAC7C,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAmD;IAC/E,yGAAyG;IACzG,SAAkB,QAAQ,EAAE,IAAI,EAAE,CAAyB;IAC3D,0GAA0G;IAC1G,SAAkB,QAAQ,OAAO;IAIjC,SAAkB,0BAA0B;;;;;;sBAAyB;IAExC,SAAS,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IAE1C,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpE,gHAAgH;IACvG,WAAW,IAAI,OAAO;cAIf,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAe/G;;;;;OAKG;IACH,SAAS,CAAC,WAAW,CACjB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,MAAM,GAAG,SAAS,GAC3B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAkBpC;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAsBpE"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2026 EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the Eclipse Public License v. 2.0 which is available at
7
+ * http://www.eclipse.org/legal/epl-2.0.
8
+ *
9
+ * This Source Code may also be made available under the following Secondary
10
+ * Licenses when the conditions for such availability set forth in the Eclipse
11
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ * with the GNU Classpath Exception which is available at
13
+ * https://www.gnu.org/software/classpath/license.html.
14
+ *
15
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
+ ********************************************************************************/
17
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
22
+ };
23
+ var __metadata = (this && this.__metadata) || function (k, v) {
24
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
+ };
26
+ var DiagramPngMcpResourceHandler_1;
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.DiagramPngMcpResourceHandler = exports.DiagramPngInputSchema = void 0;
29
+ const server_1 = require("@eclipse-glsp/server");
30
+ const inversify_1 = require("inversify");
31
+ const z = require("zod/v4");
32
+ const mcp_handler_shared_1 = require("../../server/mcp-handler-shared");
33
+ const mcp_input_schemas_1 = require("../../server/mcp-input-schemas");
34
+ const mcp_progress_reporter_1 = require("../../server/mcp-progress-reporter");
35
+ const mcp_resource_handler_1 = require("../../server/mcp-resource-handler");
36
+ exports.DiagramPngInputSchema = mcp_input_schemas_1.McpDiagramScopedInputSchema.extend({
37
+ scale: z
38
+ .number()
39
+ .min(0.1)
40
+ .max(4)
41
+ .optional()
42
+ .describe("Multiplier applied to the diagram's natural extent (range 0.1..4). Use values >1 for " +
43
+ 'sharper-than-default renders, <1 for thumbnails. Ignored when `width` or `height` is supplied.'),
44
+ width: z
45
+ .number()
46
+ .int()
47
+ .min(1)
48
+ .max(8192)
49
+ .optional()
50
+ .describe('Override the rendered width in pixels. When given alone, the height is derived from the diagram aspect ratio.'),
51
+ height: z
52
+ .number()
53
+ .int()
54
+ .min(1)
55
+ .max(8192)
56
+ .optional()
57
+ .describe('Override the rendered height in pixels. When given alone, the width is derived from the diagram aspect ratio.'),
58
+ timeoutMs: z
59
+ .number()
60
+ .int()
61
+ .min(100)
62
+ .max(60000)
63
+ .optional()
64
+ .describe('Override the default render timeout in milliseconds (100–60000). Useful for very large diagrams.')
65
+ });
66
+ /** Rendering lives on the client — `RequestExportAction('png')` routes to the registered PNG exporter, which returns base64 via `ExportResultAction`. */
67
+ let DiagramPngMcpResourceHandler = DiagramPngMcpResourceHandler_1 = class DiagramPngMcpResourceHandler extends mcp_resource_handler_1.AbstractMcpDiagramResourceHandler {
68
+ constructor() {
69
+ super(...arguments);
70
+ /** Default timeout (in ms) used when the call doesn't override `timeoutMs`. Override via subclass + rebind. */
71
+ this.defaultTimeoutMs = 5000;
72
+ /**
73
+ * Default `scale` multiplier when the caller doesn't pin `width`/`height`/`scale`. `1` means
74
+ * "render at the diagram's natural extent" — sharp because the client rasterises the SVG
75
+ * at the requested size. Adopters override (e.g. to `2` for a high-DPI deployment) via
76
+ * subclass + rebind.
77
+ */
78
+ this.defaultScale = 1;
79
+ this.name = DiagramPngMcpResourceHandler_1.NAME;
80
+ this.title = 'Diagram Model PNG';
81
+ this.description = 'Render the session diagram as a base64-encoded PNG screenshot of its current visible state. ' +
82
+ 'Includes all nodes, edges, and their styling — useful when a visual answer would help the agent ' +
83
+ '(layout reasoning, confirming a recently-created element looks right, sharing the diagram with the user). ' +
84
+ "Defaults to a sharp render at the diagram's natural extent; pass `scale` to multiply, " +
85
+ 'or `width`/`height` to pin specific dimensions. ' +
86
+ 'Requires a connected frontend client to perform the render and is subject to a timeout if no response arrives. ' +
87
+ 'For a structured-text view of the model use `diagram-model` instead; for vector output use `diagram-svg`.';
88
+ this.mimeType = 'image/png';
89
+ this.uri = { template: 'glsp://diagrams/{sessionId}/png' };
90
+ /** Both the user (visual artifact) and the assistant (visual reasoning) consume the rendered diagram. */
91
+ this.audience = ['user', 'assistant'];
92
+ /** Useful when relevant, but not always-relevant — clients may skip when text-only reasoning suffices. */
93
+ this.priority = 0.6;
94
+ // `lastModified` intentionally omitted: we have no cheap, accurate freshness signal for the
95
+ // rendered PNG (the model state doesn't track a "rendered at" timestamp), and a stale value
96
+ // would mislead clients.
97
+ this.toolAlternativeInputSchema = exports.DiagramPngInputSchema;
98
+ }
99
+ /** Skip-bind when the GLSP client doesn't speak `RequestExportAction` — every read would otherwise time out. */
100
+ canRegister() {
101
+ return this.clientActionKinds.has(server_1.RequestExportAction.KIND);
102
+ }
103
+ async createResult({ scale, width, height, timeoutMs }) {
104
+ const resolved = this.resolveSize(scale, width, height);
105
+ // Best-effort beat for clients that opted in via `_meta.progressToken`; no-ops otherwise.
106
+ await this.progress.emit({ progress: 0, message: 'Awaiting client-side PNG render…' });
107
+ const response = await this.requestAction(server_1.RequestExportAction.create('png', { formatOptions: { width: resolved.width, height: resolved.height } }), timeoutMs !== null && timeoutMs !== void 0 ? timeoutMs : this.defaultTimeoutMs);
108
+ // A misbehaving exporter strategy returning text-encoded data here would silently corrupt the blob; fail loudly instead.
109
+ if (response.encoding !== 'base64') {
110
+ throw new mcp_handler_shared_1.McpToolError(`PNG export returned unexpected encoding '${response.encoding}'; expected 'base64'.`);
111
+ }
112
+ return { blob: response.data };
113
+ }
114
+ /**
115
+ * Resolve the final render size with this precedence:
116
+ * - `width` and `height` both given → use as-is.
117
+ * - only one of `width`/`height` given → derive the other from the diagram aspect ratio.
118
+ * - neither dimension given → natural × (`scale` ?? {@link defaultScale}).
119
+ */
120
+ resolveSize(scale, width, height) {
121
+ if (width !== undefined && height !== undefined) {
122
+ return { width, height };
123
+ }
124
+ const natural = this.computeNaturalSize();
125
+ if (width !== undefined) {
126
+ return { width, height: Math.max(1, Math.round(width * (natural.height / natural.width))) };
127
+ }
128
+ if (height !== undefined) {
129
+ return { width: Math.max(1, Math.round(height * (natural.width / natural.height))), height };
130
+ }
131
+ const factor = scale !== null && scale !== void 0 ? scale : this.defaultScale;
132
+ return {
133
+ width: Math.max(1, Math.round(natural.width * factor)),
134
+ height: Math.max(1, Math.round(natural.height * factor))
135
+ };
136
+ }
137
+ /**
138
+ * Compute the diagram's natural extent as the bounding box of every {@link isGBoundsAware}
139
+ * element with both `position` and `size`. Throws when the model has no positioned elements
140
+ * — a 1×1 PNG of an empty diagram is technically renderable but useless, and surfacing it
141
+ * as a self-correctable error lets the LLM react (e.g. wait for layout, ask the user).
142
+ */
143
+ computeNaturalSize() {
144
+ let maxX = 0;
145
+ let maxY = 0;
146
+ for (const id of this.modelState.index.allIds()) {
147
+ const element = this.modelState.index.get(id);
148
+ if (!element || !(0, server_1.isGBoundsAware)(element)) {
149
+ continue;
150
+ }
151
+ const position = element.position;
152
+ const size = element.size;
153
+ if (position && size && size.width > 0 && size.height > 0) {
154
+ maxX = Math.max(maxX, position.x + size.width);
155
+ maxY = Math.max(maxY, position.y + size.height);
156
+ }
157
+ }
158
+ if (maxX <= 0 || maxY <= 0) {
159
+ throw new mcp_handler_shared_1.McpToolError('Diagram has no positioned elements yet — render once after layout completes, or pass `width` / `height` explicitly.');
160
+ }
161
+ return { width: Math.ceil(maxX), height: Math.ceil(maxY) };
162
+ }
163
+ };
164
+ exports.DiagramPngMcpResourceHandler = DiagramPngMcpResourceHandler;
165
+ DiagramPngMcpResourceHandler.NAME = 'diagram-png';
166
+ __decorate([
167
+ (0, inversify_1.inject)(mcp_progress_reporter_1.McpProgressReporter),
168
+ __metadata("design:type", mcp_progress_reporter_1.McpProgressReporter)
169
+ ], DiagramPngMcpResourceHandler.prototype, "progress", void 0);
170
+ __decorate([
171
+ (0, inversify_1.inject)(server_1.ClientActionKinds),
172
+ __metadata("design:type", Set)
173
+ ], DiagramPngMcpResourceHandler.prototype, "clientActionKinds", void 0);
174
+ exports.DiagramPngMcpResourceHandler = DiagramPngMcpResourceHandler = DiagramPngMcpResourceHandler_1 = __decorate([
175
+ (0, inversify_1.injectable)()
176
+ ], DiagramPngMcpResourceHandler);
177
+ //# sourceMappingURL=diagram-png-mcp-resource-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-png-mcp-resource-handler.js","sourceRoot":"","sources":["../../../src/resources/handlers/diagram-png-mcp-resource-handler.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;;;;;;;;;;;AAElF,iDAA8F;AAE9F,yCAA+C;AAC/C,4BAA4B;AAC5B,wEAAmF;AACnF,sEAA6E;AAE7E,8EAAyE;AACzE,4EAAsG;AAEzF,QAAA,qBAAqB,GAAG,+CAA2B,CAAC,MAAM,CAAC;IACpE,KAAK,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACL,uFAAuF;QACnF,gGAAgG,CACvG;IACL,KAAK,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+GAA+G,CAAC;IAC9H,MAAM,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+GAA+G,CAAC;IAC9H,SAAS,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,GAAG,CAAC;SACR,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,kGAAkG,CAAC;CACpH,CAAC,CAAC;AAGH,yJAAyJ;AAElJ,IAAM,4BAA4B,oCAAlC,MAAM,4BAA6B,SAAQ,wDAAkD;IAA7F;;QACH,+GAA+G;QAC5F,qBAAgB,GAAW,IAAI,CAAC;QAEnD;;;;;WAKG;QACgB,iBAAY,GAAW,CAAC,CAAC;QAGnC,SAAI,GAAG,8BAA4B,CAAC,IAAI,CAAC;QAChC,UAAK,GAAG,mBAAmB,CAAC;QACrC,gBAAW,GAChB,8FAA8F;YAC9F,kGAAkG;YAClG,4GAA4G;YAC5G,wFAAwF;YACxF,kDAAkD;YAClD,iHAAiH;YACjH,2GAA2G,CAAC;QACvG,aAAQ,GAAgB,WAAW,CAAC;QACpC,QAAG,GAAmB,EAAE,QAAQ,EAAE,iCAAiC,EAAE,CAAC;QAC/E,yGAAyG;QACvF,aAAQ,GAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3D,0GAA0G;QACxF,aAAQ,GAAG,GAAG,CAAC;QACjC,4FAA4F;QAC5F,4FAA4F;QAC5F,yBAAyB;QACP,+BAA0B,GAAG,6BAAqB,CAAC;IAkFzE,CAAC;IA5EG,gHAAgH;IACvG,WAAW;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,4BAAmB,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAmB;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACxD,0FAA0F;QAC1F,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CACrC,4BAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EACxG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,CAAC,gBAAgB,CACrC,CAAC;QACF,yHAAyH;QACzH,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,iCAAY,CAAC,4CAA4C,QAAQ,CAAC,QAAQ,uBAAuB,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACO,WAAW,CACjB,KAAyB,EACzB,KAAyB,EACzB,MAA0B;QAE1B,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QACjG,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAI,CAAC,YAAY,CAAC;QAC1C,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;YACtD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;SAC3D,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACO,kBAAkB;QACxB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,IAAI,CAAC,IAAA,uBAAc,EAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,SAAS;YACb,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;QACD,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,iCAAY,CAClB,qHAAqH,CACxH,CAAC;QACN,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/D,CAAC;;AAjHQ,oEAA4B;AAYrB,iCAAI,GAAG,aAAa,AAAhB,CAAiB;AAsBE;IAAtC,IAAA,kBAAM,EAAC,2CAAmB,CAAC;8BAAqB,2CAAmB;8DAAC;AAEhC;IAApC,IAAA,kBAAM,EAAC,0BAAiB,CAAC;8BAA8B,GAAG;uEAAS;uCApC3D,4BAA4B;IADxC,IAAA,sBAAU,GAAE;GACA,4BAA4B,CAkHxC"}
@@ -0,0 +1,55 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import { Role } from '@modelcontextprotocol/sdk/types.js';
17
+ import * as z from 'zod/v4';
18
+ import { McpResourceContent } from '../../server/mcp-handler-shared';
19
+ import { McpMimeType } from '../../server/mcp-mime-types';
20
+ import { McpProgressReporter } from '../../server/mcp-progress-reporter';
21
+ import { AbstractMcpDiagramResourceHandler, McpResourceUri } from '../../server/mcp-resource-handler';
22
+ export declare const DiagramSvgInputSchema: z.ZodObject<{
23
+ sessionId: z.ZodString;
24
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
25
+ }, z.core.$strip>;
26
+ export type DiagramSvgInput = z.infer<typeof DiagramSvgInputSchema>;
27
+ /**
28
+ * Vector counterpart of {@link DiagramPngMcpResourceHandler}. Emits the diagram as raw SVG
29
+ * markup (text-encoded). No `width`/`height` knobs because SVG is vector — clients (and
30
+ * downstream rasterisers) scale it freely.
31
+ */
32
+ export declare class DiagramSvgMcpResourceHandler extends AbstractMcpDiagramResourceHandler<DiagramSvgInput> {
33
+ /** Default timeout (in ms) used when the call doesn't override `timeoutMs`. Override via subclass + rebind. */
34
+ protected readonly defaultTimeoutMs: number;
35
+ static readonly NAME = "diagram-svg";
36
+ readonly name = "diagram-svg";
37
+ readonly title = "Diagram Model SVG";
38
+ readonly description: string;
39
+ readonly mimeType: McpMimeType;
40
+ readonly uri: McpResourceUri;
41
+ /** Both the user (visual artifact) and the assistant (visual reasoning) consume the rendered diagram. */
42
+ readonly audience: Role[];
43
+ /** Useful when relevant, but not always-relevant — clients may skip when text-only reasoning suffices. */
44
+ readonly priority = 0.6;
45
+ readonly toolAlternativeInputSchema: z.ZodObject<{
46
+ sessionId: z.ZodString;
47
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
48
+ }, z.core.$strip>;
49
+ protected progress: McpProgressReporter;
50
+ protected clientActionKinds: Set<string>;
51
+ /** Skip-bind when the GLSP client doesn't speak `RequestExportAction`. */
52
+ canRegister(): boolean;
53
+ protected createResult({ timeoutMs }: DiagramSvgInput): Promise<McpResourceContent>;
54
+ }
55
+ //# sourceMappingURL=diagram-svg-mcp-resource-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-svg-mcp-resource-handler.d.ts","sourceRoot":"","sources":["../../../src/resources/handlers/diagram-svg-mcp-resource-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAGlF,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAgB,MAAM,iCAAiC,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iCAAiC,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEtG,eAAO,MAAM,qBAAqB;;;iBAQhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,qBACa,4BAA6B,SAAQ,iCAAiC,CAAC,eAAe,CAAC;IAChG,+GAA+G;IAC/G,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAQ;IAEnD,MAAM,CAAC,QAAQ,CAAC,IAAI,iBAAiB;IACrC,QAAQ,CAAC,IAAI,iBAAqC;IAClD,SAAkB,KAAK,uBAAuB;IAC9C,QAAQ,CAAC,WAAW,SAMiE;IACrF,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAmB;IACjD,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAmD;IAC/E,yGAAyG;IACzG,SAAkB,QAAQ,EAAE,IAAI,EAAE,CAAyB;IAC3D,0GAA0G;IAC1G,SAAkB,QAAQ,OAAO;IACjC,SAAkB,0BAA0B;;;sBAAyB;IAExC,SAAS,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IAE1C,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpE,0EAA0E;IACjE,WAAW,IAAI,OAAO;cAIf,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAU5F"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /********************************************************************************
3
+ * Copyright (c) 2026 EclipseSource and others.
4
+ *
5
+ * This program and the accompanying materials are made available under the
6
+ * terms of the Eclipse Public License v. 2.0 which is available at
7
+ * http://www.eclipse.org/legal/epl-2.0.
8
+ *
9
+ * This Source Code may also be made available under the following Secondary
10
+ * Licenses when the conditions for such availability set forth in the Eclipse
11
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ * with the GNU Classpath Exception which is available at
13
+ * https://www.gnu.org/software/classpath/license.html.
14
+ *
15
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
+ ********************************************************************************/
17
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
22
+ };
23
+ var __metadata = (this && this.__metadata) || function (k, v) {
24
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
+ };
26
+ var DiagramSvgMcpResourceHandler_1;
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.DiagramSvgMcpResourceHandler = exports.DiagramSvgInputSchema = void 0;
29
+ const server_1 = require("@eclipse-glsp/server");
30
+ const inversify_1 = require("inversify");
31
+ const z = require("zod/v4");
32
+ const mcp_handler_shared_1 = require("../../server/mcp-handler-shared");
33
+ const mcp_input_schemas_1 = require("../../server/mcp-input-schemas");
34
+ const mcp_progress_reporter_1 = require("../../server/mcp-progress-reporter");
35
+ const mcp_resource_handler_1 = require("../../server/mcp-resource-handler");
36
+ exports.DiagramSvgInputSchema = mcp_input_schemas_1.McpDiagramScopedInputSchema.extend({
37
+ timeoutMs: z
38
+ .number()
39
+ .int()
40
+ .min(100)
41
+ .max(60000)
42
+ .optional()
43
+ .describe('Override the default render timeout in milliseconds (100–60000). Useful for very large diagrams.')
44
+ });
45
+ /**
46
+ * Vector counterpart of {@link DiagramPngMcpResourceHandler}. Emits the diagram as raw SVG
47
+ * markup (text-encoded). No `width`/`height` knobs because SVG is vector — clients (and
48
+ * downstream rasterisers) scale it freely.
49
+ */
50
+ let DiagramSvgMcpResourceHandler = DiagramSvgMcpResourceHandler_1 = class DiagramSvgMcpResourceHandler extends mcp_resource_handler_1.AbstractMcpDiagramResourceHandler {
51
+ constructor() {
52
+ super(...arguments);
53
+ /** Default timeout (in ms) used when the call doesn't override `timeoutMs`. Override via subclass + rebind. */
54
+ this.defaultTimeoutMs = 5000;
55
+ this.name = DiagramSvgMcpResourceHandler_1.NAME;
56
+ this.title = 'Diagram Model SVG';
57
+ this.description = 'Render the session diagram as SVG markup of its current visible state. ' +
58
+ 'Vector format — scales without quality loss, ideal for embedding in documentation, ' +
59
+ 'further programmatic processing, or post-export rasterisation at arbitrary resolutions. ' +
60
+ 'Requires a connected frontend client to perform the render and is subject to a timeout if no response arrives. ' +
61
+ 'Use `diagram-png` instead when you need a ready-to-display raster image; ' +
62
+ '`diagram-model` is the structured-text alternative for content-only reasoning.';
63
+ this.mimeType = 'image/svg+xml';
64
+ this.uri = { template: 'glsp://diagrams/{sessionId}/svg' };
65
+ /** Both the user (visual artifact) and the assistant (visual reasoning) consume the rendered diagram. */
66
+ this.audience = ['user', 'assistant'];
67
+ /** Useful when relevant, but not always-relevant — clients may skip when text-only reasoning suffices. */
68
+ this.priority = 0.6;
69
+ this.toolAlternativeInputSchema = exports.DiagramSvgInputSchema;
70
+ }
71
+ /** Skip-bind when the GLSP client doesn't speak `RequestExportAction`. */
72
+ canRegister() {
73
+ return this.clientActionKinds.has(server_1.RequestExportAction.KIND);
74
+ }
75
+ async createResult({ timeoutMs }) {
76
+ // Best-effort beat for clients that opted in via `_meta.progressToken`; no-ops otherwise.
77
+ await this.progress.emit({ progress: 0, message: 'Awaiting client-side SVG render…' });
78
+ const response = await this.requestAction(server_1.RequestExportAction.create('svg'), timeoutMs !== null && timeoutMs !== void 0 ? timeoutMs : this.defaultTimeoutMs);
79
+ // SVG is text-encoded — base64 encoding here would mean an exporter mis-classified its payload.
80
+ if (response.encoding !== 'text') {
81
+ throw new mcp_handler_shared_1.McpToolError(`SVG export returned unexpected encoding '${response.encoding}'; expected 'text'.`);
82
+ }
83
+ return { text: response.data };
84
+ }
85
+ };
86
+ exports.DiagramSvgMcpResourceHandler = DiagramSvgMcpResourceHandler;
87
+ DiagramSvgMcpResourceHandler.NAME = 'diagram-svg';
88
+ __decorate([
89
+ (0, inversify_1.inject)(mcp_progress_reporter_1.McpProgressReporter),
90
+ __metadata("design:type", mcp_progress_reporter_1.McpProgressReporter)
91
+ ], DiagramSvgMcpResourceHandler.prototype, "progress", void 0);
92
+ __decorate([
93
+ (0, inversify_1.inject)(server_1.ClientActionKinds),
94
+ __metadata("design:type", Set)
95
+ ], DiagramSvgMcpResourceHandler.prototype, "clientActionKinds", void 0);
96
+ exports.DiagramSvgMcpResourceHandler = DiagramSvgMcpResourceHandler = DiagramSvgMcpResourceHandler_1 = __decorate([
97
+ (0, inversify_1.injectable)()
98
+ ], DiagramSvgMcpResourceHandler);
99
+ //# sourceMappingURL=diagram-svg-mcp-resource-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-svg-mcp-resource-handler.js","sourceRoot":"","sources":["../../../src/resources/handlers/diagram-svg-mcp-resource-handler.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;;;;;;;;;;;AAElF,iDAA8E;AAE9E,yCAA+C;AAC/C,4BAA4B;AAC5B,wEAAmF;AACnF,sEAA6E;AAE7E,8EAAyE;AACzE,4EAAsG;AAEzF,QAAA,qBAAqB,GAAG,+CAA2B,CAAC,MAAM,CAAC;IACpE,SAAS,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,GAAG,CAAC;SACR,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,kGAAkG,CAAC;CACpH,CAAC,CAAC;AAGH;;;;GAIG;AAEI,IAAM,4BAA4B,oCAAlC,MAAM,4BAA6B,SAAQ,wDAAkD;IAA7F;;QACH,+GAA+G;QAC5F,qBAAgB,GAAW,IAAI,CAAC;QAG1C,SAAI,GAAG,8BAA4B,CAAC,IAAI,CAAC;QAChC,UAAK,GAAG,mBAAmB,CAAC;QACrC,gBAAW,GAChB,yEAAyE;YACzE,qFAAqF;YACrF,0FAA0F;YAC1F,iHAAiH;YACjH,2EAA2E;YAC3E,gFAAgF,CAAC;QAC5E,aAAQ,GAAgB,eAAe,CAAC;QACxC,QAAG,GAAmB,EAAE,QAAQ,EAAE,iCAAiC,EAAE,CAAC;QAC/E,yGAAyG;QACvF,aAAQ,GAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3D,0GAA0G;QACxF,aAAQ,GAAG,GAAG,CAAC;QACf,+BAA0B,GAAG,6BAAqB,CAAC;IAqBzE,CAAC;IAfG,0EAA0E;IACjE,WAAW;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,4BAAmB,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAmB;QACvD,0FAA0F;QAC1F,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,4BAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjH,gGAAgG;QAChG,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,iCAAY,CAAC,4CAA4C,QAAQ,CAAC,QAAQ,qBAAqB,CAAC,CAAC;QAC/G,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;;AAxCQ,oEAA4B;AAIrB,iCAAI,GAAG,aAAa,AAAhB,CAAiB;AAkBE;IAAtC,IAAA,kBAAM,EAAC,2CAAmB,CAAC;8BAAqB,2CAAmB;8DAAC;AAEhC;IAApC,IAAA,kBAAM,EAAC,0BAAiB,CAAC;8BAA8B,GAAG;uEAAS;uCAxB3D,4BAA4B;IADxC,IAAA,sBAAU,GAAE;GACA,4BAA4B,CAyCxC"}
@@ -0,0 +1,65 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import { CreateOperationHandler, Logger, OperationHandlerRegistry } from '@eclipse-glsp/server';
17
+ /**
18
+ * A discoverable creatable element type emitted by the `element-types` tool handler. Adopters
19
+ * may add further passthrough fields beyond these — the tool handler's structured output schema
20
+ * is `loose()`.
21
+ *
22
+ * @experimental
23
+ */
24
+ export interface ElementTypeEntry {
25
+ id: string;
26
+ /** Human-readable display name for the element TYPE (e.g. `Manual Task`). */
27
+ label: string;
28
+ /** Adopter-supplied human-readable description; absent on the default scrape impl. */
29
+ description?: string;
30
+ /** Whether create-* / modify-* tools should pass a `text` arg for this type. Absent ⇒ unknown. */
31
+ acceptsText?: boolean;
32
+ }
33
+ /** Node + edge types creatable in a given diagram type. */
34
+ export interface ElementTypes {
35
+ nodeTypes: ElementTypeEntry[];
36
+ edgeTypes: ElementTypeEntry[];
37
+ }
38
+ /**
39
+ * Per-diagram-type provider of creatable element types. Bound on the diagram (per-GLSP-session)
40
+ * container so each diagram type can supply its own list. Adopters with explicit type info
41
+ * typically rebind to a constant-value provider; the default scrapes
42
+ * {@link OperationHandlerRegistry} for backwards compatibility with adopters that haven't
43
+ * declared their types yet.
44
+ *
45
+ * @experimental
46
+ */
47
+ export interface ElementTypesProvider {
48
+ get(): ElementTypes;
49
+ }
50
+ export declare const ElementTypesProvider: unique symbol;
51
+ /**
52
+ * Default {@link ElementTypesProvider} that scrapes the per-session {@link OperationHandlerRegistry}
53
+ * for {@link CreateNodeOperationHandler} / {@link CreateEdgeOperationHandler} instances and reads
54
+ * their `elementTypeIds`.
55
+ */
56
+ export declare class DefaultElementTypesProvider implements ElementTypesProvider {
57
+ protected operationHandlerRegistry: OperationHandlerRegistry;
58
+ protected logger: Logger;
59
+ /** Already-warned operation types, deduped so the warn fires once per type. */
60
+ protected readonly warnedTypes: Set<string>;
61
+ get(): ElementTypes;
62
+ /** Once-per-type warn when a `CreateOperationHandler` carries an unrecognized `operationType`. */
63
+ protected warnUnrecognizedOperationType(handler: CreateOperationHandler): void;
64
+ }
65
+ //# sourceMappingURL=element-types-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-types-provider.d.ts","sourceRoot":"","sources":["../../../src/resources/services/element-types-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAGlF,OAAO,EAGH,sBAAsB,EACtB,MAAM,EACN,wBAAwB,EAC3B,MAAM,sBAAsB,CAAC;AAG9B;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,SAAS,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACjC,GAAG,IAAI,YAAY,CAAC;CACvB;AACD,eAAO,MAAM,oBAAoB,eAAiC,CAAC;AAEnE;;;;GAIG;AACH,qBACa,2BAA4B,YAAW,oBAAoB;IAClC,SAAS,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;IAE/E,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAEzC,+EAA+E;IAC/E,SAAS,CAAC,QAAQ,CAAC,WAAW,cAAqB;IAEnD,GAAG,IAAI,YAAY;IAenB,kGAAkG;IAClG,SAAS,CAAC,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;CAWjF"}