跳轉到

更新紀錄

最新在前。簡短,刻意不完整——main 分支上的 commit 才是真正的來源,這裡只是給人看的彙總。

2026-04 — P5(UI v2 + 品質打磨)

前端重寫

  • React 18 + Vite 5 + Tailwind 3 替換原有 vanilla HTML SPA。四 tab 導航(儀表板 / 自選股 / Claw / 設定),全面 TypeScript,帶型別的 API client + adapter 層把後端 Pydantic 對應成展示型別。
  • 訊號卡重新設計,像素級複刻 v1 格式:標題、每 ticker 關聯度條(依層級著色:紅 / 金 / 藍)、中英雙語對照、按 [AGENT] 標籤拆分的可收合 reasoning、Impact + Confidence 評分條、可展開的智慧代理詳情、非同步載入的 OG 預覽、合規免責聲明。
  • UserMenu 下拉選單——點 Header 頭像查看 email、Settings 快速入口、Sign out(不再需要繞道 Settings 頁)。
  • TelegramWizard——綁定流程變成三步編號指引,帶點擊複製的小按鈕,告別小字一大段。
  • Ask StockClaw 頁面 給對話 transcript ≥55vh,Historical Search 移到下面,聊天卡不再被 RAG 區塊擠壓。
  • OS 自適應淺色配色——GitHub 風格白卡片 + 淡灰頁面背景,調整了 text-gray-100 在淺色下近乎全黑(之前是近白色灰底,幾乎看不見)。
  • 盤前 / 盤後價格——自選股列在 yfinance 報 marketState 為延長時段時,在常規價下方顯示 PRE / POST 徽章 + 盤前價 + 漲跌幅。用 CSS grid 做對齊,836.92856.33 的首位數字上下對齊。
  • 即時狀態列——"Last updated 8s ago" 用 hook 的真實 fetch 時間戳驅動,每 15 秒 tick 一次;金色"What's moving the market"輪播真實的 12 條訊號標題,而不是之前寫死的 4 條 demo 資料。

訊號品質

  • 緊急度分級清晰 —— FLASH / ALERT / NOTE / FYI 現在是 4 個獨立徽章(紅 / 橙 / 金 / 灰),不再把 FLASH + ALERT 合併成過載的 "BREAKING"。狀態列計數也拆開:"2 FLASH · 18 ALERT" 而不是"20 BREAKING"。
  • 重複訊號修正 —— RawItem.raw_id 現在繼承自 content_hash(sha256 of source URL + title),所以 run_user_pipeline_task 的 DB 去重實際觸發。之前 raw_id 每次爬取都是新 UUID4,dedup 是 no-op;使用者被同一篇 Yahoo Finance 文章每 ~20 分鐘 beat cycle 重複推送。同時減少 OpenRouter 開銷(重複文章會觸發新一輪 5-agent 合成)。

Ask Claw(RAG)修正

  • BM25 分詞器 —— websearch_to_tsquery AND-匹配使用者問題裡的每個詞,幾乎從不命中。換成按內容詞 OR 連接的分詞器("Should I buy NVDA right now?""buy | nvda"),先去掉英文停用詞。
  • 檢索診斷 —— [rag] empty retrieval 日誌列印出可見訊號數 + 每個 retriever 的命中數,RLS 失敗 vs. 查詢邏輯失敗一目瞭然。

部署 / 維運

  • Vercel SPA fallback —— /:path*/ 的 rewrite,讓 /login/watchlist 等在直接存取時回傳 index.html。沒有這條時,Google OAuth 登入後重新導向到 /login?code=… 會 404。
  • 市場行情快取 TTL 從 60 秒降到 30 秒;盤前 / 盤後價格現在 ~30 秒內刷新,之前 ~1 分鐘。

2026-04 — P4 完成

  • P4.4 Google OAuth 用 JWKS/ES256 驗證(Supabase 目前預設);Sign in with Google 端對端打通。
  • Web Push:VAPID 認證的瀏覽器通知,深連結回觸發訊號;FLASH 級得 sticky(requireInteraction)banner。
  • Telegram 多使用者:deliver_batchuser_settings 讀每使用者的 telegram_chat_id,而不是全域 env var;使用者需透過 Settings 綁定。
  • Per-user chat id + RLS 修正:user_scope 現在 SET LOCAL ROLE authenticated,RLS 策略真正生效——之前 code 默默以 Postgres 超級使用者執行,帶 BYPASSRLS
  • 智慧代理詳情面板:每條 signal 在卡片下的可展開表格裡帶每個 agent 的 impact / confidence / latency / error。
  • 每 ticker 關聯度條 + Open Graph 預覽卡 為每條訊號的原文。
  • 訊號卡重新設計 匹配 Telegram 推送格式——雙語對照摘要、signal id、signal_type pill、可展開 reasoning 區塊。
  • email 魔法連結 走 Supabase(不需要 Google 帳號就能註冊)。
  • 真實 Claw 對話 基於您的訊號做 dense + BM25 混合檢索,每次查詢寫入 rag_query_logs
  • Embedding 流程:每條新訊號在 commit 後立即 embed 到 ChromaDB(paraphrase-multilingual-MiniLM-L12-v2)。
  • Claw 規則 CRUD 帶 LLM 自然語言解析器(只儲存;觸發是後續工作)。
  • OS 驅動的暗 / 淺主題 套用到整個 SPA。
  • 真實市場資料 端點(/market/quotes/market/indices)透過 yfinance + 60 秒 Redis 快取。
  • Watchlist 自動引導 讓新使用者落在可用的空清單,而不是死的"+ 新增 ticker"按鈕。
  • 登出 UI(頂欄頭像下拉)。
  • 法律頁面(/privacy.html/terms.html)和 這個文件站

2026-04 — P3

  • 寫入端點:POST /watchlists/{id}/tickersDELETE .../{ticker}PUT /settingsPOST /integrations/telegram/linkPOST /claw/chat(當時還是 echo stub)。
  • user_settings 資料表。
  • 新增 ticker 觸發即時爬取。

2026-04 — P2

  • 唯讀 FastAPI:GET /signalsGET /watchlistsGET /health/ws/signals WebSocket。
  • JWT 認證 + 列級安全骨架。
  • 前端關閉 mock 模式。

2026-04 — P1

  • Supabase Postgres + Redis 透過 docker-compose。
  • Celery + Beat 編排。
  • 訊號持久化:流程把每條產生的 SignalCard 寫入 DB。
  • SQLite → Supabase 自選股遷移。

2026-04 — P0

  • 5 智慧代理合成引擎,帶 Reflexion 和 Pydantic 驗證。
  • RSS / yfinance 爬蟲。
  • 自選股 SQLite DB。
  • 前端 SPA(儀表板 / 自選股 / Claw / 設定)帶 PWA manifest。
  • Telegram bot 推送(單使用者)。