Skip to content

v0.10.0

Latest

Choose a tag to compare

@Mandalorian-Wang Mandalorian-Wang released this 28 Aug 10:36
· 25 commits to main since this release
006b953

What's Changed

  • fix(api): sync box state when exec auto-starts a stopped box by @law-chain-hot in #861
  • fix(dashboard): refresh terminal from box detail by @law-chain-hot in #889
  • test(e2e): comprehensive REST API test coverage by @G4614 in #902
  • chore(deps): bump the go_modules group across 2 directories with 1 update by @dependabot[bot] in #913
  • chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #914
  • fix(hooks): unloop verdict gate + close commit/pr newline bypass by @DorianZheng in #915
  • chore(apps): remove dead internal code by @DorianZheng in #916
  • fix(dashboard): correct BoxLite logo assets by @DorianZheng in #918
  • chore(assets): theme-adaptive favicon + logo README + white-bg variants by @DorianZheng in #919
  • docs(readme): add ecosystem section, drop build badge by @DorianZheng in #920
  • feat(dashboard): org box resource caps by @law-chain-hot in #895
  • feat(hooks): trigger the verdict gate on detected verdict prose by @DorianZheng in #925
  • feat(githooks): agent-agnostic gate layer at the git boundary by @DorianZheng in #928
  • fix(dashboard): refresh terminal signed URL on reconnect by @law-chain-hot in #929
  • fix(hooks): judge the whole turn and ask only the essential question by @DorianZheng in #930
  • feat(volumes): support single-file volume mounts by @BatmanByte in #926
  • feat(quickstart): Add C, CLI, and REST quickstart entries by @law-chain-hot in #894
  • feat(cli): support rootfs paths in run and create by @BatmanByte in #934
  • feat(hooks): add rule-recency reminder hook by @DorianZheng in #943
  • fix(hooks): gitignore .pr-reviewed.json to keep verdict dossiers valid by @DorianZheng in #948
  • refactor(dashboard): align scrollbars with theme by @law-chain-hot in #921
  • fix(api): remove error box auto-reconcile by @G4614 in #900
  • feat(net): expose gvproxy services + /tunnel via NetworkBackend by @DorianZheng in #949
  • chore(deps): bump the go_modules group across 2 directories with 1 update by @dependabot[bot] in #952
  • chore(deps): bump @xhmikosr/decompress from 10.2.0 to 10.2.1 in /apps in the npm_and_yarn group across 1 directory by @dependabot[bot] in #955
  • fix(python): add async SimpleBox metrics by @G4614 in #960
  • fix(runtime): align local defaults with cloud by @G4614 in #956
  • fix(ci): run e2e-local on labeled fork PRs via pull_request_target by @DorianZheng in #987
  • feat(rust-sdk): expose box network tunnels by @G4614 in #991
  • fix(musl): run static shim without libkrunfw dlopen by @xhebox in #937
  • chore(deps): bump websocket-driver from 0.7.4 to 0.7.5 in /apps in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1001
  • chore(deps): bump the npm_and_yarn group across 1 directory with 5 updates by @dependabot[bot] in #1010
  • chore(deps): bump @astrojs/node from 10.0.5 to 11.0.2 in /apps in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1013
  • fix(run): run COMMAND as the container init (docker semantics) by @DorianZheng in #988
  • fix(exec): validate floating timeout seconds by @BatmanByte in #1012
  • chore(deps): bump the npm_and_yarn group across 1 directory with 7 updates by @dependabot[bot] in #1014
  • chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.82.1 in /apps/common-go in the go_modules group across 1 directory by @dependabot[bot] in #1015
  • feat: add auto pause and resume lifecycle options at box creation time by @xhebox in #1009
  • feat(core): expose box network tunnels by @G4614 in #992
  • feat(sdk): expose box network tunnels by @G4614 in #994
  • feat(volume): add volume surface across CLI/SDK/REST on v1 (id-based, backend not yet supported) by @G4614 in #964
  • feat(api): proxy box network tunnels by @G4614 in #998
  • fix(ci): allow fork-PR checkout in label-gated e2e workflow by @DorianZheng in #1017
  • feat(proxy): route public box service traffic by @G4614 in #995
  • chore(musl): revert static shim libkrunfw dlopen change (#937) by @DorianZheng in #1019
  • fix(runtime): resync guest clock after host sleep and quiesce by @EXboys in #899
  • feat(preview): adapt browser HTTP over runner tunnels by @G4614 in #993
  • fix(portal): tolerate pre-#988 guest missing Container.Start by @DorianZheng in #1020
  • fix(lifecycle): correct create-time box option validation by @DorianZheng in #1021
  • ci(e2e-local): queue runs behind in-progress instead of cancelling by @DorianZheng in #1023
  • chore(deps-dev): bump postcss from 8.5.10 to 8.5.12 in /apps in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1024
  • feat(api): env-configurable box image allowlist by @DorianZheng in #1027
  • fix(python-sdk): clean up ruff lint baseline and pin ruff version by @nieyy in #1030
  • fix(apps): remove unsafe box resource resize by @DorianZheng in #1037
  • feat(cli): group tunnel under network by @DorianZheng in #1039
  • chore(deps-dev): bump postcss from 8.5.12 to 8.5.18 in /apps in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1033
  • feat(api): add org-wide box quota and concurrency limit by @DorianZheng in #1028
  • Support custom guest kernels by @DorianZheng in #1041
  • Gate custom kernels behind an RC opt-in by @DorianZheng in #1051
  • fix(cli): render table correctly when box list is empty by @niyue in #1058
  • Add structured container capability controls by @DorianZheng in #1047
  • feat: add experimental nested virtualization by @DorianZheng in #1054
  • feat(network): add local port publication by @DorianZheng in #1031
  • ci(e2e): add dev-targeted E2E workflow by @G4614 in #1063
  • ci(e2e): rename e2e-dev workflow to e2e-cloud by @DorianZheng in #1070
  • feat: add embedded SSH server by @DorianZheng in #1042
  • fix(hooks): make mtime checks portable by @uran0sH in #1081
  • fix(api): restore box usage period ledger by @DorianZheng in #1083
  • fix(libkrun-sys): let a static shim dlopen libkrunfw by @DorianZheng in #1084
  • feat!: remove ssh-gateway by @DorianZheng in #1087
  • refactor(apps): move api-client-go and common-go under apps/libs by @DorianZheng in #1088
  • feat(exec): drain guest output before attach by @BatmanByte in #1022
  • fix(gvproxy)!: apply allow_net to UDP egress by @ltstriker in #1090
  • fix(infra): harden SST deployments by @DorianZheng in #1093
  • fix(ci): use one SST deployment selector by @DorianZheng in #1094
  • fix(rootfs): key guest rootfs cache on the resolved guest binary by @DorianZheng in #1096
  • feat(infra): land runner binary upgrades via SST, one host at a time by @DorianZheng in #1097
  • fix(ci): deploy stack without Runner by @DorianZheng in #1095
  • refactor(box-images)!: adopt v0.1.0 line, relocate under apps/ by @DorianZheng in #1100
  • fix(gvproxy)!: apply allow_net to the host alias IP by @ltstriker in #1106
  • docs(contributing): mandate before/after call graph in PR descriptions by @DorianZheng in #1107
  • feat(agents): watch CI and PR feedback after every push by @DorianZheng in #1112
  • refactor(agents): move gate implementations out of .claude into .agents by @DorianZheng in #1115
  • feat(infra): bootstrap deployment prerequisites, protect the prod stage by @DorianZheng in #1113
  • Update README by @DorianZheng in #1116
  • fix(infra): unblock the first real deploy and finish the login flow by @DorianZheng in #1118
  • fix(infra): stop verifying an image list /api/config never returns by @DorianZheng in #1120
  • docs(infra): point the removed image check at #1045 by @DorianZheng in #1121
  • feat(infra): source the API and Runner from one artifact selector by @DorianZheng in #1122
  • fix(tunnel)!: own half-close in core, tolerate a hung-up peer by @DorianZheng in #1123
  • fix(agents): harden gate hooks, pin suites against ambient state by @DorianZheng in #1125
  • feat(githooks): install the gate from make setup, drop install.sh by @DorianZheng in #1126
  • refactor(e2e): move stack suite under apps by @DorianZheng in #1127
  • fix(ci): grant deploy-infra's reusable calls contents: write by @DorianZheng in #1129
  • ci(e2e-cloud): run only from a deploy or a dispatch by @DorianZheng in #1131
  • feat(agents): short-circuit verdict triage, park FAILed dossiers by @DorianZheng in #1132
  • feat(ci): build the Api image in its own job, beside the C SDK by @DorianZheng in #1134
  • refactor(lifecycle)!: rename auto_pause to auto_stop across the stack by @DorianZheng in #1135
  • refactor(infra): give AWS resource names a workload slot by @DorianZheng in #1137
  • fix(runner): evict spent box handles, map every core status by @DorianZheng in #1138
  • fix(infra): stop the wrapper tests inheriting artifact selectors by @DorianZheng in #1140
  • refactor(build): drop unused --dest-dir/--libs-dir from build scripts by @DorianZheng in #1143
  • fix(libkrun-sys): keep libkrunfw's libc dependency aarch64-only by @DorianZheng in #1145
  • feat(ci): deploy the head of an open PR, not only main by @DorianZheng in #1148
  • feat(ci): deploy an open PR's head by number, not SHA by @DorianZheng in #1151
  • feat(infra): run the commerce billing service on the dev stack by @DorianZheng in #1159
  • Worktree snoopy conjuring peacock by @DorianZheng in #1161
  • fix(hooks): triage on whether a turn shows its evidence, not on facts by @DorianZheng in #1164
  • feat(ci): select which components deploy-infra builds and deploys by @DorianZheng in #1165
  • fix(ci): refuse a narrowed deploy on a commit that cannot scope by @DorianZheng in #1167
  • feat(dashboard): consolidate billing into one restyled page by @DorianZheng in #1166
  • feat(api): export finalized box usage to Commerce via an outbox by @DorianZheng in #1169
  • fix(api): reject usage-export settings that cannot work by @DorianZheng in #1170
  • refactor(apps): remove fork-local admin observability console by @DorianZheng in #1171
  • feat(go): add box archive import and export by @ltstriker in #1162
  • fix(api): reject a usage-export URL carrying a query or fragment by @DorianZheng in #1173
  • chore(api): drop the orphaned observability audit target by @DorianZheng in #1174
  • Fix ext4 ownership/sizing; cut rootfs merge traversals by @DorianZheng in #1177
  • feat(observability): make Jaeger receive traces locally and in AWS by @DorianZheng in #1175
  • chore(infra-local): drop dead runtime-pin and cache-patch workarounds by @DorianZheng in #1178
  • fix(infra): keep Jaeger OTLP ingest off the internet-facing ALB by @DorianZheng in #1179
  • fix(disk): silent debugfs failures, xattr loss, image capacity by @DorianZheng in #1182
  • chore(infra): remove the Commerce service and its ECR bootstrap by @DorianZheng in #1183
  • feat(api): snapshot open allocations, admit a billing role by @DorianZheng in #1188
  • feat: repair a box startup whose job completion was lost by @ltstriker in #1091
  • fix(infra): give the usage exporter the settings it waits for by @DorianZheng in #1190
  • fix(api): add owner-safe usage lock leases by @zhaoyuana777 in #1180
  • Update CLAUDE.md by @DorianZheng in #1193
  • Remove CLAUDE.md documentation for dashboard by @DorianZheng in #1194
  • docs(infra): stop documenting the removed ops-console workload by @DorianZheng in #1195
  • feat(rest): expose managed volume CRUD via REST API by @G4614 in #1191
  • feat(runner): execute the box migration jobs by @DefeatMan in #1189
  • feat(rest): accept managed volume mounts on REST box creation by @G4614 in #1192
  • test(e2e): align test_sdk_tunnel.py with the rest of the suite's box lifecycle by @G4614 in #1187
  • feat(rest): expose S3 managed volumes by @G4614 in #1056
  • fix(exec): signal executions through a verifiable exit claim by @BatmanByte in #1185
  • feat[runner]: Runner Decommission by @zhaoyuana777 in #1201
  • refactor(guest): replace external chown with syscalls by @ltstriker in #1210
  • fix(api): stop auto-destroying boxes during runner drain by @zhaoyuana777 in #1211
  • feat(dev): add validated BoxLite diagrams skill by @DorianZheng in #1218
  • feat(api): advance box migrations from reported job status by @DefeatMan in #1215
  • fix(ci): support both deploy verifier layouts by @DorianZheng in #1225
  • fix(ci): support versioned deploy scope capability by @DorianZheng in #1228
  • refactor(apps): remove unused job types by @DorianZheng in #1227
  • fix(ci): support relocated deploy environment validator by @DorianZheng in #1229
  • Align REST network DTO with inbound/outbound core shape by @G4614 in #1199
  • fix(ci): support relocated deployment preview by @DorianZheng in #1230
  • refactor(infra): organize deployment by domain by @DorianZheng in #1222
  • fix(api): keep open usage periods in step with their boxes by @ltstriker in #1104
  • build(guest): add static e2fsprogs tools by @ltstriker in #1219
  • fix(api): namespace box migration jobs under BACKUP by @DefeatMan in #1233
  • feat(diagrams): validate cloud architecture containment by @DorianZheng in #1235
  • docs(apps): catalog service APIs by @DorianZheng in #1236
  • feat(cli): remove --mount by @G4614 in #1216
  • docs(apps): catalog application data model by @DorianZheng in #1244
  • feat(network): add tunnel listener forwarding by @DorianZheng in #1243
  • docs(apps): correct and reorganize service API catalog by @DorianZheng in #1246
  • build(guest): build minimal rootfs by @ltstriker in #1245
  • feat(exec): retain terminal sessions after exit by @BatmanByte in #1146
  • docs(apps): add missing interfaces to service API catalog by @DorianZheng in #1248
  • feat(dashboard): volumes console and restructured create-box dialog by @Mandalorian-Wang in #1252
  • fix(dashboard): restore the OpenAPI mention in REST quickstart setup by @Mandalorian-Wang in #1251
  • fix(ci): accept deployment capability v2 by @DorianZheng in #1253
  • fix(dashboard): close data-loss and mount-format gaps merged in #1252 by @Mandalorian-Wang in #1254
  • feat(box): start containers in the background by @ltstriker in #1249
  • feat(infra): read stage config from the SST secret store by @DorianZheng in #1258
  • fix(dashboard): accept nullable volume last-used timestamp by @DorianZheng in #1259
  • fix(infra): keep deploy-wrapper progress off sst's stdout stream by @DorianZheng in #1262
  • refactor(infra): remove duplicated modules and dead deploy paths by @DorianZheng in #1263
  • fix(infra): scope the deploy role's IAM and secrets grants to one stage by @DorianZheng in #1264
  • feat(dashboard): bind the Usage tab to the commerce quota API by @DorianZheng in #1256
  • ci: extract shared workflow steps into composite actions by @DorianZheng in #1265
  • test(infra): type-check infra scripts before running their suite by @DorianZheng in #1266
  • fix(api): give the image build a node-gyp toolchain by @DorianZheng in #1269
  • fix(infra): enable allocation snapshots with usage export by @mamamiyear in #1267
  • feat(infra): add selectable ClickHouse backend by @DorianZheng in #1234
  • fix(api): detect MinIO via its STS endpoint by @mamamiyear in #1275
  • fix(disk): handle whitespace in debugfs paths by @mamamiyear in #1274
  • fix(api): resolve box migration import target before the transaction by @DefeatMan in #1277
  • update billing tab by @DorianZheng in #1280
  • refactor(dashboard): replace tier-based billing API with plan-based by @DorianZheng in #1283
  • fix plan by @DorianZheng in #1284
  • feat(proxy): Export application logs over OTLP by @zhaoyuana777 in #1282
  • Add custom billing plan card by @DorianZheng in #1286
  • Align billing UI with Commerce by @DorianZheng in #1287
  • feat(box): add privileged plumbing for DinD by @G4614 in #646
  • Split NetworkSpec into outbound/inbound directions by @G4614 in #996
  • refactor(api): remove organization quota ownership by @DorianZheng in #1292
  • Require source metadata in sequence diagram messages by @DorianZheng in #1293
  • ci(api): preserve tests after quota removal by @DorianZheng in #1294
  • fix(dashboard): restore Volumes navigation by @DorianZheng in #1291
  • perf(export): eliminate transient flatten sync bottleneck by @ltstriker in #1279
  • fix(proto): stop wrapping capabilities in a process submessage by @G4614 in #1289
  • refactor(agent): use shared tooling by @DorianZheng in #1299
  • feat(rest): support big file copies by @ltstriker in #1298
  • build(guest): emit standalone guest artifacts by @ltstriker in #1300
  • fix(dashboard): fix the quickstart picker labels and the box-name hint by @Mandalorian-Wang in #1301
  • fix(dashboard): align billing tabs with page content by @DorianZheng in #1303
  • fix(rest): keep box activity fresh for the request lifetime by @ltstriker in #1302
  • chore(setup): auto-init worktree submodules by @DorianZheng in #1304
  • chore(nx): disable workspace daemon by @DorianZheng in #1306
  • fix(lint): satisfy clippy 1.98 lints by @ltstriker in #1309
  • test(e2e): pin REST host bind mounts as rejected, not silently dropped by @G4614 in #1102
  • feat(runtime): build minimal guest rootfs image in background by @ltstriker in #1305
  • feat(infra): let a deploy create a declared Runner by @DefeatMan in #1310
  • feat(dashboard): make box names visible and copyable on boxes views by @Mandalorian-Wang in #1317
  • feat(dashboard): quote box price from published usage rates by @Mandalorian-Wang in #1315
  • chore: float agent-tooling on main with a recorded revision by @DorianZheng in #1319
  • docs: adopt the shared agent-tooling guidance block in AGENTS.md by @DorianZheng in #1321
  • feat(runtime): boot from the minimal guest rootfs image by @ltstriker in #1322
  • fix(dashboard): make the wallet warn, and name the unsubscribed modes by @Mandalorian-Wang in #1323
  • feat(dashboard): confirm plan changes on a page and show what is queued by @DorianZheng in #1325
  • fix(dashboard): read one predicate for what a cycle rolls into by @DorianZheng in #1327
  • feat(billing): add concurrency timeline by @DorianZheng in #1326
  • fix(billing): scale concurrency chart to usage by @DorianZheng in #1329
  • feat(auth): align the hosted login and auth surfaces with the console by @Mandalorian-Wang in #1270
  • fix(guest): enable protected link sysctls by @aiqubits in #1328
  • fix(dashboard): allow top-ups without a saved card by @mamamiyear in #1331
  • feat(auth): gate database login on verified email by @DorianZheng in #1332
  • fix(gvproxy)!: bind allow_net host checks to the resolved destination by @ltstriker in #1330
  • fix(auth): return 403 with a code for unverified email by @DorianZheng in #1335
  • feat(infra): send mail through SES, retire the internal admin UIs by @DorianZheng in #1336
  • fix(dashboard): keep the quickstart shut for returning users by @DorianZheng in #1337
  • refactor(runtime): stop mutating capabilities from privileged mode by @G4614 in #1296
  • feat(dashboard): update billing plan and payment methods by @DorianZheng in #1341
  • feat: automate agent tooling bootstrap by @DorianZheng in #1343
  • fix(runtime): keep host diagnostics out of client-facing errors by @ltstriker in #1346
  • fix: complete first plugin bootstrap by @DorianZheng in #1344
  • feat(volumes): address managed volumes by id or name, drop volume:// by @DorianZheng in #1350
  • fix(runtime): derive RLIMIT_FSIZE from disk_size_gb by @G4614 in #1231
  • feat(rest)!: reject host-only box options and wire the dropped ones by @DorianZheng in #1354
  • fix(rest): classify transport faults, unblock two red tests by @DorianZheng in #1357
  • fix(import): reject link archive members and fail closed on bad disks by @ltstriker in #1359
  • fix(seccomp): allow time syscall in x86_64 vmm filter by @ltstriker in #1367
  • chore(seccomp): wrap over-width line to satisfy rustfmt by @ltstriker in #1369
  • chore(release): bump version to 0.10.0 by @ltstriker in #1374
  • fix(dashboard): round top-up amounts to integer cents by @mamamiyear in #1375
  • fix(images): cap decompressed layer size during extraction by @ltstriker in #1372
  • fix(api): reject tunnel CONNECT for a stopped box instead of silently dropping the stream by @G4614 in #1352
  • fix(files): refuse mount-shadowed copies and chown to the box user by @DorianZheng in #1363
  • feat(infra): bootstrap Auth0 email verification by @DorianZheng in #1379
  • fix(security): separate host sandbox grants from guest networking by @G4614 in #1079
  • chore(infra): move Auth0 email bodies to HTML and set signup flag by @DefeatMan in #1380
  • refactor(dashboard): place balance warnings by severity by @mamamiyear in #1381
  • feat(cloud): wire box secrets through the REST create path by @ltstriker in #1365
  • feat(api): push component health to incident.io status page by @DorianZheng in #1376
  • fix(api): deadline status-sync reads and retire orphaned alerts safely by @DorianZheng in #1386
  • refactor(dashboard): show remaining quota in usage summary by @mamamiyear in #1388
  • fix(guest): make container start idempotent and revive zombies on exec by @ltstriker in #1382
  • Expose inbound network policy across CLI, SDKs, serve, and NetworkInfo by @G4614 in #1206
  • fix(python): stop passing sccache wrapper into wheel containers by @ltstriker in #1395
  • build(node): pin napi-rs CLI to 3.7.2 by @ltstriker in #1397
  • fix(core): map BoxOptions caller-input validation errors to 400 by @G4614 in #1394

New Contributors

Full Changelog: v0.9.7...v0.10.0