Skip to main content

User interface

This page lists every surface the CS Jupyter client adds to JupyterLab, with its exact wording and behaviour, for developers, operators and support staff. For a walk-through, follow Getting started.

Each section names its source file under src/ in the cs-jupyter repository. Conventions:

ConventionMeaning
<alias>A placeholder; alias is the SSH host's name, seq the run number
CyberShuttleThe interface's own spelling of the product, quoted as shown
cs-plane in a messageAiravata's session server

Launcher section​

The client mounts a title row and a Sessions section above the Launcher's own cards. The panel exists nowhere else, so Launcher tabs cannot be closed, and one opens when the application starts. Source: CyberShuttlePanel.ts, SessionList.ts, session-ui.ts.

Title row​

ElementBehaviour
HeadingCyberShuttle
Identity button, signed outSign in; Signing in…, disabled, while sign-in runs
Identity button, signed inThe ID token's email, else name, else sub, else Account. Opens the account menu
Account menuDev Tunnels, SSH Keys, Sign out

Sign out drops the ID and refresh tokens and clears the Sessions section. On a session page it also returns to the address without a session. Sessions keep running on the cluster.

Sessions section​

ElementBehaviour
Leading iconA server rack; on a session page, a back arrow (Back to sessions) to the page without a session
Run History, SSH HostsOpen their dialogs; disabled while signed out
Session cardsOne per session, in the order Airavata returns them
Add Session cardOpens the Add Session dialog. Disabled while sessions load or a blocking note shows; its tooltip gives the reason

Notes shown under the header:

MessageWhen
Sign in to see your sessions and SSH hosts.Signed out
Loading sessions…First load after sign-in, before any session arrives
Add an SSH host before creating a session.The account has no SSH host
SSH hosts are temporarily unavailable.The first SSH host read failed
Session updates unavailable.A poll failed; cleared by the next successful poll
Sign in again to resume session updates.The ID token expired or was refused; polling stops
The error's own messageThe last action, SSH host read or sign-in failed, including a failed return from CILogon

Session cards​

PartContent
IconA CPU or GPU glyph: success colour when READY, error colour when FAILED, warning colour in transition
TitleThe SSH host alias, and the Slurm account when one is set
State pillThe session state; SUBMITTING while a Start request is in flight for a stopped or failed session
Current pillThe session this page is connected to
ResourcesCores, GPUs when requested, and memory in GiB (for example 4G), separated by ·
Countdown<time> left while STARTING or READY: 1h 5m from one hour up, 9m 30s below, warning colour at 10 minutes or less. Shows the full walltime until Slurm reports a start time

Clicking a card opens the session dialog.

Sign-in and account​

Welcome dialog​

Opens once the application and the panel have restored, when the tab is signed out and the URL has no query string. Source: session-ui.ts.

ElementContent
TitleWelcome to CyberShuttle Jupyter
BodyCyberShuttle Jupyter connects JupyterLab to remote HPC sessions. Sign in to continue.
ButtonSign in, which starts sign-in through CILogon

SSH Keys dialog​

Opened from SSH Keys in the account menu. Subtitle: A stored SSH key is kept for your account only. Assign it to an SSH host and SSH authentication there uses it. Source: SshKeys.ts.

ElementBehaviour
Upload keyToggles the upload form; Cancel while open
NameRequired; becomes the key's ID, for example delta-key
Private keyA file. Help: The private key file, such as ~/.ssh/id_ed25519. A passphrase is asked for during SSH authentication. Without a file: Choose the private key file to upload.
SubmitUpload; Uploading… while it runs
Key rowID, key type and fingerprint, Delete
DeleteAsks inline: Delete this key and unassign it?
Empty listNo SSH keys are stored.

The private key is sent to Airavata and never shown again.

Dev Tunnels dialog​

Opened from Dev Tunnels in the account menu. Subtitle: Connect a Dev Tunnels account to let a session use a Dev Tunnel. Optional; cs-plane keeps the credential. Source: DevTunnelsAccount.ts, DeviceCodeDialog.ts.

ElementBehaviour
Connect Microsoft, Connect GitHubStart a device-code sign-in with that provider; disabled while one is in progress
Connected card✓ Microsoft or ✓ GitHub, the account name, Disconnect
DisconnectAsks inline: Disconnect this Dev Tunnels account?

Device-code dialog:

ElementBehaviour
TitleSign in to Microsoft or Sign in to GitHub
BodyOpen the <provider> sign-in page and enter this one-time code: and the code
Copy iconTooltip Copy code; Code copied for two seconds, or Could not copy the code
Open sign-in pageOpens the provider's page in a new tab and reads Waiting…
Close, EscapeCancel the sign-in

On expiry the dialog shows <provider> device sign-in expired.

SSH hosts​

SSH Hosts dialog​

Opened from SSH Hosts in the Sessions section or Manage SSH hosts in the Add Session dialog. Subtitle: SSH hosts come from your SSH configuration. Add one here, or edit ~/.ssh/config directly. Source: SshHosts.ts.

