SYMBOL INDEX (50 symbols across 13 files) FILE: examples/hooks/bash_command_validator_example.py function _validate_command (line 48) | def _validate_command(command: str) -> list[str]: function main (line 56) | def main(): FILE: plugins/hookify/core/config_loader.py class Condition (line 16) | class Condition: method from_dict (line 23) | def from_dict(cls, data: Dict[str, Any]) -> 'Condition': class Rule (line 33) | class Rule: method from_dict (line 45) | def from_dict(cls, frontmatter: Dict[str, Any], message: str) -> 'Rule': function extract_frontmatter (line 87) | def extract_frontmatter(content: str) -> tuple[Dict[str, Any], str]: function load_rules (line 198) | def load_rules(event: Optional[str] = None) -> List[Rule]: function load_rule_file (line 244) | def load_rule_file(file_path: str) -> Optional[Rule]: FILE: plugins/hookify/core/rule_engine.py function compile_regex (line 15) | def compile_regex(pattern: str) -> re.Pattern: class RuleEngine (line 27) | class RuleEngine: method __init__ (line 30) | def __init__(self): method evaluate_rules (line 35) | def evaluate_rules(self, rules: List[Rule], input_data: Dict[str, Any]... method _rule_matches (line 96) | def _rule_matches(self, rule: Rule, input_data: Dict[str, Any]) -> bool: method _matches_tool (line 127) | def _matches_tool(self, matcher: str, tool_name: str) -> bool: method _check_condition (line 144) | def _check_condition(self, condition: Condition, tool_name: str, method _extract_field (line 182) | def _extract_field(self, field: str, tool_name: str, method _regex_match (line 256) | def _regex_match(self, pattern: str, text: str) -> bool: FILE: plugins/hookify/hooks/posttooluse.py function main (line 30) | def main(): FILE: plugins/hookify/hooks/pretooluse.py function main (line 35) | def main(): FILE: plugins/hookify/hooks/stop.py function main (line 30) | def main(): FILE: plugins/hookify/hooks/userpromptsubmit.py function main (line 30) | def main(): FILE: plugins/security-guidance/hooks/security_reminder_hook.py function debug_log (line 17) | def debug_log(message): function get_state_file (line 129) | def get_state_file(session_id): function cleanup_old_state_files (line 134) | def cleanup_old_state_files(): function load_state (line 159) | def load_state(session_id): function save_state (line 171) | def save_state(session_id, shown_warnings): function check_patterns (line 183) | def check_patterns(file_path, content): function extract_content_from_input (line 202) | def extract_content_from_input(tool_name, tool_input): function main (line 217) | def main(): FILE: scripts/auto-close-duplicates.ts type GitHubIssue (line 9) | interface GitHubIssue { type GitHubComment (line 16) | interface GitHubComment { type GitHubReaction (line 23) | interface GitHubReaction { function githubRequest (line 28) | async function githubRequest(endpoint: string, token: string, method:... function extractDuplicateIssueNumber (line 49) | function extractDuplicateIssueNumber(commentBody: string): number | null { function closeIssueAsDuplicate (line 66) | async function closeIssueAsDuplicate( function autoCloseDuplicates (line 99) | async function autoCloseDuplicates(): Promise { FILE: scripts/backfill-duplicate-comments.ts type GitHubIssue (line 9) | interface GitHubIssue { type GitHubComment (line 19) | interface GitHubComment { function githubRequest (line 26) | async function githubRequest(endpoint: string, token: string, method:... function triggerDedupeWorkflow (line 47) | async function triggerDedupeWorkflow( function backfillDuplicateComments (line 72) | async function backfillDuplicateComments(): Promise { FILE: scripts/issue-lifecycle.ts type LifecycleLabel (line 36) | type LifecycleLabel = (typeof lifecycle)[number]["label"]; constant STALE_UPVOTE_THRESHOLD (line 38) | const STALE_UPVOTE_THRESHOLD = 10; FILE: scripts/lifecycle-comment.ts constant DRY_RUN (line 8) | const DRY_RUN = process.argv.includes("--dry-run"); FILE: scripts/sweep.ts constant NEW_ISSUE (line 7) | const NEW_ISSUE = "https://github.com/anthropics/claude-code/issues/new/... constant DRY_RUN (line 8) | const DRY_RUN = process.argv.includes("--dry-run"); function githubRequest (line 15) | async function githubRequest( function markStale (line 45) | async function markStale(owner: string, repo: string) { function closeExpired (line 92) | async function closeExpired(owner: string, repo: string) {