KevinClaw 系統三大核心架構重構

VER12/VER13 系統三大核心架構重構計畫 結案綜合報告

(System Refactor Triad Final Closure Report)


摘要 (Executive Summary)

本報告針對 2026 年 6 月 30 日提出之 VER12 三大核心架構重構計畫 (System Refactor Triad) 進行全面巡檢與成果結案。本重構專案旨在解決 VER12/VER13 發展過程中產生的入口邏輯碎片化、app.pyroutes/conversation_routes.py 單體巨集化(Monolith)、外部頻道(Telegram/Discord)權限與執行邏輯脫節等核心架構瓶頸。

歷經 2026 年 7 月份的步步推進與封封印切片(Phase Checkpoints),三大主線已於 2026-07-19 達成 100% 封印目標,並在 7 月底至 8 月初成功支撐了 VER14 萬能桌面端(Universal Desktop Client)、混合工作區(Hybrid Workspace)及多元 AI Provider 接入:

  1. Mainline A(共享執行核心 Shared Execution Core):成功收斂對話 (Conversation)、外部頻道 (Channel) 與排程任務 (Scheduler) 的 AI 與工具執行路徑至統一的 agent_execution_service
  2. Mainline B(對話與應用核心重構 Conversation & App Core Refactor):徹底解耦 routes/conversation_routes.py,建立獨立的 HTTP/SSE 傳輸層(conversation_transport.py)、查詢層(conversation_query_service.py)、生命週期層(conversation_lifecycle_service.py)與執行期層(conversation_runtime_service.py),並將 app.py 瘦身回標準的組合根(Composition Root)。
  3. Mainline C(企業頻道執行期 Channel Enterprise Runtime):建立統一傳輸轉接器(Adapter)、整合 AuthorizationEngine 提供 8 大細粒度 CHANNEL_* 權限控管、實作 Personal > Shared Room > Service Account 身分解析,並補齊 channel_audit_v1 企業級審計日誌。

本報告整合了重構期間的各階段審核紀錄、測試數據、效益評估,以及收錄於 docs/debug/ 目錄下的多項關鍵故障排除與防護優化紀錄。


一、 專案緣由與系統動機 (Background & Motivation)

1.1 歷史背景與瓶頸

在 VER12 以前,系統隨著功能的快速擴展(如加入 Telegram Polling、Discord Webhook、Scheduler 自動化任務、AutoSQL、MCP 工具等),逐漸累積了嚴重的架構技術債:

  1. 入口邏輯高度重複與碎片化 (Duplicated Execution Loops)
    • Web 對話 UI、Telegram/Discord 頻道、Scheduler 排程任務各自擁有獨立且重複的 Agentic Loop 實作與工具調用流程。
    • 當需要修改 Tool 選項、Fallback 邏輯或記憶更新時,開發人員必須在多個 Route 與 Service 中重複修改,極易遺漏。
  2. 單體檔案過度膨脹 (Monolithic Route Complexity)
    • routes/conversation_routes.py 包含了 HTTP 解析、Flask Session 讀寫、SSE 串流封裝、SQL 查詢、Prompt 組裝、歷史紀錄寫入與 AI 執行等混雜責任,單一檔案超過數千行。
    • app.py 充斥著特定藍圖的邏輯初始化與雜亂的相依性導入,失去作為系統組合根的清晰度。
  3. 外部頻道權限與行為不一致 (Governance Gaps in Channels)
    • Telegram 與 Discord 入口缺乏統一的企業級身份驗證機制(Identity Binding),部分對話甚至硬編碼了預設角色與權限,無法適應企業級多租戶與共享房間的需求。
    • 串流 Footer (Provider/Model/Token metadata) 在不同模式下存在格式漂移風險。

1.2 戰略目標與 Top-Down 系統藍圖

為了解決上述痛點,系統架構團隊於 2026-06-30 頒布了 2026-06-30-ver12-top-down-system-roadmap.md,將系統明確劃分為五個層次(Entry → Interaction Runtime → Shared Execution → Enterprise Governance → Persistence),並確立三大戰略重構主線:

  • 核心原則:架構調整必須嚴格遵守 「使用者體驗、Prompt 品質、SSE 串流節奏、工具語意與 AI 回答品質 100% 等價(Prompt & Quality Parity)」,絕不允許以重構名義消滅或弱化既有功能。
[ Entry Layer ] (Web UI / Telegram / Discord / Scheduler / Desktop Client)
        │
        ▼
[ Interaction Runtime Layer ] (conversation_transport / channel_core.runtime / scheduler_runtime)
        │
        ▼
[ Shared Execution Layer ] (services/agent_execution_service - Mainline A)
        │
        ▼
