@crypto512/jicon-mcp 2.2.1 → 2.3.19
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/PROMPT.md +10 -28
- package/README.md +39 -6
- package/TOOL_LIST.md +542 -407
- package/dist/config/constants.d.ts +28 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +34 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +12 -2
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +49 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +18 -0
- package/dist/config/types.js.map +1 -1
- package/dist/confluence/client.d.ts.map +1 -1
- package/dist/confluence/client.js +7 -2
- package/dist/confluence/client.js.map +1 -1
- package/dist/confluence/formatters.d.ts +20 -0
- package/dist/confluence/formatters.d.ts.map +1 -1
- package/dist/confluence/formatters.js +74 -8
- package/dist/confluence/formatters.js.map +1 -1
- package/dist/confluence/tools.d.ts +16 -20
- package/dist/confluence/tools.d.ts.map +1 -1
- package/dist/confluence/tools.js +71 -68
- package/dist/confluence/tools.js.map +1 -1
- package/dist/credentials/extractor.d.ts +15 -5
- package/dist/credentials/extractor.d.ts.map +1 -1
- package/dist/credentials/extractor.js +99 -12
- package/dist/credentials/extractor.js.map +1 -1
- package/dist/credentials/index.d.ts +4 -3
- package/dist/credentials/index.d.ts.map +1 -1
- package/dist/credentials/index.js +3 -2
- package/dist/credentials/index.js.map +1 -1
- package/dist/credentials/types.d.ts +22 -0
- package/dist/credentials/types.d.ts.map +1 -1
- package/dist/credentials/types.js.map +1 -1
- package/dist/index.js +211 -176
- package/dist/index.js.map +1 -1
- package/dist/jira/activity-tools.d.ts +8 -15
- package/dist/jira/activity-tools.d.ts.map +1 -1
- package/dist/jira/activity-tools.js +131 -90
- package/dist/jira/activity-tools.js.map +1 -1
- package/dist/jira/client.d.ts +24 -0
- package/dist/jira/client.d.ts.map +1 -1
- package/dist/jira/client.js +65 -6
- package/dist/jira/client.js.map +1 -1
- package/dist/jira/formatters.d.ts +61 -0
- package/dist/jira/formatters.d.ts.map +1 -1
- package/dist/jira/formatters.js +83 -11
- package/dist/jira/formatters.js.map +1 -1
- package/dist/jira/tools.d.ts +78 -26
- package/dist/jira/tools.d.ts.map +1 -1
- package/dist/jira/tools.js +293 -130
- package/dist/jira/tools.js.map +1 -1
- package/dist/permissions/filter.d.ts.map +1 -1
- package/dist/permissions/filter.js +8 -4
- package/dist/permissions/filter.js.map +1 -1
- package/dist/permissions/tool-registry.d.ts +15 -13
- package/dist/permissions/tool-registry.d.ts.map +1 -1
- package/dist/permissions/tool-registry.js +19 -10
- package/dist/permissions/tool-registry.js.map +1 -1
- package/dist/session/context.d.ts +81 -0
- package/dist/session/context.d.ts.map +1 -0
- package/dist/session/context.js +107 -0
- package/dist/session/context.js.map +1 -0
- package/dist/session/index.d.ts +12 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +22 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +186 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +383 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/tempo/client.d.ts +14 -0
- package/dist/tempo/client.d.ts.map +1 -1
- package/dist/tempo/client.js +57 -0
- package/dist/tempo/client.js.map +1 -1
- package/dist/tempo/formatters.d.ts +13 -0
- package/dist/tempo/formatters.d.ts.map +1 -1
- package/dist/tempo/formatters.js +106 -20
- package/dist/tempo/formatters.js.map +1 -1
- package/dist/tempo/tools.d.ts +14 -13
- package/dist/tempo/tools.d.ts.map +1 -1
- package/dist/tempo/tools.js +203 -33
- package/dist/tempo/tools.js.map +1 -1
- package/dist/tempo/types.d.ts +20 -6
- package/dist/tempo/types.d.ts.map +1 -1
- package/dist/transport/http.d.ts +21 -5
- package/dist/transport/http.d.ts.map +1 -1
- package/dist/transport/http.js +193 -22
- package/dist/transport/http.js.map +1 -1
- package/dist/transport/index.d.ts +7 -2
- package/dist/transport/index.d.ts.map +1 -1
- package/dist/transport/index.js +10 -4
- package/dist/transport/index.js.map +1 -1
- package/dist/utils/buffer-tools.d.ts +48 -724
- package/dist/utils/buffer-tools.d.ts.map +1 -1
- package/dist/utils/buffer-tools.js +337 -170
- package/dist/utils/buffer-tools.js.map +1 -1
- package/dist/utils/content-buffer.d.ts +10 -31
- package/dist/utils/content-buffer.d.ts.map +1 -1
- package/dist/utils/content-buffer.js +12 -86
- 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 +99 -2
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/jicon-help.d.ts +3 -3
- package/dist/utils/jicon-help.d.ts.map +1 -1
- package/dist/utils/jicon-help.js +164 -312
- package/dist/utils/jicon-help.js.map +1 -1
- package/dist/utils/logger.d.ts +43 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +102 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/plantuml/tools.d.ts.map +1 -1
- package/dist/utils/plantuml/tools.js +10 -9
- package/dist/utils/plantuml/tools.js.map +1 -1
- package/dist/utils/response-formatter.d.ts +20 -2
- package/dist/utils/response-formatter.d.ts.map +1 -1
- package/dist/utils/response-formatter.js +147 -17
- package/dist/utils/response-formatter.js.map +1 -1
- package/dist/utils/sandbox/formatters.d.ts +25 -0
- package/dist/utils/sandbox/formatters.d.ts.map +1 -0
- package/dist/utils/sandbox/formatters.js +690 -0
- package/dist/utils/sandbox/formatters.js.map +1 -0
- package/dist/utils/sandbox/helpers.d.ts +16 -0
- package/dist/utils/sandbox/helpers.d.ts.map +1 -0
- package/dist/utils/sandbox/helpers.js +252 -0
- package/dist/utils/sandbox/helpers.js.map +1 -0
- package/dist/utils/sandbox/index.d.ts +19 -0
- package/dist/utils/sandbox/index.d.ts.map +1 -0
- package/dist/utils/sandbox/index.js +269 -0
- package/dist/utils/sandbox/index.js.map +1 -0
- package/dist/utils/sandbox/schema.d.ts +55 -0
- package/dist/utils/sandbox/schema.d.ts.map +1 -0
- package/dist/utils/sandbox/schema.js +39 -0
- package/dist/utils/sandbox/schema.js.map +1 -0
- package/dist/utils/sandbox/types.d.ts +179 -0
- package/dist/utils/sandbox/types.d.ts.map +1 -0
- package/dist/utils/sandbox/types.js +8 -0
- package/dist/utils/sandbox/types.js.map +1 -0
- package/dist/utils/schemas/confluence.d.ts +41 -0
- package/dist/utils/schemas/confluence.d.ts.map +1 -0
- package/dist/utils/schemas/confluence.js +105 -0
- package/dist/utils/schemas/confluence.js.map +1 -0
- package/dist/utils/schemas/index.d.ts +77 -0
- package/dist/utils/schemas/index.d.ts.map +1 -0
- package/dist/utils/schemas/index.js +107 -0
- package/dist/utils/schemas/index.js.map +1 -0
- package/dist/utils/schemas/jira.d.ts +49 -0
- package/dist/utils/schemas/jira.d.ts.map +1 -0
- package/dist/utils/schemas/jira.js +153 -0
- package/dist/utils/schemas/jira.js.map +1 -0
- package/dist/utils/schemas/tempo.d.ts +29 -0
- package/dist/utils/schemas/tempo.d.ts.map +1 -0
- package/dist/utils/schemas/tempo.js +72 -0
- package/dist/utils/schemas/tempo.js.map +1 -0
- package/dist/utils/whoami-tools.d.ts +17 -0
- package/dist/utils/whoami-tools.d.ts.map +1 -0
- package/dist/utils/whoami-tools.js +90 -0
- package/dist/utils/whoami-tools.js.map +1 -0
- package/dist/utils/xhtml/error-locator.js +5 -5
- package/dist/utils/xhtml/error-locator.js.map +1 -1
- package/package.json +10 -9
- package/dist/credentials/client-factory.d.ts +0 -64
- package/dist/credentials/client-factory.d.ts.map +0 -1
- package/dist/credentials/client-factory.js +0 -110
- package/dist/credentials/client-factory.js.map +0 -1
- package/dist/credentials/context.d.ts +0 -25
- package/dist/credentials/context.d.ts.map +0 -1
- package/dist/credentials/context.js +0 -35
- package/dist/credentials/context.js.map +0 -1
- package/dist/utils/buffer-pipeline/index.d.ts +0 -30
- package/dist/utils/buffer-pipeline/index.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/index.js +0 -317
- package/dist/utils/buffer-pipeline/index.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/csv.d.ts +0 -20
- package/dist/utils/buffer-pipeline/output/csv.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/csv.js +0 -117
- package/dist/utils/buffer-pipeline/output/csv.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/json.d.ts +0 -16
- package/dist/utils/buffer-pipeline/output/json.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/json.js +0 -48
- package/dist/utils/buffer-pipeline/output/json.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/markdown.d.ts +0 -15
- package/dist/utils/buffer-pipeline/output/markdown.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/markdown.js +0 -105
- package/dist/utils/buffer-pipeline/output/markdown.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts +0 -16
- package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/xhtml-list.js +0 -81
- package/dist/utils/buffer-pipeline/output/xhtml-list.js.map +0 -1
- package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts +0 -15
- package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/output/xhtml-table.js +0 -176
- package/dist/utils/buffer-pipeline/output/xhtml-table.js.map +0 -1
- package/dist/utils/buffer-pipeline/schema.d.ts +0 -1878
- package/dist/utils/buffer-pipeline/schema.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/schema.js +0 -168
- package/dist/utils/buffer-pipeline/schema.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/filter.d.ts +0 -32
- package/dist/utils/buffer-pipeline/stages/filter.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/filter.js +0 -208
- package/dist/utils/buffer-pipeline/stages/filter.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/format.d.ts +0 -45
- package/dist/utils/buffer-pipeline/stages/format.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/format.js +0 -160
- package/dist/utils/buffer-pipeline/stages/format.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/group-by.d.ts +0 -25
- package/dist/utils/buffer-pipeline/stages/group-by.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/group-by.js +0 -190
- package/dist/utils/buffer-pipeline/stages/group-by.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/select.d.ts +0 -54
- package/dist/utils/buffer-pipeline/stages/select.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/select.js +0 -228
- package/dist/utils/buffer-pipeline/stages/select.js.map +0 -1
- package/dist/utils/buffer-pipeline/stages/sort.d.ts +0 -20
- package/dist/utils/buffer-pipeline/stages/sort.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/stages/sort.js +0 -96
- package/dist/utils/buffer-pipeline/stages/sort.js.map +0 -1
- package/dist/utils/buffer-pipeline/types.d.ts +0 -277
- package/dist/utils/buffer-pipeline/types.d.ts.map +0 -1
- package/dist/utils/buffer-pipeline/types.js +0 -8
- package/dist/utils/buffer-pipeline/types.js.map +0 -1
- package/dist/utils/plantuml/docker-manager.d.ts +0 -37
- package/dist/utils/plantuml/docker-manager.d.ts.map +0 -1
- package/dist/utils/plantuml/docker-manager.js +0 -284
- package/dist/utils/plantuml/docker-manager.js.map +0 -1
|
@@ -1,37 +0,0 @@
|
|
|
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 type { ContainerState, PlantUmlConfig } from "./types.js";
|
|
11
|
-
/**
|
|
12
|
-
* Start a new PlantUML container
|
|
13
|
-
*/
|
|
14
|
-
export declare function startContainer(config?: PlantUmlConfig): Promise<ContainerState>;
|
|
15
|
-
/**
|
|
16
|
-
* Get current container state (if running)
|
|
17
|
-
*/
|
|
18
|
-
export declare function getContainerState(): ContainerState | null;
|
|
19
|
-
/**
|
|
20
|
-
* Check if container is running and healthy
|
|
21
|
-
*/
|
|
22
|
-
export declare function isContainerHealthy(): Promise<boolean>;
|
|
23
|
-
/**
|
|
24
|
-
* Stop and remove the container
|
|
25
|
-
*/
|
|
26
|
-
export declare function stopContainer(): Promise<void>;
|
|
27
|
-
/**
|
|
28
|
-
* Ensure container is running.
|
|
29
|
-
* Does NOT auto-restart if container died - throws error instead.
|
|
30
|
-
* Container should be started once at MCP startup via startContainer().
|
|
31
|
-
*/
|
|
32
|
-
export declare function ensureContainer(config?: PlantUmlConfig): Promise<ContainerState>;
|
|
33
|
-
/**
|
|
34
|
-
* Clean up any orphaned Jicon PlantUML containers from previous runs
|
|
35
|
-
*/
|
|
36
|
-
export declare function cleanupOrphanedContainers(): Promise<number>;
|
|
37
|
-
//# sourceMappingURL=docker-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docker-manager.d.ts","sourceRoot":"","sources":["../../../src/utils/plantuml/docker-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmHjE;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,GAAE,cAAmB,GAC1B,OAAO,CAAC,cAAc,CAAC,CAoFzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAc3D;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAenD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,CAAC,CAezB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,CAiCjE"}
|
|
@@ -1,284 +0,0 @@
|
|
|
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.
|
|
231
|
-
* Does NOT auto-restart if container died - throws error instead.
|
|
232
|
-
* Container should be started once at MCP startup via startContainer().
|
|
233
|
-
*/
|
|
234
|
-
export async function ensureContainer(config) {
|
|
235
|
-
// Check if existing container is healthy
|
|
236
|
-
if (containerState?.ready) {
|
|
237
|
-
const healthy = await isContainerHealthy();
|
|
238
|
-
if (healthy) {
|
|
239
|
-
return containerState;
|
|
240
|
-
}
|
|
241
|
-
// Container died - do NOT restart, throw error
|
|
242
|
-
containerState = null;
|
|
243
|
-
startupPromise = null;
|
|
244
|
-
throw new Error("PlantUML container has stopped. Restart the MCP server to retry.");
|
|
245
|
-
}
|
|
246
|
-
// Only start if never started before
|
|
247
|
-
return startContainer(config);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Clean up any orphaned Jicon PlantUML containers from previous runs
|
|
251
|
-
*/
|
|
252
|
-
export async function cleanupOrphanedContainers() {
|
|
253
|
-
let cleaned = 0;
|
|
254
|
-
try {
|
|
255
|
-
const containers = await docker.listContainers({
|
|
256
|
-
all: true,
|
|
257
|
-
filters: {
|
|
258
|
-
label: ["jicon.managed=true"],
|
|
259
|
-
},
|
|
260
|
-
});
|
|
261
|
-
for (const containerInfo of containers) {
|
|
262
|
-
// Don't remove our own container
|
|
263
|
-
if (containerState && containerInfo.Id === containerState.containerId) {
|
|
264
|
-
continue;
|
|
265
|
-
}
|
|
266
|
-
try {
|
|
267
|
-
const container = docker.getContainer(containerInfo.Id);
|
|
268
|
-
if (containerInfo.State === "running") {
|
|
269
|
-
await container.stop({ t: 1 });
|
|
270
|
-
}
|
|
271
|
-
await container.remove({ force: true });
|
|
272
|
-
cleaned++;
|
|
273
|
-
}
|
|
274
|
-
catch {
|
|
275
|
-
// Ignore errors for individual containers
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
catch {
|
|
280
|
-
// Docker may not be available
|
|
281
|
-
}
|
|
282
|
-
return cleaned;
|
|
283
|
-
}
|
|
284
|
-
//# sourceMappingURL=docker-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docker-manager.js","sourceRoot":"","sources":["../../../src/utils/plantuml/docker-manager.ts"],"names":[],"mappings":"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"}
|