Skip to content

Releases: NoneadChina/Nonead-DSH-Desktop

v2.2.2

Choose a tag to compare

@NoneadChina NoneadChina released this 28 Oct 07:37

2.1.18 - > 2.2.2 — 2026-10-28

The runtime moves across to DSH 0.2.2-alpha.2 and the market to 1.73.1:

Runtime upgrade: the beta channel jumps from dsh 0.2.1-rc.3 to 0.2.2-alpha.2 (submodule pin 1f81c047 → f3803c96, upstream "release(dsh): 0.2.2-alpha.2") — the runtime is repacked and re-vendored (370 packages, up from 344), and all 24 version patches are rebased. Seven packages needed semantic re-anchoring because their packed output changed: the bundle file names in dsh, dsh-sandbox-windows-acl and dsh-web-frontend carry new hashes; dsh-client-ui-plugin-manager was refactored upstream to derive available from listed but never defines it (this patch restores the desktop slots and supplies that definition); dsh-client-ui-settings-account moved its onboarding back icon into a module variable; dsh-client-ui-directory-picker-browse grew to nine locale dictionaries; dsh-client-ui-primitives switched wide tables to a hover-only scrollbar, which this patch turns back into an always-visible thin bar. The rc.3 runtime snapshot and patches stay as history.
Dependency surface: @deepseek-ai/cordis moves to 4.0.6-alpha.1, schemastery to 3.18.6-alpha.1 and three cordis plugin packages each move one minor alpha, or the upstream 0.2.2-alpha.2 peer checks fail; nonead-dsh-desktop is aligned with the beta channel by hand because it belongs to the stable line and is outside the auto-synced workspace list.
Market: dshmarket 1.70.1 → 1.73.1, with the desktop patch (self-update entry, host-provided versions, trial-run baseline diff) rebased onto 1.73.1; upstream moved the update cache to recheckAt semantics, so the checkUpdates hunk is rewritten against the new shape.
Agents Anywhere bridge: rebuilt for the new peer ranges (artifact rd9c47cbc, pin unchanged at 39b82d4), connector patch untouched.
Version: the product moves from 2.1.18 to 2.2.2 in both desktop workspaces.

DSH 0.2.1-rc.4 -> DSH 0.2.2-alpha.2

