diff --git a/apps/server/src/common/helpers/prosemirror/html/generateHTML.ts b/apps/server/src/common/helpers/prosemirror/html/generateHTML.ts index 52196aa2..c55a8d88 100644 --- a/apps/server/src/common/helpers/prosemirror/html/generateHTML.ts +++ b/apps/server/src/common/helpers/prosemirror/html/generateHTML.ts @@ -16,11 +16,12 @@ import { getHTMLFromFragment } from './getHTMLFromFragment'; * ``` */ export function generateHTML(doc: JSONContent, extensions: Extensions): string { - if (typeof window !== 'undefined') { - throw new Error( - 'generateHTML can only be used in a Node environment\nIf you want to use this in a browser environment, use the `@tiptap/html` import instead.', - ); - } + // No global-`window` guard here: this helper is server-only and self-contained + // (it serializes via `getHTMLFromFragment`, which creates its own happy-dom + // `Window` and never reads the global `window`). A guard on `typeof window` + // would be a false positive whenever a global `window` is injected into the + // Node process (e.g. by the in-process MCP module, which sets `global.window` + // via jsdom). const schema = getSchema(extensions); const contentNode = Node.fromJSON(schema, doc); diff --git a/apps/server/src/common/helpers/prosemirror/html/generateJSON.ts b/apps/server/src/common/helpers/prosemirror/html/generateJSON.ts index bd6e735c..771c87c0 100644 --- a/apps/server/src/common/helpers/prosemirror/html/generateJSON.ts +++ b/apps/server/src/common/helpers/prosemirror/html/generateJSON.ts @@ -21,11 +21,11 @@ export function generateJSON( extensions: Extensions, options?: ParseOptions, ): Record { - if (typeof window !== 'undefined') { - throw new Error( - 'generateJSON can only be used in a Node environment\nIf you want to use this in a browser environment, use the `@tiptap/html` import instead.', - ); - } + // No global-`window` guard here: this helper is server-only and self-contained + // (it creates its own happy-dom `Window` below and never reads the global + // `window`). A guard on `typeof window` would be a false positive whenever a + // global `window` is injected into the Node process (e.g. by the in-process + // MCP module, which sets `global.window` via jsdom). const localWindow = new Window(); const localDOMParser = new localWindow.DOMParser(); diff --git a/packages/mcp/src/client.ts b/packages/mcp/src/client.ts index a2e60336..9873d119 100644 --- a/packages/mcp/src/client.ts +++ b/packages/mcp/src/client.ts @@ -732,7 +732,9 @@ export class DocmostClient { // Always fetch subpages to provide context to the agent let subpages: any[] = []; try { - subpages = await this.listSidebarPages(resultData.spaceId, pageId); + // `pageId` may be a slugId, but the sidebar-pages endpoint requires the + // UUID; `resultData.id` holds the resolved UUID returned by getPageRaw. + subpages = await this.listSidebarPages(resultData.spaceId, resultData.id); } catch (e: any) { console.warn("Failed to fetch subpages:", e); }