Commit Graph

84 Commits

Author SHA1 Message Date
MarkLo127 42b5b8dab8 Implement Plan C3: Cloud Sync Retry with Local Caching
Features:
- Add cloud sync retry service for failed report uploads
- Automatic retry loop that runs every 30 seconds
- Exponential backoff: 1 attempt per 30s with max 5 retries per report
- Reports always saved locally (IndexedDB) - cloud sync failures don't block user
- SyncInitializer component starts retry loop on app startup

Changes:
- frontend/lib/sync-retry.ts: New service for managing cloud sync retries
  - retryPendingSyncs(): Attempt to sync all pending reports
  - markForRetry(): Mark a report for retry
  - startRetryLoop(): Start automatic retry background task
  - stopRetryLoop(): Clean up retry loop on app shutdown
  - getPendingSyncCount(): Get number of reports awaiting sync

- frontend/components/providers/SyncInitializer.tsx: Client component that:
  - Initializes retry loop only when user is authenticated
  - Cleans up on component unmount
  - Logs retry service startup/shutdown

- frontend/app/layout.tsx: Add SyncInitializer to root layout
  - Ensure retry loop starts automatically for authenticated users

- frontend/app/analysis/page.tsx: Improve error handling
  - Log warning when cloud sync fails
  - Report remains safely in IndexedDB even if cloud save fails

Impact:
- Reports never get lost even if cloud save fails temporarily
- Automatic retry ensures eventual consistency with cloud
- User experience improved: no more "report deleted" after 1 hour
- Network issues no longer result in data loss
- Addresses original issue: reports now persists locally indefinitely

Technical Design:
- Retry tracking uses in-memory Map (resets on page refresh)
- Future enhancement: could persist retry state to localStorage
- Cloud sync becomes eventual consistency rather than immediate

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-12 21:35:29 +08:00
MarkLo127 9c0a9819e6 Implement Plan A1: Fast Mode Analysis
Features:
- Add analysis_mode parameter (fast/deep) to AnalysisRequest
- Fast mode (15-25 min): Disables investment and risk debates (max_debate_rounds=0)
- Deep mode (60 min): Default mode with debates enabled
- Update backend TradingService to handle analysis_mode
- Add analysis_mode form field to frontend with dropdown selector
- Update TypeScript interfaces to include analysis_mode

Changes:
- backend/app/models/schemas.py: Add analysis_mode field to AnalysisRequest
- backend/app/services/trading_service.py: Handle analysis_mode in create_config()
- backend/app/api/routes.py: Pass analysis_mode parameter to run_analysis()
- frontend/components/analysis/AnalysisForm.tsx: Add analysis_mode dropdown (fast/deep)
- frontend/lib/types.ts: Add analysis_mode to AnalysisRequest interface

When users select "fast mode", the system will:
1. Skip investment debate (max_debate_rounds = 0)
2. Skip risk debate (max_risk_discuss_rounds = 0)
3. Reduce analysis time from ~60 minutes to ~15-25 minutes
4. Still run all analyst reports with proper 500-1000 word counts
5. Provide initial decision without debate refinement

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-12 21:33:23 +08:00
MarkLo127 1f5d59ac7a 2026-03-11 15:32:10 +08:00
MarkLo127 071c4bf5cf 2026-03-10 17:58:38 +08:00
MarkLo127 92c2a84b83 2026-03-10 17:00:32 +08:00
MarkLo127 d95af6a64c 刪除claude被棄用的模型 2026-03-05 23:42:58 +08:00
MarkLo127 d58e80a962 2026-01-27 13:22:52 +08:00
MarkLo 3145d08c30 2025-12-28 01:22:45 +08:00
MarkLo 6e48ac3f7a 2025-12-24 04:49:04 +08:00
MarkLo 8272138da0 2025-12-24 01:40:36 +08:00
MarkLo 16e513a921 新增英文語系支援 2025-12-24 01:20:33 +08:00
MarkLo 0f434546aa 2025-12-21 02:00:38 +08:00
MarkLo c673c52dda 2025-12-20 09:03:32 +08:00
MarkLo 95b456faf7 fix: TypeScript error in PriceChart Tooltip formatter 2025-12-20 08:00:14 +08:00
MarkLo c4fc8904eb 2025-12-20 07:41:05 +08:00
MarkLo 47f04a6ff7 2025-12-16 00:45:07 +08:00
MarkLo 3568ff5b33 2025-12-15 03:38:56 +08:00
MarkLo 22f57a8674 feat: recover pending analysis tasks after page close
Added task recovery system that allows users to recover and save
analysis results even if they accidentally close the page:

