kimi-code/packages/agent-core/test/profile/context.test.ts

68 lines
2.6 KiB
TypeScript

import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'pathe';
import { localKaos } from '@moonshot-ai/kaos';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { loadAgentsMd } from '../../src/profile/context';
let homeDir: string;
let workDir: string;
beforeEach(async () => {
homeDir = await mkdtemp(join(tmpdir(), 'kimi-agents-home-'));
workDir = await mkdtemp(join(tmpdir(), 'kimi-agents-work-'));
vi.spyOn(localKaos, 'gethome').mockReturnValue(homeDir);
});
afterEach(async () => {
vi.restoreAllMocks();
await rm(homeDir, { recursive: true, force: true });
await rm(workDir, { recursive: true, force: true });
});
describe('loadAgentsMd user-level discovery', () => {
it('loads user-level branded and generic files before project-level', async () => {
await mkdir(join(homeDir, '.kimi-code'), { recursive: true });
await writeFile(join(homeDir, '.kimi-code', 'AGENTS.md'), 'user branded', 'utf-8');
await mkdir(join(homeDir, '.agents'), { recursive: true });
await writeFile(join(homeDir, '.agents', 'AGENTS.md'), 'user generic', 'utf-8');
await writeFile(join(workDir, 'AGENTS.md'), 'project instructions', 'utf-8');
const result = await loadAgentsMd(localKaos, workDir);
expect(result).toContain('user branded');
expect(result).toContain('user generic');
expect(result).toContain('project instructions');
expect(result.indexOf('user branded')).toBeLessThan(result.indexOf('user generic'));
expect(result.indexOf('user generic')).toBeLessThan(result.indexOf('project instructions'));
});
it('loads generic user-level .agents/AGENTS.md', async () => {
await mkdir(join(homeDir, '.agents'), { recursive: true });
await writeFile(join(homeDir, '.agents', 'AGENTS.md'), 'dot-agents generic', 'utf-8');
const result = await loadAgentsMd(localKaos, workDir);
expect(result).toContain('dot-agents generic');
});
it('falls back to project-level only when no user-level files exist', async () => {
await writeFile(join(workDir, 'AGENTS.md'), 'project only', 'utf-8');
const result = await loadAgentsMd(localKaos, workDir);
expect(result).toContain('project only');
expect(result).not.toContain(homeDir);
});
it('does not load the same file twice when the work dir is the home dir', async () => {
await mkdir(join(homeDir, '.kimi-code'), { recursive: true });
await writeFile(join(homeDir, '.kimi-code', 'AGENTS.md'), 'home branded', 'utf-8');
const result = await loadAgentsMd(localKaos, homeDir);
expect(result.split('home branded').length - 1).toBe(1);
});
});