diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogDetailsPanel.vue b/packages/frontend/editor-ui/src/features/logs/components/LogDetailsPanel.vue
index 672254043a..e6e16e95c4 100644
--- a/packages/frontend/editor-ui/src/features/logs/components/LogDetailsPanel.vue
+++ b/packages/frontend/editor-ui/src/features/logs/components/LogDetailsPanel.vue
@@ -78,8 +78,7 @@ function handleResizeEnd() {
diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.test.ts b/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.test.ts
index e6b0a5111b..3a03550dbf 100644
--- a/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.test.ts
+++ b/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.test.ts
@@ -433,6 +433,34 @@ describe('LogsPanel', () => {
expect(rendered.queryByTestId('log-details-output')).not.toBeInTheDocument();
});
+ it('should show new name when a node is renamed', async () => {
+ const canvasOperations = useCanvasOperations();
+
+ logsStore.toggleOpen(true);
+
+ // Create deep copy so that renaming doesn't affect other test cases
+ workflowsStore.setWorkflow(deepCopy(aiChatWorkflow));
+ workflowsStore.setWorkflowExecutionData(deepCopy(aiChatExecutionResponse));
+
+ const rendered = render();
+
+ await nextTick();
+
+ expect(
+ within(rendered.getByTestId('log-details-header')).getByText('AI Model'),
+ ).toBeInTheDocument();
+ expect(within(rendered.getByRole('tree')).getByText('AI Model')).toBeInTheDocument();
+
+ await canvasOperations.renameNode('AI Model', 'Renamed!!');
+
+ await waitFor(() => {
+ expect(
+ within(rendered.getByTestId('log-details-header')).getByText('Renamed!!'),
+ ).toBeInTheDocument();
+ expect(within(rendered.getByRole('tree')).getByText('Renamed!!')).toBeInTheDocument();
+ });
+ });
+
describe('selection', () => {
beforeEach(() => {
logsStore.toggleOpen(true);
@@ -487,6 +515,25 @@ describe('LogsPanel', () => {
await rerender({});
expect(await findByRole('treeitem', { selected: true })).toHaveTextContent(/AI Model/);
});
+
+ it("should automatically select a log for the selected node on canvas even after it's renamed", async () => {
+ const canvasOperations = useCanvasOperations();
+
+ workflowsStore.setWorkflow(deepCopy(aiChatWorkflow));
+ workflowsStore.setWorkflowExecutionData(deepCopy(aiChatExecutionResponse));
+
+ logsStore.toggleLogSelectionSync(true);
+
+ const { rerender, findByRole } = render();
+
+ expect(await findByRole('treeitem', { selected: true })).toHaveTextContent(/AI Model/);
+
+ await canvasOperations.renameNode('AI Agent', 'Renamed Agent');
+ uiStore.lastSelectedNode = 'Renamed Agent';
+
+ await rerender({});
+ expect(await findByRole('treeitem', { selected: true })).toHaveTextContent(/Renamed Agent/);
+ });
});
describe('chat', () => {
diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.vue b/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.vue
index 441feaa21b..33a3c31aea 100644
--- a/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.vue
+++ b/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.vue
@@ -200,7 +200,7 @@ function handleOpenNdv(treeNode: LogEntry) {
:is-open="isOpen"
:log-entry="selected"
:window="pipWindow"
- :latest-info="latestNodeNameById[selected.id]"
+ :latest-info="latestNodeNameById[selected.node.id]"
:panels="logsStore.detailsState"
@click-header="onToggleOpen(true)"
@toggle-input-open="logsStore.toggleInputOpen"
diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogsViewNodeName.vue b/packages/frontend/editor-ui/src/features/logs/components/LogsViewNodeName.vue
index 9a8b7b5bd1..f3e25dc673 100644
--- a/packages/frontend/editor-ui/src/features/logs/components/LogsViewNodeName.vue
+++ b/packages/frontend/editor-ui/src/features/logs/components/LogsViewNodeName.vue
@@ -1,9 +1,8 @@