-
Notifications
You must be signed in to change notification settings - Fork 4
feat: Remove Jupyter bindings. #14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
📝 WalkthroughPre-merge checks (3 passed)✅ Passed checks (3 passed)
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (7)
package.json (7)
1868-2037: Language Model Tools still branded/typed for Jupyter.If Jupyter support is removed, rename displays/tags and/or disable tools that assert “jupyter environment,” or they will confuse users and AI tools.
2054-2098: Scripts still Jupyter-centric.CI/dev flows reference Jupyter pre-release flags and start/stop Jupyter server. Remove or guard to avoid accidental breakage.
- "build:prerelease": "cross-env IS_PRE_RELEASE_VERSION_OF_JUPYTER_EXTENSION=true npm run build", - "build:stable": "cross-env IS_PRE_RELEASE_VERSION_OF_JUPYTER_EXTENSION=false npm run build", + "build:stable": "npm run build", @@ - "startJupyterServer": "node build/preDebugWebTest.js", - "stopJupyterServer": "node build/postDebugWebTest.js", + // (remove if unused)
2294-2314: Overrides pin Jupyter transitive deps.These should disappear once Jupyter deps are removed; otherwise you’re carrying unneeded overrides.
68-74: Keybinding to interactive.input.clear — verify command availability.If Interactive window isn’t supported, this binding becomes noise. Keep only if the Interactive story remains.
32-42: Keyword ‘jupyter’ — keep for discoverability or drop for accuracy.Decide explicitly; either is fine, but be intentional.
43-49: Category “Extension Packs” likely inaccurate.This isn’t a pack; consider removing to match Marketplace categorization.
25-27: Engine + proposals sanity check.enabledApiProposals is large and Jupyter-heavy; prune to the ones you still use with ^1.103.0.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
package.json(2 hunks)
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-09-12T12:52:09.700Z
Learnt from: CR
PR: deepnote/vscode-deepnote#0
File: CLAUDE.md:0-0
Timestamp: 2025-09-12T12:52:09.700Z
Learning: Applies to src/notebooks/deepnote/deepnoteActivationService.ts : deepnoteActivationService.ts wires VSCode activation
Applied to files:
package.json
📚 Learning: 2025-09-03T12:55:29.175Z
Learnt from: CR
PR: deepnote/vscode-extension#0
File: .github/instructions/ipywidgets.instructions.md:0-0
Timestamp: 2025-09-03T12:55:29.175Z
Learning: Applies to src/webviews/webview-side/ipywidgets/kernel/manager.ts : Use a JupyterLab-compatible WidgetManager to manage widget models, synchronization, rendering, and disposal
Applied to files:
package.json
🔇 Additional comments (2)
package.json (2)
1796-1811: Ipywidgets preloads kept — confirm intent without Jupyter.These still load ipywidgetsKernel for deepnote/interactive. If Jupyter is out, validate these entrypoints and their deps remain valid and minimal.
2099-2290: Heavy Jupyter/ZeroMQ dependency graph remains — remove if unusedpackage.json contains: @jupyter-widgets/base, @jupyter-widgets/controls, @jupyter-widgets/schema, @jupyterlab/coreutils, @jupyterlab/nbformat, @jupyterlab/services, @lumino/widgets, @nteract/messaging, @types/vscode-notebook-renderer, @vscode/zeromq, zeromq, zeromqold.
Drop or move these to optional/peer deps or lazy-load them to materially reduce VSIX size and install time; if kept, document why and consider lighter alternatives.
| "activationEvents": [ | ||
| "onLanguage:jupyter", | ||
| "onLanguage:python", | ||
| "onLanguageModelTool:configure_notebook", | ||
| "onLanguageModelTool:notebook_install_packages", | ||
| "onLanguageModelTool:notebook_list_packages", | ||
| "onNotebook:deepnote", | ||
| "onNotebook:interactive", | ||
| "onNotebook:jupyter-notebook", | ||
| "onWebviewPanel:jupyter-variables", | ||
| "onWebviewPanel:jupyter" | ||
| "onNotebook:interactive" | ||
| ], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Activation events trimmed, but Jupyter surface still contributed.
You removed Jupyter activation triggers, yet the extension still contributes hundreds of Jupyter commands/menus/views. This leaves dead UI, unnecessary payload, and risk of unresolved contexts. Either drop these contributions or hard‑gate them behind a feature flag set to false.
Apply at least these removals as a start:
@@
"views": {
- "jupyter-variables": [
- {
- "type": "webview",
- "id": "jupyterViewVariables",
- "name": "Jupyter Variables",
- "when": "jupyter.hasNativeNotebookOrInteractiveWindowOpen"
- }
- ],
"deepnote": [@@
"debuggers": [
- {
- "type": "Python Kernel Debug Adapter",
- "label": "%jupyter.debuggers.kernel%"
- },
- {
- "type": "Python Interactive Window Debug Adapter",
- "label": "%jupyter.debuggers.interactive%"
- }
+ // (remove entire block if not supporting Jupyter debugging)
],🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "PWD: $(pwd)"
echo "Finding package.json files (excluding node_modules)..."
mapfile -t pkgs < <(find . -type f -name package.json -not -path "*/node_modules/*" -print)
if [ ${#pkgs[@]} -eq 0 ]; then
echo "No package.json found"
exit 0
fi
for f in "${pkgs[@]}"; do
echo
echo "=== $f ==="
echo "--- Raw file head (first 300 lines) ---"
sed -n '1,300p' "$f"
echo "--- Parsed fields ---"
python - <<'PY' "$f"
import sys, json, re
p=sys.argv[1]
with open(p) as fh:
d=json.load(fh)
def jprint(x):
import json
print(json.dumps(x, indent=2))
print("activationEvents:")
jprint(d.get("activationEvents"))
print("contributes keys:")
jprint(list(d.get("contributes",{}).keys()))
contrib=d.get("contributes",{})
print("views keys:")
jprint(list(contrib.get("views",{}).keys()))
if "jupyter-variables" in contrib.get("views",{}):
print("jupyter-variables entry:")
jprint(contrib["views"]["jupyter-variables"])
print("debuggers:")
jprint(contrib.get("debuggers"))
s=json.dumps(contrib)
matches = sorted(set(re.findall(r'jupyter[^\"]*', s, flags=re.IGNORECASE)))
if matches:
print("Found jupyter-related tokens in contributes:", matches)
else:
print("No jupyter-related tokens found in contributes.")
PY
done
echo
echo "Repo-wide ripgrep for 'jupyter' (context):"
rg -n --hidden -S -C2 "jupyter" || trueLength of output: 135
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "PWD: $(pwd)"
echo "Counting package.json files (excluding node_modules)..."
count=$(find . -type f -name package.json -not -path "*/node_modules/*" -print | wc -l)
if [ "$count" -eq 0 ]; then
echo "No package.json found"
exit 0
fi
echo "Found $count package.json(s)"
PYTHON=python3
if ! command -v "$PYTHON" >/dev/null 2>&1; then
PYTHON=python
fi
find . -type f -name package.json -not -path "*/node_modules/*" -print | while IFS= read -r f; do
echo
echo "=== $f ==="
echo "--- head (1-300) ---"
sed -n '1,300p' "$f" || true
echo "--- parsed fields ---"
"$PYTHON" - <<'PY' "$f"
import sys, json, re
p=sys.argv[1]
try:
with open(p) as fh:
d=json.load(fh)
except Exception as e:
print("JSON parse error:", e)
sys.exit(0)
def jprint(x):
import json
print(json.dumps(x, indent=2, ensure_ascii=False))
print("activationEvents:")
jprint(d.get("activationEvents"))
contrib=d.get("contributes",{})
print("contributes keys:")
jprint(list(contrib.keys()))
print("views keys:")
jprint(list(contrib.get("views",{}).keys()))
if "jupyter-variables" in contrib.get("views",{}):
print("jupyter-variables entry:")
jprint(contrib["views"]["jupyter-variables"])
print("debuggers:")
jprint(contrib.get("debuggers"))
s=json.dumps(contrib)
matches = sorted(set(re.findall(r'jupyter[^\"]*', s, flags=re.IGNORECASE)))
if matches:
print("Found jupyter-related tokens in contributes:", matches)
else:
print("No jupyter-related tokens found in contributes.")
PY
done
echo
echo "Repo-wide search for 'jupyter' (excluding node_modules and .git):"
if command -v rg >/dev/null 2>&1; then
rg -n --hidden -S -C2 "jupyter" --glob '!node_modules/**' --glob '!.git/**' || true
else
grep -RIn --exclude-dir=node_modules --exclude-dir=.git "jupyter" || true
fiLength of output: 35767
Remove or gate leftover Jupyter contributions in package.json
activationEvents no longer include Jupyter triggers, but package.json still contributes Jupyter commands, views and debug adapters — remove these contributions or hard‑gate them behind a disabled feature flag to avoid dead UI and unresolved enablement contexts.
File: package.json (root) — remove or gate at least the following entries:
@@
"views": {
- "jupyter-variables": [
- {
- "type": "webview",
- "id": "jupyterViewVariables",
- "name": "Jupyter Variables",
- "when": "jupyter.hasNativeNotebookOrInteractiveWindowOpen"
- }
- ],
"deepnote": [@@
"debuggers": [
- {
- "type": "Python Kernel Debug Adapter",
- "label": "%jupyter.debuggers.kernel%"
- },
- {
- "type": "Python Interactive Window Debug Adapter",
- "label": "%jupyter.debuggers.interactive%"
- }
+ // (remove entire block if not supporting Jupyter debugging)
],Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In package.json around lines 50 to 57, remove or gate leftover Jupyter-related
contributions that no longer have activationEvents (specifically any
contributes.commands, contributes.views, contributes.debuggers or similar
entries referencing Jupyter/Notebook/Deepnote) — either delete those entries or
wrap them behind a new disabled feature flag (e.g., "features.enableJupyter":
false) and conditionally include their contributions using that flag; also
ensure any enablementContexts referencing those commands are removed or updated
so no dead UI or unresolved contexts remain.
| "configuration": { | ||
| "type": "object", | ||
| "title": "Jupyter", | ||
| "title": "Deepnote", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Config title says “Deepnote” but all keys are jupyter. — confusing.*
Either revert the title or migrate/alias settings to deepnote.* (with code reading both). Rebrand without key migration misleads users and docs.
- "title": "Deepnote",
+ "title": "Jupyter",🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Locating package.json files (excluding node_modules)..."
mapfile -t files < <(find . -type f -name package.json -not -path "*/node_modules/*" 2>/dev/null || true)
if [ ${#files[@]} -eq 0 ]; then
echo "No package.json found."
exit 0
fi
for f in "${files[@]}"; do
echo
echo "==== $f ===="
echo "-- Lines around 1230-1245 (if file long enough) --"
sed -n '1225,1250p' "$f" || true
echo
echo "-- Any 'title' entries matching Deepnote or Jupyter --"
grep -nE '"title"[[:space:]]*:[[:space:]]*"(Deepnote|Jupyter)"' "$f" || echo "none"
echo
echo "-- Keys containing 'jupyter.' --"
grep -nE '"jupyter\.' "$f" || echo "none"
echo
echo "-- Keys containing 'deepnote.' --"
grep -nE '"deepnote\.' "$f" || echo "none"
doneLength of output: 112
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Locating package.json files (excluding node_modules)..."
files=$(find . -type f -name package.json -not -path "*/node_modules/*" 2>/dev/null || true)
if [ -z "$files" ]; then
echo "No package.json found."
exit 0
fi
for f in $files; do
echo
echo "==== $f ===="
echo "-- Lines 1225-1250 (or whole file if shorter) --"
total_lines=$(wc -l < "$f" || echo 0)
if [ "$total_lines" -ge 1250 ]; then
sed -n '1225,1250p' "$f" || true
else
sed -n '1,2000p' "$f" || true
fi
echo
echo "-- 'title' entries matching Deepnote or Jupyter --"
grep -nE '"title"[[:space:]]*:[[:space:]]*"(Deepnote|Jupyter)"' "$f" || echo "none"
echo
echo "-- Keys containing 'jupyter.' --"
grep -nE '"jupyter\.' "$f" || echo "none"
echo
echo "-- Keys containing 'deepnote.' --"
grep -nE '"deepnote\.' "$f" || echo "none"
doneLength of output: 23270
Config title is "Deepnote" but settings use jupyter. — revert title or migrate/alias keys.*
package.json (root) — "title": "Deepnote" at lines 1239 and 1816 while configuration keys are jupyter.; either change the title to "Jupyter" or add deepnote. aliases and a loader that reads both.
- "title": "Deepnote",
+ "title": "Jupyter",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "title": "Deepnote", | |
| "title": "Jupyter", |
🤖 Prompt for AI Agents
In package.json around line 1239 (and also line 1816), the config "title" is set
to "Deepnote" while the actual configuration keys use the jupyter.* namespace;
either change the title to "Jupyter" to match the keys, or add deepnote.*
aliases and a loader that resolves both namespaces. Fix option A: update the
title fields at the indicated lines to "Jupyter". Fix option B: add deepnote.*
entries mirroring the jupyter.* keys and modify the config loader to check
deepnote.* first then fall back to jupyter.* (or vice versa), ensuring both
namespaces are supported and covered by tests/validation.
Fixes #
Summary by CodeRabbit