Image / video labeling backend for the MoonBit Labeler app: 24 async ops over @fs/@json for folder browsing, image IO, label IO, schema normalization (parse/serialize round-trip), class management, and VOC/YOLO/COCO export. The op_handlers are pure async MoonBit functions and can be wired into any IPC layer (Proton/CEF, stdio JSON-RPC, HTTP, WASM, custom bridge). Includes a `dispatch_op(op, payload) -> Json raise` entry point in 0.2.0+ for embedding outside the CEF runtime.
Dependencies
moon install moonbit-community/proton_cli@0.3.4which drops it in ~/.moon/bin. Pin the version to the one in
moon.mod: all published Proton modules use one lockstep version, so
an unpinned install floats to the newest release and silently drifts
out of lockstep. See https://github.com/moonbit-community/proton.# From the project root:
moon install moonbit-community/proton_cli@0.3.4 # the CLI itself
moon update # sync moon.mod deps
proton_cli cef setup # download the CEF runtime
cd frontend && npm install && cd .. # Vite + frontend depsproton_cli build -- --release
# output: target/proton-dist/moonbit-labeler/moonbit-labeler.exeproton_cli package --format app
# output: target/proton-dist/moonbit-labeler/moonbit-labeler.exe
# plus the CEF runtime beside it (libcef.dll, *.pak, ...)moon test --target native # 55 tests (blackbox + unit)
node frontend/qa/webkit_picker_blackbox.test.mjs # frontend blackbox# launch the packaged exe (it picks CEF mode if libcef.dll is present,
# --stdio mode if not — see _build/run.bat for the full wrapper):
_build/run.bat
# OR drive the labeler backend over JSON-RPC without launching CEF:
target/proton-dist/moonbit-labeler/moonbit-labeler.exe --stdio
# ...then send one JSON object per line on stdin, read responses on stdout..
├── app/ # runnable entry (CEF + stdio)
├── extensions/labeler/ # 24 IPC ops + label/VOC/YOLO/COCO pipeline
├── frontend/ # Vite + vanilla-JS UI (built into the exe at pack time)
├── moon.mod # deps: proton@0.3.4, proton_contract@0.3.4, moonbit_image@0.3.7, moui@0.1.12, async@0.22.4
├── proton.project.json # identifier, frontend, package (output dir, formats, version)
└── AGENTS.md # setup + commands + smoke-test recipe (read first)pub fn dispatch_op(op : String, payload : Json) -> Json raisefn async_package_anchor() -> Bool raiseasync fn fs_package_anchor() -> Boolfn image_package_anchor() -> Boolfn labeler_package_anchor() -> Boolfn ref_package_anchor() -> BoolInstall
Download zipImage / video labeling backend for the MoonBit Labeler app: 24 async ops over @fs/@json for folder browsing, image IO, label IO, schema normalization (parse/serialize round-trip), class management, and VOC/YOLO/COCO export. The op_handlers are pure async MoonBit functions and can be wired into any IPC layer (Proton/CEF, stdio JSON-RPC, HTTP, WASM, custom bridge). Includes a `dispatch_op(op, payload) -> Json raise` entry point in 0.2.0+ for embedding outside the CEF runtime.
Dependencies