@iinm/plain-agent 1.0.0

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.
Files changed (79) hide show
  1. package/.config/agents.library/code-simplifier.md +5 -0
  2. package/.config/agents.library/qa-engineer.md +74 -0
  3. package/.config/agents.library/software-architect.md +278 -0
  4. package/.config/agents.predefined/worker.md +3 -0
  5. package/.config/config.predefined.json +825 -0
  6. package/.config/prompts.library/code-review.md +8 -0
  7. package/.config/prompts.library/feature-dev.md +6 -0
  8. package/.config/prompts.predefined/shortcuts/commit-by-user.md +9 -0
  9. package/.config/prompts.predefined/shortcuts/commit.md +10 -0
  10. package/.config/prompts.predefined/shortcuts/general-question.md +6 -0
  11. package/LICENSE +21 -0
  12. package/README.md +624 -0
  13. package/bin/plain +3 -0
  14. package/bin/plain-interrupt +6 -0
  15. package/bin/plain-notify-desktop +19 -0
  16. package/bin/plain-notify-terminal-bell +3 -0
  17. package/package.json +57 -0
  18. package/sandbox/bin/plain-sandbox +972 -0
  19. package/src/agent.d.ts +48 -0
  20. package/src/agent.mjs +159 -0
  21. package/src/agentLoop.mjs +369 -0
  22. package/src/agentState.mjs +41 -0
  23. package/src/cliArgs.mjs +45 -0
  24. package/src/cliFormatter.mjs +217 -0
  25. package/src/cliInteractive.mjs +739 -0
  26. package/src/config.d.ts +48 -0
  27. package/src/config.mjs +168 -0
  28. package/src/context/consumeInterruptMessage.mjs +30 -0
  29. package/src/context/loadAgentRoles.mjs +272 -0
  30. package/src/context/loadPrompts.mjs +312 -0
  31. package/src/context/loadUserMessageContext.mjs +147 -0
  32. package/src/env.mjs +46 -0
  33. package/src/main.mjs +202 -0
  34. package/src/mcp.mjs +202 -0
  35. package/src/model.d.ts +109 -0
  36. package/src/modelCaller.mjs +29 -0
  37. package/src/modelDefinition.d.ts +73 -0
  38. package/src/prompt.mjs +128 -0
  39. package/src/providers/anthropic.d.ts +248 -0
  40. package/src/providers/anthropic.mjs +596 -0
  41. package/src/providers/gemini.d.ts +208 -0
  42. package/src/providers/gemini.mjs +752 -0
  43. package/src/providers/openai.d.ts +281 -0
  44. package/src/providers/openai.mjs +551 -0
  45. package/src/providers/openaiCompatible.d.ts +147 -0
  46. package/src/providers/openaiCompatible.mjs +658 -0
  47. package/src/providers/platform/azure.mjs +42 -0
  48. package/src/providers/platform/bedrock.mjs +74 -0
  49. package/src/providers/platform/googleCloud.mjs +34 -0
  50. package/src/subagent.mjs +247 -0
  51. package/src/tmpfile.mjs +27 -0
  52. package/src/tool.d.ts +74 -0
  53. package/src/toolExecutor.mjs +236 -0
  54. package/src/toolInputValidator.mjs +183 -0
  55. package/src/toolUseApprover.mjs +98 -0
  56. package/src/tools/askGoogle.mjs +135 -0
  57. package/src/tools/delegateToSubagent.d.ts +4 -0
  58. package/src/tools/delegateToSubagent.mjs +48 -0
  59. package/src/tools/execCommand.d.ts +22 -0
  60. package/src/tools/execCommand.mjs +200 -0
  61. package/src/tools/fetchWebPage.mjs +96 -0
  62. package/src/tools/patchFile.d.ts +4 -0
  63. package/src/tools/patchFile.mjs +96 -0
  64. package/src/tools/reportAsSubagent.d.ts +3 -0
  65. package/src/tools/reportAsSubagent.mjs +44 -0
  66. package/src/tools/tavilySearch.d.ts +6 -0
  67. package/src/tools/tavilySearch.mjs +57 -0
  68. package/src/tools/tmuxCommand.d.ts +14 -0
  69. package/src/tools/tmuxCommand.mjs +194 -0
  70. package/src/tools/writeFile.d.ts +4 -0
  71. package/src/tools/writeFile.mjs +56 -0
  72. package/src/utils/evalJSONConfig.mjs +48 -0
  73. package/src/utils/matchValue.d.ts +6 -0
  74. package/src/utils/matchValue.mjs +40 -0
  75. package/src/utils/noThrow.mjs +31 -0
  76. package/src/utils/notify.mjs +28 -0
  77. package/src/utils/parseFileRange.mjs +18 -0
  78. package/src/utils/readFileRange.mjs +33 -0
  79. package/src/utils/retryOnError.mjs +41 -0
