From 991060dd803909becfffdc1d0a53e101f84a1949 Mon Sep 17 00:00:00 2001 From: vipmax Date: Wed, 12 Aug 2026 12:21:22 +0300 Subject: [PATCH 1/2] Persist settings panel layout --- anycode/components/layout/Layout.tsx | 1 + anycode/tests/demo.spec.ts | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/anycode/components/layout/Layout.tsx b/anycode/components/layout/Layout.tsx index 6052286..5cb6789 100644 --- a/anycode/components/layout/Layout.tsx +++ b/anycode/components/layout/Layout.tsx @@ -878,6 +878,7 @@ export const Layout: React.FC = ({ saveItem('agentPanelVisible', visibility.agent); saveItem('terminalPanelVisible', visibility.terminal); saveItem('browserPanelVisible', visibility.browser); + saveItem('settingsPanelVisible', visibility.settings); }, [visibility]); const resolvePanelContent = useCallback((panelId: PanelId, panelKey: string): React.ReactNode => ( diff --git a/anycode/tests/demo.spec.ts b/anycode/tests/demo.spec.ts index 5f320f4..099e200 100644 --- a/anycode/tests/demo.spec.ts +++ b/anycode/tests/demo.spec.ts @@ -734,6 +734,28 @@ test.describe('Anycode Live Demo Mode E2E Tests', () => { ).toContainText('-review-sync'); }); + test('should persist a Settings panel added from the panel plus button after reload', async ({ page }) => { + const filesPanel = page.getByRole('region', { name: 'Files' }); + const addEmptyTabButton = filesPanel.getByRole('button', { name: 'Add Empty Tab' }); + + await expect(addEmptyTabButton).toBeVisible({ timeout: 10000 }); + await expect(page.locator('.layout-dock-panel--settings:visible')).toHaveCount(0); + + await filesPanel.locator('.layout-header-actions').hover(); + await addEmptyTabButton.click(); + + const picker = page.locator('.layout-panel-picker').last(); + await expect(picker).toBeVisible(); + await picker.getByRole('button', { name: 'Settings', exact: true }).click(); + await expect(page.locator('.layout-dock-panel--settings:visible')).toBeVisible(); + + await expect.poll(() => page.evaluate(() => localStorage.getItem('layout'))).toContain('settings'); + + await page.reload(); + + await expect(page.locator('.layout-dock-panel--settings:visible')).toBeVisible({ timeout: 10000 }); + }); + test('should apply scrollbar settings to an open editor and persist them after reload', async ({ page }) => { const readme = page.getByText('README.md').first(); await expect(readme).toBeVisible({ timeout: 10000 }); From a4d2e44a5cede99503673945ee9800131a7fcd47 Mon Sep 17 00:00:00 2001 From: vipmax Date: Wed, 12 Aug 2026 21:36:05 +0300 Subject: [PATCH 2/2] chore: prepare release v0.0.27 --- .github/release-notes/v0.0.27.md | 27 +++++++++++++++++++++++++++ CHANGELOG.md | 17 +++++++++++++++++ anycode-backend/Cargo.lock | 2 +- anycode-backend/Cargo.toml | 2 +- anycode-react/dist/index.js | 4 ++-- 5 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 .github/release-notes/v0.0.27.md diff --git a/.github/release-notes/v0.0.27.md b/.github/release-notes/v0.0.27.md new file mode 100644 index 0000000..d6f17b8 --- /dev/null +++ b/.github/release-notes/v0.0.27.md @@ -0,0 +1,27 @@ +# Anycode v0.0.27 + +This release expands code review and Git history workflows, adds customizable scrollbars, and improves editor performance, ACP interactions, and layout persistence. + +## Code review and Git history + +- Added multi-buffer change review with per-file focus, history-aware undo/redo, and diff context that stays within file boundaries. +- Added repository and per-file Git history browsing with pagination, file timelines, historical-file previews, and refresh after external commits. +- Improved Git status handling and added visible feedback after push operations. + +## Editor and scrolling + +- Added custom scrollbar rendering with Mac, Windows, and minimal presets, configurable width and minimum size, auto-hide behavior, and mobile touch support. +- Persisted scrollbar and settings-panel layout preferences across sessions. +- Improved large-file scrolling, cursor and word-highlight rendering, syntax-injection performance, diff rendering, and plain-file baseline handling. + +## ACP and interface + +- Improved ACP controls, auto-scroll, agent status, streamed message rendering, code blocks, and session initialization. +- Improved mobile layout and tab visibility, search navigation, and settings presentation. + +## Testing and documentation + +- Added multibuffer and scrollbar end-to-end coverage, expanded backend Git tests, and improved demo test startup and CI caching. +- Added documentation for multibuffer review and scroll blanking behavior. + +**Full comparison:** `v0.0.26...v0.0.27` diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e56475..2d2ce52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,23 @@ All notable changes are documented here by release tag. +## v0.0.27 - 2026-08-12 + +### Highlights +- Added multi-buffer change review with per-file history, focused navigation, and safer diff context handling. +- Added Git history browsing for repositories and individual files, with pagination and historical-file support. +- Added customizable scrollbars with Mac, Windows, and minimal presets, configurable width/minimum size, and persisted settings. +- Improved editor performance for large files, syntax injection, cursor and word highlighting, scrolling, and diff rendering. +- Improved ACP controls, auto-scroll, agent status and message rendering, mobile layout behavior, and settings/layout persistence. +- Added Git push status feedback, stronger Git status/history handling, expanded backend coverage, and demo/e2e coverage. + +### Commits +- `b419fcb` Add multibuffer change review +- `82dbff0` Add Git file history timeline +- `3a77956` feat: custom scrollbar implementation with mac visuals, zero reflow, auto-hide, and mobile touch support +- `1df55a8` Improve ACP controls and auto-scroll behavior +- `991060d` Persist settings panel layout + ## v0.0.26 - 2026-08-03 ### Highlights diff --git a/anycode-backend/Cargo.lock b/anycode-backend/Cargo.lock index c1bb7e1..7ebcf03 100644 --- a/anycode-backend/Cargo.lock +++ b/anycode-backend/Cargo.lock @@ -70,7 +70,7 @@ dependencies = [ [[package]] name = "anycode" -version = "0.0.26" +version = "0.0.27" dependencies = [ "agent-client-protocol", "agent-client-protocol-schema", diff --git a/anycode-backend/Cargo.toml b/anycode-backend/Cargo.toml index b6db79c..0637e5e 100644 --- a/anycode-backend/Cargo.toml +++ b/anycode-backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "anycode" -version = "0.0.26" +version = "0.0.27" edition = "2024" [profile.release] diff --git a/anycode-react/dist/index.js b/anycode-react/dist/index.js index 19a90de..c7dd6e2 100644 --- a/anycode-react/dist/index.js +++ b/anycode-react/dist/index.js @@ -1,3 +1,3 @@ import AnycodeEditorReact from './Component'; -import { AnycodeEditor, Operation } from 'anycode-base'; -export { AnycodeEditorReact, AnycodeEditor, Operation }; +import { AnycodeEditor, Operation, setWasmBasePath } from 'anycode-base'; +export { AnycodeEditorReact, AnycodeEditor, Operation, setWasmBasePath };