refactor: Use shared configureGitAuth function in agent mode

- Update configureGitAuth to accept GitHubContext instead of ParsedGitHubContext
- This allows both tag mode and agent mode to use the same function
- Removes code duplication and ensures consistent git configuration
This commit is contained in:
km-anthropic
2025-08-21 11:31:11 -07:00
parent 5d72c0694a
commit f5c5d2d677
2 changed files with 10 additions and 31 deletions

View File

@@ -6,7 +6,7 @@
*/ */
import { $ } from "bun"; import { $ } from "bun";
import type { ParsedGitHubContext } from "../context"; import type { GitHubContext } from "../context";
import { GITHUB_SERVER_URL } from "../api/config"; import { GITHUB_SERVER_URL } from "../api/config";
type GitUser = { type GitUser = {
@@ -16,7 +16,7 @@ type GitUser = {
export async function configureGitAuth( export async function configureGitAuth(
githubToken: string, githubToken: string,
context: ParsedGitHubContext, context: GitHubContext,
user: GitUser | null, user: GitUser | null,
) { ) {
console.log("Configuring git authentication for non-signing mode"); console.log("Configuring git authentication for non-signing mode");

View File

@@ -4,7 +4,7 @@ import type { Mode, ModeOptions, ModeResult } from "../types";
import type { PreparedContext } from "../../create-prompt/types"; import type { PreparedContext } from "../../create-prompt/types";
import { prepareMcpConfig } from "../../mcp/install-mcp-server"; import { prepareMcpConfig } from "../../mcp/install-mcp-server";
import { parseAllowedTools } from "./parse-tools"; import { parseAllowedTools } from "./parse-tools";
import { GITHUB_SERVER_URL } from "../../github/api/config"; import { configureGitAuth } from "../../github/operations/git-config";
/** /**
* Agent mode implementation. * Agent mode implementation.
@@ -47,40 +47,19 @@ export const agentMode: Mode = {
githubToken, githubToken,
octokit, octokit,
}: ModeOptions): Promise<ModeResult> { }: ModeOptions): Promise<ModeResult> {
// Configure git authentication for agent mode // Configure git authentication for agent mode (same as tag mode)
// Since agent mode is for automation contexts, we set up git directly
if (!context.inputs.useCommitSigning) { if (!context.inputs.useCommitSigning) {
try { try {
const { $ } = await import("bun");
// Get the authenticated user (will be claude[bot] when using Claude App token) // Get the authenticated user (will be claude[bot] when using Claude App token)
const { data: authenticatedUser } = const { data: authenticatedUser } =
await octokit.rest.users.getAuthenticated(); await octokit.rest.users.getAuthenticated();
const user = {
// Determine the noreply email domain based on GITHUB_SERVER_URL login: authenticatedUser.login,
const serverUrl = new URL(GITHUB_SERVER_URL); id: authenticatedUser.id,
const noreplyDomain = };
serverUrl.hostname === "github.com"
? "users.noreply.github.com"
: `users.noreply.${serverUrl.hostname}`;
// Configure git user // Use the shared git configuration function
console.log(`Setting git user as ${authenticatedUser.login}...`); await configureGitAuth(githubToken, context, user);
await $`git config user.name "${authenticatedUser.login}"`;
await $`git config user.email "${authenticatedUser.id}+${authenticatedUser.login}@${noreplyDomain}"`;
// Remove existing authentication headers (if any)
try {
await $`git config --unset-all http.${GITHUB_SERVER_URL}/.extraheader`;
} catch (e) {
// No existing headers to remove
}
// Update the remote URL to include the token for authentication
const remoteUrl = `https://x-access-token:${githubToken}@${serverUrl.host}/${context.repository.owner}/${context.repository.repo}.git`;
await $`git remote set-url origin ${remoteUrl}`;
console.log(`✓ Configured git as ${authenticatedUser.login}`);
} catch (error) { } catch (error) {
console.error("Failed to configure git authentication:", error); console.error("Failed to configure git authentication:", error);
// Continue anyway - git operations may still work with default config // Continue anyway - git operations may still work with default config