New Features
Show rich-text plugin details in the plugin manager and improve page layout and navigation. by @turtle1999, @turtle2099
Support updating third-party plugin packages and attempt to restore the previous version if hot updates fail. by @turtle1999, @turtle2099
Insert chat text as quotes in the composer and show compact previews after sending. by @lsdsjy, @imccyu
Copy the complete conversation history as Markdown, including the original log path when available. by @tianyicui
Keep all assistant text replies visible when work steps are collapsed, with an option to show only the final answer. by @imccyu
Add Japanese, Spanish, French, German, Russian, and Brazilian Portuguese interface text and locale configuration. by @07akioni
Clear all inactive automation tasks in one confirmed action while keeping active tasks. by @Chinesezjc
Add the experimental subagent_oar tool plugin to delegate independent tasks to local Codex or Claude CLIs. by @tianyicui
Add experimental Personalized recommendations, offering official-plugin activation or personalized-page creation cards below answers when relevant. by @ZiyaZhang
Add experimental Developer tools — Statistics for per-turn and per-step context, cache, model, and tool measurements. by @mektpoy
Add experimental Change requests and worktrees to run Sessions in separate Git worktrees and inspect linked PR status and code changes. by @LegGasai, @tianyicui
Improvements
Improve mobile and tablet input with fewer automatic keyboard pop-ups, keyboard dismissal after sending, and corrected caret scrolling. by @Stevring
Use fullscreen settings with horizontal navigation on narrow browsers, scroll focused tabs fully into view, and use 16px task text fields on touch devices. by @Stevring
Keep touch actions free from hover tooltips, expose Workspace and archived-result controls, and scroll wide Markdown tables within their own containers. by @Stevring
Fade overflowing header status actions in narrow conversation panes so utility buttons such as Open in app remain visible and clickable. by @turtle2099
Restore automatic icon-only model selection in narrow composers while retaining the full model name in the menu. by @LegGasai
Fix font settings crowding their labels and descriptions on phones and narrow windows by stacking font fields while keeping size controls right-aligned. by @EricMoin
Distinguish same-named Workspaces with their shortest unique path suffix and prioritize that suffix on narrow screens. by @turtle2099
Use DPR-aware inset outlines on shared buttons to stabilize fine borders at fractional sizes in Safari without changing layout. by @Stevring
Place running status at the active turn tail before queued steering messages, distinguishing active and pending input and reducing layout jitter. by @imccyu
Support plugin icons in the Session list and improve keyboard and touch interaction. by @LegGasai
Show working directories on sidebar Session hover cards to distinguish ungrouped or similarly named Sessions. by @turtle2099
Improve sidebar spacing and click targets, with smoother search-field expansion and collapse. by @Yifffan
Find Sessions by case-insensitive ID substrings in sidebar search. by @turtle2099
Show messages and clear drafts only after the host accepts them. Keep the composer read-only while sending and preserve drafts, quotes, and attachments on failure. by @LegGasai
Upload images as soon as they enter the composer and reuse the uploaded images when sending messages. Raise the default per-image limit to 50 MiB. by @LegGasai
Show answered question batches as message bubbles so answers from native and PTC calls remain visible after work steps collapse. by @Kaige-Gao
Add resistance and spring-back when floating sidebar panels are dragged beyond screen edges, and keep their controls reachable when the window shrinks. by @yudshj
Close right-sidebar tabs with the middle mouse button without selecting background tabs, while preserving the protected start tab. by @Kingwl
Fix transcript jumps, scroll reversal, and blank gaps when expanding or folding work steps, while keeping running status visible. by @imccyu
Briefly highlight and fade the target line in code and text previews after opening a file-line link from chat. by @turtle2099
Add raw JSON views of live tool results to Trajectory, displayed above rendered results. by @kermanx
Search prioritizes long Search API summaries for models, capped at 800 characters per source by default, while search cards retain short snippets. by @yudshj
Start the model picker with configured models selected, add or remove candidates while preserving custom values, and apply select-all only to visible candidates. by @turtle2099
For models accessed through pi-ai that cannot accept additional system messages during a conversation, keep later system messages in place as reminders rather than moving them into the initial prompt. by @Tuyixiang
Reorder models within DeepSeek and pi-ai providers by dragging or using arrow keys, preserving order and complete model parameters when saved. by @Magolor
Show full truncated composer statistics in tooltips and include turn and step counts in Session statistics. by @turtle2099
Improve history-context cache reuse across consecutive tool calls in Auto review to reduce repeated processing. by @turtle2099
Background-job completion notices include small outputs and reduce duplicate notifications for already-read results and subagent closing messages. by @turtle1999
Reduce sleeping and repeated polling in subagent guidance: end the current turn when only a result remains pending and wait for its completion notification. by @Chinesezjc
Enable WebSocket compression for remote connections by default to reduce transfers of large message histories; disable it with websocketCompression. by @imccyu
Web static assets support ETag revalidation, returning 304 for unchanged files to avoid repeated downloads. by @imccyu
Deliver ordinary Word edits after saving and checking content and formatting, without unnecessary ZIP, XML, or metadata inspection. by @tianyicui
Speed up first-time loading of lazy components such as the source editor in the Web preview. by @turtle2099
Speed up file searches with literal directory prefixes by skipping unrelated directories while preserving results and ordering. by @kermanx
Pan images that exceed the viewport and transfer original files through in-app drag-and-drop or native desktop dragging. by @std4453
Tell phone and tablet users when a file is opened on another device. Show failure notifications on all devices and keep successful desktop operations silent. by @Stevring
Bug Fixes
Budget global and project AGENTS.md chains separately so project instructions do not evict global guidance; messages containing both chains can use up to twice maxBytes. by @ZiyaZhang
Compact history with the previous model before switching to a smaller context window; stop the switch request and preserve its previous header if compaction fails. by @Dudu-0223
Preserve the required thought signatures in Gemini tool calls over OpenAI-compatible Chat Completions and include them in subsequent requests to prevent rejection caused by missing signatures. by @turtle2099
Reuse existing context-prefix caches for new model requests when the system prompt is unchanged, avoiding unnecessary cache invalidation. by @mektpoy
Hide Web search tools when required credentials are missing; fetch tools using the newer Web API also follow credential readiness. by @LegGasai
Preserve saved Auto permission and approval policy during application shutdown instead of unintentionally switching to Full access. by @tianyicui
User steering now releases a background-output wait immediately and returns current output without stopping the job. by @mektpoy
Fix delegation tools being temporarily unavailable after preset round trips and apply the current Agent’s tool restrictions to delegation. by @Dudu-0223
Resume blocked goals from the Web goal bar; goals that have exhausted ...

