本卡為 FR-191 母案。讓管理員在主系統直接拿到 Agent 安裝包與 .sha256 的限時下載連結(預設 30 分鐘、可調、可複製),不必再向原廠要。3 棒 3 批:BE → FE → 文件。子卡清單在末段。
要裝一台新 Agent,裝機的人需要兩個檔:安裝包 guidant-agent-compose-<版>.tar.gz 和同名 .sha256。現在這兩個檔只有原廠手上有,每次靠我們手跑腳本產 24 小時連結寄過去。做完後:管理員在更新中心 Agent 區按「取得安裝包」,或在建立註冊 token 的對話框裡,就看到兩列檔各有「下載」「複製連結」;連結預設 30 分鐘有效,時限可在更新中心改。複製給機房同事 curl -O 就能下載,不用登入。
決策者 2026-11-09:「Agent 沒有下載安裝包的連結,需要在主系統的 Agent 管理或是更新中心讓 user 可以下載安裝包跟 sha 檔案兩個檔案」「限時 30 分鐘,或是設定成參數可以調整」「也要可以複製下載連結」。FR-189 寫手冊時給 190 的包是手跑 scripts/r2_presign.py 產的 R2 連結,客戶拿包仍要靠原廠。決策者裁不掛 FR-172,另開本案。
<GUIDANT_UPGRADE_DIR>/agent-bundles/<版>/ 供檔(更新中心預先下載後就在那裡,旁邊已有 .tar.gz.sha256 與簽好章的 .release.json)。不給更新站 R2 預簽連結:寫死 15 分鐘、客戶主機多半沒外網。common.authz 的 issue_signed_token/signed_token_required,實作在 jedi_iam.authz.signed_token),scope agent-bundle-download,resource_uid = <版>:<tarball|sha256>,一次發兩枚。不另立 token 表。system_configs group PRODUCT_UPDATE key agent_bundle_link_ttl_minutes(1~1440),驗票時以當下設定值為 ttl。一個數字欄位,不做下拉。system.product-update.read;改時限要 system.product-update.update。signed_token_required(純瀏覽器原生 GET 與 curl 都帶不了 bearer),不做雙軌。window.location.origin 組;BE 只回相對路徑+票。主系統不知道自己對外網址,不新增 env var。clipboardUtil.js(navigator.clipboard → execCommand('copy') 退路),因為 http+IP 開站時 navigator.clipboard 是 undefined(FR-169 踩過)。site/index.html、完整手冊 docs/user-manual/agent/ 兩章、本案 README 收口)— 等第 2 棒合回,手冊要新畫面截圖。