From 8aed316c980a83f847223a9f7de90abfeafd0868 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 13 Apr 2026 16:24:45 -0700 Subject: [PATCH 1/3] upgrade minimax to m2.7 --- agents/librarian/librarian.ts | 2 +- agents/tmux-cli.ts | 2 +- common/src/constants/free-agents.ts | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/agents/librarian/librarian.ts b/agents/librarian/librarian.ts index 69dd157181..8498648c48 100644 --- a/agents/librarian/librarian.ts +++ b/agents/librarian/librarian.ts @@ -9,7 +9,7 @@ const librarian: AgentDefinition = { id: 'librarian', publisher, displayName: 'Librarian', - model: 'minimax/minimax-m2.5', + model: 'minimax/minimax-m2.7', spawnerPrompt: 'Spawn the librarian agent to shallow-clone a GitHub repository into /tmp and answer questions about its code, structure, or documentation. The agent returns structured output with `answer`, `relevantFiles` (absolute paths in the cloned repo), and `cloneDir`. You can use `run_terminal_command` with `cat` to read the returned `relevantFiles` paths. Clean up `cloneDir` with `rm -rf` when done.', diff --git a/agents/tmux-cli.ts b/agents/tmux-cli.ts index 3a7877ae6e..a03066dab5 100644 --- a/agents/tmux-cli.ts +++ b/agents/tmux-cli.ts @@ -71,7 +71,7 @@ const outputSchema = { const definition: AgentDefinition = { id: 'tmux-cli', displayName: 'Tmux CLI Agent', - model: 'minimax/minimax-m2.5', + model: 'minimax/minimax-m2.7', // Provider options are tightly coupled to the model choice above. // If you change the model, update these accordingly. providerOptions: { diff --git a/common/src/constants/free-agents.ts b/common/src/constants/free-agents.ts index 3a9f5c9166..551500f3f5 100644 --- a/common/src/constants/free-agents.ts +++ b/common/src/constants/free-agents.ts @@ -18,7 +18,7 @@ export const FREE_COST_MODE = 'free' as const */ export const FREE_MODE_AGENT_MODELS: Record> = { // Root orchestrator - 'base2-free': new Set(['minimax/minimax-m2.5', 'z-ai/glm-5.1']), + 'base2-free': new Set(['minimax/minimax-m2.7', 'z-ai/glm-5.1']), // File exploration agents 'file-picker': new Set(['google/gemini-2.5-flash-lite']), @@ -33,10 +33,10 @@ export const FREE_MODE_AGENT_MODELS: Record> = { 'basher': new Set(['google/gemini-3.1-flash-lite-preview']), // Editor for free mode - 'editor-lite': new Set(['minimax/minimax-m2.5', 'z-ai/glm-5.1']), + 'editor-lite': new Set(['minimax/minimax-m2.7', 'z-ai/glm-5.1']), // Code reviewer for free mode - 'code-reviewer-lite': new Set(['minimax/minimax-m2.5', 'z-ai/glm-5.1']), + 'code-reviewer-lite': new Set(['minimax/minimax-m2.7', 'z-ai/glm-5.1']), // Thinker for free mode 'thinker-with-files-gemini': new Set(['google/gemini-3.1-pro-preview']), @@ -106,7 +106,7 @@ export function isFreeModeAllowedAgentModel( // Exact match first if (allowedModels.has(model)) return true - // OpenRouter may return dated variants (e.g. "minimax/minimax-m2.5-20260211") + // OpenRouter may return dated variants (e.g. "minimax/minimax-m2.7-20260211") // so also check if the returned model starts with any allowed model prefix. for (const allowed of allowedModels) { if (model.startsWith(allowed + '-')) return true From 88993e93fcd6364f6a4dd3ec752080c6066b7887 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 13 Apr 2026 16:26:06 -0700 Subject: [PATCH 2/3] Increase concurrency for buffbench --- evals/buffbench/main-nightly.ts | 2 +- evals/buffbench/main.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/evals/buffbench/main-nightly.ts b/evals/buffbench/main-nightly.ts index df3c6f0ea5..c96685c131 100644 --- a/evals/buffbench/main-nightly.ts +++ b/evals/buffbench/main-nightly.ts @@ -17,7 +17,7 @@ async function main() { const results = await runBuffBench({ evalDataPaths: [ path.join(__dirname, 'eval-codebuff.json')], agents: ['base2-free'], - taskConcurrency: 3, + taskConcurrency: 6, saveTraces, }) diff --git a/evals/buffbench/main.ts b/evals/buffbench/main.ts index aeb462abe3..471f6e6dbc 100644 --- a/evals/buffbench/main.ts +++ b/evals/buffbench/main.ts @@ -11,7 +11,7 @@ async function main() { await runBuffBench({ evalDataPaths: [path.join(__dirname, 'eval-codebuff.json')], agents: ['base2-free-evals'], - taskConcurrency: 5, + taskConcurrency: 10, saveTraces, }) From 96ffe5b11e2edc9e6e58f290f1628cac108a9e6f Mon Sep 17 00:00:00 2001 From: James Grugett Date: Mon, 13 Apr 2026 16:31:29 -0700 Subject: [PATCH 3/3] Switch base2 free to minimax 2.7 --- agents/__tests__/editor.test.ts | 22 +++++++++++----------- agents/base2/base2.ts | 2 +- agents/editor/editor-lite.ts | 2 +- agents/editor/editor.ts | 8 ++++---- agents/reviewer/code-reviewer-lite.ts | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/agents/__tests__/editor.test.ts b/agents/__tests__/editor.test.ts index 9e14909f89..5ccdc2da45 100644 --- a/agents/__tests__/editor.test.ts +++ b/agents/__tests__/editor.test.ts @@ -62,9 +62,9 @@ describe('editor agent', () => { expect(gpt5Editor.model).toBe('openai/gpt-5.1') }) - test('creates glm editor', () => { - const glmEditor = createCodeEditor({ model: 'glm' }) - expect(glmEditor.model).toBe('z-ai/glm-5.1') + test('creates minimax editor', () => { + const minimaxEditor = createCodeEditor({ model: 'minimax' }) + expect(minimaxEditor.model).toBe('minimax/minimax-m2.7') }) test('gpt-5 editor does not include think tags in instructions', () => { @@ -73,10 +73,10 @@ describe('editor agent', () => { expect(gpt5Editor.instructionsPrompt).not.toContain('') }) - test('glm editor does not include think tags in instructions', () => { - const glmEditor = createCodeEditor({ model: 'glm' }) - expect(glmEditor.instructionsPrompt).not.toContain('') - expect(glmEditor.instructionsPrompt).not.toContain('') + test('minimax editor does not include think tags in instructions', () => { + const minimaxEditor = createCodeEditor({ model: 'minimax' }) + expect(minimaxEditor.instructionsPrompt).not.toContain('') + expect(minimaxEditor.instructionsPrompt).not.toContain('') }) test('opus editor includes think tags in instructions', () => { @@ -88,17 +88,17 @@ describe('editor agent', () => { test('all variants have same base properties', () => { const opusEditor = createCodeEditor({ model: 'opus' }) const gpt5Editor = createCodeEditor({ model: 'gpt-5' }) - const glmEditor = createCodeEditor({ model: 'glm' }) + const minimaxEditor = createCodeEditor({ model: 'minimax' }) // All should have same basic structure expect(opusEditor.displayName).toBe(gpt5Editor.displayName) - expect(gpt5Editor.displayName).toBe(glmEditor.displayName) + expect(gpt5Editor.displayName).toBe(minimaxEditor.displayName) expect(opusEditor.outputMode).toBe(gpt5Editor.outputMode) - expect(gpt5Editor.outputMode).toBe(glmEditor.outputMode) + expect(gpt5Editor.outputMode).toBe(minimaxEditor.outputMode) expect(opusEditor.toolNames).toEqual(gpt5Editor.toolNames) - expect(gpt5Editor.toolNames).toEqual(glmEditor.toolNames) + expect(gpt5Editor.toolNames).toEqual(minimaxEditor.toolNames) }) }) diff --git a/agents/base2/base2.ts b/agents/base2/base2.ts index 22a58d82a9..cc6f381bc7 100644 --- a/agents/base2/base2.ts +++ b/agents/base2/base2.ts @@ -28,7 +28,7 @@ export function createBase2( return { publisher, - model: isFree ? 'z-ai/glm-5.1' : 'anthropic/claude-opus-4.6', + model: isFree ? 'minimax/minimax-m2.7' : 'anthropic/claude-opus-4.6', providerOptions: isFree ? { data_collection: 'deny', } : { diff --git a/agents/editor/editor-lite.ts b/agents/editor/editor-lite.ts index 29225f0c29..9cb5675b5e 100644 --- a/agents/editor/editor-lite.ts +++ b/agents/editor/editor-lite.ts @@ -3,7 +3,7 @@ import { createCodeEditor } from './editor' import type { AgentDefinition } from '../types/agent-definition' const definition: AgentDefinition = { - ...createCodeEditor({ model: 'glm' }), + ...createCodeEditor({ model: 'minimax' }), id: 'editor-lite', } export default definition diff --git a/agents/editor/editor.ts b/agents/editor/editor.ts index e191609ad2..2fc62d4d27 100644 --- a/agents/editor/editor.ts +++ b/agents/editor/editor.ts @@ -4,7 +4,7 @@ import { publisher } from '../constants' import type { AgentDefinition } from '../types/agent-definition' export const createCodeEditor = (options: { - model: 'gpt-5' | 'opus' | 'glm' + model: 'gpt-5' | 'opus' | 'minimax' }): Omit => { const { model } = options return { @@ -12,8 +12,8 @@ export const createCodeEditor = (options: { model: options.model === 'gpt-5' ? 'openai/gpt-5.1' - : options.model === 'glm' - ? 'z-ai/glm-5.1' + : options.model === 'minimax' + ? 'minimax/minimax-m2.7' : 'anthropic/claude-opus-4.6', ...(options.model === 'opus' && { providerOptions: { @@ -65,7 +65,7 @@ OR for new files or major rewrites: } -${model === 'gpt-5' || model === 'glm' +${model === 'gpt-5' || model === 'minimax' ? '' : `Before you start writing your implementation, you should use tags to think about the best way to implement the changes. diff --git a/agents/reviewer/code-reviewer-lite.ts b/agents/reviewer/code-reviewer-lite.ts index feafb87c45..ee017c24e6 100644 --- a/agents/reviewer/code-reviewer-lite.ts +++ b/agents/reviewer/code-reviewer-lite.ts @@ -5,7 +5,7 @@ import { createReviewer } from './code-reviewer' const definition: SecretAgentDefinition = { id: 'code-reviewer-lite', publisher, - ...createReviewer('z-ai/glm-5.1'), + ...createReviewer('minimax/minimax-m2.7'), } export default definition