fix: 캘린더 종료 시간(end_time) 지원 — 1시간 고정 제거
create_draft/create_confirmed에 end_time 파라미터 추가. 없으면 기본 1시간, 있으면 사용자 지정 종료 시간 사용. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -22,7 +22,7 @@ CLASSIFIER_PROMPT = """\
|
|||||||
사용 가능한 도구:
|
사용 가능한 도구:
|
||||||
- calendar.today() — 오늘 일정 조회
|
- calendar.today() — 오늘 일정 조회
|
||||||
- calendar.search(date_from, date_to) — 기간 일정 검색. 날짜는 YYYY-MM-DD
|
- calendar.search(date_from, date_to) — 기간 일정 검색. 날짜는 YYYY-MM-DD
|
||||||
- calendar.create_draft(title, date, time, description) — 일정 생성 초안. 시간은 HH:MM. 실제 생성 아님
|
- calendar.create_draft(title, date, time, end_time, description) — 일정 생성 초안. 시간은 HH:MM. end_time 없으면 1시간. 실제 생성 아님
|
||||||
- calendar.create_confirmed() — pending_draft가 있을 때, 사용자가 "확인/예/yes" 한 경우만 사용
|
- calendar.create_confirmed() — pending_draft가 있을 때, 사용자가 "확인/예/yes" 한 경우만 사용
|
||||||
- email.search(query, days) — 메일 검색. days 기본 7
|
- email.search(query, days) — 메일 검색. days 기본 7
|
||||||
- email.read(uid) — 메일 본문 조회
|
- email.read(uid) — 메일 본문 조회
|
||||||
|
|||||||
@@ -104,15 +104,17 @@ async def search(date_from: str, date_to: str) -> dict:
|
|||||||
return _make_result(False, "search", error=str(e))
|
return _make_result(False, "search", error=str(e))
|
||||||
|
|
||||||
|
|
||||||
async def create_draft(title: str, date: str, time: str, description: str = "") -> dict:
|
async def create_draft(title: str, date: str, time: str, description: str = "", end_time: str = "") -> dict:
|
||||||
"""일정 생성 초안 (실제 생성 안 함)."""
|
"""일정 생성 초안 (실제 생성 <EFBFBD><EFBFBD><EFBFBD> 함)."""
|
||||||
title = title or "일정"
|
title = title or "일정"
|
||||||
|
time_display = f"{time} ~ {end_time}" if end_time else time
|
||||||
draft = {
|
draft = {
|
||||||
"title": title,
|
"title": title,
|
||||||
"date": date,
|
"date": date,
|
||||||
"time": time,
|
"time": time,
|
||||||
|
"end_time": end_time,
|
||||||
"description": description,
|
"description": description,
|
||||||
"display": f"📅 제목: {title}\n날짜: {date} {time}\n설명: {description or '없음'}",
|
"display": f"📅 제목: {title}\n날짜: {date} {time_display}\n설명: {description or '없음'}",
|
||||||
}
|
}
|
||||||
return _make_result(True, "create_draft", data=draft, summary=draft["display"])
|
return _make_result(True, "create_draft", data=draft, summary=draft["display"])
|
||||||
|
|
||||||
@@ -127,10 +129,14 @@ async def create_confirmed(draft_data: dict) -> dict:
|
|||||||
title = draft_data.get("title", "일정")
|
title = draft_data.get("title", "일정")
|
||||||
date_str = draft_data.get("date", "")
|
date_str = draft_data.get("date", "")
|
||||||
time_str = draft_data.get("time", "00:00")
|
time_str = draft_data.get("time", "00:00")
|
||||||
|
end_time_str = draft_data.get("end_time", "")
|
||||||
description = draft_data.get("description", "")
|
description = draft_data.get("description", "")
|
||||||
|
|
||||||
dt_start = datetime.strptime(f"{date_str} {time_str}", "%Y-%m-%d %H:%M")
|
dt_start = datetime.strptime(f"{date_str} {time_str}", "%Y-%m-%d %H:%M")
|
||||||
dt_end = dt_start + timedelta(hours=1)
|
if end_time_str:
|
||||||
|
dt_end = datetime.strptime(f"{date_str} {end_time_str}", "%Y-%m-%d %H:%M")
|
||||||
|
else:
|
||||||
|
dt_end = dt_start + timedelta(hours=1)
|
||||||
|
|
||||||
uid = str(uuid.uuid4())
|
uid = str(uuid.uuid4())
|
||||||
vcal = f"""BEGIN:VCALENDAR
|
vcal = f"""BEGIN:VCALENDAR
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ async def _exec_calendar(operation: str, params: dict) -> dict:
|
|||||||
params.get("date", ""),
|
params.get("date", ""),
|
||||||
params.get("time", "00:00"),
|
params.get("time", "00:00"),
|
||||||
params.get("description", ""),
|
params.get("description", ""),
|
||||||
|
params.get("end_time", ""),
|
||||||
)
|
)
|
||||||
elif operation == "create_confirmed":
|
elif operation == "create_confirmed":
|
||||||
return await calendar_tool.create_confirmed(params)
|
return await calendar_tool.create_confirmed(params)
|
||||||
|
|||||||
Reference in New Issue
Block a user