From 0733141bb8569e5c0b0858b51d7878c065d5c7c1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 10 Oct 2026 21:38:14 +0200 Subject: [PATCH 1/6] Add a local web interface (TypeScript, built to static files) - codonopt gui: stdlib-only local server (loopback, token, CSP, job API with cancellation) opening in pywebview or the browser - web/: TypeScript + CSS sources, esbuild build with --check for drift, Playwright end-to-end tests; built files committed to src/codonopt/web - gc_profile metric, table_from_text, cooperative cancel in the optimizer - python -m codonopt entry point; README sections Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01Wq3oxFtutXhnAgmzKztG9g --- .gitignore | 5 + README.md | 22 + pyproject.toml | 7 + src/codonopt/__main__.py | 7 + src/codonopt/cli.py | 35 ++ src/codonopt/config.py | 4 + src/codonopt/metrics.py | 19 + src/codonopt/optimize.py | 30 +- src/codonopt/server.py | 761 +++++++++++++++++++++++++++++++++++ src/codonopt/tables.py | 99 +++-- src/codonopt/web/app.css | 1 + src/codonopt/web/app.js | 5 + src/codonopt/web/favicon.svg | 4 + src/codonopt/web/index.html | 190 +++++++++ tests/test_metrics.py | 14 + tests/test_optimize.py | 41 ++ tests/test_server.py | 478 ++++++++++++++++++++++ tests/test_tables.py | 26 ++ web/build.mjs | 70 ++++ web/package-lock.json | 558 +++++++++++++++++++++++++ web/package.json | 18 + web/playwright.config.ts | 22 + web/src/api.ts | 66 +++ web/src/chart.ts | 129 ++++++ web/src/detect.ts | 77 ++++ web/src/dom.ts | 84 ++++ web/src/favicon.svg | 4 + web/src/form.ts | 207 ++++++++++ web/src/index.html | 190 +++++++++ web/src/main.ts | 168 ++++++++ web/src/results.ts | 372 +++++++++++++++++ web/src/sequence.ts | 99 +++++ web/src/styles.css | 317 +++++++++++++++ web/src/types.ts | 117 ++++++ web/tests/e2e.spec.ts | 129 ++++++ web/tsconfig.json | 17 + 36 files changed, 4352 insertions(+), 40 deletions(-) create mode 100644 src/codonopt/__main__.py create mode 100644 src/codonopt/server.py create mode 100644 src/codonopt/web/app.css create mode 100644 src/codonopt/web/app.js create mode 100644 src/codonopt/web/favicon.svg create mode 100644 src/codonopt/web/index.html create mode 100644 tests/test_server.py create mode 100644 web/build.mjs create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/playwright.config.ts create mode 100644 web/src/api.ts create mode 100644 web/src/chart.ts create mode 100644 web/src/detect.ts create mode 100644 web/src/dom.ts create mode 100644 web/src/favicon.svg create mode 100644 web/src/form.ts create mode 100644 web/src/index.html create mode 100644 web/src/main.ts create mode 100644 web/src/results.ts create mode 100644 web/src/sequence.ts create mode 100644 web/src/styles.css create mode 100644 web/src/types.ts create mode 100644 web/tests/e2e.spec.ts create mode 100644 web/tsconfig.json diff --git a/.gitignore b/.gitignore index 71dbf08..8ee937f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,8 @@ dist/ .pytest_cache/ .venv/ venv/ + +# web interface tooling +web/node_modules/ +web/test-results/ +web/playwright-report/ diff --git a/README.md b/README.md index 9b20491..9c502f4 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,18 @@ Splice acceptor sites 1 0 `--json FILE` writes the same numbers, the per-term score and the sequence. +## Interface + +```bash +pip install -e . # add ".[gui]" for a native window (pywebview) +codonopt gui # or: python -m codonopt gui +``` + +Paste a protein or DNA sequence, choose a host table and what to keep out, and press Optimize. You get the +sequence with changed codons highlighted, a before/after table, a GC plot and the score breakdown, plus +copy and download buttons. It runs locally (loopback only, token-protected), needs no Node, and without +pywebview it opens in your browser. Add `--no-window --no-browser` to just serve it. + ## What it optimizes | Criterion | Why | Default | @@ -121,6 +133,16 @@ pip install -e ".[dev]" pytest ``` +The interface is written in TypeScript in `web/` and compiled to plain HTML, CSS and JS in +`src/codonopt/web/`, which is committed so the Python side never needs Node: + +```bash +cd web && npm install +npm run build # regenerate src/codonopt/web +npm run check # type-check and fail if the committed build is stale +npm test # Playwright end-to-end tests against the real Python server +``` + ## Limitations - Hairpins are inverted repeats, not free-energy folds. diff --git a/pyproject.toml b/pyproject.toml index 365dad1..d4d409a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,8 @@ dependencies = [] # MaxEntScan splice site scoring. Not on PyPI, so it is installed from source: # pip install "git+https://github.com/kepbod/maxentpy.git" splice = ["maxentpy"] +# Optional native window for `codonopt gui`; without it the browser is used. +gui = ["pywebview"] dev = ["pytest>=7"] [project.scripts] @@ -30,6 +32,11 @@ codonopt = "codonopt.cli:main" [tool.setuptools.packages.find] where = ["src"] +# The pre-built web interface ships inside the package, so using it needs no +# Node toolchain. +[tool.setuptools.package-data] +codonopt = ["web/*"] + [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-q" diff --git a/src/codonopt/__main__.py b/src/codonopt/__main__.py new file mode 100644 index 0000000..395bc05 --- /dev/null +++ b/src/codonopt/__main__.py @@ -0,0 +1,7 @@ +"""Allow ``python -m codonopt``.""" + +import sys + +from .cli import main + +sys.exit(main()) diff --git a/src/codonopt/cli.py b/src/codonopt/cli.py index 2db539d..5519d0b 100644 --- a/src/codonopt/cli.py +++ b/src/codonopt/cli.py @@ -2,6 +2,7 @@ codonopt optimize --protein-fasta gene.faa --table human --out gene.fna codonopt report --dna-fasta gene.fna + codonopt gui codonopt tables codonopt motifs """ @@ -71,6 +72,29 @@ def build_parser() -> argparse.ArgumentParser: ) report_parser.set_defaults(handler=_run_report) + gui_parser = subparsers.add_parser( + "gui", + help="open the graphical interface (a native window with pywebview, " + "otherwise your browser)", + ) + gui_parser.add_argument( + "--port", type=int, default=0, metavar="N", help="port to listen on (default: any free one)" + ) + gui_parser.add_argument( + "--no-window", + action="store_true", + help="serve the interface without opening a native window", + ) + gui_parser.add_argument( + "--no-browser", + action="store_true", + help="do not open the default browser (use with --no-window)", + ) + gui_parser.add_argument( + "--verbose", action="store_true", help="log each request to stderr" + ) + gui_parser.set_defaults(handler=_run_gui) + tables_parser = subparsers.add_parser("tables", help="list codon usage tables") tables_parser.set_defaults(handler=_run_tables) @@ -388,6 +412,17 @@ def _run_report(args: argparse.Namespace) -> int: return 0 +def _run_gui(args: argparse.Namespace) -> int: + from .server import run_gui + + return run_gui( + args.port, + window=not args.no_window, + open_browser=not args.no_browser, + verbose=args.verbose, + ) + + def _run_tables(args: argparse.Namespace) -> int: for name in available_tables(): table = get_table(name) diff --git a/src/codonopt/config.py b/src/codonopt/config.py index 759074d..4bca2e8 100644 --- a/src/codonopt/config.py +++ b/src/codonopt/config.py @@ -149,6 +149,9 @@ class OptimizerSettings: codons by host frequency, ``"best"`` takes the most frequent codon everywhere, ``"random"`` samples uniformly. progress: Called with a short status line after each phase. + should_stop: Called regularly during the search; once it returns True + the search stops cleanly and returns the best sequence found so + far, which is how a caller cancels a long run. """ restarts: int = 1 @@ -160,6 +163,7 @@ class OptimizerSettings: seed: int | None = None seed_mode: str = "weighted" progress: object | None = None + should_stop: object | None = None def __post_init__(self) -> None: if self.restarts < 1: diff --git a/src/codonopt/metrics.py b/src/codonopt/metrics.py index 33bec6a..e9682cb 100644 --- a/src/codonopt/metrics.py +++ b/src/codonopt/metrics.py @@ -19,6 +19,7 @@ "HomopolymerRun", "RepeatReport", "Hairpin", + "gc_profile", "gc_window_report", "homopolymer_runs", "homopolymer_excess", @@ -133,6 +134,24 @@ def gc_window_report( ) +def gc_profile( + sequence: str, *, window: int = 30, step: int = 3 +) -> list[tuple[int, float]]: + """Return ``(start, GC fraction)`` for every scored window. + + The same windows :func:`gc_window_report` scores, so a plot of this profile + shows exactly what the penalty sees. + """ + if not sequence: + return [] + prefix = gc_prefix(sequence) + profile = [] + for start in window_starts(len(sequence), window, step): + end = min(start + window, len(sequence)) + profile.append((start, (prefix[end] - prefix[start]) / (end - start))) + return profile + + def _check_fraction_range(target_range: tuple[float, float]) -> tuple[float, float]: low, high = target_range if not (0.0 <= low <= high <= 1.0): diff --git a/src/codonopt/optimize.py b/src/codonopt/optimize.py index 574e12b..c484cc7 100644 --- a/src/codonopt/optimize.py +++ b/src/codonopt/optimize.py @@ -61,6 +61,7 @@ class OptimizationResult: restarts_run: Restarts actually run before the time budget ran out. elapsed: Wall-clock seconds spent. hit_time_limit: True if the time budget stopped the search early. + cancelled: True if ``should_stop`` stopped the search early. """ sequence: str @@ -76,6 +77,7 @@ class OptimizationResult: restarts_run: int = 0 elapsed: float = 0.0 hit_time_limit: bool = False + cancelled: bool = False notes: list[str] = field(default_factory=list) @property @@ -148,6 +150,13 @@ def optimize( deadline = ( started + settings.max_seconds if settings.max_seconds is not None else None ) + should_stop: Callable[[], bool] | None = settings.should_stop # type: ignore[assignment] + + def expired() -> bool: + """True once the time budget is spent or the caller asked to stop.""" + if should_stop is not None and should_stop(): + return True + return deadline is not None and time.perf_counter() >= deadline best: SequenceState | None = None best_initial: tuple[str, float] | None = None @@ -155,7 +164,7 @@ def optimize( hit_limit = False for restart in range(settings.restarts): - if deadline is not None and time.perf_counter() >= deadline and best is not None: + if best is not None and expired(): hit_limit = True break seed = ( @@ -172,7 +181,7 @@ def optimize( ) local_sweeps, local_evaluated, local_accepted, stopped = _greedy( - state, rng, settings, deadline + state, rng, settings, expired ) sweeps += local_sweeps evaluated += local_evaluated @@ -181,7 +190,7 @@ def optimize( if settings.anneal_steps and not stopped: annealed, anneal_evaluated, anneal_accepted, stopped = _anneal( - state, rng, settings, deadline + state, rng, settings, expired ) evaluated += anneal_evaluated accepted += anneal_accepted @@ -201,6 +210,7 @@ def optimize( if translate(best.sequence) != protein: # pragma: no cover - safety net raise AssertionError("optimizer changed the encoded protein") + cancelled = bool(hit_limit and should_stop is not None and should_stop()) initial_state = SequenceState(best_initial[0], config) return OptimizationResult( sequence=best.sequence, @@ -215,7 +225,8 @@ def optimize( moves_accepted=accepted, restarts_run=restarts_run, elapsed=time.perf_counter() - started, - hit_time_limit=hit_limit, + hit_time_limit=hit_limit and not cancelled, + cancelled=cancelled, ) @@ -235,7 +246,7 @@ def _greedy( state: SequenceState, rng: random.Random, settings: OptimizerSettings, - deadline: float | None, + expired: Callable[[], bool], ) -> tuple[int, int, int, bool]: """Run greedy sweeps until nothing improves. Returns counters.""" order = list(range(state.codon_count)) @@ -245,9 +256,8 @@ def _greedy( sweeps += 1 improved = 0 for counter, position in enumerate(order): - if deadline is not None and not counter % 64: - if time.perf_counter() >= deadline: - return sweeps, evaluated, accepted, True + if not counter % 64 and expired(): + return sweeps, evaluated, accepted, True options = state.alternatives(position) if len(options) == 1: continue @@ -274,7 +284,7 @@ def _anneal( state: SequenceState, rng: random.Random, settings: OptimizerSettings, - deadline: float | None, + expired: Callable[[], bool], ) -> tuple[SequenceState | None, int, int, bool]: """Run simulated annealing, returning the best state seen. @@ -299,7 +309,7 @@ def _anneal( stopped = False for step in range(steps): - if deadline is not None and not step % 256 and time.perf_counter() >= deadline: + if not step % 256 and expired(): stopped = True break position = rng.choice(positions) diff --git a/src/codonopt/server.py b/src/codonopt/server.py new file mode 100644 index 0000000..fbcf80e --- /dev/null +++ b/src/codonopt/server.py @@ -0,0 +1,761 @@ +"""Local web server behind the codonopt interface. + +Standard library only, so the interface works wherever the package does. The +browser (or a ``pywebview`` window) loads a pre-built page from +``codonopt/web`` and talks to this module over a small JSON API: + + GET /api/meta tables, motif groups, defaults, limits + POST /api/jobs start an optimisation, returns {"id": ...} + GET /api/jobs/ progress, and the result once finished + POST /api/jobs//cancel stop early and keep the best sequence so far + +Optimisation can take minutes, so a request starts a job on a worker thread and +the page polls for its state rather than holding a connection open. + +The server binds to the loopback interface only, and still defends itself, +because anything running in the user's browser can reach ``127.0.0.1``: + +* the ``Host`` header must name the loopback address and this server's port, + which stops DNS rebinding; +* every ``/api`` call must carry a random per-process token that is only ever + embedded in the page this server serves, which stops other sites from driving + it; +* the API never reads or writes files -- sequences and tables arrive as text; +* responses carry a strict Content-Security-Policy. +""" + +from __future__ import annotations + +import hmac +import json +import math +import secrets +import sys +import threading +import time +import traceback +import uuid +import webbrowser +from dataclasses import dataclass, field, fields +from http import HTTPStatus +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from importlib import resources +from urllib.parse import urlsplit + +from . import __version__ +from .config import DesignConfig, OptimizerSettings, Weights +from .fasta import Record, format_fasta, parse_fasta +from .metrics import gc_profile, motif_hits +from .motifs import ( + MOTIF_GROUPS, + REGULATORY_MOTIFS, + RESTRICTION_SITES, + resolve_motifs, +) +from .optimize import OptimizationResult, optimize +from .report import report_dict +from .sequence import translate, validate_dna, validate_protein +from .splice import get_scorer, maxent_available +from .tables import TABLES, get_table, table_from_text + +__all__ = [ + "App", + "JobSpec", + "RequestError", + "build_request", + "create_server", + "run_gui", +] + +# -------------------------------------------------------------------------- +# Limits. The server is local, but a runaway request should still be bounded. +# -------------------------------------------------------------------------- + +MAX_BODY_BYTES = 2_000_000 +MAX_RESIDUES = 15_000 +MAX_SECONDS = 900 +MAX_RESTARTS = 20 +MAX_ANNEAL_STEPS = 1_000_000 +MAX_RUNNING_JOBS = 2 +MAX_KEPT_JOBS = 30 + +#: How hard each effort level searches. +EFFORT: dict[str, dict[str, int]] = { + "quick": {"max_sweeps": 3, "restarts": 1, "anneal_steps": 0}, + "standard": {"max_sweeps": 6, "restarts": 1, "anneal_steps": 0}, + "thorough": {"max_sweeps": 8, "restarts": 3, "anneal_steps": 5000}, +} + +EXAMPLE_NAME = "example" +EXAMPLE_PROTEIN = ( + "MKWVTFISLLLLFSSAYSRGVFRRDTHKSEIAHRFKDLGEENFKALVLIAFAQYLQQCPF" + "DEHVKLVNELTEFAKTCVADESHAGCEKSLHTLFGDELCKVASLRETYGDMADCCEKQEP" +) + +_ASSETS: dict[str, tuple[str, str]] = { + "/": ("index.html", "text/html; charset=utf-8"), + "/index.html": ("index.html", "text/html; charset=utf-8"), + "/app.js": ("app.js", "text/javascript; charset=utf-8"), + "/app.css": ("app.css", "text/css; charset=utf-8"), + "/favicon.svg": ("favicon.svg", "image/svg+xml"), +} + +_CSP = ( + "default-src 'none'; script-src 'self'; style-src 'self'; " + "img-src 'self' data:; connect-src 'self'; base-uri 'none'; " + "form-action 'none'; frame-ancestors 'none'" +) +_TOKEN_PLACEHOLDER = "__CODONOPT_TOKEN__" +_TOKEN_HEADER = "X-Codonopt-Token" + + +class RequestError(ValueError): + """The request was understood but cannot be acted on; the text is for the user.""" + + +# -------------------------------------------------------------------------- +# Turning a JSON payload into a validated job +# -------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class JobSpec: + """A validated optimisation request. + + Attributes: + name: Record name for the output. + protein: Protein to encode, with a trailing ``*`` if a stop is wanted. + start: Coding sequence to improve, or None to build one. + config: Design constraints. + settings: Keyword arguments for :class:`OptimizerSettings`. + kind: ``"protein"`` or ``"dna"``, as interpreted. + """ + + name: str + protein: str + start: str | None + config: DesignConfig + settings: dict + kind: str + + +def _number( + payload: dict, + key: str, + default, + *, + low: float, + high: float, + integer: bool = False, + label: str | None = None, +): + """Read an optional numeric field, with a readable error if it is wrong.""" + value = payload.get(key) + if value is None or value == "": + return default + label = label or key.replace("_", " ") + if isinstance(value, bool) or not isinstance(value, (int, float)): + raise RequestError(f"{label} must be a number") + if not math.isfinite(value): + raise RequestError(f"{label} must be a finite number") + if integer and int(value) != value: + raise RequestError(f"{label} must be a whole number") + if not low <= value <= high: + raise RequestError(f"{label} must be between {low:g} and {high:g}") + return int(value) if integer else float(value) + + +def _parse_sequence(payload: dict) -> tuple[str, str, str]: + """Return ``(name, sequence, kind)`` from the pasted text.""" + raw = payload.get("sequence") + if not isinstance(raw, str) or not raw.strip(): + raise RequestError("Paste a protein or DNA sequence first.") + name = payload.get("name") + name = name.strip() if isinstance(name, str) and name.strip() else None + + text = raw.strip() + if text.startswith(">"): + records = list(parse_fasta(text.splitlines())) + if len(records) != 1: + raise RequestError( + f"Found {len(records)} FASTA records; paste one sequence at a time." + ) + name = name or records[0].name + sequence = records[0].sequence + else: + sequence = "".join(text.split()) + sequence = sequence.upper() + + kind = payload.get("kind", "auto") + if kind not in {"auto", "protein", "dna"}: + raise RequestError("kind must be auto, protein or dna") + if kind == "auto": + looks_like_dna = len(sequence) >= 9 and set(sequence) <= set("ACGTU") + kind = "dna" if looks_like_dna else "protein" + return name or "sequence", sequence, kind + + +def _build_table(payload: dict): + text = payload.get("table_text") + if isinstance(text, str) and text.strip(): + stripped = text.lstrip() + fmt = "json" if stripped.startswith("{") else ("tsv" if "\t" in text else "csv") + return table_from_text(text, fmt, name="custom", source="custom table") + name = payload.get("table", "human") + if not isinstance(name, str): + raise RequestError("table must be a name") + try: + return get_table(name) + except KeyError as exc: + raise RequestError(str(exc.args[0])) from None + + +def _build_weights(raw) -> Weights: + if raw is None: + return Weights() + if not isinstance(raw, dict): + raise RequestError("weights must be an object") + known = {field.name for field in fields(Weights)} + values = {} + for key, value in raw.items(): + if key not in known: + raise RequestError(f"unknown weight {key!r}") + values[key] = _number( + {key: value}, + key, + getattr(Weights(), key), + low=0, + high=1e6, + label=f"weight {key}", + ) + return Weights(**values) + + +def build_request(payload: object) -> JobSpec: + """Validate a decoded JSON request body into a :class:`JobSpec`. + + Raises: + RequestError: With a message fit to show the user, for anything wrong + with the request. + """ + if not isinstance(payload, dict): + raise RequestError("The request body must be a JSON object.") + try: + name, sequence, kind = _parse_sequence(payload) + if kind == "dna": + start = validate_dna(sequence.replace("U", "T"), in_frame=True) + protein = translate(start) + else: + start = None + protein = validate_protein(sequence) + if payload.get("add_stop") and not protein.endswith("*"): + protein += "*" + if len(protein) > MAX_RESIDUES: + raise RequestError( + f"That is {len(protein):,} residues; the interface accepts up to " + f"{MAX_RESIDUES:,}. Use the command line for longer genes." + ) + + avoid = payload.get("avoid", []) + if not isinstance(avoid, list) or not all(isinstance(a, str) for a in avoid): + raise RequestError("avoid must be a list of motif names or patterns") + if len(avoid) > 100 or any(len(a) > 200 for a in avoid): + raise RequestError("too many, or too long, motifs to avoid") + motifs = tuple(resolve_motifs(avoid)) + + gc_range = payload.get("gc_range", [0.30, 0.70]) + if not (isinstance(gc_range, list) and len(gc_range) == 2): + raise RequestError("gc range must be two numbers") + gc_low = _number( + {"v": gc_range[0]}, "v", 0.30, low=0, high=1, label="GC range low" + ) + gc_high = _number( + {"v": gc_range[1]}, "v", 0.70, low=0, high=1, label="GC range high" + ) + + backend = payload.get("splice_backend", "auto") + if backend not in {"auto", "maxent", "motif", "none"}: + raise RequestError("splice backend must be auto, maxent, motif or none") + try: + scorer = get_scorer(backend) + except RuntimeError as exc: + raise RequestError(str(exc).splitlines()[0]) from None + + def whole(key: str, default: int, low: int, high: int) -> int: + return _number(payload, key, default, low=low, high=high, integer=True) + + config = DesignConfig( + table=_build_table(payload), + gc_target=_number(payload, "gc_target", 0.50, low=0, high=1), + gc_range=(gc_low, gc_high), + gc_window=whole("gc_window", 30, 6, 300), + gc_step=whole("gc_step", 3, 1, 300), + repeat_k=whole("repeat_k", 12, 4, 60), + hairpin_stem=whole("hairpin_stem", 10, 4, 40), + hairpin_min_loop=whole("hairpin_min_loop", 3, 0, 100), + hairpin_max_loop=whole("hairpin_max_loop", 60, 0, 300), + max_homopolymer=whole("max_homopolymer", 6, 2, 30), + motifs=motifs, + splice_scorer=scorer, + donor_cutoff=_number(payload, "donor_cutoff", None, low=-100, high=100), + acceptor_cutoff=_number( + payload, "acceptor_cutoff", None, low=-100, high=100 + ), + weights=_build_weights(payload.get("weights")), + ) + + effort = payload.get("effort", "standard") + if effort not in EFFORT: + raise RequestError("effort must be quick, standard or thorough") + settings = dict(EFFORT[effort]) + settings["restarts"] = min(settings["restarts"], MAX_RESTARTS) + settings["anneal_steps"] = min(settings["anneal_steps"], MAX_ANNEAL_STEPS) + settings["max_seconds"] = _number( + payload, "seconds", 120.0, low=1, high=MAX_SECONDS + ) + seed = _number(payload, "seed", None, low=0, high=2**31 - 1, integer=True) + if seed is not None: + settings["seed"] = seed + # Surface bad settings now rather than inside the worker thread. + OptimizerSettings(**settings) + except RequestError: + raise + except ValueError as exc: # SequenceError, FASTA, table and config errors + raise RequestError(str(exc)) from None + + return JobSpec( + name=name, + protein=protein, + start=start, + config=config, + settings=settings, + kind=kind, + ) + + +# -------------------------------------------------------------------------- +# Jobs +# -------------------------------------------------------------------------- + + +@dataclass +class Job: + """One optimisation run and everything the page needs to show about it.""" + + id: str + spec: JobSpec + status: str = "running" # running | done | cancelled | error + messages: list[str] = field(default_factory=list) + restarts_done: int = 0 + started: float = field(default_factory=time.perf_counter) + finished: float | None = None + result: dict | None = None + error: str | None = None + stop: threading.Event = field(default_factory=threading.Event) + + def snapshot(self) -> dict: + """Return the JSON-serialisable state of the job.""" + end = self.finished if self.finished is not None else time.perf_counter() + body = { + "id": self.id, + "status": self.status, + "elapsed": round(end - self.started, 2), + "max_seconds": self.spec.settings["max_seconds"], + "restarts_total": self.spec.settings["restarts"], + "restarts_done": self.restarts_done, + "messages": self.messages[-12:], + } + if self.error is not None: + body["error"] = self.error + if self.result is not None: + body["result"] = self.result + return body + + +class JobStore: + """Thread-safe registry of jobs, bounded in size and concurrency.""" + + def __init__(self) -> None: + self._lock = threading.Lock() + self._jobs: dict[str, Job] = {} + + def start(self, spec: JobSpec) -> Job: + """Create a job and run it on a worker thread. + + Raises: + RequestError: If too many jobs are already running. + """ + with self._lock: + running = sum(job.status == "running" for job in self._jobs.values()) + if running >= MAX_RUNNING_JOBS: + raise RequestError( + "Already running as many optimisations as allowed; " + "wait for one to finish or cancel it." + ) + job = Job(id=uuid.uuid4().hex[:12], spec=spec) + self._jobs[job.id] = job + finished = [j for j in self._jobs.values() if j.status != "running"] + for old in finished[: max(0, len(self._jobs) - MAX_KEPT_JOBS)]: + del self._jobs[old.id] + threading.Thread(target=_run_job, args=(job,), daemon=True).start() + return job + + def get(self, job_id: str) -> Job | None: + with self._lock: + return self._jobs.get(job_id) + + +def _run_job(job: Job) -> None: + spec = job.spec + + def progress(message: str) -> None: + job.messages.append(message) + # One "final score" line is printed as each restart finishes. + if "final score" in message: + job.restarts_done += 1 + + try: + settings = OptimizerSettings( + **spec.settings, progress=progress, should_stop=job.stop.is_set + ) + result = optimize(spec.protein, spec.config, settings, start=spec.start) + job.result = result_payload(result, spec) + job.status = "cancelled" if result.cancelled else "done" + except (ValueError, KeyError) as exc: + job.error = str(exc.args[0]) if exc.args else str(exc) + job.status = "error" + except Exception as exc: # pragma: no cover - a bug, not a user error + traceback.print_exc(file=sys.stderr) + job.error = f"Unexpected error: {type(exc).__name__}: {exc}" + job.status = "error" + finally: + job.finished = time.perf_counter() + + +def result_payload(result: OptimizationResult, spec: JobSpec) -> dict: + """Everything the page needs to show a finished run.""" + config = spec.config + payload = report_dict(result, config) + profile_before = gc_profile( + result.initial_sequence, window=config.gc_window, step=config.gc_step + ) + profile_after = gc_profile( + result.sequence, window=config.gc_window, step=config.gc_step + ) + lengths = {motif.name: motif.length for motif in config.motifs} + hits = motif_hits(result.sequence, list(config.motifs)) + payload.update( + name=spec.name, + kind=spec.kind, + protein=result.protein, + initial_sequence=result.initial_sequence, + cancelled=result.cancelled, + gc={ + "window": config.gc_window, + "step": config.gc_step, + "range": list(config.gc_range), + "target": config.gc_target, + "starts": [start for start, _ in profile_after], + "initial": [round(value, 4) for _, value in profile_before], + "final": [round(value, 4) for _, value in profile_after], + }, + motif_hits=[ + {"name": name, "length": lengths[name], "positions": list(positions)} + for name, positions in hits.items() + ], + fasta=format_fasta( + Record( + name=spec.name, + description=( + f"{spec.name} codonopt table={config.table.name} " + f"score={result.score:.2f}" + ), + sequence=result.sequence, + ) + ), + ) + return payload + + +# -------------------------------------------------------------------------- +# HTTP +# -------------------------------------------------------------------------- + + +def meta_payload() -> dict: + """Static facts the page needs to build its form.""" + defaults = DesignConfig() + return { + "version": __version__, + "tables": [ + {"name": name, "description": table.description} + for name, table in sorted(TABLES.items()) + ], + "default_table": "human", + "motif_groups": {name: list(members) for name, members in MOTIF_GROUPS.items()}, + "restriction_sites": dict(sorted(RESTRICTION_SITES.items())), + "regulatory_motifs": dict(sorted(REGULATORY_MOTIFS.items())), + "splice_backends": ["auto", "maxent", "motif", "none"], + "maxent_available": maxent_available(), + "weights": { + field.name: getattr(Weights(), field.name) for field in fields(Weights) + }, + "defaults": { + "gc_target": defaults.gc_target, + "gc_range": list(defaults.gc_range), + "gc_window": defaults.gc_window, + "gc_step": defaults.gc_step, + "repeat_k": defaults.repeat_k, + "hairpin_stem": defaults.hairpin_stem, + "hairpin_min_loop": defaults.hairpin_min_loop, + "hairpin_max_loop": defaults.hairpin_max_loop, + "max_homopolymer": defaults.max_homopolymer, + "seconds": 120, + }, + "effort": EFFORT, + "limits": { + "max_residues": MAX_RESIDUES, + "max_seconds": MAX_SECONDS, + }, + "example": {"name": EXAMPLE_NAME, "protein": EXAMPLE_PROTEIN}, + } + + +class App: + """State shared by every request: the token, the jobs, the allowed hosts.""" + + def __init__(self, port: int = 0) -> None: + self.token = secrets.token_urlsafe(24) + self.jobs = JobStore() + self.port = port + + def host_allowed(self, host: str | None) -> bool: + return host is not None and host.lower() in { + f"127.0.0.1:{self.port}", + f"localhost:{self.port}", + } + + def origin_allowed(self, origin: str | None) -> bool: + return origin is None or origin.lower() in { + f"http://127.0.0.1:{self.port}", + f"http://localhost:{self.port}", + } + + def token_ok(self, supplied: str | None) -> bool: + return supplied is not None and hmac.compare_digest(supplied, self.token) + + +class _Handler(BaseHTTPRequestHandler): + # HTTP/1.0: one request per connection, so an early error response can never + # leave an unread request body to be mistaken for the next request. + server_version = "codonopt" + + def log_message(self, format: str, *args) -> None: # noqa: A002 + if getattr(self.server, "verbose", False): + super().log_message(format, *args) + + @property + def app(self) -> App: + return self.server.app # type: ignore[attr-defined] + + def do_GET(self) -> None: # noqa: N802 + self._handle("GET") + + def do_POST(self) -> None: # noqa: N802 + self._handle("POST") + + def _handle(self, method: str) -> None: + try: + path = urlsplit(self.path).path + if not self.app.host_allowed(self.headers.get("Host")): + return self._error(HTTPStatus.FORBIDDEN, "Unexpected Host header.") + if path.startswith("/api/"): + if not self.app.token_ok(self.headers.get(_TOKEN_HEADER)): + return self._error(HTTPStatus.FORBIDDEN, "Missing or wrong token.") + if method == "POST" and not self.app.origin_allowed( + self.headers.get("Origin") + ): + return self._error(HTTPStatus.FORBIDDEN, "Unexpected Origin.") + return self._api(method, path) + if method != "GET": + return self._error(HTTPStatus.METHOD_NOT_ALLOWED, "GET only.") + return self._static(path) + except (BrokenPipeError, ConnectionResetError): + return + except Exception: # pragma: no cover - a bug, not a user error + traceback.print_exc(file=sys.stderr) + self._error(HTTPStatus.INTERNAL_SERVER_ERROR, "Internal server error.") + + # -- static ------------------------------------------------------------ + + def _static(self, path: str) -> None: + asset = _ASSETS.get(path) + if asset is None: + return self._error(HTTPStatus.NOT_FOUND, "Not found.") + filename, content_type = asset + try: + data = resources.files("codonopt").joinpath("web", filename).read_bytes() + except (FileNotFoundError, OSError): + return self._error( + HTTPStatus.INTERNAL_SERVER_ERROR, + "The interface has not been built. From a source checkout run " + "'npm install && npm run build' inside web/.", + ) + if filename == "index.html": + data = data.replace(_TOKEN_PLACEHOLDER.encode(), self.app.token.encode()) + self._send(HTTPStatus.OK, data, content_type) + + # -- api --------------------------------------------------------------- + + def _api(self, method: str, path: str) -> None: + parts = [part for part in path.split("/") if part] # ["api", ...] + if method == "GET" and parts == ["api", "meta"]: + return self._json(HTTPStatus.OK, meta_payload()) + if method == "POST" and parts == ["api", "jobs"]: + return self._start_job() + if len(parts) >= 3 and parts[:2] == ["api", "jobs"]: + job = self.app.jobs.get(parts[2]) + if job is None: + return self._error(HTTPStatus.NOT_FOUND, "No such job.") + if method == "GET" and len(parts) == 3: + return self._json(HTTPStatus.OK, job.snapshot()) + if method == "POST" and parts[3:] == ["cancel"]: + job.stop.set() + return self._json(HTTPStatus.OK, job.snapshot()) + return self._error(HTTPStatus.NOT_FOUND, "Not found.") + + def _start_job(self) -> None: + try: + length = int(self.headers.get("Content-Length", "")) + except ValueError: + return self._error(HTTPStatus.LENGTH_REQUIRED, "Content-Length required.") + if length < 0 or length > MAX_BODY_BYTES: + return self._error( + HTTPStatus.REQUEST_ENTITY_TOO_LARGE, "That request is too large." + ) + try: + payload = json.loads(self.rfile.read(length) or b"null") + except (UnicodeDecodeError, json.JSONDecodeError): + return self._error(HTTPStatus.BAD_REQUEST, "The request is not valid JSON.") + try: + job = self.app.jobs.start(build_request(payload)) + except RequestError as exc: + return self._error(HTTPStatus.BAD_REQUEST, str(exc)) + self._json(HTTPStatus.ACCEPTED, job.snapshot()) + + # -- responses --------------------------------------------------------- + + def _json(self, status: HTTPStatus, body: object) -> None: + self._send( + status, + json.dumps(body, separators=(",", ":")).encode(), + "application/json", + ) + + def _error(self, status: HTTPStatus, message: str) -> None: + self._json(status, {"error": message}) + + def _send(self, status: HTTPStatus, data: bytes, content_type: str) -> None: + self.send_response(status) + self.send_header("Content-Type", content_type) + self.send_header("Content-Length", str(len(data))) + self.send_header("Cache-Control", "no-store") + self.send_header("X-Content-Type-Options", "nosniff") + self.send_header("Referrer-Policy", "no-referrer") + self.send_header("Content-Security-Policy", _CSP) + self.end_headers() + self.wfile.write(data) + + +class _Server(ThreadingHTTPServer): + daemon_threads = True + allow_reuse_address = True + + def __init__(self, address, handler, app: App, verbose: bool = False) -> None: + super().__init__(address, handler) + self.app = app + self.verbose = verbose + + +def create_server( + host: str = "127.0.0.1", port: int = 0, *, verbose: bool = False +) -> ThreadingHTTPServer: + """Create (but do not start) the interface server. + + Args: + host: Interface to bind; only loopback addresses are accepted. + port: Port to bind, or 0 to let the system choose a free one. + verbose: Log each request to stderr. + + Raises: + ValueError: If ``host`` is not a loopback address. + """ + if host not in {"127.0.0.1", "localhost"}: + raise ValueError( + "the interface only binds to the loopback address (127.0.0.1); " + "it has no authentication and must not be exposed to a network" + ) + app = App() + server = _Server(("127.0.0.1", port), _Handler, app, verbose) + app.port = server.server_address[1] + return server + + +def server_url(server: ThreadingHTTPServer) -> str: + """Return the address a browser should open.""" + return f"http://127.0.0.1:{server.server_address[1]}/" + + +def run_gui( + port: int = 0, + *, + window: bool = True, + open_browser: bool = True, + verbose: bool = False, +) -> int: + """Serve the interface until it is closed. + + With ``pywebview`` installed (``pip install pywebview``) and ``window`` + true, the page opens in a native window and the server stops when that + window closes. Otherwise the address is printed, the page is opened in the + default browser if ``open_browser`` is true, and the server runs until + interrupted. + """ + server = create_server(port=port, verbose=verbose) + url = server_url(server) + + webview = None + if window: + try: + import webview # type: ignore[import-not-found,no-redef] + except ImportError: + print( + "pywebview is not installed, so the interface opens in your browser " + "instead.\nInstall it for a native window: pip install pywebview", + file=sys.stderr, + ) + + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + try: + if webview is not None: + try: # let the Download buttons save files from the native window + webview.settings["ALLOW_DOWNLOADS"] = True + except Exception: # older pywebview without this setting + pass + webview.create_window( + "codonopt", url, width=1180, height=860, min_size=(820, 600) + ) + webview.start() # blocks until the window is closed + else: + print(f"codonopt interface: {url} (Ctrl+C to stop)") + if open_browser: + webbrowser.open(url) + while thread.is_alive(): + thread.join(0.5) + except KeyboardInterrupt: + pass + finally: + server.shutdown() + server.server_close() + return 0 diff --git a/src/codonopt/tables.py b/src/codonopt/tables.py index 9aa215d..3a2b717 100644 --- a/src/codonopt/tables.py +++ b/src/codonopt/tables.py @@ -16,6 +16,7 @@ from __future__ import annotations import csv +import io import json import math import random @@ -24,7 +25,14 @@ from .sequence import AA_TO_CODONS, CODON_TO_AA, STOP, split_codons -__all__ = ["CodonUsage", "TABLES", "get_table", "load_table", "available_tables"] +__all__ = [ + "CodonUsage", + "TABLES", + "available_tables", + "get_table", + "load_table", + "table_from_text", +] # Approximate relative synonymous codon usage, Homo sapiens. _HUMAN: dict[str, float] = { @@ -225,47 +233,78 @@ def get_table(name: str) -> CodonUsage: def load_table(path: str | Path, *, name: str | None = None) -> CodonUsage: - """Load a codon usage table from a JSON or CSV file. + """Load a codon usage table from a JSON, CSV or TSV file. - JSON files hold an object mapping codon to frequency or count. CSV files - hold two columns, codon and value, with an optional header row. + JSON files hold an object mapping codon to frequency or count. CSV and TSV + files hold two columns, codon and value, with an optional header row. Raises: ValueError: If the file extension is not ``.json``, ``.csv`` or ``.tsv``, or a row cannot be parsed. """ path = Path(path) - suffix = path.suffix.lower() - if suffix == ".json": - payload = json.loads(path.read_text()) + return table_from_text( + path.read_text(), + path.suffix, + name=name or path.stem, + source=str(path), + ) + + +def table_from_text( + text: str, + fmt: str, + *, + name: str, + source: str = "table", +) -> CodonUsage: + """Build a codon usage table from the text of a JSON, CSV or TSV table. + + Args: + text: The table contents. + fmt: ``"json"``, ``"csv"`` or ``"tsv"``, with or without a leading dot. + name: Name to give the table. + source: Where the text came from, used to prefix error messages. + + Raises: + ValueError: If ``fmt`` is unsupported, a row cannot be parsed, or no + codon rows are found. + """ + fmt = fmt.lower().lstrip(".") + if fmt == "json": + payload = json.loads(text) if not isinstance(payload, dict): - raise ValueError(f"{path}: expected a JSON object of codon -> value") - frequencies = {str(k): float(v) for k, v in payload.items()} - elif suffix in {".csv", ".tsv"}: - delimiter = "\t" if suffix == ".tsv" else "," + raise ValueError(f"{source}: expected a JSON object of codon -> value") + try: + frequencies = {str(k): float(v) for k, v in payload.items()} + except (TypeError, ValueError): + raise ValueError(f"{source}: every JSON value must be a number") from None + elif fmt in {"csv", "tsv"}: + delimiter = "\t" if fmt == "tsv" else "," frequencies = {} - with path.open(newline="") as handle: - for lineno, row in enumerate(csv.reader(handle, delimiter=delimiter), 1): - if not row or row[0].startswith("#"): - continue - if len(row) < 2: - raise ValueError(f"{path}:{lineno}: expected two columns") - codon = row[0].strip().upper().replace("U", "T") - if codon not in CODON_TO_AA: - continue # header or annotation row - try: - frequencies[codon] = float(row[1]) - except ValueError: - raise ValueError( - f"{path}:{lineno}: {row[1]!r} is not a number" - ) from None + for lineno, row in enumerate( + csv.reader(io.StringIO(text, newline=""), delimiter=delimiter), 1 + ): + if not row or row[0].startswith("#"): + continue + if len(row) < 2: + raise ValueError(f"{source}:{lineno}: expected two columns") + codon = row[0].strip().upper().replace("U", "T") + if codon not in CODON_TO_AA: + continue # header or annotation row + try: + frequencies[codon] = float(row[1]) + except ValueError: + raise ValueError( + f"{source}:{lineno}: {row[1]!r} is not a number" + ) from None else: - raise ValueError(f"{path}: expected a .json, .csv or .tsv table") + raise ValueError(f"{source}: expected a .json, .csv or .tsv table") if not frequencies: - raise ValueError(f"{path}: no codon rows found") + raise ValueError(f"{source}: no codon rows found") return CodonUsage.from_frequencies( - name or path.stem, + name, frequencies, - description=f"Loaded from {path}", + description=f"Loaded from {source}", ) diff --git a/src/codonopt/web/app.css b/src/codonopt/web/app.css new file mode 100644 index 0000000..8c2d460 --- /dev/null +++ b/src/codonopt/web/app.css @@ -0,0 +1 @@ +:root{--bg: #f4f6f4;--surface: #ffffff;--surface-2: #eef1ee;--text: #17201e;--muted: #56635f;--border: #d9dfdb;--accent: #0f766e;--accent-strong: #0b5a54;--accent-ink: #ffffff;--accent-soft: #d6eeea;--good: #146c37;--bad: #b42318;--warn: #8a4b08;--warn-soft: #fdecc8;--error-soft: #fde4e1;--before: #7b8794;--focus: #1d4ed8;--shadow: 0 1px 2px rgb(16 24 22 / 8%), 0 4px 16px rgb(16 24 22 / 5%);--radius: 12px;--mono: ui-monospace, "SF Mono", "Cascadia Mono", "Roboto Mono", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}@media(prefers-color-scheme:dark){:root{--bg: #0e1413;--surface: #161e1c;--surface-2: #1d2725;--text: #e5ece9;--muted: #98a7a1;--border: #2a3835;--accent: #3fb6aa;--accent-strong: #7fd6cc;--accent-ink: #06201d;--accent-soft: #17403b;--good: #5fd38b;--bad: #ff8a80;--warn: #f2b45a;--warn-soft: #3a2a10;--error-soft: #3b1a17;--before: #8794a3;--focus: #8ab4ff;--shadow: 0 1px 2px rgb(0 0 0 / 40%)}}*{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.5 var(--sans)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}h1,h2,h3,p{margin:0}h1{font-size:1.15rem;line-height:1.2;letter-spacing:-.01em}h2{font-size:.8125rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:650}h3{font-size:1rem}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.mono{font-family:var(--mono)}.hint{color:var(--muted);font-size:.8125rem}.top{max-width:1280px;margin:0 auto;padding:16px 16px 4px;display:flex;align-items:center;justify-content:space-between;gap:12px}.brand{display:flex;align-items:center;gap:12px}.brand p{color:var(--muted);font-size:.8125rem}.logo{width:36px;height:36px;flex:none}.logo-bg{fill:var(--accent)}.logo-strand{fill:none;stroke:var(--accent-ink);stroke-width:2.4;stroke-linecap:round}.version{color:var(--muted);font:.75rem var(--mono)}.app{max-width:1280px;margin:0 auto;padding:12px 16px 48px;display:grid;gap:20px;grid-template-columns:minmax(0,1fr)}@media(min-width:980px){.app{grid-template-columns:430px minmax(0,1fr);align-items:start}.panel{position:sticky;top:16px;max-height:calc(100vh - 32px)}.panel-scroll{overflow-y:auto}}.panel{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.panel-scroll{padding:4px 18px 8px;min-height:0}.actions{position:sticky;bottom:0;display:flex;gap:8px;padding:12px 18px;background:var(--surface);border-top:1px solid var(--border);border-radius:0 0 var(--radius) var(--radius)}.group{padding:16px 0;border-bottom:1px solid var(--border);display:grid;gap:10px}.group:last-child{border-bottom:0}.group-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.tools{display:flex;gap:12px}.row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}textarea,input[type=text],input[type=number],select{width:100%;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 10px}textarea{font-family:var(--mono);font-size:.8125rem;line-height:1.45;resize:vertical;min-height:7rem}input::placeholder,textarea::placeholder{color:var(--muted);opacity:.8}textarea:hover,input:hover,select:hover{border-color:color-mix(in srgb,var(--border),var(--text) 25%)}.field{display:grid;gap:4px;min-width:0}.field>span,.small-label{font-size:.8125rem;color:var(--muted)}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.grid3 .wide{grid-column:span 2}.link{background:none;border:0;padding:0;font:inherit;font-size:.8125rem;color:var(--accent-strong);cursor:pointer;text-decoration:underline;text-underline-offset:3px}.link:hover{text-decoration-thickness:2px}.check{display:inline-flex;align-items:center;gap:6px;font-size:.875rem;cursor:pointer}.check input{width:16px;height:16px;accent-color:var(--accent)}.seg{position:relative;display:inline-flex;margin:0;padding:2px;min-width:0;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}.seg input{position:absolute;opacity:0;pointer-events:none}.seg label{padding:5px 12px;border-radius:8px;cursor:pointer;font-size:.875rem;color:var(--muted)}.seg input:checked+label{background:var(--surface);color:var(--text);font-weight:600;box-shadow:0 1px 2px #00000026}.seg input:focus-visible+label{outline:2px solid var(--focus);outline-offset:1px}.detected{font-size:.8125rem;color:var(--muted)}.detected.ok{color:var(--accent-strong)}.detected.error{color:var(--bad)}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip-check{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;font-size:.8125rem;border:1px solid var(--border);border-radius:999px;cursor:pointer;background:var(--surface)}.chip-check:has(input:checked){background:var(--accent-soft);border-color:var(--accent);color:var(--accent-strong);font-weight:600}.chip-check input{accent-color:var(--accent)}.advanced>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px}.advanced>summary::-webkit-details-marker{display:none}.advanced>summary:before{content:"\25b8";color:var(--muted);transition:transform .15s}.advanced[open]>summary:before{transform:rotate(90deg)}.advanced[open]{gap:12px}.weights{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}button.primary,button.secondary{font:inherit;font-weight:650;border-radius:10px;padding:10px 16px;cursor:pointer;border:1px solid transparent;flex:1}button.primary{background:var(--accent);color:var(--accent-ink)}button.primary:hover:not(:disabled){background:var(--accent-strong);color:var(--accent-ink)}button.primary:disabled{opacity:.45;cursor:not-allowed}button.secondary{background:var(--surface-2);color:var(--text);border-color:var(--border)}button.secondary:hover{border-color:var(--muted)}.output{min-width:0;display:grid;gap:16px;outline:none}.empty{padding:28px 24px;background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius);display:grid;gap:14px}.empty h2{font-size:1.25rem;text-transform:none;letter-spacing:-.01em;color:var(--text);font-weight:650}.empty p{color:var(--muted);max-width:60ch}.steps{margin:0;padding-left:1.2em;display:grid;gap:6px}.steps strong{color:var(--accent-strong)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;display:grid;gap:12px;min-width:0}.callout{padding:12px 14px;border-radius:10px;border:1px solid var(--border);background:var(--surface-2)}.callout.error{background:var(--error-soft);border-color:var(--bad);color:var(--text);display:grid;gap:4px}.callout.error strong{color:var(--bad)}.callout.warn{background:var(--warn-soft);border-color:var(--warn);color:var(--text)}.result-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.result-head h2{font-size:1.25rem;text-transform:none;letter-spacing:-.01em;color:var(--text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;gap:8px}.chip{font:inherit;font-size:.8125rem;padding:6px 12px;border-radius:999px;cursor:pointer;background:var(--surface);color:var(--text);border:1px solid var(--border)}.chip:hover{border-color:var(--muted)}.primary-chip{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.primary-chip:hover{background:var(--accent-strong);border-color:var(--accent-strong)}.stats{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.stat{display:grid;gap:2px;padding:12px 14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.stat-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:650}.stat-value{font-size:1.35rem;font-variant-numeric:tabular-nums;letter-spacing:-.01em}.stat-value .was{color:var(--muted)}.stat-value strong{color:var(--accent-strong)}.stat-note{font-size:.8125rem;color:var(--muted)}.progress{gap:10px}.bar{height:8px;border-radius:999px;background:var(--surface-2);overflow:hidden}.bar-fill{height:100%;width:0;background:var(--accent);border-radius:999px;transition:width .3s}.bar.indeterminate .bar-fill{width:35%!important;animation:slide 1.4s ease-in-out infinite}@keyframes slide{0%{transform:translate(-100%)}to{transform:translate(300%)}}@media(prefers-reduced-motion:reduce){.bar.indeterminate .bar-fill{animation:none;width:100%!important;opacity:.5}}.progress-meta{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:.8125rem}.log{margin:0;padding:8px 10px 8px 28px;max-height:9rem;overflow:auto;font-size:.75rem;color:var(--muted);background:var(--surface-2);border-radius:8px}.seq-wrap{display:grid;gap:10px;min-width:0}.seq-tools{display:flex;align-items:center;justify-content:space-between;gap:8px 16px;flex-wrap:wrap}.toggles{display:flex;gap:14px;flex-wrap:wrap}.note.warn{color:var(--warn);font-size:.8125rem}.seq{font-family:var(--mono);font-size:.8125rem;line-height:1.35;overflow-x:auto;padding:10px 12px;background:var(--surface-2);border-radius:10px;max-height:26rem;overflow-y:auto;font-variant-ligatures:none}.block{display:flex;gap:12px;padding:3px 0;white-space:nowrap}.pos{color:var(--muted);white-space:pre;user-select:none;text-align:right;flex:none}.line{display:block}.line .cell{display:inline-block;width:4ch}.line.aa{color:var(--muted);font-size:.75rem;display:none}.seq.show-aa .line.aa{display:block}.seq.show-changes .cell.chg{background:var(--accent-soft);color:var(--accent-strong);border-radius:3px;font-weight:600}.cell.hit{color:var(--bad);text-decoration:underline wavy;text-underline-offset:3px;font-weight:700}.compare{width:100%;border-collapse:collapse;font-size:.875rem}.compare th,.compare td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left}.compare thead th{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.compare tbody th{font-weight:500}.compare tbody tr:last-child th,.compare tbody tr:last-child td{border-bottom:0}.compare .num{text-align:right;font-variant-numeric:tabular-nums}.compare .strong{font-weight:650}.verdict{white-space:nowrap}.verdict.good{color:var(--good)}.verdict.bad{color:var(--bad);font-weight:600}.verdict.same{color:var(--muted)}.card:has(.compare){overflow-x:auto}.figure{margin:0;display:grid;gap:8px;overflow-x:auto}svg.chart{width:100%;min-width:560px;height:auto;display:block}.chart .band{fill:var(--accent-soft);opacity:.7}.chart .grid{stroke:var(--border);stroke-width:1}.chart .grid.faint{stroke-dasharray:2 4;opacity:.6}.chart .tick{fill:var(--muted);font:11px var(--sans)}.chart .target{stroke:var(--accent-strong);stroke-width:1;stroke-dasharray:5 4}.chart .line{fill:none;stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round}.chart .line.before,.chart .dot.before{stroke:var(--before);fill:none;opacity:.9}.chart .line.after{stroke:var(--accent);stroke-width:2.2}.chart .dot.before{fill:var(--before)}.chart .dot.after{fill:var(--accent)}.chart .cursor{stroke:var(--muted);stroke-width:1}.chart .overlay{fill:transparent;cursor:crosshair}.legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:0;padding:0;list-style:none;font-size:.8125rem;color:var(--muted)}.legend li{display:inline-flex;align-items:center;gap:6px}.swatch{display:inline-block;width:18px;height:3px;border-radius:2px}.swatch.before{background:var(--before)}.swatch.after{background:var(--accent);height:4px}.swatch.band{background:var(--accent-soft);height:10px;border:1px solid var(--accent)}.swatch.target{height:0;border-top:2px dashed var(--accent-strong);background:none}.readout{font-size:.8125rem;color:var(--muted);min-height:1.4em;font-variant-numeric:tabular-nums}.terms{display:grid;gap:10px}.term{display:grid;grid-template-columns:8.5rem minmax(0,1fr) auto;align-items:center;gap:12px;font-size:.875rem}.term-bars{display:grid;gap:3px}.track{display:block;height:7px;background:var(--surface-2);border-radius:4px;overflow:hidden}.fill{display:block;height:100%;border-radius:4px}.fill.before{background:var(--before)}.fill.after{background:var(--accent)}.term-values{font-size:.75rem;color:var(--muted);text-align:right;white-space:nowrap}@media(max-width:560px){.term{grid-template-columns:1fr;gap:4px}.term-values{text-align:left}.weights{grid-template-columns:1fr}}.run-info{text-align:center}.noscript{padding:16px;text-align:center} diff --git a/src/codonopt/web/app.js b/src/codonopt/web/app.js new file mode 100644 index 0000000..750999a --- /dev/null +++ b/src/codonopt/web/app.js @@ -0,0 +1,5 @@ +"use strict";(()=>{var A=class extends Error{constructor(n,o){super(n);this.status=o;this.name="ApiError"}},me="X-Codonopt-Token",N=class{constructor(e){this.token=e}meta(){return this.request("GET","/api/meta")}start(e){return this.request("POST","/api/jobs",e)}poll(e){return this.request("GET",`/api/jobs/${encodeURIComponent(e)}`)}cancel(e){return this.request("POST",`/api/jobs/${encodeURIComponent(e)}/cancel`)}async request(e,n,o){let i;try{i=await fetch(n,{method:e,headers:{[me]:this.token,...o===void 0?{}:{"Content-Type":"application/json"}},body:o===void 0?void 0:JSON.stringify(o),cache:"no-store"})}catch{throw new A("Cannot reach the codonopt server. Was the window or terminal that started it closed?",0)}let a=null;try{a=await i.json()}catch{}if(!i.ok){let d=a&&typeof a=="object"&&"error"in a?String(a.error):`The server answered ${i.status}.`;throw new A(d,i.status)}return a}};var fe=new Set("ACDEFGHIKLMNPQRSTVWY*"),Z=new Set("ACGTU");function ne(t,e,n){let o=t.trim();if(!o)return{state:"empty",message:"Nothing pasted yet.",kind:null,length:0};let i=o;if(o.startsWith(">")){let b=o.split(/\r?\n/),h=b.filter(_=>_.startsWith(">")).length;if(h>1)return H(`${h} FASTA records found. Paste one sequence at a time.`);i=b.slice(1).join("")}let a=i.replace(/\s+/g,"").toUpperCase();if(!a)return H("The FASTA header has no sequence under it.");let d=a.length>=9&&[...a].every(b=>Z.has(b));if((e==="auto"?d?"dna":"protein":e)==="dna"){let b=te([...a].filter(_=>!Z.has(_)));if(b.length)return H(`Not DNA: ${b.join(", ")}`);if(a.length%3)return H(`DNA \xB7 ${a.length} bases is not a whole number of codons (${a.length%3} extra).`);let h=a.length/3;return ee("dna",a.length,`DNA \xB7 ${a.length.toLocaleString()} bases, ${h} codons`)}let m=te([...a].filter(b=>!fe.has(b)));if(m.length)return H(`Not a protein letter: ${m.join(", ")}`);let r=a.indexOf("*");if(r!==-1&&r!==a.length-1)return H(`Protein \xB7 stop symbol (*) at position ${r+1}, before the end.`);if(a.length>n)return H(`Protein \xB7 ${a.length.toLocaleString()} residues; this page takes up to ${n.toLocaleString()}.`);let f=a.length===1?"residue":"residues";return ee("protein",a.length,`Protein \xB7 ${a.length.toLocaleString()} ${f}`)}function ee(t,e,n){return{state:"ok",message:n,kind:t,length:e}}function H(t){return{state:"error",message:t,kind:null,length:0}}function te(t){return[...new Set(t)].sort()}function K(t,e){for(let n of e)n==null||n===!1||t.appendChild(typeof n=="object"?n:document.createTextNode(String(n)))}function s(t,e,...n){let o=document.createElement(t);if(e){let{attrs:i,on:a,text:d,...p}=e;for(let[m,r]of Object.entries(p))r===void 0||r===!1||(m==="class"?o.className=String(r):typeof r=="boolean"?o.setAttribute(m,""):o.setAttribute(m,String(r)));for(let[m,r]of Object.entries(i??{}))o.setAttribute(m,r);if(d!==void 0&&(o.textContent=d),a)for(let[m,r]of Object.entries(a))o.addEventListener(m,r)}return K(o,n),o}var ge="http://www.w3.org/2000/svg";function E(t,e,...n){let o=document.createElementNS(ge,t);for(let[i,a]of Object.entries(e??{}))o.setAttribute(i,String(a));return K(o,n),o}function l(t){let e=document.getElementById(t);if(!e)throw new Error(`Missing #${t} in the page`);return e}function k(t,...e){t.replaceChildren(),K(t,e)}var v=(t,e=2)=>Number.isFinite(t)?t.toFixed(e):"\u2013",M=t=>Math.round(t).toLocaleString("en-US");var be={gc_global:"Overall GC",gc_window:"Local GC",repeat:"Repeats",hairpin:"Hairpins",homopolymer:"Single-base runs",motif:"Forbidden sites",splice:"Splice sites",usage:"Codon usage"},ve={golden_gate:"Golden Gate",common_cloning:"Common cloning sites",regulatory:"Poly(A) and TATA signals"},we={auto:"Automatic",maxent:"MaxEntScan",motif:"Consensus screen",none:"Off"},T=t=>l(t);function se(t){l("version").textContent=`v${t.version}`;let e=l("table");k(e,...t.tables.map(n=>s("option",{value:n.name,text:n.name})),s("option",{value:"custom",text:"Custom table\u2026"})),k(l("avoid-groups"),...Object.entries(t.motif_groups).filter(([,n])=>n.length).map(([n,o])=>s("label",{class:"chip-check",title:o.join(", ")},s("input",{type:"checkbox",value:n,attrs:{name:"avoid"}}),s("span",{text:ve[n]??n})))),k(l("splice"),...t.splice_backends.map(n=>s("option",{value:n,text:we[n]??n}))),k(l("weights"),...Object.keys(t.weights).map(n=>s("label",{class:"field"},s("span",{text:be[n]??n}),s("input",{type:"number",id:`weight-${n}`,attrs:{min:"0",step:"any",inputmode:"decimal","data-weight":n}})))),J(t)}function J(t){let e=t.defaults;l("table").value=t.default_table,l("table-text").value="",W();for(let n of document.querySelectorAll('#avoid-groups input[type="checkbox"]'))n.checked=!1;l("avoid-extra").value="",T("gc-target").value=String(e.gc_target),T("gc-low").value=String(e.gc_range[0]),T("gc-high").value=String(e.gc_range[1]),T("max-homopolymer").value=String(e.max_homopolymer),l("splice").value="auto",l("effort-standard").checked=!0,T("seconds").value=String(e.seconds),T("seed").value="",T("gc-window").value=String(e.gc_window),T("gc-step").value=String(e.gc_step),T("repeat-k").value=String(e.repeat_k),T("hairpin-stem").value=String(e.hairpin_stem),T("hairpin-min-loop").value=String(e.hairpin_min_loop),T("hairpin-max-loop").value=String(e.hairpin_max_loop);for(let[n,o]of Object.entries(t.weights))T(`weight-${n}`).value=String(o);U(t),z(t)}function W(){let t=l("table").value==="custom";l("custom-table").hidden=!t}function P(t){let e=l("table").value;l("table-hint").textContent=e==="custom"?"":t.tables.find(n=>n.name===e)?.description??""}function U(t){let e=oe(),n=t.effort[e];if(!n)return;let o=[`${n.max_sweeps} greedy passes`];n.restarts>1&&o.push(`${n.restarts} independent restarts`),n.anneal_steps&&o.push(`${n.anneal_steps.toLocaleString()} annealing steps each`),l("effort-hint").textContent=`${o.join(", ")}.`}function z(t){let e=l("splice").value,n=l("splice-hint");e==="maxent"&&!t.maxent_available?n.textContent="MaxEntScan is not installed, so this will report an error. Pick Automatic or Consensus screen.":e==="auto"?n.textContent=t.maxent_available?"Uses MaxEntScan.":"MaxEntScan is not installed, so a simpler consensus screen is used.":e==="motif"?n.textContent="A fast consensus screen. It flags likely sites rather than modelling splicing.":e==="none"?n.textContent="Splice sites are ignored. Right for sequences that will not be spliced, and faster.":n.textContent=""}function oe(){return document.querySelector('input[name="effort"]:checked')?.value??"standard"}function V(){return document.querySelector('input[name="kind"]:checked')?.value??"auto"}function S(t){let e=T(t).value.trim();if(e==="")return;let n=Number(e);return Number.isFinite(n)?n:e}function ae(){let t=[...document.querySelectorAll("#avoid-groups input:checked")].map(i=>i.value);t.push(...l("avoid-extra").value.split(/[,\n]/).map(i=>i.trim()).filter(Boolean));let e={};for(let i of document.querySelectorAll("#weights input")){let a=i.value.trim();a!==""&&(e[i.dataset.weight??""]=Number.isFinite(Number(a))?Number(a):a)}let n=l("table").value,o=V();return{sequence:l("sequence").value,kind:o,add_stop:l("add-stop").checked,table:n==="custom"?void 0:n,table_text:n==="custom"?l("table-text").value:void 0,avoid:t,gc_target:S("gc-target"),gc_range:[S("gc-low"),S("gc-high")],max_homopolymer:S("max-homopolymer"),splice_backend:l("splice").value,effort:oe(),seconds:S("seconds"),seed:S("seed"),gc_window:S("gc-window"),gc_step:S("gc-step"),repeat_k:S("repeat-k"),hairpin_stem:S("hairpin-stem"),hairpin_min_loop:S("hairpin-min-loop"),hairpin_max_loop:S("hairpin-max-loop"),weights:e}}var R=720,Q=236,g={left:46,right:14,top:12,bottom:34},O=R-g.left-g.right,I=Q-g.top-g.bottom,X=[50,100,200,250,500,1e3,2e3,2500,5e3,1e4,2e4,5e4];function xe(t){return X.find(e=>t/e<=8)??X[X.length-1]}function ie(t,e){let n=Math.max(e,1),o=u=>g.left+u/n*O,i=u=>g.top+(1-u)*I,a=u=>Math.min(u+t.window/2,n),d=u=>u.map((y,w)=>`${w?"L":"M"}${o(a(t.starts[w])).toFixed(1)} ${i(y).toFixed(1)}`).join(""),p=E("svg",{viewBox:`0 0 ${R} ${Q}`,role:"img",class:"chart","aria-label":`GC content in ${t.window} base windows along the sequence, before and after optimisation, against the allowed range of ${v(t.range[0]*100,0)} to ${v(t.range[1]*100,0)} percent.`});p.append(E("rect",{class:"band",x:g.left,y:i(t.range[1]),width:O,height:Math.max(0,i(t.range[0])-i(t.range[1]))}));for(let u of[0,.25,.5,.75,1])p.append(E("line",{class:"grid",x1:g.left,x2:R-g.right,y1:i(u),y2:i(u)}),E("text",{class:"tick",x:g.left-8,y:i(u)+4,"text-anchor":"end"},`${u*100}%`));let m=xe(n);for(let u=0;u<=n;u+=m)p.append(E("line",{class:"grid faint",x1:o(u),x2:o(u),y1:g.top,y2:g.top+I}),E("text",{class:"tick",x:o(u),y:Q-12,"text-anchor":"middle"},M(u)));p.append(E("line",{class:"target",x1:g.left,x2:R-g.right,y1:i(t.target),y2:i(t.target)})),t.starts.length>1?p.append(E("path",{class:"line before",d:d(t.initial)}),E("path",{class:"line after",d:d(t.final)})):t.starts.length===1&&p.append(E("circle",{class:"dot before",cx:o(a(t.starts[0])),cy:i(t.initial[0]),r:4}),E("circle",{class:"dot after",cx:o(a(t.starts[0])),cy:i(t.final[0]),r:4}));let r=E("line",{class:"cursor",x1:0,x2:0,y1:g.top,y2:g.top+I});r.setAttribute("visibility","hidden");let f=E("rect",{class:"overlay",x:g.left,y:g.top,width:O,height:I});p.append(r,f);let b="Hover the chart to read a window.",h=s("p",{class:"readout",text:b});f.addEventListener("pointermove",u=>{let y=p.getBoundingClientRect(),$=((u.clientX-y.left)/y.width*R-g.left)/O*n,c=0;for(let x=1;x{r.setAttribute("visibility","hidden"),h.textContent=b});let _=s("ul",{class:"legend"},s("li",null,s("span",{class:"swatch before"}),"Before"),s("li",null,s("span",{class:"swatch after"}),"After"),s("li",null,s("span",{class:"swatch band"}),"Allowed range"),s("li",null,s("span",{class:"swatch target"}),`Target ${v(t.target*100,0)}%`));return s("figure",{class:"figure"},p,_,h)}var re=20;function le(t){let e=t.sequence,n=t.initial_sequence,o=e.length/3,i=new Set;for(let h of t.motif_hits)for(let _ of h.positions)for(let u=Math.floor(_/3);u<=Math.floor((_+h.length-1)/3);u++)i.add(u);let a=0,d=[],p=String(e.length).length;for(let h=0;hs("label",{class:"check"},s("input",{type:"checkbox",checked:u,on:{change:y=>m.classList.toggle(_,y.target.checked)}}),` ${h}`);!t.motif_hits.length&&!a&&m.classList.remove("show-changes");let f=a===0?"No codon needed to change.":`${M(a)} of ${M(o)} codons changed (${Math.round(a/o*100)}%).`,b=t.motif_hits.length?s("p",{class:"note warn",role:"status"},`Still contains ${t.motif_hits.map(h=>`${h.name} (${h.positions.length})`).join(", ")}; the marked codons overlap a site you asked to keep out.`):null;return s("div",{class:"seq-wrap"},s("div",{class:"seq-tools"},s("p",{class:"hint",text:f}),s("div",{class:"toggles"},r("Highlight changes","show-changes",m.classList.contains("show-changes")),r("Show protein","show-aa",!0))),b,m)}async function ce(t){try{return await navigator.clipboard.writeText(t),!0}catch{let e=s("textarea",{attrs:{"aria-hidden":"true",tabindex:"-1"}});e.value=t,document.body.append(e),e.select();let n=!1;try{n=document.execCommand("copy")}catch{n=!1}return e.remove(),n}}function de(t,e,n){let o=URL.createObjectURL(new Blob([e],{type:n})),i=s("a",{attrs:{href:o,download:t}});document.body.append(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(o),1e4)}function G(t,e,n=!1){let o=s("button",{type:"button",class:n?"chip primary-chip":"chip",text:t,on:{click:()=>e(o)}});return o}function pe(t,e){let n=t.textContent;t.textContent=e,setTimeout(()=>{t.textContent=n},1600)}var ye=t=>t.replace(/[^\w.-]+/g,"_")||"sequence";function q(t,e){k(t,s("div",{class:"callout error",role:"alert"},s("strong",{text:"That did not work"}),s("p",{text:e}))),t.focus({preventScroll:!0})}var F=class{constructor(e){this.bar=s("div",{class:"bar-fill"});this.elapsed=s("span",{class:"mono"});this.detail=s("span",{class:"hint"});this.log=s("ol",{class:"log mono",attrs:{"aria-label":"Search log"}});this.lastLog="";k(e,s("div",{class:"card progress"},s("h2",{text:"Optimizing"}),s("p",{class:"hint",text:"Trying synonymous codons and keeping the changes that lower the score."}),s("div",{class:"bar",role:"progressbar",attrs:{"aria-label":"Optimization progress"}},this.bar),s("div",{class:"progress-meta"},this.elapsed,this.detail),this.log)),e.focus({preventScroll:!0})}update(e){this.elapsed.textContent=`${v(e.elapsed,1)} s of at most ${M(e.max_seconds)} s`,e.restarts_total>1?(this.detail.textContent=`Restart ${Math.min(e.restarts_done+1,e.restarts_total)} of ${e.restarts_total}`,this.bar.style.width=`${Math.min(100,e.restarts_done/e.restarts_total*100)}%`,this.bar.parentElement?.classList.remove("indeterminate")):(this.detail.textContent="Stops as soon as nothing improves.",this.bar.parentElement?.classList.add("indeterminate"));let n=e.messages.join(` +`);n!==this.lastLog&&(this.lastLog=n,k(this.log,...e.messages.map(o=>s("li",{text:o}))))}},j=t=>`${v(t*100,1)}%`;function Ee(t){let e=t.splice_backend!==void 0;return[{label:"GC content",help:"Share of G and C bases over the whole sequence.",get:n=>n.gc_fraction,format:j,better:"target"},{label:"GC windows out of range",help:"Windows whose local GC falls outside the allowed range.",get:n=>n.gc_windows_below_range+n.gc_windows_above_range,better:"lower"},{label:"Codon adaptation index",help:"How closely the codons follow the host's preferences (1 is ideal).",get:n=>n.cai,format:n=>v(n,3),better:"higher"},{label:`Repeated ${t.repeat_k}-mers`,help:"Extra copies of any stretch that appears more than once. Repeats misassemble during synthesis.",get:n=>n.redundant_kmers,better:"lower"},{label:"Hairpin pairs",help:"Pairs of inverted repeats that can fold into stem-loops.",get:n=>n.hairpin_pairs,better:"lower"},{label:"Longest single-base run",help:"The longest stretch of one repeated base.",get:n=>n.longest_homopolymer,better:"lower"},{label:"Forbidden sites",help:"Matches to the enzymes and patterns you asked to keep out.",get:n=>n.forbidden_motif_hits,better:"lower"},{label:"Splice donor sites",help:"Windows that look like a 5\u2032 splice site.",get:n=>n.splice_donor_sites??0,better:"lower",show:()=>e},{label:"Splice acceptor sites",help:"Windows that look like a 3\u2032 splice site.",get:n=>n.splice_acceptor_sites??0,better:"lower",show:()=>e}]}function ue(t){return t.gc_windows_below_range+t.gc_windows_above_range+t.redundant_kmers+t.hairpin_pairs+t.homopolymer_excess_bases+t.forbidden_motif_hits+(t.splice_donor_sites??0)+(t.splice_acceptor_sites??0)}function Me(t){let e=t.gc.target,n=Ee(t.final).filter(o=>!o.show||o.show(t.final)).map(o=>{let i=o.get(t.initial),a=o.get(t.final),d=o.format??M,p;if(o.better==="target"){let f=Math.abs(a-e)-Math.abs(i-e);p=Math.abs(f)<5e-4?"same":f<0?"good":"bad"}else{let f=a-i;p=Math.abs(f)<1e-9?"same":f<0==(o.better==="lower")?"good":"bad"}let m={good:"better",bad:"worse",same:"no change"}[p],r={good:"\u2713",bad:"!",same:"\u2013"}[p];return s("tr",null,s("th",{attrs:{scope:"row",title:o.help}},o.label),s("td",{class:"num",text:d(i)}),s("td",{class:"num strong",text:d(a)}),s("td",{class:`verdict ${p}`},s("span",{attrs:{"aria-hidden":"true"}},`${r} `),m))});return s("table",{class:"compare"},s("thead",null,s("tr",null,s("th",{attrs:{scope:"col"}},"Property"),s("th",{class:"num",attrs:{scope:"col"}},"Before"),s("th",{class:"num",attrs:{scope:"col"}},"After"),s("th",{attrs:{scope:"col"}},"Change"))),s("tbody",null,...n))}var Y={gc_global:["Overall GC","Distance of the whole-sequence GC from the target."],gc_window:["Local GC","How far windows stray outside the allowed range."],repeat:["Repeats","Redundant copies of repeated stretches."],hairpin:["Hairpins","Inverted repeats that can fold back on themselves."],homopolymer:["Single-base runs","Bases beyond the longest run you allow."],motif:["Forbidden sites","Matches to enzymes and patterns you keep out."],splice:["Splice sites","How far splice-site scores exceed their cutoffs."],usage:["Codon usage","Cost of using codons the host dislikes."]};function Te(t){let e=t.score.initial_terms,n=t.score.final_terms,o=Object.keys(Y).filter(d=>(e[d]??0)>1e-9||(n[d]??0)>1e-9);if(!o.length)return s("p",{class:"hint",text:"No penalties at all: every constraint is met and codon usage is ideal."});let i=Math.max(...o.flatMap(d=>[e[d]??0,n[d]??0]),1e-9),a=(d,p)=>{let m=s("span",{class:`fill ${p}`});return m.style.width=`${Math.max(d>0?1.5:0,d/i*100)}%`,s("span",{class:"track"},m)};return s("div",{class:"terms"},...o.map(d=>s("div",{class:"term",title:Y[d][1]},s("span",{class:"term-name",text:Y[d][0]}),s("span",{class:"term-bars"},a(e[d]??0,"before"),a(n[d]??0,"after")),s("span",{class:"term-values mono",text:`${v(e[d]??0,2)} \u2192 ${v(n[d]??0,2)}`}))))}function B(t,e,...n){return s("section",{class:"card"},s("h3",{text:t}),e?s("p",{class:"hint",text:e}):null,...n)}function D(t,e,n,o){return s("div",{class:"stat"},s("span",{class:"stat-label",text:t}),s("span",{class:"stat-value"},s("span",{class:"was",text:e})," \u2192 ",s("strong",{text:n})),s("span",{class:"stat-note",text:o}))}function he(t,e,n){let o=ue(e.initial),i=ue(e.final),a=e.score.initial>0?`${Math.round((1-e.score.final/e.score.initial)*100)}% lower score`:"score unchanged",d=ye(e.name),p=e.cancelled?s("div",{class:"callout warn",role:"status"},"Stopped early. This is the best sequence found so far."):e.search.hit_time_limit?s("div",{class:"callout warn",role:"status"},"The time limit ended the search before it settled. Raise the limit or use a thorough search for more."):null,m=s("div",{class:"toolbar"},G("Copy DNA",r=>{ce(e.sequence).then(f=>pe(r,f?"Copied":"Copy failed"))},!0),G("Copy FASTA",r=>{ce(e.fasta).then(f=>pe(r,f?"Copied":"Copy failed"))}),G("Download FASTA",()=>de(`${d}.codonopt.fna`,e.fasta,"text/plain")),G("Download report",()=>de(`${d}.codonopt.json`,JSON.stringify(e,null,2)+` +`,"application/json")));k(t,s("div",{class:"result-head"},s("div",null,s("h2",{text:"Optimized sequence"}),s("p",{class:"hint",text:`${e.name} \xB7 ${e.protein.length.toLocaleString()} residues \xB7 ${e.codon_usage_table} codon usage`})),m),p,s("div",{class:"stats"},D("Issues found",M(o),M(i),i===0?"none left":"still to resolve"),D("Score",v(e.score.initial,2),v(e.score.final,2),a),D("GC content",j(e.initial.gc_fraction),j(e.final.gc_fraction),`target ${j(e.gc.target)}`),D("Codon adaptation",v(e.initial.cai,2),v(e.final.cai,2),"1.0 is ideal")),B("DNA sequence","The protein is identical to your input; only synonymous codons changed.",le(e)),B("Before and after",null,Me(e)),B("GC content along the sequence",`Each point is a ${e.gc.window} base window.`,ie(e.gc,e.sequence.length)),B("Where the score comes from","Lower is better. Each term is weighted as in your settings.",Te(e)),s("p",{class:"run-info hint"},`${e.search.restarts_run} ${e.search.restarts_run===1?"restart":"restarts"} \xB7 ${M(e.search.greedy_sweeps)} sweeps \xB7 ${M(e.search.moves_evaluated)} codon swaps tried \xB7 ${v(e.search.seconds,1)} s`)),t.focus({preventScroll:!0})}var _e=350;async function Le(){let t=document.querySelector('meta[name="codonopt-token"]')?.content??"",e=new N(t),n=l("output"),o;try{o=await e.meta()}catch(c){q(n,c instanceof Error?c.message:String(c));return}se(o),P(o);let i=l("sequence"),a=l("detected"),d=l("run"),p=l("cancel"),m=l("add-stop-wrap"),r=null,f=()=>{let c=ne(i.value,V(),o.limits.max_residues);a.textContent=c.message,a.className=`detected ${c.state}`,m.hidden=c.kind==="dna",d.disabled=r!==null||c.state==="empty"};i.addEventListener("input",f);for(let c of document.querySelectorAll('input[name="kind"]'))c.addEventListener("change",f);let b=async(c,L)=>{c&&(L.value=await c.text(),L.dispatchEvent(new Event("input",{bubbles:!0})))},h=l("file-input");l("btn-open").addEventListener("click",()=>h.click()),h.addEventListener("change",()=>{b(h.files?.[0],i),h.value=""}),i.addEventListener("dragover",c=>c.preventDefault()),i.addEventListener("drop",c=>{c.preventDefault(),b(c.dataTransfer?.files[0],i)}),l("btn-example").addEventListener("click",()=>{i.value=`>${o.example.name} +${o.example.protein} +`,l("kind-auto").checked=!0,f(),i.focus()}),l("btn-clear").addEventListener("click",()=>{i.value="",f(),i.focus()}),l("table").addEventListener("change",()=>{W(),P(o)});let u=l("table-text"),y=l("table-file");l("btn-open-table").addEventListener("click",()=>y.click()),y.addEventListener("change",()=>{b(y.files?.[0],u),y.value=""}),l("splice").addEventListener("change",()=>z(o));for(let c of document.querySelectorAll('input[name="effort"]'))c.addEventListener("change",()=>U(o));l("btn-reset").addEventListener("click",()=>{J(o),P(o)});let w=c=>{p.hidden=!c,p.disabled=!1,d.hidden=c,f()},$=c=>{r&&window.clearInterval(r.timer),r=null,w(!1),c.status==="error"?q(n,c.error??"The optimization failed."):c.result&&he(n,c.result,o)};l("form").addEventListener("submit",async c=>{if(c.preventDefault(),r||d.disabled)return;let L;try{L=await e.start(ae())}catch(x){q(n,x instanceof A?x.message:String(x));return}let C=new F(n);C.update(L),r={id:L.id,timer:0},w(!0),r.timer=window.setInterval(async()=>{if(r)try{let x=await e.poll(r.id);x.status==="running"?C.update(x):$(x)}catch(x){r&&window.clearInterval(r.timer),r=null,w(!1),q(n,x instanceof Error?x.message:String(x))}},_e)}),p.addEventListener("click",async()=>{if(r){p.disabled=!0,p.textContent="Stopping\u2026";try{await e.cancel(r.id)}catch{}}}),new MutationObserver(()=>{p.hidden&&(p.textContent="Stop")}).observe(p,{attributes:!0,attributeFilter:["hidden"]}),f()}Le();})(); diff --git a/src/codonopt/web/favicon.svg b/src/codonopt/web/favicon.svg new file mode 100644 index 0000000..1428b17 --- /dev/null +++ b/src/codonopt/web/favicon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/codonopt/web/index.html b/src/codonopt/web/index.html new file mode 100644 index 0000000..71ce25b --- /dev/null +++ b/src/codonopt/web/index.html @@ -0,0 +1,190 @@ + + + + + + + + codonopt + + + + + +
+
+ +
+

