Implements sandbox-agent-managed hooks that work universally across all agents
(Claude, Codex, OpenCode, Amp, Mock). Hooks are shell commands executed at
specific lifecycle points in a session.
## Hook Types
- on_session_start - Executed when a session is created
- on_session_end - Executed when a session terminates
- on_message_start - Executed before processing each message
- on_message_end - Executed after each message is fully processed
## Features
- Hooks are configured via the API when creating sessions
- Environment variables provide context (SANDBOX_SESSION_ID, SANDBOX_AGENT, etc.)
- Configurable timeout per hook
- continue_on_failure option to control execution flow
- Working directory support for hook execution
## API Changes
- CreateSessionRequest now accepts optional 'hooks' and 'workingDir' fields
- HooksConfig and HookDefinition schemas added to OpenAPI spec
## Testing
- 8 unit tests for hook execution
- 9 integration tests using mock agent with snapshot testing
- Tests cover all lifecycle hooks, multiple hooks, failure handling, and env vars
## Summary
- Add Node.js build stage to all release Dockerfiles to build the inspector frontend
- Copy pre-built inspector assets into Rust build stages so they get embedded in binaries
- Remove `SANDBOX_AGENT_SKIP_INSPECTOR=1` from all Dockerfiles and the release workflow
## Test plan
- [ ] Build linux-x86_64 locally: `docker/release/build.sh x86_64-unknown-linux-musl`
- [ ] Run the binary and verify inspector is embedded (should show "inspector ui available")
- [ ] Access the inspector UI at http://localhost:2468/ui/🤖 Generated with [Claude Code](https://claude.ai/code)
The npm CLI platform packages were being published without binaries
because publishNpmCli() wasn't downloading them from R2 first.
- Add downloadFromReleases() helper to utils.ts
- Update publishNpmCli() to download platform binaries before publish
- Add sdks/cli/platforms/*/bin/ to .gitignore
- daytona.ts (default): Installs sandbox-agent at runtime. Faster to
start but installs on each run. Use for quick testing.
- daytona-with-snapshot.ts: Builds custom image with sandbox-agent
pre-installed. Slow first run (~2-3 min) but fast subsequent runs.
Use for repeated development.
Run with: pnpm start (default) or pnpm start:snapshot
- Fix install URL from latest to 0.1.3
- Add 180s timeout for sandbox creation
- Add autoStopInterval: 0 to prevent auto-stop
- Add log message explaining first run may be slow
* feat: add Claude adapter improvements for HITL support
- Add question and permission handling for Claude sessions
- Add Claude sender channel for interactive communication
- Add stream event and control request handling
- Update agent compatibility documentation
* fix: restore Claude HITL streaming input and permission handling
- Add streaming_input field to SpawnOptions for Claude stdin streaming
- Enable --input-format stream-json, --permission-prompt-tool stdio flags
- Pipe stdin for Claude (not just Codex) in spawn_streaming
- Update Claude capabilities: permissions, questions, tool_calls, tool_results, streaming_deltas
- Fix permission mode normalization to respect user's choice instead of forcing bypass
- Add acceptEdits permission mode support
- Add libc dependency for is_running_as_root check