diff --git a/action.yml b/action.yml index 431962a3e..e0ce364cb 100644 --- a/action.yml +++ b/action.yml @@ -93,6 +93,10 @@ inputs: description: "Force tag mode with tracking comments for pull_request and issue events. Only applicable to pull_request (opened, synchronize, ready_for_review, reopened) and issue (opened, edited, labeled, assigned) events." required: false default: "false" + include_fix_links: + description: "Include 'Fix this' links in PR code review feedback that open Claude Code with context to fix the identified issue" + required: false + default: "true" path_to_claude_code_executable: description: "Optional path to a custom Claude Code executable. If provided, skips automatic installation and uses this executable instead. WARNING: Using an older version may cause problems if the action begins taking advantage of new Claude Code features. This input is typically not needed unless you're debugging something specific or have unique needs in your environment." required: false @@ -180,6 +184,7 @@ runs: BOT_ID: ${{ inputs.bot_id }} BOT_NAME: ${{ inputs.bot_name }} TRACK_PROGRESS: ${{ inputs.track_progress }} + INCLUDE_FIX_LINKS: ${{ inputs.include_fix_links }} ADDITIONAL_PERMISSIONS: ${{ inputs.additional_permissions }} CLAUDE_ARGS: ${{ inputs.claude_args }} ALL_INPUTS: ${{ toJson(inputs) }} diff --git a/docs/usage.md b/docs/usage.md index e8588f6a5..96f44ed32 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -58,6 +58,7 @@ jobs: | `claude_code_oauth_token` | Claude Code OAuth token (alternative to anthropic_api_key) | No\* | - | | `prompt` | Instructions for Claude. Can be a direct prompt or custom template for automation workflows | No | - | | `track_progress` | Force tag mode with tracking comments. Only works with specific PR/issue events. Preserves GitHub context | No | `false` | +| `include_fix_links` | Include 'Fix this' links in PR code review feedback that open Claude Code with context to fix the identified issue | No | `true` | | `claude_args` | Additional [arguments to pass directly to Claude CLI](https://docs.claude.com/en/docs/claude-code/cli-reference#cli-flags) (e.g., `--max-turns 10 --model claude-4-0-sonnet-20250805`) | No | "" | | `base_branch` | The base branch to use for creating new branches (e.g., 'main', 'develop') | No | - | | `use_sticky_comment` | Use just one comment to deliver PR comments (only applies for pull_request event workflows) | No | `false` | diff --git a/src/create-prompt/index.ts b/src/create-prompt/index.ts index 7a62e6ea5..1b2be9107 100644 --- a/src/create-prompt/index.ts +++ b/src/create-prompt/index.ts @@ -734,7 +734,13 @@ ${eventData.eventName === "issue_comment" || eventData.eventName === "pull_reque - Reference specific code sections with file paths and line numbers${eventData.isPR ? `\n - AFTER reading files and analyzing code, you MUST call mcp__github_comment__update_claude_comment to post your review` : ""} - Formulate a concise, technical, and helpful response based on the context. - Reference specific code with inline formatting or code blocks. - - Include relevant file paths and line numbers when applicable. + - Include relevant file paths and line numbers when applicable.${ + eventData.isPR && context.githubContext?.inputs.includeFixLinks + ? ` + - When identifying issues that could be fixed, include an inline link: [Fix this →](https://claude.ai/code?q=&repo=${context.repository}) + The query should be URI-encoded and include enough context for Claude Code to understand and fix the issue (file path, line numbers, branch name, what needs to change).` + : "" + } - ${eventData.isPR ? `IMPORTANT: Submit your review feedback by updating the Claude comment using mcp__github_comment__update_claude_comment. This will be displayed as your PR review.` : `Remember that this feedback must be posted to the GitHub comment using mcp__github_comment__update_claude_comment.`} B. For Straightforward Changes: diff --git a/src/github/context.ts b/src/github/context.ts index 92f272cb1..90fba9d32 100644 --- a/src/github/context.ts +++ b/src/github/context.ts @@ -95,6 +95,7 @@ type BaseContext = { allowedBots: string; allowedNonWriteUsers: string; trackProgress: boolean; + includeFixLinks: boolean; }; }; @@ -150,6 +151,7 @@ export function parseGitHubContext(): GitHubContext { allowedBots: process.env.ALLOWED_BOTS ?? "", allowedNonWriteUsers: process.env.ALLOWED_NON_WRITE_USERS ?? "", trackProgress: process.env.TRACK_PROGRESS === "true", + includeFixLinks: process.env.INCLUDE_FIX_LINKS === "true", }, }; diff --git a/test/install-mcp-server.test.ts b/test/install-mcp-server.test.ts index 9d628504d..4943be1bc 100644 --- a/test/install-mcp-server.test.ts +++ b/test/install-mcp-server.test.ts @@ -37,6 +37,7 @@ describe("prepareMcpConfig", () => { allowedBots: "", allowedNonWriteUsers: "", trackProgress: false, + includeFixLinks: true, }, }; diff --git a/test/mockContext.ts b/test/mockContext.ts index 060eb93ad..5fb6761be 100644 --- a/test/mockContext.ts +++ b/test/mockContext.ts @@ -25,6 +25,7 @@ const defaultInputs = { allowedBots: "", allowedNonWriteUsers: "", trackProgress: false, + includeFixLinks: true, }; const defaultRepository = { diff --git a/test/modes/detector.test.ts b/test/modes/detector.test.ts index ed6a3a5da..199f09497 100644 --- a/test/modes/detector.test.ts +++ b/test/modes/detector.test.ts @@ -25,6 +25,7 @@ describe("detectMode with enhanced routing", () => { allowedBots: "", allowedNonWriteUsers: "", trackProgress: false, + includeFixLinks: true, }, }; diff --git a/test/permissions.test.ts b/test/permissions.test.ts index 9aeb3011a..5048bb4eb 100644 --- a/test/permissions.test.ts +++ b/test/permissions.test.ts @@ -73,6 +73,7 @@ describe("checkWritePermissions", () => { allowedBots: "", allowedNonWriteUsers: "", trackProgress: false, + includeFixLinks: true, }, });