# FR-166 Agent 獨立作業主控台 — STATE（living，只描述此刻）

> 更新：2026-10-28 首腦第 7 棒收尾（23:xx）｜**全案收尾**：決策者 123 手測五項全過、69 張子卡全 Done｜出貨基線已重產（BE `4c927ece4`）｜套件已發版、BE 釘版｜123 跑 Agent `0ccb44c`＋主控台 `44f2e5f7`｜**BE 收尾 commit 未推**（基線＋文件）；FE／Agent／套件無未推｜總結 `2026-10-28-FR-166-SUMMARY.md`
> 讀序：本檔 → `FR-166-LOG.md` 最後一段（第 6 棒）→ `../design.md`（v2，§3 決策 D1～D23、§10 手測追加）→ `../README.md` → `../prototype/index.html`

## 🧭 原始需求

老闆 2026-10-26：Agent 與主系統斷線時仍能獨立作業——直接打 Agent 網址登入、不經任務按八支掃描工具、網路除錯（ping／traceroute 等，使用者勾選、有些公司會告警）、斷線不停工復線補傳、多據點各自作業報告回台北；不能變跳板或駭客工具。決策者追加：登入方式比較業界模式、LDAP（老闆會要）、重啟 Agent、總覽像儀表板、登入頁與殼照主系統改 Agent 模式。

## 冷接自檢（讀完要答得出）

1. 「誰能登入」與「能掃誰」為什麼是兩道門？local-admin 拿到了能掃任意 IP 嗎？（答：不能，掃描範圍由主系統下發的清冊決定、不看身分；未同步的 Agent 連清冊都沒有，什麼都掃不了）
2. 第三方元件掃描是「移到 Agent」嗎？（答：不是，FR-156 後執行本來就全在 Agent；本案只補 Agent 自己的入口，結果走既有 `source_scans`）
3. 為什麼不起 Postgres、為什麼抽 `jedi-ldap` 而不是 Agent 裝 jedi-iam？（答：§13.4／§3.5）
4. §13 推翻了前稿哪四處？（Nmap 執行主機已過清冊；主系統沒有派工逾時；`receive_result` 只對 cancelled 冪等；Agent 沒有 migration 機制）

## 1. 當前狀態

| 項 | 狀態 |
|---|---|
| 全部子卡 | 69 張皆 `Done`（原 59 張＋CM-3170～3198 共 29 張，決策者 2026-10-28 手測通過後由第 7 棒改；CM-3148 e2e 已 Done 標暫緩） |
| 母卡 CM-3109 | 子卡全 Done；母卡收尾總結已 append，狀態改 Done 是決策者的事 |
| push | FE `44f2e5f7`、Agent `0ccb44c`、套件 `b7844b71` 已推；BE 到 `ce9c44322` 已推，**收尾 commit（基線重產 `4c927ece4`＋文件）未推**。push 一律等決策者 |
| 套件 | **已發版**（決策者 2026-10-28 明示）：jedi-iam 1.9.0、jedi-remote-agent 1.8.0、jedi-source-scan 0.5.0（套件 `b7844b71`）。BE `pyproject.toml` 已改回 `==` 釘版、path 行註解、取消 assume-unchanged（BE `060ff69c8`）。**本機 BE 已無任何 path dependency**，三支 `__file__` 皆 site-packages。evidence-agent 只用 Nexus 正式版、無 path 依賴 |
| 本機環境 | BE 8000（PID 30024）＋worker（PID 30026）以正式版套件重啟過；Agent 8444 跑 `0ccb44c`；FE 5180（PID 14295）已改走 Vite `/api` 代理（`.env.development.local` 的 `VITE_API_URL=/api/1.0`，不入版控）。主控台 dist 從 FE `44f2e5f7` build |
| DEV DB | **出貨基線已重產**：188 基線庫補套 12 支主線 migration（FR-157／161／162／165／166），02／04／99 重產，stamp gate 綠。DEV 補登記套件 011／012。`2026-10-28-fr166-hide-tool-plugin-manage-menu.sql` 補進 manifest（seed）。ubuntu-lab-03 已授權 blsadmin 離線操作（到 2027-01-26） |

## 2. 已定裁示（不要再問）

全部在 `discussion.md` §9 表。關鍵幾條：

- D1 三層登入：安裝時強制設 `local-admin`（既有救援碼 sub 加密碼、永不過期、仍過清冊）＋主系統授權離線操作者（心跳下發名單、本人在線時設離線密碼、到期日、離線 30 天停用）＋入場券跳轉；救援碼保留。Agent 端**沒有新增使用者**。
- D3 八支工具全部可在 Agent 手動執行（決策者明令「所有掃描工具都要能在 Agent 獨立執行」）；ZAP 網址解析成 IP 後過清冊，Agent 端 `allowed_targets.py` 補。**不要再拿 FR-129 當理由砍 ZAP。**
- D5 網路除錯：本機儀表板九卡（自動載入、無噪音）＋十項診斷（安靜預設勾，traceroute／mtr 式要勾並確認）全進第一版；結果＝路徑圖＋判讀卡。tcpdump／iperf／埠範圍／nmap 探測／ARP 掃描不包（D10）。
- D7／D15 續傳：Agent outbox（任務結果永不丟）＋心跳 drain；主系統 `receive_result` 改任何終態冪等；派工 Agent 離線 7 天 reaper。
- D8 不加據點欄，靠 Agent 名稱。D9 CIDR 安裝時設底線、主系統只能收緊、隱含 loopback。D11 不起 Postgres。D12 未同步只准 local-admin 登、只准主系統連線診斷。D13 新裝強制設密碼、升級非互動不強制。D14 重啟兩入口＋心跳旗標 when_idle／now。D16 最小 `schema_version` 表。
- D17 Agent LDAP 三選一（同步／自設／不接），名單仍主系統決定。D18 憑證首次信任釘住、拿掉勾選框、預設 STARTTLS（**推翻 CM-2239**，主系統 LDAP 設定頁一併改）。D19 抽 `jedi-ldap` 零相依套件。
- 殼：結構照主系統（側欄 14rem、頂欄 4rem）、身分靠四訊號（側欄 teal、側欄頂 AGENT＋這台狀態、常駐狀態列、分頁標題）。總覽＝儀表板不另開 Dashboard 頁。
- 資安例外兩條（SR-08.2 逐項回結果、SR-04.9 內網直連）照三條件登記：目標受限／單目標序列限速／稽核含完整目標。
- 多因子明列「太龐大不做、決策者可反對」。
- **D22**：主控台儲存位置只能選內建 SeaweedFS，其餘三型只走 CLI。
- **D23**：離線操作者權限跟主系統同一份。名單只管能不能離線登入與到期日，範圍每次心跳依當下 Agent 能力點算（`restart` 不下放）；沒有任何 Agent 能力點的人不可加入。

