@paretools/docker 0.3.0 → 0.6.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 (58) hide show
  1. package/README.md +46 -12
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/docker-runner.d.ts.map +1 -1
  5. package/dist/lib/docker-runner.js +4 -3
  6. package/dist/lib/docker-runner.js.map +1 -1
  7. package/dist/lib/formatters.d.ts +106 -1
  8. package/dist/lib/formatters.d.ts.map +1 -1
  9. package/dist/lib/formatters.js +170 -0
  10. package/dist/lib/formatters.js.map +1 -1
  11. package/dist/lib/parsers.d.ts +15 -1
  12. package/dist/lib/parsers.d.ts.map +1 -1
  13. package/dist/lib/parsers.js +93 -0
  14. package/dist/lib/parsers.js.map +1 -1
  15. package/dist/lib/validation.d.ts +15 -0
  16. package/dist/lib/validation.d.ts.map +1 -0
  17. package/dist/lib/validation.js +94 -0
  18. package/dist/lib/validation.js.map +1 -0
  19. package/dist/schemas/index.d.ts +82 -176
  20. package/dist/schemas/index.d.ts.map +1 -1
  21. package/dist/schemas/index.js +39 -0
  22. package/dist/schemas/index.js.map +1 -1
  23. package/dist/tools/build.d.ts.map +1 -1
  24. package/dist/tools/build.js +37 -8
  25. package/dist/tools/build.js.map +1 -1
  26. package/dist/tools/compose-down.d.ts +3 -0
  27. package/dist/tools/compose-down.d.ts.map +1 -0
  28. package/dist/tools/compose-down.js +58 -0
  29. package/dist/tools/compose-down.js.map +1 -0
  30. package/dist/tools/compose-up.d.ts +3 -0
  31. package/dist/tools/compose-up.d.ts.map +1 -0
  32. package/dist/tools/compose-up.js +68 -0
  33. package/dist/tools/compose-up.js.map +1 -0
  34. package/dist/tools/exec.d.ts +3 -0
  35. package/dist/tools/exec.d.ts.map +1 -0
  36. package/dist/tools/exec.js +68 -0
  37. package/dist/tools/exec.js.map +1 -0
  38. package/dist/tools/images.d.ts.map +1 -1
  39. package/dist/tools/images.js +16 -5
  40. package/dist/tools/images.js.map +1 -1
  41. package/dist/tools/index.d.ts.map +1 -1
  42. package/dist/tools/index.js +10 -0
  43. package/dist/tools/index.js.map +1 -1
  44. package/dist/tools/logs.d.ts.map +1 -1
  45. package/dist/tools/logs.js +14 -5
  46. package/dist/tools/logs.js.map +1 -1
  47. package/dist/tools/ps.d.ts.map +1 -1
  48. package/dist/tools/ps.js +9 -4
  49. package/dist/tools/ps.js.map +1 -1
  50. package/dist/tools/pull.d.ts +3 -0
  51. package/dist/tools/pull.d.ts.map +1 -0
  52. package/dist/tools/pull.js +50 -0
  53. package/dist/tools/pull.js.map +1 -0
  54. package/dist/tools/run.d.ts +3 -0
  55. package/dist/tools/run.d.ts.map +1 -0
  56. package/dist/tools/run.js +106 -0
  57. package/dist/tools/run.js.map +1 -0
  58. package/package.json +20 -9
