finance-tools/README.md

108 lines
3.9 KiB
Markdown
Raw Normal View History

2026-06-21 20:28:06 +00:00
# Investor RPG 開發環境
## 第一次啟動
需要 Node.js 18 以上版本。在終端機執行:
```bash
cd /Users/daniel/Desktop/finance/app
cp .env.example .env # 已經有 .env 時不要執行這行
npm install
npm run dev:all
```
啟動完成後開啟 <http://localhost:5173>
`npm run dev:all` 會同時啟動:
- 前端 Vite<http://localhost:5173>
- 後端 API<http://localhost:3000>
- API 健康檢查:<http://localhost:3000/api/health>
`Ctrl+C` 會一起關閉前端與後端。
## 日常啟動
```bash
cd /Users/daniel/Desktop/finance/app
npm run dev:all
```
不要只執行 `npm run dev`;那只會啟動前端,沒有後端 API 時頁面資料功能不會運作。
## Docker 啟動
若要用接近正式環境的方式啟動:
```bash
cd /Users/daniel/Desktop/finance/app
docker compose up --build
```
完成後開啟 <http://localhost:8080>
2026-06-22 09:16:20 +00:00
## 內容管線YouTube / HyRead
### 知識庫
知識庫分為兩層:
- `content/raw/emmy/` — 原始 Obsidian 格式筆記Markdown + frontmatter
- `data/knowledge.json` + `data/notes.json``npm run build:knowledge` 快照產出
匯入的 YouTube / HyRead 內容會自動寫入 `content/raw/emmy/`,再透過 `build:knowledge` 輸出到前端。
### 前端頁面
| 路由 | 頁面 | 說明 |
|------|------|------|
| `/library` | Library | 知識總覽(全文檢索 + 類型過濾) |
| `/library/:kind/:id` | LibraryDetail | 單篇知識全文 |
| `/content` | ContentManager | 內容管理(來源列表 / YouTube 擷取 / HyRead 匯入 / 排程) |
Library 和 LibraryDetail 的選單項目在 `Chrome.tsx` 的「修練 → 知識 · 圖書館」。
ContentManager 在「內容 → 內容 · 管理」。
### API 端點
所有端點以 `/api/content` 為前綴:
| 方法 | 路徑 | 說明 |
|------|------|------|
| GET | `/api/content` | 列舉內容來源(支援 `?kind=` `?status=` `?limit=` `?offset=` |
| GET | `/api/content/stats` | 來源統計by kind / by status |
| GET | `/api/content/:id` | 單筆來源詳情 |
| DELETE | `/api/content/:id` | 刪除來源 |
| POST | `/api/content/youtube/fetch` | 擷取 YouTube 影片/播放清單(傳 `{ url }` |
| POST | `/api/content/youtube/process/:id` | 用 AI 處理 transcript`{ transcript, episode? }` |
| GET | `/api/content/youtube/yt-dlp-status` | 檢查 yt-dlp 是否可用 |
| GET | `/api/content/youtube/local-transcripts` | 列出本地 `~/youtube_transcripts/` 整理檔 |
| GET | `/api/content/hyread/scan` | 掃描 `hyread-tools/output/` 目錄 |
| POST | `/api/content/hyread/import` | 匯入指定書籍(傳 `{ dir }` |
| POST | `/api/content/hyread/upload` | 上傳 book.html`{ title, html }` |
| GET | `/api/content/schedules` | 列舉排程 |
| POST | `/api/content/schedules` | 新增排程(傳 `{ kind, name, url, ... }` |
| DELETE | `/api/content/schedules/:id` | 刪除排程 |
| POST | `/api/content/capture` | 擴充功能接收端(傳 `{ kind, url, title, transcript/html, ... }` |
| POST | `/api/content/rebuild-knowledge` | 觸發 `npm run build:knowledge` |
### Chrome 擴充功能
位於 `extension/` 目錄。
**安裝步驟:**
1. 打開 Chrome前往 `chrome://extensions`
2. 開啟右上角「開發人員模式」
3. 點選「載入未封裝項目」
4. 選擇 `path/to/app/extension/` 資料夾
**使用方式:**
- **YouTube 影片頁**:擴充功能會在影片標題下方自動加入「📥 擷取此影片」按鈕,點擊後取得字幕並傳送至後端
- **HyRead 閱讀器**:擴充功能會在頁面右上角加入「📥 匯入此書」按鈕,點擊後擷取 book HTML 並傳送至後端
- **Popup 面板**:點擊工具列圖示可查看伺服器狀態、偵測當前分頁類型,也可手動擷取
### 排程器
伺服器啟動後會自動啟動排程器(預設每 5 分鐘檢查一次排程),在內容管理頁面的「排程」分頁中管理 YouTube 頻道 / 播放清單的定期抓取。