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
Context
Part of Objective #2 (Kernel Interface). Pure HTTP handlers with SSE streaming replace ConnectRPC. Follows agent-lab patterns (
~/code/agent-lab). The kernel servesGET /openapi.jsonfor schema documentation.Depends on: #26 (Multi-session kernel)
Scope
New
api/package replacingrpc/. Pure HTTP handlers with SSE streaming.rpc/gen/,rpc/proto/,rpc/buf.yaml,rpc/buf.gen.yaml. Removeconnectrpc.com/connectandgoogle.golang.org/protobuffromgo.mod.GET /agents— List registered agents and capabilitiesPOST /sessions— Create session (agent name, bootstrap context)GET /sessions/{id}— Get session metadata and statusPOST /sessions/{id}/run— Submit prompt → SSE streamGET /sessions/{id}/memory— List memory keysGET /sessions/{id}/memory/{key...}— Get memory entryPUT /sessions/{id}/memory/{key...}— Save memory entryDELETE /sessions/{id}/memory/{key...}— Delete memory entryGET /tools— List registered toolsGET /openapi.json— OpenAPI spec[DONE]markerRespondJSON(),RespondError()httptest.NewServerand SSE client parsingApproach
Follow agent-lab patterns:
api/handler.go— Handler struct with kernel dependency, Routes methodapi/types.go— Request/response Go structsapi/respond.go— JSON and error response helpersapi/sse.go— SSE streaming utilityapi/openapi.go— OpenAPI spec constructionAcceptance Criteria
go vet ./...passes