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

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
Screenshot of Agent Memory Overview screen

Note

Medium Risk
Large new UI that stores API keys and talks to remote Agent Memory endpoints (connect, mutate working memory, search LTM). Gated by a feature flag and built on existing API modules.

Overview
Adds a feature-flagged Agent Memory home and workspace so users can connect to Redis Agent Memory stores and inspect working and long-term memory.

The home tab lists saved endpoints (add/edit/delete, API key on create) and connects into a workspace. Overview shows a resizable split: session working memory (messages, running summary, add event, clear) and latest long-term records, scoped by owner and session, with per-pane auto-refresh and a read-only configuration view.

Wires agentMemory through feature config, routes, and Redux (endpoints + workspace thunks that drop stale responses). Also extracts shared visuallyHiddenCss and an optional ariaLabel on PopoverDelete.

Reviewed by Cursor Bugbot for commit 4753321. 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% 5534/7379
🟢 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 4753321

@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% 18704/23635
🟡 Branches 60.26% 8746/14512
🟡 Functions 66.17% 2520/3808
🟡 Lines 78.78% 17609/22351

@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.87% 29232/35274
🟡 Branches 69.15% 12404/17938
🟡 Functions 77.86% 7766/9974
🟢 Lines 83.35% 28414/34089

Test suite run success

8130 tests passing in 885 suites.

Report generated by 🧪jest coverage report action from 4753321

@booleanhunter
booleanhunter force-pushed the feature/agent-memory-inspector-overview branch from 46c7695 to e9b527f Compare August 19, 2026 14:46
@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 👍 / 👎.

Comment thread redisinsight/ui/src/slices/agentMemory/endpoints.ts
Comment thread redisinsight/ui/src/slices/agentMemory/thunks/working-memory.ts
@booleanhunter

Copy link
Copy Markdown
Collaborator Author

For feature request #6226

@booleanhunter
booleanhunter force-pushed the feature/agent-memory-inspector-overview branch from c85cb45 to 17570f9 Compare August 23, 2026 11:43

@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: 17570f98cc

ℹ️ 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 +66 to +69
} catch (_err) {
// Keep the current session list on transient failures - replacing it
// with [] would also wipe the explorer's session filters.
}

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 Clear stale sessions when an owner lookup fails

When the /sessions request fails after an owner selection, this catch preserves the previous owner's session list and selected session, then changeScopeAction continues by refetching both panes with that stale session. In particular, CloudAgentMemoryClient.getWorkingMemory ignores the owner filter, so the workspace can indefinitely display the previous owner's working memory under the newly selected owner; clear the current session before the lookup or propagate failure so the pane refetches do not run.

Useful? React with 👍 / 👎.

Comment on lines +55 to +58
if (isStale()) return

if (isStatusSuccessful(status)) {
dispatch(getWorkingMemorySuccess(data))

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 Discard superseded working-memory responses

When a working-memory refresh is already in flight and an add or clear operation triggers a newer fetch for the same session, both responses pass this session-only stale check. If the older response arrives last, it overwrites the newer state, potentially resurrecting cleared messages or hiding a newly appended event until another refresh; use a request sequence guard like the long-term-memory thunk.

Useful? React with 👍 / 👎.

const bootstrap = async () => {
await dispatch(discoverFiltersAction(endpointId))
refreshAll()
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Failed discovery still loads LTM

Medium Severity

bootstrap always calls refreshAll after discoverFiltersAction, even when discovery fails and owner/session stay null. Overview LTM then runs an unscoped match-all search instead of staying empty.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 17570f9. Configure here.


dispatch(fetchWorkingMemoryAction(endpointId))
dispatch(fetchOverviewLongTermMemoryAction(endpointId))
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Owner change keeps stale session

Medium Severity

changeScopeAction updates userId but leaves the previous sessionId until sessions are re-listed. During that await, refreshes can run against the new owner paired with the old session.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 17570f9. Configure here.

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 17570f9 to 4753321 Compare August 24, 2026 01:56

@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: 47533211b3

ℹ️ 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 +211 to +214
if (isStatusSuccessful(status)) {
dispatch(endpointChangingSuccess())
dispatch(fetchEndpointsAction())
onSuccess?.(data)

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 Invalidate the cached endpoint after edits

When a previously connected endpoint is edited after returning to the home page, this success path leaves connectedEndpoint unchanged. Opening that endpoint again passes the workspace's ID-only isConnected check, so it skips reconnection and continues showing the old name and URL in the header; update the cached endpoint from data or reset it after a successful edit.

Useful? React with 👍 / 👎.

Comment on lines +88 to +91
setSessionId: (state, { payload }: PayloadAction<Nullable<string>>) => {
state.filters.sessionId = payload
state.workingMemory.data = 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.

P2 Badge Reset working-memory status when clearing the session

When the user selects (none) or an owner lookup yields no sessions after a working-memory failure, this reducer clears only the data, so the previous session's error remains rendered beneath the no-session state. If the previous request is still pending, its stale-response guard also exits without clearing loading; reset the working-memory loading and error fields when the selected session changes.

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 1 potential issue.

There are 3 total unresolved issues (including 2 from previous reviews).

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 4753321. Configure here.

: 'Pick a session to inspect its working memory.'}
</S.EmptyListText>
</li>
)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Empty state shown with summary

Medium Severity

The empty-list message is gated only on messages.length, so a session with a running summary and no remaining messages still shows “No messages in working memory yet.” under the summary card. That makes a valid summarized session look empty.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 4753321. Configure here.

@booleanhunter booleanhunter linked an issue Aug 24, 2026 that may be closed by this pull request
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.

[Feature Request]: Agent Memory Explorer

1 participant