fix: fuzzy project resolution and guard against accidental project creation
- _resolve_project now uses reverse-substring + SequenceMatcher (≥0.55) so partial names like "Famous Supply" match "Famous Supply Co." reliably - create_project runs similar-project checks before the confirmed gate so confirmed=true can't bypass them; threshold lowered to 0.55 to catch abbreviated names - Error messages on project-not-found no longer suggest create_project, directing the model to list_projects first - Tool description updated to explicitly prohibit calling create_project in response to a lookup failure - tasks.py: fire-and-forget embedding update on create/update - briefing_pipeline.py: await is_caldav_configured (was sync call) - notes.py: remove erroneous duplicate count_query filter Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
import asyncio
|
||||
|
||||
from quart import Blueprint, jsonify, request
|
||||
|
||||
from fabledassistant.auth import login_required, get_current_user_id
|
||||
from fabledassistant.models.note import TaskPriority, TaskStatus
|
||||
from fabledassistant.routes.utils import not_found, parse_iso_date
|
||||
from fabledassistant.services.embeddings import upsert_note_embedding
|
||||
from fabledassistant.services.notes import (
|
||||
create_note,
|
||||
delete_note,
|
||||
@@ -93,6 +96,9 @@ async def create_task_route():
|
||||
milestone_id=data.get("milestone_id"),
|
||||
parent_id=data.get("parent_id"),
|
||||
)
|
||||
text = f"{task.title}\n{task.body}".strip() if task.body else (task.title or "")
|
||||
if text:
|
||||
asyncio.create_task(upsert_note_embedding(task.id, uid, text))
|
||||
return jsonify(task.to_dict()), 201
|
||||
|
||||
|
||||
@@ -147,6 +153,9 @@ async def update_task_route(task_id: int):
|
||||
task = await update_note(uid, task_id, **fields)
|
||||
if task is None:
|
||||
return not_found("Task")
|
||||
text = f"{task.title}\n{task.body}".strip() if task.body else (task.title or "")
|
||||
if text:
|
||||
asyncio.create_task(upsert_note_embedding(task.id, uid, text))
|
||||
return jsonify(task.to_dict())
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user