File size: 1,171 Bytes
4e23b01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Shared engine bootstrap for klient integration tests. Mirrors what
 * kap-server does: `bootstrap()` plus the `ILogOptions` seed the
 * Session-scoped log writer needs (bare `bootstrap({ homeDir })` leaves
 * `logOptions` unregistered and any eager service depending on `ILogService`
 * fails to instantiate).
 */

import { mkdtemp } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';

import { bootstrap, logSeed, resolveLoggingConfig } from '@moonshot-ai/agent-core-v2';

/** Shared host identity for klient test engines (bootstrap requires one). */
export const TEST_CLIENT_IDENTITY = {
  productName: 'klient-test',
  version: '0.0.0-test',
  platform: 'test',
} as const;

export interface TestEngine {
  readonly homeDir: string;
  readonly app: ReturnType<typeof bootstrap>['app'];
}

export async function makeEngine(prefix = 'klient-test-engine-'): Promise<TestEngine> {
  const homeDir = await mkdtemp(join(tmpdir(), prefix));
  const { app } = bootstrap({ homeDir, clientIdentity: TEST_CLIENT_IDENTITY }, [
    ...logSeed(resolveLoggingConfig({ homeDir, env: process.env })),
  ]);
  return { homeDir, app };
}