## 3. 任務總表（STATE 是單一來源，驗收後先改這裡再貼給決策者）

母卡 [CM-3109](https://app.notion.com/p/FR-166-Agent-LDAP-41-9-405346da4cd081beafa6e633e35831d6)。狀態欄：⬜ Not started／🔵 In progress／🟡 修正待驗證／🟢 驗收通過待確認／✅ Done／⏸ 暫緩。

**以 Notion 讀回（2026-10-28）**：69 張。原案＋補丁／P5 共 59 張（58 驗收通過待確認、CM-3148 暫緩），批號以工作坊實際排法為準；表尾「延」開頭是 2026-10-28 決策者逐項追加的延伸卡（首腦直接做，不走工作坊）。

| 批 | 卡號 | 卡 | 階段 | repo | model／effort | 依賴 | 狀態 |
|---|---|---|---|---|---|---|---|
| 1 | [CM-3110](https://app.notion.com/p/FR-166-P0-1-jedi-ldap-jedi-python-package-405346da4cd081a0b33ee7bb02f1fae3) | P0-1 抽 jedi-ldap 零相依套件：目錄連線、首次信任釘… | P0 | jedi 套件 | opus／high | — | 🟢 驗收通過待確認 |
| 1 | [CM-3111](https://app.notion.com/p/FR-166-P0-4-Agent-DB-schema_version-migration-list-D16-evidence-agent-405346da4cd0813bbf1cf53e1938cf12) | P0-4 Agent 本機 DB 最小版本機制：schema_ve… | P0 | evidence-agent | opus／medium | — | 🟢 驗收通過待確認 |
| 1 | [CM-3112](https://app.notion.com/p/FR-166-P0-5-jedi-remote-agent-remote_agents-domain-repo-service-jedi-python-package-405346da4cd081959e8ece7a2942ca85) | P0-5 jedi-remote-agent 兩張新表、remot… | P0 | jedi 套件 | opus／high | — | 🟢 驗收通過待確認 |
| 1 | [CM-3113](https://app.notion.com/p/FR-166-P1-7a-FE-console-1-2-state-FE-405346da4cd0818797c5d7c4c5a2046b) | P1-7a FE console 殼改側欄＋頂欄＋狀態列、登入頁骨架… | P1 | FE 主站／console | opus／medium | — | 🟢 驗收通過待確認 |
| 2 | [CM-3114](https://app.notion.com/p/FR-166-P0-2-jedi-iam-jedi-ldap-jedi-python-package-405346da4cd081bc88c2f032b38d52af) | P0-2 jedi-iam 瘦身接 jedi-ldap：失敗計入鎖… | P0 | jedi 套件 | opus／high | P0-1 | 🟢 驗收通過待確認 |
| 2 | [CM-3115](https://app.notion.com/p/FR-166-P0-6-jedi-remote-agent-local-runs-restart-7-reaper-jedi-python-pack-405346da4cd081c1aa1af94213ebca06) | P0-6 jedi-remote-agent 心跳契約擴充、終態冪… | P0 | jedi 套件 | opus／high | P0-5 | 🟢 驗收通過待確認 |
| 2 | [CM-3116](https://app.notion.com/p/FR-166-P1-3-Agent-observer-local-admin-argon2id-30-observer--405346da4cd0816c8514ce3784abb9c2) | P1-3 Agent 離線身分：名單快取 observer、loc… | P1 | evidence-agent | opus／high | P0-4 | 🟢 驗收通過待確認 |
| 2 | [CM-3117](https://app.notion.com/p/FR-166-P2-4-core-netdiag-estimate-evidence-agent-405346da4cd08169bf69e786b03c5138) | P2-4 網路除錯執行器 core/netdiag/：儀表板讀取、… | P2 | evidence-agent | opus／high | — | 🟢 驗收通過待確認 |
| 3 | [CM-3118](https://app.notion.com/p/FR-166-P0-3-jedi-system-core-LDAP-Fernet-jedi-python-package-405346da4cd08156afd4f128d5002e92) | P0-3 jedi-system-core LDAP 設定組加釘住… | P0 | jedi 套件 | sonnet／medium | P0-2 | 🟢 驗收通過待確認 |
| 3 | [CM-3119](https://app.notion.com/p/FR-166-P0-7-LDAP-STARTTLS-11-FE-405346da4cd081f09849f0ab488419a4) | P0-7 主站 LDAP 設定頁：拿掉驗證憑證勾選、已信任憑證＋重… | P0 | FE 主站／console | sonnet／medium | P0-2 | 🟢 驗收通過待確認 |
| 3 | [CM-3120](https://app.notion.com/p/FR-166-P1-1-plugins-remote_agent-P0-5-P0-6-port-migration-CIDR-BE-405346da4cd081b58055e6fddd2522d1) | P1-1 主系統接線：plugins/remote_agent 接… | P1 | BE | opus／medium | P0-5、P0-6 | 🟢 驗收通過待確認 |
| 3 | [CM-3121](https://app.notion.com/p/FR-166-P1-4-Agent-API-local-session-me-password-state-console-blueprint-evidence-a-405346da4cd0812590e8d484060142e8) | P1-4 Agent 登入 API：local-session、m… | P1 | evidence-agent | opus／medium | P1-3 | 🟢 驗收通過待確認 |
| 3 | [CM-3122](https://app.notion.com/p/FR-166-P1-5-CIDR-loopback-CLI-reset-scripts-install-lib-evidence-age-405346da4cd08160ac81f6aa33f48d74) | P1-5 主控台連入 CIDR 白名單：安裝底線、心跳交集、隱含 … | P1 | evidence-agent | opus／medium | — | 🟢 驗收通過待確認 |
| 3 | [CM-3123](https://app.notion.com/p/FR-166-P2-1-Agent-_run_one-sink-local_runs-ZAP-evidence-agent-405346da4cd081e4876ee21ad2f365ae) | P2-1 Agent 手動執行骨架：_run_one 抽 sink… | P2 | evidence-agent | opus／high | P0-4、P1-3 | 🟢 驗收通過待確認 |
| 4 | [CM-3124](https://app.notion.com/p/FR-166-P1-2-10-FE-405346da4cd081bbb7aed5a2819812ac) | P1-2 主站離線操作者授權對話框＋清單欄（雛形幕 10 上半）… | P1 | FE 主站／console | opus／medium | P1-1 | 🟢 驗收通過待確認 |
| 4 | [CM-3125](https://app.notion.com/p/FR-166-P1-6-local-admin-reset-admin-password-wipe-re-enroll-upgrade--405346da4cd081cba6a2d4016abed6de) | P1-6 安裝與升級流程：新裝強制設 local-admin、升級… | P1 | evidence-agent | opus／high | P1-3、P1-5 | 🟢 驗收通過待確認 |
| 4 | [CM-3126](https://app.notion.com/p/FR-166-P1-7b-FE-console-1-FE-405346da4cd081679ffef1c83e27b5cc) | P1-7b FE console 登入頁接真端點：三態、四種登入、設… | P1 | FE 主站／console | opus／medium | P1-7a、P1-4 | 🟢 驗收通過待確認 |
| 4 | [CM-3127](https://app.notion.com/p/FR-166-P2-2-API-tools-targets-schema-runs-cancel-scan-input-source_scans-evidence-ag-405346da4cd08178afb3dc0a30f74a24) | P2-2 手動掃描 API：tools／targets／schem… | P2 | evidence-agent | opus／high | P2-1 | 🟢 驗收通過待確認 |
| 4 | [CM-3128](https://app.notion.com/p/FR-166-P2-5-API-dashboard-targets-runs-report-cloud-evidence-agent-405346da4cd08188a5ccc632c3bb4ff7) | P2-5 網路除錯 API：dashboard／targets／r… | P2 | evidence-agent | opus／medium | P2-1、P2-4 | 🟢 驗收通過待確認 |
| 4 | [CM-3129](https://app.notion.com/p/FR-166-P2-8a-API-uptime-API-secret_form-evidence-agent-405346da4cd081479f19faa5e5581887) | P2-8a 維運 API：重啟（優雅結束）、uptime、支援診斷包… | P2 | evidence-agent | opus／high | P1-3 | 🟢 驗收通過待確認 |
| 5 | [CM-3130](https://app.notion.com/p/FR-166-P1-8-API-Agent-2-evidence-agent-405346da4cd081229728c1ff9da48c48) | P1-8 總覽 API：狀態燈、這台 Agent 資訊、正在執行（… | P1 | evidence-agent | sonnet／medium | P1-3、P2-1 | 🟢 驗收通過待確認 |
| 5 | [CM-3131](https://app.notion.com/p/FR-166-P2-9-observer-when_idle-now-evidence-agent-405346da4cd081cebf48cd2f0fcd2b87) | P2-9 心跳旗標重啟 observer：when_idle／no… | P2 | evidence-agent | sonnet／low | P1-3、P0-6、P2-8a | 🟢 驗收通過待確認 |
| 5 | [CM-3132](https://app.notion.com/p/FR-166-P3-1-Agent-outbox-drain-evidence-agent-405346da4cd081d7840bc1a1552d600c) | P3-1 Agent outbox：表、入列、心跳後 drain、… | P3 | evidence-agent | opus／high | P0-4、P1-3、P2-1 | 🟢 驗收通過待確認 |
| 5 | [CM-3133](https://app.notion.com/p/FR-166-P3-2-local-runs-JWT-nickname-enrich-BE-405346da4cd0815f88f0f0f47889f770) | P3-2 主系統收自主執行紀錄：local-runs 端點接線、落… | P3 | BE | opus／medium | P0-6、P1-1 | 🟢 驗收通過待確認 |
| 5 | [CM-3134](https://app.notion.com/p/FR-166-P3-5-7-reaper-core-scheduler_agent-py-scheduler-py-714-BE-405346da4cd0819b946bf53e663a9f07) | P3-5 7 天 reaper 接線：抽 core/schedul… | P3 | BE | sonnet／low | P0-6 | 🟢 驗收通過待確認 |
| 5 | [CM-3135](https://app.notion.com/p/FR-166-P3-7-Agent-shell-True-nmap-tcpdump-iperf-local-admin-403-403--405346da4cd081b1ac10c7b73d22cff4) | P3-7 守衛測試（Agent 側七條）：入口過清冊、無 shel… | P3 | evidence-agent | opus／medium | P2-2、P2-5 | 🟢 驗收通過待確認 |
| 6 | [CM-3137](https://app.notion.com/p/FR-166-P2-6-FE-console-4-FE-405346da4cd08179b485f4df16994a2d) | P2-6 FE console 網路除錯分頁：資訊區＋連線狀態燈、… | P2 | FE 主站／console | opus／high | P1-7b、P2-5 | 🟢 驗收通過待確認 |
| 6 | [CM-3140](https://app.notion.com/p/FR-166-P3-3-BE-ui_routes-route_capabilities-migration-FR-132-BE-405346da4cd08130831fd55d7ee02514) | P3-3 主站自主執行紀錄頁 BE 側：ui_routes＋rou… | P3 | BE | sonnet／medium | P1-1 | 🟢 驗收通過待確認 |
| 6 | [CM-3141](https://app.notion.com/p/FR-166-P3-4a-jedi-remote-agent-_enrich_online-detection_orchestration_service-jed-405346da4cd08172ac67ee7bcd805c01) | P3-4a jedi-remote-agent `_enrich_o… | P3 | jedi 套件 | sonnet／low | P0-6 | 🟢 驗收通過待確認 |
| 6 | [CM-3151](https://app.notion.com/p/FR-166-P3-0-BE-jedi-python-package-path-BE-406346da4cd081429d0eea284f836bcc) | P3-0 開發期 BE 改吃 jedi-python-p… | P3 | BE | opus／medium | — | 🟢 驗收通過待確認 |
| 6 | [CM-3152](https://app.notion.com/p/FR-166-P3-0a-param_schema-BE-406346da4cd08125a554edf823a2947b) | P3-0a 主系統下發工具的掃描參數表單 param_s… | P3 | BE | sonnet／medium | — | 🟢 驗收通過待確認 |
| 6 | [CM-3153](https://app.notion.com/p/FR-166-P3-0b-Agent-me-state-argon2-evidence-agent-406346da4cd081e4b67ff580eb3ec9c7) | P3-0b Agent 端補丁：認得三個新權限、心跳回報… | P3 | evidence-agent | opus／medium | P1-3、P1-4 | 🟢 驗收通過待確認 |
| 6 | [CM-3154](https://app.notion.com/p/FR-166-P3-0c-jedi-remote-agent-local_runs-jedi-python-package-406346da4cd081fb921ed2ba3e5f389e) | P3-0c jedi-remote-agent：loca… | P3 | jedi 套件 | opus／medium | P0-6 | 🟢 驗收通過待確認 |
| 7 | [CM-3136](https://app.notion.com/p/FR-166-P2-3-FE-console-tool_schemas-ZAP-3-FE-405346da4cd08156968af219ddbbbbc2) | P2-3 FE console 掃描工具分頁：步驟條、工具卡、清冊… | P2 | FE 主站／console | opus／high | P1-7b、P2-2 | 🟢 驗收通過待確認 |
| 7 | [CM-3139](https://app.notion.com/p/FR-166-P2-8b-FE-console-6-2-FE-405346da4cd081829de4d77984e411a7) | P2-8b FE console 服務與重啟分頁＋總覽改版：狀態卡、… | P2 | FE 主站／console | opus／medium | P1-7b、P1-8、P2-8a | 🟢 驗收通過待確認 |
| 7 | [CM-3142](https://app.notion.com/p/FR-166-P3-3b-FE-Agent-10-FE-405346da4cd081108caef290eab52edb) | P3-3b 主站自主執行紀錄頁 FE：篩 Agent／種類／工具／人… | P3 | FE 主站／console | opus／medium | P3-2、P3-3 | 🟢 驗收通過待確認 |
| 7 | [CM-3144](https://app.notion.com/p/FR-166-P3-6-BE-BE-405346da4cd081efbd7ff44ea201a9ca) | P3-6 主系統要求重啟接線（BE）… | P3 | BE | sonnet／low | P0-6、P1-1、P2-9 | 🟢 驗收通過待確認 |
| 7 | [CM-3145](https://app.notion.com/p/FR-166-P4-1-Agent-LDAP-jedi-ldap-ldap_source-ldap_config-Nuitka-include-evidence--405346da4cd081ed900dd9edf579d3b2) | P4-1 Agent LDAP 三選一：裝 jedi-ldap、l… | P4 | evidence-agent | opus／high | P0-1、P1-3、P2-8a | 🟢 驗收通過待確認 |
| 7 | [CM-3155](https://app.notion.com/p/FR-166-P3-0d-LDAP-BE-406346da4cd081ffa154ff9ab4c438bf) | P3-0d 主系統接線補丁：LDAP 憑證指紋寫回、重新… | P3 | BE | opus／medium | P0-3、P1-1 | 🟢 驗收通過待確認 |
| 7 | [CM-3157](https://app.notion.com/p/FR-166-P2-7a-Agent-API-evidence-agent-406346da4cd08103b7adede866c593c4) | P2-7a Agent 執行紀錄清單 API：主系統任務… | P2 | evidence-agent | opus／medium | P2-1 | 🟢 驗收通過待確認 |
| 8 | [CM-3138](https://app.notion.com/p/FR-166-P2-7-FE-console-5-FE-405346da4cd081fe83e8ceb53c731b61) | P2-7 FE console 執行紀錄分頁：同一表、來源欄、回傳… | P2 | FE 主站／console | opus／medium | P1-7b、P2-2、P3-1 | 🟢 驗收通過待確認 |
| 8 | [CM-3143](https://app.notion.com/p/FR-166-P3-4b-Agent-LDAP-10-FE-405346da4cd0814e94feeaabbe5e34c1) | P3-4b 主站 Agent 清單待傳／LDAP 欄＋要求重啟對話框… | P3 | FE 主站／console | sonnet／low | P3-4a、P3-6 | 🟢 驗收通過待確認 |
| 8 | [CM-3146](https://app.notion.com/p/FR-166-P4-2-LDAP-ldap_config-Agent-LDAP-BE-405346da4cd08165b864cdea0ecdc807) | P4-2 主系統 LDAP 設定下發心跳：ldap_config … | P4 | BE | opus／medium | P0-3、P0-6、P4-1 | 🟢 驗收通過待確認 |
| 8 | [CM-3147](https://app.notion.com/p/FR-166-P4-3-FE-console-LDAP-7-FE-405346da4cd081a78983c1a52192e819) | P4-3 FE console LDAP 設定分頁：三選一、同步唯… | P4 | FE 主站／console | sonnet／medium | P2-8b、P4-1 | 🟢 驗收通過待確認 |
| 8 | [CM-3156](https://app.notion.com/p/FR-166-P4-7-Agent-ping-traceroute-ping-evidence-agent-406346da4cd081e9822cc39dab3d0d48) | P4-7 容器版 Agent 補裝 ping、trace… | P4 | evidence-agent | sonnet／low | P2-4 | 🟢 驗收通過待確認 |
| 9 | [CM-3148](https://app.notion.com/p/FR-166-P4-6-e2e-LDAP-Agent-compliance-manager-test-405346da4cd081c29077c545047a4cd1) | P4-6 e2e：主站 LDAP 登入鎖定與釘住、Agent 管理… | P4 | test | sonnet／medium | P0-7、P1-2、P3-3b、P3-4b | ⏸ 暫緩 |
| 9 | [CM-3149](https://app.notion.com/p/FR-166-P4-4-SPEC-Agent-Agent-LDAP-writing-feature-specs-BE-405346da4cd0818f8ba0dff07a54d712) | P4-4 SPEC：Agent 主控台頁改版、Agent 管理頁、… | P4 | BE | sonnet／medium | 全部實作卡 | 🟢 驗收通過待確認 |
| 9 | [CM-3150](https://app.notion.com/p/FR-166-P4-5-Agent-BE-405346da4cd081cb998ff081e443c78d) | P4-5 手冊與安裝文件：Agent 獨立作業一章、安裝需求、資安… | P4 | BE | opus／medium | 全部實作卡 | 🟢 驗收通過待確認 |
| 9 | [CM-3158](https://app.notion.com/p/FR-166-P3-4c-Agent-LDAP-jedi-python-package-406346da4cd0810c827cf96c069219ec) | P3-4c 套件補欄位：Agent 清單補待傳／LDAP… | P3 | jedi 套件 | sonnet／medium | P0-6 | 🟢 驗收通過待確認 |
| 9 | [CM-3159](https://app.notion.com/p/FR-166-P4-3a-FE-LDAP-FE-406346da4cd081a48ec9ddb6d46cae9f) | P4-3a FE 補 LDAP 重新信任的兩個錯誤碼翻譯 | P4 | FE 主站／console | sonnet／low | P0-7 | 🟢 驗收通過待確認 |
| 10 | [CM-3161](https://app.notion.com/p/FR-166-P5-1-jedi-source-scan-Agent-jedi-python-package-406346da4cd0810496cef5062773e1b6) | P5-1 jedi-source-scan 收 Agen… | P5 | jedi 套件 | opus／medium | P2-2 | 🟢 驗收通過待確認 |
| 10 | [CM-3162](https://app.notion.com/p/FR-166-P5-2-jedi-remote-agent-local_admin_set-jedi-python-package-406346da4cd081ef97bbdb8a85f49e04) | P5-2 jedi-remote-agent 補欄位：清… | P5 | jedi 套件 | sonnet／medium | P0-6 | 🟢 驗收通過待確認 |
| 10 | [CM-3166](https://app.notion.com/p/FR-166-P5-6-render_index-py-BE-406346da4cd081d4b934cd8e35ffe061) | P5-6 資安報告站產生工具 render_index.… | P5 | BE | sonnet／medium | — | 🟢 驗收通過待確認 |
| 11 | [CM-3163](https://app.notion.com/p/FR-166-P5-3-BE-Agent-sbom-6-BE-406346da4cd081eb8e7cd25eb4f2a126) | P5-3 BE 收尾補齊：清冊帶設備名、主系統任務帶派工… | P5 | BE | opus／medium | P5-1、P5-2 | 🟢 驗收通過待確認 |
| 12 | [CM-3165](https://app.notion.com/p/FR-166-P5-5-Agent-session-20-sbom-evidence-agent-406346da4cd08133a2a0cd6d767c2d1c) | P5-5 Agent 收尾補齊：總覽補燈與資訊、重啟權限… | P5 | evidence-agent | opus／high | P5-3 | 🟢 驗收通過待確認 |
| 13 | [CM-3164](https://app.notion.com/p/FR-166-P5-4-FE-Agent-FE-406346da4cd081249842d5f07a4ae611) | P5-4 FE 收尾補齊：清單本機管理員密碼提醒、主控台… | P5 | FE 主站／console | opus／medium | P5-3、P5-5 | 🟢 驗收通過待確認 |
| 15 | [CM-3160](https://app.notion.com/p/FR-166-P4-8-BE-module_boundaries-6-security-16-BE-406346da4cd081b4869be18610cd8d4b) | P4-8 BE 守衛紅燈清零：module_bounda… | P4 | BE | opus／high | P3-0、P3-0d | 🟢 驗收通過待確認 |
| 14 | [CM-3167](https://app.notion.com/p/FR-166-P5-7-Agent-assembly-500-jedi-python-package-406346da4cd0812ea822d9412956f139) | P5-7 套件補兩處：Agent 清單輸出主控台連入網段兩欄、第三方… | P5 | jedi 套件 | — | — | 🟢 驗收通過待確認 |
| 14 | [CM-3168](https://app.notion.com/p/FR-166-P5-8-Agent-cap_add-NET_RAW-SR-09-5-evidence-agent-406346da4cd0817e8ccac8b2a5616212) | P5-8 Agent 資安守衛：容器 cap_add 只准 NET_… | P5 | evidence-agent | — | — | 🟢 驗收通過待確認 |
| 延1 | [CM-3170](https://app.notion.com/p/BE-Agent-7-407346da4cd08111a30ec0e8b9bd60ec) | BE：租戶設定 Agent 離線登入天數（預設 7 天）＋心跳下發＋… | 延伸 | BE＋jedi 套件 | — | — | 🟡 修正待驗證 |
| 延1 | [CM-3171](https://app.notion.com/p/Agent-7-30-30-407346da4cd0811082dffbad392ad4b3) | Agent：離線登入天數改吃主系統下發（預設 7 天、上限 30），… | 延伸 | evidence-agent | — | — | 🟡 修正待驗證 |
| 延2 | [CM-3172](https://app.notion.com/p/FE-Agent-407346da4cd081faa45ef1224cb007f7) | FE：Agent 管理頁設定離線登入天數、顯示本機管理員最近登入；主… | 延伸 | FE | — | — | 🟡 修正待驗證 |
| 延1 | [CM-3173](https://app.notion.com/p/Agent-AD-AD-407346da4cd0815b9731e723216dc8ad) | Agent：AD 登入只問 AD 且不受離線天數限制、離線密碼照主系… | 延伸 | evidence-agent | — | — | 🟡 修正待驗證 |
| 延3 | [CM-3174](https://app.notion.com/p/Agent-407346da4cd081b99d53e10b67425d76) | Agent：心跳回報本機管理員密碼最後設定時間（給主系統提醒該換密碼… | 延伸 | evidence-agent | — | — | 🟡 修正待驗證 |
| 延3 | [CM-3175](https://app.notion.com/p/BE-407346da4cd08119b0d1d66be254d75c) | BE：主系統收本機管理員密碼設定時間、登入時通知租戶管理員 | 延伸 | BE＋jedi 套件＋FE | — | — | 🟡 修正待驗證 |
| 延1 | [CM-3176](https://app.notion.com/p/FE-15-30-composable-407346da4cd08150b30bdc3ec94df999) | FE：主控台與主系統閒置 15 分鐘提醒、30 分鐘登出（抽共用 c… | 延伸 | FE | — | — | 🟡 修正待驗證 |
| 延2 | [CM-3177](https://app.notion.com/p/FE-AD-Agent-407346da4cd0818085e1df0795b956db) | FE：離線密碼說明照主系統規則、登入頁 AD／離線密碼分開送、主控台… | 延伸 | FE | — | — | 🟡 修正待驗證 |
| 延2 | [CM-3178](https://app.notion.com/p/Agent-https-http-407346da4cd081f0a2f8f64468bf3092) | Agent 安裝：主系統位址只接受 https，開發模式明確開啟才允… | 延伸 | evidence-agent | — | — | 🟡 修正待驗證 |
| 延1 | [CM-3179](https://app.notion.com/p/Agent-407346da4cd0813e84abea50710fa93a) | Agent 名稱可在主控台修改並經心跳與主系統雙向同步（以最後修改時… | 延伸 | 四 repo | — | — | 🟡 修正待驗證 |
| 追4 | [CM-3180](https://app.notion.com/p/BE-Agent-Agent-407346da4cd081a2853ef537edba464f) | BE：Agent 掃描執行紀錄併入第三方元件 Agent 手動列、選單搬合規與稽核 | 追加 | BE＋jedi-source-scan | opus／medium | — | 🟢 驗收通過待確認 |
| 追4 | [CM-3181](https://app.notion.com/p/BE-70-407346da4cd0814bbda0ce7897cf306f) | BE：背景工作排程去重 | 追加 | BE | sonnet／medium | — | 🟢 驗收通過待確認 |
| 追5 | [CM-3182](https://app.notion.com/p/FE-Agent-407346da4cd0816f8ab8d08120ff29a3) | FE：Agent 掃描執行紀錄頁版面統一主控台、失敗看原因 | 追加 | FE | opus／medium | 3180 | 🟢 驗收通過待確認 |
| 追4 | [CM-3183](https://app.notion.com/p/BE-AD-AD-Agent-AD-407346da4cd0810fb67afb961c8b1ebc) | BE＋套件：離線操作者名單下發 AD 帳號（jedi-iam `provider_login`） | 追加 | BE＋jedi-iam＋jedi-remote-agent | opus／high | — | 🟢 驗收通過待確認 |
| 追5 | [CM-3184](https://app.notion.com/p/Agent-AD-AD-AD-log-407346da4cd08195936ff246473d30d3) | Agent：AD 登入用 ad_account 問 AD、失敗 log 分三關（**方向做反，3192 修**） | 追加 | evidence-agent | opus／medium | 3183 | 🟢 驗收通過待確認 |
| 追4 | [CM-3185](https://app.notion.com/p/Agent-console-history-407346da4cd08126ba6fce68918bb9e9) | Agent：`/console/<分頁>` 白名單子路徑回首頁 | 追加 | evidence-agent | sonnet／medium | — | 🟢 驗收通過待確認 |
| 追5 | [CM-3186](https://app.notion.com/p/FE-vue-router-history-console-runs-page-407346da4cd081df866ad853d0ae6a75) | FE：主控台改 vue-router history 模式 | 追加 | FE | opus／high | 3185 | 🟢 驗收通過待確認 |
| 追5 | [CM-3187](https://app.notion.com/p/Agent-inline-PDF-JSON-TXT-407346da4cd08150a2b2f9923db61d2a) | Agent：報告線上預覽端點（`/preview` 子路由） | 追加 | evidence-agent | opus／medium | — | 🟢 驗收通過待確認 |
| 追6 | [CM-3188](https://app.notion.com/p/FE-FilePreviewDialog-UI-407346da4cd081ab922dfe415a86061f) | FE：主控台報告預覽對話框（拆主站 FilePreviewDialog 共用） | 追加 | FE | opus／high | 3186、3187 | 🟢 驗收通過待確認 |
| 追6 | [CM-3189](https://app.notion.com/p/FE-AD-AD-AD-CM-3183-3184-407346da4cd081bdbe95d03009ed3a66) | FE：離線操作者對話框顯示 AD 帳號、登入頁 AD 提示（提示字舊方向，首腦第 6 棒直接改 FE `9bc68bc6`） | 追加 | FE | — | 3183 | 🟢 驗收通過待確認 |
| 追6 | [CM-3190](https://app.notion.com/p/Agent-SeaweedFS-SeaweedFS-MinIO-407346da4cd0817190a9c4ef686780ed) | Agent：儲存位置只剩內建 SeaweedFS（決策者改判 D22；已合回 `c721253`） | 追加 | evidence-agent | opus／medium | — | 🟡 修正待驗證 |
| 追7 | [CM-3191](https://app.notion.com/p/FE-SeaweedFS-407346da4cd0812fac9dde6ec6f035da) | FE：儲存面板只剩內建 | 追加 | FE | sonnet／medium | 3190 | 🟢 驗收通過待確認 |
| 追6 | [CM-3192](https://app.notion.com/p/Agent-AD-AD-CM-3184-407346da4cd0817c9111c5ef7ea244df) | Agent：AD 分頁改填 AD 帳號、反查名單（跟主系統一致） （已合回 `0acf7a5`）| 追加 | evidence-agent | opus／medium | 3184 | 🟢 驗收通過待確認 |
| 追8 | [CM-3193](https://app.notion.com/p/BE-D23-407346da4cd0812292dac24115f3bd25) | BE＋套件：離線操作者權限改成跟主系統同一份（D23），名單不存範圍、心跳依當下能力點算；沒有 Agent 能力點的人不可加入 | 追加 | BE＋jedi-remote-agent | opus／medium | — | 🟢 驗收通過待確認（首腦實機復核過） |
| 追9 | [CM-3194](https://app.notion.com/p/FE-D23-407346da4cd081bcbb39f4b1b82544db) | FE：離線操作者對話框拿掉範圍勾選，改顯示主系統權限；補新錯誤碼 i18n | 追加 | FE | sonnet／medium | 3193 | 🟢 驗收通過待確認（首腦實機復核過） |
| 追10 | [CM-3195](https://app.notion.com/p/Agent-407346da4cd081bfb02fe9c7700d3811) | Agent：主控台「立即檢查弱點資料更新」，清失敗冷卻並喚醒心跳立刻跳一次 | 追加 | evidence-agent | opus／medium | — | 🟢 驗收通過待確認（首腦實機復核過、已上 123） |
| 追11 | [CM-3196](https://app.notion.com/p/FE-407346da4cd0817cb82ad4e3bfb3f43d) | FE 主控台：總覽「弱點資料」卡加「立即檢查更新」按鈕 | 追加 | FE | sonnet／medium | 3195 | 🟢 驗收通過待確認（首腦實機復核過、已上 123） |
| 追12 | [CM-3197](https://app.notion.com/p/Agent-HTML-CSP-sandbox-preview_policy-407346da4cd081a5bab5f58aa553eae7) | Agent：主控台 HTML 報告線上預覽（CSP sandbox，同主系統 preview_policy）；頁面 frame-src 'self' blob: | 追加（首腦直接做） | evidence-agent | — | — | 🟡 修正待驗證 |
| 追12 | [CM-3198](https://app.notion.com/p/FE-HTML-iframe-blob-HTML-407346da4cd081009866d6ffdab9cb31) | FE 主控台：預覽對話框支援 HTML（iframe 直接載預覽網址，不轉 blob） | 追加（首腦直接做） | FE | — | 3197 | 🟡 修正待驗證 |

## 3b. 下一棒要做什麼

**全案已收尾（2026-10-28）**。決策者 123 手測五項全過、卡全 Done、基線重產、手冊／SPEC／SUMMARY／analysis／memory 補齊。總結見 `2026-10-28-FR-166-SUMMARY.md`。

**等令**：push BE 收尾 commit；母卡 CM-3109 改 Done（決策者）；上 STG／POC（前提 https）。

**續作 FR-166.1（母卡 CM-3199，2026-10-29）**：PM 六條回饋另立續作，本案不重開；兩邊 Notion 母卡已互指。待決策者第 1 項（檢測工具頁拆或翻回）已隨 FR-166.1 B3 定案為翻回改名「Agent 工具帳密代設」。

**123 升級固定步驟**：`git -C /opt/evidence-agent pull origin feature/FR-139` →（相依有變才）`poetry install --only main` → 本機 `npm run build:CONSOLE`，`COPYFILE_DISABLE=1 tar -czf` 打包 `scp` 到 `~/guidant-agent-dev/`、舊 dist 改名 `dist-console.bak-<時間>` 再解開 → `kill $(cat agent.pid)` 等它結束 → `bash start-agent-dev.sh`。打路由要 `curl --http1.1`；8443 是 mTLS，主控台在 8444。只換畫面時不用重啟 Agent。

**待決策者**（問了沒答或等 PM）：
1. 主系統「檢測工具」頁已隱藏，PM 確認後是連端點一起拆（開卡）還是翻回 enable=1。
2. 守衛測試 4 支紅不是本 arc 的：`evidence-reuse-*` 三頁沒登記 `ui_routes`、`scan-tool-resources` 沒進入門檻——要不要開卡。
3. 上 STG／POC 前主系統要有 https（CM-3178）。
4. 本機管理員登入通知只寄信，Telegram／Discord 要不要。
5. ~~DEV 補登 011、012；出貨基線重產~~ 第 7 棒已做。
6. jedi-iam 4 支既有紅燈（FR-155 留下：plugin_contract、role_import ×2、my_capabilities）要不要修。
7. 刪除 Agent 是硬刪、不清關聯、開著的機器會自動重註冊——要不要開卡改成「在線擋下」或「一併清理」。
8. 123 的掃描帳號 sudo 權限過寬（不限於 nmap），第 6 棒又讓 Agent 用的掃描私鑰能登入它——正式環境應只留 nmap 那條 sudo。細節在 123 主機上查，不寫進文件。
9. 主系統多處「複製」按鈕在 http＋IP 下無效（`navigator.clipboard` 需安全環境），決策者裁「測試機的關係先不管」。

## 4. 環境與座標

- 五 repo 都在 `feature/FR-139`：BE `~/Projects/Billows/Audit-Manager/compliance-manager-be`、FE `compliance-manager-fe`（主控台源碼 `console/`，`npm run build:CONSOLE` 出 `dist-console`）、Agent `~/Projects/Billows/Audit-Manager/evidence-agent`、套件 `~/Projects/Jedicogy/module/jedi-python-package/`、test `compliance-manager-test`。
- **本機 Agent**：源碼跑，`~/guidant-agent-local/start-agent.sh`（`CLOUD_WEB_URL=http://localhost:5180`、`AGENT_ALLOW_INSECURE_CLOUD=1`），主控台 `https://127.0.0.1:8444/console`。已設本機管理員密碼（存在首腦 scratchpad，不入版控；要用請決策者自行重設 `local-state set-admin-password`）。名稱「本機測試 Agent」。
- **123 dev Agent**：`/opt/evidence-agent` 源碼跑（`0ccb44c`），`~/guidant-agent-dev/start-agent-dev.sh`（`CLOUD_ENDPOINT=http://10.8.0.6:8000`、`CLOUD_WEB_URL=http://10.8.0.6:5180`、`AGENT_ALLOW_INSECURE_CLOUD=1`），前端 `~/guidant-agent-dev/dist-console`（`44f2e5f7`；舊版備份 `dist-console.bak-<時間>` 已累積十來份，未清）。**沒設本機管理員密碼**（燈紅屬預期，源碼模式沒走安裝程式）。掃描帳號第 6 棒補了 Agent 掃描私鑰的授權（改前有備份），Nmap 可用 123 當執行主機。
- **租戶 102 離線登入天數目前是 5**（決策者手測改的），預設是 7。
- **本機 BE 已無 path dependency**（第 6 棒發版後還原）。日後要改套件：pyproject 該套件 pin 註解、path 行取消註解，用 `.venv/bin/pip install -e <套件路徑> --no-deps`（`poetry install` 會被 lock 擋）；**切完 `pip show` 確認每支都是 Editable**——重裝一支會把別支換回 wheel。開發期間 pyproject／poetry.lock 設 assume-unchanged、不可 commit。
- **worker 要另外起**：`(RUN_MODE=worker nohup .venv/bin/python main.py >> log/worker-stdout.log 2>&1 &)`。沒起的話第三方元件分析、證據分類、弱點庫檢查全停在排隊，畫面四個圈空轉（第 5 棒踩到）。
- **重啟 BE／Agent 不要包在會被停掉的背景指令裡**：停背景指令會連帶殺掉它起的程序（本棒踩兩次）。用 `(nohup … &)` 起。
- headless 截圖：`compliance-manager-test/` 內跑 node＋Playwright（腳本放 repo 內暫存檔，跑完刪；放 scratchpad 會找不到 playwright）。主系統登入頁有 Turnstile，用 API 登入後把 token 寫進 `localStorage` 的 `cm_store`（`currentLocale: 'tw'`，用 `addInitScript`）。主控台用 `POST /remote-agents/<uid>/console-ticket` 簽票、`POST /console/session` 換 cookie。**PrimeVue popup 選單（⋮）在 headless 點不開**，改用元件單元測試＋在頁面裡直接嵌入目標網址實測。
- **FE 開發代理**：`vite.config.js` 把 `/api` 轉到 `VITE_DEV_API_TARGET`（預設 `http://localhost:8000`），只在 `npm run dev` 生效。開發機要 HTML 預覽正常，`.env.development.local` 的 `VITE_API_URL` 必須是 `/api/1.0`（直連 8000 會被 `X-Frame-Options: SAMEORIGIN` 擋）。
- 超標檔：`RemoteAgentManage.vue` ~530、`Overview.vue` ~300 已拆過；`install.sh` ×2、`scheduler.py`、`detection_orchestration_service.py`、`agent_enrollment_service.py` 620（接近上限）。

## 5. 行為規範提醒

- 首腦不開 subagent（決策者本輪亦問「要不要 subagent 做互動雛形」，首腦建議不用：脈絡都在首腦，CLAUDE.md 定首腦自己刻雛形）。
- 無卡不派；開卡一次建完；派工由工作坊。
- 雛形交稿前 `grep -n "border-left"` 要 0；資料區塊上下疊不排左右；清單頁 SegmentButtons。
- 文件衛生 grep（原本／改判／第 N 棒／這次整理／當初）要 0。