@@ -0,0 +1,15 @@
1
+ export declare function assertValidPortMapping(value: string): void;
2
+ /**
3
+ * Validates that a volume mount string does not expose dangerous host paths.
4
+ *
5
+ * Accepted formats:
6
+ * - "host:container"
7
+ * - "host:container:options"
8
+ * - "container" (container-only, no host path — always allowed)
9
+ * - "name:container" (named volume — always allowed)
10
+ *
11
+ * A host path is identified as a string starting with `/`, `./`, `../`, or `~`.
12
+ * Named volumes (plain identifiers without path separators) are always allowed.
13
+ */
14
+ export declare function assertSafeVolumeMount(value: string): void;
15
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAeA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM1D;AAaD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAqEzD"}
@@ -0,0 +1,94 @@
1
+ import { posix } from "node:path";
2
+ /**
3
+ * Validates that a string matches a Docker port mapping format.
4
+ * Accepted formats:
5
+ * - "8080" (container port only)
6
+ * - "8080:80" (host:container)
7
+ * - "8080:80/tcp" (host:container/protocol)
8
+ * - "127.0.0.1:8080:80" (ip:host:container)
9
+ * - "127.0.0.1:8080:80/udp"
10
+ * - "8080-8090:80-90" (port ranges)
11
+ */
12
+ const PORT_MAPPING_RE = /^(?:(?:\d{1,3}\.){3}\d{1,3}:)?(?:\d{1,5}(?:-\d{1,5})?:)?\d{1,5}(?:-\d{1,5})?(?:\/(?:tcp|udp|sctp))?$/;
13
+ export function assertValidPortMapping(value) {
14
+ if (!PORT_MAPPING_RE.test(value)) {
15
+ throw new Error(`Invalid port mapping: "${value}". Expected format like "8080", "8080:80", "127.0.0.1:8080:80/tcp", or a port range.`);
16
+ }
17
+ }
18
+ /**
19
+ * Dangerous host paths that must never be bind-mounted into a container.
20
+ * Each entry is checked as an exact match or as a prefix (with trailing `/`).
21
+ */
22
+ const DANGEROUS_PATHS = ["/", "/etc", "/var/run/docker.sock", "/proc", "/sys", "/dev", "/root"];
23
+ /**
24
+ * Windows root paths that must be blocked (case-insensitive).
25
+ */
26
+ const WINDOWS_ROOT_RE = /^[A-Za-z]:[/\\]?$/;
27
+ /**
28
+ * Validates that a volume mount string does not expose dangerous host paths.
29
+ *
30
+ * Accepted formats:
31
+ * - "host:container"
32
+ * - "host:container:options"
33
+ * - "container" (container-only, no host path — always allowed)
34
+ * - "name:container" (named volume — always allowed)
35
+ *
36
+ * A host path is identified as a string starting with `/`, `./`, `../`, or `~`.
37
+ * Named volumes (plain identifiers without path separators) are always allowed.
38
+ */
39
+ export function assertSafeVolumeMount(value) {
40
+ // Trim whitespace to prevent bypass via leading/trailing spaces
41
+ const trimmed = value.trim();
42
+ // Detect Windows-style paths (e.g., "C:\path" or "C:/path") where the
43
+ // drive letter colon is part of the host path, not a host:container separator.
44
+ const hasWindowsDrive = /^[A-Za-z]:/.test(trimmed);
45
+ // Split on the appropriate colon to extract the host part.
46
+ // For Windows paths like "C:\foo:/bar", skip the drive-letter colon.
47
+ let colonIdx;
48
+ if (hasWindowsDrive) {
49
+ colonIdx = trimmed.indexOf(":", 2); // skip past "C:"
50
+ }
51
+ else {
52
+ colonIdx = trimmed.indexOf(":");
53
+ }
54
+ if (colonIdx === -1) {
55
+ // No separator colon — container-only mount or named volume, always safe
56
+ return;
57
+ }
58
+ const hostPart = trimmed.substring(0, colonIdx).trim();
59
+ // Determine if the host part is a path (starts with /, ./, ../, or ~)
60
+ // Named volumes are plain identifiers (e.g., "myvolume") and are always safe.
61
+ const isPath = hostPart.startsWith("/") ||
62
+ hostPart.startsWith("./") ||
63
+ hostPart.startsWith("../") ||
64
+ hostPart.startsWith("~") ||
65
+ hostPart === "." ||
66
+ hostPart === "..";
67
+ // Also check for Windows-style absolute paths (e.g., C:\)
68
+ const isWindowsPath = /^[A-Za-z]:/.test(hostPart);
69
+ if (!isPath && !isWindowsPath) {
70
+ // Named volume — always allowed
71
+ return;
72
+ }
73
+ // Block Windows root mounts (e.g., "C:\", "C:/", "C:")
74
+ if (isWindowsPath && WINDOWS_ROOT_RE.test(hostPart)) {
75
+ throw new Error(`Dangerous volume mount blocked: "${value}". Mounting a Windows root drive is not allowed.`);
76
+ }
77
+ // Normalize the host path: resolve ".." segments, remove trailing slashes
78
+ const normalized = posix.normalize(hostPart).replace(/\/+$/, "") || "/";
79
+ for (const dangerous of DANGEROUS_PATHS) {
80
+ if (dangerous === "/") {
81
+ // Exact root mount
82
+ if (normalized === "/") {
83
+ throw new Error(`Dangerous volume mount blocked: "${value}". Mounting the root filesystem is not allowed.`);
84
+ }
85
+ }
86
+ else {
87
+ // Exact match or prefix match (e.g., /etc or /etc/shadow)
88
+ if (normalized === dangerous || normalized.startsWith(dangerous + "/")) {
89
+ throw new Error(`Dangerous volume mount blocked: "${value}". Mounting "${dangerous}" or its children is not allowed.`);
90
+ }
91
+ }
92
+ }
93
+ }
94
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"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"}
@@ -1,187 +1,85 @@
1
1
  import { z } from "zod";
