sqlite_graphrag/spawn/
compat_matrix.rs1use super::ExecutorCapabilities;
6use crate::spawn::executor_version::ExecutorVersion;
7
8pub fn codex_capabilities(version: &ExecutorVersion) -> ExecutorCapabilities {
9 let mut caps = ExecutorCapabilities::empty();
10 caps.supports_strict_schema = true;
11
12 if version.is_at_least(0, 137, 0) {
13 caps.supports_mcp_map = true;
14 caps.supports_ask_for_approval_flag = false;
15 caps.default_flags
16 .extend(["-a".to_string(), "never".to_string()]);
17 caps.removed_flags.push("--ask-for-approval".to_string());
18 } else if version.is_at_least(0, 134, 0) {
19 caps.supports_mcp_map = true;
23 caps.supports_ask_for_approval_flag = false;
24 caps.removed_flags.push("--ask-for-approval".to_string());
25 caps.removed_flags.push("-a".to_string());
26 } else if version.is_at_least(0, 130, 0) {
27 caps.supports_mcp_map = false;
28 caps.supports_ask_for_approval_flag = true;
29 caps.default_flags
30 .push("--ask-for-approval=never".to_string());
31 } else {
32 caps.supports_ask_for_approval_flag = true;
33 caps.default_flags
34 .push("--ask-for-approval=never".to_string());
35 }
36
37 caps
38}
39
40pub fn claude_capabilities(version: &ExecutorVersion) -> ExecutorCapabilities {
41 let mut caps = ExecutorCapabilities::empty();
42 caps.supports_strict_schema = true;
43 caps.supports_mcp_map = true;
44
45 if version.is_at_least(2, 0, 0) {
46 caps.supports_ask_for_approval_flag = true;
47 caps.default_flags
48 .extend(["--output-format".to_string(), "json".to_string()]);
49 } else {
50 caps.default_flags.push("--output-format=json".to_string());
51 }
52 caps
53}
54
55pub fn opencode_capabilities(_version: &ExecutorVersion) -> ExecutorCapabilities {
56 let mut caps = ExecutorCapabilities::empty();
57 caps.supports_mcp_map = true;
58 caps.supports_ask_for_approval_flag = true;
59 caps.supports_strict_schema = false;
60 caps
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66
67 #[test]
68 fn codex_137_removed_old_flag() {
69 let v = ExecutorVersion::parse("0.137.0").unwrap();
70 let caps = codex_capabilities(&v);
71 assert!(!caps.supports_ask_for_approval_flag);
72 assert!(caps
73 .removed_flags
74 .contains(&"--ask-for-approval".to_string()));
75 }
76
77 #[test]
78 fn codex_130_supports_old_flag() {
79 let v = ExecutorVersion::parse("0.130.0").unwrap();
80 let caps = codex_capabilities(&v);
81 assert!(caps.supports_ask_for_approval_flag);
82 }
83}