Slice 3: activity feed and active project (SSE + MCP tools)
Add internal/activity (thread-safe active project + bounded event feed with subscriber fan-out). Service exposes active-project/activity methods and takes the feed. New MCP tools get_active_project/set_active_project/get_activity and HTTP endpoints GET/POST /api/active-project, /api/activity, and /events (SSE). New <activity-feed> component updates live via EventSource; <repo-list> sets the active project on selection. Verified end-to-end in the running app: user actions push live events and set the active project (actor=user), all readable by Claude over MCP. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
# activity-feed
|
||||
|
||||
## Intent
|
||||
Shows the **active project** and a **live feed** of what happened — both user and
|
||||
Claude actions. It makes the coordination state visible (AGENT.md §8.2): the same
|
||||
active project and events Claude reads over MCP (`get_active_project`,
|
||||
`get_activity`), so the user can watch the two stay in sync. Groundwork for the
|
||||
graceful project handoff (§8.3).
|
||||
|
||||
## Public surface
|
||||
- **Tag:** `<activity-feed>`
|
||||
- **Attributes/properties:** none.
|
||||
- **Fetches (initial):** `GET /api/active-project`, `GET /api/activity`.
|
||||
- **Subscribes:** `EventSource('/events')` — SSE stream; listens for `activity`
|
||||
events (auto-reconnects if the stream drops). Closed on disconnect.
|
||||
- **Renders:** active project (basename, full path on hover) + newest-first list
|
||||
of events, each with an actor badge (user/claude/system), a humanized kind,
|
||||
the repo, optional detail, and a timestamp.
|
||||
|
||||
## History
|
||||
- 2026-09-20: created — slice 3; live active-project + activity view over SSE.
|
||||
|
||||
## Notes / gotchas
|
||||
- All server-derived text is escaped before insertion (repo paths, details,
|
||||
kinds) — treat as untrusted (§1.1).
|
||||
- Uses shared design tokens for colors/radii — no hardcoded hex.
|
||||
- The feed is capped client-side at 200 events to mirror the server ring buffer;
|
||||
it does not paginate history.
|
||||
Reference in New Issue
Block a user