Conversation
`jupyter labextension list` on JupyterLab 4.6 marks the extension incompatible because @jupyterlab/launcher is declared as ~4.2.0, which does not overlap the host's ~4.6.x pin. The extension still loads, but the listing reports it as broken. Widen the declared range. Keep the lockfile on 4.2.7 by re-keying its existing entry rather than re-resolving: 1269f67 pinned ~4.2.0 because launcher 4.5.x mixed @lumino/coreutils versions and broke the Token<ILauncher> type, and `jlpm install` against the wider range pulls launcher 4.6.x and its dependencies back in. No test added: the type check, an immutable install, and the compatibility listing cover it.
^4.2.0 still overlaps nothing on JupyterLab 4.0 and 4.1, which the README and CI support. NBI only uses the ILauncher token and launcher.add() with command, category, and rank, all present in 4.0, so match the other @jupyterlab dependencies. The lockfile entry keeps resolving to 4.2.7.
|
A nudge on this one, with a measurement that I think strengthens the case. On JupyterLab 4.6, I checked what that warning actually costs, because a compatibility warning is not the same as a broken extension. The extension does load and work on 4.6: the Coding Agent launcher tiles render, which means the The reason this change looks safe is in the lockfile half of the diff. All four checks are green here. Happy to rebase if that is useful. |
Summary
jupyter labextension liston JupyterLab 4.6 marks@plmbr/notebook-intelligenceas incompatible:The extension still loads and the launcher tiles work, because a prebuilt extension's compatibility flag only affects what the listing prints. The
Xstill suggests a broken install to anyone who runs the command. The cause is the~4.2.0range on@jupyterlab/launcher, which JupyterLab compares against its own~4.6.xpin.Solution
@jupyterlab/launchergoes from~4.2.0to^4.0.0, matching the other@jupyterlab/*dependencies, the README's "JupyterLab 4.x", and CI'sjupyterlab>=4.0.0,<5. NBI only uses theILaunchertoken andlauncher.add()withcommand,category, andrank, all of which exist in 4.0.~4.2.0because resolving launcher to 4.5.x mixed@lumino/coreutilsversions and broke theToken<ILauncher>type in the build. Runningjlpm installagainst the wider range re-resolves launcher to 4.6.x and pulls about 290 lines of 4.6-era packages into the lockfile. Instead,yarn.lockkeeps the existing 4.2.7 entry (same resolution and checksum) under the^4.0.0descriptor, and the workspace entry matchespackage.json. The TypeScript build therefore sees exactly the types it saw before.JupyterLab's own overlap check (
jupyterlab.commands._test_overlap) against host launcher pins:~4.2.0(before)^4.0.0(this PR)~4.0.x,~4.1.x~4.2.x~4.5.x,~4.6.x,~4.7.0-alpha~5.0.xTesting
jlpm install --immutable --mode=skip-buildaccepts it with no further changes, andnode_modules/@jupyterlab/launcheris still 4.2.7.jlpm buildwrites^4.0.0intonotebook_intelligence/labextension/package.json.jupyter labextension listin a JupyterLab 4.6.0 environment now reportsenabled OK; the same environment reportedenabled Xbefore the change.PATH. The NBI plugin activates, and the launcher's Coding Agent section shows the Claude Code and Codex tiles, with no console errors.jlpm tsc --noEmit, stylelint, eslint, prettier,jlpm jest(423 passed), andpytest tests/ --ignore=tests/test_claude_client.py(1753 passed).Risks / follow-ups
yarn.lock. A plain, immutable, or dedupe install keeps it. Regenerating the lockfile or runningjlpm up @jupyterlab/launcherresolves the newest 4.x instead and brings back the type error from 1269f67. That failure is loud, sincetscfails in CI. If you would rather make the hold explicit, a bare"@jupyterlab/launcher": "~4.2.0"entry inresolutionssurvives regeneration. It would be the only resolution that holds a version back rather than setting a security floor, so I kept the smaller change. Happy to switch.requiredVersionfor shared core packages comes from the core metadatajupyter_builderresolves at build time (a cached copy of JupyterLab'smainwhen@jupyterlab/core-metais absent). Pinning that source would make release builds reproducible. This PR does not change it.>=4.0.0in CI may overstate support. This PR does not change it.No issue was filed for this. It came up while checking the 5.4 release against JupyterLab 4.6, and the details are above.