Files
ide/test/test.agent-runtime.node.ts
T

56 lines
1.9 KiB
TypeScript

import { tap, expect } from '@git.zone/tstest/tapbundle';
import * as fs from 'node:fs/promises';
import * as os from 'node:os';
import * as path from 'node:path';
import { GitZoneAgentRuntime, type IAgentEventEnvelope, type IAgentProjectContext } from '../applications/electron-shell/ts/agent-runtime.js';
const createProjectContext = (instanceId: string): IAgentProjectContext => ({
instanceId,
title: 'Persisted Project',
path: '/srv/work/persisted-project',
runtimeRoot: '/tmp/gitzone-ide-runtime-test',
target: {
id: 'dev-box',
hostAlias: 'dev-box',
hostName: 'dev.example.com',
user: 'deploy',
port: 2222,
},
batchMode: true,
});
tap.test('should persist agent sessions by remote project context', async () => {
const persistenceRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'gitzone-agent-runtime-'));
try {
const events: IAgentEventEnvelope[] = [];
const firstRuntime = new GitZoneAgentRuntime(
(payload) => events.push(payload),
(instanceId) => createProjectContext(instanceId),
persistenceRoot,
);
const createdSession = await firstRuntime.createSession({
instanceId: 'first-instance',
title: 'Persisted Chat',
});
firstRuntime.dispose();
const secondRuntime = new GitZoneAgentRuntime(
() => undefined,
(instanceId) => createProjectContext(instanceId),
persistenceRoot,
);
const sessions = await secondRuntime.listSessions({ instanceId: 'second-instance' });
secondRuntime.dispose();
expect(createdSession.title).toEqual('Persisted Chat');
expect(events.some((payload) => payload.event.type === 'session.created')).toEqual(true);
expect(sessions).toHaveLength(1);
expect(sessions[0]!.id).toEqual(createdSession.id);
expect(sessions[0]!.title).toEqual('Persisted Chat');
} finally {
await fs.rm(persistenceRoot, { recursive: true, force: true });
}
});
export default tap.start();