Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
d31e867
Window sizing uses full screen dimensions
ngafar Oct 16, 2025
e04dd4f
Reverted back to hard coded size
ngafar Oct 16, 2025
78fe681
Used .maximize method
ngafar Oct 16, 2025
5b44838
Merge pull request #28 from mito-ds/better-window-sizing
aarondr77 Oct 16, 2025
66d0636
Added sideload flag
ngafar Oct 29, 2025
d14b389
add input field on homepage
aarondr77 Oct 31, 2025
9377998
Merge pull request #30 from mito-ds/sideload-flag
aarondr77 Oct 31, 2025
302a367
Merge branch 'dev' into homepage
aarondr77 Oct 31, 2025
2874fb8
mito-ai: responsive-to-input-fields
aarondr77 Oct 31, 2025
0ad3717
cleanup homepage
aarondr77 Oct 31, 2025
016b995
add buttons to select output
aarondr77 Oct 31, 2025
dbc90f7
stlye it
aarondr77 Oct 31, 2025
bd15105
simplify recent projects section
aarondr77 Nov 3, 2025
0d61ebd
polish
aarondr77 Nov 3, 2025
8d06fd1
cleanup
aarondr77 Nov 3, 2025
f0d5f54
let users unselect radio button
aarondr77 Nov 3, 2025
9181cdf
remove unused resetting ui logic
aarondr77 Nov 3, 2025
3b9de71
file upload poc
aarondr77 Nov 3, 2025
de0f5c8
send file path to mito-ai
aarondr77 Nov 3, 2025
a90248c
upload file icon
aarondr77 Nov 3, 2025
313d0b3
polish file upload button
aarondr77 Nov 3, 2025
917f4c9
add drag and drop functionality
aarondr77 Nov 3, 2025
b88696b
Merge pull request #31 from mito-ds/homepage
aarondr77 Nov 3, 2025
524195e
move selected files down
aarondr77 Nov 3, 2025
636bd40
space for many file uploads
aarondr77 Nov 3, 2025
daa051c
fix animation
aarondr77 Nov 3, 2025
299f24b
Merge pull request #32 from mito-ds/homepage-file-upload
aarondr77 Nov 3, 2025
b78cf22
upgrade mito-ai version
aarondr77 Nov 7, 2025
876aee0
update osx-arm
aarondr77 Nov 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions dev/start-mito-sideloaded.sh
Original file line number Diff line number Diff line change
Expand Up @@ -182,8 +182,8 @@ launch_mito_desktop() {
export MITO_PYTHON_PATH="$python_path"
export JUPYTERLAB_DESKTOP_PYTHON_PATH="$python_path"

# Launch mito-desktop
exec yarn start "\$@"
# Launch mito-desktop with sideload flag
exec yarn start --sideload "\$@"
EOF

chmod +x "$temp_launch_script"
Expand Down
87 changes: 43 additions & 44 deletions env_installer/conda-linux-64.lock

Large diffs are not rendered by default.

89 changes: 44 additions & 45 deletions env_installer/conda-linux-aarch64.lock

Large diffs are not rendered by default.

87 changes: 43 additions & 44 deletions env_installer/conda-osx-64.lock

Large diffs are not rendered by default.

89 changes: 44 additions & 45 deletions env_installer/conda-osx-arm64.lock

Large diffs are not rendered by default.

87 changes: 42 additions & 45 deletions env_installer/conda-win-64.lock

Large diffs are not rendered by default.

11 changes: 5 additions & 6 deletions env_installer/sign-osx-64.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ lib/libedit.0.dylib
lib/libev.4.dylib
lib/libexpat.1.10.2.dylib
lib/libffi.8.dylib
lib/libfmt.11.2.0.dylib
lib/libfmt.12.0.0.dylib
lib/libform.6.dylib
lib/libformw.6.dylib
lib/libgssapi_krb5.2.2.dylib
Expand All @@ -81,7 +81,7 @@ lib/libkrb5support.1.1.dylib
lib/liblz4.1.10.0.dylib
lib/liblzma.5.dylib
lib/liblzo2.2.0.0.dylib
lib/libmamba.4.0.1.dylib
lib/libmamba.4.1.1.dylib
lib/libmenu.6.dylib
lib/libmenuw.6.dylib
lib/libncurses.6.dylib
Expand All @@ -96,7 +96,7 @@ lib/libreproc.14.2.4.dylib
lib/libsimdjson.27.0.0.dylib
lib/libsolv.1.dylib
lib/libsolvext.1.dylib
lib/libsqlite3.3.50.4.dylib
lib/libsqlite3.3.51.0.dylib
lib/libssh2.1.0.1.dylib
lib/libssl.3.dylib
lib/libtcl8.6.dylib
Expand Down Expand Up @@ -198,15 +198,15 @@ lib/python3.12/site-packages/PIL/.dylibs/libharfbuzz.0.dylib
lib/python3.12/site-packages/PIL/.dylibs/libjpeg.62.4.0.dylib
lib/python3.12/site-packages/PIL/.dylibs/liblcms2.2.dylib
lib/python3.12/site-packages/PIL/.dylibs/liblzma.5.dylib
lib/python3.12/site-packages/PIL/.dylibs/libopenjp2.2.5.3.dylib
lib/python3.12/site-packages/PIL/.dylibs/libopenjp2.2.5.4.dylib
lib/python3.12/site-packages/PIL/.dylibs/libpng16.16.dylib
lib/python3.12/site-packages/PIL/.dylibs/libsharpyuv.0.dylib
lib/python3.12/site-packages/PIL/.dylibs/libtiff.6.dylib
lib/python3.12/site-packages/PIL/.dylibs/libwebp.7.dylib
lib/python3.12/site-packages/PIL/.dylibs/libwebpdemux.2.dylib
lib/python3.12/site-packages/PIL/.dylibs/libwebpmux.3.dylib
lib/python3.12/site-packages/PIL/.dylibs/libxcb.1.1.0.dylib
lib/python3.12/site-packages/PIL/.dylibs/libz.1.3.1.dylib
lib/python3.12/site-packages/PIL/.dylibs/libz.1.3.1.zlib-ng.dylib
lib/python3.12/site-packages/PIL/_avif.cpython-312-darwin.so
lib/python3.12/site-packages/PIL/_imaging.cpython-312-darwin.so
lib/python3.12/site-packages/PIL/_imagingcms.cpython-312-darwin.so
Expand Down Expand Up @@ -335,7 +335,6 @@ lib/python3.12/site-packages/pandas/_libs/window/indexers.cpython-312-darwin.so
lib/python3.12/site-packages/pandas/_libs/writers.cpython-312-darwin.so
lib/python3.12/site-packages/pkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg
lib/python3.12/site-packages/psutil/_psutil_osx.abi3.so
lib/python3.12/site-packages/psutil/_psutil_posix.abi3.so
lib/python3.12/site-packages/pyarrow/_acero.cpython-312-darwin.so
lib/python3.12/site-packages/pyarrow/_azurefs.cpython-312-darwin.so
lib/python3.12/site-packages/pyarrow/_compute.cpython-312-darwin.so
Expand Down
9 changes: 4 additions & 5 deletions env_installer/sign-osx-arm64.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ lib/libedit.0.dylib
lib/libev.4.dylib
lib/libexpat.1.10.2.dylib
lib/libffi.8.dylib
lib/libfmt.11.2.0.dylib
lib/libfmt.12.0.0.dylib
lib/libform.6.dylib
lib/libformw.6.dylib
lib/libgssapi_krb5.2.2.dylib
Expand All @@ -97,7 +97,7 @@ lib/libkrb5support.1.1.dylib
lib/liblz4.1.10.0.dylib
lib/liblzma.5.dylib
lib/liblzo2.2.0.0.dylib
lib/libmamba.4.0.1.dylib
lib/libmamba.4.1.1.dylib
lib/libmenu.6.dylib
lib/libmenuw.6.dylib
lib/libncurses.6.dylib
Expand All @@ -112,7 +112,7 @@ lib/libreproc.14.2.4.dylib
lib/libsimdjson.27.0.0.dylib
lib/libsolv.1.dylib
lib/libsolvext.1.dylib
lib/libsqlite3.3.50.4.dylib
lib/libsqlite3.3.51.0.dylib
lib/libssh2.1.0.1.dylib
lib/libssl.3.dylib
lib/libtcl8.6.dylib
Expand Down Expand Up @@ -212,7 +212,7 @@ lib/python3.12/site-packages/PIL/.dylibs/libharfbuzz.0.dylib
lib/python3.12/site-packages/PIL/.dylibs/libjpeg.62.4.0.dylib
lib/python3.12/site-packages/PIL/.dylibs/liblcms2.2.dylib
lib/python3.12/site-packages/PIL/.dylibs/liblzma.5.dylib
lib/python3.12/site-packages/PIL/.dylibs/libopenjp2.2.5.3.dylib
lib/python3.12/site-packages/PIL/.dylibs/libopenjp2.2.5.4.dylib
lib/python3.12/site-packages/PIL/.dylibs/libpng16.16.dylib
lib/python3.12/site-packages/PIL/.dylibs/libsharpyuv.0.dylib
lib/python3.12/site-packages/PIL/.dylibs/libtiff.6.dylib
Expand Down Expand Up @@ -349,7 +349,6 @@ lib/python3.12/site-packages/pandas/_libs/window/indexers.cpython-312-darwin.so
lib/python3.12/site-packages/pandas/_libs/writers.cpython-312-darwin.so
lib/python3.12/site-packages/pkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg
lib/python3.12/site-packages/psutil/_psutil_osx.abi3.so
lib/python3.12/site-packages/psutil/_psutil_posix.abi3.so
lib/python3.12/site-packages/pyarrow/_acero.cpython-312-darwin.so
lib/python3.12/site-packages/pyarrow/_azurefs.cpython-312-darwin.so
lib/python3.12/site-packages/pyarrow/_compute.cpython-312-darwin.so
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Mito",
"version": "1.0.0-6",
"version": "1.0.0-7",
"description": "Mito Desktop App",
"main": "./build/out/main/main.js",
"scripts": {
Expand Down
7 changes: 4 additions & 3 deletions scripts/copyassets.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,12 @@ function copyAssests() {
process.exit();
}

// Copy style and img directories into build directory
// Copy style, img directories, and CSS files into build directory
walkSync(srcDir, srcPath => {
const destPath = srcPath.replace(srcDir, dest);

if (srcPath.includes('style') || srcPath.includes('img')) {
if (srcPath.includes('style') || srcPath.includes('img') || srcPath.endsWith('.css')) {
fs.ensureDirSync(path.dirname(destPath));
fs.copySync(srcPath, destPath);
}
});
Expand Down Expand Up @@ -115,7 +116,7 @@ copyAssests();
if (process.argv.length > 2 && process.argv[2] == 'watch') {
watch(srcDir, { recursive: true }, function (evt, name) {
if (/(\.css$)|(\.html$)/.test(name)) {
console.log('Asset chage detected.');
console.log('Asset change detected.');
copyAssests();
}
});
Expand Down
21 changes: 21 additions & 0 deletions src/main/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,27 @@ export class JupyterApplication implements IApplication, IDisposable {
}
);

this._evm.registerEventHandler(
EventTypeMain.SelectFilesForUpload,
event => {
dialog
.showOpenDialog({
properties: [
'openFile',
'multiSelections'
],
buttonLabel: 'Select'
})
.then(({ filePaths }) => {
// Always send response, even if empty (user cancelled)
event.sender.send(
EventTypeRenderer.FilesForUploadSelected,
filePaths || []
);
});
}
);

this._evm.registerEventHandler(
EventTypeMain.SetDefaultWorkingDirectory,
(event, path: string) => {
Expand Down
1 change: 1 addition & 0 deletions src/main/config/sessionconfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export class SessionConfig {
token: string;
pageConfig: any;
cookies?: Electron.Cookie[];
aiPrompt?: string;

static createLocal(
workingDirectory?: string,
Expand Down
6 changes: 4 additions & 2 deletions src/main/eventtypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ export enum EventTypeMain {
CopySessionInfoToClipboard = 'copy-session-info-to-clipboard',
RestartSession = 'restart-session',
SetSettings = 'set-settings',
SetupCLICommandWithElevatedRights = 'setup-cli-command'
SetupCLICommandWithElevatedRights = 'setup-cli-command',
SelectFilesForUpload = 'select-files-for-upload'
}

// events sent to Renderer process
Expand All @@ -106,5 +107,6 @@ export enum EventTypeRenderer {
ResetPythonEnvSelectPopup = 'reset-python-env-select-popup',
SetPythonEnvironmentList = 'set-python-environment-list',
SetEnvironmentListUpdateStatus = 'set-environment-list-update-status',
ShowUpdateBundledEnvAction = 'show-bundled-env-action'
ShowUpdateBundledEnvAction = 'show-bundled-env-action',
FilesForUploadSelected = 'files-for-upload-selected'
}
4 changes: 4 additions & 0 deletions src/main/labview/labview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,7 @@ export class LabView implements IDisposable {
private _registerWebAppFrontEndHandlers() {
this._view.webContents.on('dom-ready', () => {
const setToSingleFileUIMode = this.shouldSetToSingleFileUIMode();
const aiPrompt = this._sessionConfig.aiPrompt;

this._view.webContents.executeJavaScript(`
// disable splash animation
Expand All @@ -445,6 +446,9 @@ export class LabView implements IDisposable {
document.head.append(style);
}

// Expose AI prompt if available
${aiPrompt ? `window.mitoDesktopAIPrompt = ${JSON.stringify(aiPrompt)};` : ''}

async function jlabDesktop_getLab() {
return new Promise((resolve) => {
const checkLab = () => {
Expand Down
6 changes: 5 additions & 1 deletion src/main/sessionwindow/sessionwindow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ export class SessionWindow implements IDisposable {
});

this._window.setMenuBarVisibility(false);
this._window.maximize();
this._window.show();

this._registerListeners();
Expand Down Expand Up @@ -542,14 +543,17 @@ export class SessionWindow implements IDisposable {

this._evm.registerEventHandler(
EventTypeMain.CreateNewSession,
async (event, type: 'notebook' | 'blank') => {
async (event, type: 'notebook' | 'blank', aiPrompt?: string) => {
if (event.sender !== this.contentView?.webContents) {
return;
}

this._showProgressView('Creating new session');

const sessionConfig = SessionConfig.createLocal();
if (aiPrompt) {
sessionConfig.aiPrompt = aiPrompt;
}
this._sessionConfig = sessionConfig;
this._wsSettings = new WorkspaceSettings(
sessionConfig.workingDirectory
Expand Down
12 changes: 12 additions & 0 deletions src/main/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,18 @@ export function getBundledPythonEnvPath(): string {
}

export function getBundledPythonPath(): string {
// Check if sideload flag is present (--sideload in process.argv)
const isSideload = process.argv.includes('--sideload');

if (isSideload) {
// If we are sideloading, we want to use the Python path from the environment variable.
// This is set in the start-mito-sideloaded.sh script, and will give us the python path
// from the conda environment where the mito-ai development version is installed.
const envPythonPath = process.env.MITO_PYTHON_PATH || process.env.JUPYTERLAB_DESKTOP_PYTHON_PATH;
if (envPythonPath) {
return envPythonPath;
}
}
return pythonPathForEnvPath(getBundledPythonEnvPath(), true);
}

Expand Down
13 changes: 11 additions & 2 deletions src/main/welcomeview/preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,11 @@ contextBridge.exposeInMainWorld('electronAPI', {
return ipcRenderer.invoke(EventTypeMain.IsDarkTheme);
},
newSession: (
type: 'notebook' | 'blank' | 'open' | 'open-file' | 'open-folder' | 'remote'
type: 'notebook' | 'blank' | 'open' | 'open-file' | 'open-folder' | 'remote',
aiPrompt?: string
) => {
if (type === 'notebook' || type === 'blank') {
ipcRenderer.send(EventTypeMain.CreateNewSession, type);
ipcRenderer.send(EventTypeMain.CreateNewSession, type, aiPrompt);
} else if (type === 'open') {
ipcRenderer.send(EventTypeMain.OpenFileOrFolder);
} else if (type === 'open-file') {
Expand Down Expand Up @@ -78,6 +79,14 @@ contextBridge.exposeInMainWorld('electronAPI', {
callback: InstallBundledPythonEnvStatusListener
) => {
onInstallBundledPythonEnvStatusListener = callback;
},
selectFilesForUpload: (): Promise<string[]> => {
return new Promise((resolve) => {
ipcRenderer.once(EventTypeRenderer.FilesForUploadSelected, (event: any, filePaths: string[]) => {
resolve(filePaths);
});
ipcRenderer.send(EventTypeMain.SelectFilesForUpload);
});
}
});

Expand Down
Loading
Loading