@@ -0,0 +1,825 @@
1
+ {
2
+ "autoApproval": {
3
+ "defaultAction": "ask",
4
+ "maxApprovals": 50,
5
+ "patterns": [
6
+ {
7
+ "toolName": "exec_command",
8
+ "input": { "command": { "$regex": "^(find|grep)$" } },
9
+ "action": "deny",
10
+ "reason": "Use rg or fd instead"
11
+ },
12
+ {
13
+ "toolName": "exec_command",
14
+ "input": {
15
+ "command": "fd",
16
+ "args": {
17
+ "$has": {
18
+ "$regex": "^(--unrestricted|--no-ignore|--exec|--exec-batch|--follow|-[^-]*[uIxXL])"
19
+ }
20
+ }
21
+ },
22
+ "action": "ask"
23
+ },
24
+ {
25
+ "toolName": "exec_command",
26
+ "input": {
27
+ "command": "rg",
28
+ "args": {
29
+ "$has": {
30
+ "$regex": "^(--unrestricted|--no-ignore|--follow|-[^-]*[uL])"
31
+ }
32
+ }
33
+ },
34
+ "action": "ask"
35
+ },
36
+ {
37
+ "toolName": { "$regex": "^(delegate_to_subagent|report_as_subagent)$" },
38
+ "action": "allow"
39
+ },
40
+ {
41
+ "toolName": "exec_command",
42
+ "input": {
43
+ "command": {
44
+ "$regex": "^(echo|ls|cat|head|tail|wc|nl|date|pwd|uname|fd|rg|jq)$"
45
+ }
46
+ },
47
+ "action": "allow"
48
+ },
49
+ {
50
+ "toolName": "exec_command",
51
+ "input": {
52
+ "command": "sed",
53
+ "args": ["-n", { "$regex": "^\\d+(,\\d+)?(p|l)$" }]
54
+ },
55
+ "action": "allow"
56
+ },
57
+ {
58
+ "toolName": "exec_command",
59
+ "input": {
60
+ "command": "git",
61
+ "args": [{ "$regex": "^(status|diff|log|show|ls-remote|rev-parse)$" }]
62
+ },
63
+ "action": "allow"
64
+ },
65
+ {
66
+ "toolName": "exec_command",
67
+ "input": { "command": "git", "args": ["branch", "--show-current"] },
68
+ "action": "allow"
69
+ },
70
+ {
71
+ "toolName": "exec_command",
72
+ "input": { "command": "docker", "args": [{ "$regex": "^(ps|logs)$" }] },
73
+ "action": "allow"
74
+ },
75
+ {
76
+ "toolName": "exec_command",
77
+ "input": {
78
+ "command": "docker",
79
+ "args": ["compose", { "$regex": "^(ps|logs)$" }]
80
+ },
81
+ "action": "allow"
82
+ },
83
+ {
84
+ "toolName": "tmux_command",
85
+ "input": { "command": { "$regex": "^(list-sessions|list-windows)$" } },
86
+ "action": "allow"
87
+ },
88
+ {
89
+ "toolName": "exec_command",
90
+ "input": {
91
+ "command": "gh",
92
+ "args": ["pr", { "$regex": "^(list|view|diff)$" }]
93
+ },
94
+ "action": "allow"
95
+ },
96
+ {
97
+ "toolName": "exec_command",
98
+ "input": {
99
+ "command": "gh",
100
+ "args": ["issue", { "$regex": "^(list|view)$" }]
101
+ },
102
+ "action": "allow"
103
+ },
104
+ {
105
+ "toolName": "exec_command",
106
+ "input": {
107
+ "command": "gh",
108
+ "args": ["search"]
109
+ },
110
+ "action": "allow"
111
+ },
112
+ {
113
+ "toolName": "exec_command",
114
+ "input": {
115
+ "command": "gh",
116
+ "args": [
117
+ "api",
118
+ "--method",
119
+ "GET",
120
+ { "$regex": "^repos/[^/]+/[^/]+/(pulls|issues)/" }
121
+ ]
122
+ },
123
+ "action": "allow"
124
+ }
125
+ ]
126
+ },
127
+ "models": [
128
+ {
129
+ "name": "claude-haiku-4-5",
130
+ "variant": "thinking-16k",
131
+ "platform": {
132
+ "name": "anthropic",
133
+ "variant": "default",
134
+ "baseURL": "https://api.anthropic.com"
135
+ },
136
+ "model": {
137
+ "format": "anthropic",
138
+ "config": {
139
+ "model": "claude-haiku-4-5",
140
+ "max_tokens": 32768,
141
+ "thinking": { "type": "enabled", "budget_tokens": 16384 }
142
+ }
143
+ }
144
+ },
145
+ {
146
+ "name": "claude-haiku-4-5",
147
+ "variant": "thinking-32k",
148
+ "platform": {
149
+ "name": "anthropic",
150
+ "variant": "default",
151
+ "baseURL": "https://api.anthropic.com"
152
+ },
153
+ "model": {
154
+ "format": "anthropic",
155
+ "config": {
156
+ "model": "claude-haiku-4-5",
157
+ "max_tokens": 64000,
158
+ "thinking": { "type": "enabled", "budget_tokens": 32768 }
159
+ }
160
+ }
161
+ },
162
+ {
163
+ "name": "claude-sonnet-4-6",
164
+ "variant": "thinking-16k",
165
+ "platform": {
166
+ "name": "anthropic",
167
+ "variant": "default",
168
+ "baseURL": "https://api.anthropic.com"
169
+ },
170
+ "model": {
171
+ "format": "anthropic",
172
+ "config": {
173
+ "model": "claude-sonnet-4-6",
174
+ "max_tokens": 32768,
175
+ "thinking": { "type": "enabled", "budget_tokens": 16384 }
176
+ }
177
+ }
178
+ },
179
+ {
180
+ "name": "claude-sonnet-4-6",
181
+ "variant": "thinking-32k",
182
+ "platform": {
183
+ "name": "anthropic",
184
+ "variant": "default",
185
+ "baseURL": "https://api.anthropic.com"
186
+ },
187
+ "model": {
188
+ "format": "anthropic",
189
+ "config": {
190
+ "model": "claude-sonnet-4-6",
191
+ "max_tokens": 64000,
192
+ "thinking": { "type": "enabled", "budget_tokens": 32768 }
193
+ }
194
+ }
195
+ },
196
+ {
197
+ "name": "claude-opus-4-6",
198
+ "variant": "thinking-16k",
199
+ "platform": {
200
+ "name": "anthropic",
201
+ "variant": "default",
202
+ "baseURL": "https://api.anthropic.com"
203
+ },
204
+ "model": {
205
+ "format": "anthropic",
206
+ "config": {
207
+ "model": "claude-opus-4-6",
208
+ "max_tokens": 32768,
209
+ "thinking": { "type": "enabled", "budget_tokens": 16384 }
210
+ }
211
+ }
212
+ },
213
+ {
214
+ "name": "claude-opus-4-6",
215
+ "variant": "thinking-32k",
216
+ "platform": {
217
+ "name": "anthropic",
218
+ "variant": "default",
219
+ "baseURL": "https://api.anthropic.com"
220
+ },
221
+ "model": {
222
+ "format": "anthropic",
223
+ "config": {
224
+ "model": "claude-opus-4-6",
225
+ "max_tokens": 64000,
226
+ "thinking": { "type": "enabled", "budget_tokens": 32768 }
227
+ }
228
+ }
229
+ },
230
+
231
+ {
232
+ "name": "claude-haiku-4-5",
233
+ "variant": "thinking-16k-bedrock",
234
+ "platform": {
235
+ "name": "bedrock",
236
+ "variant": "default"
237
+ },
238
+ "model": {
239
+ "format": "anthropic",
240
+ "config": {
241
+ "model": "global.anthropic.claude-haiku-4-5-20251001-v1:0",
242
+ "max_tokens": 32768,
243
+ "thinking": { "type": "enabled", "budget_tokens": 16384 }
244
+ }
245
+ }
246
+ },
247
+ {
248
+ "name": "claude-haiku-4-5",
249
+ "variant": "thinking-32k-bedrock",
250
+ "platform": {
251
+ "name": "bedrock",
252
+ "variant": "default"
253
+ },
254
+ "model": {
255
+ "format": "anthropic",
256
+ "config": {
257
+ "model": "global.anthropic.claude-haiku-4-5-20251001-v1:0",
258
+ "max_tokens": 64000,
259
+ "thinking": { "type": "enabled", "budget_tokens": 32768 }
260
+ }
261
+ }
262
+ },
263
+ {
264
+ "name": "claude-sonnet-4-6",
265
+ "variant": "thinking-16k-bedrock",
266
+ "platform": {
267
+ "name": "bedrock",
268
+ "variant": "default"
269
+ },
270
+ "model": {
271
+ "format": "anthropic",
272
+ "config": {
273
+ "model": "global.anthropic.claude-sonnet-4-6",
274
+ "max_tokens": 32768,
275
+ "thinking": { "type": "enabled", "budget_tokens": 16384 }
276
+ }
277
+ }
278
+ },
279
+ {
280
+ "name": "claude-sonnet-4-6",
281
+ "variant": "thinking-32k-bedrock",
282
+ "platform": {
283
+ "name": "bedrock",
284
+ "variant": "default"
285
+ },
286
+ "model": {
287
+ "format": "anthropic",
288
+ "config": {
289
+ "model": "global.anthropic.claude-sonnet-4-6",
290
+ "max_tokens": 64000,
291
+ "thinking": { "type": "enabled", "budget_tokens": 32768 }
292
+ }
293
+ }
294
+ },
295
+ {
296
+ "name": "claude-opus-4-6",
297
+ "variant": "thinking-16k-bedrock",
298
+ "platform": {
299
+ "name": "bedrock",
300
+ "variant": "default"
301
+ },
302
+ "model": {
303
+ "format": "anthropic",
304
+ "config": {
305
+ "model": "global.anthropic.claude-opus-4-6-v1",
306
+ "max_tokens": 32768,
307
+ "thinking": { "type": "enabled", "budget_tokens": 16384 }
308
+ }
309
+ }
310
+ },
311
+ {
312
+ "name": "claude-opus-4-6",
313
+ "variant": "thinking-32k-bedrock",
314
+ "platform": {
315
+ "name": "bedrock",
316
+ "variant": "default"
317
+ },
318
+ "model": {
319
+ "format": "anthropic",
320
+ "config": {
321
+ "model": "global.anthropic.claude-opus-4-6-v1",
322
+ "max_tokens": 64000,
323
+ "thinking": { "type": "enabled", "budget_tokens": 32768 }
324
+ }
325
+ }
326
+ },
327
+
328
+ {
329
+ "name": "gemini-3-flash-preview",
330
+ "variant": "thinking-medium",
331
+ "platform": {
332
+ "name": "gemini",
333
+ "variant": "default",
334
+ "baseURL": "https://generativelanguage.googleapis.com/v1beta"
335
+ },
336
+ "model": {
337
+ "format": "gemini",
338
+ "config": {
339
+ "model": "gemini-3-flash-preview",
340
+ "config": {
341
+ "requestConfig": {
342
+ "generationConfig": {
343
+ "maxOutputTokens": 32768,
344
+ "thinkingConfig": {
345
+ "includeThoughts": true,
346
+ "thinkingLevel": "medium"
347
+ }
348
+ }
349
+ }
350
+ }
351
+ }
352
+ }
353
+ },
354
+ {
355
+ "name": "gemini-3-flash-preview",
356
+ "variant": "thinking-high",
357
+ "platform": {
358
+ "name": "gemini",
359
+ "variant": "default",
360
+ "baseURL": "https://generativelanguage.googleapis.com/v1beta"
361
+ },
362
+ "model": {
363
+ "format": "gemini",
364
+ "config": {
365
+ "model": "gemini-3-flash-preview",
366
+ "config": {
367
+ "requestConfig": {
368
+ "generationConfig": {
369
+ "maxOutputTokens": 65536,
370
+ "thinkingConfig": {
371
+ "includeThoughts": true,
372
+ "thinkingLevel": "high"
373
+ }
374
+ }
375
+ }
376
+ }
377
+ }
378
+ }
379
+ },
380
+ {
381
+ "name": "gemini-3.1-pro-preview",
382
+ "variant": "thinking-medium",
383
+ "platform": {
384
+ "name": "gemini",
385
+ "variant": "default",
386
+ "baseURL": "https://generativelanguage.googleapis.com/v1beta"
387
+ },
388
+ "model": {
389
+ "format": "gemini",
390
+ "config": {
391
+ "model": "gemini-3.1-pro-preview",
392
+ "config": {
393
+ "requestConfig": {
394
+ "generationConfig": {
395
+ "maxOutputTokens": 32768,
396
+ "thinkingConfig": {
397
+ "includeThoughts": true,
398
+ "thinkingLevel": "medium"
399
+ }
400
+ }
401
+ }
402
+ }
403
+ }
404
+ }
405
+ },
406
+ {
407
+ "name": "gemini-3.1-pro-preview",
408
+ "variant": "thinking-high",
409
+ "platform": {
410
+ "name": "gemini",
411
+ "variant": "default",
412
+ "baseURL": "https://generativelanguage.googleapis.com/v1beta"
413
+ },
414
+ "model": {
415
+ "format": "gemini",
416
+ "config": {
417
+ "model": "gemini-3.1-pro-preview",
418
+ "config": {
419
+ "requestConfig": {
420
+ "generationConfig": {
421
+ "maxOutputTokens": 65536,
422
+ "thinkingConfig": {
423
+ "includeThoughts": true,
424
+ "thinkingLevel": "high"
425
+ }
426
+ }
427
+ }
428
+ }
429
+ }
430
+ }
431
+ },
432
+
433
+ {
434
+ "name": "gemini-3-flash-preview",
435
+ "variant": "thinking-medium-vertex-ai",
436
+ "platform": {
437
+ "name": "vertex-ai",
438
+ "variant": "default"
439
+ },
440
+ "model": {
441
+ "format": "gemini",
442
+ "config": {
443
+ "model": "gemini-3-flash-preview",
444
+ "config": {
445
+ "requestConfig": {
446
+ "generationConfig": {
447
+ "maxOutputTokens": 32768,
448
+ "thinkingConfig": {
449
+ "includeThoughts": true,
450
+ "thinkingLevel": "medium"
451
+ }
452
+ }
453
+ }
454
+ }
455
+ }
456
+ }
457
+ },
458
+ {
459
+ "name": "gemini-3-flash-preview",
460
+ "variant": "thinking-high-vertex-ai",
461
+ "platform": {
462
+ "name": "vertex-ai",
463
+ "variant": "default"
464
+ },
465
+ "model": {
466
+ "format": "gemini",
467
+ "config": {
468
+ "model": "gemini-3-flash-preview",
469
+ "config": {
470
+ "requestConfig": {
471
+ "generationConfig": {
472
+ "maxOutputTokens": 65536,
473
+ "thinkingConfig": {
474
+ "includeThoughts": true,
475
+ "thinkingLevel": "high"
476
+ }
477
+ }
478
+ }
479
+ }
480
+ }
481
+ }
482
+ },
483
+ {
484
+ "name": "gemini-3.1-pro-preview",
485
+ "variant": "thinking-medium-vertex-ai",
486
+ "platform": {
487
+ "name": "vertex-ai",
488
+ "variant": "default"
489
+ },
490
+ "model": {
491
+ "format": "gemini",
492
+ "config": {
493
+ "model": "gemini-3.1-pro-preview",
494
+ "config": {
495
+ "requestConfig": {
496
+ "generationConfig": {
497
+ "maxOutputTokens": 32768,
498
+ "thinkingConfig": {
499
+ "includeThoughts": true,
500
+ "thinkingLevel": "medium"
501
+ }
502
+ }
503
+ }
504
+ }
505
+ }
506
+ }
507
+ },
508
+ {
509
+ "name": "gemini-3.1-pro-preview",
510
+ "variant": "thinking-high-vertex-ai",
511
+ "platform": {
512
+ "name": "vertex-ai",
513
+ "variant": "default"
514
+ },
515
+ "model": {
516
+ "format": "gemini",
517
+ "config": {
518
+ "model": "gemini-3.1-pro-preview",
519
+ "config": {
520
+ "requestConfig": {
521
+ "generationConfig": {
522
+ "maxOutputTokens": 65536,
523
+ "thinkingConfig": {
524
+ "includeThoughts": true,
525
+ "thinkingLevel": "high"
526
+ }
527
+ }
528
+ }
529
+ }
530
+ }
531
+ }
532
+ },
533
+
534
+ {
535
+ "name": "gpt-5.4-mini",
536
+ "variant": "thinking-medium",
537
+ "platform": {
538
+ "name": "openai",
539
+ "variant": "default",
540
+ "baseURL": "https://api.openai.com"
541
+ },
542
+ "model": {
543
+ "format": "openai-responses",
544
+ "config": {
545
+ "model": "gpt-5.4-mini",
546
+ "reasoning": { "effort": "medium", "summary": "auto" },
547
+ "store": false,
548
+ "include": ["reasoning.encrypted_content"]
549
+ }
550
+ }
551
+ },
552
+ {
553
+ "name": "gpt-5.4-mini",
554
+ "variant": "thinking-high",
555
+ "platform": {
556
+ "name": "openai",
557
+ "variant": "default",
558
+ "baseURL": "https://api.openai.com"
559
+ },
560
+ "model": {
561
+ "format": "openai-responses",
562
+ "config": {
563
+ "model": "gpt-5.4-mini",
564
+ "reasoning": { "effort": "high", "summary": "auto" },
565
+ "store": false,
566
+ "include": ["reasoning.encrypted_content"]
567
+ }
568
+ }
569
+ },
570
+ {
571
+ "name": "gpt-5.4-mini",
572
+ "variant": "thinking-xhigh",
573
+ "platform": {
574
+ "name": "openai",
575
+ "variant": "default",
576
+ "baseURL": "https://api.openai.com"
577
+ },
578
+ "model": {
579
+ "format": "openai-responses",
580
+ "config": {
581
+ "model": "gpt-5.4-mini",
582
+ "reasoning": { "effort": "xhigh", "summary": "auto" },
583
+ "store": false,
584
+ "include": ["reasoning.encrypted_content"]
585
+ }
586
+ }
587
+ },
588
+ {
589
+ "name": "gpt-5.4",
590
+ "variant": "thinking-medium",
591
+ "platform": {
592
+ "name": "openai",
593
+ "variant": "default",
594
+ "baseURL": "https://api.openai.com"
595
+ },
596
+ "model": {
597
+ "format": "openai-responses",
598
+ "config": {
599
+ "model": "gpt-5.4",
600
+ "reasoning": { "effort": "medium", "summary": "auto" },
601
+ "store": false,
602
+ "include": ["reasoning.encrypted_content"]
603
+ }
604
+ }
605
+ },
606
+ {
607
+ "name": "gpt-5.4",
608
+ "variant": "thinking-high",
609
+ "platform": {
610
+ "name": "openai",
611
+ "variant": "default",
612
+ "baseURL": "https://api.openai.com"
613
+ },
614
+ "model": {
615
+ "format": "openai-responses",
616
+ "config": {
617
+ "model": "gpt-5.4",
618
+ "reasoning": { "effort": "high", "summary": "auto" },
619
+ "store": false,
620
+ "include": ["reasoning.encrypted_content"]
621
+ }
622
+ }
623
+ },
624
+ {
625
+ "name": "gpt-5.4",
626
+ "variant": "thinking-xhigh",
627
+ "platform": {
628
+ "name": "openai",
629
+ "variant": "default",
630
+ "baseURL": "https://api.openai.com"
631
+ },
632
+ "model": {
633
+ "format": "openai-responses",
634
+ "config": {
635
+ "model": "gpt-5.4",
636
+ "reasoning": { "effort": "xhigh", "summary": "auto" },
637
+ "store": false,
638
+ "include": ["reasoning.encrypted_content"]
639
+ }
640
+ }
641
+ },
642
+
643
+ {
644
+ "name": "gpt-5.2-chat",
645
+ "variant": "thinking-medium-azure",
646
+ "platform": {
647
+ "name": "azure",
648
+ "variant": "default"
649
+ },
650
+ "model": {
651
+ "format": "openai-responses",
652
+ "config": {
653
+ "model": "gpt-5.2-latest",
654
+ "reasoning": { "effort": "medium", "summary": "auto" }
655
+ }
656
+ }
657
+ },
658
+
659
+ {
660
+ "name": "grok-4-1-fast-reasoning",
661
+ "variant": "default",
662
+ "platform": {
663
+ "name": "openai",
664
+ "variant": "xai",
665
+ "baseURL": "https://api.x.ai"
666
+ },
667
+ "model": {
668
+ "format": "openai-messages",
669
+ "config": {
670
+ "model": "grok-4-1-fast-reasoning"
671
+ }
672
+ }
673
+ },
674
+ {
675
+ "name": "grok-4.20-0309-reasoning",
676
+ "variant": "default",
677
+ "platform": {
678
+ "name": "openai",
679
+ "variant": "xai",
680
+ "baseURL": "https://api.x.ai"
681
+ },
682
+ "model": {
683
+ "format": "openai-messages",
684
+ "config": {
685
+ "model": "grok-4.20-0309-reasoning"
686
+ }
687
+ }
688
+ },
689
+
690
+ {
691
+ "name": "glm-5",
692
+ "variant": "vertex-ai",
693
+ "platform": {
694
+ "name": "vertex-ai",
695
+ "variant": "default"
696
+ },
697
+ "model": {
698
+ "format": "openai-messages",
699
+ "config": {
700
+ "model": "zai-org/glm-5-maas"
701
+ }
702
+ }
703
+ },
704
+ {
705
+ "name": "glm-5",
706
+ "variant": "ollama",
707
+ "platform": {
708
+ "name": "openai",
709
+ "variant": "ollama"
710
+ },
711
+ "model": {
712
+ "format": "openai-responses",
713
+ "config": {
714
+ "model": "glm-5:cloud"
715
+ }
716
+ }
717
+ },
718
+ {
719
+ "name": "glm-5",
720
+ "variant": "huggingface",
721
+ "platform": {
722
+ "name": "openai",
723
+ "variant": "huggingface"
724
+ },
725
+ "model": {
726
+ "format": "openai-messages",
727
+ "config": {
728
+ "model": "zai-org/GLM-5:novita"
729
+ }
730
+ }
731
+ },
732
+
733
+ {
734
+ "name": "kimi-k2.5",
735
+ "variant": "bedrock",
736
+ "platform": {
737
+ "name": "bedrock",
738
+ "variant": "default"
739
+ },
740
+ "model": {
741
+ "format": "openai-messages",
742
+ "config": {
743
+ "model": "moonshotai.kimi-k2.5",
744
+ "reasoning_effort": "high"
745
+ }
746
+ }
747
+ },
748
+
749
+ {
750
+ "name": "deepseek-v3.2",
751
+ "variant": "vertex-ai",
752
+ "platform": {
753
+ "name": "vertex-ai",
754
+ "variant": "default"
755
+ },
756
+ "model": {
757
+ "format": "openai-messages",
758
+ "config": {
759
+ "model": "deepseek-ai/deepseek-v3.2-maas",
760
+ "chat_template_kwargs": { "thinking": true }
761
+ }
762
+ }
763
+ },
764
+ {
765
+ "name": "deepseek-v3.2",
766
+ "variant": "bedrock",
767
+ "platform": {
768
+ "name": "bedrock",
769
+ "variant": "default"
770
+ },
771
+ "model": {
772
+ "format": "openai-messages",
773
+ "config": {
774
+ "model": "deepseek.v3.2",
775
+ "reasoning_effort": "high"
776
+ }
777
+ }
778
+ },
779
+
780
+ {
781
+ "name": "minimax-m2.1",
782
+ "variant": "bedrock",
783
+ "platform": {
784
+ "name": "bedrock",
785
+ "variant": "default"
786
+ },
787
+ "model": {
788
+ "format": "openai-messages",
789
+ "config": {
790
+ "model": "minimax.minimax-m2.1",
791
+ "reasoning_effort": "high"
792
+ }
793
+ }
794
+ },
795
+ {
796
+ "name": "minimax-m2.7",
797
+ "variant": "ollama",
798
+ "platform": {
799
+ "name": "openai",
800
+ "variant": "ollama"
801
+ },
802
+ "model": {
803
+ "format": "openai-responses",
804
+ "config": {
805
+ "model": "minimax-m2.7:cloud"
806
+ }
807
+ }
808
+ },
809
+
810
+ {
811
+ "name": "qwen3-next",
812
+ "variant": "vertex-ai",
813
+ "platform": {
814
+ "name": "vertex-ai",
815
+ "variant": "default"
816
+ },
817
+ "model": {
818
+ "format": "openai-messages",
819
+ "config": {
820
+ "model": "qwen/qwen3-next-80b-a3b-thinking-maas"
821
+ }
822
+ }
823
+ }
824
+ ]
825
+ }