synapse-mcp 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.
Files changed (138) hide show
  1. package/README.md +607 -0
  2. package/dist/constants.d.ts +23 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/constants.js +58 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/formatters/index.d.ts +275 -0
  7. package/dist/formatters/index.d.ts.map +1 -0
  8. package/dist/formatters/index.js +461 -0
  9. package/dist/formatters/index.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +178 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/schemas/common.d.ts +48 -0
  15. package/dist/schemas/common.d.ts.map +1 -0
  16. package/dist/schemas/common.js +69 -0
  17. package/dist/schemas/common.js.map +1 -0
  18. package/dist/schemas/discriminator.d.ts +20 -0
  19. package/dist/schemas/discriminator.d.ts.map +1 -0
  20. package/dist/schemas/discriminator.js +25 -0
  21. package/dist/schemas/discriminator.js.map +1 -0
  22. package/dist/schemas/flux/compose.d.ts +93 -0
  23. package/dist/schemas/flux/compose.d.ts.map +1 -0
  24. package/dist/schemas/flux/compose.js +112 -0
  25. package/dist/schemas/flux/compose.js.map +1 -0
  26. package/dist/schemas/flux/container.d.ts +144 -0
  27. package/dist/schemas/flux/container.d.ts.map +1 -0
  28. package/dist/schemas/flux/container.js +163 -0
  29. package/dist/schemas/flux/container.js.map +1 -0
  30. package/dist/schemas/flux/docker.d.ts +91 -0
  31. package/dist/schemas/flux/docker.d.ts.map +1 -0
  32. package/dist/schemas/flux/docker.js +101 -0
  33. package/dist/schemas/flux/docker.js.map +1 -0
  34. package/dist/schemas/flux/host.d.ts +61 -0
  35. package/dist/schemas/flux/host.d.ts.map +1 -0
  36. package/dist/schemas/flux/host.js +72 -0
  37. package/dist/schemas/flux/host.js.map +1 -0
  38. package/dist/schemas/flux/index.d.ts +20 -0
  39. package/dist/schemas/flux/index.d.ts.map +1 -0
  40. package/dist/schemas/flux/index.js +88 -0
  41. package/dist/schemas/flux/index.js.map +1 -0
  42. package/dist/schemas/index.d.ts +11 -0
  43. package/dist/schemas/index.d.ts.map +1 -0
  44. package/dist/schemas/index.js +11 -0
  45. package/dist/schemas/index.js.map +1 -0
  46. package/dist/schemas/scout/index.d.ts +151 -0
  47. package/dist/schemas/scout/index.d.ts.map +1 -0
  48. package/dist/schemas/scout/index.js +41 -0
  49. package/dist/schemas/scout/index.js.map +1 -0
  50. package/dist/schemas/scout/logs.d.ts +48 -0
  51. package/dist/schemas/scout/logs.d.ts.map +1 -0
  52. package/dist/schemas/scout/logs.js +47 -0
  53. package/dist/schemas/scout/logs.js.map +1 -0
  54. package/dist/schemas/scout/simple.d.ts +68 -0
  55. package/dist/schemas/scout/simple.d.ts.map +1 -0
  56. package/dist/schemas/scout/simple.js +75 -0
  57. package/dist/schemas/scout/simple.js.map +1 -0
  58. package/dist/schemas/scout/zfs.d.ts +37 -0
  59. package/dist/schemas/scout/zfs.d.ts.map +1 -0
  60. package/dist/schemas/scout/zfs.js +36 -0
  61. package/dist/schemas/scout/zfs.js.map +1 -0
  62. package/dist/schemas/unified.d.ts +674 -0
  63. package/dist/schemas/unified.d.ts.map +1 -0
  64. package/dist/schemas/unified.js +453 -0
  65. package/dist/schemas/unified.js.map +1 -0
  66. package/dist/services/compose.d.ts +107 -0
  67. package/dist/services/compose.d.ts.map +1 -0
  68. package/dist/services/compose.js +308 -0
  69. package/dist/services/compose.js.map +1 -0
  70. package/dist/services/container.d.ts +69 -0
  71. package/dist/services/container.d.ts.map +1 -0
  72. package/dist/services/container.js +111 -0
  73. package/dist/services/container.js.map +1 -0
  74. package/dist/services/docker.d.ts +243 -0
  75. package/dist/services/docker.d.ts.map +1 -0
  76. package/dist/services/docker.js +812 -0
  77. package/dist/services/docker.js.map +1 -0
  78. package/dist/services/file-service.d.ts +79 -0
  79. package/dist/services/file-service.d.ts.map +1 -0
  80. package/dist/services/file-service.js +226 -0
  81. package/dist/services/file-service.js.map +1 -0
  82. package/dist/services/interfaces.d.ts +537 -0
  83. package/dist/services/interfaces.d.ts.map +1 -0
  84. package/dist/services/interfaces.js +2 -0
  85. package/dist/services/interfaces.js.map +1 -0
  86. package/dist/services/ssh-pool-exec.d.ts +10 -0
  87. package/dist/services/ssh-pool-exec.d.ts.map +1 -0
  88. package/dist/services/ssh-pool-exec.js +10 -0
  89. package/dist/services/ssh-pool-exec.js.map +1 -0
  90. package/dist/services/ssh-pool.d.ts +66 -0
  91. package/dist/services/ssh-pool.d.ts.map +1 -0
  92. package/dist/services/ssh-pool.js +253 -0
  93. package/dist/services/ssh-pool.js.map +1 -0
  94. package/dist/services/ssh-service.d.ts +39 -0
  95. package/dist/services/ssh-service.d.ts.map +1 -0
  96. package/dist/services/ssh-service.js +143 -0
  97. package/dist/services/ssh-service.js.map +1 -0
  98. package/dist/services/ssh.d.ts +37 -0
  99. package/dist/services/ssh.d.ts.map +1 -0
  100. package/dist/services/ssh.js +50 -0
  101. package/dist/services/ssh.js.map +1 -0
  102. package/dist/tools/flux.d.ts +14 -0
  103. package/dist/tools/flux.d.ts.map +1 -0
  104. package/dist/tools/flux.js +86 -0
  105. package/dist/tools/flux.js.map +1 -0
  106. package/dist/tools/index.d.ts +7 -0
  107. package/dist/tools/index.d.ts.map +1 -0
  108. package/dist/tools/index.js +43 -0
  109. package/dist/tools/index.js.map +1 -0
  110. package/dist/tools/scout.d.ts +14 -0
  111. package/dist/tools/scout.d.ts.map +1 -0
  112. package/dist/tools/scout.js +96 -0
  113. package/dist/tools/scout.js.map +1 -0
  114. package/dist/tools/unified.d.ts +7 -0
  115. package/dist/tools/unified.d.ts.map +1 -0
  116. package/dist/tools/unified.js +827 -0
  117. package/dist/tools/unified.js.map +1 -0
  118. package/dist/types.d.ts +93 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/types.js +7 -0
  121. package/dist/types.js.map +1 -0
  122. package/dist/utils/errors.d.ts +60 -0
  123. package/dist/utils/errors.d.ts.map +1 -0
  124. package/dist/utils/errors.js +131 -0
  125. package/dist/utils/errors.js.map +1 -0
  126. package/dist/utils/help.d.ts +69 -0
  127. package/dist/utils/help.d.ts.map +1 -0
  128. package/dist/utils/help.js +259 -0
  129. package/dist/utils/help.js.map +1 -0
  130. package/dist/utils/index.d.ts +4 -0
  131. package/dist/utils/index.d.ts.map +1 -0
  132. package/dist/utils/index.js +4 -0
  133. package/dist/utils/index.js.map +1 -0
  134. package/dist/utils/path-security.d.ts +64 -0
  135. package/dist/utils/path-security.d.ts.map +1 -0
  136. package/dist/utils/path-security.js +138 -0
  137. package/dist/utils/path-security.js.map +1 -0
  138. package/package.json +85 -0
