{
 "flight": {
  "id": 900872,
  "agent": "cursor",
  "state": "closed",
  "title": "feat: 实现PWA状态管理防止iOS后台被杀 + 修复初始化Bug",
  "number": 357,
  "source": "aidev",
  "commits": 30,
  "debrief": null,
  "outcome": "abandoned",
  "signals": [
   "aidev:Cursor"
  ],
  "index_ok": false,
  "additions": 6002,
  "closed_at": "2025-07-06T07:06:21+00:00",
  "deletions": 2288,
  "merged_at": null,
  "opened_at": "2025-07-06T07:03:40+00:00",
  "task_type": "feat",
  "body_chars": 1365,
  "confidence": "dataset",
  "updated_at": "2026-11-03T17:53:33.703657+00:00",
  "enriched_at": null,
  "body_excerpt": "## 🚀 功能概述\n\n实现了完整的PWA状态管理功能，专门解决iOS设备上PWA后台被杀导致状态丢失的问题。\n\n## ✨ 主要功能\n\n### 核心特性\n- 🔄 **多层存储策略**：localStorage + sessionStorage + IndexedDB + Service Worker缓存\n- 🧠 **智能状态恢复**：基于时间、URL、设备方向的智能决策\n- 📱 **自动生命周期管理**：监听页面可见性、焦点变化、卸载事件\n- 💾 **全面状态保存**：表单数据、滚动位置、UI状态自动保存\n- 🎯 **iOS优化**：专为iOS PWA设计，解决后台被杀问题\n\n### 技术实现\n",
  "review_count": 0,
  "files_changed": 58,
  "hours_to_merge": null,
  "metrics_source": "aidev_commit_sum",
  "change_requests": 0,
  "og_generated_at": null,
  "reviewer_excerpt": null,
  "review_comment_count": 0,
  "reviewer_excerpt_url": null
 },
 "repo": {
  "name": "MoviePilot-Frontend",
  "owner": "jxxghp",
  "stars": 314,
  "license": "MIT",
  "full_name": "jxxghp/MoviePilot-Frontend",
  "primary_language": "TypeScript"
 },
 "author": {
  "login": "cursor[bot]",
  "name": null,
  "github_profile": "https://github.com/cursor[bot]",
  "page": null
 },
 "claim": null,
 "events": [
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "madrays"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "jxxghp"
  }
 ],
 "related": [
  {
   "agent": "cursor",
   "state": "merged",
   "title": "Add workflow sharing functionality",
   "number": 371,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 1102,
   "deletions": 253,
   "merged_at": "2025-07-08T15:31:22+00:00",
   "opened_at": "2025-07-08T15:08:01+00:00",
   "task_type": "feat",
   "files_changed": 15,
   "hours_to_merge": 0.39
  },
  {
   "agent": "cursor",
   "state": "merged",
   "title": "Fix PWA install prompt text display",
   "number": 369,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 18096,
   "deletions": 1865,
   "merged_at": "2025-07-08T06:36:18+00:00",
   "opened_at": "2025-07-08T06:22:38+00:00",
   "task_type": "fix",
   "files_changed": 6,
   "hours_to_merge": 0.23
  },
  {
   "agent": "cursor",
   "state": "merged",
   "title": "Cursor/fix sync queue data corruption issues ee60",
   "number": 367,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 125,
   "deletions": 65,
   "merged_at": "2025-07-07T14:49:17+00:00",
   "opened_at": "2025-07-07T14:45:54+00:00",
   "task_type": "fix",
   "files_changed": 3,
   "hours_to_merge": 0.06
  }
 ],
 "pr_url": "https://github.com/jxxghp/MoviePilot-Frontend/pull/357",
 "page": "https://agentriders.com/logs/jxxghp/MoviePilot-Frontend/357/"
}