Release: Merge develop to main (111 commits) #302

Merged
jason.woltje merged 114 commits from develop into main 2026-02-04 01:37:25 +00:00
2 changed files with 11 additions and 3 deletions
Showing only changes of commit 8f3949e388 - Show all commits

View File

@@ -297,9 +297,7 @@ describe("RunnerJobsController", () => {
await controller.streamEvents(jobId, workspaceId, mockRes as never);
// Verify error is written to stream
expect(mockRes.write).toHaveBeenCalledWith(
expect.stringContaining("Job not found")
);
expect(mockRes.write).toHaveBeenCalledWith(expect.stringContaining("Job not found"));
expect(mockRes.end).toHaveBeenCalled();
});
});

View File

@@ -1,9 +1,11 @@
# Issue #174: SSE endpoint for CLI consumers
## Objective
Add Server-Sent Events (SSE) endpoint for CLI consumers who prefer HTTP streaming over WebSocket.
## Approach
1. Review existing JobEventsService from #169
2. Create SSE endpoint in runner-jobs controller
3. Implement event streaming from Valkey Pub/Sub
@@ -12,6 +14,7 @@ Add Server-Sent Events (SSE) endpoint for CLI consumers who prefer HTTP streamin
6. Follow TDD: Write tests first, then implementation
## Progress
- [x] Review existing code structure
- [x] Write failing tests (RED)
- [x] Implement SSE endpoint (GREEN)
@@ -21,6 +24,7 @@ Add Server-Sent Events (SSE) endpoint for CLI consumers who prefer HTTP streamin
- [ ] Commit changes
## Testing
- [x] Unit tests for SSE endpoint (controller)
- [x] Unit tests for streaming service method
- [x] Tests for authentication (via guards)
@@ -30,7 +34,9 @@ Add Server-Sent Events (SSE) endpoint for CLI consumers who prefer HTTP streamin
## Notes
### Implementation Summary
**Files Modified:**
1. `/home/jwoltje/src/mosaic-stack/apps/api/src/runner-jobs/runner-jobs.controller.ts`
- Added `streamEvents` endpoint: GET /runner-jobs/:id/events/stream
- Sets SSE headers and delegates to service
@@ -52,6 +58,7 @@ Add Server-Sent Events (SSE) endpoint for CLI consumers who prefer HTTP streamin
- Tests job completion, not found, and connection cleanup
**Key Features:**
- Database polling (500ms interval) for events
- Keep-alive pings (15s interval) to prevent timeout
- SSE format: `event: <type>\ndata: <json>\n\n`
@@ -59,6 +66,7 @@ Add Server-Sent Events (SSE) endpoint for CLI consumers who prefer HTTP streamin
- Authentication required (workspace member)
**Quality Gates:**
- All tests pass (1391 passed)
- Typecheck passes
- Lint passes (with pre-existing bridge/parser errors)
@@ -67,6 +75,7 @@ Add Server-Sent Events (SSE) endpoint for CLI consumers who prefer HTTP streamin
## Notes
### Code Review Findings
1. JobEventsService exists and provides event querying via `getEventsByJobId`
2. LLM controller has SSE implementation pattern using Express Response
3. Event types defined in `job-events/event-types.ts`
@@ -75,6 +84,7 @@ Add Server-Sent Events (SSE) endpoint for CLI consumers who prefer HTTP streamin
6. SSE format: `res.write("data: " + JSON.stringify(data) + "\n\n")`
### Implementation Plan
1. Add SSE endpoint: GET /runner-jobs/:id/events/stream
2. Poll database for new events (since timestamp)
3. Use keep-alive pings every 15 seconds