nebula-notebook 0.1.1 → 0.2.0

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.
Files changed (78) hide show
  1. package/README.md +90 -11
  2. package/dist/assets/errorwidget-C4r2j2DQ.js +5 -0
  3. package/dist/assets/fa-brands-400-CEJbCg16.woff +0 -0
  4. package/dist/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  5. package/dist/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  6. package/dist/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  7. package/dist/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  8. package/dist/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  9. package/dist/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  10. package/dist/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  11. package/dist/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  12. package/dist/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  13. package/dist/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  14. package/dist/assets/fa-solid-900-B6Axprfb.eot +0 -0
  15. package/dist/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  16. package/dist/assets/fa-solid-900-DOXgCApm.woff +0 -0
  17. package/dist/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  18. package/dist/assets/index-7-YBurka.js +716 -0
  19. package/dist/assets/index-BtWv4MIT.css +7 -0
  20. package/dist/assets/index-CFBUnxSZ.css +32 -0
  21. package/dist/assets/index-CsHoPQy-.js +1 -0
  22. package/dist/assets/index-D5w21_Z8.js +81 -0
  23. package/dist/assets/index-Day3QcNs.js +1 -0
  24. package/dist/assets/services-shim-D6p_A67v.js +33 -0
  25. package/dist/assets/viewlist-uomDf7I7.js +1 -0
  26. package/dist/assets/widgets-X7J3NxEn.css +1 -0
  27. package/dist/index.html +2 -2
  28. package/node-server/dist/cluster/client-registration.js +3 -0
  29. package/node-server/dist/cluster/kernel-proxy.js +24 -9
  30. package/node-server/dist/cluster/server-registry.d.ts +8 -0
  31. package/node-server/dist/cluster/server-registry.js +31 -7
  32. package/node-server/dist/fs/fs-service.d.ts +55 -7
  33. package/node-server/dist/fs/fs-service.js +489 -80
  34. package/node-server/dist/fs/notebook-formats/percent.d.ts +25 -0
  35. package/node-server/dist/fs/notebook-formats/percent.js +286 -0
  36. package/node-server/dist/fs/notebook-formats/qmd.d.ts +29 -0
  37. package/node-server/dist/fs/notebook-formats/qmd.js +307 -0
  38. package/node-server/dist/fs/notebook-formats/registry.d.ts +12 -0
  39. package/node-server/dist/fs/notebook-formats/registry.js +77 -0
  40. package/node-server/dist/fs/notebook-formats/types.d.ts +37 -0
  41. package/node-server/dist/fs/notebook-formats/types.js +13 -0
  42. package/node-server/dist/idle-exit.d.ts +52 -0
  43. package/node-server/dist/idle-exit.js +83 -0
  44. package/node-server/dist/index.js +129 -6
  45. package/node-server/dist/kernel/kernel-service.d.ts +113 -2
  46. package/node-server/dist/kernel/kernel-service.js +762 -60
  47. package/node-server/dist/notebook/headless-handler.d.ts +2 -0
  48. package/node-server/dist/notebook/headless-handler.js +70 -24
  49. package/node-server/dist/notebook/operation-router.js +7 -2
  50. package/node-server/dist/notebook/undoRedoManager.d.ts +4 -1
  51. package/node-server/dist/notebook/undoRedoManager.js +10 -2
  52. package/node-server/dist/output/display-data.js +2 -0
  53. package/node-server/dist/routes/cluster.js +2 -2
  54. package/node-server/dist/routes/compute.d.ts +8 -0
  55. package/node-server/dist/routes/compute.js +136 -0
  56. package/node-server/dist/routes/fs.js +2 -2
  57. package/node-server/dist/routes/kernel.js +111 -1
  58. package/node-server/dist/routes/notebook.js +29 -1
  59. package/node-server/dist/scheduler/allocation-service.d.ts +43 -0
  60. package/node-server/dist/scheduler/allocation-service.js +169 -0
  61. package/node-server/dist/scheduler/job-template.d.ts +30 -0
  62. package/node-server/dist/scheduler/job-template.js +85 -0
  63. package/node-server/dist/scheduler/mock-scheduler.d.ts +30 -0
  64. package/node-server/dist/scheduler/mock-scheduler.js +121 -0
  65. package/node-server/dist/scheduler/slurm-scheduler.d.ts +31 -0
  66. package/node-server/dist/scheduler/slurm-scheduler.js +393 -0
  67. package/node-server/dist/scheduler/types.d.ts +117 -0
  68. package/node-server/dist/scheduler/types.js +8 -0
  69. package/node-server/dist/scheduler/util.d.ts +7 -0
  70. package/node-server/dist/scheduler/util.js +20 -0
  71. package/node-server/dist/terminal/pty-manager.js +8 -0
  72. package/node-server/dist/terminal/server.js +43 -2
  73. package/node-server/dist/update-check.d.ts +20 -0
  74. package/node-server/dist/update-check.js +114 -0
  75. package/node-server/package.json +1 -0
  76. package/package.json +2 -1
  77. package/dist/assets/index-BvrHu37J.js +0 -648
  78. package/dist/assets/index-Dfj_xsKU.css +0 -32
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ /**
3
+ * Update check — notify-only, never auto-installs.
4
+ *
5
+ * Once at startup (and daily after), asks the npm registry for the latest
6
+ * published nebula-notebook version and compares it to the running one.
7
+ * Result is surfaced in /api/health (`update`) for the UI pill and logged
8
+ * once to the server console. Opt out with NEBULA_NO_UPDATE_CHECK=1.
9
+ * Network failures are silent: an update check must never affect operation.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.isNewerVersion = isNewerVersion;
46
+ exports.startUpdateChecker = startUpdateChecker;
47
+ exports.stopUpdateChecker = stopUpdateChecker;
48
+ exports.getUpdateInfo = getUpdateInfo;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const REGISTRY_URL = 'https://registry.npmjs.org/nebula-notebook/latest';
52
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // daily
53
+ const FETCH_TIMEOUT_MS = 4000;
54
+ let info = { current: readCurrentVersion(), latest: null, update_available: false, checked_at: null };
55
+ let timer = null;
56
+ /** Running version from the repo/package root (this file is at node-server/{src,dist}/ — 2 levels up). */
57
+ function readCurrentVersion() {
58
+ try {
59
+ const pkgPath = path.resolve(__dirname, '..', '..', 'package.json');
60
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
61
+ if (typeof pkg.version === 'string')
62
+ return pkg.version;
63
+ }
64
+ catch { /* fall through */ }
65
+ return '0.0.0';
66
+ }
67
+ /** Numeric semver compare on MAJOR.MINOR.PATCH; ignores prerelease tags. */
68
+ function isNewerVersion(latest, current) {
69
+ const parse = (v) => v.replace(/^v/, '').split('-')[0].split('.').map(n => parseInt(n, 10) || 0);
70
+ const [lMaj, lMin, lPat] = parse(latest);
71
+ const [cMaj, cMin, cPat] = parse(current);
72
+ if (lMaj !== cMaj)
73
+ return lMaj > cMaj;
74
+ if (lMin !== cMin)
75
+ return lMin > cMin;
76
+ return lPat > cPat;
77
+ }
78
+ async function checkOnce() {
79
+ try {
80
+ const controller = new AbortController();
81
+ const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
82
+ const res = await fetch(REGISTRY_URL, { signal: controller.signal });
83
+ clearTimeout(timeout);
84
+ if (!res.ok)
85
+ return;
86
+ const data = (await res.json());
87
+ if (typeof data.version !== 'string')
88
+ return;
89
+ const updateAvailable = isNewerVersion(data.version, info.current);
90
+ const firstDiscovery = updateAvailable && !info.update_available;
91
+ info = { ...info, latest: data.version, update_available: updateAvailable, checked_at: Date.now() };
92
+ if (firstDiscovery) {
93
+ console.log(`[Update] nebula-notebook v${data.version} is available (running v${info.current}) — ` +
94
+ `update with: npx nebula-notebook@latest (or git pull for source installs)`);
95
+ }
96
+ }
97
+ catch { /* offline / registry down / air-gapped cluster — stay quiet */ }
98
+ }
99
+ function startUpdateChecker() {
100
+ if (process.env.NEBULA_NO_UPDATE_CHECK)
101
+ return;
102
+ void checkOnce();
103
+ timer = setInterval(() => void checkOnce(), CHECK_INTERVAL_MS);
104
+ timer.unref?.(); // never keep the process alive for this
105
+ }
106
+ function stopUpdateChecker() {
107
+ if (timer) {
108
+ clearInterval(timer);
109
+ timer = null;
110
+ }
111
+ }
112
+ function getUpdateInfo() {
113
+ return info;
114
+ }
@@ -24,6 +24,7 @@
24
24
  "qrcode-terminal": "^0.12.0",
25
25
  "uuid": "^9.0.1",
26
26
  "ws": "^8.16.0",
27
+ "yaml": "^2.9.0",
27
28
  "zeromq": "^6.4.2"
28
29
  },
29
30
  "devDependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nebula-notebook",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "AI-native notebook computing environment \u2014 real Jupyter kernels, real filesystem, built to be driven by agents (Claude Code / Codex) via MCP",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -68,6 +68,7 @@
68
68
  "devDependencies": {
69
69
  "@codemirror/lang-markdown": "^6.5.0",
70
70
  "@codemirror/lang-python": "^6.2.1",
71
+ "@jupyter-widgets/html-manager": "^1.0.14",
71
72
  "@playwright/test": "^1.57.0",
72
73
  "@tailwindcss/vite": "^4.2.1",
73
74
  "@testing-library/jest-dom": "^6.9.1",