Read more

v2.1.18

Choose a tag to compare

@NoneadChina NoneadChina released this 24 Oct 08:04

2.1.18 — 2026-10-24

DeepSeek Harness runtime stays at 0.2.1-rc.3

Upstream runtime upgrade, an Agents Anywhere source build and an experimental Windows ARM64 build (includes the 2.1.17 audit fix batch):

  • Upstream runtime upgrade: the beta channel moved from dsh 0.2.1-rc.2 to 0.2.1-rc.3 (submodule pin 687f282e → 1f81c047): 24 versioned patches were rebased onto rc.3, vendor/dsh-runtime/0.2.1-rc.3/ was vendored anew (344 packages), and the root manifests, both desktop workspaces and the Agents Anywhere bridge peer ranges follow; the superseded rc.2 runtime snapshot and patches are no longer tracked.
  • Agents Anywhere bridge: now built from source (39b82d4, previously a reused artifact) with the connector patch rebased onto the new artifact — health reporting no longer blocks notification publishing, the NO_PROXY bare-IPv6 rewrite and the runtime-ready report are kept, and the answer-provider change superseded by upstream's interactionPeer(connection) refactor is dropped; Python files in the artifact are normalized to LF so the patch applies reproducibly.
  • Windows ARM64 (experimental): a new DSH_PACKAGE_ARCH=arm64 build path ships a native arm64 main process while the bundled Python / Node / Office runtimes reuse the x64 payload under Windows emulation; cross-architecture packaging skips the smokes that can only run on the host, the x64 build and its checks are unaffected, and this artifact is not yet wired into the download links or the update channel.
  • Settings update card: the service-failure message now reads "Nonead-DSH-Desktop updates are temporarily unavailable. Try again later." instead of naming the retired Next product; the download progress bar moved between the "Downloading update x%" label and the release notes.

v2.1.17

Choose a tag to compare

@NoneadChina NoneadChina released this 24 Oct 01:20

2.1.17 — 2026-10-24

DeepSeek Harness runtime stays at 0.2.1-rc.2:

  • Recovery assistant: when the automatic diagnostics export and a user action refreshed the same document concurrently, the first navigation failed with ERR_ABORTED; on the non-action path that failure could be escalated by fail-loud into a full application exit. Refreshes are now serialized, a navigation aborted by window destruction is treated as a normal end, and action-path failures are only logged as diagnostics.
  • Checkpoint reads and degradation: manifest and backup files are opened and then re-checked by inode (O_NOFOLLOW + fstat), so a path swapped between lstat and the read is no longer trusted; a damaged slot no longer fails the whole snapshot list — it is marked unreadable, stays visible but not restorable in the recovery page, and rotation reuses it as the next overwrite target.
  • Settings writes: settings.yaml and a Profile's pnpm-workspace.yaml are published through a temporary file plus rename, so an interrupted write leaves either the old or the new content instead of half a YAML that loses every setting on the next start.
  • Updates: response bodies are released on the size-limit and decode-failure paths; macOS arms the install handoff before the native stage starts, so quitting no longer deletes the package the local feed is still serving; choosing Quit in a recovery window the user opened is no longer reported as a startup failure (success code), while startup failures stay non-zero.
  • Plugin and state stores: plugin state reads re-check the inode; stale data-lock reclamation tolerates a concurrent ENOENT; the damaged-state guard now checks the file it actually protects; runtime staging trees left by a crash are swept before the next publish.
  • Stable shell: the tray-initiated update check dialog is owned by the main window, so it can no longer be buried and lose the answer; the Computer Use switch treats cancelled like failed; browser guest teardown is bounded (force after 1.5 s, then a 0.5 s grace), the lease is released first, and browserRelease no longer hangs forever.
  • Community market and skin: an interrupted pagination request no longer leaves "load more" stuck in loading; the market overlay returns focus when it closes; the injected style declares data-plugin, so a later-loaded plugin can no longer claim it and delete it on unload; the package-name grammar matches the Host.
  • Gates and CI: upstream-command-windows installs dependencies before check:layout; change classification disables rename detection so a source file renamed into a documentation path cannot skip the product gates; the inspector compatibility test anchors on the repository root.
  • Packaging: the Stable shell's verify:safe-cleanup now points the Electron child's TEMP at a writable workspace directory (Electron 44 on this host is refused directory creation under %TEMP%), so the preflight no longer aborts before the installer is produced.