[ Enterprise Governance Layer ] (auth_plugin/AuthorizationEngine - Mainline C)
        │
        ▼
[ Persistence & Operations Layer ] (SQLite / conversation_service / conversation_query_service)

二、 三大計畫內容與執行範疇 (Architectural Scope)

2.1 Mainline A: 共享執行核心 (Shared Execution Core)

實施階段與關鍵成果:

  • Phase 1: 數據契約定義 (execution_contracts.py)
    • 定義 AgentExecutionRequestAgentExecutionResult,包含 Request Origin (web, channel, scheduler)、Principal、Provider/Model、Messages、Flags 與 Metadata。
  • Phase 2: 集中化 Provider 準備與 Hook 機制 (execution_hooks.py)
    • 抽取 Provider 規格化、預設模型解析與 execution_profile 持久化。
    • 提供通用的 Session Memory 更新、對話紀錄持久化與工具事件追蹤 Hooks。
  • Phase 3: 集中化 Tool Loop 與 Fallback 匯報
    • 統一 Native XML / Tool Calls 的解析與調用,將可恢復的工具異常(如 SQL 語法錯、Browser 超時)轉化為給 AI 的結構化反饋(Tool Feedback),提升 AI 自我修正能力。
  • Phase 4–6: 三大入口移轉與封印
    • 對話 Agent 模式、頻道 Agent 執行與排程 Agent 任務全數轉由 run_agent_execution() 執行,原 Route 僅保留 Transport 責任。

2.2 Mainline B: 對話與應用核心重構 (Conversation & App Core Refactor)

實施階段與關鍵成果:

  • Phase 1–2: 傳輸層解耦 (routes/conversation_transport.py)
    • 提取統一的 SSE Chunk 廣播與 Terminal Metadata 注入邏輯(inject_terminal_meta),解決非 Agent 串流分支 Footer metadata 格式漂移的問題。
  • Phase 3: 對話狀態與查詢層分離 (services/conversation_query_service.py & conversation_lifecycle_service.py)
    • 實現讀寫分離:將所有 SQL 查詢(如 sidebar 列表、最近問題、工作區路徑、訊息載入)收斂至 conversation_query_service.py
    • 生命週期原子化:將對話建立 (Create)、切換 (Switch)、歸檔 (Archive)、刪除 (Delete) 與 Context 清理 (Clear Context) 轉移至 conversation_lifecycle_service.py
  • Phase 4: 對話執行期分發層 (services/conversation_runtime_service.py)
    • 封裝 Search、AutoSQL、File 上傳與通用 Chat 的非 Agent 串流與非串流執行期,確保 Route 檔案不直接操作底層 ai_core
  • Phase 5: Composition Root 瘦身 (app.py)
    • 移除 app.py 內殘留的重複模組導入與不必要的全域變數,確保 Flask 全域設定與藍圖註冊透明、穩定。

2.3 Mainline C: 企業頻道執行期 (Channel Enterprise Runtime)

實施階段與關鍵成果:

  • Phase 1–2: 頻道契約與授權網關 (channel_core/contracts.py & channel_core/authorization.py)
    • 定義 ChannelInboundEvent, ChannelExecutionContext, ChannelExecutionResult, ChannelDeliveryRequest
    • 導入 8 大細粒度頻道權限:CHANNEL_ACCESS_DISCORD, CHANNEL_ACCESS_TELEGRAM, CHANNEL_ACCESS_TELEGRAM_MCP, CHANNEL_PRIVATE_CHAT, CHANNEL_GROUP_CHAT, CHANNEL_OUTBOUND_SEND, CHANNEL_SHARED_ROOM_BINDING, CHANNEL_ACT_AS_SERVICE_ACCOUNT
  • Phase 3: 身份綁定與主體解析 (channel_core/identity_binding.py)
    • 擴充 channel_identities 資料表,實作嚴格優先權解析:Personal Binding (最高) > Shared Room Binding > Service Account。無有效綁定者自動拒絕。
  • Phase 4–6: Adapter 轉接器、共享執行收斂與審計日誌
    • 實作 DiscordWebhookAdapterTelegramPollingAdapter,將傳輸細節與 AI 執行徹底隔離。
    • 導入 channel_audit_v1 標準審計格式,詳細記錄外部觸發者、內部授權主體、使用的工具與發送狀態。
  • Phase 7: 管理員介面與營運維護
    • 於 Admin 介面提供 Channel 傳輸模式與授權狀態視圖,維護 Telegram Polling 服務的平滑重載(Reload)能力。

三、 過程中重要紀錄、關鍵修正與技術演進 (Key Records & Debug Integrations)

在實施三份計畫的過程中,團隊嚴格遵守 AGENTS.md 規範,將所有技術突破、Bug 診斷與演進細節完整記錄於 docs/debug/ 中。以下為整合之關鍵重點:

