fix: images, couverture, slash, agents, wizard, Stripe et admin
- Collage/accès images: ownership path userId + meta legacy, 403 non caché - Couverture note: explicite (choix/aucune), plus d’auto depuis le corps - Éditeur: suppression image TipTap, sync immédiate, toolbar réordonnée - Slash: listes par titre (plus d’index), keywords nettoyés - Agents: nextRun à la réactivation, cron sans stampede null - Wizard: titres courts + mode Expert plus robuste - Stripe checkout hosted fiable; admin métriques live; dark mode IA/settings - Indexation notes courtes + test unit aligné
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
* - Pas de race condition (verrou par noteId)
|
||||
*/
|
||||
|
||||
import { createHash } from 'crypto'
|
||||
import PQueue from 'p-queue'
|
||||
import { prisma } from '@/lib/prisma'
|
||||
import { embeddingService } from './embedding.service'
|
||||
@@ -78,7 +79,16 @@ export class ChunkIndexingService {
|
||||
): Promise<IndexResult> {
|
||||
const start = Date.now()
|
||||
const plain = prepareNoteTextForEmbedding(title, content)
|
||||
const newChunks = chunkNoteContent(noteId, plain)
|
||||
// Index even very short notes (title-only or one-liners)
|
||||
let newChunks = chunkNoteContent(noteId, plain)
|
||||
if (newChunks.length === 0 && plain.trim().length > 0) {
|
||||
// Force a single fragment when paragraph split yields nothing
|
||||
const fragmentId = createHash('sha256')
|
||||
.update(`${noteId}::${plain}`)
|
||||
.digest('hex')
|
||||
.slice(0, 32)
|
||||
newChunks = [{ fragmentId, content: plain, chunkIndex: 0, charCount: plain.length }]
|
||||
}
|
||||
const newFragmentIds = new Set(newChunks.map((c) => c.fragmentId))
|
||||
|
||||
const existing = await prisma.noteEmbeddingChunk.findMany({
|
||||
|
||||
Reference in New Issue
Block a user