2
+ /** Zod schema for a single Docker container with ID, name, image, state, and port mappings. */
2
3
  export declare const ContainerSchema: z.ZodObject<{
3
4
  id: z.ZodString;
4
5
  name: z.ZodString;
5
6
  image: z.ZodString;
6
7
  status: z.ZodString;
7
- state: z.ZodEnum<["running", "exited", "paused", "restarting", "dead", "created", "removing"]>;
8
+ state: z.ZodEnum<{
9
+ running: "running";
10
+ exited: "exited";
11
+ paused: "paused";
12
+ restarting: "restarting";
13
+ dead: "dead";
14
+ created: "created";
15
+ removing: "removing";
16
+ }>;
8
17
  ports: z.ZodArray<z.ZodObject<{
9
18
  host: z.ZodOptional<z.ZodNumber>;
10
19
  container: z.ZodNumber;
11
- protocol: z.ZodEnum<["tcp", "udp"]>;
12
- }, "strip", z.ZodTypeAny, {
13
- container: number;
14
- protocol: "tcp" | "udp";
15
- host?: number | undefined;
16
- }, {
17
- container: number;
18
- protocol: "tcp" | "udp";
19
- host?: number | undefined;
20
- }>, "many">;
20
+ protocol: z.ZodEnum<{
21
+ tcp: "tcp";
22
+ udp: "udp";
23
+ }>;
24
+ }, z.core.$strip>>;
21
25
  created: z.ZodString;
22
- }, "strip", z.ZodTypeAny, {
23
- id: string;
24
- name: string;
25
- image: string;
26
- status: string;
27
- state: "running" | "exited" | "paused" | "restarting" | "dead" | "created" | "removing";
28
- created: string;
29
- ports: {
30
- container: number;
31
- protocol: "tcp" | "udp";
32
- host?: number | undefined;
33
- }[];
34
- }, {
35
- id: string;
36
- name: string;
37
- image: string;
38
- status: string;
39
- state: "running" | "exited" | "paused" | "restarting" | "dead" | "created" | "removing";
40
- created: string;
41
- ports: {
42
- container: number;
43
- protocol: "tcp" | "udp";
44
- host?: number | undefined;
45
- }[];
46
- }>;
26
+ }, z.core.$strip>;
27
+ /** Zod schema for structured docker ps output with container list and running/stopped counts. */
47
28
  export declare const DockerPsSchema: z.ZodObject<{
48
29
  containers: z.ZodArray<z.ZodObject<{
49
30
  id: z.ZodString;
50
31
  name: z.ZodString;
51
32
  image: z.ZodString;
52
33
  status: z.ZodString;
53
- state: z.ZodEnum<["running", "exited", "paused", "restarting", "dead", "created", "removing"]>;
34
+ state: z.ZodEnum<{
35
+ running: "running";
36
+ exited: "exited";
37
+ paused: "paused";
38
+ restarting: "restarting";
39
+ dead: "dead";
40
+ created: "created";
41
+ removing: "removing";
42
+ }>;
54
43
  ports: z.ZodArray<z.ZodObject<{
55
44
  host: z.ZodOptional<z.ZodNumber>;
56
45
  container: z.ZodNumber;
57
- protocol: z.ZodEnum<["tcp", "udp"]>;
58
- }, "strip", z.ZodTypeAny, {
59
- container: number;
60
- protocol: "tcp" | "udp";
61
- host?: number | undefined;
62
- }, {
63
- container: number;
64
- protocol: "tcp" | "udp";
65
- host?: number | undefined;
66
- }>, "many">;
46
+ protocol: z.ZodEnum<{
47
+ tcp: "tcp";
48
+ udp: "udp";
49
+ }>;
50
+ }, z.core.$strip>>;
67
51
  created: z.ZodString;
68
- }, "strip", z.ZodTypeAny, {
69
- id: string;
70
- name: string;
71
- image: string;
72
- status: string;
73
- state: "running" | "exited" | "paused" | "restarting" | "dead" | "created" | "removing";
74
- created: string;
75
- ports: {
76
- container: number;
77
- protocol: "tcp" | "udp";
78
- host?: number | undefined;
79
- }[];
80
- }, {
81
- id: string;
82
- name: string;
83
- image: string;
84
- status: string;
85
- state: "running" | "exited" | "paused" | "restarting" | "dead" | "created" | "removing";
86
- created: string;
87
- ports: {
88
- container: number;
89
- protocol: "tcp" | "udp";
90
- host?: number | undefined;
91
- }[];
92
- }>, "many">;
52
+ }, z.core.$strip>>;
93
53
  total: z.ZodNumber;
