import { describe, it, expect } from 'vitest' import { detectThinkingBudget } from '../../src/agent/agent.js' describe('detectThinkingBudget', () => { it('returns 32000 for "ultrathink"', () => { expect(detectThinkingBudget('ultrathink')).toBe(32_000) }) it('returns 32000 for "ultrathink" case-insensitive', () => { expect(detectThinkingBudget('ULTRATHINK please')).toBe(32_000) }) it('returns 32000 for "think harder"', () => { expect(detectThinkingBudget('think harder about this')).toBe(32_000) }) it('returns 32000 for "think harder" — debe superar "think hard" que viene después', () => { expect(detectThinkingBudget('please think harder now')).toBe(32_000) }) it('returns 10000 for "think hard"', () => { expect(detectThinkingBudget('think hard about the algorithm')).toBe(10_000) }) it('returns 10000 for "think hard" case-insensitive', () => { expect(detectThinkingBudget('THINK HARD!')).toBe(10_000) }) it('returns 4000 for bare "think"', () => { expect(detectThinkingBudget('I think this is wrong')).toBe(4_000) }) it('returns 4000 for "think" as a word boundary', () => { expect(detectThinkingBudget('think about it')).toBe(4_000) }) it('returns 0 for "rethink" — no word-boundary match', () => { expect(detectThinkingBudget('rethink the approach')).toBe(0) }) it('returns 0 for "thinking" — \bthink\b does not match inside "thinking"', () => { // \bthink\b requires a non-word char after the k, but "thinking" has 'i' → no match expect(detectThinkingBudget('I was thinking about it')).toBe(0) }) it('returns 0 for unrelated prompt', () => { expect(detectThinkingBudget('fix the bug in login.ts')).toBe(0) }) it('returns 0 for empty string', () => { expect(detectThinkingBudget('')).toBe(0) }) it('ultrathink takes precedence over think hard', () => { expect(detectThinkingBudget('ultrathink and think hard')).toBe(32_000) }) })