Skip to main content

evolve_adapters/
signals.rs

1//! Signal types emitted by adapters' `parse_session`.
2
3use std::path::PathBuf;
4
5/// Whether a signal came from an explicit user grade or was inferred.
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum SignalKind {
8    /// User explicitly graded the session (`evolve good/bad/thumbs`).
9    Explicit,
10    /// Inferred by the adapter from the session log.
11    Implicit,
12}
13
14/// One parsed signal ready to be persisted. The CLI layer attaches session_id
15/// and recorded_at before inserting into `evolve-storage`.
16#[derive(Debug, Clone, PartialEq)]
17pub struct ParsedSignal {
18    /// Explicit vs implicit source.
19    pub kind: SignalKind,
20    /// Short tag for the signal source (e.g., "tests_passed", "user_clear").
21    pub source: String,
22    /// Normalized score in `[0.0, 1.0]`.
23    pub value: f64,
24    /// Optional JSON payload. MUST NOT contain source code.
25    pub payload_json: Option<String>,
26}
27
28/// Session log material handed to an adapter's `parse_session`.
29#[derive(Debug, Clone)]
30pub enum SessionLog {
31    /// A path to a session transcript file (adapter decides how to read it).
32    Transcript(PathBuf),
33    /// A git commit SHA (used by Aider post-commit hooks).
34    GitCommit(String),
35    /// A pre-parsed event payload (used by the proxy's Cursor fallback).
36    ProxyEvent(serde_json::Value),
37}