"""Registered feature functions.

Each entry takes a ``SessionContext`` and yields zero or more
``Observation`` instances. Adding a primitive = adding a function in a
sibling module and appending it to ``FEATURES``.
"""
from __future__ import annotations

from typing import Callable, Iterable

from behave_core.spec.envelope import Observation

from decnet.profiler.behave_shell._ctx import SessionContext
from decnet.profiler.behave_shell._features.cognitive import (
    cognitive_load,
    command_branch_diversity,
    error_resilience_fallback_to_man,
    error_resilience_frustration_typing,
    error_resilience_retry_tactic,
    exploration_style,
    feedback_loop_engagement,
    planning_depth,
    tool_vocabulary,
    inter_command_consistency,
    inter_command_latency_class,
)
from decnet.profiler.behave_shell._features.emotional_valence import (
    arousal,
    frustration_venting,
    stress_response,
    valence,
)
from decnet.profiler.behave_shell._features.environmental import (
    keyboard_layout,
    locale,
    numpad_usage,
    shell_type,
    terminal_multiplexer,
)
from decnet.profiler.behave_shell._features.operational import (
    cleanup_behavior,
    multi_actor_indicators,
    objective,
    opsec_discipline,
)
from decnet.profiler.behave_shell._features.temporal import (
    escalation_pattern,
    exit_behavior,
    landing_ritual,
    session_duration,
)
from decnet.profiler.behave_shell._features.motor import (
    command_chunking,
    error_correction,
    input_modality,
    keystroke_cadence,
    motor_stability,
    paste_burst_rate,
    pipe_chaining_depth,
    shortcut_usage,
    tab_completion,
)

FeatureFn = Callable[[SessionContext], Iterable[Observation]]

FEATURES: tuple[FeatureFn, ...] = (
    input_modality,
    paste_burst_rate,
    keystroke_cadence,
    motor_stability,
    error_correction,
    command_chunking,
    tab_completion,
    shortcut_usage,
    pipe_chaining_depth,
    inter_command_latency_class,
    command_branch_diversity,
    feedback_loop_engagement,
    inter_command_consistency,
    cognitive_load,
    exploration_style,
    planning_depth,
    tool_vocabulary,
    error_resilience_retry_tactic,
    error_resilience_frustration_typing,
    error_resilience_fallback_to_man,
    session_duration,
    escalation_pattern,
    landing_ritual,
    exit_behavior,
    shell_type,
    terminal_multiplexer,
    locale,
    keyboard_layout,
    numpad_usage,
    objective,
    opsec_discipline,
    cleanup_behavior,
    multi_actor_indicators,
    valence,
    arousal,
    stress_response,
    frustration_venting,
)
