cleanup mcp server too

This commit is contained in:
Mateusz Burzyński
2026-01-08 11:21:23 +01:00
parent 2bd12b9553
commit 317ebd3431
3 changed files with 125 additions and 131 deletions
+114 -112
View File
@@ -126416,7 +126416,7 @@ async function startMcpHttpServer(ctx) {
const url2 = `http://${host}:${port}${endpoint2}`;
return {
url: url2,
close: async () => {
[Symbol.asyncDispose]: async () => {
await server.stop();
}
};
@@ -126556,120 +126556,125 @@ var Inputs = type({
...keyInputDefs
});
async function main(inputs) {
var _stack = [];
var _stack2 = [];
try {
const timer = new Timer();
const installationToken = __using(_stack, await setupGitHubInstallationToken(), true);
let mcpServerClose;
const tokenRef = __using(_stack2, await setupGitHubInstallationToken(), true);
let payload;
try {
payload = parsePayload(inputs);
Inputs.assert(inputs);
setupGitConfig();
const [githubSetup, sharedTempDir] = await Promise.all([
initializeGitHub(installationToken.token),
createTempDirectory()
]);
timer.checkpoint("githubSetup");
const agent2 = resolveAgent({
inputs,
payload,
repoSettings: githubSetup.repoSettings
});
const resolvedPayload = { ...payload, agent: agent2.name };
const apiKeySetup = validateApiKey({
agent: agent2,
inputs,
owner: githubSetup.owner,
name: githubSetup.name
});
if (!apiKeySetup.success) {
await reportErrorToComment({ error: apiKeySetup.error });
return { success: false, error: apiKeySetup.error };
}
const toolState = {};
const [cliPath] = await Promise.all([
installAgentCli({ agent: agent2, token: installationToken.token }),
setupGitAuth({
token: installationToken.token,
var _stack = [];
try {
payload = parsePayload(inputs);
Inputs.assert(inputs);
setupGitConfig();
const [githubSetup, sharedTempDir] = await Promise.all([
initializeGitHub(tokenRef.token),
createTempDirectory()
]);
timer.checkpoint("githubSetup");
const agent2 = resolveAgent({
inputs,
payload,
repoSettings: githubSetup.repoSettings
});
const resolvedPayload = { ...payload, agent: agent2.name };
const apiKeySetup = validateApiKey({
agent: agent2,
inputs,
owner: githubSetup.owner,
name: githubSetup.name
});
if (!apiKeySetup.success) {
await reportErrorToComment({ error: apiKeySetup.error });
return { success: false, error: apiKeySetup.error };
}
const toolState = {};
const [cliPath] = await Promise.all([
installAgentCli({ agent: agent2, token: tokenRef.token }),
setupGitAuth({
token: tokenRef.token,
owner: githubSetup.owner,
name: githubSetup.name,
payload: resolvedPayload,
octokit: githubSetup.octokit,
toolState
})
]);
timer.checkpoint("agentSetup+gitAuth");
const computedModes = [
...getModes({
disableProgressComment: resolvedPayload.disableProgressComment
}),
...resolvedPayload.modes || []
];
const runId = process.env.GITHUB_RUN_ID || "";
if (runId) {
const workflowRunInfo = await fetchWorkflowRunInfo(runId);
if (workflowRunInfo.progressCommentId) {
process.env.PULLFROG_PROGRESS_COMMENT_ID = workflowRunInfo.progressCommentId;
log.info(`\u{1F4DD} Using pre-created progress comment: ${workflowRunInfo.progressCommentId}`);
}
}
let jobId;
const jobName = process.env.GITHUB_JOB;
if (jobName && runId) {
const jobs = await githubSetup.octokit.rest.actions.listJobsForWorkflowRun({
owner: githubSetup.owner,
repo: githubSetup.name,
run_id: parseInt(runId, 10)
});
const matchingJob = jobs.data.jobs.find((job) => job.name === jobName);
if (matchingJob) {
jobId = String(matchingJob.id);
log.info(`\u{1F4CB} Found job ID: ${jobId}`);
}
}
const toolContext = {
owner: githubSetup.owner,
name: githubSetup.name,
payload: resolvedPayload,
githubInstallationToken: tokenRef.token,
octokit: githubSetup.octokit,
toolState
})
]);
timer.checkpoint("agentSetup+gitAuth");
const computedModes = [
...getModes({
disableProgressComment: resolvedPayload.disableProgressComment
}),
...resolvedPayload.modes || []
];
const runId = process.env.GITHUB_RUN_ID || "";
if (runId) {
const workflowRunInfo = await fetchWorkflowRunInfo(runId);
if (workflowRunInfo.progressCommentId) {
process.env.PULLFROG_PROGRESS_COMMENT_ID = workflowRunInfo.progressCommentId;
log.info(`\u{1F4DD} Using pre-created progress comment: ${workflowRunInfo.progressCommentId}`);
}
}
let jobId;
const jobName = process.env.GITHUB_JOB;
if (jobName && runId) {
const jobs = await githubSetup.octokit.rest.actions.listJobsForWorkflowRun({
owner: githubSetup.owner,
repo: githubSetup.name,
run_id: parseInt(runId, 10)
});
const matchingJob = jobs.data.jobs.find((job) => job.name === jobName);
if (matchingJob) {
jobId = String(matchingJob.id);
log.info(`\u{1F4CB} Found job ID: ${jobId}`);
}
}
const toolContext = {
owner: githubSetup.owner,
name: githubSetup.name,
githubInstallationToken: installationToken.token,
octokit: githubSetup.octokit,
payload: resolvedPayload,
repo: githubSetup.repo,
repoSettings: githubSetup.repoSettings,
modes: computedModes,
toolState,
agent: agent2,
sharedTempDir,
runId,
jobId
};
const { url: mcpServerUrl, close: mcpServerCloseFunc } = await startMcpHttpServer(toolContext);
mcpServerClose = mcpServerCloseFunc;
log.info(`\u{1F680} MCP server started at ${mcpServerUrl}`);
const mcpServers = createMcpConfigs(mcpServerUrl);
log.debug(`\u{1F4CB} MCP Config: ${JSON.stringify(mcpServers, null, 2)}`);
timer.checkpoint("mcpServer");
const ctx = {
...toolContext,
inputs,
mcpServerUrl,
mcpServerClose: mcpServerCloseFunc,
mcpServers,
cliPath,
apiKey: apiKeySetup.apiKey,
apiKeys: apiKeySetup.apiKeys
};
if (ctx.payload.event.trigger === "fix_review" && Array.isArray(ctx.payload.event.comment_ids) && ctx.payload.event.comment_ids.length === 0) {
const noThumbsMessage = `\u{1F44D} **No approved comments found**
payload: resolvedPayload,
repo: githubSetup.repo,
repoSettings: githubSetup.repoSettings,
modes: computedModes,
toolState,
agent: agent2,
sharedTempDir,
runId,
jobId
};
const mcpHttpServer = __using(_stack, await startMcpHttpServer(toolContext), true);
log.info(`\u{1F680} MCP server started at ${mcpHttpServer.url}`);
const mcpServers = createMcpConfigs(mcpHttpServer.url);
log.debug(`\u{1F4CB} MCP Config: ${JSON.stringify(mcpServers, null, 2)}`);
timer.checkpoint("mcpServer");
const ctx = {
...toolContext,
inputs,
mcpServerUrl: mcpHttpServer.url,
mcpServers,
cliPath,
apiKey: apiKeySetup.apiKey,
apiKeys: apiKeySetup.apiKeys
};
if (ctx.payload.event.trigger === "fix_review" && Array.isArray(ctx.payload.event.comment_ids) && ctx.payload.event.comment_ids.length === 0) {
const noThumbsMessage = `\u{1F44D} **No approved comments found**
To use "Fix \u{1F44D}s", add a \u{1F44D} reaction to one or more inline review comments you want fixed.`;
log.error(noThumbsMessage);
await reportProgress(ctx, { body: noThumbsMessage });
return { success: true };
log.error(noThumbsMessage);
await reportProgress(ctx, { body: noThumbsMessage });
return { success: true };
}
const result = await runAgent(ctx);
const mainResult = await handleAgentResult(result);
return mainResult;
} catch (_) {
var _error = _, _hasError = true;
} finally {
var _promise2 = __callDispose(_stack, _error, _hasError);
_promise2 && await _promise2;
}
const result = await runAgent(ctx);
const mainResult = await handleAgentResult(result);
return mainResult;
} catch (error41) {
const errorMessage = error41 instanceof Error ? error41.message : "Unknown error occurred";
log.error(errorMessage);
@@ -126687,15 +126692,12 @@ To use "Fix \u{1F44D}s", add a \u{1F44D} reaction to one or more inline review c
await ensureProgressCommentUpdated(payload);
} catch {
}
if (mcpServerClose) {
await mcpServerClose();
}
}
} catch (_) {
var _error = _, _hasError = true;
} catch (_2) {
var _error2 = _2, _hasError2 = true;
} finally {
var _promise2 = __callDispose(_stack, _error, _hasError);
_promise2 && await _promise2;
var _promise3 = __callDispose(_stack2, _error2, _hasError2);
_promise3 && await _promise3;
}
}
function agentHasApiKeys(agent2, inputs) {