| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| install.ps1 | 2026-10-19 | 12.7 kB | |
| install.sh | 2026-10-19 | 11.3 kB | |
| semlith-v0.44.1-aarch64-apple-darwin.tar.gz | 2026-10-19 | 26.7 MB | |
| semlith-v0.44.1-aarch64-apple-darwin.tar.gz.sig | 2026-10-19 | 294 Bytes | |
| semlith-v0.44.1-aarch64-unknown-linux-gnu.tar.gz | 2026-10-19 | 26.2 MB | |
| semlith-v0.44.1-aarch64-unknown-linux-gnu.tar.gz.sig | 2026-10-19 | 294 Bytes | |
| semlith-v0.44.1-x86_64-pc-windows-msvc.zip | 2026-10-19 | 24.4 MB | |
| semlith-v0.44.1-x86_64-pc-windows-msvc.zip.sig | 2026-10-19 | 294 Bytes | |
| semlith-v0.44.1-x86_64-unknown-linux-gnu.tar.gz | 2026-10-19 | 27.6 MB | |
| semlith-v0.44.1-x86_64-unknown-linux-gnu.tar.gz.sig | 2026-10-19 | 294 Bytes | |
| SHA256SUMS | 2026-10-19 | 603 Bytes | |
| SHA256SUMS.sig | 2026-10-19 | 294 Bytes | |
| README.md | 2026-10-19 | 6.2 kB | |
| Semlith 0.44.1 source code.tar.gz | 2026-10-19 | 9.1 MB | |
| Semlith 0.44.1 source code.zip | 2026-10-19 | 9.4 MB | |
| Totals: 15 Items | 123.5 MB | 0 | |
Added
- The documents benchmark is in the repository.
bench/scorecard/documents/holds the 127 frozen questions about passages inside 53 public documents (PDF, Word, PowerPoint, Excel, OpenDocument, EPUB, RTF, notebooks, CSV), a fetch step that downloads each from its publisher and checks its SHA-256, the four retrieval arms and the headless Claude Code round, and the raw scores of the run behind the numbers. Re-run on 0.44.1:semlith_searchfinds the passage within 4k tokens for 116 of 127 questions, against 34 forrgaand 7 forrg; on Opus, an agent with semlith finds 124 of 127 and quotes nothing it did not read, an agent with Grep, Glob and Read 80, with 41 of its 127 top quotes not in the document it names. - The README's first screen carries the install line, a three-command quick start and the link to the scorecard.
Fixed
- A call with no receiver resolves to the function it names, not a tie
with a method.
crate::accel::lane("ane")in daemon.rs, and a barelane(id)besideimpl Enabled { fn lane(&self, ..) }, were left ambiguous between the free fnaccel::laneandEnabled::lane, sosemlith_neighbors,semlith_impactand the cloud's impact check did not list them as callers ([#245] changedlane's return type and the check said nothing outside the PR broke). In Rust, Python, Go and JavaScript/TypeScript a call that is neitherx.f()norType::f()cannot reach a method, so when a free function answers to the name it is the one meant.Type::f()still means the method, and languages where a bare call inside a class can bethis.f()(Java, Kotlin, C#, Swift, Ruby, PHP and the rest) are unchanged. Resolution happens when an edge is read, so existing stores answer this way without a re-index. - A method that calls the free function of its own name records the
call.
fn lane(&self, id) { lane(id) }was read as recursion and dropped, and so was the barego(..)ingo(self.go()). - Two definitions of one name in one file keep their own calls. Every
call
B::newmade was written ontoA::new, the firstnewin the file, and the call sitesB::newhad were lost; the same for each class's__init__in a Python module. Each call now leaves from the definition that holds it. - Members and top-level functions are told apart in every language. A
function declared in a class, interface or object body is a
method(Python, Kotlin, Scala and C++ grammars called them functions), so a top-levelfun helper()inA.ktno longer reads as a member ofclass A: a bare call from the top level means it, and a bare call insideclass Ameans the member. In a class body where a bare call can bethis.f()(Java, Kotlin, C#, C++, Swift, Scala, Dart, Ruby), and in a Python class body itself, a call to a name the class defines settles on that member. - Go methods are qualified by their receiver type (
T::F, was the package'sa::F), sot.F()on a method's own receiver andT.F(t)settle on the method; a C++ out-of-line definition is qualified by the scope it names (Foo::bar,ns::helper) in whatever file it sits. - A Rust integration test is not a library function. A file under a
crate's
tests/,benches/orexamples/is reachable only from beside it, sosemlith::accel::lane(..)from another repository no longer ties with alanehelper intests/accel.rs. An enum variant receiver names its enum:Kind::Catchup.lane()resolves toKind::lane, inside a macro's arguments too. - A call into the standard library no longer lands on a namesake in your
code. A module path that names none of the store's files, modules or
imports (
std::env::current_dir()) stays unsettled instead of resolving to the onecurrent_dirthe corpus happens to define; an inlinemod m { fn f() }is named bym::f(). - JavaScript member calls are calls through a receiver.
store.search()andview.sel.clear()carry their object as a hint, as in TypeScript (they read as bare calls), andthis.f()/super.f()are receiver calls; athiswhose type nothing names settles on the one method of that name in the file. - A grouped Rust
useplaces what it imports.use super::{Item, gdrive::{base, url}}now ranks gdrive.rs for a bareurl(..); the import list was split only on/ . : \, so braces and commas hid every module. - A Rust
fnin a module body is a function (mod tests { fn b() }was tagged a method), and a method ofimpl Trait for Box<dyn Error>belongs to the trait. - The extractor changes above take effect as files are re-indexed; the resolver changes answer at once.
- A live Slack token no longer reads as a typed placeholder by chance.
The secret scanner looked for a run like
12345678across the whole token, so…3312-3456786…spelled one over the-and a real token scored 55, under the floor it refuses at; runs are read inside one segment now. - Portal dialogs scroll instead of clipping. On a short window the folder picker's list, or a long confirm, was squashed with no scrollbar; the dialog scrolls now.
Install
macOS and Linux
:::sh
curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/semlith/semlith/main/install.sh | sh
Windows
:::powershell
irm https://raw.githubusercontent.com/semlith/semlith/main/install.ps1 | iex
Or download the archive for your platform below, unpack it, and put
semlith on your PATH. Intel macOS has no prebuilt binary: ONNX
Runtime no longer publishes x86_64 macOS builds.
Verify a download against SHA256SUMS before running it, SHA256SUMS
against its signature (release key
SHA256:a5oJmrakIwDHEWTDWqWe51Ttt6m2tQ0dsGzIqyxDuxs) with
echo "semlith-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMTHiHMzeSHzzc+8UDZHUzJcvb6XGUBb+TJdFes91xm" > allowed_signers
and ssh-keygen -Y verify -f allowed_signers -I semlith-release -n file -s SHA256SUMS.sig < SHA256SUMS,
and its provenance with gh attestation verify <file> --repo semlith/semlith.