diff --git a/src/github/context.ts b/src/github/context.ts index 90fba9d..945e739 100644 --- a/src/github/context.ts +++ b/src/github/context.ts @@ -6,6 +6,7 @@ import type { PullRequestEvent, PullRequestReviewEvent, PullRequestReviewCommentEvent, + PushEvent, WorkflowRunEvent, } from "@octokit/webhooks-types"; import { CLAUDE_APP_BOT_ID, CLAUDE_BOT_LOGIN } from "./constants"; @@ -65,6 +66,7 @@ const AUTOMATION_EVENT_NAMES = [ "repository_dispatch", "schedule", "workflow_run", + "push", ] as const; // Derive types from constants for better maintainability @@ -112,14 +114,15 @@ export type ParsedGitHubContext = BaseContext & { isPR: boolean; }; -// Context for automation events (workflow_dispatch, repository_dispatch, schedule, workflow_run) +// Context for automation events (workflow_dispatch, repository_dispatch, schedule, workflow_run, push) export type AutomationContext = BaseContext & { eventName: AutomationEventName; payload: | WorkflowDispatchEvent | RepositoryDispatchEvent | ScheduleEvent - | WorkflowRunEvent; + | WorkflowRunEvent + | PushEvent; }; // Union type for all contexts @@ -235,6 +238,13 @@ export function parseGitHubContext(): GitHubContext { payload: context.payload as unknown as WorkflowRunEvent, }; } + case "push": { + return { + ...commonFields, + eventName: "push", + payload: context.payload as unknown as PushEvent, + }; + } default: throw new Error(`Unsupported event type: ${context.eventName}`); } @@ -276,6 +286,12 @@ export function isIssuesAssignedEvent( return isIssuesEvent(context) && context.eventAction === "assigned"; } +export function isPushEvent( + context: GitHubContext, +): context is AutomationContext & { payload: PushEvent } { + return context.eventName === "push"; +} + // Type guard to check if context is an entity context (has entityNumber and isPR) export function isEntityContext( context: GitHubContext, diff --git a/test/modes/registry.test.ts b/test/modes/registry.test.ts index 7c585b2..554dab4 100644 --- a/test/modes/registry.test.ts +++ b/test/modes/registry.test.ts @@ -60,6 +60,15 @@ describe("Mode Registry", () => { expect(mode.name).toBe("agent"); }); + test("getMode auto-detects agent for push event", () => { + const pushContext = createMockAutomationContext({ + eventName: "push", + }); + const mode = getMode(pushContext); + expect(mode).toBe(agentMode); + expect(mode.name).toBe("agent"); + }); + test("getMode auto-detects agent for repository_dispatch with client_payload", () => { const contextWithPayload = createMockAutomationContext({ eventName: "repository_dispatch",