Compare commits

...

4 Commits

Author SHA1 Message Date
ssalbdivad 6d9c6fd2b1 try to add debugging to mcp server 2025-10-09 18:04:00 -04:00
ssalbdivad 008021df1c remove bad error handling 2025-10-09 17:53:22 -04:00
ssalbdivad d6bc0fdd64 iter 2025-10-09 17:45:38 -04:00
ssalbdivad 8fd0328109 propagate GITHUB_REPOSITORY 2025-10-09 17:26:01 -04:00
5 changed files with 75 additions and 10 deletions
+25 -6
View File
@@ -1,3 +1,4 @@
import { readFileSync } from "node:fs";
import { access, constants } from "node:fs/promises";
import * as core from "@actions/core";
import { createMcpConfig } from "../mcp/config.ts";
@@ -16,7 +17,6 @@ export class ClaudeAgent implements Agent {
startTime: 0,
};
constructor(config: AgentConfig) {
if (!config.apiKey) {
throw new Error("Claude agent requires an API key");
@@ -74,7 +74,6 @@ export class ClaudeAgent implements Agent {
core.info("Running Claude Code...");
try {
const claudePath = `${process.env.HOME}/.local/bin/claude`;
console.log(boxString(prompt, { title: "Prompt" }));
const args = [
@@ -152,8 +151,7 @@ export class ClaudeAgent implements Agent {
} catch (error: any) {
try {
core.endGroup();
} catch {
}
} catch {}
const errorMessage = error instanceof Error ? error.message : "Unknown error";
return {
success: false,
@@ -195,6 +193,29 @@ function processJSONChunk(chunk: string, agent?: ClaudeAgent): void {
],
])
);
// Check for failed MCP servers and show debug logs
if (parsedChunk.mcp_servers?.length > 0) {
const failedServers = parsedChunk.mcp_servers.filter(
(server: any) => server.status === "failed"
);
if (failedServers.length > 0) {
const failedNames = failedServers.map((server: any) => server.name).join(", ");
// Try to read MCP server debug logs
let debugInfo = "";
try {
const logContent = readFileSync("/tmp/mcp-server.log", "utf-8");
core.error("MCP Server Debug Log:");
core.error(logContent);
debugInfo = " (see debug log above)";
} catch (logError) {
debugInfo = ` (could not read debug log: ${logError instanceof Error ? logError.message : String(logError)})`;
}
throw new Error(`MCP servers failed to start: ${failedNames}${debugInfo}`);
}
}
}
break;
@@ -270,7 +291,6 @@ function processJSONChunk(chunk: string, agent?: ClaudeAgent): void {
core.info(` └─ bash_command: ${input.bash_command}`);
}
}
}
}
}
@@ -291,7 +311,6 @@ function processJSONChunk(chunk: string, agent?: ClaudeAgent): void {
case "result":
if (parsedChunk.subtype === "success") {
core.info(
tableString([
["Cost", `$${parsedChunk.total_cost_usd?.toFixed(4) || "0.0000"}`],
+26 -2
View File
@@ -25500,20 +25500,26 @@ var core4 = __toESM(require_core(), 1);
var core2 = __toESM(require_core(), 1);
// agents/claude.ts
var import_node_fs = require("node:fs");
var import_promises = require("node:fs/promises");
var core = __toESM(require_core(), 1);
// mcp/config.ts
var actionPath = process.env.GITHUB_ACTION_PATH || process.cwd();
function createMcpConfig(githubInstallationToken) {
const githubRepository = process.env.GITHUB_REPOSITORY;
if (!githubRepository) {
throw new Error("GITHUB_REPOSITORY environment variable is required for MCP GitHub integration");
}
return JSON.stringify(
{
mcpServers: {
minimal_github_comment: {
command: "node",
command: `${actionPath}/mcp/debug-server.sh`,
args: [`${actionPath}/mcp/server.ts`],
env: {
GITHUB_INSTALLATION_TOKEN: githubInstallationToken
GITHUB_INSTALLATION_TOKEN: githubInstallationToken,
GITHUB_REPOSITORY: githubRepository
}
}
}
@@ -25853,6 +25859,24 @@ function processJSONChunk(chunk, agent) {
]
])
);
if (parsedChunk.mcp_servers?.length > 0) {
const failedServers = parsedChunk.mcp_servers.filter(
(server) => server.status === "failed"
);
if (failedServers.length > 0) {
const failedNames = failedServers.map((server) => server.name).join(", ");
let debugInfo = "";
try {
const logContent = (0, import_node_fs.readFileSync)("/tmp/mcp-server.log", "utf-8");
core.error("MCP Server Debug Log:");
core.error(logContent);
debugInfo = " (see debug log above)";
} catch (logError) {
debugInfo = ` (could not read debug log: ${logError instanceof Error ? logError.message : String(logError)})`;
}
throw new Error(`MCP servers failed to start: ${failedNames}${debugInfo}`);
}
}
}
break;
case "assistant":
+7 -1
View File
@@ -4,14 +4,20 @@
const actionPath = process.env.GITHUB_ACTION_PATH || process.cwd();
export function createMcpConfig(githubInstallationToken: string) {
const githubRepository = process.env.GITHUB_REPOSITORY;
if (!githubRepository) {
throw new Error('GITHUB_REPOSITORY environment variable is required for MCP GitHub integration');
}
return JSON.stringify(
{
mcpServers: {
minimal_github_comment: {
command: "node",
command: `${actionPath}/mcp/debug-server.sh`,
args: [`${actionPath}/mcp/server.ts`],
env: {
GITHUB_INSTALLATION_TOKEN: githubInstallationToken,
GITHUB_REPOSITORY: githubRepository,
},
},
},
+16
View File
@@ -0,0 +1,16 @@
#!/bin/bash
# Wrapper script to capture MCP server logs for debugging
LOG_FILE="/tmp/mcp-server.log"
echo "=== MCP Server Debug Wrapper Starting ===" >> "$LOG_FILE"
echo "Timestamp: $(date)" >> "$LOG_FILE"
echo "Working directory: $(pwd)" >> "$LOG_FILE"
echo "Environment variables:" >> "$LOG_FILE"
env | grep -E "(GITHUB_|MCP_|NODE_)" >> "$LOG_FILE"
echo "Node.js version: $(node --version)" >> "$LOG_FILE"
echo "Arguments: $@" >> "$LOG_FILE"
echo "=== Starting MCP Server ===" >> "$LOG_FILE"
# Execute the actual MCP server, capturing both stdout and stderr
exec node "$@" 2>&1 | tee -a "$LOG_FILE"
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@pullfrog/action",
"version": "0.0.15",
"version": "0.0.19",
"type": "module",
"files": [
"index.js",