מנועי המערכת (System Engines)
===============================
סקירה כללית
------------
מסמך זה מתאר את המנועים המרכזיים במערכת וכיצד הם עובדים.
מנוע חיפוש (Search Engine)
----------------------------
**מיקום:** ``search_engine.py``
**תפקיד:** חיפוש מתקדם בקטעי קוד
**סוגי חיפוש:**
- Text Search - התאמת מחרוזת
- Regex Search - ביטויים רגולריים
- Fuzzy Search - התאמה משוערת
- Content Search - חיפוש Full-Text
- Function Search - חיפוש פונקציות
**רכיבים מרכזיים:**
.. code-block:: python
class SearchEngine:
def __init__(self):
self.index = SearchIndex()
async def search(
self,
query: str,
search_type: SearchType,
filters: SearchFilter,
user_id: int
) -> List[SearchResult]:
# בניית אינדקס אם נדרש
if self.index.needs_rebuild(user_id):
await self.index.rebuild_index(user_id)
# ביצוע חיפוש
results = await self._perform_search(query, search_type, filters, user_id)
# חישוב relevance score
for result in results:
result.relevance_score = self._calculate_relevance(result, query)
# מיון
return self._sort_results(results, sort_order)
**אינדקס:**
- Word Index - מילים -> קבצים
- Function Index - פונקציות -> קבצים
- Language Index - שפות -> קבצים
- Tag Index - תגיות -> קבצים
**ראו גם:** :doc:`/workflows/search-flow`
מנוע רפקטורינג (Refactoring Engine)
-------------------------------------
**מיקום:** ``refactoring_engine.py``
**תפקיד:** שינוי מבנה קוד בצורה בטוחה
**סוגי רפקטורינג:**
- Split Functions - פיצול קובץ גדול
- Extract Functions - חילוץ קוד חוזר
- Merge Similar - מיזוג קוד דומה
- Convert to Classes - המרה למחלקות
- Dependency Injection - הוספת DI
**רכיבים מרכזיים:**
.. code-block:: python
class RefactoringEngine:
def __init__(self) -> None:
self.analyzer: Optional[CodeAnalyzer] = None
def propose_refactoring(
self, code: str, filename: str, refactor_type: RefactorType
) -> RefactorResult:
# ניתוח קוד
self.analyzer = CodeAnalyzer(code, filename)
if not self.analyzer.analyze():
return RefactorResult(
success=False, proposal=None, error="כשל בניתוח הקוד - ייתכן שגיאת תחביר"
)
# יצירת הצעה לפי סוג
try:
if refactor_type == RefactorType.SPLIT_FUNCTIONS:
proposal = self._split_functions()
elif refactor_type == RefactorType.EXTRACT_FUNCTIONS:
proposal = self._extract_functions()
elif refactor_type == RefactorType.MERGE_SIMILAR:
proposal = self._merge_similar()
elif refactor_type == RefactorType.CONVERT_TO_CLASSES:
proposal = self._convert_to_classes()
elif refactor_type == RefactorType.DEPENDENCY_INJECTION:
proposal = self._add_dependency_injection()
else:
return RefactorResult(success=False, proposal=None, error="סוג רפקטורינג לא נתמך")
# אימות בסיסי (AST) לתוצרים
validated = self._validate_proposal(proposal)
return RefactorResult(success=True, proposal=proposal, validation_passed=validated)
except Exception as e:
return RefactorResult(success=False, proposal=None, error=f"שגיאה: {e}")
יכולות מתקדמות (Smart Clustering, Cycle Guard)
-----------------------------------------------
- Smart Clustering (פיצול חכם לתת‑דומיינים):
- המנוע בונה גרף תלותים בין פונקציות/מחלקות, מזהה "קישורים חלשים" (Weak Links) ומפצל תתי‑גרפים עצמאיים לקבצים נפרדים.
- דוגמה: ``Inventory`` ו‑``ApiClient`` נחתכים לקבצים עצמאיים כאשר אינם תלויים ב‑Users/Finance.
- Coupling Rule (הצמדה): כאשר יש צימוד גבוה בין מנהל לישות (Type Hints/שימוש תכוף), הם יישבו יחד באותו קובץ (Collocation), למשל ``User`` + ``UserManager`` ב‑``users.py``.
- Dry‑Run Cycle Guard (מניעת מעגליות):
- בניית גרף ייבוא בין המודולים שנוצרו, זיהוי SCC (Tarjan) ומיזוג נקודתי רק בתוך המעגל כדי לשבור אותו.
- ניקוי self‑import ועדכון ``__init__.py`` בהתאם. מוסיף אזהרה ידידותית להצעה.
- שמות קבצים דומייניים יציבים (Canonical):
- ``users.py``, ``finance.py``, ``inventory.py``, ``network.py`` (ל‑API clients), ``workflows.py``.
- דומיינים אחרים יקבלו שם יציב על בסיס שם הקלט: ``_.py``.
מצב שכבות (Layered Mode)
-------------------------
- אופציונלי: דחיפת כל הישויות ל‑Leaf יחיד ``models.py`` והמודולים התלויים ייבאו ממנו.
- הפעלה דרך משתנה סביבה (ללא שינוי קוד):
.. code-block:: bash
export REFACTOR_LAYERED_MODE=1
- בברירת מחדל (ללא הדגל) מופעל Collocation: מחלקות ופונקציות נוצרות יחד לפי דומיין.
Safe Decomposition ל‑models.py (פיצול בטוח לחבילת models/)
-----------------------------------------------------------
בסנריו שבו קיימת שכבה שכבתית יציבה וכל המחלקות מרוכזות בקובץ יחיד ``models.py`` (ללא פונקציות טופ‑לבל), המנוע מבצע פיצול בטוח ל‑תתי‑מודולים דומייניים בתוך חבילת ``models/``:
- ``models/core.py`` – ישויות ליבה כגון ``User``, ``UserManager``, ``PermissionSystem``, ``EmailService``.
- ``models/billing.py`` – רכיבי תשלום/מנויים כגון ``PaymentGateway``, ``SubscriptionManager``.
- ``models/inventory.py`` – ישויות מלאי כגון ``Product``, ``Inventory``.
- לפי צורך: ``models/network.py`` (לקוחות API), ``models/workflows.py`` (זרימות).
עקרונות:
- זיהוי דומיין לפי יוריסטיקה של שמות וסקשנים; ברירת המחדל היא שיוך ל‑``core`` כאשר אין רמזים.
- יצירת ``models/__init__.py`` עם re‑exports עבור תאימות לאחור (ייבוא מ‑``models`` ימשיך לעבוד).
- הזרקת יבוא בין‑מודולי למחלקות נדרשות (למשל ``billing`` ייבא ``User`` מ‑``core``: ``from .core import User``).
- Dry‑Run לזיהוי מעגליות בתוך ``models/`` בלבד; פירוק מעגל נעשה ע"י מיזוג נקודתי של מודולים מתוך ה‑SCC ועדכון ``models/__init__.py``.
מתי לבחור Safe Decomposition?
- כאשר המערכת רצה יציב עם ``models.py`` יחיד, אך קיים Coupling מלאכותי בין דומיינים שונים.
- כאשר אין תלות הדדית בין קבוצות ישויות (לדוגמה: ``Inventory`` אינו תלוי ב‑``User``).
**CodeAnalyzer:**
- משתמש ב-AST לניתוח Python
- מזהה פונקציות, מחלקות, imports
- מחשב תלויות ומורכבות
**ראו גם:** :doc:`/workflows/refactor-flow`
מעבד קוד (Code Processor)
---------------------------
**מיקום:** ``code_processor.py``
**תפקיד:** עיבוד וזיהוי קוד
**יכולות:**
- זיהוי שפת תכנות
- הדגשת תחביר (Syntax Highlighting)
- ניתוח מטריקות קוד
- זיהוי קידוד תווים
**רכיבים מרכזיים:**
.. code-block:: python
class CodeProcessor:
def detect_language(self, code: str, filename: str = None) -> str:
# ניסיון לפי שם קובץ
if filename:
try:
lexer = get_lexer_for_filename(filename)
return lexer.name
except:
pass
# ניסיון לפי תוכן
try:
lexer = guess_lexer(code)
return lexer.name
except:
return 'text'
def highlight_code(
self,
code: str,
language: str,
format: str = 'html'
) -> str:
lexer = get_lexer_by_name(language)
formatter = HtmlFormatter(style='monokai')
return highlight(code, lexer, formatter)
def analyze_code(self, code: str, language: str) -> Dict:
# מטריקות בסיסיות
metrics = {
'lines': len(code.splitlines()),
'characters': len(code),
'functions': self._count_functions(code, language),
'classes': self._count_classes(code, language),
'complexity': self._calculate_complexity(code, language)
}
return metrics
**תמיכה בשפות:**
- 100+ שפות תכנות (דרך Pygments)
- זיהוי אוטומטי לפי שם קובץ או תוכן
מנוע ניתוח (Code Analyzer)
----------------------------
**מיקום:** ``refactoring_engine.py`` (חלק מ-CodeAnalyzer)
**תפקיד:** ניתוח מבנה קוד Python
**יכולות:**
- AST Parsing
- זיהוי פונקציות ומחלקות
- חישוב תלויות
- חישוב מורכבות ציקלומטית
**דוגמה:**
.. code-block:: python
analyzer = CodeAnalyzer(code, "example.py")
if analyzer.analyze():
print(f"Functions: {len(analyzer.functions)}")
print(f"Classes: {len(analyzer.classes)}")
for func in analyzer.functions:
print(f" {func.name}: complexity={func.complexity}")
מנוע גיבויים (Backup Service)
-------------------------------
**מיקום:** ``services/backup_service.py``
**תפקיד:** יצירת גיבויים ושחזור
**יכולות:**
- יצירת ZIP מגיבוי מלא
- שחזור מגיבוי
- ניהול metadata גיבויים
**ראו גם:** :doc:`/workflows/backup-flow`
מנוע אינטגרציות (Integration Services)
----------------------------------------
**GitHub Service:**
- מיקום: ``services/github_service.py``
- תפקיד: אינטגרציה עם GitHub API
- יכולות: העלאה, הורדה, יצירת repos, PRs
**Google Drive Service:**
- מיקום: ``services/google_drive_service.py``
- תפקיד: אינטגרציה עם Google Drive
- יכולות: העלאה, הורדה, גיבויים אוטומטיים
**ראו גם:** :doc:`/integrations`
מנוע Observability
-------------------
**מיקום:** ``observability.py``, ``observability_otel.py``
**תפקיד:** מעקב אחר ביצועים ושגיאות
**רכיבים:**
- Structured Logging (structlog)
- Metrics (Prometheus)
- Tracing (OpenTelemetry)
- Error Tracking (Sentry)
**ראו גם:** :doc:`/observability`
קישורים
--------
- :doc:`/workflows/search-flow`
- :doc:`/workflows/refactor-flow`
- :doc:`/workflows/backup-flow`
- :doc:`/api/search_engine`
- :doc:`/api/refactoring_engine`
- :doc:`/api/code_processor`