3.1 SSE Terminal Meta Transport 重整 (2026-07-13)

  • 相關紀錄docs/debug/2026-07-13-conversation-sse-terminal-meta-transport-refactor.md
  • 問題routes/conversation_routes.py 內有 5 條非 Agent 串流分支(Web Search, AutoSQL, Legacy Search, File Upload, General Chat)各自重複編寫 event: END 前的 Meta Chunk 注入邏輯,導致前端頁腳 (Footer) 經常出現 Token 統計或 Provider 名稱顯示不一致。
  • 修正與進化:在 routes/conversation_transport.py 研發 inject_terminal_meta() 共用 Helper,將 wire-format 格式化規則集中管理。保持 SSE Chunk 廣播語意 100% 不變,完美解決 Meta 格式漂移問題。

3.2 Clear Context 診斷讀取與生命週期原子化 (2026-07-14)

  • 相關紀錄docs/debug/2026-07-14-conversation-clear-context-lifecycle-ownership.md
  • 問題/api/clear_context 跨越了 Flask Session, SQLite 歷史刪除, AI 記憶快取清理等 5 個步驟,舊實作中步驟交錯且 Route 直接操作 SQL。
  • 修正與進化:將 5 階段清理流程整合至 conversation_lifecycle_service.apply_clear_context_transition() 中,實作了具有 Commit/Rollback 邊界的單一 SQLite 事務,並將清理後的診斷讀取解耦至 conversation_query_service

3.3 混合工作區邊界審計與數據遷移 (2026-07-15)

  • 相關紀錄docs/debug/2026-07-15-hybrid-workspace-boundary-audit.md
  • 問題:在多租戶與跨目錄作業中,使用者工作區路徑有可能超出許可的 Sandbox 邊界,造成檔案存取安全性隱患。
  • 修正與進化:執行 Workspace 邊界審計,導入無損乾跑 (Dry-run) 數據遷移報告(workspace-migration-readonly-report.md),並修正子目錄 Git 狀態檢測與檔案權限防護。

3.4 AI Agent 工具/技能選擇品質與時態感知 (2026-07-16)

  • 相關紀錄docs/debug/2026-07-16-ai-agent-tool-skill-selection-quality-debug.md
  • 問題:在共享執行核心升級後,AI 在處理相對日期(如「今天」、「上週」)或工具選擇時,偶爾會因 Prompt 缺少系統本機時脈而產生幻覺。
  • 修正與進化:在 services/agent_prompt_service.py 加入動態伺服器本機時脈 (Server-local date section) 注入機制,同時嚴格遵守 Prompt-Equivalence 護欄,確保舊有提示字串順序與工具選擇語意不受影響。

3.5 外部頻道預設角色寫死 3511None 值字串化 Bug 修正 (2026-07-19) ★ 關鍵重大更正

  • 相關紀錄docs/debug/2026-07-19-channel-role-binding-and-none-serialization-debug.md
  • 異常現象:當使用者透過 Telegram Bot 發送社會或政治等非 SQL 提問時,Bot 竟異常回覆無關的測試罐頭文字:「系統測試正常,隨時待命…」
  • 根因剖析
    1. 硬編碼 Bugroutes/channel_routes.py 內的 _resolve_channel_session 將新建立的外部頻道 Session 的 role_id 硬編碼寫死為 3511(SQL 自然語言專家)。該角色限制 AI 只負責轉寫 SQL,導致 AI 遇到主觀問題時無法回答,觸發防呆退回首條測試對話。
    2. 字串化 Bugservices/conversation_service.pyinsert_conversation_with_id 存在 str(role_id) 缺陷。當 role_id=None 時被轉為字串 "None" 寫入資料庫,造成讀取時無法識別 SQL NULL
  • 修正與進化
    • 修改 _resolve_channel_session 動態讀取 Channel 設定的 default_role_id,未指定時正確退回 None(通用助手)。
    • 修正 insert_conversation_with_id 確保 Python None 寫入 SQL NULL
    • 補齊 143 個 Channel 相關單元測試,達成 100% 通過。

3.6 Telegram 通道 Unique Constraint 競態與資料庫修復 (2026-07-20 / 2026-07-24)

  • 相關紀錄docs/debug/20260720-sqlite-database-disk-image-malformed-recovery.md20260724-telegram-channel-unique-constraint-race-condition-fix.md
  • 問題:高併發情況下 Telegram 多個 Webhook/Polling 請求同時抵達時,容易觸發 SQLite 併發寫入鎖(Disk image malformed / Unique constraint failed)。
  • 修正與進化:重構資料庫修復腳本,並於 channel_routes.py 引入具備重試(Retry)機制的 UPSERT 邏輯與事務鎖保護,徹底解決併發搶鎖衝突。

