| ci: auto-update Homebrew tap cask on release | 1 个月前 |
| refactor: replace file icons with natural/everyday set | 2 个月前 |
| feat: dissolve incidental edge matches into the primer's hanging tail A short match run (< 4 consecutive matches) at the primer's 5' edge that only aligns via indels is incidental: it now joins the hanging tail instead of forcing '-' gap columns or '..' insertion dots. Interior gaps and insertions flanked by solid match runs still render as placeholders. Applies to both strands (rev trims the mirrored edge). | 3 天前 |
| chore: reorganize example tasks (rename RNAi, add CAR-T) and ignore agent test traces | 1 个月前 |
| 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.0 and add release notes | 2 天前 |
| docs: rewrite bilingual README around reorganized screenshots | 2 天前 |
| 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 个月前 |
| feat: alignment-driven primer display with gap/insertion placeholders Primer binding sites now carry an AlignmentRenderData built from the same semi-global alignment engine as the primer dialog, instead of the old anchor-plus-raised-tail rendering: - mismatched bases render raised above the primer line - gaps in the primer render as one raised '-' per template column - insertion runs collapse with one flanking base on each side into a raised '··' pair, so the displayed primer always maps 1:1 to template columns - 5' bases the display alignment cannot place hang off the end via the new display_tail field (five_prime_tail keeps its anchor semantics) Placeholders are display-only; the primer sequence and the alignment dialog content are unchanged. The primer line now connects at the quarter points of each character cell with a guaranteed flat segment between a cell's quarter marks, so a single raised base no longer pulls the line into a spike. Also fixes the reverse-primer arrow tip height to follow the 3'-end column. | 3 天前 |
| fix: enlarge gel lane labels and push wells down for multi-line enzyme names | 2 天前 |
| 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_*) | 10 天前 |
| 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: add 'Show Both Strands' view with SnapGene-style ruler | 3 天前 |
| 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 | 2 天前 |
| docs: rewrite bilingual README around reorganized screenshots | 2 天前 |
| 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. | 22 天前 |
| 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. | 2 天前 |
| 重命名项目: 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. | 1 个月前 |
| chore: bump version to 0.7.0 and add release notes | 2 天前 |
| 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. | 1 个月前 |