mirror of
https://github.com/markwylde/claude-code-gitea-action.git
synced 2026-02-20 02:22:49 +08:00
Attempt to make this work
This commit is contained in:
@@ -132,51 +132,16 @@ export class ClaudeExecutor {
|
|||||||
console.log(`[CLAUDE-EXECUTOR] Allowed tools: ${tools.allowed.join(", ") || "none"}`);
|
console.log(`[CLAUDE-EXECUTOR] Allowed tools: ${tools.allowed.join(", ") || "none"}`);
|
||||||
console.log(`[CLAUDE-EXECUTOR] Disallowed tools: ${tools.disallowed.join(", ") || "none"}`);
|
console.log(`[CLAUDE-EXECUTOR] Disallowed tools: ${tools.disallowed.join(", ") || "none"}`);
|
||||||
|
|
||||||
// For now, just log that we're using the simple API approach
|
// Setup MCP configuration if provided
|
||||||
console.log("[CLAUDE-EXECUTOR] WARNING: Using simple Anthropic API - MCP tools not supported in this implementation");
|
const mcpConfigFile = await this.setupMCPConfig();
|
||||||
console.log("[CLAUDE-EXECUTOR] This explains why Claude cannot use mcp__local_git_ops tools");
|
|
||||||
|
|
||||||
if (this.config.mcpConfig) {
|
if (mcpConfigFile) {
|
||||||
console.log("[CLAUDE-EXECUTOR] MCP config provided but not used:");
|
console.log("[CLAUDE-EXECUTOR] Using Claude Code with MCP configuration");
|
||||||
console.log(this.config.mcpConfig.substring(0, 200) + "...");
|
return await this.executeWithMCP(prompt, mcpConfigFile, tools);
|
||||||
|
} else {
|
||||||
|
console.log("[CLAUDE-EXECUTOR] No MCP config provided, falling back to basic API");
|
||||||
|
return await this.executeBasicAPI(prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.config.apiKey) {
|
|
||||||
throw new Error("Anthropic API key is required");
|
|
||||||
}
|
|
||||||
|
|
||||||
const anthropic = new Anthropic({
|
|
||||||
apiKey: this.config.apiKey,
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log("[CLAUDE-EXECUTOR] Starting simple Anthropic API call...");
|
|
||||||
console.log("[CLAUDE-EXECUTOR] Prompt preview:", prompt.substring(0, 500) + "...");
|
|
||||||
|
|
||||||
// Create a simple message request
|
|
||||||
const response = await anthropic.messages.create({
|
|
||||||
model: this.config.model || "claude-3-7-sonnet-20250219",
|
|
||||||
max_tokens: 8192,
|
|
||||||
messages: [
|
|
||||||
{
|
|
||||||
role: "user",
|
|
||||||
content: prompt,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log("[CLAUDE-EXECUTOR] Claude response received successfully");
|
|
||||||
console.log("[CLAUDE-EXECUTOR] Response type:", response.content[0]?.type);
|
|
||||||
|
|
||||||
if (response.content[0]?.type === "text") {
|
|
||||||
console.log("[CLAUDE-EXECUTOR] Response preview:", response.content[0].text.substring(0, 500) + "...");
|
|
||||||
}
|
|
||||||
|
|
||||||
const executionFile = this.createExecutionLog(response);
|
|
||||||
|
|
||||||
return {
|
|
||||||
conclusion: "success",
|
|
||||||
executionFile,
|
|
||||||
};
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("[CLAUDE-EXECUTOR] Claude execution failed:", error);
|
console.error("[CLAUDE-EXECUTOR] Claude execution failed:", error);
|
||||||
|
|
||||||
@@ -189,6 +154,136 @@ export class ClaudeExecutor {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async executeWithMCP(
|
||||||
|
prompt: string,
|
||||||
|
mcpConfigFile: string,
|
||||||
|
tools: { allowed: string[]; disallowed: string[] }
|
||||||
|
): Promise<ClaudeExecutorResult> {
|
||||||
|
console.log("[CLAUDE-EXECUTOR] Starting Claude Code with MCP support...");
|
||||||
|
|
||||||
|
if (!this.config.apiKey) {
|
||||||
|
throw new Error("Anthropic API key is required");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write prompt to a temporary file
|
||||||
|
const promptFile = "/tmp/claude-prompt.txt";
|
||||||
|
fs.writeFileSync(promptFile, prompt);
|
||||||
|
|
||||||
|
// Build Claude Code command arguments
|
||||||
|
const args = [
|
||||||
|
"--file", promptFile,
|
||||||
|
"--mcp-config", mcpConfigFile,
|
||||||
|
"--model", this.config.model || "claude-3-7-sonnet-20250219"
|
||||||
|
];
|
||||||
|
|
||||||
|
// Add allowed tools if specified
|
||||||
|
if (tools.allowed.length > 0) {
|
||||||
|
args.push("--allowed-tools", tools.allowed.join(","));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add disallowed tools if specified
|
||||||
|
if (tools.disallowed.length > 0) {
|
||||||
|
args.push("--disallowed-tools", tools.disallowed.join(","));
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("[CLAUDE-EXECUTOR] Claude Code command:", "claude", args.join(" "));
|
||||||
|
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const claude = spawn("claude", args, {
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
ANTHROPIC_API_KEY: this.config.apiKey,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
let stdout = "";
|
||||||
|
let stderr = "";
|
||||||
|
|
||||||
|
claude.stdout?.on("data", (data) => {
|
||||||
|
const chunk = data.toString();
|
||||||
|
stdout += chunk;
|
||||||
|
console.log("[CLAUDE-STDOUT]", chunk.trim());
|
||||||
|
});
|
||||||
|
|
||||||
|
claude.stderr?.on("data", (data) => {
|
||||||
|
const chunk = data.toString();
|
||||||
|
stderr += chunk;
|
||||||
|
console.log("[CLAUDE-STDERR]", chunk.trim());
|
||||||
|
});
|
||||||
|
|
||||||
|
claude.on("close", (code) => {
|
||||||
|
console.log(`[CLAUDE-EXECUTOR] Claude Code process exited with code ${code}`);
|
||||||
|
|
||||||
|
const result = {
|
||||||
|
stdout,
|
||||||
|
stderr,
|
||||||
|
exitCode: code,
|
||||||
|
success: code === 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
const executionFile = this.createExecutionLog(result, code !== 0 ? `Process exited with code ${code}` : undefined);
|
||||||
|
|
||||||
|
resolve({
|
||||||
|
conclusion: code === 0 ? "success" : "failure",
|
||||||
|
executionFile,
|
||||||
|
error: code !== 0 ? `Claude Code exited with code ${code}: ${stderr}` : undefined,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
claude.on("error", (error) => {
|
||||||
|
console.error("[CLAUDE-EXECUTOR] Failed to spawn Claude Code process:", error);
|
||||||
|
const executionFile = this.createExecutionLog(null, String(error));
|
||||||
|
resolve({
|
||||||
|
conclusion: "failure",
|
||||||
|
executionFile,
|
||||||
|
error: String(error),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private async executeBasicAPI(prompt: string): Promise<ClaudeExecutorResult> {
|
||||||
|
console.log("[CLAUDE-EXECUTOR] WARNING: Using simple Anthropic API - MCP tools not supported in this implementation");
|
||||||
|
console.log("[CLAUDE-EXECUTOR] This explains why Claude cannot use mcp__local_git_ops tools");
|
||||||
|
|
||||||
|
if (!this.config.apiKey) {
|
||||||
|
throw new Error("Anthropic API key is required");
|
||||||
|
}
|
||||||
|
|
||||||
|
const anthropic = new Anthropic({
|
||||||
|
apiKey: this.config.apiKey,
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("[CLAUDE-EXECUTOR] Starting simple Anthropic API call...");
|
||||||
|
console.log("[CLAUDE-EXECUTOR] Prompt preview:", prompt.substring(0, 500) + "...");
|
||||||
|
|
||||||
|
// Create a simple message request
|
||||||
|
const response = await anthropic.messages.create({
|
||||||
|
model: this.config.model || "claude-3-7-sonnet-20250219",
|
||||||
|
max_tokens: 8192,
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
role: "user",
|
||||||
|
content: prompt,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("[CLAUDE-EXECUTOR] Claude response received successfully");
|
||||||
|
console.log("[CLAUDE-EXECUTOR] Response type:", response.content[0]?.type);
|
||||||
|
|
||||||
|
if (response.content[0]?.type === "text") {
|
||||||
|
console.log("[CLAUDE-EXECUTOR] Response preview:", response.content[0].text.substring(0, 500) + "...");
|
||||||
|
}
|
||||||
|
|
||||||
|
const executionFile = this.createExecutionLog(response);
|
||||||
|
|
||||||
|
return {
|
||||||
|
conclusion: "success",
|
||||||
|
executionFile,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function runClaude(
|
export async function runClaude(
|
||||||
|
|||||||
Reference in New Issue
Block a user