mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-24 07:24:12 +08:00
feat: implement Claude Code GitHub Action v1.0 with auto-detection and slash commands
Major features: - Mode auto-detection based on GitHub event type - Unified prompt field replacing override_prompt and direct_prompt - Slash command system with pre-built commands - Full backward compatibility with v0.x Key changes: - Add mode detector for automatic mode selection - Implement slash command loader with YAML frontmatter support - Update action.yml with new prompt input - Create pre-built slash commands for common tasks - Update all tests for v1.0 compatibility Breaking changes (with compatibility): - Mode input now optional (auto-detected) - override_prompt deprecated (use prompt) - direct_prompt deprecated (use prompt)
This commit is contained in:
@@ -35,7 +35,6 @@ export type ScheduleEvent = {
|
||||
};
|
||||
};
|
||||
import type { ModeName } from "../modes/types";
|
||||
import { DEFAULT_MODE, isValidMode } from "../modes/registry";
|
||||
|
||||
// Event name constants for better maintainability
|
||||
const ENTITY_EVENT_NAMES = [
|
||||
@@ -63,15 +62,16 @@ type BaseContext = {
|
||||
};
|
||||
actor: string;
|
||||
inputs: {
|
||||
mode: ModeName;
|
||||
mode?: ModeName; // Optional for v1.0 backward compatibility
|
||||
prompt: string; // New unified prompt field
|
||||
triggerPhrase: string;
|
||||
assigneeTrigger: string;
|
||||
labelTrigger: string;
|
||||
allowedTools: string[];
|
||||
disallowedTools: string[];
|
||||
customInstructions: string;
|
||||
directPrompt: string;
|
||||
overridePrompt: string;
|
||||
directPrompt: string; // Deprecated, kept for compatibility
|
||||
overridePrompt: string; // Deprecated, kept for compatibility
|
||||
baseBranch?: string;
|
||||
branchPrefix: string;
|
||||
useStickyComment: boolean;
|
||||
@@ -105,10 +105,8 @@ export type GitHubContext = ParsedGitHubContext | AutomationContext;
|
||||
export function parseGitHubContext(): GitHubContext {
|
||||
const context = github.context;
|
||||
|
||||
const modeInput = process.env.MODE ?? DEFAULT_MODE;
|
||||
if (!isValidMode(modeInput)) {
|
||||
throw new Error(`Invalid mode: ${modeInput}.`);
|
||||
}
|
||||
// Mode is optional in v1.0 (auto-detected)
|
||||
const modeInput = process.env.MODE ? process.env.MODE as ModeName : undefined;
|
||||
|
||||
const commonFields = {
|
||||
runId: process.env.GITHUB_RUN_ID!,
|
||||
@@ -120,15 +118,19 @@ export function parseGitHubContext(): GitHubContext {
|
||||
},
|
||||
actor: context.actor,
|
||||
inputs: {
|
||||
mode: modeInput as ModeName,
|
||||
mode: modeInput,
|
||||
// v1.0: Unified prompt field with fallback to legacy fields
|
||||
prompt: process.env.PROMPT ||
|
||||
process.env.OVERRIDE_PROMPT ||
|
||||
process.env.DIRECT_PROMPT || "",
|
||||
triggerPhrase: process.env.TRIGGER_PHRASE ?? "@claude",
|
||||
assigneeTrigger: process.env.ASSIGNEE_TRIGGER ?? "",
|
||||
labelTrigger: process.env.LABEL_TRIGGER ?? "",
|
||||
allowedTools: parseMultilineInput(process.env.ALLOWED_TOOLS ?? ""),
|
||||
disallowedTools: parseMultilineInput(process.env.DISALLOWED_TOOLS ?? ""),
|
||||
customInstructions: process.env.CUSTOM_INSTRUCTIONS ?? "",
|
||||
directPrompt: process.env.DIRECT_PROMPT ?? "",
|
||||
overridePrompt: process.env.OVERRIDE_PROMPT ?? "",
|
||||
directPrompt: process.env.DIRECT_PROMPT ?? "", // Deprecated
|
||||
overridePrompt: process.env.OVERRIDE_PROMPT ?? "", // Deprecated
|
||||
baseBranch: process.env.BASE_BRANCH,
|
||||
branchPrefix: process.env.BRANCH_PREFIX ?? "claude/",
|
||||
useStickyComment: process.env.USE_STICKY_COMMENT === "true",
|
||||
|
||||
Reference in New Issue
Block a user