@crypto512/jicon-mcp 1.0.4 → 1.1.1

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 (113) hide show
  1. package/README.md +40 -3
  2. package/TOOL_LIST.md +261 -140
  3. package/dist/config/constants.d.ts +2 -0
  4. package/dist/config/constants.d.ts.map +1 -1
  5. package/dist/config/constants.js +2 -0
  6. package/dist/config/constants.js.map +1 -1
  7. package/dist/config/loader.d.ts.map +1 -1
  8. package/dist/config/loader.js +2 -0
  9. package/dist/config/loader.js.map +1 -1
  10. package/dist/config/types.d.ts +6 -0
  11. package/dist/config/types.d.ts.map +1 -1
  12. package/dist/config/types.js +4 -0
  13. package/dist/config/types.js.map +1 -1
  14. package/dist/confluence/client.d.ts +11 -2
  15. package/dist/confluence/client.d.ts.map +1 -1
  16. package/dist/confluence/client.js +29 -12
  17. package/dist/confluence/client.js.map +1 -1
  18. package/dist/confluence/tools.d.ts +2 -2
  19. package/dist/confluence/tools.d.ts.map +1 -1
  20. package/dist/confluence/tools.js +95 -58
  21. package/dist/confluence/tools.js.map +1 -1
  22. package/dist/index.js +17 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/jira/client.d.ts.map +1 -1
  25. package/dist/jira/client.js +3 -13
  26. package/dist/jira/client.js.map +1 -1
  27. package/dist/jira/tools.d.ts.map +1 -1
  28. package/dist/jira/tools.js +9 -30
  29. package/dist/jira/tools.js.map +1 -1
  30. package/dist/permissions/tool-registry.d.ts +4 -2
  31. package/dist/permissions/tool-registry.d.ts.map +1 -1
  32. package/dist/permissions/tool-registry.js +14 -2
  33. package/dist/permissions/tool-registry.js.map +1 -1
  34. package/dist/tempo/formatters.d.ts.map +1 -1
  35. package/dist/tempo/formatters.js +1 -16
  36. package/dist/tempo/formatters.js.map +1 -1
  37. package/dist/tempo/tools.d.ts +2 -2
  38. package/dist/tempo/tools.d.ts.map +1 -1
  39. package/dist/tempo/tools.js +5 -13
  40. package/dist/tempo/tools.js.map +1 -1
  41. package/dist/utils/buffer-tools.d.ts +115 -63
  42. package/dist/utils/buffer-tools.d.ts.map +1 -1
  43. package/dist/utils/buffer-tools.js +385 -388
  44. package/dist/utils/buffer-tools.js.map +1 -1
  45. package/dist/utils/content-buffer.d.ts +24 -1
  46. package/dist/utils/content-buffer.d.ts.map +1 -1
  47. package/dist/utils/content-buffer.js +49 -39
  48. package/dist/utils/content-buffer.js.map +1 -1
  49. package/dist/utils/jicon-help.d.ts +5 -5
  50. package/dist/utils/jicon-help.d.ts.map +1 -1
  51. package/dist/utils/jicon-help.js +258 -588
  52. package/dist/utils/jicon-help.js.map +1 -1
  53. package/dist/utils/plantuml/client.d.ts +1 -1
  54. package/dist/utils/plantuml/client.d.ts.map +1 -1
  55. package/dist/utils/plantuml/client.js +34 -59
  56. package/dist/utils/plantuml/client.js.map +1 -1
  57. package/dist/utils/plantuml/docker-manager.d.ts +3 -1
  58. package/dist/utils/plantuml/docker-manager.d.ts.map +1 -1
  59. package/dist/utils/plantuml/docker-manager.js +6 -2
  60. package/dist/utils/plantuml/docker-manager.js.map +1 -1
  61. package/dist/utils/plantuml/include-expander.d.ts +32 -0
  62. package/dist/utils/plantuml/include-expander.d.ts.map +1 -0
  63. package/dist/utils/plantuml/include-expander.js +129 -0
  64. package/dist/utils/plantuml/include-expander.js.map +1 -0
  65. package/dist/utils/plantuml/index.d.ts +2 -1
  66. package/dist/utils/plantuml/index.d.ts.map +1 -1
  67. package/dist/utils/plantuml/index.js +3 -1
  68. package/dist/utils/plantuml/index.js.map +1 -1
  69. package/dist/utils/plantuml/service.d.ts +32 -8
  70. package/dist/utils/plantuml/service.d.ts.map +1 -1
  71. package/dist/utils/plantuml/service.js +108 -15
  72. package/dist/utils/plantuml/service.js.map +1 -1
  73. package/dist/utils/plantuml/tools.d.ts +4 -4
  74. package/dist/utils/plantuml/tools.d.ts.map +1 -1
  75. package/dist/utils/plantuml/tools.js +50 -5
  76. package/dist/utils/plantuml/tools.js.map +1 -1
  77. package/dist/utils/plantuml/types.d.ts +4 -4
  78. package/dist/utils/plantuml/validation-helper.d.ts +33 -0
  79. package/dist/utils/plantuml/validation-helper.d.ts.map +1 -0
  80. package/dist/utils/plantuml/validation-helper.js +97 -0
  81. package/dist/utils/plantuml/validation-helper.js.map +1 -0
  82. package/dist/utils/response-formatter.js +7 -7
  83. package/dist/utils/response-formatter.js.map +1 -1
  84. package/dist/utils/time-formatter.d.ts +10 -0
  85. package/dist/utils/time-formatter.d.ts.map +1 -0
  86. package/dist/utils/time-formatter.js +22 -0
  87. package/dist/utils/time-formatter.js.map +1 -0
  88. package/dist/utils/xhtml/error-locator.d.ts +70 -0
  89. package/dist/utils/xhtml/error-locator.d.ts.map +1 -0
  90. package/dist/utils/xhtml/error-locator.js +229 -0
  91. package/dist/utils/xhtml/error-locator.js.map +1 -0
  92. package/dist/utils/xhtml/index.d.ts +6 -3
  93. package/dist/utils/xhtml/index.d.ts.map +1 -1
  94. package/dist/utils/xhtml/index.js +7 -3
  95. package/dist/utils/xhtml/index.js.map +1 -1
  96. package/dist/utils/xhtml/operations.d.ts +54 -0
  97. package/dist/utils/xhtml/operations.d.ts.map +1 -1
  98. package/dist/utils/xhtml/operations.js +205 -0
  99. package/dist/utils/xhtml/operations.js.map +1 -1
  100. package/dist/utils/xhtml/plantuml.d.ts +1 -1
  101. package/dist/utils/xhtml/plantuml.d.ts.map +1 -1
  102. package/dist/utils/xhtml/plantuml.js +19 -30
  103. package/dist/utils/xhtml/plantuml.js.map +1 -1
  104. package/dist/utils/xhtml/serializer.d.ts +5 -0
  105. package/dist/utils/xhtml/serializer.d.ts.map +1 -1
  106. package/dist/utils/xhtml/serializer.js +18 -4
  107. package/dist/utils/xhtml/serializer.js.map +1 -1
  108. package/dist/utils/xhtml/types.d.ts +3 -3
  109. package/dist/utils/xhtml/types.d.ts.map +1 -1
  110. package/dist/utils/xhtml/validator.d.ts.map +1 -1
  111. package/dist/utils/xhtml/validator.js +87 -4
  112. package/dist/utils/xhtml/validator.js.map +1 -1
  113. package/package.json +1 -1
