feat(api): stream model profile state #747

Merged
admin merged 1 commits from feat/741-model-profile-stream into dev 2026-10-28 15:50:49 +00:00
Owner

Summary

Second implementation slice for #741, stacked on #746. Adds a typed MODEL_PROFILES domain to WatchSharedState, carrying the planner's selected model and saved provider profiles as an authoritative snapshot. Successful model-config and profile create/update/delete operations notify all independent subscribers, so clients receive updates without polling.

The stream reuses existing secret-safe response shapes: API keys are represented only by has_api_key; key values and node tokens are never sent. The snapshot remains available when model configuration is unavailable, with the per-domain error reported through the stream.

Scope boundary

This does not complete #741. Settings, lending, files, pool members/invitations, conversations, server-originated changes, revocation/reconnect coverage, and desktop/browser consumers still need separate slices.

Verification

  • go test ./apps/sisyphusd/api — passed
  • make lint — passed
  • Actionlint — passed
  • Renderer npm run typecheck — passed
  • Renderer npm test — 235 passed
  • git diff --check — passed
  • make cover — attempted; blocked locally because Kubo/IPFS is not installed (required by storage integration tests). CI should run the full suite.

/cc @rvnminers-A-and-N

## Summary Second implementation slice for #741, stacked on #746. Adds a typed `MODEL_PROFILES` domain to `WatchSharedState`, carrying the planner's selected model and saved provider profiles as an authoritative snapshot. Successful model-config and profile create/update/delete operations notify all independent subscribers, so clients receive updates without polling. The stream reuses existing secret-safe response shapes: API keys are represented only by `has_api_key`; key values and node tokens are never sent. The snapshot remains available when model configuration is unavailable, with the per-domain error reported through the stream. ## Scope boundary This does not complete #741. Settings, lending, files, pool members/invitations, conversations, server-originated changes, revocation/reconnect coverage, and desktop/browser consumers still need separate slices. ## Verification - `go test ./apps/sisyphusd/api` — passed - `make lint` — passed - Actionlint — passed - Renderer `npm run typecheck` — passed - Renderer `npm test` — 235 passed - `git diff --check` — passed - `make cover` — attempted; blocked locally because Kubo/IPFS is not installed (required by storage integration tests). CI should run the full suite. /cc @rvnminers-A-and-N
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Sisyphus/Sisyphus#747