* feat(focus-chain): Render checklist items as markdown
This change introduces markdown rendering for both the header and individual items in the focus chain checklist. It leverages the existing MarkdownBlock component and adds a 'compact' mode to ensure proper alignment and spacing.
* feat: Add LightMarkdown component for memory-efficient rendering
- Create ultra-lightweight LightMarkdown component as memory-efficient alternative to MarkdownBlock
- Support bold (**text**), italic (*text*), and headers (# text) with cached regex patterns
- Replace MarkdownBlock with LightMarkdown in ChecklistRenderer and FocusChain components
- Eliminate heavy remark/rehype pipeline, AST parsing, and syntax highlighting for simple text formatting
- Significantly reduce memory usage and GC pressure in focus chain and checklist rendering
- Fix linting errors and ensure proper React element handling
This optimizes memory usage for components that only need basic markdown formatting,
while preserving full MarkdownBlock functionality where advanced features are needed.
* LightMarkdown: super-lightweight emphasis parser (bold/italic only); single-pass O(n) scan with memoization; remove headers; disable underscore emphasis to avoid snake_case false positives
- Move external @import statements before Tailwind imports to prevent PostCSS errors
- Add comprehensive documentation explaining import order requirements
- Fix build failure caused by '@import must precede all other statements' error
The issue occurred because Tailwind CSS v4 expands its imports into thousands of
lines of generated CSS, causing external imports to appear after CSS rules in
the final compiled output, violating CSS specifications.
* v3.28.5 Release Notes
* changeset version bump
* Updating CHANGELOG.md format
* Update changelog for patch release
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* Add task-specific settings caching to StateManager (#6171)
* Add task-specific settings caching to StateManager
Implement per-task settings storage with automatic loading/clearing:
- Add taskStateCache for isolated task settings
- Load task settings on task creation and reinitialize
- Clear task settings cache when tasks end
- Prioritize task cache over global state in getters
* update error wording for taskSettings read failure
* add missing return statement in promise.all
* fix: persist pending task settings before clearing cache
Changed clearTaskSettings to be async and ensure any pending task state
changes are persisted to storage before clearing the in-memory cache.
This prevents potential data loss when a task ends with unpersisted
settings still in the pending state queue.
- Made clearTaskSettings async and added optional taskId parameter
- Added logic to persist pending task state batch before clearing
- Updated controller to await clearTaskSettings and pass taskId
* add ability to set task setting overrides in newtask rpc
* spread proto object keys that don't need to be transformed and filter undefined values
* use most Settings fields in TaskSettings proto and convert fields that do not directly map to the application typescripts type of Settings
* accept taskSettings in newTask RPC and save them to task state
* remove test taskSettings in useMessageHandlers
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Kevin Bond <kevin@Kevins-MacBook-Pro.local>
* fix: keep fuzzy search active in chat input after selecting Add File/Folder
* fix: mentions, strip leading '/' and enforce file/folder-only results
* fix: improve readability of filteredDynamic
* fix: improve readability of selectedTypeValue
* first pass of removing all related code
# Conflicts:
# src/hosts/external/ExternalWebviewProvider.ts
# src/hosts/vscode/VscodeWebviewProvider.ts
* remove more things
* rename all sidebarWebviews to webview
* remove null from getInstance and remove null checks
* remove client id logic and update RPC subscriptions to match this
* add back extension.test.ts without irrelevant webview panel tests
* Refresh CI cache - fix proto compilation
* add comment to try to invalidate CI cache
* add clean script to test.yml for test-platform-integration
* remove clean script didn't work
* finally found the error in the code - linter wasn't highlighting it
* Don't delete unrelated tests in this PR
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
* fix: returning undefined when URL is not valid
This can happen when the user is typing, and once it was set there was
no way of changing it.
* adding change set
Add a `type` field to the PlatConfig with type of the IDE: VSCode, standalone, etc.
Make the info banner conditional on the type.
Quiet the gRPC logs on startup.
- Rename OpenDiskTaskHistoryButton to OpenDiskConversationHistoryButton
- Add HeroTooltip for consistent UI experience
- Update protobuf service and backend handler
* feat(chat): add scroll to top functionality
- Add scroll to top button when action buttons are not visible
- Pass virtuosoRef to ActionButtons component for scroll control
- Enhance scroll button logic to handle both up and down directions
* Update aria-label
* Minor UX fixes for voice mode
* Minor UX fixes for voice mode
* Minor UX fixes for voice mode
* Fix alignment of stop icon
---------
Co-authored-by: frostbournesb <frostbournesb@protonmail.com>
* add infobanner
* fix type and update docs url
* restructure test to not include brittle elements; it is not clear why this banner was even added to auth tests
* move update info banner logic into rpc