@@ -2,10 +2,12 @@
2
2
  * PlantUML Service
3
3
  *
4
4
  * Unified service facade for PlantUML operations.
5
- * Handles lazy container initialization and provides high-level API.
5
+ * Handles eager container initialization at MCP startup and provides high-level API.
6
+ * Does NOT auto-restart if container dies - requires MCP restart.
6
7
  */
7
- import { ensureContainer, stopContainer, getContainerState } from "./docker-manager.js";
8
+ import { startContainer, stopContainer, getContainerState } from "./docker-manager.js";
8
9
  import { PlantUmlClient, normalizePlantUml, detectDiagramType } from "./client.js";
10
+ import { expandIncludes } from "./include-expander.js";
9
11
  import { DEFAULT_PLANTUML_CONFIG } from "./types.js";
10
12
  /**
11
13
  * Cached client instance
@@ -15,6 +17,14 @@ let clientInstance = null;
15
17
  * Service configuration
16
18
  */
17
19
  let serviceConfig = { ...DEFAULT_PLANTUML_CONFIG };
20
+ /**
21
+ * Service state flags
22
+ */
23
+ let dockerDisabled = false;
24
+ let startupFailed = false;
25
+ let startupError = null;
26
+ let containerDied = false;
27
+ let includeExpansionEnabled = true; // Enable !include expansion by default
18
28
  /**
19
29
  * Configure the PlantUML service
20
30
  */
@@ -22,55 +32,137 @@ export function configure(config) {
22
32
  serviceConfig = { ...DEFAULT_PLANTUML_CONFIG, ...config };
23
33
  // Reset client to pick up new config
24
34
  clientInstance = null;
35
+ // Configure include expansion
36
+ if (config.includeExpansion !== undefined) {
37
+ includeExpansionEnabled = config.includeExpansion;
38
+ }
25
39
  }
