@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.
Files changed (68) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/docker-runner.d.ts +1 -1
  5. package/dist/lib/docker-runner.d.ts.map +1 -1
  6. package/dist/lib/docker-runner.js +2 -2
  7. package/dist/lib/docker-runner.js.map +1 -1
  8. package/dist/lib/formatters.d.ts +62 -21
  9. package/dist/lib/formatters.d.ts.map +1 -1
  10. package/dist/lib/formatters.js +369 -52
  11. package/dist/lib/formatters.js.map +1 -1
  12. package/dist/lib/parsers.d.ts +50 -23
  13. package/dist/lib/parsers.d.ts.map +1 -1
  14. package/dist/lib/parsers.js +852 -129
  15. package/dist/lib/parsers.js.map +1 -1
  16. package/dist/schemas/index.d.ts +267 -9
  17. package/dist/schemas/index.d.ts.map +1 -1
  18. package/dist/schemas/index.js +186 -7
  19. package/dist/schemas/index.js.map +1 -1
  20. package/dist/tools/build.d.ts.map +1 -1
  21. package/dist/tools/build.js +122 -21
  22. package/dist/tools/build.js.map +1 -1
  23. package/dist/tools/compose-build.d.ts.map +1 -1
  24. package/dist/tools/compose-build.js +67 -8
  25. package/dist/tools/compose-build.js.map +1 -1
  26. package/dist/tools/compose-down.d.ts.map +1 -1
  27. package/dist/tools/compose-down.js +39 -7
  28. package/dist/tools/compose-down.js.map +1 -1
  29. package/dist/tools/compose-logs.d.ts.map +1 -1
  30. package/dist/tools/compose-logs.js +52 -7
  31. package/dist/tools/compose-logs.js.map +1 -1
  32. package/dist/tools/compose-ps.d.ts.map +1 -1
  33. package/dist/tools/compose-ps.js +65 -8
  34. package/dist/tools/compose-ps.js.map +1 -1
  35. package/dist/tools/compose-up.d.ts.map +1 -1
  36. package/dist/tools/compose-up.js +83 -6
  37. package/dist/tools/compose-up.js.map +1 -1
  38. package/dist/tools/exec.d.ts.map +1 -1
  39. package/dist/tools/exec.js +66 -17
  40. package/dist/tools/exec.js.map +1 -1
  41. package/dist/tools/images.d.ts.map +1 -1
  42. package/dist/tools/images.js +33 -11
  43. package/dist/tools/images.js.map +1 -1
  44. package/dist/tools/inspect.d.ts.map +1 -1
  45. package/dist/tools/inspect.js +43 -16
  46. package/dist/tools/inspect.js.map +1 -1
  47. package/dist/tools/logs.d.ts.map +1 -1
  48. package/dist/tools/logs.js +34 -11
  49. package/dist/tools/logs.js.map +1 -1
  50. package/dist/tools/network-ls.d.ts.map +1 -1
  51. package/dist/tools/network-ls.js +23 -10
  52. package/dist/tools/network-ls.js.map +1 -1
  53. package/dist/tools/ps.d.ts.map +1 -1
  54. package/dist/tools/ps.js +21 -6
  55. package/dist/tools/ps.js.map +1 -1
  56. package/dist/tools/pull.d.ts.map +1 -1
  57. package/dist/tools/pull.js +16 -14
  58. package/dist/tools/pull.js.map +1 -1
  59. package/dist/tools/run.d.ts.map +1 -1
  60. package/dist/tools/run.js +107 -10
  61. package/dist/tools/run.js.map +1 -1
  62. package/dist/tools/stats.d.ts.map +1 -1
  63. package/dist/tools/stats.js +21 -6
  64. package/dist/tools/stats.js.map +1 -1
  65. package/dist/tools/volume-ls.d.ts.map +1 -1
  66. package/dist/tools/volume-ls.js +23 -10
  67. package/dist/tools/volume-ls.js.map +1 -1
  68. 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. Use instead of running `docker compose build` in the terminal.",
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 (default: cwd)"),
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
- compact: z
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(true)
43
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
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", "build"];
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":"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"}
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,QAgExD"}
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. Use instead of running `docker compose down` in the terminal.",
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
- compact: z
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(true)
36
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
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,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"}
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,EAAE,8DAA8D;QAC3E,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,GAAG,EAAE,CAAC;iBACH,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;iBACtB,QAAQ,EAAE;iBACV,QAAQ,CAAC,wEAAwE,CAAC;YACrF,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;iBACpD,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,sDAAsD,CAAC;YACnE,MAAM,EAAE,CAAC;iBACN,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,yEAAyE,CAAC;YACtF,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SAChF;QACD,YAAY,EAAE,uBAAuB;KACtC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACxF,IAAI,IAAI;YAAE,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,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;QACjD,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,OAAO,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACzB,CAAC;QAED,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,EAAE;YACjF,YAAY,EAAE,CAAC,CAAC,OAAO;YACvB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,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,GAAG,MAAM,CAAC,MAAM,EAC7B,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -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,QA+ExD"}
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. Use instead of running `docker compose logs` in the terminal.",
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
- compact: z
55
+ /** #102: Add follow param for bounded log streaming with -f flag. */
56
+ follow: z
39
57
  .boolean()
