mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-08-22 03:18:54 +08:00
- Add 'review' as a new execution mode in action.yml - Use default GitHub Action token (ACTIONS_TOKEN) for review mode - Create review mode implementation with GitHub MCP tools included by default - Move review-specific prompt to review mode's generatePrompt method - Add comprehensive review workflow instructions for inline comments - Fix type safety with proper mode validation - Keep agent mode's simple inline prompt handling
67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
/**
|
|
* Mode Registry for claude-code-action
|
|
*
|
|
* This module provides access to all available execution modes.
|
|
*
|
|
* To add a new mode:
|
|
* 1. Add the mode name to VALID_MODES below
|
|
* 2. Create the mode implementation in a new directory (e.g., src/modes/new-mode/)
|
|
* 3. Import and add it to the modes object below
|
|
* 4. Update action.yml description to mention the new mode
|
|
*/
|
|
|
|
import type { Mode, ModeName } from "./types";
|
|
import { tagMode } from "./tag";
|
|
import { agentMode } from "./agent";
|
|
import { reviewMode } from "./review";
|
|
import type { GitHubContext } from "../github/context";
|
|
import { isAutomationContext } from "../github/context";
|
|
|
|
export const DEFAULT_MODE = "tag" as const;
|
|
export const VALID_MODES = ["tag", "agent", "review"] as const;
|
|
|
|
/**
|
|
* All available modes.
|
|
* Add new modes here as they are created.
|
|
*/
|
|
const modes = {
|
|
tag: tagMode,
|
|
agent: agentMode,
|
|
review: reviewMode,
|
|
} as const satisfies Record<ModeName, Mode>;
|
|
|
|
/**
|
|
* Retrieves a mode by name and validates it can handle the event type.
|
|
* @param name The mode name to retrieve
|
|
* @param context The GitHub context to validate against
|
|
* @returns The requested mode
|
|
* @throws Error if the mode is not found or cannot handle the event
|
|
*/
|
|
export function getMode(name: ModeName, context: GitHubContext): Mode {
|
|
const mode = modes[name];
|
|
if (!mode) {
|
|
const validModes = VALID_MODES.join("', '");
|
|
throw new Error(
|
|
`Invalid mode '${name}'. Valid modes are: '${validModes}'. Please check your workflow configuration.`,
|
|
);
|
|
}
|
|
|
|
// Validate mode can handle the event type
|
|
if (name === "tag" && isAutomationContext(context)) {
|
|
throw new Error(
|
|
`Tag mode cannot handle ${context.eventName} events. Use 'agent' mode for automation events.`,
|
|
);
|
|
}
|
|
|
|
return mode;
|
|
}
|
|
|
|
/**
|
|
* Type guard to check if a string is a valid mode name.
|
|
* @param name The string to check
|
|
* @returns True if the name is a valid mode name
|
|
*/
|
|
export function isValidMode(name: string): name is ModeName {
|
|
return VALID_MODES.includes(name as ModeName);
|
|
}
|