# カレンダーツール(AddCalendarEvent / ListCalendarEvents / DeleteCalendarEvent) スペース別カレンダーに「予定」を読み書きするツール。予定は受動的なエントリで、 cron の定期タスク(`scheduled_tasks`)とは別概念(予定は実行しない)。 予定は実行中タスクが属するスペース(`ctx.spaceId`)のカレンダーに記録される。 スペースに属していないタスク(旧 local タスク)では使えず、明確なエラーを返す。 ## AddCalendarEvent 実行中タスクのスペースのカレンダーに予定を1件追加する。 `created_by` は常に `agent`、`source_task_id` には実行中タスク ID が記録される。 引数: - `title`(必須): 予定のタイトル - `date`(必須): 開始日 `YYYY-MM-DD`(ローカル日付) - `end_date`(任意): 終了日 `YYYY-MM-DD`。複数日にまたがる予定のとき指定。省略すると単日。`date` より前は不可 - `time`(任意): 開始 `HH:MM`。省略すると終日扱い - `end_time`(任意): 終了 `HH:MM`。`time`(開始)があるときだけ有効。単日では開始時刻以降のみ(複数日は終了日側の時刻なので順序不問) - `description`(任意): 補足説明 例: ``` AddCalendarEvent({ title: "定例MTG", date: "2026-07-01", time: "10:00", end_time: "11:00" }) AddCalendarEvent({ title: "提出締切", date: "2026-07-10" }) // 終日 AddCalendarEvent({ title: "現地出張", date: "2026-07-10", end_date: "2026-07-12" }) // 複数日 ``` 使いどころ: ユーザーが「○日に△△を予定に入れて」と依頼したとき、調査の結果として 期限や予定日が判明したとき。日付は必ずユーザーのローカル暦日で指定する。 ## ListCalendarEvents スペースの予定を日付範囲で一覧する(読み取り専用)。 引数: - `from`(任意): 範囲開始 `YYYY-MM-DD` - `to`(任意): 範囲終了 `YYYY-MM-DD` 範囲を省略すると全期間。結果は日付→時刻順(終日は各日の先頭)で返る。 ## DeleteCalendarEvent スペースの予定を id で 1 件削除する。 引数: - `id`(必須): `ListCalendarEvents` が返す予定の id(正の整数) **削除できるのは `created_by` が `agent` の予定だけ。**利用者が画面から入れた予定 (`created_by` = `user`。この列が無かった頃の古い行も `user` として扱われる)は、 id を渡されても削除せず `isError: true` を返す。 ``` ListCalendarEvents({ from: "2026-07-01", to: "2026-07-31" }) // - 2026-07-01 10:00 「定例MTG」(id=12, agent) // - 2026-07-03 (終日)「健康診断」(id=13, user) DeleteCalendarEvent({ id: 12 }) // → 削除される DeleteCalendarEvent({ id: 13 }) // → isError。利用者が作成した予定 ``` 返り値(`isError: true` のもの): | 渡した id | 返る内容 | |---|---| | 利用者が作成した予定 | この予定は利用者が作成したため削除できません。削除できるのはエージェントが作成した予定(created_by=agent)だけです | | 別スペースの予定 | 指定された id の予定はこのスペースに見つかりません | | 存在しない・すでに削除済み | 指定された id の予定はこのスペースに見つかりません | 別スペースの id と存在しない id で**文面を同一にしている**のは意図的。文面が違うと、 その id の予定が他のスペースにあることを差分で漏らす。 ## gotcha - `date` / `from` / `to` は `YYYY-MM-DD`、`time` / `end_time` は `HH:MM` 厳守。形式違反はエラー。 - `end_time` は `time` なしには指定できない(終日の予定に終了時刻は持てない)。 - スペース未所属のタスクからは呼べない(`ctx.spaceId` 必須)。 - 予定はスペースの可視性に従う。イベント単独の可視性は持たない。 - `DeleteCalendarEvent` は利用者が作成した予定を消せない。一覧の行末に出る `agent` / `user` が判定に使われる値そのもの。 - 予定に紐づくリマインダーは予定と一緒に消える(予定の行に載っているため)。画面からの削除と同じ挙動。 - 予定の書き換えはツールとして用意していない(削除のみ)。