codonopt

+

Codon optimization for synthesis and expression

+
+
+ +
+ +
+
+
+ +
+
+

Sequence

+
+ + + +
+
+ + + +

Nothing pasted yet.

+
+
+ + + + + + +
+ +
+
+ +
+

Host

+ +

+ +
+ +
+

Keep out

+
+ +

Enzyme names or IUPAC patterns, comma separated. Both strands are checked.

+
+ +
+

Targets

+
+ + + +
+

GC as a fraction between 0 and 1. Every 30 base window is kept inside the min–max range.

+
+ + +
+

+
+ +
+

Search

+
+ + + + + + +
+

+
+ + +
+
+ +
+

Advanced

+

Each term of the score has a weight. Zero switches a term off.

+
+
+ + + + + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+

Design a sequence that is easy to make

+

The protein stays exactly the same. Only the synonymous codons change, so the DNA + avoids what makes genes hard to synthesise and express.

+
    +
  1. Paste a protein, or a DNA sequence you want to improve.
  2. +
  3. Choose a host and the sites to keep out.
  4. +
  5. Optimize, then compare before and after.
  6. +
+

Nothing leaves this computer: the page talks only to the local codonopt process.

+
+
+
+ + + + diff --git a/tests/test_metrics.py b/tests/test_metrics.py index 15e9e45..81cd1e4 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -153,3 +153,17 @@ def test_find_hairpins_respects_the_limit(): unit = "ACGTTGCACC" sequence = (unit + "TTTTT" + reverse_complement(unit) + "AAA") * 6 assert len(find_hairpins(sequence, stem=10, min_loop=3, max_loop=20, limit=3)) == 3 + + +def test_gc_profile_matches_the_windows_that_are_scored(): + from codonopt.metrics import gc_profile + + sequence = "A" * 30 + "G" * 30 + profile = gc_profile(sequence, window=30, step=15) + assert [start for start, _ in profile] == [0, 15, 30] + assert [round(value, 3) for _, value in profile] == [0.0, 0.5, 1.0] + report = gc_window_report(sequence, window=30, step=15, target_range=(0.4, 0.6)) + assert report.windows == len(profile) + assert report.min_fraction == min(value for _, value in profile) + assert report.max_fraction == max(value for _, value in profile) + assert gc_profile("") == [] diff --git a/tests/test_optimize.py b/tests/test_optimize.py index 71dc3a1..3f127ab 100644 --- a/tests/test_optimize.py +++ b/tests/test_optimize.py @@ -179,3 +179,44 @@ def test_single_residue_protein_is_handled(config): result = optimize("M", config, OptimizerSettings(seed=20)) assert result.sequence == "ATG" assert result.score == pytest.approx(result.initial_score) + + +def test_should_stop_cancels_cleanly_and_keeps_the_protein(config): + protein = random_protein(200, seed=60) + settings = OptimizerSettings( + seed=21, max_sweeps=50, restarts=5, should_stop=lambda: True + ) + result = optimize(protein, config, settings) + assert result.cancelled is True + assert result.hit_time_limit is False + assert translate(result.sequence) == protein + assert result.restarts_run == 1 # the first restart always produces a result + + +def test_should_stop_can_flip_part_way_through(plain_config): + protein = random_protein(300, seed=61) + calls = {"n": 0} + + def stop_after_a_while() -> bool: + calls["n"] += 1 + return calls["n"] > 12 + + full = optimize(protein, plain_config, OptimizerSettings(seed=22, max_sweeps=6)) + cut = optimize( + protein, + plain_config, + OptimizerSettings(seed=22, max_sweeps=6, should_stop=stop_after_a_while), + ) + assert cut.cancelled + assert cut.moves_evaluated < full.moves_evaluated + assert cut.score <= cut.initial_score # whatever it got to is no worse + + +def test_a_run_that_is_not_stopped_is_not_marked_cancelled(config): + result = optimize( + random_protein(30, seed=62), + config, + OptimizerSettings(seed=23, max_sweeps=2, should_stop=lambda: False), + ) + assert result.cancelled is False + assert result.hit_time_limit is False diff --git a/tests/test_server.py b/tests/test_server.py new file mode 100644 index 0000000..c415671 --- /dev/null +++ b/tests/test_server.py @@ -0,0 +1,478 @@ +"""Tests for the local web server. + +These drive a real server on a free loopback port over HTTP, because the +properties that matter -- the token and Host checks, the job lifecycle, the +status codes -- live in the request handling rather than in any one function. +""" + +from __future__ import annotations + +import http.client +import json +import threading +import time + +import pytest + +from codonopt import translate +from codonopt.server import ( + MAX_RESIDUES, + RequestError, + build_request, + create_server, +) + +from conftest import random_protein + +TOKEN_HEADER = "X-Codonopt-Token" +PROTEIN = random_protein(40, seed=50) +FAST = {"splice_backend": "none", "effort": "quick", "seed": 1, "seconds": 30} + + +class Client: + """A small HTTP client for the test server.""" + + def __init__(self, server) -> None: + self.server = server + self.port = server.server_address[1] + self.token = server.app.token + + def call( + self, + method: str, + path: str, + body=None, + *, + token: str | None = "default", + host: str | None = "default", + origin: str | None = None, + raw: bytes | None = None, + content_length: str | None = None, + ): + connection = http.client.HTTPConnection("127.0.0.1", self.port, timeout=30) + connection.putrequest(method, path, skip_host=True, skip_accept_encoding=True) + if host is not None: + connection.putheader( + "Host", f"127.0.0.1:{self.port}" if host == "default" else host + ) + if token == "default": + token = self.token + if token is not None: + connection.putheader(TOKEN_HEADER, token) + if origin is not None: + connection.putheader("Origin", origin) + payload = raw if raw is not None else ( + json.dumps(body).encode() if body is not None else b"" + ) + if method == "POST": + connection.putheader( + "Content-Length", + content_length if content_length is not None else str(len(payload)), + ) + connection.putheader("Content-Type", "application/json") + connection.endheaders(payload if method == "POST" and content_length is None else b"") + response = connection.getresponse() + data = response.read() + headers = {key.lower(): value for key, value in response.getheaders()} + connection.close() + try: + parsed = json.loads(data) + except (ValueError, UnicodeDecodeError): + parsed = data + return response.status, headers, parsed + + def start(self, payload: dict): + return self.call("POST", "/api/jobs", payload) + + def wait(self, job_id: str, timeout: float = 90.0) -> dict: + deadline = time.monotonic() + timeout + while time.monotonic() < deadline: + status, _, body = self.call("GET", f"/api/jobs/{job_id}") + assert status == 200, body + if body["status"] != "running": + return body + time.sleep(0.05) + raise AssertionError(f"job {job_id} did not finish in {timeout}s") + + +@pytest.fixture +def client(): + server = create_server() + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + yield Client(server) + server.shutdown() + server.server_close() + thread.join(timeout=5) + + +# -- static serving and request hygiene -------------------------------------- + + +def test_index_is_served_with_the_session_token_and_a_strict_policy(client): + status, headers, body = client.call("GET", "/", token=None) + assert status == 200 + assert headers["content-type"].startswith("text/html") + assert client.token.encode() in body + assert b"__CODONOPT_TOKEN__" not in body + assert "default-src 'none'" in headers["content-security-policy"] + assert "script-src 'self'" in headers["content-security-policy"] + assert headers["cache-control"] == "no-store" + assert headers["x-content-type-options"] == "nosniff" + + +def test_each_server_has_its_own_token(): + first, second = create_server(), create_server() + try: + assert first.app.token != second.app.token + assert len(first.app.token) >= 24 + finally: + first.server_close() + second.server_close() + + +@pytest.mark.parametrize( + "path", + ["/nope", "/../pyproject.toml", "/web/../cli.py", "/%2e%2e/cli.py", "/app.js/../x"], +) +def test_unknown_and_traversal_paths_are_not_found(client, path): + status, _, _ = client.call("GET", path, token=None) + assert status == 404 + + +def test_static_paths_reject_other_methods(client): + status, _, _ = client.call("POST", "/", {}) + assert status == 405 + + +def test_foreign_host_header_is_refused(client): + """A DNS-rebinding page reaches this server under its own hostname.""" + status, _, _ = client.call("GET", "/", token=None, host="evil.example") + assert status == 403 + status, _, _ = client.call("GET", "/api/meta", host="evil.example") + assert status == 403 + status, _, _ = client.call("GET", "/", token=None, host=None) + assert status == 403 + + +def test_localhost_name_is_accepted(client): + status, _, _ = client.call("GET", "/api/meta", host=f"localhost:{client.port}") + assert status == 200 + + +def test_wrong_port_in_host_header_is_refused(client): + status, _, _ = client.call("GET", "/", token=None, host="127.0.0.1:1") + assert status == 403 + + +def test_api_requires_the_token(client): + assert client.call("GET", "/api/meta", token=None)[0] == 403 + assert client.call("GET", "/api/meta", token="wrong")[0] == 403 + assert client.call("POST", "/api/jobs", {"sequence": "MKV"}, token=None)[0] == 403 + + +def test_cross_origin_posts_are_refused(client): + status, _, body = client.call( + "POST", "/api/jobs", {"sequence": PROTEIN, **FAST}, origin="https://evil.example" + ) + assert status == 403 + status, _, body = client.call( + "POST", + "/api/jobs", + {"sequence": PROTEIN, **FAST}, + origin=f"http://127.0.0.1:{client.port}", + ) + assert status == 202 + + +def test_only_loopback_addresses_can_be_bound(): + for host in ("0.0.0.0", "192.168.1.5", "example.com", ""): + with pytest.raises(ValueError, match="loopback"): + create_server(host) + + +# -- meta -------------------------------------------------------------------- + + +def test_meta_describes_the_form(client): + status, _, meta = client.call("GET", "/api/meta") + assert status == 200 + assert {table["name"] for table in meta["tables"]} >= {"human", "ecoli", "uniform"} + assert "BsaI" in meta["motif_groups"]["golden_gate"] + assert meta["restriction_sites"]["EcoRI"] == "GAATTC" + assert meta["defaults"]["gc_range"] == [0.3, 0.7] + assert set(meta["weights"]) >= {"gc_global", "repeat", "motif", "usage"} + assert set(meta["effort"]) == {"quick", "standard", "thorough"} + assert isinstance(meta["maxent_available"], bool) + assert meta["example"]["protein"].startswith("M") + assert meta["limits"]["max_residues"] == MAX_RESIDUES + + +# -- job lifecycle ----------------------------------------------------------- + + +def test_a_job_runs_to_completion_and_keeps_the_protein(client): + status, _, started = client.start( + {"sequence": PROTEIN, "avoid": ["golden_gate", "EcoRI"], **FAST} + ) + assert status == 202 + assert started["status"] == "running" + + done = client.wait(started["id"]) + assert done["status"] == "done" + result = done["result"] + assert translate(result["sequence"]) == PROTEIN + assert result["protein"] == PROTEIN + assert translate(result["initial_sequence"]) == PROTEIN + assert result["score"]["final"] <= result["score"]["initial"] + assert result["final"]["forbidden_motif_hits"] == 0 + assert result["fasta"].startswith(">sequence ") + assert result["fasta"].replace("\n", "").endswith(result["sequence"]) + assert result["cancelled"] is False + + +def test_the_gc_profile_lines_up_for_plotting(client): + _, _, started = client.start({"sequence": PROTEIN, **FAST}) + gc = client.wait(started["id"])["result"]["gc"] + assert len(gc["starts"]) == len(gc["initial"]) == len(gc["final"]) > 0 + assert gc["range"] == [0.3, 0.7] + assert all(0.0 <= value <= 1.0 for value in gc["final"]) + assert gc["starts"] == sorted(gc["starts"]) + + +def test_progress_is_reported_while_running(client): + _, _, started = client.start( + {"sequence": random_protein(120, seed=51), **FAST, "effort": "thorough"} + ) + snapshot = client.call("GET", f"/api/jobs/{started['id']}")[2] + assert snapshot["restarts_total"] == 3 + assert snapshot["max_seconds"] == 30 + done = client.wait(started["id"]) + assert done["restarts_done"] == 3 + assert any("final score" in message for message in done["messages"]) + + +def test_dna_is_detected_and_improved_in_place(client): + dna = "ATGAAATGGGTTACCTTTATCTCTCTGCTGTTG" + _, _, started = client.start({"sequence": f">gene one\n{dna}\n", **FAST}) + result = client.wait(started["id"])["result"] + assert result["kind"] == "dna" + assert result["name"] == "gene" + assert result["initial_sequence"] == dna + assert translate(result["sequence"]) == translate(dna) + + +def test_a_trailing_stop_codon_can_be_requested(client): + _, _, started = client.start({"sequence": "MKWVTF", "add_stop": True, **FAST}) + result = client.wait(started["id"])["result"] + assert result["protein"] == "MKWVTF*" + assert translate(result["sequence"]) == "MKWVTF*" + + +def test_a_custom_codon_table_can_be_pasted(client): + table = json.dumps({"CTG": 1, "CTC": 0.1}) + _, _, started = client.start( + {"sequence": "MLLLLL", "table_text": table, **FAST} + ) + result = client.wait(started["id"])["result"] + assert result["codon_usage_table"] == "custom" + + +def test_remaining_motif_hits_are_reported_for_highlighting(client): + # Weight the motif term to zero so a site is allowed to survive. + _, _, started = client.start( + { + "sequence": "MKWVTF", + "avoid": ["x=ATG"], + "weights": {"motif": 0}, + **FAST, + } + ) + hits = client.wait(started["id"])["result"]["motif_hits"] + assert hits and hits[0]["name"] == "x" and hits[0]["length"] == 3 + assert hits[0]["positions"][0] == 0 + + +def test_cancelling_returns_the_best_sequence_so_far(client): + protein = random_protein(500, seed=52) + _, _, started = client.start( + {"sequence": protein, **FAST, "effort": "thorough", "seconds": 300} + ) + begun = time.monotonic() + status, _, _ = client.call("POST", f"/api/jobs/{started['id']}/cancel") + assert status == 200 + done = client.wait(started["id"], timeout=60) + assert time.monotonic() - begun < 30 # nowhere near the 300 s budget + assert done["status"] == "cancelled" + assert translate(done["result"]["sequence"]) == protein + assert done["result"]["cancelled"] is True + + +def test_the_concurrency_limit_is_enforced_and_recovers(client): + protein = random_protein(600, seed=53) + slow = {"sequence": protein, **FAST, "effort": "thorough", "seconds": 300} + ids = [] + for _ in range(2): + status, _, body = client.start(slow) + assert status == 202 + ids.append(body["id"]) + status, _, body = client.start(slow) + assert status == 400 + assert "as many optimisations as allowed" in body["error"] + + for job_id in ids: + client.call("POST", f"/api/jobs/{job_id}/cancel") + client.wait(job_id, timeout=60) + assert client.start({"sequence": PROTEIN, **FAST})[0] == 202 + + +def test_unknown_jobs_are_not_found(client): + assert client.call("GET", "/api/jobs/nonexistent")[0] == 404 + assert client.call("POST", "/api/jobs/nonexistent/cancel")[0] == 404 + assert client.call("GET", "/api/elsewhere")[0] == 404 + + +# -- bad requests ------------------------------------------------------------ + + +@pytest.mark.parametrize( + "payload, message", + [ + ({"sequence": ""}, "Paste a protein or DNA sequence"), + ({"sequence": " \n "}, "Paste a protein or DNA sequence"), + ({"sequence": "MKZ"}, "unsupported residues"), + ({"sequence": "MK*V"}, "internal stop"), + ({"sequence": "ATGAAATGGG"}, "multiple of three"), + ({"sequence": ">a\nMKV\n>b\nMKW\n"}, "2 FASTA records"), + ({"sequence": "MKV", "gc_range": [30, 70]}, "between 0 and 1"), + ({"sequence": "MKV", "gc_range": [0.7, 0.3]}, "low <= high"), + ({"sequence": "MKV", "gc_range": [0.3]}, "two numbers"), + ({"sequence": "MKV", "gc_target": 2}, "between 0 and 1"), + ({"sequence": "MKV", "gc_window": 2.5}, "whole number"), + ({"sequence": "MKV", "gc_window": "wide"}, "must be a number"), + ({"sequence": "MKV", "table": "mouse"}, "unknown codon usage table"), + ({"sequence": "MKV", "table_text": "TTT,abc"}, "not a number"), + ({"sequence": "MKV", "table_text": "nothing useful"}, "expected two columns"), + ({"sequence": "MKV", "table_text": "codon,count\n"}, "no codon rows"), + ({"sequence": "MKV", "avoid": ["NotAnEnzyme"]}, "cannot resolve motif"), + ({"sequence": "MKV", "avoid": "EcoRI"}, "list of motif names"), + ({"sequence": "MKV", "weights": {"nonsense": 1}}, "unknown weight"), + ({"sequence": "MKV", "weights": {"usage": -1}}, "between 0 and"), + ({"sequence": "MKV", "weights": []}, "must be an object"), + ({"sequence": "MKV", "effort": "extreme"}, "effort must be"), + ({"sequence": "MKV", "splice_backend": "magic"}, "splice backend must be"), + ({"sequence": "MKV", "seconds": 0}, "between 1 and"), + ({"sequence": "MKV", "seconds": 10**6}, "between 1 and"), + ({"sequence": "MKV", "seed": -1}, "between 0 and"), + ({"sequence": "MKV", "kind": "rna"}, "kind must be"), + ({"sequence": "A" * (MAX_RESIDUES + 1), "kind": "protein"}, "accepts up to"), + ], +) +def test_bad_requests_get_a_readable_400(client, payload, message): + status, _, body = client.call("POST", "/api/jobs", payload) + assert status == 400, body + assert message in body["error"] + + +def test_malformed_bodies(client): + assert client.call("POST", "/api/jobs", raw=b"{not json")[0] == 400 + assert client.call("POST", "/api/jobs", raw=b"[1, 2]")[0] == 400 + assert client.call("POST", "/api/jobs", raw=b"\xff\xfe")[0] == 400 + status, _, body = client.call("POST", "/api/jobs", raw=b"null") + assert status == 400 + + +def test_oversized_and_unsized_bodies_are_refused(client): + status, _, _ = client.call( + "POST", "/api/jobs", raw=b"", content_length=str(3_000_000) + ) + assert status == 413 + status, _, _ = client.call("POST", "/api/jobs", raw=b"", content_length="lots") + assert status == 411 + + +# -- build_request, without HTTP -------------------------------------------- + + +def test_build_request_interprets_the_input(): + spec = build_request({"sequence": "MKWVTF", "add_stop": True}) + assert (spec.protein, spec.start, spec.kind) == ("MKWVTF*", None, "protein") + + spec = build_request({"sequence": "atgaaatgggtt"}) + assert spec.kind == "dna" and spec.start == "ATGAAATGGGTT" + assert spec.protein == "MKWV" + + # RNA spelling is accepted and normalised. + spec = build_request({"sequence": "AUGAAAUGGGUU"}) + assert spec.start == "ATGAAATGGGTT" + + +def test_add_stop_does_not_alter_a_dna_input(): + spec = build_request({"sequence": "ATGAAATGGGTT", "add_stop": True}) + assert spec.protein == "MKWV" + + +def test_kind_overrides_detection(): + # Alanine, cysteine, glycine and threonine spell valid DNA letters, so a + # sequence of only those is ambiguous and the caller may need to say. + assert build_request({"sequence": "ACGTACGTA"}).kind == "dna" + spec = build_request({"sequence": "ACGTACGTA", "kind": "protein"}) + assert spec.kind == "protein" and spec.start is None + assert spec.protein == "ACGTACGTA" + # Short strings are read as protein unless told otherwise. + assert build_request({"sequence": "ATGAAATG"}).kind == "protein" + + +def test_build_request_names_the_record(): + assert build_request({"sequence": ">albumin sample\nMKV"}).name == "albumin" + assert build_request({"sequence": "MKV", "name": "mine"}).name == "mine" + assert build_request({"sequence": "MKV"}).name == "sequence" + + +def test_build_request_resolves_every_option(): + spec = build_request( + { + "sequence": "MKV", + "table": "ecoli", + "avoid": ["golden_gate", "AATAAA"], + "gc_target": 0.6, + "gc_range": [0.35, 0.65], + "repeat_k": 9, + "weights": {"usage": 0, "motif": 10}, + "effort": "thorough", + "seed": 7, + "seconds": 45, + "splice_backend": "motif", + } + ) + config = spec.config + assert config.table.name == "ecoli" + assert config.gc_target == 0.6 and config.gc_range == (0.35, 0.65) + assert config.repeat_k == 9 + assert config.weights.usage == 0 and config.weights.motif == 10 + assert len(config.motifs) == 5 # four golden-gate enzymes plus AATAAA + assert config.splice_scorer.name == "motif" + assert spec.settings["restarts"] == 3 and spec.settings["seed"] == 7 + assert spec.settings["max_seconds"] == 45 + + +def test_request_errors_are_value_errors(): + assert issubclass(RequestError, ValueError) + with pytest.raises(RequestError): + build_request("not an object") + + +# ---------------------------------------------------------------- built assets + + +def test_built_interface_is_shipped_and_wired_to_the_token(): + """The Node-free install serves committed files; make sure they exist and fit together.""" + from importlib import resources + + web = resources.files("codonopt") / "web" + names = {p.name for p in web.iterdir()} + assert {"index.html", "app.js", "app.css", "favicon.svg"} <= names + html = (web / "index.html").read_text(encoding="utf-8") + assert "__CODONOPT_TOKEN__" in html + assert "app.js" in html and "app.css" in html + assert " + + +
+
+ +
+

