本卡屬 FR-166(母卡 CM-3109)收尾補齊(決策者 2026-10-27:沒有下期,不太大的支線這期一起做)。批 11(等 P5-1、P5-2 合回)。repo:BE(主 repo,Repo 欄空著)。
這張卡做什麼(白話)
主系統這邊一次補齊五件:①下發給 Agent 的授權清冊多帶設備名稱(Agent 掃描頁要顯示);②派給 Agent 的任務帶派工人,Agent 執行紀錄才能顯示是誰派的,不是一律「cloud」;③主站自主執行紀錄 API 收日期篩選、下載報告帶原檔名;④接上 P5-1 的 Agent 手動 sbom 收件端點;⑤結案還原文件補到 6 支套件。
改哪些檔
改:core/plugins/remote_agent.py 的 AllowedTargetsProvider.allowed_targets(帶設備名)
改:派工 payload 組裝處(grep detection_task_payload 找實際檔)帶派工人 login_name+nickname
改:api/remote_agent/routes/agent_local_run_route.py(LocalRunListQuery 加 started_from/started_to;報告下載回應加 X-Filename)、core/plugins/_agent_local_runs.py
改:core/app_factory.py CORS expose_headers 加 X-Filename
新/改:Agent 手動 sbom 收件端點接線(依 P5-1 回寫的契約;守門照 agent 控制面既有端點)
改:docs/claude/jedi-packages.md(結案還原清單 6 支:加 jedi-system-core;BE venv 跑套件測試的 tests 名稱衝突與繞法)
怎麼做
- 清冊:hosts 從純 IP 改為可帶名稱的形狀前,先查 jedi-remote-agent 心跳下發與 Agent allowed_targets 的解析,維持向下相容(舊 Agent 收到新形狀不能壞);把相容做法寫進回寫給 P5-5。
- 派工人:只帶 login_name 與 nickname,不帶其他個資;Agent 端欄位名寫進回寫給 P5-5。
- X-Filename:URL-encode;CORS expose 一併加。
- sbom 收件:走 agent 控制面身分(通行證),tenant 從 agent 推,不收 body 的 tenant。
- 改到 core/plugins/remote_agent.py:只改 AllowedTargetsProvider,不動 _ADMIN_CAPABILITIES 以外的登記結構;新端點若要登記就登記並跑 test_fr132 守衛。
驗收
- 相關 pytest 綠;新端點實打(DEV,從本卡工作區另起埠,不重啟 8000);守衛 test_fr132_host_route_guard_split 綠。
- 回寫列出給 P5-4(FE)與 P5-5(Agent)的契約。
紀律
- 先 git status;先 git merge ws-CM-3109 把前面批次併進來;顯式 git add 檔名,禁 -am;不切 branch;push 等令;不自派 subagent;只動 DEV。
- 不重複造輪子:先按行為 grep 既有實作,reuse → extend → 確認沒有才新增;不開 V2、不複製改兩行。檔案註解只寫為什麼與陷阱。超標檔只准拆不准塞。
- 資安規範讀 BE .claude/rules/security/ 八支;動到授權/密碼學要寫測試含突變。
- 做完 commit+卡上回寫(commit hash、改了哪些檔、reuse/extend/new、測試與突變、手測清單),狀態改「修正待驗證」。
建議模型與思考強度(首腦判斷)