fix(pi): reopen persisted conversation sessions
This commit is contained in:
@@ -123,8 +123,11 @@ describe('managed Pi worker opener', () => {
|
||||
const telemetry: PiRuntimeTelemetryEvent[] = [];
|
||||
const registry = new PiSessionRegistry({ projectStore });
|
||||
const extensionHost = new PiManagedExtensionHost();
|
||||
const opener = createPiManagedWorkerOpener({
|
||||
registry,
|
||||
const createOpener = (
|
||||
openerRegistry: PiSessionRegistry,
|
||||
createSessionKey: () => string = () => 'session-key-a',
|
||||
) => createPiManagedWorkerOpener({
|
||||
registry: openerRegistry,
|
||||
executablePath: 'electron.exe',
|
||||
cliPath: 'pi-cli.js',
|
||||
userDataDir,
|
||||
@@ -132,7 +135,7 @@ describe('managed Pi worker opener', () => {
|
||||
extensionHost,
|
||||
loadProviderInput: async () => ({ accounts: [account], modelSummaries: [] }),
|
||||
resolveCredential: async () => 'provider-secret-value',
|
||||
createSessionKey: () => 'session-key-a',
|
||||
createSessionKey,
|
||||
onTelemetry: (event) => telemetry.push(event),
|
||||
createProcess: (options) => {
|
||||
processOptions.push(options);
|
||||
@@ -140,6 +143,7 @@ describe('managed Pi worker opener', () => {
|
||||
return new OpenerFakeProcess(options.additionalArgs?.[sessionIndex + 1] ?? '', options);
|
||||
},
|
||||
});
|
||||
const opener = createOpener(registry);
|
||||
|
||||
const first = await opener({
|
||||
conversation: input,
|
||||
@@ -152,10 +156,23 @@ describe('managed Pi worker opener', () => {
|
||||
revision: { provider: 2, resources: 1 },
|
||||
existingSession: first.session,
|
||||
});
|
||||
const restartedCreateSessionKey = vi.fn(() => 'unexpected-new-session-key');
|
||||
const restarted = await createOpener(
|
||||
new PiSessionRegistry({ projectStore }),
|
||||
restartedCreateSessionKey,
|
||||
)({
|
||||
conversation: input,
|
||||
generation: 3,
|
||||
revision: { provider: 2, resources: 1 },
|
||||
});
|
||||
|
||||
expect(first.session).toEqual({ piSessionId: 'session-key-a', sessionKey: 'session-key-a' });
|
||||
expect(reopened.session).toEqual(first.session);
|
||||
expect(processOptions).toHaveLength(2);
|
||||
expect(restarted.session).toEqual(first.session);
|
||||
expect(restartedCreateSessionKey).not.toHaveBeenCalled();
|
||||
expect(processOptions).toHaveLength(3);
|
||||
expect(processOptions[2]?.additionalArgs).toContain('session-key-a');
|
||||
expect(processOptions[2]?.additionalArgs).not.toContain('unexpected-new-session-key');
|
||||
for (const options of processOptions) {
|
||||
const argv = JSON.stringify(options.additionalArgs);
|
||||
expect(argv).toContain('--system-prompt');
|
||||
@@ -176,6 +193,7 @@ describe('managed Pi worker opener', () => {
|
||||
expect(telemetry.map(({ milestone }) => milestone)).toEqual([
|
||||
'resources.ready', 'worker.spawn', 'rpc.ready', 'session.open',
|
||||
'resources.ready', 'worker.spawn', 'rpc.ready', 'session.open',
|
||||
'resources.ready', 'worker.spawn', 'rpc.ready', 'session.open',
|
||||
]);
|
||||
expect(telemetry.slice(0, 4).every(({ cold }) => cold)).toBe(true);
|
||||
expect(telemetry.slice(4).every(({ cold }) => !cold)).toBe(true);
|
||||
@@ -184,6 +202,7 @@ describe('managed Pi worker opener', () => {
|
||||
expect(JSON.stringify(telemetry)).not.toContain('provider-secret-value');
|
||||
await first.worker.stop();
|
||||
await reopened.worker.stop();
|
||||
await restarted.worker.stop();
|
||||
await extensionHost.close();
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user