Your Name
8629ac709b
run-migration / migrate (push) Failing after 59s
Code Review / ai-code-review (push) Successful in 1m8s
Type Sync Check / check-type-sync (push) Successful in 2m27s
feat(awooop): Phase 1-8 完整實作 — AwoooP Agent Platform 六平面架構
## Phase 1-3: Control Plane + Contract System
- awooop_phase1_control_plane_2026-05-04.sql: 12 張核心表 + RLS
- awooop_phase1_batch1_rls_2026-05-04.sql: 全部 FORCE RLS + GRANT
- packages/awooop-contracts/: 六合約 JSON Schema + golden fixtures
- src/models/awooop_contracts.py: Pydantic v2 contract models(extra=forbid)
- src/repositories/contract_repository.py: contract lifecycle(draft→published→active)
- src/services/contract_service.py: HMAC publish sig + Redis multi-sig activate
- src/services/schema_validator.py: LLM output validator(retry×3, E-SCHEMA-001)
## Phase 2: Tenant Isolation
- awooop_phase2_budget_ledger_2026-05-04.sql: budget_ledger + RLS
- src/services/budget_service.py: Token Budget Hard Kill 三層防線
- src/core/context.py: PROJECT_ID ContextVar(31 background loop 自動繼承)
- src/db/base.py + models.py: project_id 欄位 + RLS set_config 注入
- src/hermes/nl_gateway.py: project_id Redis key 前綴(Phase A 雙寫)
- src/services/anomaly_counter.py: per-project 改造(Phase A fallback)
## Phase 4: Platform Shell in Shadow Mode
- awooop_phase4_run_state_2026-05-04.sql: run_state + step_journal + idempotency
- src/services/run_state_machine.py: 8-state FSM + SKIP LOCKED + stale reaper
- src/services/platform_runtime.py: UUID v7 + W3C trace_id + shadow_execute
- src/services/audit_sink.py: PII/secret redaction 9 patterns
- src/api/v1/platform/runs.py: POST/GET /v1/platform/runs(Router→Service 架構)
- src/workers/platform_worker.py: SKIP LOCKED worker + heartbeat + reaper loop
- src/main.py: platform router + lifespan worker start/stop
## Phase 5: MCP Gateway 五閘門
- awooop_phase5_mcp_gateway_2026-05-04.sql: 4 表 + RLS
- src/plugins/mcp/gateway.py: McpGateway(Gate 1~5, E-MCP-GATE-001~009)
- src/plugins/mcp/redaction_middleware.py: 雙層 redaction + 16K 截斷
- src/plugins/mcp/registry.py: __provider name mangling(ADR-116)
- src/plugins/mcp/credential_resolver.py: k8s secret ref 解析
- tests/test_mcp_credential_isolation.py: 10 個迴歸測試(secret leak 防再現)
## Phase 6-8: EwoooC + Channel Hub + Approval Token
- awooop_phase6_ewoooc_onboarding_2026-05-04.sql: ewoooc tenant + 4 read-only MCP tools
- awooop_phase7_channel_hub_2026-05-04.sql: conversation_event + outbound_message
- src/services/provider_proxy.py: ProviderProxy + PlatformEnvelope(ADR-115)
- src/services/channel_hub.py: Telegram inbound mirror + Progressive Feedback(30s)
- src/services/awooop_approval_token.py: HS256 + jti NX replay 防護 + suggest mode
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 19:31:53 +08:00
..
2026-04-25 03:29:38 +08:00
2026-05-04 13:46:19 +08:00
2026-03-26 16:06:20 +08:00
2026-04-25 02:33:43 +08:00
2026-04-05 14:45:02 +08:00
2026-03-31 16:25:00 +08:00
2026-04-10 11:22:57 +08:00
2026-05-01 16:53:02 +08:00
2026-05-01 16:53:02 +08:00
2026-05-01 15:09:57 +08:00
2026-04-27 08:15:53 +08:00
2026-05-03 12:42:40 +08:00
2026-04-29 11:39:36 +08:00
2026-05-03 22:49:23 +08:00
2026-04-22 01:33:30 +08:00
2026-04-29 10:44:39 +08:00
2026-04-20 04:13:02 +08:00
2026-04-22 01:41:34 +08:00
2026-04-20 19:40:01 +08:00
2026-04-20 19:40:01 +08:00
2026-04-14 14:39:14 +08:00
2026-04-30 14:06:09 +08:00
2026-05-01 13:02:07 +08:00
2026-03-29 15:27:49 +08:00
2026-04-29 19:44:04 +08:00
2026-04-14 14:39:14 +08:00
2026-03-29 15:27:49 +08:00
2026-05-01 10:47:42 +08:00
2026-04-27 15:22:31 +08:00
2026-05-01 20:34:33 +08:00
2026-05-03 00:18:57 +08:00
2026-03-29 15:48:03 +08:00
2026-04-12 22:50:20 +08:00
2026-05-03 22:49:23 +08:00
2026-04-27 08:11:40 +08:00
2026-04-30 14:06:09 +08:00
2026-04-30 14:06:09 +08:00
2026-04-27 08:11:40 +08:00
2026-05-02 17:41:28 +08:00
2026-05-02 12:31:37 +08:00
2026-04-30 14:06:09 +08:00
2026-04-27 14:42:29 +08:00
2026-05-01 20:34:33 +08:00
2026-04-30 15:01:23 +08:00
2026-04-26 20:56:19 +08:00
2026-03-31 12:16:54 +08:00
2026-04-15 12:44:53 +08:00
2026-04-14 18:43:29 +08:00
2026-04-29 22:56:12 +08:00
2026-04-11 21:33:19 +08:00
2026-04-26 20:17:17 +08:00
2026-04-01 11:11:50 +08:00
2026-04-28 15:27:33 +08:00
2026-05-03 00:05:04 +08:00
2026-05-03 12:42:40 +08:00
2026-05-03 12:42:40 +08:00
2026-05-03 01:48:57 +08:00
2026-05-03 01:44:58 +08:00
2026-04-07 11:17:40 +08:00
2026-04-29 23:38:30 +08:00
2026-03-31 16:16:16 +08:00
2026-04-27 14:54:19 +08:00
2026-04-29 19:44:04 +08:00
2026-04-29 10:44:39 +08:00
2026-04-29 10:44:39 +08:00
2026-04-29 10:44:39 +08:00
2026-04-26 20:44:19 +08:00
2026-03-31 12:20:29 +08:00
2026-04-26 20:18:33 +08:00
2026-03-26 16:06:20 +08:00
2026-04-29 10:44:39 +08:00
2026-05-04 19:31:53 +08:00
2026-04-15 13:08:38 +08:00
2026-04-12 13:32:42 +08:00
2026-05-03 22:49:23 +08:00
2026-04-27 14:58:46 +08:00
2026-04-30 23:02:17 +08:00
2026-03-29 20:49:23 +08:00
2026-04-03 14:00:21 +08:00
2026-05-03 22:57:58 +08:00
2026-05-03 22:49:23 +08:00
2026-05-03 22:49:23 +08:00
2026-05-01 13:02:07 +08:00
2026-04-29 22:38:57 +08:00
2026-05-02 12:31:37 +08:00
2026-04-29 11:39:36 +08:00
2026-04-27 08:11:40 +08:00
2026-04-27 08:17:59 +08:00
2026-04-30 14:13:57 +08:00
2026-04-09 08:55:21 +08:00
2026-04-05 00:14:50 +08:00
2026-04-05 00:14:50 +08:00
2026-04-30 23:59:39 +08:00
2026-04-30 23:59:39 +08:00
2026-04-14 15:19:54 +08:00
2026-04-15 13:08:38 +08:00
2026-04-15 13:08:38 +08:00
2026-03-31 14:17:36 +08:00
2026-04-27 19:56:51 +08:00
2026-03-29 16:23:30 +08:00
2026-03-23 23:51:37 +08:00
2026-04-14 14:39:14 +08:00
2026-04-30 14:06:09 +08:00
2026-04-29 10:49:25 +08:00
2026-04-15 13:08:38 +08:00
2026-04-20 04:23:09 +08:00
2026-04-29 19:44:04 +08:00
2026-04-27 08:24:59 +08:00
2026-04-27 16:00:00 +08:00
2026-04-09 09:01:59 +08:00
2026-04-27 14:42:29 +08:00
2026-05-02 12:31:37 +08:00
2026-05-01 16:53:02 +08:00
2026-04-10 01:12:00 +08:00
2026-04-30 00:09:25 +08:00
2026-04-30 15:01:23 +08:00
2026-04-27 19:56:51 +08:00
2026-04-12 21:08:48 +08:00
2026-04-30 00:09:25 +08:00
2026-03-31 16:16:16 +08:00
2026-04-22 01:27:39 +08:00
2026-05-03 12:42:40 +08:00
2026-04-27 08:11:40 +08:00
2026-05-03 00:05:04 +08:00