diff --git a/Dockerfile b/Dockerfile index 02a35ffcf..1f3b57df4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-alpine AS base +FROM node:22-slim AS base LABEL org.opencontainers.image.source="https://github.com/docmost/docmost" FROM base AS builder @@ -13,7 +13,9 @@ RUN pnpm build FROM base AS installer -RUN apk add --no-cache curl bash +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl bash \ + && rm -rf /var/lib/apt/lists/* WORKDIR /app diff --git a/apps/client/package.json b/apps/client/package.json index 9d45fa071..db92ac240 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -1,7 +1,7 @@ { "name": "client", "private": true, - "version": "0.24.0", + "version": "0.24.1", "scripts": { "dev": "vite", "build": "tsc && vite build", diff --git a/apps/client/src/ee/ai/services/ai-search-service.ts b/apps/client/src/ee/ai/services/ai-search-service.ts index 0254f5b25..759a104ae 100644 --- a/apps/client/src/ee/ai/services/ai-search-service.ts +++ b/apps/client/src/ee/ai/services/ai-search-service.ts @@ -37,14 +37,18 @@ export async function askAi( let answer = ""; let sources: any[] = []; + let buffer = ""; if (reader) { while (true) { const { done, value } = await reader.read(); if (done) break; - const chunk = decoder.decode(value); - const lines = chunk.split("\n"); + buffer += decoder.decode(value, { stream: true }); + const lines = buffer.split("\n"); + + // Keep the last incomplete line in the buffer + buffer = lines.pop() || ""; for (const line of lines) { if (line.startsWith("data: ")) { diff --git a/apps/server/package.json b/apps/server/package.json index c662a7acf..d7c48f07b 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -1,6 +1,6 @@ { "name": "server", - "version": "0.24.0", + "version": "0.24.1", "description": "", "author": "", "private": true, diff --git a/apps/server/src/ee b/apps/server/src/ee index 18e00b186..075761c2d 160000 --- a/apps/server/src/ee +++ b/apps/server/src/ee @@ -1 +1 @@ -Subproject commit 18e00b18666060e43906740fd28c8a64800637c8 +Subproject commit 075761c2d9bcae7adcc3de4b1c5b8f8c3b315878 diff --git a/apps/server/src/integrations/environment/environment.validation.ts b/apps/server/src/integrations/environment/environment.validation.ts index 752e3d416..5ac1b11b4 100644 --- a/apps/server/src/integrations/environment/environment.validation.ts +++ b/apps/server/src/integrations/environment/environment.validation.ts @@ -117,7 +117,7 @@ export class EnvironmentVariables { @IsOptional() @ValidateIf((obj) => obj.AI_EMBEDDING_DIMENSION) - @IsIn(['768', '1024', '1536']) + @IsIn(['768', '1024', '1536', '2000']) @IsString() AI_EMBEDDING_DIMENSION: string; diff --git a/apps/server/src/main.ts b/apps/server/src/main.ts index 8a2719302..79340d6e6 100644 --- a/apps/server/src/main.ts +++ b/apps/server/src/main.ts @@ -15,10 +15,12 @@ async function bootstrap() { const app = await NestFactory.create( AppModule, new FastifyAdapter({ - ignoreTrailingSlash: true, - ignoreDuplicateSlashes: true, - maxParamLength: 1000, trustProxy: true, + routerOptions: { + maxParamLength: 1000, + ignoreTrailingSlash: true, + ignoreDuplicateSlashes: true, + }, }), { rawBody: true, diff --git a/package.json b/package.json index 7b8bcaa32..5b14428c5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "docmost", "homepage": "https://docmost.com", - "version": "0.24.0", + "version": "0.24.1", "private": true, "scripts": { "build": "nx run-many -t build", diff --git a/packages/editor-ext/src/lib/utils.ts b/packages/editor-ext/src/lib/utils.ts index 31faf7e9e..350ab3bbf 100644 --- a/packages/editor-ext/src/lib/utils.ts +++ b/packages/editor-ext/src/lib/utils.ts @@ -1,10 +1,9 @@ import { Editor, findParentNode, isTextSelection } from "@tiptap/core"; -import { EditorState, Selection, Transaction } from '@tiptap/pm/state'; +import { EditorState, Selection, Transaction } from "@tiptap/pm/state"; +import { EditorView } from "@tiptap/pm/view"; import { CellSelection, TableMap } from "@tiptap/pm/tables"; import { Node, ResolvedPos } from "@tiptap/pm/model"; -import { Table } from "@tiptap/extension-table"; import { sanitizeUrl as braintreeSanitizeUrl } from "@braintree/sanitize-url"; -import { EditorView } from '@tiptap/pm/view'; import { customAlphabet } from "nanoid"; export const isRectSelected = (rect: any) => (selection: CellSelection) => { @@ -288,11 +287,7 @@ export const isColumnGripSelected = ({ const nodeDOM = view.nodeDOM(from) as HTMLElement; const node = nodeDOM || domAtPos; - if ( - !editor.isActive(Table.name) || - !node || - isTableSelected(state.selection) - ) { + if (!editor.isActive("table") || !node || isTableSelected(state.selection)) { return false; } @@ -325,11 +320,7 @@ export const isRowGripSelected = ({ const nodeDOM = view.nodeDOM(from) as HTMLElement; const node = nodeDOM || domAtPos; - if ( - !editor.isActive(Table.name) || - !node || - isTableSelected(state.selection) - ) { + if (!editor.isActive("table") || !node || isTableSelected(state.selection)) { return false; }