nebula-notebook 0.1.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.
- package/README.md +222 -0
- package/bin/nebula-notebook.js +33 -0
- package/dist/assets/index-C1h_sArD.css +32 -0
- package/dist/assets/index-CDSTBon8.js +658 -0
- package/dist/favicon.svg +11 -0
- package/dist/index.html +73 -0
- package/node-server/dist/app.d.ts +5 -0
- package/node-server/dist/app.js +38 -0
- package/node-server/dist/auth/auth-middleware.d.ts +24 -0
- package/node-server/dist/auth/auth-middleware.js +276 -0
- package/node-server/dist/auth/auth-service.d.ts +84 -0
- package/node-server/dist/auth/auth-service.js +265 -0
- package/node-server/dist/auth/index.d.ts +3 -0
- package/node-server/dist/auth/index.js +8 -0
- package/node-server/dist/cluster/client-registration.d.ts +43 -0
- package/node-server/dist/cluster/client-registration.js +217 -0
- package/node-server/dist/cluster/cluster-secret.d.ts +11 -0
- package/node-server/dist/cluster/cluster-secret.js +90 -0
- package/node-server/dist/cluster/kernel-proxy.d.ts +100 -0
- package/node-server/dist/cluster/kernel-proxy.js +361 -0
- package/node-server/dist/cluster/server-registry.d.ts +109 -0
- package/node-server/dist/cluster/server-registry.js +217 -0
- package/node-server/dist/config/output-limits.d.ts +7 -0
- package/node-server/dist/config/output-limits.js +10 -0
- package/node-server/dist/discovery/discovery-service.d.ts +198 -0
- package/node-server/dist/discovery/discovery-service.js +811 -0
- package/node-server/dist/discovery/index.d.ts +5 -0
- package/node-server/dist/discovery/index.js +21 -0
- package/node-server/dist/discovery/types.d.ts +48 -0
- package/node-server/dist/discovery/types.js +24 -0
- package/node-server/dist/fs/fs-service.d.ts +218 -0
- package/node-server/dist/fs/fs-service.js +1422 -0
- package/node-server/dist/fs/index.d.ts +5 -0
- package/node-server/dist/fs/index.js +21 -0
- package/node-server/dist/fs/types.d.ts +132 -0
- package/node-server/dist/fs/types.js +5 -0
- package/node-server/dist/index.d.ts +13 -0
- package/node-server/dist/index.js +556 -0
- package/node-server/dist/kernel/default-kernel.d.ts +5 -0
- package/node-server/dist/kernel/default-kernel.js +138 -0
- package/node-server/dist/kernel/index.d.ts +7 -0
- package/node-server/dist/kernel/index.js +23 -0
- package/node-server/dist/kernel/kernel-service.d.ts +290 -0
- package/node-server/dist/kernel/kernel-service.js +1714 -0
- package/node-server/dist/kernel/kernelspec.d.ts +29 -0
- package/node-server/dist/kernel/kernelspec.js +210 -0
- package/node-server/dist/kernel/session-store.d.ts +87 -0
- package/node-server/dist/kernel/session-store.js +303 -0
- package/node-server/dist/kernel/types.d.ts +143 -0
- package/node-server/dist/kernel/types.js +17 -0
- package/node-server/dist/llm/index.d.ts +5 -0
- package/node-server/dist/llm/index.js +21 -0
- package/node-server/dist/llm/llm-service.d.ts +77 -0
- package/node-server/dist/llm/llm-service.js +454 -0
- package/node-server/dist/llm/types.d.ts +40 -0
- package/node-server/dist/llm/types.js +15 -0
- package/node-server/dist/notebook/cell-metadata.d.ts +27 -0
- package/node-server/dist/notebook/cell-metadata.js +76 -0
- package/node-server/dist/notebook/headless-handler.d.ts +127 -0
- package/node-server/dist/notebook/headless-handler.js +1530 -0
- package/node-server/dist/notebook/notebook-websocket.d.ts +12 -0
- package/node-server/dist/notebook/notebook-websocket.js +103 -0
- package/node-server/dist/notebook/operation-router.d.ts +115 -0
- package/node-server/dist/notebook/operation-router.js +641 -0
- package/node-server/dist/notebook/undoRedoManager.d.ts +194 -0
- package/node-server/dist/notebook/undoRedoManager.js +558 -0
- package/node-server/dist/output/display-data.d.ts +14 -0
- package/node-server/dist/output/display-data.js +134 -0
- package/node-server/dist/resources/resource-service.d.ts +69 -0
- package/node-server/dist/resources/resource-service.js +363 -0
- package/node-server/dist/routes/auth.d.ts +5 -0
- package/node-server/dist/routes/auth.js +61 -0
- package/node-server/dist/routes/cluster.d.ts +7 -0
- package/node-server/dist/routes/cluster.js +94 -0
- package/node-server/dist/routes/fs.d.ts +7 -0
- package/node-server/dist/routes/fs.js +392 -0
- package/node-server/dist/routes/kernel.d.ts +13 -0
- package/node-server/dist/routes/kernel.js +637 -0
- package/node-server/dist/routes/llm.d.ts +8 -0
- package/node-server/dist/routes/llm.js +105 -0
- package/node-server/dist/routes/notebook.d.ts +10 -0
- package/node-server/dist/routes/notebook.js +335 -0
- package/node-server/dist/routes/python.d.ts +8 -0
- package/node-server/dist/routes/python.js +187 -0
- package/node-server/dist/routes/resources.d.ts +7 -0
- package/node-server/dist/routes/resources.js +77 -0
- package/node-server/dist/scripts/show-auth-qr.d.ts +1 -0
- package/node-server/dist/scripts/show-auth-qr.js +81 -0
- package/node-server/dist/terminal/pty-manager.d.ts +100 -0
- package/node-server/dist/terminal/pty-manager.js +246 -0
- package/node-server/dist/terminal/server.d.ts +19 -0
- package/node-server/dist/terminal/server.js +254 -0
- package/node-server/dist/terminal/types.d.ts +50 -0
- package/node-server/dist/terminal/types.js +9 -0
- package/node-server/package.json +45 -0
- package/package.json +99 -0
- package/scripts/postinstall.cjs +26 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Python Discovery Service Module
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./types"), exports);
|
|
21
|
+
__exportStar(require("./discovery-service"), exports);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Discovery Service Types
|
|
3
|
+
*/
|
|
4
|
+
export type PythonEnvType = 'system' | 'conda' | 'pyenv' | 'venv' | 'homebrew' | 'uv' | 'pixi';
|
|
5
|
+
export interface PythonEnvironment {
|
|
6
|
+
path: string;
|
|
7
|
+
version: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
envType: PythonEnvType;
|
|
10
|
+
envName: string | null;
|
|
11
|
+
hasIpykernel: boolean;
|
|
12
|
+
kernelName: string | null;
|
|
13
|
+
externallyManaged: boolean;
|
|
14
|
+
installHint: string | null;
|
|
15
|
+
}
|
|
16
|
+
export interface DiscoveryCandidate {
|
|
17
|
+
path: string;
|
|
18
|
+
envType: PythonEnvType;
|
|
19
|
+
envName: string | null;
|
|
20
|
+
base?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface CacheData {
|
|
23
|
+
environments: Record<string, PythonEnvironment>;
|
|
24
|
+
timestamp: number;
|
|
25
|
+
}
|
|
26
|
+
export interface InstallKernelResult {
|
|
27
|
+
kernelName: string;
|
|
28
|
+
pythonPath: string;
|
|
29
|
+
message: string;
|
|
30
|
+
}
|
|
31
|
+
export type KernelProvisionErrorCode = 'python_not_found' | 'externally_managed' | 'needs_ipykernel' | 'install_failed' | 'register_failed';
|
|
32
|
+
export declare class KernelProvisionError extends Error {
|
|
33
|
+
code: KernelProvisionErrorCode;
|
|
34
|
+
installHint?: string;
|
|
35
|
+
constructor(message: string, code: KernelProvisionErrorCode, installHint?: string);
|
|
36
|
+
}
|
|
37
|
+
export interface CacheInfo {
|
|
38
|
+
cachedCount: number;
|
|
39
|
+
cacheAgeHours: number | null;
|
|
40
|
+
cacheValid: boolean;
|
|
41
|
+
cacheFile: string;
|
|
42
|
+
}
|
|
43
|
+
export declare const DEFAULT_CACHE_TTL_HOURS = 24;
|
|
44
|
+
export declare const DEFAULT_VERSION_CHECK_TIMEOUT_MS = 5000;
|
|
45
|
+
export declare const DEFAULT_IPYKERNEL_CHECK_TIMEOUT_MS = 10000;
|
|
46
|
+
export declare const DEFAULT_CONDA_LIST_TIMEOUT_MS = 30000;
|
|
47
|
+
export declare const DEFAULT_KERNEL_INSTALL_TIMEOUT_MS = 120000;
|
|
48
|
+
export declare const DEFAULT_REGISTRATION_TIMEOUT_MS = 60000;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Python Discovery Service Types
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_REGISTRATION_TIMEOUT_MS = exports.DEFAULT_KERNEL_INSTALL_TIMEOUT_MS = exports.DEFAULT_CONDA_LIST_TIMEOUT_MS = exports.DEFAULT_IPYKERNEL_CHECK_TIMEOUT_MS = exports.DEFAULT_VERSION_CHECK_TIMEOUT_MS = exports.DEFAULT_CACHE_TTL_HOURS = exports.KernelProvisionError = void 0;
|
|
7
|
+
class KernelProvisionError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
installHint;
|
|
10
|
+
constructor(message, code, installHint) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'KernelProvisionError';
|
|
13
|
+
this.code = code;
|
|
14
|
+
this.installHint = installHint;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.KernelProvisionError = KernelProvisionError;
|
|
18
|
+
// Configuration defaults
|
|
19
|
+
exports.DEFAULT_CACHE_TTL_HOURS = 24;
|
|
20
|
+
exports.DEFAULT_VERSION_CHECK_TIMEOUT_MS = 5000;
|
|
21
|
+
exports.DEFAULT_IPYKERNEL_CHECK_TIMEOUT_MS = 10000;
|
|
22
|
+
exports.DEFAULT_CONDA_LIST_TIMEOUT_MS = 30000;
|
|
23
|
+
exports.DEFAULT_KERNEL_INSTALL_TIMEOUT_MS = 120000;
|
|
24
|
+
exports.DEFAULT_REGISTRATION_TIMEOUT_MS = 60000;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem Service - Real filesystem operations
|
|
3
|
+
*
|
|
4
|
+
* Node.js port of the Python FilesystemService.
|
|
5
|
+
*/
|
|
6
|
+
import { FileInfo, FileInfoResponse, FileType, DirectoryListing, MtimeResponse, ReadFileResponse, NebulaCell, NotebookCellsResponse, SaveNotebookResult } from './types';
|
|
7
|
+
export interface AgentPermissionSnapshot {
|
|
8
|
+
agent_created: boolean;
|
|
9
|
+
agent_permitted: boolean;
|
|
10
|
+
has_history: boolean;
|
|
11
|
+
can_agent_modify: boolean;
|
|
12
|
+
reason: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class FilesystemService {
|
|
15
|
+
private writeLocks;
|
|
16
|
+
private defaultRoot;
|
|
17
|
+
constructor(defaultRoot?: string);
|
|
18
|
+
/**
|
|
19
|
+
* Get the server root directory.
|
|
20
|
+
*/
|
|
21
|
+
getRootDirectory(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Set the server root directory and persist it.
|
|
24
|
+
*/
|
|
25
|
+
setRootDirectory(rootDirectory: string, options?: {
|
|
26
|
+
persist?: boolean;
|
|
27
|
+
}): string;
|
|
28
|
+
private expandRootDirectory;
|
|
29
|
+
private saveRootDirectory;
|
|
30
|
+
/**
|
|
31
|
+
* Normalize and expand path
|
|
32
|
+
*/
|
|
33
|
+
normalizePath(filePath: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Serialize write operations per notebook to avoid interleaving writes.
|
|
36
|
+
*/
|
|
37
|
+
private withWriteLock;
|
|
38
|
+
/**
|
|
39
|
+
* Atomically write a file (write temp, fsync, rename, fsync dir).
|
|
40
|
+
* Prevents partial/corrupt files on interruption.
|
|
41
|
+
*/
|
|
42
|
+
private atomicWriteFileSync;
|
|
43
|
+
private writeJsonAtomicSync;
|
|
44
|
+
/**
|
|
45
|
+
* Format file size for display
|
|
46
|
+
*/
|
|
47
|
+
formatSize(size: number): string;
|
|
48
|
+
/**
|
|
49
|
+
* Determine file type from extension
|
|
50
|
+
*/
|
|
51
|
+
getFileType(extension: string): FileType;
|
|
52
|
+
/**
|
|
53
|
+
* Get file info for a path
|
|
54
|
+
*/
|
|
55
|
+
private getFileInfo;
|
|
56
|
+
/**
|
|
57
|
+
* Convert FileInfo to FileInfoResponse for API
|
|
58
|
+
*/
|
|
59
|
+
private toFileInfoResponse;
|
|
60
|
+
/**
|
|
61
|
+
* Get directory modification time (lightweight check for changes)
|
|
62
|
+
*/
|
|
63
|
+
getDirectoryMtime(dirPath: string): MtimeResponse;
|
|
64
|
+
/**
|
|
65
|
+
* Get file modification time
|
|
66
|
+
*/
|
|
67
|
+
getFileMtime(filePath: string): MtimeResponse;
|
|
68
|
+
/**
|
|
69
|
+
* List contents of a directory
|
|
70
|
+
*/
|
|
71
|
+
listDirectory(dirPath: string): DirectoryListing;
|
|
72
|
+
/**
|
|
73
|
+
* Read a file's contents
|
|
74
|
+
*/
|
|
75
|
+
readFile(filePath: string): ReadFileResponse;
|
|
76
|
+
/**
|
|
77
|
+
* Write content to a file
|
|
78
|
+
*/
|
|
79
|
+
writeFile(filePath: string, content: unknown, fileType?: 'text' | 'notebook'): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Create a new file or directory
|
|
82
|
+
*/
|
|
83
|
+
createFile(filePath: string, isDirectory?: boolean): FileInfo & {
|
|
84
|
+
is_directory: boolean;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Get the history file path for a notebook
|
|
88
|
+
*/
|
|
89
|
+
private getHistoryPath;
|
|
90
|
+
/**
|
|
91
|
+
* Get the session state file path for a notebook
|
|
92
|
+
*/
|
|
93
|
+
private getSessionPath;
|
|
94
|
+
/**
|
|
95
|
+
* Get the journal file path for a notebook (used for crash-safe commits)
|
|
96
|
+
*/
|
|
97
|
+
private getJournalPath;
|
|
98
|
+
private readJournal;
|
|
99
|
+
private hasPendingCommit;
|
|
100
|
+
private getNebulaPaths;
|
|
101
|
+
/**
|
|
102
|
+
* Delete notebook-related metadata files (history, session)
|
|
103
|
+
*/
|
|
104
|
+
private deleteNotebookMetadata;
|
|
105
|
+
/**
|
|
106
|
+
* Delete a file or directory
|
|
107
|
+
*/
|
|
108
|
+
deleteFile(filePath: string): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Rename notebook-related metadata files
|
|
111
|
+
*/
|
|
112
|
+
private renameNotebookMetadata;
|
|
113
|
+
/**
|
|
114
|
+
* Rename/move a file or directory
|
|
115
|
+
*/
|
|
116
|
+
renameFile(oldPath: string, newPath: string): FileInfo;
|
|
117
|
+
/**
|
|
118
|
+
* Duplicate notebook-related metadata files
|
|
119
|
+
*/
|
|
120
|
+
private duplicateNotebookMetadata;
|
|
121
|
+
/**
|
|
122
|
+
* Recursively copy a directory
|
|
123
|
+
*/
|
|
124
|
+
private copyDirectoryRecursive;
|
|
125
|
+
/**
|
|
126
|
+
* Duplicate a file or directory with _copy suffix
|
|
127
|
+
*/
|
|
128
|
+
duplicateFile(filePath: string): FileInfoResponse;
|
|
129
|
+
/**
|
|
130
|
+
* Upload a file to a directory
|
|
131
|
+
*/
|
|
132
|
+
uploadFile(destDir: string, tempFilePath: string, originalName: string): Promise<FileInfoResponse>;
|
|
133
|
+
/**
|
|
134
|
+
* Convert Jupyter source to string
|
|
135
|
+
*/
|
|
136
|
+
private sourceToString;
|
|
137
|
+
/**
|
|
138
|
+
* Convert string to Jupyter source format (array of lines)
|
|
139
|
+
*/
|
|
140
|
+
private stringToSource;
|
|
141
|
+
/**
|
|
142
|
+
* Convert Jupyter outputs to Nebula format
|
|
143
|
+
*/
|
|
144
|
+
private convertOutputs;
|
|
145
|
+
/**
|
|
146
|
+
* Convert Nebula outputs back to Jupyter format
|
|
147
|
+
*/
|
|
148
|
+
private convertOutputsToJupyter;
|
|
149
|
+
/**
|
|
150
|
+
* Read a notebook and convert to internal cell format
|
|
151
|
+
*/
|
|
152
|
+
getNotebookCells(notebookPath: string): NotebookCellsResponse;
|
|
153
|
+
/**
|
|
154
|
+
* Read a notebook and convert to internal cell format, resolving default kernel if needed
|
|
155
|
+
*/
|
|
156
|
+
getNotebookCellsWithKernel(notebookPath: string): Promise<NotebookCellsResponse>;
|
|
157
|
+
/**
|
|
158
|
+
* Save cells to a notebook file
|
|
159
|
+
*/
|
|
160
|
+
saveNotebookCells(notebookPath: string, cells: NebulaCell[], kernelName?: string, notebookMetadata?: Record<string, unknown>): SaveNotebookResult;
|
|
161
|
+
/**
|
|
162
|
+
* Save notebook cells and history in a single crash-safe commit.
|
|
163
|
+
* Uses a small journal + atomic writes to avoid partial files.
|
|
164
|
+
*/
|
|
165
|
+
saveNotebookBundle(notebookPath: string, cells: NebulaCell[], kernelName?: string, history?: unknown[], session?: Record<string, unknown>, notebookMetadata?: Record<string, unknown>): Promise<SaveNotebookResult>;
|
|
166
|
+
/**
|
|
167
|
+
* Get notebook-level metadata
|
|
168
|
+
*/
|
|
169
|
+
getNotebookMetadata(notebookPath: string): Record<string, unknown>;
|
|
170
|
+
/**
|
|
171
|
+
* Update notebook-level metadata without modifying cells
|
|
172
|
+
*/
|
|
173
|
+
updateNotebookMetadata(notebookPath: string, metadataUpdates: Record<string, unknown>): Promise<{
|
|
174
|
+
success: boolean;
|
|
175
|
+
changed?: boolean;
|
|
176
|
+
mtime?: number;
|
|
177
|
+
error?: string;
|
|
178
|
+
}>;
|
|
179
|
+
private stripOutputsForHistorySnapshot;
|
|
180
|
+
private buildInitialHistory;
|
|
181
|
+
/**
|
|
182
|
+
* Set agent permission and ensure newly-permitted notebooks are immediately editable.
|
|
183
|
+
*/
|
|
184
|
+
setAgentPermission(notebookPath: string, permitted: boolean): Promise<{
|
|
185
|
+
success: boolean;
|
|
186
|
+
error?: string;
|
|
187
|
+
status?: AgentPermissionSnapshot;
|
|
188
|
+
}>;
|
|
189
|
+
/**
|
|
190
|
+
* Derive agent permission status from persisted notebook metadata.
|
|
191
|
+
*/
|
|
192
|
+
getAgentPermissionStatus(notebookPath: string): AgentPermissionSnapshot;
|
|
193
|
+
/**
|
|
194
|
+
* Check if a notebook is permitted for agent modifications
|
|
195
|
+
*/
|
|
196
|
+
isAgentPermitted(notebookPath: string): boolean;
|
|
197
|
+
/**
|
|
198
|
+
* Check if a notebook has history tracking enabled
|
|
199
|
+
*/
|
|
200
|
+
hasHistory(notebookPath: string): boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Save operation history for a notebook
|
|
203
|
+
*/
|
|
204
|
+
saveHistory(notebookPath: string, history: unknown[]): Promise<boolean>;
|
|
205
|
+
/**
|
|
206
|
+
* Load operation history for a notebook
|
|
207
|
+
*/
|
|
208
|
+
loadHistory(notebookPath: string): unknown[];
|
|
209
|
+
/**
|
|
210
|
+
* Save session state for a notebook
|
|
211
|
+
*/
|
|
212
|
+
saveSession(notebookPath: string, session: Record<string, unknown>): Promise<boolean>;
|
|
213
|
+
/**
|
|
214
|
+
* Load session state for a notebook
|
|
215
|
+
*/
|
|
216
|
+
loadSession(notebookPath: string): Record<string, unknown>;
|
|
217
|
+
}
|
|
218
|
+
export declare const fsService: FilesystemService;
|