allow agy to be one of the commit agent

This commit is contained in:
Jinjing
2026-06-07 19:31:37 -07:00
parent 76cb846d68
commit 474ca5f20d
2 changed files with 84 additions and 1 deletions
+56 -1
View File
@@ -10,6 +10,7 @@ import {
isCustomAgentId,
listCommitMessageAgentCapabilities,
listCommitMessageAgentIds,
parseAntigravityModels,
parseCodexModels,
parseCursorModels,
parseLineModels,
@@ -20,7 +21,17 @@ import {
describe('COMMIT_MESSAGE_AGENT_SPECS', () => {
it('exposes the installed local agents as commit-message agents', () => {
const ids = listCommitMessageAgentIds().sort()
expect(ids).toEqual(['amp', 'claude', 'codex', 'copilot', 'cursor', 'kimi', 'opencode', 'pi'])
expect(ids).toEqual([
'amp',
'antigravity',
'claude',
'codex',
'copilot',
'cursor',
'kimi',
'opencode',
'pi'
])
})
it('uses the strongest available defaults for core agents', () => {
@@ -255,6 +266,30 @@ describe('model discovery parsers', () => {
}
])
})
it('parses Antigravity model output', () => {
const output = [
'Gemini 3.5 Flash (Medium)',
'Gemini 3.5 Flash (High)',
'Gemini 3.5 Flash (Low)',
'Gemini 3.1 Pro (Low)',
'Gemini 3.1 Pro (High)',
'Claude Sonnet 4.6 (Thinking)',
'Claude Opus 4.6 (Thinking)',
'GPT-OSS 120B (Medium)'
].join('\n')
expect(parseAntigravityModels(output)).toEqual([
{ id: 'Gemini 3.5 Flash (Medium)', label: 'Gemini 3.5 Flash (Medium)' },
{ id: 'Gemini 3.5 Flash (High)', label: 'Gemini 3.5 Flash (High)' },
{ id: 'Gemini 3.5 Flash (Low)', label: 'Gemini 3.5 Flash (Low)' },
{ id: 'Gemini 3.1 Pro (Low)', label: 'Gemini 3.1 Pro (Low)' },
{ id: 'Gemini 3.1 Pro (High)', label: 'Gemini 3.1 Pro (High)' },
{ id: 'Claude Sonnet 4.6 (Thinking)', label: 'Claude Sonnet 4.6 (Thinking)' },
{ id: 'Claude Opus 4.6 (Thinking)', label: 'Claude Opus 4.6 (Thinking)' },
{ id: 'GPT-OSS 120B (Medium)', label: 'GPT-OSS 120B (Medium)' }
])
})
})
describe('buildArgs (Codex)', () => {
@@ -295,3 +330,23 @@ describe('buildArgs (Codex)', () => {
expect(args).not.toContain('-c')
})
})
describe('buildArgs (Antigravity)', () => {
const spec = getCommitMessageAgentSpec('antigravity')!
it('runs agy with --print, --sandbox, and --model flags', () => {
const args = spec.buildArgs({ prompt: '', model: 'Gemini 3.5 Flash (Medium)' })
expect(args).toEqual(['--print', '--sandbox', '--model', 'Gemini 3.5 Flash (Medium)'])
expect(spec.promptDelivery).toBe('stdin')
})
it('uses dynamic model discovery via agy models', () => {
expect(spec.modelSource).toBe('dynamic')
expect(spec.modelDiscovery?.binary).toBe('agy')
expect(spec.modelDiscovery?.args).toEqual(['models'])
})
it('uses Gemini 3.5 Flash (Medium) as default model', () => {
expect(COMMIT_MESSAGE_AGENT_SPECS.antigravity?.defaultModelId).toBe('Gemini 3.5 Flash (Medium)')
})
})
+28
View File
@@ -205,6 +205,19 @@ export function parseCursorModels(stdout: string): CommitMessageModel[] {
)
}
export function parseAntigravityModels(stdout: string): CommitMessageModel[] {
return uniqueModels(
stdout
.split(/\r?\n/)
.map((line) => line.trim())
.filter((line) => line.length > 0)
.map((id) => ({
id,
label: id
}))
)
}
export const COMMIT_MESSAGE_AGENT_SPECS: Partial<Record<TuiAgent, CommitMessageAgentSpec>> = {
claude: {
id: 'claude',
@@ -568,6 +581,21 @@ export const COMMIT_MESSAGE_AGENT_SPECS: Partial<Record<TuiAgent, CommitMessageA
}
],
defaultModelId: 'gpt-5.4'
},
antigravity: {
id: 'antigravity',
label: 'Antigravity',
binary: 'agy',
promptDelivery: 'stdin',
buildArgs: ({ model }) => ['--print', '--sandbox', '--model', model],
modelSource: 'dynamic',
modelDiscovery: { binary: 'agy', args: ['models'], parse: parseAntigravityModels },
models: [
{ id: 'Gemini 3.5 Flash (Medium)', label: 'Gemini 3.5 Flash (Medium)' },
{ id: 'Gemini 3.5 Flash (High)', label: 'Gemini 3.5 Flash (High)' },
{ id: 'Gemini 3.5 Flash (Low)', label: 'Gemini 3.5 Flash (Low)' }
],
defaultModelId: 'Gemini 3.5 Flash (Medium)'
}
}