diff --git a/mindspace-chat-plaza.mjs b/mindspace-chat-plaza.mjs index 5e72f3f..f022f11 100644 --- a/mindspace-chat-plaza.mjs +++ b/mindspace-chat-plaza.mjs @@ -255,8 +255,7 @@ export async function quickPlazaFromChat({ mindSpacePages, mindSpacePublications, plazaPosts, - ensureWorkspaceHtmlThumbnail, - publishDir, + mindSpaceChatSave, }) { if (!mindSpacePages || !mindSpacePublications || !plazaPosts) { throw Object.assign(new Error('Plaza 或 MindSpace 未启用'), { code: 'plaza_unavailable' }); @@ -267,29 +266,26 @@ export async function quickPlazaFromChat({ userId: user.id, bundle, mindSpacePages, - ensureWorkspaceHtmlThumbnail, - publishDir, body, - skipThumbnail: !ensureWorkspaceHtmlThumbnail || !publishDir, + skipThumbnail: true, }); if ( analysis.contentMode === 'static_html' && analysis.relativePath && resolvedHtml?.content && - ensureWorkspaceHtmlThumbnail && - publishDir + mindSpaceChatSave?.ensurePreviewThumbnail ) { - await ensureWorkspaceHtmlThumbnail( - publishDir, - analysis.relativePath, - resolvedHtml.content, - { + await mindSpaceChatSave + .ensurePreviewThumbnail({ + userId: user.id, + relativePath: analysis.relativePath, + html: resolvedHtml.content, title: page.title, subtitle: page.summary, force: true, - }, - ).catch(() => {}); + }) + .catch(() => {}); } if (analysis.contentMode === 'static_html' && analysis.relativePath) { @@ -394,8 +390,7 @@ export async function quickPlazaFromPublicHtml({ mindSpacePublications, plazaPosts, readWorkspaceHtml, - ensureWorkspaceHtmlThumbnail, - publishDir, + mindSpaceChatSave, }) { if (!mindSpacePages || !mindSpacePublications || !plazaPosts) { throw Object.assign(new Error('Plaza 或 MindSpace 未启用'), { code: 'plaza_unavailable' }); @@ -421,11 +416,16 @@ export async function quickPlazaFromPublicHtml({ }); const title = titleFromPublicHtml(content, normalized); - if (ensureWorkspaceHtmlThumbnail && publishDir) { - await ensureWorkspaceHtmlThumbnail(publishDir, normalized, content, { - title, - force: true, - }).catch(() => {}); + if (mindSpaceChatSave?.ensurePreviewThumbnail) { + await mindSpaceChatSave + .ensurePreviewThumbnail({ + userId: user.id, + relativePath: normalized, + html: content, + title, + force: true, + }) + .catch(() => {}); } const page = await ensureWorkspaceHtmlPageForPlaza({ diff --git a/server/portal-mindspace-chat-share-routes.mjs b/server/portal-mindspace-chat-share-routes.mjs index 36ce8c8..75fb573 100644 --- a/server/portal-mindspace-chat-share-routes.mjs +++ b/server/portal-mindspace-chat-share-routes.mjs @@ -3,8 +3,6 @@ import { quickPlazaFromChat, quickPlazaFromPublicHtml, } from '../mindspace-chat-plaza.mjs'; -import { resolveMindSpaceUserPublishDir } from '../mindspace-runtime-config.mjs'; -import { ensureWorkspaceHtmlThumbnail } from '../mindspace-workspace-thumbnails.mjs'; function assertRouter(api) { if ( @@ -43,8 +41,6 @@ export function attachPortalMindSpaceChatShareRoutes( getQuickPlazaFromPublicHtmlStatusFn = getQuickPlazaFromPublicHtmlStatus, quickPlazaFromPublicHtmlFn = quickPlazaFromPublicHtml, - ensureWorkspaceHtmlThumbnailFn = ensureWorkspaceHtmlThumbnail, - resolveMindSpaceUserPublishDirFn = resolveMindSpaceUserPublishDir, now = Date.now, logger = console, } = {}, @@ -100,9 +96,10 @@ export function attachPortalMindSpaceChatShareRoutes( api.post('/mindspace/v1/pages/quick-plaza-from-chat', async (req, res) => { const pages = getMindSpacePages(); + const chatSave = getMindSpaceChatSave(); const publications = getMindSpacePublications(); const plazaPosts = getPlazaPosts(); - if (!pages || !publications || !plazaPosts) { + if (!pages || !chatSave || !publications || !plazaPosts) { return sendError( res, req, @@ -118,7 +115,6 @@ export function attachPortalMindSpaceChatShareRoutes( h5Root, req.body, ); - const publishDir = resolveMindSpaceUserPublishDirFn(h5Root, req.currentUser); const result = await quickPlazaFromChatFn({ user: req.currentUser, bundle, @@ -126,8 +122,7 @@ export function attachPortalMindSpaceChatShareRoutes( mindSpacePages: pages, mindSpacePublications: publications, plazaPosts, - ensureWorkspaceHtmlThumbnail: ensureWorkspaceHtmlThumbnailFn, - publishDir, + mindSpaceChatSave: chatSave, }); logger.info('[quick-plaza] ok', { ms: now() - startedAt, @@ -221,7 +216,6 @@ export function attachPortalMindSpaceChatShareRoutes( req.body?.relativePath ?? '', ).trim(); - const publishDir = resolveMindSpaceUserPublishDirFn(h5Root, req.currentUser); const result = await quickPlazaFromPublicHtmlFn({ user: req.currentUser, relativePath, @@ -230,8 +224,7 @@ export function attachPortalMindSpaceChatShareRoutes( plazaPosts, readWorkspaceHtml: (input) => chatSave.readWorkspaceHtml(input), - ensureWorkspaceHtmlThumbnail: ensureWorkspaceHtmlThumbnailFn, - publishDir, + mindSpaceChatSave: chatSave, }); const plazaUrl = resolvePlazaPostUrl( result.post.id, diff --git a/server/portal-mindspace-chat-share-routes.test.mjs b/server/portal-mindspace-chat-share-routes.test.mjs index 4bbb4b7..4b5f288 100644 --- a/server/portal-mindspace-chat-share-routes.test.mjs +++ b/server/portal-mindspace-chat-share-routes.test.mjs @@ -1,8 +1,6 @@ import assert from 'node:assert/strict'; import test from 'node:test'; import { attachPortalMindSpaceChatShareRoutes } from './portal-mindspace-chat-share-routes.mjs'; -import { resolveMindSpaceUserPublishDir } from '../mindspace-runtime-config.mjs'; -import { ensureWorkspaceHtmlThumbnail } from '../mindspace-workspace-thumbnails.mjs'; function createRouterRecorder() { const routes = new Map(); @@ -196,8 +194,7 @@ test('quick Plaza from chat preserves dependencies, timing, result, and errors', mindSpacePages: dependencies.services.pages, mindSpacePublications: dependencies.services.publications, plazaPosts: dependencies.services.plazaPosts, - ensureWorkspaceHtmlThumbnail, - publishDir: resolveMindSpaceUserPublishDir('/workspace', req.currentUser), + mindSpaceChatSave: dependencies.services.chatSave, }); const failureApi = createRouterRecorder();