@paretools/docker 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/lib/formatters.d.ts +91 -0
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +129 -0
- package/dist/lib/formatters.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/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-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/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +14 -5
- package/dist/tools/logs.js.map +1 -1
- 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/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# @paretools/docker
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@paretools/docker)
|
|
4
|
-
[](https://github.com/Dave-London/
|
|
4
|
+
[](https://github.com/Dave-London/Pare/blob/main/LICENSE)
|
|
5
5
|
|
|
6
6
|
**Structured, token-efficient Docker output for AI agents.** Up to 95% fewer tokens than raw `docker` CLI output.
|
|
7
7
|
|
|
8
|
-
Part of the [Pare](https://github.com/Dave-London/
|
|
8
|
+
Part of the [Pare](https://github.com/Dave-London/Pare) suite of MCP servers.
|
|
9
9
|
|
|
10
10
|
## Tools (9)
|
|
11
11
|
|
|
@@ -79,9 +79,9 @@ Works with any MCP-compatible client: [Claude Code](https://docs.anthropic.com/e
|
|
|
79
79
|
|
|
80
80
|
## Links
|
|
81
81
|
|
|
82
|
-
- [Pare monorepo](https://github.com/Dave-London/
|
|
82
|
+
- [Pare monorepo](https://github.com/Dave-London/Pare)
|
|
83
83
|
- [MCP protocol](https://modelcontextprotocol.io)
|
|
84
84
|
|
|
85
85
|
## License
|
|
86
86
|
|
|
87
|
-
[MIT](https://github.com/Dave-London/
|
|
87
|
+
[MIT](https://github.com/Dave-London/Pare/blob/main/LICENSE)
|
package/dist/lib/formatters.d.ts
CHANGED
|
@@ -17,4 +17,95 @@ export declare function formatComposeUp(data: DockerComposeUp): string;
|
|
|
17
17
|
export declare function formatComposeDown(data: DockerComposeDown): string;
|
|
18
18
|
/** Formats structured Docker pull output into a human-readable summary. */
|
|
19
19
|
export declare function formatPull(data: DockerPull): string;
|
|
20
|
+
/** Compact ps: short containerId, name, image, status only. Drop ports, createdAt, state details. */
|
|
21
|
+
export interface DockerPsCompact {
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
containers: Array<{
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
image: string;
|
|
27
|
+
status: string;
|
|
28
|
+
}>;
|
|
29
|
+
total: number;
|
|
30
|
+
running: number;
|
|
31
|
+
stopped: number;
|
|
32
|
+
}
|
|
33
|
+
export declare function compactPsMap(data: DockerPs): DockerPsCompact;
|
|
34
|
+
export declare function formatPsCompact(data: DockerPsCompact): string;
|
|
35
|
+
/** Compact images: repository, tag, short id, size. Drop createdAt. */
|
|
36
|
+
export interface DockerImagesCompact {
|
|
37
|
+
[key: string]: unknown;
|
|
38
|
+
images: Array<{
|
|
39
|
+
id: string;
|
|
40
|
+
repository: string;
|
|
41
|
+
tag: string;
|
|
42
|
+
size: string;
|
|
43
|
+
}>;
|
|
44
|
+
total: number;
|
|
45
|
+
}
|
|
46
|
+
export declare function compactImagesMap(data: DockerImages): DockerImagesCompact;
|
|
47
|
+
export declare function formatImagesCompact(data: DockerImagesCompact): string;
|
|
48
|
+
/** Compact build: success, imageId, duration. Drop warnings array details, keep error count. */
|
|
49
|
+
export interface DockerBuildCompact {
|
|
50
|
+
[key: string]: unknown;
|
|
51
|
+
success: boolean;
|
|
52
|
+
imageId?: string;
|
|
53
|
+
duration: number;
|
|
54
|
+
errorCount: number;
|
|
55
|
+
}
|
|
56
|
+
export declare function compactBuildMap(data: DockerBuild): DockerBuildCompact;
|
|
57
|
+
export declare function formatBuildCompact(data: DockerBuildCompact): string;
|
|
58
|
+
/** Compact logs: container, count, first/last few lines. Drop full lines array if large. */
|
|
59
|
+
export interface DockerLogsCompact {
|
|
60
|
+
[key: string]: unknown;
|
|
61
|
+
container: string;
|
|
62
|
+
total: number;
|
|
63
|
+
head: string[];
|
|
64
|
+
tail: string[];
|
|
65
|
+
}
|
|
66
|
+
export declare function compactLogsMap(data: DockerLogs): DockerLogsCompact;
|
|
67
|
+
export declare function formatLogsCompact(data: DockerLogsCompact): string;
|
|
68
|
+
/** Compact pull: passthrough (already small). */
|
|
69
|
+
export interface DockerPullCompact {
|
|
70
|
+
[key: string]: unknown;
|
|
71
|
+
image: string;
|
|
72
|
+
tag: string;
|
|
73
|
+
success: boolean;
|
|
74
|
+
}
|
|
75
|
+
export declare function compactPullMap(data: DockerPull): DockerPullCompact;
|
|
76
|
+
export declare function formatPullCompact(data: DockerPullCompact): string;
|
|
77
|
+
/** Compact run: passthrough (already small). */
|
|
78
|
+
export interface DockerRunCompact {
|
|
79
|
+
[key: string]: unknown;
|
|
80
|
+
containerId: string;
|
|
81
|
+
image: string;
|
|
82
|
+
detached: boolean;
|
|
83
|
+
}
|
|
84
|
+
export declare function compactRunMap(data: DockerRun): DockerRunCompact;
|
|
85
|
+
export declare function formatRunCompact(data: DockerRunCompact): string;
|
|
86
|
+
/** Compact exec: passthrough (already small). */
|
|
87
|
+
export interface DockerExecCompact {
|
|
88
|
+
[key: string]: unknown;
|
|
89
|
+
exitCode: number;
|
|
90
|
+
success: boolean;
|
|
91
|
+
}
|
|
92
|
+
export declare function compactExecMap(data: DockerExec): DockerExecCompact;
|
|
93
|
+
export declare function formatExecCompact(data: DockerExecCompact): string;
|
|
94
|
+
/** Compact compose up: passthrough (already small). */
|
|
95
|
+
export interface DockerComposeUpCompact {
|
|
96
|
+
[key: string]: unknown;
|
|
97
|
+
success: boolean;
|
|
98
|
+
started: number;
|
|
99
|
+
}
|
|
100
|
+
export declare function compactComposeUpMap(data: DockerComposeUp): DockerComposeUpCompact;
|
|
101
|
+
export declare function formatComposeUpCompact(data: DockerComposeUpCompact): string;
|
|
102
|
+
/** Compact compose down: passthrough (already small). */
|
|
103
|
+
export interface DockerComposeDownCompact {
|
|
104
|
+
[key: string]: unknown;
|
|
105
|
+
success: boolean;
|
|
106
|
+
stopped: number;
|
|
107
|
+
removed: number;
|
|
108
|
+
}
|
|
109
|
+
export declare function compactComposeDownMap(data: DockerComposeDown): DockerComposeDownCompact;
|
|
110
|
+
export declare function formatComposeDownCompact(data: DockerComposeDownCompact): string;
|
|
20
111
|
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACX,MAAM,qBAAqB,CAAC;AAE7B,mGAAmG;AACnG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAS/C;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAarD;AAED,2GAA2G;AAC3G,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CASvD;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAIjD;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAMnD;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAI7D;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAGjE;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAInD"}
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/formatters.js
CHANGED
|
@@ -77,4 +77,133 @@ export function formatPull(data) {
|
|
|
77
77
|
const digest = data.digest ? ` (${data.digest.slice(0, 19)}...)` : "";
|
|
78
78
|
return `Pulled ${data.image}:${data.tag}${digest}`;
|
|
79
79
|
}
|
|
80
|
+
export function compactPsMap(data) {
|
|
81
|
+
return {
|
|
82
|
+
containers: data.containers.map((c) => ({
|
|
83
|
+
id: c.id.slice(0, 12),
|
|
84
|
+
name: c.name,
|
|
85
|
+
image: c.image,
|
|
86
|
+
status: c.status,
|
|
87
|
+
})),
|
|
88
|
+
total: data.total,
|
|
89
|
+
running: data.running,
|
|
90
|
+
stopped: data.stopped,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export function formatPsCompact(data) {
|
|
94
|
+
const lines = [`${data.total} containers (${data.running} running)`];
|
|
95
|
+
for (const c of data.containers) {
|
|
96
|
+
lines.push(` ${c.id.slice(0, 12)} ${c.name} (${c.image}) ${c.status}`);
|
|
97
|
+
}
|
|
98
|
+
return lines.join("\n");
|
|
99
|
+
}
|
|
100
|
+
export function compactImagesMap(data) {
|
|
101
|
+
return {
|
|
102
|
+
images: data.images.map((img) => ({
|
|
103
|
+
id: img.id.slice(0, 12),
|
|
104
|
+
repository: img.repository,
|
|
105
|
+
tag: img.tag,
|
|
106
|
+
size: img.size,
|
|
107
|
+
})),
|
|
108
|
+
total: data.total,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export function formatImagesCompact(data) {
|
|
112
|
+
if (data.total === 0)
|
|
113
|
+
return "No images found.";
|
|
114
|
+
const lines = [`${data.total} images:`];
|
|
115
|
+
for (const img of data.images) {
|
|
116
|
+
const tag = img.tag && img.tag !== "<none>" ? `:${img.tag}` : "";
|
|
117
|
+
lines.push(` ${img.repository}${tag} (${img.size})`);
|
|
118
|
+
}
|
|
119
|
+
return lines.join("\n");
|
|
120
|
+
}
|
|
121
|
+
export function compactBuildMap(data) {
|
|
122
|
+
return {
|
|
123
|
+
success: data.success,
|
|
124
|
+
...(data.imageId ? { imageId: data.imageId } : {}),
|
|
125
|
+
duration: data.duration,
|
|
126
|
+
errorCount: data.errors.length,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
export function formatBuildCompact(data) {
|
|
130
|
+
if (data.success) {
|
|
131
|
+
const id = data.imageId ? ` → ${data.imageId}` : "";
|
|
132
|
+
return `Build succeeded in ${data.duration}s${id}`;
|
|
133
|
+
}
|
|
134
|
+
return `Build failed (${data.duration}s, ${data.errorCount} errors)`;
|
|
135
|
+
}
|
|
136
|
+
export function compactLogsMap(data) {
|
|
137
|
+
const HEAD_SIZE = 5;
|
|
138
|
+
const TAIL_SIZE = 5;
|
|
139
|
+
return {
|
|
140
|
+
container: data.container,
|
|
141
|
+
total: data.total,
|
|
142
|
+
head: data.lines.slice(0, HEAD_SIZE),
|
|
143
|
+
tail: data.total > HEAD_SIZE + TAIL_SIZE ? data.lines.slice(-TAIL_SIZE) : [],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export function formatLogsCompact(data) {
|
|
147
|
+
const parts = [`${data.container} (${data.total} lines)`];
|
|
148
|
+
if (data.head.length)
|
|
149
|
+
parts.push(data.head.join("\n"));
|
|
150
|
+
if (data.tail.length)
|
|
151
|
+
parts.push(` ... ${data.total - data.head.length - data.tail.length} lines omitted ...`, data.tail.join("\n"));
|
|
152
|
+
return parts.join("\n");
|
|
153
|
+
}
|
|
154
|
+
export function compactPullMap(data) {
|
|
155
|
+
return {
|
|
156
|
+
image: data.image,
|
|
157
|
+
tag: data.tag,
|
|
158
|
+
success: data.success,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
export function formatPullCompact(data) {
|
|
162
|
+
if (!data.success)
|
|
163
|
+
return `Pull failed for ${data.image}:${data.tag}`;
|
|
164
|
+
return `Pulled ${data.image}:${data.tag}`;
|
|
165
|
+
}
|
|
166
|
+
export function compactRunMap(data) {
|
|
167
|
+
return {
|
|
168
|
+
containerId: data.containerId,
|
|
169
|
+
image: data.image,
|
|
170
|
+
detached: data.detached,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export function formatRunCompact(data) {
|
|
174
|
+
const mode = data.detached ? "detached" : "attached";
|
|
175
|
+
return `Container ${data.containerId} from ${data.image} [${mode}]`;
|
|
176
|
+
}
|
|
177
|
+
export function compactExecMap(data) {
|
|
178
|
+
return {
|
|
179
|
+
exitCode: data.exitCode,
|
|
180
|
+
success: data.success,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
export function formatExecCompact(data) {
|
|
184
|
+
return data.success ? "Exec succeeded" : `Exec failed (exit code ${data.exitCode})`;
|
|
185
|
+
}
|
|
186
|
+
export function compactComposeUpMap(data) {
|
|
187
|
+
return {
|
|
188
|
+
success: data.success,
|
|
189
|
+
started: data.started,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
export function formatComposeUpCompact(data) {
|
|
193
|
+
if (!data.success)
|
|
194
|
+
return "Compose up failed";
|
|
195
|
+
return `Compose up: ${data.started} services started`;
|
|
196
|
+
}
|
|
197
|
+
export function compactComposeDownMap(data) {
|
|
198
|
+
return {
|
|
199
|
+
success: data.success,
|
|
200
|
+
stopped: data.stopped,
|
|
201
|
+
removed: data.removed,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
export function formatComposeDownCompact(data) {
|
|
205
|
+
if (!data.success)
|
|
206
|
+
return "Compose down failed";
|
|
207
|
+
return `Compose down: ${data.stopped} stopped, ${data.removed} removed`;
|
|
208
|
+
}
|
|
80
209
|
//# sourceMappingURL=formatters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAYA,mGAAmG;AACnG,MAAM,UAAU,QAAQ,CAAC,IAAc;IACrC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;IAC9F,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM;YAC1B,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC9H,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,CAAC,sBAAsB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,OAAO;YAAE,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACnD,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,YAAY,CAAC,IAAkB;IAC7C,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAEhD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IACrD,OAAO,aAAa,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC;AACrF,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,IAAI,CAAC,QAAQ,GAAG,CAAC;IAClF,MAAM,KAAK,GAAG,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAqB;IACnD,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,CAAC;IAC9C,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC;QAAE,OAAO,gDAAgD,CAAC;IAChF,OAAO,eAAe,IAAI,CAAC,OAAO,sBAAsB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACtF,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC;IAChD,OAAO,iBAAiB,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,OAAO,UAAU,CAAC;AAC1E,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,OAAO,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC;AACrD,CAAC;AAaD,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACrB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CAAC;QACH,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAqB;IACnD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AASD,MAAM,UAAU,gBAAgB,CAAC,IAAkB;IACjD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACvB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC;QACH,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAyB;IAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAWD,MAAM,UAAU,eAAe,CAAC,IAAiB;IAC/C,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,sBAAsB,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,iBAAiB,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,UAAU,UAAU,CAAC;AACvE,CAAC;AAWD,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;QAClB,KAAK,CAAC,IAAI,CACR,SAAS,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,oBAAoB,EAC7E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CACrB,CAAC;IACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAUD,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtE,OAAO,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AAC5C,CAAC;AAUD,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAsB;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IACrD,OAAO,aAAa,IAAI,CAAC,WAAW,SAAS,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC;AACtE,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,0BAA0B,IAAI,CAAC,QAAQ,GAAG,CAAC;AACtF,CAAC;AASD,MAAM,UAAU,mBAAmB,CAAC,IAAqB;IACvD,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAA4B;IACjE,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,CAAC;IAC9C,OAAO,eAAe,IAAI,CAAC,OAAO,mBAAmB,CAAC;AACxD,CAAC;AAUD,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAA8B;IACrE,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC;IAChD,OAAO,iBAAiB,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,OAAO,UAAU,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function assertValidPortMapping(value: string): void;
|
|
2
|
+
/**
|
|
3
|
+
* Validates that a volume mount string does not expose dangerous host paths.
|
|
4
|
+
*
|
|
5
|
+
* Accepted formats:
|
|
6
|
+
* - "host:container"
|
|
7
|
+
* - "host:container:options"
|
|
8
|
+
* - "container" (container-only, no host path — always allowed)
|
|
9
|
+
* - "name:container" (named volume — always allowed)
|
|
10
|
+
*
|
|
11
|
+
* A host path is identified as a string starting with `/`, `./`, `../`, or `~`.
|
|
12
|
+
* Named volumes (plain identifiers without path separators) are always allowed.
|
|
13
|
+
*/
|
|
14
|
+
export declare function assertSafeVolumeMount(value: string): void;
|
|
15
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAeA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM1D;AAaD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAqEzD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* Validates that a string matches a Docker port mapping format.
|
|
4
|
+
* Accepted formats:
|
|
5
|
+
* - "8080" (container port only)
|
|
6
|
+
* - "8080:80" (host:container)
|
|
7
|
+
* - "8080:80/tcp" (host:container/protocol)
|
|
8
|
+
* - "127.0.0.1:8080:80" (ip:host:container)
|
|
9
|
+
* - "127.0.0.1:8080:80/udp"
|
|
10
|
+
* - "8080-8090:80-90" (port ranges)
|
|
11
|
+
*/
|
|
12
|
+
const PORT_MAPPING_RE = /^(?:(?:\d{1,3}\.){3}\d{1,3}:)?(?:\d{1,5}(?:-\d{1,5})?:)?\d{1,5}(?:-\d{1,5})?(?:\/(?:tcp|udp|sctp))?$/;
|
|
13
|
+
export function assertValidPortMapping(value) {
|
|
14
|
+
if (!PORT_MAPPING_RE.test(value)) {
|
|
15
|
+
throw new Error(`Invalid port mapping: "${value}". Expected format like "8080", "8080:80", "127.0.0.1:8080:80/tcp", or a port range.`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Dangerous host paths that must never be bind-mounted into a container.
|
|
20
|
+
* Each entry is checked as an exact match or as a prefix (with trailing `/`).
|
|
21
|
+
*/
|
|
22
|
+
const DANGEROUS_PATHS = ["/", "/etc", "/var/run/docker.sock", "/proc", "/sys", "/dev", "/root"];
|
|
23
|
+
/**
|
|
24
|
+
* Windows root paths that must be blocked (case-insensitive).
|
|
25
|
+
*/
|
|
26
|
+
const WINDOWS_ROOT_RE = /^[A-Za-z]:[/\\]?$/;
|
|
27
|
+
/**
|
|
28
|
+
* Validates that a volume mount string does not expose dangerous host paths.
|
|
29
|
+
*
|
|
30
|
+
* Accepted formats:
|
|
31
|
+
* - "host:container"
|
|
32
|
+
* - "host:container:options"
|
|
33
|
+
* - "container" (container-only, no host path — always allowed)
|
|
34
|
+
* - "name:container" (named volume — always allowed)
|
|
35
|
+
*
|
|
36
|
+
* A host path is identified as a string starting with `/`, `./`, `../`, or `~`.
|
|
37
|
+
* Named volumes (plain identifiers without path separators) are always allowed.
|
|
38
|
+
*/
|
|
39
|
+
export function assertSafeVolumeMount(value) {
|
|
40
|
+
// Trim whitespace to prevent bypass via leading/trailing spaces
|
|
41
|
+
const trimmed = value.trim();
|
|
42
|
+
// Detect Windows-style paths (e.g., "C:\path" or "C:/path") where the
|
|
43
|
+
// drive letter colon is part of the host path, not a host:container separator.
|
|
44
|
+
const hasWindowsDrive = /^[A-Za-z]:/.test(trimmed);
|
|
45
|
+
// Split on the appropriate colon to extract the host part.
|
|
46
|
+
// For Windows paths like "C:\foo:/bar", skip the drive-letter colon.
|
|
47
|
+
let colonIdx;
|
|
48
|
+
if (hasWindowsDrive) {
|
|
49
|
+
colonIdx = trimmed.indexOf(":", 2); // skip past "C:"
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
colonIdx = trimmed.indexOf(":");
|
|
53
|
+
}
|
|
54
|
+
if (colonIdx === -1) {
|
|
55
|
+
// No separator colon — container-only mount or named volume, always safe
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const hostPart = trimmed.substring(0, colonIdx).trim();
|
|
59
|
+
// Determine if the host part is a path (starts with /, ./, ../, or ~)
|
|
60
|
+
// Named volumes are plain identifiers (e.g., "myvolume") and are always safe.
|
|
61
|
+
const isPath = hostPart.startsWith("/") ||
|
|
62
|
+
hostPart.startsWith("./") ||
|
|
63
|
+
hostPart.startsWith("../") ||
|
|
64
|
+
hostPart.startsWith("~") ||
|
|
65
|
+
hostPart === "." ||
|
|
66
|
+
hostPart === "..";
|
|
67
|
+
// Also check for Windows-style absolute paths (e.g., C:\)
|
|
68
|
+
const isWindowsPath = /^[A-Za-z]:/.test(hostPart);
|
|
69
|
+
if (!isPath && !isWindowsPath) {
|
|
70
|
+
// Named volume — always allowed
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Block Windows root mounts (e.g., "C:\", "C:/", "C:")
|
|
74
|
+
if (isWindowsPath && WINDOWS_ROOT_RE.test(hostPart)) {
|
|
75
|
+
throw new Error(`Dangerous volume mount blocked: "${value}". Mounting a Windows root drive is not allowed.`);
|
|
76
|
+
}
|
|
77
|
+
// Normalize the host path: resolve ".." segments, remove trailing slashes
|
|
78
|
+
const normalized = posix.normalize(hostPart).replace(/\/+$/, "") || "/";
|
|
79
|
+
for (const dangerous of DANGEROUS_PATHS) {
|
|
80
|
+
if (dangerous === "/") {
|
|
81
|
+
// Exact root mount
|
|
82
|
+
if (normalized === "/") {
|
|
83
|
+
throw new Error(`Dangerous volume mount blocked: "${value}". Mounting the root filesystem is not allowed.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Exact match or prefix match (e.g., /etc or /etc/shadow)
|
|
88
|
+
if (normalized === dangerous || normalized.startsWith(dangerous + "/")) {
|
|
89
|
+
throw new Error(`Dangerous volume mount blocked: "${value}". Mounting "${dangerous}" or its children is not allowed.`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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"}
|
|
@@ -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
|
package/dist/tools/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/tools/images.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/tools/images.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,QA+CnD"}
|
package/dist/tools/images.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
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 { parseImagesJson } from "../lib/parsers.js";
|
|
5
|
-
import { formatImages } from "../lib/formatters.js";
|
|
5
|
+
import { formatImages, compactImagesMap, formatImagesCompact } from "../lib/formatters.js";
|
|
6
6
|
import { DockerImagesSchema } from "../schemas/index.js";
|
|
7
7
|
export function registerImagesTool(server) {
|
|
8
8
|
server.registerTool("images", {
|
|
@@ -14,10 +14,21 @@ export function registerImagesTool(server) {
|
|
|
14
14
|
.optional()
|
|
15
15
|
.default(false)
|
|
16
16
|
.describe("Show all images including intermediates"),
|
|
17
|
-
filter: z
|
|
17
|
+
filter: z
|
|
18
|
+
.string()
|
|
19
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Filter by reference (e.g., 'myapp', 'nginx:*')"),
|
|
22
|
+
compact: z
|
|
23
|
+
.boolean()
|
|
24
|
+
.optional()
|
|
25
|
+
.default(true)
|
|
26
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
18
27
|
},
|
|
19
28
|
outputSchema: DockerImagesSchema,
|
|
20
|
-
}, async ({ all, filter }) => {
|
|
29
|
+
}, async ({ all, filter, compact }) => {
|
|
30
|
+
if (filter)
|
|
31
|
+
assertNoFlagInjection(filter, "filter");
|
|
21
32
|
const args = ["images", "--format", "json"];
|
|
22
33
|
if (all)
|
|
23
34
|
args.push("-a");
|
|
@@ -25,7 +36,7 @@ export function registerImagesTool(server) {
|
|
|
25
36
|
args.push(filter);
|
|
26
37
|
const result = await docker(args);
|
|
27
38
|
const data = parseImagesJson(result.stdout);
|
|
28
|
-
return
|
|
39
|
+
return compactDualOutput(data, result.stdout, formatImages, compactImagesMap, formatImagesCompact, compact === false);
|
|
29
40
|
});
|
|
30
41
|
}
|
|
31
42
|
//# sourceMappingURL=images.js.map
|
package/dist/tools/images.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/tools/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/tools/images.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,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,uIAAuI;QACzI,WAAW,EAAE;YACX,GAAG,EAAE,CAAC;iBACH,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,yCAAyC,CAAC;YACtD,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,kBAAkB;KACjC,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACjC,IAAI,MAAM;YAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/logs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAiDjD"}
|
package/dist/tools/logs.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
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 { parseLogsOutput } from "../lib/parsers.js";
|
|
5
|
-
import { formatLogs } from "../lib/formatters.js";
|
|
5
|
+
import { formatLogs, compactLogsMap, formatLogsCompact } from "../lib/formatters.js";
|
|
6
6
|
import { DockerLogsSchema } from "../schemas/index.js";
|
|
7
7
|
export function registerLogsTool(server) {
|
|
8
8
|
server.registerTool("logs", {
|
|
9
9
|
title: "Docker Logs",
|
|
10
10
|
description: "Retrieves container logs as structured line arrays. Use instead of running `docker logs` in the terminal.",
|
|
11
11
|
inputSchema: {
|
|
12
|
-
container: z.string().describe("Container name or ID"),
|
|
12
|
+
container: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).describe("Container name or ID"),
|
|
13
13
|
tail: z
|
|
14
14
|
.number()
|
|
15
15
|
.optional()
|
|
@@ -17,18 +17,27 @@ export function registerLogsTool(server) {
|
|
|
17
17
|
.describe("Number of lines to return (default: 100)"),
|
|
18
18
|
since: z
|
|
19
19
|
.string()
|
|
20
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
20
21
|
.optional()
|
|
21
22
|
.describe("Show logs since timestamp (e.g., '10m', '2024-01-01')"),
|
|
23
|
+
compact: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.default(true)
|
|
27
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
22
28
|
},
|
|
23
29
|
outputSchema: DockerLogsSchema,
|
|
24
|
-
}, async ({ container, tail, since }) => {
|
|
30
|
+
}, async ({ container, tail, since, compact }) => {
|
|
31
|
+
assertNoFlagInjection(container, "container");
|
|
32
|
+
if (since)
|
|
33
|
+
assertNoFlagInjection(since, "since");
|
|
25
34
|
const args = ["logs", container, "--tail", String(tail ?? 100)];
|
|
26
35
|
if (since)
|
|
27
36
|
args.push("--since", since);
|
|
28
37
|
const result = await docker(args);
|
|
29
38
|
const output = result.stdout || result.stderr;
|
|
30
39
|
const data = parseLogsOutput(output, container);
|
|
31
|
-
return
|
|
40
|
+
return compactDualOutput(data, output, formatLogs, compactLogsMap, formatLogsCompact, compact === false);
|
|
32
41
|
});
|
|
33
42
|
}
|
|
34
43
|
//# sourceMappingURL=logs.js.map
|
package/dist/tools/logs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/tools/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,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACzF,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,GAAG,CAAC;iBACZ,QAAQ,CAAC,0CAA0C,CAAC;YACvD,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,uDAAuD,CAAC;YACpE,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,gBAAgB;KAC/B,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5C,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC9C,IAAI,KAAK;YAAE,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,EACN,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/ps.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/tools/ps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/tools/ps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,QAsC/C"}
|
package/dist/tools/ps.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { compactDualOutput } from "@paretools/shared";
|
|
3
3
|
import { docker } from "../lib/docker-runner.js";
|
|
4
4
|
import { parsePsJson } from "../lib/parsers.js";
|
|
5
|
-
import { formatPs } from "../lib/formatters.js";
|
|
5
|
+
import { formatPs, compactPsMap, formatPsCompact } from "../lib/formatters.js";
|
|
6
6
|
import { DockerPsSchema } from "../schemas/index.js";
|
|
7
7
|
export function registerPsTool(server) {
|
|
8
8
|
server.registerTool("ps", {
|
|
@@ -14,15 +14,20 @@ export function registerPsTool(server) {
|
|
|
14
14
|
.optional()
|
|
15
15
|
.default(true)
|
|
16
16
|
.describe("Show all containers (default: true, includes stopped)"),
|
|
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."),
|
|
17
22
|
},
|
|
18
23
|
outputSchema: DockerPsSchema,
|
|
19
|
-
}, async ({ all }) => {
|
|
24
|
+
}, async ({ all, compact }) => {
|
|
20
25
|
const args = ["ps", "--format", "json", "--no-trunc"];
|
|
21
26
|
if (all)
|
|
22
27
|
args.push("-a");
|
|
23
28
|
const result = await docker(args);
|
|
24
29
|
const data = parsePsJson(result.stdout);
|
|
25
|
-
return
|
|
30
|
+
return compactDualOutput(data, result.stdout, formatPs, compactPsMap, formatPsCompact, compact === false);
|
|
26
31
|
});
|
|
27
32
|
}
|
|
28
33
|
//# sourceMappingURL=ps.js.map
|
package/dist/tools/ps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/tools/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/tools/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,MAAM,CAAC,YAAY,CACjB,IAAI,EACJ;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,mIAAmI;QACrI,WAAW,EAAE;YACX,GAAG,EAAE,CAAC;iBACH,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,uDAAuD,CAAC;YACpE,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,cAAc;KAC7B,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/pull.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/tools/pull.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/tools/pull.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QA0DjD"}
|
package/dist/tools/pull.js
CHANGED
|
@@ -1,24 +1,39 @@
|
|
|
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 { parsePullOutput } from "../lib/parsers.js";
|
|
5
|
-
import { formatPull } from "../lib/formatters.js";
|
|
5
|
+
import { formatPull, compactPullMap, formatPullCompact } from "../lib/formatters.js";
|
|
6
6
|
import { DockerPullSchema } from "../schemas/index.js";
|
|
7
7
|
export function registerPullTool(server) {
|
|
8
8
|
server.registerTool("pull", {
|
|
9
9
|
title: "Docker Pull",
|
|
10
10
|
description: "Pulls a Docker image from a registry and returns structured result with digest info. Use instead of running `docker pull` in the terminal.",
|
|
11
11
|
inputSchema: {
|
|
12
|
-
image: z
|
|
12
|
+
image: z
|
|
13
|
+
.string()
|
|
14
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
15
|
+
.describe("Image to pull (e.g., nginx:latest, ubuntu:22.04)"),
|
|
13
16
|
platform: z
|
|
14
17
|
.string()
|
|
18
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
15
19
|
.optional()
|
|
16
20
|
.describe('Target platform (e.g., "linux/amd64", "linux/arm64")'),
|
|
17
|
-
path: z
|
|
21
|
+
path: z
|
|
22
|
+
.string()
|
|
23
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("Working directory (default: cwd)"),
|
|
26
|
+
compact: z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.default(true)
|
|
30
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
18
31
|
},
|
|
19
32
|
outputSchema: DockerPullSchema,
|
|
20
|
-
}, async ({ image, platform, path }) => {
|
|
33
|
+
}, async ({ image, platform, path, compact }) => {
|
|
21
34
|
assertNoFlagInjection(image, "image");
|
|
35
|
+
if (platform)
|
|
36
|
+
assertNoFlagInjection(platform, "platform");
|
|
22
37
|
const args = ["pull"];
|
|
23
38
|
if (platform)
|
|
24
39
|
args.push("--platform", platform);
|
|
@@ -29,7 +44,7 @@ export function registerPullTool(server) {
|
|
|
29
44
|
throw new Error(`docker pull failed: ${errorMsg.trim()}`);
|
|
30
45
|
}
|
|
31
46
|
const data = parsePullOutput(result.stdout, result.stderr, result.exitCode, image);
|
|
32
|
-
return
|
|
47
|
+
return compactDualOutput(data, result.stdout, formatPull, compactPullMap, formatPullCompact, compact === false);
|
|
33
48
|
});
|
|
34
49
|
}
|
|
35
50
|
//# sourceMappingURL=pull.js.map
|
package/dist/tools/pull.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/tools/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/tools/pull.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,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,4IAA4I;QAC9I,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,CAAC,kDAAkD,CAAC;YAC/D,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,sDAAsD,CAAC;YACnE,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,gBAAgB;KAC/B,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3C,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,QAAQ;YAAE,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnF,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QA+GhD"}
|
package/dist/tools/run.js
CHANGED
|
@@ -1,28 +1,35 @@
|
|
|
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 { parseRunOutput } from "../lib/parsers.js";
|
|
5
|
-
import { formatRun } from "../lib/formatters.js";
|
|
5
|
+
import { formatRun, compactRunMap, formatRunCompact } from "../lib/formatters.js";
|
|
6
6
|
import { DockerRunSchema } from "../schemas/index.js";
|
|
7
|
+
import { assertValidPortMapping, assertSafeVolumeMount } from "../lib/validation.js";
|
|
7
8
|
export function registerRunTool(server) {
|
|
8
9
|
server.registerTool("run", {
|
|
9
10
|
title: "Docker Run",
|
|
10
11
|
description: "Runs a Docker container from an image and returns structured container ID and status. Use instead of running `docker run` in the terminal.",
|
|
11
12
|
inputSchema: {
|
|
12
|
-
image: z
|
|
13
|
-
|
|
13
|
+
image: z
|
|
14
|
+
.string()
|
|
15
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
16
|
+
.describe("Docker image to run (e.g., nginx:latest)"),
|
|
17
|
+
name: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).optional().describe("Container name"),
|
|
14
18
|
ports: z
|
|
15
|
-
.array(z.string())
|
|
19
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
20
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
16
21
|
.optional()
|
|
17
22
|
.default([])
|
|
18
23
|
.describe('Port mappings (e.g., ["8080:80", "443:443"])'),
|
|
19
24
|
volumes: z
|
|
20
|
-
.array(z.string())
|
|
25
|
+
.array(z.string().max(INPUT_LIMITS.PATH_MAX))
|
|
26
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
21
27
|
.optional()
|
|
22
28
|
.default([])
|
|
23
29
|
.describe('Volume mounts (e.g., ["/host/path:/container/path"])'),
|
|
24
30
|
env: z
|
|
25
|
-
.array(z.string())
|
|
31
|
+
.array(z.string().max(INPUT_LIMITS.STRING_MAX))
|
|
32
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
26
33
|
.optional()
|
|
27
34
|
.default([])
|
|
28
35
|
.describe('Environment variables (e.g., ["KEY=VALUE"])'),
|
|
@@ -37,15 +44,32 @@ export function registerRunTool(server) {
|
|
|
37
44
|
.default(false)
|
|
38
45
|
.describe("Remove container after exit (default: false)"),
|
|
39
46
|
command: z
|
|
40
|
-
.array(z.string())
|
|
47
|
+
.array(z.string().max(INPUT_LIMITS.STRING_MAX))
|
|
48
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
41
49
|
.optional()
|
|
42
50
|
.default([])
|
|
43
51
|
.describe("Command to run in the container"),
|
|
44
|
-
path: z
|
|
52
|
+
path: z
|
|
53
|
+
.string()
|
|
54
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("Working directory (default: cwd)"),
|
|
57
|
+
compact: z
|
|
58
|
+
.boolean()
|
|
59
|
+
.optional()
|
|
60
|
+
.default(true)
|
|
61
|
+
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
45
62
|
},
|
|
46
63
|
outputSchema: DockerRunSchema,
|
|
47
|
-
}, async ({ image, name, ports, volumes, env, detach, rm, command, path }) => {
|
|
64
|
+
}, async ({ image, name, ports, volumes, env, detach, rm, command, path, compact }) => {
|
|
48
65
|
assertNoFlagInjection(image, "image");
|
|
66
|
+
if (name)
|
|
67
|
+
assertNoFlagInjection(name, "name");
|
|
68
|
+
// Validate first element of command array (the binary name) to prevent flag injection.
|
|
69
|
+
// Subsequent elements are intentionally unchecked as they are arguments to the command itself.
|
|
70
|
+
if (command && command.length > 0) {
|
|
71
|
+
assertNoFlagInjection(command[0], "command");
|
|
72
|
+
}
|
|
49
73
|
const args = ["run"];
|
|
50
74
|
if (detach)
|
|
51
75
|
args.push("-d");
|
|
@@ -54,12 +78,16 @@ export function registerRunTool(server) {
|
|
|
54
78
|
if (name)
|
|
55
79
|
args.push("--name", name);
|
|
56
80
|
for (const p of ports ?? []) {
|
|
81
|
+
assertValidPortMapping(p);
|
|
57
82
|
args.push("-p", p);
|
|
58
83
|
}
|
|
59
84
|
for (const v of volumes ?? []) {
|
|
85
|
+
assertNoFlagInjection(v, "volumes");
|
|
86
|
+
assertSafeVolumeMount(v);
|
|
60
87
|
args.push("-v", v);
|
|
61
88
|
}
|
|
62
89
|
for (const e of env ?? []) {
|
|
90
|
+
assertNoFlagInjection(e, "env");
|
|
63
91
|
args.push("-e", e);
|
|
64
92
|
}
|
|
65
93
|
args.push(image);
|
|
@@ -72,7 +100,7 @@ export function registerRunTool(server) {
|
|
|
72
100
|
throw new Error(`docker run failed: ${errorMsg.trim()}`);
|
|
73
101
|
}
|
|
74
102
|
const data = parseRunOutput(result.stdout, image, detach ?? true, name);
|
|
75
|
-
return
|
|
103
|
+
return compactDualOutput(data, result.stdout, formatRun, compactRunMap, formatRunCompact, compact === false);
|
|
76
104
|
});
|
|
77
105
|
}
|
|
78
106
|
//# sourceMappingURL=run.js.map
|
package/dist/tools/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paretools/docker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"mcpName": "io.github.Dave-London/docker",
|
|
5
5
|
"description": "MCP server for Docker with structured, token-efficient output",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"container",
|
|
23
23
|
"devops"
|
|
24
24
|
],
|
|
25
|
-
"homepage": "https://github.com/Dave-London/
|
|
25
|
+
"homepage": "https://github.com/Dave-London/Pare/tree/main/packages/server-docker",
|
|
26
26
|
"engines": {
|
|
27
27
|
"node": ">=20"
|
|
28
28
|
},
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"repository": {
|
|
43
43
|
"type": "git",
|
|
44
|
-
"url": "https://github.com/Dave-London/
|
|
44
|
+
"url": "https://github.com/Dave-London/Pare.git",
|
|
45
45
|
"directory": "packages/server-docker"
|
|
46
46
|
},
|
|
47
47
|
"files": [
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
52
52
|
"zod": "^4.3.6",
|
|
53
|
-
"@paretools/shared": "0.
|
|
53
|
+
"@paretools/shared": "0.6.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/node": "^25.2.3",
|