What's Changed
- fix(guest): exec timeout watcher must SIGKILL, not SIGALRM by GHSA-xjhv-pp2r-6f82 by @G4614 in #543
- chore(deps): bump github.com/go-git/go-git/v5 from 5.19.0 to 5.19.1 in /apps/daemon in the go_modules group across 1 directory by @dependabot[bot] in #553
- feat(auth): REST identity via BoxliteRuntime::auth() handle by @DorianZheng in #554
- chore(make): workspace-wide apps targets + drop yarn-lock-sync hook by @DorianZheng in #556
- feat(serve): optional exact-key auth for serve + reference-server by @DorianZheng in #557
- fix(test-python): use shared_runtime fixture to avoid BOXLITE_HOME flock collision by @G4614 in #560
- test(security): Node + Go regression parity for GHSA-g6ww + GHSA-f396 by @DorianZheng in #558
- refactor(logging): executable-owned subscriber + layered CLI sink by @DorianZheng in #562
- feat(api-key): Stripe-style {prefix}{class}{base62(32)}{crc6} format by @DorianZheng in #559
- chore(infra): track .env.example for stack setup by @DorianZheng in #566
- feat(auth): URL prefix authoritative + OIDC device flow by @DorianZheng in #581
- chore(workspaces): track empty CLAUDE.md placeholders across the tree by @DorianZheng in #583
- chore(deps): bump rusqlite 0.37 -> 0.39 by @DorianZheng in #582
- chore(deps): bump the npm_and_yarn group across 2 directories with 2 updates by @dependabot[bot] in #569
- chore(deps): bump github.com/boxlite-ai/boxlite/sdks/go from 0.8.2 to 0.9.0 in /apps/runner in the go_modules group across 1 directory by @dependabot[bot] in #570
- fix(quality): lint:python tomllib check works on Python 3.10 by @G4614 in #574
- fix(security): paired redaction — stop CA key/secret leaks via trace! + Debug by @G4614 in #575
- fix(auth): treat empty BOXLITE_API_KEY as unset in
auth statusby @G4614 in #577 - ci(e2e): auto-evict caches at >=80% root use instead of hard-fail by @DorianZheng in #584
- feat(rest): typed error→HTTP mapping with snake codes + request-id by @DorianZheng in #585
- fix(recovery): PID-fingerprint identity + crash-aware attach pipeline by @DorianZheng in #590
- tiny(test-auth): drop stale period in status "Not logged in" assertion by @G4614 in #598
- chore(claude): add CLAUDE.md preflight hook + auditor subagent by @DorianZheng in #599
- docs: correct BoxOptions::detach contract + restore two-side test rule by @DorianZheng in #601
- fix(spawn): set session leader for detached, own pgroup for non-detached by @DorianZheng in #602
- chore(claude): add PR-review acknowledgment PreToolUse hook by @DorianZheng in #603
- test(test-utils): PerTestBoxHome::Drop fails loudly if a shim is still alive by @DorianZheng in #604
- fix(test): add missing .clone() in image_registries test after #604 by @G4614 in #606
- fix(images): defer dir chmod across layers to fix overwrite EACCES by @DorianZheng in #607
- fix(setup): install cmake for C SDK test harness by @DorianZheng in #609
- fix(make): propagate test failures instead of masking via POSIX
;chaining (#550) by @G4614 in #587 - test(health_check): explicit stop() for the healthy-box test by @G4614 in #615
- fix(runner): roll back SignaledHUP/TERM when SDK signal delivery fails by @G4614 in #600
- fix(libcontainer): bump to youki rev — InitReady race + per-exec mount leak by @G4614 in #611
- [urgent] fix(guest): declare terminal=true for TTY execs (libcontainer 0.6 check_terminal) follow-up #611 by @G4614 in #625
- fix(test:apps): inject boxlite_dev tag via GOFLAGS for apps Go tests (#579) by @G4614 in #589
- fix(net): surface gvproxy bind errors through FFI by @G4614 in #612
- fix(disk,runtime): cross-filesystem-safe clone/snapshot moves (EXDEV fallback) by @G4614 in #624
- fix(cli): preserve profile path_prefix when BOXLITE_API_KEY is set by @G4614 in #629
- fix(api): source /v1/me expires_at from ApiKey.expiresAt (P1-2) by @lilongen in #649
- Configure CLA Assistant by @DorianZheng in #650
- chore(deps-dev): bump the npm_and_yarn group across 2 directories with 1 update by @dependabot[bot] in #644
- feat: upgrade MiniMax default model to M3 by @octo-patch in #643
- docs: add communication rules to CLAUDE.md by @DorianZheng in #653
- infra: configurable pgAdmin exposure (secure default) + tiered .env.example by @DorianZheng in #661
- feat(infra): RUNNERS-count multi-runner provisioning by @DorianZheng in #664
- fix qcow2 backing and container status checks by @GatewayJ in #525
- fix(cli): stop box before hard-exit on non-zero run exit code by @G4614 in #622
- test(sdk-typescript): pass jest target when no test files exist by @G4614 in #617
- test-stress(disk-guest): box rootfs is a bounded, isolated disk that survives a fill by @G4614 in #623
- test(cli): box lifecycle journey suite — surfaces logs/stdout gap by @G4614 in #630
- fix(cli): read stdin on a dedicated OS thread so TTY exec exits without a stray ENTER by @G4614 in #626
- fix(api): anchor OIDC-created user's Personal org to the default region by @lilongen in #668
- fix(api): reject undersized box resources at the create boundary by @lilongen in #662
- fix(runner): pull snapshot layers for the host arch, not hardcoded amd64 by @lilongen in #671
- ci: prep test/lint workflows for a merge queue by @DorianZheng in #677
- ci: run test/lint on every PR so required conclusion checks always report by @DorianZheng in #679
- test(e2e): SDK→API→Runner→VM regression suite by @G4614 in #678
- fix(disk): build ext4 rootfs from trees with unreadable (0000) files by @DorianZheng in #697
- chore(codeowners): map subsystem ownership to maintainers/builder teams by @DorianZheng in #704
- docs(readme): add BoxLite logo banner by @law-chain-hot in #707
- test(e2e): add error-mapping, quota, runner-concurrency cases (xfails pin known bugs) by @G4614 in #683
- fix(rest): extract uploaded tar before CopyInto in runner file upload by @G4614 in #688
- fix(rest): copy_out single-file mode writes at host_dst, not inside it by @G4614 in #692
- ci(codeql): switch to advanced setup so fork PRs are scanned by @DorianZheng in #708
- refactor: rename Sandbox -> Box (Part 1: apps/api epicenter) by @law-chain-hot in #706
- fix(apps): repair ESLint flat config lint by @law-chain-hot in #713
- fix(go-sdk): fold stream drain into Execution.Wait (os/exec io.Writer case) by @G4614 in #563
- chore(apps): restore Daytona API-client regen machinery + regenerate clients by @DorianZheng in #716
- chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #717
- docs(cli,daemon): regenerate cobra docs and toolbox swagger after rename by @DorianZheng in #718
- fix(api,e2e): finish Sandbox → Box rename — 3 schema gaps + fixture column names by @G4614 in #720
- chore(apps): rename analytics-api-client Sandbox -> Box via in-repo swagger spec by @DorianZheng in #721
- test(e2e): add cli-detach-recovery, exec-attach, volume-readonly cases by @G4614 in #710
- feat(infra-local): BoxLite-based local dev stack (L1 + L2 + M5 native runner) by @lilongen in #595
- chore(apps,e2e): sweep Sandbox→Box rename leftovers — regen toolbox client, fix dead env vars + stale refs by @DorianZheng in #723
- Converge A2 + MVP box journey into main (super PR — review & split) by @law-chain-hot in #715
- chore(apps): regenerate API clients against merged API surface (#715 follow-up) by @DorianZheng in #726
- chore(apps): adapt cli, dashboard, sdk-typescript to the regenerated API clients by @DorianZheng in #727
- chore(apps): remove the Go CLI (apps/cli) by @DorianZheng in #728
- fix(exec): preserve UTF-8 codepoints split across attach chunks by @ldarren in #665
- [codex] Fix dashboard box API contract drift by @law-chain-hot in #729
- [codex] Normalize monorepo Docker build paths by @law-chain-hot in #730
- fix(apps): vend box S3 credentials from the ECS task role, not a static IAM user by @DorianZheng in #732
- fix(build): repair #715 runner build break and org test mock by @law-chain-hot in #734
- chore(db): squash pre-launch migrations into baseline by @law-chain-hot in #736
- chore(deps): bump @grpc/grpc-js from 1.14.3 to 1.14.4 in /apps in the npm_and_yarn group across 1 directory by @dependabot[bot] in #740
- fix(sdk): make boxlite_options_add_port carry the full PortSpec by @DorianZheng in #741
- fix(runtime): BoxSockets — bind box sockets via short /tmp symlinks (sun_path) by @DorianZheng in #742
- chore(apps): remove TypeScript cloud SDK (re-apply #738 onto main) by @law-chain-hot in #743
- Revert "chore(apps): remove TypeScript cloud SDK (re-apply #738 onto main)" (#743) by @law-chain-hot in #751
- feat(box): restore image-keyed warm-pool reuse and boot path by @DorianZheng in #755
- refactor(box): drop the dead userId field from the runner payload by @DorianZheng in #757
- feat(box): restrict box creation to the supported pinned images by @law-chain-hot in #758
- fix(runner): drop dead-on-arrival toolbox HTTP readiness check by @G4614 in #754
- chore(dashboard): delete dead Playground and VNC UI by @law-chain-hot in #760
- chore(ci): rename e2e-test workflow and label to e2e-local by @DorianZheng in #764
- refactor(dashboard): route box lifecycle through Box API by @law-chain-hot in #761
- fix(api): validate Box API network allowlist by @law-chain-hot in #775
- refactor(api): remove deprecated box-operation surfaces by @law-chain-hot in #762
- [codex] Unify SST service Docker path roots by @law-chain-hot in #780
- fix(seatbelt): narrow macOS sandbox write grants under built-in profile by @G4614 in #781
- [codex] Fix API image production build blockers by @law-chain-hot in #782
- [codex] Fix API runtime proxy dependency by @law-chain-hot in #787
- chore(infra-local): consolidate local-stack state into .apps-local/ + modernize for post-squash schema by @DorianZheng in #789
- chore(infra-local): drop dead DYLD/snapshot config + pin boxlite CLI … by @DorianZheng in #790
- feat(cli): expose --disk-size / --network / --entrypoint flags by @G4614 in #620
- fix(infra): lock down service exposure, runner SG/IMDS, and API CORS by @DorianZheng in #793
- Add supported box image picker by @law-chain-hot in #792
- fix(infra): harden control-plane durability, deploy safety, config hygiene by @DorianZheng in #794
- Use public curated image tags by @law-chain-hot in #795
- refactor(infra-local): simplify + unify into one Python
composepackage (~50% smaller) by @DorianZheng in #796 - chore(deps-dev): bump vite from 8.0.5 to 8.0.16 in /apps in the npm_and_yarn group across 1 directory by @dependabot[bot] in #797
- Use cloud Box ID as primary identity by @law-chain-hot in #800
- feat(dashboard): same-origin /api proxy for local dev against any API env by @law-chain-hot in #799
- fix(infra-local): register the CLI auth-login loopback redirect URI in dex by @DorianZheng in #805
- fix(cli): surface cloud-exec stream failures instead of silent success by @DorianZheng in #804
- fix(dashboard): recover from a 401 by bouncing to a fresh login by @DorianZheng in #806
- test(e2e): bring Tokyo e2e suite to green (split from #724) by @G4614 in #810
- fix(api/box): reject per-box cpu/memory/disk over the org limit by @G4614 in #811
- feat(infra): sst.Secret + SSM for team secret management by @DorianZheng in #814
- feat(dashboard): box table cleanup — drop region, tighten density, full image refs in onboarding by @law-chain-hot in #803
- feat(api): WS attach accepts OIDC JWTs, not just API keys (closes #807) by @DorianZheng in #809
- chore(deps): bump the npm_and_yarn group across 1 directory with 6 updates by @dependabot[bot] in #815
- feat(infra): name default runner boxlite-runner-default, fix extra-runner tags by @DorianZheng in #819
- fix: re-PR functional bits of #808 against main (stopped-box exec 409 + per-platform pull ref) by @G4614 in #821
- test: add REST API E2E auth matrix and coverage tooling by @G4614 in #746
- feat(security): default sandbox on + expose SecurityOptions to CLI/Go/C (REST stays server-policy-only) by @G4614 in #652
- fix(api): transfer non-JSON runner response to standard JSON format by @G4614 in #824
- chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates by @dependabot[bot] in #830
- chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates by @dependabot[bot] in #831
- docs(ci): add e2e-local CI runbook, de-stale workflow docs by @DorianZheng in #835
- docs: add failure-class sweep principle to CLAUDE.md by @DorianZheng in #838
- fix(guest): reset SIGPIPE to SIG_DFL for container execs so a closed-pipe consumer no longer hangs the exec by @G4614 in #774
- dashboard: mobile adaptation + restore web terminal + env-aware API URL by @law-chain-hot in #840
- test: add API stress tests by @G4614 in #823
- fix(api): auto-reconcile v2 boxes stuck in ERROR back toward STARTED by @G4614 in #573
- fix(runtime): rebuild invalid guest rootfs overlay by @G4614 in #578
- fix(jailer): unblock the default sandbox (drop host-side Landlock + bind box/bin) by @G4614 in #681
- chore(release): bump version to 0.9.7 by @DorianZheng in #844
- dashboard: 6 UI/UX fixes (status colors, stat refresh, action transition, mobile, loader) by @law-chain-hot in #845
- dashboard: hide table columns, drop terminal paste button, loading typewriter dots by @law-chain-hot in #847
- fix(images): fail closed on DiffID/layer count mismatch by @G4614 in #772
- fix(jailer): set LD_LIBRARY_PATH in bwrap sandbox so the shim can dlopen libkrunfw by @G4614 in #846
- fix(rest): client-initiated WS keepalive for idle cloud exec sessions (POL-120) by @DorianZheng in #852
- fix(jailer): skip --die-with-parent for detached boxes by @G4614 in #851
- test(cli): avoid fixed publish ports by @G4614 in #854
- fix(jailer): bind /etc/resolv.conf so allow_net DNS works under the sandbox by @G4614 in #849
- Add project hook registration by @DorianZheng in #858
- [codex] fix org settings interactions by @law-chain-hot in #863
- perf(dashboard): cut /boxes first-paint (auth session + static cache + code-split + bundle slim) by @law-chain-hot in #862
- docs(readme): restructure Get started into Embed/Run/Deploy/Distribute by @DorianZheng in #864
- test(cli): clean up boxes after panicking CLI tests by @G4614 in #860
- docs(readme): distill copy, add version badges, expand Features matrix by @DorianZheng in #869
- Update README.md by @DorianZheng in #871
- Update README.md by @DorianZheng in #872
- fix(runner): adopt existing box on CREATE_BOX replay via GetOrCreate (no more "already exists") by @law-chain-hot in #855
- feat(api): cute default box names (e.g. cozy-otter) by @law-chain-hot in #853
- fix(network): restore SDK gvproxy integration tests by @G4614 in #874
- Remove legacy in-box daemon by @law-chain-hot in #877
- Add BoxLite Cloud runtime image publishing by @law-chain-hot in #867
- chore(infra-local): make
make upwork on Apple Silicon + arm64 boxes by @law-chain-hot in #868 - feat(hooks): add turn-end verdict-proof gate; rename audit→commit-push by @DorianZheng in #882
- feat: reviewer-friendly, non-bloated commit & PR messages by @DorianZheng in #883
- Improve boxes pagination UX by @law-chain-hot in #880
- refactor(hooks): verdict gate validates self-declared claims, not file deltas by @DorianZheng in #885
- fix(runtime): reap detached box's full cgroup tree on stop/remove by @G4614 in #876
- feat(hooks): default-deny verdict gate, always-on by @DorianZheng in #892
- fix(jailer): stop deriving RLIMIT_NPROC from per-box max_processes by @G4614 in #888
New Contributors
Full Changelog: v0.9.5...v0.9.7