Skip to content

Proposal:日程模块 #46

Description

@Alexander-Noah

Issue:日程模块

1. 功能描述

日程模块定义有完整开始和结束时间的固定安排,例如课程、会议、考试、面试。日程表达时间占用,但时间经过不等于用户完成。

日程支持手动创建、AI 候选创建、查看、编辑、完成、取消、删除、提醒联动,并在日程 Tab 的年 / 月 / 日视图中展示。

2. 用户 / 用户故事

目标用户:需要管理会议、课程、预约等明确时间占用的个人用户。

  • 用户手动创建“明天 15:00-16:00 项目会”。
  • 用户在 AI Tab 输入“明天下午三点开项目会”,确认候选后创建日程。
  • 用户修改会议时间后,旧提醒失效,新提醒按新时间注册。
  • 用户取消已经作废的会议,保留状态语义。

3. 现有做法及不足

系统日历可以记录固定时间,但与 TimeFlow 的 Goal、Todo、Feedback、重排和 AI 入口割裂。备忘录和聊天收藏虽然低成本,但无法稳定表达时间占用、排序和提醒。

日程需要先被定义成明确的时间占用对象,AI 创建或修改时也必须先生成候选,确认后再写入。

4. 本期范围

  1. 日程的创建、查看、编辑、完成、取消、删除。
  2. 日程必须有 start_atend_at,且结束时间晚于开始时间。
  3. 日程状态包含 ACTIVECOMPLETEDCANCELLEDPLAN
  4. 当前是否进行中由时间推导,不写正式状态。
  5. 日程 Tab 支持年 / 月 / 日视图中的时间投影。
  6. 日程变更与提醒模块联动。
  7. AI 生成日程候选,确认后写入。

5. 明确不做

  • 不做外部日历双向同步。
  • 不做参与人、会议室和团队协作。
  • 不做复杂重复日程。
  • 不保存“固定 / 可移动”分类字段。
  • 不允许 AI 未确认移动既有日程。

6. 关键决策

决策点 备选方案 选择 理由
日程定义 时间占用 / 通用完成型任务 明确时间占用 与 Todo 的完成型语义区分
正式状态 四态 / 增加进行中和逾期状态 ACTIVE / COMPLETED / CANCELLED/PLAN 状态少、可解释
进行中 正式状态 / 由时间推导 由时间推导 避免状态冗余
AI 调整 Schedule 自动移动 / 只提出候选动作 只提出候选动作 保持用户控制
提醒失败 回滚日程 / 独立失败 不阻断日程保存 提醒是附加能力,不改变业务事实

7. 边界与异常

  • 标题为空:禁止保存。
  • 结束时间早于或等于开始时间:禁止保存。
  • 补录过去日程:允许保存,不创建过期提醒。
  • 删除后点击旧通知:提示目标不存在。
  • AI 根据 title 判断可移动性时,只能在候选中说明理由,不能写入分类字段。

8. 基本概念与信息结构

概念 含义
Schedule 有完整开始 / 结束时间的时间占用
status ACTIVECOMPLETEDCANCELLEDPLAN
reminder_reference 可选提醒引用或配置
completed_at 用户主动标记完成的时间

9. Agent 输入输出约束

  • 日程待办 Agent 可生成 Schedule 创建、查询、修改、删除候选。
  • 查询结果可直接展示。
  • 创建、修改、删除必须 isNeedUser = true
  • 用户确认后由主 Agent 调用公共数据模块写入。
  • 手动表单创建/修改以明确保存动作作为确认事件;删除仍需展示影响并强确认,所有写入走同一校验接口。

10. 验收标准

  • 创建 15:00-16:00 日程后,日程 Tab 正确展示。
  • 结束时间早于开始时间时无法保存。
  • 计划中的人物状态为PLAN
  • 当前时间处于日程时间段内时展示“进行中”,正式状态仍为 ACTIVE
  • 用户完成后状态变为 COMPLETED
  • 用户取消后状态变为 CANCELLED
  • 修改时间后旧提醒失效,新提醒重建。
  • AI 创建 / 修改 / 删除日程均需确认后生效。
  • 手动保存产生确认记录;删除等高风险写入未确认时不生效。

Metadata

Metadata

Assignees

No one assigned

    Labels

    FullSpec完整规格提案:影响面较大,需要写清楚动机、范围、不做、备选方案、接口/数据结构、原型、验收标准Proposal-Acceptedproposal

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions