mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-23 06:54:13 +08:00
* feat: send user request as separate content block for slash command support When in tag mode with the SDK path, extracts the user's request from the trigger comment (text after @claude) and sends it as a separate content block. This enables the CLI to process slash commands like "/review-pr". - Add extract-user-request utility to parse trigger comments - Write user request to separate file during prompt generation - Send multi-block SDKUserMessage when user request file exists - Add tests for the extraction utility 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: address PR feedback - Fix potential ReDoS vulnerability by using string operations instead of regex - Remove unused extractUserRequestFromEvent function and tests - Extract USER_REQUEST_FILENAME to shared constants - Conditionally log user request based on showFullOutput setting - Add JSDoc documentation to extractUserRequestFromContext --------- Co-authored-by: Claude <noreply@anthropic.com>
33 lines
1004 B
TypeScript
33 lines
1004 B
TypeScript
/**
|
|
* Extracts the user's request from a trigger comment.
|
|
*
|
|
* Given a comment like "@claude /review-pr please check the auth module",
|
|
* this extracts "/review-pr please check the auth module".
|
|
*
|
|
* @param commentBody - The full comment body containing the trigger phrase
|
|
* @param triggerPhrase - The trigger phrase (e.g., "@claude")
|
|
* @returns The user's request (text after the trigger phrase), or null if not found
|
|
*/
|
|
export function extractUserRequest(
|
|
commentBody: string | undefined,
|
|
triggerPhrase: string,
|
|
): string | null {
|
|
if (!commentBody) {
|
|
return null;
|
|
}
|
|
|
|
// Use string operations instead of regex for better performance and security
|
|
// (avoids potential ReDoS with large comment bodies)
|
|
const triggerIndex = commentBody
|
|
.toLowerCase()
|
|
.indexOf(triggerPhrase.toLowerCase());
|
|
if (triggerIndex === -1) {
|
|
return null;
|
|
}
|
|
|
|
const afterTrigger = commentBody
|
|
.substring(triggerIndex + triggerPhrase.length)
|
|
.trim();
|
|
return afterTrigger || null;
|
|
}
|