feat(personal-assistant): add confirmed project memory

This commit is contained in:
2026-07-19 08:19:24 +08:00
parent 151cc26caf
commit 24da833fa6
31 changed files with 4037 additions and 60 deletions
+33 -3
View File
@@ -54,6 +54,30 @@ const normalizeSnippet = (snippet: RawKnowledgeSnippet): KnowledgeSnippet => ({
content: snippet.content || snippet.text || ''
});
export const mergeKnowledgeSnippets = (...groups: RawKnowledgeSnippet[][]): KnowledgeSnippet[] => {
const rows: KnowledgeSnippet[] = [];
const indexes = new Map<string, number>();
groups.flat().forEach((item) => {
const snippet = normalizeSnippet(item);
const key = snippet.fragmentId
? `fragment:${snippet.fragmentId}`
: snippet.docId
? `${snippet.domain || snippet.sourceType || ''}:doc:${snippet.docId}`
: `${snippet.domain || snippet.sourceType || snippet.spaceCode || ''}|${snippet.docTitle}|${snippet.content}`;
const existingIndex = indexes.get(key);
if (existingIndex === undefined) {
indexes.set(key, rows.length);
rows.push(snippet);
return;
}
const present = Object.fromEntries(
Object.entries(snippet).filter(([, value]) => value !== undefined && value !== null && value !== '')
);
rows[existingIndex] = { ...rows[existingIndex], ...present };
});
return rows;
};
export const searchKnowledge = async (
queryText: string,
position = getSelectedPosition(),
@@ -136,9 +160,14 @@ const normalizeUnifiedResponse = (response: UnifiedKnowledgeResponse): Knowledge
const citationSnippets = (response.citations || []).map((item) => normalizeSnippet({
docTitle: item.title,
content: item.snippet,
docId: item.docId,
fragmentId: item.fragmentId,
spaceCode: item.spaceCode,
sourceType: item.sourceType
sourceType: item.sourceType,
domain: item.domain,
status: item.status,
occurredAt: item.occurredAt,
updatedAt: item.updatedAt
}));
return {
...legacy,
@@ -148,7 +177,7 @@ const normalizeUnifiedResponse = (response: UnifiedKnowledgeResponse): Knowledge
answer: response.answer,
reference: legacy.reference || (response.citations || []).map((item) => item.title).join('、'),
docs: legacy.docs || [],
snippets: (legacy.snippets?.length ? legacy.snippets : citationSnippets).map((item) => normalizeSnippet(item as RawKnowledgeSnippet)),
snippets: mergeKnowledgeSnippets(citationSnippets, legacy.snippets || []),
training: legacy.training || [],
records: legacy.records || [],
citations: response.citations || [],
@@ -160,7 +189,8 @@ const normalizeUnifiedResponse = (response: UnifiedKnowledgeResponse): Knowledge
contextVersion: response.contextVersion,
intent: response.intent,
rewrittenQuery: response.rewrittenQuery,
resources: response.resources || []
resources: response.resources || [],
memoryCandidate: response.memoryCandidate || legacy.memoryCandidate
};
};