2.1.16 — 2026-10-22

Security hardening and gate fixes (the result of a full audit):

  • CI now runs change classification and the documentation/market gates from the pull request base side, so the code under review can no longer weaken its own classifier to skip every product gate.
  • Electron fuses tightened: both shells close the NODE_OPTIONS / --inspect injection surface; the Stable shell (asar: true) now loads only from app.asar, while the Beta channel keeps that bit off because it ships a physical directory (asar: false). runAsNode has to stay on — on Windows the Host, the CLI and the pnpm shims all launch the Electron binary with ELECTRON_RUN_AS_NODE. Both verify-fuses scripts now derive the expected value from the real layout and assert the whole set, so loosening it fails; Stable previously called verifyElectronExecutableFuses(path, undefined, false), which never checked the archive bit at all.
  • The renderer credential no longer travels in the Host child environment; it is injected once over a private pipe at startup, so same-user processes cannot read it from process environment or a crash dump and impersonate the renderer.
  • The web access gate now fails closed when the credential is missing (it used to fail open); browser-class requests are no longer silently allowed.
  • dsh-desktop:// deep links are dispatched through an action allowlist; unknown actions are dropped with a single log line.
  • Secret masking for diagnostics and logs now covers base64url shapes, so the renderer credential can no longer be exported.
  • The directory picker route shares the loopback same-origin check used by the settings route instead of trusting a client-supplied Origin.

Packaging and release:

  • The Stable shell asarUnpack contract was re-proved against app-builder-lib 26.15.7: matches are resolved against the packaging project path, so the three patterns must keep the .desktop-build/payload/ prefix from files[].from to hit (scripts/node-bin, assets and build are indeed unpacked beside app.asar). The patterns stay as they are; a new test derives the expected prefix from files[].from and asserts it, failing if either side drifts — this coupling had no assertion covering it before.
  • CI gained Stable-shell packaging coverage, and verify-layout now enforces version parity: both workspaces' version must match the newest CHANGELOG heading.
  • CI no longer rewrites dsh-plugin-desktop-beta/package.json in place to skip AA smoke; an explicit check:ci script replaces that mutation, so CI and local runs match.

