05f5d3038b
* fix: analyzer Python compatibility and settings integration Fixes project index analyzer failing with TypeError on Python type hints. Changes: - Added 'from __future__ import annotations' to all analysis modules - Fixed project discovery to support new analyzer JSON format - Read Python path directly from settings.json instead of pythonEnvManager - Added stderr/stdout logging for analyzer debugging Resolves 'Discovered 0 files' and 'TypeError: unsupported operand type' issues. * auto-claude: subtask-1-1 - Hide status badge when execution phase badge is showing When a task has an active execution (planning, coding, etc.), the execution phase badge already displays the correct state with a spinner. The status badge was also rendering, causing duplicate/confusing badges (e.g., both "Planning" and "Pending" showing at the same time). This fix wraps the status badge in a conditional that only renders when there's no active execution, eliminating the redundant badge display. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(ipc): remove unused pythonEnvManager parameter and fix ES6 import Address CodeRabbit review feedback: - Remove unused pythonEnvManager parameter from registerProjectContextHandlers and registerContextHandlers (the code reads Python path directly from settings.json instead) - Replace require('electron').app with proper ES6 import for consistency 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore(lint): fix import sorting in analysis module Run ruff --fix to resolve I001 lint errors after merging develop. All 23 files in apps/backend/analysis/ now have properly sorted imports. --------- Co-authored-by: Joris Slagter <mail@jorisslagter.nl> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
103 lines
2.5 KiB
Python
103 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Codebase Analyzer
|
|
=================
|
|
|
|
Automatically detects project structure, frameworks, and services.
|
|
Supports monorepos with multiple services.
|
|
|
|
Usage:
|
|
# Index entire project (creates project_index.json)
|
|
python auto-claude/analyzer.py --index
|
|
|
|
# Analyze specific service
|
|
python auto-claude/analyzer.py --service backend
|
|
|
|
# Output to specific file
|
|
python auto-claude/analyzer.py --index --output path/to/output.json
|
|
|
|
The analyzer will:
|
|
1. Detect if this is a monorepo or single project
|
|
2. Find all services/packages and analyze each separately
|
|
3. Map interdependencies between services
|
|
4. Identify infrastructure (Docker, CI/CD)
|
|
5. Document conventions (linting, testing)
|
|
|
|
This module now serves as a facade to the modular analyzer system in the analyzers/ package.
|
|
All actual implementation is in focused submodules for better maintainability.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
# Import from the new modular structure
|
|
from .analyzers import (
|
|
ProjectAnalyzer,
|
|
ServiceAnalyzer,
|
|
analyze_project,
|
|
analyze_service,
|
|
)
|
|
|
|
# Re-export for backward compatibility
|
|
__all__ = [
|
|
"ServiceAnalyzer",
|
|
"ProjectAnalyzer",
|
|
"analyze_project",
|
|
"analyze_service",
|
|
]
|
|
|
|
|
|
def main():
|
|
"""CLI entry point."""
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description="Analyze project structure, frameworks, and services"
|
|
)
|
|
parser.add_argument(
|
|
"--project-dir",
|
|
type=Path,
|
|
default=Path.cwd(),
|
|
help="Project directory to analyze (default: current directory)",
|
|
)
|
|
parser.add_argument(
|
|
"--index",
|
|
action="store_true",
|
|
help="Create full project index (default behavior)",
|
|
)
|
|
parser.add_argument(
|
|
"--service",
|
|
type=str,
|
|
default=None,
|
|
help="Analyze a specific service only",
|
|
)
|
|
parser.add_argument(
|
|
"--output",
|
|
type=Path,
|
|
default=None,
|
|
help="Output file for JSON results",
|
|
)
|
|
parser.add_argument(
|
|
"--quiet",
|
|
action="store_true",
|
|
help="Only output JSON, no status messages",
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Determine what to analyze
|
|
if args.service:
|
|
results = analyze_service(args.project_dir, args.service, args.output)
|
|
else:
|
|
results = analyze_project(args.project_dir, args.output)
|
|
|
|
# Print results
|
|
if not args.quiet or not args.output:
|
|
print(json.dumps(results, indent=2))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|