@@ -0,0 +1,243 @@
1
+ import Docker from "dockerode";
2
+ import { HostConfig, ContainerInfo, ContainerStats, HostStatus, LogEntry, ImageInfo } from "../types.js";
3
+ import type { IDockerService } from "./interfaces.js";
4
+ /**
5
+ * Check if a string looks like a Unix socket path
6
+ */
7
+ export declare function isSocketPath(value: string): boolean;
8
+ /**
9
+ * DockerService class implementing IDockerService interface
10
+ * Manages Docker client connections and operations across multiple hosts
11
+ */
12
+ export declare class DockerService implements IDockerService {
13
+ private dockerFactory;
14
+ private clientCache;
15
+ constructor(dockerFactory?: (config: HostConfig) => Docker);
16
+ /**
17
+ * Get or create Docker client for a host
18
+ */
19
+ getDockerClient(config: HostConfig): Docker;
20
+ /**
21
+ * Clears all cached Docker clients.
22
+ *
23
+ * Call this during application shutdown or when you need to force new connections
24
+ * to all Docker hosts. The cached client instances will be removed, and any
25
+ * underlying HTTP/socket connections will be cleaned up by garbage collection
26
+ * when the client objects are no longer referenced.
27
+ *
28
+ * Note: Dockerode clients do not have an explicit close() method. The HTTP agent
29
+ * connections are automatically managed and will be released by the Node.js runtime
30
+ * when the client objects are garbage collected.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // Force fresh connections on next access
35
+ * dockerService.clearClients();
36
+ *
37
+ * // Or during shutdown
38
+ * process.on('SIGTERM', () => {
39
+ * dockerService.clearClients();
40
+ * process.exit(0);
41
+ * });
42
+ * ```
43
+ */
44
+ clearClients(): void;
45
+ /**
46
+ * List containers across all hosts with filtering (parallel execution)
47
+ */
48
+ listContainers(hosts: HostConfig[], options?: {
49
+ state?: "all" | "running" | "stopped" | "paused";
50
+ nameFilter?: string;
51
+ imageFilter?: string;
52
+ labelFilter?: string;
53
+ }): Promise<ContainerInfo[]>;
54
+ /**
55
+ * List containers on a single host (internal helper)
56
+ */
57
+ private listContainersOnHost;
58
+ /**
59
+ * Find which host a container is on
60
+ */
61
+ findContainerHost(containerId: string, hosts: HostConfig[]): Promise<{
62
+ host: HostConfig;
63
+ container: Docker.ContainerInfo;
64
+ } | null>;
65
+ /**
66
+ * Perform action on container
67
+ */
68
+ containerAction(containerId: string, action: "start" | "stop" | "restart" | "pause" | "unpause", host: HostConfig): Promise<void>;
69
+ /**
70
+ * Get container by ID or name
71
+ */
72
+ private getContainer;
73
+ /**
74
+ * Get container logs
75
+ */
76
+ getContainerLogs(containerId: string, host: HostConfig, options?: {
77
+ lines?: number;
78
+ since?: string;
79
+ until?: string;
80
+ stream?: "all" | "stdout" | "stderr";
81
+ }): Promise<LogEntry[]>;
82
+ /**
83
+ * Get container stats
84
+ */
85
+ getContainerStats(containerId: string, host: HostConfig): Promise<ContainerStats>;
86
+ /**
87
+ * Get host status overview (parallel execution)
88
+ */
89
+ getHostStatus(hosts: HostConfig[]): Promise<HostStatus[]>;
90
+ /**
91
+ * Get status for a single host (internal helper)
92
+ */
93
+ private getHostStatusSingle;
94
+ /**
95
+ * List images across all hosts (parallel execution)
96
+ */
97
+ listImages(hosts: HostConfig[], options?: ListImagesOptions): Promise<ImageInfo[]>;
98
+ /**
99
+ * List images from a single host (internal helper)
100
+ */
101
+ private listImagesOnHost;
102
+ /**
103
+ * Inspect container for detailed info
104
+ */
105
+ inspectContainer(containerId: string, host: HostConfig): Promise<Docker.ContainerInspectInfo>;
106
+ /**
107
+ * Get Docker system info
108
+ */
109
+ getDockerInfo(host: HostConfig): Promise<DockerSystemInfo>;
110
+ /**
111
+ * Get Docker disk usage (system df)
112
+ */
113
+ getDockerDiskUsage(host: HostConfig): Promise<DockerDiskUsage>;
114
+ /**
115
+ * Prune Docker resources
116
+ */
117
+ pruneDocker(host: HostConfig, target: "containers" | "images" | "volumes" | "networks" | "buildcache" | "all"): Promise<PruneResult[]>;
118
+ /**
119
+ * Pull an image on a host
120
+ */
121
+ pullImage(imageName: string, host: HostConfig): Promise<{
122
+ status: string;
123
+ }>;
124
+ /**
125
+ * Recreate a container (stop, remove, pull latest, start with same config)
126
+ */
127
+ recreateContainer(containerId: string, host: HostConfig, options?: {
128
+ pull?: boolean;
129
+ }): Promise<{
130
+ status: string;
131
+ containerId: string;
132
+ }>;
133
+ /**
134
+ * Remove an image
135
+ */
136
+ removeImage(imageId: string, host: HostConfig, options?: {
137
+ force?: boolean;
138
+ }): Promise<{
139
+ status: string;
140
+ }>;
141
+ /**
142
+ * Build an image from a Dockerfile (SSH-based for remote hosts)
143
+ *
144
+ * SECURITY: Implements path traversal protection (CWE-22)
145
+ * - Requires absolute paths for context and dockerfile
146
+ * - Rejects any path containing .. or . components
147
+ * - Validates character set to prevent injection
148
+ *
149
+ * @param host - Docker host configuration
150
+ * @param options - Build options (context, tag, dockerfile, noCache)
151
+ * @returns Promise resolving to build status
152
+ * @throws Error if paths contain directory traversal or invalid characters
153
+ */
154
+ buildImage(host: HostConfig, options: {
155
+ context: string;
156
+ tag: string;
157
+ dockerfile?: string;
158
+ noCache?: boolean;
159
+ }): Promise<{
160
+ status: string;
161
+ }>;
162
+ }
163
+ /**
164
+ * Load host configurations from config file, env var, or defaults
165
+ */
166
+ export declare function loadHostConfigs(): HostConfig[];
167
+ /**
168
+ * List images options
169
+ */
170
+ export interface ListImagesOptions {
171
+ danglingOnly?: boolean;
172
+ }
173
+ /**
174
+ * Format bytes to human readable
175
+ */
176
+ export declare function formatBytes(bytes: number): string;
177
+ /**
178
+ * Format uptime from created timestamp
179
+ */
180
+ export declare function formatUptime(created: string): string;
181
+ /**
182
+ * Format Docker image ID (truncate sha256: prefix and limit to 12 chars)
183
+ */
184
+ export declare function formatImageId(id: string): string;
185
+ /**
186
+ * Docker system info response
187
+ */
188
+ export interface DockerSystemInfo {
189
+ dockerVersion: string;
190
+ apiVersion: string;
191
+ os: string;
192
+ arch: string;
193
+ kernelVersion: string;
194
+ cpus: number;
195
+ memoryBytes: number;
196
+ storageDriver: string;
197
+ rootDir: string;
198
+ containersTotal: number;
199
+ containersRunning: number;
200
+ containersPaused: number;
201
+ containersStopped: number;
202
+ images: number;
203
+ }
204
+ /**
205
+ * Docker disk usage response
206
+ */
207
+ export interface DockerDiskUsage {
208
+ images: {
209
+ total: number;
210
+ active: number;
211
+ size: number;
212
+ reclaimable: number;
213
+ };
214
+ containers: {
215
+ total: number;
216
+ running: number;
217
+ size: number;
218
+ reclaimable: number;
219
+ };
220
+ volumes: {
221
+ total: number;
222
+ active: number;
223
+ size: number;
224
+ reclaimable: number;
225
+ };
226
+ buildCache: {
227
+ total: number;
228
+ size: number;
229
+ reclaimable: number;
230
+ };
231
+ totalSize: number;
232
+ totalReclaimable: number;
233
+ }
234
+ /**
235
+ * Prune result
236
+ */
237
+ export interface PruneResult {
238
+ type: string;
239
+ spaceReclaimed: number;
240
+ itemsDeleted: number;
241
+ details?: string[];
242
+ }
243
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/services/docker.ts"],"names":[],"mappings":"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"}