@team-agent/installer 0.5.107 → 0.5.108

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -80,10 +80,11 @@ impl CatalogError {
80
80
  "cursor_agent" => "agent",
81
81
  "codex" => "codex",
82
82
  "claude" | "claude_code" => "claude",
83
+ "grok" => "grok",
83
84
  _ => "provider CLI",
84
85
  };
85
86
  match self {
86
- Self::UnsupportedProvider => "choose a supported provider: pi, cursor_agent, codex, claude, or claude_code".into(),
87
+ Self::UnsupportedProvider => "choose a supported provider: pi, cursor_agent, codex, claude, claude_code, or grok".into(),
87
88
  Self::ExecutableUnavailable => format!("install or repair the PATH-first `{executable}` executable, then retry `team-agent models --provider {provider}`"),
88
89
  Self::UnsupportedSchema => format!("upgrade `{executable}` to a version that supports its model catalog protocol, then retry `team-agent models --provider {provider}`"),
89
90
  Self::CommandFailed => format!("run `{executable}` directly to check catalog/account access, then retry `team-agent models --provider {provider}`"),
@@ -118,6 +119,7 @@ fn display_provider(provider: &str) -> &str {
118
119
  "cursor_agent" => "Cursor",
119
120
  "codex" => "Codex",
120
121
  "claude" | "claude_code" => "Claude",
122
+ "grok" => "Grok",
121
123
  _ => provider,
122
124
  }
123
125
  }
@@ -130,6 +132,7 @@ pub fn parse_catalog_provider(name: &str) -> Option<Provider> {
130
132
  "codex" => Some(Provider::Codex),
131
133
  "claude" => Some(Provider::Claude),
132
134
  "claude_code" => Some(Provider::ClaudeCode),
135
+ "grok" => Some(Provider::Grok),
133
136
  _ => None,
134
137
  }
135
138
  }
@@ -153,6 +156,7 @@ enum CatalogSource {
153
156
  Pi,
154
157
  CursorAgent,
155
158
  Codex,
159
+ Grok,
156
160
  Claude,
157
161
  }
158
162
 
@@ -163,7 +167,8 @@ fn catalog_source(provider: Provider) -> Option<CatalogSource> {
163
167
  Provider::CursorAgent => Some(CatalogSource::CursorAgent),
164
168
  Provider::Codex => Some(CatalogSource::Codex),
165
169
  Provider::Claude | Provider::ClaudeCode => Some(CatalogSource::Claude),
166
- Provider::Copilot | Provider::GeminiCli | Provider::Grok | Provider::Fake => None,
170
+ Provider::Grok => Some(CatalogSource::Grok),
171
+ Provider::Copilot | Provider::GeminiCli | Provider::Fake => None,
167
172
  }
168
173
  }
169
174
 
@@ -184,6 +189,10 @@ pub fn discover_model_catalog(provider_name: &str) -> Result<Vec<ModelRecord>, C
184
189
  let bytes = run_native("codex", &["debug", "models"], None, None, &[], CATALOG_TIMEOUT, MAX_CATALOG_BYTES, &mut NoopObserver)?;
185
190
  parse_codex_catalog(&bytes, requested_provider)?
186
191
  }
192
+ CatalogSource::Grok => {
193
+ let bytes = run_native("grok", &["models"], None, None, &[], CATALOG_TIMEOUT, MAX_CATALOG_BYTES, &mut NoopObserver)?;
194
+ parse_grok_catalog(&bytes)?
195
+ }
187
196
  CatalogSource::Claude => discover_claude_catalog(requested_provider)?,
188
197
  };
189
198
  Ok(records)
@@ -242,8 +251,20 @@ pub(crate) fn parse_pi_catalog(bytes: &[u8]) -> Result<Vec<ModelRecord>, Catalog
242
251
 
