# AI Knowledge

這個 repo 是給 Codex App 使用的私人 AI 知識庫。

## 內容結構

- `sources.md`: 追蹤來源與抓取設定
- `index.md`: 知識庫入口與近期索引
- `daily/`: 每日 Facebook AI 新知摘要
- `raw/facebook/`: 每日 Meta Graph API 原始回應與錯誤紀錄
- `raw/threads/`: 每日 Threads API 原始回應與錯誤紀錄
- `raw/inspirations/`: 每日圖片提示詞靈感摘要與錯誤紀錄
- `outbox/inspirations/`: 原創圖片提示詞貼文待審草稿
- `topics/`: 主題型整理筆記
- `inbox/facebook/`: Facebook 無法自動讀取時的人工補件入口
- `scripts/`: Meta Graph API 查詢腳本
- `docs/`: API 設定與操作文件
- `.github/workflows/`: GitHub Actions 每日更新排程

## 使用方式

既有 GitHub Actions 流程原本設計為每天台北時間 08:00 整理前一天的 Facebook 與 Threads AI 相關內容，寫入 `daily/` 並更新索引；但這需要 Meta / Threads 對應權限，目前不作為每日發文流程的必要條件。

如果 Graph API 因 token、權限或 App Review 限制無法讀取，可以把貼文連結、截圖 OCR 文字或複製下來的貼文內容放進 `inbox/facebook/`，Codex 會整理這些可驗證內容。

Graph API 設定請看 `docs/meta-graph-api.md`。

GitHub Actions 設定請看 `docs/github-actions.md`。

Threads API 設定請看 `docs/threads-api.md`。

圖片貼文自動化規劃請看 `docs/image-posting-plan.md`。

Codex App 產圖與保存流程請看 `docs/codex-automation.md`。

新的圖片貼文方向是每日 1 篇原創 AI 圖像提示詞靈感貼文：只參考公開頁面的主題與風格方向，不保存、不發布外站完整 prompt；產圖使用 Codex App 內建 image gen，發布前需經 LINE 審核。這條新流程不需要 Meta 公司內容讀取權限。

主要部署目標已改為 Cloudflare Pages。設定方式請看 `docs/cloudflare-pages.md`。

每日靈感摘要收集腳本：

```bash
python3 scripts/collect_prompt_inspiration.py
```

產生原創貼文草稿：

```bash
python3 scripts/generate_inspiration_post.py
```

Codex App image gen 產圖後，登記圖片到草稿：

```bash
python3 scripts/register_generated_image.py --draft outbox/inspirations/YYYY-MM-DD.json --image assets/generated/YYYY-MM-DD/inspiration-YYYY-MM-DD.png
```

送 LINE 審核：

```bash
python3 scripts/send_line_review.py --draft outbox/inspirations/YYYY-MM-DD.json --line-user-id LINE_USER_ID --dry-run
```

審核草稿：

```bash
python3 scripts/review_inspiration_post.py --draft outbox/inspirations/YYYY-MM-DD.json --action approve --reviewer line-user-id
```

透過 LINE webhook 核准時，GitHub Actions 會驗證草稿 `id`，自動建立發布包並發布到 Threads。拒絕或要求重新產圖不會發布。

發布前檢查：

```bash
python3 scripts/validate_publish_ready.py --draft outbox/inspirations/YYYY-MM-DD.json
```

產生發布包，不會真的發文：

```bash
python3 scripts/build_publish_package.py --draft outbox/inspirations/YYYY-MM-DD.json
```

記錄手動發布結果：

```bash
python3 scripts/record_publish_result.py --package publish/ready/YYYY-MM-DD.json --platform facebook --post-url "https://www.facebook.com/..."
python3 scripts/record_publish_result.py --package publish/ready/YYYY-MM-DD.json --platform threads --post-url "https://www.threads.net/..."
```

直接發布到 Facebook / Threads，發文成功後會自動寫入 `publish/results/`：

```bash
python3 scripts/publish_social_post.py --package publish/ready/YYYY-MM-DD.json --platform all --confirm
```

也可以用 GitHub Actions 手動觸發：

```text
Actions -> Publish Inspiration Post -> Run workflow
```

建議先用 `dry_run=true` 檢查，確認 payload 正確後再改成 `dry_run=false` 發布。若目前只設定 Threads token，`platform` 請選 `threads`。

正式發布前會檢查 `publish/results/YYYY-MM-DD.json`。如果目標平台已記錄為 `published`，流程會在呼叫平台 API 前停止，避免重複發文；`dry_run=true` 仍可重複執行檢查 payload。

直接發布需要本機或 CI 設定：

```text
FACEBOOK_PAGE_ID
FACEBOOK_PAGE_ACCESS_TOKEN
THREADS_USER_ID
THREADS_ACCESS_TOKEN
```

檢查或更新 Threads token：

```bash
python3 scripts/refresh_threads_token.py --mode check
python3 scripts/refresh_threads_token.py --mode exchange --write-env
python3 scripts/refresh_threads_token.py --mode refresh --write-env
```

LINE webhook：

```text
POST /api/line-review
```

Cloudflare Pages Function：

```text
functions/api/line-review.js
```

若改用 Cloudflare 部署，記得在 GitHub repo variable 設定：

```text
PUBLIC_ASSET_BASE_URL=https://你的-cloudflare-domain
```

每日草稿排程：

```text
.github/workflows/daily-inspiration.yml
```

之後可以在 Codex 中詢問：

- 最近一週有哪些 AI Agent 相關內容？
- 幫我整理這個月出現最多的 AI 主題。
- 根據知識庫，幫我做一份學習路線。
