feat(coding): add preview data runtime session
This commit is contained in:
@@ -32,6 +32,7 @@ import {
|
||||
} from './coding-provider-auth';
|
||||
import { createCodingProductHost, type CodingProductComposition } from './coding-product-services';
|
||||
import { createDataServiceOperations } from '../services/data-service-client';
|
||||
import { createPreviewDataSessionManager, type PreviewDataSessionManager } from '../services/preview-data-session';
|
||||
import { archivePiConversationSession } from '../coding-runtime/pi/resource-loader';
|
||||
import { resolveLegacyProjectModel } from '../coding-projects/legacy-v1';
|
||||
|
||||
@@ -164,6 +165,7 @@ export function createCodingComposition(
|
||||
? { acquireBackgroundLease: options.acquireBackgroundLease }
|
||||
: {}),
|
||||
});
|
||||
let previewDataSession: PreviewDataSessionManager | undefined;
|
||||
const projects = new CodingProjectService(projectStore, {
|
||||
migration: {
|
||||
resolveLegacyModel: async ({ legacyModel }) => resolveLegacyProjectModel(
|
||||
@@ -180,9 +182,11 @@ export function createCodingComposition(
|
||||
for (const conversation of conversations) registry.forget(conversation.id);
|
||||
},
|
||||
onProjectIdentityChanging: async (project) => {
|
||||
previewDataSession?.invalidate('project_identity_changed');
|
||||
await options.browser.close(project.path);
|
||||
},
|
||||
onProjectDeactivated: async (project, reason) => {
|
||||
previewDataSession?.invalidate('project_deactivated');
|
||||
const conversations = await conversationStoreForProject(project.path).read()
|
||||
.then((file) => file.conversations)
|
||||
.catch(() => []);
|
||||
@@ -208,9 +212,16 @@ export function createCodingComposition(
|
||||
});
|
||||
const dataService = createDataServiceOperations({ projects });
|
||||
productTools.configureDataService(dataService);
|
||||
previewDataSession = createPreviewDataSessionManager({ projects });
|
||||
const unsubscribeBrowserLifecycle = typeof options.browser.subscribeLifecycle === 'function'
|
||||
? options.browser.subscribeLifecycle((event) => {
|
||||
previewDataSession?.handleAgentBrowserLifecycle(event);
|
||||
})
|
||||
: () => undefined;
|
||||
return {
|
||||
attachments,
|
||||
dataService,
|
||||
previewDataSession,
|
||||
productTools,
|
||||
projects,
|
||||
conversations,
|
||||
@@ -224,6 +235,8 @@ export function createCodingComposition(
|
||||
)));
|
||||
},
|
||||
async shutdown() {
|
||||
previewDataSession?.dispose();
|
||||
unsubscribeBrowserLifecycle();
|
||||
await subagents.close();
|
||||
await runtime.shutdown();
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user