The ~/.ssh/config these messages name is not on the user's computer: Airavata renders each account's stored hosts to a per-account file that its ssh reads with -F. This dialog is the only way to change it.

ElementBehaviour
Add SSH HostToggles the add form; Cancel while open
Host entry, collapsedAlias, user@hostname (or Uses SSH defaults), Delete
Host entry, expandedHostName, User, Port (when not 22), SSH key, each extra directive; Edit and Check health
Edit, DeleteEnabled only for hosts Airavata wrote; others have the tooltip This SSH host comes from your own SSH configuration.
DeleteAsks inline: Delete this entry from ~/.ssh/config? with Cancel and Delete
Check healthConnecting…, then Listening at <address>. or Nothing accepted a connection at <address>. in the success or error colour. Airavata opens a TCP connection to the first hop without logging in, and only to a public address
Empty listNo SSH hosts are configured.

Add and edit form:

FieldBehaviour
AliasAdd only; for example delta
SSH commandFor example ssh -p 2222 me@delta.example.edu. Help: Paste the ssh command that already works. Hostname, user, port, identity, jump host, and -o options are kept. Edit pre-fills it from the entry
SSH keyNone or a stored key. Help: SSH authentication to this SSH host uses the stored SSH key in place of any -i identity.
SubmitSave SSH host or Save changes; Saving… while it runs

The help text lists an identity, but Airavata refuses -i. It accepts a host, -p, -l, -J and an allowlist of -o options, and refuses any other flag and a remote command, so an entry cannot run a local program and its only credential is a stored key.

Closing the dialog re-reads the host list for the Sessions section.

The SSH Hosts dialog with delta expanded after Check health, reading Listening at login.delta.ncsa.illinois.edu:22 The SSH Hosts dialog with delta expanded after Check health, reading Listening at login.delta.ncsa.illinois.edu:22

SSH authentication console​

A terminal that opens when Airavata answers ssh_authentication_required: at the top of the open session or Add Session dialog, or on the page when neither is open. Slurm discovery, validation in Review, Submit, Start and Stop use it, and the action retries once after it succeeds. Source: ssh.ts.

MessageMeaning
<alias> is asking for credentials.The console opened
Opening interactive SSH authentication…Connecting to Airavata
Respond to the prompts below. Passwords and verification codes go straight to SSH and are not stored.Connected; type answers into the terminal
SSH authentication succeeded., then SSH authentication complete.Logged in; the console closes
SSH operation exited with status N., or Airavata's messageSSH ended without logging in
SSH operation connection failed., SSH operation connection closed.The WebSocket failed or closed
cs-plane did not negotiate the required cybershuttle.v1 subprotocol.Airavata refused the protocol; the socket closes with code 1002

Add Session dialog​

Title Add Session. It has two steps, configuration and Review; on Submit it becomes the new session's dialog. Source: CreateSessionForm.ts, SlurmDiscovery.ts, ReviewStep.ts.

Slurm discovery​

ElementBehaviour
SSH hostA list of aliases headed Select an SSH host…. With no host: No SSH hosts are configured., disabled, and a Manage SSH hosts button that opens the SSH Hosts dialog
Discovery panelPicking a host asks Airavata for its Slurm accounts, partitions and home directory. Shows Querying Slurm…, Connecting to <alias>. and Cancel
AuthenticationIf the cluster needs a login, the SSH authentication console opens while the panel reads Querying Slurm…; discovery then retries once
FailureSlurm discovery failed — <alias>, Airavata's message and Retry; also when the retry after authentication fails
CancelledOperation cancelled. Select Retry to continue. with Retry
No usable partitionNo CPU or GPU Slurm partitions were discovered for <alias>.

Configuration​

Fields appear after discovery succeeds. Changing the host resets them.

FieldDefaultLimits and behaviour
Resource typeCPU, if any CPU partition existsRadio CPU or GPU. A partition is GPU when it has a gpu or gpu:<type> GRES. Hidden when only one type exists
Slurm accountThe first discovered accountDiscovered accounts plus (no Slurm account), which sends no account
PartitionThe first partition of the chosen typename — N CPU · M MB, plus · k× type for GPU GRES; a bare gpu GRES is Generic GPU
Root folder$HOMERequired. Help: Relative to <home> unless it starts with /, ~ or $.
Cores22 to the partition's CPUs
Memory (MB)40964096 to the partition's memory
Walltime (minutes)601 to 525600 (365 days)
GPU typeThe partition's first GPU GRESGPU only
GPUs1GPU only; 1 to the GRES count of the chosen type
TransportLinkCheckboxes Link and Dev Tunnel; the last checked box cannot be cleared. Dev Tunnel is disabled until a Dev Tunnels account is connected, with the hint Connect a Dev Tunnels account in the account menu to use Dev Tunnel.

The cores and memory minimums and the walltime maximum mirror the bounds Airavata enforces on create. Review is enabled once a partition is selected. Enter in a field submits the step instead of closing the dialog.