94
54
  running: z.ZodNumber;
95
55
  stopped: z.ZodNumber;
96
- }, "strip", z.ZodTypeAny, {
97
- running: number;
98
- containers: {
99
- id: string;
100
- name: string;
101
- image: string;
102
- status: string;
103
- state: "running" | "exited" | "paused" | "restarting" | "dead" | "created" | "removing";
104
- created: string;
105
- ports: {
106
- container: number;
107
- protocol: "tcp" | "udp";
108
- host?: number | undefined;
109
- }[];
110
- }[];
111
- total: number;
112
- stopped: number;
113
- }, {
114
- running: number;
115
- containers: {
116
- id: string;
117
- name: string;
118
- image: string;
119
- status: string;
120
- state: "running" | "exited" | "paused" | "restarting" | "dead" | "created" | "removing";
121
- created: string;
122
- ports: {
123
- container: number;
124
- protocol: "tcp" | "udp";
125
- host?: number | undefined;
126
- }[];
127
- }[];
128
- total: number;
129
- stopped: number;
130
- }>;
56
+ }, z.core.$strip>;
131
57
  export type DockerPs = z.infer<typeof DockerPsSchema>;
58
+ /** Zod schema for structured docker build output with success status, image ID, and build errors. */
132
59
  export declare const DockerBuildSchema: z.ZodObject<{
133
60
  success: z.ZodBoolean;
134
61
  imageId: z.ZodOptional<z.ZodString>;
135
62
  duration: z.ZodNumber;
136
63
  steps: z.ZodOptional<z.ZodNumber>;
137
- errors: z.ZodArray<z.ZodString, "many">;
138
- }, "strip", z.ZodTypeAny, {
139
- success: boolean;
140
- duration: number;
141
- errors: string[];
142
- imageId?: string | undefined;
143
- steps?: number | undefined;
144
- }, {
145
- success: boolean;
146
- duration: number;
147
- errors: string[];
148
- imageId?: string | undefined;
149
- steps?: number | undefined;
150
- }>;
64
+ errors: z.ZodArray<z.ZodString>;
65
+ }, z.core.$strip>;
151
66
  export type DockerBuild = z.infer<typeof DockerBuildSchema>;
67
+ /** Zod schema for structured docker logs output with container name, log lines, and total count. */
152
68
  export declare const DockerLogsSchema: z.ZodObject<{
153
69
  container: z.ZodString;
154
- lines: z.ZodArray<z.ZodString, "many">;
70
+ lines: z.ZodArray<z.ZodString>;
155
71
  total: z.ZodNumber;
156
- }, "strip", z.ZodTypeAny, {
157
- container: string;
158
- total: number;
159
- lines: string[];
160
- }, {
161
- container: string;
162
- total: number;
163
- lines: string[];
164
- }>;
72
+ }, z.core.$strip>;
165
73
  export type DockerLogs = z.infer<typeof DockerLogsSchema>;
