Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
8e18784
MDEngine 0.4.0 — initial import
arvandar Aug 31, 2026
7bf1546
Timeline frame numbers + configurable grid, inspector panel, ForceFie…
arvandar Aug 31, 2026
d51d26b
ReaxFF iron-oxidation example, LAMMPS_POTENTIALS auto-detect, explici…
arvandar Aug 31, 2026
101af49
Native LAMMPS dump support + hosted-tier runner Dockerfile
arvandar Aug 31, 2026
83c2a95
CLI/MCP: charge support, subcommand help, type->element mapping, NaN …
arvandar Aug 31, 2026
d41449b
Document in-flight-dump safety (peer-verified on a live 35MB mid-run …
arvandar Aug 31, 2026
0d388f2
MCP launch readiness: test suite, job_files tool, 2GB guard, CI, docs
arvandar Aug 31, 2026
cf62ed8
App launch prep: Finder file association, DMG packaging, notarization…
arvandar Aug 31, 2026
2b18bfb
CLAUDE.md: development guide (commands, hard-won gotchas, rules)
arvandar Aug 31, 2026
5951e42
Playback controls, live file-following, gesture naming cleanup
arvandar Aug 31, 2026
0ef2d98
Fix app hang on large in-flight trajectories
arvandar Aug 31, 2026
d9a2b79
Single-window app, orthographic projection, window titled by file
arvandar Aug 31, 2026
5e2a680
Fix permanently-blank Metal view after NSView recreation
arvandar Aug 31, 2026
bce4337
Drive rendering with an explicit per-window display link
arvandar Aug 31, 2026
ca66d09
File > Open Recent: last ten trajectories
arvandar Aug 31, 2026
ee7ebd4
Scale bar, Z-profile analysis (inspector + MCP z_profile tool)
arvandar Sep 1, 2026
673b894
Playback speed bar (1-60 f/s) above the play button
arvandar Sep 1, 2026
97940db
Video export (MP4/GIF), multi-pane views, view presets, shared render…
arvandar Sep 1, 2026
aa70d85
Inspector sections are collapsible DisclosureGroups (chevron, persist…
arvandar Sep 1, 2026
c2bccf5
Inspector View: Pane 1 (main) picker joins panes 2-4, synced with the…
arvandar Sep 1, 2026
202f34b
Per-pane disclosure groups in Inspector View: chevron, on/off toggle,…
arvandar Sep 1, 2026
9fe2c2e
Full-row click expands inspector groups; two-finger (secondary) drag …
arvandar Sep 1, 2026
831684b
Fix panes 3/4 never appearing; inspector order: Camera under View, Vi…
arvandar Sep 1, 2026
c05d417
Isometric home view, Left preset (camera roll), pane factory defaults…
arvandar Sep 1, 2026
8afedf7
Pane on/off switch in the header row (toggle without expanding)
arvandar Sep 1, 2026
1059e45
Don't flash the argon demo before an opened file
arvandar Sep 1, 2026
f2fa910
Restore Defaults resets pane views only, not which panes are active
arvandar Sep 1, 2026
0fdebf0
Pane view picker appears only when the pane is on (auto-expands on en…
arvandar Sep 1, 2026
22d4253
Per-pane scale bars: master checkbox re-arms all panes, per-pane chec…
arvandar Sep 1, 2026
4ceb2ab
Viewport View menu: Isometric + Planes submenu (Top/Bottom/Front/Rear…
arvandar Sep 1, 2026
0aaf271
Pane rows: inline view picker under a View column title; no duplicate…
arvandar Sep 1, 2026
59f2a1e
4.5x faster trajectory parsing + loading spinner
arvandar Sep 1, 2026
cb647e3
Flat pane rows (name/view/bar/on), spinner beside the loading text
arvandar Sep 1, 2026
53bda61
Inspector minimum width 320 so labels never overlap; one-line pane names
arvandar Sep 1, 2026
b3bb9eb
Per-element color and size overrides (Elements rows), applied everywhere
arvandar Sep 1, 2026
044824f
Restore Defaults: full camera reset (zoom included); element rows ref…
arvandar Sep 1, 2026
8548864
Panes segmented selector (1-4) replaces per-pane on/off switches
arvandar Sep 1, 2026
6232aea
Cumulative Panes indicator, Bar column master checkbox, background color
arvandar Sep 1, 2026
0a62918
Fix second color-pick not applying; stable Z-profile rows; centered p…
arvandar Sep 1, 2026
56fd78f
Pane view pickers right-aligned so their selection chevrons form one …
arvandar Sep 1, 2026
1600f17
Restore Defaults keeps element colors (resets views and sizes only)
arvandar Sep 1, 2026
342a943
Camera reset returns each pane to its own view, not isometric everywhere
arvandar Sep 1, 2026
b17b6c3
Element size sliders stretch with the inspector width
arvandar Sep 1, 2026
84e4d42
MCP: render_image tool + style args (colors/sizes/contrast preset) on…
arvandar Sep 2, 2026
d133823
Version 0.6.0 in bundle and MCP serverInfo
arvandar Sep 2, 2026
e93e7f0
Find brew-installed LAMMPS under GUI-minimal PATH (Claude Desktop MCP)
arvandar Sep 2, 2026
6b1f794
0.6.1: Z-profile CSV/Excel export + labeled depth axis; Inspector tog…
arvandar Sep 3, 2026
eedc917
MCP: remote execution hosts (~/.mdengine/hosts.json) — submit_lammps …
arvandar Sep 3, 2026
4cb71d6
CLAUDE.md: remote-execution notes, test count
arvandar Sep 3, 2026
5dae959
docker/runner-gpu: LAMMPS KOKKOS/CUDA pod image + sshd entrypoint + C…
arvandar Sep 5, 2026
ea42cfc
hosted: job contract v1 (GJOB-094) — pull model, presigned storage, s…
arvandar Sep 5, 2026
6ff65a9
runner-gpu: pull-runner (runner.sh) per CONTRACT v1; image runs it wh…
arvandar Sep 5, 2026
c5f80b7
hosted: stdlib mock endpoint + README; runner immediate heartbeat. Of…
arvandar Sep 5, 2026
c7b2634
hosted clients (GJOB-091): HostedClient in LAMMPSCore; CLI run --gpu/…
arvandar Sep 5, 2026
d9bd76d
hosted: endpoint skeleton (GJOB-094/096) — hashed keys, /v1/me, insta…
arvandar Sep 6, 2026
d6f0c5e
hosted/deploy: caddy systemd drop-in + log ownership fix found on fir…
arvandar Sep 6, 2026
ddc6b92
runner-gpu: prebuilt-binary Dockerfile + GHCR workflow (fast path for…
arvandar Sep 6, 2026
d10aeaa
runner-gpu workflow: block-style YAML, typed inputs
arvandar Sep 6, 2026
b0b20e7
Dockerfile.prebuilt: no lmp exec at build (libcuda is host-provided);…
arvandar Sep 6, 2026
74b2f96
hosted: RunPod launcher (REST v2) + reaper (GJOB-094/099) — ladder fa…
arvandar Sep 6, 2026
21dd63d
deploy: ship mde_launcher.py (found on redeploy — service failed to i…
arvandar Sep 6, 2026
ef78808
runner: write hostdiag.txt (nvidia-smi, devices, libcuda) into result…
arvandar Sep 6, 2026
6bfcb44
launcher: live GET /v2/pods wraps as {pods:[...]} — reaper saw nothin…
arvandar Sep 6, 2026
6858824
pod-side TTL: launcher passes MDE_WALL_LIMIT_S, start.sh runs runner …
arvandar Sep 6, 2026
222fa8f
launcher: thread wall_limit_s into pod_body (fix NameError caught by …
arvandar Sep 6, 2026
c32781f
Merge remote-tracking branch 'public/hosted-2026-09-06' into main-merged
arvandar Sep 6, 2026
4eac8a0
untrack mock pycache
arvandar Sep 6, 2026
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
49 changes: 49 additions & 0 deletions .github/workflows/runner-gpu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Build the hosted-tier GPU runner image and push to GHCR. Default = fast path from the prebuilt
# binary release asset; set build_from_source=true to compile (see docker/runner-gpu/Dockerfile).
name: runner-gpu
on:
workflow_dispatch:
inputs:
kokkos_arch:
description: 'Kokkos arch (ADA89 | AMPERE80)'
default: ADA89
type: string
tarball_url:
description: 'Prebuilt lammps tarball URL (release asset)'
default: https://github.com/forcefieldsilicon/mdengine/releases/download/runner-bin-20260905/lammps-kokkos-ADA89.tar.gz
type: string
build_from_source:
description: 'Compile instead of using the tarball'
default: false
type: boolean
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pick Dockerfile
id: pick
run: |
if [ "${{ inputs.build_from_source }}" = "true" ]; then echo "file=docker/runner-gpu/Dockerfile" >> "$GITHUB_OUTPUT"; else echo "file=docker/runner-gpu/Dockerfile.prebuilt" >> "$GITHUB_OUTPUT"; fi
- uses: docker/build-push-action@v6
with:
context: docker/runner-gpu
file: ${{ steps.pick.outputs.file }}
push: true
build-args: |
KOKKOS_ARCH=${{ inputs.kokkos_arch }}
LMP_TARBALL_URL=${{ inputs.tarball_url }}
tags: |
ghcr.io/forcefieldsilicon/mdengine-runner-gpu:${{ inputs.kokkos_arch }}
ghcr.io/forcefieldsilicon/mdengine-runner-gpu:${{ inputs.kokkos_arch }}-${{ github.sha }}
labels: |
org.opencontainers.image.source=https://github.com/forcefieldsilicon/mdengine
16 changes: 9 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
Packages
__pycache__/
! .env.example
.build
xcuserdata
*.xcodeproj
DerivedData/
.DS_Store
db.sqlite
.swiftpm
.env
.env.*
! .env.example
.swiftpm
.vscode
*.pyc
*.xcodeproj
db.sqlite
DerivedData/
dist/
Packages
xcuserdata
6 changes: 5 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ macOS MD workbench: `MDEngine` (SwiftUI+Metal viewer), `mdengine-cli`,
(Gitinama Inc.).

## Commands
- Build: `swift build` · Tests: `swift test` (16 cases, keep green)
- Build: `swift build` · Tests: `swift test` (20 cases, keep green)
- Release: `swift build -c release` — **ALWAYS run after changes**:
`/opt/homebrew/bin/mdengine` and `mdengine-mcp` are symlinks into
`.build/release/`; a debug-only build leaves every other session running
Expand All @@ -19,6 +19,10 @@ macOS MD workbench: `MDEngine` (SwiftUI+Metal viewer), `mdengine-cli`,
`~/.mdengine/hosts.json`; test bed = `localhost-test` host over ssh to this Mac
(own key in ~/.ssh/authorized_keys). `lmp` must be an absolute path — no login
PATH over ssh. Release packaging: `make_tools.sh` (CLI+MCP tarball).
- Hosted GPU tier (`Sources/LAMMPSCore/HostedClient.swift`, `hosted/CONTRACT.md`): dev
loop = `python3 hosted/mock/mock_endpoint.py --port 8788 --data <dir>` +
`MDENGINE_HOSTED_URL=http://127.0.0.1:8788/v1 MDENGINE_HOSTED_LAUNCH="{lmp} -in {input} -log log.lammps"`,
pod stand-in = `docker/runner-gpu/runner.sh` with `MDE_WORK`/`LMP` (see hosted/README.md).

## Gotchas that already bit
- SPM does NOT prune deleted resources from an existing
Expand Down
Loading
Loading