Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ffe0958
chore(dep): Update deepnote database integrations package
tkislan Mar 9, 2026
3bb72eb
Reformat code
tkislan Mar 9, 2026
5148b03
Merge branch 'main' into tk/update-deepnote-database-integrations
tkislan Mar 9, 2026
d5f67f6
chore(runtime-core): Add deepnote runtime-core dependency, and use it…
tkislan Mar 10, 2026
ff6d44f
feat: Add Agent block visualization support
tkislan Mar 11, 2026
957fdcd
Add a dummy agent block execution handler
tkislan Mar 12, 2026
9fbe622
feat(agent-block): Integrate deepnote runtime-core to execute Agent b…
tkislan Mar 13, 2026
46f9a4c
feat(agent-cell): Enhance executeAgentCell with options for custom ex…
tkislan Mar 14, 2026
58e653d
feat(ephemeral-cells): Introduce isEphemeralCell utility and enhance …
tkislan Mar 16, 2026
401681c
Merge remote-tracking branch 'origin/main' into tk/deepnote-runtime-core
tkislan Mar 16, 2026
6f7b4aa
Refactor Deepnote server management to utilize a new mock child proce…
tkislan Mar 16, 2026
7d8ee86
Fix eslint error
tkislan Mar 16, 2026
9c4151a
Enhance Deepnote server stopping logic to handle missing project context
tkislan Mar 17, 2026
347a809
Refactor Deepnote server management to use fileKey instead of serverKey
tkislan Mar 17, 2026
5eb2c17
Refactor DeepnoteServerStarter to remove port allocation logic
tkislan Mar 17, 2026
3740df1
Enhance DeepnoteServerStarter with output tracking and error reportin…
tkislan Mar 17, 2026
06a0367
Update error handling in DeepnoteServerStarter to improve diagnostics
tkislan Mar 17, 2026
1e7cb07
Reformat code
tkislan Mar 17, 2026
4f0248d
Merge branch 'main' into tk/deepnote-runtime-core
tkislan Mar 18, 2026
9757a05
Merge remote-tracking branch 'origin/tk/deepnote-runtime-core' into t…
tkislan Mar 18, 2026
75d0220
Enhance agent cell execution handling and status bar provider
tkislan Mar 18, 2026
f7bec65
Add Agent OpenAI API key extension configuration
tkislan Mar 18, 2026
ea715e7
Implement OpenAI API key management in Deepnote
tkislan Mar 18, 2026
197dd44
Merge branch 'main' into tk/deepnote-agent-block
tkislan Jul 31, 2026
3b2b950
fix(agent-block): adapt agent cell execution to runtime-core 0.4.0 API
tkislan Jul 31, 2026
a010e07
fix(agent-block): reject boolean max-iteration metadata
tkislan Jul 31, 2026
cbbf91c
Add hubot to cspell config
tkislan Jul 31, 2026
cdc2a46
fix(agent-block): type the markdown-it renderer hook instead of using…
tkislan Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion build/esbuild/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ const commonExternals = [
const webExternals = [
...commonExternals,
'canvas', // Native module used by vega for server-side rendering, not needed in browser
'mathjax-electron' // Uses Node.js path module, MathJax rendering handled differently in browser
'mathjax-electron', // Uses Node.js path module, MathJax rendering handled differently in browser
'@deepnote/runtime-core' // Uses tcp-port-used → net, only needed in desktop for agent block execution
];
const desktopExternals = [...commonExternals, ...deskTopNodeModulesToExternalize];
const bundleConfig = getBundleConfiguration();
Expand Down
1 change: 1 addition & 0 deletions cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"evalue",
"findstr",
"getsitepackages",
"hubot",
"IMAGENAME",
"ipykernel",
"ipynb",
Expand Down
10 changes: 10 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,16 @@
"title": "%deepnote.command.manageAccessToKernels%",
"category": "Jupyter"
},
{
"command": "deepnote.setOpenAiApiKey",
"title": "%deepnote.command.setOpenAiApiKey%",
"category": "Deepnote"
},
{
"command": "deepnote.clearOpenAiApiKey",
"title": "%deepnote.command.clearOpenAiApiKey%",
"category": "Deepnote"
},
{
"command": "dataScience.ClearUserProviderJupyterServerCache",
"title": "%deepnote.command.dataScience.clearUserProviderJupyterServerCache.title%",
Expand Down
2 changes: 2 additions & 0 deletions package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@
"deepnote.command.deepnote.openOutlineView.title": "Show Table Of Contents (Outline View)",
"deepnote.command.deepnote.openOutlineView.shorttitle": "Outline",
"deepnote.command.manageAccessToKernels": "Manage Access To Jupyter Kernels",
"deepnote.command.setOpenAiApiKey": "Set OpenAI API Key",
"deepnote.command.clearOpenAiApiKey": "Clear OpenAI API Key",
"deepnote.commandPalette.deepnote.replayPylanceLog.title": "Replay Pylance Log",
"deepnote.notebookRenderer.IPyWidget.displayName": "Jupyter IPyWidget Renderer",
"deepnote.notebookRenderer.Error.displayName": "Jupyter Error Renderer",
Expand Down
26 changes: 20 additions & 6 deletions src/notebooks/controllers/vscodeNotebookController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ import { RemoteKernelReconnectBusyIndicator } from './remoteKernelReconnectBusyI
import { IConnectionDisplayData, IConnectionDisplayDataProvider, IVSCodeNotebookController } from './types';
import { notebookPathToDeepnoteProjectFilePath } from '../../platform/deepnote/deepnoteProjectUtils';
import { DEEPNOTE_NOTEBOOK_TYPE, IDeepnoteKernelAutoSelector } from '../../kernels/deepnote/types';
import { executeAgentCell, isAgentCell } from '../deepnote/agentCellExecutionHandler';

/**
* Our implementation of the VSCode Notebook Controller. Called by VS code to execute cells in a notebook. Also displayed
Expand Down Expand Up @@ -627,16 +628,29 @@ export class VSCodeNotebookController implements Disposable, IVSCodeNotebookCont
// Start execution now (from the user's point of view)
// Creating these execution objects marks the cell as queued for execution (vscode will update cell UI).
type CellExec = { cell: NotebookCell; exec: NotebookCellExecution };
const cellExecs: CellExec[] = (this.cellQueue.get(doc) || []).map((cell) => {
const exec = this.createCellExecutionIfNecessary(cell, new KernelController(this.controller));
return { cell, exec };
});
const allCells = this.cellQueue.get(doc) || [];
this.cellQueue.delete(doc);
const firstCell = cellExecs.length ? cellExecs[0].cell : undefined;
if (!firstCell) {

const agentCells = allCells.filter((cell) => isAgentCell(cell));
const kernelCells = allCells.filter((cell) => !isAgentCell(cell));

// Execute agent cells directly without kernel involvement
if (agentCells.length > 0) {
logger.trace(`Executing ${agentCells.length} agent cell(s) for ${getDisplayPath(doc.uri)} without kernel`);
await Promise.all(agentCells.map((cell) => executeAgentCell(cell, this.controller))).catch(noop);
}

if (kernelCells.length === 0) {
return;
}

const cellExecs: CellExec[] = kernelCells.map((cell) => {
const exec = this.createCellExecutionIfNecessary(cell, new KernelController(this.controller));
return { cell, exec };
});

const firstCell = cellExecs[0].cell;

logger.trace(`Execute Notebook ${getDisplayPath(doc.uri)}. Step 1`);

// Connect to a matching kernel if possible (but user may pick a different one)
Expand Down
Loading
Loading