26
40
  /**
27
- * Get or create the PlantUML client (starts container if needed)
41
+ * Initialize PlantUML service at MCP startup.
42
+ * Returns success/failure status. Does not throw.
43
+ */
44
+ export async function initializePlantUml(options = {}) {
45
+ // Reset state flags
46
+ dockerDisabled = false;
47
+ startupFailed = false;
48
+ startupError = null;
49
+ containerDied = false;
50
+ if (options.disabled) {
51
+ dockerDisabled = true;
52
+ return { success: true, disabled: true };
53
+ }
54
+ try {
55
+ const state = await startContainer(serviceConfig);
56
+ return {
57
+ success: true,
58
+ containerId: state.containerId,
59
+ port: state.port,
60
+ };
61
+ }
62
+ catch (error) {
63
+ startupFailed = true;
64
+ startupError = error instanceof Error ? error.message : String(error);
65
+ return {
66
+ success: false,
67
+ error: startupError,
68
+ };
69
+ }
70
+ }
71
+ /**
72
+ * Check if PlantUML service can be used.
73
+ * Returns error message if not available, null if available.
74
+ */
75
+ export function getUnavailableReason() {
76
+ if (dockerDisabled) {
77
+ return "PlantUML is disabled (disableDocker: true in config)";
78
+ }
79
+ if (startupFailed) {
80
+ return `PlantUML failed to start: ${startupError}`;
81
+ }
82
+ if (containerDied) {
83
+ return "PlantUML container has stopped. Restart the MCP server to retry.";
84
+ }
85
+ return null;
86
+ }
87
+ /**
88
+ * Get or create the PlantUML client
89
+ * Does NOT auto-restart if container died - throws error instead
28
90
  */
29
91
  async function getClient() {
92
+ // Check if service is unavailable
93
+ const unavailableReason = getUnavailableReason();
94
+ if (unavailableReason) {
95
+ throw new Error(unavailableReason);
96
+ }
30
97
  // Check if we have a valid client
31
98
  if (clientInstance) {
32
99
  const healthy = await clientInstance.healthCheck();
33
100
  if (healthy) {
34
101
  return clientInstance;
35
102
  }
36
- // Client unhealthy, reset and recreate
103
+ // Container died, mark it and throw error (no auto-restart)
37
104
  clientInstance = null;
105
+ containerDied = true;
106
+ throw new Error("PlantUML container has stopped. Restart the MCP server to retry.");
107
+ }
108
+ // Client not created yet - create from existing container state
109
+ const state = getContainerState();
110
+ if (!state?.ready) {
111
+ throw new Error("PlantUML container is not running");
38
112
  }
39
- // Ensure container is running
40
- const state = await ensureContainer(serviceConfig);
41
- // Create new client
42
113
  clientInstance = new PlantUmlClient(state.baseUrl, serviceConfig.requestTimeout);
43
114
  return clientInstance;
44
115
  }
45
116
  /**
46
117
  * Validate PlantUML syntax
47
- *
48
- * Starts the Docker container on first call if not already running.
118
+ * Expands !include directives for validation but returns original code
49
119
  */
50
120
  export async function validate(code) {
51
121
  const client = await getClient();
52
- return client.validate(code);
122
+ // Expand includes for validation (so C4/AWS/Azure macros work)
123
+ const codeToValidate = includeExpansionEnabled
124
+ ? await expandIncludes(code)
125
+ : code;
126
+ const result = await client.validate(codeToValidate);
127
+ // Return ORIGINAL code as normalizedCode (expansion happens at Confluence send)
128
+ result.normalizedCode = normalizePlantUml(code);
129
+ return result;
53
130
  }
54
131
  /**
55
132
  * Render PlantUML diagram to specified format
56
- *
57
- * Starts the Docker container on first call if not already running.
133
+ * Expands !include directives before rendering
58
134
  */
59
135
  export async function render(code, format) {
60
136
  const client = await getClient();
61
- return client.render(code, format);
137
+ // Must expand includes for rendering to work
138
+ const codeToRender = includeExpansionEnabled
139
+ ? await expandIncludes(code)
140
+ : code;
141
+ return client.render(codeToRender, format);
62
142
  }
63
143
  /**
64
- * Check if PlantUML service is available (container running)
144
+ * Check if PlantUML service is available (container running and healthy)
65
145
  */
66
146
  export function isAvailable() {
147
+ if (dockerDisabled || startupFailed || containerDied) {
148
+ return false;
149
+ }
67
150
  const state = getContainerState();
68
151
  return state?.ready ?? false;
69
152
  }
70
153
  /**
71
- * Get current service status
154
+ * Get current service status with detailed state info
72
155
  */
