@paretools/docker 0.8.5 → 0.10.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 +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/docker-runner.d.ts +1 -1
- package/dist/lib/docker-runner.d.ts.map +1 -1
- package/dist/lib/docker-runner.js +2 -2
- package/dist/lib/docker-runner.js.map +1 -1
- package/dist/lib/formatters.d.ts +62 -21
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +369 -52
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/parsers.d.ts +50 -23
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +852 -129
- package/dist/lib/parsers.js.map +1 -1
- package/dist/schemas/index.d.ts +267 -9
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +186 -7
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/build.d.ts.map +1 -1
- package/dist/tools/build.js +122 -21
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/compose-build.d.ts.map +1 -1
- package/dist/tools/compose-build.js +67 -8
- package/dist/tools/compose-build.js.map +1 -1
- package/dist/tools/compose-down.d.ts.map +1 -1
- package/dist/tools/compose-down.js +39 -7
- package/dist/tools/compose-down.js.map +1 -1
- package/dist/tools/compose-logs.d.ts.map +1 -1
- package/dist/tools/compose-logs.js +52 -7
- package/dist/tools/compose-logs.js.map +1 -1
- package/dist/tools/compose-ps.d.ts.map +1 -1
- package/dist/tools/compose-ps.js +65 -8
- package/dist/tools/compose-ps.js.map +1 -1
- package/dist/tools/compose-up.d.ts.map +1 -1
- package/dist/tools/compose-up.js +83 -6
- package/dist/tools/compose-up.js.map +1 -1
- package/dist/tools/exec.d.ts.map +1 -1
- package/dist/tools/exec.js +66 -17
- package/dist/tools/exec.js.map +1 -1
- package/dist/tools/images.d.ts.map +1 -1
- package/dist/tools/images.js +33 -11
- package/dist/tools/images.js.map +1 -1
- package/dist/tools/inspect.d.ts.map +1 -1
- package/dist/tools/inspect.js +43 -16
- package/dist/tools/inspect.js.map +1 -1
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +34 -11
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/network-ls.d.ts.map +1 -1
- package/dist/tools/network-ls.js +23 -10
- package/dist/tools/network-ls.js.map +1 -1
- package/dist/tools/ps.d.ts.map +1 -1
- package/dist/tools/ps.js +21 -6
- package/dist/tools/ps.js.map +1 -1
- package/dist/tools/pull.d.ts.map +1 -1
- package/dist/tools/pull.js +16 -14
- package/dist/tools/pull.js.map +1 -1
- package/dist/tools/run.d.ts.map +1 -1
- package/dist/tools/run.js +107 -10
- package/dist/tools/run.js.map +1 -1
- package/dist/tools/stats.d.ts.map +1 -1
- package/dist/tools/stats.js +21 -6
- package/dist/tools/stats.js.map +1 -1
- package/dist/tools/volume-ls.d.ts.map +1 -1
- package/dist/tools/volume-ls.js +23 -10
- package/dist/tools/volume-ls.js.map +1 -1
- package/package.json +2 -2
|
@@ -8,19 +8,24 @@ import { DockerComposeBuildSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerComposeBuildTool(server) {
|
|
9
9
|
server.registerTool("compose-build", {
|
|
10
10
|
title: "Docker Compose Build",
|
|
11
|
-
description: "Builds Docker Compose service images and returns structured per-service build status.
|
|
11
|
+
description: "Builds Docker Compose service images and returns structured per-service build status.",
|
|
12
12
|
inputSchema: {
|
|
13
13
|
path: z
|
|
14
14
|
.string()
|
|
15
15
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
16
16
|
.optional()
|
|
17
|
-
.describe("Directory containing docker-compose.yml
|
|
17
|
+
.describe("Directory containing docker-compose.yml"),
|
|
18
18
|
services: z
|
|
19
19
|
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
20
20
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
21
21
|
.optional()
|
|
22
22
|
.default([])
|
|
23
23
|
.describe("Specific services to build (default: all)"),
|
|
24
|
+
file: z
|
|
25
|
+
.string()
|
|
26
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Compose file path for targeting non-default compose files (maps to -f)"),
|
|
24
29
|
noCache: z
|
|
25
30
|
.boolean()
|
|
26
31
|
.optional()
|
|
@@ -36,14 +41,51 @@ export function registerComposeBuildTool(server) {
|
|
|
36
41
|
.optional()
|
|
37
42
|
.default({})
|
|
38
43
|
.describe("Build arguments as key-value pairs (e.g., {NODE_ENV: 'production'})"),
|
|
39
|
-
|
|
44
|
+
push: z
|
|
45
|
+
.boolean()
|
|
46
|
+
.optional()
|
|
47
|
+
.default(false)
|
|
48
|
+
.describe("Push images after building (default: false)"),
|
|
49
|
+
ssh: z
|
|
50
|
+
.string()
|
|
51
|
+
.max(INPUT_LIMITS.STRING_MAX)
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("SSH agent socket or key for private repo access during build (--ssh)"),
|
|
54
|
+
builder: z
|
|
55
|
+
.string()
|
|
56
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
57
|
+
.optional()
|
|
58
|
+
.describe("Alternate builder to use (--builder)"),
|
|
59
|
+
withDependencies: z
|
|
40
60
|
.boolean()
|
|
41
61
|
.optional()
|
|
42
|
-
.default(
|
|
43
|
-
.describe("
|
|
62
|
+
.default(false)
|
|
63
|
+
.describe("Also build transitive dependencies (default: false)"),
|
|
64
|
+
quiet: z
|
|
65
|
+
.boolean()
|
|
66
|
+
.optional()
|
|
67
|
+
.default(false)
|
|
68
|
+
.describe("Suppress build output (default: false)"),
|
|
69
|
+
dryRun: z
|
|
70
|
+
.boolean()
|
|
71
|
+
.optional()
|
|
72
|
+
.default(false)
|
|
73
|
+
.describe("Run in dry-run mode without actually building (default: false)"),
|
|
74
|
+
check: z
|
|
75
|
+
.boolean()
|
|
76
|
+
.optional()
|
|
77
|
+
.default(false)
|
|
78
|
+
.describe("Validate build config without building (default: false)"),
|
|
79
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
44
80
|
},
|
|
45
81
|
outputSchema: DockerComposeBuildSchema,
|
|
46
|
-
}, async ({ path, services, noCache, pull, buildArgs, compact }) => {
|
|
82
|
+
}, async ({ path, services, file, noCache, pull, buildArgs, push, ssh, builder, withDependencies, quiet, dryRun, check, compact, }) => {
|
|
83
|
+
if (file)
|
|
84
|
+
assertNoFlagInjection(file, "file");
|
|
85
|
+
if (ssh)
|
|
86
|
+
assertNoFlagInjection(ssh, "ssh");
|
|
87
|
+
if (builder)
|
|
88
|
+
assertNoFlagInjection(builder, "builder");
|
|
47
89
|
if (services) {
|
|
48
90
|
for (const s of services) {
|
|
49
91
|
assertNoFlagInjection(s, "services");
|
|
@@ -55,11 +97,28 @@ export function registerComposeBuildTool(server) {
|
|
|
55
97
|
assertNoFlagInjection(value, "buildArgs value");
|
|
56
98
|
}
|
|
57
99
|
}
|
|
58
|
-
const args = ["compose"
|
|
100
|
+
const args = ["compose"];
|
|
101
|
+
if (file)
|
|
102
|
+
args.push("-f", file);
|
|
103
|
+
args.push("build");
|
|
59
104
|
if (noCache)
|
|
60
105
|
args.push("--no-cache");
|
|
61
106
|
if (pull)
|
|
62
107
|
args.push("--pull");
|
|
108
|
+
if (push)
|
|
109
|
+
args.push("--push");
|
|
110
|
+
if (ssh)
|
|
111
|
+
args.push("--ssh", ssh);
|
|
112
|
+
if (builder)
|
|
113
|
+
args.push("--builder", builder);
|
|
114
|
+
if (withDependencies)
|
|
115
|
+
args.push("--with-dependencies");
|
|
116
|
+
if (quiet)
|
|
117
|
+
args.push("--quiet");
|
|
118
|
+
if (dryRun)
|
|
119
|
+
args.push("--dry-run");
|
|
120
|
+
if (check)
|
|
121
|
+
args.push("--check");
|
|
63
122
|
if (buildArgs) {
|
|
64
123
|
for (const [key, value] of Object.entries(buildArgs)) {
|
|
65
124
|
args.push("--build-arg", `${key}=${value}`);
|
|
@@ -76,7 +135,7 @@ export function registerComposeBuildTool(server) {
|
|
|
76
135
|
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
77
136
|
throw new Error(`docker compose build failed: ${errorMsg.trim()}`);
|
|
78
137
|
}
|
|
79
|
-
return compactDualOutput(data, result.stdout, formatComposeBuild, compactComposeBuildMap, formatComposeBuildCompact, compact === false);
|
|
138
|
+
return compactDualOutput(data, result.stdout + result.stderr, formatComposeBuild, compactComposeBuildMap, formatComposeBuildCompact, compact === false);
|
|
80
139
|
});
|
|
81
140
|
}
|
|
82
141
|
//# sourceMappingURL=compose-build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-build.js","sourceRoot":"","sources":["../../src/tools/compose-build.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,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,kEAAkE;AAClE,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"compose-build.js","sourceRoot":"","sources":["../../src/tools/compose-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;AAWzE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,
|
|
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,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QA0FxD"}
|
|
@@ -8,7 +8,7 @@ import { DockerComposeDownSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerComposeDownTool(server) {
|
|
9
9
|
server.registerTool("compose-down", {
|
|
10
10
|
title: "Docker Compose Down",
|
|
11
|
-
description: "Stops Docker Compose services and returns structured status.
|
|
11
|
+
description: "Stops Docker Compose services and returns structured status.",
|
|
12
12
|
inputSchema: {
|
|
13
13
|
path: z
|
|
14
14
|
.string()
|
|
@@ -29,16 +29,36 @@ export function registerComposeDownTool(server) {
|
|
|
29
29
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
30
30
|
.optional()
|
|
31
31
|
.describe("Compose file path (default: docker-compose.yml)"),
|
|
32
|
-
|
|
32
|
+
rmi: z
|
|
33
|
+
.enum(["all", "local"])
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Remove images: "all" removes all, "local" removes only untagged images'),
|
|
36
|
+
services: z
|
|
37
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
38
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
39
|
+
.optional()
|
|
40
|
+
.default([])
|
|
41
|
+
.describe("Specific services to tear down (default: all)"),
|
|
42
|
+
timeout: z
|
|
43
|
+
.number()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Timeout in seconds for graceful shutdown of services"),
|
|
46
|
+
dryRun: z
|
|
33
47
|
.boolean()
|
|
34
48
|
.optional()
|
|
35
|
-
.default(
|
|
36
|
-
.describe("
|
|
49
|
+
.default(false)
|
|
50
|
+
.describe("Run in dry-run mode without actually stopping services (default: false)"),
|
|
51
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
37
52
|
},
|
|
38
53
|
outputSchema: DockerComposeDownSchema,
|
|
39
|
-
}, async ({ path, volumes, removeOrphans, file, compact }) => {
|
|
54
|
+
}, async ({ path, volumes, removeOrphans, file, rmi, services, timeout, dryRun, compact }) => {
|
|
40
55
|
if (file)
|
|
41
56
|
assertNoFlagInjection(file, "file");
|
|
57
|
+
if (services) {
|
|
58
|
+
for (const s of services) {
|
|
59
|
+
assertNoFlagInjection(s, "services");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
42
62
|
const args = ["compose"];
|
|
43
63
|
if (file)
|
|
44
64
|
args.push("-f", file);
|
|
@@ -47,13 +67,25 @@ export function registerComposeDownTool(server) {
|
|
|
47
67
|
args.push("--volumes");
|
|
48
68
|
if (removeOrphans)
|
|
49
69
|
args.push("--remove-orphans");
|
|
70
|
+
if (rmi)
|
|
71
|
+
args.push("--rmi", rmi);
|
|
72
|
+
if (timeout != null)
|
|
73
|
+
args.push("--timeout", String(timeout));
|
|
74
|
+
if (dryRun)
|
|
75
|
+
args.push("--dry-run");
|
|
76
|
+
if (services && services.length > 0) {
|
|
77
|
+
args.push(...services);
|
|
78
|
+
}
|
|
50
79
|
const result = await docker(args, path);
|
|
51
|
-
const data = parseComposeDownOutput(result.stdout, result.stderr, result.exitCode
|
|
80
|
+
const data = parseComposeDownOutput(result.stdout, result.stderr, result.exitCode, {
|
|
81
|
+
trackVolumes: !!volumes,
|
|
82
|
+
trackNetworks: true,
|
|
83
|
+
});
|
|
52
84
|
if (result.exitCode !== 0 && data.stopped === 0 && data.removed === 0) {
|
|
53
85
|
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
54
86
|
throw new Error(`docker compose down failed: ${errorMsg.trim()}`);
|
|
55
87
|
}
|
|
56
|
-
return compactDualOutput(data, result.stdout, formatComposeDown, compactComposeDownMap, formatComposeDownCompact, compact === false);
|
|
88
|
+
return compactDualOutput(data, result.stdout + result.stderr, formatComposeDown, compactComposeDownMap, formatComposeDownCompact, compact === false);
|
|
57
89
|
});
|
|
58
90
|
}
|
|
59
91
|
//# 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,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,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,
|
|
1
|
+
{"version":3,"file":"compose-down.js","sourceRoot":"","sources":["../../src/tools/compose-down.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-logs.d.ts","sourceRoot":"","sources":["../../src/tools/compose-logs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"compose-logs.d.ts","sourceRoot":"","sources":["../../src/tools/compose-logs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAmIxD"}
|
|
@@ -8,7 +8,7 @@ import { DockerComposeLogsSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerComposeLogsTool(server) {
|
|
9
9
|
server.registerTool("compose-logs", {
|
|
10
10
|
title: "Docker Compose Logs",
|
|
11
|
-
description: "Retrieves Docker Compose service logs as structured entries.
|
|
11
|
+
description: "Retrieves Docker Compose service logs as structured entries.",
|
|
12
12
|
inputSchema: {
|
|
13
13
|
path: z
|
|
14
14
|
.string()
|
|
@@ -21,42 +21,87 @@ export function registerComposeLogsTool(server) {
|
|
|
21
21
|
.optional()
|
|
22
22
|
.default([])
|
|
23
23
|
.describe("Specific services to get logs for (default: all)"),
|
|
24
|
+
file: z
|
|
25
|
+
.string()
|
|
26
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Compose file path for consistency with other compose tools (maps to -f)"),
|
|
24
29
|
tail: z
|
|
25
30
|
.number()
|
|
26
31
|
.optional()
|
|
27
32
|
.describe("Number of lines to return per service (passed to --tail)"),
|
|
33
|
+
limit: z
|
|
34
|
+
.number()
|
|
35
|
+
.int()
|
|
36
|
+
.positive()
|
|
37
|
+
.optional()
|
|
38
|
+
.default(1000)
|
|
39
|
+
.describe("Maximum number of parsed log entries returned in structured output"),
|
|
28
40
|
since: z
|
|
29
41
|
.string()
|
|
30
42
|
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
31
43
|
.optional()
|
|
32
44
|
.describe("Show logs since timestamp (e.g., '10m', '2024-01-01')"),
|
|
45
|
+
until: z
|
|
46
|
+
.string()
|
|
47
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("Show logs until timestamp (e.g., '5m', '2024-01-02') for time-windowed queries"),
|
|
33
50
|
timestamps: z
|
|
34
51
|
.boolean()
|
|
35
52
|
.optional()
|
|
36
53
|
.default(true)
|
|
37
54
|
.describe("Include timestamps in output (default: true)"),
|
|
38
|
-
|
|
55
|
+
/** #102: Add follow param for bounded log streaming with -f flag. */
|
|
56
|
+
follow: z
|
|
39
57
|
.boolean()
|
|
40
58
|
.optional()
|
|
41
|
-
.default(
|
|
42
|
-
.describe("
|
|
59
|
+
.default(false)
|
|
60
|
+
.describe("Follow log output (-f). Must be used with 'tail' to provide bounded streaming. " +
|
|
61
|
+
"WARNING: Without tail, this may produce unbounded output (default: false)"),
|
|
62
|
+
index: z
|
|
63
|
+
.number()
|
|
64
|
+
.optional()
|
|
65
|
+
.describe("Target a specific replica index of a scaled service"),
|
|
66
|
+
noLogPrefix: z
|
|
67
|
+
.boolean()
|
|
68
|
+
.optional()
|
|
69
|
+
.default(false)
|
|
70
|
+
.describe("Do not prefix log lines with service name (default: false)"),
|
|
71
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
43
72
|
},
|
|
44
73
|
outputSchema: DockerComposeLogsSchema,
|
|
45
|
-
}, async ({ path, services, tail, since, timestamps, compact }) => {
|
|
74
|
+
}, async ({ path, services, file, tail, limit, since, until, timestamps, follow, index, noLogPrefix, compact, }) => {
|
|
75
|
+
if (file)
|
|
76
|
+
assertNoFlagInjection(file, "file");
|
|
46
77
|
if (since)
|
|
47
78
|
assertNoFlagInjection(since, "since");
|
|
79
|
+
if (until)
|
|
80
|
+
assertNoFlagInjection(until, "until");
|
|
48
81
|
if (services) {
|
|
49
82
|
for (const s of services) {
|
|
50
83
|
assertNoFlagInjection(s, "services");
|
|
51
84
|
}
|
|
52
85
|
}
|
|
53
|
-
const args = ["compose"
|
|
86
|
+
const args = ["compose"];
|
|
87
|
+
if (file)
|
|
88
|
+
args.push("-f", file);
|
|
89
|
+
args.push("logs", "--no-color");
|
|
54
90
|
if (timestamps)
|
|
55
91
|
args.push("--timestamps");
|
|
56
92
|
if (tail != null)
|
|
57
93
|
args.push("--tail", String(tail));
|
|
58
94
|
if (since)
|
|
59
95
|
args.push("--since", since);
|
|
96
|
+
if (until)
|
|
97
|
+
args.push("--until", until);
|
|
98
|
+
// #102: Add follow flag for bounded streaming
|
|
99
|
+
if (follow)
|
|
100
|
+
args.push("-f");
|
|
101
|
+
if (index != null)
|
|
102
|
+
args.push("--index", String(index));
|
|
103
|
+
if (noLogPrefix)
|
|
104
|
+
args.push("--no-log-prefix");
|
|
60
105
|
if (services && services.length > 0) {
|
|
61
106
|
args.push(...services);
|
|
62
107
|
}
|
|
@@ -66,7 +111,7 @@ export function registerComposeLogsTool(server) {
|
|
|
66
111
|
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
67
112
|
throw new Error(`docker compose logs failed: ${errorMsg.trim()}`);
|
|
68
113
|
}
|
|
69
|
-
const data = parseComposeLogsOutput(output);
|
|
114
|
+
const data = parseComposeLogsOutput(output, limit);
|
|
70
115
|
return compactDualOutput(data, output, formatComposeLogs, compactComposeLogsMap, formatComposeLogsCompact, compact === false);
|
|
71
116
|
});
|
|
72
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-logs.js","sourceRoot":"","sources":["../../src/tools/compose-logs.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,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,
|
|
1
|
+
{"version":3,"file":"compose-logs.js","sourceRoot":"","sources":["../../src/tools/compose-logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,
|
|
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,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAsFtD"}
|
package/dist/tools/compose-ps.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { compactDualOutput, INPUT_LIMITS } from "@paretools/shared";
|
|
2
|
+
import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
|
|
3
3
|
import { docker } from "../lib/docker-runner.js";
|
|
4
4
|
import { parseComposePsJson } from "../lib/parsers.js";
|
|
5
5
|
import { formatComposePs, compactComposePsMap, formatComposePsCompact } from "../lib/formatters.js";
|
|
@@ -8,22 +8,79 @@ import { DockerComposePsSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerComposePsTool(server) {
|
|
9
9
|
server.registerTool("compose-ps", {
|
|
10
10
|
title: "Docker Compose PS",
|
|
11
|
-
description: "Lists Docker Compose services with structured state and status information.
|
|
11
|
+
description: "Lists Docker Compose services with structured state and status information.",
|
|
12
12
|
inputSchema: {
|
|
13
13
|
path: z
|
|
14
14
|
.string()
|
|
15
15
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
16
16
|
.optional()
|
|
17
|
-
.describe("Directory containing docker-compose.yml
|
|
18
|
-
|
|
17
|
+
.describe("Directory containing docker-compose.yml"),
|
|
18
|
+
file: z
|
|
19
|
+
.string()
|
|
20
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Compose file path for consistency with compose-up/compose-down (maps to -f)"),
|
|
23
|
+
services: z
|
|
24
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
25
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
26
|
+
.optional()
|
|
27
|
+
.default([])
|
|
28
|
+
.describe("Filter to specific services (positional args)"),
|
|
29
|
+
status: z
|
|
30
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
31
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
32
|
+
.optional()
|
|
33
|
+
.default([])
|
|
34
|
+
.describe('Filter by container status (e.g., ["running", "exited"])'),
|
|
35
|
+
filter: z
|
|
36
|
+
.string()
|
|
37
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Generic property filter (--filter)"),
|
|
40
|
+
all: z
|
|
41
|
+
.boolean()
|
|
42
|
+
.optional()
|
|
43
|
+
.default(false)
|
|
44
|
+
.describe("Show stopped containers from docker compose run (default: false)"),
|
|
45
|
+
noTrunc: z
|
|
19
46
|
.boolean()
|
|
20
47
|
.optional()
|
|
21
|
-
.default(
|
|
22
|
-
.describe("
|
|
48
|
+
.default(false)
|
|
49
|
+
.describe("Do not truncate output (default: false)"),
|
|
50
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
23
51
|
},
|
|
24
52
|
outputSchema: DockerComposePsSchema,
|
|
25
|
-
}, async ({ path, compact }) => {
|
|
26
|
-
|
|
53
|
+
}, async ({ path, file, services, status, filter, all, noTrunc, compact }) => {
|
|
54
|
+
if (file)
|
|
55
|
+
assertNoFlagInjection(file, "file");
|
|
56
|
+
if (filter)
|
|
57
|
+
assertNoFlagInjection(filter, "filter");
|
|
58
|
+
if (services) {
|
|
59
|
+
for (const s of services) {
|
|
60
|
+
assertNoFlagInjection(s, "services");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (status) {
|
|
64
|
+
for (const st of status) {
|
|
65
|
+
assertNoFlagInjection(st, "status");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const args = ["compose"];
|
|
69
|
+
if (file)
|
|
70
|
+
args.push("-f", file);
|
|
71
|
+
args.push("ps", "--format", "json");
|
|
72
|
+
if (all)
|
|
73
|
+
args.push("--all");
|
|
74
|
+
if (noTrunc)
|
|
75
|
+
args.push("--no-trunc");
|
|
76
|
+
for (const st of status ?? []) {
|
|
77
|
+
args.push("--status", st);
|
|
78
|
+
}
|
|
79
|
+
if (filter)
|
|
80
|
+
args.push("--filter", filter);
|
|
81
|
+
if (services && services.length > 0) {
|
|
82
|
+
args.push(...services);
|
|
83
|
+
}
|
|
27
84
|
const result = await docker(args, path);
|
|
28
85
|
const data = parseComposePsJson(result.stdout);
|
|
29
86
|
return compactDualOutput(data, result.stdout, formatComposePs, compactComposePsMap, formatComposePsCompact, compact === false);
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"compose-ps.js","sourceRoot":"","sources":["../../src/tools/compose-ps.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,+DAA+D;AAC/D,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,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QA8JtD"}
|
package/dist/tools/compose-up.js
CHANGED
|
@@ -8,7 +8,7 @@ import { DockerComposeUpSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerComposeUpTool(server) {
|
|
9
9
|
server.registerTool("compose-up", {
|
|
10
10
|
title: "Docker Compose Up",
|
|
11
|
-
description: "Starts Docker Compose services and returns structured status.
|
|
11
|
+
description: "Starts Docker Compose services and returns structured status.",
|
|
12
12
|
inputSchema: {
|
|
13
13
|
path: z
|
|
14
14
|
.string()
|
|
@@ -20,6 +20,10 @@ export function registerComposeUpTool(server) {
|
|
|
20
20
|
.optional()
|
|
21
21
|
.default([])
|
|
22
22
|
.describe("Specific services to start (default: all)"),
|
|
23
|
+
scale: z
|
|
24
|
+
.record(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX), z.number().int().min(0))
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Per-service scale map, mapped to repeated --scale service=num"),
|
|
23
27
|
detach: z.boolean().optional().default(true).describe("Run in background (default: true)"),
|
|
24
28
|
build: z
|
|
25
29
|
.boolean()
|
|
@@ -31,14 +35,54 @@ export function registerComposeUpTool(server) {
|
|
|
31
35
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
32
36
|
.optional()
|
|
33
37
|
.describe("Compose file path (default: docker-compose.yml)"),
|
|
34
|
-
|
|
38
|
+
pull: z
|
|
39
|
+
.enum(["always", "missing", "never"])
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Pull image policy: "always", "missing", or "never" (--pull)'),
|
|
42
|
+
wait: z
|
|
43
|
+
.boolean()
|
|
44
|
+
.optional()
|
|
45
|
+
.default(false)
|
|
46
|
+
.describe("Wait for services to be running/healthy (default: false)"),
|
|
47
|
+
forceRecreate: z
|
|
48
|
+
.boolean()
|
|
49
|
+
.optional()
|
|
50
|
+
.default(false)
|
|
51
|
+
.describe("Force recreate containers even if config has not changed (default: false)"),
|
|
52
|
+
timeout: z.number().optional().describe("Timeout in seconds for container startup"),
|
|
53
|
+
noRecreate: z
|
|
54
|
+
.boolean()
|
|
55
|
+
.optional()
|
|
56
|
+
.default(false)
|
|
57
|
+
.describe("Do not recreate containers if they already exist (default: false)"),
|
|
58
|
+
noDeps: z
|
|
59
|
+
.boolean()
|
|
60
|
+
.optional()
|
|
61
|
+
.default(false)
|
|
62
|
+
.describe("Do not start linked/dependent services (default: false)"),
|
|
63
|
+
removeOrphans: z
|
|
35
64
|
.boolean()
|
|
36
65
|
.optional()
|
|
37
|
-
.default(
|
|
38
|
-
.describe("
|
|
66
|
+
.default(false)
|
|
67
|
+
.describe("Remove containers for services not defined in the Compose file (default: false)"),
|
|
68
|
+
waitTimeout: z
|
|
69
|
+
.number()
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Maximum time in seconds to wait for services when using --wait"),
|
|
72
|
+
renewAnonVolumes: z
|
|
73
|
+
.boolean()
|
|
74
|
+
.optional()
|
|
75
|
+
.default(false)
|
|
76
|
+
.describe("Recreate anonymous volumes instead of reusing previous data (default: false)"),
|
|
77
|
+
dryRun: z
|
|
78
|
+
.boolean()
|
|
79
|
+
.optional()
|
|
80
|
+
.default(false)
|
|
81
|
+
.describe("Run in dry-run mode without actually starting services (default: false)"),
|
|
82
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
39
83
|
},
|
|
40
84
|
outputSchema: DockerComposeUpSchema,
|
|
41
|
-
}, async ({ path, services, detach, build, file, compact }) => {
|
|
85
|
+
}, async ({ path, services, scale, detach, build, file, pull, wait, forceRecreate, timeout, noRecreate, noDeps, removeOrphans, waitTimeout, renewAnonVolumes, dryRun, compact, }) => {
|
|
42
86
|
if (file)
|
|
43
87
|
assertNoFlagInjection(file, "file");
|
|
44
88
|
if (services) {
|
|
@@ -46,6 +90,14 @@ export function registerComposeUpTool(server) {
|
|
|
46
90
|
assertNoFlagInjection(s, "services");
|
|
47
91
|
}
|
|
48
92
|
}
|
|
93
|
+
if (scale) {
|
|
94
|
+
for (const [svc, count] of Object.entries(scale)) {
|
|
95
|
+
assertNoFlagInjection(svc, "scale service");
|
|
96
|
+
if (!Number.isInteger(count) || count < 0) {
|
|
97
|
+
throw new Error("scale values must be non-negative integers");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
49
101
|
const args = ["compose"];
|
|
50
102
|
if (file)
|
|
51
103
|
args.push("-f", file);
|
|
@@ -54,6 +106,31 @@ export function registerComposeUpTool(server) {
|
|
|
54
106
|
args.push("-d");
|
|
55
107
|
if (build)
|
|
56
108
|
args.push("--build");
|
|
109
|
+
if (pull)
|
|
110
|
+
args.push("--pull", pull);
|
|
111
|
+
if (wait)
|
|
112
|
+
args.push("--wait");
|
|
113
|
+
if (forceRecreate)
|
|
114
|
+
args.push("--force-recreate");
|
|
115
|
+
if (timeout != null)
|
|
116
|
+
args.push("--timeout", String(timeout));
|
|
117
|
+
if (noRecreate)
|
|
118
|
+
args.push("--no-recreate");
|
|
119
|
+
if (noDeps)
|
|
120
|
+
args.push("--no-deps");
|
|
121
|
+
if (removeOrphans)
|
|
122
|
+
args.push("--remove-orphans");
|
|
123
|
+
if (waitTimeout != null)
|
|
124
|
+
args.push("--wait-timeout", String(waitTimeout));
|
|
125
|
+
if (renewAnonVolumes)
|
|
126
|
+
args.push("--renew-anon-volumes");
|
|
127
|
+
if (dryRun)
|
|
128
|
+
args.push("--dry-run");
|
|
129
|
+
if (scale) {
|
|
130
|
+
for (const [svc, count] of Object.entries(scale)) {
|
|
131
|
+
args.push("--scale", `${svc}=${count}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
57
134
|
if (services && services.length > 0) {
|
|
58
135
|
args.push(...services);
|
|
59
136
|
}
|
|
@@ -63,7 +140,7 @@ export function registerComposeUpTool(server) {
|
|
|
63
140
|
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
64
141
|
throw new Error(`docker compose up failed: ${errorMsg.trim()}`);
|
|
65
142
|
}
|
|
66
|
-
return compactDualOutput(data, result.stdout, formatComposeUp, compactComposeUpMap, formatComposeUpCompact, compact === false);
|
|
143
|
+
return compactDualOutput(data, result.stdout + result.stderr, formatComposeUp, compactComposeUpMap, formatComposeUpCompact, compact === false);
|
|
67
144
|
});
|
|
68
145
|
}
|
|
69
146
|
//# sourceMappingURL=compose-up.js.map
|