From eaeea8d4864709e3e12eb63bc8997356f8f46806 Mon Sep 17 00:00:00 2001 From: Dmitrij Zykovic Date: Wed, 29 Jul 2026 21:21:41 +0100 Subject: [PATCH] Released 0.3.0 with visible, cancellable and single-flight sandbox operations --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- src/sbx.ts | 7 ++++--- 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c5e545..c2ab1dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,48 @@ All notable changes to this extension are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.0] - 2026-07-29 + +Long operations — image builds, sandbox creation — used to run behind a notification that +never changed a word, sometimes for minutes. This release makes them visible, stoppable, +and impossible to start twice by accident. + +### Added + +- **Operation log.** A `Sandbox Console` output panel shows every command the extension + runs, streamed line by line as it happens, with its exit code and how long it took. + Open it from `Sandbox: Show Log`, from the Sandboxes view menu, or from the button that + now appears on error notifications. Credential values never appear in it. +- **Live progress.** The notification for a build or a create reports what the command is + doing right now — the current build step, and the slow, quiet stages that move an image + into the sandbox runtime — instead of standing still. +- **Cancel.** Long operations can be stopped from their notification. An image build stops + immediately. Cancelling a sandbox creation waits for it to finish and then removes the + sandbox, so it can take as long as the creation itself. That wait is deliberate: + interrupting the sandbox tool partway can leave a sandbox name permanently unusable. + +### Changed + +- **One operation per sandbox at a time.** Acting on a sandbox that is already busy now + tells you what is running instead of starting a second operation beside it. Different + sandboxes still run in parallel. +- **A busy sandbox looks busy.** Its item in the Sandboxes view shows a spinner and the + running operation, and its actions are hidden until it finishes. +- **The New/Edit form shows that it is working.** Save disables itself and the rest of the + form for the duration, and is handed back if the save fails. +- **A clearer error when a sandbox name is stuck.** If creation fails because the name is + still held inside the sandbox runtime — a known Docker Sandboxes issue with no released + fix — the message now explains what happened and how to get past it, instead of showing + a raw daemon error. + +### Fixed + +- **Rebuild could run twice at once.** Starting it from both the command palette and the + Sandboxes view, or clicking again during a long build, started two builds against the + same sandbox, which then raced each other over the same image and instance. +- **Background checks no longer fail silently.** A failed sandbox or template listing used + to degrade quietly to "nothing found"; it is now recorded in the operation log. + ## [0.2.0] - 2026-07-28 First public release. Run AI coding agents in isolated, persistent Docker Sandboxes and @@ -79,4 +121,5 @@ Terminal-first commands over the `sbx` CLI (create, attach, stop, shell) with st discovery of existing sandboxes and per-repo sandbox identity in a single local file. Superseded by 0.2.0 and listed here only for history. +[0.3.0]: https://github.com/ainova-systems/code-sandbox-console/releases/tag/v0.3.0 [0.2.0]: https://github.com/ainova-systems/code-sandbox-console/releases/tag/v0.2.0 diff --git a/package-lock.json b/package-lock.json index 4f17171..01af269 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sandbox-console", - "version": "0.2.0", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sandbox-console", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "dependencies": { "yaml": "^2.9.0" diff --git a/package.json b/package.json index 1c13285..fec6a97 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "sandbox-console", "displayName": "Sandbox Console", "description": "Run AI coding agents (Claude Code, Codex, Gemini, …) in isolated, persistent Docker Sandboxes (sbx microVMs) — terminal-first, from a Sandbox Explorer, with no manual container management.", - "version": "0.2.0", + "version": "0.3.0", "publisher": "ainova-systems", "license": "MIT", "author": { diff --git a/src/sbx.ts b/src/sbx.ts index 704b3e8..bf1b3fd 100644 --- a/src/sbx.ts +++ b/src/sbx.ts @@ -196,9 +196,10 @@ function explainCreateFailure(name: string, message: string): string { return ( `${message}\n\nThe sandbox name "${name}" is still claimed inside the sbx runtime by ` + "leaked state — a known sbx bug (docker/sbx-releases#129) with no released fix. The " + - "name cannot be reused: change this sandbox's `key` in .sandbox/config.yaml to create " + - "it under a new name, or run `sbx reset` to clear all sbx state (this destroys every " + - "sandbox on the machine)." + "name cannot be reused: give this sandbox a new, distinctive `key` in " + + ".sandbox/config.yaml — not a bare agent name like `claude`, because new sandboxes " + + "take those and would land on this same name again. Or run `sbx reset` to clear all " + + "sbx state (this destroys every sandbox on the machine)." ); }