taskter 0.1.0

Taskter is a terminal Kanban board CLI tool built with Rust.
Documentation
use anyhow::{anyhow, Result};
use serde_json::Value;

use crate::agent::{self, FunctionDeclaration};
use crate::store;

const DECL_JSON: &str = include_str!("../../tools/assign_agent.json");

pub fn declaration() -> FunctionDeclaration {
    serde_json::from_str(DECL_JSON).expect("invalid assign_agent.json")
}

pub fn execute(args: &Value) -> Result<String> {
    let task_id = args["task_id"]
        .as_u64()
        .ok_or_else(|| anyhow!("task_id missing"))? as usize;
    let agent_id = args["agent_id"]
        .as_u64()
        .ok_or_else(|| anyhow!("agent_id missing"))? as usize;

    let agents = agent::load_agents()?;
    if !agents.iter().any(|a| a.id == agent_id) {
        return Ok(format!("Agent {agent_id} not found"));
    }

    let mut board = store::load_board()?;
    if let Some(task) = board.tasks.iter_mut().find(|t| t.id == task_id) {
        task.agent_id = Some(agent_id);
        store::save_board(&board)?;
        Ok(format!("Agent {agent_id} assigned to task {task_id}"))
    } else {
        Ok(format!("Task {task_id} not found"))
    }
}