basant307/AI_Governance_Project
048
1/**2 * @license3 * Copyright 2025 Google LLC4 * SPDX-License-Identifier: Apache-2.05 */6 7import * as fs from 'node:fs/promises';8import * as os from 'node:os';9import * as path from 'node:path';10import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';11import type { Config } from '../config/config.js';12import { runManagedAutoMemoryDream } from './dream.js';13import { ensureAutoMemoryScaffold } from './store.js';14 15vi.mock('./dreamAgentPlanner.js', () => ({16 planManagedAutoMemoryDreamByAgent: vi.fn(),17}));18 19import { planManagedAutoMemoryDreamByAgent } from './dreamAgentPlanner.js';20 21describe('managed auto-memory dream', () => {22 let tempDir: string;23 let projectRoot: string;24 let mockConfig: Config;25 26 beforeEach(async () => {27 tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'auto-memory-dream-'));28 projectRoot = path.join(tempDir, 'project');29 await fs.mkdir(projectRoot, { recursive: true });30 await ensureAutoMemoryScaffold(projectRoot);31 vi.mocked(planManagedAutoMemoryDreamByAgent).mockReset();32 mockConfig = {33 getSessionId: vi.fn().mockReturnValue('session-1'),34 getModel: vi.fn().mockReturnValue('qwen-test'),35 getApprovalMode: vi.fn(),36 } as unknown as Config;37 });38 39 afterEach(async () => {40 await fs.rm(tempDir, {41 recursive: true,42 force: true,43 maxRetries: 3,44 retryDelay: 10,45 });46 });47 48 it('throws when config is missing', async () => {49 await expect(runManagedAutoMemoryDream(projectRoot)).rejects.toThrow(50 'Managed auto-memory dream requires config',51 );52 });53 54 it('returns touched topics derived from files touched by the dream agent', async () => {55 vi.mocked(planManagedAutoMemoryDreamByAgent).mockResolvedValue({56 status: 'completed',57 finalText: 'Merged duplicate user memories.',58 filesTouched: [59 path.join(projectRoot, '.qwen', 'memory', 'user', 'prefs.md'),60 path.join(projectRoot, '.qwen', 'memory', 'reference', 'dash.md'),61 ],62 });63 64 const result = await runManagedAutoMemoryDream(65 projectRoot,66 new Date('2026-04-02T00:00:00.000Z'),67 mockConfig,68 );69 70 expect(result.touchedTopics).toEqual(71 expect.arrayContaining(['user', 'reference']),72 );73 expect(result.dedupedEntries).toBe(0);74 expect(result.systemMessage).toContain(75 'Managed auto-memory dream (agent):',76 );77 });78 79 it('propagates planner failures', async () => {80 vi.mocked(planManagedAutoMemoryDreamByAgent).mockRejectedValue(81 new Error('agent failed'),82 );83 84 await expect(85 runManagedAutoMemoryDream(86 projectRoot,87 new Date('2026-04-02T00:00:00.000Z'),88 mockConfig,89 ),90 ).rejects.toThrow('agent failed');91 });92});93 