OG T
|
d148756b67
|
feat(api): LLM 整合 Expert System 診斷上下文
長期方案實作: Expert 診斷 + LLM 智能分析
變更:
1. decision_manager._dual_engine_analyze():
- 測試資源跳過 LLM (省錢)
- 傳遞 Expert 診斷上下文給 LLM
- LLM 失敗時根據診斷調整回應
2. openclaw.generate_incident_proposal():
- 新增 expert_context 參數
- Prompt 包含 Expert 診斷結果
- 引導 LLM 基於診斷做決策
流程:
Playbook → Expert診斷 → LLM(with context) → 智能建議
這是「先診斷根因,再決定行動」的正確實作
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 21:41:26 +08:00 |
|
OG T
|
2ef7daccde
|
feat(api): Expert System 智能診斷重構 - 根因優先
問題: 原本的 Expert System 只會建議「重啟」,不診斷根因
重構:
1. 分層診斷:
- 層 1: 測試資源過濾 (test/demo/tmp 自動忽略)
- 層 2: 規則匹配 (更精確的 pattern)
- 層 3: 診斷指令 (提供 kubectl 診斷命令)
2. 根因優先:
- OOM → 檢查記憶體用量,非重啟
- CrashLoop → 查看崩潰日誌,非重啟
- ImagePull → 檢查映像配置,非重啟
- Default → 人工診斷,非盲目重啟
3. 人工標記:
- 未知問題標記 human_review_required
- 降低 confidence (0.5)
這才是正確的自動化修復:先診斷根因,再決定行動
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 21:35:20 +08:00 |
|
OG T
|
139ddc3f7b
|
fix(telegram): 修復 INC-INC- 重複前綴 (telegram_gateway.py)
問題: approval_id 已有 INC- 前綴時,又加了一次
修復: 檢查是否已有前綴再決定是否添加
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 19:42:18 +08:00 |
|
OG T
|
5f2e5c9763
|
fix(api): Langfuse v4.x API 相容性修復
Langfuse SDK v4.0.1 API 變更:
- 移除 client.trace() 方法
- 改用 create_trace_id() + OTEL 整合
修復:
- __enter__: 檢查 trace() 方法存在再使用,否則用 create_trace_id()
- generation/span/score: 加入 hasattr 檢查,v4 改用 debug log
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 19:34:37 +08:00 |
|
OG T
|
df04254b57
|
fix(lint): 修復 import 排序與未使用 import
- __init__.py: 按字母順序排列 imports
- incident_approval_service.py: 移除未使用 UUID, ApprovalRequest, Incident, IncidentStatus
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 19:25:52 +08:00 |
|
OG T
|
35aa690bf1
|
fix(decision_manager): 修復 Telegram 重複發送問題
問題:
- Phase 6.5 (765ee39) 修改導致每次 poll 都建立新 decision
- 觸發 Telegram 轟炸 (INC-INC-INC- prefix bug)
修復:
- 移除 INC- 重複前綴 (line 83)
- 加入 Redis 去重機制 (10 分鐘 TTL)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 19:21:36 +08:00 |
|
OG T
|
dd42e6b75b
|
chore: services export + meetings 文檔格式化
- services/__init__.py: 導出 IncidentApprovalService (ADR-027)
- meetings docs: 格式化更新
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 19:10:48 +08:00 |
|
OG T
|
a9f8ad56c1
|
chore: 未提交變更整理 (API core + docs + scripts)
API 核心:
- constants.py: 系統常量定義
- unit_of_work.py: Unit of Work 模式
- incident_approval_service.py: Incident-Approval 同步服務
文檔更新:
- LOGBOOK.md: 進度更新
- AWOOOI_AGENTIC_WORKSPACE_ROADMAP.md: 路線圖
- 2026-03-26_llm_testing_evaluation.md: LLM 測試評估
- phase5_telemetry_architecture.md: 遙測架構
- SECRETS_REFERENCE.md: 密鑰參考
配置/腳本:
- Skill 02 v1.x: leWOOOgo 後端更新
- .dependency-cruiser.cjs: 依賴規則
- demo-multisig-flow.sh: 演示腳本
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 19:10:12 +08:00 |
|
OG T
|
30153496d1
|
fix(api): 修復全部 lint 錯誤 (ruff --fix)
- Import sorting (I001)
- Unused imports (F401)
- f-string without placeholders (F541)
- Loop variable unused (B007)
- zip() strict parameter (B905)
- Exception chaining (B904)
- collections.abc imports (UP035)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 16:06:20 +08:00 |
|
OG T
|
e26ea526b1
|
fix(api): lint errors in Rate Limiter + RAG services
- Remove unused imports (settings, uuid)
- Add 'from e' to exception raises (B904)
- Add strict=True to zip() (B905)
- Remove unused variable
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 16:03:16 +08:00 |
|
OG T
|
bf32c4b1f2
|
feat(api): Phase 13.2 AI Rate Limiter + RAG 基礎設施 (#84)
Rate Limiter (防止 Gemini 用量暴衝):
- ai_rate_limiter.py: RPM/Daily/Token 三層閥值
- openclaw.py: 整合 rate limit 檢查,超限自動降級
- health.py: /health/ai-usage 監控端點
RAG Tool 基礎 (#84 進行中):
- embedding_service.py: Ollama embedding 封裝
- rag_service.py: Redis vector search 服務
閥值設定:
- Gemini: 10 RPM, 500/day, 100K tokens/day
- Claude: 5 RPM, 200/day, 50K tokens/day
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 15:52:57 +08:00 |
|
OG T
|
579da38b8b
|
feat(api): Phase 13 智能路由 + CI/CD 整合 (#74-88)
Phase 13.1 CI/CD Integration:
- #76 workflow_run handler for CI failure diagnosis
- #77 SignOz log query (query_logs, error_logs_summary MCP)
- #78 CIAutoRepairService with risk-based execution decisions
Phase 13.3 Smart Routing:
- #85 Intent Classifier v2.0 (rule engine + LLM fallback)
- #86 Complexity Scorer (9-dimension scoring)
- #87 AI Router v3.0 (routing decision matrix)
- #88 Token Counter (OTEL + Langfuse integration)
New files:
- services/ci_auto_repair.py (risk stratification)
- services/model_registry.py (centralized model config)
- services/token_counter.py (677 lines)
- Skill 08: Model Router Expert
- Skill 09: Strangler Pattern Expert
- ADR-023: Smart Routing Architecture
- ADR-024: API Layer Architecture
Tests:
- phase11-conversational.spec.ts (E2E tests)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 15:32:52 +08:00 |
|
OG T
|
b79e5f1a1a
|
fix: Telegram HTML 解析錯誤 + 簽核後內容保留
修復:
1. telegram_gateway.py - HTML 轉義 (html.escape) 防止 "Can't parse entities"
2. openclaw-state-machine.tsx - 簽核後顯示結果 2 秒再導航
問題根因:
- URL 和用戶輸入內容可能包含 <, >, & 破壞 HTML
- 簽核後立即刷新列表,已簽核項目消失
Memory: feedback_approval_preserve_content.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 15:32:23 +08:00 |
|
OG T
|
a470a514e6
|
refactor(api): Phase 17 P0 Router 層違規全部修復
消除 Router 層直接存取 Redis/DB 的違規:
incidents.py (6 處):
- 改用 IncidentService.get_active_incidents()
- 改用 IncidentService.get_from_working_memory()
- 改用 IncidentService.update_outcome()
- 改用 IncidentService.resolve_incident()
- 改用 IncidentService.find_by_proposal_id()
stats.py (8 處):
- 新增 StatsService 封裝快取邏輯
- 移除直接 Redis 存取
audit_logs.py (7 處):
- 新增 AuditLogRepository 封裝 DB 操作
- Router 改用 Repository 層
webhooks.py (2 處):
- 新增 SignalProducerService 封裝 Redis Stream
- 改用 IncidentService.save_to_working_memory()
符合 leWOOOgo 積木化規範:
Router → Service → Repository → DB/Redis
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 13:06:47 +08:00 |
|
OG T
|
d1f0bbfbcd
|
refactor(api): Phase 17 P1 Tier 3 紅區服務 Protocol 定義
新增 5 個紅區核心服務的 Protocol 介面:
- IDecisionManager: 決策狀態機
- ITrustScoreManager: 信任評分引擎
- IIncidentEngine: 事件處理引擎
- IMultiSigRedisService: 分散式鎖服務
- ITelegramSecurityInterceptor: 安全攔截器
符合 leWOOOgo 積木化規範:
- 支援依賴注入 (DI)
- 便於測試時 Mock
- 型別約束確保實作一致性
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 12:49:30 +08:00 |
|
OG T
|
702e9a9634
|
fix(api): 移除未使用的 resource_resolver 導入
架構審查發現 get_resource_resolver 導入但未使用
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 12:43:59 +08:00 |
|
OG T
|
3bba3755ab
|
refactor(api): P2 新增 IResourceResolver Protocol
Phase 17 P2 架構改進:
- 新增 IResourceResolver Protocol 介面定義
- 支援 runtime_checkable 驗證
- 更新 get/set_resource_resolver 型別提示
- 符合 leWOOOgo 積木化規範
@see feedback_resource_resolver_di.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 12:39:18 +08:00 |
|
OG T
|
1cc34e1fc8
|
fix(api): Phase 18.1 修復 - Mock Response 正規化遺漏
問題: _generate_mock_response() 直接使用原始 target_resource,
導致 URL (如 https://api.awoooi.wooo.work) 未正規化為有效 K8s 名稱
修復: 在 _generate_mock_response() 開頭加入 normalize_resource_name()
- 將 URL/域名轉換為有效 deployment 名稱
- 更新 namespace 為正確值 (awoooi-prod)
測試: E2E 驗證待部署後執行
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 12:07:16 +08:00 |
|
OG T
|
96c3ddd8c4
|
feat(api): Phase 18.1 K8s 資源名稱驗證 (ADR-016)
三層防禦架構確保 kubectl 指令有效:
1. Webhook 入口正規化 (webhooks.py)
2. OpenClaw 產生指令前驗證 (openclaw.py)
3. 靜態映射表 + 模糊匹配 (k8s_naming.py, resource_resolver.py)
新增:
- src/utils/k8s_naming.py: RFC 1123 正規化 + 靜態映射
- src/services/resource_resolver.py: MCP K8s Tool 動態驗證
- docs/adr/ADR-016-k8s-resource-naming.md: 契約文檔
- scripts/e2e_tool_call_verification.py: E2E 驗證腳本 v2.0
修改:
- webhooks.py: Phase 18.1.7 入口正規化
- openclaw.py: Phase 18.1.6 產生指令前驗證
- Skill 03 v1.4: 新增 K8s 資源驗證章節
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 11:22:47 +08:00 |
|
OG T
|
2e75a20150
|
feat(api): Phase 7.5-7.6 Playbook 整合決策與自動萃取
Phase 7.5: DecisionManager 三軌決策
- 新增 Playbook 優先匹配 (similarity >= 85%)
- 三軌決策順序: Playbook > LLM > Expert System
- 整合 PlaybookService 推薦引擎
Phase 7.6: 自動萃取機制
- approval_execution.py 成功執行後觸發萃取
- 條件: RESOLVED/CLOSED + effectiveness >= 4
- 滿分 (5) 自動核准 Playbook
測試:
- 13 個 Playbook 單元測試全部通過
- 修復 Incident 模型欄位對應 (reasoning_steps)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 11:09:25 +08:00 |
|
OG T
|
698687f092
|
feat(api): #7 Playbook 萃取功能 (Phase 7.1-7.4)
實作內容:
- models/playbook.py: Playbook 資料模型 + Request/Response
- repositories/playbook_repository.py: Redis 雙層儲存
- repositories/interfaces.py: IPlaybookRepository Protocol
- services/playbook_service.py: 業務邏輯 (萃取/推薦/核准)
- api/v1/playbooks.py: REST API 端點
API 端點:
- POST /playbooks/extract/{incident_id} - 從成功案例萃取
- POST /playbooks/recommend - 症狀匹配推薦
- POST /playbooks/{id}/approve - 人工核准
- GET/PATCH/DELETE /playbooks/{id} - CRUD
遵循 leWOOOgo 積木化: Router → Service → Repository
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 10:54:13 +08:00 |
|
OG T
|
0060a33e31
|
feat(api): Phase 13.1 #74 GitHub Webhook → OpenClaw 整合
- POST /api/v1/webhooks/github endpoint
- 處理 pull_request 和 push 事件
- 驗證 X-Hub-Signature-256
- Telegram 通知整合
- GitHubWebhookService 封裝 Redis 操作 (leWOOOgo 合規)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 10:08:54 +08:00 |
|
OG T
|
957150a156
|
fix(api): 移除 intent_classifier 未使用 import (F401)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 10:06:43 +08:00 |
|
OG T
|
92ee07ad4b
|
refactor(api): Phase 17 agents.py Router 層違規修復
- 建立 AgentService 封裝所有 Redis 操作
- 定義 IAgentTaskRepository Protocol 介面支援 DI
- Router 層改用 AgentService,不再直接 get_redis()
- 符合 leWOOOgo 積木化原則 (Router → Service → Repository)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 10:02:31 +08:00 |
|
OG T
|
e7f361db50
|
refactor(api): Phase 17 metrics.py Router 層違規修復
移除 Router 層直接 DB 存取,遵循 leWOOOgo 積木化原則:
- 新增 IMetricsRepository Protocol (interfaces.py)
- 新增 MetricsDBRepository 封裝 DB 查詢
- 新增 MetricsService 封裝業務邏輯
- Router 層只做 HTTP 轉發
架構: Router → Service → Repository → PostgreSQL
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 10:01:57 +08:00 |
|
OG T
|
58b4004a18
|
feat(api): Phase 13.3 智能路由 (#85-87)
- IntentClassifier: 意圖分類 (告警/部署/查詢/維運/審查)
- ComplexityScorer: 複雜度評分 (1-5 分)
- AIRouter: 動態模型選擇 (整合 Intent + Complexity)
- 測試: 完整單元測試覆蓋
Phase 13.3 設計: project_phase13_3_smart_router.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 10:01:04 +08:00 |
|
OG T
|
45c3656004
|
fix(api): 修正 langfuse_client import 排序 (I001)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 09:37:09 +08:00 |
|
OG T
|
46ab6a838a
|
fix(api): 修復 ruff lint 錯誤
- langfuse_client.py: import Callable from collections.abc
- telemetry.py: import block 格式化
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 09:27:00 +08:00 |
|
OG T
|
b6cff31653
|
feat(api): Phase 15.3 Deep Linking 三系統互連
實現 Sentry ↔ SignOz ↔ Langfuse 零斷鏈觀測:
新增 deep_linking.py:
- SignOz Trace URL 生成器
- Langfuse Trace URL 生成器
- Sentry Issue URL 生成器
- get_all_links() 統一取得所有連結
整合點:
- main.py: Sentry before_send 注入 otel_trace_id + signoz_trace_url
- langfuse_client.py: 自動注入 OTEL trace_id 到 metadata
- openclaw.py: SignOz span 記錄 langfuse.trace_id 反向連結
架構圖:
┌─────────┐ trace_id ┌─────────┐ trace_id ┌──────────┐
│ Sentry │◄────────►│ SignOz │◄────────►│ Langfuse │
│ Errors │ │ Traces │ │ LLMOps │
└─────────┘ └─────────┘ └──────────┘
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 00:48:28 +08:00 |
|
OG T
|
1ac8965a7a
|
feat(api): Phase 15.1 Langfuse LLMOps 整合 + 模型升級
## 新功能
- Langfuse 自建部署 (192.168.0.110:3100)
- langfuse_client.py - LLM 呼叫追蹤包裝
- OpenClaw 整合 Langfuse trace
## 模型升級 (統帥批准)
- 生產預設: llama3.2:3b → qwen2.5:7b-instruct
- 摘要任務: llama3.2:3b (速度優先)
## 配置更新
- requirements.txt: +langfuse>=2.0.0
- config.py: +LANGFUSE_* 設定
- models.json: 更新 Ollama 模型配置
- K8s: Secret + ConfigMap 更新
## 審查通過
- 模組化檢查 ✅
- 核心測試 31/31 ✅
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-26 00:32:19 +08:00 |
|
OG T
|
2fb011470e
|
refactor(api): Phase 16 R3.4 完整 Repository 層整合
- incident_repository: 新增 get_status(), update_status() 方法
- incidents.py: feedback + debug 端點全面改用 Repository
- 消除所有 Router 層直接 DB 存取 (符合積木化鐵律)
- trust_engine.py: 修復 import 順序 lint 警告
- pre-commit hook: 修正誤判問題 (排除刪除行+註解行)
- LOGBOOK: 更新 Phase 16 完成狀態
驗證結果: 31/31 測試通過
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 23:47:01 +08:00 |
|
OG T
|
e0584bc181
|
refactor(api): Phase 16 R2 封存死代碼 + RiskLevel 統一
封存 (866 行):
- routes/approvals.py → _archived/routes/ (477 行,未註冊死代碼)
- services/approval.py → _archived/services/ (389 行,僅被死代碼使用)
合併 RiskLevel:
- models/approval.py 新增 HIGH (從 trust_engine.py 合併)
- trust_engine.py 改 import from models/approval.py
- 保留舊定義為註解供回滾
更新 services/__init__.py:
- 移除已封存模組的 import (註解保留回滾路徑)
驗證:
- RiskLevel 統一: models 與 trust_engine 使用同一 class
- 24 個 action_parsing 測試通過
回滾指令見 _archived/README.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 23:14:24 +08:00 |
|
OG T
|
0afaea63f8
|
fix(api): Phase 16 R4 測試修復 - ParsedOperation 向後兼容
問題:
- test_action_parsing.py 導入路徑未更新 (舊: approvals.py)
- ParsedOperation dataclass 不支援 tuple 解包
修復:
- 更新測試導入至 src.services.operation_parser
- 新增 ParsedOperation.__iter__() 支援 tuple 解包
測試: 24/24 passed (100%)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 23:00:03 +08:00 |
|
OG T
|
716b94f60a
|
feat(api): Phase 16 R4.2 抽取 ApprovalExecutionService
Strangler Fig Pattern: 從 approvals.py 抽取執行編排邏輯
新增:
- src/services/approval_execution.py (271 行)
- ApprovalExecutionService class
- 整合 OperationParser + Executor + Timeline + Notifications
瘦身成果:
- approvals.py: 1097 → 787 行 (-310 行)
- R4 總計: 移除 310 行內嵌業務邏輯
CI/CD 修復:
- 移除危險的 rm -f ~/actions-runner-* 指令
- 改用 checkout clean: true + workspace 內清理
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 22:04:15 +08:00 |
|
OG T
|
31cf2ddbe7
|
feat(api): Phase 16 R4.1 抽取 OperationParser 模組
Strangler Fig Pattern: 從 approvals.py 抽取操作解析邏輯
新增:
- src/services/operation_parser.py
- ParsedOperation dataclass
- 支援中英文指令解析 (kubectl/自然語言)
瘦身 approvals.py: 移除 117 行內嵌邏輯
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 21:52:27 +08:00 |
|
OG T
|
f6a28d235c
|
feat(api): Phase 16 R3.4 ApprovalDBService DI 重構
變更:
- ApprovalDBService 新增 __init__(repository) 建構子
- get_approval() 支援 Repository 注入
- get_pending_approvals() 支援 Repository 注入
- get_approval_service(use_repository=True) 啟用 DI
絞殺者模式:
- use_repository=False (預設): 內嵌 DB 操作
- use_repository=True: 使用 ApprovalDBRepository
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 21:26:23 +08:00 |
|
OG T
|
14dc77e4ad
|
chore(api): Phase 16 R2 封存舊版代碼
封存:
- incident_memory_v1.py (483 行) - 絞殺者模式前版本
- incident_engine_v1.py (657 行) - 絞殺者模式前版本
策略: 90 天後無問題才刪除 (2026-06-24)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 16:08:49 +08:00 |
|
OG T
|
2637263093
|
feat(api): Phase 16 R1.3 IncidentEngine 絞殺者模式
新增:
- IncidentMemoryAdapter: 實作 IIncidentMemory Protocol
- BlastRadiusAdapter: 實作 IBlastRadiusAnalyzer Protocol
- get_incident_engine() 雙軌切換 (USE_NEW_ENGINE)
絞殺者模式設計:
- 預設 USE_NEW_ENGINE=false (使用內嵌版)
- 設為 true 時使用 lewooogo-brain IncidentEngine
- 回滾: kubectl set env deployment/awoooi-api USE_NEW_ENGINE=false
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 15:47:52 +08:00 |
|
OG T
|
21ecedded2
|
fix(api): 修復 incident_memory import 排序 (I001)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 15:41:42 +08:00 |
|
OG T
|
b097567819
|
chore: Runner 穩定性 + 封存目錄結構
Runner 穩定性:
- 新增 setup-runner-watchdog.sh (5分鐘 Watchdog)
- 新增 setup-runner-2.sh (第二個 Runner 安裝)
封存策略:
- 建立 _archived/ 目錄結構
- 新增 ARCHIVE_LOG.md 封存紀錄模板
統帥裁示: 不要只是臨時解決,要徹底解決!
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 15:38:29 +08:00 |
|
OG T
|
20984fd354
|
feat(api): Phase 16 R1.2 完善 PostgreSQL 整合 + 封存策略
lewooogo-brain:
- 新增 IIncidentDbAdapter Protocol (DI 模式)
- load_incident 支援 Episodic Memory 回填
- persist_incident 透過 db_adapter 執行
apps/api:
- 新增 IncidentDbAdapter 實現 (SQLAlchemy 操作封裝)
- 絞殺者模式完整整合 lewooogo-brain + PostgreSQL
Skill 06 v1.4:
- 新增「封存而非刪除」策略 (統帥裁示)
- 封存目錄結構 + ARCHIVE_LOG.md 格式
- 90 天保留期 + 48hr 驗證期
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 15:31:03 +08:00 |
|
OG T
|
a202a2693a
|
feat(api): Phase 16 R1.2 絞殺者模式 (Strangler Fig Pattern)
- 新增 USE_NEW_ENGINE 設定開關 (預設 False)
- incident_memory.py 雙軌切換: 內嵌版本 ↔ lewooogo-brain
- 自動降級: lewooogo-brain 不可用時回退內嵌版本
- 回滾指令: kubectl set env deployment/awoooi-api USE_NEW_ENGINE=false
統帥批准 2026-03-26 立即執行
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 15:23:03 +08:00 |
|
OG T
|
c0ad8f8686
|
fix(api): 方案 C - Incident 解析相容舊格式 Enum
問題: Redis 存有舊 Enum 值 (status='open', severity='critical')
導致 Pydantic 驗證失敗
解法:
- normalize_status(): 'open' → 'investigating'
- normalize_severity(): 'critical' → 'P0' 等
- 應用於 get_from_working_memory, get_active_incidents, _record_to_incident
優點:
- 零資料風險 (不動 Redis)
- 回滾 = git revert (秒級)
- 新舊格式都能讀
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 14:14:58 +08:00 |
|
OG T
|
749b8bc554
|
fix(api): 修復時區 import 排序與未使用變數 lint 錯誤
- 修正 import 順序 (standard → third-party → local)
- 修復 datetime/timedelta 未定義錯誤
- 移除未使用的 imports
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 09:26:58 +08:00 |
|
OG T
|
2a2dac865a
|
feat(api): 統一使用台北時區 UTC+8 (禁止 UTC)
- 新增 src/utils/timezone.py 時區工具函式
- 修改 11 個後端檔案,全部改用 now_taipei()
- 更新 HARD_RULES.md 加入時區鐵律章節
- 更新 Skills 02/04 加入時區禁令
🔴 HARD RULE: 禁止 datetime.utcnow() / datetime.now(UTC)
✅ 正確做法: from src.utils.timezone import now_taipei
Memory: feedback_timezone_taipei.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-25 09:08:34 +08:00 |
|
OG T
|
8159d22db9
|
refactor: ClawBot → OpenClaw 全域更名
- 刪除舊版 clawbot.py (已有新版 openclaw.py)
- 更新 models/ai.py 類型定義 (ClawBotAnalysisRequest/Response)
- 更新 api/v1/ai.py import 與註解
- 更新 Discord username
- 更新所有註解與文檔
依據: feedback_openclaw_naming.md (統帥 2026-03-20 正式命名決議)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-24 12:57:36 +08:00 |
|
OG T
|
ef54cf46c9
|
fix(api): 修復 mypy 類型錯誤 - Incident 欄位補齊
|
2026-03-24 10:48:15 +08:00 |
|
OG T
|
ec7e45d538
|
fix(api): 修復 Incident-Approval 狀態同步 BUG
🔴 P0 核心功能修復:
問題: 審核後頁面重整,Y/n 按鈕重複出現
根因: resolve_incident_after_approval 在 Redis 缺失時靜默跳過
修復:
1. proposal_service.py - 處理 Redis 缺失情況
2. approvals.py - 添加詳細日誌追蹤
3. 設定 resolved_at 時間戳
防禦性增強:
- 日誌記錄 metadata 內容
- 記錄 resolve 成功/失敗狀態
- 警告無 incident_id 的情況
長期規範:
- 新增 feedback_incident_approval_sync.md 記憶
- 更新 HARD_RULES.md API 路徑規範
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-24 10:39:22 +08:00 |
|
OG T
|
765ee39a90
|
feat(api): Phase 6.5 Statistics API + Y/n 按鈕修復
新增:
- /stats/incidents/summary - 事件總覽統計
- /stats/incidents/resolution - 解決時間 P50/P95
- /stats/ai-performance - AI 提案效能
- /stats/services/affected - 受影響服務排名
修復:
- Y/n 按鈕永久禁用問題 (decision.state=completed 但 incident 未解決)
- decision_manager.py: 只有當 incident 也已解決才返回已完成的 decision
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-24 09:50:03 +08:00 |
|
OG T
|
4f1c8ae473
|
fix(ci): Resolve Python and TypeScript lint errors
- Fix 35 Python ruff errors (B904, F841, E722, E741, B007, B008)
- Add eslint config for lewooogo-core package
- Update pyproject.toml to new ruff lint config format
- Relax frontend eslint rules to warnings for unused vars
- Allow console.* for debugging (TODO: unified logger)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-03-24 09:20:56 +08:00 |
|