diff --git a/CHANGELOG.md b/CHANGELOG.md index 889f2a11..dc94b8fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,38 +4,95 @@ See [docs/changelog-template.md](docs/changelog-template.md) for formatting your ## [Unreleased] +### Building + +- [#155](https://github.com/2listic/dealiiX-platform/pull/155) Added `--no-sandbox` flag to `dev` and `start` scripts to fix Electron sandbox crash on Linux systems where `chrome-sandbox` is not owned by root after `npm install`. + ### Documentation +- [#153](https://github.com/2listic/dealiiX-platform/pull/153) Added documentation to inspect and programmatically empty keys from the Electron-store store. Added `network-mpi.json` file to test MPI support via plugin. - [#151](https://github.com/2listic/dealiiX-platform/pull/151) Updated registry and network exaples to include Step 4 Poisson solver example. -- [#122](https://github.com/2listic/dealiiX-platform/pull/82) Updated registry and network exaples to the new protocol indtroduced by PR #120. -- [#82](https://github.com/2listic/dealiiX-platform/pull/82) Added instructions to debug Svelte-renderer code in the Electron-Chromium dev tools. -- [#38](https://github.com/2listic/dealiiX-platform/pull/39) Added Git Hub section to the readme file. Update the pull request template. -- [#42](https://github.com/2listic/dealiiX-platform/pull/42) Added debugging instructions for Electron and Svelte. -- [#17](https://github.com/2listic/dealiiX-platform/pull/17) Created readme with install, run and packaging instructions. ### Canvas-graph - [#151](https://github.com/2listic/dealiiX-platform/pull/151) Bug fix over validation of new connections between nodes. - [#143](https://github.com/2listic/dealiiX-platform/pull/143) Network node `value` (sub-graph) is stripped from canvas data and restored during export. `createNewNetworkNode` now takes snapshot arrays as parameters. Stronger typing for network nodes with dedicated `RegisteredNetworkNodes` / `NetworkNodeOfTypeNetwork` types. Added `getNodesSnapshot()` / `getEdgesSnapshot()` helpers. Added `isNumericType()` utility and `NUMERIC_TYPES` constant. -- [#134](https://github.com/2listic/dealiiX-platform/pull/134) Added button to create a network node from the current graph. Added support for new network nodes during the loading and the exporting of a graph. Added feature to validate all the connection types of every input-output linked by an edge in a graph. -- [#99](https://github.com/2listic/dealiiX-platform/pull/99) Fixed connection validation after deleting an edge. Added caching for is_valid. -- [#67](https://github.com/2listic/dealiiX-platform/pull/67) Added missing nodes for the complete MWE. Added validation for nodes derived from abstract classes. Drag and drop state simplified. -- [#59](https://github.com/2listic/dealiiX-platform/pull/59) Added button to import graph from previously exported JSON file or from a JSON file adhering to the protocol. -- [#52](https://github.com/2listic/dealiiX-platform/pull/52) Nodes are removable by clicking on a dedicated button -- [#29](https://github.com/2listic/dealiiX-platform/pull/29) Added new nodes: std string, gridGenerator generate_from_name_and_arguments function, gridOut constructor, write_vtk method and bool. Nodes are rendered now more dynamically with a declarative approach based on the type of the node and the corresponding information provided in the uploaded JSON file. -- [#27](https://github.com/2listic/dealiiX-platform/pull/27) Added first new real Deal.II nodes: Unsigned, Triangulation<2,2> and Triangulation<2>::refine_global. Also included validation for new connections, validation for Unsigned internal values, drag&drop functionality and includes a bug fix on node id generation. -- [#22](https://github.com/2listic/dealiiX-platform/pull/22) Added type validation for new connections. Prevent multiple connections entering the same input handle. Added a simple cache system to reduce computation for connections already checked. -- Initial nodes and edges with string concatenation. ### UI/UX +- [#153](https://github.com/2listic/dealiiX-platform/pull/153) New modal to configure MPI execution. - [#152](https://github.com/2listic/dealiiX-platform/pull/152) Fixed sidebar overflow when too many nodes or buttons exceed the window height (wraps to two columns). Grouped related sidebar buttons into dropdown components. New input text in the sidebar to filter registry nodes by "type". Moved network nodes before registry nodes in the sidebar. Elementary constructor nodes ordered first among the other registry nodes. - [#147](https://github.com/2listic/dealiiX-platform/pull/147) Simplified elementary constructor input field rendering logic. Added fallback text input for all elementary constructor types. - [#142](https://github.com/2listic/dealiiX-platform/pull/142) Added button in the jobs table that opens a modal with the execution status for every node in the corresponding job. - [#138](https://github.com/2listic/dealiiX-platform/pull/138) Added button in the jobs table to read content of corresponding .out file. New library ansiUp is used to transform color ASCII codes into HTML tags. + +### Electron-Backend + +- [#153](https://github.com/2listic/dealiiX-platform/pull/153) Execution nodes' status is now saved in a dedicated `nodes-exec-status` directory on the remote server. +- [#142](https://github.com/2listic/dealiiX-platform/pull/142) Jobs state is now persistent across sessions. Added new persistent store to track internal job Ids with scheduler job Ids. +- [#139](https://github.com/2listic/dealiiX-platform/pull/139) App persistent storage moved from localStorage in the renderer to electron-store in the main process. + +### Protocol + +- [#146](https://github.com/2listic/dealiiX-platform/issues/146) Validated registry JSON during import: filter out non-compliant nodes. Excluded `abstract` and `network` node types from the sidebar available nodes list. +- [#143](https://github.com/2listic/dealiiX-platform/pull/143) Added `qualified_id` to all nodes during export/save/download, encoding nesting hierarchy (e.g., `"12_3"`). Removed on import. Added `parseGraphWithQualifiedIds()`, `addQualifiedIds()` and `removeQualifiedIds()`. Fixed removal of duplicate fields in standard nodes during export/save/download. +- [#141](https://github.com/2listic/dealiiX-platform/pull/141) Network nodes have the corresponding sub-graph saved in 'value' field as regular JSON instead of escaped string. + +### Project-Structure + +- [#139](https://github.com/2listic/dealiiX-platform/pull/139) Added library Electron-store to persist data and settings across sessions. + +### SSH communication + +- [#153](https://github.com/2listic/dealiiX-platform/pull/153) Added MPI support for Slurm job submission using two default sbatch templates (MPI and non-MPI). The active template is selected by a new switch button in the Settings modal, persisted in the settings store. Parameters are passed to the template from the UI. +- [#142](https://github.com/2listic/dealiiX-platform/pull/142) Added SSH communication to get the execution status of all the nodes in a specific job. +- [#138](https://github.com/2listic/dealiiX-platform/pull/91) Added SSH communication to retrieve content of file .out for a specific job. + +### Submodules + +- [#151](https://github.com/2listic/dealiiX-platform/pull/151) Coral submodule updated to include Step 4 Poisson Solver. Coral-Visualizer submodule updated to support .vtu files and show solution field. + +### Testing + +- [#146](https://github.com/2listic/dealiiX-platform/pull/146) Added unit tests for `filterValidNodes` function. +- [#143](https://github.com/2listic/dealiiX-platform/pull/143) Added unit tests for `addQualifiedIds` and `removeQualifiedIds`. + +## [1.2.0] - 2026-01-28 + +### Canvas-graph + +- [#134](https://github.com/2listic/dealiiX-platform/pull/134) Added button to create a network node from the current graph. Added support for new network nodes during the loading and the exporting of a graph. Added feature to validate all the connection types of every input-output linked by an edge in a graph. + +### UI/UX + - [#134](https://github.com/2listic/dealiiX-platform/pull/134) Added section in the sidebar to display and drag the network nodes in the canvas. - [#118](https://github.com/2listic/dealiiX-platform/pull/120) Added button to download the current graph locally. - [#113](https://github.com/2listic/dealiiX-platform/pull/120) Display logged-in user's username. + +### Protocol + +- [#134](https://github.com/2listic/dealiiX-platform/pull/134) Added support for the new "network node" type. + +### CI/CD + +- [#135](https://github.com/2listic/dealiiX-platform/pull/135) Added unit testing step in the GitHub Actions workflows. + +### Testing + +- [#135](https://github.com/2listic/dealiiX-platform/pull/135) Added support for unit test with Vitest. Added unit tests for the function validateGraphData responsible for validating a graph before importing it into the editor. + +## [1.1.0] - 2026-01-13 + +### Documentation + +- [#122](https://github.com/2listic/dealiiX-platform/pull/82) Updated registry and network exaples to the new protocol indtroduced by PR #120. + +### Canvas-graph + +- [#99](https://github.com/2listic/dealiiX-platform/pull/99) Fixed connection validation after deleting an edge. Added caching for is_valid. + +### UI/UX + - [#120](https://github.com/2listic/dealiiX-platform/pull/120) Added functionality for editing the displayed node's name. - [#116](https://github.com/2listic/dealiiX-platform/pull/116) Input argument names are now displayed for clarity, along with the output types. Handlers are now larger and easier to interact with. - [#114](https://github.com/2listic/dealiiX-platform/pull/114) Added reusable confirmation modal to user logout and project deletion. @@ -47,6 +104,57 @@ See [docs/changelog-template.md](docs/changelog-template.md) for formatting your - [#80](https://github.com/2listic/dealiiX-platform/pull/80) Added panel with list of submitted jobs with current status and time. - [#76](https://github.com/2listic/dealiiX-platform/pull/76) Input text changed to input file to store the path to private SSH key. - [#75](https://github.com/2listic/dealiiX-platform/pull/75) Added toaster component to display error/success message to the user. Added also a logic to update Svelte Flow panel with additional messages or logs. + +### Electron-Backend + +- [#72](https://github.com/2listic/dealiiX-platform/pull/72) Color mode made persistent across sessions + +### Remote-Server + +- [#103](https://github.com/2listic/dealiiX-platform/pull/103) Added HTTP requests for sharing projects with other users giving read or write permissions. +- [#101](https://github.com/2listic/dealiiX-platform/pull/101) Added logic to make HTTP requests to the new Remote Server, specifically authorization functionality and CRUD operations to the Projects endpoints. + +### Protocol + +- [#120](https://github.com/2listic/dealiiX-platform/pull/120) Removed "type_hash" from registry JSON and replaced with "type". Simplified nework JSON removing duplicated information already present in the registry like "arguments", "inputs" and "outputs". Added optional "name" key in the network JSON in order to customize the name of the nodes in the graph. +- [#116](https://github.com/2listic/dealiiX-platform/pull/116) Added support for the "output" connection type and for multiple outputs returned from a single node. Added support for node types float, str and for the generic any type. Added support for the Python backend through the new enum values primitive, function, and method. + +### SSH communication + +- [#91](https://github.com/2listic/dealiiX-platform/pull/91) Updated SSH command to run Coral with new CLI +- [#88](https://github.com/2listic/dealiiX-platform/pull/88) New functionality to open a Electron window pointing to a specific url +- [#83](https://github.com/2listic/dealiiX-platform/pull/83) Added logic to retrieve status, start and finish time of the last submitted jobs +- [#82](https://github.com/2listic/dealiiX-platform/pull/82) Added polling to display if submitted Slurm job finishes with failed or completed status + +### Submodules + +- [#95](https://github.com/2listic/dealiiX-platform/pull/95) Coral Visualizer submodule updated to show carotid vtk file + fix add Coral submodule. + +### Docker + +- [#90](https://github.com/2listic/dealiiX-platform/pull/90) Added docker-compose file to build and run the Coral+SSH+Slurm and the Coral Visualizer containers + +## [1.0.9] - 2025-09-19 + +### Documentation + +- [#82](https://github.com/2listic/dealiiX-platform/pull/82) Added instructions to debug Svelte-renderer code in the Electron-Chromium dev tools. +- [#38](https://github.com/2listic/dealiiX-platform/pull/39) Added Git Hub section to the readme file. Update the pull request template. +- [#42](https://github.com/2listic/dealiiX-platform/pull/42) Added debugging instructions for Electron and Svelte. +- [#17](https://github.com/2listic/dealiiX-platform/pull/17) Created readme with install, run and packaging instructions. + +### Canvas-graph + +- [#67](https://github.com/2listic/dealiiX-platform/pull/67) Added missing nodes for the complete MWE. Added validation for nodes derived from abstract classes. Drag and drop state simplified. +- [#59](https://github.com/2listic/dealiiX-platform/pull/59) Added button to import graph from previously exported JSON file or from a JSON file adhering to the protocol. +- [#52](https://github.com/2listic/dealiiX-platform/pull/52) Nodes are removable by clicking on a dedicated button +- [#29](https://github.com/2listic/dealiiX-platform/pull/29) Added new nodes: std string, gridGenerator generate_from_name_and_arguments function, gridOut constructor, write_vtk method and bool. Nodes are rendered now more dynamically with a declarative approach based on the type of the node and the corresponding information provided in the uploaded JSON file. +- [#27](https://github.com/2listic/dealiiX-platform/pull/27) Added first new real Deal.II nodes: Unsigned, Triangulation<2,2> and Triangulation<2>::refine_global. Also included validation for new connections, validation for Unsigned internal values, drag&drop functionality and includes a bug fix on node id generation. +- [#22](https://github.com/2listic/dealiiX-platform/pull/22) Added type validation for new connections. Prevent multiple connections entering the same input handle. Added a simple cache system to reduce computation for connections already checked. +- Initial nodes and edges with string concatenation. + +### UI/UX + - [#71](https://github.com/2listic/dealiiX-platform/pull/71) Added a new button Settings with a text input to store path to private SSH key. - [#65](https://github.com/2listic/dealiiX-platform/pull/65) Custom checkbox input for dark/light mode switch instead of dropdown menu. - [#58](https://github.com/2listic/dealiiX-platform/pull/58) Nodes' lateral bar made collapsible on mouse hover and on click on dedicated button. @@ -74,17 +182,10 @@ See [docs/changelog-template.md](docs/changelog-template.md) for formatting your ### Protocol -- [#146](https://github.com/2listic/dealiiX-platform/issues/146) Validated registry JSON during import: filter out non-compliant nodes. Excluded `abstract` and `network` node types from the sidebar available nodes list. -- [#143](https://github.com/2listic/dealiiX-platform/pull/143) Added `qualified_id` to all nodes during export/save/download, encoding nesting hierarchy (e.g., `"12_3"`). Removed on import. Added `parseGraphWithQualifiedIds()`, `addQualifiedIds()` and `removeQualifiedIds()`. Fixed removal of duplicate fields in standard nodes during export/save/download. -- [#141](https://github.com/2listic/dealiiX-platform/pull/141) Network nodes have the corresponding sub-graph saved in 'value' field as regular JSON instead of escaped string. -- [#134](https://github.com/2listic/dealiiX-platform/pull/134) Added support for the new "network node" type. -- [#120](https://github.com/2listic/dealiiX-platform/pull/120) Removed "type_hash" from registry JSON and replaced with "type". Simplified nework JSON removing duplicated information already present in the registry like "arguments", "inputs" and "outputs". Added optional "name" key in the network JSON in order to customize the name of the nodes in the graph. -- [#116](https://github.com/2listic/dealiiX-platform/pull/116) Added support for the “output” connection type and for multiple outputs returned from a single node. Added support for node types float, str and for the generic any type. Added support for the Python backend through the new enum values primitive, function, and method. - [#47](https://github.com/2listic/dealiiX-platform/pull/47) Migration from "self" to "-1" as output for stateful nodes. Index of edge's source_output starting from 0. Nodes and edges indexes starting from 0. ### Project-Structure -- [#139](https://github.com/2listic/dealiiX-platform/pull/139) Added library Electron-store to persist data and settings across sessions. - [#78](https://github.com/2listic/dealiiX-platform/pull/78) Added Coral repo as a sub-dependency - [#77](https://github.com/2listic/dealiiX-platform/pull/77) Dependency versions updated in package-lock.json - [#67](https://github.com/2listic/dealiiX-platform/pull/67) Nodes are unified in one unique component. @@ -111,23 +212,7 @@ See [docs/changelog-template.md](docs/changelog-template.md) for formatting your - [#4](https://github.com/2listic/dealiiX-platform/pull/4) Added .deb distributable for Linux. - [#14](https://github.com/2listic/dealiiX-platform/pull/14) Added .dmg distributable for macOS. -### Submodules - -- [#151](https://github.com/2listic/dealiiX-platform/pull/151) Coral submodule updated to include Step 4 Poisson Solver. Coral-Visualizer submodule updated to support .vtu files and show solution field. -- [#95](https://github.com/2listic/dealiiX-platform/pull/95) Coral Visualizer submodule updated to show carotid vtk file + fix add Coral submodule. - -### Docker - -- [#90](https://github.com/2listic/dealiiX-platform/pull/90) Added docker-compose file to build and run the Coral+SSH+Slurm and the Coral Visualizer containers - ### CI/CD -- [#135](https://github.com/2listic/dealiiX-platform/pull/135) Added unit testing step in the GitHub Actions workflows. - [#78](https://github.com/2listic/dealiiX-platform/pull/78) Fixed issue with imports during packaging. - [#38](https://github.com/2listic/dealiiX-platform/pull/37) Distributables are now created for tagged versions only. - -### Testing - -- [#146](https://github.com/2listic/dealiiX-platform/pull/146) Added unit tests for `filterValidNodes` function. -- [#143](https://github.com/2listic/dealiiX-platform/pull/143) Added unit tests for `addQualifiedIds` and `removeQualifiedIds`. -- [#135](https://github.com/2listic/dealiiX-platform/pull/135) Added support for unit test with Vitest. Added unit tests for the function validateGraphData responsible for validating a graph before importing it into the editor. diff --git a/CLAUDE.md b/CLAUDE.md index 1d00566d..17692316 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,7 +43,7 @@ Stores use Svelte 5 runes (`.svelte.js` / `.svelte.ts` files): - `nodes.svelte.ts` - Central store for flow nodes/edges and the registry. Exports `getNodes()`, `getNodesSnapshot()`, `setNodes()`, `getEdges()`, `getEdgesSnapshot()`, `setEdges()`, `setRegistry()`. Network nodes use dedicated `RegisteredNetworkNodes` / `NetworkNodeOfTypeNetwork` types. - `auth.svelte.js` - JWT token for coral-remote-server API -- `settingsStore.svelte.js` - User settings (SSH key path, visualizer URL) +- `settingsStore.svelte.js` - User settings stored under a single `'settings'` key in electron-store. Exports named key constants (`SSH_PATH`, `URL_VISUALIZER`, `URL_REMOTE_SERVER`, `USE_MPI`) and a `settingsState` object with `getKey(key)` / `setKey(key, value)` methods. - `currentProjectStore.svelte.js` - Current project metadata - `jobsStore.svelte.js` - Slurm job tracking @@ -225,6 +225,9 @@ cd /app && cmake -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build - **IPC channels**: `execute-ssh-with-key`, `export-graph-ssh`, `set-theme`, `open-external-url` - **Pre-commit hooks**: Husky runs `npm run lint` then Prettier; lint failures abort commit - **API requests**: All authenticated requests go through `src/lib/requests/api.js` which auto-attaches the Bearer token +- **Slurm batch templates**: Two templates in `src/lib/templates/` — `sbatch.template.sh` (non-MPI) and `sbatch-mpi.template.sh` (MPI via `mpirun --allow-run-as-root -np ${SLURM_NTASKS:-1}`). Imported at build time via Vite's `?raw` suffix. `sshMessages.ts` selects between them based on the `USE_MPI` setting. Both templates expose `{{INTERNAL_JOB_ID}}` (used for `--touch-dir nodes-exec-status/`) and `{{TIME_LIMIT}}`. The MPI template additionally exposes `{{NODES}}` and `{{NTASKS_PER_NODE}}`, filled at runtime from `JobConfig` (defaults: 1 node, 4 tasks/node, 01:00:00 time limit). Clicking Execute always opens `JobConfigModal.svelte` (renamed from `MpiConfigModal.svelte`) — it shows MPI-specific fields (nodes, tasks/node) only when MPI is enabled, and always shows the time limit field. +- **MPI graph payload**: When MPI is enabled, `buildGraphPayload()` in `sshMessages.ts` injects a `plugin: { MPI: { enabled: true, max_num_threads: 1 } }` block at the top of the exported network JSON, as required by CORAL for MPI initialization. +- **Node execution status**: `getNodesExecutionStatus(jobIdInternal)` reads files from `/app/shared-data/nodes-exec-status//` on the remote server, returning a `Map` of status sequences (e.g. `'running'`, `'succeeded'`, `'failed'`). ## Git Workflow diff --git a/README.md b/README.md index a833e424..62ba44ec 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,21 @@ Run unit tests For more options see the [general instructions](https://www.electronjs.org/docs/latest/tutorial/debugging-main-process) or the [specific ones](https://www.electronjs.org/docs/latest/tutorial/debugging-vscode) for VS Code -### Debugging Svelte +#### Inspecting the Electron Store + +The app uses [electron-store](https://github.com/sindresorhus/electron-store) to persist data. You can inspect and modify it from the DevTools console (**CTRL+SHIFT+I**): + +```js +// Get a value +await window.electron.store.get('jobIdMap') + +// Remove a value +await window.electron.store.remove('jobIdMap') +``` + +Available keys are defined in [electron/utils/storage.js](electron/utils/storage.js). + +## Debugging Svelte - Execute `npm run dev` and open the Source tab in the Chormium dev tools (**CTRL+SHIFT+I**). Then manually add the folder containing this repository from the Workspace sub-tab. Now add your breakpoints and start debugging. - In Svelte code you can also use [`{@debug}`](https://svelte.dev/docs/svelte/@debug) or [`$inspect`](https://svelte.dev/docs/svelte/$inspect). diff --git a/coral b/coral index f94f8219..7cdeeb31 160000 --- a/coral +++ b/coral @@ -1 +1 @@ -Subproject commit f94f821948e41d978c8f778b1491a279722e81a9 +Subproject commit 7cdeeb310b2557775bea51fe27c79f5e922c938d diff --git a/docker-compose.yml b/docker-compose.yml index dd7050c2..b27c2f70 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,6 +15,9 @@ services: - '8000:8000' volumes: - ./containers/shared-data:/app/shared-data + environment: + - OMPI_ALLOW_RUN_AS_ROOT=1 + - OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 networks: - coral-network # restart: unless-stopped diff --git a/electron/main.js b/electron/main.js index 6dd102c5..17605a69 100644 --- a/electron/main.js +++ b/electron/main.js @@ -3,7 +3,7 @@ import path from 'path' import { fileURLToPath } from 'url' import { - connectAndUploadGraph, + uploadFileViaSftp, connectToSSHWithKey, connectToSSHWithPassword, } from './utils/sshConnections.js' @@ -65,16 +65,13 @@ ipcMain.handle('execute-ssh-with-key', async (event, { command }) => { return await connectToSSHWithKey(command, pathToSsh) }) -ipcMain.handle('export-graph-ssh', async (event, { graph }) => { +ipcMain.handle('upload-file-ssh', async (event, { content, remotePath }) => { const settings = store.get('settings', {}) const pathToSsh = settings.sshPathKey if (!pathToSsh) { throw new Error('SSH key path not configured in settings') } - const jsonGraph = JSON.stringify(graph) - console.log('exported graph', jsonGraph) - const remotePath = '/app/shared-data/graph.json' - return await connectAndUploadGraph(jsonGraph, remotePath, pathToSsh) + return await uploadFileViaSftp(content, remotePath, pathToSsh) }) ipcMain.handle('open-external-url', async (event, url) => { diff --git a/electron/utils/sshConnections.js b/electron/utils/sshConnections.js index 9c27d0f9..e046512c 100644 --- a/electron/utils/sshConnections.js +++ b/electron/utils/sshConnections.js @@ -86,23 +86,23 @@ function connectToSSHWithKey(command, pathToSsh) { }) } -function connectAndUploadGraph(jsonGraph, remotePath, pathToSsh) { +function uploadFileViaSftp(content, remotePath, pathToSsh) { return new Promise((resolve, reject) => { - console.log('connectAndUploadGraph called') + console.log('uploadFileViaSftp called') const conn = new Client() conn .on('ready', () => { console.log('SSH Connection with key established') conn.sftp((err, sftp) => { if (err) return reject(err) - sftp.writeFile(remotePath, jsonGraph, (err) => { + sftp.writeFile(remotePath, content, (err) => { if (err) { conn.end() return reject(err) } console.log('File uploaded successfully') conn.end() - resolve(`Graph uploaded to: ${remotePath}`) + resolve(`File uploaded to: ${remotePath}`) }) }) }) @@ -120,4 +120,4 @@ function connectAndUploadGraph(jsonGraph, remotePath, pathToSsh) { }) } -export { connectToSSHWithPassword, connectToSSHWithKey, connectAndUploadGraph } +export { connectToSSHWithPassword, connectToSSHWithKey, uploadFileViaSftp } diff --git a/eslint.config.js b/eslint.config.js index efbe8913..89d9944c 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -44,6 +44,11 @@ export default defineConfig([ }, { plugins: {}, - rules: {}, + rules: { + // Allow underscore-prefixed names to be declared but unused. + // This is needed for callback parameter names in TypeScript interface definitions, + // See: https://eslint.org/docs/latest/rules/no-unused-vars#argsignorepattern + 'no-unused-vars': ['error', { argsIgnorePattern: '^_' }], + }, }, ]) diff --git a/package.json b/package.json index 18b64061..cec6e3fc 100644 --- a/package.json +++ b/package.json @@ -18,11 +18,11 @@ }, "scripts": { "dev:vite": "vite", - "dev": "npm run build:dev && cross-env NODE_ENV=development electron .", + "dev": "npm run build:dev && electron --no-sandbox .", "build:dev": "vite build --config vite.config.dev.js", "build": "vite build", "preview": "vite preview", - "start": "electron .", + "start": "electron --no-sandbox .", "start:debug": "electron . --inspect=9229", "start:forge": "electron-forge start", "package": "electron-forge package", diff --git a/src/lib/components/JobConfigModal.svelte b/src/lib/components/JobConfigModal.svelte new file mode 100644 index 00000000..ddc13c05 --- /dev/null +++ b/src/lib/components/JobConfigModal.svelte @@ -0,0 +1,186 @@ + + + +
+

Job Configuration

+
+ {#if showMpiFields} +
+
+ + +
+
+ + +
+
+ Total + {totalProcesses} +
+
+ {/if} +
+
+ + + + {timeLimitError || 'Use 0 for no time limit'} + +
+
+
+
+ + +
+
+
+ + diff --git a/src/lib/components/LoginForm.svelte b/src/lib/components/LoginForm.svelte index caa32034..0a38534a 100644 --- a/src/lib/components/LoginForm.svelte +++ b/src/lib/components/LoginForm.svelte @@ -69,10 +69,16 @@