Skip to content

feat(agent-memory): Memory details pane with inline edit - #6445

Open
booleanhunter wants to merge 2 commits into
feature/agent-memory-inspector-ltmfrom
feature/agent-memory-inspector-record-detail
Open

feat(agent-memory): Memory details pane with inline edit#6445
booleanhunter wants to merge 2 commits into
feature/agent-memory-inspector-ltmfrom
feature/agent-memory-inspector-record-detail

Conversation

@booleanhunter

@booleanhunter booleanhunter commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator
  • add long-term memory record update endpoint
  • Clicking a long-term memory record opens a detail pane on the right - a records | details resizable split, with selected record being highlighted.
  • The pane shows every field and enables editing the fields supported by Redis Agent Memory update API
Redis Agent Memory - view / update a record

Note

Medium Risk
Adds a write path that mutates long-term memory records (text, owner, session, topics) via a new PATCH API. Scope is limited to the agent-memory inspector and existing session-bound clients.

Overview
Lets users inspect and edit a long-term memory record from the explorer. Clicking a record opens a resizable details pane (list | details) with the selected card highlighted.

Adds PATCH /agent-memory/:id/long-term-memory/:memoryId with a validated partial DTO (text, type, topics, namespace, owner, session). The cloud client maps userId to SDK ownerId and returns the updated record, which replaces the list item in place.

The details pane supports inline edits (textarea for text, EditableInput for the rest), copy id, and delete. Selection is cleared when the record is filtered out or deleted.

Reviewed by Cursor Bugbot for commit c43eeee. Bugbot is set up for automated code reviews on this repo. Configure here.

PATCH /agent-memory/:id/long-term-memory/:memoryId applies a partial
update (text, memory type, topics, namespace, owner, session) through
the Iris SDK's updateLongTermMemory and returns the updated record.
- Clicking a long-term memory record opens a detail pane on the right - a
records | details resizable split, with selected record being highlighted.
- The pane shows every field and enables editing the fields supported by Redis
Agent Memory update API
@booleanhunter booleanhunter self-assigned this Aug 24, 2026
@booleanhunter booleanhunter linked an issue Aug 24, 2026 that may be closed by this pull request
@booleanhunter
booleanhunter marked this pull request as ready for review August 24, 2026 11:37
@booleanhunter
booleanhunter requested a review from a team as a code owner August 24, 2026 11:37
@github-actions

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 c43eeee

@github-actions

Copy link
Copy Markdown
Contributor

Code Coverage - Integration Tests

Status Category Percentage Covered / Total
🟡 Statements 79.08% 18716/23666
🟡 Branches 60.22% 8755/14536
🟡 Functions 66.1% 2520/3812
🟡 Lines 78.74% 17621/22376

@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: c43eeee9cd

ℹ️ 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 +43 to +44
const [editingField, setEditingField] = useState<string | null>(null)
const [textDraft, setTextDraft] = useState('')

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 Reset edit drafts when the selected record changes

If a user starts editing record A's text and then selects record B without saving, this component remains mounted with editingField === 'text' and A's textDraft; pressing Save then calls applyUpdate with B's current record.id, overwriting B with A's draft. Reset the editing state whenever record.id changes, or key/remount the details component by the selected ID.

Useful? React with 👍 / 👎.

Comment on lines +79 to +84
<S.RecordCard
data-testid="long-term-memory-card"
data-selected={selected}
$selected={selected}
onClick={() => onSelect(memory.id)}
>

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 Make record selection keyboard-accessible

The card is now the only control that opens the details pane, but it remains a non-focusable card with only an onClick handler. Keyboard-only users therefore cannot select any memory record or access the new details and editing functionality; render this affordance as a button/link or add appropriate focus, role, and Enter/Space handling.

Useful? React with 👍 / 👎.

Comment on lines +12 to +13
&:hover {
border-color: var(--euiColorPrimary);

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 Use a semantic theme color for the card accent

In Redis UI themes that do not provide the deprecated EUI variable, var(--euiColorPrimary) is invalid, so the hover border and selected-record accent silently disappear. Use the corresponding semantic color from the styled-components theme for both states, as required by the repository's frontend rules.

AGENTS.md reference: AGENTS.md:L153-L154

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 3 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 c43eeee. Configure here.

record.userId ?? '',
(next) => ({ userId: next.trim() }),
'No owner',
)}

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 clear rejected by API

Medium Severity

The owner field is edited like namespace and sessionId, including a No owner empty state, and clearing it sends userId: ''. The update DTO only allows userId with length 1–64, while those other fields explicitly allow empty strings to clear. Clearing owner therefore fails validation and surfaces an error instead of updating.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c43eeee. Configure here.

aria-label="Save text"
data-testid="ltm-text-apply"
onClick={() => applyUpdate({ text: textDraft })}
/>

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 text update fails validation

Medium Severity

The text apply control always sends { text: textDraft } with no empty check, while the update DTO requires text length 1–50000. Saving a blank draft is rejected by the API. The UI also shows a No text placeholder, which suggests empty text is a valid state.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c43eeee. Configure here.

testid="ltm-details-delete"
handleDeleteItem={() =>
dispatch(deleteLongTermMemoryAction(endpointId, record.id))
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Delete leaves selection open

Medium Severity

Deleting from the details pane only dispatches deleteLongTermMemoryAction without clearing selectedRecordId or the delete popover. The pane stays open on the deleted record until a refetch succeeds and prunes selection. If the delete succeeds but the follow-up fetch fails, the removed record can remain visible and editable.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c43eeee. Configure here.

@github-actions

Copy link
Copy Markdown
Contributor

Code Coverage - Frontend unit tests

St.
Category Percentage Covered / Total
🟢 Statements 82.88% 29373/35440
🟡 Branches 69.16% 12461/18017
🟡 Functions 77.99% 7847/10061
🟢 Lines 83.37% 28551/34248

Test suite run success

8161 tests passing in 889 suites.

Report generated by 🧪jest coverage report action from c43eeee

@booleanhunter booleanhunter changed the title feat(agent-memory): Memory details pane with inline feat(agent-memory): Memory details pane with inline edit Aug 24, 2026
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