- Add --auto-unfreeze / --no-auto-unfreeze commands to toggle setting
- Add --unfreeze-on-demand flag for service create
- Display Auto-Unfreeze status in service --info output
- Add field to unsandbox_service_t struct and API function in un.h
Change key validation endpoint from portal to API across all clients:
- C: Update PORTAL_BASE to API_BASE in validate_api_key()
- Python (sync/async): Change PORTAL_BASE to API_BASE
- Perl: Change $PORTAL_BASE to $API_BASE
- Rust (sync/async): Change hardcoded URL to api.unsandbox.com
All other languages (Go, Java, Kotlin, C#, Ruby, PHP, JavaScript) already
use their makeRequest() function with API_BASE, so no changes needed.
The key subcommand already exists and continues to work with the new endpoint.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The CLI was using library-only types and functions (unsandbox_languages_t,
unsandbox_image_list_t, etc.) that are only available when UNSANDBOX_LIBRARY
is defined. This caused build failures when building as CLI.
Changes:
- Add static list_languages_cli() for CLI language listing
- Fix image list to parse JSON directly instead of using library types
- Fix spawn_from_image() call with missing bootstrap/network_mode args
- Fix image_publish/clone_image calls to use static functions
Also update CLAUDE.md with release/versioning documentation.
- Add `un languages [--json]` command to list available execution languages
- Add `un image` command with full image management:
- --list, --info, --delete, --lock, --unlock
- --publish, --visibility, --spawn, --clone
- Update CLI_SPEC.md with new command documentation
- All implementations follow consistent patterns
- Build C CLI binary for testing all SDKs through unsandbox
- test-sdk.sh runs: build/un → unsandbox → SDK → unsandbox → test code
- Each SDK is tested for --help and code execution
- No local language interpreters needed on build server
C SDK now declares the complete API matching Python/Go/Java/etc:
- 8 Execution functions (stubbed - need JSON parsing)
- 9 Session functions (5 working: destroy/freeze/unfreeze/boost/unboost)
- 17 Service functions (11 working: all operations except list/get/execute)
- 8 Snapshot functions (6 working: all operations except list/get)
- 1 Key validation function (working)
Working functions call actual internal CLI code via wrappers.
Stubbed functions return NULL - they need JSON response parsing
which the CLI doesn't have (it prints to stdout).
Header includes complete struct definitions for all return types.
33 unit tests pass.
C SDK changes:
- Add #include un.h when building as library
- Export library functions: version, detect_language, hmac_sign, health_check
- Add NULL safety checks to wrapper functions
- Rewrite tests to call ACTUAL exported functions (no more local re-implementations)
- Tests now verify real HMAC-SHA256 against known test vectors
Documentation:
- Add SDK Testing Philosophy to CLAUDE.md
- Create docs/TESTING.md with unit/integration/functional test definitions
- Document the THREE testing levels required for all SDKs
- Explicitly forbid mocking and local re-implementation in tests
33 unit tests pass, testing real exported functions.
- Add #ifndef UNSANDBOX_LIBRARY around main() to allow library use
- Add CFLAGS_LIB with -DUNSANDBOX_LIBRARY for library compilation
- Add -lwebsockets to LDFLAGS for WebSocket support
- Build now compiles cleanly, tests pass (22/0)
Add per-client Makefiles for C, Python, and Go with:
- CLI mode: Tests --help, arg parsing, syntax validation
- Library mode: Unit tests, import verification
- Integration mode: API contract validation (with credentials)
- Functional mode: Real-world scenario tests
C client:
- 22 library tests (SHA-256, HMAC-SHA256, detect_language)
- Full unsandbox.c implementation with examples
Python client (sync + async):
- Delegates to sync/ and async/ subdirectories
- pytest-based test suites with coverage
- Examples for concurrent execution, streaming
Go client:
- Delegates to sync/ and async/ subdirectories
- go test integration with vet and fmt
Also update detect-changes.sh to detect changes in
both root-level un.* files AND clients/ directory.