56 lines
1.9 KiB
TypeScript
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();
|