Skip to content

Conversation

seeM
Copy link
Contributor

@seeM seeM commented Oct 10, 2025

Add the Restart Kernel button to Positron notebooks, addresses #9789.

Screen.Recording.2025-10-10.at.19.02.37.mov

Release Notes

New Features

  • N/A

Bug Fixes

  • N/A

QA Notes

@:notebooks

Copy link

github-actions bot commented Oct 10, 2025

E2E Tests 🚀
This PR will run tests tagged with: @:critical @:notebooks

readme  valid tags

@rodrigosf672
Copy link
Member

@seeM Based on your changes, what do you expect to happen in the scenarios 2-4?

Cases

  1. User attempts to restart the kernel of a saved notebook while nothing is running (most trivial).
  2. User attempts to restart the kernel of an unsaved notebook while nothing is running (trivial);
  3. User attempts to restart the kernel of a saved notebook while something is running (complex);
  4. User attempts to restart the kernel of an unsaved notebook while something is running (most complex).

Outcomes

  1. Kernel restarts with no additional prompts/dialogs.
  2. ?
  3. ?
  4. ?

@cindyytong
Copy link

@seeM Awesome!

This is looking good however I am concerned that we are running out of space in the nav bar and not grouping related actions in the same area. I put 2 mockups for exploration here to determine next steps: https://www.figma.com/design/z9EOP4qLLzR08PNxe4M0Ei/Positron-Notebooks---Design-Audit?node-id=305-2&t=8CHFBPPjEQfYYkiB-1

nstrayer
nstrayer previously approved these changes Oct 14, 2025
Copy link
Contributor

@nstrayer nstrayer left a comment

Choose a reason for hiding this comment

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

Code itself looks great. I'll leave the design part to further discussions.

@seeM seeM force-pushed the fix/positron-nb-restart-kernel branch from ca6b680 to 8b66d2d Compare October 16, 2025 14:29
@seeM
Copy link
Contributor Author

seeM commented Oct 16, 2025

Thanks for the reviews! I've updated the UI based on your feedback:
image

  1. Run All and Clear Outputs no longer show titles – they have tooltips to clarify any confusion
  2. "+ Code" and "+ Markdown" moved to the left
  3. Restart Kernel moved to the right and no title (to be moved into a submenu in Positron Notebooks: Enhanced kernel info in the notebook toolbar #9722)
  4. Show Console moved to the More Actions submenu

@cindyytong
Copy link

cindyytong commented Oct 16, 2025

@seeM looking great! Based on the design we made the other day with a new dropdown for the kernel, are you suggesting that whole dropdown gets handled in #9722

Where restart kernel and show console would be a submenu item in this dropdown?
Screenshot 2025-10-16 at 11 12 58 AM

My understanding was that 9722 would just capture putting the kernel info in the new dropdown

midleman
midleman previously approved these changes Oct 16, 2025
Copy link
Contributor

@midleman midleman left a comment

Choose a reason for hiding this comment

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

I don't see any particular e2e tests that exercise the notebook kernel restart. I can def add a test for that. However, I was curious if there are any particular checks I should assert? Is there any kind of persistence that is expected or is everything wiped?

@seeM
Copy link
Contributor Author

seeM commented Oct 17, 2025

@midleman in terms of state, it should behave exactly as restarting a console session. Some ideas:

  • The button is disabled while the session is starting, and while shutting down after clicking
  • Can execute a cell afterwards, execution order is reset and all state was wiped

@seeM
Copy link
Contributor Author

seeM commented Oct 17, 2025

@rodrigosf672 IIUC whether the notebook is saved or not shouldn't affect restart behavior.

Perhaps restarting while something is running should display a warning, and perhaps a warning should also be displayed based if data will be lost. Will start a discussion in Slack.

@midleman
Copy link
Contributor

FYI, added a ticket to create an e2e test for this feature: #10033

@seeM seeM force-pushed the fix/positron-nb-restart-kernel branch from 8b66d2d to 202ebc4 Compare October 20, 2025 18:49
@seeM seeM force-pushed the fix/positron-nb-restart-kernel branch from 202ebc4 to fbd23f2 Compare October 20, 2025 18:50
@nstrayer nstrayer self-requested a review October 20, 2025 20:14
Copy link
Contributor

@nstrayer nstrayer left a comment

Choose a reason for hiding this comment

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

Re-reviewed and all looks good to me! I like the new design!

color: grey;
}
/* Use this property to take padding into account when sizing (prevents overflow) */
box-sizing: border-box;
Copy link
Contributor

Choose a reason for hiding this comment

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

Crazy this isn't in a base css file reset.

Copy link
Contributor

