kernel-checkpoint 0.1.8__tar.gz → 0.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/PKG-INFO +1 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/jupyter-notebook-image/Dockerfile +1 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/_version.py +1 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/labextension/build_log.json +1 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/labextension/package.json +2 -2
- kernel_checkpoint-0.1.8/kernel_checkpoint/labextension/static/lib_index_js.6dc5fa8b4a9bc62a809d.js → kernel_checkpoint-0.1.10/kernel_checkpoint/labextension/static/lib_index_js.efd15a23ba0b55378c6a.js +17 -9
- kernel_checkpoint-0.1.10/kernel_checkpoint/labextension/static/lib_index_js.efd15a23ba0b55378c6a.js.map +1 -0
- kernel_checkpoint-0.1.8/kernel_checkpoint/labextension/static/remoteEntry.5ffc549e28b042648bca.js → kernel_checkpoint-0.1.10/kernel_checkpoint/labextension/static/remoteEntry.6588a650b13da58d2e73.js +3 -3
- kernel_checkpoint-0.1.8/kernel_checkpoint/labextension/static/remoteEntry.5ffc549e28b042648bca.js.map → kernel_checkpoint-0.1.10/kernel_checkpoint/labextension/static/remoteEntry.6588a650b13da58d2e73.js.map +1 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/package.json +1 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/src/checkpoint-panel.tsx +7 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/src/index.ts +5 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/src/types.ts +3 -0
- kernel_checkpoint-0.1.8/4 +0 -97
- kernel_checkpoint-0.1.8/=4 +0 -97
- kernel_checkpoint-0.1.8/kernel_checkpoint/labextension/static/lib_index_js.6dc5fa8b4a9bc62a809d.js.map +0 -1
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/.copier-answers.yml +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/.gitignore +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/.prettierignore +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/.yarnrc.yml +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/CHANGELOG.md +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/LICENSE +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/README.md +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/RELEASE.md +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/babel.config.js +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/cursor_jupyterlab_extension_for_checkpo.md +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/install.json +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/jest.config.js +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/jupyter-config/jupyter_server_config.d/kernel_checkpoint.json +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/Untitled.ipynb +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/__init__.py +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/handlers.py +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/labextension/static/style.js +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/labextension/static/style_index_js.c3e72438ed03e9dee0fc.js +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/labextension/static/style_index_js.c3e72438ed03e9dee0fc.js.map +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/pyproject.toml +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/setup.py +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/src/__tests__/kernel_checkpoint.spec.ts +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/src/api.ts +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/src/restore-handler.ts +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/style/base.css +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/style/index.css +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/style/index.js +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/tsconfig.json +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/tsconfig.test.json +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/ui-tests/README.md +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/ui-tests/jupyter_server_test_config.py +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/ui-tests/package.json +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/ui-tests/playwright.config.js +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/ui-tests/tests/kernel_checkpoint.spec.ts +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/ui-tests/yarn.lock +0 -0
- {kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/yarn.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kernel_checkpoint
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10
|
|
4
4
|
Summary: An extension for saving and restoring kernel pod state with jupyter enterprise gateway
|
|
5
5
|
Project-URL: Homepage, https://github.com/lehuannhatrang/kernel-checkpoint-extension.git
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/lehuannhatrang/kernel-checkpoint-extension.git/issues
|
{kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/labextension/package.json
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kernel-checkpoint",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "An extension for saving and restoring kernel pod state with jupyter enterprise gateway",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyter",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
},
|
|
115
115
|
"outputDir": "kernel_checkpoint/labextension",
|
|
116
116
|
"_build": {
|
|
117
|
-
"load": "static/remoteEntry.
|
|
117
|
+
"load": "static/remoteEntry.6588a650b13da58d2e73.js",
|
|
118
118
|
"extension": "./extension",
|
|
119
119
|
"style": "./style"
|
|
120
120
|
}
|
|
@@ -119,7 +119,7 @@ function formatDate(iso) {
|
|
|
119
119
|
return new Date(iso).toLocaleString();
|
|
120
120
|
}
|
|
121
121
|
function CheckpointPanel(props) {
|
|
122
|
-
const { namespace, kernelId, kernelSpecName, notebookName, onRestore, onBeforeCreate } = props;
|
|
122
|
+
const { namespace, kernelId, kernelSpecName, notebookName, sessionId, onRestore, onBeforeCreate } = props;
|
|
123
123
|
const [checkpoints, setCheckpoints] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
|
|
124
124
|
const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
|
|
125
125
|
const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
|
|
@@ -180,6 +180,7 @@ function CheckpointPanel(props) {
|
|
|
180
180
|
kernelId,
|
|
181
181
|
kernelName: kernelSpecName,
|
|
182
182
|
notebookName,
|
|
183
|
+
sessionId,
|
|
183
184
|
busyCells
|
|
184
185
|
}
|
|
185
186
|
});
|
|
@@ -238,7 +239,7 @@ function CheckpointPanel(props) {
|
|
|
238
239
|
}
|
|
239
240
|
};
|
|
240
241
|
const handleRestore = async (checkpointName) => {
|
|
241
|
-
var _a, _b, _c, _d, _e, _f;
|
|
242
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
242
243
|
setConfirmRestore(null);
|
|
243
244
|
setRestoring(checkpointName);
|
|
244
245
|
setFlash(null);
|
|
@@ -252,8 +253,12 @@ function CheckpointPanel(props) {
|
|
|
252
253
|
if (!cpKernelId) {
|
|
253
254
|
throw new Error('No kernel ID found in checkpoint metadata');
|
|
254
255
|
}
|
|
255
|
-
const
|
|
256
|
-
|
|
256
|
+
const cpSessionId = (_e = (_d = detail.metadata) === null || _d === void 0 ? void 0 : _d.sessionId) !== null && _e !== void 0 ? _e : '';
|
|
257
|
+
if (!cpSessionId) {
|
|
258
|
+
throw new Error('No session ID found in checkpoint metadata');
|
|
259
|
+
}
|
|
260
|
+
const busyCells = (_g = (_f = detail.metadata) === null || _f === void 0 ? void 0 : _f.busyCells) !== null && _g !== void 0 ? _g : [];
|
|
261
|
+
await onRestore(checkpointName, checkpointFile.storagePath, checkpointFile.containerName, cpKernelId, cpSessionId, busyCells);
|
|
257
262
|
setFlash({
|
|
258
263
|
type: 'success',
|
|
259
264
|
text: `Kernel restored from "${checkpointName}". The kernel is restarting.`
|
|
@@ -262,7 +267,7 @@ function CheckpointPanel(props) {
|
|
|
262
267
|
catch (err) {
|
|
263
268
|
setFlash({
|
|
264
269
|
type: 'error',
|
|
265
|
-
text: (
|
|
270
|
+
text: (_h = err.message) !== null && _h !== void 0 ? _h : 'Failed to restore checkpoint'
|
|
266
271
|
});
|
|
267
272
|
}
|
|
268
273
|
finally {
|
|
@@ -450,7 +455,7 @@ const plugin = {
|
|
|
450
455
|
label: 'Saving Points',
|
|
451
456
|
caption: 'Manage kernel checkpoints',
|
|
452
457
|
execute: async () => {
|
|
453
|
-
var _a;
|
|
458
|
+
var _a, _b;
|
|
454
459
|
const panel = notebookTracker.currentWidget;
|
|
455
460
|
if (!panel) {
|
|
456
461
|
return;
|
|
@@ -489,13 +494,14 @@ const plugin = {
|
|
|
489
494
|
const kernelId = kernel.id;
|
|
490
495
|
const kernelSpecName = kernel.name || 'python_kubernetes';
|
|
491
496
|
const notebookName = panel.title.label || '';
|
|
497
|
+
const sessionId = ((_b = sessionContext.session) === null || _b === void 0 ? void 0 : _b.id) || '';
|
|
492
498
|
// ── Restore callback ─────────────────────────────────────────
|
|
493
499
|
//
|
|
494
500
|
// Called by the CheckpointPanel when the user confirms a restore.
|
|
495
501
|
// Creates a new kernel seeded with the checkpoint environment
|
|
496
502
|
// variables, switches the notebook session to it, and then
|
|
497
503
|
// activates the RestoreHandler to catch orphaned iopub messages.
|
|
498
|
-
const onRestore = async (checkpointName, checkpointFilePath, containerName, cpKernelId, busyCells) => {
|
|
504
|
+
const onRestore = async (checkpointName, checkpointFilePath, containerName, cpKernelId, cpSessionId, busyCells) => {
|
|
499
505
|
const settings = _jupyterlab_services__WEBPACK_IMPORTED_MODULE_3__.ServerConnection.makeSettings();
|
|
500
506
|
const kernelUrl = _jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_2__.URLExt.join(settings.baseUrl, 'api', 'kernels');
|
|
501
507
|
const response = await _jupyterlab_services__WEBPACK_IMPORTED_MODULE_3__.ServerConnection.makeRequest(kernelUrl, {
|
|
@@ -507,7 +513,8 @@ const plugin = {
|
|
|
507
513
|
KERNEL_CHECKPOINT_NAME: checkpointName,
|
|
508
514
|
KERNEL_CHECKPOINT_FILE_PATH: checkpointFilePath,
|
|
509
515
|
KERNEL_CHECKPOINT_CONTAINER_NAME: containerName,
|
|
510
|
-
KERNEL_ID: cpKernelId
|
|
516
|
+
// KERNEL_ID: cpKernelId,
|
|
517
|
+
KERNEL_SESSION_ID: cpSessionId
|
|
511
518
|
}
|
|
512
519
|
})
|
|
513
520
|
}, settings);
|
|
@@ -535,6 +542,7 @@ const plugin = {
|
|
|
535
542
|
kernelId,
|
|
536
543
|
kernelSpecName,
|
|
537
544
|
notebookName,
|
|
545
|
+
sessionId,
|
|
538
546
|
onRestore,
|
|
539
547
|
onBeforeCreate: () => {
|
|
540
548
|
const cellTracker = trackerMap.get(panel.id);
|
|
@@ -938,4 +946,4 @@ class RestoreHandler {
|
|
|
938
946
|
/***/ }
|
|
939
947
|
|
|
940
948
|
}]);
|
|
941
|
-
//# sourceMappingURL=lib_index_js.
|
|
949
|
+
//# sourceMappingURL=lib_index_js.efd15a23ba0b55378c6a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib_index_js.efd15a23ba0b55378c6a.js","mappings":"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","sources":["webpack://kernel-checkpoint/./src/api.ts","webpack://kernel-checkpoint/./src/checkpoint-panel.tsx","webpack://kernel-checkpoint/./src/index.ts","webpack://kernel-checkpoint/./src/restore-handler.ts"],"sourcesContent":["import { URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport {\n ICheckpointConfig,\n ICheckpointListResponse,\n ICheckpoint,\n ICreateCheckpointRequest\n} from './types';\n\nconst API_NAMESPACE = 'kernel-checkpoint';\n\nfunction makeRequest(\n endpoint: string,\n init: RequestInit = {}\n): Promise<Response> {\n const settings = ServerConnection.makeSettings();\n const url = URLExt.join(settings.baseUrl, API_NAMESPACE, endpoint);\n return ServerConnection.makeRequest(url, init, settings);\n}\n\nfunction jsonInit(method: string, data: any): RequestInit {\n return {\n method,\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data)\n };\n}\n\nasync function handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n let detail = response.statusText;\n try {\n const body = await response.json();\n detail = body.message || body.error || JSON.stringify(body);\n } catch {\n // use statusText\n }\n throw new Error(detail);\n }\n return response.json();\n}\n\nexport namespace CheckpointAPI {\n export async function getConfig(): Promise<ICheckpointConfig> {\n const resp = await makeRequest('config');\n return handleResponse<ICheckpointConfig>(resp);\n }\n\n export async function listCheckpoints(\n namespace: string\n ): Promise<ICheckpointListResponse> {\n const resp = await makeRequest(\n `checkpoints?namespace=${encodeURIComponent(namespace)}`\n );\n return handleResponse<ICheckpointListResponse>(resp);\n }\n\n export async function getCheckpoint(\n namespace: string,\n name: string\n ): Promise<ICheckpoint> {\n const resp = await makeRequest(\n `checkpoints/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`\n );\n return handleResponse<ICheckpoint>(resp);\n }\n\n export async function createCheckpoint(\n request: ICreateCheckpointRequest\n ): Promise<ICheckpoint> {\n const resp = await makeRequest(\n 'checkpoints',\n jsonInit('POST', request)\n );\n return handleResponse<ICheckpoint>(resp);\n }\n\n export async function deleteCheckpoint(\n namespace: string,\n name: string\n ): Promise<void> {\n const resp = await makeRequest(\n `checkpoints/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`,\n { method: 'DELETE' }\n );\n if (!resp.ok) {\n let detail = resp.statusText;\n try {\n const body = await resp.json();\n detail = body.message || body.error || JSON.stringify(body);\n } catch {\n // use statusText\n }\n throw new Error(detail);\n }\n }\n\n export async function updateCheckpoint(\n namespace: string,\n name: string,\n data: Record<string, any>\n ): Promise<ICheckpoint> {\n const resp = await makeRequest(\n `checkpoints/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`,\n jsonInit('PUT', data)\n );\n return handleResponse<ICheckpoint>(resp);\n }\n}\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { ICheckpoint, ICheckpointPanelProps } from './types';\nimport { CheckpointAPI } from './api';\n\nconst CHECKPOINT_REFRESH_INTERVAL = 3;\n\nfunction mapPhaseDisplay(phase: string): string {\n return phase === 'Completed' ? 'Ready' : 'Pending';\n}\n\nfunction PhaseIndicator({ phase }: { phase: string }): JSX.Element {\n const display = mapPhaseDisplay(phase);\n const cls = display.toLowerCase().replace(/\\s+/g, '-');\n return <span className={`kc-phase kc-phase-${cls}`}>{display}</span>;\n}\n\nfunction formatDate(iso: string): string {\n return new Date(iso).toLocaleString();\n}\n\nexport function CheckpointPanel(props: ICheckpointPanelProps): JSX.Element {\n const {\n namespace,\n kernelId,\n kernelSpecName,\n notebookName,\n sessionId,\n onRestore,\n onBeforeCreate\n } = props;\n\n const [checkpoints, setCheckpoints] = useState<ICheckpoint[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const [showCreateForm, setShowCreateForm] = useState(false);\n const [newName, setNewName] = useState('');\n const [creating, setCreating] = useState(false);\n\n const [restoring, setRestoring] = useState<string | null>(null);\n const [expandedDetail, setExpandedDetail] = useState<string | null>(null);\n const [detailData, setDetailData] = useState<ICheckpoint | null>(null);\n\n const [renamingName, setRenamingName] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState('');\n\n const [flash, setFlash] = useState<{\n type: 'success' | 'error';\n text: string;\n } | null>(null);\n\n const [confirmDelete, setConfirmDelete] = useState<string | null>(null);\n const [confirmRestore, setConfirmRestore] = useState<string | null>(null);\n\n /* ------------------------------------------------------------------ */\n /* Data fetching */\n /* ------------------------------------------------------------------ */\n\n const fetchCheckpoints = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await CheckpointAPI.listCheckpoints(namespace);\n setCheckpoints(result.items ?? []);\n } catch (err: any) {\n setError(err.message ?? 'Failed to load checkpoints');\n } finally {\n setLoading(false);\n }\n }, [namespace]);\n\n useEffect(() => {\n fetchCheckpoints();\n }, [fetchCheckpoints]);\n\n useEffect(() => {\n const id = setInterval(fetchCheckpoints, CHECKPOINT_REFRESH_INTERVAL * 1000);\n return () => clearInterval(id);\n }, [fetchCheckpoints]);\n\n /* ------------------------------------------------------------------ */\n /* Actions */\n /* ------------------------------------------------------------------ */\n\n const handleCreate = async () => {\n if (!newName.trim()) {\n return;\n }\n setCreating(true);\n setFlash(null);\n try {\n const busyCells = onBeforeCreate ? onBeforeCreate() : [];\n await CheckpointAPI.createCheckpoint({\n name: newName.trim(),\n namespace,\n kernelId,\n buildImage: false,\n metadata: {\n kernelId,\n kernelName: kernelSpecName,\n notebookName,\n sessionId,\n busyCells\n }\n });\n setNewName('');\n setShowCreateForm(false);\n setFlash({ type: 'success', text: 'Checkpoint created successfully.' });\n await fetchCheckpoints();\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to create checkpoint'\n });\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async (name: string) => {\n setFlash(null);\n setConfirmDelete(null);\n try {\n await CheckpointAPI.deleteCheckpoint(namespace, name);\n setFlash({ type: 'success', text: `Checkpoint \"${name}\" deleted.` });\n if (expandedDetail === name) {\n setExpandedDetail(null);\n setDetailData(null);\n }\n await fetchCheckpoints();\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to delete checkpoint'\n });\n }\n };\n\n const handleViewStatus = async (name: string) => {\n if (expandedDetail === name) {\n setExpandedDetail(null);\n setDetailData(null);\n return;\n }\n try {\n const detail = await CheckpointAPI.getCheckpoint(namespace, name);\n setDetailData(detail);\n setExpandedDetail(name);\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to get checkpoint details'\n });\n }\n };\n\n const handleRestore = async (checkpointName: string) => {\n setConfirmRestore(null);\n setRestoring(checkpointName);\n setFlash(null);\n try {\n const detail = await CheckpointAPI.getCheckpoint(namespace, checkpointName);\n const checkpointFile = detail.checkpointFiles?.[0];\n if (!checkpointFile?.storagePath) {\n throw new Error('No checkpoint file path available for this checkpoint');\n }\n const cpKernelId = detail.metadata?.kernelId ?? '';\n if (!cpKernelId) {\n throw new Error('No kernel ID found in checkpoint metadata');\n }\n const cpSessionId = detail.metadata?.sessionId ?? '';\n if (!cpSessionId) {\n throw new Error('No session ID found in checkpoint metadata');\n }\n const busyCells = detail.metadata?.busyCells ?? [];\n await onRestore(checkpointName, checkpointFile.storagePath, checkpointFile.containerName, cpKernelId, cpSessionId, busyCells);\n setFlash({\n type: 'success',\n text: `Kernel restored from \"${checkpointName}\". The kernel is restarting.`\n });\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to restore checkpoint'\n });\n } finally {\n setRestoring(null);\n }\n };\n\n const handleRename = async (oldName: string) => {\n const trimmed = renameValue.trim();\n if (!trimmed || trimmed === oldName) {\n setRenamingName(null);\n return;\n }\n setFlash(null);\n try {\n await CheckpointAPI.updateCheckpoint(namespace, oldName, {\n name: trimmed\n });\n setRenamingName(null);\n setFlash({ type: 'success', text: `Checkpoint renamed to \"${trimmed}\".` });\n await fetchCheckpoints();\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to rename checkpoint'\n });\n }\n };\n\n /* ------------------------------------------------------------------ */\n /* Render */\n /* ------------------------------------------------------------------ */\n\n return (\n <div className=\"kc-panel\">\n {/* Flash message */}\n {flash && (\n <div className={`kc-flash kc-flash-${flash.type}`}>\n <span>{flash.text}</span>\n <button\n className=\"kc-flash-close\"\n onClick={() => setFlash(null)}\n >\n ×\n </button>\n </div>\n )}\n\n {/* Create checkpoint */}\n <div className=\"kc-create-section\">\n {!showCreateForm ? (\n <button\n className=\"kc-btn kc-btn-primary\"\n onClick={() => setShowCreateForm(true)}\n >\n Save Kernel State\n </button>\n ) : (\n <div className=\"kc-create-form\">\n <input\n className=\"kc-input\"\n type=\"text\"\n placeholder=\"Enter checkpoint name…\"\n value={newName}\n onChange={e => setNewName(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleCreate();\n }\n }}\n autoFocus\n disabled={creating}\n />\n <button\n className=\"kc-btn kc-btn-primary\"\n disabled={creating || !newName.trim()}\n onClick={handleCreate}\n >\n {creating ? 'Saving…' : 'Save'}\n </button>\n <button\n className=\"kc-btn\"\n onClick={() => {\n setShowCreateForm(false);\n setNewName('');\n }}\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n\n {/* Checkpoint list */}\n <div className=\"kc-list\">\n {loading && checkpoints.length === 0 ? (\n <div className=\"kc-placeholder\">Loading checkpoints…</div>\n ) : error ? (\n <div className=\"kc-placeholder kc-placeholder-error\">{error}</div>\n ) : checkpoints.length === 0 ? (\n <div className=\"kc-placeholder\">\n No checkpoints found. Click “Save Kernel State” to\n create one.\n </div>\n ) : (\n checkpoints.map(cp => (\n <div key={cp.name} className=\"kc-item\">\n {/* Header row */}\n <div className=\"kc-item-header\">\n <div className=\"kc-item-info\">\n {renamingName === cp.name ? (\n <div className=\"kc-rename-form\">\n <input\n className=\"kc-input kc-input-sm\"\n type=\"text\"\n value={renameValue}\n onChange={e => setRenameValue(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleRename(cp.name);\n }\n if (e.key === 'Escape') {\n setRenamingName(null);\n }\n }}\n autoFocus\n />\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => handleRename(cp.name)}\n >\n OK\n </button>\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => setRenamingName(null)}\n >\n Cancel\n </button>\n </div>\n ) : (\n <span className=\"kc-item-name\" title={cp.name}>\n {cp.name}\n </span>\n )}\n <div className=\"kc-item-meta\">\n <PhaseIndicator phase={cp.phase} />\n <span className=\"kc-item-date\">\n {formatDate(cp.createdAt)}\n </span>\n </div>\n </div>\n\n <div className=\"kc-item-actions\">\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => handleViewStatus(cp.name)}\n >\n {expandedDetail === cp.name ? 'Hide' : 'Details'}\n </button>\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => {\n setRenamingName(cp.name);\n setRenameValue(cp.name);\n }}\n >\n Rename\n </button>\n {confirmDelete === cp.name ? (\n <>\n <span className=\"kc-confirm-label\">Delete?</span>\n <button\n className=\"kc-btn kc-btn-xs kc-btn-danger\"\n onClick={() => handleDelete(cp.name)}\n >\n Yes\n </button>\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => setConfirmDelete(null)}\n >\n No\n </button>\n </>\n ) : (\n <button\n className=\"kc-btn kc-btn-xs kc-btn-danger\"\n onClick={() => setConfirmDelete(cp.name)}\n >\n Delete\n </button>\n )}\n {confirmRestore === cp.name ? (\n <>\n <span className=\"kc-confirm-label\">Restore?</span>\n <button\n className=\"kc-btn kc-btn-xs kc-btn-restore\"\n onClick={() => handleRestore(cp.name)}\n >\n Yes\n </button>\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => setConfirmRestore(null)}\n >\n No\n </button>\n </>\n ) : (\n <button\n className=\"kc-btn kc-btn-xs kc-btn-restore\"\n disabled={\n restoring !== null || cp.phase !== 'Completed'\n }\n title={\n cp.phase !== 'Completed'\n ? 'Checkpoint must be completed to restore'\n : 'Restore from this checkpoint'\n }\n onClick={() => setConfirmRestore(cp.name)}\n >\n {restoring === cp.name ? 'Restoring…' : 'Restore'}\n </button>\n )}\n </div>\n </div>\n\n {/* Expanded detail */}\n {expandedDetail === cp.name && detailData && (\n <div className=\"kc-detail\">\n <div className=\"kc-detail-row\">\n <span className=\"kc-detail-label\">Status</span>\n <span>{mapPhaseDisplay(detailData.phase)}</span>\n </div>\n <div className=\"kc-detail-row\">\n <span className=\"kc-detail-label\">Message</span>\n <span>{detailData.message}</span>\n </div>\n {detailData.podRef && (\n <div className=\"kc-detail-row\">\n <span className=\"kc-detail-label\">Pod</span>\n <span>{detailData.podRef.name}</span>\n </div>\n )}\n {detailData.checkpointFiles &&\n detailData.checkpointFiles.length > 0 && (\n <div className=\"kc-detail-section\">\n <span className=\"kc-detail-label\">\n Checkpoint Files\n </span>\n {detailData.checkpointFiles.map((f, i) => (\n <div key={i} className=\"kc-detail-file\">\n <span>{f.containerName}</span>\n <span className=\"kc-detail-time\">\n {formatDate(f.checkpointTime)}\n </span>\n </div>\n ))}\n </div>\n )}\n {detailData.builtImages &&\n detailData.builtImages.length > 0 && (\n <div className=\"kc-detail-section\">\n <span className=\"kc-detail-label\">Built Images</span>\n {detailData.builtImages.map((img, i) => (\n <div key={i} className=\"kc-detail-file\">\n <span className=\"kc-detail-image-name\">\n {img.imageName}\n </span>\n <span className=\"kc-detail-time\">\n {formatDate(img.buildTime)}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n ))\n )}\n </div>\n\n </div>\n );\n}\n","import {\n JupyterFrontEnd,\n JupyterFrontEndPlugin\n} from '@jupyterlab/application';\nimport { INotebookTracker, NotebookPanel } from '@jupyterlab/notebook';\nimport {\n Dialog,\n ReactWidget,\n showDialog,\n ToolbarButton\n} from '@jupyterlab/apputils';\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport React from 'react';\n\nimport { CheckpointPanel } from './checkpoint-panel';\nimport { CheckpointAPI } from './api';\nimport { IBusyCellRecord, ICheckpointPanelProps } from './types';\nimport {\n CellExecutionTracker,\n RestoreHandler,\n scanBusyCells\n} from './restore-handler';\n\n/**\n * ReactWidget wrapper that hosts the CheckpointPanel React tree inside a\n * JupyterLab Dialog body.\n */\nclass CheckpointDialogBody extends ReactWidget {\n private _props: ICheckpointPanelProps;\n\n constructor(props: ICheckpointPanelProps) {\n super();\n this._props = props;\n this.addClass('kc-dialog-body');\n }\n\n protected render(): React.ReactElement {\n return React.createElement(CheckpointPanel, this._props);\n }\n}\n\nconst COMMAND_ID = 'kernel-checkpoint:open';\n\nconst plugin: JupyterFrontEndPlugin<void> = {\n id: 'kernel-checkpoint:plugin',\n description:\n 'An extension for saving and restoring kernel pod state with jupyter enterprise gateway',\n autoStart: true,\n requires: [INotebookTracker],\n activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker) => {\n console.log('JupyterLab extension kernel-checkpoint is activated!');\n\n // ── Per-notebook execution tracking ──────────────────────────────\n //\n // Each open notebook gets its own CellExecutionTracker that\n // continuously records in-flight msg_id → execution_count pairs\n // from the kernel's iopub channel. At checkpoint time this map\n // is consulted to capture the execution counts for busy cells.\n\n const trackerMap = new Map<string, CellExecutionTracker>();\n\n function ensureTracker(panel: NotebookPanel): CellExecutionTracker {\n let cellTracker = trackerMap.get(panel.id);\n if (!cellTracker) {\n cellTracker = new CellExecutionTracker();\n trackerMap.set(panel.id, cellTracker);\n }\n return cellTracker;\n }\n\n function connectTrackerToKernel(panel: NotebookPanel): void {\n const kernel = panel.sessionContext.session?.kernel;\n if (kernel) {\n ensureTracker(panel).connectToKernel(kernel);\n }\n }\n\n // ── Command ──────────────────────────────────────────────────────\n\n app.commands.addCommand(COMMAND_ID, {\n label: 'Saving Points',\n caption: 'Manage kernel checkpoints',\n execute: async () => {\n const panel = notebookTracker.currentWidget;\n if (!panel) {\n return;\n }\n\n const sessionContext = panel.sessionContext;\n await sessionContext.ready;\n\n let config;\n try {\n config = await CheckpointAPI.getConfig();\n } catch (err) {\n await showDialog({\n title: 'Configuration Error',\n body: 'Failed to load checkpoint configuration. Ensure CHECKPOINT_API_URL is set.',\n buttons: [Dialog.okButton()]\n });\n return;\n }\n\n if (!config.namespace) {\n await showDialog({\n title: 'Configuration Error',\n body: 'Namespace not configured. Set CHECKPOINT_NAMESPACE environment variable or deploy in Kubernetes.',\n buttons: [Dialog.okButton()]\n });\n return;\n }\n\n const kernel = sessionContext.session?.kernel;\n if (!kernel) {\n await showDialog({\n title: 'No Kernel',\n body: 'No kernel is connected. Please start a kernel first.',\n buttons: [Dialog.okButton()]\n });\n return;\n }\n\n const kernelId = kernel.id;\n const kernelSpecName = kernel.name || 'python_kubernetes';\n const notebookName = panel.title.label || '';\n const sessionId = sessionContext.session?.id || '';\n\n // ── Restore callback ─────────────────────────────────────────\n //\n // Called by the CheckpointPanel when the user confirms a restore.\n // Creates a new kernel seeded with the checkpoint environment\n // variables, switches the notebook session to it, and then\n // activates the RestoreHandler to catch orphaned iopub messages.\n\n const onRestore = async (\n checkpointName: string,\n checkpointFilePath: string,\n containerName: string,\n cpKernelId: string,\n cpSessionId: string,\n busyCells: IBusyCellRecord[]\n ): Promise<void> => {\n const settings = ServerConnection.makeSettings();\n const kernelUrl = URLExt.join(settings.baseUrl, 'api', 'kernels');\n\n const response = await ServerConnection.makeRequest(\n kernelUrl,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: kernelSpecName,\n env: {\n KERNEL_CHECKPOINT_NAME: checkpointName,\n KERNEL_CHECKPOINT_FILE_PATH: checkpointFilePath,\n KERNEL_CHECKPOINT_CONTAINER_NAME: containerName,\n // KERNEL_ID: cpKernelId,\n KERNEL_SESSION_ID: cpSessionId\n }\n })\n },\n settings\n );\n\n if (!response.ok) {\n const errText = await response.text();\n throw new Error(`Failed to create restored kernel: ${errText}`);\n }\n\n const kernelData = await response.json();\n await sessionContext.changeKernel({ id: kernelData.id });\n\n // ── Activate Catch-and-Render (Steps 3-6) ──────────────────\n //\n // The restored kernel is now connected. If there were busy\n // cells at checkpoint time, spin up a RestoreHandler that\n // hooks iopub and intercepts orphaned messages.\n\n if (busyCells.length > 0) {\n console.log(\n `[kernel-checkpoint] Restore detected ${busyCells.length} ` +\n 'busy cell(s). Activating RestoreHandler.'\n );\n const handler = new RestoreHandler();\n handler.hookRestoredKernel(panel, busyCells);\n }\n };\n\n // ── Dialog construction ──────────────────────────────────────\n\n const body = new CheckpointDialogBody({\n namespace: config.namespace,\n kernelId,\n kernelSpecName,\n notebookName,\n sessionId,\n onRestore,\n onBeforeCreate: () => {\n const cellTracker = trackerMap.get(panel.id);\n if (!cellTracker) {\n return [];\n }\n const busyCells = scanBusyCells(panel, cellTracker);\n if (busyCells.length > 0) {\n console.log(\n `[kernel-checkpoint] Scanned ${busyCells.length} busy cell(s) ` +\n 'before checkpoint:',\n busyCells\n );\n }\n return busyCells;\n }\n });\n\n await showDialog({\n title: 'Kernel Checkpoints',\n body,\n buttons: [Dialog.cancelButton({ label: 'Close' })]\n });\n\n body.dispose();\n }\n });\n\n // ── Notebook lifecycle wiring ────────────────────────────────────\n\n notebookTracker.widgetAdded.connect(\n (_sender: INotebookTracker, panel: NotebookPanel) => {\n // Toolbar button\n const button = new ToolbarButton({\n label: 'Saving Points',\n tooltip: 'Open kernel checkpoint manager',\n onClick: () => {\n app.commands.execute(COMMAND_ID);\n }\n });\n panel.toolbar.insertItem(10, 'kernel-checkpoint', button);\n\n // Execution tracker setup — connect once the session is ready,\n // and reconnect whenever the kernel is swapped.\n\n panel.sessionContext.ready.then(() => {\n connectTrackerToKernel(panel);\n });\n\n panel.sessionContext.kernelChanged.connect(() => {\n connectTrackerToKernel(panel);\n });\n\n panel.disposed.connect(() => {\n const cellTracker = trackerMap.get(panel.id);\n if (cellTracker) {\n cellTracker.disconnectFromKernel();\n trackerMap.delete(panel.id);\n }\n });\n }\n );\n }\n};\n\nexport default plugin;\n","import { NotebookPanel } from '@jupyterlab/notebook';\nimport { CodeCell } from '@jupyterlab/cells';\nimport { Kernel, KernelMessage } from '@jupyterlab/services';\nimport { IBusyCellRecord } from './types';\n\n/**\n * Safely extracts `msg_id` from a kernel message's `parent_header`.\n * Returns undefined when the parent_header is empty (e.g. unsolicited\n * kernel-status broadcasts at startup).\n */\nfunction getParentMsgId(\n msg: KernelMessage.IMessage\n): string | undefined {\n const ph = msg.parent_header;\n return ph && 'msg_id' in ph\n ? (ph as KernelMessage.IHeader).msg_id\n : undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Mock save / load helpers.\n// These demonstrate the checkpoint-metadata persistence contract.\n// Replace the bodies with real API calls (e.g. CheckpointAPI.updateCheckpoint)\n// when wiring to your backend.\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport async function saveCheckpointCellMetadata(\n _checkpointName: string,\n _namespace: string,\n busyCells: IBusyCellRecord[]\n): Promise<void> {\n console.log(\n `[RestoreHandler] Would persist ${busyCells.length} busy-cell record(s)`,\n busyCells\n );\n}\n\nexport async function loadCheckpointCellMetadata(\n _checkpointName: string,\n _namespace: string\n): Promise<IBusyCellRecord[]> {\n console.log('[RestoreHandler] Would load busy-cell records from backend');\n return [];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CellExecutionTracker\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Continuously monitors a kernel's iopub channel to maintain a live map of\n * **in-flight** execute requests: `msg_id → execution_count`.\n *\n * When the kernel broadcasts `execute_input`, the tracker records the\n * execution count assigned by the kernel (this is the number that will\n * eventually be shown as `[N]` in the cell prompt). When `status: idle`\n * arrives for that same `msg_id`, the entry is removed.\n *\n * The tracker must be connected to the kernel **before** any cells are\n * executed so that the execution count is available at checkpoint time.\n */\nexport class CellExecutionTracker {\n private _pendingExecutions = new Map<string, number>();\n private _kernel: Kernel.IKernelConnection | null = null;\n\n get pendingExecutions(): ReadonlyMap<string, number> {\n return this._pendingExecutions;\n }\n\n connectToKernel(kernel: Kernel.IKernelConnection): void {\n this.disconnectFromKernel();\n this._kernel = kernel;\n kernel.iopubMessage.connect(this._onIopubMessage, this);\n }\n\n disconnectFromKernel(): void {\n if (this._kernel) {\n this._kernel.iopubMessage.disconnect(this._onIopubMessage, this);\n this._kernel = null;\n }\n this._pendingExecutions.clear();\n }\n\n private _onIopubMessage(\n _sender: Kernel.IKernelConnection,\n msg: KernelMessage.IIOPubMessage\n ): void {\n const parentMsgId = getParentMsgId(msg);\n if (!parentMsgId) {\n return;\n }\n\n if (msg.header.msg_type === 'execute_input') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const execCount = (msg.content as any).execution_count as number;\n this._pendingExecutions.set(parentMsgId, execCount);\n }\n\n if (\n msg.header.msg_type === 'status' &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (msg.content as any).execution_state === 'idle'\n ) {\n this._pendingExecutions.delete(parentMsgId);\n }\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// scanBusyCells (Step 1 of the Catch-and-Render architecture)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Scans the active notebook for cells that are currently executing (`[*]`\n * prompt) and extracts the `msg_id` of each in-flight execution request.\n *\n * ### How the msg_id is obtained\n *\n * When JupyterLab executes a cell it calls `kernel.requestExecute()` and\n * stores the resulting `IShellFuture` on the cell's `OutputArea`:\n *\n * `codeCell.outputArea.future = kernel.requestExecute({ code })`\n *\n * JupyterLab exposes `future` as a **write-only** setter on `OutputArea`.\n * The underlying field is `OutputArea._future` (private). We read it here\n * because no public getter exists, and the `msg_id` it contains is the only\n * reliable link between the cell widget and the kernel message stream.\n *\n * ### Why we also need the CellExecutionTracker\n *\n * The `_future.msg.header.msg_id` gives us the execute-request id, but not\n * the **execution count** the kernel assigned (the `[N]` prompt number).\n * During execution the cell's `model.executionCount` is `null` (that is\n * what produces the `[*]` display). The actual count was broadcast earlier\n * in an `execute_input` iopub message which the `CellExecutionTracker`\n * recorded. We look it up here so that the restore phase can set the\n * correct prompt after the cell finishes.\n */\nexport function scanBusyCells(\n panel: NotebookPanel,\n tracker: CellExecutionTracker\n): IBusyCellRecord[] {\n const records: IBusyCellRecord[] = [];\n const cells = panel.content.widgets;\n\n for (let i = 0; i < cells.length; i++) {\n const cell = cells[i];\n if (cell.model.type !== 'code') {\n continue;\n }\n\n const codeCell = cell as CodeCell;\n\n // `executionCount === null` is the canonical indicator for a busy cell\n // (the prompt renders `[*]`). Fresh cells also have `null`, so we\n // additionally require an active future below.\n if (codeCell.model.executionCount !== null) {\n continue;\n }\n\n // Read the private `_future` field. This is an `IShellFuture` whose\n // `.msg.header.msg_id` is the id the kernel uses in `parent_header`\n // for every message belonging to this execution.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const future = (codeCell.outputArea as any)._future;\n if (!future?.msg?.header?.msg_id) {\n continue;\n }\n\n const msgId: string = future.msg.header.msg_id;\n const executionCount = tracker.pendingExecutions.get(msgId) ?? null;\n\n records.push({\n cellIndex: i,\n cellId: cell.model.id,\n msgId,\n executionCount\n });\n }\n\n return records;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// RestoreHandler (Steps 3–6 of the Catch-and-Render architecture)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Hooks into a **restored** kernel's iopub channel and intercepts \"orphaned\"\n * messages whose `parent_header.msg_id` matches a cell that was busy at\n * checkpoint time.\n *\n * For each intercepted message the handler manually injects the output into\n * the cell's `OutputArea`, replicating what JupyterLab would normally do\n * if the original execution future were still alive.\n *\n * ### Output injection mechanism\n *\n * `codeCell.outputArea.model` implements `IOutputAreaModel`. Calling\n * `.add(output)` with an `nbformat.IOutput`-shaped object triggers the\n * following internal chain:\n *\n * 1. The model wraps the raw JSON in an `OutputModel` instance.\n * 2. It appends the model to its internal list.\n * – For `stream` outputs with the same `name` (stdout / stderr) as the\n * preceding entry, the text is **merged** instead of creating a new\n * item. This matches standard notebook behavior.\n * 3. A Lumino `changed` signal fires.\n * 4. The `OutputArea` widget reacts and creates the visual renderer\n * (e.g. `<pre>` for streams, a MIME renderer for display_data).\n *\n * Because all of this happens through the model's public API the rendered\n * output is indistinguishable from one produced by the normal future-based\n * routing.\n */\nexport class RestoreHandler {\n private _activeMsgIds = new Map<string, IBusyCellRecord>();\n private _panel: NotebookPanel | null = null;\n private _kernel: Kernel.IKernelConnection | null = null;\n\n /**\n * Begin intercepting orphaned messages for the given busy cells.\n * Call immediately after `sessionContext.changeKernel()` resolves.\n */\n hookRestoredKernel(\n panel: NotebookPanel,\n busyCells: IBusyCellRecord[]\n ): void {\n if (busyCells.length === 0) {\n return;\n }\n\n this.dispose();\n this._panel = panel;\n\n for (const record of busyCells) {\n this._activeMsgIds.set(record.msgId, record);\n }\n\n // Re-apply the busy indicator ([*]) so the user sees the cells as\n // still running while output continues to stream in.\n for (const record of busyCells) {\n const cell = this._findCell(panel, record);\n if (cell) {\n cell.model.executionCount = null;\n }\n }\n\n const kernel = panel.sessionContext.session?.kernel;\n if (!kernel) {\n console.warn(\n '[RestoreHandler] No kernel on panel after changeKernel(); ' +\n 'cannot hook iopub. Orphaned outputs will be lost.'\n );\n return;\n }\n\n this._kernel = kernel;\n kernel.iopubMessage.connect(this._onIopubMessage, this);\n\n console.log(\n `[RestoreHandler] Hooked into restored kernel iopub. ` +\n `Tracking ${busyCells.length} busy cell(s):`,\n busyCells.map(r => `cell[${r.cellIndex}] (${r.cellId}) → ${r.msgId}`)\n );\n }\n\n dispose(): void {\n if (this._kernel) {\n this._kernel.iopubMessage.disconnect(this._onIopubMessage, this);\n this._kernel = null;\n }\n this._activeMsgIds.clear();\n this._panel = null;\n }\n\n /**\n * Locate the CodeCell for a given record. We first try the saved index\n * (fast path) and verify by cell ID, then fall back to a linear scan.\n * This handles the case where the user inserted or deleted cells between\n * checkpoint and restore.\n */\n private _findCell(\n panel: NotebookPanel,\n record: IBusyCellRecord\n ): CodeCell | null {\n const cells = panel.content.widgets;\n\n if (record.cellIndex < cells.length) {\n const candidate = cells[record.cellIndex];\n if (\n candidate.model.type === 'code' &&\n candidate.model.id === record.cellId\n ) {\n return candidate as CodeCell;\n }\n }\n\n for (let i = 0; i < cells.length; i++) {\n const c = cells[i];\n if (c.model.id === record.cellId && c.model.type === 'code') {\n return c as CodeCell;\n }\n }\n\n return null;\n }\n\n // ── iopub signal handler ──────────────────────────────────────────────\n\n private _onIopubMessage(\n _sender: Kernel.IKernelConnection,\n msg: KernelMessage.IIOPubMessage\n ): void {\n const parentMsgId = getParentMsgId(msg);\n if (!parentMsgId) {\n return;\n }\n\n const record = this._activeMsgIds.get(parentMsgId);\n if (!record) {\n // Not one of our tracked orphaned executions — let JupyterLab's\n // normal future-based routing handle this message.\n return;\n }\n\n if (!this._panel) {\n return;\n }\n\n const codeCell = this._findCell(this._panel, record);\n if (!codeCell) {\n return;\n }\n\n const msgType = msg.header.msg_type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const content: any = msg.content;\n\n // ── Step 5: Inject output into the cell's OutputArea ────────────\n //\n // We construct an nbformat-compatible output object and pass it to\n // `outputArea.model.add()`. The model validates the shape, wraps it\n // in an OutputModel, and emits a `changed` signal that causes the\n // OutputArea widget to render the new entry.\n\n switch (msgType) {\n case 'stream':\n codeCell.outputArea.model.add({\n output_type: 'stream',\n name: content.name,\n text: content.text\n });\n break;\n\n case 'error':\n codeCell.outputArea.model.add({\n output_type: 'error',\n ename: content.ename,\n evalue: content.evalue,\n traceback: content.traceback\n });\n break;\n\n case 'execute_result':\n codeCell.outputArea.model.add({\n output_type: 'execute_result',\n data: content.data,\n metadata: content.metadata,\n execution_count: content.execution_count\n });\n break;\n\n case 'display_data':\n codeCell.outputArea.model.add({\n output_type: 'display_data',\n data: content.data,\n metadata: content.metadata\n });\n break;\n\n // ── Step 6: Lifecycle Cleanup ─────────────────────────────────\n //\n // A `status: idle` message with our tracked msg_id means the\n // kernel finished executing this cell. We:\n // a) Set the cell's execution count → prompt changes [*] → [N]\n // b) Remove the msg_id from the tracking map\n // c) Disconnect from iopub when no busy cells remain\n\n case 'status':\n if (content.execution_state === 'idle') {\n if (record.executionCount !== null) {\n codeCell.model.executionCount = record.executionCount;\n }\n\n this._activeMsgIds.delete(parentMsgId);\n\n console.log(\n `[RestoreHandler] Cell[${record.cellIndex}] execution ` +\n `complete (exec count: ${record.executionCount}). ` +\n `${this._activeMsgIds.size} cell(s) still pending.`\n );\n\n if (this._activeMsgIds.size === 0) {\n console.log(\n '[RestoreHandler] All restored cells complete. ' +\n 'Disconnecting iopub hook.'\n );\n this.dispose();\n }\n }\n break;\n\n default:\n break;\n }\n }\n}\n"],"names":[],"sourceRoot":""}
|
|
@@ -130,7 +130,7 @@ __webpack_require__.d(exports, {
|
|
|
130
130
|
/******/ // This function allow to reference async chunks
|
|
131
131
|
/******/ __webpack_require__.u = (chunkId) => {
|
|
132
132
|
/******/ // return url for filenames based on template
|
|
133
|
-
/******/ return "" + chunkId + "." + {"lib_index_js":"
|
|
133
|
+
/******/ return "" + chunkId + "." + {"lib_index_js":"efd15a23ba0b55378c6a","style_index_js":"c3e72438ed03e9dee0fc"}[chunkId] + ".js";
|
|
134
134
|
/******/ };
|
|
135
135
|
/******/ })();
|
|
136
136
|
/******/
|
|
@@ -248,7 +248,7 @@ __webpack_require__.d(exports, {
|
|
|
248
248
|
/******/ var promises = [];
|
|
249
249
|
/******/ switch(name) {
|
|
250
250
|
/******/ case "default": {
|
|
251
|
-
/******/ register("kernel-checkpoint", "0.1.
|
|
251
|
+
/******/ register("kernel-checkpoint", "0.1.9", () => (__webpack_require__.e("lib_index_js").then(() => (() => (__webpack_require__(/*! ./lib/index.js */ "./lib/index.js"))))));
|
|
252
252
|
/******/ }
|
|
253
253
|
/******/ break;
|
|
254
254
|
/******/ }
|
|
@@ -559,4 +559,4 @@ __webpack_require__.d(exports, {
|
|
|
559
559
|
/******/
|
|
560
560
|
/******/ })()
|
|
561
561
|
;
|
|
562
|
-
//# sourceMappingURL=remoteEntry.
|
|
562
|
+
//# sourceMappingURL=remoteEntry.6588a650b13da58d2e73.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteEntry.5ffc549e28b042648bca.js","mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;UCpCD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WClCA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF,E;;;;;WCRA;WACA;WACA;WACA,8BAA8B,8EAA8E;WAC5G,E;;;;;WCJA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC,I;;;;;WCPD,wF;;;;;WCAA;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA,E;;;;;WCxCA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;WCNA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,oJAAoJ;WACpJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI,aAAa;WACjB;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,E;;;;;WC7CA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,kC;;;;;WClBA;WACA;WACA,WAAW,4BAA4B,iBAAiB,EAAE,qEAAqE;WAC/H;WACA;WACA;WACA,qCAAqC,aAAa,EAAE,wDAAwD,2BAA2B,4BAA4B,2BAA2B,+CAA+C,mCAAmC;WAChR;WACA;WACA;WACA,qBAAqB,8BAA8B,SAAS,sDAAsD,gBAAgB,eAAe,KAAK,6DAA6D,SAAS,SAAS,QAAQ,eAAe,KAAK,eAAe,qGAAqG,WAAW,aAAa;WAC7Y;WACA;WACA;WACA,gBAAgB,8BAA8B,qBAAqB,YAAY,sBAAsB,SAAS,iDAAiD,6FAA6F,WAAW,uBAAuB,2BAA2B,wBAAwB,KAAK,oCAAoC,oBAAoB,wBAAwB,oBAAoB,SAAS,KAAK,yBAAyB,KAAK,gCAAgC,yBAAyB,QAAQ,eAAe,KAAK,eAAe,4DAA4D;WACtoB;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE,IAAI;WACN;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;;WAED;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN,KAAK,WAAW;WAChB;WACA,GAAG;WACH;WACA,C;;;;;WCzKA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,iCAAiC;;WAEjC;WACA;WACA;WACA,KAAK;WACL,eAAe;WACf;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,4G;;;;;WCrFA,mC;;;;;UEAA;UACA;UACA;UACA","sources":["webpack://kernel-checkpoint/webpack/container-entry","webpack://kernel-checkpoint/webpack/bootstrap","webpack://kernel-checkpoint/webpack/runtime/compat get default export","webpack://kernel-checkpoint/webpack/runtime/define property getters","webpack://kernel-checkpoint/webpack/runtime/ensure chunk","webpack://kernel-checkpoint/webpack/runtime/get javascript chunk filename","webpack://kernel-checkpoint/webpack/runtime/global","webpack://kernel-checkpoint/webpack/runtime/hasOwnProperty shorthand","webpack://kernel-checkpoint/webpack/runtime/load script","webpack://kernel-checkpoint/webpack/runtime/make namespace object","webpack://kernel-checkpoint/webpack/runtime/sharing","webpack://kernel-checkpoint/webpack/runtime/publicPath","webpack://kernel-checkpoint/webpack/runtime/consumes","webpack://kernel-checkpoint/webpack/runtime/jsonp chunk loading","webpack://kernel-checkpoint/webpack/runtime/nonce","webpack://kernel-checkpoint/webpack/before-startup","webpack://kernel-checkpoint/webpack/startup","webpack://kernel-checkpoint/webpack/after-startup"],"sourcesContent":["var moduleMap = {\n\t\"./index\": () => {\n\t\treturn __webpack_require__.e(\"lib_index_js\").then(() => (() => ((__webpack_require__(/*! ./lib/index.js */ \"./lib/index.js\")))));\n\t},\n\t\"./extension\": () => {\n\t\treturn __webpack_require__.e(\"lib_index_js\").then(() => (() => ((__webpack_require__(/*! ./lib/index.js */ \"./lib/index.js\")))));\n\t},\n\t\"./style\": () => {\n\t\treturn __webpack_require__.e(\"style_index_js\").then(() => (() => ((__webpack_require__(/*! ./style/index.js */ \"./style/index.js\")))));\n\t}\n};\nvar get = (module, getScope) => {\n\t__webpack_require__.R = getScope;\n\tgetScope = (\n\t\t__webpack_require__.o(moduleMap, module)\n\t\t\t? moduleMap[module]()\n\t\t\t: Promise.resolve().then(() => {\n\t\t\t\tthrow new Error('Module \"' + module + '\" does not exist in container.');\n\t\t\t})\n\t);\n\t__webpack_require__.R = undefined;\n\treturn getScope;\n};\nvar init = (shareScope, initScope) => {\n\tif (!__webpack_require__.S) return;\n\tvar name = \"default\"\n\tvar oldScope = __webpack_require__.S[name];\n\tif(oldScope && oldScope !== shareScope) throw new Error(\"Container initialization failed as it has already been initialized with a different share scope\");\n\t__webpack_require__.S[name] = shareScope;\n\treturn __webpack_require__.I(name, initScope);\n};\n\n// This exports getters to disallow modifications\n__webpack_require__.d(exports, {\n\tget: () => (get),\n\tinit: () => (init)\n});","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tif (!(moduleId in __webpack_modules__)) {\n\t\tdelete __webpack_module_cache__[moduleId];\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"lib_index_js\":\"6dc5fa8b4a9bc62a809d\",\"style_index_js\":\"c3e72438ed03e9dee0fc\"}[chunkId] + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"kernel-checkpoint:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.S = {};\nvar initPromises = {};\nvar initTokens = {};\n__webpack_require__.I = (name, initScope) => {\n\tif(!initScope) initScope = [];\n\t// handling circular init calls\n\tvar initToken = initTokens[name];\n\tif(!initToken) initToken = initTokens[name] = {};\n\tif(initScope.indexOf(initToken) >= 0) return;\n\tinitScope.push(initToken);\n\t// only runs once\n\tif(initPromises[name]) return initPromises[name];\n\t// creates a new share scope if needed\n\tif(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};\n\t// runs all init snippets from all modules reachable\n\tvar scope = __webpack_require__.S[name];\n\tvar warn = (msg) => {\n\t\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n\t};\n\tvar uniqueName = \"kernel-checkpoint\";\n\tvar register = (name, version, factory, eager) => {\n\t\tvar versions = scope[name] = scope[name] || {};\n\t\tvar activeVersion = versions[version];\n\t\tif(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };\n\t};\n\tvar initExternal = (id) => {\n\t\tvar handleError = (err) => (warn(\"Initialization of sharing external failed: \" + err));\n\t\ttry {\n\t\t\tvar module = __webpack_require__(id);\n\t\t\tif(!module) return;\n\t\t\tvar initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope))\n\t\t\tif(module.then) return promises.push(module.then(initFn, handleError));\n\t\t\tvar initResult = initFn(module);\n\t\t\tif(initResult && initResult.then) return promises.push(initResult['catch'](handleError));\n\t\t} catch(err) { handleError(err); }\n\t}\n\tvar promises = [];\n\tswitch(name) {\n\t\tcase \"default\": {\n\t\t\tregister(\"kernel-checkpoint\", \"0.1.7\", () => (__webpack_require__.e(\"lib_index_js\").then(() => (() => (__webpack_require__(/*! ./lib/index.js */ \"./lib/index.js\"))))));\n\t\t}\n\t\tbreak;\n\t}\n\tif(!promises.length) return initPromises[name] = 1;\n\treturn initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1));\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","var parseVersion = (str) => {\n\t// see webpack/lib/util/semver.js for original code\n\tvar p=p=>{return p.split(\".\").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;\n}\nvar versionLt = (a, b) => {\n\t// see webpack/lib/util/semver.js for original code\n\ta=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r<b.length&&\"u\"!=(typeof b[r])[0];var e=a[r],n=(typeof e)[0];if(r>=b.length)return\"u\"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return\"o\"==n&&\"n\"==f||(\"s\"==f||\"u\"==n);if(\"o\"!=n&&\"u\"!=n&&e!=t)return e<t;r++}\n}\nvar rangeToString = (range) => {\n\t// see webpack/lib/util/semver.js for original code\n\tvar r=range[0],n=\"\";if(1===range.length)return\"*\";if(r+.5){n+=0==r?\">=\":-1==r?\"<\":1==r?\"^\":2==r?\"~\":r>0?\"=\":\"!=\";for(var e=1,a=1;a<range.length;a++){e--,n+=\"u\"==(typeof(t=range[a]))[0]?\"-\":(e>0?\".\":\"\")+(e=2,t)}return n}var g=[];for(a=1;a<range.length;a++){var t=range[a];g.push(0===t?\"not(\"+o()+\")\":1===t?\"(\"+o()+\" || \"+o()+\")\":2===t?g.pop()+\" \"+g.pop():rangeToString(t))}return o();function o(){return g.pop().replace(/^\\((.+)\\)$/,\"$1\")}\n}\nvar satisfy = (range, version) => {\n\t// see webpack/lib/util/semver.js for original code\n\tif(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i<range.length?(typeof range[i])[0]:\"\";if(n>=version.length||\"o\"==(s=(typeof(f=version[n]))[0]))return!a||(\"u\"==g?i>e&&!r:\"\"==g!=r);if(\"u\"==s){if(!a||\"u\"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f<range[i])return!1;f!=range[i]&&(a=!1)}else if(\"s\"!=g&&\"n\"!=g){if(r||i<=e)return!1;a=!1,i--}else{if(i<=e||s<g!=r)return!1;a=!1}else\"s\"!=g&&\"n\"!=g&&(a=!1,i--)}}var t=[],o=t.pop.bind(t);for(n=1;n<range.length;n++){var u=range[n];t.push(1==u?o()|o():2==u?o()&o():u?satisfy(u,version):!o())}return!!o();\n}\nvar exists = (scope, key) => {\n\treturn scope && __webpack_require__.o(scope, key);\n}\nvar get = (entry) => {\n\tentry.loaded = 1;\n\treturn entry.get()\n};\nvar eagerOnly = (versions) => {\n\treturn Object.keys(versions).reduce((filtered, version) => {\n\t\t\tif (versions[version].eager) {\n\t\t\t\tfiltered[version] = versions[version];\n\t\t\t}\n\t\t\treturn filtered;\n\t}, {});\n};\nvar findLatestVersion = (scope, key, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\tvar key = Object.keys(versions).reduce((a, b) => {\n\t\treturn !a || versionLt(a, b) ? b : a;\n\t}, 0);\n\treturn key && versions[key];\n};\nvar findSatisfyingVersion = (scope, key, requiredVersion, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\tvar key = Object.keys(versions).reduce((a, b) => {\n\t\tif (!satisfy(requiredVersion, b)) return a;\n\t\treturn !a || versionLt(a, b) ? b : a;\n\t}, 0);\n\treturn key && versions[key]\n};\nvar findSingletonVersionKey = (scope, key, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\treturn Object.keys(versions).reduce((a, b) => {\n\t\treturn !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;\n\t}, 0);\n};\nvar getInvalidSingletonVersionMessage = (scope, key, version, requiredVersion) => {\n\treturn \"Unsatisfied version \" + version + \" from \" + (version && scope[key][version].from) + \" of shared singleton module \" + key + \" (required \" + rangeToString(requiredVersion) + \")\"\n};\nvar getInvalidVersionMessage = (scope, scopeName, key, requiredVersion, eager) => {\n\tvar versions = scope[key];\n\treturn \"No satisfying version (\" + rangeToString(requiredVersion) + \")\" + (eager ? \" for eager consumption\" : \"\") + \" of shared module \" + key + \" found in shared scope \" + scopeName + \".\\n\" +\n\t\t\"Available versions: \" + Object.keys(versions).map((key) => {\n\t\treturn key + \" from \" + versions[key].from;\n\t}).join(\", \");\n};\nvar fail = (msg) => {\n\tthrow new Error(msg);\n}\nvar failAsNotExist = (scopeName, key) => {\n\treturn fail(\"Shared module \" + key + \" doesn't exist in shared scope \" + scopeName);\n}\nvar warn = /*#__PURE__*/ (msg) => {\n\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n};\nvar init = (fn) => (function(scopeName, key, eager, c, d) {\n\tvar promise = __webpack_require__.I(scopeName);\n\tif (promise && promise.then && !eager) {\n\t\treturn promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], key, false, c, d));\n\t}\n\treturn fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d);\n});\n\nvar useFallback = (scopeName, key, fallback) => {\n\treturn fallback ? fallback() : failAsNotExist(scopeName, key);\n}\nvar load = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\treturn get(findLatestVersion(scope, key, eager));\n});\nvar loadVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);\n\tif (satisfyingVersion) return get(satisfyingVersion);\n\twarn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager))\n\treturn get(findLatestVersion(scope, key, eager));\n});\nvar loadStrictVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);\n\tif (satisfyingVersion) return get(satisfyingVersion);\n\tif (fallback) return fallback();\n\tfail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager));\n});\nvar loadSingleton = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\treturn get(scope[key][version]);\n});\nvar loadSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\tif (!satisfy(requiredVersion, version)) {\n\t\twarn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));\n\t}\n\treturn get(scope[key][version]);\n});\nvar loadStrictSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\tif (!satisfy(requiredVersion, version)) {\n\t\tfail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));\n\t}\n\treturn get(scope[key][version]);\n});\nvar installedModules = {};\nvar moduleToHandlerMapping = {\n\t\"webpack/sharing/consume/default/@jupyterlab/notebook\": () => (loadSingletonVersion(\"default\", \"@jupyterlab/notebook\", false, [1,4,3,6])),\n\t\"webpack/sharing/consume/default/@jupyterlab/apputils\": () => (loadSingletonVersion(\"default\", \"@jupyterlab/apputils\", false, [1,4,4,6])),\n\t\"webpack/sharing/consume/default/@jupyterlab/coreutils\": () => (loadSingletonVersion(\"default\", \"@jupyterlab/coreutils\", false, [1,6,3,6])),\n\t\"webpack/sharing/consume/default/@jupyterlab/services\": () => (loadSingletonVersion(\"default\", \"@jupyterlab/services\", false, [1,7,3,6])),\n\t\"webpack/sharing/consume/default/react\": () => (loadSingletonVersion(\"default\", \"react\", false, [1,18,2,0]))\n};\n// no consumes in initial chunks\nvar chunkMapping = {\n\t\"lib_index_js\": [\n\t\t\"webpack/sharing/consume/default/@jupyterlab/notebook\",\n\t\t\"webpack/sharing/consume/default/@jupyterlab/apputils\",\n\t\t\"webpack/sharing/consume/default/@jupyterlab/coreutils\",\n\t\t\"webpack/sharing/consume/default/@jupyterlab/services\",\n\t\t\"webpack/sharing/consume/default/react\"\n\t]\n};\nvar startedInstallModules = {};\n__webpack_require__.f.consumes = (chunkId, promises) => {\n\tif(__webpack_require__.o(chunkMapping, chunkId)) {\n\t\tchunkMapping[chunkId].forEach((id) => {\n\t\t\tif(__webpack_require__.o(installedModules, id)) return promises.push(installedModules[id]);\n\t\t\tif(!startedInstallModules[id]) {\n\t\t\tvar onFactory = (factory) => {\n\t\t\t\tinstalledModules[id] = 0;\n\t\t\t\t__webpack_require__.m[id] = (module) => {\n\t\t\t\t\tdelete __webpack_require__.c[id];\n\t\t\t\t\tmodule.exports = factory();\n\t\t\t\t}\n\t\t\t};\n\t\t\tstartedInstallModules[id] = true;\n\t\t\tvar onError = (error) => {\n\t\t\t\tdelete installedModules[id];\n\t\t\t\t__webpack_require__.m[id] = (module) => {\n\t\t\t\t\tdelete __webpack_require__.c[id];\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tvar promise = moduleToHandlerMapping[id]();\n\t\t\t\tif(promise.then) {\n\t\t\t\t\tpromises.push(installedModules[id] = promise.then(onFactory)['catch'](onError));\n\t\t\t\t} else onFactory(promise);\n\t\t\t} catch(e) { onError(e); }\n\t\t\t}\n\t\t});\n\t}\n}","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"kernel-checkpoint\": 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkkernel_checkpoint\"] = self[\"webpackChunkkernel_checkpoint\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","","// module cache are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\nvar __webpack_exports__ = __webpack_require__(\"webpack/container/entry/kernel-checkpoint\");\n",""],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"remoteEntry.6588a650b13da58d2e73.js","mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;UCpCD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WClCA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF,E;;;;;WCRA;WACA;WACA;WACA,8BAA8B,8EAA8E;WAC5G,E;;;;;WCJA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC,I;;;;;WCPD,wF;;;;;WCAA;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA,E;;;;;WCxCA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;WCNA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,oJAAoJ;WACpJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI,aAAa;WACjB;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,E;;;;;WC7CA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,kC;;;;;WClBA;WACA;WACA,WAAW,4BAA4B,iBAAiB,EAAE,qEAAqE;WAC/H;WACA;WACA;WACA,qCAAqC,aAAa,EAAE,wDAAwD,2BAA2B,4BAA4B,2BAA2B,+CAA+C,mCAAmC;WAChR;WACA;WACA;WACA,qBAAqB,8BAA8B,SAAS,sDAAsD,gBAAgB,eAAe,KAAK,6DAA6D,SAAS,SAAS,QAAQ,eAAe,KAAK,eAAe,qGAAqG,WAAW,aAAa;WAC7Y;WACA;WACA;WACA,gBAAgB,8BAA8B,qBAAqB,YAAY,sBAAsB,SAAS,iDAAiD,6FAA6F,WAAW,uBAAuB,2BAA2B,wBAAwB,KAAK,oCAAoC,oBAAoB,wBAAwB,oBAAoB,SAAS,KAAK,yBAAyB,KAAK,gCAAgC,yBAAyB,QAAQ,eAAe,KAAK,eAAe,4DAA4D;WACtoB;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE,IAAI;WACN;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;;WAED;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;WACD;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN,KAAK,WAAW;WAChB;WACA,GAAG;WACH;WACA,C;;;;;WCzKA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,iCAAiC;;WAEjC;WACA;WACA;WACA,KAAK;WACL,eAAe;WACf;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,4G;;;;;WCrFA,mC;;;;;UEAA;UACA;UACA;UACA","sources":["webpack://kernel-checkpoint/webpack/container-entry","webpack://kernel-checkpoint/webpack/bootstrap","webpack://kernel-checkpoint/webpack/runtime/compat get default export","webpack://kernel-checkpoint/webpack/runtime/define property getters","webpack://kernel-checkpoint/webpack/runtime/ensure chunk","webpack://kernel-checkpoint/webpack/runtime/get javascript chunk filename","webpack://kernel-checkpoint/webpack/runtime/global","webpack://kernel-checkpoint/webpack/runtime/hasOwnProperty shorthand","webpack://kernel-checkpoint/webpack/runtime/load script","webpack://kernel-checkpoint/webpack/runtime/make namespace object","webpack://kernel-checkpoint/webpack/runtime/sharing","webpack://kernel-checkpoint/webpack/runtime/publicPath","webpack://kernel-checkpoint/webpack/runtime/consumes","webpack://kernel-checkpoint/webpack/runtime/jsonp chunk loading","webpack://kernel-checkpoint/webpack/runtime/nonce","webpack://kernel-checkpoint/webpack/before-startup","webpack://kernel-checkpoint/webpack/startup","webpack://kernel-checkpoint/webpack/after-startup"],"sourcesContent":["var moduleMap = {\n\t\"./index\": () => {\n\t\treturn __webpack_require__.e(\"lib_index_js\").then(() => (() => ((__webpack_require__(/*! ./lib/index.js */ \"./lib/index.js\")))));\n\t},\n\t\"./extension\": () => {\n\t\treturn __webpack_require__.e(\"lib_index_js\").then(() => (() => ((__webpack_require__(/*! ./lib/index.js */ \"./lib/index.js\")))));\n\t},\n\t\"./style\": () => {\n\t\treturn __webpack_require__.e(\"style_index_js\").then(() => (() => ((__webpack_require__(/*! ./style/index.js */ \"./style/index.js\")))));\n\t}\n};\nvar get = (module, getScope) => {\n\t__webpack_require__.R = getScope;\n\tgetScope = (\n\t\t__webpack_require__.o(moduleMap, module)\n\t\t\t? moduleMap[module]()\n\t\t\t: Promise.resolve().then(() => {\n\t\t\t\tthrow new Error('Module \"' + module + '\" does not exist in container.');\n\t\t\t})\n\t);\n\t__webpack_require__.R = undefined;\n\treturn getScope;\n};\nvar init = (shareScope, initScope) => {\n\tif (!__webpack_require__.S) return;\n\tvar name = \"default\"\n\tvar oldScope = __webpack_require__.S[name];\n\tif(oldScope && oldScope !== shareScope) throw new Error(\"Container initialization failed as it has already been initialized with a different share scope\");\n\t__webpack_require__.S[name] = shareScope;\n\treturn __webpack_require__.I(name, initScope);\n};\n\n// This exports getters to disallow modifications\n__webpack_require__.d(exports, {\n\tget: () => (get),\n\tinit: () => (init)\n});","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tif (!(moduleId in __webpack_modules__)) {\n\t\tdelete __webpack_module_cache__[moduleId];\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"lib_index_js\":\"efd15a23ba0b55378c6a\",\"style_index_js\":\"c3e72438ed03e9dee0fc\"}[chunkId] + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"kernel-checkpoint:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.S = {};\nvar initPromises = {};\nvar initTokens = {};\n__webpack_require__.I = (name, initScope) => {\n\tif(!initScope) initScope = [];\n\t// handling circular init calls\n\tvar initToken = initTokens[name];\n\tif(!initToken) initToken = initTokens[name] = {};\n\tif(initScope.indexOf(initToken) >= 0) return;\n\tinitScope.push(initToken);\n\t// only runs once\n\tif(initPromises[name]) return initPromises[name];\n\t// creates a new share scope if needed\n\tif(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};\n\t// runs all init snippets from all modules reachable\n\tvar scope = __webpack_require__.S[name];\n\tvar warn = (msg) => {\n\t\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n\t};\n\tvar uniqueName = \"kernel-checkpoint\";\n\tvar register = (name, version, factory, eager) => {\n\t\tvar versions = scope[name] = scope[name] || {};\n\t\tvar activeVersion = versions[version];\n\t\tif(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };\n\t};\n\tvar initExternal = (id) => {\n\t\tvar handleError = (err) => (warn(\"Initialization of sharing external failed: \" + err));\n\t\ttry {\n\t\t\tvar module = __webpack_require__(id);\n\t\t\tif(!module) return;\n\t\t\tvar initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope))\n\t\t\tif(module.then) return promises.push(module.then(initFn, handleError));\n\t\t\tvar initResult = initFn(module);\n\t\t\tif(initResult && initResult.then) return promises.push(initResult['catch'](handleError));\n\t\t} catch(err) { handleError(err); }\n\t}\n\tvar promises = [];\n\tswitch(name) {\n\t\tcase \"default\": {\n\t\t\tregister(\"kernel-checkpoint\", \"0.1.9\", () => (__webpack_require__.e(\"lib_index_js\").then(() => (() => (__webpack_require__(/*! ./lib/index.js */ \"./lib/index.js\"))))));\n\t\t}\n\t\tbreak;\n\t}\n\tif(!promises.length) return initPromises[name] = 1;\n\treturn initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1));\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","var parseVersion = (str) => {\n\t// see webpack/lib/util/semver.js for original code\n\tvar p=p=>{return p.split(\".\").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;\n}\nvar versionLt = (a, b) => {\n\t// see webpack/lib/util/semver.js for original code\n\ta=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r<b.length&&\"u\"!=(typeof b[r])[0];var e=a[r],n=(typeof e)[0];if(r>=b.length)return\"u\"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return\"o\"==n&&\"n\"==f||(\"s\"==f||\"u\"==n);if(\"o\"!=n&&\"u\"!=n&&e!=t)return e<t;r++}\n}\nvar rangeToString = (range) => {\n\t// see webpack/lib/util/semver.js for original code\n\tvar r=range[0],n=\"\";if(1===range.length)return\"*\";if(r+.5){n+=0==r?\">=\":-1==r?\"<\":1==r?\"^\":2==r?\"~\":r>0?\"=\":\"!=\";for(var e=1,a=1;a<range.length;a++){e--,n+=\"u\"==(typeof(t=range[a]))[0]?\"-\":(e>0?\".\":\"\")+(e=2,t)}return n}var g=[];for(a=1;a<range.length;a++){var t=range[a];g.push(0===t?\"not(\"+o()+\")\":1===t?\"(\"+o()+\" || \"+o()+\")\":2===t?g.pop()+\" \"+g.pop():rangeToString(t))}return o();function o(){return g.pop().replace(/^\\((.+)\\)$/,\"$1\")}\n}\nvar satisfy = (range, version) => {\n\t// see webpack/lib/util/semver.js for original code\n\tif(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i<range.length?(typeof range[i])[0]:\"\";if(n>=version.length||\"o\"==(s=(typeof(f=version[n]))[0]))return!a||(\"u\"==g?i>e&&!r:\"\"==g!=r);if(\"u\"==s){if(!a||\"u\"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f<range[i])return!1;f!=range[i]&&(a=!1)}else if(\"s\"!=g&&\"n\"!=g){if(r||i<=e)return!1;a=!1,i--}else{if(i<=e||s<g!=r)return!1;a=!1}else\"s\"!=g&&\"n\"!=g&&(a=!1,i--)}}var t=[],o=t.pop.bind(t);for(n=1;n<range.length;n++){var u=range[n];t.push(1==u?o()|o():2==u?o()&o():u?satisfy(u,version):!o())}return!!o();\n}\nvar exists = (scope, key) => {\n\treturn scope && __webpack_require__.o(scope, key);\n}\nvar get = (entry) => {\n\tentry.loaded = 1;\n\treturn entry.get()\n};\nvar eagerOnly = (versions) => {\n\treturn Object.keys(versions).reduce((filtered, version) => {\n\t\t\tif (versions[version].eager) {\n\t\t\t\tfiltered[version] = versions[version];\n\t\t\t}\n\t\t\treturn filtered;\n\t}, {});\n};\nvar findLatestVersion = (scope, key, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\tvar key = Object.keys(versions).reduce((a, b) => {\n\t\treturn !a || versionLt(a, b) ? b : a;\n\t}, 0);\n\treturn key && versions[key];\n};\nvar findSatisfyingVersion = (scope, key, requiredVersion, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\tvar key = Object.keys(versions).reduce((a, b) => {\n\t\tif (!satisfy(requiredVersion, b)) return a;\n\t\treturn !a || versionLt(a, b) ? b : a;\n\t}, 0);\n\treturn key && versions[key]\n};\nvar findSingletonVersionKey = (scope, key, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\treturn Object.keys(versions).reduce((a, b) => {\n\t\treturn !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;\n\t}, 0);\n};\nvar getInvalidSingletonVersionMessage = (scope, key, version, requiredVersion) => {\n\treturn \"Unsatisfied version \" + version + \" from \" + (version && scope[key][version].from) + \" of shared singleton module \" + key + \" (required \" + rangeToString(requiredVersion) + \")\"\n};\nvar getInvalidVersionMessage = (scope, scopeName, key, requiredVersion, eager) => {\n\tvar versions = scope[key];\n\treturn \"No satisfying version (\" + rangeToString(requiredVersion) + \")\" + (eager ? \" for eager consumption\" : \"\") + \" of shared module \" + key + \" found in shared scope \" + scopeName + \".\\n\" +\n\t\t\"Available versions: \" + Object.keys(versions).map((key) => {\n\t\treturn key + \" from \" + versions[key].from;\n\t}).join(\", \");\n};\nvar fail = (msg) => {\n\tthrow new Error(msg);\n}\nvar failAsNotExist = (scopeName, key) => {\n\treturn fail(\"Shared module \" + key + \" doesn't exist in shared scope \" + scopeName);\n}\nvar warn = /*#__PURE__*/ (msg) => {\n\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n};\nvar init = (fn) => (function(scopeName, key, eager, c, d) {\n\tvar promise = __webpack_require__.I(scopeName);\n\tif (promise && promise.then && !eager) {\n\t\treturn promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], key, false, c, d));\n\t}\n\treturn fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d);\n});\n\nvar useFallback = (scopeName, key, fallback) => {\n\treturn fallback ? fallback() : failAsNotExist(scopeName, key);\n}\nvar load = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\treturn get(findLatestVersion(scope, key, eager));\n});\nvar loadVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);\n\tif (satisfyingVersion) return get(satisfyingVersion);\n\twarn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager))\n\treturn get(findLatestVersion(scope, key, eager));\n});\nvar loadStrictVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);\n\tif (satisfyingVersion) return get(satisfyingVersion);\n\tif (fallback) return fallback();\n\tfail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager));\n});\nvar loadSingleton = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\treturn get(scope[key][version]);\n});\nvar loadSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\tif (!satisfy(requiredVersion, version)) {\n\t\twarn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));\n\t}\n\treturn get(scope[key][version]);\n});\nvar loadStrictSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\tif (!satisfy(requiredVersion, version)) {\n\t\tfail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));\n\t}\n\treturn get(scope[key][version]);\n});\nvar installedModules = {};\nvar moduleToHandlerMapping = {\n\t\"webpack/sharing/consume/default/@jupyterlab/notebook\": () => (loadSingletonVersion(\"default\", \"@jupyterlab/notebook\", false, [1,4,3,6])),\n\t\"webpack/sharing/consume/default/@jupyterlab/apputils\": () => (loadSingletonVersion(\"default\", \"@jupyterlab/apputils\", false, [1,4,4,6])),\n\t\"webpack/sharing/consume/default/@jupyterlab/coreutils\": () => (loadSingletonVersion(\"default\", \"@jupyterlab/coreutils\", false, [1,6,3,6])),\n\t\"webpack/sharing/consume/default/@jupyterlab/services\": () => (loadSingletonVersion(\"default\", \"@jupyterlab/services\", false, [1,7,3,6])),\n\t\"webpack/sharing/consume/default/react\": () => (loadSingletonVersion(\"default\", \"react\", false, [1,18,2,0]))\n};\n// no consumes in initial chunks\nvar chunkMapping = {\n\t\"lib_index_js\": [\n\t\t\"webpack/sharing/consume/default/@jupyterlab/notebook\",\n\t\t\"webpack/sharing/consume/default/@jupyterlab/apputils\",\n\t\t\"webpack/sharing/consume/default/@jupyterlab/coreutils\",\n\t\t\"webpack/sharing/consume/default/@jupyterlab/services\",\n\t\t\"webpack/sharing/consume/default/react\"\n\t]\n};\nvar startedInstallModules = {};\n__webpack_require__.f.consumes = (chunkId, promises) => {\n\tif(__webpack_require__.o(chunkMapping, chunkId)) {\n\t\tchunkMapping[chunkId].forEach((id) => {\n\t\t\tif(__webpack_require__.o(installedModules, id)) return promises.push(installedModules[id]);\n\t\t\tif(!startedInstallModules[id]) {\n\t\t\tvar onFactory = (factory) => {\n\t\t\t\tinstalledModules[id] = 0;\n\t\t\t\t__webpack_require__.m[id] = (module) => {\n\t\t\t\t\tdelete __webpack_require__.c[id];\n\t\t\t\t\tmodule.exports = factory();\n\t\t\t\t}\n\t\t\t};\n\t\t\tstartedInstallModules[id] = true;\n\t\t\tvar onError = (error) => {\n\t\t\t\tdelete installedModules[id];\n\t\t\t\t__webpack_require__.m[id] = (module) => {\n\t\t\t\t\tdelete __webpack_require__.c[id];\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tvar promise = moduleToHandlerMapping[id]();\n\t\t\t\tif(promise.then) {\n\t\t\t\t\tpromises.push(installedModules[id] = promise.then(onFactory)['catch'](onError));\n\t\t\t\t} else onFactory(promise);\n\t\t\t} catch(e) { onError(e); }\n\t\t\t}\n\t\t});\n\t}\n}","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"kernel-checkpoint\": 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkkernel_checkpoint\"] = self[\"webpackChunkkernel_checkpoint\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","","// module cache are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\nvar __webpack_exports__ = __webpack_require__(\"webpack/container/entry/kernel-checkpoint\");\n",""],"names":[],"sourceRoot":""}
|
|
@@ -24,6 +24,7 @@ export function CheckpointPanel(props: ICheckpointPanelProps): JSX.Element {
|
|
|
24
24
|
kernelId,
|
|
25
25
|
kernelSpecName,
|
|
26
26
|
notebookName,
|
|
27
|
+
sessionId,
|
|
27
28
|
onRestore,
|
|
28
29
|
onBeforeCreate
|
|
29
30
|
} = props;
|
|
@@ -98,6 +99,7 @@ export function CheckpointPanel(props: ICheckpointPanelProps): JSX.Element {
|
|
|
98
99
|
kernelId,
|
|
99
100
|
kernelName: kernelSpecName,
|
|
100
101
|
notebookName,
|
|
102
|
+
sessionId,
|
|
101
103
|
busyCells
|
|
102
104
|
}
|
|
103
105
|
});
|
|
@@ -166,8 +168,12 @@ export function CheckpointPanel(props: ICheckpointPanelProps): JSX.Element {
|
|
|
166
168
|
if (!cpKernelId) {
|
|
167
169
|
throw new Error('No kernel ID found in checkpoint metadata');
|
|
168
170
|
}
|
|
171
|
+
const cpSessionId = detail.metadata?.sessionId ?? '';
|
|
172
|
+
if (!cpSessionId) {
|
|
173
|
+
throw new Error('No session ID found in checkpoint metadata');
|
|
174
|
+
}
|
|
169
175
|
const busyCells = detail.metadata?.busyCells ?? [];
|
|
170
|
-
await onRestore(checkpointName, checkpointFile.storagePath, checkpointFile.containerName, cpKernelId, busyCells);
|
|
176
|
+
await onRestore(checkpointName, checkpointFile.storagePath, checkpointFile.containerName, cpKernelId, cpSessionId, busyCells);
|
|
171
177
|
setFlash({
|
|
172
178
|
type: 'success',
|
|
173
179
|
text: `Kernel restored from "${checkpointName}". The kernel is restarting.`
|
|
@@ -124,6 +124,7 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
124
124
|
const kernelId = kernel.id;
|
|
125
125
|
const kernelSpecName = kernel.name || 'python_kubernetes';
|
|
126
126
|
const notebookName = panel.title.label || '';
|
|
127
|
+
const sessionId = sessionContext.session?.id || '';
|
|
127
128
|
|
|
128
129
|
// ── Restore callback ─────────────────────────────────────────
|
|
129
130
|
//
|
|
@@ -137,6 +138,7 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
137
138
|
checkpointFilePath: string,
|
|
138
139
|
containerName: string,
|
|
139
140
|
cpKernelId: string,
|
|
141
|
+
cpSessionId: string,
|
|
140
142
|
busyCells: IBusyCellRecord[]
|
|
141
143
|
): Promise<void> => {
|
|
142
144
|
const settings = ServerConnection.makeSettings();
|
|
@@ -153,7 +155,8 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
153
155
|
KERNEL_CHECKPOINT_NAME: checkpointName,
|
|
154
156
|
KERNEL_CHECKPOINT_FILE_PATH: checkpointFilePath,
|
|
155
157
|
KERNEL_CHECKPOINT_CONTAINER_NAME: containerName,
|
|
156
|
-
KERNEL_ID: cpKernelId
|
|
158
|
+
// KERNEL_ID: cpKernelId,
|
|
159
|
+
KERNEL_SESSION_ID: cpSessionId
|
|
157
160
|
}
|
|
158
161
|
})
|
|
159
162
|
},
|
|
@@ -191,6 +194,7 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
191
194
|
kernelId,
|
|
192
195
|
kernelSpecName,
|
|
193
196
|
notebookName,
|
|
197
|
+
sessionId,
|
|
194
198
|
onRestore,
|
|
195
199
|
onBeforeCreate: () => {
|
|
196
200
|
const cellTracker = trackerMap.get(panel.id);
|
|
@@ -40,6 +40,7 @@ export interface ICheckpointMetadata {
|
|
|
40
40
|
kernelId: string;
|
|
41
41
|
kernelName: string;
|
|
42
42
|
notebookName: string;
|
|
43
|
+
sessionId: string;
|
|
43
44
|
busyCells?: IBusyCellRecord[];
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -81,11 +82,13 @@ export interface ICheckpointPanelProps {
|
|
|
81
82
|
kernelId: string;
|
|
82
83
|
kernelSpecName: string;
|
|
83
84
|
notebookName: string;
|
|
85
|
+
sessionId: string;
|
|
84
86
|
onRestore: (
|
|
85
87
|
checkpointName: string,
|
|
86
88
|
checkpointFilePath: string,
|
|
87
89
|
containerName: string,
|
|
88
90
|
kernelId: string,
|
|
91
|
+
sessionId: string,
|
|
89
92
|
busyCells: IBusyCellRecord[]
|
|
90
93
|
) => Promise<void>;
|
|
91
94
|
onBeforeCreate?: () => IBusyCellRecord[];
|
kernel_checkpoint-0.1.8/4
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
Requirement already satisfied: jupyter in ./.venv/lib/python3.13/site-packages (1.1.1)
|
|
2
|
-
Requirement already satisfied: notebook in ./.venv/lib/python3.13/site-packages (from jupyter) (7.5.5)
|
|
3
|
-
Requirement already satisfied: jupyter-console in ./.venv/lib/python3.13/site-packages (from jupyter) (6.6.3)
|
|
4
|
-
Requirement already satisfied: nbconvert in ./.venv/lib/python3.13/site-packages (from jupyter) (7.17.1)
|
|
5
|
-
Requirement already satisfied: ipykernel in ./.venv/lib/python3.13/site-packages (from jupyter) (7.2.0)
|
|
6
|
-
Requirement already satisfied: ipywidgets in ./.venv/lib/python3.13/site-packages (from jupyter) (8.1.8)
|
|
7
|
-
Requirement already satisfied: jupyterlab in ./.venv/lib/python3.13/site-packages (from jupyter) (4.5.6)
|
|
8
|
-
Requirement already satisfied: comm>=0.1.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (0.2.3)
|
|
9
|
-
Requirement already satisfied: debugpy>=1.6.5 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (1.8.20)
|
|
10
|
-
Requirement already satisfied: ipython>=7.23.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (9.12.0)
|
|
11
|
-
Requirement already satisfied: jupyter-client>=8.8.0 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (8.8.0)
|
|
12
|
-
Requirement already satisfied: jupyter-core!=6.0.*,>=5.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (5.9.1)
|
|
13
|
-
Requirement already satisfied: matplotlib-inline>=0.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (0.2.1)
|
|
14
|
-
Requirement already satisfied: nest-asyncio>=1.4 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (1.6.0)
|
|
15
|
-
Requirement already satisfied: packaging>=22 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (26.0)
|
|
16
|
-
Requirement already satisfied: psutil>=5.7 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (7.2.2)
|
|
17
|
-
Requirement already satisfied: pyzmq>=25 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (27.1.0)
|
|
18
|
-
Requirement already satisfied: tornado>=6.4.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (6.5.5)
|
|
19
|
-
Requirement already satisfied: traitlets>=5.4.0 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (5.14.3)
|
|
20
|
-
Requirement already satisfied: decorator>=5.1.0 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (5.2.1)
|
|
21
|
-
Requirement already satisfied: ipython-pygments-lexers>=1.0.0 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (1.1.1)
|
|
22
|
-
Requirement already satisfied: jedi>=0.18.2 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (0.19.2)
|
|
23
|
-
Requirement already satisfied: pexpect>4.6 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (4.9.0)
|
|
24
|
-
Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (3.0.52)
|
|
25
|
-
Requirement already satisfied: pygments>=2.14.0 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (2.20.0)
|
|
26
|
-
Requirement already satisfied: stack_data>=0.6.0 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (0.6.3)
|
|
27
|
-
Requirement already satisfied: wcwidth in ./.venv/lib/python3.13/site-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=7.23.1->ipykernel->jupyter) (0.6.0)
|
|
28
|
-
Requirement already satisfied: parso<0.9.0,>=0.8.4 in ./.venv/lib/python3.13/site-packages (from jedi>=0.18.2->ipython>=7.23.1->ipykernel->jupyter) (0.8.6)
|
|
29
|
-
Requirement already satisfied: python-dateutil>=2.8.2 in ./.venv/lib/python3.13/site-packages (from jupyter-client>=8.8.0->ipykernel->jupyter) (2.9.0.post0)
|
|
30
|
-
Requirement already satisfied: platformdirs>=2.5 in ./.venv/lib/python3.13/site-packages (from jupyter-core!=6.0.*,>=5.1->ipykernel->jupyter) (4.9.6)
|
|
31
|
-
Requirement already satisfied: ptyprocess>=0.5 in ./.venv/lib/python3.13/site-packages (from pexpect>4.6->ipython>=7.23.1->ipykernel->jupyter) (0.7.0)
|
|
32
|
-
Requirement already satisfied: six>=1.5 in ./.venv/lib/python3.13/site-packages (from python-dateutil>=2.8.2->jupyter-client>=8.8.0->ipykernel->jupyter) (1.17.0)
|
|
33
|
-
Requirement already satisfied: executing>=1.2.0 in ./.venv/lib/python3.13/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->jupyter) (2.2.1)
|
|
34
|
-
Requirement already satisfied: asttokens>=2.1.0 in ./.venv/lib/python3.13/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->jupyter) (3.0.1)
|
|
35
|
-
Requirement already satisfied: pure-eval in ./.venv/lib/python3.13/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->jupyter) (0.2.3)
|
|
36
|
-
Requirement already satisfied: widgetsnbextension~=4.0.14 in ./.venv/lib/python3.13/site-packages (from ipywidgets->jupyter) (4.0.15)
|
|
37
|
-
Requirement already satisfied: jupyterlab_widgets~=3.0.15 in ./.venv/lib/python3.13/site-packages (from ipywidgets->jupyter) (3.0.16)
|
|
38
|
-
Requirement already satisfied: async-lru>=1.0.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (2.3.0)
|
|
39
|
-
Requirement already satisfied: httpx<1,>=0.25.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (0.28.1)
|
|
40
|
-
Requirement already satisfied: jinja2>=3.0.3 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (3.1.6)
|
|
41
|
-
Requirement already satisfied: jupyter-lsp>=2.0.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (2.3.1)
|
|
42
|
-
Requirement already satisfied: jupyter-server<3,>=2.4.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (2.17.0)
|
|
43
|
-
Requirement already satisfied: jupyterlab-server<3,>=2.28.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (2.28.0)
|
|
44
|
-
Requirement already satisfied: notebook-shim>=0.2 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (0.2.4)
|
|
45
|
-
Requirement already satisfied: setuptools>=41.1.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (82.0.1)
|
|
46
|
-
Requirement already satisfied: anyio in ./.venv/lib/python3.13/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter) (4.13.0)
|
|
47
|
-
Requirement already satisfied: certifi in ./.venv/lib/python3.13/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter) (2026.2.25)
|
|
48
|
-
Requirement already satisfied: httpcore==1.* in ./.venv/lib/python3.13/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter) (1.0.9)
|
|
49
|
-
Requirement already satisfied: idna in ./.venv/lib/python3.13/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter) (3.11)
|
|
50
|
-
Requirement already satisfied: h11>=0.16 in ./.venv/lib/python3.13/site-packages (from httpcore==1.*->httpx<1,>=0.25.0->jupyterlab->jupyter) (0.16.0)
|
|
51
|
-
Requirement already satisfied: argon2-cffi>=21.1 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (25.1.0)
|
|
52
|
-
Requirement already satisfied: jupyter-events>=0.11.0 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.12.0)
|
|
53
|
-
Requirement already satisfied: jupyter-server-terminals>=0.4.4 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.5.4)
|
|
54
|
-
Requirement already satisfied: nbformat>=5.3.0 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (5.10.4)
|
|
55
|
-
Requirement already satisfied: prometheus-client>=0.9 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.24.1)
|
|
56
|
-
Requirement already satisfied: send2trash>=1.8.2 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2.1.0)
|
|
57
|
-
Requirement already satisfied: terminado>=0.8.3 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.18.1)
|
|
58
|
-
Requirement already satisfied: websocket-client>=1.7 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.9.0)
|
|
59
|
-
Requirement already satisfied: babel>=2.10 in ./.venv/lib/python3.13/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (2.18.0)
|
|
60
|
-
Requirement already satisfied: json5>=0.9.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (0.14.0)
|
|
61
|
-
Requirement already satisfied: jsonschema>=4.18.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (4.26.0)
|
|
62
|
-
Requirement already satisfied: requests>=2.31 in ./.venv/lib/python3.13/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (2.33.1)
|
|
63
|
-
Requirement already satisfied: argon2-cffi-bindings in ./.venv/lib/python3.13/site-packages (from argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (25.1.0)
|
|
64
|
-
Requirement already satisfied: MarkupSafe>=2.0 in ./.venv/lib/python3.13/site-packages (from jinja2>=3.0.3->jupyterlab->jupyter) (3.0.3)
|
|
65
|
-
Requirement already satisfied: attrs>=22.2.0 in ./.venv/lib/python3.13/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (26.1.0)
|
|
66
|
-
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in ./.venv/lib/python3.13/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (2025.9.1)
|
|
67
|
-
Requirement already satisfied: referencing>=0.28.4 in ./.venv/lib/python3.13/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (0.37.0)
|
|
68
|
-
Requirement already satisfied: rpds-py>=0.25.0 in ./.venv/lib/python3.13/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (0.30.0)
|
|
69
|
-
Requirement already satisfied: python-json-logger>=2.0.4 in ./.venv/lib/python3.13/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (4.1.0)
|
|
70
|
-
Requirement already satisfied: pyyaml>=5.3 in ./.venv/lib/python3.13/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (6.0.3)
|
|
71
|
-
Requirement already satisfied: rfc3339-validator in ./.venv/lib/python3.13/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.1.4)
|
|
72
|
-
Requirement already satisfied: rfc3986-validator>=0.1.1 in ./.venv/lib/python3.13/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.1.1)
|
|
73
|
-
Requirement already satisfied: fqdn in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.5.1)
|
|
74
|
-
Requirement already satisfied: isoduration in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (20.11.0)
|
|
75
|
-
Requirement already satisfied: jsonpointer>1.13 in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (3.1.1)
|
|
76
|
-
Requirement already satisfied: rfc3987-syntax>=1.1.0 in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.1.0)
|
|
77
|
-
Requirement already satisfied: uri-template in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.3.0)
|
|
78
|
-
Requirement already satisfied: webcolors>=24.6.0 in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (25.10.0)
|
|
79
|
-
Requirement already satisfied: beautifulsoup4 in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (4.14.3)
|
|
80
|
-
Requirement already satisfied: bleach!=5.0.0 in ./.venv/lib/python3.13/site-packages (from bleach[css]!=5.0.0->nbconvert->jupyter) (6.3.0)
|
|
81
|
-
Requirement already satisfied: defusedxml in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (0.7.1)
|
|
82
|
-
Requirement already satisfied: jupyterlab-pygments in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (0.3.0)
|
|
83
|
-
Requirement already satisfied: mistune<4,>=2.0.3 in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (3.2.0)
|
|
84
|
-
Requirement already satisfied: nbclient>=0.5.0 in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (0.10.4)
|
|
85
|
-
Requirement already satisfied: pandocfilters>=1.4.1 in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (1.5.1)
|
|
86
|
-
Requirement already satisfied: webencodings in ./.venv/lib/python3.13/site-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert->jupyter) (0.5.1)
|
|
87
|
-
Requirement already satisfied: tinycss2<1.5,>=1.1.0 in ./.venv/lib/python3.13/site-packages (from bleach[css]!=5.0.0->nbconvert->jupyter) (1.4.0)
|
|
88
|
-
Requirement already satisfied: fastjsonschema>=2.15 in ./.venv/lib/python3.13/site-packages (from nbformat>=5.3.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2.21.2)
|
|
89
|
-
Requirement already satisfied: charset_normalizer<4,>=2 in ./.venv/lib/python3.13/site-packages (from requests>=2.31->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (3.4.7)
|
|
90
|
-
Requirement already satisfied: urllib3<3,>=1.26 in ./.venv/lib/python3.13/site-packages (from requests>=2.31->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (2.6.3)
|
|
91
|
-
Requirement already satisfied: lark>=1.2.2 in ./.venv/lib/python3.13/site-packages (from rfc3987-syntax>=1.1.0->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.3.1)
|
|
92
|
-
Requirement already satisfied: cffi>=1.0.1 in ./.venv/lib/python3.13/site-packages (from argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2.0.0)
|
|
93
|
-
Requirement already satisfied: pycparser in ./.venv/lib/python3.13/site-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (3.0)
|
|
94
|
-
Requirement already satisfied: soupsieve>=1.6.1 in ./.venv/lib/python3.13/site-packages (from beautifulsoup4->nbconvert->jupyter) (2.8.3)
|
|
95
|
-
Requirement already satisfied: typing-extensions>=4.0.0 in ./.venv/lib/python3.13/site-packages (from beautifulsoup4->nbconvert->jupyter) (4.15.0)
|
|
96
|
-
Requirement already satisfied: arrow>=0.15.0 in ./.venv/lib/python3.13/site-packages (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.4.0)
|
|
97
|
-
Requirement already satisfied: tzdata in ./.venv/lib/python3.13/site-packages (from arrow>=0.15.0->isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2026.1)
|
kernel_checkpoint-0.1.8/=4
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
Requirement already satisfied: jupyter in ./.venv/lib/python3.13/site-packages (1.1.1)
|
|
2
|
-
Requirement already satisfied: notebook in ./.venv/lib/python3.13/site-packages (from jupyter) (7.5.5)
|
|
3
|
-
Requirement already satisfied: jupyter-console in ./.venv/lib/python3.13/site-packages (from jupyter) (6.6.3)
|
|
4
|
-
Requirement already satisfied: nbconvert in ./.venv/lib/python3.13/site-packages (from jupyter) (7.17.1)
|
|
5
|
-
Requirement already satisfied: ipykernel in ./.venv/lib/python3.13/site-packages (from jupyter) (7.2.0)
|
|
6
|
-
Requirement already satisfied: ipywidgets in ./.venv/lib/python3.13/site-packages (from jupyter) (8.1.8)
|
|
7
|
-
Requirement already satisfied: jupyterlab in ./.venv/lib/python3.13/site-packages (from jupyter) (4.5.6)
|
|
8
|
-
Requirement already satisfied: comm>=0.1.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (0.2.3)
|
|
9
|
-
Requirement already satisfied: debugpy>=1.6.5 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (1.8.20)
|
|
10
|
-
Requirement already satisfied: ipython>=7.23.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (9.12.0)
|
|
11
|
-
Requirement already satisfied: jupyter-client>=8.8.0 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (8.8.0)
|
|
12
|
-
Requirement already satisfied: jupyter-core!=6.0.*,>=5.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (5.9.1)
|
|
13
|
-
Requirement already satisfied: matplotlib-inline>=0.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (0.2.1)
|
|
14
|
-
Requirement already satisfied: nest-asyncio>=1.4 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (1.6.0)
|
|
15
|
-
Requirement already satisfied: packaging>=22 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (26.0)
|
|
16
|
-
Requirement already satisfied: psutil>=5.7 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (7.2.2)
|
|
17
|
-
Requirement already satisfied: pyzmq>=25 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (27.1.0)
|
|
18
|
-
Requirement already satisfied: tornado>=6.4.1 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (6.5.5)
|
|
19
|
-
Requirement already satisfied: traitlets>=5.4.0 in ./.venv/lib/python3.13/site-packages (from ipykernel->jupyter) (5.14.3)
|
|
20
|
-
Requirement already satisfied: decorator>=5.1.0 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (5.2.1)
|
|
21
|
-
Requirement already satisfied: ipython-pygments-lexers>=1.0.0 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (1.1.1)
|
|
22
|
-
Requirement already satisfied: jedi>=0.18.2 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (0.19.2)
|
|
23
|
-
Requirement already satisfied: pexpect>4.6 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (4.9.0)
|
|
24
|
-
Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (3.0.52)
|
|
25
|
-
Requirement already satisfied: pygments>=2.14.0 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (2.20.0)
|
|
26
|
-
Requirement already satisfied: stack_data>=0.6.0 in ./.venv/lib/python3.13/site-packages (from ipython>=7.23.1->ipykernel->jupyter) (0.6.3)
|
|
27
|
-
Requirement already satisfied: wcwidth in ./.venv/lib/python3.13/site-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=7.23.1->ipykernel->jupyter) (0.6.0)
|
|
28
|
-
Requirement already satisfied: parso<0.9.0,>=0.8.4 in ./.venv/lib/python3.13/site-packages (from jedi>=0.18.2->ipython>=7.23.1->ipykernel->jupyter) (0.8.6)
|
|
29
|
-
Requirement already satisfied: python-dateutil>=2.8.2 in ./.venv/lib/python3.13/site-packages (from jupyter-client>=8.8.0->ipykernel->jupyter) (2.9.0.post0)
|
|
30
|
-
Requirement already satisfied: platformdirs>=2.5 in ./.venv/lib/python3.13/site-packages (from jupyter-core!=6.0.*,>=5.1->ipykernel->jupyter) (4.9.6)
|
|
31
|
-
Requirement already satisfied: ptyprocess>=0.5 in ./.venv/lib/python3.13/site-packages (from pexpect>4.6->ipython>=7.23.1->ipykernel->jupyter) (0.7.0)
|
|
32
|
-
Requirement already satisfied: six>=1.5 in ./.venv/lib/python3.13/site-packages (from python-dateutil>=2.8.2->jupyter-client>=8.8.0->ipykernel->jupyter) (1.17.0)
|
|
33
|
-
Requirement already satisfied: executing>=1.2.0 in ./.venv/lib/python3.13/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->jupyter) (2.2.1)
|
|
34
|
-
Requirement already satisfied: asttokens>=2.1.0 in ./.venv/lib/python3.13/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->jupyter) (3.0.1)
|
|
35
|
-
Requirement already satisfied: pure-eval in ./.venv/lib/python3.13/site-packages (from stack_data>=0.6.0->ipython>=7.23.1->ipykernel->jupyter) (0.2.3)
|
|
36
|
-
Requirement already satisfied: widgetsnbextension~=4.0.14 in ./.venv/lib/python3.13/site-packages (from ipywidgets->jupyter) (4.0.15)
|
|
37
|
-
Requirement already satisfied: jupyterlab_widgets~=3.0.15 in ./.venv/lib/python3.13/site-packages (from ipywidgets->jupyter) (3.0.16)
|
|
38
|
-
Requirement already satisfied: async-lru>=1.0.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (2.3.0)
|
|
39
|
-
Requirement already satisfied: httpx<1,>=0.25.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (0.28.1)
|
|
40
|
-
Requirement already satisfied: jinja2>=3.0.3 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (3.1.6)
|
|
41
|
-
Requirement already satisfied: jupyter-lsp>=2.0.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (2.3.1)
|
|
42
|
-
Requirement already satisfied: jupyter-server<3,>=2.4.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (2.17.0)
|
|
43
|
-
Requirement already satisfied: jupyterlab-server<3,>=2.28.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (2.28.0)
|
|
44
|
-
Requirement already satisfied: notebook-shim>=0.2 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (0.2.4)
|
|
45
|
-
Requirement already satisfied: setuptools>=41.1.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab->jupyter) (82.0.1)
|
|
46
|
-
Requirement already satisfied: anyio in ./.venv/lib/python3.13/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter) (4.13.0)
|
|
47
|
-
Requirement already satisfied: certifi in ./.venv/lib/python3.13/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter) (2026.2.25)
|
|
48
|
-
Requirement already satisfied: httpcore==1.* in ./.venv/lib/python3.13/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter) (1.0.9)
|
|
49
|
-
Requirement already satisfied: idna in ./.venv/lib/python3.13/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter) (3.11)
|
|
50
|
-
Requirement already satisfied: h11>=0.16 in ./.venv/lib/python3.13/site-packages (from httpcore==1.*->httpx<1,>=0.25.0->jupyterlab->jupyter) (0.16.0)
|
|
51
|
-
Requirement already satisfied: argon2-cffi>=21.1 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (25.1.0)
|
|
52
|
-
Requirement already satisfied: jupyter-events>=0.11.0 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.12.0)
|
|
53
|
-
Requirement already satisfied: jupyter-server-terminals>=0.4.4 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.5.4)
|
|
54
|
-
Requirement already satisfied: nbformat>=5.3.0 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (5.10.4)
|
|
55
|
-
Requirement already satisfied: prometheus-client>=0.9 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.24.1)
|
|
56
|
-
Requirement already satisfied: send2trash>=1.8.2 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2.1.0)
|
|
57
|
-
Requirement already satisfied: terminado>=0.8.3 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.18.1)
|
|
58
|
-
Requirement already satisfied: websocket-client>=1.7 in ./.venv/lib/python3.13/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.9.0)
|
|
59
|
-
Requirement already satisfied: babel>=2.10 in ./.venv/lib/python3.13/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (2.18.0)
|
|
60
|
-
Requirement already satisfied: json5>=0.9.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (0.14.0)
|
|
61
|
-
Requirement already satisfied: jsonschema>=4.18.0 in ./.venv/lib/python3.13/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (4.26.0)
|
|
62
|
-
Requirement already satisfied: requests>=2.31 in ./.venv/lib/python3.13/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (2.33.1)
|
|
63
|
-
Requirement already satisfied: argon2-cffi-bindings in ./.venv/lib/python3.13/site-packages (from argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (25.1.0)
|
|
64
|
-
Requirement already satisfied: MarkupSafe>=2.0 in ./.venv/lib/python3.13/site-packages (from jinja2>=3.0.3->jupyterlab->jupyter) (3.0.3)
|
|
65
|
-
Requirement already satisfied: attrs>=22.2.0 in ./.venv/lib/python3.13/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (26.1.0)
|
|
66
|
-
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in ./.venv/lib/python3.13/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (2025.9.1)
|
|
67
|
-
Requirement already satisfied: referencing>=0.28.4 in ./.venv/lib/python3.13/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (0.37.0)
|
|
68
|
-
Requirement already satisfied: rpds-py>=0.25.0 in ./.venv/lib/python3.13/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (0.30.0)
|
|
69
|
-
Requirement already satisfied: python-json-logger>=2.0.4 in ./.venv/lib/python3.13/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (4.1.0)
|
|
70
|
-
Requirement already satisfied: pyyaml>=5.3 in ./.venv/lib/python3.13/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (6.0.3)
|
|
71
|
-
Requirement already satisfied: rfc3339-validator in ./.venv/lib/python3.13/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.1.4)
|
|
72
|
-
Requirement already satisfied: rfc3986-validator>=0.1.1 in ./.venv/lib/python3.13/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.1.1)
|
|
73
|
-
Requirement already satisfied: fqdn in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.5.1)
|
|
74
|
-
Requirement already satisfied: isoduration in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (20.11.0)
|
|
75
|
-
Requirement already satisfied: jsonpointer>1.13 in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (3.1.1)
|
|
76
|
-
Requirement already satisfied: rfc3987-syntax>=1.1.0 in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.1.0)
|
|
77
|
-
Requirement already satisfied: uri-template in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.3.0)
|
|
78
|
-
Requirement already satisfied: webcolors>=24.6.0 in ./.venv/lib/python3.13/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (25.10.0)
|
|
79
|
-
Requirement already satisfied: beautifulsoup4 in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (4.14.3)
|
|
80
|
-
Requirement already satisfied: bleach!=5.0.0 in ./.venv/lib/python3.13/site-packages (from bleach[css]!=5.0.0->nbconvert->jupyter) (6.3.0)
|
|
81
|
-
Requirement already satisfied: defusedxml in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (0.7.1)
|
|
82
|
-
Requirement already satisfied: jupyterlab-pygments in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (0.3.0)
|
|
83
|
-
Requirement already satisfied: mistune<4,>=2.0.3 in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (3.2.0)
|
|
84
|
-
Requirement already satisfied: nbclient>=0.5.0 in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (0.10.4)
|
|
85
|
-
Requirement already satisfied: pandocfilters>=1.4.1 in ./.venv/lib/python3.13/site-packages (from nbconvert->jupyter) (1.5.1)
|
|
86
|
-
Requirement already satisfied: webencodings in ./.venv/lib/python3.13/site-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert->jupyter) (0.5.1)
|
|
87
|
-
Requirement already satisfied: tinycss2<1.5,>=1.1.0 in ./.venv/lib/python3.13/site-packages (from bleach[css]!=5.0.0->nbconvert->jupyter) (1.4.0)
|
|
88
|
-
Requirement already satisfied: fastjsonschema>=2.15 in ./.venv/lib/python3.13/site-packages (from nbformat>=5.3.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2.21.2)
|
|
89
|
-
Requirement already satisfied: charset_normalizer<4,>=2 in ./.venv/lib/python3.13/site-packages (from requests>=2.31->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (3.4.7)
|
|
90
|
-
Requirement already satisfied: urllib3<3,>=1.26 in ./.venv/lib/python3.13/site-packages (from requests>=2.31->jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter) (2.6.3)
|
|
91
|
-
Requirement already satisfied: lark>=1.2.2 in ./.venv/lib/python3.13/site-packages (from rfc3987-syntax>=1.1.0->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.3.1)
|
|
92
|
-
Requirement already satisfied: cffi>=1.0.1 in ./.venv/lib/python3.13/site-packages (from argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2.0.0)
|
|
93
|
-
Requirement already satisfied: pycparser in ./.venv/lib/python3.13/site-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (3.0)
|
|
94
|
-
Requirement already satisfied: soupsieve>=1.6.1 in ./.venv/lib/python3.13/site-packages (from beautifulsoup4->nbconvert->jupyter) (2.8.3)
|
|
95
|
-
Requirement already satisfied: typing-extensions>=4.0.0 in ./.venv/lib/python3.13/site-packages (from beautifulsoup4->nbconvert->jupyter) (4.15.0)
|
|
96
|
-
Requirement already satisfied: arrow>=0.15.0 in ./.venv/lib/python3.13/site-packages (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.4.0)
|
|
97
|
-
Requirement already satisfied: tzdata in ./.venv/lib/python3.13/site-packages (from arrow>=0.15.0->isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2026.1)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lib_index_js.6dc5fa8b4a9bc62a809d.js","mappings":"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","sources":["webpack://kernel-checkpoint/./src/api.ts","webpack://kernel-checkpoint/./src/checkpoint-panel.tsx","webpack://kernel-checkpoint/./src/index.ts","webpack://kernel-checkpoint/./src/restore-handler.ts"],"sourcesContent":["import { URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport {\n ICheckpointConfig,\n ICheckpointListResponse,\n ICheckpoint,\n ICreateCheckpointRequest\n} from './types';\n\nconst API_NAMESPACE = 'kernel-checkpoint';\n\nfunction makeRequest(\n endpoint: string,\n init: RequestInit = {}\n): Promise<Response> {\n const settings = ServerConnection.makeSettings();\n const url = URLExt.join(settings.baseUrl, API_NAMESPACE, endpoint);\n return ServerConnection.makeRequest(url, init, settings);\n}\n\nfunction jsonInit(method: string, data: any): RequestInit {\n return {\n method,\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data)\n };\n}\n\nasync function handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n let detail = response.statusText;\n try {\n const body = await response.json();\n detail = body.message || body.error || JSON.stringify(body);\n } catch {\n // use statusText\n }\n throw new Error(detail);\n }\n return response.json();\n}\n\nexport namespace CheckpointAPI {\n export async function getConfig(): Promise<ICheckpointConfig> {\n const resp = await makeRequest('config');\n return handleResponse<ICheckpointConfig>(resp);\n }\n\n export async function listCheckpoints(\n namespace: string\n ): Promise<ICheckpointListResponse> {\n const resp = await makeRequest(\n `checkpoints?namespace=${encodeURIComponent(namespace)}`\n );\n return handleResponse<ICheckpointListResponse>(resp);\n }\n\n export async function getCheckpoint(\n namespace: string,\n name: string\n ): Promise<ICheckpoint> {\n const resp = await makeRequest(\n `checkpoints/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`\n );\n return handleResponse<ICheckpoint>(resp);\n }\n\n export async function createCheckpoint(\n request: ICreateCheckpointRequest\n ): Promise<ICheckpoint> {\n const resp = await makeRequest(\n 'checkpoints',\n jsonInit('POST', request)\n );\n return handleResponse<ICheckpoint>(resp);\n }\n\n export async function deleteCheckpoint(\n namespace: string,\n name: string\n ): Promise<void> {\n const resp = await makeRequest(\n `checkpoints/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`,\n { method: 'DELETE' }\n );\n if (!resp.ok) {\n let detail = resp.statusText;\n try {\n const body = await resp.json();\n detail = body.message || body.error || JSON.stringify(body);\n } catch {\n // use statusText\n }\n throw new Error(detail);\n }\n }\n\n export async function updateCheckpoint(\n namespace: string,\n name: string,\n data: Record<string, any>\n ): Promise<ICheckpoint> {\n const resp = await makeRequest(\n `checkpoints/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`,\n jsonInit('PUT', data)\n );\n return handleResponse<ICheckpoint>(resp);\n }\n}\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { ICheckpoint, ICheckpointPanelProps } from './types';\nimport { CheckpointAPI } from './api';\n\nconst CHECKPOINT_REFRESH_INTERVAL = 3;\n\nfunction mapPhaseDisplay(phase: string): string {\n return phase === 'Completed' ? 'Ready' : 'Pending';\n}\n\nfunction PhaseIndicator({ phase }: { phase: string }): JSX.Element {\n const display = mapPhaseDisplay(phase);\n const cls = display.toLowerCase().replace(/\\s+/g, '-');\n return <span className={`kc-phase kc-phase-${cls}`}>{display}</span>;\n}\n\nfunction formatDate(iso: string): string {\n return new Date(iso).toLocaleString();\n}\n\nexport function CheckpointPanel(props: ICheckpointPanelProps): JSX.Element {\n const {\n namespace,\n kernelId,\n kernelSpecName,\n notebookName,\n onRestore,\n onBeforeCreate\n } = props;\n\n const [checkpoints, setCheckpoints] = useState<ICheckpoint[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const [showCreateForm, setShowCreateForm] = useState(false);\n const [newName, setNewName] = useState('');\n const [creating, setCreating] = useState(false);\n\n const [restoring, setRestoring] = useState<string | null>(null);\n const [expandedDetail, setExpandedDetail] = useState<string | null>(null);\n const [detailData, setDetailData] = useState<ICheckpoint | null>(null);\n\n const [renamingName, setRenamingName] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState('');\n\n const [flash, setFlash] = useState<{\n type: 'success' | 'error';\n text: string;\n } | null>(null);\n\n const [confirmDelete, setConfirmDelete] = useState<string | null>(null);\n const [confirmRestore, setConfirmRestore] = useState<string | null>(null);\n\n /* ------------------------------------------------------------------ */\n /* Data fetching */\n /* ------------------------------------------------------------------ */\n\n const fetchCheckpoints = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await CheckpointAPI.listCheckpoints(namespace);\n setCheckpoints(result.items ?? []);\n } catch (err: any) {\n setError(err.message ?? 'Failed to load checkpoints');\n } finally {\n setLoading(false);\n }\n }, [namespace]);\n\n useEffect(() => {\n fetchCheckpoints();\n }, [fetchCheckpoints]);\n\n useEffect(() => {\n const id = setInterval(fetchCheckpoints, CHECKPOINT_REFRESH_INTERVAL * 1000);\n return () => clearInterval(id);\n }, [fetchCheckpoints]);\n\n /* ------------------------------------------------------------------ */\n /* Actions */\n /* ------------------------------------------------------------------ */\n\n const handleCreate = async () => {\n if (!newName.trim()) {\n return;\n }\n setCreating(true);\n setFlash(null);\n try {\n const busyCells = onBeforeCreate ? onBeforeCreate() : [];\n await CheckpointAPI.createCheckpoint({\n name: newName.trim(),\n namespace,\n kernelId,\n buildImage: false,\n metadata: {\n kernelId,\n kernelName: kernelSpecName,\n notebookName,\n busyCells\n }\n });\n setNewName('');\n setShowCreateForm(false);\n setFlash({ type: 'success', text: 'Checkpoint created successfully.' });\n await fetchCheckpoints();\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to create checkpoint'\n });\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async (name: string) => {\n setFlash(null);\n setConfirmDelete(null);\n try {\n await CheckpointAPI.deleteCheckpoint(namespace, name);\n setFlash({ type: 'success', text: `Checkpoint \"${name}\" deleted.` });\n if (expandedDetail === name) {\n setExpandedDetail(null);\n setDetailData(null);\n }\n await fetchCheckpoints();\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to delete checkpoint'\n });\n }\n };\n\n const handleViewStatus = async (name: string) => {\n if (expandedDetail === name) {\n setExpandedDetail(null);\n setDetailData(null);\n return;\n }\n try {\n const detail = await CheckpointAPI.getCheckpoint(namespace, name);\n setDetailData(detail);\n setExpandedDetail(name);\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to get checkpoint details'\n });\n }\n };\n\n const handleRestore = async (checkpointName: string) => {\n setConfirmRestore(null);\n setRestoring(checkpointName);\n setFlash(null);\n try {\n const detail = await CheckpointAPI.getCheckpoint(namespace, checkpointName);\n const checkpointFile = detail.checkpointFiles?.[0];\n if (!checkpointFile?.storagePath) {\n throw new Error('No checkpoint file path available for this checkpoint');\n }\n const cpKernelId = detail.metadata?.kernelId ?? '';\n if (!cpKernelId) {\n throw new Error('No kernel ID found in checkpoint metadata');\n }\n const busyCells = detail.metadata?.busyCells ?? [];\n await onRestore(checkpointName, checkpointFile.storagePath, checkpointFile.containerName, cpKernelId, busyCells);\n setFlash({\n type: 'success',\n text: `Kernel restored from \"${checkpointName}\". The kernel is restarting.`\n });\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to restore checkpoint'\n });\n } finally {\n setRestoring(null);\n }\n };\n\n const handleRename = async (oldName: string) => {\n const trimmed = renameValue.trim();\n if (!trimmed || trimmed === oldName) {\n setRenamingName(null);\n return;\n }\n setFlash(null);\n try {\n await CheckpointAPI.updateCheckpoint(namespace, oldName, {\n name: trimmed\n });\n setRenamingName(null);\n setFlash({ type: 'success', text: `Checkpoint renamed to \"${trimmed}\".` });\n await fetchCheckpoints();\n } catch (err: any) {\n setFlash({\n type: 'error',\n text: err.message ?? 'Failed to rename checkpoint'\n });\n }\n };\n\n /* ------------------------------------------------------------------ */\n /* Render */\n /* ------------------------------------------------------------------ */\n\n return (\n <div className=\"kc-panel\">\n {/* Flash message */}\n {flash && (\n <div className={`kc-flash kc-flash-${flash.type}`}>\n <span>{flash.text}</span>\n <button\n className=\"kc-flash-close\"\n onClick={() => setFlash(null)}\n >\n ×\n </button>\n </div>\n )}\n\n {/* Create checkpoint */}\n <div className=\"kc-create-section\">\n {!showCreateForm ? (\n <button\n className=\"kc-btn kc-btn-primary\"\n onClick={() => setShowCreateForm(true)}\n >\n Save Kernel State\n </button>\n ) : (\n <div className=\"kc-create-form\">\n <input\n className=\"kc-input\"\n type=\"text\"\n placeholder=\"Enter checkpoint name…\"\n value={newName}\n onChange={e => setNewName(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleCreate();\n }\n }}\n autoFocus\n disabled={creating}\n />\n <button\n className=\"kc-btn kc-btn-primary\"\n disabled={creating || !newName.trim()}\n onClick={handleCreate}\n >\n {creating ? 'Saving…' : 'Save'}\n </button>\n <button\n className=\"kc-btn\"\n onClick={() => {\n setShowCreateForm(false);\n setNewName('');\n }}\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n\n {/* Checkpoint list */}\n <div className=\"kc-list\">\n {loading && checkpoints.length === 0 ? (\n <div className=\"kc-placeholder\">Loading checkpoints…</div>\n ) : error ? (\n <div className=\"kc-placeholder kc-placeholder-error\">{error}</div>\n ) : checkpoints.length === 0 ? (\n <div className=\"kc-placeholder\">\n No checkpoints found. Click “Save Kernel State” to\n create one.\n </div>\n ) : (\n checkpoints.map(cp => (\n <div key={cp.name} className=\"kc-item\">\n {/* Header row */}\n <div className=\"kc-item-header\">\n <div className=\"kc-item-info\">\n {renamingName === cp.name ? (\n <div className=\"kc-rename-form\">\n <input\n className=\"kc-input kc-input-sm\"\n type=\"text\"\n value={renameValue}\n onChange={e => setRenameValue(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleRename(cp.name);\n }\n if (e.key === 'Escape') {\n setRenamingName(null);\n }\n }}\n autoFocus\n />\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => handleRename(cp.name)}\n >\n OK\n </button>\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => setRenamingName(null)}\n >\n Cancel\n </button>\n </div>\n ) : (\n <span className=\"kc-item-name\" title={cp.name}>\n {cp.name}\n </span>\n )}\n <div className=\"kc-item-meta\">\n <PhaseIndicator phase={cp.phase} />\n <span className=\"kc-item-date\">\n {formatDate(cp.createdAt)}\n </span>\n </div>\n </div>\n\n <div className=\"kc-item-actions\">\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => handleViewStatus(cp.name)}\n >\n {expandedDetail === cp.name ? 'Hide' : 'Details'}\n </button>\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => {\n setRenamingName(cp.name);\n setRenameValue(cp.name);\n }}\n >\n Rename\n </button>\n {confirmDelete === cp.name ? (\n <>\n <span className=\"kc-confirm-label\">Delete?</span>\n <button\n className=\"kc-btn kc-btn-xs kc-btn-danger\"\n onClick={() => handleDelete(cp.name)}\n >\n Yes\n </button>\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => setConfirmDelete(null)}\n >\n No\n </button>\n </>\n ) : (\n <button\n className=\"kc-btn kc-btn-xs kc-btn-danger\"\n onClick={() => setConfirmDelete(cp.name)}\n >\n Delete\n </button>\n )}\n {confirmRestore === cp.name ? (\n <>\n <span className=\"kc-confirm-label\">Restore?</span>\n <button\n className=\"kc-btn kc-btn-xs kc-btn-restore\"\n onClick={() => handleRestore(cp.name)}\n >\n Yes\n </button>\n <button\n className=\"kc-btn kc-btn-xs\"\n onClick={() => setConfirmRestore(null)}\n >\n No\n </button>\n </>\n ) : (\n <button\n className=\"kc-btn kc-btn-xs kc-btn-restore\"\n disabled={\n restoring !== null || cp.phase !== 'Completed'\n }\n title={\n cp.phase !== 'Completed'\n ? 'Checkpoint must be completed to restore'\n : 'Restore from this checkpoint'\n }\n onClick={() => setConfirmRestore(cp.name)}\n >\n {restoring === cp.name ? 'Restoring…' : 'Restore'}\n </button>\n )}\n </div>\n </div>\n\n {/* Expanded detail */}\n {expandedDetail === cp.name && detailData && (\n <div className=\"kc-detail\">\n <div className=\"kc-detail-row\">\n <span className=\"kc-detail-label\">Status</span>\n <span>{mapPhaseDisplay(detailData.phase)}</span>\n </div>\n <div className=\"kc-detail-row\">\n <span className=\"kc-detail-label\">Message</span>\n <span>{detailData.message}</span>\n </div>\n {detailData.podRef && (\n <div className=\"kc-detail-row\">\n <span className=\"kc-detail-label\">Pod</span>\n <span>{detailData.podRef.name}</span>\n </div>\n )}\n {detailData.checkpointFiles &&\n detailData.checkpointFiles.length > 0 && (\n <div className=\"kc-detail-section\">\n <span className=\"kc-detail-label\">\n Checkpoint Files\n </span>\n {detailData.checkpointFiles.map((f, i) => (\n <div key={i} className=\"kc-detail-file\">\n <span>{f.containerName}</span>\n <span className=\"kc-detail-time\">\n {formatDate(f.checkpointTime)}\n </span>\n </div>\n ))}\n </div>\n )}\n {detailData.builtImages &&\n detailData.builtImages.length > 0 && (\n <div className=\"kc-detail-section\">\n <span className=\"kc-detail-label\">Built Images</span>\n {detailData.builtImages.map((img, i) => (\n <div key={i} className=\"kc-detail-file\">\n <span className=\"kc-detail-image-name\">\n {img.imageName}\n </span>\n <span className=\"kc-detail-time\">\n {formatDate(img.buildTime)}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n ))\n )}\n </div>\n\n </div>\n );\n}\n","import {\n JupyterFrontEnd,\n JupyterFrontEndPlugin\n} from '@jupyterlab/application';\nimport { INotebookTracker, NotebookPanel } from '@jupyterlab/notebook';\nimport {\n Dialog,\n ReactWidget,\n showDialog,\n ToolbarButton\n} from '@jupyterlab/apputils';\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport React from 'react';\n\nimport { CheckpointPanel } from './checkpoint-panel';\nimport { CheckpointAPI } from './api';\nimport { IBusyCellRecord, ICheckpointPanelProps } from './types';\nimport {\n CellExecutionTracker,\n RestoreHandler,\n scanBusyCells\n} from './restore-handler';\n\n/**\n * ReactWidget wrapper that hosts the CheckpointPanel React tree inside a\n * JupyterLab Dialog body.\n */\nclass CheckpointDialogBody extends ReactWidget {\n private _props: ICheckpointPanelProps;\n\n constructor(props: ICheckpointPanelProps) {\n super();\n this._props = props;\n this.addClass('kc-dialog-body');\n }\n\n protected render(): React.ReactElement {\n return React.createElement(CheckpointPanel, this._props);\n }\n}\n\nconst COMMAND_ID = 'kernel-checkpoint:open';\n\nconst plugin: JupyterFrontEndPlugin<void> = {\n id: 'kernel-checkpoint:plugin',\n description:\n 'An extension for saving and restoring kernel pod state with jupyter enterprise gateway',\n autoStart: true,\n requires: [INotebookTracker],\n activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker) => {\n console.log('JupyterLab extension kernel-checkpoint is activated!');\n\n // ── Per-notebook execution tracking ──────────────────────────────\n //\n // Each open notebook gets its own CellExecutionTracker that\n // continuously records in-flight msg_id → execution_count pairs\n // from the kernel's iopub channel. At checkpoint time this map\n // is consulted to capture the execution counts for busy cells.\n\n const trackerMap = new Map<string, CellExecutionTracker>();\n\n function ensureTracker(panel: NotebookPanel): CellExecutionTracker {\n let cellTracker = trackerMap.get(panel.id);\n if (!cellTracker) {\n cellTracker = new CellExecutionTracker();\n trackerMap.set(panel.id, cellTracker);\n }\n return cellTracker;\n }\n\n function connectTrackerToKernel(panel: NotebookPanel): void {\n const kernel = panel.sessionContext.session?.kernel;\n if (kernel) {\n ensureTracker(panel).connectToKernel(kernel);\n }\n }\n\n // ── Command ──────────────────────────────────────────────────────\n\n app.commands.addCommand(COMMAND_ID, {\n label: 'Saving Points',\n caption: 'Manage kernel checkpoints',\n execute: async () => {\n const panel = notebookTracker.currentWidget;\n if (!panel) {\n return;\n }\n\n const sessionContext = panel.sessionContext;\n await sessionContext.ready;\n\n let config;\n try {\n config = await CheckpointAPI.getConfig();\n } catch (err) {\n await showDialog({\n title: 'Configuration Error',\n body: 'Failed to load checkpoint configuration. Ensure CHECKPOINT_API_URL is set.',\n buttons: [Dialog.okButton()]\n });\n return;\n }\n\n if (!config.namespace) {\n await showDialog({\n title: 'Configuration Error',\n body: 'Namespace not configured. Set CHECKPOINT_NAMESPACE environment variable or deploy in Kubernetes.',\n buttons: [Dialog.okButton()]\n });\n return;\n }\n\n const kernel = sessionContext.session?.kernel;\n if (!kernel) {\n await showDialog({\n title: 'No Kernel',\n body: 'No kernel is connected. Please start a kernel first.',\n buttons: [Dialog.okButton()]\n });\n return;\n }\n\n const kernelId = kernel.id;\n const kernelSpecName = kernel.name || 'python_kubernetes';\n const notebookName = panel.title.label || '';\n\n // ── Restore callback ─────────────────────────────────────────\n //\n // Called by the CheckpointPanel when the user confirms a restore.\n // Creates a new kernel seeded with the checkpoint environment\n // variables, switches the notebook session to it, and then\n // activates the RestoreHandler to catch orphaned iopub messages.\n\n const onRestore = async (\n checkpointName: string,\n checkpointFilePath: string,\n containerName: string,\n cpKernelId: string,\n busyCells: IBusyCellRecord[]\n ): Promise<void> => {\n const settings = ServerConnection.makeSettings();\n const kernelUrl = URLExt.join(settings.baseUrl, 'api', 'kernels');\n\n const response = await ServerConnection.makeRequest(\n kernelUrl,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: kernelSpecName,\n env: {\n KERNEL_CHECKPOINT_NAME: checkpointName,\n KERNEL_CHECKPOINT_FILE_PATH: checkpointFilePath,\n KERNEL_CHECKPOINT_CONTAINER_NAME: containerName,\n KERNEL_ID: cpKernelId\n }\n })\n },\n settings\n );\n\n if (!response.ok) {\n const errText = await response.text();\n throw new Error(`Failed to create restored kernel: ${errText}`);\n }\n\n const kernelData = await response.json();\n await sessionContext.changeKernel({ id: kernelData.id });\n\n // ── Activate Catch-and-Render (Steps 3-6) ──────────────────\n //\n // The restored kernel is now connected. If there were busy\n // cells at checkpoint time, spin up a RestoreHandler that\n // hooks iopub and intercepts orphaned messages.\n\n if (busyCells.length > 0) {\n console.log(\n `[kernel-checkpoint] Restore detected ${busyCells.length} ` +\n 'busy cell(s). Activating RestoreHandler.'\n );\n const handler = new RestoreHandler();\n handler.hookRestoredKernel(panel, busyCells);\n }\n };\n\n // ── Dialog construction ──────────────────────────────────────\n\n const body = new CheckpointDialogBody({\n namespace: config.namespace,\n kernelId,\n kernelSpecName,\n notebookName,\n onRestore,\n onBeforeCreate: () => {\n const cellTracker = trackerMap.get(panel.id);\n if (!cellTracker) {\n return [];\n }\n const busyCells = scanBusyCells(panel, cellTracker);\n if (busyCells.length > 0) {\n console.log(\n `[kernel-checkpoint] Scanned ${busyCells.length} busy cell(s) ` +\n 'before checkpoint:',\n busyCells\n );\n }\n return busyCells;\n }\n });\n\n await showDialog({\n title: 'Kernel Checkpoints',\n body,\n buttons: [Dialog.cancelButton({ label: 'Close' })]\n });\n\n body.dispose();\n }\n });\n\n // ── Notebook lifecycle wiring ────────────────────────────────────\n\n notebookTracker.widgetAdded.connect(\n (_sender: INotebookTracker, panel: NotebookPanel) => {\n // Toolbar button\n const button = new ToolbarButton({\n label: 'Saving Points',\n tooltip: 'Open kernel checkpoint manager',\n onClick: () => {\n app.commands.execute(COMMAND_ID);\n }\n });\n panel.toolbar.insertItem(10, 'kernel-checkpoint', button);\n\n // Execution tracker setup — connect once the session is ready,\n // and reconnect whenever the kernel is swapped.\n\n panel.sessionContext.ready.then(() => {\n connectTrackerToKernel(panel);\n });\n\n panel.sessionContext.kernelChanged.connect(() => {\n connectTrackerToKernel(panel);\n });\n\n panel.disposed.connect(() => {\n const cellTracker = trackerMap.get(panel.id);\n if (cellTracker) {\n cellTracker.disconnectFromKernel();\n trackerMap.delete(panel.id);\n }\n });\n }\n );\n }\n};\n\nexport default plugin;\n","import { NotebookPanel } from '@jupyterlab/notebook';\nimport { CodeCell } from '@jupyterlab/cells';\nimport { Kernel, KernelMessage } from '@jupyterlab/services';\nimport { IBusyCellRecord } from './types';\n\n/**\n * Safely extracts `msg_id` from a kernel message's `parent_header`.\n * Returns undefined when the parent_header is empty (e.g. unsolicited\n * kernel-status broadcasts at startup).\n */\nfunction getParentMsgId(\n msg: KernelMessage.IMessage\n): string | undefined {\n const ph = msg.parent_header;\n return ph && 'msg_id' in ph\n ? (ph as KernelMessage.IHeader).msg_id\n : undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Mock save / load helpers.\n// These demonstrate the checkpoint-metadata persistence contract.\n// Replace the bodies with real API calls (e.g. CheckpointAPI.updateCheckpoint)\n// when wiring to your backend.\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport async function saveCheckpointCellMetadata(\n _checkpointName: string,\n _namespace: string,\n busyCells: IBusyCellRecord[]\n): Promise<void> {\n console.log(\n `[RestoreHandler] Would persist ${busyCells.length} busy-cell record(s)`,\n busyCells\n );\n}\n\nexport async function loadCheckpointCellMetadata(\n _checkpointName: string,\n _namespace: string\n): Promise<IBusyCellRecord[]> {\n console.log('[RestoreHandler] Would load busy-cell records from backend');\n return [];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CellExecutionTracker\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Continuously monitors a kernel's iopub channel to maintain a live map of\n * **in-flight** execute requests: `msg_id → execution_count`.\n *\n * When the kernel broadcasts `execute_input`, the tracker records the\n * execution count assigned by the kernel (this is the number that will\n * eventually be shown as `[N]` in the cell prompt). When `status: idle`\n * arrives for that same `msg_id`, the entry is removed.\n *\n * The tracker must be connected to the kernel **before** any cells are\n * executed so that the execution count is available at checkpoint time.\n */\nexport class CellExecutionTracker {\n private _pendingExecutions = new Map<string, number>();\n private _kernel: Kernel.IKernelConnection | null = null;\n\n get pendingExecutions(): ReadonlyMap<string, number> {\n return this._pendingExecutions;\n }\n\n connectToKernel(kernel: Kernel.IKernelConnection): void {\n this.disconnectFromKernel();\n this._kernel = kernel;\n kernel.iopubMessage.connect(this._onIopubMessage, this);\n }\n\n disconnectFromKernel(): void {\n if (this._kernel) {\n this._kernel.iopubMessage.disconnect(this._onIopubMessage, this);\n this._kernel = null;\n }\n this._pendingExecutions.clear();\n }\n\n private _onIopubMessage(\n _sender: Kernel.IKernelConnection,\n msg: KernelMessage.IIOPubMessage\n ): void {\n const parentMsgId = getParentMsgId(msg);\n if (!parentMsgId) {\n return;\n }\n\n if (msg.header.msg_type === 'execute_input') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const execCount = (msg.content as any).execution_count as number;\n this._pendingExecutions.set(parentMsgId, execCount);\n }\n\n if (\n msg.header.msg_type === 'status' &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (msg.content as any).execution_state === 'idle'\n ) {\n this._pendingExecutions.delete(parentMsgId);\n }\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// scanBusyCells (Step 1 of the Catch-and-Render architecture)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Scans the active notebook for cells that are currently executing (`[*]`\n * prompt) and extracts the `msg_id` of each in-flight execution request.\n *\n * ### How the msg_id is obtained\n *\n * When JupyterLab executes a cell it calls `kernel.requestExecute()` and\n * stores the resulting `IShellFuture` on the cell's `OutputArea`:\n *\n * `codeCell.outputArea.future = kernel.requestExecute({ code })`\n *\n * JupyterLab exposes `future` as a **write-only** setter on `OutputArea`.\n * The underlying field is `OutputArea._future` (private). We read it here\n * because no public getter exists, and the `msg_id` it contains is the only\n * reliable link between the cell widget and the kernel message stream.\n *\n * ### Why we also need the CellExecutionTracker\n *\n * The `_future.msg.header.msg_id` gives us the execute-request id, but not\n * the **execution count** the kernel assigned (the `[N]` prompt number).\n * During execution the cell's `model.executionCount` is `null` (that is\n * what produces the `[*]` display). The actual count was broadcast earlier\n * in an `execute_input` iopub message which the `CellExecutionTracker`\n * recorded. We look it up here so that the restore phase can set the\n * correct prompt after the cell finishes.\n */\nexport function scanBusyCells(\n panel: NotebookPanel,\n tracker: CellExecutionTracker\n): IBusyCellRecord[] {\n const records: IBusyCellRecord[] = [];\n const cells = panel.content.widgets;\n\n for (let i = 0; i < cells.length; i++) {\n const cell = cells[i];\n if (cell.model.type !== 'code') {\n continue;\n }\n\n const codeCell = cell as CodeCell;\n\n // `executionCount === null` is the canonical indicator for a busy cell\n // (the prompt renders `[*]`). Fresh cells also have `null`, so we\n // additionally require an active future below.\n if (codeCell.model.executionCount !== null) {\n continue;\n }\n\n // Read the private `_future` field. This is an `IShellFuture` whose\n // `.msg.header.msg_id` is the id the kernel uses in `parent_header`\n // for every message belonging to this execution.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const future = (codeCell.outputArea as any)._future;\n if (!future?.msg?.header?.msg_id) {\n continue;\n }\n\n const msgId: string = future.msg.header.msg_id;\n const executionCount = tracker.pendingExecutions.get(msgId) ?? null;\n\n records.push({\n cellIndex: i,\n cellId: cell.model.id,\n msgId,\n executionCount\n });\n }\n\n return records;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// RestoreHandler (Steps 3–6 of the Catch-and-Render architecture)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Hooks into a **restored** kernel's iopub channel and intercepts \"orphaned\"\n * messages whose `parent_header.msg_id` matches a cell that was busy at\n * checkpoint time.\n *\n * For each intercepted message the handler manually injects the output into\n * the cell's `OutputArea`, replicating what JupyterLab would normally do\n * if the original execution future were still alive.\n *\n * ### Output injection mechanism\n *\n * `codeCell.outputArea.model` implements `IOutputAreaModel`. Calling\n * `.add(output)` with an `nbformat.IOutput`-shaped object triggers the\n * following internal chain:\n *\n * 1. The model wraps the raw JSON in an `OutputModel` instance.\n * 2. It appends the model to its internal list.\n * – For `stream` outputs with the same `name` (stdout / stderr) as the\n * preceding entry, the text is **merged** instead of creating a new\n * item. This matches standard notebook behavior.\n * 3. A Lumino `changed` signal fires.\n * 4. The `OutputArea` widget reacts and creates the visual renderer\n * (e.g. `<pre>` for streams, a MIME renderer for display_data).\n *\n * Because all of this happens through the model's public API the rendered\n * output is indistinguishable from one produced by the normal future-based\n * routing.\n */\nexport class RestoreHandler {\n private _activeMsgIds = new Map<string, IBusyCellRecord>();\n private _panel: NotebookPanel | null = null;\n private _kernel: Kernel.IKernelConnection | null = null;\n\n /**\n * Begin intercepting orphaned messages for the given busy cells.\n * Call immediately after `sessionContext.changeKernel()` resolves.\n */\n hookRestoredKernel(\n panel: NotebookPanel,\n busyCells: IBusyCellRecord[]\n ): void {\n if (busyCells.length === 0) {\n return;\n }\n\n this.dispose();\n this._panel = panel;\n\n for (const record of busyCells) {\n this._activeMsgIds.set(record.msgId, record);\n }\n\n // Re-apply the busy indicator ([*]) so the user sees the cells as\n // still running while output continues to stream in.\n for (const record of busyCells) {\n const cell = this._findCell(panel, record);\n if (cell) {\n cell.model.executionCount = null;\n }\n }\n\n const kernel = panel.sessionContext.session?.kernel;\n if (!kernel) {\n console.warn(\n '[RestoreHandler] No kernel on panel after changeKernel(); ' +\n 'cannot hook iopub. Orphaned outputs will be lost.'\n );\n return;\n }\n\n this._kernel = kernel;\n kernel.iopubMessage.connect(this._onIopubMessage, this);\n\n console.log(\n `[RestoreHandler] Hooked into restored kernel iopub. ` +\n `Tracking ${busyCells.length} busy cell(s):`,\n busyCells.map(r => `cell[${r.cellIndex}] (${r.cellId}) → ${r.msgId}`)\n );\n }\n\n dispose(): void {\n if (this._kernel) {\n this._kernel.iopubMessage.disconnect(this._onIopubMessage, this);\n this._kernel = null;\n }\n this._activeMsgIds.clear();\n this._panel = null;\n }\n\n /**\n * Locate the CodeCell for a given record. We first try the saved index\n * (fast path) and verify by cell ID, then fall back to a linear scan.\n * This handles the case where the user inserted or deleted cells between\n * checkpoint and restore.\n */\n private _findCell(\n panel: NotebookPanel,\n record: IBusyCellRecord\n ): CodeCell | null {\n const cells = panel.content.widgets;\n\n if (record.cellIndex < cells.length) {\n const candidate = cells[record.cellIndex];\n if (\n candidate.model.type === 'code' &&\n candidate.model.id === record.cellId\n ) {\n return candidate as CodeCell;\n }\n }\n\n for (let i = 0; i < cells.length; i++) {\n const c = cells[i];\n if (c.model.id === record.cellId && c.model.type === 'code') {\n return c as CodeCell;\n }\n }\n\n return null;\n }\n\n // ── iopub signal handler ──────────────────────────────────────────────\n\n private _onIopubMessage(\n _sender: Kernel.IKernelConnection,\n msg: KernelMessage.IIOPubMessage\n ): void {\n const parentMsgId = getParentMsgId(msg);\n if (!parentMsgId) {\n return;\n }\n\n const record = this._activeMsgIds.get(parentMsgId);\n if (!record) {\n // Not one of our tracked orphaned executions — let JupyterLab's\n // normal future-based routing handle this message.\n return;\n }\n\n if (!this._panel) {\n return;\n }\n\n const codeCell = this._findCell(this._panel, record);\n if (!codeCell) {\n return;\n }\n\n const msgType = msg.header.msg_type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const content: any = msg.content;\n\n // ── Step 5: Inject output into the cell's OutputArea ────────────\n //\n // We construct an nbformat-compatible output object and pass it to\n // `outputArea.model.add()`. The model validates the shape, wraps it\n // in an OutputModel, and emits a `changed` signal that causes the\n // OutputArea widget to render the new entry.\n\n switch (msgType) {\n case 'stream':\n codeCell.outputArea.model.add({\n output_type: 'stream',\n name: content.name,\n text: content.text\n });\n break;\n\n case 'error':\n codeCell.outputArea.model.add({\n output_type: 'error',\n ename: content.ename,\n evalue: content.evalue,\n traceback: content.traceback\n });\n break;\n\n case 'execute_result':\n codeCell.outputArea.model.add({\n output_type: 'execute_result',\n data: content.data,\n metadata: content.metadata,\n execution_count: content.execution_count\n });\n break;\n\n case 'display_data':\n codeCell.outputArea.model.add({\n output_type: 'display_data',\n data: content.data,\n metadata: content.metadata\n });\n break;\n\n // ── Step 6: Lifecycle Cleanup ─────────────────────────────────\n //\n // A `status: idle` message with our tracked msg_id means the\n // kernel finished executing this cell. We:\n // a) Set the cell's execution count → prompt changes [*] → [N]\n // b) Remove the msg_id from the tracking map\n // c) Disconnect from iopub when no busy cells remain\n\n case 'status':\n if (content.execution_state === 'idle') {\n if (record.executionCount !== null) {\n codeCell.model.executionCount = record.executionCount;\n }\n\n this._activeMsgIds.delete(parentMsgId);\n\n console.log(\n `[RestoreHandler] Cell[${record.cellIndex}] execution ` +\n `complete (exec count: ${record.executionCount}). ` +\n `${this._activeMsgIds.size} cell(s) still pending.`\n );\n\n if (this._activeMsgIds.size === 0) {\n console.log(\n '[RestoreHandler] All restored cells complete. ' +\n 'Disconnecting iopub hook.'\n );\n this.dispose();\n }\n }\n break;\n\n default:\n break;\n }\n }\n}\n"],"names":[],"sourceRoot":""}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/cursor_jupyterlab_extension_for_checkpo.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/kernel_checkpoint/labextension/static/style.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/src/__tests__/kernel_checkpoint.spec.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kernel_checkpoint-0.1.8 → kernel_checkpoint-0.1.10}/ui-tests/tests/kernel_checkpoint.spec.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|