codonopt

+

Codon optimization for synthesis and expression

+
+
+ +
+ +
+
+
+ +
+
+

Sequence

+
+ + + +
+
+ + + +

Nothing pasted yet.

+
+
+ + + + + + +
+ +
+
+ +
+

Host

+ +

+ +
+ +
+

Keep out

+
+ +

Enzyme names or IUPAC patterns, comma separated. Both strands are checked.

+
+ +
+

Targets

+
+ + + +
+

GC as a fraction between 0 and 1. Every 30 base window is kept inside the min–max range.

+
+ + +
+

+
+ +
+

Search

+
+ + + + + + +
+

+
+ + +
+
+ +
+

Advanced

+

Each term of the score has a weight. Zero switches a term off.

+
+
+ + + + + + +
+ +
+ +
+ +
+ + +
+
+ +
+
+

Design a sequence that is easy to make

+

The protein stays exactly the same. Only the synonymous codons change, so the DNA + avoids what makes genes hard to synthesise and express.

+
    +
  1. Paste a protein, or a DNA sequence you want to improve.
  2. +
  3. Choose a host and the sites to keep out.
  4. +
  5. Optimize, then compare before and after.
  6. +
+

Nothing leaves this computer: the page talks only to the local codonopt process.

+
+
+
+ + + + diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100644 index 0000000..929d7fe --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,168 @@ +import { Api, ApiError } from "./api"; +import { describe } from "./detect"; +import { $ } from "./dom"; +import { + describeEffort, + describeSplice, + describeTable, + populate, + readPayload, + reset, + selectedKind, + syncTable, +} from "./form"; +import { Progress, showError, showResult } from "./results"; +import type { Job, Meta } from "./types"; + +const POLL_MS = 350; + +async function main(): Promise { + const token = document.querySelector('meta[name="codonopt-token"]')?.content ?? ""; + const api = new Api(token); + const output = $("output"); + + let meta: Meta; + try { + meta = await api.meta(); + } catch (error) { + showError(output, error instanceof Error ? error.message : String(error)); + return; + } + populate(meta); + describeTable(meta); + + const sequence = $("sequence"); + const detected = $("detected"); + const run = $("run"); + const cancel = $("cancel"); + const stopRow = $("add-stop-wrap"); + let running: { id: string; timer: number } | null = null; + + /* ----- sequence box ----- */ + + const refresh = (): void => { + const info = describe(sequence.value, selectedKind(), meta.limits.max_residues); + detected.textContent = info.message; + detected.className = `detected ${info.state}`; + stopRow.hidden = info.kind === "dna"; + run.disabled = running !== null || info.state === "empty"; + }; + sequence.addEventListener("input", refresh); + for (const radio of document.querySelectorAll('input[name="kind"]')) radio.addEventListener("change", refresh); + + const load = async (file: File | undefined, into: HTMLTextAreaElement): Promise => { + if (!file) return; + into.value = await file.text(); + into.dispatchEvent(new Event("input", { bubbles: true })); + }; + const fileInput = $("file-input"); + $("btn-open").addEventListener("click", () => fileInput.click()); + fileInput.addEventListener("change", () => { + void load(fileInput.files?.[0], sequence); + fileInput.value = ""; + }); + sequence.addEventListener("dragover", (event) => event.preventDefault()); + sequence.addEventListener("drop", (event) => { + event.preventDefault(); + void load(event.dataTransfer?.files[0], sequence); + }); + + $("btn-example").addEventListener("click", () => { + sequence.value = `>${meta.example.name}\n${meta.example.protein}\n`; + $("kind-auto").checked = true; + refresh(); + sequence.focus(); + }); + $("btn-clear").addEventListener("click", () => { + sequence.value = ""; + refresh(); + sequence.focus(); + }); + + /* ----- settings ----- */ + + const tableSelect = $("table"); + tableSelect.addEventListener("change", () => { + syncTable(); + describeTable(meta); + }); + const tableText = $("table-text"); + const tableFile = $("table-file"); + $("btn-open-table").addEventListener("click", () => tableFile.click()); + tableFile.addEventListener("change", () => { + void load(tableFile.files?.[0], tableText); + tableFile.value = ""; + }); + $("splice").addEventListener("change", () => describeSplice(meta)); + for (const radio of document.querySelectorAll('input[name="effort"]')) { + radio.addEventListener("change", () => describeEffort(meta)); + } + $("btn-reset").addEventListener("click", () => { + reset(meta); + describeTable(meta); + }); + + /* ----- running ----- */ + + const setRunning = (active: boolean): void => { + cancel.hidden = !active; + cancel.disabled = false; + run.hidden = active; + refresh(); + }; + + const finish = (job: Job): void => { + if (running) window.clearInterval(running.timer); + running = null; + setRunning(false); + if (job.status === "error") showError(output, job.error ?? "The optimization failed."); + else if (job.result) showResult(output, job.result, meta); + }; + + $("form").addEventListener("submit", async (event) => { + event.preventDefault(); + if (running || run.disabled) return; + let job: Job; + try { + job = await api.start(readPayload()); + } catch (error) { + showError(output, error instanceof ApiError ? error.message : String(error)); + return; + } + const progress = new Progress(output); + progress.update(job); + running = { id: job.id, timer: 0 }; + setRunning(true); + running.timer = window.setInterval(async () => { + if (!running) return; + try { + const latest = await api.poll(running.id); + if (latest.status === "running") progress.update(latest); + else finish(latest); + } catch (error) { + if (running) window.clearInterval(running.timer); + running = null; + setRunning(false); + showError(output, error instanceof Error ? error.message : String(error)); + } + }, POLL_MS); + }); + + cancel.addEventListener("click", async () => { + if (!running) return; + cancel.disabled = true; + cancel.textContent = "Stopping…"; + try { + await api.cancel(running.id); + } catch { + /* the next poll reports whatever state the job is in */ + } + }); + new MutationObserver(() => { + if (cancel.hidden) cancel.textContent = "Stop"; + }).observe(cancel, { attributes: true, attributeFilter: ["hidden"] }); + + refresh(); +} + +void main(); diff --git a/web/src/results.ts b/web/src/results.ts new file mode 100644 index 0000000..99aa14f --- /dev/null +++ b/web/src/results.ts @@ -0,0 +1,372 @@ +import { gcChart } from "./chart"; +import { fmt, h, int, replace } from "./dom"; +import type { Child } from "./dom"; +import { sequenceView } from "./sequence"; +import type { Job, Measures, Meta, Result } from "./types"; + +/* ---------- small helpers ---------- */ + +async function copyText(text: string): Promise { + try { + await navigator.clipboard.writeText(text); + return true; + } catch { + // Older embedded web views have no async clipboard: fall back to a hidden textarea. + const area = h("textarea", { attrs: { "aria-hidden": "true", tabindex: "-1" } }); + area.value = text; + document.body.append(area); + area.select(); + let done = false; + try { + done = document.execCommand("copy"); + } catch { + done = false; + } + area.remove(); + return done; + } +} + +function download(filename: string, text: string, type: string): void { + const url = URL.createObjectURL(new Blob([text], { type })); + const link = h("a", { attrs: { href: url, download: filename } }); + document.body.append(link); + link.click(); + link.remove(); + setTimeout(() => URL.revokeObjectURL(url), 10_000); +} + +function action(label: string, onClick: (button: HTMLButtonElement) => void, primary = false): HTMLButtonElement { + const button: HTMLButtonElement = h("button", { + type: "button", + class: primary ? "chip primary-chip" : "chip", + text: label, + on: { click: () => onClick(button) }, + }); + return button; +} + +function flash(button: HTMLButtonElement, message: string): void { + const original = button.textContent; + button.textContent = message; + setTimeout(() => { + button.textContent = original; + }, 1600); +} + +const safeName = (name: string): string => name.replace(/[^\w.-]+/g, "_") || "sequence"; + +/* ---------- empty, running and error states ---------- */ + +export function showError(output: HTMLElement, message: string): void { + replace( + output, + h( + "div", + { class: "callout error", role: "alert" }, + h("strong", { text: "That did not work" }), + h("p", { text: message }), + ), + ); + output.focus({ preventScroll: true }); +} + +/** A progress card that is built once and updated in place on every poll. */ +export class Progress { + private readonly bar = h("div", { class: "bar-fill" }); + private readonly elapsed = h("span", { class: "mono" }); + private readonly detail = h("span", { class: "hint" }); + private readonly log = h("ol", { class: "log mono", attrs: { "aria-label": "Search log" } }); + private lastLog = ""; + + constructor(output: HTMLElement) { + replace( + output, + h( + "div", + { class: "card progress" }, + h("h2", { text: "Optimizing" }), + h("p", { class: "hint", text: "Trying synonymous codons and keeping the changes that lower the score." }), + h("div", { class: "bar", role: "progressbar", attrs: { "aria-label": "Optimization progress" } }, this.bar), + h("div", { class: "progress-meta" }, this.elapsed, this.detail), + this.log, + ), + ); + output.focus({ preventScroll: true }); + } + + update(job: Job): void { + this.elapsed.textContent = `${fmt(job.elapsed, 1)} s of at most ${int(job.max_seconds)} s`; + if (job.restarts_total > 1) { + this.detail.textContent = `Restart ${Math.min(job.restarts_done + 1, job.restarts_total)} of ${job.restarts_total}`; + this.bar.style.width = `${Math.min(100, (job.restarts_done / job.restarts_total) * 100)}%`; + this.bar.parentElement?.classList.remove("indeterminate"); + } else { + this.detail.textContent = "Stops as soon as nothing improves."; + this.bar.parentElement?.classList.add("indeterminate"); + } + const key = job.messages.join("\n"); + if (key !== this.lastLog) { + this.lastLog = key; + replace(this.log, ...job.messages.map((message) => h("li", { text: message }))); + } + } +} + +/* ---------- the result ---------- */ + +interface Row { + label: string; + help: string; + get: (m: Measures) => number; + format?: (value: number) => string; + /** How to judge the change: fewer is better, more is better, or nearer the target. */ + better: "lower" | "higher" | "target"; + show?: (m: Measures) => boolean; +} + +const percent = (v: number): string => `${fmt(v * 100, 1)}%`; + +function rows(after: Measures): Row[] { + const hasSplice = after.splice_backend !== undefined; + return [ + { + label: "GC content", + help: "Share of G and C bases over the whole sequence.", + get: (m) => m.gc_fraction, + format: percent, + better: "target", + }, + { + label: "GC windows out of range", + help: "Windows whose local GC falls outside the allowed range.", + get: (m) => m.gc_windows_below_range + m.gc_windows_above_range, + better: "lower", + }, + { + label: "Codon adaptation index", + help: "How closely the codons follow the host's preferences (1 is ideal).", + get: (m) => m.cai, + format: (v) => fmt(v, 3), + better: "higher", + }, + { + label: `Repeated ${after.repeat_k}-mers`, + help: "Extra copies of any stretch that appears more than once. Repeats misassemble during synthesis.", + get: (m) => m.redundant_kmers, + better: "lower", + }, + { + label: "Hairpin pairs", + help: "Pairs of inverted repeats that can fold into stem-loops.", + get: (m) => m.hairpin_pairs, + better: "lower", + }, + { + label: "Longest single-base run", + help: "The longest stretch of one repeated base.", + get: (m) => m.longest_homopolymer, + better: "lower", + }, + { + label: "Forbidden sites", + help: "Matches to the enzymes and patterns you asked to keep out.", + get: (m) => m.forbidden_motif_hits, + better: "lower", + }, + { + label: "Splice donor sites", + help: "Windows that look like a 5′ splice site.", + get: (m) => m.splice_donor_sites ?? 0, + better: "lower", + show: () => hasSplice, + }, + { + label: "Splice acceptor sites", + help: "Windows that look like a 3′ splice site.", + get: (m) => m.splice_acceptor_sites ?? 0, + better: "lower", + show: () => hasSplice, + }, + ]; +} + +/** Everything the optimizer was asked to remove, as one headline number. */ +function issues(m: Measures): number { + return ( + m.gc_windows_below_range + + m.gc_windows_above_range + + m.redundant_kmers + + m.hairpin_pairs + + m.homopolymer_excess_bases + + m.forbidden_motif_hits + + (m.splice_donor_sites ?? 0) + + (m.splice_acceptor_sites ?? 0) + ); +} + +function comparison(result: Result): HTMLElement { + const target = result.gc.target; + const body = rows(result.final) + .filter((row) => !row.show || row.show(result.final)) + .map((row) => { + const before = row.get(result.initial); + const after = row.get(result.final); + const format = row.format ?? int; + let verdict: "good" | "bad" | "same"; + if (row.better === "target") { + const distance = Math.abs(after - target) - Math.abs(before - target); + verdict = Math.abs(distance) < 5e-4 ? "same" : distance < 0 ? "good" : "bad"; + } else { + const delta = after - before; + verdict = Math.abs(delta) < 1e-9 ? "same" : (delta < 0) === (row.better === "lower") ? "good" : "bad"; + } + const words = { good: "better", bad: "worse", same: "no change" }[verdict]; + const mark = { good: "✓", bad: "!", same: "–" }[verdict]; + return h( + "tr", + null, + h("th", { attrs: { scope: "row", title: row.help } }, row.label), + h("td", { class: "num", text: format(before) }), + h("td", { class: "num strong", text: format(after) }), + h("td", { class: `verdict ${verdict}` }, h("span", { attrs: { "aria-hidden": "true" } }, `${mark} `), words), + ); + }); + return h( + "table", + { class: "compare" }, + h( + "thead", + null, + h( + "tr", + null, + h("th", { attrs: { scope: "col" } }, "Property"), + h("th", { class: "num", attrs: { scope: "col" } }, "Before"), + h("th", { class: "num", attrs: { scope: "col" } }, "After"), + h("th", { attrs: { scope: "col" } }, "Change"), + ), + ), + h("tbody", null, ...body), + ); +} + +const TERMS: Record = { + gc_global: ["Overall GC", "Distance of the whole-sequence GC from the target."], + gc_window: ["Local GC", "How far windows stray outside the allowed range."], + repeat: ["Repeats", "Redundant copies of repeated stretches."], + hairpin: ["Hairpins", "Inverted repeats that can fold back on themselves."], + homopolymer: ["Single-base runs", "Bases beyond the longest run you allow."], + motif: ["Forbidden sites", "Matches to enzymes and patterns you keep out."], + splice: ["Splice sites", "How far splice-site scores exceed their cutoffs."], + usage: ["Codon usage", "Cost of using codons the host dislikes."], +}; + +function breakdown(result: Result): HTMLElement { + const before = result.score.initial_terms; + const after = result.score.final_terms; + const names = Object.keys(TERMS).filter((key) => (before[key] ?? 0) > 1e-9 || (after[key] ?? 0) > 1e-9); + if (!names.length) { + return h("p", { class: "hint", text: "No penalties at all: every constraint is met and codon usage is ideal." }); + } + const scale = Math.max(...names.flatMap((key) => [before[key] ?? 0, after[key] ?? 0]), 1e-9); + const bar = (value: number, className: string): HTMLElement => { + const fill = h("span", { class: `fill ${className}` }); + fill.style.width = `${Math.max(value > 0 ? 1.5 : 0, (value / scale) * 100)}%`; + return h("span", { class: "track" }, fill); + }; + return h( + "div", + { class: "terms" }, + ...names.map((key) => + h( + "div", + { class: "term", title: TERMS[key][1] }, + h("span", { class: "term-name", text: TERMS[key][0] }), + h( + "span", + { class: "term-bars" }, + bar(before[key] ?? 0, "before"), + bar(after[key] ?? 0, "after"), + ), + h("span", { class: "term-values mono", text: `${fmt(before[key] ?? 0, 2)} → ${fmt(after[key] ?? 0, 2)}` }), + ), + ), + ); +} + +function card(title: string, subtitle: string | null, ...content: Child[]): HTMLElement { + return h( + "section", + { class: "card" }, + h("h3", { text: title }), + subtitle ? h("p", { class: "hint", text: subtitle }) : null, + ...content, + ); +} + +function stat(label: string, before: string, after: string, note: string): HTMLElement { + return h( + "div", + { class: "stat" }, + h("span", { class: "stat-label", text: label }), + h("span", { class: "stat-value" }, h("span", { class: "was", text: before }), " → ", h("strong", { text: after })), + h("span", { class: "stat-note", text: note }), + ); +} + +export function showResult(output: HTMLElement, result: Result, _meta: Meta): void { + const issuesBefore = issues(result.initial); + const issuesAfter = issues(result.final); + const reduction = + result.score.initial > 0 + ? `${Math.round((1 - result.score.final / result.score.initial) * 100)}% lower score` + : "score unchanged"; + + const name = safeName(result.name); + const banner = result.cancelled + ? h("div", { class: "callout warn", role: "status" }, "Stopped early. This is the best sequence found so far.") + : result.search.hit_time_limit + ? h("div", { class: "callout warn", role: "status" }, "The time limit ended the search before it settled. Raise the limit or use a thorough search for more.") + : null; + + const toolbar = h( + "div", + { class: "toolbar" }, + action("Copy DNA", (b) => void copyText(result.sequence).then((ok) => flash(b, ok ? "Copied" : "Copy failed")), true), + action("Copy FASTA", (b) => void copyText(result.fasta).then((ok) => flash(b, ok ? "Copied" : "Copy failed"))), + action("Download FASTA", () => download(`${name}.codonopt.fna`, result.fasta, "text/plain")), + action("Download report", () => + download(`${name}.codonopt.json`, JSON.stringify(result, null, 2) + "\n", "application/json"), + ), + ); + + replace( + output, + h( + "div", + { class: "result-head" }, + h("div", null, h("h2", { text: "Optimized sequence" }), h("p", { class: "hint", text: `${result.name} · ${result.protein.length.toLocaleString()} residues · ${result.codon_usage_table} codon usage` })), + toolbar, + ), + banner, + h( + "div", + { class: "stats" }, + stat("Issues found", int(issuesBefore), int(issuesAfter), issuesAfter === 0 ? "none left" : "still to resolve"), + stat("Score", fmt(result.score.initial, 2), fmt(result.score.final, 2), reduction), + stat("GC content", percent(result.initial.gc_fraction), percent(result.final.gc_fraction), `target ${percent(result.gc.target)}`), + stat("Codon adaptation", fmt(result.initial.cai, 2), fmt(result.final.cai, 2), "1.0 is ideal"), + ), + card("DNA sequence", "The protein is identical to your input; only synonymous codons changed.", sequenceView(result)), + card("Before and after", null, comparison(result)), + card("GC content along the sequence", `Each point is a ${result.gc.window} base window.`, gcChart(result.gc, result.sequence.length)), + card("Where the score comes from", "Lower is better. Each term is weighted as in your settings.", breakdown(result)), + h( + "p", + { class: "run-info hint" }, + `${result.search.restarts_run} ${result.search.restarts_run === 1 ? "restart" : "restarts"} · ${int(result.search.greedy_sweeps)} sweeps · ${int(result.search.moves_evaluated)} codon swaps tried · ${fmt(result.search.seconds, 1)} s`, + ), + ); + output.focus({ preventScroll: true }); +} diff --git a/web/src/sequence.ts b/web/src/sequence.ts new file mode 100644 index 0000000..0d6b51b --- /dev/null +++ b/web/src/sequence.ts @@ -0,0 +1,99 @@ +import { h, int } from "./dom"; +import type { Result } from "./types"; + +const CODONS_PER_ROW = 20; + +/** + * The optimized sequence, codon by codon, with the protein above it. + * + * Codons that differ from the starting sequence can be highlighted, and any + * codon that still overlaps a forbidden motif is marked so it cannot be missed. + */ +export function sequenceView(result: Result): HTMLElement { + const final = result.sequence; + const initial = result.initial_sequence; + const codons = final.length / 3; + + const flagged = new Set(); + for (const hit of result.motif_hits) { + for (const position of hit.positions) { + for (let i = Math.floor(position / 3); i <= Math.floor((position + hit.length - 1) / 3); i++) { + flagged.add(i); + } + } + } + + let changed = 0; + const rows: HTMLElement[] = []; + const labelWidth = String(final.length).length; + for (let first = 0; first < codons; first += CODONS_PER_ROW) { + const last = Math.min(first + CODONS_PER_ROW, codons); + const aminoAcids = h("div", { class: "line aa", attrs: { "aria-hidden": "true" } }); + const bases = h("div", { class: "line dna" }); + for (let i = first; i < last; i++) { + const codon = final.slice(i * 3, i * 3 + 3); + const before = initial.slice(i * 3, i * 3 + 3); + const differs = codon !== before; + if (differs) changed++; + const classes = ["cell", differs ? "chg" : "", flagged.has(i) ? "hit" : ""].filter(Boolean).join(" "); + aminoAcids.append(h("span", { class: "cell" }, result.protein[i] ?? "")); + bases.append( + h("span", differs ? { class: classes, title: `${before} → ${codon}` } : { class: classes }, codon), + ); + } + rows.push( + h( + "div", + { class: "block" }, + h("span", { class: "pos", text: String(first * 3 + 1).padStart(labelWidth, " ") }), + h("div", { class: "lines" }, aminoAcids, bases), + ), + ); + } + + const view = h("div", { class: "seq show-changes show-aa", attrs: { tabindex: "0", "aria-label": "Optimized DNA sequence" } }, ...rows); + + const toggle = (label: string, className: string, checked: boolean): HTMLElement => + h( + "label", + { class: "check" }, + h("input", { + type: "checkbox", + checked, + on: { change: (event) => view.classList.toggle(className, (event.target as HTMLInputElement).checked) }, + }), + ` ${label}`, + ); + if (!result.motif_hits.length && !changed) view.classList.remove("show-changes"); + + const summary = + changed === 0 + ? "No codon needed to change." + : `${int(changed)} of ${int(codons)} codons changed (${Math.round((changed / codons) * 100)}%).`; + const warn = result.motif_hits.length + ? h( + "p", + { class: "note warn", role: "status" }, + `Still contains ${result.motif_hits.map((hit) => `${hit.name} (${hit.positions.length})`).join(", ")}; ` + + "the marked codons overlap a site you asked to keep out.", + ) + : null; + + return h( + "div", + { class: "seq-wrap" }, + h( + "div", + { class: "seq-tools" }, + h("p", { class: "hint", text: summary }), + h( + "div", + { class: "toggles" }, + toggle("Highlight changes", "show-changes", view.classList.contains("show-changes")), + toggle("Show protein", "show-aa", true), + ), + ), + warn, + view, + ); +} diff --git a/web/src/styles.css b/web/src/styles.css new file mode 100644 index 0000000..1751c8d --- /dev/null +++ b/web/src/styles.css @@ -0,0 +1,317 @@ +/* codonopt interface. System fonts and colours only: the page loads nothing + from outside, and the content security policy would refuse it if it tried. */ + +:root { + --bg: #f4f6f4; + --surface: #ffffff; + --surface-2: #eef1ee; + --text: #17201e; + --muted: #56635f; + --border: #d9dfdb; + --accent: #0f766e; + --accent-strong: #0b5a54; + --accent-ink: #ffffff; + --accent-soft: #d6eeea; + --good: #146c37; + --bad: #b42318; + --warn: #8a4b08; + --warn-soft: #fdecc8; + --error-soft: #fde4e1; + --before: #7b8794; + --focus: #1d4ed8; + --shadow: 0 1px 2px rgb(16 24 22 / 8%), 0 4px 16px rgb(16 24 22 / 5%); + --radius: 12px; + --mono: ui-monospace, "SF Mono", "Cascadia Mono", "Roboto Mono", Menlo, Consolas, monospace; + --sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: #0e1413; + --surface: #161e1c; + --surface-2: #1d2725; + --text: #e5ece9; + --muted: #98a7a1; + --border: #2a3835; + --accent: #3fb6aa; + --accent-strong: #7fd6cc; + --accent-ink: #06201d; + --accent-soft: #17403b; + --good: #5fd38b; + --bad: #ff8a80; + --warn: #f2b45a; + --warn-soft: #3a2a10; + --error-soft: #3b1a17; + --before: #8794a3; + --focus: #8ab4ff; + --shadow: 0 1px 2px rgb(0 0 0 / 40%); + } +} + +* { box-sizing: border-box; } +[hidden] { display: none !important; } + +html { -webkit-text-size-adjust: 100%; } +body { + margin: 0; + background: var(--bg); + color: var(--text); + font: 15px/1.5 var(--sans); +} + +:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; } + +h1, h2, h3, p { margin: 0; } +h1 { font-size: 1.15rem; line-height: 1.2; letter-spacing: -0.01em; } +h2 { font-size: 0.8125rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); font-weight: 650; } +h3 { font-size: 1rem; } + +.sr-only { + position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; + overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; +} +.mono { font-family: var(--mono); } +.hint { color: var(--muted); font-size: 0.8125rem; } + +/* ---------- header ---------- */ + +.top { + max-width: 1280px; margin: 0 auto; padding: 16px 16px 4px; + display: flex; align-items: center; justify-content: space-between; gap: 12px; +} +.brand { display: flex; align-items: center; gap: 12px; } +.brand p { color: var(--muted); font-size: 0.8125rem; } +.logo { width: 36px; height: 36px; flex: none; } +.logo-bg { fill: var(--accent); } +.logo-strand { fill: none; stroke: var(--accent-ink); stroke-width: 2.4; stroke-linecap: round; } +.version { color: var(--muted); font: 0.75rem var(--mono); } + +/* ---------- layout ---------- */ + +.app { + max-width: 1280px; margin: 0 auto; padding: 12px 16px 48px; + display: grid; gap: 20px; grid-template-columns: minmax(0, 1fr); +} +@media (min-width: 980px) { + .app { grid-template-columns: 430px minmax(0, 1fr); align-items: start; } + .panel { position: sticky; top: 16px; max-height: calc(100vh - 32px); } + .panel-scroll { overflow-y: auto; } +} + +.panel { + display: flex; flex-direction: column; + background: var(--surface); border: 1px solid var(--border); + border-radius: var(--radius); box-shadow: var(--shadow); +} +.panel-scroll { padding: 4px 18px 8px; min-height: 0; } +.actions { + position: sticky; bottom: 0; display: flex; gap: 8px; padding: 12px 18px; + background: var(--surface); border-top: 1px solid var(--border); + border-radius: 0 0 var(--radius) var(--radius); +} + +.group { padding: 16px 0; border-bottom: 1px solid var(--border); display: grid; gap: 10px; } +.group:last-child { border-bottom: 0; } +.group-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; } +.tools { display: flex; gap: 12px; } +.row { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; } + +/* ---------- controls ---------- */ + +textarea, input[type="text"], input[type="number"], select { + width: 100%; font: inherit; color: var(--text); background: var(--surface); + border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; +} +textarea { font-family: var(--mono); font-size: 0.8125rem; line-height: 1.45; resize: vertical; min-height: 7rem; } +input::placeholder, textarea::placeholder { color: var(--muted); opacity: 0.8; } +textarea:hover, input:hover, select:hover { border-color: color-mix(in srgb, var(--border), var(--text) 25%); } + +.field { display: grid; gap: 4px; min-width: 0; } +.field > span, .small-label { font-size: 0.8125rem; color: var(--muted); } +.grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; } +.grid3 .wide { grid-column: span 2; } + +.link { + background: none; border: 0; padding: 0; font: inherit; font-size: 0.8125rem; + color: var(--accent-strong); cursor: pointer; text-decoration: underline; + text-underline-offset: 3px; +} +.link:hover { text-decoration-thickness: 2px; } + +.check { display: inline-flex; align-items: center; gap: 6px; font-size: 0.875rem; cursor: pointer; } +.check input { width: 16px; height: 16px; accent-color: var(--accent); } + +.seg { + position: relative; display: inline-flex; margin: 0; padding: 2px; min-width: 0; + border: 1px solid var(--border); border-radius: 10px; background: var(--surface-2); +} +.seg input { position: absolute; opacity: 0; pointer-events: none; } +.seg label { + padding: 5px 12px; border-radius: 8px; cursor: pointer; font-size: 0.875rem; color: var(--muted); +} +.seg input:checked + label { background: var(--surface); color: var(--text); font-weight: 600; box-shadow: 0 1px 2px rgb(0 0 0 / 15%); } +.seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; } + +.detected { font-size: 0.8125rem; color: var(--muted); } +.detected.ok { color: var(--accent-strong); } +.detected.error { color: var(--bad); } + +.chips { display: flex; flex-wrap: wrap; gap: 8px; } +.chip-check { + display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; font-size: 0.8125rem; + border: 1px solid var(--border); border-radius: 999px; cursor: pointer; background: var(--surface); +} +.chip-check:has(input:checked) { background: var(--accent-soft); border-color: var(--accent); color: var(--accent-strong); font-weight: 600; } +.chip-check input { accent-color: var(--accent); } + +.advanced > summary { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 6px; } +.advanced > summary::-webkit-details-marker { display: none; } +.advanced > summary::before { content: "▸"; color: var(--muted); transition: transform 0.15s; } +.advanced[open] > summary::before { transform: rotate(90deg); } +.advanced[open] { gap: 12px; } +.weights { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } + +button.primary, button.secondary { + font: inherit; font-weight: 650; border-radius: 10px; padding: 10px 16px; cursor: pointer; + border: 1px solid transparent; flex: 1; +} +button.primary { background: var(--accent); color: var(--accent-ink); } +button.primary:hover:not(:disabled) { background: var(--accent-strong); color: var(--accent-ink); } +button.primary:disabled { opacity: 0.45; cursor: not-allowed; } +button.secondary { background: var(--surface-2); color: var(--text); border-color: var(--border); } +button.secondary:hover { border-color: var(--muted); } + +/* ---------- output ---------- */ + +.output { min-width: 0; display: grid; gap: 16px; outline: none; } + +.empty { padding: 28px 24px; background: var(--surface); border: 1px dashed var(--border); border-radius: var(--radius); display: grid; gap: 14px; } +.empty h2 { font-size: 1.25rem; text-transform: none; letter-spacing: -0.01em; color: var(--text); font-weight: 650; } +.empty p { color: var(--muted); max-width: 60ch; } +.steps { margin: 0; padding-left: 1.2em; display: grid; gap: 6px; } +.steps strong { color: var(--accent-strong); } + +.card { + background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); + box-shadow: var(--shadow); padding: 16px 18px; display: grid; gap: 12px; min-width: 0; +} + +.callout { padding: 12px 14px; border-radius: 10px; border: 1px solid var(--border); background: var(--surface-2); } +.callout.error { background: var(--error-soft); border-color: var(--bad); color: var(--text); display: grid; gap: 4px; } +.callout.error strong { color: var(--bad); } +.callout.warn { background: var(--warn-soft); border-color: var(--warn); color: var(--text); } + +.result-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; } +.result-head h2 { font-size: 1.25rem; text-transform: none; letter-spacing: -0.01em; color: var(--text); font-weight: 650; } +.toolbar { display: flex; flex-wrap: wrap; gap: 8px; } +.chip { + font: inherit; font-size: 0.8125rem; padding: 6px 12px; border-radius: 999px; cursor: pointer; + background: var(--surface); color: var(--text); border: 1px solid var(--border); +} +.chip:hover { border-color: var(--muted); } +.primary-chip { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); font-weight: 600; } +.primary-chip:hover { background: var(--accent-strong); border-color: var(--accent-strong); } + +.stats { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); } +.stat { + display: grid; gap: 2px; padding: 12px 14px; background: var(--surface); + border: 1px solid var(--border); border-radius: var(--radius); +} +.stat-label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); font-weight: 650; } +.stat-value { font-size: 1.35rem; font-variant-numeric: tabular-nums; letter-spacing: -0.01em; } +.stat-value .was { color: var(--muted); } +.stat-value strong { color: var(--accent-strong); } +.stat-note { font-size: 0.8125rem; color: var(--muted); } + +/* ---------- progress ---------- */ + +.progress { gap: 10px; } +.bar { height: 8px; border-radius: 999px; background: var(--surface-2); overflow: hidden; } +.bar-fill { height: 100%; width: 0; background: var(--accent); border-radius: 999px; transition: width 0.3s; } +.bar.indeterminate .bar-fill { width: 35% !important; animation: slide 1.4s ease-in-out infinite; } +@keyframes slide { 0% { transform: translateX(-100%); } 100% { transform: translateX(300%); } } +@media (prefers-reduced-motion: reduce) { + .bar.indeterminate .bar-fill { animation: none; width: 100% !important; opacity: 0.5; } +} +.progress-meta { display: flex; justify-content: space-between; gap: 8px; flex-wrap: wrap; font-size: 0.8125rem; } +.log { margin: 0; padding: 8px 10px 8px 28px; max-height: 9rem; overflow: auto; font-size: 0.75rem; color: var(--muted); background: var(--surface-2); border-radius: 8px; } + +/* ---------- sequence ---------- */ + +.seq-wrap { display: grid; gap: 10px; min-width: 0; } +.seq-tools { display: flex; align-items: center; justify-content: space-between; gap: 8px 16px; flex-wrap: wrap; } +.toggles { display: flex; gap: 14px; flex-wrap: wrap; } +.note.warn { color: var(--warn); font-size: 0.8125rem; } + +.seq { + font-family: var(--mono); font-size: 0.8125rem; line-height: 1.35; overflow-x: auto; + padding: 10px 12px; background: var(--surface-2); border-radius: 10px; max-height: 26rem; overflow-y: auto; + font-variant-ligatures: none; +} +.block { display: flex; gap: 12px; padding: 3px 0; white-space: nowrap; } +.pos { color: var(--muted); white-space: pre; user-select: none; text-align: right; flex: none; } +.line { display: block; } +.line .cell { display: inline-block; width: 4ch; } +.line.aa { color: var(--muted); font-size: 0.75rem; display: none; } +.seq.show-aa .line.aa { display: block; } +.seq.show-changes .cell.chg { background: var(--accent-soft); color: var(--accent-strong); border-radius: 3px; font-weight: 600; } +.cell.hit { color: var(--bad); text-decoration: underline wavy; text-underline-offset: 3px; font-weight: 700; } + +/* ---------- comparison table ---------- */ + +.compare { width: 100%; border-collapse: collapse; font-size: 0.875rem; } +.compare th, .compare td { padding: 8px 10px; border-bottom: 1px solid var(--border); text-align: left; } +.compare thead th { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); } +.compare tbody th { font-weight: 500; } +.compare tbody tr:last-child th, .compare tbody tr:last-child td { border-bottom: 0; } +.compare .num { text-align: right; font-variant-numeric: tabular-nums; } +.compare .strong { font-weight: 650; } +.verdict { white-space: nowrap; } +.verdict.good { color: var(--good); } +.verdict.bad { color: var(--bad); font-weight: 600; } +.verdict.same { color: var(--muted); } +.card:has(.compare) { overflow-x: auto; } + +/* ---------- chart ---------- */ + +.figure { margin: 0; display: grid; gap: 8px; overflow-x: auto; } +svg.chart { width: 100%; min-width: 560px; height: auto; display: block; } +.chart .band { fill: var(--accent-soft); opacity: 0.7; } +.chart .grid { stroke: var(--border); stroke-width: 1; } +.chart .grid.faint { stroke-dasharray: 2 4; opacity: 0.6; } +.chart .tick { fill: var(--muted); font: 11px var(--sans); } +.chart .target { stroke: var(--accent-strong); stroke-width: 1; stroke-dasharray: 5 4; } +.chart .line { fill: none; stroke-width: 1.8; stroke-linejoin: round; stroke-linecap: round; } +.chart .line.before, .chart .dot.before { stroke: var(--before); fill: none; opacity: 0.9; } +.chart .line.after { stroke: var(--accent); stroke-width: 2.2; } +.chart .dot.before { fill: var(--before); } +.chart .dot.after { fill: var(--accent); } +.chart .cursor { stroke: var(--muted); stroke-width: 1; } +.chart .overlay { fill: transparent; cursor: crosshair; } +.legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 0; padding: 0; list-style: none; font-size: 0.8125rem; color: var(--muted); } +.legend li { display: inline-flex; align-items: center; gap: 6px; } +.swatch { display: inline-block; width: 18px; height: 3px; border-radius: 2px; } +.swatch.before { background: var(--before); } +.swatch.after { background: var(--accent); height: 4px; } +.swatch.band { background: var(--accent-soft); height: 10px; border: 1px solid var(--accent); } +.swatch.target { height: 0; border-top: 2px dashed var(--accent-strong); background: none; } +.readout { font-size: 0.8125rem; color: var(--muted); min-height: 1.4em; font-variant-numeric: tabular-nums; } + +/* ---------- score breakdown ---------- */ + +.terms { display: grid; gap: 10px; } +.term { display: grid; grid-template-columns: 8.5rem minmax(0, 1fr) auto; align-items: center; gap: 12px; font-size: 0.875rem; } +.term-bars { display: grid; gap: 3px; } +.track { display: block; height: 7px; background: var(--surface-2); border-radius: 4px; overflow: hidden; } +.fill { display: block; height: 100%; border-radius: 4px; } +.fill.before { background: var(--before); } +.fill.after { background: var(--accent); } +.term-values { font-size: 0.75rem; color: var(--muted); text-align: right; white-space: nowrap; } +@media (max-width: 560px) { + .term { grid-template-columns: 1fr; gap: 4px; } + .term-values { text-align: left; } + .weights { grid-template-columns: 1fr; } +} + +.run-info { text-align: center; } +.noscript { padding: 16px; text-align: center; } diff --git a/web/src/types.ts b/web/src/types.ts new file mode 100644 index 0000000..b158dd7 --- /dev/null +++ b/web/src/types.ts @@ -0,0 +1,117 @@ +/** Shapes of the JSON the codonopt server sends. Mirrors codonopt/server.py. */ + +export interface Defaults { + gc_target: number; + gc_range: [number, number]; + gc_window: number; + gc_step: number; + repeat_k: number; + hairpin_stem: number; + hairpin_min_loop: number; + hairpin_max_loop: number; + max_homopolymer: number; + seconds: number; +} + +export interface EffortLevel { + max_sweeps: number; + restarts: number; + anneal_steps: number; +} + +export interface Meta { + version: string; + tables: { name: string; description: string }[]; + default_table: string; + motif_groups: Record; + restriction_sites: Record; + regulatory_motifs: Record; + splice_backends: string[]; + maxent_available: boolean; + weights: Record; + defaults: Defaults; + effort: Record; + limits: { max_residues: number; max_seconds: number }; + example: { name: string; protein: string }; +} + +export interface Measures { + length: number; + gc_fraction: number; + gc_windows_below_range: number; + gc_windows_above_range: number; + cai: number; + repeat_k: number; + redundant_kmers: number; + hairpin_pairs: number; + longest_hairpin_stem: number; + longest_homopolymer: number; + homopolymer_excess_bases: number; + forbidden_motif_hits: number; + forbidden_motifs_present: string[]; + splice_backend?: string; + splice_donor_sites?: number; + splice_acceptor_sites?: number; +} + +export interface GcProfile { + window: number; + step: number; + range: [number, number]; + target: number; + starts: number[]; + initial: number[]; + final: number[]; +} + +export interface MotifHit { + name: string; + length: number; + positions: number[]; +} + +export interface Result { + name: string; + kind: "protein" | "dna"; + protein: string; + sequence: string; + initial_sequence: string; + cancelled: boolean; + codon_usage_table: string; + score: { + initial: number; + final: number; + improvement: number; + initial_terms: Record; + final_terms: Record; + }; + search: { + restarts_run: number; + greedy_sweeps: number; + moves_evaluated: number; + moves_accepted: number; + seconds: number; + hit_time_limit: boolean; + }; + initial: Measures; + final: Measures; + gc: GcProfile; + motif_hits: MotifHit[]; + fasta: string; +} + +export type JobStatus = "running" | "done" | "cancelled" | "error"; + +export interface Job { + id: string; + status: JobStatus; + elapsed: number; + max_seconds: number; + restarts_total: number; + restarts_done: number; + messages: string[]; + error?: string; + result?: Result; +} + +export type Kind = "auto" | "protein" | "dna"; diff --git a/web/tests/e2e.spec.ts b/web/tests/e2e.spec.ts new file mode 100644 index 0000000..f63b4be --- /dev/null +++ b/web/tests/e2e.spec.ts @@ -0,0 +1,129 @@ +import { expect, test, type Page } from "@playwright/test"; + +const SHOTS = process.env.CODONOPT_SHOTS ?? ""; +const shot = async (page: Page, name: string): Promise => { + if (SHOTS) await page.screenshot({ path: `${SHOTS}/${name}.png`, fullPage: true }); +}; + +/** Pick the quick setting so the suite stays fast. */ +async function quick(page: Page): Promise { + await page.locator('label[for="effort-quick"]').click(); +} + +test.beforeEach(async ({ page }) => { + await page.goto("/"); + await expect(page.locator("#run")).toBeEnabled({ timeout: 10_000 }).catch(() => undefined); +}); + +test("loads with no console errors and a disabled Optimise button", async ({ page }) => { + const errors: string[] = []; + page.on("console", (m) => m.type() === "error" && errors.push(m.text())); + page.on("pageerror", (e) => errors.push(String(e))); + await page.goto("/"); + await expect(page.locator("#empty")).toBeVisible(); + await expect(page.locator("#run")).toBeDisabled(); + await expect(page.locator("#table option").first()).toBeAttached(); + expect(errors).toEqual([]); + await shot(page, "01-empty"); +}); + +test("optimises the example and shows every result section", async ({ page }) => { + await page.locator("#btn-example").click(); + await expect(page.locator("#run")).toBeEnabled(); + await expect(page.locator("#detected")).not.toBeEmpty(); + await quick(page); + await page.locator("#run").click(); + await expect(page.locator(".progress")).toBeVisible(); + await expect(page.locator(".result-head")).toBeVisible({ timeout: 45_000 }); + await expect(page.locator(".stats .stat").first()).toBeVisible(); + await expect(page.locator("table.compare")).toBeVisible(); + await expect(page.locator("svg.chart")).toBeVisible(); + await expect(page.locator(".seq .cell").first()).toBeVisible(); + await expect(page.locator(".callout.error")).toHaveCount(0); + + // The chart reads out a window on hover. + await page.locator("svg.chart .overlay").hover({ position: { x: 200, y: 40 } }); + await expect(page.locator(".readout")).toContainText("Bases"); + + // Download works (a blob, so it has to survive the content security policy). + const [download] = await Promise.all([ + page.waitForEvent("download"), + page.getByRole("button", { name: /download fasta/i }).click(), + ]); + expect(download.suggestedFilename()).toMatch(/\.(fna|fa|fasta)$/); + await shot(page, "02-result"); +}); + +test("keeps the protein unchanged (the sequence is a synonymous recoding)", async ({ page }) => { + await page.locator("#sequence").fill("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVV"); + await expect(page.locator("#detected")).toContainText(/protein/i); + await quick(page); + await page.locator("#run").click(); + await expect(page.locator(".seq .cell").first()).toBeVisible({ timeout: 45_000 }); + const shown = await page.locator(".line.aa").evaluateAll((rows) => + rows.map((r) => Array.from(r.querySelectorAll(".cell")).map((c) => c.textContent).join("")).join(""), + ); + expect(shown.startsWith("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVV")).toBe(true); +}); + +test("explains problems instead of failing silently", async ({ page }) => { + await page.locator("#sequence").fill("MKT*AY1"); + await expect(page.locator("#detected")).toBeVisible(); + // Whatever the badge says, running must either be blocked or give a readable error. + if (await page.locator("#run").isEnabled()) { + await page.locator("#run").click(); + await expect(page.locator(".callout.error")).toBeVisible({ timeout: 15_000 }); + } else { + await expect(page.locator("#detected")).toHaveText(/\S/); + } + await shot(page, "03-error"); +}); + +test("can cancel a long run and keeps the best result so far", async ({ page }) => { + await page.locator("#btn-example").click(); + await page.locator("#seconds").fill("60"); + await page.locator('label[for="effort-thorough"]').click(); + await page.locator("#run").click(); + await expect(page.locator("#cancel")).toBeVisible(); + await page.waitForTimeout(1500); + await page.locator("#cancel").click(); + await expect(page.locator(".result-head")).toBeVisible({ timeout: 20_000 }); + await expect(page.locator(".callout.warn")).toContainText("Stopped early"); + await expect(page.locator("#run")).toBeEnabled(); + await expect(page.locator("#cancel")).toBeHidden(); +}); + +test("offers several built-in codon-usage tables", async ({ page }) => { + await page.locator("#btn-example").click(); + await page.locator("#table").selectOption({ index: 0 }); + const options = await page.locator("#table option").allTextContents(); + expect(options.length).toBeGreaterThan(1); +}); + +for (const [name, scheme] of [["light", "light"], ["dark", "dark"]] as const) { + test(`renders in ${name} mode`, async ({ browser }) => { + const context = await browser.newContext({ colorScheme: scheme, viewport: { width: 1280, height: 900 } }); + const page = await context.newPage(); + await page.goto("/"); + await page.locator("#btn-example").click(); + await quick(page); + await page.locator("#run").click(); + await expect(page.locator("svg.chart")).toBeVisible({ timeout: 45_000 }); + await shot(page, `04-${name}`); + await context.close(); + }); +} + +test("works at phone width without horizontal page scroll", async ({ browser }) => { + const context = await browser.newContext({ viewport: { width: 390, height: 800 } }); + const page = await context.newPage(); + await page.goto("/"); + await page.locator("#btn-example").click(); + await quick(page); + await page.locator("#run").click(); + await expect(page.locator("svg.chart")).toBeVisible({ timeout: 45_000 }); + const overflow = await page.evaluate(() => document.documentElement.scrollWidth - document.documentElement.clientWidth); + expect(overflow).toBeLessThanOrEqual(1); + await shot(page, "05-phone"); + await context.close(); +}); diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..77fe305 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "Bundler", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "isolatedModules": true, + "skipLibCheck": true, + "noEmit": true + }, + "include": ["src"] +} From 23551859a60591bfdd07ef512558969e155a691e Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 10 Oct 2026 22:02:50 +0200 Subject: [PATCH 2/6] Add CI: Python 3.10-3.13 tests, interface type-check, build-drift check and e2e Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01Wq3oxFtutXhnAgmzKztG9g --- .github/workflows/ci.yml | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..b27b35a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,52 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +permissions: + contents: read + +jobs: + python: + name: Python ${{ matrix.python }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python: ["3.10", "3.11", "3.12", "3.13"] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python }} + - run: pip install -e ".[dev]" + - run: pytest -q + + web: + name: Interface (type-check, build, end-to-end) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + cache-dependency-path: web/package-lock.json + - run: pip install -e . + - run: npm ci + working-directory: web + - name: Type-check and verify the committed build is current + run: npm run check + working-directory: web + - run: npx playwright install --with-deps chromium + working-directory: web + - name: End-to-end tests against the Python server + run: npm test + working-directory: web + env: + CI: "true" From fa7b5a5c33903ef7ed3ba0547a76f7de16e0e951 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 10 Oct 2026 22:05:17 +0200 Subject: [PATCH 3/6] Rewrite the README for presentation: badges, interface screenshot, structure Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01Wq3oxFtutXhnAgmzKztG9g --- README.md | 123 ++++++++++++++++++++++++++------------- docs/interface-dark.png | Bin 0 -> 318873 bytes docs/interface-light.png | Bin 0 -> 317764 bytes 3 files changed, 84 insertions(+), 39 deletions(-) create mode 100644 docs/interface-dark.png create mode 100644 docs/interface-light.png diff --git a/README.md b/README.md index 9c502f4..c79142d 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,52 @@ -# computational_codon_optimization +

codonopt

+ +

+ Codon optimization for gene synthesis and expression.
+ Rewrite the DNA of an open reading frame so it is easier to make and express,
+ without changing the protein it encodes. +

+ +

+ CI + Python 3.10+ + Runtime dependencies: none + Interface: TypeScript + Tests: pytest and Playwright + License: GPL v3 +

+ +

+ + + The codonopt interface after optimizing a 120-residue protein: 16 issues down to 0, with the changed codons highlighted + +

+ +Give it a protein, or an existing coding sequence, and it returns a synonymous +sequence that balances GC content, repeats, hairpins, homopolymers, forbidden +motifs, cryptic splice sites and host codon usage in a single score. It is a +pure-Python package with no runtime dependencies, a command line, a Python API +and a local web interface. -Rewrites the DNA of an open reading frame so it is easier to synthesise and -express, without changing the protein it encodes. +## Highlights -Give it a protein (or an existing coding sequence) and it returns a synonymous -sequence that balances GC content, repeats, hairpins, homopolymers, forbidden -motifs, cryptic splice sites and host codon usage in a single score. +- **One objective, not four passes.** Every concern is a weighted penalty in one score, so fixing one problem cannot silently undo another. +- **Fast.** Scoring is incremental: a codon swap re-scores only what sits near it. An 800-residue protein takes 19 s, against 234 s for the scripts this replaces. +- **The protein cannot change.** The only move is swapping a codon for a synonymous one, so correctness holds by construction, not by checking afterwards. +- **Three ways in.** `codonopt` on the command line, a small Python API, and a browser or desktop interface. +- **Checked against brute force.** The tests compare the incremental score with a from-scratch recomputation and with simple reference implementations. ## Quickstart ```bash pip install -e . +codonopt gui # the web interface (opens in your browser) +``` + +Or from the command line: + +```bash codonopt optimize --add-stop --avoid golden_gate,EcoRI --seed 5 --splice-backend motif \ --protein MKWVTFISLLLLFSSAYSRGVFRRDTHKSEIAHRFKDLGEENFKALVLIAFAQYLQQCPF ``` @@ -38,17 +73,20 @@ Splice acceptor sites 1 0 `--json FILE` writes the same numbers, the per-term score and the sequence. -## Interface +## Web interface -```bash -pip install -e . # add ".[gui]" for a native window (pywebview) -codonopt gui # or: python -m codonopt gui -``` +`codonopt gui` starts a local server and opens the interface in a native window +if [pywebview](https://pywebview.flowrl.com/) is installed (`pip install -e ".[gui]"`), +otherwise in your browser. Paste or open a protein or DNA sequence, pick a host +table and what to keep out, and press **Optimize**. You get: -Paste a protein or DNA sequence, choose a host table and what to keep out, and press Optimize. You get the -sequence with changed codons highlighted, a before/after table, a GC plot and the score breakdown, plus -copy and download buttons. It runs locally (loopback only, token-protected), needs no Node, and without -pywebview it opens in your browser. Add `--no-window --no-browser` to just serve it. +- the sequence with every changed codon highlighted, and the protein above it; +- a before/after table, a GC plot along the sequence and the score breakdown; +- copy and download for the DNA, FASTA and a report; runs can be cancelled and keep the best result so far. + +It is local only: the server binds to loopback, checks Host and Origin, requires +a per-run token, sends a strict content security policy and never touches your +files. Add `--no-window --no-browser` to just serve it. ## What it optimizes @@ -63,10 +101,7 @@ pywebview it opens in your browser. Add `--no-window --no-browser` to just serve | Cryptic splice sites | Unwanted splicing of a transgene | MaxEntScan or a consensus screen | | Codon usage | Rare codons slow translation | host codon adaptation index | -The protein cannot change: the only move the optimizer has is swapping a codon -for a synonymous one. - -## Commands +## Command line ```bash codonopt optimize --protein-fasta gene.faa --out gene.fna # design from a protein @@ -89,7 +124,7 @@ codonopt motifs # known motifs and g `codonopt optimize --help` lists the rest. MaxEntScan is optional and not on PyPI: `pip install "git+https://github.com/kepbod/maxentpy.git"`. -## Python +## Python API ```python from codonopt import DesignConfig, OptimizerSettings, get_table, optimize, resolve_motifs @@ -104,8 +139,8 @@ improves an existing sequence. ## How it works -Each penalty term is tied to a position — a GC window, a homopolymer, a motif -match, a splice window, a codon — so a codon swap only re-scores what sits near +Each penalty term is tied to a position (a GC window, a homopolymer, a motif +match, a splice window, a codon), so a codon swap only re-scores what sits near it. Repeats and hairpins are not local, so an incrementally updated k-mer index carries them. A candidate swap costs time proportional to the window sizes, not the sequence length. @@ -116,6 +151,29 @@ followed by simulated annealing and several restarts. incremental path against it and against brute-force implementations in `codonopt.metrics`. +## Development + +The Python package needs nothing but Python. The interface is written in +TypeScript in [`web/`](web/) and compiled with esbuild to plain HTML, CSS and +JavaScript in `src/codonopt/web/`. That output is committed, so running the +interface never needs Node; Node is only for working on it. + +```bash +pip install -e ".[dev]" && pytest # Python side + +cd web && npm install +npm run build # regenerate src/codonopt/web +npm run check # type-check, and fail if the committed build is stale +npm test # Playwright end-to-end tests against the real Python server +``` + +``` +src/codonopt/ optimizer, scoring, CLI and the local server (stdlib only) +web/ TypeScript and CSS sources, build script, Playwright tests +benchmarks/ reproducible performance comparison +legacy/ the two original scripts this replaces, kept for reference +``` + ## History This replaces two work-in-progress scripts, kept in [`legacy/`](legacy/). They @@ -126,23 +184,6 @@ takes 19 s instead of 234 s and ends with a better codon adaptation index (0.90 vs 0.72) and no forbidden motifs (vs four). Details and a reproducible benchmark are in [`legacy/README.md`](legacy/README.md). -## Development - -```bash -pip install -e ".[dev]" -pytest -``` - -The interface is written in TypeScript in `web/` and compiled to plain HTML, CSS and JS in -`src/codonopt/web/`, which is committed so the Python side never needs Node: - -```bash -cd web && npm install -npm run build # regenerate src/codonopt/web -npm run check # type-check and fail if the committed build is stale -npm test # Playwright end-to-end tests against the real Python server -``` - ## Limitations - Hairpins are inverted repeats, not free-energy folds. @@ -150,3 +191,7 @@ npm test # Playwright end-to-end tests against the real Python server for production work. The consensus splice screen is a filter, not a model. - The search is local. A given `--seed` is reproducible, but another seed may do slightly better; use `--restarts` or `--anneal` when it counts. + +## License + +[GPL-3.0](LICENSE) © Thom de Hoog diff --git a/docs/interface-dark.png b/docs/interface-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..12b3b4f759a0b2c177f2de631b99531716de297a GIT binary patch literal 318873 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

Hm@$Zo3ijE%#2jDuWh%*Xi4@wFq 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 GKmHdyl9}fK literal 0 HcmV?d00001 diff --git a/docs/interface-light.png b/docs/interface-light.png new file mode 100644 index 0000000000000000000000000000000000000000..9060f87a1599ac40f16810cc922e791c0b861851 GIT binary patch literal 317764 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≫sJEEaWJ@{m_G!^b}X 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 z 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�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%0AE2j`kBMcSnkGTa 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 R&EIkNm-1@Qi=LVU{uj%(5t0A^ literal 0 HcmV?d00001 From d81bb14fae35395c0c780c7b958c6b4d2cf4e5a3 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 11 Oct 2026 00:44:10 +0200 Subject: [PATCH 4/6] Fix job-handling races, validation gaps and flaky end-to-end tests Found by reviewing the interface branch. Client: - a second submit before the first POST answered started a second job whose timer was never cleared; the page then showed whichever finished first - a poll answering after its job was replaced painted the old result over the new run and cleared the new run's timer; polls now check they are current - a failed Stop left the button dead on "Stopping..."; it now reverts and says the run is still going - startup failures and 2xx responses with no JSON body left a silent dead page - unreadable or oversized dropped files were ignored without a word - the form is inert until the defaults arrive, so early typing is not wiped - copy buttons clicked twice kept the word "Copied" as their label - aria-live moved off the whole results region onto a small status line Validation: - an empty custom codon table silently optimised against the human table - too-long DNA showed a green badge; the limit now counts codons, and an appended stop codon - integers too wide for a float, or wider than int() parses, escaped as a 500 Tests and CI: wait on a real readiness signal instead of a dead 10 s sleep (the suite drops from 1.8 min to 35 s), watch for browser errors in every test, take a per-run port, keep traces and screenshots on failure, retry twice in CI, and run the MaxEntScan splice path that CI never covered. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Wq3oxFtutXhnAgmzKztG9g --- .github/workflows/ci.yml | 42 +++++++-- src/codonopt/server.py | 17 +++- src/codonopt/web/app.css | 2 +- src/codonopt/web/app.js | 10 +-- src/codonopt/web/index.html | 8 +- tests/test_server.py | 20 +++++ web/build.mjs | 34 ++++++-- web/playwright.config.ts | 18 ++-- web/src/api.ts | 10 ++- web/src/detect.ts | 20 ++++- web/src/form.ts | 12 +++ web/src/index.html | 8 +- web/src/main.ts | 152 ++++++++++++++++++++++++-------- web/src/results.ts | 41 +++++++-- web/src/styles.css | 1 + web/tests/e2e.spec.ts | 170 +++++++++++++++++++++++++++++------- 16 files changed, 457 insertions(+), 108 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b27b35a..f4629c2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,31 +8,54 @@ on: permissions: contents: read +# A new push makes the previous run pointless. +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + jobs: python: name: Python ${{ matrix.python }} runs-on: ubuntu-latest + timeout-minutes: 20 strategy: fail-fast: false matrix: python: ["3.10", "3.11", "3.12", "3.13"] steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@v5 + - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python }} - run: pip install -e ".[dev]" - run: pytest -q + splice: + name: Python 3.12 with MaxEntScan + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v5 + - uses: actions/setup-python@v6 + with: + python-version: "3.12" + # The default splice backend prefers MaxEntScan when it is installed, so + # without this job that path is never exercised in CI. + - run: pip install -e ".[dev]" "git+https://github.com/kepbod/maxentpy.git" + - name: Confirm MaxEntScan really is in use + run: python -c "from codonopt.splice import maxent_available; assert maxent_available()" + - run: pytest -q + web: name: Interface (type-check, build, end-to-end) runs-on: ubuntu-latest + timeout-minutes: 30 steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@v5 + - uses: actions/setup-python@v6 with: python-version: "3.12" - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 22 cache: npm @@ -50,3 +73,12 @@ jobs: working-directory: web env: CI: "true" + # Traces and screenshots, so a failure here can be read rather than guessed at. + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: playwright-report + path: | + web/playwright-report + web/test-results + retention-days: 7 diff --git a/src/codonopt/server.py b/src/codonopt/server.py index fbcf80e..0dbdb8f 100644 --- a/src/codonopt/server.py +++ b/src/codonopt/server.py @@ -156,8 +156,13 @@ def _number( label = label or key.replace("_", " ") if isinstance(value, bool) or not isinstance(value, (int, float)): raise RequestError(f"{label} must be a number") - if not math.isfinite(value): - raise RequestError(f"{label} must be a finite number") + try: + # A JSON integer has no width limit, so this is where one too large for + # a float arrives; it is a bad request, not a server fault. + if not math.isfinite(value): + raise RequestError(f"{label} must be a finite number") + except OverflowError: + raise RequestError(f"{label} must be between {low:g} and {high:g}") from None if integer and int(value) != value: raise RequestError(f"{label} must be a whole number") if not low <= value <= high: @@ -201,6 +206,10 @@ def _build_table(payload: dict): stripped = text.lstrip() fmt = "json" if stripped.startswith("{") else ("tsv" if "\t" in text else "csv") return table_from_text(text, fmt, name="custom", source="custom table") + if text is not None and "table" not in payload: + # A custom table was asked for and left blank. Falling back to a + # built-in host here would optimise against the wrong organism. + raise RequestError("The custom codon table is empty; paste one or choose a host.") name = payload.get("table", "human") if not isinstance(name, str): raise RequestError("table must be a name") @@ -634,8 +643,10 @@ def _start_job(self) -> None: HTTPStatus.REQUEST_ENTITY_TOO_LARGE, "That request is too large." ) try: + # ValueError also covers a number with more digits than int() will + # parse (CPython's 4300-digit limit). payload = json.loads(self.rfile.read(length) or b"null") - except (UnicodeDecodeError, json.JSONDecodeError): + except (UnicodeDecodeError, ValueError): return self._error(HTTPStatus.BAD_REQUEST, "The request is not valid JSON.") try: job = self.app.jobs.start(build_request(payload)) diff --git a/src/codonopt/web/app.css b/src/codonopt/web/app.css index 8c2d460..fe553b0 100644 --- a/src/codonopt/web/app.css +++ b/src/codonopt/web/app.css @@ -1 +1 @@ -:root{--bg: #f4f6f4;--surface: #ffffff;--surface-2: #eef1ee;--text: #17201e;--muted: #56635f;--border: #d9dfdb;--accent: #0f766e;--accent-strong: #0b5a54;--accent-ink: #ffffff;--accent-soft: #d6eeea;--good: #146c37;--bad: #b42318;--warn: #8a4b08;--warn-soft: #fdecc8;--error-soft: #fde4e1;--before: #7b8794;--focus: #1d4ed8;--shadow: 0 1px 2px rgb(16 24 22 / 8%), 0 4px 16px rgb(16 24 22 / 5%);--radius: 12px;--mono: ui-monospace, "SF Mono", "Cascadia Mono", "Roboto Mono", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}@media(prefers-color-scheme:dark){:root{--bg: #0e1413;--surface: #161e1c;--surface-2: #1d2725;--text: #e5ece9;--muted: #98a7a1;--border: #2a3835;--accent: #3fb6aa;--accent-strong: #7fd6cc;--accent-ink: #06201d;--accent-soft: #17403b;--good: #5fd38b;--bad: #ff8a80;--warn: #f2b45a;--warn-soft: #3a2a10;--error-soft: #3b1a17;--before: #8794a3;--focus: #8ab4ff;--shadow: 0 1px 2px rgb(0 0 0 / 40%)}}*{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.5 var(--sans)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}h1,h2,h3,p{margin:0}h1{font-size:1.15rem;line-height:1.2;letter-spacing:-.01em}h2{font-size:.8125rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:650}h3{font-size:1rem}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.mono{font-family:var(--mono)}.hint{color:var(--muted);font-size:.8125rem}.top{max-width:1280px;margin:0 auto;padding:16px 16px 4px;display:flex;align-items:center;justify-content:space-between;gap:12px}.brand{display:flex;align-items:center;gap:12px}.brand p{color:var(--muted);font-size:.8125rem}.logo{width:36px;height:36px;flex:none}.logo-bg{fill:var(--accent)}.logo-strand{fill:none;stroke:var(--accent-ink);stroke-width:2.4;stroke-linecap:round}.version{color:var(--muted);font:.75rem var(--mono)}.app{max-width:1280px;margin:0 auto;padding:12px 16px 48px;display:grid;gap:20px;grid-template-columns:minmax(0,1fr)}@media(min-width:980px){.app{grid-template-columns:430px minmax(0,1fr);align-items:start}.panel{position:sticky;top:16px;max-height:calc(100vh - 32px)}.panel-scroll{overflow-y:auto}}.panel{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.panel-scroll{padding:4px 18px 8px;min-height:0}.actions{position:sticky;bottom:0;display:flex;gap:8px;padding:12px 18px;background:var(--surface);border-top:1px solid var(--border);border-radius:0 0 var(--radius) var(--radius)}.group{padding:16px 0;border-bottom:1px solid var(--border);display:grid;gap:10px}.group:last-child{border-bottom:0}.group-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.tools{display:flex;gap:12px}.row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}textarea,input[type=text],input[type=number],select{width:100%;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 10px}textarea{font-family:var(--mono);font-size:.8125rem;line-height:1.45;resize:vertical;min-height:7rem}input::placeholder,textarea::placeholder{color:var(--muted);opacity:.8}textarea:hover,input:hover,select:hover{border-color:color-mix(in srgb,var(--border),var(--text) 25%)}.field{display:grid;gap:4px;min-width:0}.field>span,.small-label{font-size:.8125rem;color:var(--muted)}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.grid3 .wide{grid-column:span 2}.link{background:none;border:0;padding:0;font:inherit;font-size:.8125rem;color:var(--accent-strong);cursor:pointer;text-decoration:underline;text-underline-offset:3px}.link:hover{text-decoration-thickness:2px}.check{display:inline-flex;align-items:center;gap:6px;font-size:.875rem;cursor:pointer}.check input{width:16px;height:16px;accent-color:var(--accent)}.seg{position:relative;display:inline-flex;margin:0;padding:2px;min-width:0;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}.seg input{position:absolute;opacity:0;pointer-events:none}.seg label{padding:5px 12px;border-radius:8px;cursor:pointer;font-size:.875rem;color:var(--muted)}.seg input:checked+label{background:var(--surface);color:var(--text);font-weight:600;box-shadow:0 1px 2px #00000026}.seg input:focus-visible+label{outline:2px solid var(--focus);outline-offset:1px}.detected{font-size:.8125rem;color:var(--muted)}.detected.ok{color:var(--accent-strong)}.detected.error{color:var(--bad)}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip-check{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;font-size:.8125rem;border:1px solid var(--border);border-radius:999px;cursor:pointer;background:var(--surface)}.chip-check:has(input:checked){background:var(--accent-soft);border-color:var(--accent);color:var(--accent-strong);font-weight:600}.chip-check input{accent-color:var(--accent)}.advanced>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px}.advanced>summary::-webkit-details-marker{display:none}.advanced>summary:before{content:"\25b8";color:var(--muted);transition:transform .15s}.advanced[open]>summary:before{transform:rotate(90deg)}.advanced[open]{gap:12px}.weights{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}button.primary,button.secondary{font:inherit;font-weight:650;border-radius:10px;padding:10px 16px;cursor:pointer;border:1px solid transparent;flex:1}button.primary{background:var(--accent);color:var(--accent-ink)}button.primary:hover:not(:disabled){background:var(--accent-strong);color:var(--accent-ink)}button.primary:disabled{opacity:.45;cursor:not-allowed}button.secondary{background:var(--surface-2);color:var(--text);border-color:var(--border)}button.secondary:hover{border-color:var(--muted)}.output{min-width:0;display:grid;gap:16px;outline:none}.empty{padding:28px 24px;background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius);display:grid;gap:14px}.empty h2{font-size:1.25rem;text-transform:none;letter-spacing:-.01em;color:var(--text);font-weight:650}.empty p{color:var(--muted);max-width:60ch}.steps{margin:0;padding-left:1.2em;display:grid;gap:6px}.steps strong{color:var(--accent-strong)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;display:grid;gap:12px;min-width:0}.callout{padding:12px 14px;border-radius:10px;border:1px solid var(--border);background:var(--surface-2)}.callout.error{background:var(--error-soft);border-color:var(--bad);color:var(--text);display:grid;gap:4px}.callout.error strong{color:var(--bad)}.callout.warn{background:var(--warn-soft);border-color:var(--warn);color:var(--text)}.result-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.result-head h2{font-size:1.25rem;text-transform:none;letter-spacing:-.01em;color:var(--text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;gap:8px}.chip{font:inherit;font-size:.8125rem;padding:6px 12px;border-radius:999px;cursor:pointer;background:var(--surface);color:var(--text);border:1px solid var(--border)}.chip:hover{border-color:var(--muted)}.primary-chip{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.primary-chip:hover{background:var(--accent-strong);border-color:var(--accent-strong)}.stats{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.stat{display:grid;gap:2px;padding:12px 14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.stat-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:650}.stat-value{font-size:1.35rem;font-variant-numeric:tabular-nums;letter-spacing:-.01em}.stat-value .was{color:var(--muted)}.stat-value strong{color:var(--accent-strong)}.stat-note{font-size:.8125rem;color:var(--muted)}.progress{gap:10px}.bar{height:8px;border-radius:999px;background:var(--surface-2);overflow:hidden}.bar-fill{height:100%;width:0;background:var(--accent);border-radius:999px;transition:width .3s}.bar.indeterminate .bar-fill{width:35%!important;animation:slide 1.4s ease-in-out infinite}@keyframes slide{0%{transform:translate(-100%)}to{transform:translate(300%)}}@media(prefers-reduced-motion:reduce){.bar.indeterminate .bar-fill{animation:none;width:100%!important;opacity:.5}}.progress-meta{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:.8125rem}.log{margin:0;padding:8px 10px 8px 28px;max-height:9rem;overflow:auto;font-size:.75rem;color:var(--muted);background:var(--surface-2);border-radius:8px}.seq-wrap{display:grid;gap:10px;min-width:0}.seq-tools{display:flex;align-items:center;justify-content:space-between;gap:8px 16px;flex-wrap:wrap}.toggles{display:flex;gap:14px;flex-wrap:wrap}.note.warn{color:var(--warn);font-size:.8125rem}.seq{font-family:var(--mono);font-size:.8125rem;line-height:1.35;overflow-x:auto;padding:10px 12px;background:var(--surface-2);border-radius:10px;max-height:26rem;overflow-y:auto;font-variant-ligatures:none}.block{display:flex;gap:12px;padding:3px 0;white-space:nowrap}.pos{color:var(--muted);white-space:pre;user-select:none;text-align:right;flex:none}.line{display:block}.line .cell{display:inline-block;width:4ch}.line.aa{color:var(--muted);font-size:.75rem;display:none}.seq.show-aa .line.aa{display:block}.seq.show-changes .cell.chg{background:var(--accent-soft);color:var(--accent-strong);border-radius:3px;font-weight:600}.cell.hit{color:var(--bad);text-decoration:underline wavy;text-underline-offset:3px;font-weight:700}.compare{width:100%;border-collapse:collapse;font-size:.875rem}.compare th,.compare td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left}.compare thead th{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.compare tbody th{font-weight:500}.compare tbody tr:last-child th,.compare tbody tr:last-child td{border-bottom:0}.compare .num{text-align:right;font-variant-numeric:tabular-nums}.compare .strong{font-weight:650}.verdict{white-space:nowrap}.verdict.good{color:var(--good)}.verdict.bad{color:var(--bad);font-weight:600}.verdict.same{color:var(--muted)}.card:has(.compare){overflow-x:auto}.figure{margin:0;display:grid;gap:8px;overflow-x:auto}svg.chart{width:100%;min-width:560px;height:auto;display:block}.chart .band{fill:var(--accent-soft);opacity:.7}.chart .grid{stroke:var(--border);stroke-width:1}.chart .grid.faint{stroke-dasharray:2 4;opacity:.6}.chart .tick{fill:var(--muted);font:11px var(--sans)}.chart .target{stroke:var(--accent-strong);stroke-width:1;stroke-dasharray:5 4}.chart .line{fill:none;stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round}.chart .line.before,.chart .dot.before{stroke:var(--before);fill:none;opacity:.9}.chart .line.after{stroke:var(--accent);stroke-width:2.2}.chart .dot.before{fill:var(--before)}.chart .dot.after{fill:var(--accent)}.chart .cursor{stroke:var(--muted);stroke-width:1}.chart .overlay{fill:transparent;cursor:crosshair}.legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:0;padding:0;list-style:none;font-size:.8125rem;color:var(--muted)}.legend li{display:inline-flex;align-items:center;gap:6px}.swatch{display:inline-block;width:18px;height:3px;border-radius:2px}.swatch.before{background:var(--before)}.swatch.after{background:var(--accent);height:4px}.swatch.band{background:var(--accent-soft);height:10px;border:1px solid var(--accent)}.swatch.target{height:0;border-top:2px dashed var(--accent-strong);background:none}.readout{font-size:.8125rem;color:var(--muted);min-height:1.4em;font-variant-numeric:tabular-nums}.terms{display:grid;gap:10px}.term{display:grid;grid-template-columns:8.5rem minmax(0,1fr) auto;align-items:center;gap:12px;font-size:.875rem}.term-bars{display:grid;gap:3px}.track{display:block;height:7px;background:var(--surface-2);border-radius:4px;overflow:hidden}.fill{display:block;height:100%;border-radius:4px}.fill.before{background:var(--before)}.fill.after{background:var(--accent)}.term-values{font-size:.75rem;color:var(--muted);text-align:right;white-space:nowrap}@media(max-width:560px){.term{grid-template-columns:1fr;gap:4px}.term-values{text-align:left}.weights{grid-template-columns:1fr}}.run-info{text-align:center}.noscript{padding:16px;text-align:center} +:root{--bg: #f4f6f4;--surface: #ffffff;--surface-2: #eef1ee;--text: #17201e;--muted: #56635f;--border: #d9dfdb;--accent: #0f766e;--accent-strong: #0b5a54;--accent-ink: #ffffff;--accent-soft: #d6eeea;--good: #146c37;--bad: #b42318;--warn: #8a4b08;--warn-soft: #fdecc8;--error-soft: #fde4e1;--before: #7b8794;--focus: #1d4ed8;--shadow: 0 1px 2px rgb(16 24 22 / 8%), 0 4px 16px rgb(16 24 22 / 5%);--radius: 12px;--mono: ui-monospace, "SF Mono", "Cascadia Mono", "Roboto Mono", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}@media(prefers-color-scheme:dark){:root{--bg: #0e1413;--surface: #161e1c;--surface-2: #1d2725;--text: #e5ece9;--muted: #98a7a1;--border: #2a3835;--accent: #3fb6aa;--accent-strong: #7fd6cc;--accent-ink: #06201d;--accent-soft: #17403b;--good: #5fd38b;--bad: #ff8a80;--warn: #f2b45a;--warn-soft: #3a2a10;--error-soft: #3b1a17;--before: #8794a3;--focus: #8ab4ff;--shadow: 0 1px 2px rgb(0 0 0 / 40%)}}*{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.5 var(--sans)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}h1,h2,h3,p{margin:0}h1{font-size:1.15rem;line-height:1.2;letter-spacing:-.01em}h2{font-size:.8125rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:650}h3{font-size:1rem}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.mono{font-family:var(--mono)}.hint{color:var(--muted);font-size:.8125rem}.top{max-width:1280px;margin:0 auto;padding:16px 16px 4px;display:flex;align-items:center;justify-content:space-between;gap:12px}.brand{display:flex;align-items:center;gap:12px}.brand p{color:var(--muted);font-size:.8125rem}.logo{width:36px;height:36px;flex:none}.logo-bg{fill:var(--accent)}.logo-strand{fill:none;stroke:var(--accent-ink);stroke-width:2.4;stroke-linecap:round}.version{color:var(--muted);font:.75rem var(--mono)}.app{max-width:1280px;margin:0 auto;padding:12px 16px 48px;display:grid;gap:20px;grid-template-columns:minmax(0,1fr)}@media(min-width:980px){.app{grid-template-columns:430px minmax(0,1fr);align-items:start}.panel{position:sticky;top:16px;max-height:calc(100vh - 32px)}.panel-scroll{overflow-y:auto}}.panel{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.panel[inert]{opacity:.55}.panel-scroll{padding:4px 18px 8px;min-height:0}.actions{position:sticky;bottom:0;display:flex;gap:8px;padding:12px 18px;background:var(--surface);border-top:1px solid var(--border);border-radius:0 0 var(--radius) var(--radius)}.group{padding:16px 0;border-bottom:1px solid var(--border);display:grid;gap:10px}.group:last-child{border-bottom:0}.group-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.tools{display:flex;gap:12px}.row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}textarea,input[type=text],input[type=number],select{width:100%;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 10px}textarea{font-family:var(--mono);font-size:.8125rem;line-height:1.45;resize:vertical;min-height:7rem}input::placeholder,textarea::placeholder{color:var(--muted);opacity:.8}textarea:hover,input:hover,select:hover{border-color:color-mix(in srgb,var(--border),var(--text) 25%)}.field{display:grid;gap:4px;min-width:0}.field>span,.small-label{font-size:.8125rem;color:var(--muted)}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.grid3 .wide{grid-column:span 2}.link{background:none;border:0;padding:0;font:inherit;font-size:.8125rem;color:var(--accent-strong);cursor:pointer;text-decoration:underline;text-underline-offset:3px}.link:hover{text-decoration-thickness:2px}.check{display:inline-flex;align-items:center;gap:6px;font-size:.875rem;cursor:pointer}.check input{width:16px;height:16px;accent-color:var(--accent)}.seg{position:relative;display:inline-flex;margin:0;padding:2px;min-width:0;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}.seg input{position:absolute;opacity:0;pointer-events:none}.seg label{padding:5px 12px;border-radius:8px;cursor:pointer;font-size:.875rem;color:var(--muted)}.seg input:checked+label{background:var(--surface);color:var(--text);font-weight:600;box-shadow:0 1px 2px #00000026}.seg input:focus-visible+label{outline:2px solid var(--focus);outline-offset:1px}.detected{font-size:.8125rem;color:var(--muted)}.detected.ok{color:var(--accent-strong)}.detected.error{color:var(--bad)}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip-check{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;font-size:.8125rem;border:1px solid var(--border);border-radius:999px;cursor:pointer;background:var(--surface)}.chip-check:has(input:checked){background:var(--accent-soft);border-color:var(--accent);color:var(--accent-strong);font-weight:600}.chip-check input{accent-color:var(--accent)}.advanced>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px}.advanced>summary::-webkit-details-marker{display:none}.advanced>summary:before{content:"\25b8";color:var(--muted);transition:transform .15s}.advanced[open]>summary:before{transform:rotate(90deg)}.advanced[open]{gap:12px}.weights{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}button.primary,button.secondary{font:inherit;font-weight:650;border-radius:10px;padding:10px 16px;cursor:pointer;border:1px solid transparent;flex:1}button.primary{background:var(--accent);color:var(--accent-ink)}button.primary:hover:not(:disabled){background:var(--accent-strong);color:var(--accent-ink)}button.primary:disabled{opacity:.45;cursor:not-allowed}button.secondary{background:var(--surface-2);color:var(--text);border-color:var(--border)}button.secondary:hover{border-color:var(--muted)}.output{min-width:0;display:grid;gap:16px;outline:none}.empty{padding:28px 24px;background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius);display:grid;gap:14px}.empty h2{font-size:1.25rem;text-transform:none;letter-spacing:-.01em;color:var(--text);font-weight:650}.empty p{color:var(--muted);max-width:60ch}.steps{margin:0;padding-left:1.2em;display:grid;gap:6px}.steps strong{color:var(--accent-strong)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;display:grid;gap:12px;min-width:0}.callout{padding:12px 14px;border-radius:10px;border:1px solid var(--border);background:var(--surface-2)}.callout.error{background:var(--error-soft);border-color:var(--bad);color:var(--text);display:grid;gap:4px}.callout.error strong{color:var(--bad)}.callout.warn{background:var(--warn-soft);border-color:var(--warn);color:var(--text)}.result-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.result-head h2{font-size:1.25rem;text-transform:none;letter-spacing:-.01em;color:var(--text);font-weight:650}.toolbar{display:flex;flex-wrap:wrap;gap:8px}.chip{font:inherit;font-size:.8125rem;padding:6px 12px;border-radius:999px;cursor:pointer;background:var(--surface);color:var(--text);border:1px solid var(--border)}.chip:hover{border-color:var(--muted)}.primary-chip{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.primary-chip:hover{background:var(--accent-strong);border-color:var(--accent-strong)}.stats{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.stat{display:grid;gap:2px;padding:12px 14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.stat-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:650}.stat-value{font-size:1.35rem;font-variant-numeric:tabular-nums;letter-spacing:-.01em}.stat-value .was{color:var(--muted)}.stat-value strong{color:var(--accent-strong)}.stat-note{font-size:.8125rem;color:var(--muted)}.progress{gap:10px}.bar{height:8px;border-radius:999px;background:var(--surface-2);overflow:hidden}.bar-fill{height:100%;width:0;background:var(--accent);border-radius:999px;transition:width .3s}.bar.indeterminate .bar-fill{width:35%!important;animation:slide 1.4s ease-in-out infinite}@keyframes slide{0%{transform:translate(-100%)}to{transform:translate(300%)}}@media(prefers-reduced-motion:reduce){.bar.indeterminate .bar-fill{animation:none;width:100%!important;opacity:.5}}.progress-meta{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:.8125rem}.log{margin:0;padding:8px 10px 8px 28px;max-height:9rem;overflow:auto;font-size:.75rem;color:var(--muted);background:var(--surface-2);border-radius:8px}.seq-wrap{display:grid;gap:10px;min-width:0}.seq-tools{display:flex;align-items:center;justify-content:space-between;gap:8px 16px;flex-wrap:wrap}.toggles{display:flex;gap:14px;flex-wrap:wrap}.note.warn{color:var(--warn);font-size:.8125rem}.seq{font-family:var(--mono);font-size:.8125rem;line-height:1.35;overflow-x:auto;padding:10px 12px;background:var(--surface-2);border-radius:10px;max-height:26rem;overflow-y:auto;font-variant-ligatures:none}.block{display:flex;gap:12px;padding:3px 0;white-space:nowrap}.pos{color:var(--muted);white-space:pre;user-select:none;text-align:right;flex:none}.line{display:block}.line .cell{display:inline-block;width:4ch}.line.aa{color:var(--muted);font-size:.75rem;display:none}.seq.show-aa .line.aa{display:block}.seq.show-changes .cell.chg{background:var(--accent-soft);color:var(--accent-strong);border-radius:3px;font-weight:600}.cell.hit{color:var(--bad);text-decoration:underline wavy;text-underline-offset:3px;font-weight:700}.compare{width:100%;border-collapse:collapse;font-size:.875rem}.compare th,.compare td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left}.compare thead th{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.compare tbody th{font-weight:500}.compare tbody tr:last-child th,.compare tbody tr:last-child td{border-bottom:0}.compare .num{text-align:right;font-variant-numeric:tabular-nums}.compare .strong{font-weight:650}.verdict{white-space:nowrap}.verdict.good{color:var(--good)}.verdict.bad{color:var(--bad);font-weight:600}.verdict.same{color:var(--muted)}.card:has(.compare){overflow-x:auto}.figure{margin:0;display:grid;gap:8px;overflow-x:auto}svg.chart{width:100%;min-width:560px;height:auto;display:block}.chart .band{fill:var(--accent-soft);opacity:.7}.chart .grid{stroke:var(--border);stroke-width:1}.chart .grid.faint{stroke-dasharray:2 4;opacity:.6}.chart .tick{fill:var(--muted);font:11px var(--sans)}.chart .target{stroke:var(--accent-strong);stroke-width:1;stroke-dasharray:5 4}.chart .line{fill:none;stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round}.chart .line.before,.chart .dot.before{stroke:var(--before);fill:none;opacity:.9}.chart .line.after{stroke:var(--accent);stroke-width:2.2}.chart .dot.before{fill:var(--before)}.chart .dot.after{fill:var(--accent)}.chart .cursor{stroke:var(--muted);stroke-width:1}.chart .overlay{fill:transparent;cursor:crosshair}.legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:0;padding:0;list-style:none;font-size:.8125rem;color:var(--muted)}.legend li{display:inline-flex;align-items:center;gap:6px}.swatch{display:inline-block;width:18px;height:3px;border-radius:2px}.swatch.before{background:var(--before)}.swatch.after{background:var(--accent);height:4px}.swatch.band{background:var(--accent-soft);height:10px;border:1px solid var(--accent)}.swatch.target{height:0;border-top:2px dashed var(--accent-strong);background:none}.readout{font-size:.8125rem;color:var(--muted);min-height:1.4em;font-variant-numeric:tabular-nums}.terms{display:grid;gap:10px}.term{display:grid;grid-template-columns:8.5rem minmax(0,1fr) auto;align-items:center;gap:12px;font-size:.875rem}.term-bars{display:grid;gap:3px}.track{display:block;height:7px;background:var(--surface-2);border-radius:4px;overflow:hidden}.fill{display:block;height:100%;border-radius:4px}.fill.before{background:var(--before)}.fill.after{background:var(--accent)}.term-values{font-size:.75rem;color:var(--muted);text-align:right;white-space:nowrap}@media(max-width:560px){.term{grid-template-columns:1fr;gap:4px}.term-values{text-align:left}.weights{grid-template-columns:1fr}}.run-info{text-align:center}.noscript{padding:16px;text-align:center} diff --git a/src/codonopt/web/app.js b/src/codonopt/web/app.js index 750999a..b87c020 100644 --- a/src/codonopt/web/app.js +++ b/src/codonopt/web/app.js @@ -1,5 +1,5 @@ -"use strict";(()=>{var A=class extends Error{constructor(n,o){super(n);this.status=o;this.name="ApiError"}},me="X-Codonopt-Token",N=class{constructor(e){this.token=e}meta(){return this.request("GET","/api/meta")}start(e){return this.request("POST","/api/jobs",e)}poll(e){return this.request("GET",`/api/jobs/${encodeURIComponent(e)}`)}cancel(e){return this.request("POST",`/api/jobs/${encodeURIComponent(e)}/cancel`)}async request(e,n,o){let i;try{i=await fetch(n,{method:e,headers:{[me]:this.token,...o===void 0?{}:{"Content-Type":"application/json"}},body:o===void 0?void 0:JSON.stringify(o),cache:"no-store"})}catch{throw new A("Cannot reach the codonopt server. Was the window or terminal that started it closed?",0)}let a=null;try{a=await i.json()}catch{}if(!i.ok){let d=a&&typeof a=="object"&&"error"in a?String(a.error):`The server answered ${i.status}.`;throw new A(d,i.status)}return a}};var fe=new Set("ACDEFGHIKLMNPQRSTVWY*"),Z=new Set("ACGTU");function ne(t,e,n){let o=t.trim();if(!o)return{state:"empty",message:"Nothing pasted yet.",kind:null,length:0};let i=o;if(o.startsWith(">")){let b=o.split(/\r?\n/),h=b.filter(_=>_.startsWith(">")).length;if(h>1)return H(`${h} FASTA records found. Paste one sequence at a time.`);i=b.slice(1).join("")}let a=i.replace(/\s+/g,"").toUpperCase();if(!a)return H("The FASTA header has no sequence under it.");let d=a.length>=9&&[...a].every(b=>Z.has(b));if((e==="auto"?d?"dna":"protein":e)==="dna"){let b=te([...a].filter(_=>!Z.has(_)));if(b.length)return H(`Not DNA: ${b.join(", ")}`);if(a.length%3)return H(`DNA \xB7 ${a.length} bases is not a whole number of codons (${a.length%3} extra).`);let h=a.length/3;return ee("dna",a.length,`DNA \xB7 ${a.length.toLocaleString()} bases, ${h} codons`)}let m=te([...a].filter(b=>!fe.has(b)));if(m.length)return H(`Not a protein letter: ${m.join(", ")}`);let r=a.indexOf("*");if(r!==-1&&r!==a.length-1)return H(`Protein \xB7 stop symbol (*) at position ${r+1}, before the end.`);if(a.length>n)return H(`Protein \xB7 ${a.length.toLocaleString()} residues; this page takes up to ${n.toLocaleString()}.`);let f=a.length===1?"residue":"residues";return ee("protein",a.length,`Protein \xB7 ${a.length.toLocaleString()} ${f}`)}function ee(t,e,n){return{state:"ok",message:n,kind:t,length:e}}function H(t){return{state:"error",message:t,kind:null,length:0}}function te(t){return[...new Set(t)].sort()}function K(t,e){for(let n of e)n==null||n===!1||t.appendChild(typeof n=="object"?n:document.createTextNode(String(n)))}function s(t,e,...n){let o=document.createElement(t);if(e){let{attrs:i,on:a,text:d,...p}=e;for(let[m,r]of Object.entries(p))r===void 0||r===!1||(m==="class"?o.className=String(r):typeof r=="boolean"?o.setAttribute(m,""):o.setAttribute(m,String(r)));for(let[m,r]of Object.entries(i??{}))o.setAttribute(m,r);if(d!==void 0&&(o.textContent=d),a)for(let[m,r]of Object.entries(a))o.addEventListener(m,r)}return K(o,n),o}var ge="http://www.w3.org/2000/svg";function E(t,e,...n){let o=document.createElementNS(ge,t);for(let[i,a]of Object.entries(e??{}))o.setAttribute(i,String(a));return K(o,n),o}function l(t){let e=document.getElementById(t);if(!e)throw new Error(`Missing #${t} in the page`);return e}function k(t,...e){t.replaceChildren(),K(t,e)}var v=(t,e=2)=>Number.isFinite(t)?t.toFixed(e):"\u2013",M=t=>Math.round(t).toLocaleString("en-US");var be={gc_global:"Overall GC",gc_window:"Local GC",repeat:"Repeats",hairpin:"Hairpins",homopolymer:"Single-base runs",motif:"Forbidden sites",splice:"Splice sites",usage:"Codon usage"},ve={golden_gate:"Golden Gate",common_cloning:"Common cloning sites",regulatory:"Poly(A) and TATA signals"},we={auto:"Automatic",maxent:"MaxEntScan",motif:"Consensus screen",none:"Off"},T=t=>l(t);function se(t){l("version").textContent=`v${t.version}`;let e=l("table");k(e,...t.tables.map(n=>s("option",{value:n.name,text:n.name})),s("option",{value:"custom",text:"Custom table\u2026"})),k(l("avoid-groups"),...Object.entries(t.motif_groups).filter(([,n])=>n.length).map(([n,o])=>s("label",{class:"chip-check",title:o.join(", ")},s("input",{type:"checkbox",value:n,attrs:{name:"avoid"}}),s("span",{text:ve[n]??n})))),k(l("splice"),...t.splice_backends.map(n=>s("option",{value:n,text:we[n]??n}))),k(l("weights"),...Object.keys(t.weights).map(n=>s("label",{class:"field"},s("span",{text:be[n]??n}),s("input",{type:"number",id:`weight-${n}`,attrs:{min:"0",step:"any",inputmode:"decimal","data-weight":n}})))),J(t)}function J(t){let e=t.defaults;l("table").value=t.default_table,l("table-text").value="",W();for(let n of document.querySelectorAll('#avoid-groups input[type="checkbox"]'))n.checked=!1;l("avoid-extra").value="",T("gc-target").value=String(e.gc_target),T("gc-low").value=String(e.gc_range[0]),T("gc-high").value=String(e.gc_range[1]),T("max-homopolymer").value=String(e.max_homopolymer),l("splice").value="auto",l("effort-standard").checked=!0,T("seconds").value=String(e.seconds),T("seed").value="",T("gc-window").value=String(e.gc_window),T("gc-step").value=String(e.gc_step),T("repeat-k").value=String(e.repeat_k),T("hairpin-stem").value=String(e.hairpin_stem),T("hairpin-min-loop").value=String(e.hairpin_min_loop),T("hairpin-max-loop").value=String(e.hairpin_max_loop);for(let[n,o]of Object.entries(t.weights))T(`weight-${n}`).value=String(o);U(t),z(t)}function W(){let t=l("table").value==="custom";l("custom-table").hidden=!t}function P(t){let e=l("table").value;l("table-hint").textContent=e==="custom"?"":t.tables.find(n=>n.name===e)?.description??""}function U(t){let e=oe(),n=t.effort[e];if(!n)return;let o=[`${n.max_sweeps} greedy passes`];n.restarts>1&&o.push(`${n.restarts} independent restarts`),n.anneal_steps&&o.push(`${n.anneal_steps.toLocaleString()} annealing steps each`),l("effort-hint").textContent=`${o.join(", ")}.`}function z(t){let e=l("splice").value,n=l("splice-hint");e==="maxent"&&!t.maxent_available?n.textContent="MaxEntScan is not installed, so this will report an error. Pick Automatic or Consensus screen.":e==="auto"?n.textContent=t.maxent_available?"Uses MaxEntScan.":"MaxEntScan is not installed, so a simpler consensus screen is used.":e==="motif"?n.textContent="A fast consensus screen. It flags likely sites rather than modelling splicing.":e==="none"?n.textContent="Splice sites are ignored. Right for sequences that will not be spliced, and faster.":n.textContent=""}function oe(){return document.querySelector('input[name="effort"]:checked')?.value??"standard"}function V(){return document.querySelector('input[name="kind"]:checked')?.value??"auto"}function S(t){let e=T(t).value.trim();if(e==="")return;let n=Number(e);return Number.isFinite(n)?n:e}function ae(){let t=[...document.querySelectorAll("#avoid-groups input:checked")].map(i=>i.value);t.push(...l("avoid-extra").value.split(/[,\n]/).map(i=>i.trim()).filter(Boolean));let e={};for(let i of document.querySelectorAll("#weights input")){let a=i.value.trim();a!==""&&(e[i.dataset.weight??""]=Number.isFinite(Number(a))?Number(a):a)}let n=l("table").value,o=V();return{sequence:l("sequence").value,kind:o,add_stop:l("add-stop").checked,table:n==="custom"?void 0:n,table_text:n==="custom"?l("table-text").value:void 0,avoid:t,gc_target:S("gc-target"),gc_range:[S("gc-low"),S("gc-high")],max_homopolymer:S("max-homopolymer"),splice_backend:l("splice").value,effort:oe(),seconds:S("seconds"),seed:S("seed"),gc_window:S("gc-window"),gc_step:S("gc-step"),repeat_k:S("repeat-k"),hairpin_stem:S("hairpin-stem"),hairpin_min_loop:S("hairpin-min-loop"),hairpin_max_loop:S("hairpin-max-loop"),weights:e}}var R=720,Q=236,g={left:46,right:14,top:12,bottom:34},O=R-g.left-g.right,I=Q-g.top-g.bottom,X=[50,100,200,250,500,1e3,2e3,2500,5e3,1e4,2e4,5e4];function xe(t){return X.find(e=>t/e<=8)??X[X.length-1]}function ie(t,e){let n=Math.max(e,1),o=u=>g.left+u/n*O,i=u=>g.top+(1-u)*I,a=u=>Math.min(u+t.window/2,n),d=u=>u.map((y,w)=>`${w?"L":"M"}${o(a(t.starts[w])).toFixed(1)} ${i(y).toFixed(1)}`).join(""),p=E("svg",{viewBox:`0 0 ${R} ${Q}`,role:"img",class:"chart","aria-label":`GC content in ${t.window} base windows along the sequence, before and after optimisation, against the allowed range of ${v(t.range[0]*100,0)} to ${v(t.range[1]*100,0)} percent.`});p.append(E("rect",{class:"band",x:g.left,y:i(t.range[1]),width:O,height:Math.max(0,i(t.range[0])-i(t.range[1]))}));for(let u of[0,.25,.5,.75,1])p.append(E("line",{class:"grid",x1:g.left,x2:R-g.right,y1:i(u),y2:i(u)}),E("text",{class:"tick",x:g.left-8,y:i(u)+4,"text-anchor":"end"},`${u*100}%`));let m=xe(n);for(let u=0;u<=n;u+=m)p.append(E("line",{class:"grid faint",x1:o(u),x2:o(u),y1:g.top,y2:g.top+I}),E("text",{class:"tick",x:o(u),y:Q-12,"text-anchor":"middle"},M(u)));p.append(E("line",{class:"target",x1:g.left,x2:R-g.right,y1:i(t.target),y2:i(t.target)})),t.starts.length>1?p.append(E("path",{class:"line before",d:d(t.initial)}),E("path",{class:"line after",d:d(t.final)})):t.starts.length===1&&p.append(E("circle",{class:"dot before",cx:o(a(t.starts[0])),cy:i(t.initial[0]),r:4}),E("circle",{class:"dot after",cx:o(a(t.starts[0])),cy:i(t.final[0]),r:4}));let r=E("line",{class:"cursor",x1:0,x2:0,y1:g.top,y2:g.top+I});r.setAttribute("visibility","hidden");let f=E("rect",{class:"overlay",x:g.left,y:g.top,width:O,height:I});p.append(r,f);let b="Hover the chart to read a window.",h=s("p",{class:"readout",text:b});f.addEventListener("pointermove",u=>{let y=p.getBoundingClientRect(),$=((u.clientX-y.left)/y.width*R-g.left)/O*n,c=0;for(let x=1;x{r.setAttribute("visibility","hidden"),h.textContent=b});let _=s("ul",{class:"legend"},s("li",null,s("span",{class:"swatch before"}),"Before"),s("li",null,s("span",{class:"swatch after"}),"After"),s("li",null,s("span",{class:"swatch band"}),"Allowed range"),s("li",null,s("span",{class:"swatch target"}),`Target ${v(t.target*100,0)}%`));return s("figure",{class:"figure"},p,_,h)}var re=20;function le(t){let e=t.sequence,n=t.initial_sequence,o=e.length/3,i=new Set;for(let h of t.motif_hits)for(let _ of h.positions)for(let u=Math.floor(_/3);u<=Math.floor((_+h.length-1)/3);u++)i.add(u);let a=0,d=[],p=String(e.length).length;for(let h=0;hs("label",{class:"check"},s("input",{type:"checkbox",checked:u,on:{change:y=>m.classList.toggle(_,y.target.checked)}}),` ${h}`);!t.motif_hits.length&&!a&&m.classList.remove("show-changes");let f=a===0?"No codon needed to change.":`${M(a)} of ${M(o)} codons changed (${Math.round(a/o*100)}%).`,b=t.motif_hits.length?s("p",{class:"note warn",role:"status"},`Still contains ${t.motif_hits.map(h=>`${h.name} (${h.positions.length})`).join(", ")}; the marked codons overlap a site you asked to keep out.`):null;return s("div",{class:"seq-wrap"},s("div",{class:"seq-tools"},s("p",{class:"hint",text:f}),s("div",{class:"toggles"},r("Highlight changes","show-changes",m.classList.contains("show-changes")),r("Show protein","show-aa",!0))),b,m)}async function ce(t){try{return await navigator.clipboard.writeText(t),!0}catch{let e=s("textarea",{attrs:{"aria-hidden":"true",tabindex:"-1"}});e.value=t,document.body.append(e),e.select();let n=!1;try{n=document.execCommand("copy")}catch{n=!1}return e.remove(),n}}function de(t,e,n){let o=URL.createObjectURL(new Blob([e],{type:n})),i=s("a",{attrs:{href:o,download:t}});document.body.append(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(o),1e4)}function G(t,e,n=!1){let o=s("button",{type:"button",class:n?"chip primary-chip":"chip",text:t,on:{click:()=>e(o)}});return o}function pe(t,e){let n=t.textContent;t.textContent=e,setTimeout(()=>{t.textContent=n},1600)}var ye=t=>t.replace(/[^\w.-]+/g,"_")||"sequence";function q(t,e){k(t,s("div",{class:"callout error",role:"alert"},s("strong",{text:"That did not work"}),s("p",{text:e}))),t.focus({preventScroll:!0})}var F=class{constructor(e){this.bar=s("div",{class:"bar-fill"});this.elapsed=s("span",{class:"mono"});this.detail=s("span",{class:"hint"});this.log=s("ol",{class:"log mono",attrs:{"aria-label":"Search log"}});this.lastLog="";k(e,s("div",{class:"card progress"},s("h2",{text:"Optimizing"}),s("p",{class:"hint",text:"Trying synonymous codons and keeping the changes that lower the score."}),s("div",{class:"bar",role:"progressbar",attrs:{"aria-label":"Optimization progress"}},this.bar),s("div",{class:"progress-meta"},this.elapsed,this.detail),this.log)),e.focus({preventScroll:!0})}update(e){this.elapsed.textContent=`${v(e.elapsed,1)} s of at most ${M(e.max_seconds)} s`,e.restarts_total>1?(this.detail.textContent=`Restart ${Math.min(e.restarts_done+1,e.restarts_total)} of ${e.restarts_total}`,this.bar.style.width=`${Math.min(100,e.restarts_done/e.restarts_total*100)}%`,this.bar.parentElement?.classList.remove("indeterminate")):(this.detail.textContent="Stops as soon as nothing improves.",this.bar.parentElement?.classList.add("indeterminate"));let n=e.messages.join(` -`);n!==this.lastLog&&(this.lastLog=n,k(this.log,...e.messages.map(o=>s("li",{text:o}))))}},j=t=>`${v(t*100,1)}%`;function Ee(t){let e=t.splice_backend!==void 0;return[{label:"GC content",help:"Share of G and C bases over the whole sequence.",get:n=>n.gc_fraction,format:j,better:"target"},{label:"GC windows out of range",help:"Windows whose local GC falls outside the allowed range.",get:n=>n.gc_windows_below_range+n.gc_windows_above_range,better:"lower"},{label:"Codon adaptation index",help:"How closely the codons follow the host's preferences (1 is ideal).",get:n=>n.cai,format:n=>v(n,3),better:"higher"},{label:`Repeated ${t.repeat_k}-mers`,help:"Extra copies of any stretch that appears more than once. Repeats misassemble during synthesis.",get:n=>n.redundant_kmers,better:"lower"},{label:"Hairpin pairs",help:"Pairs of inverted repeats that can fold into stem-loops.",get:n=>n.hairpin_pairs,better:"lower"},{label:"Longest single-base run",help:"The longest stretch of one repeated base.",get:n=>n.longest_homopolymer,better:"lower"},{label:"Forbidden sites",help:"Matches to the enzymes and patterns you asked to keep out.",get:n=>n.forbidden_motif_hits,better:"lower"},{label:"Splice donor sites",help:"Windows that look like a 5\u2032 splice site.",get:n=>n.splice_donor_sites??0,better:"lower",show:()=>e},{label:"Splice acceptor sites",help:"Windows that look like a 3\u2032 splice site.",get:n=>n.splice_acceptor_sites??0,better:"lower",show:()=>e}]}function ue(t){return t.gc_windows_below_range+t.gc_windows_above_range+t.redundant_kmers+t.hairpin_pairs+t.homopolymer_excess_bases+t.forbidden_motif_hits+(t.splice_donor_sites??0)+(t.splice_acceptor_sites??0)}function Me(t){let e=t.gc.target,n=Ee(t.final).filter(o=>!o.show||o.show(t.final)).map(o=>{let i=o.get(t.initial),a=o.get(t.final),d=o.format??M,p;if(o.better==="target"){let f=Math.abs(a-e)-Math.abs(i-e);p=Math.abs(f)<5e-4?"same":f<0?"good":"bad"}else{let f=a-i;p=Math.abs(f)<1e-9?"same":f<0==(o.better==="lower")?"good":"bad"}let m={good:"better",bad:"worse",same:"no change"}[p],r={good:"\u2713",bad:"!",same:"\u2013"}[p];return s("tr",null,s("th",{attrs:{scope:"row",title:o.help}},o.label),s("td",{class:"num",text:d(i)}),s("td",{class:"num strong",text:d(a)}),s("td",{class:`verdict ${p}`},s("span",{attrs:{"aria-hidden":"true"}},`${r} `),m))});return s("table",{class:"compare"},s("thead",null,s("tr",null,s("th",{attrs:{scope:"col"}},"Property"),s("th",{class:"num",attrs:{scope:"col"}},"Before"),s("th",{class:"num",attrs:{scope:"col"}},"After"),s("th",{attrs:{scope:"col"}},"Change"))),s("tbody",null,...n))}var Y={gc_global:["Overall GC","Distance of the whole-sequence GC from the target."],gc_window:["Local GC","How far windows stray outside the allowed range."],repeat:["Repeats","Redundant copies of repeated stretches."],hairpin:["Hairpins","Inverted repeats that can fold back on themselves."],homopolymer:["Single-base runs","Bases beyond the longest run you allow."],motif:["Forbidden sites","Matches to enzymes and patterns you keep out."],splice:["Splice sites","How far splice-site scores exceed their cutoffs."],usage:["Codon usage","Cost of using codons the host dislikes."]};function Te(t){let e=t.score.initial_terms,n=t.score.final_terms,o=Object.keys(Y).filter(d=>(e[d]??0)>1e-9||(n[d]??0)>1e-9);if(!o.length)return s("p",{class:"hint",text:"No penalties at all: every constraint is met and codon usage is ideal."});let i=Math.max(...o.flatMap(d=>[e[d]??0,n[d]??0]),1e-9),a=(d,p)=>{let m=s("span",{class:`fill ${p}`});return m.style.width=`${Math.max(d>0?1.5:0,d/i*100)}%`,s("span",{class:"track"},m)};return s("div",{class:"terms"},...o.map(d=>s("div",{class:"term",title:Y[d][1]},s("span",{class:"term-name",text:Y[d][0]}),s("span",{class:"term-bars"},a(e[d]??0,"before"),a(n[d]??0,"after")),s("span",{class:"term-values mono",text:`${v(e[d]??0,2)} \u2192 ${v(n[d]??0,2)}`}))))}function B(t,e,...n){return s("section",{class:"card"},s("h3",{text:t}),e?s("p",{class:"hint",text:e}):null,...n)}function D(t,e,n,o){return s("div",{class:"stat"},s("span",{class:"stat-label",text:t}),s("span",{class:"stat-value"},s("span",{class:"was",text:e})," \u2192 ",s("strong",{text:n})),s("span",{class:"stat-note",text:o}))}function he(t,e,n){let o=ue(e.initial),i=ue(e.final),a=e.score.initial>0?`${Math.round((1-e.score.final/e.score.initial)*100)}% lower score`:"score unchanged",d=ye(e.name),p=e.cancelled?s("div",{class:"callout warn",role:"status"},"Stopped early. This is the best sequence found so far."):e.search.hit_time_limit?s("div",{class:"callout warn",role:"status"},"The time limit ended the search before it settled. Raise the limit or use a thorough search for more."):null,m=s("div",{class:"toolbar"},G("Copy DNA",r=>{ce(e.sequence).then(f=>pe(r,f?"Copied":"Copy failed"))},!0),G("Copy FASTA",r=>{ce(e.fasta).then(f=>pe(r,f?"Copied":"Copy failed"))}),G("Download FASTA",()=>de(`${d}.codonopt.fna`,e.fasta,"text/plain")),G("Download report",()=>de(`${d}.codonopt.json`,JSON.stringify(e,null,2)+` -`,"application/json")));k(t,s("div",{class:"result-head"},s("div",null,s("h2",{text:"Optimized sequence"}),s("p",{class:"hint",text:`${e.name} \xB7 ${e.protein.length.toLocaleString()} residues \xB7 ${e.codon_usage_table} codon usage`})),m),p,s("div",{class:"stats"},D("Issues found",M(o),M(i),i===0?"none left":"still to resolve"),D("Score",v(e.score.initial,2),v(e.score.final,2),a),D("GC content",j(e.initial.gc_fraction),j(e.final.gc_fraction),`target ${j(e.gc.target)}`),D("Codon adaptation",v(e.initial.cai,2),v(e.final.cai,2),"1.0 is ideal")),B("DNA sequence","The protein is identical to your input; only synonymous codons changed.",le(e)),B("Before and after",null,Me(e)),B("GC content along the sequence",`Each point is a ${e.gc.window} base window.`,ie(e.gc,e.sequence.length)),B("Where the score comes from","Lower is better. Each term is weighted as in your settings.",Te(e)),s("p",{class:"run-info hint"},`${e.search.restarts_run} ${e.search.restarts_run===1?"restart":"restarts"} \xB7 ${M(e.search.greedy_sweeps)} sweeps \xB7 ${M(e.search.moves_evaluated)} codon swaps tried \xB7 ${v(e.search.seconds,1)} s`)),t.focus({preventScroll:!0})}var _e=350;async function Le(){let t=document.querySelector('meta[name="codonopt-token"]')?.content??"",e=new N(t),n=l("output"),o;try{o=await e.meta()}catch(c){q(n,c instanceof Error?c.message:String(c));return}se(o),P(o);let i=l("sequence"),a=l("detected"),d=l("run"),p=l("cancel"),m=l("add-stop-wrap"),r=null,f=()=>{let c=ne(i.value,V(),o.limits.max_residues);a.textContent=c.message,a.className=`detected ${c.state}`,m.hidden=c.kind==="dna",d.disabled=r!==null||c.state==="empty"};i.addEventListener("input",f);for(let c of document.querySelectorAll('input[name="kind"]'))c.addEventListener("change",f);let b=async(c,L)=>{c&&(L.value=await c.text(),L.dispatchEvent(new Event("input",{bubbles:!0})))},h=l("file-input");l("btn-open").addEventListener("click",()=>h.click()),h.addEventListener("change",()=>{b(h.files?.[0],i),h.value=""}),i.addEventListener("dragover",c=>c.preventDefault()),i.addEventListener("drop",c=>{c.preventDefault(),b(c.dataTransfer?.files[0],i)}),l("btn-example").addEventListener("click",()=>{i.value=`>${o.example.name} -${o.example.protein} -`,l("kind-auto").checked=!0,f(),i.focus()}),l("btn-clear").addEventListener("click",()=>{i.value="",f(),i.focus()}),l("table").addEventListener("change",()=>{W(),P(o)});let u=l("table-text"),y=l("table-file");l("btn-open-table").addEventListener("click",()=>y.click()),y.addEventListener("change",()=>{b(y.files?.[0],u),y.value=""}),l("splice").addEventListener("change",()=>z(o));for(let c of document.querySelectorAll('input[name="effort"]'))c.addEventListener("change",()=>U(o));l("btn-reset").addEventListener("click",()=>{J(o),P(o)});let w=c=>{p.hidden=!c,p.disabled=!1,d.hidden=c,f()},$=c=>{r&&window.clearInterval(r.timer),r=null,w(!1),c.status==="error"?q(n,c.error??"The optimization failed."):c.result&&he(n,c.result,o)};l("form").addEventListener("submit",async c=>{if(c.preventDefault(),r||d.disabled)return;let L;try{L=await e.start(ae())}catch(x){q(n,x instanceof A?x.message:String(x));return}let C=new F(n);C.update(L),r={id:L.id,timer:0},w(!0),r.timer=window.setInterval(async()=>{if(r)try{let x=await e.poll(r.id);x.status==="running"?C.update(x):$(x)}catch(x){r&&window.clearInterval(r.timer),r=null,w(!1),q(n,x instanceof Error?x.message:String(x))}},_e)}),p.addEventListener("click",async()=>{if(r){p.disabled=!0,p.textContent="Stopping\u2026";try{await e.cancel(r.id)}catch{}}}),new MutationObserver(()=>{p.hidden&&(p.textContent="Stop")}).observe(p,{attributes:!0,attributeFilter:["hidden"]}),f()}Le();})(); +"use strict";(()=>{var P=class extends Error{constructor(n,o){super(n);this.status=o;this.name="ApiError"}},Me="X-Codonopt-Token",I=class{constructor(e){this.token=e}meta(){return this.request("GET","/api/meta")}start(e){return this.request("POST","/api/jobs",e)}poll(e){return this.request("GET",`/api/jobs/${encodeURIComponent(e)}`)}cancel(e){return this.request("POST",`/api/jobs/${encodeURIComponent(e)}/cancel`)}async request(e,n,o){let a;try{a=await fetch(n,{method:e,headers:{[Me]:this.token,...o===void 0?{}:{"Content-Type":"application/json"}},body:o===void 0?void 0:JSON.stringify(o),cache:"no-store"})}catch{throw new P("Cannot reach the codonopt server. Was the window or terminal that started it closed?",0)}let i=null;try{i=await a.json()}catch{}if(!a.ok){let r=i&&typeof i=="object"&&"error"in i?String(i.error):`The server answered ${a.status}.`;throw new P(r,a.status)}if(i===null||typeof i!="object")throw new P(`The server answered ${a.status} but sent no readable data.`,a.status);return i}};var Le=new Set("ACDEFGHIKLMNPQRSTVWY*"),re=new Set("ACGTU");function ce(t,e,n,o=!1){let a=t.trim();if(!a)return{state:"empty",message:"Nothing pasted yet.",kind:null,length:0};let i=a;if(a.startsWith(">")){let b=a.split(/\r?\n/),d=b.filter(w=>w.startsWith(">")).length;if(d>1)return q(`${d} FASTA records found. Paste one sequence at a time.`);i=b.slice(1).join("")}let r=i.replace(/\s+/g,"").toUpperCase();if(!r)return q("The FASTA header has no sequence under it.");let h=r.length>=9&&[...r].every(b=>re.has(b));if((e==="auto"?h?"dna":"protein":e)==="dna"){let b=le([...r].filter(w=>!re.has(w)));if(b.length)return q(`Not DNA: ${b.join(", ")}`);if(r.length%3)return q(`DNA \xB7 ${r.length} bases is not a whole number of codons (${r.length%3} extra).`);let d=r.length/3;return d>n?q(`DNA \xB7 ${d.toLocaleString()} codons; this page takes up to ${n.toLocaleString()}.`):ie("dna",r.length,`DNA \xB7 ${r.length.toLocaleString()} bases, ${d} codons`)}let m=le([...r].filter(b=>!Le.has(b)));if(m.length)return q(`Not a protein letter: ${m.join(", ")}`);let p=r.indexOf("*");if(p!==-1&&p!==r.length-1)return q(`Protein \xB7 stop symbol (*) at position ${p+1}, before the end.`);let L=r.length+(o&&!r.endsWith("*")?1:0);if(L>n)return q(`Protein \xB7 ${L.toLocaleString()} residues${L>r.length?" with the stop codon":""}; this page takes up to ${n.toLocaleString()}.`);let f=r.length===1?"residue":"residues";return ie("protein",r.length,`Protein \xB7 ${r.length.toLocaleString()} ${f}`)}function ie(t,e,n){return{state:"ok",message:n,kind:t,length:e}}function q(t){return{state:"error",message:t,kind:null,length:0}}function le(t){return[...new Set(t)].sort()}function V(t,e){for(let n of e)n==null||n===!1||t.appendChild(typeof n=="object"?n:document.createTextNode(String(n)))}function s(t,e,...n){let o=document.createElement(t);if(e){let{attrs:a,on:i,text:r,...h}=e;for(let[u,m]of Object.entries(h))m===void 0||m===!1||(u==="class"?o.className=String(m):typeof m=="boolean"?o.setAttribute(u,""):o.setAttribute(u,String(m)));for(let[u,m]of Object.entries(a??{}))o.setAttribute(u,m);if(r!==void 0&&(o.textContent=r),i)for(let[u,m]of Object.entries(i))o.addEventListener(u,m)}return V(o,n),o}var _e="http://www.w3.org/2000/svg";function E(t,e,...n){let o=document.createElementNS(_e,t);for(let[a,i]of Object.entries(e??{}))o.setAttribute(a,String(i));return V(o,n),o}function c(t){let e=document.getElementById(t);if(!e)throw new Error(`Missing #${t} in the page`);return e}function k(t,...e){t.replaceChildren(),V(t,e)}var x=(t,e=2)=>Number.isFinite(t)?t.toFixed(e):"\u2013",T=t=>Math.round(t).toLocaleString("en-US");var Se={gc_global:"Overall GC",gc_window:"Local GC",repeat:"Repeats",hairpin:"Hairpins",homopolymer:"Single-base runs",motif:"Forbidden sites",splice:"Splice sites",usage:"Codon usage"},ke={golden_gate:"Golden Gate",common_cloning:"Common cloning sites",regulatory:"Poly(A) and TATA signals"},$e={auto:"Automatic",maxent:"MaxEntScan",motif:"Consensus screen",none:"Off"},M=t=>c(t);function de(t){c("version").textContent=`v${t.version}`;let e=c("table");k(e,...t.tables.map(n=>s("option",{value:n.name,text:n.name})),s("option",{value:"custom",text:"Custom table\u2026"})),k(c("avoid-groups"),...Object.entries(t.motif_groups).filter(([,n])=>n.length).map(([n,o])=>s("label",{class:"chip-check",title:o.join(", ")},s("input",{type:"checkbox",value:n,attrs:{name:"avoid"}}),s("span",{text:ke[n]??n})))),k(c("splice"),...t.splice_backends.map(n=>s("option",{value:n,text:$e[n]??n}))),k(c("weights"),...Object.keys(t.weights).map(n=>s("label",{class:"field"},s("span",{text:Se[n]??n}),s("input",{type:"number",id:`weight-${n}`,attrs:{min:"0",step:"any",inputmode:"decimal","data-weight":n}})))),X(t)}function X(t){let e=t.defaults;c("table").value=t.default_table,c("table-text").value="",Y();for(let n of document.querySelectorAll('#avoid-groups input[type="checkbox"]'))n.checked=!1;c("avoid-extra").value="",M("gc-target").value=String(e.gc_target),M("gc-low").value=String(e.gc_range[0]),M("gc-high").value=String(e.gc_range[1]),M("max-homopolymer").value=String(e.max_homopolymer),c("splice").value="auto",c("effort-standard").checked=!0,M("seconds").value=String(e.seconds),M("seed").value="",M("gc-window").value=String(e.gc_window),M("gc-step").value=String(e.gc_step),M("repeat-k").value=String(e.repeat_k),M("hairpin-stem").value=String(e.hairpin_stem),M("hairpin-min-loop").value=String(e.hairpin_min_loop),M("hairpin-max-loop").value=String(e.hairpin_max_loop);for(let[n,o]of Object.entries(t.weights))M(`weight-${n}`).value=String(o);Q(t),Z(t)}function Y(){let t=c("table").value==="custom";c("custom-table").hidden=!t}function ue(){return c("table").value!=="custom"||c("table-text").value.trim()?null:"Paste or open a codon usage table, or pick a built-in host instead of \u201CCustom table\u2026\u201D."}function B(t){let e=c("table").value;c("table-hint").textContent=e==="custom"?"":t.tables.find(n=>n.name===e)?.description??""}function Q(t){let e=pe(),n=t.effort[e];if(!n)return;let o=[`${n.max_sweeps} greedy passes`];n.restarts>1&&o.push(`${n.restarts} independent restarts`),n.anneal_steps&&o.push(`${n.anneal_steps.toLocaleString()} annealing steps each`),c("effort-hint").textContent=`${o.join(", ")}.`}function Z(t){let e=c("splice").value,n=c("splice-hint");e==="maxent"&&!t.maxent_available?n.textContent="MaxEntScan is not installed, so this will report an error. Pick Automatic or Consensus screen.":e==="auto"?n.textContent=t.maxent_available?"Uses MaxEntScan.":"MaxEntScan is not installed, so a simpler consensus screen is used.":e==="motif"?n.textContent="A fast consensus screen. It flags likely sites rather than modelling splicing.":e==="none"?n.textContent="Splice sites are ignored. Right for sequences that will not be spliced, and faster.":n.textContent=""}function pe(){return document.querySelector('input[name="effort"]:checked')?.value??"standard"}function ee(){return document.querySelector('input[name="kind"]:checked')?.value??"auto"}function S(t){let e=M(t).value.trim();if(e==="")return;let n=Number(e);return Number.isFinite(n)?n:e}function he(){let t=[...document.querySelectorAll("#avoid-groups input:checked")].map(a=>a.value);t.push(...c("avoid-extra").value.split(/[,\n]/).map(a=>a.trim()).filter(Boolean));let e={};for(let a of document.querySelectorAll("#weights input")){let i=a.value.trim();i!==""&&(e[a.dataset.weight??""]=Number.isFinite(Number(i))?Number(i):i)}let n=c("table").value,o=ee();return{sequence:c("sequence").value,kind:o,add_stop:c("add-stop").checked,table:n==="custom"?void 0:n,table_text:n==="custom"?c("table-text").value:void 0,avoid:t,gc_target:S("gc-target"),gc_range:[S("gc-low"),S("gc-high")],max_homopolymer:S("max-homopolymer"),splice_backend:c("splice").value,effort:pe(),seconds:S("seconds"),seed:S("seed"),gc_window:S("gc-window"),gc_step:S("gc-step"),repeat_k:S("repeat-k"),hairpin_stem:S("hairpin-stem"),hairpin_min_loop:S("hairpin-min-loop"),hairpin_max_loop:S("hairpin-max-loop"),weights:e}}var O=720,ne=236,v={left:46,right:14,top:12,bottom:34},G=O-v.left-v.right,D=ne-v.top-v.bottom,te=[50,100,200,250,500,1e3,2e3,2500,5e3,1e4,2e4,5e4];function Ce(t){return te.find(e=>t/e<=8)??te[te.length-1]}function me(t,e){let n=Math.max(e,1),o=d=>v.left+d/n*G,a=d=>v.top+(1-d)*D,i=d=>Math.min(d+t.window/2,n),r=d=>d.map((w,_)=>`${_?"L":"M"}${o(i(t.starts[_])).toFixed(1)} ${a(w).toFixed(1)}`).join(""),h=E("svg",{viewBox:`0 0 ${O} ${ne}`,role:"img",class:"chart","aria-label":`GC content in ${t.window} base windows along the sequence, before and after optimisation, against the allowed range of ${x(t.range[0]*100,0)} to ${x(t.range[1]*100,0)} percent.`});h.append(E("rect",{class:"band",x:v.left,y:a(t.range[1]),width:G,height:Math.max(0,a(t.range[0])-a(t.range[1]))}));for(let d of[0,.25,.5,.75,1])h.append(E("line",{class:"grid",x1:v.left,x2:O-v.right,y1:a(d),y2:a(d)}),E("text",{class:"tick",x:v.left-8,y:a(d)+4,"text-anchor":"end"},`${d*100}%`));let u=Ce(n);for(let d=0;d<=n;d+=u)h.append(E("line",{class:"grid faint",x1:o(d),x2:o(d),y1:v.top,y2:v.top+D}),E("text",{class:"tick",x:o(d),y:ne-12,"text-anchor":"middle"},T(d)));h.append(E("line",{class:"target",x1:v.left,x2:O-v.right,y1:a(t.target),y2:a(t.target)})),t.starts.length>1?h.append(E("path",{class:"line before",d:r(t.initial)}),E("path",{class:"line after",d:r(t.final)})):t.starts.length===1&&h.append(E("circle",{class:"dot before",cx:o(i(t.starts[0])),cy:a(t.initial[0]),r:4}),E("circle",{class:"dot after",cx:o(i(t.starts[0])),cy:a(t.final[0]),r:4}));let m=E("line",{class:"cursor",x1:0,x2:0,y1:v.top,y2:v.top+D});m.setAttribute("visibility","hidden");let p=E("rect",{class:"overlay",x:v.left,y:v.top,width:G,height:D});h.append(m,p);let L="Hover the chart to read a window.",f=s("p",{class:"readout",text:L});p.addEventListener("pointermove",d=>{let w=h.getBoundingClientRect(),A=((d.clientX-w.left)/w.width*O-v.left)/G*n,y=0;for(let N=1;N{m.setAttribute("visibility","hidden"),f.textContent=L});let b=s("ul",{class:"legend"},s("li",null,s("span",{class:"swatch before"}),"Before"),s("li",null,s("span",{class:"swatch after"}),"After"),s("li",null,s("span",{class:"swatch band"}),"Allowed range"),s("li",null,s("span",{class:"swatch target"}),`Target ${x(t.target*100,0)}%`));return s("figure",{class:"figure"},h,b,f)}var fe=20;function ge(t){let e=t.sequence,n=t.initial_sequence,o=e.length/3,a=new Set;for(let f of t.motif_hits)for(let b of f.positions)for(let d=Math.floor(b/3);d<=Math.floor((b+f.length-1)/3);d++)a.add(d);let i=0,r=[],h=String(e.length).length;for(let f=0;fs("label",{class:"check"},s("input",{type:"checkbox",checked:d,on:{change:w=>u.classList.toggle(b,w.target.checked)}}),` ${f}`);!t.motif_hits.length&&!i&&u.classList.remove("show-changes");let p=i===0?"No codon needed to change.":`${T(i)} of ${T(o)} codons changed (${Math.round(i/o*100)}%).`,L=t.motif_hits.length?s("p",{class:"note warn",role:"status"},`Still contains ${t.motif_hits.map(f=>`${f.name} (${f.positions.length})`).join(", ")}; the marked codons overlap a site you asked to keep out.`):null;return s("div",{class:"seq-wrap"},s("div",{class:"seq-tools"},s("p",{class:"hint",text:p}),s("div",{class:"toggles"},m("Highlight changes","show-changes",u.classList.contains("show-changes")),m("Show protein","show-aa",!0))),L,u)}async function be(t){try{return await navigator.clipboard.writeText(t),!0}catch{let e=s("textarea",{attrs:{"aria-hidden":"true",tabindex:"-1"}});e.value=t,document.body.append(e),e.select();let n=!1;try{n=document.execCommand("copy")}catch{n=!1}return e.remove(),n}}function ve(t,e,n){let o=URL.createObjectURL(new Blob([e],{type:n})),a=s("a",{attrs:{href:o,download:t}});document.body.append(a),a.click(),a.remove(),setTimeout(()=>URL.revokeObjectURL(o),1e4)}function F(t,e,n=!1){let o=s("button",{type:"button",class:n?"chip primary-chip":"chip",text:t,on:{click:()=>e(o)}});return o}var se=new WeakMap;function we(t,e){let n=se.get(t);n!==void 0&&window.clearTimeout(n),t.dataset.label===void 0&&(t.dataset.label=t.textContent??""),t.textContent=e,se.set(t,window.setTimeout(()=>{t.textContent=t.dataset.label??"",se.delete(t)},1600))}var He=t=>t.replace(/[^\w.-]+/g,"_")||"sequence";function H(t,e){k(t,s("div",{class:"callout error",role:"alert"},s("strong",{text:"That did not work"}),s("p",{text:e}))),t.focus({preventScroll:!0})}var j=class{constructor(e){this.bar=s("div",{class:"bar-fill"});this.elapsed=s("span",{class:"mono"});this.detail=s("span",{class:"hint"});this.log=s("ol",{class:"log mono",attrs:{"aria-label":"Search log"}});this.trouble=s("p",{class:"note warn",role:"alert"});this.lastLog="";this.trouble.hidden=!0,k(e,s("div",{class:"card progress"},s("h2",{text:"Optimizing"}),s("p",{class:"hint",text:"Trying synonymous codons and keeping the changes that lower the score."}),s("div",{class:"bar",role:"progressbar",attrs:{"aria-label":"Optimization progress"}},this.bar),s("div",{class:"progress-meta"},this.elapsed,this.detail),this.trouble,this.log)),e.focus({preventScroll:!0})}note(e){this.trouble.textContent=e,this.trouble.hidden=!1}update(e){this.elapsed.textContent=`${x(e.elapsed,1)} s of at most ${T(e.max_seconds)} s`;let n=this.bar.parentElement;if(e.restarts_total>1){let a=Math.min(e.restarts_done,e.restarts_total);this.detail.textContent=`Restart ${Math.min(a+1,e.restarts_total)} of ${e.restarts_total}`,this.bar.style.width=`${a/e.restarts_total*100}%`,n?.classList.remove("indeterminate"),n?.setAttribute("aria-valuemin","0"),n?.setAttribute("aria-valuemax",String(e.restarts_total)),n?.setAttribute("aria-valuenow",String(a))}else this.detail.textContent="Stops as soon as nothing improves.",n?.classList.add("indeterminate"),n?.removeAttribute("aria-valuenow");let o=e.messages.join(` +`);o!==this.lastLog&&(this.lastLog=o,k(this.log,...e.messages.map(a=>s("li",{text:a}))))}},J=t=>`${x(t*100,1)}%`;function Ae(t){let e=t.splice_backend!==void 0;return[{label:"GC content",help:"Share of G and C bases over the whole sequence.",get:n=>n.gc_fraction,format:J,better:"target"},{label:"GC windows out of range",help:"Windows whose local GC falls outside the allowed range.",get:n=>n.gc_windows_below_range+n.gc_windows_above_range,better:"lower"},{label:"Codon adaptation index",help:"How closely the codons follow the host's preferences (1 is ideal).",get:n=>n.cai,format:n=>x(n,3),better:"higher"},{label:`Repeated ${t.repeat_k}-mers`,help:"Extra copies of any stretch that appears more than once. Repeats misassemble during synthesis.",get:n=>n.redundant_kmers,better:"lower"},{label:"Hairpin pairs",help:"Pairs of inverted repeats that can fold into stem-loops.",get:n=>n.hairpin_pairs,better:"lower"},{label:"Longest single-base run",help:"The longest stretch of one repeated base.",get:n=>n.longest_homopolymer,better:"lower"},{label:"Forbidden sites",help:"Matches to the enzymes and patterns you asked to keep out.",get:n=>n.forbidden_motif_hits,better:"lower"},{label:"Splice donor sites",help:"Windows that look like a 5\u2032 splice site.",get:n=>n.splice_donor_sites??0,better:"lower",show:()=>e},{label:"Splice acceptor sites",help:"Windows that look like a 3\u2032 splice site.",get:n=>n.splice_acceptor_sites??0,better:"lower",show:()=>e}]}function xe(t){return t.gc_windows_below_range+t.gc_windows_above_range+t.redundant_kmers+t.hairpin_pairs+t.homopolymer_excess_bases+t.forbidden_motif_hits+(t.splice_donor_sites??0)+(t.splice_acceptor_sites??0)}function Re(t){let e=t.gc.target,n=Ae(t.final).filter(o=>!o.show||o.show(t.final)).map(o=>{let a=o.get(t.initial),i=o.get(t.final),r=o.format??T,h;if(o.better==="target"){let p=Math.abs(i-e)-Math.abs(a-e);h=Math.abs(p)<5e-4?"same":p<0?"good":"bad"}else{let p=i-a;h=Math.abs(p)<1e-9?"same":p<0==(o.better==="lower")?"good":"bad"}let u={good:"better",bad:"worse",same:"no change"}[h],m={good:"\u2713",bad:"!",same:"\u2013"}[h];return s("tr",null,s("th",{attrs:{scope:"row",title:o.help}},o.label),s("td",{class:"num",text:r(a)}),s("td",{class:"num strong",text:r(i)}),s("td",{class:`verdict ${h}`},s("span",{attrs:{"aria-hidden":"true"}},`${m} `),u))});return s("table",{class:"compare"},s("thead",null,s("tr",null,s("th",{attrs:{scope:"col"}},"Property"),s("th",{class:"num",attrs:{scope:"col"}},"Before"),s("th",{class:"num",attrs:{scope:"col"}},"After"),s("th",{attrs:{scope:"col"}},"Change"))),s("tbody",null,...n))}var oe={gc_global:["Overall GC","Distance of the whole-sequence GC from the target."],gc_window:["Local GC","How far windows stray outside the allowed range."],repeat:["Repeats","Redundant copies of repeated stretches."],hairpin:["Hairpins","Inverted repeats that can fold back on themselves."],homopolymer:["Single-base runs","Bases beyond the longest run you allow."],motif:["Forbidden sites","Matches to enzymes and patterns you keep out."],splice:["Splice sites","How far splice-site scores exceed their cutoffs."],usage:["Codon usage","Cost of using codons the host dislikes."]};function qe(t){let e=t.score.initial_terms,n=t.score.final_terms,o=Object.keys(oe).filter(r=>(e[r]??0)>1e-9||(n[r]??0)>1e-9);if(!o.length)return s("p",{class:"hint",text:"No penalties at all: every constraint is met and codon usage is ideal."});let a=Math.max(...o.flatMap(r=>[e[r]??0,n[r]??0]),1e-9),i=(r,h)=>{let u=s("span",{class:`fill ${h}`});return u.style.width=`${Math.max(r>0?1.5:0,r/a*100)}%`,s("span",{class:"track"},u)};return s("div",{class:"terms"},...o.map(r=>s("div",{class:"term",title:oe[r][1]},s("span",{class:"term-name",text:oe[r][0]}),s("span",{class:"term-bars"},i(e[r]??0,"before"),i(n[r]??0,"after")),s("span",{class:"term-values mono",text:`${x(e[r]??0,2)} \u2192 ${x(n[r]??0,2)}`}))))}function K(t,e,...n){return s("section",{class:"card"},s("h3",{text:t}),e?s("p",{class:"hint",text:e}):null,...n)}function W(t,e,n,o){return s("div",{class:"stat"},s("span",{class:"stat-label",text:t}),s("span",{class:"stat-value"},s("span",{class:"was",text:e})," \u2192 ",s("strong",{text:n})),s("span",{class:"stat-note",text:o}))}function ye(t,e,n){let o=xe(e.initial),a=xe(e.final),i=e.score.initial>0?`${Math.round((1-e.score.final/e.score.initial)*100)}% lower score`:"score unchanged",r=He(e.name),h=e.cancelled?s("div",{class:"callout warn",role:"status"},"Stopped early. This is the best sequence found so far."):e.search.hit_time_limit?s("div",{class:"callout warn",role:"status"},"The time limit ended the search before it settled. Raise the limit or use a thorough search for more."):null,u=s("div",{class:"toolbar"},F("Copy DNA",m=>{be(e.sequence).then(p=>we(m,p?"Copied":"Copy failed"))},!0),F("Copy FASTA",m=>{be(e.fasta).then(p=>we(m,p?"Copied":"Copy failed"))}),F("Download FASTA",()=>ve(`${r}.codonopt.fna`,e.fasta,"text/plain")),F("Download report",()=>ve(`${r}.codonopt.json`,JSON.stringify(e,null,2)+` +`,"application/json")));k(t,s("div",{class:"result-head"},s("div",null,s("h2",{text:"Optimized sequence"}),s("p",{class:"hint",text:`${e.name} \xB7 ${e.protein.length.toLocaleString()} residues \xB7 ${e.codon_usage_table} codon usage`})),u),h,s("div",{class:"stats"},W("Issues found",T(o),T(a),a===0?"none left":"still to resolve"),W("Score",x(e.score.initial,2),x(e.score.final,2),i),W("GC content",J(e.initial.gc_fraction),J(e.final.gc_fraction),`target ${J(e.gc.target)}`),W("Codon adaptation",x(e.initial.cai,2),x(e.final.cai,2),"1.0 is ideal")),K("DNA sequence","The protein is identical to your input; only synonymous codons changed.",ge(e)),K("Before and after",null,Re(e)),K("GC content along the sequence",`Each point is a ${e.gc.window} base window.`,me(e.gc,e.sequence.length)),K("Where the score comes from","Lower is better. Each term is weighted as in your settings.",qe(e)),s("p",{class:"run-info hint"},`${e.search.restarts_run} ${e.search.restarts_run===1?"restart":"restarts"} \xB7 ${T(e.search.greedy_sweeps)} sweeps \xB7 ${T(e.search.moves_evaluated)} codon swaps tried \xB7 ${x(e.search.seconds,1)} s`)),t.focus({preventScroll:!0})}var Ne=350;async function Pe(){let t=document.querySelector('meta[name="codonopt-token"]')?.content??"",e=new I(t),n=c("output"),o=c("form"),a;try{a=await e.meta()}catch(l){H(n,l instanceof Error?l.message:String(l));return}de(a),B(a),o.removeAttribute("inert"),o.removeAttribute("aria-busy");let i=c("sequence"),r=c("detected"),h=c("run"),u=c("cancel"),m=c("add-stop-wrap"),p=null,L=!1,f=()=>{let l=ce(i.value,ee(),a.limits.max_residues,c("add-stop").checked);r.textContent=l.message,r.className=`detected ${l.state}`,m.hidden=l.kind==="dna",h.disabled=p!==null||L||l.state==="empty"};i.addEventListener("input",f),c("add-stop").addEventListener("change",f);for(let l of document.querySelectorAll('input[name="kind"]'))l.addEventListener("change",f);let b=8e6,d=async(l,g)=>{if(!l)return;if(l.size>b){H(n,`${l.name} is ${Math.round(l.size/1e6)} MB; open a file under 8 MB.`);return}let R;try{R=await l.text()}catch{H(n,`Could not read ${l.name||"that file"}. Open a text file, not a folder.`);return}g.value=R,g.dispatchEvent(new Event("input",{bubbles:!0}))},w=c("file-input");c("btn-open").addEventListener("click",()=>w.click()),w.addEventListener("change",()=>{d(w.files?.[0],i),w.value=""}),i.addEventListener("dragover",l=>l.preventDefault()),i.addEventListener("drop",l=>{l.preventDefault(),d(l.dataTransfer?.files[0],i)}),c("btn-example").addEventListener("click",()=>{i.value=`>${a.example.name} +${a.example.protein} +`,c("kind-auto").checked=!0,f(),i.focus()}),c("btn-clear").addEventListener("click",()=>{i.value="",f(),i.focus()}),c("table").addEventListener("change",()=>{Y(),B(a)});let A=c("table-text"),y=c("table-file");c("btn-open-table").addEventListener("click",()=>y.click()),y.addEventListener("change",()=>{d(y.files?.[0],A),y.value=""}),c("splice").addEventListener("change",()=>Z(a));for(let l of document.querySelectorAll('input[name="effort"]'))l.addEventListener("change",()=>Q(a));c("btn-reset").addEventListener("click",()=>{X(a),B(a)});let $=l=>{u.hidden=!l,u.disabled=!1,u.textContent="Stop",h.hidden=l,f()},C=l=>{c("status").textContent=l},N=l=>{window.clearInterval(l.timer),p===l&&(p=null,$(!1))},Ee=(l,g)=>{let R=p===l;N(l),R&&(g.status==="error"?(C("The optimization failed."),H(n,g.error??"The optimization failed.")):g.result&&(C(g.status==="cancelled"?"Stopped early; showing the best sequence found.":"Optimization finished."),ye(n,g.result,a)))},Te=async l=>{if(p===l)try{let g=await e.poll(l.id);if(p!==l)return;g.status==="running"?l.progress.update(g):Ee(l,g)}catch(g){if(p!==l)return;N(l),H(n,g instanceof Error?g.message:String(g))}};o.addEventListener("submit",async l=>{if(l.preventDefault(),p||L||h.disabled)return;let g=ue();if(g){H(n,g);return}L=!0,h.disabled=!0;let R;try{R=await e.start(he())}catch(U){H(n,U instanceof P?U.message:String(U));return}finally{L=!1,f()}C("Optimizing.");let ae=new j(n);ae.update(R);let z={id:R.id,timer:0,progress:ae};p=z,$(!0),z.timer=window.setInterval(()=>{Te(z)},Ne)}),u.addEventListener("click",async()=>{let l=p;if(l){u.disabled=!0,u.textContent="Stopping\u2026";try{await e.cancel(l.id)}catch(g){if(p!==l)return;u.disabled=!1,u.textContent="Stop",l.progress.note(`${g instanceof Error?g.message:String(g)} The run is still going; try Stop again.`)}}}),f()}Pe().catch(t=>{let e=document.getElementById("output"),n=t instanceof Error?t.message:String(t);e?H(e,`The interface failed to start: ${n}`):document.title="codonopt - failed to start",console.error(t)});})(); diff --git a/src/codonopt/web/index.html b/src/codonopt/web/index.html index 71ce25b..80a3390 100644 --- a/src/codonopt/web/index.html +++ b/src/codonopt/web/index.html @@ -26,7 +26,8 @@

codonopt

-
+ +
@@ -170,7 +171,10 @@

Search

-
+ +

+

Design a sequence that is easy to make

The protein stays exactly the same. Only the synonymous codons change, so the DNA diff --git a/tests/test_server.py b/tests/test_server.py index c415671..224c0fc 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -364,6 +364,12 @@ def test_unknown_jobs_are_not_found(client): ({"sequence": "MKV", "seconds": 0}, "between 1 and"), ({"sequence": "MKV", "seconds": 10**6}, "between 1 and"), ({"sequence": "MKV", "seed": -1}, "between 0 and"), + # An integer too wide for a float used to escape as a 500. + ({"sequence": "MKV", "seconds": 10**400}, "between 1 and"), + ({"sequence": "MKV", "gc_target": -(10**400)}, "between 0 and"), + # "Custom table" with nothing in it must not fall back to another host. + ({"sequence": "MKV", "table_text": ""}, "custom codon table is empty"), + ({"sequence": "MKV", "table_text": " "}, "custom codon table is empty"), ({"sequence": "MKV", "kind": "rna"}, "kind must be"), ({"sequence": "A" * (MAX_RESIDUES + 1), "kind": "protein"}, "accepts up to"), ], @@ -378,6 +384,20 @@ def test_malformed_bodies(client): assert client.call("POST", "/api/jobs", raw=b"{not json")[0] == 400 assert client.call("POST", "/api/jobs", raw=b"[1, 2]")[0] == 400 assert client.call("POST", "/api/jobs", raw=b"\xff\xfe")[0] == 400 + # More digits than CPython will parse into an int: a bad request, not a crash. + huge = b'{"sequence": "MKV", "seconds": ' + b"9" * 5000 + b"}" + status, _, body = client.call("POST", "/api/jobs", raw=huge) + assert status == 400 + assert "not valid JSON" in body["error"] + + +def test_an_explicit_table_still_wins_over_an_empty_custom_one(client): + """The page omits `table` for a custom table; other callers may send both.""" + status, _, started = client.start( + {"sequence": "MKV", "table": "ecoli", "table_text": "", **FAST} + ) + assert status == 202 + assert client.wait(started["id"])["status"] == "done" status, _, body = client.call("POST", "/api/jobs", raw=b"null") assert status == 400 diff --git a/web/build.mjs b/web/build.mjs index 87497c4..c81db35 100644 --- a/web/build.mjs +++ b/web/build.mjs @@ -6,7 +6,8 @@ // npm run check fail if the committed files are out of date import { build, context } from "esbuild"; -import { mkdir, readFile, writeFile } from "node:fs/promises"; +import { watchFile } from "node:fs"; +import { mkdir, readFile, readdir, writeFile } from "node:fs/promises"; import { fileURLToPath } from "node:url"; import path from "node:path"; @@ -25,14 +26,21 @@ const options = { const scripts = { ...options, entryPoints: [src("main.ts")], format: "iife", outfile: "app.js" }; const styles = { ...options, entryPoints: [src("styles.css")], outfile: "app.css" }; +/** Files that ship as they are, rather than being compiled. */ +const COPIED = ["index.html", "favicon.svg"]; + /** Build everything in memory: a map of output file name to bytes. */ async function artifacts() { const files = new Map(); for (const config of [scripts, styles]) { const result = await build({ ...config, write: false }); + if (result.warnings.length) { + // The build is the gate CI relies on, so a warning must not slip past it. + throw new Error(`esbuild reported ${result.warnings.length} warning(s); fix them or silence them explicitly.`); + } for (const file of result.outputFiles) files.set(path.basename(file.path), Buffer.from(file.contents)); } - for (const name of ["index.html", "favicon.svg"]) files.set(name, await readFile(src(name))); + for (const name of COPIED) files.set(name, await readFile(src(name))); return files; } @@ -45,14 +53,30 @@ if (mode === "--watch") { context({ ...styles, outfile: path.join(outDir, "app.css") }), ]); await Promise.all(watchers.map((w) => w.watch())); - for (const name of ["index.html", "favicon.svg"]) await writeFile(path.join(outDir, name), await readFile(src(name))); - console.log(`watching; writing to ${outDir} (index.html and favicon.svg were copied once)`); + // index.html carries the token placeholder and the whole form skeleton, so + // it is edited as often as the TypeScript and has to be watched too. + const copy = async () => { + for (const name of COPIED) await writeFile(path.join(outDir, name), await readFile(src(name))); + }; + await copy(); + for (const name of COPIED) { + watchFile(src(name), { interval: 200 }, () => { + void copy().then(() => console.log(`copied ${name}`)); + }); + } + console.log(`watching src/ and writing to ${outDir}`); } else if (mode === "--check") { const stale = []; - for (const [name, bytes] of await artifacts()) { + const built = await artifacts(); + for (const [name, bytes] of built) { const current = await readFile(path.join(outDir, name)).catch(() => null); if (!current || !current.equals(bytes)) stale.push(name); } + // A committed file the build no longer produces would otherwise ship forever. + const present = await readdir(outDir).catch(() => []); + for (const name of present) { + if (!built.has(name)) stale.push(`${name} (no longer built)`); + } if (stale.length) { console.error(`Out of date: ${stale.join(", ")}\nRun "npm run build" in web/ and commit the result.`); process.exit(1); diff --git a/web/playwright.config.ts b/web/playwright.config.ts index a435648..da6babd 100644 --- a/web/playwright.config.ts +++ b/web/playwright.config.ts @@ -1,22 +1,30 @@ import { defineConfig } from "@playwright/test"; -const PORT = 8765; +// A port of this run's own, so a stale `codonopt gui` left running elsewhere +// can never be adopted and tested in place of the current build. +const PORT = Number(process.env.CODONOPT_PORT ?? 8700 + (process.pid % 900)); export default defineConfig({ testDir: "tests", - timeout: 60_000, + timeout: 90_000, fullyParallel: false, workers: 1, - reporter: "list", + retries: process.env.CI ? 2 : 0, + reporter: process.env.CI ? [["list"], ["html", { open: "never" }]] : "list", use: { baseURL: `http://127.0.0.1:${PORT}`, launchOptions: process.env.CODONOPT_CHROMIUM ? { executablePath: process.env.CODONOPT_CHROMIUM } : {}, + // So a failure in CI can be read afterwards instead of guessed at. + trace: "retain-on-failure", + screenshot: "only-on-failure", }, // The real Python server, serving the committed build: what users get. webServer: { command: `python -m codonopt gui --no-window --no-browser --port ${PORT}`, url: `http://127.0.0.1:${PORT}/`, - reuseExistingServer: !process.env.CI, - timeout: 30_000, + reuseExistingServer: false, + stdout: "pipe", + stderr: "pipe", + timeout: 60_000, }, }); diff --git a/web/src/api.ts b/web/src/api.ts index bb72b62..1c12258 100644 --- a/web/src/api.ts +++ b/web/src/api.ts @@ -52,7 +52,7 @@ export class Api { try { data = await response.json(); } catch { - /* fall through to the status check */ + /* fall through: a missing or malformed body is handled below */ } if (!response.ok) { const message = @@ -61,6 +61,14 @@ export class Api { : `The server answered ${response.status}.`; throw new ApiError(message, response.status); } + // A 2xx with no usable body would otherwise hand callers `null` and fail + // later, somewhere that cannot explain itself. + if (data === null || typeof data !== "object") { + throw new ApiError( + `The server answered ${response.status} but sent no readable data.`, + response.status, + ); + } return data as T; } } diff --git a/web/src/detect.ts b/web/src/detect.ts index 5c2d3a4..70662db 100644 --- a/web/src/detect.ts +++ b/web/src/detect.ts @@ -18,7 +18,12 @@ const DNA = new Set("ACGTU"); * so the badge matches what will happen, but it only informs: the server stays * the authority and reports anything this misses. */ -export function describe(text: string, requested: Kind, maxResidues: number): Detection { +export function describe( + text: string, + requested: Kind, + maxResidues: number, + addStop = false, +): Detection { const trimmed = text.trim(); if (!trimmed) return { state: "empty", message: "Nothing pasted yet.", kind: null, length: 0 }; @@ -46,6 +51,12 @@ export function describe(text: string, requested: Kind, maxResidues: number): De ); } const codons = sequence.length / 3; + // The server translates first, so the limit is on codons, not bases. + if (codons > maxResidues) { + return error( + `DNA · ${codons.toLocaleString()} codons; this page takes up to ${maxResidues.toLocaleString()}.`, + ); + } return ok("dna", sequence.length, `DNA · ${sequence.length.toLocaleString()} bases, ${codons} codons`); } @@ -55,9 +66,12 @@ export function describe(text: string, requested: Kind, maxResidues: number): De if (stop !== -1 && stop !== sequence.length - 1) { return error(`Protein · stop symbol (*) at position ${stop + 1}, before the end.`); } - if (sequence.length > maxResidues) { + // A stop codon the server will append counts towards its limit too. + const residues = sequence.length + (addStop && !sequence.endsWith("*") ? 1 : 0); + if (residues > maxResidues) { return error( - `Protein · ${sequence.length.toLocaleString()} residues; this page takes up to ${maxResidues.toLocaleString()}.`, + `Protein · ${residues.toLocaleString()} residues${residues > sequence.length ? " with the stop codon" : ""}; ` + + `this page takes up to ${maxResidues.toLocaleString()}.`, ); } const noun = sequence.length === 1 ? "residue" : "residues"; diff --git a/web/src/form.ts b/web/src/form.ts index 499d28e..f64def7 100644 --- a/web/src/form.ts +++ b/web/src/form.ts @@ -112,6 +112,18 @@ export function syncTable(): void { $("custom-table").hidden = !custom; } +/** + * Why the form cannot be submitted as it stands, or null when it can. + * + * Only for what the server cannot see: an empty custom table reaches it as no + * table at all, and it would quietly fall back to the default host. + */ +export function problem(): string | null { + if ($("table").value !== "custom") return null; + if ($("table-text").value.trim()) return null; + return "Paste or open a codon usage table, or pick a built-in host instead of “Custom table…”."; +} + export function describeTable(meta: Meta): void { const name = $("table").value; $("table-hint").textContent = diff --git a/web/src/index.html b/web/src/index.html index 71ce25b..80a3390 100644 --- a/web/src/index.html +++ b/web/src/index.html @@ -26,7 +26,8 @@

codonopt

-
+ +
@@ -170,7 +171,10 @@

Search

-
+ +

+

Design a sequence that is easy to make

The protein stays exactly the same. Only the synonymous codons change, so the DNA diff --git a/web/src/main.ts b/web/src/main.ts index 929d7fe..0bced6f 100644 --- a/web/src/main.ts +++ b/web/src/main.ts @@ -6,6 +6,7 @@ import { describeSplice, describeTable, populate, + problem, readPayload, reset, selectedKind, @@ -21,6 +22,9 @@ async function main(): Promise { const api = new Api(token); const output = $("output"); + // The form starts inert: `populate` fills it from the server's defaults, and + // anything typed before that lands would be overwritten without warning. + const form = $("form"); let meta: Meta; try { meta = await api.meta(); @@ -30,29 +34,60 @@ async function main(): Promise { } populate(meta); describeTable(meta); + form.removeAttribute("inert"); + form.removeAttribute("aria-busy"); const sequence = $("sequence"); const detected = $("detected"); const run = $("run"); const cancel = $("cancel"); const stopRow = $("add-stop-wrap"); - let running: { id: string; timer: number } | null = null; + /** The one run that owns the screen. Anything else that arrives is stale. */ + interface Run { + id: string; + timer: number; + progress: Progress; + } + let running: Run | null = null; + let starting = false; /* ----- sequence box ----- */ const refresh = (): void => { - const info = describe(sequence.value, selectedKind(), meta.limits.max_residues); + const info = describe( + sequence.value, + selectedKind(), + meta.limits.max_residues, + $("add-stop").checked, + ); detected.textContent = info.message; detected.className = `detected ${info.state}`; stopRow.hidden = info.kind === "dna"; - run.disabled = running !== null || info.state === "empty"; + run.disabled = running !== null || starting || info.state === "empty"; }; sequence.addEventListener("input", refresh); + $("add-stop").addEventListener("change", refresh); for (const radio of document.querySelectorAll('input[name="kind"]')) radio.addEventListener("change", refresh); + // Generous next to the 15,000-residue limit, small enough that a misdropped + // genome cannot hang the tab. + const MAX_FILE_BYTES = 8_000_000; + const load = async (file: File | undefined, into: HTMLTextAreaElement): Promise => { if (!file) return; - into.value = await file.text(); + if (file.size > MAX_FILE_BYTES) { + showError(output, `${file.name} is ${Math.round(file.size / 1e6)} MB; open a file under 8 MB.`); + return; + } + let text: string; + try { + text = await file.text(); + } catch { + // A folder dropped on the box, or a file that moved since it was picked. + showError(output, `Could not read ${file.name || "that file"}. Open a text file, not a folder.`); + return; + } + into.value = text; into.dispatchEvent(new Event("input", { bubbles: true })); }; const fileInput = $("file-input"); @@ -107,62 +142,109 @@ async function main(): Promise { const setRunning = (active: boolean): void => { cancel.hidden = !active; cancel.disabled = false; + cancel.textContent = "Stop"; run.hidden = active; refresh(); }; - const finish = (job: Job): void => { - if (running) window.clearInterval(running.timer); + /** Announce a change a sighted user sees in the results region. */ + const say = (message: string): void => { + $("status").textContent = message; + }; + + /** Let go of a run: stop polling it, and clear the state if it is current. */ + const release = (job: Run): void => { + window.clearInterval(job.timer); + if (running !== job) return; // a later run owns the screen now running = null; setRunning(false); - if (job.status === "error") showError(output, job.error ?? "The optimization failed."); - else if (job.result) showResult(output, job.result, meta); }; - $("form").addEventListener("submit", async (event) => { + const finish = (job: Run, latest: Job): void => { + const current = running === job; + release(job); + if (!current) return; // a stale poll must not paint over a newer run + if (latest.status === "error") { + say("The optimization failed."); + showError(output, latest.error ?? "The optimization failed."); + } else if (latest.result) { + say(latest.status === "cancelled" ? "Stopped early; showing the best sequence found." : "Optimization finished."); + showResult(output, latest.result, meta); + } + }; + + const poll = async (job: Run): Promise => { + if (running !== job) return; + try { + const latest = await api.poll(job.id); + if (running !== job) return; // the answer arrived after we moved on + if (latest.status === "running") job.progress.update(latest); + else finish(job, latest); + } catch (error) { + if (running !== job) return; + release(job); + showError(output, error instanceof Error ? error.message : String(error)); + } + }; + + form.addEventListener("submit", async (event) => { event.preventDefault(); - if (running || run.disabled) return; - let job: Job; + // `starting` closes the window between this click and the server's reply, + // where a second click would otherwise start a second job. + if (running || starting || run.disabled) return; + const wrong = problem(); + if (wrong) { + showError(output, wrong); + return; + } + starting = true; + run.disabled = true; + let started: Job; try { - job = await api.start(readPayload()); + started = await api.start(readPayload()); } catch (error) { showError(output, error instanceof ApiError ? error.message : String(error)); return; + } finally { + starting = false; + refresh(); } + say("Optimizing."); const progress = new Progress(output); - progress.update(job); - running = { id: job.id, timer: 0 }; + progress.update(started); + const job: Run = { id: started.id, timer: 0, progress }; + running = job; setRunning(true); - running.timer = window.setInterval(async () => { - if (!running) return; - try { - const latest = await api.poll(running.id); - if (latest.status === "running") progress.update(latest); - else finish(latest); - } catch (error) { - if (running) window.clearInterval(running.timer); - running = null; - setRunning(false); - showError(output, error instanceof Error ? error.message : String(error)); - } - }, POLL_MS); + job.timer = window.setInterval(() => void poll(job), POLL_MS); }); cancel.addEventListener("click", async () => { - if (!running) return; + const job = running; + if (!job) return; cancel.disabled = true; cancel.textContent = "Stopping…"; try { - await api.cancel(running.id); - } catch { - /* the next poll reports whatever state the job is in */ + await api.cancel(job.id); + } catch (error) { + if (running !== job) return; + // Stop is the only way out of a long run, so never leave it dead. + cancel.disabled = false; + cancel.textContent = "Stop"; + job.progress.note( + `${error instanceof Error ? error.message : String(error)} The run is still going; try Stop again.`, + ); } }); - new MutationObserver(() => { - if (cancel.hidden) cancel.textContent = "Stop"; - }).observe(cancel, { attributes: true, attributeFilter: ["hidden"] }); refresh(); } -void main(); +// Without this, any failure while wiring the page would leave it silent and +// dead, with no hint of what went wrong. +void main().catch((error: unknown) => { + const output = document.getElementById("output"); + const message = error instanceof Error ? error.message : String(error); + if (output) showError(output, `The interface failed to start: ${message}`); + else document.title = "codonopt - failed to start"; + console.error(error); +}); diff --git a/web/src/results.ts b/web/src/results.ts index 99aa14f..bda9635 100644 --- a/web/src/results.ts +++ b/web/src/results.ts @@ -46,12 +46,22 @@ function action(label: string, onClick: (button: HTMLButtonElement) => void, pri return button; } +const flashing = new WeakMap(); + +/** Briefly replace a button's label, surviving repeated clicks. */ function flash(button: HTMLButtonElement, message: string): void { - const original = button.textContent; + const pending = flashing.get(button); + if (pending !== undefined) window.clearTimeout(pending); + // Capture the real label once; a second click must not capture "Copied". + if (button.dataset.label === undefined) button.dataset.label = button.textContent ?? ""; button.textContent = message; - setTimeout(() => { - button.textContent = original; - }, 1600); + flashing.set( + button, + window.setTimeout(() => { + button.textContent = button.dataset.label ?? ""; + flashing.delete(button); + }, 1600), + ); } const safeName = (name: string): string => name.replace(/[^\w.-]+/g, "_") || "sequence"; @@ -77,9 +87,11 @@ export class Progress { private readonly elapsed = h("span", { class: "mono" }); private readonly detail = h("span", { class: "hint" }); private readonly log = h("ol", { class: "log mono", attrs: { "aria-label": "Search log" } }); + private readonly trouble = h("p", { class: "note warn", role: "alert" }); private lastLog = ""; constructor(output: HTMLElement) { + this.trouble.hidden = true; replace( output, h( @@ -89,21 +101,34 @@ export class Progress { h("p", { class: "hint", text: "Trying synonymous codons and keeping the changes that lower the score." }), h("div", { class: "bar", role: "progressbar", attrs: { "aria-label": "Optimization progress" } }, this.bar), h("div", { class: "progress-meta" }, this.elapsed, this.detail), + this.trouble, this.log, ), ); output.focus({ preventScroll: true }); } + /** Report something that went wrong without throwing the run's state away. */ + note(message: string): void { + this.trouble.textContent = message; + this.trouble.hidden = false; + } + update(job: Job): void { this.elapsed.textContent = `${fmt(job.elapsed, 1)} s of at most ${int(job.max_seconds)} s`; + const track = this.bar.parentElement; if (job.restarts_total > 1) { - this.detail.textContent = `Restart ${Math.min(job.restarts_done + 1, job.restarts_total)} of ${job.restarts_total}`; - this.bar.style.width = `${Math.min(100, (job.restarts_done / job.restarts_total) * 100)}%`; - this.bar.parentElement?.classList.remove("indeterminate"); + const done = Math.min(job.restarts_done, job.restarts_total); + this.detail.textContent = `Restart ${Math.min(done + 1, job.restarts_total)} of ${job.restarts_total}`; + this.bar.style.width = `${(done / job.restarts_total) * 100}%`; + track?.classList.remove("indeterminate"); + track?.setAttribute("aria-valuemin", "0"); + track?.setAttribute("aria-valuemax", String(job.restarts_total)); + track?.setAttribute("aria-valuenow", String(done)); } else { this.detail.textContent = "Stops as soon as nothing improves."; - this.bar.parentElement?.classList.add("indeterminate"); + track?.classList.add("indeterminate"); + track?.removeAttribute("aria-valuenow"); } const key = job.messages.join("\n"); if (key !== this.lastLog) { diff --git a/web/src/styles.css b/web/src/styles.css index 1751c8d..5dc66b0 100644 --- a/web/src/styles.css +++ b/web/src/styles.css @@ -103,6 +103,7 @@ h3 { font-size: 1rem; } background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); } +.panel[inert] { opacity: 0.55; } .panel-scroll { padding: 4px 18px 8px; min-height: 0; } .actions { position: sticky; bottom: 0; display: flex; gap: 8px; padding: 12px 18px; diff --git a/web/tests/e2e.spec.ts b/web/tests/e2e.spec.ts index f63b4be..1cc94dc 100644 --- a/web/tests/e2e.spec.ts +++ b/web/tests/e2e.spec.ts @@ -5,36 +5,51 @@ const shot = async (page: Page, name: string): Promise => { if (SHOTS) await page.screenshot({ path: `${SHOTS}/${name}.png`, fullPage: true }); }; +/** + * Open the page and wait until it is actually usable. + * + * The form carries `inert` until the defaults have arrived, which is the only + * honest readiness signal: until then the buttons exist but do nothing. + * Returns the list of browser errors seen, which every test asserts is empty. + */ +async function open(page: Page): Promise { + const errors: string[] = []; + page.on("console", (message) => { + // A deliberate 400 is logged by the browser as a console error; what we are + // watching for is thrown exceptions and content-policy refusals. + if (message.type() === "error" && !/Failed to load resource/.test(message.text())) { + errors.push(message.text()); + } + }); + page.on("pageerror", (error) => errors.push(String(error))); + await page.goto("/"); + await page.waitForFunction(() => !document.getElementById("form")?.hasAttribute("inert")); + return errors; +} + /** Pick the quick setting so the suite stays fast. */ async function quick(page: Page): Promise { await page.locator('label[for="effort-quick"]').click(); } -test.beforeEach(async ({ page }) => { - await page.goto("/"); - await expect(page.locator("#run")).toBeEnabled({ timeout: 10_000 }).catch(() => undefined); -}); - -test("loads with no console errors and a disabled Optimise button", async ({ page }) => { - const errors: string[] = []; - page.on("console", (m) => m.type() === "error" && errors.push(m.text())); - page.on("pageerror", (e) => errors.push(String(e))); - await page.goto("/"); +test("loads with no console errors and a disabled Optimize button", async ({ page }) => { + const errors = await open(page); await expect(page.locator("#empty")).toBeVisible(); await expect(page.locator("#run")).toBeDisabled(); - await expect(page.locator("#table option").first()).toBeAttached(); - expect(errors).toEqual([]); + await expect(page.locator("#table option")).not.toHaveCount(0); await shot(page, "01-empty"); + expect(errors).toEqual([]); }); test("optimises the example and shows every result section", async ({ page }) => { + const errors = await open(page); await page.locator("#btn-example").click(); await expect(page.locator("#run")).toBeEnabled(); await expect(page.locator("#detected")).not.toBeEmpty(); await quick(page); await page.locator("#run").click(); await expect(page.locator(".progress")).toBeVisible(); - await expect(page.locator(".result-head")).toBeVisible({ timeout: 45_000 }); + await expect(page.locator(".result-head")).toBeVisible({ timeout: 60_000 }); await expect(page.locator(".stats .stat").first()).toBeVisible(); await expect(page.locator("table.compare")).toBeVisible(); await expect(page.locator("svg.chart")).toBeVisible(); @@ -52,34 +67,42 @@ test("optimises the example and shows every result section", async ({ page }) => ]); expect(download.suggestedFilename()).toMatch(/\.(fna|fa|fasta)$/); await shot(page, "02-result"); + expect(errors).toEqual([]); }); test("keeps the protein unchanged (the sequence is a synonymous recoding)", async ({ page }) => { - await page.locator("#sequence").fill("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVV"); + const protein = "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVV"; + const errors = await open(page); + await page.locator("#sequence").fill(protein); await expect(page.locator("#detected")).toContainText(/protein/i); await quick(page); await page.locator("#run").click(); - await expect(page.locator(".seq .cell").first()).toBeVisible({ timeout: 45_000 }); + await expect(page.locator(".seq .cell").first()).toBeVisible({ timeout: 60_000 }); const shown = await page.locator(".line.aa").evaluateAll((rows) => - rows.map((r) => Array.from(r.querySelectorAll(".cell")).map((c) => c.textContent).join("")).join(""), + rows.map((row) => Array.from(row.querySelectorAll(".cell")).map((cell) => cell.textContent).join("")).join(""), ); - expect(shown.startsWith("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEKAVQVKVKALPDAQFEVV")).toBe(true); + // Compared as text, so a failure prints the protein that was actually drawn. + expect(shown).toBe(`${protein}*`); + expect(errors).toEqual([]); }); test("explains problems instead of failing silently", async ({ page }) => { + const errors = await open(page); await page.locator("#sequence").fill("MKT*AY1"); await expect(page.locator("#detected")).toBeVisible(); // Whatever the badge says, running must either be blocked or give a readable error. if (await page.locator("#run").isEnabled()) { await page.locator("#run").click(); - await expect(page.locator(".callout.error")).toBeVisible({ timeout: 15_000 }); + await expect(page.locator(".callout.error")).toBeVisible({ timeout: 20_000 }); } else { await expect(page.locator("#detected")).toHaveText(/\S/); } await shot(page, "03-error"); + expect(errors).toEqual([]); }); -test("can cancel a long run and keeps the best result so far", async ({ page }) => { +test("can cancel a long run and hands the controls back", async ({ page }) => { + const errors = await open(page); await page.locator("#btn-example").click(); await page.locator("#seconds").fill("60"); await page.locator('label[for="effort-thorough"]').click(); @@ -87,29 +110,107 @@ test("can cancel a long run and keeps the best result so far", async ({ page }) await expect(page.locator("#cancel")).toBeVisible(); await page.waitForTimeout(1500); await page.locator("#cancel").click(); - await expect(page.locator(".result-head")).toBeVisible({ timeout: 20_000 }); - await expect(page.locator(".callout.warn")).toContainText("Stopped early"); + // What matters is that Stop ends the run and restores the form, whatever the + // search had managed by then. + await expect(page.locator(".result-head")).toBeVisible({ timeout: 30_000 }); await expect(page.locator("#run")).toBeEnabled(); await expect(page.locator("#cancel")).toBeHidden(); + await expect(page.locator("#run")).toHaveText(/optimize/i); + expect(errors).toEqual([]); }); -test("offers several built-in codon-usage tables", async ({ page }) => { +test("two submits in the same moment start only one run", async ({ page }) => { + const errors = await open(page); + // Counted at the wire, because the page only ever shows one card either way: + // the damage of a second job is invisible until its result overwrites yours. + let started = 0; + page.on("request", (request) => { + if (request.method() === "POST" && new URL(request.url()).pathname === "/api/jobs") started++; + }); await page.locator("#btn-example").click(); - await page.locator("#table").selectOption({ index: 0 }); - const options = await page.locator("#table option").allTextContents(); - expect(options.length).toBeGreaterThan(1); + await quick(page); + // A double click, or a held Enter key, reaches the handler again before the + // server has answered the first time. + await page.evaluate(() => { + const form = document.getElementById("form") as HTMLFormElement; + form.requestSubmit(); + form.requestSubmit(); + form.requestSubmit(); + }); + await expect(page.locator(".result-head")).toBeVisible({ timeout: 60_000 }); + expect(started).toBe(1); + await expect(page.locator(".result-head")).toHaveCount(1); + await expect(page.locator("#run")).toBeEnabled(); + await expect(page.locator("#cancel")).toBeHidden(); + // A second run must still work, and replace the first result. + await page.locator("#run").click(); + await expect(page.locator(".result-head")).toBeVisible({ timeout: 60_000 }); + await expect(page.locator(".result-head")).toHaveCount(1); + expect(started).toBe(2); + expect(errors).toEqual([]); +}); + +test("refuses an empty custom codon table instead of using another host", async ({ page }) => { + const errors = await open(page); + await page.locator("#btn-example").click(); + await page.locator("#table").selectOption("custom"); + await expect(page.locator("#custom-table")).toBeVisible(); + await page.locator("#run").click(); + await expect(page.locator(".callout.error")).toContainText(/custom table/i); + await expect(page.locator(".progress")).toHaveCount(0); + expect(errors).toEqual([]); +}); + +test("offers every built-in codon usage table, plus a custom one", async ({ page }) => { + const errors = await open(page); + const names = await page.locator("#table option").evaluateAll((options) => + options.map((option) => (option as HTMLOptionElement).value), + ); + const expected = await page.evaluate(async () => { + const token = document.querySelector('meta[name="codonopt-token"]')?.content ?? ""; + const meta = await fetch("/api/meta", { headers: { "X-Codonopt-Token": token } }).then((r) => r.json()); + return meta.tables.map((table: { name: string }) => table.name); + }); + expect(expected.length).toBeGreaterThan(0); + expect(names).toEqual([...expected, "custom"]); + expect(errors).toEqual([]); +}); + +test("warns before sending a sequence that is too long", async ({ page }) => { + const errors = await open(page); + const limit = await page.evaluate(async () => { + const token = document.querySelector('meta[name="codonopt-token"]')?.content ?? ""; + const meta = await fetch("/api/meta", { headers: { "X-Codonopt-Token": token } }).then((r) => r.json()); + return meta.limits.max_residues as number; + }); + // DNA used to slip past the check entirely and show a green badge. The badge + // only warns: the server stays the authority on what it will accept. + await page.locator("#sequence").fill("ATG".repeat(limit + 10)); + await expect(page.locator("#detected")).toHaveClass(/error/); + await expect(page.locator("#detected")).toContainText(/codons/); + await expect(page.locator("#detected")).toContainText(String(limit.toLocaleString())); + + // And a protein one residue under the limit is fine until "Add stop codon" + // pushes it over, which the badge used to miss. + await page.locator("#sequence").fill("M".repeat(limit)); + await page.locator("#add-stop").uncheck(); + await expect(page.locator("#detected")).toHaveClass(/ok/); + await page.locator("#add-stop").check(); + await expect(page.locator("#detected")).toHaveClass(/error/); + expect(errors).toEqual([]); }); -for (const [name, scheme] of [["light", "light"], ["dark", "dark"]] as const) { - test(`renders in ${name} mode`, async ({ browser }) => { +for (const scheme of ["light", "dark"] as const) { + test(`renders in ${scheme} mode`, async ({ browser }) => { const context = await browser.newContext({ colorScheme: scheme, viewport: { width: 1280, height: 900 } }); const page = await context.newPage(); - await page.goto("/"); + const errors = await open(page); await page.locator("#btn-example").click(); await quick(page); await page.locator("#run").click(); - await expect(page.locator("svg.chart")).toBeVisible({ timeout: 45_000 }); - await shot(page, `04-${name}`); + await expect(page.locator("svg.chart")).toBeVisible({ timeout: 60_000 }); + await shot(page, `04-${scheme}`); + expect(errors).toEqual([]); await context.close(); }); } @@ -117,13 +218,16 @@ for (const [name, scheme] of [["light", "light"], ["dark", "dark"]] as const) { test("works at phone width without horizontal page scroll", async ({ browser }) => { const context = await browser.newContext({ viewport: { width: 390, height: 800 } }); const page = await context.newPage(); - await page.goto("/"); + const errors = await open(page); await page.locator("#btn-example").click(); await quick(page); await page.locator("#run").click(); - await expect(page.locator("svg.chart")).toBeVisible({ timeout: 45_000 }); - const overflow = await page.evaluate(() => document.documentElement.scrollWidth - document.documentElement.clientWidth); + await expect(page.locator("svg.chart")).toBeVisible({ timeout: 60_000 }); + const overflow = await page.evaluate( + () => document.documentElement.scrollWidth - document.documentElement.clientWidth, + ); expect(overflow).toBeLessThanOrEqual(1); await shot(page, "05-phone"); + expect(errors).toEqual([]); await context.close(); }); From ce21e8bcf6534398552e13d76939d1ace8cb59c0 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 11 Oct 2026 00:48:11 +0200 Subject: [PATCH 5/6] Report end-to-end failures as GitHub annotations Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Wq3oxFtutXhnAgmzKztG9g --- web/playwright.config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/playwright.config.ts b/web/playwright.config.ts index da6babd..ef5d9ef 100644 --- a/web/playwright.config.ts +++ b/web/playwright.config.ts @@ -10,7 +10,9 @@ export default defineConfig({ fullyParallel: false, workers: 1, retries: process.env.CI ? 2 : 0, - reporter: process.env.CI ? [["list"], ["html", { open: "never" }]] : "list", + // The "github" reporter turns failures into annotations on the run itself, + // which can be read without digging through the log. + reporter: process.env.CI ? [["github"], ["list"], ["html", { open: "never" }]] : "list", use: { baseURL: `http://127.0.0.1:${PORT}`, launchOptions: process.env.CODONOPT_CHROMIUM ? { executablePath: process.env.CODONOPT_CHROMIUM } : {}, From 8b8e4c458f1c0843f4ce5e0bc407cb12924422ba Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 11 Oct 2026 00:53:39 +0200 Subject: [PATCH 6/6] Derive the test port from the working directory, not the process id Playwright loads the config again in every worker, so a pid-based port made each worker look for the server on a different port than the one it was started on. Every test failed with ECONNREFUSED in CI; local runs passed only because they set CODONOPT_PORT explicitly. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Wq3oxFtutXhnAgmzKztG9g --- web/playwright.config.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/web/playwright.config.ts b/web/playwright.config.ts index ef5d9ef..5de4699 100644 --- a/web/playwright.config.ts +++ b/web/playwright.config.ts @@ -1,8 +1,17 @@ import { defineConfig } from "@playwright/test"; -// A port of this run's own, so a stale `codonopt gui` left running elsewhere -// can never be adopted and tested in place of the current build. -const PORT = Number(process.env.CODONOPT_PORT ?? 8700 + (process.pid % 900)); +// A port of this checkout's own, so a stale `codonopt gui` left running +// elsewhere can never be adopted and tested in place of the current build. +// +// This config is loaded again in every worker process, so the port has to come +// from something they all agree on: the working directory, never the pid. +function portFor(key: string): number { + let hash = 2166136261; + for (const char of key) hash = Math.imul(hash ^ char.charCodeAt(0), 16777619); + return 8700 + (Math.abs(hash) % 900); +} + +const PORT = Number(process.env.CODONOPT_PORT ?? portFor(process.cwd())); export default defineConfig({ testDir: "tests",