- Added functionality to persist sandbox files locally before deletion.
- Introduced methods for retrieving and deleting locally stored sandbox files.
- Updated routes to handle local file downloads and background deletion of sandboxes.
- Enhanced streaming tasks to support sandbox file management.
- Added detailed instructions for prioritizing code execution over text responses in specific scenarios, such as data visualization and file generation.
- Included examples to illustrate correct and incorrect approaches to handling user requests involving code execution.
- Emphasized the importance of printing file paths for user downloads and clarified the handling of sandbox-generated files.
- Added _TimeoutAwareSandbox class to handle per-command timeouts in DaytonaSandbox.
- Updated _find_or_create function to manage sandbox states and restart stopped/archived sandboxes.
- Enhanced get_or_create_sandbox to return the new sandbox class.
- Introduced file download functionality in the frontend, allowing users to download generated files from the sandbox.
- Updated system prompt to include guidelines for sharing generated files.
- delete_linear_issue + delete_notion_page: add db_session.rollback()
in the KB document deletion exception handler so the session is never
left in a PendingRollbackError state after a failed commit, which
would otherwise break all subsequent DB operations in the same request
- delete_linear_issue: include issue identifier (e.g. ENG-42) in the
success message so the caller can confirm which issue was archived
- update_linear_issue: remove redundant label_ids ternary
(x if x is not None else None -> x)
- create_linear_issue: add logger.error on empty-title guard for parity
with the equivalent Notion tool
- update_issue: handle not_indexed KB sync status with a distinct user
message (matches Notion parity)
- delete_issue: fix log message "not found in DB" → "not found in KB"
- Add create_linear_issue, update_linear_issue, delete_linear_issue to
TOOLS_WITH_UI so the HIL approval cards are correctly dispatched to
the Linear tool-ui components (without this the interrupt cards were
never rendered)
- Replace blocking requests.post with httpx.AsyncClient in
LinearConnector.execute_graphql_query to avoid stalling the asyncio
event loop during live streaming; remove now-unused requests import