feat: add async durable session storage - #247
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 962c0058a3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| } | ||
|
|
||
| private static sessionRevisionPath(sessionsDir: string, sessionId: string, revision: number): string { | ||
| return join(sessionsDir, `${encodeURIComponent(sessionId)}.${revision}.json`); |
There was a problem hiding this comment.
Update session watchers for revisioned storage
With this new <encoded-id>.<revision>.json layout, no new write touches chat-sessions/${sessionId}.json, and later saves move on to .2, .3, etc. I checked ControlPlaneChatSessionsController.subscribeLiveEvents and the REST ChatSessionEventsRestController: both still watch resolveFilePath(..., ${sessionId}.json), so selected-session streams for new sessions only emit waiting and never send session.updated when another client, turn, or settings write persists. The UI can miss durable updates until a run terminal/poll/manual refresh; watch the catalog/directory or publish session update events from the service when revisioned writes complete.
Useful? React with 👍 / 👎.
Summary
Verification
Scope
This PR establishes the session durability foundation. Artifact, archive, trace, and object-storage adapters remain separate tracked follow-up slices.
The concurrent root README refresh is intentionally excluded because another task owns it.