SYMBOL INDEX (151 symbols across 22 files) FILE: .github/scripts/check-marketplace-sorted.ts constant MARKETPLACE (line 13) | const MARKETPLACE = join(import.meta.dir, "../../.claude-plugin/marketpl... type Plugin (line 15) | type Plugin = { name: string; [k: string]: unknown }; type Marketplace (line 16) | type Marketplace = { plugins: Plugin[]; [k: string]: unknown }; FILE: .github/scripts/validate-frontmatter.ts constant YAML_SPECIAL_CHARS (line 18) | const YAML_SPECIAL_CHARS = /[{}[\]*&#!|>%@`]/; constant FRONTMATTER_REGEX (line 19) | const FRONTMATTER_REGEX = /^---\s*\n([\s\S]*?)---\s*\n?/; function quoteSpecialValues (line 25) | function quoteSpecialValues(text: string): string { type ParseResult (line 57) | interface ParseResult { function parseFrontmatter (line 63) | function parseFrontmatter(markdown: string): ParseResult { type FileType (line 98) | type FileType = "agent" | "skill" | "command"; type ValidationIssue (line 100) | interface ValidationIssue { function validateAgent (line 105) | function validateAgent( function validateSkill (line 126) | function validateSkill( function validateCommand (line 141) | function validateCommand( function detectFileType (line 161) | function detectFileType(filePath: string): FileType | null { function findMdFiles (line 175) | async function findMdFiles( function main (line 201) | async function main() { FILE: .github/scripts/validate-marketplace.ts function main (line 12) | async function main() { FILE: external_plugins/discord/server.ts constant STATE_DIR (line 32) | const STATE_DIR = join(homedir(), '.claude', 'channels', 'discord') constant ACCESS_FILE (line 33) | const ACCESS_FILE = join(STATE_DIR, 'access.json') constant APPROVED_DIR (line 34) | const APPROVED_DIR = join(STATE_DIR, 'approved') constant ENV_FILE (line 35) | const ENV_FILE = join(STATE_DIR, '.env') constant TOKEN (line 46) | const TOKEN = process.env.DISCORD_BOT_TOKEN constant STATIC (line 47) | const STATIC = process.env.DISCORD_ACCESS_MODE === 'static' constant INBOX_DIR (line 57) | const INBOX_DIR = join(STATE_DIR, 'inbox') type PendingEntry (line 70) | type PendingEntry = { type GroupPolicy (line 78) | type GroupPolicy = { type Access (line 83) | type Access = { function defaultAccess (line 101) | function defaultAccess(): Access { constant MAX_CHUNK_LIMIT (line 110) | const MAX_CHUNK_LIMIT = 2000 constant MAX_ATTACHMENT_BYTES (line 111) | const MAX_ATTACHMENT_BYTES = 25 * 1024 * 1024 function assertSendable (line 117) | function assertSendable(f: string): void { function readAccessFile (line 129) | function readAccessFile(): Access { constant BOOT_ACCESS (line 155) | const BOOT_ACCESS: Access | null = STATIC function loadAccess (line 169) | function loadAccess(): Access { function saveAccess (line 173) | function saveAccess(a: Access): void { function pruneExpired (line 181) | function pruneExpired(a: Access): boolean { type GateResult (line 193) | type GateResult = constant RECENT_SENT_CAP (line 201) | const RECENT_SENT_CAP = 200 function noteSent (line 203) | function noteSent(id: string): void { function gate (line 212) | async function gate(msg: Message): Promise { function isMentioned (line 272) | async function isMentioned(msg: Message, extraPatterns?: string[]): Prom... function checkApprovals (line 303) | function checkApprovals(): void { function chunk (line 349) | function chunk(text: string, limit: number, mode: 'length' | 'newline'):... function fetchTextChannel (line 370) | async function fetchTextChannel(id: string) { function fetchAllowedChannel (line 381) | async function fetchAllowedChannel(id: string) { function downloadAttachment (line 393) | async function downloadAttachment(att: Attachment): Promise { function safeAttName (line 411) | function safeAttName(att: Attachment): string { function handleInbound (line 643) | async function handleInbound(msg: Message): Promise { FILE: external_plugins/fakechat/server.ts constant PORT (line 20) | const PORT = Number(process.env.FAKECHAT_PORT ?? 8787) constant STATE_DIR (line 21) | const STATE_DIR = join(homedir(), '.claude', 'channels', 'fakechat') constant INBOX_DIR (line 22) | const INBOX_DIR = join(STATE_DIR, 'inbox') constant OUTBOX_DIR (line 23) | const OUTBOX_DIR = join(STATE_DIR, 'outbox') type Msg (line 25) | type Msg = { type Wire (line 34) | type Wire = function nextId (line 41) | function nextId() { function broadcast (line 45) | function broadcast(m: Wire) { function mime (line 50) | function mime(ext: string) { function deliver (line 135) | function deliver(id: string, text: string, file?: { path: string; name: ... method fetch (line 153) | fetch(req, server) { constant HTML (line 212) | const HTML = ` FILE: external_plugins/telegram/server.ts constant STATE_DIR (line 25) | const STATE_DIR = join(homedir(), '.claude', 'channels', 'telegram') constant ACCESS_FILE (line 26) | const ACCESS_FILE = join(STATE_DIR, 'access.json') constant APPROVED_DIR (line 27) | const APPROVED_DIR = join(STATE_DIR, 'approved') constant ENV_FILE (line 28) | const ENV_FILE = join(STATE_DIR, '.env') constant TOKEN (line 39) | const TOKEN = process.env.TELEGRAM_BOT_TOKEN constant STATIC (line 40) | const STATIC = process.env.TELEGRAM_ACCESS_MODE === 'static' constant INBOX_DIR (line 50) | const INBOX_DIR = join(STATE_DIR, 'inbox') type PendingEntry (line 55) | type PendingEntry = { type GroupPolicy (line 63) | type GroupPolicy = { type Access (line 68) | type Access = { function defaultAccess (line 85) | function defaultAccess(): Access { constant MAX_CHUNK_LIMIT (line 94) | const MAX_CHUNK_LIMIT = 4096 constant MAX_ATTACHMENT_BYTES (line 95) | const MAX_ATTACHMENT_BYTES = 50 * 1024 * 1024 function assertSendable (line 101) | function assertSendable(f: string): void { function readAccessFile (line 113) | function readAccessFile(): Access { constant BOOT_ACCESS (line 141) | const BOOT_ACCESS: Access | null = STATIC function loadAccess (line 155) | function loadAccess(): Access { function assertAllowedChat (line 161) | function assertAllowedChat(chat_id: string): void { function saveAccess (line 168) | function saveAccess(a: Access): void { function pruneExpired (line 176) | function pruneExpired(a: Access): boolean { type GateResult (line 188) | type GateResult = function gate (line 193) | function gate(ctx: Context): GateResult { function isMentioned (line 253) | function isMentioned(ctx: Context, extraPatterns?: string[]): boolean { function checkApprovals (line 283) | function checkApprovals(): void { function chunk (line 310) | function chunk(text: string, limit: number, mode: 'length' | 'newline'):... constant PHOTO_EXTS (line 333) | const PHOTO_EXTS = new Set(['.jpg', '.jpeg', '.png', '.gif', '.webp']) function handleInbound (line 538) | async function handleInbound( 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 26) | def main(): FILE: plugins/hookify/hooks/pretooluse.py function main (line 27) | def main(): FILE: plugins/hookify/hooks/stop.py function main (line 26) | def main(): FILE: plugins/hookify/hooks/userpromptsubmit.py function main (line 26) | 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: plugins/skill-creator/skills/skill-creator/eval-viewer/generate_review.py function get_mime_type (line 52) | def get_mime_type(path: Path) -> str: function find_runs (line 60) | def find_runs(workspace: Path) -> list[dict]: function _find_runs_recursive (line 68) | def _find_runs_recursive(root: Path, current: Path, runs: list[dict]) ->... function build_run (line 85) | def build_run(root: Path, run_dir: Path) -> dict | None: function embed_file (line 149) | def embed_file(path: Path) -> dict: function load_previous_iteration (line 213) | def load_previous_iteration(workspace: Path) -> dict[str, dict]: function generate_html (line 250) | def generate_html( function _kill_port (line 288) | def _kill_port(port: int) -> None: class ReviewHandler (line 308) | class ReviewHandler(BaseHTTPRequestHandler): method __init__ (line 315) | def __init__( method do_GET (line 332) | def do_GET(self) -> None: method do_POST (line 361) | def do_POST(self) -> None: method log_message (line 382) | def log_message(self, format: str, *args: object) -> None: function main (line 387) | def main() -> None: FILE: plugins/skill-creator/skills/skill-creator/scripts/aggregate_benchmark.py function calculate_stats (line 45) | def calculate_stats(values: list[float]) -> dict: function load_run_results (line 67) | def load_run_results(benchmark_dir: Path) -> dict: function aggregate_results (line 176) | def aggregate_results(results: dict) -> dict: function generate_benchmark (line 227) | def generate_benchmark(benchmark_dir: Path, skill_name: str = "", skill_... function generate_markdown (line 281) | def generate_markdown(benchmark: dict) -> str: function main (line 338) | def main(): FILE: plugins/skill-creator/skills/skill-creator/scripts/generate_report.py function generate_html (line 16) | def generate_html(data: dict, auto_refresh: bool = False, skill_name: st... function main (line 304) | def main(): FILE: plugins/skill-creator/skills/skill-creator/scripts/improve_description.py function improve_description (line 19) | def improve_description( function main (line 193) | def main(): FILE: plugins/skill-creator/skills/skill-creator/scripts/package_skill.py function should_exclude (line 27) | def should_exclude(rel_path: Path) -> bool: function package_skill (line 42) | def package_skill(skill_path, output_dir=None): function main (line 111) | def main(): FILE: plugins/skill-creator/skills/skill-creator/scripts/quick_validate.py function validate_skill (line 12) | def validate_skill(skill_path): FILE: plugins/skill-creator/skills/skill-creator/scripts/run_eval.py function find_project_root (line 22) | def find_project_root() -> Path: function run_single_query (line 35) | def run_single_query( function run_eval (line 184) | def run_eval( function main (line 259) | def main(): FILE: plugins/skill-creator/skills/skill-creator/scripts/run_loop.py function split_eval_set (line 26) | def split_eval_set(eval_set: list[dict], holdout: float, seed: int = 42)... function run_loop (line 49) | def run_loop( function main (line 248) | def main(): FILE: plugins/skill-creator/skills/skill-creator/scripts/utils.py function parse_skill_md (line 7) | def parse_skill_md(skill_path: Path) -> tuple[str, str, str]: