harness-glob 0.1.1

Glob tool for AI agent harnesses — bash-style pattern matching with .gitignore enumeration, alias pushback, NOT_FOUND siblings, and auto-split absolute-path patterns
Documentation
use harness_core::{PermissionPolicy, ToolError};
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone)]
pub struct GlobSessionConfig {
    pub cwd: String,
    pub permissions: PermissionPolicy,
    pub default_head_limit: Option<usize>,
    pub max_bytes: Option<usize>,
    pub max_filesize: Option<u64>,
    pub max_paths_scanned: Option<usize>,
    pub timeout_ms: Option<u64>,
}

impl GlobSessionConfig {
    pub fn new(cwd: impl Into<String>, permissions: PermissionPolicy) -> Self {
        Self {
            cwd: cwd.into(),
            permissions,
            default_head_limit: None,
            max_bytes: None,
            max_filesize: None,
            max_paths_scanned: None,
            timeout_ms: None,
        }
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GlobPathsMeta {
    pub pattern: String,
    pub total: usize,
    pub returned: usize,
    pub offset: usize,
    pub head_limit: usize,
    pub more: bool,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GlobPathsResult {
    pub output: String,
    pub paths: Vec<String>,
    pub meta: GlobPathsMeta,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ErrorResult {
    pub error: ToolError,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum GlobResult {
    #[serde(rename = "paths")]
    Paths(GlobPathsResult),
    #[serde(rename = "error")]
    Error(ErrorResult),
}