/** * C2 regression: MainAgent missing 7 states * Validates that MainAgentState includes all spec states, * AWAITING_CONFIRMATION is removed, and new methods exist. * * Uses source inspection (reading the source file as text). */ import { describe, it, expect } from 'bun:test' import { readFileSync } from 'fs' import { join } from 'path' const source_path = join(import.meta.dir, '../../src/agents/main/MainAgent.ts') const source = readFileSync(source_path, 'utf-8') describe('C2: MainAgent states audit', () => { const required_states = [ 'CLASSIFYING', 'SCHEDULING', 'ARCHITECTURE_DESIGNING', 'CONFIRMING', 'EXECUTING', 'INTERRUPTING', 'ARCHITECTURE_REVISING', ] for (const state of required_states) { it(`MainAgentState includes ${state}`, () => { // Check that the state appears in the type definition expect(source).toContain(`'${state}'`) }) } it('MainAgentState does not include legacy AWAITING_CONFIRMATION', () => { // The type definition should not contain AWAITING_CONFIRMATION // Extract the type definition block const type_match = source.match(/export type MainAgentState\s*=\s*([\s\S]*?)(?:\n\n|\nexport)/) expect(type_match).not.toBeNull() expect(type_match![1]).not.toContain('AWAITING_CONFIRMATION') }) it('handle_interruption method exists', () => { expect(source).toContain('handle_interruption(') // Verify it accepts the three change levels expect(source).toContain("'execution'") expect(source).toContain("'design'") expect(source).toContain("'full'") }) it('handle_user_message transitions through CLASSIFYING', () => { // The handle_user_message method should set state to CLASSIFYING // before calling classify expect(source).toContain("this.state = 'CLASSIFYING'") // Verify it appears before the classify call const classifying_idx = source.indexOf("this.state = 'CLASSIFYING'") const classify_call_idx = source.indexOf('this.classify(message)') expect(classifying_idx).toBeGreaterThan(-1) expect(classify_call_idx).toBeGreaterThan(-1) expect(classifying_idx).toBeLessThan(classify_call_idx) }) it('classify still uses regex (Alpha scope)', () => { // Verify the classify method uses regex patterns expect(source).toContain('/^(what|how|why|when|where|who') expect(source).toContain('/^(implement|create|build|write|add|fix') expect(source).toContain('/^(run|execute|test|debug|check|inspect') }) it('transition methods exist', () => { expect(source).toContain('transition_to_confirming()') expect(source).toContain('transition_to_executing()') expect(source).toContain('transition_to_interrupting()') }) it('handle_confirmation references CONFIRMING not AWAITING_CONFIRMATION', () => { expect(source).toContain("this.state !== 'CONFIRMING'") expect(source).not.toContain('AWAITING_CONFIRMATION') }) })