| fix: build macOS release with the latest Xcode so the binary links the current SDK | 4 天前 |
| refactor: replace file icons with natural/everyday set | 2 个月前 |
| feat: text color rendering, selection color menu, edit-time range shifting - Render per-strand text colors: SeqBgLayer/ComplementLayer split MonoRuns at color boundaries (splitByTextColor), default fill elsewhere. - Selection context menu: Text Color submenus ((+)/(-)/Both strands for DNA, single for RNA/protein) with the SnapGene-palette presets and Clear, backed by the new set_text_colors command (do_set_text_colors kernel, apply_text_color carve/overwrite/clear + canonicalize). - Sequence edits carry color runs along: frontend adjustTextColorsForEdit mirrors the Rust span math for the optimistic update, update_sequence now accepts the adjusted runs (canonicalized/clamped server-side), undo/redo snapshots include them, and MCP edit_sequence shifts them via utils::adjust_text_colors_for_edit. - filter_project payloads carry textColorsTop/Bottom so broadcasts and mutation responses sync all windows. | 4 天前 |
| chore: reorganize example tasks (rename RNAi, add CAR-T) and ignore agent test traces | 2 个月前 |
| ci: build Linux as Flatpak only (amd64 + aarch64) instead of deb/AppImage | 1 个月前 |
| ci: auto-update Homebrew tap cask on release | 1 个月前 |
| feat: inject Gatekeeper install instructions into macOS dmg | 1 个月前 |
| feat: update app icon | 3 个月前 |
| chore: bump version to 0.7.2 and add release notes | 3 天前 |
| docs: rewrite bilingual README around reorganized screenshots | 7 天前 |
| ci: add Ubuntu to build matrix; ship Windows setup scripts Addresses the two follow-up notes from PR #1 review: 1. build job matrix now includes ubuntu-latest (previously only Windows and macOS, while the lint job already ran on Ubuntu). Adds the Linux system deps Tauri needs (libwebkit2gtk-4.1, librsvg, patchelf) via a runner.os-guarded step. 2. The Windows toolchain setup scripts referenced by BUILD-WINDOWS.md were never committed, so readers hit dead links. The scripts (1-install-rust.ps1, 2-install-vs-buildtools.ps1, 3-verify-and-build.ps1, .vsconfig) now ship under scripts/setup-windows/ and BUILD-WINDOWS.md points there. 3-verify-and-build.ps1 was rewritten to auto-locate the repo root (instead of hardcoding %TEMP%) and documents the PowerShell progress-buffering behavior. | 2 个月前 |
| fix: keep macOS traffic lights on tao positioning instead of the decoration plugin The decoration plugin refuses dev-URL content, so dev builds always used tao's trafficLightPosition while release builds activated the plugin, whose inset semantics (y = extra container height, buttons centered) differ from tao's (y = button top offset) — release builds placed the lights 11pt too high. Its taller titlebar container also fought AppKit relayouts on display/focus changes, making the lights jump. On macOS the frontend now just shows the window, leaving tao's trafficLightPosition in charge; the plugin stays active on Windows/Linux where it draws the HTML window controls. | 3 天前 |
| fix: keep macOS traffic lights on tao positioning instead of the decoration plugin The decoration plugin refuses dev-URL content, so dev builds always used tao's trafficLightPosition while release builds activated the plugin, whose inset semantics (y = extra container height, buttons centered) differ from tao's (y = button top offset) — release builds placed the lights 11pt too high. Its taller titlebar container also fought AppKit relayouts on display/focus changes, making the lights jump. On macOS the frontend now just shows the window, leaving tao's trafficLightPosition in charge; the plugin stays active on Windows/Linux where it draws the HTML window controls. | 3 天前 |
| chore: configure project LSP settings - .vscode/extensions.json: recommend rust-analyzer, Taplo (TOML), Tailwind CSS IntelliSense, ESLint, Prettier, EditorConfig, Code Spell - .vscode/settings.json: rust-analyzer linked projects, tailwind language config, search/filer excludes, spell dictionary - .editorconfig: cross-editor indent (2 spaces JS, 4 spaces Rust), UTF-8, LF line endings, trailing newline | 3 个月前 |
| chore: gitignore all MCP test trace runs (_mcp_test_*) | 15 天前 |
| chore: configure language servers (LSP) and code quality tools Installed as devDependencies: - typescript-language-server (JS/JSX autocomplete) - @tailwindcss/language-server (Tailwind class hints) - @taplo/cli (TOML validation) - eslint 10 (JS linting) - prettier 3 (JS formatting) Config files: - eslint.config.js: flat config with React plugin, JSX support - .prettierrc: 2-space, single quote, trailing comma - .editorconfig: cross-editor indent rules (2/4 spaces) - .vscode/: extensions.json + settings.json for LSP clients | 3 个月前 |
| feat: text color rendering, selection color menu, edit-time range shifting - Render per-strand text colors: SeqBgLayer/ComplementLayer split MonoRuns at color boundaries (splitByTextColor), default fill elsewhere. - Selection context menu: Text Color submenus ((+)/(-)/Both strands for DNA, single for RNA/protein) with the SnapGene-palette presets and Clear, backed by the new set_text_colors command (do_set_text_colors kernel, apply_text_color carve/overwrite/clear + canonicalize). - Sequence edits carry color runs along: frontend adjustTextColorsForEdit mirrors the Rust span math for the optimistic update, update_sequence now accepts the adjusted runs (canonicalized/clamped server-side), undo/redo snapshots include them, and MCP edit_sequence shifts them via utils::adjust_text_colors_for_edit. - filter_project payloads carry textColorsTop/Bottom so broadcasts and mutation responses sync all windows. | 4 天前 |
| refactor: reuse wrap_template_region in methylation windows; fix stale vcvars note in BUILD-WINDOWS.md | 2 个月前 |
| feat: prepare for open-source release - Add GPL v3 LICENSE and THIRD_PARTY_LICENSES.md - Add bilingual README (English + Chinese) - Update .gitignore to exclude unpublished research data - Replace app icon across all platforms (PNG, SVG, ICNS, ICO) - Display app icon on empty welcome page - Remove dead primer renderer code (PrimerSegmentRenderer, primerRenderer) - Remove resolved bug list and stale references from AGENTS.md - Rename Tauri package to LibreGene for correct dock name - Update license fields in package.json and Cargo.toml | 3 个月前 |
| docs: rewrite bilingual README around reorganized screenshots | 7 天前 |
| docs: rewrite bilingual README around reorganized screenshots | 7 天前 |
| feat: BLAST alignment engine with user-selectable algorithm and insertion-aware alignment view Add a locally modified blastn engine (backend/libregene-core/src/align/blastn/) as a user-selectable alternative to Smith-Waterman, and rework the alignment view so inserted sequence and its insertion point are directly visible. Engine: word lookup scan, ungapped/gapped X-drop extension, HSP dedup, Karlin-Altschul statistics, full-length fast paths for near-identical pairs (with circular rotation search) and colinear multi-HSP chain normalization; the hit chain converts to the existing multi-segment Alignment model. Smith-Waterman is kept; the algorithm is selectable in Settings > Alignment (localStorage persisted), via the add_alignment/add_alignment_seq algorithm param, and the MCP add_alignment tool. Alignment view: leading/trailing junk tails are stored as insertions so every read base is either a hit column or an insertion (no holes); inserted bases expand into full slot columns (red bases, template-row red '-' placeholders, chromatogram peaks) with colVis/colRuns/colFromVis mapping every lane (template row, features, enzymes, primers, translation, selection, cursor, traces) onto the shared drifted grid, including inverse click/drag mapping. Rows keep their base count while slots extend them to the right, with a sticky horizontal scrollbar (wheel/drag, bidirectionally synced with the editor scroll, clear of the bottom nav) and row labels hugging their own content. Tests: ported behaviour suites plus multi-segment/tail/circular cases in libregene-core (408 pass, roundtrip green); lane layout unit tests, an anchor-to-layout correspondence invariant and SSR insertion/tail cases (39 frontend tests pass). Verified against real Sanger files: 21bp leading junk, 22bp junction insert and 14bp trailing tail all visible and column-aligned with their traces. | 28 天前 |
| refactor: 全面重构 — shadcn UI 集成、布局参数化、Debug Panel - 集成 shadcn v4 UI 组件(Sidebar、Sheet、Dialog 等) - 前端从 pure CSS 迁移到 Tailwind CSS v4 - 添加路径别名 @/ → src/,jsconfig.json 配置 - 特征/引物/酶切位点布局参数全部改为可调 layoutParams - 酶切位点 track 改为 per (enzyme, row),移除全局冲突 - 移除 computeHighestY,整合到 enzymeLayout 内联计算 - clientToSeqIndex 和 cursor 改用内容边界而非中点 - DebugDialog 改写为 Sheet 右侧滑出面板,中文标注所有排版参数 - 重构 App.jsx 多项目管理逻辑 - Tauri v2 后端升级:process API、事件广播、ProjectManager | 5 个月前 |
| fix: contain wheel scrolling inside self-contained dialogs The distributable plugins' hand-rolled Dialog and the reload-confirm overlay leaked wheel events to the page behind them, making the app rubber-band. A native non-passive wheel listener now lets genuinely scrollable inner areas scroll and preventDefaults everything else. | 7 天前 |
| 重命名项目: Geneie → LibreGene | 3 个月前 |
| refactor: 全面重构 — shadcn UI 集成、布局参数化、Debug Panel - 集成 shadcn v4 UI 组件(Sidebar、Sheet、Dialog 等) - 前端从 pure CSS 迁移到 Tailwind CSS v4 - 添加路径别名 @/ → src/,jsconfig.json 配置 - 特征/引物/酶切位点布局参数全部改为可调 layoutParams - 酶切位点 track 改为 per (enzyme, row),移除全局冲突 - 移除 computeHighestY,整合到 enzymeLayout 内联计算 - clientToSeqIndex 和 cursor 改用内容边界而非中点 - DebugDialog 改写为 Sheet 右侧滑出面板,中文标注所有排版参数 - 重构 App.jsx 多项目管理逻辑 - Tauri v2 后端升级:process API、事件广播、ProjectManager | 5 个月前 |
| perf+chore: clone elimination, scroll memo stability, dead code removal, vitest seed Performance: - SequenceEditor visibleRows now holds a stable object identity while start/end are unchanged. scrollY churns every frame, and six downstream memos (visibleEnzymes/visibleFeatures/visiblePrimers/alignments/ renderedSeqBg) key on the object — a fresh object recomputed all of them even when the visible range didn't move. Biggest win when scrolling large plasmids. - ProjectManager::load moved the owned ProjectData into the map instead of cloning it and dropping the original (one full deep copy of sequence + enzymes per file open). - do_update_sequence skips cloning Vec<Enzyme> for the recompute clone: enzyme::recompute rebuilds the entire list from the embedded database, so copying the existing entries was pure waste. primers are still cloned — primer::recompute reads the existing definitions. - digest.rs: 20x push_str(&format!(..)) -> write!(..) (halves the allocations when building large digests; all 29 digest tests pass unchanged). Dead code (~350 lines): - src/api.js: pre-Tauri HTTP/WS client, zero imports (the routes.rs HTTP backend it targeted no longer exists). - ProjectManager: 9 uncalled mutators (set_roi, clear_roi, update_sequence, update_features, update_feature_{ftype,color, location}, update_primers, set_methylation_systems) — the Tauri command layer and MCP both go through get_project_mut_by_id + shared do_* helpers; the parallel unused API was a trap (same names as the Tauri commands). - primer::init: empty placeholder, zero callers. Dependencies / build: - Removed shadcn from dependencies (scaffolding CLI, zero imports) and @radix-ui/react-slot (zero imports; Slot comes from the radix-ui meta-package). esbuild devDep kept — vite 8's minify:'esbuild' requires it installed separately. - vite manualChunks: exact 'node_modules/react/' match so react-remove- scroll / react-style-singleton (Radix transitives) don't land in the react vendor chunk and invalidate it on Radix updates. Tests (new): - vitest wired in (test script + devDep). First suite covers the pure logic modules: editHistory (undo/redo/truncation/shallow-copy contract) and recentFiles (localStorage persistence, dedupe, cap, corruption tolerance) — 14 tests, node environment, no DOM. Verification: cargo test -p libregene-core --lib 296 passed; cargo build -p LibreGene --release ok; npx vite build ok; npx vitest run 14/14; eslint 0 problems. | 2 个月前 |
| chore: bump version to 0.7.2 and add release notes | 3 天前 |
| perf+chore: clone elimination, scroll memo stability, dead code removal, vitest seed Performance: - SequenceEditor visibleRows now holds a stable object identity while start/end are unchanged. scrollY churns every frame, and six downstream memos (visibleEnzymes/visibleFeatures/visiblePrimers/alignments/ renderedSeqBg) key on the object — a fresh object recomputed all of them even when the visible range didn't move. Biggest win when scrolling large plasmids. - ProjectManager::load moved the owned ProjectData into the map instead of cloning it and dropping the original (one full deep copy of sequence + enzymes per file open). - do_update_sequence skips cloning Vec<Enzyme> for the recompute clone: enzyme::recompute rebuilds the entire list from the embedded database, so copying the existing entries was pure waste. primers are still cloned — primer::recompute reads the existing definitions. - digest.rs: 20x push_str(&format!(..)) -> write!(..) (halves the allocations when building large digests; all 29 digest tests pass unchanged). Dead code (~350 lines): - src/api.js: pre-Tauri HTTP/WS client, zero imports (the routes.rs HTTP backend it targeted no longer exists). - ProjectManager: 9 uncalled mutators (set_roi, clear_roi, update_sequence, update_features, update_feature_{ftype,color, location}, update_primers, set_methylation_systems) — the Tauri command layer and MCP both go through get_project_mut_by_id + shared do_* helpers; the parallel unused API was a trap (same names as the Tauri commands). - primer::init: empty placeholder, zero callers. Dependencies / build: - Removed shadcn from dependencies (scaffolding CLI, zero imports) and @radix-ui/react-slot (zero imports; Slot comes from the radix-ui meta-package). esbuild devDep kept — vite 8's minify:'esbuild' requires it installed separately. - vite manualChunks: exact 'node_modules/react/' match so react-remove- scroll / react-style-singleton (Radix transitives) don't land in the react vendor chunk and invalidate it on Radix updates. Tests (new): - vitest wired in (test script + devDep). First suite covers the pure logic modules: editHistory (undo/redo/truncation/shallow-copy contract) and recentFiles (localStorage persistence, dedupe, cap, corruption tolerance) — 14 tests, node environment, no DOM. Verification: cargo test -p libregene-core --lib 296 passed; cargo build -p LibreGene --release ok; npx vite build ok; npx vitest run 14/14; eslint 0 problems. | 2 个月前 |