1. New pending-task.ts utility:
   - Saves task info to localStorage when analysis starts
   - Clears after task completes/fails
   - 24-hour expiry for old tasks

2. PendingTaskRecovery component:
   - Shows on history page if pending task found
   - Polls API for task status
   - Saves result to IndexedDB + cloud upon completion

3. Updated useAnalysis hook:
   - Tracks pending tasks in localStorage
   - Clears on completion/failure

Now users visiting /history after closing the page during analysis
will see a prompt to recover and save their completed report.
2025-12-14 03:55:12 +08:00
MarkLo cf4aaa09b1 feat: auto-save reports + fix PDF download from history
1. Auto-save reports when page closes:
   - Added beforeunload handler to auto-save analysis to history
   - Saves to local IndexedDB and cloud (if authenticated)
   - Prevents data loss if user accidentally closes the page

2. Fix PDF download from history page:
   - Made taskId optional in DownloadReports component
   - Added direct mode: can pass reports data directly
   - Updated backend to support both task-based and direct-data modes
   - History reports now have download PDF option available
2025-12-14 03:21:59 +08:00
MarkLo bddcca3ebb 2025-12-13 16:19:46 +08:00
MarkLo c9f6e6a8d1 2025-12-13 07:14:45 +08:00
MarkLo 2a65c7f44d 2025-12-13 06:34:48 +08:00
MarkLo bcfa6dab06 2025-12-13 06:13:15 +08:00
MarkLo 5d3751602e 2025-12-13 06:00:19 +08:00
MarkLo eed052abe9 2025-12-13 03:15:29 +08:00
MarkLo 8204aff28b 2025-12-13 01:54:47 +08:00
MarkLo 5e48737ab8 2025-12-12 19:42:31 +08:00
MarkLo 5fa0ea027a 2025-12-12 19:32:11 +08:00
MarkLo 4269fdec26 2025-12-12 19:01:49 +08:00
MarkLo 144f5793aa 2025-12-12 06:10:20 +08:00
MarkLo da7d05ecc9 2025-12-12 05:30:04 +08:00
MarkLo 71fb9844ee 2025-12-11 01:18:46 +08:00
MarkLo a51b31dc21 2025-12-11 00:37:19 +08:00
MarkLo 886694b62f 2025-12-10 23:51:07 +08:00
MarkLo 6c453ead59 2025-12-07 22:35:18 +08:00
MarkLo 79c1f103e1 2025-12-07 22:02:20 +08:00
MarkLo 33e58ff389 2025-12-07 21:40:58 +08:00
MarkLo c2b8706bf2 2025-12-07 17:13:57 +08:00
MarkLo 0792830c3d 2025-12-07 16:51:11 +08:00
MarkLo 9ce8fcdcb3 2025-12-07 04:12:25 +08:00
MarkLo 915ee9915c 2025-12-07 03:54:52 +08:00
MarkLo 43658df2a0 2025-12-06 02:28:43 +08:00
MarkLo a0e4365fc3 2025-12-06 01:50:41 +08:00
MarkLo 6ffe348ac0 2025-12-03 02:59:12 +08:00
MarkLo 4f2327f5c2 2025-12-03 00:09:09 +08:00
MarkLo 0c955d4057 2025-12-02 23:46:59 +08:00
MarkLo 40f7d0bb92 2025-12-02 23:32:25 +08:00
MarkLo 34dc5b0f87 2025-12-02 23:03:41 +08:00
MarkLo 65c0033cca 2025-12-02 21:59:51 +08:00
MarkLo fd4aff76a1 2025-12-02 02:49:49 +08:00