Releases: aimed-lab/SPINNER
v1.141 — JIT warm-up + map-first full-height view
Highlights since v1.139
- Map-first default view (1.141). The explorer boots with the results table collapsed, giving the network the full canvas height. Expand/maximize still available.
- Canvas fills the viewport (1.141). Fixed a topbarless layout bug that reserved a non-existent 56px topbar, leaving a dead band; the sidebar and canvas now extend to the bottom and the canvas meets the results bar flush.
- JIT startup warm-up (1.140). The numba WIPER/WINNER kernels are pre-compiled in a background thread at boot, so the first analysis is ~2s instead of ~30s. The server accepts connections immediately while warming.
See CHANGELOG.md for details.
v1.139 — explorer readability + localhost fix
Highlights since v1.135
- Left size dock (1.138). Node-size and edge-size legends + their controllers now live in a collapsible left panel beside the canvas (out of the gear popover), freeing the network visualization. Collapse handle + a "Side panel" toggle.
- Node size-ratio slider + zoom-steady sizing (1.136). A 1–100 largest:smallest ratio control; node/edge/label sizes stay visually steady as you zoom.
- Off-screen culling / Declutter (1.136). When zoomed in, nodes whose center leaves the viewport (and their edges) are hidden.
- Live view-count badge + legend toggle (1.137). The header
N/totalcounts reflect what's actually drawn and update on pan/zoom. - Blank-page fix on http://localhost (1.139). Server binds both IPv4
127.0.0.1and IPv6::1(loopback-only), solocalhostworks regardless of how it resolves.
See CHANGELOG.md for details.
v1.135 — Assistant flicker fix + offline fallback
Highlights
- Assistant offline fallback (1.135). When the shared agent service (
:8088) is unreachable, free-form network-analysis requests now run SPINNER's own WIPER/WINNER engines instead of erroring — summarizing on-screen results or re-runningPOST /api/analyze, and returning the top nodes by WINNER leverage + top WIPER2 edges (top Nhonored). Network-only: no expression data, no API key, no LLM. Drug-target ranking still needs the agent service + GeneTerrain. - Assistant flicker fix (1.134). The copilot panel no longer flickers on open or on each reply: a single chat bubble is reused in place (no add/remove churn), and the drawer is promoted to its own compositor layer.
See CHANGELOG.md for details.
v1.133 — collapsed results bar fix
Collapsing the results table now leaves an always-visible, clickable bar pinned to the viewport bottom ('N / N edges · click to expand') so it can always be restored. See CHANGELOG.md.
v1.132 — results table redesign
The Edges/Nodes results table now scrolls internally within a fixed-height region (sticky headers, ~7 rows by default) instead of growing the page. New header controls: row-count chip, maximize/restore, and collapse/expand. See CHANGELOG.md.
v1.131 — copilot analyzes the current network
Patch on 1.130: the Assistant copilot now operates on the currently-loaded network (sends the on-screen edge list to the agent service), and analyze/geneterrain requests route to the copilot instead of the local parser. See CHANGELOG.md.
v1.130 — Assistant copilot
The Assistant drawer now drives the full SPINNER → GeneTerrain drug-target workflow via a shared LLM agent service.
- Free-form requests stream to a shared agent service (Grok-backed) that calls
spinner_analyze→geneterrain_fuse→build_geneterrain_link; tool activity and the resulting GeneTerrain link render in-chat. - Terse UI commands still run locally and instantly.
- SPINNER stays network-only — the LLM and API key live only in the shared service (spinner-agent-console).
Full notes: CHANGELOG.md
v1.120 — Open in GeneTerrain handoff
SPINNER stays network-only; this release adds a one-click bridge to the standalone GeneTerrain (GTKM) drug-target map.
Open in GeneTerrain
- Export → "Open in GeneTerrain" serializes the current WINNER node scores (network-leverage / potency layer) as a
gene\tscoreTSV, base64-encodes it, and opens GeneTerrain's Targets view with the data in the URL fragment:…/?view=targets#net=<base64 TSV>— no hosting needed. - GeneTerrain fuses that with a SIGnature gene-importance matrix to rank targets by potency × importance × cross-cell selectivity.
- The
#net=/?net=contract is agent-operable directly from/api/analyzeoutput — one workflow, two front doors (human button / agent URL). - No expression/attribution data enters SPINNER's scoring.
Full notes: CHANGELOG.md
v1.110 — Deep-link loader + dense-graph robustness
Builds on the 1.100 GUI redesign. The POST /api/analyze contract is unchanged (additive summary fields only).
Deep-link loader
Launch SPINNER with an external dataset at boot:
- Embedded hash payload —
#data=<base64 JSON>,#edges=<base64 TSV>,#text=<URI-encoded TSV>(self-contained link, no hosting needed) ?edges=<url>— fetches a tab-separated edge list cross-origin (good for large datasets)postMessage({type:'spinner:load', ...})from a parent frame, with aspinner:loadedack- Query options across all paths:
?title=,?iterations=,?novel=1; failed fetch falls back to the demo network with a chat notice
Dense-graph robustness
- WIPER1, WIPER2, and WINNER are scored independently and each guarded against
(RuntimeError, MemoryError, OverflowError)— raw edges plus whichever engines succeed always return, withsummary.warningsand per-enginewiper1Available/wiper2Available/winnerAvailableflags, plus an optionalmaxPathsPerPairrequest param - Recursion limit + request-thread C-stack raised so deep-but-bounded WIPER path enumeration completes
- Edges fall back to raw weight for width/filtering/ranking when the selected WIPER metric is unavailable, so a degraded graph still renders its edges
Full changelog: see CHANGELOG.md