File size: 2,642 Bytes
d64fd55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
67
68
69
70
71
72
73
74
75
76
77
from dataclasses import dataclass, field
from typing import List, Dict, Any, Optional

from domain.training.run import Run
from domain.training.weekly_snapshot import WeeklySnapshot
from domain.training.weekly_trend import WeeklyTrend
from domain.runner.profile import RunnerProfile
from domain.training.training_recommendation import TrainingRecommendation
from domain.goals.goal_trajectory import GoalTrajectory
from ..intelligence.runner_intelligence_snapshot import RunnerIntelligenceSnapshot

from domain.runner_positioning import RunnerPositioning
from application.positioning_service import WeeklyPositioning


@dataclass
class PipelineContext:
    """
    Explicit, typed data contract for the Runner pipeline.
    Eliminates dynamic field attachments and implicit state.
    """

    # Inputs
    runs: List[Any] = field(default_factory=list)
    week_runs: List[Any] = field(default_factory=list)
    language: str = "en"
    target_monday: Optional[Any] = None # date
    runner_profile: Optional[RunnerProfile] = None
    active_goal: Optional[Any] = None

    # Session state
    sessions: Dict[Any, WeeklySnapshot] = field(default_factory=dict)

    # Computed training data
    weekly_snapshot: Optional[WeeklySnapshot] = None
    weekly_trend: Optional[WeeklyTrend] = None

    # Positioning layer

    runner_positioning: Optional[RunnerPositioning] = None
    positioning: Optional[WeeklyPositioning] = None
    positioning_view: Optional[Any] = None 
    recommendation: Optional[TrainingRecommendation] = None
    goal_trajectory: Optional[GoalTrajectory] = None

    # Intelligence outputs
    insights: Optional[Dict[str, Any]] = None
    plan: Optional[str] = None
    summary: Optional[Dict[str, Any]] = None
    trends: Optional[Any] = None
    risk_assessment: Optional[Any] = None
    intelligence_snapshot: Optional[RunnerIntelligenceSnapshot] = None

    # Intelligence Cache (for reuse)
    last_runner_positioning: Optional[Any] = None
    last_positioning: Optional[Any] = None
    last_insights: Dict[str, Any] = field(default_factory=dict)
    last_plan: Optional[str] = None
    last_brief: Optional[str] = None
    last_focus: Optional[str] = None

    # Visualization
    visualization_scope: str = "weekly" # "full" | "weekly"
    charts: Dict[str, Any] = field(default_factory=dict)

    # Context control
    enable_intelligence: bool = True
    intelligence_cache: Dict[str, bool] = field(default_factory=dict)
    
    # Comparison
    period_comparison: Optional[Any] = None

    # Goal progress
    goal_progress: Optional[Dict[str, Any]] = None
    goal_view: Optional[Dict[str, Any]] = None