40
58
  .optional()
41
- .default(true)
42
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
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", "logs", "--no-color"];
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":"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"}
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,EAAE,8DAA8D;QAC3E,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,yCAAyC,CAAC;YACtD,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;iBACpD,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,kDAAkD,CAAC;YAC/D,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,yEAAyE,CAAC;YACtF,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,0DAA0D,CAAC;YACvE,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,oEAAoE,CAAC;YACjF,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,uDAAuD,CAAC;YACpE,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CACP,gFAAgF,CACjF;YACH,UAAU,EAAE,CAAC;iBACV,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,qEAAqE;YACrE,MAAM,EAAE,CAAC;iBACN,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CACP,iFAAiF;gBAC/E,2EAA2E,CAC9E;YACH,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,qDAAqD,CAAC;YAClE,WAAW,EAAE,CAAC;iBACX,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,4DAA4D,CAAC;YACzE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SAChF;QACD,YAAY,EAAE,uBAAuB;KACtC,EACD,KAAK,EAAE,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,UAAU,EACV,MAAM,EACN,KAAK,EACL,WAAW,EACX,OAAO,GACR,EAAE,EAAE;QACH,IAAI,IAAI;YAAE,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK;YAAE,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,KAAK;YAAE,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,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,EAAE,YAAY,CAAC,CAAC;QAChC,IAAI,UAAU;YAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,IAAI,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACvC,8CAA8C;QAC9C,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,KAAK,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,IAAI,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QAE9C,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,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,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEnD,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,EACN,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -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,QAqCtD"}
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"}
@@ -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. Use instead of running `docker compose ps` in the terminal.",
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 (default: cwd)"),
18
- compact: z
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(true)
22
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
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
- const args = ["compose", "ps", "--format", "json"];
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;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,+DAA+D;AAC/D,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
+ {"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,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,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,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,6EAA6E;QAC1F,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,yCAAyC,CAAC;YACtD,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,6EAA6E,CAAC;YAC1F,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;iBACpD,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,MAAM,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;iBACpD,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,0DAA0D,CAAC;YACvE,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,oCAAoC,CAAC;YACjD,GAAG,EAAE,CAAC;iBACH,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,kEAAkE,CAAC;YAC/E,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,yCAAyC,CAAC;YACtD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SAChF;QACD,YAAY,EAAE,qBAAqB;KACpC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QACxE,IAAI,IAAI;YAAE,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,MAAM;YAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBACxB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,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,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,KAAK,MAAM,EAAE,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACzB,CAAC;QACD,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,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QA0EtD"}
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"}
@@ -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. Use instead of running `docker compose up` in the terminal.",
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
- compact: z
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(true)
38
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
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