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