74
+ /** Zod schema for a single Docker image with ID, repository, tag, size, and creation time. */
166
75
  export declare const ImageSchema: z.ZodObject<{
167
76
  id: z.ZodString;
168
77
  repository: z.ZodString;
169
78
  tag: z.ZodString;
170
79
  size: z.ZodString;
171
80
  created: z.ZodString;
172
- }, "strip", z.ZodTypeAny, {
173
- id: string;
174
- created: string;
175
- repository: string;
176
- tag: string;
177
- size: string;
178
- }, {
179
- id: string;
180
- created: string;
181
- repository: string;
182
- tag: string;
183
- size: string;
184
- }>;
81
+ }, z.core.$strip>;
82
+ /** Zod schema for structured docker images output with image list and total count. */
185
83
  export declare const DockerImagesSchema: z.ZodObject<{
186
84
  images: z.ZodArray<z.ZodObject<{
187
85
  id: z.ZodString;
@@ -189,38 +87,46 @@ export declare const DockerImagesSchema: z.ZodObject<{
189
87
  tag: z.ZodString;
190
88
  size: z.ZodString;
191
89
  created: z.ZodString;
192
- }, "strip", z.ZodTypeAny, {
193
- id: string;
194
- created: string;
195
- repository: string;
196
- tag: string;
197
- size: string;
198
- }, {
199
- id: string;
200
- created: string;
201
- repository: string;
202
- tag: string;
203
- size: string;
204
- }>, "many">;
90
+ }, z.core.$strip>>;
205
91
  total: z.ZodNumber;
206
- }, "strip", z.ZodTypeAny, {
207
- total: number;
208
- images: {
209
- id: string;
210
- created: string;
211
- repository: string;
212
- tag: string;
213
- size: string;
214
- }[];
215
- }, {
216
- total: number;
217
- images: {
218
- id: string;
219
- created: string;
220
- repository: string;
221
- tag: string;
222
- size: string;
223
- }[];
224
- }>;
92
+ }, z.core.$strip>;
225
93
  export type DockerImages = z.infer<typeof DockerImagesSchema>;
94
+ /** Zod schema for structured docker run output with container ID, image, and detach status. */
95
+ export declare const DockerRunSchema: z.ZodObject<{
96
+ containerId: z.ZodString;
97
+ image: z.ZodString;
98
+ detached: z.ZodBoolean;
99
+ name: z.ZodOptional<z.ZodString>;
100
+ }, z.core.$strip>;
101
+ export type DockerRun = z.infer<typeof DockerRunSchema>;
102
+ /** Zod schema for structured docker exec output with exit code, stdout, stderr, and success flag. */
103
+ export declare const DockerExecSchema: z.ZodObject<{
104
+ exitCode: z.ZodNumber;
105
+ stdout: z.ZodString;
106
+ stderr: z.ZodString;
107
+ success: z.ZodBoolean;
108
+ }, z.core.$strip>;
109
+ export type DockerExec = z.infer<typeof DockerExecSchema>;
110
+ /** Zod schema for structured docker compose up output with service list and started count. */
111
+ export declare const DockerComposeUpSchema: z.ZodObject<{
112
+ success: z.ZodBoolean;
113
+ services: z.ZodArray<z.ZodString>;
114
+ started: z.ZodNumber;
115
+ }, z.core.$strip>;
116
+ export type DockerComposeUp = z.infer<typeof DockerComposeUpSchema>;
117
+ /** Zod schema for structured docker compose down output with stopped and removed counts. */
118
+ export declare const DockerComposeDownSchema: z.ZodObject<{
119
+ success: z.ZodBoolean;
120
+ stopped: z.ZodNumber;
121
+ removed: z.ZodNumber;
122
+ }, z.core.$strip>;
123
+ export type DockerComposeDown = z.infer<typeof DockerComposeDownSchema>;
124
+ /** Zod schema for structured docker pull output with image, tag, digest, and success flag. */
125
+ export declare const DockerPullSchema: z.ZodObject<{
126
+ image: z.ZodString;
127
+ tag: z.ZodString;
128
+ digest: z.ZodOptional<z.ZodString>;
129
+ success: z.ZodBoolean;
130
+ }, z.core.$strip>;
131
+ export type DockerPull = z.infer<typeof DockerPullSchema>;
226
132
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc1B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;EAMtB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+FAA+F;AAC/F,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;iBAc1B,CAAC;AAEH,iGAAiG;AACjG,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,qGAAqG;AACrG,eAAO,MAAM,iBAAiB;;;;;;iBAM5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,oGAAoG;AACpG,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,8FAA8F;AAC9F,eAAO,MAAM,WAAW;;;;;;iBAMtB,CAAC;AAEH,sFAAsF;AACtF,eAAO,MAAM,kBAAkB;;;;;;;;;iBAG7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,+FAA+F;AAC/F,eAAO,MAAM,eAAe;;;;;iBAK1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,qGAAqG;AACrG,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,4FAA4F;AAC5F,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,8FAA8F;AAC9F,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ /** Zod schema for a single Docker container with ID, name, image, state, and port mappings. */
2
3
  export const ContainerSchema = z.object({
3
4
  id: z.string(),
4
5
  name: z.string(),
@@ -12,12 +13,14 @@ export const ContainerSchema = z.object({
12
13
  })),
13
14
  created: z.string(),
14
15
  });
