diff --git a/src/create-prompt/index.ts b/src/create-prompt/index.ts index 0a6c385..f622dec 100644 --- a/src/create-prompt/index.ts +++ b/src/create-prompt/index.ts @@ -434,9 +434,27 @@ ${ eventData.eventName === "pull_request_review_comment" ? ` IMPORTANT: For this inline PR review comment, you have been provided with ONLY the mcp__github__update_pull_request_comment tool to update this specific review comment. + +Tool usage example for mcp__github__update_pull_request_comment: +{ + "owner": "${context.repository.split("/")[0]}", + "repo": "${context.repository.split("/")[1]}", + "commentId": ${eventData.commentId || context.claudeCommentId}, + "body": "Your comment text here" +} +All four parameters (owner, repo, commentId, body) are required. ` : ` IMPORTANT: For this event type, you have been provided with ONLY the mcp__github__update_issue_comment tool to update comments. + +Tool usage example for mcp__github__update_issue_comment: +{ + "owner": "${context.repository.split("/")[0]}", + "repo": "${context.repository.split("/")[1]}", + "commentId": ${context.claudeCommentId}, + "body": "Your comment text here" +} +All four parameters (owner, repo, commentId, body) are required. ` } @@ -547,6 +565,9 @@ Important Notes: - Use this spinner HTML when work is in progress: ${eventData.isPR && !eventData.claudeBranch ? `- Always push to the existing branch when triggered on a PR.` : `- IMPORTANT: You are already on the correct branch (${eventData.claudeBranch || "the created branch"}). Never create new branches when triggered on issues or closed/merged PRs.`} - Use mcp__github_file_ops__commit_files for making commits (works for both new and existing files, single or multiple). Use mcp__github_file_ops__delete_files for deleting files (supports deleting single or multiple files atomically), or mcp__github__delete_file for deleting a single file. Edit files locally, and the tool will read the content from the same path on disk. + Tool usage examples: + - mcp__github_file_ops__commit_files: {"files": ["path/to/file1.js", "path/to/file2.py"], "message": "feat: add new feature"} + - mcp__github_file_ops__delete_files: {"files": ["path/to/old.js"], "message": "chore: remove deprecated file"} - Display the todo list as a checklist in the GitHub comment and mark things off as you go. - REPOSITORY SETUP INSTRUCTIONS: The repository's CLAUDE.md file(s) contain critical repo-specific setup instructions, development guidelines, and preferences. Always read and follow these files, particularly the root CLAUDE.md, as they provide essential context for working with the codebase effectively. - Use h3 headers (###) for section titles in your comments, not h1 headers (#). diff --git a/src/mcp/github-file-ops-server.ts b/src/mcp/github-file-ops-server.ts index 8bc1bfb..19834c9 100644 --- a/src/mcp/github-file-ops-server.ts +++ b/src/mcp/github-file-ops-server.ts @@ -4,6 +4,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import { readFile } from "fs/promises"; +import { join } from "path"; import fetch from "node-fetch"; import { GITHUB_API_URL } from "../github/api/config"; @@ -36,6 +37,7 @@ type GitHubNewCommit = { const REPO_OWNER = process.env.REPO_OWNER; const REPO_NAME = process.env.REPO_NAME; const BRANCH_NAME = process.env.BRANCH_NAME; +const REPO_DIR = process.env.REPO_DIR || process.cwd(); if (!REPO_OWNER || !REPO_NAME || !BRANCH_NAME) { console.error( @@ -71,18 +73,9 @@ server.tool( throw new Error("GITHUB_TOKEN environment variable is required"); } - // Convert absolute paths to relative if they match CWD - const cwd = process.cwd(); const processedFiles = files.map((filePath) => { if (filePath.startsWith("/")) { - if (filePath.startsWith(cwd)) { - // Strip CWD from absolute path - return filePath.slice(cwd.length + 1); - } else { - throw new Error( - `Path '${filePath}' must be relative to repository root or within current working directory`, - ); - } + return filePath.slice(1); } return filePath; }); @@ -126,7 +119,11 @@ server.tool( // 3. Create tree entries for all files const treeEntries = await Promise.all( processedFiles.map(async (filePath) => { - const content = await readFile(filePath, "utf-8"); + const fullPath = filePath.startsWith("/") + ? filePath + : join(REPO_DIR, filePath); + + const content = await readFile(fullPath, "utf-8"); return { path: filePath, mode: "100644", @@ -232,13 +229,16 @@ server.tool( ], }; } catch (error) { + const errorMessage = + error instanceof Error ? error.message : String(error); return { content: [ { type: "text", - text: `Error: ${error instanceof Error ? error.message : String(error)}`, + text: `Error: ${errorMessage}`, }, ], + error: errorMessage, isError: true, }; } @@ -423,13 +423,16 @@ server.tool( ], }; } catch (error) { + const errorMessage = + error instanceof Error ? error.message : String(error); return { content: [ { type: "text", - text: `Error: ${error instanceof Error ? error.message : String(error)}`, + text: `Error: ${errorMessage}`, }, ], + error: errorMessage, isError: true, }; } diff --git a/src/mcp/install-mcp-server.ts b/src/mcp/install-mcp-server.ts index 7c271cf..462967d 100644 --- a/src/mcp/install-mcp-server.ts +++ b/src/mcp/install-mcp-server.ts @@ -34,6 +34,7 @@ export async function prepareMcpConfig( REPO_OWNER: owner, REPO_NAME: repo, BRANCH_NAME: branch, + REPO_DIR: process.env.GITHUB_WORKSPACE || process.cwd(), }, }, },