Skip to content

日程聚合体验补强:补充 Widget Test 与刷新兜底#77

Merged
utopiafar merged 13 commits into
memex-lab:mainfrom
utopiafar:feat/schedule-aggregator-agent
May 15, 2026
Merged

日程聚合体验补强:补充 Widget Test 与刷新兜底#77
utopiafar merged 13 commits into
memex-lab:mainfrom
utopiafar:feat/schedule-aggregator-agent

Conversation

@utopiafar
Copy link
Copy Markdown
Collaborator

@utopiafar utopiafar commented May 14, 2026

背景

这轮从用户路径和安卓模拟器里继续验证日程聚合功能,重点补了几个体验风险:

  • 轻量 schedule refresh router 可能把已经有 temporal template 的卡片错判为 skip,导致日程聚合不变脏。
  • 日程页/首页在底部悬浮按钮和窄屏长文案场景下,容易出现操作或文本被遮挡的问题。
  • 日程 tab 更像“文章页”,缺少一个用户可快速扫读、跳转到 AI 编排重点的入口。

改动

  • 给 schedule refresh router 增加兜底:只要新卡片包含 event / task / routine / duration / procedure 等日程相关 template,LLM 即使返回 skip,也会保守地 mark dirty。
  • 更新 router prompt,明确 temporal template 不应被 skip,除非确实无需影响日程。
  • 优化日程页 magazine hero 的长标题、长时间/地点展示,避免窄屏溢出;已完成日期使用当前 locale 格式化。
  • 增加日程页和 timeline 底部 padding,避免底部 FAB / 导航遮挡最后一屏内容和任务完成入口。
  • 在日程 tab 顶部新增 pinned overview lens:用横向 chips 展示更新时间、AI 编排出的日期段、冲突数、完成数,并支持点击跳转到对应段落。
  • 日程 tab 使用 CustomScrollView / sliver 结构承载 pinned lens 和正文内容,保留交互能力,同时避免为了跳转退回成一个大 Column。
  • 移除 hero 卡上的纯装饰圆形,保留更功能化的日程视觉层级。
  • 新增 Widget Test,覆盖复杂 LLM 日程输出、冲突、完成项、待办完成圆圈、offset 时间格式、窄屏长文案,以及 overview lens 跳转。
  • 补充 router 单测,模拟 LLM 返回 skipped 但卡片实际包含 routine template 的场景。

验证

  • flutter test --no-pub test/ui/schedule/widgets/schedule_widgets_test.dart test/utils/date_util_test.dart test/domain/models/schedule_aggregation_model_test.dart test/agent/skills/schedule_aggregation_skill_test.dart test/ui/schedule/models/schedule_item_test.dart test/ui/schedule/view_models/schedule_aggregator_view_model_test.dart test/data/repositories/get_schedule_briefing_timeline_card_test.dart test/data/services/event_handlers/schedule_dirty_on_card_update_handler_test.dart test/agent/schedule_refresh_router_agent_test.dart,57 个测试通过。
  • flutter analyze --no-pub --no-fatal-infos lib/ui/schedule/widgets/tabs/magazine_narrative_tab.dart test/ui/schedule/widgets/schedule_widgets_test.dart 无问题。
  • git diff --check 通过。
  • 本地 secret 扫描未发现本轮测试用 key 被写入仓库。
  • flutter build apk --debug --flavor global --no-pub 通过,并安装到 Android emulator 实测。

模拟器实测路径

  • 输入 “Tomorrow at 11am call the bank to confirm visa appointment”:首页 Schedule Briefing 变为 Needs update,进入日程页点击 Update 后,聚合 hero 正确更新为 11:00 的银行/签证确认事项。
  • 输入 “I already finished submitting the expense report for tomorrow”:生成完成类卡片,并触发日程 dirty。
  • 在首页 UI 里点击任务完成圆圈:Schedule Briefing / 日程页 dirty 提示出现,点击 Update 后 dirty 清除,聚合摘要纳入 expense report、visa call、water plants 等内容。
  • 新增 overview lens 后,进入 Schedule tab 能看到 UpdatedTodayTomorrow 等 chips;点击 Tomorrow 可跳转到对应日程段落。

模拟器 CPU 排查

  • 未发现 emulator / qemu-system 残留进程;adb devices 为空。
  • emulator -accel-check 显示 Hypervisor 可用。
  • 当前 AVD 配置里 hw.gpu.enabled=no,而启动日志显示系统内存压力下退到了 software GL(swangle/lavapipe),这是 CPU 打满的主要嫌疑。
  • 代码侧未发现 schedule UI 有 Timer / animation / build-time refresh 循环;lens 点击只触发一次 Scrollable.ensureVisible / fallback scroll。

说明

这一轮仍保持“LLM 产出结构化数据、App 固定展示”的阶段性方案;刷新路由采用保守兜底,宁可多标记 dirty,也避免用户完成/新增日程类卡片后看到旧聚合。日程 tab 的新 lens 不改变 schema,只把 AI 已经决定的日期段、冲突和完成项变成可操作的导航入口。

utopiafar and others added 13 commits April 24, 2026 01:17
- Add ScheduleAggregatorAgent with AI-driven magazine narrative layout
- Add ScheduleAggregationSkill with get_schedule_cards and save_schedule_aggregation tools
- Add ScheduleAggregationModel for structured YAML output
- Register event bus subscription and task handler
- Split schedule_aggregator_screen.dart into focused widgets
- Add MagazineNarrativeTab dual-mode: agent-curated + mock fallback
- Wire ViewModel with MemexRouter for agent triggering
- Add 21 unit tests for model parsing and mock data

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…tor-agent

# Conflicts:
#	lib/data/repositories/memex_router.dart
#	lib/domain/models/system_event.dart
#	lib/l10n/app_en.arb
#	lib/l10n/app_zh.arb
#	lib/ui/settings/widgets/model_stats_page.dart
@utopiafar utopiafar marked this pull request as ready for review May 15, 2026 06:30
@utopiafar utopiafar merged commit 2f36d06 into memex-lab:main May 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant