@paretools/docker 0.5.0 → 0.7.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 +4 -4
- package/dist/index.js +1 -1
- package/dist/lib/formatters.d.ts +145 -1
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +243 -0
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/parsers.d.ts +9 -1
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +67 -0
- package/dist/lib/parsers.js.map +1 -1
- package/dist/lib/validation.d.ts +15 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +94 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/schemas/index.d.ts +70 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +50 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/build.d.ts.map +1 -1
- package/dist/tools/build.js +37 -8
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/compose-down.d.ts.map +1 -1
- package/dist/tools/compose-down.js +20 -6
- package/dist/tools/compose-down.js.map +1 -1
- package/dist/tools/compose-ps.d.ts +3 -0
- package/dist/tools/compose-ps.d.ts.map +1 -0
- package/dist/tools/compose-ps.js +31 -0
- package/dist/tools/compose-ps.js.map +1 -0
- package/dist/tools/compose-up.d.ts.map +1 -1
- package/dist/tools/compose-up.js +27 -7
- package/dist/tools/compose-up.js.map +1 -1
- package/dist/tools/exec.d.ts.map +1 -1
- package/dist/tools/exec.js +41 -10
- package/dist/tools/exec.js.map +1 -1
- package/dist/tools/images.d.ts.map +1 -1
- package/dist/tools/images.js +16 -5
- package/dist/tools/images.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +32 -9
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspect.d.ts +3 -0
- package/dist/tools/inspect.d.ts.map +1 -0
- package/dist/tools/inspect.js +40 -0
- package/dist/tools/inspect.js.map +1 -0
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +14 -5
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/network-ls.d.ts +3 -0
- package/dist/tools/network-ls.d.ts.map +1 -0
- package/dist/tools/network-ls.js +31 -0
- package/dist/tools/network-ls.js.map +1 -0
- package/dist/tools/ps.d.ts.map +1 -1
- package/dist/tools/ps.js +9 -4
- package/dist/tools/ps.js.map +1 -1
- package/dist/tools/pull.d.ts.map +1 -1
- package/dist/tools/pull.js +21 -6
- package/dist/tools/pull.js.map +1 -1
- package/dist/tools/run.d.ts.map +1 -1
- package/dist/tools/run.js +39 -11
- package/dist/tools/run.js.map +1 -1
- package/dist/tools/volume-ls.d.ts +3 -0
- package/dist/tools/volume-ls.d.ts.map +1 -0
- package/dist/tools/volume-ls.js +31 -0
- package/dist/tools/volume-ls.js.map +1 -0
- package/package.json +4 -4
|
@@ -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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"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -129,4 +129,74 @@ export declare const DockerPullSchema: z.ZodObject<{
|
|
|
129
129
|
success: z.ZodBoolean;
|
|
130
130
|
}, z.core.$strip>;
|
|
131
131
|
export type DockerPull = z.infer<typeof DockerPullSchema>;
|
|
132
|
+
/** Zod schema for structured docker inspect output with container/image details. */
|
|
133
|
+
export declare const DockerInspectSchema: z.ZodObject<{
|
|
134
|
+
id: z.ZodString;
|
|
135
|
+
name: z.ZodString;
|
|
136
|
+
state: z.ZodObject<{
|
|
137
|
+
status: z.ZodString;
|
|
138
|
+
running: z.ZodBoolean;
|
|
139
|
+
startedAt: z.ZodOptional<z.ZodString>;
|
|
140
|
+
}, z.core.$strip>;
|
|
141
|
+
image: z.ZodString;
|
|
142
|
+
platform: z.ZodOptional<z.ZodString>;
|
|
143
|
+
created: z.ZodString;
|
|
144
|
+
}, z.core.$strip>;
|
|
145
|
+
export type DockerInspect = z.infer<typeof DockerInspectSchema>;
|
|
146
|
+
/** Zod schema for a single Docker network entry. */
|
|
147
|
+
export declare const NetworkSchema: z.ZodObject<{
|
|
148
|
+
id: z.ZodString;
|
|
149
|
+
name: z.ZodString;
|
|
150
|
+
driver: z.ZodString;
|
|
151
|
+
scope: z.ZodString;
|
|
152
|
+
}, z.core.$strip>;
|
|
153
|
+
/** Zod schema for structured docker network ls output. */
|
|
154
|
+
export declare const DockerNetworkLsSchema: z.ZodObject<{
|
|
155
|
+
networks: z.ZodArray<z.ZodObject<{
|
|
156
|
+
id: z.ZodString;
|
|
157
|
+
name: z.ZodString;
|
|
158
|
+
driver: z.ZodString;
|
|
159
|
+
scope: z.ZodString;
|
|
160
|
+
}, z.core.$strip>>;
|
|
161
|
+
total: z.ZodNumber;
|
|
162
|
+
}, z.core.$strip>;
|
|
163
|
+
export type DockerNetworkLs = z.infer<typeof DockerNetworkLsSchema>;
|
|
164
|
+
/** Zod schema for a single Docker volume entry. */
|
|
165
|
+
export declare const VolumeSchema: z.ZodObject<{
|
|
166
|
+
name: z.ZodString;
|
|
167
|
+
driver: z.ZodString;
|
|
168
|
+
mountpoint: z.ZodString;
|
|
169
|
+
scope: z.ZodString;
|
|
170
|
+
}, z.core.$strip>;
|
|
171
|
+
/** Zod schema for structured docker volume ls output. */
|
|
172
|
+
export declare const DockerVolumeLsSchema: z.ZodObject<{
|
|
173
|
+
volumes: z.ZodArray<z.ZodObject<{
|
|
174
|
+
name: z.ZodString;
|
|
175
|
+
driver: z.ZodString;
|
|
176
|
+
mountpoint: z.ZodString;
|
|
177
|
+
scope: z.ZodString;
|
|
178
|
+
}, z.core.$strip>>;
|
|
179
|
+
total: z.ZodNumber;
|
|
180
|
+
}, z.core.$strip>;
|
|
181
|
+
export type DockerVolumeLs = z.infer<typeof DockerVolumeLsSchema>;
|
|
182
|
+
/** Zod schema for a single Docker Compose service entry. */
|
|
183
|
+
export declare const ComposeServiceSchema: z.ZodObject<{
|
|
184
|
+
name: z.ZodString;
|
|
185
|
+
service: z.ZodString;
|
|
186
|
+
state: z.ZodString;
|
|
187
|
+
status: z.ZodString;
|
|
188
|
+
ports: z.ZodOptional<z.ZodString>;
|
|
189
|
+
}, z.core.$strip>;
|
|
190
|
+
/** Zod schema for structured docker compose ps output. */
|
|
191
|
+
export declare const DockerComposePsSchema: z.ZodObject<{
|
|
192
|
+
services: z.ZodArray<z.ZodObject<{
|
|
193
|
+
name: z.ZodString;
|
|
194
|
+
service: z.ZodString;
|
|
195
|
+
state: z.ZodString;
|
|
196
|
+
status: z.ZodString;
|
|
197
|
+
ports: z.ZodOptional<z.ZodString>;
|
|
198
|
+
}, z.core.$strip>>;
|
|
199
|
+
total: z.ZodNumber;
|
|
200
|
+
}, z.core.$strip>;
|
|
201
|
+
export type DockerComposePs = z.infer<typeof DockerComposePsSchema>;
|
|
132
202
|
//# 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,+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
|
+
{"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;AAE1D,oFAAoF;AACpF,eAAO,MAAM,mBAAmB;;;;;;;;;;;iBAW9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,oDAAoD;AACpD,eAAO,MAAM,aAAa;;;;;iBAKxB,CAAC;AAEH,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB;;;;;;;;iBAGhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,mDAAmD;AACnD,eAAO,MAAM,YAAY;;;;;iBAKvB,CAAC;AAEH,yDAAyD;AACzD,eAAO,MAAM,oBAAoB;;;;;;;;iBAG/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB;;;;;;iBAM/B,CAAC;AAEH,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB;;;;;;;;;iBAGhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -80,4 +80,54 @@ export const DockerPullSchema = z.object({
|
|
|
80
80
|
digest: z.string().optional(),
|
|
81
81
|
success: z.boolean(),
|
|
82
82
|
});
|
|
83
|
+
/** Zod schema for structured docker inspect output with container/image details. */
|
|
84
|
+
export const DockerInspectSchema = z.object({
|
|
85
|
+
id: z.string(),
|
|
86
|
+
name: z.string(),
|
|
87
|
+
state: z.object({
|
|
88
|
+
status: z.string(),
|
|
89
|
+
running: z.boolean(),
|
|
90
|
+
startedAt: z.string().optional(),
|
|
91
|
+
}),
|
|
92
|
+
image: z.string(),
|
|
93
|
+
platform: z.string().optional(),
|
|
94
|
+
created: z.string(),
|
|
95
|
+
});
|
|
96
|
+
/** Zod schema for a single Docker network entry. */
|
|
97
|
+
export const NetworkSchema = z.object({
|
|
98
|
+
id: z.string(),
|
|
99
|
+
name: z.string(),
|
|
100
|
+
driver: z.string(),
|
|
101
|
+
scope: z.string(),
|
|
102
|
+
});
|
|
103
|
+
/** Zod schema for structured docker network ls output. */
|
|
104
|
+
export const DockerNetworkLsSchema = z.object({
|
|
105
|
+
networks: z.array(NetworkSchema),
|
|
106
|
+
total: z.number(),
|
|
107
|
+
});
|
|
108
|
+
/** Zod schema for a single Docker volume entry. */
|
|
109
|
+
export const VolumeSchema = z.object({
|
|
110
|
+
name: z.string(),
|
|
111
|
+
driver: z.string(),
|
|
112
|
+
mountpoint: z.string(),
|
|
113
|
+
scope: z.string(),
|
|
114
|
+
});
|
|
115
|
+
/** Zod schema for structured docker volume ls output. */
|
|
116
|
+
export const DockerVolumeLsSchema = z.object({
|
|
117
|
+
volumes: z.array(VolumeSchema),
|
|
118
|
+
total: z.number(),
|
|
119
|
+
});
|
|
120
|
+
/** Zod schema for a single Docker Compose service entry. */
|
|
121
|
+
export const ComposeServiceSchema = z.object({
|
|
122
|
+
name: z.string(),
|
|
123
|
+
service: z.string(),
|
|
124
|
+
state: z.string(),
|
|
125
|
+
status: z.string(),
|
|
126
|
+
ports: z.string().optional(),
|
|
127
|
+
});
|
|
128
|
+
/** Zod schema for structured docker compose ps output. */
|
|
129
|
+
export const DockerComposePsSchema = z.object({
|
|
130
|
+
services: z.array(ComposeServiceSchema),
|
|
131
|
+
total: z.number(),
|
|
132
|
+
});
|
|
83
133
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
|
|
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,
|
|
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"}
|
package/dist/tools/build.js
CHANGED
|
@@ -1,21 +1,50 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
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
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
60
|
+
return compactDualOutput(data, result.stdout, formatBuild, compactBuildMap, formatBuildCompact, compact === false);
|
|
32
61
|
});
|
|
33
62
|
}
|
|
34
63
|
//# sourceMappingURL=build.js.map
|
package/dist/tools/build.js.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
|
|
3
3
|
import { docker } from "../lib/docker-runner.js";
|
|
4
4
|
import { parseComposeDownOutput } from "../lib/parsers.js";
|
|
5
|
-
import { formatComposeDown } from "../lib/formatters.js";
|
|
5
|
+
import { formatComposeDown, compactComposeDownMap, formatComposeDownCompact, } from "../lib/formatters.js";
|
|
6
6
|
import { DockerComposeDownSchema } from "../schemas/index.js";
|
|
7
7
|
export function registerComposeDownTool(server) {
|
|
8
8
|
server.registerTool("compose-down", {
|
|
9
9
|
title: "Docker Compose Down",
|
|
10
10
|
description: "Stops Docker Compose services and returns structured status. Use instead of running `docker compose down` in the terminal.",
|
|
11
11
|
inputSchema: {
|
|
12
|
-
path: z
|
|
12
|
+
path: z
|
|
13
|
+
.string()
|
|
14
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
15
|
+
.describe("Directory containing docker-compose.yml"),
|
|
13
16
|
volumes: z
|
|
14
17
|
.boolean()
|
|
15
18
|
.optional()
|
|
@@ -20,10 +23,21 @@ export function registerComposeDownTool(server) {
|
|
|
20
23
|
.optional()
|
|
21
24
|
.default(false)
|
|
22
25
|
.describe("Remove orphan containers (default: false)"),
|
|
23
|
-
file: z
|
|
26
|
+
file: z
|
|
27
|
+
.string()
|
|
28
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Compose file path (default: docker-compose.yml)"),
|
|
31
|
+
compact: z
|
|
32
|
+
.boolean()
|
|
33
|
+
.optional()
|
|
34
|
+
.default(true)
|
|
35
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
24
36
|
},
|
|
25
37
|
outputSchema: DockerComposeDownSchema,
|
|
26
|
-
}, async ({ path, volumes, removeOrphans, file }) => {
|
|
38
|
+
}, async ({ path, volumes, removeOrphans, file, compact }) => {
|
|
39
|
+
if (file)
|
|
40
|
+
assertNoFlagInjection(file, "file");
|
|
27
41
|
const args = ["compose"];
|
|
28
42
|
if (file)
|
|
29
43
|
args.push("-f", file);
|
|
@@ -38,7 +52,7 @@ export function registerComposeDownTool(server) {
|
|
|
38
52
|
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
39
53
|
throw new Error(`docker compose down failed: ${errorMsg.trim()}`);
|
|
40
54
|
}
|
|
41
|
-
return
|
|
55
|
+
return compactDualOutput(data, result.stdout, formatComposeDown, compactComposeDownMap, formatComposeDownCompact, compact === false);
|
|
42
56
|
});
|
|
43
57
|
}
|
|
44
58
|
//# sourceMappingURL=compose-down.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-down.js","sourceRoot":"","sources":["../../src/tools/compose-down.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"compose-down.js","sourceRoot":"","sources":["../../src/tools/compose-down.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,4HAA4H;QAC9H,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,CAAC,yCAAyC,CAAC;YACtD,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,4CAA4C,CAAC;YACzD,aAAa,EAAE,CAAC;iBACb,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,2CAA2C,CAAC;YACxD,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,uBAAuB;KACtC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACxD,IAAI,IAAI;YAAE,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,IAAI,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEnF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-ps.d.ts","sourceRoot":"","sources":["../../src/tools/compose-ps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAqCtD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
|
|
3
|
+
import { docker } from "../lib/docker-runner.js";
|
|
4
|
+
import { parseComposePsJson } from "../lib/parsers.js";
|
|
5
|
+
import { formatComposePs, compactComposePsMap, formatComposePsCompact } from "../lib/formatters.js";
|
|
6
|
+
import { DockerComposePsSchema } from "../schemas/index.js";
|
|
7
|
+
export function registerComposePsTool(server) {
|
|
8
|
+
server.registerTool("compose-ps", {
|
|
9
|
+
title: "Docker Compose PS",
|
|
10
|
+
description: "Lists Docker Compose services with structured state and status information. Use instead of running `docker compose ps` in the terminal.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
path: z
|
|
13
|
+
.string()
|
|
14
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Directory containing docker-compose.yml (default: cwd)"),
|
|
17
|
+
compact: z
|
|
18
|
+
.boolean()
|
|
19
|
+
.optional()
|
|
20
|
+
.default(true)
|
|
21
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
22
|
+
},
|
|
23
|
+
outputSchema: DockerComposePsSchema,
|
|
24
|
+
}, async ({ path, compact }) => {
|
|
25
|
+
const args = ["compose", "ps", "--format", "json"];
|
|
26
|
+
const result = await docker(args, path);
|
|
27
|
+
const data = parseComposePsJson(result.stdout);
|
|
28
|
+
return compactDualOutput(data, result.stdout, formatComposePs, compactComposePsMap, formatComposePsCompact, compact === false);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=compose-ps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-ps.js","sourceRoot":"","sources":["../../src/tools/compose-ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,yIAAyI;QAC3I,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,wDAAwD,CAAC;YACrE,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,qBAAqB;KACpC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-up.d.ts","sourceRoot":"","sources":["../../src/tools/compose-up.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"compose-up.d.ts","sourceRoot":"","sources":["../../src/tools/compose-up.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QA0EtD"}
|
package/dist/tools/compose-up.js
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
|
|
3
3
|
import { docker } from "../lib/docker-runner.js";
|
|
4
4
|
import { parseComposeUpOutput } from "../lib/parsers.js";
|
|
5
|
-
import { formatComposeUp } from "../lib/formatters.js";
|
|
5
|
+
import { formatComposeUp, compactComposeUpMap, formatComposeUpCompact } from "../lib/formatters.js";
|
|
6
6
|
import { DockerComposeUpSchema } from "../schemas/index.js";
|
|
7
7
|
export function registerComposeUpTool(server) {
|
|
8
8
|
server.registerTool("compose-up", {
|
|
9
9
|
title: "Docker Compose Up",
|
|
10
10
|
description: "Starts Docker Compose services and returns structured status. Use instead of running `docker compose up` in the terminal.",
|
|
11
11
|
inputSchema: {
|
|
12
|
-
path: z
|
|
12
|
+
path: z
|
|
13
|
+
.string()
|
|
14
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
15
|
+
.describe("Directory containing docker-compose.yml"),
|
|
13
16
|
services: z
|
|
14
|
-
.array(z.string())
|
|
17
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
18
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
15
19
|
.optional()
|
|
16
20
|
.default([])
|
|
17
21
|
.describe("Specific services to start (default: all)"),
|
|
@@ -21,10 +25,26 @@ export function registerComposeUpTool(server) {
|
|
|
21
25
|
.optional()
|
|
22
26
|
.default(false)
|
|
23
27
|
.describe("Build images before starting (default: false)"),
|
|
24
|
-
file: z
|
|
28
|
+
file: z
|
|
29
|
+
.string()
|
|
30
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Compose file path (default: docker-compose.yml)"),
|
|
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."),
|
|
25
38
|
},
|
|
26
39
|
outputSchema: DockerComposeUpSchema,
|
|
27
|
-
}, async ({ path, services, detach, build, file }) => {
|
|
40
|
+
}, async ({ path, services, detach, build, file, compact }) => {
|
|
41
|
+
if (file)
|
|
42
|
+
assertNoFlagInjection(file, "file");
|
|
43
|
+
if (services) {
|
|
44
|
+
for (const s of services) {
|
|
45
|
+
assertNoFlagInjection(s, "services");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
28
48
|
const args = ["compose"];
|
|
29
49
|
if (file)
|
|
30
50
|
args.push("-f", file);
|
|
@@ -42,7 +62,7 @@ export function registerComposeUpTool(server) {
|
|
|
42
62
|
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
43
63
|
throw new Error(`docker compose up failed: ${errorMsg.trim()}`);
|
|
44
64
|
}
|
|
45
|
-
return
|
|
65
|
+
return compactDualOutput(data, result.stdout, formatComposeUp, compactComposeUpMap, formatComposeUpCompact, compact === false);
|
|
46
66
|
});
|
|
47
67
|
}
|
|
48
68
|
//# sourceMappingURL=compose-up.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-up.js","sourceRoot":"","sources":["../../src/tools/compose-up.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"compose-up.js","sourceRoot":"","sources":["../../src/tools/compose-up.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/exec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QA0EjD"}
|
package/dist/tools/exec.js
CHANGED
|
@@ -1,37 +1,68 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
|
|
3
3
|
import { docker } from "../lib/docker-runner.js";
|
|
4
4
|
import { parseExecOutput } from "../lib/parsers.js";
|
|
5
|
-
import { formatExec } from "../lib/formatters.js";
|
|
5
|
+
import { formatExec, compactExecMap, formatExecCompact } from "../lib/formatters.js";
|
|
6
6
|
import { DockerExecSchema } from "../schemas/index.js";
|
|
7
7
|
export function registerExecTool(server) {
|
|
8
8
|
server.registerTool("exec", {
|
|
9
9
|
title: "Docker Exec",
|
|
10
|
-
description: "Executes
|
|
10
|
+
description: "Executes arbitrary commands inside a running Docker container and returns structured output. " +
|
|
11
|
+
"Use instead of running `docker exec` in the terminal. " +
|
|
12
|
+
"WARNING: This runs arbitrary commands inside the container. Only use on trusted containers.",
|
|
11
13
|
inputSchema: {
|
|
12
|
-
container: z.string().describe("Container name or ID"),
|
|
13
|
-
command: z
|
|
14
|
-
|
|
14
|
+
container: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).describe("Container name or ID"),
|
|
15
|
+
command: z
|
|
16
|
+
.array(z.string().max(INPUT_LIMITS.STRING_MAX))
|
|
17
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
18
|
+
.describe('Command to execute (e.g., ["ls", "-la"])'),
|
|
19
|
+
workdir: z
|
|
20
|
+
.string()
|
|
21
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("Working directory inside the container"),
|
|
15
24
|
env: z
|
|
16
|
-
.array(z.string())
|
|
25
|
+
.array(z.string().max(INPUT_LIMITS.STRING_MAX))
|
|
26
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
17
27
|
.optional()
|
|
18
28
|
.default([])
|
|
19
29
|
.describe('Environment variables (e.g., ["KEY=VALUE"])'),
|
|
20
|
-
path: z
|
|
30
|
+
path: z
|
|
31
|
+
.string()
|
|
32
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("Host working directory (default: cwd)"),
|
|
35
|
+
compact: z
|
|
36
|
+
.boolean()
|
|
37
|
+
.optional()
|
|
38
|
+
.default(true)
|
|
39
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
21
40
|
},
|
|
22
41
|
outputSchema: DockerExecSchema,
|
|
23
|
-
}, async ({ container, command, workdir, env, path }) => {
|
|
42
|
+
}, async ({ container, command, workdir, env, path, compact }) => {
|
|
43
|
+
if (!command || command.length === 0) {
|
|
44
|
+
throw new Error("command array must not be empty");
|
|
45
|
+
}
|
|
24
46
|
assertNoFlagInjection(container, "container");
|
|
47
|
+
assertNoFlagInjection(command[0], "command");
|
|
48
|
+
if (workdir)
|
|
49
|
+
assertNoFlagInjection(workdir, "workdir");
|
|
50
|
+
// Validate first element of command array (the binary name) to prevent flag injection.
|
|
51
|
+
// Subsequent elements are intentionally unchecked as they are arguments to the command itself.
|
|
52
|
+
if (command.length > 0) {
|
|
53
|
+
assertNoFlagInjection(command[0], "command");
|
|
54
|
+
}
|
|
25
55
|
const args = ["exec"];
|
|
26
56
|
if (workdir)
|
|
27
57
|
args.push("-w", workdir);
|
|
28
58
|
for (const e of env ?? []) {
|
|
59
|
+
assertNoFlagInjection(e, "env");
|
|
29
60
|
args.push("-e", e);
|
|
30
61
|
}
|
|
31
62
|
args.push(container, ...command);
|
|
32
63
|
const result = await docker(args, path);
|
|
33
64
|
const data = parseExecOutput(result.stdout, result.stderr, result.exitCode);
|
|
34
|
-
return
|
|
65
|
+
return compactDualOutput(data, result.stdout, formatExec, compactExecMap, formatExecCompact, compact === false);
|
|
35
66
|
});
|
|
36
67
|
}
|
|
37
68
|
//# sourceMappingURL=exec.js.map
|