feat(sessions): add SessionAdapter — REST CRUD for sessions/milestones/episodes (#50)
CI / CI (pull_request) Successful in 2m55s
CI / CI (pull_request) Successful in 2m55s
New internal/sessions package with Handler bridging 7 REST endpoints to: - POST /memory/ingest on poimen-memory:8080 (writes) - GraphQL hybridSearch/entity on poimen-graphql:8090 (reads) Adapter registration: X-Service: sessions with resources 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 (prevents key:value injection on user fields). Limit capped at 200. GraphQL error body detected and surfaced as 502. tracing.NewTransport wired for cross-service trace propagation. JWT forwarded to both upstreams for auth. 30 tests in handler_test.go covering all 7 handlers + EpisodeID helper. Closes #50
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