mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-23 15:04:13 +08:00
BREAKING CHANGES: - Remove review mode entirely - now handled via slash commands in agent mode - Remove all deprecated backward compatibility fields (mode, anthropic_model, override_prompt, direct_prompt) - Simplify mode detection: prompt overrides everything, then @claude mentions trigger tag mode, default is agent mode - Remove slash command resolution from GitHub Action - Claude Code handles natively - Remove variable substitution - prompts passed through as-is Architecture changes: - Only two modes now: tag (for @claude mentions) and agent (everything else) - Agent mode is the default for all events including PRs - Users configure behavior via prompts/slash commands (e.g. /review) - GitHub Action is now a thin wrapper that passes prompts to Claude Code - Mode names changed: 'experimental-review' → removed entirely This aligns with the philosophy that the GitHub Action should do minimal work and delegate to Claude Code for all intelligent behavior.
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
/**
|
|
* Mode Registry for claude-code-action v1.0
|
|
*
|
|
* This module provides access to all available execution modes and handles
|
|
* automatic mode detection based on GitHub event types.
|
|
*/
|
|
|
|
import type { Mode, ModeName } from "./types";
|
|
import { tagMode } from "./tag";
|
|
import { agentMode } from "./agent";
|
|
import type { GitHubContext } from "../github/context";
|
|
import { detectMode, type AutoDetectedMode } from "./detector";
|
|
|
|
export const VALID_MODES = ["tag", "agent"] as const;
|
|
|
|
/**
|
|
* All available modes in v1.0
|
|
*/
|
|
const modes = {
|
|
tag: tagMode,
|
|
agent: agentMode,
|
|
} as const satisfies Record<AutoDetectedMode, Mode>;
|
|
|
|
/**
|
|
* Automatically detects and retrieves the appropriate mode based on the GitHub context.
|
|
* In v1.0, modes are auto-selected based on event type.
|
|
* @param context The GitHub context
|
|
* @returns The appropriate mode for the context
|
|
*/
|
|
export function getMode(context: GitHubContext): Mode {
|
|
const modeName = detectMode(context);
|
|
console.log(
|
|
`Auto-detected mode: ${modeName} for event: ${context.eventName}`,
|
|
);
|
|
|
|
const mode = modes[modeName];
|
|
if (!mode) {
|
|
throw new Error(
|
|
`Mode '${modeName}' not found. This should not happen. Please report this issue.`,
|
|
);
|
|
}
|
|
|
|
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 {
|
|
const validModes = ["tag", "agent"];
|
|
return validModes.includes(name);
|
|
}
|