SYMBOL INDEX (156 symbols across 14 files) FILE: 03-skills/code-review/scripts/analyze-metrics.py function analyze_code_metrics (line 6) | def analyze_code_metrics(code): FILE: 03-skills/code-review/scripts/compare-complexity.py class ComplexityAnalyzer (line 11) | class ComplexityAnalyzer: method __init__ (line 14) | def __init__(self, code: str): method calculate_cyclomatic_complexity (line 18) | def calculate_cyclomatic_complexity(self) -> int: method calculate_cognitive_complexity (line 42) | def calculate_cognitive_complexity(self) -> int: method calculate_maintainability_index (line 64) | def calculate_maintainability_index(self) -> float: method get_complexity_report (line 86) | def get_complexity_report(self) -> dict: function compare_files (line 101) | def compare_files(before_file: str, after_file: str) -> None: FILE: 03-skills/doc-generator/generate-docs.py class APIDocExtractor (line 5) | class APIDocExtractor(ast.NodeVisitor): method __init__ (line 8) | def __init__(self): method visit_FunctionDef (line 11) | def visit_FunctionDef(self, node): method _extract_return_type (line 24) | def _extract_return_type(self, node): function generate_markdown_docs (line 31) | def generate_markdown_docs(endpoints: list[dict]) -> str: FILE: 03-skills/refactor/scripts/analyze-complexity.py class FunctionMetrics (line 32) | class FunctionMetrics: class FileMetrics (line 44) | class FileMetrics: class ComplexityAnalyzer (line 60) | class ComplexityAnalyzer: method __init__ (line 97) | def __init__(self, filepath: str): method _detect_language (line 107) | def _detect_language(self) -> str: method calculate_cyclomatic_complexity (line 119) | def calculate_cyclomatic_complexity(self, code: Optional[str] = None) ... method calculate_cognitive_complexity (line 136) | def calculate_cognitive_complexity(self, code: Optional[str] = None) -... method calculate_maintainability_index (line 181) | def calculate_maintainability_index(self) -> float: method count_lines (line 211) | def count_lines(self) -> Dict[str, int]: method find_functions (line 243) | def find_functions(self) -> List[FunctionMetrics]: method _create_function_metrics (line 278) | def _create_function_metrics(self, name: str, start: int, end: int, co... method analyze (line 298) | def analyze(self) -> FileMetrics: function print_metrics (line 327) | def print_metrics(metrics: FileMetrics, verbose: bool = False) -> None: function print_comparison (line 376) | def print_comparison(before: FileMetrics, after: FileMetrics) -> None: function analyze_directory (line 442) | def analyze_directory(directory: str, verbose: bool = False) -> None: function main (line 495) | def main(): FILE: 03-skills/refactor/scripts/detect-smells.py class SmellSeverity (line 35) | class SmellSeverity(Enum): class SmellType (line 43) | class SmellType(Enum): class CodeSmell (line 62) | class CodeSmell: class SmellReport (line 75) | class SmellReport: method critical_count (line 81) | def critical_count(self) -> int: method high_count (line 85) | def high_count(self) -> int: method medium_count (line 89) | def medium_count(self) -> int: method low_count (line 93) | def low_count(self) -> int: class SmellDetector (line 97) | class SmellDetector: method __init__ (line 112) | def __init__(self, filepath: str): method _detect_language (line 122) | def _detect_language(self) -> str: method detect_all (line 134) | def detect_all(self) -> SmellReport: method _get_snippet (line 150) | def _get_snippet(self, start: int, end: int, context: int = 2) -> str: method _detect_long_methods (line 160) | def _detect_long_methods(self) -> None: method _check_method_length (line 198) | def _check_method_length(self, name: str, start: int, end: int, lines:... method _detect_long_parameter_lists (line 220) | def _detect_long_parameter_lists(self) -> None: method _detect_large_class (line 258) | def _detect_large_class(self) -> None: method _check_class_size (line 292) | def _check_class_size(self, name: str, start: int, end: int, methods: ... method _detect_complex_conditionals (line 320) | def _detect_complex_conditionals(self) -> None: method _detect_magic_numbers (line 338) | def _detect_magic_numbers(self) -> None: method _detect_excessive_comments (line 369) | def _detect_excessive_comments(self) -> None: method _detect_deeply_nested (line 391) | def _detect_deeply_nested(self) -> None: method _detect_switch_statements (line 429) | def _detect_switch_statements(self) -> None: method _add_switch_smell (line 458) | def _add_switch_smell(self, start: int, end: int, cases: int) -> None: method _detect_message_chains (line 471) | def _detect_message_chains(self) -> None: method _detect_duplicate_code (line 491) | def _detect_duplicate_code(self) -> None: method _detect_dead_code (line 515) | def _detect_dead_code(self) -> None: function print_report (line 542) | def print_report(report: SmellReport, verbose: bool = False) -> None: function analyze_directory (line 605) | def analyze_directory(directory: str, verbose: bool = False) -> None: function main (line 659) | def main(): FILE: 06-hooks/auto-adapt-mode.py function log (line 220) | def log(message: str): function is_dangerous_command (line 230) | def is_dangerous_command(command: str) -> bool: function generalize_tool_permission (line 238) | def generalize_tool_permission(tool_name: str, tool_input: dict) -> str ... function load_settings (line 291) | def load_settings() -> dict: function save_settings (line 299) | def save_settings(settings: dict): function ensure_baseline (line 307) | def ensure_baseline(settings: dict) -> bool: function add_permission (line 331) | def add_permission(settings: dict, rule: str) -> bool: function main (line 366) | def main(): FILE: 06-hooks/context-tracker-tiktoken.py function get_state_file (line 38) | def get_state_file(session_id: str) -> str: function count_tokens (line 43) | def count_tokens(text: str) -> int: function read_transcript (line 62) | def read_transcript(transcript_path: str) -> str: function handle_user_prompt_submit (line 87) | def handle_user_prompt_submit(data: dict) -> None: function handle_stop (line 101) | def handle_stop(data: dict) -> None: function main (line 136) | def main(): FILE: 06-hooks/context-tracker.py function get_state_file (line 25) | def get_state_file(session_id: str) -> str: function count_tokens_estimate (line 30) | def count_tokens_estimate(text: str) -> int: function read_transcript (line 40) | def read_transcript(transcript_path: str) -> str: function handle_user_prompt_submit (line 65) | def handle_user_prompt_submit(data: dict) -> None: function handle_stop (line 79) | def handle_stop(data: dict) -> None: function main (line 113) | def main(): FILE: 07-plugins/devops-automation/hooks/post-deploy.js function postDeploy (line 8) | async function postDeploy() { FILE: 07-plugins/devops-automation/hooks/pre-deploy.js function preDeploy (line 8) | async function preDeploy() { FILE: 07-plugins/pr-review/hooks/pre-review.js function preReview (line 8) | async function preReview() { FILE: scripts/build_epub.py class EPUBBuildError (line 75) | class EPUBBuildError(Exception): class MermaidRenderError (line 81) | class MermaidRenderError(EPUBBuildError): class ValidationError (line 87) | class ValidationError(EPUBBuildError): class CoverGenerationError (line 93) | class CoverGenerationError(EPUBBuildError): class EPUBConfig (line 105) | class EPUBConfig: class BuildState (line 152) | class BuildState: method reset (line 160) | def reset(self) -> None: class ChapterInfo (line 169) | class ChapterInfo: function setup_logging (line 185) | def setup_logging(verbose: bool = False) -> logging.Logger: function validate_inputs (line 201) | def validate_inputs(config: EPUBConfig, logger: logging.Logger) -> None: function sanitize_mermaid (line 241) | def sanitize_mermaid(mermaid_code: str) -> str: class MermaidRenderer (line 253) | class MermaidRenderer: method __init__ (line 256) | def __init__( method _fetch_single (line 264) | async def _fetch_single( method _fetch_with_retry (line 291) | async def _fetch_with_retry( method render_all (line 328) | async def render_all( function extract_all_mermaid_blocks (line 360) | def extract_all_mermaid_blocks( function get_chapter_order (line 390) | def get_chapter_order() -> list[tuple[str, str]]: function collect_folder_files (line 410) | def collect_folder_files(folder_path: Path) -> list[tuple[Path, str]]: class ChapterCollector (line 442) | class ChapterCollector: method __init__ (line 445) | def __init__(self, root_path: Path, state: BuildState) -> None: method collect_all_chapters (line 449) | def collect_all_chapters( method _collect_folder (line 483) | def _collect_folder( function load_font (line 523) | def load_font( function _add_logo_to_cover (line 539) | def _add_logo_to_cover( function _draw_text_centered (line 562) | def _draw_text_centered( function create_cover_image (line 582) | def create_cover_image( function create_chapter_html (line 643) | def create_chapter_html( function handle_svg_image (line 676) | def handle_svg_image(src: str, alt: str, logger: logging.Logger) -> str: function process_mermaid_blocks (line 702) | def process_mermaid_blocks( function convert_internal_links (line 733) | def convert_internal_links( function md_to_html (line 779) | def md_to_html( function create_stylesheet (line 831) | def create_stylesheet() -> epub.EpubItem: function build_epub_async (line 858) | async def build_epub_async( function create_epub (line 986) | def create_epub(root_path: Path, output_path: Path, verbose: bool = Fals... function main (line 998) | def main() -> int: FILE: scripts/tests/conftest.py function tmp_project (line 18) | def tmp_project(tmp_path: Path) -> Path: function config (line 41) | def config(tmp_project: Path) -> EPUBConfig: function state (line 50) | def state() -> BuildState: function logger (line 56) | def logger() -> logging.Logger: FILE: scripts/tests/test_build_epub.py class TestBuildState (line 31) | class TestBuildState: method test_initial_state (line 34) | def test_initial_state(self, state: BuildState) -> None: method test_state_modification (line 41) | def test_state_modification(self, state: BuildState) -> None: method test_reset (line 53) | def test_reset(self, state: BuildState) -> None: class TestEPUBConfig (line 73) | class TestEPUBConfig: method test_required_fields (line 76) | def test_required_fields(self, tmp_path: Path) -> None: method test_default_values (line 85) | def test_default_values(self, tmp_path: Path) -> None: method test_custom_values (line 99) | def test_custom_values(self, tmp_path: Path) -> None: class TestValidation (line 118) | class TestValidation: method test_valid_inputs (line 121) | def test_valid_inputs(self, config: EPUBConfig, logger: logging.Logger... method test_missing_root_path (line 126) | def test_missing_root_path(self, tmp_path: Path, logger: logging.Logge... method test_root_path_is_file (line 135) | def test_root_path_is_file(self, tmp_path: Path, logger: logging.Logge... method test_no_markdown_files (line 146) | def test_no_markdown_files(self, tmp_path: Path, logger: logging.Logge... method test_missing_output_directory (line 157) | def test_missing_output_directory( class TestMermaidProcessing (line 174) | class TestMermaidProcessing: method test_sanitize_mermaid_numbered_list (line 177) | def test_sanitize_mermaid_numbered_list(self) -> None: method test_sanitize_mermaid_no_change (line 183) | def test_sanitize_mermaid_no_change(self) -> None: method test_extract_mermaid_blocks (line 188) | def test_extract_mermaid_blocks( method test_extract_mermaid_blocks_deduplication (line 219) | def test_extract_mermaid_blocks_deduplication( class TestChapterCollector (line 247) | class TestChapterCollector: method test_collect_single_file (line 250) | def test_collect_single_file(self, tmp_path: Path, state: BuildState) ... method test_collect_folder (line 264) | def test_collect_folder(self, tmp_project: Path, state: BuildState) ->... method test_path_mapping (line 274) | def test_path_mapping(self, tmp_project: Path, state: BuildState) -> N... class TestHTMLGeneration (line 294) | class TestHTMLGeneration: method test_create_chapter_html_overview (line 297) | def test_create_chapter_html_overview(self) -> None: method test_create_chapter_html_section (line 311) | def test_create_chapter_html_section(self) -> None: method test_html_escaping (line 323) | def test_html_escaping(self) -> None: class TestChapterOrder (line 342) | class TestChapterOrder: method test_get_chapter_order (line 345) | def test_get_chapter_order(self) -> None: class TestLogging (line 364) | class TestLogging: method test_setup_logging_default (line 367) | def test_setup_logging_default(self) -> None: method test_setup_logging_verbose (line 372) | def test_setup_logging_verbose(self) -> None: class TestIntegration (line 383) | class TestIntegration: method test_build_without_mermaid (line 387) | async def test_build_without_mermaid(