Repository hygiene and supply chain:

  • Every third-party Action used by CI is pinned to a commit SHA (actions/checkout, actions/setup-node, actions/cache), with the tag kept only as a trailing comment for readability, so a moved upstream tag cannot silently change what the gates run.
  • The change classifier no longer treats every file under docs/ as documentation: non-document extensions inside docs/ (.js/.mjs/.json/.ts and friends) now trigger the product gates, with only real documentation formats and docs/schemas/*.schema.json exempt.
  • Six unreferenced historical tgz files (~1.7 MB) were removed from vendor/agents-anywhere/, keeping only the pinned one; that directory's README no longer teaches the removed DSH_AA_SOURCE_REF=pinned path and instead pins through provenance.pinnedCommit.
  • The nonead-dsh-desktop/README.md and README.zh.md files no longer hard-code the product version (they said 2.1.3); they point at package.json's version and the newest root CHANGELOG entry instead.
  • Docs now state that the Linux x64 AppImage and deb are built by the Beta channel only and that the stable channel ships a runnable directory on Linux; the first real check of the fuses and onlyLoadAppFromAsar is the CI desktop-windows-stable job (package:dir:stable), since locally only unit tests cover them.

2026-10-23 supplement (same version number, included in later builds)

Packaging chain:

  • Fixed three Windows packaging gates that had drifted from the product's actual behaviour: junctions created by pnpm inside a Profile could not be removed recursively; verify:host never passed the renderer credential (32 base64url bytes, and it has to be the same one the Host received); and that script impersonated the renderer with a fixed string, which the fail-closed Web gate rejects.
  • dsh-plugin-desktop-beta now declares @deepseek-ai/dsh-plugin-manager (a required peer of dsh-plugin-market), restoring the 318-node runtime closure.

v2.1.15

Choose a tag to compare

@NoneadChina NoneadChina released this 21 Oct 17:28

2.1.15 — 2026-10-22

The version jumps from 2.1.13 straight to 2.1.15; there is no separate 2.1.14 release commit in the history.

Runtime and dependencies:

  • The DSH runtime stays on 0.2.1-rc.2 and channels.beta.commit in upstream.json is still 687f282e; the Agents Anywhere bridge is still 39b82d4.
  • The plugin market dshmarket is bumped to 1.66.45 and the desktop patch is rebased onto it.
  • The brand patch moved from .yarn/patches/dsh-web-frontend-nonead-wordmark.patch to patches/dsh-web-frontend@0.2.1-rc.2.patch, joining the other runtime patches.
  • The AA connector httpx patch grew to cover the new connection path.

Updates and recovery:

  • The update card can show release notes supplied by the version response; the Beta channel's tray menu and native dialogs also offer a "view full release notes" entry (tray labels and notification bodies are truncated by platform rules), while the stable channel's native update dialog still carries fixed copy only.
  • Skip this version is new: the decision is persisted, so the unattended scheduled check no longer re-offers a skipped release.
  • A failed install can be retried, and recovery can roll back to any saved snapshot, not just the latest.
  • Launching the native installer now starts before the quit sequence, so quitting cannot take the installer down with it.
  • Windows installer signing and publisher verification were introduced and then fully reverted in c5896ac; Windows installers still compare only ProductName / ProductVersion from the PE version resource.

Desktop shell:

  • Window position and size are remembered; restore happens only while the window still overlaps a mounted display, so unplugging a monitor cannot put it offscreen.
  • Strict layered .env support fills in missing variables for the Host child process without overriding the existing environment.
  • dsh-desktop:// deep links are supported (for example dsh-desktop://settings/general).
  • A launch-at-login switch reads the effective OS state.
  • Profile configuration read-modify-write cycles now run under a single writer lock, so the shell and the Host's profile manager cannot silently drop each other's updates.
  • Single-instance and disposable cleanup retry budgets are fixed at three; unhandled renderer failures surface in the notice area.
  • The guest browser's .env and runtime environment are passed through correctly.

Market and skin:

  • The market previews non-image media and can install a plugin by name.
  • Skipping the plugin market during onboarding is remembered, and reopening the wizard keeps the stored market setting.
  • The skin's hero headline swap is scoped to the hero subtree and no longer touches other copy.

Fixes:

  • The AA interaction stream keeps a live peer, and the DSH runtime stays usable while history syncs.
  • Cross-platform assertions were repaired and the market bundle now ships with the package.
  • CI runs the product gates when a runtime JSON Schema changes.
  • The release flow derives the shipped version from the manifests.

v2.1.14

Choose a tag to compare

@NoneadChina NoneadChina released this 21 Oct 15:16
fix(skin): scope the hero headline swap to the hero subtree

The brand skin replaced every "探索未至之境" text node in the document through a
body-wide characterData MutationObserver, which also rewrote text the user typed,
code blocks and session titles.

The headline now resolves from its own slot
([data-slot="conversation.hero.brand.mark"] -> .fishHitbox -> .headline), and the
observer only watches childList, so inputs and code blocks are never scanned.

This also restores the package build: tsdown.config.ts imported a root
../tsdown.client.ts that no longer exists and tsconfig.json extended a missing
base, so lib/client.js could not be rebuilt at all. The bundle config is now
self-contained (plain object, no tsdown import) and builds only the browser half
through the tsdown that nonead-dsh-desktop already installs.

v2.1.13

Choose a tag to compare

@NoneadChina NoneadChina released this 21 Oct 00:59

修复 跨平台使用功能

v2.1.12

Choose a tag to compare

@NoneadChina NoneadChina released this 19 Oct 16:55

Full Changelog: v2.1.11...v2.1.12

v2.1.11

Choose a tag to compare

@NoneadChina NoneadChina released this 17 Oct 11:59

新增功能

核心 DeepSeek Harness 0.2.1-rc.2
适配 DeepSeek-V4.1-Flash-1017 上线 @LegGasai
适配 DeepSeek Search 与 Fetch API,可在网页搜索设置中开启 @yudshj, @LegGasai

v2.1.10

Choose a tag to compare

@NoneadChina NoneadChina released this 17 Oct 11:09
chore(scripts): aa:prepare-release 支持用本地源码树替代 GitHub pack

- 本机无法传输 GitHub pack(fetch 在 ref 广告后即停滞)时,允许把已解压的同 commit
  源码树交给 DSH_AA_SOURCE_DIR 使用
- 校验 dsh-bridge-next/package.json 与 connector 存在后复制该树,provenance 仍记录
  解析出的 commit

v2.1.6

Choose a tag to compare

@NoneadChina NoneadChina released this 17 Oct 06:13

Provide a fix patch for the sidebar HTTP 405 error.
Fix the issue where the installer does not automatically run after downloading the latest upgrade package.