feat(agent-memory): add Agent Memory workspace Overview UI - #6426
feat(agent-memory): add Agent Memory workspace Overview UI#6426booleanhunter wants to merge 1 commit into
Conversation
Code Coverage - Backend unit tests
Test suite run success3795 tests passing in 327 suites. Report generated by 🧪jest coverage report action from c85cb45 |
Code Coverage - Integration Tests
|
Code Coverage - Frontend unit tests
Test suite run success8130 tests passing in 885 suites. Report generated by 🧪jest coverage report action from c85cb45 |
46c7695 to
e9b527f
Compare
Add the feature-flagged Agent Memory workspace and its Overview screen for inspecting a Redis Agent Memory store. Endpoint home: - List and connect to saved endpoints, with a first-run empty state - Add or edit a Redis Agent Memory endpoint connection Workspace shell: - Header, tab bar, and configuration panel - Scope by owner and session via filter pills - Opt-in per-pane auto-refresh Overview screen: - Working memory for the selected session: message log, running summary, session namespace, and add-event / clear-session actions - Long-term memory: the latest records for the selected scope
e9b527f to
c85cb45
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c85cb45e1e
ℹ️ About Codex in GitHub
Codex has been enabled to automatically 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 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| if (isStaleResponse(stateInit(), endpointId)) return | ||
|
|
||
| if (isStatusSuccessful(status)) { | ||
| dispatch(loadSessionsSuccess(data)) | ||
| if (autoPick) { | ||
| dispatch(setSessionId(data[0] ?? null)) |
There was a problem hiding this comment.
Discard session responses after the owner changes
When a user changes the owner twice before the first /sessions request completes, this response is validated only against endpointId, so the older request can overwrite the second owner's sessions and auto-select one of them. The subsequent working- and long-term-memory requests then display a session that does not belong to the currently selected owner; capture the requested userId and discard the response when it no longer matches the active filter.
Useful? React with 👍 / 👎.
| import EndpointConnectionFormWrapper from './components/connection-form/EndpointConnectionFormWrapper' | ||
| import * as S from './AgentMemoryPage.styles' | ||
|
|
||
| const PAGE_TITLE = 'Agent Memory' |
There was a problem hiding this comment.
Localize the new Agent Memory interface
When RedisInsight is running in Bulgarian, this title and the other newly added Agent Memory labels, buttons, placeholders, errors, and dialog text remain in English because they are literals rather than t/Trans keys; only the success notification was added to the locale files. Move the new user-facing copy into matching en.json and bg.json keys so the entire feature follows the selected locale.
AGENTS.md reference: AGENTS.md:L127-L127
Useful? React with 👍 / 👎.
| const staticAccents = { | ||
| accent: '#dcff1c', | ||
| dark: '#2d4754', |
There was a problem hiding this comment.
Replace hardcoded accent colors with semantic tokens
These fixed hex values, along with the additional hardcoded colors in the light/dark accent maps below, bypass the application theme. Consequently custom or accessibility themes cannot adjust the role tags, chips, and badges with the rest of the UI; define the palette through the theme's semantic color tokens instead.
AGENTS.md reference: AGENTS.md:L153-L153
Useful? React with 👍 / 👎.
| export const HeaderBar = styled(Row)` | ||
| padding: ${({ theme }) => theme.core.space.space150} | ||
| ${({ theme }) => theme.core.space.space300}; | ||
| min-height: 60px; |
There was a problem hiding this comment.
Replace fixed pixel dimensions with theme spacing
This fixed height is one of many raw pixel dimensions introduced throughout the workspace stylesheet. These values bypass the project's spacing scale and will not track theme-density changes; use the corresponding theme.core.space or component-size token rather than retaining extension-specific pixel metrics.
AGENTS.md reference: AGENTS.md:L176-L176
Useful? React with 👍 / 👎.
| dispatch(setConnectedEndpointSuccess({ endpoint })) | ||
| onSuccess?.() |
There was a problem hiding this comment.
Ignore superseded endpoint connection responses
When two endpoints are clicked quickly, or navigation changes endpoints while a connection request is pending, both requests can complete and this older response still overwrites connectedEndpoint and invokes its navigation callback. The user can therefore be taken to the endpoint from the first click rather than the latest one; associate connection state with the requested ID or a sequence token and ignore superseded results.
Useful? React with 👍 / 👎.
| const isKnownTab = ( | ||
| Object.values(AgentMemoryWorkspaceTab) as string[] | ||
| ).includes(tab ?? '') |
There was a problem hiding this comment.
Redirect unimplemented long-term-memory routes
A direct visit to /agent-memory/:endpointId/long-term-memory is accepted as a known tab because it is present in AgentMemoryWorkspaceTab, but the page only renders Overview and Configuration content and WORKSPACE_TABS contains only Overview. This leaves the workspace body blank instead of applying the documented unknown-tab redirect; restrict this check to implemented tabs until the long-term-memory view is rendered.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit c85cb45. Configure here.
| dispatch(addErrorNotification(error)) | ||
| onFail?.() | ||
| } | ||
| } |
There was a problem hiding this comment.
Stale connect overwrites active endpoint
High Severity
connectEndpointAction always writes success or failure into the shared connectedEndpoint and runs the callbacks, with no check that this request is still the in-flight one. A slower earlier connect can replace a later endpoint, run the wrong bootstrap, or send onFail and navigate back to the home list after a newer connection already succeeded.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit c85cb45. Configure here.
| if (isStale()) return | ||
| dispatch(getWorkingMemoryFailure(getApiErrorMessage(_err as AxiosError))) | ||
| } | ||
| } |
There was a problem hiding this comment.
Working memory loading stays stuck
Medium Severity
fetchWorkingMemoryAction sets workingMemory.loading to true, then returns without clearing it when the session is cleared or the in-flight result is treated as stale. The Overview session picker can select (none) while a fetch is running, so the pane spinner can remain on and per-pane auto-refresh stays blocked because it waits for loading to be false.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit c85cb45. Configure here.


Add the feature-flagged Agent Memory workspace and its Overview screen for inspecting a Redis Agent Memory store.
Endpoint home:
Workspace shell:
Overview screen:
Note
Medium Risk
New flows collect and persist API keys and proxy requests to external agent-memory services; mistakes in connection or scope handling could expose wrong session data, though the feature is gated and largely UI-side in this diff.
Overview
Introduces Agent Memory behind a new
agentMemoryfeature flag (config version 12, home tab, and routes at/agent-memory).Users can register Redis Cloud agent memory endpoints (name, URL, store ID, API key), list/edit/delete them, and connect into a workspace. The workspace Overview splits into resizable panes: working memory (session messages, running summary, add event, clear session, per-pane auto-refresh) and a compact long-term memory feed for the current owner/session scope. Configuration shows read-only store settings from the backend. Owner/session filter pills drive scope; Redux thunks call the new
agent-memory/*API paths with stale-response guards when switching endpoints.Also adds shared
VisuallyHiddenstyling (reused from vector search), optionalariaLabelonPopoverDelete, and success toasts/i18n for new endpoints.Reviewed by Cursor Bugbot for commit c85cb45. Bugbot is set up for automated code reviews on this repo. Configure here.