@crypto512/jicon-mcp 0.7.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +128 -395
- package/TOOL_LIST.md +810 -120
- package/dist/config/constants.d.ts +1 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +1 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/loader.d.ts +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +27 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +8 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -1
- package/dist/confluence/client.d.ts +38 -0
- package/dist/confluence/client.d.ts.map +1 -1
- package/dist/confluence/client.js +117 -0
- package/dist/confluence/client.js.map +1 -1
- package/dist/confluence/tools.d.ts +102 -75
- package/dist/confluence/tools.d.ts.map +1 -1
- package/dist/confluence/tools.js +510 -151
- package/dist/confluence/tools.js.map +1 -1
- package/dist/confluence/types.d.ts +55 -1
- package/dist/confluence/types.d.ts.map +1 -1
- package/dist/index.js +88 -2
- package/dist/index.js.map +1 -1
- package/dist/jira/tools.d.ts +0 -5
- package/dist/jira/tools.d.ts.map +1 -1
- package/dist/jira/tools.js +40 -87
- package/dist/jira/tools.js.map +1 -1
- package/dist/permissions/filter.d.ts +5 -0
- package/dist/permissions/filter.d.ts.map +1 -1
- package/dist/permissions/filter.js +29 -12
- package/dist/permissions/filter.js.map +1 -1
- package/dist/permissions/tool-registry.d.ts +23 -25
- package/dist/permissions/tool-registry.d.ts.map +1 -1
- package/dist/permissions/tool-registry.js +41 -45
- package/dist/permissions/tool-registry.js.map +1 -1
- package/dist/permissions/write-home-validator.d.ts +35 -0
- package/dist/permissions/write-home-validator.d.ts.map +1 -0
- package/dist/permissions/write-home-validator.js +140 -0
- package/dist/permissions/write-home-validator.js.map +1 -0
- package/dist/tempo/tools.d.ts.map +1 -1
- package/dist/tempo/tools.js +43 -44
- package/dist/tempo/tools.js.map +1 -1
- package/dist/utils/buffer-tools.d.ts +119 -1
- package/dist/utils/buffer-tools.d.ts.map +1 -1
- package/dist/utils/buffer-tools.js +610 -3
- package/dist/utils/buffer-tools.js.map +1 -1
- package/dist/utils/content-buffer.d.ts +34 -0
- package/dist/utils/content-buffer.d.ts.map +1 -1
- package/dist/utils/content-buffer.js +79 -0
- package/dist/utils/content-buffer.js.map +1 -1
- package/dist/utils/http-client.d.ts.map +1 -1
- package/dist/utils/http-client.js +4 -4
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/jicon-help.d.ts +29 -0
- package/dist/utils/jicon-help.d.ts.map +1 -0
- package/dist/utils/jicon-help.js +873 -0
- package/dist/utils/jicon-help.js.map +1 -0
- package/dist/utils/plantuml/client.d.ts +40 -0
- package/dist/utils/plantuml/client.d.ts.map +1 -0
- package/dist/utils/plantuml/client.js +306 -0
- package/dist/utils/plantuml/client.js.map +1 -0
- package/dist/utils/plantuml/docker-manager.d.ts +35 -0
- package/dist/utils/plantuml/docker-manager.d.ts.map +1 -0
- package/dist/utils/plantuml/docker-manager.js +280 -0
- package/dist/utils/plantuml/docker-manager.js.map +1 -0
- package/dist/utils/plantuml/index.d.ts +11 -0
- package/dist/utils/plantuml/index.d.ts.map +1 -0
- package/dist/utils/plantuml/index.js +16 -0
- package/dist/utils/plantuml/index.js.map +1 -0
- package/dist/utils/plantuml/service.d.ts +46 -0
- package/dist/utils/plantuml/service.d.ts.map +1 -0
- package/dist/utils/plantuml/service.js +96 -0
- package/dist/utils/plantuml/service.js.map +1 -0
- package/dist/utils/plantuml/tools.d.ts +65 -0
- package/dist/utils/plantuml/tools.d.ts.map +1 -0
- package/dist/utils/plantuml/tools.js +272 -0
- package/dist/utils/plantuml/tools.js.map +1 -0
- package/dist/utils/plantuml/types.d.ts +130 -0
- package/dist/utils/plantuml/types.d.ts.map +1 -0
- package/dist/utils/plantuml/types.js +66 -0
- package/dist/utils/plantuml/types.js.map +1 -0
- package/dist/utils/response-formatter.d.ts +14 -0
- package/dist/utils/response-formatter.d.ts.map +1 -1
- package/dist/utils/response-formatter.js +84 -1
- package/dist/utils/response-formatter.js.map +1 -1
- package/dist/utils/url-tools.d.ts +49 -0
- package/dist/utils/url-tools.d.ts.map +1 -0
- package/dist/utils/url-tools.js +141 -0
- package/dist/utils/url-tools.js.map +1 -0
- package/dist/utils/xhtml/confluence-schema.d.ts +55 -0
- package/dist/utils/xhtml/confluence-schema.d.ts.map +1 -0
- package/dist/utils/xhtml/confluence-schema.js +215 -0
- package/dist/utils/xhtml/confluence-schema.js.map +1 -0
- package/dist/utils/xhtml/index.d.ts +17 -0
- package/dist/utils/xhtml/index.d.ts.map +1 -0
- package/dist/utils/xhtml/index.js +21 -0
- package/dist/utils/xhtml/index.js.map +1 -0
- package/dist/utils/xhtml/operations.d.ts +100 -0
- package/dist/utils/xhtml/operations.d.ts.map +1 -0
- package/dist/utils/xhtml/operations.js +596 -0
- package/dist/utils/xhtml/operations.js.map +1 -0
- package/dist/utils/xhtml/parser.d.ts +64 -0
- package/dist/utils/xhtml/parser.d.ts.map +1 -0
- package/dist/utils/xhtml/parser.js +180 -0
- package/dist/utils/xhtml/parser.js.map +1 -0
- package/dist/utils/xhtml/plantuml.d.ts +112 -0
- package/dist/utils/xhtml/plantuml.d.ts.map +1 -0
- package/dist/utils/xhtml/plantuml.js +251 -0
- package/dist/utils/xhtml/plantuml.js.map +1 -0
- package/dist/utils/xhtml/selector.d.ts +35 -0
- package/dist/utils/xhtml/selector.d.ts.map +1 -0
- package/dist/utils/xhtml/selector.js +358 -0
- package/dist/utils/xhtml/selector.js.map +1 -0
- package/dist/utils/xhtml/serializer.d.ts +26 -0
- package/dist/utils/xhtml/serializer.d.ts.map +1 -0
- package/dist/utils/xhtml/serializer.js +170 -0
- package/dist/utils/xhtml/serializer.js.map +1 -0
- package/dist/utils/xhtml/types.d.ts +134 -0
- package/dist/utils/xhtml/types.d.ts.map +1 -0
- package/dist/utils/xhtml/types.js +65 -0
- package/dist/utils/xhtml/types.js.map +1 -0
- package/dist/utils/xhtml/validator.d.ts +67 -0
- package/dist/utils/xhtml/validator.d.ts.map +1 -0
- package/dist/utils/xhtml/validator.js +300 -0
- package/dist/utils/xhtml/validator.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlantUML Docker Container Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of PlantUML server Docker containers.
|
|
5
|
+
* - Lazy initialization on first use
|
|
6
|
+
* - Dynamic port allocation
|
|
7
|
+
* - Graceful shutdown on process exit
|
|
8
|
+
* - Multi-instance support (each MCP gets unique container)
|
|
9
|
+
*/
|
|
10
|
+
import Docker from "dockerode";
|
|
11
|
+
import getPort from "get-port";
|
|
12
|
+
import { DEFAULT_PLANTUML_CONFIG } from "./types.js";
|
|
13
|
+
const docker = new Docker();
|
|
14
|
+
/**
|
|
15
|
+
* Container manager instance - singleton per process
|
|
16
|
+
*/
|
|
17
|
+
let containerState = null;
|
|
18
|
+
let startupPromise = null;
|
|
19
|
+
let shutdownRegistered = false;
|
|
20
|
+
/**
|
|
21
|
+
* Generate unique container name for this MCP instance
|
|
22
|
+
*/
|
|
23
|
+
function generateContainerName() {
|
|
24
|
+
return `jicon-plantuml-${process.pid}-${Date.now()}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wait for container to be healthy (PlantUML server responding)
|
|
28
|
+
*/
|
|
29
|
+
async function waitForHealthy(baseUrl, timeoutMs) {
|
|
30
|
+
const startTime = Date.now();
|
|
31
|
+
const checkInterval = 500;
|
|
32
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
33
|
+
try {
|
|
34
|
+
const response = await fetch(baseUrl, {
|
|
35
|
+
method: "GET",
|
|
36
|
+
signal: AbortSignal.timeout(2000),
|
|
37
|
+
});
|
|
38
|
+
if (response.ok) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Server not ready yet, continue polling
|
|
44
|
+
}
|
|
45
|
+
await new Promise((resolve) => setTimeout(resolve, checkInterval));
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Register shutdown handlers to clean up container on process exit
|
|
51
|
+
*/
|
|
52
|
+
function registerShutdownHandlers() {
|
|
53
|
+
if (shutdownRegistered)
|
|
54
|
+
return;
|
|
55
|
+
shutdownRegistered = true;
|
|
56
|
+
const cleanup = async () => {
|
|
57
|
+
if (containerState) {
|
|
58
|
+
try {
|
|
59
|
+
const container = docker.getContainer(containerState.containerId);
|
|
60
|
+
await container.stop({ t: 5 });
|
|
61
|
+
await container.remove({ force: true });
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Container may already be stopped/removed
|
|
65
|
+
}
|
|
66
|
+
containerState = null;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
// Handle graceful shutdown
|
|
70
|
+
process.on("SIGINT", async () => {
|
|
71
|
+
await cleanup();
|
|
72
|
+
process.exit(0);
|
|
73
|
+
});
|
|
74
|
+
process.on("SIGTERM", async () => {
|
|
75
|
+
await cleanup();
|
|
76
|
+
process.exit(0);
|
|
77
|
+
});
|
|
78
|
+
// Handle unexpected exits
|
|
79
|
+
process.on("beforeExit", async () => {
|
|
80
|
+
await cleanup();
|
|
81
|
+
});
|
|
82
|
+
// Handle uncaught exceptions - try to cleanup
|
|
83
|
+
process.on("uncaughtException", async (err) => {
|
|
84
|
+
console.error("Uncaught exception, cleaning up PlantUML container:", err);
|
|
85
|
+
await cleanup();
|
|
86
|
+
process.exit(1);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Pull Docker image if not present
|
|
91
|
+
*/
|
|
92
|
+
async function ensureImage(imageName) {
|
|
93
|
+
try {
|
|
94
|
+
await docker.getImage(imageName).inspect();
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Image not found, pull it
|
|
98
|
+
console.error(`Pulling PlantUML image: ${imageName}...`);
|
|
99
|
+
await new Promise((resolve, reject) => {
|
|
100
|
+
docker.pull(imageName, (err, stream) => {
|
|
101
|
+
if (err) {
|
|
102
|
+
reject(err);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
docker.modem.followProgress(stream, (err) => {
|
|
106
|
+
if (err)
|
|
107
|
+
reject(err);
|
|
108
|
+
else
|
|
109
|
+
resolve();
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Start a new PlantUML container
|
|
117
|
+
*/
|
|
118
|
+
export async function startContainer(config = {}) {
|
|
119
|
+
// If already started or starting, return existing/pending state
|
|
120
|
+
if (containerState?.ready) {
|
|
121
|
+
return containerState;
|
|
122
|
+
}
|
|
123
|
+
if (startupPromise) {
|
|
124
|
+
return startupPromise;
|
|
125
|
+
}
|
|
126
|
+
const mergedConfig = { ...DEFAULT_PLANTUML_CONFIG, ...config };
|
|
127
|
+
startupPromise = (async () => {
|
|
128
|
+
try {
|
|
129
|
+
// Register cleanup handlers
|
|
130
|
+
registerShutdownHandlers();
|
|
131
|
+
// Ensure image is available
|
|
132
|
+
await ensureImage(mergedConfig.image);
|
|
133
|
+
// Find available port
|
|
134
|
+
const port = await getPort({
|
|
135
|
+
port: Array.from({ length: mergedConfig.portRangeEnd - mergedConfig.portRangeStart }, (_, i) => mergedConfig.portRangeStart + i),
|
|
136
|
+
});
|
|
137
|
+
const containerName = generateContainerName();
|
|
138
|
+
const baseUrl = `http://localhost:${port}`;
|
|
139
|
+
// Create and start container
|
|
140
|
+
const container = await docker.createContainer({
|
|
141
|
+
name: containerName,
|
|
142
|
+
Image: mergedConfig.image,
|
|
143
|
+
ExposedPorts: {
|
|
144
|
+
"8080/tcp": {},
|
|
145
|
+
},
|
|
146
|
+
HostConfig: {
|
|
147
|
+
PortBindings: {
|
|
148
|
+
"8080/tcp": [{ HostPort: port.toString() }],
|
|
149
|
+
},
|
|
150
|
+
AutoRemove: true,
|
|
151
|
+
},
|
|
152
|
+
Labels: {
|
|
153
|
+
"jicon.managed": "true",
|
|
154
|
+
"jicon.pid": process.pid.toString(),
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
await container.start();
|
|
158
|
+
// Wait for PlantUML server to be ready
|
|
159
|
+
const healthy = await waitForHealthy(baseUrl, mergedConfig.startupTimeout);
|
|
160
|
+
if (!healthy) {
|
|
161
|
+
// Cleanup failed container
|
|
162
|
+
try {
|
|
163
|
+
await container.stop({ t: 1 });
|
|
164
|
+
await container.remove({ force: true });
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Ignore cleanup errors
|
|
168
|
+
}
|
|
169
|
+
throw new Error(`PlantUML container failed to become healthy within ${mergedConfig.startupTimeout}ms`);
|
|
170
|
+
}
|
|
171
|
+
containerState = {
|
|
172
|
+
containerId: container.id,
|
|
173
|
+
containerName,
|
|
174
|
+
port,
|
|
175
|
+
baseUrl,
|
|
176
|
+
ready: true,
|
|
177
|
+
};
|
|
178
|
+
return containerState;
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
startupPromise = null;
|
|
182
|
+
throw error;
|
|
183
|
+
}
|
|
184
|
+
})();
|
|
185
|
+
return startupPromise;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get current container state (if running)
|
|
189
|
+
*/
|
|
190
|
+
export function getContainerState() {
|
|
191
|
+
return containerState;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Check if container is running and healthy
|
|
195
|
+
*/
|
|
196
|
+
export async function isContainerHealthy() {
|
|
197
|
+
if (!containerState?.ready) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
const response = await fetch(containerState.baseUrl, {
|
|
202
|
+
method: "GET",
|
|
203
|
+
signal: AbortSignal.timeout(2000),
|
|
204
|
+
});
|
|
205
|
+
return response.ok;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Stop and remove the container
|
|
213
|
+
*/
|
|
214
|
+
export async function stopContainer() {
|
|
215
|
+
if (!containerState) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
try {
|
|
219
|
+
const container = docker.getContainer(containerState.containerId);
|
|
220
|
+
await container.stop({ t: 5 });
|
|
221
|
+
// AutoRemove is set, so container will be removed automatically
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Container may already be stopped
|
|
225
|
+
}
|
|
226
|
+
containerState = null;
|
|
227
|
+
startupPromise = null;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Ensure container is running (start if needed)
|
|
231
|
+
*/
|
|
232
|
+
export async function ensureContainer(config) {
|
|
233
|
+
// Check if existing container is healthy
|
|
234
|
+
if (containerState?.ready) {
|
|
235
|
+
const healthy = await isContainerHealthy();
|
|
236
|
+
if (healthy) {
|
|
237
|
+
return containerState;
|
|
238
|
+
}
|
|
239
|
+
// Container died, reset state
|
|
240
|
+
containerState = null;
|
|
241
|
+
startupPromise = null;
|
|
242
|
+
}
|
|
243
|
+
return startContainer(config);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Clean up any orphaned Jicon PlantUML containers from previous runs
|
|
247
|
+
*/
|
|
248
|
+
export async function cleanupOrphanedContainers() {
|
|
249
|
+
let cleaned = 0;
|
|
250
|
+
try {
|
|
251
|
+
const containers = await docker.listContainers({
|
|
252
|
+
all: true,
|
|
253
|
+
filters: {
|
|
254
|
+
label: ["jicon.managed=true"],
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
for (const containerInfo of containers) {
|
|
258
|
+
// Don't remove our own container
|
|
259
|
+
if (containerState && containerInfo.Id === containerState.containerId) {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
const container = docker.getContainer(containerInfo.Id);
|
|
264
|
+
if (containerInfo.State === "running") {
|
|
265
|
+
await container.stop({ t: 1 });
|
|
266
|
+
}
|
|
267
|
+
await container.remove({ force: true });
|
|
268
|
+
cleaned++;
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
// Ignore errors for individual containers
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
// Docker may not be available
|
|
277
|
+
}
|
|
278
|
+
return cleaned;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=docker-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-manager.js","sourceRoot":"","sources":["../../../src/utils/plantuml/docker-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlantUML Module Exports
|
|
3
|
+
*
|
|
4
|
+
* Docker-based PlantUML validation and rendering service.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./types.js";
|
|
7
|
+
export { validate, render, isAvailable, getStatus, shutdown, configure, normalizePlantUml, detectDiagramType, } from "./service.js";
|
|
8
|
+
export { startContainer, stopContainer, ensureContainer, getContainerState, isContainerHealthy, cleanupOrphanedContainers, } from "./docker-manager.js";
|
|
9
|
+
export { PlantUmlClient, encodePlantUml } from "./client.js";
|
|
10
|
+
export { createPlantUmlTools, PLANTUML_TOOLS } from "./tools.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/plantuml/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlantUML Module Exports
|
|
3
|
+
*
|
|
4
|
+
* Docker-based PlantUML validation and rendering service.
|
|
5
|
+
*/
|
|
6
|
+
// Types
|
|
7
|
+
export * from "./types.js";
|
|
8
|
+
// Service (main API)
|
|
9
|
+
export { validate, render, isAvailable, getStatus, shutdown, configure, normalizePlantUml, detectDiagramType, } from "./service.js";
|
|
10
|
+
// Docker manager (for lifecycle control)
|
|
11
|
+
export { startContainer, stopContainer, ensureContainer, getContainerState, isContainerHealthy, cleanupOrphanedContainers, } from "./docker-manager.js";
|
|
12
|
+
// HTTP client (for direct access if needed)
|
|
13
|
+
export { PlantUmlClient, encodePlantUml } from "./client.js";
|
|
14
|
+
// MCP Tools
|
|
15
|
+
export { createPlantUmlTools, PLANTUML_TOOLS } from "./tools.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/plantuml/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,qBAAqB;AACrB,OAAO,EACL,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,yCAAyC;AACzC,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,4CAA4C;AAC5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7D,YAAY;AACZ,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlantUML Service
|
|
3
|
+
*
|
|
4
|
+
* Unified service facade for PlantUML operations.
|
|
5
|
+
* Handles lazy container initialization and provides high-level API.
|
|
6
|
+
*/
|
|
7
|
+
import { normalizePlantUml, detectDiagramType } from "./client.js";
|
|
8
|
+
import type { PlantUmlConfig, PlantUmlValidationResult, PlantUmlRenderResult, RenderFormat } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Configure the PlantUML service
|
|
11
|
+
*/
|
|
12
|
+
export declare function configure(config: PlantUmlConfig): void;
|
|
13
|
+
/**
|
|
14
|
+
* Validate PlantUML syntax
|
|
15
|
+
*
|
|
16
|
+
* Starts the Docker container on first call if not already running.
|
|
17
|
+
*/
|
|
18
|
+
export declare function validate(code: string): Promise<PlantUmlValidationResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Render PlantUML diagram to specified format
|
|
21
|
+
*
|
|
22
|
+
* Starts the Docker container on first call if not already running.
|
|
23
|
+
*/
|
|
24
|
+
export declare function render(code: string, format: RenderFormat): Promise<PlantUmlRenderResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if PlantUML service is available (container running)
|
|
27
|
+
*/
|
|
28
|
+
export declare function isAvailable(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Get current service status
|
|
31
|
+
*/
|
|
32
|
+
export declare function getStatus(): {
|
|
33
|
+
available: boolean;
|
|
34
|
+
containerId?: string;
|
|
35
|
+
port?: number;
|
|
36
|
+
baseUrl?: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Shutdown the PlantUML service (stop container)
|
|
40
|
+
*/
|
|
41
|
+
export declare function shutdown(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Re-export utility functions for convenience
|
|
44
|
+
*/
|
|
45
|
+
export { normalizePlantUml, detectDiagramType };
|
|
46
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/utils/plantuml/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAkB,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EACV,cAAc,EACd,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACb,MAAM,YAAY,CAAC;AAapB;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAItD;AAyBD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAG9E;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAG/B;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAGrC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAWA;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9C;AAED;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlantUML Service
|
|
3
|
+
*
|
|
4
|
+
* Unified service facade for PlantUML operations.
|
|
5
|
+
* Handles lazy container initialization and provides high-level API.
|
|
6
|
+
*/
|
|
7
|
+
import { ensureContainer, stopContainer, getContainerState } from "./docker-manager.js";
|
|
8
|
+
import { PlantUmlClient, normalizePlantUml, detectDiagramType } from "./client.js";
|
|
9
|
+
import { DEFAULT_PLANTUML_CONFIG } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Cached client instance
|
|
12
|
+
*/
|
|
13
|
+
let clientInstance = null;
|
|
14
|
+
/**
|
|
15
|
+
* Service configuration
|
|
16
|
+
*/
|
|
17
|
+
let serviceConfig = { ...DEFAULT_PLANTUML_CONFIG };
|
|
18
|
+
/**
|
|
19
|
+
* Configure the PlantUML service
|
|
20
|
+
*/
|
|
21
|
+
export function configure(config) {
|
|
22
|
+
serviceConfig = { ...DEFAULT_PLANTUML_CONFIG, ...config };
|
|
23
|
+
// Reset client to pick up new config
|
|
24
|
+
clientInstance = null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get or create the PlantUML client (starts container if needed)
|
|
28
|
+
*/
|
|
29
|
+
async function getClient() {
|
|
30
|
+
// Check if we have a valid client
|
|
31
|
+
if (clientInstance) {
|
|
32
|
+
const healthy = await clientInstance.healthCheck();
|
|
33
|
+
if (healthy) {
|
|
34
|
+
return clientInstance;
|
|
35
|
+
}
|
|
36
|
+
// Client unhealthy, reset and recreate
|
|
37
|
+
clientInstance = null;
|
|
38
|
+
}
|
|
39
|
+
// Ensure container is running
|
|
40
|
+
const state = await ensureContainer(serviceConfig);
|
|
41
|
+
// Create new client
|
|
42
|
+
clientInstance = new PlantUmlClient(state.baseUrl, serviceConfig.requestTimeout);
|
|
43
|
+
return clientInstance;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate PlantUML syntax
|
|
47
|
+
*
|
|
48
|
+
* Starts the Docker container on first call if not already running.
|
|
49
|
+
*/
|
|
50
|
+
export async function validate(code) {
|
|
51
|
+
const client = await getClient();
|
|
52
|
+
return client.validate(code);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Render PlantUML diagram to specified format
|
|
56
|
+
*
|
|
57
|
+
* Starts the Docker container on first call if not already running.
|
|
58
|
+
*/
|
|
59
|
+
export async function render(code, format) {
|
|
60
|
+
const client = await getClient();
|
|
61
|
+
return client.render(code, format);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if PlantUML service is available (container running)
|
|
65
|
+
*/
|
|
66
|
+
export function isAvailable() {
|
|
67
|
+
const state = getContainerState();
|
|
68
|
+
return state?.ready ?? false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get current service status
|
|
72
|
+
*/
|
|
73
|
+
export function getStatus() {
|
|
74
|
+
const state = getContainerState();
|
|
75
|
+
if (!state?.ready) {
|
|
76
|
+
return { available: false };
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
available: true,
|
|
80
|
+
containerId: state.containerId,
|
|
81
|
+
port: state.port,
|
|
82
|
+
baseUrl: state.baseUrl,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Shutdown the PlantUML service (stop container)
|
|
87
|
+
*/
|
|
88
|
+
export async function shutdown() {
|
|
89
|
+
clientInstance = null;
|
|
90
|
+
await stopContainer();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Re-export utility functions for convenience
|
|
94
|
+
*/
|
|
95
|
+
export { normalizePlantUml, detectDiagramType };
|
|
96
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlantUML MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* Tool definitions for PlantUML validation and rendering.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
+
import { type RenderFormat } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Create PlantUML tools for MCP server
|
|
11
|
+
*/
|
|
12
|
+
export declare function createPlantUmlTools(): {
|
|
13
|
+
plantuml_validate: {
|
|
14
|
+
description: string;
|
|
15
|
+
inputSchema: z.ZodObject<{
|
|
16
|
+
code: z.ZodOptional<z.ZodString>;
|
|
17
|
+
bufferId: z.ZodOptional<z.ZodString>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
bufferId?: string | undefined;
|
|
20
|
+
code?: string | undefined;
|
|
21
|
+
}, {
|
|
22
|
+
bufferId?: string | undefined;
|
|
23
|
+
code?: string | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
handler: (args: {
|
|
26
|
+
code?: string;
|
|
27
|
+
bufferId?: string;
|
|
28
|
+
}) => Promise<CallToolResult>;
|
|
29
|
+
};
|
|
30
|
+
plantuml_render: {
|
|
31
|
+
description: string;
|
|
32
|
+
inputSchema: z.ZodObject<{
|
|
33
|
+
code: z.ZodOptional<z.ZodString>;
|
|
34
|
+
bufferId: z.ZodOptional<z.ZodString>;
|
|
35
|
+
format: z.ZodDefault<z.ZodEnum<["ascii", "png", "svg", "eps"]>>;
|
|
36
|
+
maxWidth: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
format: "ascii" | "png" | "svg" | "eps";
|
|
39
|
+
bufferId?: string | undefined;
|
|
40
|
+
code?: string | undefined;
|
|
41
|
+
maxWidth?: number | undefined;
|
|
42
|
+
}, {
|
|
43
|
+
bufferId?: string | undefined;
|
|
44
|
+
code?: string | undefined;
|
|
45
|
+
format?: "ascii" | "png" | "svg" | "eps" | undefined;
|
|
46
|
+
maxWidth?: number | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
handler: (args: {
|
|
49
|
+
code?: string;
|
|
50
|
+
bufferId?: string;
|
|
51
|
+
format?: RenderFormat;
|
|
52
|
+
maxWidth?: number;
|
|
53
|
+
}) => Promise<CallToolResult>;
|
|
54
|
+
};
|
|
55
|
+
plantuml_status: {
|
|
56
|
+
description: string;
|
|
57
|
+
inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
58
|
+
handler: () => Promise<CallToolResult>;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Tool names for registry
|
|
63
|
+
*/
|
|
64
|
+
export declare const PLANTUML_TOOLS: readonly ["plantuml_validate", "plantuml_render", "plantuml_status"];
|
|
65
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +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"}
|