@dhruvisompura dhruvisompura left a comment

Choose a reason for hiding this comment

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

Thanks for all this work!

I marked as Request changes because of the runtime status icon bug which does effect the console session list too. The fix is a small one line change which I dropped as a code suggestion. Mostly looking great. Had a couple comments/questions but nothing majorly blocking once that status icon color bug is fixed!

const statusToIconColor: Record<RuntimeStatus, ColorIdentifier> = {
[RuntimeStatus.Active]: POSITRON_CONSOLE_STATE_ICON_ACTIVE,
[RuntimeStatus.Disconnected]: POSITRON_CONSOLE_STATE_ICON_DISCONNECTED,
[RuntimeStatus.Idle]: POSITRON_CONSOLE_STATE_ICON_DISCONNECTED,
Copy link
Contributor

Choose a reason for hiding this comment

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

Looks like a small copy/paste error that is causing the icon to always be red for the notebook kernel status AND in the console tab list. Changing this to use the right css variable should fix that issue :)

Suggested change
[RuntimeStatus.Idle]: POSITRON_CONSOLE_STATE_ICON_DISCONNECTED,
[RuntimeStatus.Idle]: POSITRON_CONSOLE_STATE_ICON_IDLE,

className={`codicon ${icon}`}
style={{ color }}
/>
<RuntimeStatusIcon status={runtimeStatus} />
Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks for doing the work to make the runtime and runtime status icons into reusable components. This is so much nicer!

export const RuntimeStatusIcon = ({ status }: RuntimeStatusIconProps) => {
const iconClass = statusToIconClass[status];
const iconColor = statusToIconColor[status];
const iconColorCss = asCssVariable(iconColor);
Copy link
Contributor

Choose a reason for hiding this comment

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

I didn't know about these handy helpers! This makes it so much easier to keep the css maintainable and find all the different uses of a theme color!

Comment on lines +75 to +76
{/* TODO: Runtime name or session name? */}
<p className='session-name'>{runtimeName}</p>
Copy link
Contributor

Choose a reason for hiding this comment

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

If the todo is in regards to what to display here (and not about renaming the css class), then I think runtime name makes a lot of sense!

The runtimeName field should really be used to reflect the runtime and the sessionName is used for arbitrary labels (and can change). For this use case, I think the user cares about the specific runtime. Another thing to note, but it looks like the session name for notebooks defaults to the name of the file which isn't really useful in the kernel status badge anyways.

We may want to rethink this if we decide to enable console.showNotebookConsoles and fully flesh it out as a feature. In the console, we show the session name and not the runtime name (which makes sense there). We would probably want to think about how we can communicate that this kernel status badge is reflecting the same/similar information as the console pane.

Comment on lines +19 to +20
/* TODO: Use margin? */
gap: 4px;
Copy link
Contributor

Choose a reason for hiding this comment

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

Using gap here makes sense over margin if the intention is to add equal spacing to the children elements of positron-notebook-kernel-status-badge which I think is what you are trying to do.

If you were to replace this with margin, you'd need to add that CSS to the RuntimeStatusIcon CSS file but I wouldn't recommend that because then we'd need to override the margin if used in other places that needs different gutter spacing.

I would probably change this to use column-gap here as well to be extra specific about the spacing you are targeting:

Suggested change
/* TODO: Use margin? */
gap: 4px;
column-gap: 4px;

order: 30,
title: { value: localize('showConsole', 'Show Console'), original: 'Show Console' },
id: MenuId.PositronNotebookKernelSubmenu,
// group: 'kernel',
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we just remove this line instead of commenting it out, or do we need it for some future work?

category: NOTEBOOK_ACTIONS_CATEGORY_POSITRON,
title: localize2('positronNotebookActions.selectKernel', 'Select Positron Notebook Kernel'),
icon: selectKernelIcon,
title: localize2('positronNotebookActions.selectKernel', 'Change Kernel...'),
Copy link
Contributor

Choose a reason for hiding this comment

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

Super minor nit, but I think renaming the localized string key here makes sense - not a blocker though!

Suggested change
title: localize2('positronNotebookActions.selectKernel', 'Change Kernel...'),
title: localize2('positronNotebookActions.changeKernel', 'Change Kernel...'),

localize('positron.notebook.workingDirectoryChanged.title', 'Update working directory?'),
localize(
'positron.notebook.workingDirectoryChanged',
// eslint-disable-next-line local/code-no-unexternalized-strings
Copy link
Contributor

@dhruvisompura dhruvisompura Oct 20, 2025

Choose a reason for hiding this comment

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

Thanks for adding that. I was wondering about this error and if it was something we could ignore or if we needed to change this string.

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.

6 participants