init project
This commit is contained in:
Vendored
+52
@@ -0,0 +1,52 @@
|
||||
import { z } from 'zod';
|
||||
import { config } from '../../config.js';
|
||||
import { errorResult, jsonResult, toErrorMessage } from '../shared.js';
|
||||
import { dockerManager } from './dockerManager.js';
|
||||
export function registerDockerContainerLogsTool(server) {
|
||||
server.registerTool('docker_get_container_logs', {
|
||||
title: 'Docker Get Container Logs',
|
||||
description: 'Fetch logs from a running or stopped Docker container started by this server.',
|
||||
inputSchema: {
|
||||
containerId: z.string().min(1).describe('Container ID (short or long) returned by docker_run_container.'),
|
||||
tail: z
|
||||
.number()
|
||||
.int()
|
||||
.positive()
|
||||
.optional()
|
||||
.default(200)
|
||||
.describe('Only return the last N lines.'),
|
||||
follow: z
|
||||
.boolean()
|
||||
.optional()
|
||||
.default(false)
|
||||
.describe('Stream logs (not implemented; kept for API compatibility).'),
|
||||
},
|
||||
}, async ({ containerId, tail, follow }) => {
|
||||
try {
|
||||
await dockerManager.ensureReachable();
|
||||
if (follow) {
|
||||
return jsonResult({
|
||||
containerId,
|
||||
note: 'Live log streaming is not supported via this tool; use docker_get_container_logs with follow:false to poll.',
|
||||
logs: '',
|
||||
});
|
||||
}
|
||||
const docker = dockerManager.getDocker();
|
||||
const buffer = await docker.getContainer(containerId).logs({
|
||||
stdout: true,
|
||||
stderr: true,
|
||||
tail,
|
||||
});
|
||||
const raw = Buffer.isBuffer(buffer) ? buffer.toString('utf8') : String(buffer);
|
||||
return jsonResult({
|
||||
containerId,
|
||||
logs: raw.slice(-config.maxToolOutputChars),
|
||||
bytes: raw.length,
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
return errorResult(toErrorMessage(error));
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=containerLogs.js.map
|
||||
Reference in New Issue
Block a user