chore: prepare GoodBuddy 0.8.2
Cross-platform packages / Validate source (push) Waiting to run
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (arm64, macos, macos-15) (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (arm64, windows, windows-2025) (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (x64, linux, ubuntu-24.04) (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (x64, macos, macos-15-intel) (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (x64, windows, windows-2025) (push) Blocked by required conditions
Cross-platform packages / Publish GitHub Release (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (arm64, linux, ubuntu-24.04-arm) (push) Blocked by required conditions

This commit is contained in:
lofyer
2026-08-06 22:47:13 +08:00
parent 8d00e6371d
commit b8fc7bc86e
114 changed files with 22916 additions and 1560 deletions
+4 -50
View File
@@ -19,6 +19,7 @@ import {
resolve
} from 'node:path'
import { chunkDocument, parseDocument, supportedDocumentExtensions } from './document-parser'
import { classifyEmbeddingError } from './embedding-errors'
import {
extractKnowledgeGraph,
normalizeEntityAlias,
@@ -178,54 +179,8 @@ export class KnowledgeService {
}
setEmbeddingProvider(provider?: EmbeddingProvider): Promise<void> {
if (
this.embeddingProvider === provider ||
(this.embeddingProvider?.fingerprint !== undefined &&
this.embeddingProvider.fingerprint === provider?.fingerprint)
) {
this.embeddingProvider = provider
return Promise.resolve()
}
this.embeddingProvider = provider
if (!provider) {
return Promise.resolve()
}
const reindex = this.reindexEmbeddings(provider)
this.activeSyncs.set('embedding-reindex', reindex)
void reindex.then(
() => {
if (this.activeSyncs.get('embedding-reindex') === reindex) {
this.activeSyncs.delete('embedding-reindex')
}
},
() => {
if (this.activeSyncs.get('embedding-reindex') === reindex) {
this.activeSyncs.delete('embedding-reindex')
}
}
)
return reindex
}
private async reindexEmbeddings(
provider: EmbeddingProvider
): Promise<void> {
for (const library of this.database.listKnowledgeBases(100)) {
if (this.embeddingProvider !== provider) {
return
}
for (const document of this.database.listDocuments(
library.id,
500
)) {
if (this.embeddingProvider !== provider) {
return
}
if (document.metadata.status === 'ready') {
await this.indexDocumentEmbeddings(document, provider)
}
}
}
return Promise.resolve()
}
createLibrary(input: CreateKnowledgeBaseInput): KnowledgeBase {
@@ -780,14 +735,13 @@ export class KnowledgeService {
if (this.lifecycleController.signal.aborted) {
return
}
const message =
error instanceof Error ? error.message : 'Embedding indexing failed'
const safeError = classifyEmbeddingError(error)
try {
this.database.recordEmbeddingIndexError(
document.id,
provider.provider,
provider.model,
message.slice(0, 2_000)
safeError.message
)
} catch {
// FTS indexing is authoritative; embedding diagnostics are best effort.