weavatrix-git 0.3.4

Read-only Git evidence: library, CLI, and optional MCP server. Never mutates a repository.
Documentation
//! Read-only worktree safety MCP tool. Never mutates a repository.

use mcport::{RequestContext, ToolReply, json};

use super::tools::{active, message, progress, reply};
use crate::{Repository, WorktreeSafety};

pub fn worktree_safety(
    context: &RequestContext,
    repository: &Repository,
    arguments: &mcport::Value,
) -> ToolReply {
    reply((|| {
        super::arguments::object(arguments)?;
        active(context)?;
        progress(context, 0.0, "classifying worktree safety")?;
        let safety = repository.worktree_safety().map_err(message)?;
        progress(context, 1.0, "worktree safety ready")?;
        Ok(safety_value(&safety))
    })())
}

fn safety_value(safety: &WorktreeSafety) -> mcport::Value {
    json!({
        "level": format!("{:?}", safety.level),
        "kind": format!("{:?}", safety.kind),
        "trackedDirty": safety.tracked_dirty,
        "stagedDirty": safety.staged_dirty,
        "untrackedCount": safety.untracked_count,
        "ignoredCount": safety.ignored_count,
        "submoduleUnknown": safety.submodule_unknown,
        "readOnly": true
    })
}