This commit is contained in:
Colin McDonnell
2026-01-28 07:47:52 +00:00
committed by pullfrog[bot]
parent 071e885d63
commit f77fecc2a0
8 changed files with 174 additions and 253 deletions
+125 -97
View File
@@ -135594,9 +135594,14 @@ import { join } from "node:path";
// utils/log.ts
var core = __toESM(require_core(), 1);
var import_table = __toESM(require_src(), 1);
// utils/globals.ts
import { existsSync } from "node:fs";
var isCloudflareSandbox = !!process.env.CLOUDFLARE_APPLICATION_ID && !!process.env.SANDBOX_VERSION;
var isGitHubActions = !!process.env.GITHUB_ACTIONS;
var isInsideDocker = existsSync("/.dockerenv");
// utils/log.ts
var isDebugEnabled = () => process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true" || process.env.RUNNER_DEBUG === "1" || core.isDebug();
function formatArgs(args3) {
return args3.map((arg) => {
@@ -141996,14 +142001,31 @@ import assert2 from "node:assert/strict";
var githubInstallationToken;
async function resolveInstallationToken() {
assert2(!githubInstallationToken, "GitHub installation token is already set.");
const acquiredToken = await acquireNewToken();
core3.setSecret(acquiredToken);
githubInstallationToken = acquiredToken;
const originalToken = process.env.GITHUB_TOKEN;
if (originalToken) {
process.env.ORIGINAL_GITHUB_TOKEN = originalToken;
}
const externalToken = process.env.GH_TOKEN;
const token = externalToken || await acquireNewToken();
process.env.GITHUB_TOKEN = token;
githubInstallationToken = token;
if (isGitHubActions) {
core3.setSecret(token);
}
return {
token: acquiredToken,
[Symbol.asyncDispose]() {
token,
originalToken,
async [Symbol.asyncDispose]() {
githubInstallationToken = void 0;
return revokeGitHubInstallationToken(acquiredToken);
if (originalToken) {
process.env.GITHUB_TOKEN = originalToken;
} else {
delete process.env.GITHUB_TOKEN;
}
if (externalToken) {
return;
}
return revokeGitHubInstallationToken(token);
}
};
}
@@ -159965,7 +159987,7 @@ function query({
// package.json
var package_default = {
name: "@pullfrog/pullfrog",
version: "0.0.159",
version: "0.0.161",
type: "module",
files: [
"index.js",
@@ -159992,7 +160014,6 @@ var package_default = {
},
dependencies: {
"@actions/core": "^1.11.1",
"@actions/github": "^6.0.1",
"@anthropic-ai/claude-agent-sdk": "0.2.7",
"@ark/fs": "0.53.0",
"@ark/util": "0.53.0",
@@ -162604,101 +162625,108 @@ async function resolveRun(params) {
// main.ts
async function main() {
normalizeEnv();
process.env.ORIGINAL_GITHUB_TOKEN = process.env.GITHUB_TOKEN;
const timer = new Timer();
const tokenRef = await resolveInstallationToken();
process.env.GITHUB_TOKEN = tokenRef.token;
const octokit = createOctokit(tokenRef.token);
const runInfo = await resolveRun({ octokit });
const toolState = initToolState({ runInfo });
setupExitHandler(toolState);
var _stack2 = [];
try {
var _stack = [];
normalizeEnv();
const timer = new Timer();
const tokenRef = __using(_stack2, await resolveInstallationToken(), true);
process.env.GITHUB_TOKEN = tokenRef.token;
const octokit = createOctokit(tokenRef.token);
const runInfo = await resolveRun({ octokit });
const toolState = initToolState({ runInfo });
setupExitHandler(toolState);
try {
const runContext = await resolveRunContextData({ octokit, token: tokenRef.token });
timer.checkpoint("runContextData");
const payload = resolvePayload(runContext.repoSettings);
if (payload.cwd && process.cwd() !== payload.cwd) {
process.chdir(payload.cwd);
}
const originalBody = payload.event.body;
const resolvedBody = await resolveBody({
event: payload.event,
octokit,
repo: runContext.repo
});
if (resolvedBody !== originalBody) {
payload.event.body = resolvedBody;
if (originalBody && payload.prompt.includes(originalBody)) {
payload.prompt = payload.prompt.replace(originalBody, resolvedBody ?? "");
var _stack = [];
try {
const runContext = await resolveRunContextData({ octokit, token: tokenRef.token });
timer.checkpoint("runContextData");
const payload = resolvePayload(runContext.repoSettings);
if (payload.cwd && process.cwd() !== payload.cwd) {
process.chdir(payload.cwd);
}
const originalBody = payload.event.body;
const resolvedBody = await resolveBody({
event: payload.event,
octokit,
repo: runContext.repo
});
if (resolvedBody !== originalBody) {
payload.event.body = resolvedBody;
if (originalBody && payload.prompt.includes(originalBody)) {
payload.prompt = payload.prompt.replace(originalBody, resolvedBody ?? "");
}
}
const tmpdir3 = createTempDirectory();
const agent2 = resolveAgent({ payload, repoSettings: runContext.repoSettings });
validateAgentApiKey({
agent: agent2,
owner: runContext.repo.owner,
name: runContext.repo.name
});
await setupGit({
token: tokenRef.token,
originalToken: tokenRef.originalToken,
bashPermission: payload.bash,
owner: runContext.repo.owner,
name: runContext.repo.name,
event: payload.event,
octokit,
toolState
});
timer.checkpoint("git");
const modes2 = [...computeModes(), ...runContext.repoSettings.modes];
const mcpHttpServer = __using(_stack, await startMcpHttpServer({
repo: runContext.repo,
payload,
octokit,
githubInstallationToken: tokenRef.token,
apiToken: runContext.apiToken,
agent: agent2,
modes: modes2,
toolState,
runId: runInfo.runId,
jobId: runInfo.jobId
}), true);
log.info(`\xBB MCP server started at ${mcpHttpServer.url}`);
timer.checkpoint("mcpServer");
const instructions = resolveInstructions({
payload,
repo: runContext.repo,
modes: modes2
});
const result = await agent2.run({
payload,
mcpServerUrl: mcpHttpServer.url,
tmpdir: tmpdir3,
instructions
});
if (toolState.lastProgressBody) {
await writeSummary(toolState.lastProgressBody);
}
return handleAgentResult(result);
} catch (_) {
var _error = _, _hasError = true;
} finally {
var _promise2 = __callDispose(_stack, _error, _hasError);
_promise2 && await _promise2;
}
const tmpdir3 = createTempDirectory();
const agent2 = resolveAgent({ payload, repoSettings: runContext.repoSettings });
validateAgentApiKey({
agent: agent2,
owner: runContext.repo.owner,
name: runContext.repo.name
});
await setupGit({
token: tokenRef.token,
originalToken: process.env.ORIGINAL_GITHUB_TOKEN,
bashPermission: payload.bash,
owner: runContext.repo.owner,
name: runContext.repo.name,
event: payload.event,
octokit,
toolState
});
timer.checkpoint("git");
const modes2 = [...computeModes(), ...runContext.repoSettings.modes];
const mcpHttpServer = __using(_stack, await startMcpHttpServer({
repo: runContext.repo,
payload,
octokit,
githubInstallationToken: tokenRef.token,
apiToken: runContext.apiToken,
agent: agent2,
modes: modes2,
toolState,
runId: runInfo.runId,
jobId: runInfo.jobId
}), true);
log.info(`\xBB MCP server started at ${mcpHttpServer.url}`);
timer.checkpoint("mcpServer");
const instructions = resolveInstructions({
payload,
repo: runContext.repo,
modes: modes2
});
const result = await agent2.run({
payload,
mcpServerUrl: mcpHttpServer.url,
tmpdir: tmpdir3,
instructions
});
if (toolState.lastProgressBody) {
await writeSummary(toolState.lastProgressBody);
} catch (error50) {
const errorMessage = error50 instanceof Error ? error50.message : "Unknown error occurred";
log.error(errorMessage);
try {
await reportErrorToComment({ toolState, error: errorMessage });
} catch {
}
return handleAgentResult(result);
} catch (_) {
var _error = _, _hasError = true;
} finally {
var _promise2 = __callDispose(_stack, _error, _hasError);
_promise2 && await _promise2;
return {
success: false,
error: errorMessage
};
}
} catch (error50) {
const errorMessage = error50 instanceof Error ? error50.message : "Unknown error occurred";
log.error(errorMessage);
try {
await reportErrorToComment({ toolState, error: errorMessage });
} catch {
}
return {
success: false,
error: errorMessage
};
} catch (_2) {
var _error2 = _2, _hasError2 = true;
} finally {
var _promise3 = __callDispose(_stack2, _error2, _hasError2);
_promise3 && await _promise3;
}
}