Skip to content

HTTP API with SSE streaming #27

@JaimeStill

Description

@JaimeStill

Context

Part of Objective #2 (Kernel Interface). Pure HTTP handlers with SSE streaming replace ConnectRPC. Follows agent-lab patterns (~/code/agent-lab). The kernel serves GET /openapi.json for schema documentation.

Depends on: #26 (Multi-session kernel)

Scope

New api/ package replacing rpc/. Pure HTTP handlers with SSE streaming.

  • Remove ConnectRPC: Delete rpc/gen/, rpc/proto/, rpc/buf.yaml, rpc/buf.gen.yaml. Remove connectrpc.com/connect and google.golang.org/protobuf from go.mod.
  • Request/response types: Go structs with JSON tags as source of truth
  • HTTP handlers:
    • GET /agents — List registered agents and capabilities
    • POST /sessions — Create session (agent name, bootstrap context)
    • GET /sessions/{id} — Get session metadata and status
    • POST /sessions/{id}/run — Submit prompt → SSE stream
    • GET /sessions/{id}/memory — List memory keys
    • GET /sessions/{id}/memory/{key...} — Get memory entry
    • PUT /sessions/{id}/memory/{key...} — Save memory entry
    • DELETE /sessions/{id}/memory/{key...} — Delete memory entry
    • GET /tools — List registered tools
    • GET /openapi.json — OpenAPI spec
  • SSE streaming: Typed events (status, tool_call, token), JSON data, flush per event, [DONE] marker
  • Response helpers: RespondJSON(), RespondError()
  • Error mapping: Kernel errors → HTTP status codes
  • Handler tests: Using httptest.NewServer and SSE client parsing
  • OpenAPI spec: Endpoint definitions managed alongside handlers

Approach

Follow agent-lab patterns:

  • api/handler.go — Handler struct with kernel dependency, Routes method
  • api/types.go — Request/response Go structs
  • api/respond.go — JSON and error response helpers
  • api/sse.go — SSE streaming utility
  • api/openapi.go — OpenAPI spec construction

Acceptance Criteria

  • ConnectRPC removed (rpc/ deleted, dependencies removed from go.mod)
  • All HTTP endpoints implemented and tested
  • SSE streaming works for /run endpoint
  • OpenAPI spec served at /openapi.json
  • Error mapping from kernel to HTTP status codes
  • Handler tests with httptest
  • go vet ./... passes

Metadata

Metadata

Assignees

Labels

featureNew functionalitykernelkernel runtime subsystem

Type

Projects

Status

Todo

Relationships

None yet

Development

No branches or pull requests

Issue actions