- Introduced a new WorkbenchModelSelector variant for form usage.
- Updated ChatPage to manage scheduled tasks state more effectively.
- Added selectors for scheduled task elements in the testing suite.
- Implemented unit tests for ScheduledTaskService, covering task lifecycle and validation.
- Created end-to-end tests for scheduled task creation, editing, enabling, and deletion.
- Enhanced workbench interaction functions for scheduled tasks.
- Implemented database migration for scheduled tasks table.
- Added API endpoints for managing scheduled tasks (list, save, delete, enable/disable).
- Created ScheduledTasksView component for displaying and managing scheduled tasks.
- Integrated scheduled tasks functionality into the WorkbenchComposer and ChatPage components.
- Added select options for AI preferences and execution permissions.
- Implemented unit tests for scheduled task scheduling logic.
- Updated the AI filtering mechanism to read from local cache before making requests, improving performance and user experience.
- Modified prompts for vision model analysis to focus on identifying models that support visual input.
- Refactored the analysis response structure to return only model names, simplifying the data handling.
- Improved error handling and retry logic for analysis requests to ensure robustness.
- Adjusted UI components to reflect changes in data structure and enhance user interaction.
- Updated tests to cover new functionality and ensure correctness of the vision model analysis process.
- Implemented vision model analysis schema and normalization logic in visionModelAnalysis.ts.
- Added API types for vision model analysis requests and responses in types.ts.
- Integrated vision model analysis into the preload API and renderer components.
- Created UI components for selecting vision models with AI filtering options.
- Added styles for new UI components in base.css.
- Developed unit tests for vision model analysis logic.
- Implemented end-to-end tests for vision model AI filtering functionality.
Markdown files now open directly into the editable MarkdownEditor instead
of the read-only markdownViewer, so the apply case's two file_preview
assertions switched to markdownEditor. The apply-record preview/diff/revert
flow is unchanged (applyDocuments stays read-only).
The test stage builds a clean workspace from the tag but only ran
pnpm install without seeding the prebuilt native cache, so package E2E
re-downloaded better-sqlite3 from GitHub release assets on every run and
failed on flaky network. Seed the cache like the prepare stage does.
The only warmup case lives under the settings domain, so filtering with
--domain/--suite/--case excluded it and left every selected case to index
the workspace fixture from scratch. Package E2E now appends the warmup
case whenever more than one case is selected, and the warmup task bypasses
--testNamePattern so targeted --case runs still seed the shared cache.
vditor loads lute/katex/highlight/i18n at runtime via its cdn option,
so its dist resources must be copied into the renderer public dir during
build. The vditor-assets script was never wired into build and had TS
type annotations that made it fail as plain .mjs.
- wire vditor-assets into the build chain before electron-vite build
- rewrite vditor-assets to plain JS
- pass an inlined zh_CN i18n object to Vditor so it no longer loads
i18n/zh_CN.js dynamically and cannot pop its own vditor-tip toast
- Refactored PlainTextEditor to utilize autoSave and flushSave for managing content changes.
- Removed the editableDirtyRegistry as its functionality is now integrated within useEditableTextFile.
- Updated the markdownEditor CSS for improved styling and consistency.
- Enhanced useEditableTextFile to handle automatic saving and external changes more efficiently.
- Adjusted ChatPage to eliminate unused discard edits confirmation logic.
- Updated selectors to remove references to deleted editable file components.
- Improved end-to-end tests for markdown and plain text editors to reflect new auto-save behavior and UI changes.
- Add `useEditableTextFile` hook for managing editable text files, including loading, saving, and detecting external changes.
- Introduce `sha256Hex` utility for hashing file contents.
- Enhance `WorkbenchContentPanel` to classify editable text kinds and manage state accordingly.
- Update `ChatPage` to handle unsaved changes when opening new files or closing tabs.
- Create new selectors for editable file components in the testing suite.
- Implement tests for text file writing service, ensuring atomic writes and conflict detection.
- Add end-to-end tests for markdown and plain text editors, verifying edit, save, and conflict handling functionalities.
The structured output refactor dropped the LlmProviderError conversion,
so provider HTTP errors surfaced as generic internal failures without
httpStatus. Wrap errors carrying an HTTP status into LlmProviderError
before rethrowing, leaving output, cancellation, timeout and network
errors untouched.
spliceRows leaves trailing empty rows that the row alignment treated as
inserted rows, inflating change counts with bottom duplicates. Trim
trailing empty rows from both sides before alignment, and stop pushing a
fake A1 cell change for sheet renames (tab color is the rename marker).
ConPTY re-renders wrapped lines by inserting ANSI cursor sequences and
duplicating boundary characters into long marker lines, corrupting the
base64 cwd payloads. Widen the PTY to 1000 columns so marker and envelope
lines never wrap, and strip ANSI/CR/LF noise from marker payloads.