File size: 2,486 Bytes
a31f556
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import asyncio
import logging
import os
from typing import Set

logger = logging.getLogger(__name__)

# The comprehensive trigger list based on the Vault Manifest Requirements
AUTO_REFRESH_TRIGGER_EVENTS: Set[str] = {
    "feature_implemented",
    "gmail_oauth_completed",
    "credential_captured",
    "vault_credentials_added",
    "rvc_model_updated",
    "gaming_session_completed",
    "nvidia_keys_configured",
    "bridge_sync_established",
    "daily_checkin_completed",
    "family_device_enrolled",
    "codebase_reindexed",
    "research_alert", # Research Engine Expansion
}

_debounce_task = None
_DEBOUNCE_DELAY_SECONDS = 30  # Wait 30 seconds after the last event before building

async def maybe_trigger_vault_refresh(event_type: str):
    """
    Evaluates if an event should trigger a Vault rebuild.
    If it should, it debounces the request so a flood of events only causes 1 rebuild.
    """
    if event_type in AUTO_REFRESH_TRIGGER_EVENTS:
        logger.info(f"VAULT AUTO-REFRESH: Event '{event_type}' triggered a rebuild request. Debouncing for {_DEBOUNCE_DELAY_SECONDS}s.")
        global _debounce_task
        if _debounce_task is not None:
            _debounce_task.cancel()
        _debounce_task = asyncio.create_task(_execute_vault_rebuild_after_delay())

async def _execute_vault_rebuild_after_delay():
    try:
        await asyncio.sleep(_DEBOUNCE_DELAY_SECONDS)
        await _perform_build()
    except asyncio.CancelledError:
        pass  # A newer event canceled this task to reset the timer
    except Exception as e:
        logger.error(f"VAULT AUTO-REFRESH FAILED: {e}")

async def _perform_build():
    from backend.security.vault_builder import build_vault
    logger.info("VAULT AUTO-REFRESH: Executing FULL and CLEAN background rebuilds...")
    
    source_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    
    try:
        # Build FULL mode
        full_target = os.path.join(source_path, "OMEGA_CORE_V15_FULL.vault")
        await build_vault("full", source_path, full_target)
        
        # Build CLEAN mode
        clean_target = os.path.join(source_path, "OMEGA_CORE_V15_CLEAN.vault")
        await build_vault("sanitized", source_path, clean_target)
        
        logger.info("VAULT AUTO-REFRESH: Successfully generated OMEGA_CORE_V15_FULL.vault and OMEGA_CORE_V15_CLEAN.vault.")
    except Exception as e:
        logger.error(f"VAULT AUTO-REFRESH: Exception during rebuild: {e}")