import { describe, it, expect } from 'vitest' import { DatabaseSync } from 'node:sqlite' import { migrate } from '../../src/main/db/migrate' import { AiSessionRepository } from '../../src/main/db/repositories/ai-session.repo' import { InteractiveWritingService } from '../../src/main/services/interactive-writing.service' import { AiClientService } from '../../src/main/services/ai-client.service' import { DEFAULT_AI_CONFIG } from '../../src/shared/types' const AI_TEST_CONFIG = { ...DEFAULT_AI_CONFIG, timeoutMs: 240_000, maxTokens: 4096 } describe('interactive plots integration', () => { it('IT-INT-01: suggestPlots returns 3 options from LM Studio', async () => { const db = new DatabaseSync(':memory:') migrate(db) const session = new AiSessionRepository(db).create('t', AI_TEST_CONFIG.model) const service = new InteractiveWritingService(db, new AiClientService(() => AI_TEST_CONFIG)) const flow = service.start(session.id) service.confirmContext( flow.id, { chapterIds: [], outlineIds: [], settingIds: [], inspirationIds: [] }, '林远参加宗门入门考核,演武场测灵石前众人围观。' ) const plots = await service.suggestPlots(flow.id) expect(plots).toHaveLength(3) db.close() }, 180_000) })