feat(sessions): SessionAdapter — REST CRUD for sessions/milestones/episodes (#51)
CI / CI (push) Successful in 3m15s
CI / CI (push) Successful in 3m15s
Closes #50 ## Changes - `internal/sessions/handler.go` — new Handler; 7 endpoints dispatched via `X-Upstream-Path`; writes to `poimen-memory` via `/memory/ingest`; reads from `poimen-graphql` via GraphQL `hybridSearch`/`entity` - `internal/serviceadapter/session_adapter.go` — `NewSessionAdapter()` + `GetSessionSpec()` with 5 resources - `cmd/gateway/main.go` — register sessions adapter after memory adapter - `internal/serviceadapter/adapters.go` — add `sessions` case to factory - `internal/sessions/handler_test.go` — 30 tests, all pass ## Design - `X-Service: sessions` + `X-Resource: <sessions|session|milestones|episodes|episode>` - IDs via query params (`?session_id=`, `?episode_id=`) — dispatcher does not substitute path params - `episode_id = sha256(session_id+milestone_id+attempt)` per §4.14 Q6 - Content JSON-encoded (injection-safe) - `tracing.NewTransport` wired for cross-service trace propagation - GraphQL `errors` array detected, surfaced as 502 - limit capped at 200 --------- Co-authored-by: Admin Bot <[email protected]> Reviewed-on: #51
This commit was merged in pull request #51.
This commit is contained in:
@@ -117,6 +117,10 @@ func main() {
|
||||
// Includes standing-context resource for CAG support (issue #44).
|
||||
_ = registry.Add(serviceadapter.NewMemoryAdapter())
|
||||
|
||||
// Add sessions service adapter — REST CRUD bridged to poimen-memory ingest
|
||||
// and poimen-graphql reads. Issue #50.
|
||||
_ = registry.Add(serviceadapter.NewSessionAdapter())
|
||||
|
||||
// Add other adapters from config (skip if already registered in code)
|
||||
for _, a := range cfg.Adapters {
|
||||
if existing := registry.Get(a.ServiceName); existing != nil {
|
||||
|
||||
Reference in New Issue
Block a user