本卡屬 FR-181(母卡 FR-181 母案 CM-3595),卡 B-6c,批 9。只改 jedi-python-package。依賴:B-6a。
對帳改走長輪詢的套件端:jedi-remote-agent 的 reconcile() 現在逐檔用直推 client 打 Agent 8443 拿 sha256。改成問一個注入的 port file_verifier(agent, file_uid)——套件不認識 Redis 也不認識等回答插槽,只認識「給我 agent 跟檔案 uid、你回我 sha256 或 None」。主系統(B-6d)用 A-1 的 ask 實作這個 port 注入進來。沒注入時整批回 error、原因 no_verifier,不退回直推(那條開關關著本來就不通)。發 1.17.2。
extend:plugin/contract.py RemoteAgentAdapters 加 file_verifier: Any = None(docstring:(agent, file_uid) -> str|None,None=Agent 說沒有;拋例外=連不到/逾時);remote_agent_service.py reconcile() 274 行 self._data_plane.command(... /sha256) 改 self._file_verifier(agent, r["save_file_name"]):None→missing、例外→error reason=unreachable、回值比對 anchor→matched/mismatched;未注入 port 時整批 error reason=no_verifier(不退回直推)。建構子加 file_verifier=None,assembly 從 adapters 接。釘契約 0.5.2、bump 1.17.2 發版
repo:~/Projects/Jedicogy/module/jedi-python-package
改既有:jedi-remote-agent/jedi_remote_agent/plugin/contract.py
改既有:jedi-remote-agent/jedi_remote_agent/app/service/remote_agent_service.py
改既有:jedi-remote-agent/jedi_remote_agent/app/assembly.py(接 port)
改既有:jedi-remote-agent/pyproject.toml(1.17.2、契約 >=0.5.2)
改既有:jedi-remote-agent/tests/test_reconcile.py(或既有對帳測試)
plugin/contract.py RemoteAgentAdapters 加 file_verifier: Any = None,docstring 寫進「長輪詢通道」段:(agent, file_uid) -> str | None,None=Agent 說沒有,拋例外=連不到/逾時。app/service/remote_agent_service.py 建構子加 file_verifier=None 存 self._file_verifier;reconcile() 274~285 行那段改:if self._file_verifier is None: error.append({uid, reason:'no_verifier'}); continue;try: live = self._file_verifier(agent, r['save_file_name']);None→missing;例外→error reason=unreachable;live == anchor→matched 否則 mismatched。_data_plane.command 在對帳段不再呼叫(其他地方留著)。app/assembly.py(或建 service 的地方)從 adapters 把 file_verifier 傳進建構子。pyproject.toml:契約 >=0.5.2,<0.6、bump 1.17.2;套件 venv 全部 tests(前一輪 540);poetry publish --build -r nexus;回寫版號。pytest:假 verifier 回同 sha → matched;回不同 → mismatched;回 None → missing;拋 → error unreachable;未注入 → 全 error no_verifier;grep -n '_data_plane.command' remote_agent_service.py 對帳段為 0。發版回寫版號
~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-181-2611-agent-outbound-only-channel/design.md §3 決策定案(D1~D8)、§4 端到端流程兩張圖、§5 詳細設計本卡那節、§7 拆分表本卡那列;為什麼這樣定看 discussion.mdcore/plugins/_agent_commands.py(檔頭說明三個觸發點)、app/remote_agent/service/agent_command_service.py、core/plugins/_agent_config_notify.py、core/plugins/_agent_keys.py、infra/upload_file/remote_agent_adapter.py、core/plugins/remote_agent.py(plugin mount 與 handle)jedi-remote-agent/jedi_remote_agent/api/routing.py(端點表與 AUTH_AGENT)、api/routes/(心跳 route 範本)、app/service/agent_data_plane_client.py(直推出口,留著)、app/service/heartbeat_vulndb.py(_CORE_KEYS 心跳守衛);契約 jedi-agent-protocol/jedi_agent_protocol/commands.py、heartbeat.py、events.pyguidant_agent/sync/app/config_pull.py(WorkerComponent 拉取範本)、enroll.py(心跳 client 與通行證)、event_sender.py+outbox.py(送不到補送)、task_queue.py、sync/api/data_plane_server.py(8443 與 blueprint 掛點)、sync/api/cmd_*.py(直推 handler,本案改薄)、files/api/blob_route.py、scan/api/routes/、docs/ARCHITECTURE.md