feat(coding): add preview data runtime session

This commit is contained in:
2026-08-26 21:22:38 +08:00
parent bec67082b3
commit e842dd42eb
11 changed files with 1404 additions and 3 deletions

View File

@@ -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();
},