Uncomment the DAYTONA_* env passthrough on the backend service and add
DAYTONA_SNAPSHOT_ID, so a deployment that sets SANDBOX_PROVIDER=daytona
actually forwards the key, URL, target, and snapshot into the container.
Document the snapshot name in the compose .env.example.
- Added `load_source_document` tool to facilitate conversion of existing workspace files into PDFs.
- Updated document components to support download actions, including new `onDownload` props in `DocumentNode`, `FolderTreeView`, and `DocumentRightPanel`.
- Implemented download logic in `downloadFile` function to handle file retrieval from the backend.
- Enhanced tests for the new download functionality and source document loading.
- Added `SANDBOX_OPERATION_TIMEOUT_SECONDS` to configuration for controlling sandbox operation timeouts.
- Updated various components to utilize the new timeout setting, ensuring consistent timeout behavior across different sandbox providers.
- Refactored execution logic in the sandbox tools to improve error handling and cleanup processes.
- Enhanced tests to validate the new timeout functionality and ensure proper execution flow.
- Added support for loading current deliverables and context for artifact revisions with `load_artifact_for_revision`.
- Removed the deprecated `load_artifact_source` tool.
- Enhanced documentation for artifact skills, including detailed revision instructions for DOCX, PDF, PPTX, and XLSX formats.
- Updated the Dockerfile to include the `python-docx` package for document generation.
- Adjusted artifact file roles in the database schema to exclude the source role.
- Updated docker-compose.dev.yml to include a persistent pnpm store for caching dependencies.
- Modified Dockerfile to reconcile node_modules with the lockfile before starting the development server, ensuring consistent dependency management.
Updated the SKILL.md documentation to clarify layout and formatting guidelines for PPTX slides, including margin specifications and font usage. Improved the verification process by emphasizing the importance of treating verification as a state transition, ensuring that `save_artifact` is only called after successful verification. Added local assertion checks before saving to ensure all requirements are met. Updated related tests to validate these changes.
Modified the `load_artifact_source` function to return a dictionary containing the `source_path`, `document_id`, and a `save_instruction` for in-place revisions. Updated related documentation and adjusted tests to reflect these changes, ensuring clarity on artifact revision processes across DOCX, PDF, and PPTX skills.
Move shared OOXML safety checks and rendering policies behind format adapters so PPTX can reuse the verification pipeline without inheriting document-only assumptions.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Updated backend-tests.yml to include OpenSandbox integration for running tests in a sandbox environment.
- Modified docker-build.yml to support building and testing the sandbox image.
- Enhanced docker-compose files to manage sandbox image creation and configuration.
- Added PDF generation skills and scripts for the sandbox, including quality checks and rendering capabilities.
- Changed the port range from 40000-60000 to 20000-30000 to prevent address conflicts on Linux and Windows hosts during sandbox creation. This adjustment ensures smoother operation and reduces the likelihood of intermittent failures.
- Updated the .env.example file to include new sandbox settings for code execution, including SANDBOX_ENABLED, SANDBOX_PROVIDER, and session management parameters.
- Modified docker-compose files to reflect the new sandbox environment variables, allowing for easier configuration of cloud execution options.
- Introduced the opensandbox-server service in docker-compose files for local sandbox execution.
- Configured environment variables and health checks for the opensandbox server.
- Added sandbox.toml configuration file for server settings.
- Created a Dockerfile for the sandbox environment with necessary dependencies and Python setup.
The video presentation agent built its Kokoro pipeline with a literal
lang_code="a" and took its voice from a hand-rolled provider map that only
ever returned American English. Slides generated from Japanese or Chinese
source content were therefore narrated by an English voice reading text it
could not pronounce.
The podcast pipeline already solved this: a voice catalog with per-language
rosters, a BCP-47 tag normaliser, and a TTS port whose Kokoro adapter maps the
tag to the right pipeline and caches one pipeline per language. The video path
simply sat outside that infrastructure. Route it through the same port instead
of duplicating a second, English-only implementation.
The language now comes from the model that writes the slides, which is the
only component that knows what language it wrote in. An absent or unusable tag
falls back to a new VIDEO_PRESENTATION_DEFAULT_LANGUAGE and finally to English,
so a bad value degrades instead of failing the render.
app/services/kokoro_tts_service.py is removed: routing through the port left it
without a caller, and it also pulled kokoro and torch into the agent's import
chain at module scope.