Spaces:
Running
Running
Commit History
-
feat: techspec additions — de novo tier-6 branch, structure export, page capture + final synthesis
Pre-work A1-A7: pymol2-wheel cleanup + fpocket source builds, migration 008 structure_prep_jobs with RLS, user-scoped reads, input validation, SSRF routing, chain_integrity + castp/fpocket status tags. S1: zero-hit proteins complete as de novo runs — composition/hints bundle, InterProScan5 sequence-search domains, ESMFold structure card; confidence tiers (identified/homolog/de_novo) threaded backend-to-frontend with badges, DeNovoPanel, unavailable-state messaging. S2: /api/structure-export router (PDB/CIF/styled PyMOL .pse), docking complex.pdb + ligand.sdf exports, StructureExportMenu on viewer + docking page, honest ChimeraX/VMD file+script bundles. S3: migration 009 page_captures, rate-limited allowlisted capture service wired per source, deterministic final-synthesis findings with confidence-tier tagging, FinalReport panel. 84 backend tests green across five suites; frontend tsc + lint clean.4939f56
-
fix(pipeline): stop abandoning slow NCBI BLAST jobs + EBI fallback
NCBI BLAST routinely exceeds its optimistic RTOE under load, but the stuck heuristic (max(RTOE*5, 180s)) declared jobs STUCK after ~3 minutes even with a 900s poll budget, then re-submitted and failed 3x. The poll now gives a job at least half its budget before declaring STUCK. Add a resilience net: when NCBI fails or returns unparsable output, the pipeline BLAST step falls back to EBI BLAST (uncached, so transient errors are not cached for 24h), mapping NCBI databases to EBI equivalents. The pipeline only fails when both providers fail. BlastTool stype mapping fixed for blastx/tblastn. Verified: 8 new resilience tests + full seq_tools (48) pass; frontend tsc clean.60c8e2d -
feat(results): in-app share dialog + self-normalized dotplot scoring
Share flow: replace native share sheet / clipboard-only sharing with a dedicated ShareDialog (copy link, native Web Share when available, and popup links for X, Facebook, LinkedIn, WhatsApp, Telegram, Reddit, Email). Wizard and job detail pages now create the link, open the dialog, and show a spinner while the link is being created. Dotplot: stringency now means percent of a window's perfect self-match for substitution scoring (residue-composition independent), so identical A-rich proteins render a full main diagonal and conserved regions appear regardless of amino-acid content. Both inputs must be protein for matrix scoring; protein-vs-DNA comparisons fall back to identity and report a mixed type. BLAST panels link dot plots against full-length subject sequences from the MSA instead of the aligned segment. Verified: backend test_seq_tools 48 passed; frontend tsc + next build clean.525a5b5
-
feat(seq-tools): share colored MSA viewer across BLAST job, alignment tool, report, shared and phylo surfaces
ec313db
-
feat(alignment): show matched/mismatched/gaps/length stats across all alignment views via shared AlignmentStatsBar
c83d9b9
-
Fix AI model fallback chain and enrich share message with result details
- llm_client: only add a backup model when PRO_MODEL is explicitly configured; drop hardcoded gemini-1.5-flash that 404s on Vertex - interpreter: skip retries for non-existent models, friendly not-found error message - share: message now includes top hit, hit count, query, and length extracted from the result context (jobs page + wizard)0e66d74 -
Fix share links, persist wizard jobs, add AI interpretation fallback, animate landing
- Share: hydrated context on shared pages, allow anonymous/guest jobs, Web Share API with custom message, surface real API errors, add Share button to wizard results - Wizard: persist v2 jobs to Supabase (history + shareable), attach auth token to v2 runs, surface MSA failures and add FASTA download, render MSA + phylo on jobs/shared pages - AI: retry/backoff honoring provider rate-limit delays, provider cascade with fallback models, friendly streaming errors and notices, retry button - Landing: cursor-tracking TiltCard with spotlight, database marquee, animated pipeline connectors, scroll reveals, refreshed semantic gradients1f74aa2 -
Refine design system: semantic color tokens, tiered motion, denser result cards, VinaLog toolbar
5e98b5a
-
Add next/core-web-vitals ESLint config, fix unescaped entities
867aec4 -
Polish tool pages: fix dead bg-glass-card classes, contrast on teal, confidence band tokens, RNA badge
906f65b -
refactor(icons): migrate lucide-react to @phosphor-icons/react, remove dep
349f22c
-
feat(alignment): pairwise global/local alignment via BLAST hit 'Align pair' (3a)
- POST /api/alignment/pairwise: Biopython PairwiseAligner (Needleman-Wunsch global default / Smith-Waterman local), BLOSUM62/PAM250, configurable gap penalties; subject fetched by accession (NCBI efetch -> UniProt fallback, ttl_cache 86400); clear 400 on dead/obsolete accession - Degenerate no-overlap local alignment returns empty result, not an error - BlastPanel 'Align pair' button: full query seq threaded from all 4 render sites, dimmed overhang beyond the aligned region, coverage note, fetch-failure UI - biopython>=1.80 pinned; 18 offline testsf0992bc -
fix(blast): honor program/db/max_hits params, accept DNA queries, poll cap 65 min
- pipeline_v2: resolve program/database/sequence-type via blast_config, thread blast_params through /run -> run_pipeline -> _execute -> _run_blast, clamp max_hits to 5-100, record query_sequence_type/query_accession. - pipelines + pipeline_worker: persist database/program/max_hits/query_accession in context_json and forward as blast_params. - validators: accept DNA/RNA in validate_fasta (was rejecting with 400). - sequence_utils: fix detect_sequence_type so ACGT-only strings are nucleotide (protein alphabet overlaps, so nucleotide check now wins). - frontend jobs page: POLL_TIMEOUT_MS 10min -> 65min to match backend window. - tests: unit coverage for resolve_blast_params + nucleotide validation.1f75a84
-
feat(frontend): roll design-system classes across all dashboard pages + fix sidebar toggle alignment
6c03381
-
feat: cross-feature auto-fill bridges — data flows between all tools via sessionStorage
- Structure page: reads structure_query, auto-fetches, cross-links to Docking/MD/Function/Domains - UniProt page: reads uniprot_accession, auto-searches, cross-links to Domains/Structure/Interactions - Interactions page: reads interaction_gene, auto-submits - ADMET page: reads admet_smiles, auto-analyzes, cross-links to Docking - Function page: reads function_pdb_id, auto-predicts - MD page: reads md_pdb_id, auto-runs - Pathway page: reads pathway_query, auto-searches - Docking page: reads docking_pdb_id and docking_smiles - BLAST page: reads domains_accession (fixes broken Domains->BLAST bridge) - Job detail page: cross-links to Domains/Structure/Interactions/Docking/MD/Function - Domains page: adds Pathway bridge712d7a9
-
fix: Ramachandran tab hidden for proteins without PDB IDs + AI interpretation error
14dd32c -
fix: BLAST reliability - API key, exponential backoff, retry, error tracking
7bbb868
-
feat: live pipeline status progression — worker pushes status to Supabase at each step
- Add status_callback parameter to run_pipeline() and _execute() - Worker passes async callback that PATCHes job status in Supabase - BLAST sub-phases: submitted_to_ncbi -> polling_ncbi -> parsing - Post-BLAST phases: fetching_uniprot, running_msa, pathway_enrichment, fetching_alphafold, interpreting - Frontend STATUS_ORDER, isActive, STEP_LABELS updated with new statuses - Progress tracker now animates through each step in real-time96b3a54
-
fix: add 'running' to isActive and STATUS_ORDER to prevent false 'no results' flash; show bit_score in ScoreBars
- Add 'running' to isActive list and STATUS_ORDER so the progress tracker shows when the worker sets status to 'running' - Add 'running' to JobStepStatus type and STEP_LABELS - Show actual bit_score value next to each bar in ScoreBars so users can verify the numbersdbfde94
-
feat: add query coverage, organism, and query accession to BLAST results
cee7881
-
fix: remove opacity:0 flicker from all pages
Root cause: fadeUp variant in animations.ts sets hidden: opacity:0, making all motion.div content invisible during the 500ms entrance animation. Fix: changed initial=hidden to initial={{ y:24 }} on all fadeUp content containers, and removed initial=hidden from stagger parents so children don't inherit opacity:0. This keeps the subtle slide-up while eliminating the content flicker on navigation and reload. Affects 22 files across analyze/*, dashboard, history, jobs, settings, learn, shared/[token], auth, landing page, and shared components.150c960 -
fix: prevent opacity flicker on job results page, add pathway_enrichment migration
3cc87a8
-
fix: handle NCBI UNKNOWN status and add pathway_enrichment to frontend status order
6547179 -
feat: add DNA sequence output across BLAST, UniProt, sequencing, primers, and SequenceRetrieval
00b6857 -
feat: implement 8 tool bridges (F1-F8) + audit child components
5561093
-
feat: complete Phase 2 — API keys, share links, export, pipeline steps, guest upgrade
305458b -
refactor: enhance dashboard with quick tools, jobs with filter tabs, settings with profile identity
32dd681
-
feat: domains, interactions, primers, structure analysis, wizard, phylo tree, conservation
- Add backend routers: domains (InterPro), interactions (STRING-DB), primers (Primer3), structure_analysis (Ramachandran, SS pred, comparison) - Add frontend components: AnalysisWizard, PhyloTreeViewer, DomainArchitecture, StringDBViewer, PrimerDesigner, RamachandranPlot, SecondaryStructureViewer, StructureComparison, ConservationTrack - Add pages: /wizard, /analyze/domains, /analyze/interactions, /analyze/primers, /analyze/compare - Update analyze hub: 10 operations in 3 groups + wizard CTA - Update alignment page: visual phylo tree + conservation track - Update job results: Advanced Analysis tabs panel - Register all routers in main.py; add primer3-py to requirements; fix CORS & profilebac1801
-
Add Reactome diagrams, KEGG search, pathway enrichment (pipeline + standalone)
8ce1e37 -
Security, crash fixes, demo prep, dead code removal
- Auth guard: GET/DELETE /api/jobs/{id} now verify ownership (403 on mismatch) - Streaming auth: interpretStream() injects Supabase Bearer token - DELETE 404: return 404 if job never existed - JobProgress: fixed active step to show next pending step - Step names unified: worker → definition → frontend all match - Null-guards: BlastPanel, ScoreBars, UniprotPanel handle undefined/null data - ErrorBoundary: new class component wrapping dashboard layout - Silent catches: replaced .catch(noop) with user-visible error banner - Demo data: filled alignment strings for all hits; added hemoglobin + BRCA1 - History page: linked in sidebar nav (was orphaned) - pipeline_type default fixed: blast → protein_analysis - Axios timeout: added 30s timeout to api client - Dead code: removed 8 files (engine.py, results/export/waitlist routers, celery_app, redis service, registration tool, StructureViewer component) and 4 unused api.ts functions9a28cd0
-
Polish: restyle blast/dashboard/jobs/history/results pages to dark theme, fix Loader2 icons, update result components
2a12412 -
full dark migration: CSS overrides for all legacy classes, framer-motion animations across every page/component, rebrand to Bio Nexus
2f67ecf -
named exports, any->unknown, theme toggle (light/dark), dark mode fixes, error extractor, deleted pipline/ typo dir
973dd4c
-
design.md + rules.md compliance: dark theme, teal palette, pulsing dot, Pydantic models, api.ts routing, config fixes, db/max_hits threading, Supabase migration 004
f42f5a6 -
fix: E-value underflow, AlphaFold step, steps_completed append, UniProt always runs
3154548
-
Deploy prep: Render config + Dockerfile, refactored backend auth flow, dashboard, landing page, error states, guest flow
76fb273