W3C Baggage 傳播

trace_context 能跨 HTTP 邊界攜帶 trace 與 span 身分,但沒有辦法在旁邊一併傳播橫切的鍵值脈絡 (run_id / tenant / experiment)。本功能實作 W3C Baggage 標頭 —— 一個 percent-encoded 的 key=value 清單 —— 讓一次執行能把這類脈絡附加到外送請求,並在另一端讀回。

純標準函式庫(urllib.parse);不匯入 PySide6Baggage 不可變(變更操作回傳新實例),因此 傳播具決定性。

無頭 API

from je_auto_control import Baggage, inject_baggage, extract_baggage

bag = Baggage({"tenant": "acme"}).set("run_id", "42")
headers = inject_baggage(outgoing_headers, bag)
# headers["baggage"] == "tenant=acme,run_id=42"

received = extract_baggage(request_headers)
tenant = received.get("tenant")

Baggage 包裝一個不可變的鍵值對應:get 讀取,``set`` / remove 回傳新實例,``to_dict`` 匯出 條目。parse_baggage 解析標頭(去除選用的 ;metadata 並拒絕空鍵),``format_baggage`` 將鍵與值 percent-encode 回標頭值,``inject_baggage`` / extract_baggage 在請求 dict 上寫入與讀取 baggage 標頭(讀取不分大小寫)。與 trace_context 自然搭配,在 trace 之外攜帶脈絡。

執行器命令

AC_baggage_parseheader 解析成 {items};``AC_baggage_format`` 把 items 物件序列化成 {header}。兩者皆以 MCP 工具(ac_baggage_parse / ac_baggage_format)以及 Script Builder 中 Data 分類下的命令提供。