feat: integrate automatic game resource delivery
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
} from '../coding-projects/project-store';
|
||||
import { CodingConversationService } from '../coding-runtime/conversation-service';
|
||||
import { PiManagedExtensionHost } from '../coding-runtime/pi/extension-host';
|
||||
import { PiProjectWriteLeaseCoordinator } from '../coding-runtime/pi/write-lease';
|
||||
import { PiAgentServerProcess } from '../coding-runtime/pi/agent-server-process';
|
||||
import { PiManagedInputRevisionCoordinator } from '../coding-runtime/pi/managed-input-revision';
|
||||
import { PiProductTools } from '../coding-runtime/pi/product-tools';
|
||||
@@ -46,6 +47,10 @@ import {
|
||||
import { createDataServicePluginAdapter } from '../coding-plugins/adapters/data-service';
|
||||
import { createGameResourcePluginAdapter } from '../coding-plugins/adapters/game-resource';
|
||||
import { GameResourceClient } from '../services/game-resource-client';
|
||||
import {
|
||||
GameResourceDeliveryCoordinator,
|
||||
GameResourceDeliveryReceiptStore,
|
||||
} from '../services/game-resource-delivery';
|
||||
import { AccountPluginCache } from '../coding-plugins/account-plugin-cache';
|
||||
import {
|
||||
createMarketplaceClient,
|
||||
@@ -229,6 +234,7 @@ export function createCodingComposition(
|
||||
onGenerationChanged: async () => await invalidateDeviceResources(),
|
||||
});
|
||||
const devicePackageTools = new DevicePackageTools(devicePackageManager);
|
||||
const projectWriteLeases = new PiProjectWriteLeaseCoordinator();
|
||||
const productTools = new PiProductTools({
|
||||
browser: options.browser,
|
||||
attachments,
|
||||
@@ -245,7 +251,7 @@ export function createCodingComposition(
|
||||
}))
|
||||
: [],
|
||||
});
|
||||
const extensionHost = new PiManagedExtensionHost();
|
||||
const extensionHost = new PiManagedExtensionHost(projectWriteLeases);
|
||||
extensionHost.configureProductTools(productTools);
|
||||
const conversationStores = new Map<string, ReturnType<typeof createCodingConversationStore>>();
|
||||
const conversationStoreForProject = (projectPath: string) => {
|
||||
@@ -302,8 +308,26 @@ export function createCodingComposition(
|
||||
});
|
||||
const dataService = createDataServiceOperations({ projects });
|
||||
const dataServiceAdapter = createDataServicePluginAdapter(dataService);
|
||||
const gameResourceClient = new GameResourceClient();
|
||||
const gameResourceDelivery = new GameResourceDeliveryCoordinator({
|
||||
client: gameResourceClient,
|
||||
receipts: new GameResourceDeliveryReceiptStore(path.join(
|
||||
options.paths.userDataDir,
|
||||
'coding-runtime',
|
||||
'game-resource',
|
||||
'receipts.json',
|
||||
)),
|
||||
leases: projectWriteLeases,
|
||||
recordTouchedPaths: async (conversationId, runId, paths) => {
|
||||
await productTools.recordTouchedPaths(conversationId, runId, paths);
|
||||
},
|
||||
...(options.acquireBackgroundLease
|
||||
? { acquireBackgroundLease: options.acquireBackgroundLease }
|
||||
: {}),
|
||||
});
|
||||
const gameResourceAdapter = createGameResourcePluginAdapter({
|
||||
client: new GameResourceClient(),
|
||||
client: gameResourceClient,
|
||||
delivery: gameResourceDelivery,
|
||||
marketplace: marketplaceClient,
|
||||
packageStore,
|
||||
makeloreVersion: options.clientVersion ?? '2.0.0',
|
||||
@@ -474,8 +498,10 @@ export function createCodingComposition(
|
||||
await invalidateManagedResources();
|
||||
},
|
||||
});
|
||||
void gameResourceDelivery.resumePending().catch(() => undefined);
|
||||
const unsubscribeMarketplaceSession = subscribeWorksSquareSession(() => {
|
||||
void invalidateManagedResources();
|
||||
void gameResourceDelivery.resumePending().catch(() => undefined);
|
||||
});
|
||||
const host = createCodingProductHost({
|
||||
projects,
|
||||
@@ -520,6 +546,7 @@ export function createCodingComposition(
|
||||
await agentServer.stop();
|
||||
},
|
||||
async shutdown() {
|
||||
gameResourceDelivery.dispose();
|
||||
previewDataSession?.dispose();
|
||||
if (typeof options.browser.configurePreviewDataSession === 'function') {
|
||||
options.browser.configurePreviewDataSession(undefined);
|
||||
|
||||
Reference in New Issue
Block a user