3.7 VER14 萬能桌面端與混合工作區延伸演進 (2026-07-26 ~ 2026-08-01)

  • 相關紀錄docs/debug/2026-07-26-ver14-universal-desktop-client-hybrid-workspace-final.md20260801-paddle-ocr-mcp-tool-restoration-without-local-fallback.md
  • 進化:三大核心計畫封印後,成功將架構無縫推升至 VER14 萬能桌面端。支援拖曳上傳 (Drag & Drop)、PaddleOCR MCP 工具調用、PDF 多模態預覽,以及 Grok / Kimi / Ollama 等多 AI Provider 動態切換。

四、 效益評估與追蹤 (Effectiveness & Metric Evaluation)

4.1 定量效益 (Quantitative Improvements)

評估指標 重構前 (2026-06-30 基準) 重構封印後 (2026-07-19 / 2026-08-02) 效益評估與改善幅度
Agent 執行迴圈數量 3 個分散的迴圈 (Web, Channel, Scheduler) 1 個共用執行核心 (agent_execution_service) 消除 66% 冗餘 AI 執行代碼
conversation_routes.py 職責 混雜 Transport, State, SQL, AI, SSE 僅保留 HTTP/SSE 傳輸 代碼複雜度大幅降低
SSE Meta 格式一致性 5 條非 Agent 串流分支各自注入 統一 inject_terminal_meta Helper 100% 消除 Footer 格式漂移
自動化測試覆蓋與通過數 約 300+ 基礎測試 883+ Tests + 8 Subtests (100% 通過) 系統回歸測試防護網擴充近 3 倍
Channel 存取權限控管 僅簡單黑白名單 / 硬編碼角色 *8 大細粒度 `CHANNEL_` 權限** 達成企業級安全合規
資料庫讀寫邊界 Route 直接執行寫死 SQL 語句 100% 經由 Query / Lifecycle Service 達成架構上的讀寫分離

4.2 定性效益 (Qualitative Benefits)

  1. 極致的 Prompt 與 UX 品質等價性 (Zero Quality Regression)
    重構過程中雖然進行了大規模的模組抽取與層次解耦,但通過嚴格的等價護欄測試,前端看到的 <thought> 區塊、Footer 訊息、Token 統計、工具選擇與提示詞順序完全保持 100% 原汁原味。
  2. 高擴展性與極速 Provider 接入 (Rapid Extensibility)
    受益於 Mainline A 共享執行核心與 Mainline B 的 Transport 解耦,後續在 7 月底接入 Ollama Cloud, Grok Provider, Kimi Agent 以及 Google Imagen 等新模型時,開發效率提高了 50% 以上,完全不需要修改核心對話 Route。
  3. 穩定支援 VER14 萬能桌面端 (Universal Desktop Client Ready)
    分層架構(Transport → Runtime → Core)使系統不僅能服務 Flask Web UI,更能在不需要重複編寫商業邏輯的情況下,直接支援 PyQt6 / Electron 萬能桌面端與混合工作區(Hybrid Workspace)。

五、 結論與後續維護指引 (Conclusion & Future Handoff)

5.1 結案結論

VER12/VER13 三大核心架構重構計畫(2026-06-30-shared-execution-core.md2026-06-30-conversation-app-core-refactor.md2026-06-30-channel-enterprise-runtime.md)已順利達成預期目標,全數於 100% 完成度封印

本專案成功打破了過去單體 Route 與多入口邏輯散亂的局面,建立了兼具高效能、高安全控管與高維護性的企業級 AI 平台基礎架構。

5.2 後續維護與開發指引

為確保系統長治久安,未來的開發與維護工作請嚴格遵循以下規範:

  1. 遵守 Shared Execution Core 邊界
    新增任何入口(如 Realtime Voice Gateway、External API)時,嚴禁編寫獨立的 AI Agent 工具調用迴圈,必須構造 AgentExecutionRequest 並進入 run_agent_execution()
  2. 維護 Debug 文件規範
    根據 AGENTS.md 規定,未來凡進行任何 Debug、資料庫修復或故障排除,必須docs/debug/ 下建立以日期命名的 Markdown 檔案(如 YYYYMMDD-description.md),完整記載問題現象、根因、解法與驗證結果。
  3. 維護測試回歸機制
    在提交任何涉及核心對話或頻道變更的程式碼前,必須執行全套回歸測試:

    ./.venv_local/Scripts/python -m pytest tests -q

    確保 880+ 個測試持續維持 100% Green 狀態。


本報告已正式存檔於 docs/2026-08-02-system-refactor-triad-closure-report.md

By Kevin

發佈留言

CS

AI 客服助理

線上答詢中

error: Content is protected !!