stax 0.29.4

Fast stacked Git branches and PRs
Documentation
use crate::commands::generate;
use crate::config::Config;
use anyhow::Result;
use colored::Colorize;
use dialoguer::{theme::ColorfulTheme, Confirm};
use std::fs;
use std::io::IsTerminal;

pub fn run(reset_ai: bool, no_prompt: bool, yes: bool) -> Result<()> {
    if reset_ai {
        return reset_ai_defaults(no_prompt, yes);
    }

    let path = Config::path()?;

    println!("{}", "Config path:".blue().bold());
    println!("  {}\n", path.display());

    if path.exists() {
        let content = fs::read_to_string(&path)?;
        println!("{}", "Contents:".blue().bold());
        println!("{}", content);
    } else {
        println!("{}", "Config file does not exist yet.".yellow());
        println!("Run any stax command to create a default config.");
    }

    println!();
    println!("{}", "Submit stack links setting:".blue().bold());
    println!("  {}", r#"[submit]"#);
    println!(r#"  stack_links = "comment"  # "comment" | "body" | "both" | "off""#);
    println!(r#"  # Example: stack_links = "body""#);

    Ok(())
}

fn reset_ai_defaults(no_prompt: bool, yes: bool) -> Result<()> {
    let path = Config::path()?;
    let mut config = Config::load()?;

    if !yes && std::io::stdin().is_terminal() {
        let confirmed = Confirm::with_theme(&ColorfulTheme::default())
            .with_prompt("Clear saved AI agent/model defaults from config?")
            .default(true)
            .interact()?;

        if !confirmed {
            println!("{}", "Cancelled.".yellow());
            return Ok(());
        }
    }

    let had_saved_defaults = config.clear_ai_defaults();
    config.save()?;

    if had_saved_defaults {
        println!(
            "  {} Cleared saved AI defaults in {}",
            "".green().bold(),
            path.display()
        );
    } else {
        println!(
            "  {} No saved AI defaults were set in {}",
            "".green().bold(),
            path.display()
        );
    }

    if no_prompt {
        println!(
            "  {} Skipped reconfiguration because --no-prompt was set.",
            "Tip:".dimmed()
        );
        return Ok(());
    }

    if !std::io::stdin().is_terminal() {
        println!(
            "  {} Not running in an interactive terminal, so stax did not re-prompt.",
            "Tip:".dimmed()
        );
        return Ok(());
    }

    println!(
        "  {} Re-select the AI agent/model to save new defaults.",
        "Next:".dimmed()
    );
    let _ = generate::prompt_for_agent_and_model(&mut config, false)?;

    println!(
        "  {} Updated defaults will be used by future interactive AI flows.",
        "Tip:".dimmed()
    );

    Ok(())
}