mirror of
https://github.com/markwylde/claude-code-gitea-action.git
synced 2026-02-19 18:12:50 +08:00
* feat: add agent mode for automation scenarios - Add agent mode that always triggers without checking for mentions - Implement Mode interface with support for mode-specific tool configuration - Add getAllowedTools() and getDisallowedTools() methods to Mode interface - Simplify tests by combining related test cases - Update documentation and examples to include agent mode - Fix TypeScript imports to prevent circular dependencies Agent mode is designed for automation and workflow_dispatch scenarios where Claude should always run without requiring trigger phrases. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Minor update to readme (from @main to @beta) * Since workflow_dispatch isn't in the base action, update the examples accordingly * minor formatting issue * Update to say beta instead of main * Fix missed tracking comment to be false * add schedule & workflow dispatch paths. Also make prepare logic conditional * tests * Add test workflow for workflow_dispatch functionality * Update workflow to use correct branch reference * remove test workflow dispatch file * minor lint update * update workflow dispatch agent example * minor lint update * refactor: simplify prepare logic with mode-specific implementations * ensure tag mode can't work with workflow dispatch and schedule tasks * simplify: remove workflow_dispatch/schedule from create-prompt - Remove workflow_dispatch and schedule event handling from create-prompt since agent mode doesn't use the standard prompt generation flow - Enforce mode compatibility at selection time in the registry instead of runtime validation in tag mode - Add explanatory comment in agent mode about why prompt file is needed - Update tests to reflect simplified event handling This reduces code duplication and makes the separation between tag mode (entity-based events) and agent mode (automation events) clearer. * simplify PR by making agent mode only work with workflow dispatch and schedule events * remove unnecessary changes * remove unnecessary changes from PR - Revert update-comment-link.ts changes (agent mode doesn't use this) - Revert create-initial.ts changes (agent mode doesn't create comments) - Remove unused default-branch.ts file - Revert install-mcp-server.ts changes (agent mode uses minimal MCP) These files are only used by tag mode for entity-based events, not needed for workflow_dispatch/schedule support via agent mode. * fix: handle optional entityNumber for TypeScript - Add runtime checks in files that require entityNumber - These files are only used by tag mode which always has entityNumber - Agent mode (workflow_dispatch/schedule) doesn't use these files * linting update --------- Co-authored-by: km-anthropic <km-anthropic@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
68 lines
2.0 KiB
TypeScript
68 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 type { ParsedGitHubContext } from "../github/context";
|
|
|
|
export const DEFAULT_MODE = "tag" as const;
|
|
export const VALID_MODES = ["tag", "agent"] as const;
|
|
|
|
/**
|
|
* All available modes.
|
|
* Add new modes here as they are created.
|
|
*/
|
|
const modes = {
|
|
tag: tagMode,
|
|
agent: agentMode,
|
|
} 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: ParsedGitHubContext): 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" &&
|
|
(context.eventName === "workflow_dispatch" ||
|
|
context.eventName === "schedule")
|
|
) {
|
|
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);
|
|
}
|