# Changelog Chinese entries live in [CHANGELOG.md](CHANGELOG.md). Entries up to 0.2.1 keep the English they shipped with; 0.3.0 onward is written in both files. ## 0.4.1 — 2026-11-04 **Findable in the plugin market**: the catalog one-liner now says local file search and document full-text search. The market matches literally, and the old wording only said 检索, so searching for 搜索, 文件搜索 or docx never surfaced this plugin. - `docs`: the catalog entry (that YAML in `awesome-dsh-plugin`) now names file search, full-text search and the extensions — the market search is literal substring matching, and the old Chinese sentence only said 检索, so `搜索` / `文件搜索` / `本地搜索` / `全文检索` / `docx` all returned zero hits. - `package`: `description` is now two plain sentences (npm page and third-party crawlers) that lead with "local file search and document full-text search". - `page`: the plugin-list title and one-liner (`locale/zh.json` / `locale/en.json`) and the card description follow the same wording; the six language packs keep their existing page copy. - `docs`: `llms.txt` says "本机文件搜索与文档全文检索" and names the extensions as `PDF / DOCX / XLSX / PPTX / EPUB`. - `docs`: README "Related plugins" became "How this compares" — a three-row table linking each project's GitHub repository instead of a competitor's catalog install page. - `icon`: a new mark — paper with a magnifier cut out of it: the document is the subject, the magnifier is a hole in the page, three lines sit on the paper; `icon.png` is exported for the catalog. - `package`: version raised to 0.4.1 (patch: no externally visible behaviour changes). ## 0.4.0 — 2026-11-03 **Knowing the machine**: platform detection, four-state probes, path semantics. **Diagnosing it**: a copyable report and one error-code document. **Fewer interruptions**: a startup check and a corner card. **More languages**: one file per language. - `platform`: new `lib/platform.js` — `detect()` returning `os` / `pathStyle` / `caseInsensitive` / `home` / the default roots (on Windows it scans A:–Z: for existing drive roots), unit-tested for all three platforms. Platform defaults come only from there; no other module reads `process.platform` or `process.env.SystemDrive` any more. - `search`: `~/x` expands against the home directory where it is used (a save writes back the resolved absolute path; a hand-written `~/x` in the profile still works); absolute paths are judged by the target platform's rules, and Windows also accepts `/Users/x`; `allRoots` stays semicolon-separated. - `page`: path rewriting follows the `platform` describe reports — on Windows `D:/alpha` is stored as `D:\alpha`, POSIX spellings are left alone; save, blur checks and Test connection share one implementation, compared case by case with the Host's. - `engines`: probing moved into each backend (`probe()` → `ready` / `missing-tool` / `missing-index` / `down`); `lib/probe.js` only aggregates, and the `sc.exe` installation check stays in `everything.js`. - `search`: both output surfaces gained a filter — `formatStatus` emits only `ok` / `code` / `message` (plus which backend and roots are in use), so the model never sees the four states, a fix or a plugin version; the system prompt adds "do not install, start or reconfigure these engines; name the backend that is down and point the user at the plugin card"; `test/format.test.js` pins that `state` / `detail` / `hint` never reach the output. - `config`: new `checkEnginesOnStart` key (on by default, rendered as a switch); when on, both backends are probed once per start and the result only feeds `describe.health` (`pending` / `failures` / `checkedAt` / `disabled`), never the configuration; `autoconfig.failures` is gone and the first-run pass only writes values, unaffected by the switch. - `page`: the engine notice is a hand-drawn card in `shell.overlay` — only when something failed, colours only from `--dsw-*` tokens, one line per backend with its own fix. The card neither polls nor removes itself; the user closes it, and closing lives in component state only: no `sessionStorage`, and the cross-session "stop telling me" is `checkEnginesOnStart`. Without primitives the close button falls back to a native `button`. - `route`: new read-only `GET /dsh-local-search/api/diagnose` returning `{ text }` — plugin and DSH versions, `profile` / `shell` / `remote`, platform and node, each backend's state and code, the four scopes, and when the probe ran; `os.homedir()` and `DSH_HOME` are reduced to `~` on the Host. Computed per request, `no-store`, behind the same cross-site gate as the other routes. - `page`: **Copy diagnostics** under the description opens a dialog with a selectable `