refactor: 重构 Tool Result 契约,移除 ui_hints 统一使用 result 字段
- ToolAgentOutput 移除 result_summary 和 ui_hints,统一使用 result 字段 - 日历/用户查找工具移除 ui_hints 输出,改为机器可读的结构化结果 - Agent History 移除 tool 消息的 ui_hints 处理逻辑 - App 版本检查改为 manifest.json 方式,支持多渠道发布 - 更新 settings 配置和测试用例适配新结构
This commit is contained in:
@@ -4,7 +4,7 @@ from datetime import datetime, timezone
|
||||
from typing import TYPE_CHECKING, Protocol, Sequence
|
||||
from uuid import UUID
|
||||
|
||||
from sqlalchemy import func, select, update, delete
|
||||
from sqlalchemy import func, or_, select, update, delete
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
from core.db.base_repository import BaseRepository
|
||||
@@ -39,6 +39,7 @@ class ScheduleItemRepository(Protocol):
|
||||
*,
|
||||
page: int,
|
||||
page_size: int,
|
||||
query: str | None = None,
|
||||
) -> tuple[list[ScheduleItem], int]: ...
|
||||
async def create_subscription(self, data: dict) -> ScheduleSubscription: ...
|
||||
async def get_subscriptions_by_item_id(
|
||||
@@ -164,8 +165,12 @@ class SQLAlchemyScheduleItemRepository(BaseRepository[ScheduleItem]):
|
||||
*,
|
||||
page: int,
|
||||
page_size: int,
|
||||
query: str | None = None,
|
||||
) -> tuple[list[ScheduleItem], int]:
|
||||
offset = (page - 1) * page_size
|
||||
normalized_query = (query or "").strip()
|
||||
has_query = bool(normalized_query)
|
||||
query_like = f"%{normalized_query}%"
|
||||
try:
|
||||
count_stmt = (
|
||||
select(func.count())
|
||||
@@ -173,6 +178,13 @@ class SQLAlchemyScheduleItemRepository(BaseRepository[ScheduleItem]):
|
||||
.where(ScheduleItem.owner_id == owner_id)
|
||||
.where(ScheduleItem.deleted_at.is_(None))
|
||||
)
|
||||
if has_query:
|
||||
count_stmt = count_stmt.where(
|
||||
or_(
|
||||
ScheduleItem.title.ilike(query_like),
|
||||
ScheduleItem.description.ilike(query_like),
|
||||
)
|
||||
)
|
||||
count_result = await self._session.execute(count_stmt)
|
||||
total = int(count_result.scalar_one() or 0)
|
||||
|
||||
@@ -184,6 +196,13 @@ class SQLAlchemyScheduleItemRepository(BaseRepository[ScheduleItem]):
|
||||
.offset(offset)
|
||||
.limit(page_size)
|
||||
)
|
||||
if has_query:
|
||||
items_stmt = items_stmt.where(
|
||||
or_(
|
||||
ScheduleItem.title.ilike(query_like),
|
||||
ScheduleItem.description.ilike(query_like),
|
||||
)
|
||||
)
|
||||
items_result = await self._session.execute(items_stmt)
|
||||
items = list(items_result.scalars().all())
|
||||
return items, total
|
||||
|
||||
@@ -269,6 +269,7 @@ class ScheduleItemService(BaseService):
|
||||
*,
|
||||
page: int,
|
||||
page_size: int,
|
||||
query: str | None = None,
|
||||
) -> tuple[list[ScheduleItemResponse], int]:
|
||||
user_id = self.require_user_id()
|
||||
if page < 1:
|
||||
@@ -280,6 +281,7 @@ class ScheduleItemService(BaseService):
|
||||
user_id,
|
||||
page=page,
|
||||
page_size=page_size,
|
||||
query=query,
|
||||
)
|
||||
except SQLAlchemyError:
|
||||
logger.exception(
|
||||
|
||||
Reference in New Issue
Block a user