- ExecDto gains optional `environment` and `credentials` fields
- BrowserService.exec forwards both to CodeExecutorService.execute so
helpers.env, helpers.getEnvUrl(), and helpers.getCredential() work
identically to scenario-scheduler steps
- script console.log/warn/error now routed through TraceLogger with
session label prefix
- integration tests cover env/creds injection and missing-alias error
- BrowserService.exec() now builds snippet map via SnippetService and passes
it to CodeExecutorService.execute() for both named-session and anonymous paths
- SnippetModule added to BrowserModule imports to wire the dependency
- RunDetailPage step order column renders s.order + 1 (was 0-based)
- create and register named browser sessions on open/exec when missing
- align scenario step DTO/entity/service by removing sessionName usage
- update MCP scenario-step schemas to use optional title fields
- move NestJS app into server/ subdirectory
- add client/ React+TypeScript (Vite) app with Hello World
- update docker-compose to build and run both services
- add root package.json declaring npm workspaces
- update .gitignore to cover node_modules and dist at all depths