Review​

ElementBehaviour
HeadingReview Slurm job, with cs-plane validates the generated Slurm script before submission; the script appears only if validation fails.
StatusValidating with Slurm…, then Validation passed. <message> or Validation failed. <message>. Airavata runs sbatch --test-only with the generated script
DetailSlurm's standard error, or the request's error
Generated Slurm script, Copy scriptOnly when validation failed
Retry validationAfter a failure or an error
BackReturns to the configuration step with the fields kept
SubmitEnabled only after validation passed; Submitting… while it runs. Creates the session, starts it and shows its session dialog

Each request carries an idempotency key, kept while the reviewed request is unchanged, so resubmitting it never creates a second session.

Session dialog​

Title CyberShuttle Session. Source: SessionDetail.ts.

PartContent
HeaderAlias, Slurm account or (no Slurm account), state pill
ActionsStart, Stop, Connect and Delete as in Actions by state. On the current session a Connected pill replaces Connect. A spinner shows while an action runs
DetailsJupyter (ready or pending), Run (seq), Root folder, Partition, Cores, Memory (MB), Walltime (min), Transport (Link, Dev Tunnel or Link + Dev Tunnel), GPU (count and type, when requested), Remaining (while STARTING or READY, highlighted at 10 minutes or less)
Usage plotsWhile live and samples exist: CPU as x.x / N cores against the requested cores, MEM as x.x / y.y GB, GPU as N% busy for the busiest GPU
Stopping noteSession <alias> is stopping... while STOPPING
ErrorThe last action's error, else the session's own error from Airavata
StatusThe live startup log until the session finishes; each line time-stamped, its stream (status, stdout or stderr) in the tooltip. Keeps the scroll position, or follows the end when scrolled to the bottom

Before the first poll returns the session, the dialog reads Waiting for live session state….

Connect reloads the page on the session, first saving open documents when another session is current; Architecture gives the sequence and the URL.

Actions by state​

Sessions and runs defines the states.

StateActions
SUBMITTING, QUEUED, STARTINGStop, Delete
READYStop, Connect once access is granted, Delete
STOPPINGDelete
STOPPED, FAILEDStart, which submits a new run; Delete

The session dialog of a FAILED session showing the sbatch error Requested node configuration is not available The session dialog of a FAILED session showing the sbatch error Requested node configuration is not available

Confirmations​

Source: session-actions.ts.

ActionTitleBodyButtons
StopStop sessionCancels the Slurm job on <alias>. Anything unsaved in this session's kernels and terminals is lost.Cancel, Stop
Delete, live sessionStop and delete session<root folder> on <alias> is <state>. Its Slurm job will be stopped now and the session deleted after it ends. (state in lowercase)Cancel, Stop and delete
Delete, finished sessionDelete sessionDelete <root folder> on <alias>? It has already ended.Cancel, Delete

Walltime and run history​

Status bar​

On a session page, the status item @cybershuttle/jupyter:walltime-status shows a clock and the remaining walltime while the session is STARTING or READY, in the warning colour at 10 minutes or less. Its tooltip reads <alias>: <time> of the session's <N> minutes left. It draws from the Launcher panel's state, polled every second. Once the session has finished or its walltime has run out, the page returns to the address without a session and opens Run History on that run. Source: usage.ts, CyberShuttlePanel.ts.

Run History dialog​

Opened from Run History in the Sessions section, or automatically after a session page ends. Subtitle: Every run of your sessions, running ones first. A run is kept even after its session is deleted. Source: RunHistory.ts, usage.ts.

ElementBehaviour
FilterAll, JupyterLab, VS Code
EntryAlias, time and state pill. Live entries read started <time> or not started yet; finished entries give the end time
Live entry, expandedState, Partition, Cores, Memory, Remaining (while STARTING or READY), and the latest usage plots
Finished entry, expandedRun report, below
EmptyNo runs yet., or No runs on this platform. with a filter

Run report:

RowContent
EndedEnd time
OutcomeThe run's final state
Ran forElapsed time from Slurm accounting, else end minus start, else —
Granted coresCores Slurm granted
Peak memorySlurm's maximum resident set size
RequestedMemory requested
CPU used, Memory usedN% of requested
PlotsPeak CPU, memory and GPU usage; CPU against the granted cores when known
Accounting noteWithin 10 minutes of the end: Slurm's accounting for this run has not flushed yet; peak memory and efficiency will appear here. Later: Slurm recorded no accounting for this run, so peak memory and efficiency are unknown.
Error, StatusThe run's error, and its startup log as frozen at the end

Accounting rows appear only when Slurm reported them.

Commands​

The command @cybershuttle/jupyter:select-session, labelled Select Session…, or Switch Session… on a session page, opens the Launcher with the Sessions section. Its palette category is CyberShuttle.

Without a connected session, commands that open or create a notebook, console or terminal, or run code, open the Launcher instead, and the requested document opens after Connect. Architecture lists the commands.