The self-hosted runner doesn't have uv pre-installed.
Add setup-python and setup-uv steps before running pytest.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Integrate real ActionExecutor instead of mock responses
- kubectl_get: Execute real kubectl get with JSON output
- kubectl_delete: Dry-run validation + actual pod deletion
- kubectl_scale: Real kubectl scale command
- kubectl_restart: Deployment rollout restart with validation
- Database query placeholder for #81
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The self-hosted runner doesn't have jq installed.
Use Python's json module as a portable alternative.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change dashed border buttons to solid filled style for better clickability
- Add signature progress bar with visual indicator
- Add signed users list showing who has already signed
- Convert Blast Radius section to collapsible panel (auto-open for CRITICAL)
- Convert Dry-Run Checks to collapsible panel with pass/fail summary badge
- Add slide-in animations for expanded content
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- external-sentinel: if: false
- telegram-connectivity: if: false
Reason: GitHub account payment/spending limit restrictions
Only self-hosted runner jobs remain active
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Industry-standard AIOps UX patterns:
- Compact approval list in right panel
- SlidePanel for details (PagerDuty/ServiceNow style)
- Keyboard navigation (←/→ for prev/next, ESC to close)
- Quick access to approve/reject
- Maintains context while reviewing details
Fixes large empty space issue and endless scrolling.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Fixes existing approvals created before b645981 that lack
corresponding incidents. Ensures "活躍事件" count matches
"待簽核" count.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sentry Tunnel is a Next.js API Route, not FastAPI endpoint.
Must be handled by frontend server to avoid 404.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
原錯誤: 'OpenClawDecision' object has no attribute 'get'
修正: 使用 Pydantic 模型屬性存取 (analysis_result.risk_level.value)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change REDIS_URL from DB 10 to DB 0
- AWOOOI and OpenClaw now share the same Redis database
- Incidents created by OpenClaw visible in AWOOOI UI
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- POST /api/v1/webhooks/alertmanager accepts Prometheus Alertmanager format
- Internal IPs (192.168.x.x, 10.x.x.x) bypass HMAC verification
- Converts Alertmanager alerts to Signal format → Redis Stream
- External IPs must use /signals with HMAC
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Container uses python:3.11-slim without curl
- httpx is already installed as API dependency
- Fixes: "curl: executable file not found in $PATH"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Allow egress to 192.168.0.110:9000 (Sentry Self-Hosted)
- Allow egress to 192.168.0.110:5000 (Harbor Registry)
- Enables Sentry Tunnel API Route to forward errors
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename to deploy-prod.yml.disabled
- Keep only cd.yaml (v2.0) with full AIOPS features
- See: feedback_single_deploy_workflow.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add -c api to specify container name
- Increase sleep to 15s for pod startup
- Add fallback message to prevent workflow failure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- CI: awoooi-ci service with sha + ci environment
- CD: awoooi-cd service with sha + production environment
- Exports to SignOz at 192.168.0.121:4318
Approved: 2026-03-24 統帥指令
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Root cause: Frontend was compiled with default localhost:8000
instead of production URL https://awoooi.wooo.work
This caused all API calls to fail in production because the
browser tried to call localhost:8000 which doesn't exist.
Next.js NEXT_PUBLIC_* variables are baked in at BUILD TIME,
not runtime, so they must be passed via --build-arg.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>