243
252
  pub(crate) fn parse_cursor_catalog(bytes: &[u8]) -> Result<Vec<ModelRecord>, CatalogError> {
244
253
  let text = std::str::from_utf8(bytes).map_err(|_| CatalogError::InvalidUtf8)?;
254
+ let lines = text.lines().collect::<Vec<_>>();
255
+ let tip_line = lines
256
+ .iter()
257
+ .rposition(|line| !line.trim().is_empty())
258
+ .filter(|index| {
259
+ lines[*index]
260
+ .strip_prefix("Tip: use --model ")
261
+ .is_some_and(|tip| !tip.is_empty())
262
+ });
245
263
  let mut records: Vec<ModelRecord> = Vec::new();
246
- for line in text.lines() {
264
+ for (index, line) in lines.into_iter().enumerate() {
265
+ if Some(index) == tip_line {
266
+ continue;
267
+ }
247
268
  let line = line.trim();
248
269
  if line.is_empty() || line.trim_end_matches(':').eq_ignore_ascii_case("available models") { continue; }
249
270
  let Some((id, display)) = line.split_once(" - ") else { return Err(CatalogError::Malformed); };
@@ -260,6 +281,117 @@ pub(crate) fn parse_cursor_catalog(bytes: &[u8]) -> Result<Vec<ModelRecord>, Cat
260
281
  Ok(records)
261
282
  }
262
283
 
284
+ fn parse_grok_catalog(bytes: &[u8]) -> Result<Vec<ModelRecord>, CatalogError> {
285
+ let text = std::str::from_utf8(bytes).map_err(|_| CatalogError::InvalidUtf8)?;
286
+ let mut has_auth_notice = false;
287
+ let mut has_models_header = false;
288
+ let mut declared_default: Option<String> = None;
289
+ let mut starred_default: Option<String> = None;
290
+ let mut marked_default: Option<String> = None;
291
+ let mut seen = HashSet::new();
292
+ let mut records = Vec::new();
293
+
294
+ for line in text.lines() {
295
+ let line = line.trim();
296
+ if line.is_empty() {
297
+ continue;
298
+ }
299
+ if !has_models_header {
300
+ if matches!(line, "You are logged in with grok.com." | "You are not authenticated.") {
301
+ if has_auth_notice {
302
+ return Err(CatalogError::Malformed);
303
+ }
304
+ has_auth_notice = true;
305
+ continue;
306
+ }
307
+ if let Some(id) = line.strip_prefix("Default model: ") {
308
+ if declared_default.is_some() || id.is_empty() {
309
+ return Err(CatalogError::Malformed);
310
+ }
311
+ validate_identity(id)?;
312
+ declared_default = Some(id.to_string());
313
+ continue;
314
+ }
315
+ if line == "Available models:" {
316
+ has_models_header = true;
317
+ continue;
318
+ }
319
+ return Err(CatalogError::Malformed);
320
+ }
321
+
322
+ let (is_starred, row) = if let Some(row) = line.strip_prefix("- ") {
323
+ (false, row)
324
+ } else if let Some(row) = line.strip_prefix("* ") {
325
+ (true, row)
326
+ } else {
327
+ return Err(CatalogError::Malformed);
328
+ };
329
+ if row == "(default)" {
330
+ return Err(CatalogError::Malformed);
331
+ }
332
+ let (id, has_default_marker) = row
333
+ .strip_suffix(" (default)")
334
+ .map_or((row, false), |id| (id, true));
335
+ if id.is_empty() {
336
+ return Err(CatalogError::Malformed);
337
+ }
338
+ validate_identity(id)?;
339
+ if !seen.insert(id.to_string()) {
340
+ return Err(CatalogError::DuplicateIdentity(id.to_string()));
341
+ }
342
+ if is_starred {
343
+ if starred_default.as_deref().is_some_and(|current| current != id) {
344
+ return Err(CatalogError::Malformed);
345
+ }
346
+ starred_default = Some(id.to_string());
347
+ }
348
+ if has_default_marker {
349
+ if marked_default.as_deref().is_some_and(|current| current != id) {
350
+ return Err(CatalogError::Malformed);
351
+ }
352
+ marked_default = Some(id.to_string());
353
+ }
354
+ records.push(ModelRecord {
355
+ provider: "grok".into(),
356
+ vendor: "xai".into(),
357
+ id: id.into(),
358
+ display_name: id.into(),
359
+ default: None,
360
+ aliases: Vec::new(),
361
+ });
362
+ }
363
+ if !has_models_header {
364
+ return Err(CatalogError::Malformed);
365
+ }
366
+ if records.is_empty() {
367
+ return Err(CatalogError::Empty);
368
+ }
369
+
370
+ let mut default_id: Option<&str> = None;
371
+ for candidate in [
372
+ declared_default.as_deref(),
373
+ starred_default.as_deref(),
374
+ marked_default.as_deref(),
375
+ ]
376
+ .into_iter()
377
+ .flatten()
378
+ {
379
+ if default_id.is_some_and(|current| current != candidate) {
380
+ return Err(CatalogError::Malformed);
381
+ }
382
+ default_id = Some(candidate);
383
+ }
384
+ if let Some(default_id) = default_id {
385
+ if !seen.contains(default_id) {
386
+ return Err(CatalogError::Malformed);
387
+ }
388
+ for record in &mut records {
389
+ record.default = Some(record.id.as_str() == default_id);
390
+ }
391
+ }
392
+ Ok(records)
393
+ }
394
+
263
395
  fn parse_codex_catalog(bytes: &[u8], provider: &str) -> Result<Vec<ModelRecord>, CatalogError> {
264
396
  let value: serde_json::Value = serde_json::from_slice(bytes).map_err(|_| CatalogError::Malformed)?;
265
397
  let rows = value.get("models").and_then(serde_json::Value::as_array).ok_or(CatalogError::UnsupportedSchema)?;
@@ -647,4 +779,35 @@ mod tests {
647
779
  assert!(!model_matches(&row, "LUNA absent"));
648
780
  assert!(model_matches(&row, " "));
649
781
  }
782
+
783
+ #[test]
784
+ fn frozen_cursor_catalog_skips_only_its_native_trailing_tip() {
785
+ let frozen = include_bytes!("testdata/cursor-list-models-native.stdout");
786
+ let records = parse_cursor_catalog(frozen).unwrap();
787
+ let low = records.iter().find(|row| row.id == "gpt-5.6-luna-low").unwrap();
788
+ assert_eq!(low.provider.as_str(), "cursor_agent");
789
+ assert_eq!(low.vendor.as_str(), "gpt");
790
+ assert_eq!(low.display_name, "GPT-5.6 Luna 1M Low (current)");
791
+ assert_eq!(low.default, Some(false));
792
+ assert!(low.aliases.is_empty());
793
+ let xhigh = records.iter().find(|row| row.id == "gpt-5.6-luna-xhigh").unwrap();
794
+ assert_eq!(xhigh.id.as_str(), "gpt-5.6-luna-xhigh");
795
+ assert_eq!(xhigh.display_name, "GPT-5.6 Luna 1M Extra High");
796
+ let auto = records.iter().find(|row| row.id == "auto").unwrap();
797
+ assert_eq!(auto.default, Some(true));
798
+
799
+ let text = std::str::from_utf8(frozen).unwrap();
800
+ let without_tip = text.split_once("\nTip: use --model ").unwrap().0;
801
+ assert_eq!(parse_cursor_catalog(without_tip.as_bytes()).unwrap(), parse_cursor_catalog(frozen).unwrap());
802
+ }
803
+
804
+ #[test]
805
+ fn cursor_tip_compatibility_keeps_fail_closed_row_validation() {
806
+ let duplicate = b"Available models\na - A\na - A\n";
807
+ assert!(matches!(parse_cursor_catalog(duplicate), Err(CatalogError::DuplicateIdentity(_))));
808
+ assert!(matches!(parse_cursor_catalog(b"Available models\n"), Err(CatalogError::Empty)));
809
+ assert!(matches!(parse_cursor_catalog(&[b'A', 0xff]), Err(CatalogError::InvalidUtf8)));
810
+ assert!(matches!(parse_cursor_catalog(b"Available models\na - A\nnot a model row\n"), Err(CatalogError::Malformed)));
811
+ assert!(matches!(parse_cursor_catalog(b"Available models\na - A\nTip: use --model a to switch.\nunexpected tail\n"), Err(CatalogError::Malformed)));
812
+ }
650
813
  }
@@ -0,0 +1,250 @@
1
+ Available models
2
+
3
+ auto - Auto (default)
4
+ gpt-5.3-codex-low - Codex 5.3 Low
5
+ gpt-5.3-codex-low-fast - Codex 5.3 Low Fast
6
+ gpt-5.3-codex - Codex 5.3
7
+ gpt-5.3-codex-fast - Codex 5.3 Fast
8
+ gpt-5.3-codex-high - Codex 5.3 High
9
+ gpt-5.3-codex-high-fast - Codex 5.3 High Fast
10
+ gpt-5.3-codex-xhigh - Codex 5.3 Extra High
11
+ gpt-5.3-codex-xhigh-fast - Codex 5.3 Extra High Fast
12
+ gpt-5.2 - GPT-5.2
13
+ composer-2.5 - Composer 2.5
14
+ claude-opus-5-thinking-high - Claude Opus 5 1M Thinking
15
+ claude-opus-5-thinking-high-fast - Claude Opus 5 1M Thinking Fast
16
+ gpt-5.6-sol-high - GPT-5.6 Sol 1M High
17
+ gpt-5.6-sol-high-fast - GPT-5.6 Sol 1M High Fast
18
+ gpt-5.6-sol-xhigh - GPT-5.6 Sol 1M Extra High
19
+ gpt-5.6-sol-xhigh-fast - GPT-5.6 Sol 1M Extra High Fast
20
+ claude-fable-5-thinking-high - Claude Fable 5 1M Thinking (NO ZDR)
21
+ claude-fable-5-thinking-xhigh - Claude Fable 5 1M Extra High Thinking (NO ZDR)
22
+ cursor-grok-4.5-high - Grok 4.5
23
+ cursor-grok-4.5-high-fast - Grok 4.5 Fast
24
+ gemini-3.7-flash-high - Gemini 3.7 Flash
25
+ claude-sonnet-5-thinking-high - Claude Sonnet 5 1M Thinking
26
+ claude-sonnet-5-thinking-xhigh - Claude Sonnet 5 1M Extra High Thinking
27
+ gpt-5.6-luna-high - GPT-5.6 Luna 1M High
28
+ grok-4.7-low - Grok 4.7 Low
29
+ grok-4.7-low-fast - Grok 4.7 Low Fast​​
30
+ grok-4.7-medium - Grok 4.7 Medium
31
+ grok-4.7-medium-fast - Grok 4.7 Medium Fast​​
32
+ grok-4.7-high - Grok 4.7 High
33
+ grok-4.7-high-fast - Grok 4.7 High Fast​​
34
+ grok-4.7-xhigh - Grok 4.7 Extra High
35
+ grok-4.7-xhigh-fast - Grok 4.7 Extra High Fast​​
36
+ cursor-grok-4.6-low - Grok 4.6 Low
37
+ cursor-grok-4.6-low-fast - Grok 4.6 Low Fast
38
+ cursor-grok-4.6-medium - Grok 4.6 Medium
39
+ cursor-grok-4.6-medium-fast - Grok 4.6 Medium Fast
40
+ cursor-grok-4.6-high - Grok 4.6
41
+ cursor-grok-4.6-high-fast - Grok 4.6 Fast
42
+ cursor-grok-4.6-xhigh - Grok 4.6 Extra High
43
+ cursor-grok-4.6-xhigh-fast - Grok 4.6 Extra High Fast
44
+ composer-2.5-fast - Composer 2.5 Fast
45
+ claude-opus-5-5-low - Claude Opus 5.5 1M Low
46
+ claude-opus-5-5-low-fast - Claude Opus 5.5 1M Low Fast
47
+ claude-opus-5-5-medium - Claude Opus 5.5 1M
48
+ claude-opus-5-5-medium-fast - Claude Opus 5.5 1M Fast
49
+ claude-opus-5-5-high - Claude Opus 5.5 1M High
50
+ claude-opus-5-5-high-fast - Claude Opus 5.5 1M High Fast
51
+ claude-opus-5-5-xhigh - Claude Opus 5.5 1M Extra High
52
+ claude-opus-5-5-xhigh-fast - Claude Opus 5.5 1M Extra High Fast
53
+ claude-opus-5-5-max - Claude Opus 5.5 1M Max
54
+ claude-opus-5-5-max-fast - Claude Opus 5.5 1M Max Fast
55
+ claude-opus-5-low - Claude Opus 5 1M Low
56
+ claude-opus-5-low-fast - Claude Opus 5 1M Low Fast
57
+ claude-opus-5-medium - Claude Opus 5 1M Medium
58
+ claude-opus-5-medium-fast - Claude Opus 5 1M Medium Fast
59
+ claude-opus-5-high - Claude Opus 5 1M
60
+ claude-opus-5-high-fast - Claude Opus 5 1M Fast
61
+ claude-opus-5-thinking-low - Claude Opus 5 1M Low Thinking
62
+ claude-opus-5-thinking-low-fast - Claude Opus 5 1M Low Thinking Fast
63
+ claude-opus-5-thinking-medium - Claude Opus 5 1M Medium Thinking
64
+ claude-opus-5-thinking-medium-fast - Claude Opus 5 1M Medium Thinking Fast
65
+ claude-opus-5-thinking-xhigh - Claude Opus 5 1M Extra High Thinking
66
+ claude-opus-5-thinking-xhigh-fast - Claude Opus 5 1M Extra High Thinking Fast
67
+ claude-opus-5-thinking-max - Claude Opus 5 1M Max Thinking
68
+ claude-opus-5-thinking-max-fast - Claude Opus 5 1M Max Thinking Fast
69
+ claude-opus-4-8-low - Claude Opus 4.8 1M Low
70
+ claude-opus-4-8-low-fast - Claude Opus 4.8 1M Low Fast
71
+ claude-opus-4-8-medium - Claude Opus 4.8 1M Medium
72
+ claude-opus-4-8-medium-fast - Claude Opus 4.8 1M Medium Fast
73
+ claude-opus-4-8-high - Claude Opus 4.8 1M
74
+ claude-opus-4-8-high-fast - Claude Opus 4.8 1M Fast
75
+ claude-opus-4-8-xhigh - Claude Opus 4.8 1M Extra High
76
+ claude-opus-4-8-xhigh-fast - Claude Opus 4.8 1M Extra High Fast
77
+ claude-opus-4-8-max - Claude Opus 4.8 1M Max
78
+ claude-opus-4-8-max-fast - Claude Opus 4.8 1M Max Fast
79
+ claude-opus-4-8-thinking-low - Claude Opus 4.8 1M Low Thinking
80
+ claude-opus-4-8-thinking-low-fast - Claude Opus 4.8 1M Low Thinking Fast
81
+ claude-opus-4-8-thinking-medium - Claude Opus 4.8 1M Medium Thinking
82
+ claude-opus-4-8-thinking-medium-fast - Claude Opus 4.8 1M Medium Thinking Fast
83
+ claude-opus-4-8-thinking-high - Claude Opus 4.8 1M Thinking
84
+ claude-opus-4-8-thinking-high-fast - Claude Opus 4.8 1M Thinking Fast
85
+ claude-opus-4-8-thinking-xhigh - Claude Opus 4.8 1M Extra High Thinking
86
+ claude-opus-4-8-thinking-xhigh-fast - Claude Opus 4.8 1M Extra High Thinking Fast
87
+ claude-opus-4-8-thinking-max - Claude Opus 4.8 1M Max Thinking
88
+ claude-opus-4-8-thinking-max-fast - Claude Opus 4.8 1M Max Thinking Fast
89
+ gpt-5.6-sol-none - GPT-5.6 Sol 1M None
90
+ gpt-5.6-sol-none-fast - GPT-5.6 Sol 1M None Fast
91
+ gpt-5.6-sol-low - GPT-5.6 Sol 1M Low
92
+ gpt-5.6-sol-low-fast - GPT-5.6 Sol 1M Low Fast
93
+ gpt-5.6-sol-medium - GPT-5.6 Sol 1M
94
+ gpt-5.6-sol-medium-fast - GPT-5.6 Sol 1M Fast
95
+ gpt-5.6-sol-max - GPT-5.6 Sol 1M Max
96
+ gpt-5.6-sol-max-fast - GPT-5.6 Sol 1M Max Fast
97
+ gpt-5.5-none - GPT-5.5 1M None
98
+ gpt-5.5-none-fast - GPT-5.5 None Fast
99
+ gpt-5.5-low - GPT-5.5 1M Low
100
+ gpt-5.5-low-fast - GPT-5.5 Low Fast
101
+ gpt-5.5-medium - GPT-5.5 1M
102
+ gpt-5.5-medium-fast - GPT-5.5 Fast
103
+ gpt-5.5-high - GPT-5.5 1M High
104
+ gpt-5.5-high-fast - GPT-5.5 High Fast
105
+ gpt-5.5-extra-high - GPT-5.5 1M Extra High
106
+ gpt-5.5-extra-high-fast - GPT-5.5 Extra High Fast
107
+ claude-fable-5-1-low - Claude Fable 5.1 1M Low (NO ZDR)
108
+ claude-fable-5-1-medium - Claude Fable 5.1 1M Medium (NO ZDR)
109
+ claude-fable-5-1-high - Claude Fable 5.1 1M (NO ZDR)
110
+ claude-fable-5-1-xhigh - Claude Fable 5.1 1M Extra High (NO ZDR)
111
+ claude-fable-5-1-max - Claude Fable 5.1 1M Max (NO ZDR)
112
+ claude-fable-5-1-thinking-low - Claude Fable 5.1 1M Low Thinking (NO ZDR)
113
+ claude-fable-5-1-thinking-medium - Claude Fable 5.1 1M Medium Thinking (NO ZDR)
114
+ claude-fable-5-1-thinking-high - Claude Fable 5.1 1M Thinking (NO ZDR)
115
+ claude-fable-5-1-thinking-xhigh - Claude Fable 5.1 1M Extra High Thinking (NO ZDR)
116
+ claude-fable-5-1-thinking-max - Claude Fable 5.1 1M Max Thinking (NO ZDR)
117
+ claude-fable-5-low - Claude Fable 5 1M Low (NO ZDR)
118
+ claude-fable-5-medium - Claude Fable 5 1M Medium (NO ZDR)
119
+ claude-fable-5-high - Claude Fable 5 1M (NO ZDR)
120
+ claude-fable-5-xhigh - Claude Fable 5 1M Extra High (NO ZDR)
121
+ claude-fable-5-max - Claude Fable 5 1M Max (NO ZDR)
122
+ claude-fable-5-thinking-low - Claude Fable 5 1M Low Thinking (NO ZDR)
123
+ claude-fable-5-thinking-medium - Claude Fable 5 1M Medium Thinking (NO ZDR)
124
+ claude-fable-5-thinking-max - Claude Fable 5 1M Max Thinking (NO ZDR)
125
+ cursor-grok-4.5-low - Grok 4.5 Low
126
+ cursor-grok-4.5-low-fast - Grok 4.5 Low Fast
127
+ cursor-grok-4.5-medium - Grok 4.5 Medium
128
+ cursor-grok-4.5-medium-fast - Grok 4.5 Medium Fast
129
+ gemini-3.8-flash-low - Gemini 3.8 Flash Low
130
+ gemini-3.8-flash-medium - Gemini 3.8 Flash Medium
131
+ gemini-3.8-flash-high - Gemini 3.8 Flash High
132
+ gemini-3.7-flash-low - Gemini 3.7 Flash Low
133
+ gemini-3.7-flash-medium - Gemini 3.7 Flash Medium
134
+ muse-spark-1.3-minimal - Muse Spark 1.3 1M Minimal
135
+ muse-spark-1.3-low - Muse Spark 1.3 1M Low
136
+ muse-spark-1.3-medium - Muse Spark 1.3 1M Medium
137
+ muse-spark-1.3-high - Muse Spark 1.3 1M
138
+ muse-spark-1.3-xhigh - Muse Spark 1.3 1M Extra High
139
+ muse-spark-1.3-max - Muse Spark 1.3 1M Max
140
+ gpt-5.6-terra-none - GPT-5.6 Terra 1M None
141
+ gpt-5.6-terra-none-fast - GPT-5.6 Terra 1M None Fast
142
+ gpt-5.6-terra-low - GPT-5.6 Terra 1M Low
143
+ gpt-5.6-terra-low-fast - GPT-5.6 Terra 1M Low Fast
144
+ gpt-5.6-terra-medium - GPT-5.6 Terra 1M
145
+ gpt-5.6-terra-medium-fast - GPT-5.6 Terra 1M Fast
146
+ gpt-5.6-terra-high - GPT-5.6 Terra 1M High
147
+ gpt-5.6-terra-high-fast - GPT-5.6 Terra 1M High Fast
148
+ gpt-5.6-terra-xhigh - GPT-5.6 Terra 1M Extra High
149
+ gpt-5.6-terra-xhigh-fast - GPT-5.6 Terra 1M Extra High Fast
150
+ gpt-5.6-terra-max - GPT-5.6 Terra 1M Max
151
+ gpt-5.6-terra-max-fast - GPT-5.6 Terra 1M Max Fast
152
+ claude-sonnet-5-5-low - Claude Sonnet 5.5 Low
153
+ claude-sonnet-5-5-medium - Claude Sonnet 5.5 Medium
154
+ claude-sonnet-5-5-high - Claude Sonnet 5.5 High
155
+ claude-sonnet-5-5-xhigh - Claude Sonnet 5.5 Extra High
156
+ claude-sonnet-5-5-max - Claude Sonnet 5.5 Max
157
+ claude-sonnet-5-low - Claude Sonnet 5 1M Low
158
+ claude-sonnet-5-medium - Claude Sonnet 5 1M Medium
159
+ claude-sonnet-5-high - Claude Sonnet 5 1M
160
+ claude-sonnet-5-xhigh - Claude Sonnet 5 1M Extra High
161
+ claude-sonnet-5-max - Claude Sonnet 5 1M Max
162
+ claude-sonnet-5-thinking-low - Claude Sonnet 5 1M Low Thinking
163
+ claude-sonnet-5-thinking-medium - Claude Sonnet 5 1M Medium Thinking
164
+ claude-sonnet-5-thinking-max - Claude Sonnet 5 1M Max Thinking
165
+ claude-4.6-sonnet-medium - Claude Sonnet 4.6 1M
166
+ claude-4.6-sonnet-medium-thinking - Claude Sonnet 4.6 1M Thinking
167
+ claude-opus-4-7-low - Claude Opus 4.7 1M Low
168
+ claude-opus-4-7-low-fast - Claude Opus 4.7 1M Low Fast
169
+ claude-opus-4-7-medium - Claude Opus 4.7 1M Medium
170
+ claude-opus-4-7-medium-fast - Claude Opus 4.7 1M Medium Fast
171
+ claude-opus-4-7-high - Claude Opus 4.7 1M High
172
+ claude-opus-4-7-high-fast - Claude Opus 4.7 1M High Fast
173
+ claude-opus-4-7-xhigh - Claude Opus 4.7 1M
174
+ claude-opus-4-7-xhigh-fast - Claude Opus 4.7 1M Fast
175
+ claude-opus-4-7-max - Claude Opus 4.7 1M Max
176
+ claude-opus-4-7-max-fast - Claude Opus 4.7 1M Max Fast
177
+ claude-opus-4-7-thinking-low - Claude Opus 4.7 1M Low Thinking
178
+ claude-opus-4-7-thinking-low-fast - Claude Opus 4.7 1M Low Thinking Fast
179
+ claude-opus-4-7-thinking-medium - Claude Opus 4.7 1M Medium Thinking
180
+ claude-opus-4-7-thinking-medium-fast - Claude Opus 4.7 1M Medium Thinking Fast
181
+ claude-opus-4-7-thinking-high - Claude Opus 4.7 1M High Thinking
182
+ claude-opus-4-7-thinking-high-fast - Claude Opus 4.7 1M High Thinking Fast
183
+ claude-opus-4-7-thinking-xhigh - Claude Opus 4.7 1M Thinking
184
+ claude-opus-4-7-thinking-xhigh-fast - Claude Opus 4.7 1M Thinking Fast
185
+ claude-opus-4-7-thinking-max - Claude Opus 4.7 1M Max Thinking
186
+ claude-opus-4-7-thinking-max-fast - Claude Opus 4.7 1M Max Thinking Fast
187
+ gpt-5.4-low - GPT-5.4 1M Low
188
+ gpt-5.4-medium - GPT-5.4 1M
189
+ gpt-5.4-medium-fast - GPT-5.4 Fast
190
+ gpt-5.4-high - GPT-5.4 1M High
191
+ gpt-5.4-high-fast - GPT-5.4 High Fast
192
+ gpt-5.4-xhigh - GPT-5.4 1M Extra High
193
+ gpt-5.4-xhigh-fast - GPT-5.4 Extra High Fast
194
+ claude-4.6-opus-high - Claude Opus 4.6 1M
195
+ claude-4.6-opus-max - Claude Opus 4.6 1M Max
196
+ claude-4.6-opus-high-thinking - Claude Opus 4.6 1M Thinking
197
+ claude-4.6-opus-max-thinking - Claude Opus 4.6 1M Max Thinking
198
+ claude-4.5-opus-high - Claude Opus 4.5
199
+ claude-4.5-opus-high-thinking - Claude Opus 4.5 Thinking
200
+ gpt-5.2-low - GPT-5.2 Low
201
+ gpt-5.2-low-fast - GPT-5.2 Low Fast
202
+ gpt-5.2-fast - GPT-5.2 Fast
203
+ gpt-5.2-high - GPT-5.2 High
204
+ gpt-5.2-high-fast - GPT-5.2 High Fast
205
+ gpt-5.2-xhigh - GPT-5.2 Extra High
206
+ gpt-5.2-xhigh-fast - GPT-5.2 Extra High Fast
207
+ gpt-5.6-luna-none - GPT-5.6 Luna 1M None
208
+ gpt-5.6-luna-none-fast - GPT-5.6 Luna 1M None Fast
209
+ gpt-5.6-luna-low - GPT-5.6 Luna 1M Low (current)
210
+ gpt-5.6-luna-low-fast - GPT-5.6 Luna 1M Low Fast
211
+ gpt-5.6-luna-medium - GPT-5.6 Luna 1M
212
+ gpt-5.6-luna-medium-fast - GPT-5.6 Luna 1M Fast
213
+ gpt-5.6-luna-high-fast - GPT-5.6 Luna 1M High Fast
214
+ gpt-5.6-luna-xhigh - GPT-5.6 Luna 1M Extra High
215
+ gpt-5.6-luna-xhigh-fast - GPT-5.6 Luna 1M Extra High Fast
216
+ gpt-5.6-luna-max - GPT-5.6 Luna 1M Max
217
+ gpt-5.6-luna-max-fast - GPT-5.6 Luna 1M Max Fast
218
+ gemini-3.6-flash-minimal - Gemini 3.6 Flash Minimal
219
+ gemini-3.6-flash-low - Gemini 3.6 Flash Low
220
+ gemini-3.6-flash-medium - Gemini 3.6 Flash Medium
221
+ gemini-3.6-flash-high - Gemini 3.6 Flash
222
+ gemini-3.1-pro - Gemini 3.1 Pro
223
+ gpt-5.4-mini-none - GPT-5.4 Mini None
224
+ gpt-5.4-mini-low - GPT-5.4 Mini Low
225
+ gpt-5.4-mini-medium - GPT-5.4 Mini
226
+ gpt-5.4-mini-high - GPT-5.4 Mini High
227
+ gpt-5.4-mini-xhigh - GPT-5.4 Mini Extra High
228
+ gpt-5.4-nano-none - GPT-5.4 Nano None
229
+ gpt-5.4-nano-low - GPT-5.4 Nano Low
230
+ gpt-5.4-nano-medium - GPT-5.4 Nano
231
+ gpt-5.4-nano-high - GPT-5.4 Nano High
232
+ gpt-5.4-nano-xhigh - GPT-5.4 Nano Extra High
233
+ claude-4.5-sonnet - Claude Sonnet 4.5
234
+ claude-4.5-sonnet-thinking - Claude Sonnet 4.5 Thinking
235
+ gpt-5.1-low - GPT-5.1 Low
236
+ gpt-5.1 - GPT-5.1
237
+ gpt-5.1-high - GPT-5.1 High
238
+ gemini-3-flash - Gemini 3 Flash
239
+ gemini-3.5-flash - Gemini 3.5 Flash
240
+ claude-4-sonnet - Claude Sonnet 4
241
+ claude-4-sonnet-thinking - Claude Sonnet 4 Thinking
242
+ gpt-5-mini - GPT-5 Mini
243
+ kimi-k3-low - Kimi K3 Low
244
+ kimi-k3-high - Kimi K3 High
245
+ kimi-k3-max - Kimi K3
246
+ kimi-k2.7-code - Kimi K2.7 Code
247
+ glm-5.2-high - GLM 5.2
248
+ glm-5.2-max - GLM 5.2 Max
249
+
250
+ Tip: use --model <id> (or /model <id> in interactive mode) to switch. Parameterized models also accept quoted overrides, e.g. --model 'claude-opus-4-8[context=1m,effort=high,fast=false]'.
@@ -0,0 +1,9 @@
1
+ You are logged in with grok.com.
2
+
3
+ Default model: grok-4.6
4
+
5
+ Available models:
6
+ - grok-4.7
7
+ - grok-4.7-build-fast
8
+ - grok-4.5
9
+ * grok-4.6 (default)
@@ -0,0 +1,7 @@
1
+ You are not authenticated.
2
+
3
+ Default model: grok-4.7
4
+
5
+ Available models:
6
+ * grok-4.7 (default)
7
+ - grok-4.6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@team-agent/installer",
3
- "version": "0.5.107",
3
+ "version": "0.5.108",
4
4
  "description": "npx installer for Team Agent",
5
5
  "keywords": [
6
6
  "codex",
@@ -20,9 +20,9 @@
20
20
  "team-agent-installer": "npm/install.mjs"
21
21
  },
22
22
  "optionalDependencies": {
23
- "@team-agent/cli-darwin-arm64": "0.5.107",
24
- "@team-agent/cli-darwin-x64": "0.5.107",
25
- "@team-agent/cli-linux-x64": "0.5.107"
23
+ "@team-agent/cli-darwin-arm64": "0.5.108",
24
+ "@team-agent/cli-darwin-x64": "0.5.108",
25
+ "@team-agent/cli-linux-x64": "0.5.108"
26
26
  },
27
27
  "scripts": {
28
28
  "postinstall": "node npm/bincheck.mjs",