16
+ /** Zod schema for structured docker ps output with container list and running/stopped counts. */
15
17
  export const DockerPsSchema = z.object({
16
18
  containers: z.array(ContainerSchema),
17
19
  total: z.number(),
18
20
  running: z.number(),
19
21
  stopped: z.number(),
20
22
  });
23
+ /** Zod schema for structured docker build output with success status, image ID, and build errors. */
21
24
  export const DockerBuildSchema = z.object({
22
25
  success: z.boolean(),
23
26
  imageId: z.string().optional(),
@@ -25,11 +28,13 @@ export const DockerBuildSchema = z.object({
25
28
  steps: z.number().optional(),
26
29
  errors: z.array(z.string()),
27
30
  });
31
+ /** Zod schema for structured docker logs output with container name, log lines, and total count. */
28
32
  export const DockerLogsSchema = z.object({
29
33
  container: z.string(),
30
34
  lines: z.array(z.string()),
31
35
  total: z.number(),
32
36
  });
37
+ /** Zod schema for a single Docker image with ID, repository, tag, size, and creation time. */
33
38
  export const ImageSchema = z.object({
34
39
  id: z.string(),
35
40
  repository: z.string(),
@@ -37,8 +42,42 @@ export const ImageSchema = z.object({
37
42
  size: z.string(),
38
43
  created: z.string(),
39
44
  });
45
+ /** Zod schema for structured docker images output with image list and total count. */
40
46
  export const DockerImagesSchema = z.object({
41
47
  images: z.array(ImageSchema),
42
48
  total: z.number(),
43
49
  });
50
+ /** Zod schema for structured docker run output with container ID, image, and detach status. */
51
+ export const DockerRunSchema = z.object({
52
+ containerId: z.string(),
53
+ image: z.string(),
54
+ detached: z.boolean(),
55
+ name: z.string().optional(),
56
+ });
57
+ /** Zod schema for structured docker exec output with exit code, stdout, stderr, and success flag. */
58
+ export const DockerExecSchema = z.object({
59
+ exitCode: z.number(),
60
+ stdout: z.string(),
61
+ stderr: z.string(),
62
+ success: z.boolean(),
63
+ });
64
+ /** Zod schema for structured docker compose up output with service list and started count. */
65
+ export const DockerComposeUpSchema = z.object({
66
+ success: z.boolean(),
67
+ services: z.array(z.string()),
68
+ started: z.number(),
69
+ });
70
+ /** Zod schema for structured docker compose down output with stopped and removed counts. */
71
+ export const DockerComposeDownSchema = z.object({
72
+ success: z.boolean(),
73
+ stopped: z.number(),
74
+ removed: z.number(),
75
+ });
76
+ /** Zod schema for structured docker pull output with image, tag, digest, and success flag. */
77
+ export const DockerPullSchema = z.object({
78
+ image: z.string(),
79
+ tag: z.string(),
80
+ digest: z.string().optional(),
81
+ success: z.boolean(),
82
+ });
44
83
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3F,KAAK,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACjC,CAAC,CACH;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,QA8BlD"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,QAmElD"}
@@ -1,21 +1,50 @@
1
1
  import { z } from "zod";
2
- import { dualOutput } from "@paretools/shared";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
3
  import { docker } from "../lib/docker-runner.js";
4
4
  import { parseBuildOutput } from "../lib/parsers.js";
5
- import { formatBuild } from "../lib/formatters.js";
5
+ import { formatBuild, compactBuildMap, formatBuildCompact } from "../lib/formatters.js";
6
6
  import { DockerBuildSchema } from "../schemas/index.js";
7
7
  export function registerBuildTool(server) {
8
8
  server.registerTool("build", {
9
9
  title: "Docker Build",
10
10
  description: "Builds a Docker image and returns structured build results including image ID, duration, and errors. Use instead of running `docker build` in the terminal.",
11
11
  inputSchema: {
12
- path: z.string().optional().describe("Build context path (default: cwd)"),
13
- tag: z.string().optional().describe("Image tag (e.g., myapp:latest)"),
14
- file: z.string().optional().describe("Dockerfile path (default: Dockerfile)"),
15
- args: z.array(z.string()).optional().default([]).describe("Additional build arguments"),
12
+ path: z
13
+ .string()
14
+ .max(INPUT_LIMITS.PATH_MAX)
15
+ .optional()
16
+ .describe("Build context path (default: cwd)"),
17
+ tag: z
18
+ .string()
19
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
20
+ .optional()
21
+ .describe("Image tag (e.g., myapp:latest)"),
22
+ file: z
23
+ .string()
24
+ .max(INPUT_LIMITS.PATH_MAX)
25
+ .optional()
26
+ .describe("Dockerfile path (default: Dockerfile)"),
27
+ args: z
28
+ .array(z.string().max(INPUT_LIMITS.STRING_MAX))
29
+ .max(INPUT_LIMITS.ARRAY_MAX)
30
+ .optional()
31
+ .default([])
32
+ .describe("Additional build arguments"),
33
+ compact: z
34
+ .boolean()
35
+ .optional()
36
+ .default(true)
37
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
16
38
  },
17
39
  outputSchema: DockerBuildSchema,
18
- }, async ({ path, tag, file, args }) => {
40
+ }, async ({ path, tag, file, args, compact }) => {
41
+ if (tag)
42
+ assertNoFlagInjection(tag, "tag");
43
+ if (file)
44
+ assertNoFlagInjection(file, "file");
45
+ for (const a of args ?? []) {
46
+ assertNoFlagInjection(a, "args");
47
+ }
19
48
  const cwd = path || process.cwd();
20
49
  const dockerArgs = ["build", "."];
21
50
  if (tag)
@@ -28,7 +57,7 @@ export function registerBuildTool(server) {
28
57
  const result = await docker(dockerArgs, cwd);
29
58
  const duration = Math.round((Date.now() - start) / 100) / 10;
30
59
  const data = parseBuildOutput(result.stdout, result.stderr, result.exitCode, duration);
31
- return dualOutput(data, formatBuild);
60
+ return compactDualOutput(data, result.stdout, formatBuild, compactBuildMap, formatBuildCompact, compact === false);
32
61
  });
33
62
  }
34
63
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,OAAO,EACP;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,6JAA6J;QAC/J,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACzE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACrE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC7E,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;SACxF;QACD,YAAY,EAAE,iBAAiB;KAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,GAAG;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QAE7D,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvF,OAAO,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACvC,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerComposeDownTool(server: McpServer): void;
3
+ //# sourceMappingURL=compose-down.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-down.d.ts","sourceRoot":"","sources":["../../src/tools/compose-down.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAgExD"}