opensymphony 1.6.3

A Rust implementation of the OpenAI Symphony orchestration design
Documentation
use std::path::Path;

use crate::opensymphony_memory::{MemoryInitApplyReport, MemoryInitFileChange};

pub(crate) fn record_memory_init_changes(
    report: &MemoryInitApplyReport,
    target_repo: &Path,
    created: &mut Vec<String>,
    updated: &mut Vec<String>,
    unchanged: &mut Vec<String>,
) {
    record_memory_init_change(
        relative_path_for_summary(target_repo, &report.config_path),
        report.config,
        created,
        updated,
        unchanged,
    );
    record_memory_init_change(
        relative_path_for_summary(target_repo, &report.gitignore_path),
        report.gitignore,
        created,
        updated,
        unchanged,
    );
}

pub(crate) fn memory_init_change_lists(
    report: &MemoryInitApplyReport,
    target_repo: &Path,
) -> (Vec<String>, Vec<String>, Vec<String>) {
    let mut created = Vec::new();
    let mut updated = Vec::new();
    let mut unchanged = Vec::new();
    record_memory_init_changes(
        report,
        target_repo,
        &mut created,
        &mut updated,
        &mut unchanged,
    );
    (created, updated, unchanged)
}

fn record_memory_init_change(
    path: String,
    change: MemoryInitFileChange,
    created: &mut Vec<String>,
    updated: &mut Vec<String>,
    unchanged: &mut Vec<String>,
) {
    match change {
        MemoryInitFileChange::Created => created.push(path),
        MemoryInitFileChange::Updated => updated.push(path),
        MemoryInitFileChange::Unchanged => unchanged.push(path),
    }
}

fn relative_path_for_summary(root: &Path, path: &Path) -> String {
    path.strip_prefix(root)
        .unwrap_or(path)
        .to_string_lossy()
        .into_owned()
}