fix(workspace): background vector indexing and correct diagram previews

This commit is contained in:
2026-09-06 02:57:56 +08:00
parent 9e0715f9db
commit a5c44c4ac0
21 changed files with 561 additions and 75 deletions
+22 -2
View File
@@ -181,7 +181,7 @@ async def get_note(note_id: str) -> Note | None:
@serialized_vault_mutation
async def update_note(
note_id: str, *, title: str | None = None, markdown: str | None = None, tags: list[str] | None = None, expected_content_hash: str | None = None
note_id: str, *, title: str | None = None, markdown: str | None = None, tags: list[str] | None = None, expected_content_hash: str | None = None, defer_vectors: bool = False
) -> Note:
record = repository.get_note_record(note_id)
if record is None:
@@ -207,10 +207,30 @@ async def update_note(
if title is not None:
parsed.title = title # 显式传入的 title 覆盖正文推导结果
await index_note(parsed)
if defer_vectors:
conn = connect()
try:
with transaction(conn):
old_ids = repository.replace_note_metadata(
conn=conn, note_id=parsed.note_id, title=parsed.title,
file_path=parsed.file_path, folder=parsed.folder, tags=parsed.tags,
created_at=parsed.created_at, updated_at=parsed.updated_at, blocks=parsed.blocks,
)
# Saved content is immediately searchable; old vectors must not describe it.
await vector_store.delete(old_ids, conn=conn)
conn.execute('UPDATE blocks SET embedding_local_only=? WHERE note_id=?',
(int(parsed.embedding_local_only), parsed.note_id))
repository.set_index_meta({f'note_vectors_pending:{parsed.note_id}': '1'}, conn=conn)
finally:
conn.close()
else:
await index_note(parsed)
except BaseException:
_write_markdown(record.file_path, old_md) # 索引失败时回滚正文,避免部分提交
raise
if defer_vectors:
from app.services import index_service
index_service.schedule_workspace_rebuild()
return _build_note(parsed.note_id, parsed.title, parsed.file_path, parsed.tags,
parsed.created_at, parsed.updated_at, parsed.blocks, new_md)