Skip to the content.

Task 97 — Dual API keys (contribute + system)

Phase: 8 Status: done Owner: — Slug: dual-api-keys Studio Stage: 1

Goal

Заменить одиночный WebApi:ApiKey на массив WebApi:ApiKeys с ролями contribute и system. См. ADR-0004.

Acceptance criteria

Sub-tasks

Role permissions

| Endpoint category | contribute | system | |—|—|—| | chat, skills CRUD, memory, stats, reflect | ✓ | ✓ | | config GET, config PATCH (non-destructive) | ✓ | ✓ | | mesh read, tools enable/disable, marketplace install | ✓ | ✓ | | config PUT (full replace) | ✗ | ✓ | | system restart, lifecycle destructive | ✗ | ✓ | | MCP add/remove, quota changes, force checkout | ✗ | ✓ |

Dependencies

Scope / Likely files

src/agent/Hercules.WebApi/Config/WebApiConfig.cs, src/agent/Hercules.WebApi/Auth/ApiKeyMiddleware.cs, src/agent/Hercules.WebApi/Program.cs, src/agent/Config/AppConfig.cs

Implementation notes

Round 1 (this tick) — completed

Реализован dual API keys pipeline (ADR-0004):

Config (WebApiConfig.cs):

Middleware (ApiKeyMiddleware.cs):

Endpoint filter (RequireSystemRoleFilter.cs):

Store (ApiKeyStore.cs):

Program.cs wiring:

Endpoint enforcement:

Tests (47 total в WebApi, 21 новых):

Round 1 — validation

Notes