73
156
  export function getStatus() {
157
+ if (dockerDisabled) {
158
+ return { available: false, disabled: true };
159
+ }
160
+ if (startupFailed) {
161
+ return { available: false, startupFailed: true, error: startupError || undefined };
162
+ }
163
+ if (containerDied) {
164
+ return { available: false, containerDied: true };
165
+ }
74
166
  const state = getContainerState();
75
167
  if (!state?.ready) {
76
168
  return { available: false };
@@ -93,4 +185,5 @@ export async function shutdown() {
93
185
  * Re-export utility functions for convenience
94
186
  */
95
187
  export { normalizePlantUml, detectDiagramType };
188
+ export { expandPlantUmlInXhtml } from "./include-expander.js";
96
189
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/utils/plantuml/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD;;GAEG;AACH,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD;;GAEG;AACH,IAAI,aAAa,GAA6B,EAAE,GAAG,uBAAuB,EAAE,CAAC;AAE7E;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAsB;IAC9C,aAAa,GAAG,EAAE,GAAG,uBAAuB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1D,qCAAqC;IACrC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS;IACtB,kCAAkC;IAClC,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,uCAAuC;QACvC,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,8BAA8B;IAC9B,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;IAEnD,oBAAoB;IACpB,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAEjF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAY,EACZ,MAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,OAAO,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IAMvB,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QAClB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO;QACL,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,cAAc,GAAG,IAAI,CAAC;IACtB,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/utils/plantuml/service.ts"],"names":[],"mappings":"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"}
@@ -16,11 +16,11 @@ export declare function createPlantUmlTools(): {
16
16
  code: z.ZodOptional<z.ZodString>;
17
17
  bufferId: z.ZodOptional<z.ZodString>;
18
18
  }, "strip", z.ZodTypeAny, {
19
- bufferId?: string | undefined;
20
19
  code?: string | undefined;
21
- }, {
22
20
  bufferId?: string | undefined;
21
+ }, {
23
22
  code?: string | undefined;
23
+ bufferId?: string | undefined;
24
24
  }>;
25
25
  handler: (args: {
26
26
  code?: string;
@@ -36,12 +36,12 @@ export declare function createPlantUmlTools(): {
36
36
  maxWidth: z.ZodOptional<z.ZodNumber>;
37
37
  }, "strip", z.ZodTypeAny, {
38
38
  format: "ascii" | "png" | "svg" | "eps";
39
- bufferId?: string | undefined;
40
39
  code?: string | undefined;
40
+ bufferId?: string | undefined;
41
41
  maxWidth?: number | undefined;
42
42
  }, {
43
- bufferId?: string | undefined;
44
43
  code?: string | undefined;
44
+ bufferId?: string | undefined;
45
45
  format?: "ascii" | "png" | "svg" | "eps" | undefined;
46
46
  maxWidth?: number | undefined;
47
47
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/utils/plantuml/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAIzE,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AA2CpB;;GAEG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;;wBAkBP;YACpB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,KAAG,OAAO,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;wBAsHL;YACpB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,MAAM,CAAC,EAAE,YAAY,CAAC;YACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,KAAG,OAAO,CAAC,cAAc,CAAC;;;;;uBAsFR,OAAO,CAAC,cAAc,CAAC;;EAqB/C;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,sEAIjB,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/utils/plantuml/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAIzE,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AA2CpB;;GAEG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;;wBAkBP;YACpB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,KAAG,OAAO,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;wBAmIL;YACpB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,MAAM,CAAC,EAAE,YAAY,CAAC;YACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,KAAG,OAAO,CAAC,cAAc,CAAC;;;;;uBAmGR,OAAO,CAAC,cAAc,CAAC;;EA6C/C;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,sEAIjB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  import { z } from "zod";
7
7
  import { formatSuccess, formatError } from "../response-formatter.js";
8
8
  import { contentBuffer } from "../content-buffer.js";
9
- import { validate, render, getStatus } from "./service.js";
9
+ import { validate, render, getStatus, getUnavailableReason } from "./service.js";
10
10
  import { PlantUmlValidateInputSchema, PlantUmlRenderInputSchema, } from "./types.js";
11
11
  /**
12
12
  * Maximum inline content size before buffering (16KB)
@@ -62,10 +62,22 @@ Validate ONE diagram at a time. Do not pass full document content.
62
62
  Example:
63
63
  plantuml_validate(code="@startuml\\nA -> B: message\\n@enduml")
64
64
 
65
- Workflow: validate → then buffer_edit_xhtml with insert-plantuml
65
+ Workflow: validate → then buffer_edit with plantuml parameter
66
66
  For syntax help: help(topic="plantuml")`,
67
67
  inputSchema: PlantUmlValidateInputSchema,
68
68
  handler: async (args) => {
69
+ // Check if PlantUML is available
70
+ const unavailableReason = getUnavailableReason();
71
+ if (unavailableReason) {
72
+ return formatError({
73
+ error: true,
74
+ message: unavailableReason,
75
+ statusCode: 503,
76
+ details: {
77
+ hint: "Check MCP server logs for PlantUML startup errors.",
78
+ },
79
+ });
80
+ }
69
81
  try {
70
82
  const code = resolveCode(args);
71
83
  // Detect if this is full document content rather than a single PlantUML diagram
@@ -170,6 +182,18 @@ Example:
170
182
  plantuml_render(code="...", format="ascii", maxWidth=80)`,
171
183
  inputSchema: PlantUmlRenderInputSchema,
172
184
  handler: async (args) => {
185
+ // Check if PlantUML is available
186
+ const unavailableReason = getUnavailableReason();
187
+ if (unavailableReason) {
188
+ return formatError({
189
+ error: true,
190
+ message: unavailableReason,
191
+ statusCode: 503,
192
+ details: {
193
+ hint: "Check MCP server logs for PlantUML startup errors.",
194
+ },
195
+ });
196
+ }
173
197
  try {
174
198
  let code = resolveCode(args);
175
199
  const format = args.format || "svg";
@@ -239,10 +263,32 @@ Example:
239
263
  plantuml_status: {
240
264
  description: `Check if PlantUML rendering is available.
241
265
 
242
- Returns availability status. The service starts automatically on first use of plantuml_validate or plantuml_render.`,
266
+ Returns availability status and detailed state information.`,
243
267
  inputSchema: z.object({}),
244
268
  handler: async () => {
245
269
  const status = getStatus();
270
+ if (status.disabled) {
271
+ return formatSuccess({
272
+ available: false,
273
+ disabled: true,
274
+ message: "PlantUML is disabled (disableDocker: true in config)",
275
+ });
276
+ }
277
+ if (status.startupFailed) {
278
+ return formatSuccess({
279
+ available: false,
280
+ startupFailed: true,
281
+ error: status.error,
282
+ message: "PlantUML failed to start. Check Docker configuration.",
283
+ });
284
+ }
285
+ if (status.containerDied) {
286
+ return formatSuccess({
287
+ available: false,
288
+ containerDied: true,
289
+ message: "PlantUML container stopped. Restart MCP server to retry.",
290
+ });
291
+ }
246
292
  if (status.available) {
247
293
  return formatSuccess({
248
294
  available: true,
@@ -254,8 +300,7 @@ Returns availability status. The service starts automatically on first use of pl
254
300
  }
255
301
  return formatSuccess({
256
302
  available: false,
257
- message: "PlantUML service not started (will start on first use)",
258
- hint: "Call plantuml_validate or plantuml_render to start the service",
303
+ message: "PlantUML service status unknown",
259
304
  });
260
305
  },
261
306
  },
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/utils/plantuml/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/utils/plantuml/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAE1B,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;AAElC;;GAEG;AACH,SAAS,WAAW,CAAC,IAA0C;IAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAY,EAAE,QAAgB;IACpD,MAAM,SAAS,GAAG,4BAA4B,QAAQ,EAAE,CAAC;IACzD,4DAA4D;IAC5D,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,yCAAyC;IACzC,OAAO,GAAG,SAAS,KAAK,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,iBAAiB,EAAE;YACjB,WAAW,EAAE;;;;;;;;;;;;;wCAaqB;YAClC,WAAW,EAAE,2BAA2B;YACxC,OAAO,EAAE,KAAK,EAAE,IAGf,EAA2B,EAAE;gBAC5B,iCAAiC;gBACjC,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;gBACjD,IAAI,iBAAiB,EAAE,CAAC;oBACtB,OAAO,WAAW,CAAC;wBACjB,KAAK,EAAE,IAAI;wBACX,OAAO,EAAE,iBAAiB;wBAC1B,UAAU,EAAE,GAAG;wBACf,OAAO,EAAE;4BACP,IAAI,EAAE,oDAAoD;yBAC3D;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;oBAE/B,gFAAgF;oBAChF,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9C,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,uEAAuE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;oBAExH,IAAI,kBAAkB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;wBAC3C,OAAO,WAAW,CAAC;4BACjB,KAAK,EAAE,IAAI;4BACX,OAAO,EAAE,qEAAqE;4BAC9E,UAAU,EAAE,GAAG;4BACf,OAAO,EAAE;gCACP,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB,YAAY,GAAG;gCACzF,IAAI,EAAE,wHAAwH;6BAC/H;yBACF,CAAC,CAAC;oBACL,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAEpC,oDAAoD;oBACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;oBAEnE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,8BAA8B;wBAC9B,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;4BAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;gCAC1D,IAAI,EAAE,mBAAmB;gCACzB,WAAW,EAAE,MAAM,CAAC,WAAW;6BAChC,CAAC,CAAC;4BACH,OAAO,aAAa,CAAC;gCACnB,KAAK,EAAE,IAAI;gCACX,QAAQ;gCACR,kBAAkB,EAAE,QAAQ;gCAC5B,WAAW,EAAE,MAAM,CAAC,WAAW;gCAC/B,OAAO,EAAE,SAAS,MAAM,CAAC,WAAW,IAAI,SAAS,sCAAsC;gCACvF,IAAI,EAAE,iDAAiD;6BACxD,CAAC,CAAC;wBACL,CAAC;wBAED,OAAO,aAAa,CAAC;4BACnB,KAAK,EAAE,IAAI;4BACX,cAAc,EAAE,MAAM,CAAC,cAAc;4BACrC,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,OAAO,EAAE,SAAS,MAAM,CAAC,WAAW,IAAI,SAAS,UAAU;yBAC5D,CAAC,CAAC;oBACL,CAAC;oBAED,0CAA0C;oBAC1C,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;wBAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;4BAC1D,IAAI,EAAE,mBAAmB;4BACzB,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,KAAK,EAAE,KAAK;yBACb,CAAC,CAAC;wBACH,OAAO,aAAa,CAAC;4BACnB,KAAK,EAAE,KAAK;4BACZ,QAAQ;4BACR,kBAAkB,EAAE,QAAQ;4BAC5B,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,OAAO,EAAE,oBAAoB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,eAAe,EAAE;4BAC7E,IAAI,EAAE,kDAAkD;yBACzD,CAAC,CAAC;oBACL,CAAC;oBAED,OAAO,aAAa,CAAC;wBACnB,KAAK,EAAE,KAAK;wBACZ,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,OAAO,EAAE,oBAAoB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,eAAe,EAAE;wBAC7E,IAAI,EAAE,kDAAkD;qBACzD,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,uCAAuC;oBACvC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAEvE,IACE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;wBAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC1B,CAAC;wBACD,OAAO,WAAW,CAAC;4BACjB,KAAK,EAAE,IAAI;4BACX,OAAO,EAAE,0DAA0D;4BACnE,UAAU,EAAE,GAAG;4BACf,OAAO,EAAE;gCACP,aAAa,EAAE,OAAO;gCACtB,IAAI,EAAE,wCAAwC;6BAC/C;yBACF,CAAC,CAAC;oBACL,CAAC;oBAED,OAAO,WAAW,CAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CACpD,CAAC;gBACJ,CAAC;YACH,CAAC;SACF;QAED,eAAe,EAAE;YACf,WAAW,EAAE;;;;;;;;;;;;2DAYwC;YACrD,WAAW,EAAE,yBAAyB;YACtC,OAAO,EAAE,KAAK,EAAE,IAKf,EAA2B,EAAE;gBAC5B,iCAAiC;gBACjC,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;gBACjD,IAAI,iBAAiB,EAAE,CAAC;oBACtB,OAAO,WAAW,CAAC;wBACjB,KAAK,EAAE,IAAI;wBACX,OAAO,EAAE,iBAAiB;wBAC1B,UAAU,EAAE,GAAG;wBACf,OAAO,EAAE;4BACP,IAAI,EAAE,oDAAoD;yBAC3D;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC;oBACH,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;oBAEpC,mCAAmC;oBACnC,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACxC,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7C,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAE1C,yDAAyD;oBACzD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,GAAG,eAAe,EAAE,CAAC;wBACpD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;4BACnD,IAAI,EAAE,iBAAiB;4BACvB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,WAAW,EAAE,MAAM,CAAC,WAAW;yBAChC,CAAC,CAAC;wBAEH,MAAM,IAAI,GACR,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK;4BAClC,CAAC,CAAC,iFAAiF;4BACnF,CAAC,CAAC,0CAA0C,CAAC;wBAEjD,OAAO,aAAa,CAAC;4BACnB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,QAAQ;4BACR,OAAO,EAAE,YAAY,MAAM,yBAAyB;4BACpD,IAAI;yBACL,CAAC,CAAC;oBACL,CAAC;oBAED,OAAO,aAAa,CAAC;wBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;qBACxB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAEvE,0CAA0C;oBAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;wBACzE,OAAO,WAAW,CAAC;4BACjB,KAAK,EAAE,IAAI;4BACX,OAAO,EAAE,oDAAoD;4BAC7D,UAAU,EAAE,GAAG;4BACf,OAAO,EAAE;gCACP,aAAa,EAAE,OAAO;gCACtB,IAAI,EAAE,6CAA6C;6BACpD;yBACF,CAAC,CAAC;oBACL,CAAC;oBAED,kCAAkC;oBAClC,IACE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;wBAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC1B,CAAC;wBACD,OAAO,WAAW,CAAC;4BACjB,KAAK,EAAE,IAAI;4BACX,OAAO,EAAE,0DAA0D;4BACnE,UAAU,EAAE,GAAG;4BACf,OAAO,EAAE;gCACP,aAAa,EAAE,OAAO;gCACtB,IAAI,EAAE,wCAAwC;6BAC/C;yBACF,CAAC,CAAC;oBACL,CAAC;oBAED,OAAO,WAAW,CAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CACpD,CAAC;gBACJ,CAAC;YACH,CAAC;SACF;QAED,eAAe,EAAE;YACf,WAAW,EAAE;;4DAEyC;YACtD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,IAA6B,EAAE;gBAC3C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAE3B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,aAAa,CAAC;wBACnB,SAAS,EAAE,KAAK;wBAChB,QAAQ,EAAE,IAAI;wBACd,OAAO,EAAE,sDAAsD;qBAChE,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBACzB,OAAO,aAAa,CAAC;wBACnB,SAAS,EAAE,KAAK;wBAChB,aAAa,EAAE,IAAI;wBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,OAAO,EAAE,uDAAuD;qBACjE,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBACzB,OAAO,aAAa,CAAC;wBACnB,SAAS,EAAE,KAAK;wBAChB,aAAa,EAAE,IAAI;wBACnB,OAAO,EAAE,0DAA0D;qBACpE,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,OAAO,aAAa,CAAC;wBACnB,SAAS,EAAE,IAAI;wBACf,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,OAAO,EAAE,6BAA6B;qBACvC,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,aAAa,CAAC;oBACnB,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,iCAAiC;iBAC3C,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;CACT,CAAC"}
@@ -101,11 +101,11 @@ export declare const PlantUmlValidateInputSchema: z.ZodObject<{
101
101
  code: z.ZodOptional<z.ZodString>;
102
102
  bufferId: z.ZodOptional<z.ZodString>;
103
103
  }, "strip", z.ZodTypeAny, {
104
- bufferId?: string | undefined;
105
104
  code?: string | undefined;
106
- }, {
107
105
  bufferId?: string | undefined;
106
+ }, {
108
107
  code?: string | undefined;
108
+ bufferId?: string | undefined;
109
109
  }>;
110
110
  /**
111
111
  * Schema for plantuml_render tool input
@@ -118,12 +118,12 @@ export declare const PlantUmlRenderInputSchema: z.ZodObject<{
118
118
  maxWidth: z.ZodOptional<z.ZodNumber>;
119
119
  }, "strip", z.ZodTypeAny, {
120
120
  format: "ascii" | "png" | "svg" | "eps";
121
- bufferId?: string | undefined;
122
121
  code?: string | undefined;
122
+ bufferId?: string | undefined;
123
123
  maxWidth?: number | undefined;
124
124
  }, {
125
- bufferId?: string | undefined;
126
125
  code?: string | undefined;
126
+ bufferId?: string | undefined;
127
127
  format?: "ascii" | "png" | "svg" | "eps" | undefined;
128
128
  maxWidth?: number | undefined;
129
129
  }>;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * PlantUML validation helper
3
+ *
4
+ * Consolidates the repeated validation logic from buffer-tools.ts
5
+ * into a single reusable function.
6
+ *
7
+ * Requires Docker-based validation - returns error if unavailable.
8
+ */
9
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
10
+ /**
11
+ * Result of PlantUML validation
12
+ */
13
+ export interface PlantUmlValidationResult {
14
+ valid: true;
15
+ normalizedCode: string;
16
+ diagramType?: string;
17
+ }
18
+ export interface PlantUmlValidationError {
19
+ valid: false;
20
+ error: CallToolResult;
21
+ }
22
+ export type PlantUmlValidation = PlantUmlValidationResult | PlantUmlValidationError;
23
+ /**
24
+ * Validate PlantUML code using Docker-based validation.
25
+ *
26
+ * Returns error if PlantUML service is unavailable (disabled, failed to start, or container died).
27
+ * Returns either normalized code + diagram type, or a formatted error response.
28
+ */
29
+ export declare function validatePlantUmlWithFallback(code: string, operation: "insert-plantuml" | "update-plantuml", targetInfo?: {
30
+ selector?: string;
31
+ semanticPosition?: string;
32
+ }): Promise<PlantUmlValidation>;
33
+ //# sourceMappingURL=validation-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-helper.d.ts","sourceRoot":"","sources":["../../../src/utils/plantuml/validation-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAIzE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,IAAI,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,MAAM,kBAAkB,GAAG,wBAAwB,GAAG,uBAAuB,CAAC;AAEpF;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,GAAG,iBAAiB,EAChD,UAAU,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,OAAO,CAAC,kBAAkB,CAAC,CAkF7B"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * PlantUML validation helper
3
+ *
4
+ * Consolidates the repeated validation logic from buffer-tools.ts
5
+ * into a single reusable function.
6
+ *
7
+ * Requires Docker-based validation - returns error if unavailable.
8
+ */
9
+ import { formatError } from "../response-formatter.js";
10
+ import { validate as validatePlantUmlWithDocker, getUnavailableReason } from "./service.js";
11
+ /**
12
+ * Validate PlantUML code using Docker-based validation.
13
+ *
14
+ * Returns error if PlantUML service is unavailable (disabled, failed to start, or container died).
15
+ * Returns either normalized code + diagram type, or a formatted error response.
16
+ */
17
+ export async function validatePlantUmlWithFallback(code, operation, targetInfo) {
18
+ const codePreview = code.length > 200 ? code.substring(0, 200) + "..." : code;
19
+ const targetPosition = operation === "insert-plantuml"
20
+ ? targetInfo?.semanticPosition || targetInfo?.selector
21
+ : targetInfo?.selector;
22
+ const actionVerb = operation === "insert-plantuml" ? "insert" : "update with";
23
+ // Check if PlantUML is unavailable
24
+ const unavailableReason = getUnavailableReason();
25
+ if (unavailableReason) {
26
+ return {
27
+ valid: false,
28
+ error: formatError({
29
+ error: true,
30
+ message: `PlantUML validation unavailable: ${unavailableReason}`,
31
+ statusCode: 503,
32
+ details: {
33
+ operation,
34
+ codePreview,
35
+ ...(operation === "insert-plantuml"
36
+ ? { targetPosition }
37
+ : { targetSelector: targetInfo?.selector }),
38
+ hint: "PlantUML diagrams cannot be validated. Fix the Docker configuration or restart the MCP server.",
39
+ },
40
+ }),
41
+ };
42
+ }
43
+ const recoverySteps = [
44
+ "1. Use plantuml_validate(code=...) to check syntax separately",
45
+ "2. Fix the PlantUML code based on the errors above",
46
+ "3. Retry buffer_edit with corrected code",
47
+ ];
48
+ // Use Docker-based validation
49
+ try {
50
+ const dockerValidation = await validatePlantUmlWithDocker(code);
51
+ if (!dockerValidation.valid) {
52
+ return {
53
+ valid: false,
54
+ error: formatError({
55
+ error: true,
56
+ message: `PlantUML syntax error - cannot ${actionVerb} invalid diagram`,
57
+ statusCode: 400,
58
+ details: {
59
+ operation,
60
+ plantumlErrors: dockerValidation.errors,
61
+ diagramType: dockerValidation.diagramType,
62
+ codePreview,
63
+ ...(operation === "insert-plantuml"
64
+ ? { targetPosition }
65
+ : { targetSelector: targetInfo?.selector }),
66
+ recovery: recoverySteps,
67
+ },
68
+ }),
69
+ };
70
+ }
71
+ return {
72
+ valid: true,
73
+ normalizedCode: dockerValidation.normalizedCode,
74
+ diagramType: dockerValidation.diagramType,
75
+ };
76
+ }
77
+ catch (error) {
78
+ // Docker error - return error (no fallback)
79
+ return {
80
+ valid: false,
81
+ error: formatError({
82
+ error: true,
83
+ message: `PlantUML validation failed: ${error instanceof Error ? error.message : String(error)}`,
84
+ statusCode: 503,
85
+ details: {
86
+ operation,
87
+ codePreview,
88
+ ...(operation === "insert-plantuml"
89
+ ? { targetPosition }
90
+ : { targetSelector: targetInfo?.selector }),
91
+ hint: "PlantUML service is unavailable. Restart the MCP server or check Docker configuration.",
92
+ },
93
+ }),
94
+ };
95
+ }
96
+ }
97
+ //# sourceMappingURL=validation-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-helper.js","sourceRoot":"","sources":["../../../src/utils/plantuml/validation-helper.ts"],"names":[],"mappings":"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"}
@@ -38,15 +38,15 @@ export function formatSuccess(data, metadata) {
38
38
  metadata?.resourceType === "confluence_draft";
39
39
  const editHint = isConfluence
40
40
  ? {
41
- edit_xhtml: {
42
- tool: "buffer_edit_xhtml",
43
- args: { bufferId, operation: "update", selector: "p", content: "<p>new</p>" },
44
- description: "Structure-aware editing for tables, macros, layouts. Call help(topic=\"storage\") for guide."
41
+ edit_by_id: {
42
+ tool: "buffer_edit",
43
+ args: { bufferId, after: 1, content: "<p>new paragraph</p>" },
44
+ description: "Insert/replace by element ID. Use buffer_get_structure to see IDs."
45
45
  },
46
- edit_text: {
46
+ edit_plantuml: {
47
47
  tool: "buffer_edit",
48
- args: { bufferId, old_string: "old", new_string: "new" },
49
- description: "Simple text replacement"
48
+ args: { bufferId, after: 1, plantuml: "@startuml...@enduml" },
49
+ description: "Insert PlantUML diagram (auto-wrapped in Confluence macro)"
50
50
  },
51
51
  }
52
52
  : {
@@ -1 +1 @@
1
- {"version":3,"file":"response-formatter.js","sourceRoot":"","sources":["../../src/utils/response-formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response-formatter.js","sourceRoot":"","sources":["../../src/utils/response-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Time formatting utilities
3
+ *
4
+ * Shared time conversion and formatting functions used across Jira and Tempo tools.
5
+ */
6
+ /**
7
+ * Format seconds into human-readable time string (e.g., "2h 30m", "45m", "8h")
8
+ */
9
+ export declare function formatTimeSpent(seconds: number): string;
10
+ //# sourceMappingURL=time-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/time-formatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWvD"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Time formatting utilities
3
+ *
4
+ * Shared time conversion and formatting functions used across Jira and Tempo tools.
5
+ */
6
+ /**
7
+ * Format seconds into human-readable time string (e.g., "2h 30m", "45m", "8h")
8
+ */
9
+ export function formatTimeSpent(seconds) {
10
+ const hours = Math.floor(seconds / 3600);
11
+ const minutes = Math.floor((seconds % 3600) / 60);
12
+ if (hours === 0) {
13
+ return `${minutes}m`;
14
+ }
15
+ else if (minutes === 0) {
16
+ return `${hours}h`;
17
+ }
18
+ else {
19
+ return `${hours}h ${minutes}m`;
20
+ }
21
+ }
22
+ //# sourceMappingURL=time-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-formatter.js","sourceRoot":"","sources":["../../src/utils/time-formatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAElD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,GAAG,OAAO,GAAG,CAAC;IACvB,CAAC;SAAM,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,KAAK,GAAG,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,CAAC;IACjC,CAAC;AACH,CAAC"}