Files
memind/mindspace-local-runtime-services.mjs
T
john d3239ff292 fix: MindSpace remote sync, thumbnail fallback, and Plaza URL guards
Ensure page sync runs via pageSyncService in remote mode, fall back to
workspace HTML when storage assets are missing, and prevent production
Portal from linking to loopback Plaza URLs baked in at build time.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 07:57:04 +08:00

101 lines
2.9 KiB
JavaScript

import { createAssetService } from './mindspace-assets.mjs';
import { createConversationPackageRegistry } from './mindspace-conversation-package-registry.mjs';
import { createConversationPackageStore } from './mindspace-conversation-package-store.mjs';
import { createCleanupService } from './mindspace-cleanup.mjs';
import { createAgentJobService } from './mindspace-agent-jobs.mjs';
import { createAssetAgentService } from './mindspace-asset-agent.mjs';
import { createPageLiveEditService } from './mindspace-page-live-edit.mjs';
import { createPageService } from './mindspace-pages.mjs';
import { createPageSyncService } from './mindspace-page-sync-service.mjs';
import { createPublicationService } from './mindspace-publications.mjs';
import { createMindSpaceLocalRuntime } from './mindspace-runtime-config.mjs';
export function createMindSpaceLocalRuntimeServices({
pool,
h5Root,
env = process.env,
maxFileBytes,
publicPageLimit,
resolveUserIdForAgentSession,
conversationPackageBackfill,
conversationPackagePublicHtmlHydrator,
logger = console,
syncWorkspaceAssets = null,
} = {}) {
let conversationPackageRegistry = null;
const runtime = createMindSpaceLocalRuntime({
h5Root,
env,
logger,
conversationPackageBackfill: ({ user, sessionId }) =>
conversationPackageBackfill?.({
user,
sessionId,
storageRoot: runtime.storageRoot,
registry: conversationPackageRegistry,
}),
conversationPackagePublicHtmlHydrator,
});
conversationPackageRegistry = createConversationPackageRegistry({
store: createConversationPackageStore(pool),
service: runtime.serviceFacade,
});
const assetService = createAssetService(pool, {
h5Root,
storageRoot: runtime.storageRoot,
maxFileBytes,
conversationPackageRegistry,
});
const pageService = createPageService(pool, {
h5Root,
storageRoot: runtime.storageRoot,
conversationPackageRegistry,
});
const pageSyncService = createPageSyncService({
pool,
pageService,
assetService,
h5Root,
syncWorkspaceAssets,
logger,
});
const publicationService = createPublicationService(pool, {
h5Root,
storageRoot: runtime.storageRoot,
publicPageLimit,
conversationPackageRegistry,
});
const cleanupService = createCleanupService(pool, {
storageRoot: runtime.storageRoot,
h5Root,
});
const agentJobService = createAgentJobService(pool, {
pageService,
storageRoot: runtime.storageRoot,
maxOutputBytes: maxFileBytes,
});
const pageLiveEditService = createPageLiveEditService({
pageService,
resolveUserIdForAgentSession,
});
const assetAgentService = createAssetAgentService({
assetService,
resolveUserIdForAgentSession,
});
return {
...runtime,
conversationPackageRegistry,
assetService,
pageService,
pageSyncService,
publicationService,
cleanupService,
agentJobService,
pageLiveEditService,
assetAgentService,
};
}