# Tool versions: fuzzy spec here, exact version + checksums in mise.lock # (regenerate with `mise lock` after bumping). # Oldest mise this workflow supports: lockfiles read by default since 2026.2.0 # (jdx/mise#7929), `mise lock` stable since 2026.2.5 (jdx/mise#8011). min_version = "2026.2.5" [tools] bun = "1.3" # Deliberately no NODE_ENV here: mise [env] applies to every command run in # this directory (and reaches every later CI step via mise-action's # `mise env` → GITHUB_ENV export) — a global NODE_ENV=development leaks into # `vite build` and ships dev-mode React. Tools set their own. [env] _.path = "node_modules/.bin" # mise is the task front door: every human-facing task is listed here, so # `mise tasks ls` is the complete inventory. Task bodies forward to # package.json scripts (the implementation layer); only setup and the pack* # tasks live natively here, for `mise install` bootstrapping and env/dir # combos. New user-facing commands get a mise task; new plumbing stays a # package.json script. # --- Setup & dev workflow --------------------------------------------------- [tasks.setup] description = "One-shot bootstrap for a fresh clone: install tools + JS deps" # `mise install` provisions the locked toolchain (bun via mise.lock); the bun # install then pulls JS deps and runs husky's `prepare` hook. run = ["mise install", "bun install"] [tasks.dev] description = "Run the desktop app (Vite HMR on :5173; restart to pick up bun-process changes)" run = "bun run dev" [tasks."dev:cef"] description = "Run the desktop app with CEF/CDP debugging on :9333" run = "bun run dev:cef" [tasks."dev:web"] description = "Run the static web app (landing page + shared-thread viewer) on :5175" run = "bun run dev:web" [tasks."dev:server"] description = "Run the headless LLM Space runtime server" run = "bun run dev:server" [tasks.test] description = "Run all Bun tests" run = "bun run test" [tasks.lint] description = "Check lint (read-only)" run = "bun run lint" [tasks."lint:fix"] description = "Lint with autofix (eslint --fix)" run = "bun run lint:fix" [tasks.typecheck] description = "Typecheck all TypeScript projects" run = "bun run typecheck" # --- Build & release (see AGENTS.md "Releases & auto-update") --------------- [tasks."build:canary"] description = "Build the canary app (vite build + electrobun build)" run = "bun run build:canary" [tasks."build:stable"] description = "Build the stable app (vite build + electrobun build)" run = "bun run build:stable" [tasks."build:web"] description = "Build the static web app for GitHub Pages (base=/llm-space/)" run = "bun run build:web" [tasks.release] description = "Cut a stable release: bump version, tag, push — triggers release CI" run = "bun run release" [tasks."release:canary"] description = "Cut a canary prerelease" run = "bun run release:canary" # --- Local packaging (see AGENTS.md "Releases & auto-update") --------------- [tasks.pack] description = "Unsigned canary build — fastest local packaging check" dir = "apps/desktop" env = { LLM_SPACE_SKIP_SIGNING = "1" } run = "bun run build:canary" [tasks."pack:perf"] description = "Unsigned Performance (CEF) canary build — the edition that embeds Chromium" dir = "apps/desktop" env = { LLM_SPACE_SKIP_SIGNING = "1", LLM_SPACE_DESKTOP_RENDERER = "cef" } run = "bun run build:canary" [tasks."pack:adhoc"] description = "Ad-hoc signed canary build — exercises the signing path with no Apple creds" dir = "apps/desktop" env = { LLM_SPACE_SKIP_NOTARIZE = "1", ELECTROBUN_DEVELOPER_ID = "-" } run = "bun run build:canary" [tasks."pack:signed"] description = "Developer-ID signed canary build, no notarization (set ELECTROBUN_DEVELOPER_ID yourself)" dir = "apps/desktop" env = { LLM_SPACE_SKIP_NOTARIZE = "1" } run = "bun run build:canary" [tasks."pack:server"] description = "Build the headless remote runtime server tarball" run = "bun run pack:server" # --- Local auto-update loop: `feed:serve` in one terminal, then `pack:feed` # --- once per version; launch the app from a copy outside build/ ------------ [tasks."pack:feed"] description = "Unsigned canary build published to the local update feed (localhost:8321)" dir = "apps/desktop" env = { LLM_SPACE_SKIP_SIGNING = "1", LLM_SPACE_UPDATE_BASE_URL = "http://localhost:8321" } run = ["bun run build:canary", "mkdir -p .dev-feed && cp artifacts/* .dev-feed/"] [tasks."feed:serve"] description = "Serve the local update feed on localhost:8321" dir = "apps/desktop" run = "bun scripts/serve-feed.ts"