diff --git a/src/skill_seekers/cli/codebase_scraper.py b/src/skill_seekers/cli/codebase_scraper.py index 9bcc0bc..0dd0564 100644 --- a/src/skill_seekers/cli/codebase_scraper.py +++ b/src/skill_seekers/cli/codebase_scraper.py @@ -491,7 +491,7 @@ def analyze_codebase( ai_mode=ai_mode ) - if guide_collection.total_guides > 0: + if guide_collection and guide_collection.total_guides > 0: # Save collection summary collection_json = tutorials_dir / 'guide_collection.json' with open(collection_json, 'w', encoding='utf-8') as f: @@ -511,10 +511,7 @@ def analyze_codebase( if extract_config_patterns: logger.info("Extracting configuration patterns...") try: - config_extractor = ConfigExtractor( - max_files=100, - include_optional_deps=True - ) + config_extractor = ConfigExtractor() # Extract config patterns from directory extraction_result = config_extractor.extract_from_directory(directory) diff --git a/src/skill_seekers/cli/unified_skill_builder.py b/src/skill_seekers/cli/unified_skill_builder.py index 5adb80c..db477a5 100644 --- a/src/skill_seekers/cli/unified_skill_builder.py +++ b/src/skill_seekers/cli/unified_skill_builder.py @@ -466,8 +466,31 @@ This skill combines knowledge from multiple sources: f.write("\n") # Section 3: Technology Stack + f.write("## 3. Technology Stack\n\n") + + # Try to get languages from C3.7 architecture analysis first + languages = {} + if c3_data.get('architecture'): + languages = c3_data['architecture'].get('languages', {}) + + # If no languages from C3.7, try to get from GitHub data + if not languages: + github_data = self.scraped_data.get('github', {}).get('data', {}) + if github_data.get('languages'): + # GitHub data has languages as list, convert to dict with count 1 + languages = {lang: 1 for lang in github_data['languages']} + + if languages: + f.write("**Languages Detected**:\n") + for lang, count in sorted(languages.items(), key=lambda x: x[1], reverse=True)[:5]: + if isinstance(count, int): + f.write(f"- {lang}: {count} files\n") + else: + f.write(f"- {lang}\n") + f.write("\n") + + # Add frameworks if available if c3_data.get('architecture'): - f.write("## 3. Technology Stack\n\n") frameworks = c3_data['architecture'].get('frameworks_detected', []) if frameworks: f.write("**Frameworks & Libraries**:\n") @@ -475,13 +498,8 @@ This skill combines knowledge from multiple sources: f.write(f"- {fw}\n") f.write("\n") - # Add language info if available - languages = c3_data['architecture'].get('languages', {}) - if languages: - f.write("**Languages Detected**:\n") - for lang, count in sorted(languages.items(), key=lambda x: x[1], reverse=True)[:5]: - f.write(f"- {lang}: {count} files\n") - f.write("\n") + if not languages and not (c3_data.get('architecture') and c3_data['architecture'].get('frameworks_detected')): + f.write("*Technology stack analysis not available*\n\n") # Section 4: Design Patterns (C3.1) if c3_data.get('patterns'):