neutron-engine 0.1.3

A lightweight markup parser for the Neutron styling language (.nt)
Documentation
module ai;

//! AI Assistant in Iris - Jago coding, fix error, Winget publish auto.
//! Integrate OpenAI/Gemini via HTTP + local neutron model.

use std::println;
use std::input;
use std::time;
use std::process;
use std::*;

trait Ai {
    fn process(&self, query: string) -> string;
    fn fix_code(&self, code: string, error: string) -> string;
    fn publish_winget(&self, pkg: string, repo: string) -> bool;
}

struct NeutronAi {
    model: string, // "neutron-local"
    api_key: string,
}

impl NeutronAi for Ai {
    fn new(api_key: string) -> Self {
        Self { model: "neutron-gpt", api_key }
    }

    fn process(&self, query: string) -> string {
        let prompt = format!("You are Neutron AI coding assistant. Query: {}", query);
        let response = self.call_api(prompt);
        response.trim()
    }

    fn fix_code(&self, code: string, error: string) -> string {
        let prompt = format!("Fix Iris/Rust code error:\nCode:\n{}\nError: {}\nFixed:", code, error);
        self.call_api(prompt)
    }

    fn publish_winget(&self, pkg: string, repo: string) -> bool {
        let steps = format!("Auto-publish {} to Winget from {}:\n1. cargo build --release\n2. git tag v0.1.0\n3. git push\n4. Update manifest SHA256\n5. Winget PR", pkg, repo);
        println("{}", steps);
        true
    }

    fn call_api(&self, prompt: string) -> string {
        // HTTP to local neutron or OpenAI
        let payload = json!({
            "model": self.model,
            "messages": [{"role": "user", "content": prompt}]
        });
        match http::post("http://localhost:8000/v1/chat/completions", payload) {
            Ok(resp) => resp["choices"][0]["message"]["content"].as_string(),
            Err(_) => "AI offline - use local neutron model.".to_string()
        }
    }
}

fn main() {
    let ai = NeutronAi::new("sk-neutron-key");
    println("{}", ai.process("Buat AI Iris lengkap jago coding, fix Winget Ion error."));

    // Demo fix
    let code = r#"fn main() { println("Hello"); }"#;
    let error = "E0599 no variant";
    let fixed = ai.fix_code(code.to_string(), error.to_string());
    println("Fixed code:\n{}", fixed);

    // Winget publish
    ai.publish_winget("Muhrazif20Hash.Ion", "muhrazif20-hash/ion");

    println("AI ready! Query: ");
    let query = input("");
    println("AI: {}", ai.process(query));
}