1use harness_core::{PermissionPolicy, ToolError};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone)]
5pub struct GlobSessionConfig {
6 pub cwd: String,
7 pub permissions: PermissionPolicy,
8 pub default_head_limit: Option<usize>,
9 pub max_bytes: Option<usize>,
10 pub max_filesize: Option<u64>,
11 pub max_paths_scanned: Option<usize>,
12 pub timeout_ms: Option<u64>,
13}
14
15impl GlobSessionConfig {
16 pub fn new(cwd: impl Into<String>, permissions: PermissionPolicy) -> Self {
17 Self {
18 cwd: cwd.into(),
19 permissions,
20 default_head_limit: None,
21 max_bytes: None,
22 max_filesize: None,
23 max_paths_scanned: None,
24 timeout_ms: None,
25 }
26 }
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct GlobPathsMeta {
31 pub pattern: String,
32 pub total: usize,
33 pub returned: usize,
34 pub offset: usize,
35 pub head_limit: usize,
36 pub more: bool,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct GlobPathsResult {
41 pub output: String,
42 pub paths: Vec<String>,
43 pub meta: GlobPathsMeta,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct ErrorResult {
48 pub error: ToolError,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(tag = "kind", rename_all = "snake_case")]
53pub enum GlobResult {
54 #[serde(rename = "paths")]
55 Paths(GlobPathsResult),
56 #[serde(rename = "error")]
57 Error(ErrorResult),
58}