Skip to content

feat(agent-memory): add Agent Memory workspace Overview UI - #6426

Open
booleanhunter wants to merge 1 commit into
feature/agent-memory-inspector-apifrom
feature/agent-memory-inspector-overview
Open

feat(agent-memory): add Agent Memory workspace Overview UI#6426
booleanhunter wants to merge 1 commit into
feature/agent-memory-inspector-apifrom
feature/agent-memory-inspector-overview

Conversation

@booleanhunter

@booleanhunter booleanhunter commented Aug 19, 2026

Copy link
Copy Markdown
Collaborator

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

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 agentMemory feature 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 VisuallyHidden styling (reused from vector search), optional ariaLabel on PopoverDelete, 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.

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Code Coverage - Backend unit tests

St.
Category Percentage Covered / Total
🟢 Statements 93.13% 16685/17915
🟡 Branches 75.06% 5533/7371
🟢 Functions 87.55% 2560/2924
🟢 Lines 93% 15952/17153

Test suite run success

3795 tests passing in 327 suites.

Report generated by 🧪jest coverage report action from c85cb45

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Code Coverage - Integration Tests

Status Category Percentage Covered / Total
🟡 Statements 79.13% 18705/23636
🟡 Branches 60.3% 8746/14504
🟡 Functions 66.17% 2520/3808
🟡 Lines 78.78% 17610/22352

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Code Coverage - Frontend unit tests

St.
Category Percentage Covered / Total
🟢 Statements 82.85% 29249/35302
🟡 Branches 69.13% 12399/17937
🟡 Functions 77.75% 7770/9993
🟢 Lines 83.34% 28436/34122

Test suite run success

8130 tests passing in 885 suites.

Report generated by 🧪jest coverage report action from c85cb45

@booleanhunter
booleanhunter force-pushed the feature/agent-memory-inspector-overview branch from 46c7695 to e9b527f Compare August 19, 2026 14:46
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
@booleanhunter
booleanhunter force-pushed the feature/agent-memory-inspector-overview branch from e9b527f to c85cb45 Compare August 19, 2026 16:05
@booleanhunter
booleanhunter marked this pull request as ready for review August 19, 2026 16:29
@booleanhunter
booleanhunter requested a review from a team as a code owner August 19, 2026 16:29

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +58 to +63
if (isStaleResponse(stateInit(), endpointId)) return

if (isStatusSuccessful(status)) {
dispatch(loadSessionsSuccess(data))
if (autoPick) {
dispatch(setSessionId(data[0] ?? null))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +26 to +28
const staticAccents = {
accent: '#dcff1c',
dark: '#2d4754',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +273 to +274
dispatch(setConnectedEndpointSuccess({ endpoint }))
onSuccess?.()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +80 to +82
const isKnownTab = (
Object.values(AgentMemoryWorkspaceTab) as string[]
).includes(tab ?? '')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ 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?.()
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c85cb45. Configure here.

if (isStale()) return
dispatch(getWorkingMemoryFailure(getApiErrorMessage(_err as AxiosError)))
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c85cb45. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant