Repository navigation
Releases: wfz2006/dsh-status-bar
Release list
DSH Status Bar 0.2.9 - lighter bundles, incremental projection, faster process sync
This release is a weight and latency pass: the desktop bundles are about 57% smaller, the Main → preload stream
sends only what changed, tool steps and completions stop lagging the DSH window, and the capsule got a drag
response. The glass material, approval rules and the plugin startup path are unchanged.
Install
# npm: ~880 kB launcher; the first launch fetches the runtime from the npm registry
dsh plugin --profile web add dsh-status-bar-plugin
# release tarball: 155 MB, self-contained, nothing downloaded later
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-status-bar.tgzWhat changed
- Smaller bundles. Main, preload and renderer are minified in production. Renderer CSS stays unminified on
purpose: the minifier foldsscaleintotransform, which broke the native drag acceptance that reads the
computedscale(it reportedscale: none). - Cheaper startup.
@glass/protocol/initial-projectionexposes an initial-state factory only, so the renderer
no longer pulls Zod and the whole protocol schema just to build an empty state. Main-side validation is unchanged. - Incremental projection. A known session now sends only changed fields; the transcript sends changed lines by
position, preserving order, duplicate IDs, deletions and empty lists. Unchanged todos are not resent. Full
snapshots, revision checks, missing-frame recovery, the every-300-updates full refresh and the approval checks
are all still there. - Native visibility. Main publishes
WindowState.visible. Hiding or minimising stops the material size
observer, removes the SVG filter and clears the engine texture cache; restoring rebuilds with the same
parameters. This exists because a hidden transparent window still reportsdocument.hidden === falsehere. - Process sync latency. Four causes fixed: a cold session that was already running still waited for the
10-secondsession/list(the nativeapi-session/statussignal now enablesfollow()immediately), stale list
responses could overwrite newer live state (list rows now carry object identity plus a local revision), a late
session/pagefrom a cold read could overwrite a fresh run, and tool rows kept a 260 ms fade-in after arriving
in the DOM. Completion is still taken from the realturn/endreason —api-session/status(false)only means
idle and is never treated as completed. - Review fixes. Question drafts are keyed by full request identity, so switching between queued questions no
longer clears answers; request IDs such asconstructor/toString/__proto__no longer collide with
inherited object properties; new sessions are stored as explicit data properties instead of going through the
prototype setter; hiding the capsule clearsdata-dragvia the native visibility signal; the process/step tabs
support arrow keys plus Home/End with a single Tab stop, and lists/inputs have visible focus rings; copying shows
a short "copied" / "copy failed" confirmation isolated by request. - Drag response. Press compresses the content and answers the grab; dragging moves the native window directly,
tilts the whale with the direction at up to ~14°, lags content by at most 4.8 DIP and shifts the highlight with
speed; releasing fast gives a bounded damped rebound (≤14 DIP, 560 ms) that ends exactly on the drop point, with
no free glide. Regrabbing mid-rebound interrupts it. Reduced or disabled animations keep direct dragging with the
new motion off. The glass filter layer is never transformed, so the RGB refraction is untouched.
Measurements
- Build output: 1,419.53 kB → 606.79 kB (−57.3%); renderer JS 876.98 kB → 294.67 kB (−66.4%); Main JS 424.47 kB
→ 214.37 kB; preload 6.45 kB → 4.26 kB. Electron's owndistis unchanged, so the full install is not 57%
smaller. - Streaming, 100 sessions / 1,000 todos / 360 updates: incremental-only frames 63,299,201 → 205,601 bytes
(−99.7%), structured-clone round trip 436.8 → 175.2 ms; with the production every-300-updates refresh
80,847,140 → 17,928,800 bytes (−77.8%), 524.5 → 265.4 ms. This is a synthetic codec benchmark, not task latency
or frame rate. - Memory: the idle capsule and the renderer JS heap went down (JS heap 5.80 → 4.72 MiB); expanded, dynamic
background and post-morph process trees measured higher, mostly in the GPU process. No claim of an overall RAM
win is made. test:process-latency: 20 streaming prefixes and a 200-fragment burst all rendered; median DOM/animation-frame
opportunity 25 ms, P95 33 ms (not GPU presentation time).- Native drag acceptance: capsule stays 290×44 DIP, release path x=370→380→369→370, whale tilt ~9.3°, grab scale
1.16, glass surfacetransform: none, RGB filter URL preserved, sampled across 10 distinct positions.
Verification
npx eslint .clean,npx tsc --noEmitclean,vitest run --maxWorkers=123 files / 214 tests pass.test:optimization(three native hide/restore and minimise/restore rounds, identical textures and RGB channels),
test:performance,test:memory,test:process-latency,test:review-uiand the native motion/experience
suites pass.
Known limits
- The legacy
test:desktopscript still fails: it looks for.todoon the default process page while those nodes
render on the steps page (expects 2, gets 0). The pre-optimisation build fails on the same line; the script was
not weakened, and the evidence is inreports/optimization/legacy-smoke-before.txt(not committed). drag-optics-acceptance.mjsstill fails its background-pixel-difference assertion; the window movement and size
checks pass but the sampled pixels do not reach the threshold. It is not claimed as an optics pass, and the
assertion was not relaxed.- Cross-monitor DPI and the subjective feel of the new drag still need a human check.
Artifacts
| artifact | size | contents |
|---|---|---|
npm dsh-status-bar-plugin@0.2.9 |
879,344 B packed | lib/, cordis.patch.yml, assets/, screenshots.json, README.md, LICENSE |
npm dsh-status-bar-runtime@0.2.9 |
161,820,727 B packed | app/, electron/dist/, LICENSE |
release dsh-status-bar.tgz |
155 MB | the launcher plus app/ and electron/dist/ (fallback and offline install) |
release dsh-glass-plugin.tgz |
155 MB | compatibility copy for the pre-rename URL |
Notes
- Windows 11 x64 for the companion and the native preparation window.
- The release workflow refuses a tag whose
packages/dsh-status-bar/package.jsonversion differs, and the runtime
package version must match the plugin version for the archive to be accepted. - Nothing changed in the installed DSH, the user profile or the plugin runtime cache during this work.
DSH Status Bar 0.2.8 - the runtime comes from npm
The 155 MB runtime now comes from the npm registry instead of a GitHub release asset, which is roughly two
orders of magnitude faster on networks where GitHub throttles or stalls. The release asset stays as a fallback.
Install
# npm: ~840 kB launcher; the first launch fetches the runtime from the npm registry
dsh plugin --profile web add dsh-status-bar-plugin
# release tarball: 155 MB, self-contained, nothing downloaded later
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-status-bar.tgzWhy
A first run on this machine sustained ~40 KiB/s from releases/download, so preparing the runtime took the
better part of an hour, and the network repeatedly reset the connection. The same machine pulls from
registry.npmjs.org at ~3.9 MB/s — about a hundred times faster — because the registry is served from a CDN.
So the prebuilt runtime is now published as its own npm package, dsh-status-bar-runtime, and the light
launcher advertises that tarball address in dsh.statusBar.runtime.
What changed
- New
scripts/pack-runtime-release.mjs: stagesapp/+electron/+LICENSEasdsh-status-bar-runtime,
packing from the same staging directory the self-contained bundle uses, so both artifacts always describe the
same build.--publishuploads it. dsh-status-bar-pluginnow advertises
https://registry.npmjs.org/dsh-status-bar-runtime/-/dsh-status-bar-runtime-<version>.tgz; the address is
version-pinned, so a plugin upgrade never silently reuses an older runtime.runtimeUrls()returns the primary source plus the GitHub release asset as a fallback. If the registry is
unreachable, the launcher says so in the preparation window and continues with the release asset instead of
giving up. An explicitly configureddownloadUrl/DSH_STATUS_BAR_RUNTIME_URLis still used alone.- The unpacked archive is validated exactly as before: the runtime package version, the app entry and the
Electron binary must all match the plugin version, otherwise the cache is rejected.
Verification
npx eslint .clean,npx tsc --noEmitclean,vitest run --maxWorkers=121 files / 191 tests pass.- New test asserts the advertised npm URL wins, the release asset is the second candidate, and an explicit
address disables the fallback list. dsh-status-bar-runtime@0.2.8published: 82 files, 161,951,448 B packed,app/+electron/dist/
(Electron 44.8.0).- Measured from this machine: npm registry tarball throughput ~3.9 MB/s versus ~40 KiB/s from the release asset.
Artifacts
| artifact | size | contents |
|---|---|---|
npm dsh-status-bar-plugin@0.2.8 |
840 kB packed | lib/, cordis.patch.yml, assets/, screenshots.json, README.md, LICENSE |
npm dsh-status-bar-runtime@0.2.8 |
162 MB packed | app/, electron/dist/, LICENSE |
release dsh-status-bar.tgz |
155 MB | the launcher plus app/ and electron/dist/ (fallback and offline install) |
release dsh-glass-plugin.tgz |
155 MB | compatibility copy for the pre-rename URL |
Notes
- Windows 11 x64 for the companion and the native preparation window.
- Interrupted preparations still resume from the verifiable byte offset on the next launch.
- The release workflow refuses a tag whose
packages/dsh-status-bar/package.jsonversion differs, and the runtime
package version must match the plugin version for the archive to be accepted. - MIT licensed. The bundled Electron runtime keeps its own license files.
DSH Status Bar 0.2.7 - the first-run download survives Schannel revocation
The first-run download now works on Windows networks that block certificate revocation lookups. That is the whole
of this release.
Install
# npm: ~840 kB launcher, fetches the ~155 MB runtime once on first launch
dsh plugin --profile web add dsh-status-bar-plugin
# release tarball: 155 MB, self-contained, nothing downloaded later
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-status-bar.tgzWhat was broken
0.2.6 made a stalled download visible and resumable, but on a machine whose network cannot reach the
certificate-revocation endpoints, the bundled Windows curl never got as far as a stalled transfer:
curl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012)
Schannel treats "I could not check revocation" as a fatal handshake error, so all three attempts failed in under
a second, the progress window reported a connection failure, and the runtime never arrived. An acceptance run of
the published 0.2.6 package reproduced it: three attempts, no bytes written, no capsule.
What changed
- The Windows
curlinvocation now passes--ssl-revoke-best-effort: revocation is still checked, but a lookup
that cannot be completed no longer aborts the handshake. --ssl-revoke-best-effortneeds curl 7.70 or newer. On an older curl the option is rejected with exit code 2,
so the downloader retries the same attempt without the flag instead of failing.- A TLS failure that survives the flag (curl 35/51/60) is retried once through the Node backend, which validates
against its own trust store rather than Schannel's; if both paths agree the network is unusable, the window
keeps the real reason and the resumable.partfile. curlArgs()is exported and covered by a test: the flag is present for Schannel, absent when explicitly
disabled, absent for the non-Schannel build, and the resume headers (--continue-at,If-Range) are unchanged.
Verification
npx eslint .clean,npx tsc --noEmitclean,vitest run --maxWorkers=121 files / 190 tests pass.- The real asset now downloads again from this machine: an aborted 45-second run left 1.8 MiB in
probe-curl-fixed.tgz.partwhere 0.2.6 wrote 0 bytes. Throughput here is ~40 KiB/s, so a full 155 MB first run
takes tens of minutes on this connection; the progress window shows that instead of pretending to be stuck. - 0.2.6 itself shipped with the resumable downloader, the native progress window and the title banner; nothing in
that behaviour changed here.
Artifacts
| artifact | size | contents |
|---|---|---|
npm dsh-status-bar-plugin@0.2.7 |
840 kB packed | lib/, cordis.patch.yml, assets/, screenshots.json, README.md, LICENSE |
release dsh-status-bar.tgz |
155 MB | the same files plus app/ and electron/dist/ (Electron 44.8.0) |
release dsh-glass-plugin.tgz |
155 MB | compatibility copy for the pre-rename URL |
Both assets are built by the release-bundle workflow against tag v0.2.7; the workflow refuses a tag whose
packages/dsh-status-bar/package.json version differs.
Notes
- Windows 11 x64 for the companion and the native progress window; other platforms keep the log-only path.
- If a first run is interrupted, the next launch resumes from the verifiable byte offset instead of starting over.
- MIT licensed. The bundled Electron runtime keeps its own license files.
DSH Status Bar 0.2.6 - first-run download recovery
A stalled first-run download is now visible, resumable and recoverable. This release also pins the runtime
address to the plugin version and gives long capsule titles a banner instead of a hard clip.
Install
# npm: ~840 kB launcher, fetches the ~155 MB runtime once on first launch
dsh plugin --profile web add dsh-status-bar-plugin
# release tarball: 155 MB, self-contained, nothing downloaded later
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-status-bar.tgzWhy this release exists
The market install is a light launcher: the first launch still has to fetch the Electron runtime. The old
downloader only wrote to the DSH console, used a random temp file, allowed itself one 15-minute window and
never resumed. When the transfer stalled, the capsule simply never appeared — no window, no error, nothing a
user could act on. That is exactly the report this release answers (docs/first-run-recovery.md).
What changed
Downloading
- The system
curlis preferred, with bounded connect, idle and total time; Node is the fallback whencurl
is missing or unusable. Up to three automatic attempts. .tgz.partplus its metadata live next to the version cache, so a partial transfer survives a restart.- Resume uses
If-Rangeonly when the URL fingerprint and a strongETag/Last-Modifiedcan be verified;
if the server refuses the range, the file is fetched again instead of being stitched together blindly. - A corrupt archive is never silently reused on the next attempt.
Unpacking
- Paths and links are checked, then the plugin version, the app entry and the Electron binary, before a
verified directory replaces the cache. - Preparing the same version concurrently is serialised by a lock; known staging leftovers from an earlier
crash are cleaned while holding it. - Only a verified directory is ever promoted, so a half-written cache cannot masquerade as ready.
Telling the user
- Windows gets a native WPF progress window — progress, the failure reason and a retry button — that does not
need Electron to exist yet. - Closing or cancelling stops this preparation, keeps the verifiable part of the download and continues on the
next launch. A complete cache starts directly, without flashing the preparation window. - Progress state holds only a status, byte counts and a message: no Host link, cookie or token.
Lifecycle
- Disposing the plugin cancels download, retries and unpacking, clears the lock and this run's staging, and a
late preparation result cannot launch the capsule afterwards. Spawn failures now surface visibly. showStartupUI: falsekeeps the log-only behaviour for deployments that do not want a window.
Addressing
- The default runtime URL is pinned to the running plugin version; older manifests that still point at
latest/download/...are resolved to the same pinned version. An explicit custom URL is honoured, but the
unpacked archive must still match the plugin version. - The release workflow checks out the requested tag and rejects a tag whose
package.jsonversion differs,
so a bundle can no longer be attached to the wrong fixed-version address.
Ul
- A capsule title that genuinely overflows now scrolls as a banner (duplicate copy for a seamless loop), pauses
while hovered or focused, respectsprefers-reduced-motionand the animation setting, and returns to
static text when it fits. While the session is working the characters keep the reading wave, capped at 32
characters so long titles stay readable. - Refreshed intro screenshots and a new optics comparison card.
Verification
npx eslint .clean,npx tsc --noEmitclean,vitest run --maxWorkers=121 files / 189 tests pass.tests/plugin-startup.test.tsadds 16 tests: interrupted transfer recovery, explicit retry, no premature
authentication, nothing launches after disposal, cache hit, parent Node-mode environment, spawn failure,
auto-start off, pinned and mismatched versions, concurrent and cancelled waiters, server ignoringRange,
Node resume and idle timeout, missing validators, missingcurl, corrupt archive, leftover staging.pnpm test:plugin-startupruns two real Windows checks: the native WPF control renders progress and the
retry/cancel commands, and a temporary light plugin walks interruption → repeated 503 → visible failure
window → retry → resume from the 64 KiB mark → real Electron and production renderer → dispose.- The packaged main bundle for 0.2.6 is 424,469 B (0.2.5 was 424,443 B).
Artifacts
| artifact | size | contents |
|---|---|---|
npm dsh-status-bar-plugin@0.2.6 |
840 kB packed | lib/ (incl. download.js, runtime.js, startup-status.js, startup-window.ps1), cordis.patch.yml, assets/, screenshots.json, README.md, LICENSE |
release dsh-status-bar.tgz |
155 MB | the same files plus app/ and electron/dist/ (Electron 44.8.0) |
release dsh-glass-plugin.tgz |
155 MB | compatibility copy for the pre-rename URL |
The bundle is attached by the release-bundle workflow, which builds it on windows-latest and checks the
tag against the plugin version.
Requirements
- Windows 11 x64 for the desktop companion and for the native progress window; other platforms keep the
log-only startup path. - The first launcher that needs a runtime still requires network access to the release asset.
Notes
- The plugin bundle is
packages/dsh-status-bar;dsh.bundle.patchmounts one row withautoLaunch: true.
SetautoLaunch: falsein a profile patch to keep it installed but not auto-started. - MIT licensed. The bundled Electron runtime keeps its own license files.
- The real-network stall and resume path, and a fresh-machine install speed, still need acceptance against
this release; the local tests simulate a 64 KiB interruption rather than the original transfer.
DSH Status Bar 0.2.5 - bridge hardening, incremental projections
修复一轮外部核对报告确认的问题,把主进程到界面的投影改成增量传输,并把仓库收成「项目本体 + 读者需要的文档」。
修掉的问题
| 编号 | 问题 | 处理 |
|---|---|---|
| BUG-01 | 审批与提问混排时入口和计数算错 | 审批与提问各自独立计数,1+1、2+1 两种混合队列都已按真实按钮断言 |
| BUG-02 | 忽略「自动展开」开关,强制展开 | 去掉旁路,回到原状态机执行用户偏好 |
| BUG-03 | 新请求覆盖手动尺寸 | 保留 manual 标记、形态和已接受的原生尺寸,150% DPI 以系统接受值为基线 |
| BUG-04 | 通知置顶被提前返回跳过 | 置顶先于提前返回执行,并避免重复系统调用 |
| BUG-05 | 一次列表失败就断线 | 实时流继续接收;列表 10–60 秒退避、单次在途;401/403 仍断线 |
| BUG-06 | 跨轮残留的旧请求 | turn/start、turn/end 关闭遗留请求且不代发决定;历史回放恢复最终 phase 后才发布 |
| BUG-07 | 命令值里混入凭据 | 除敏感键外过滤 Authorization: Basic/Bearer、常见 token/env/CLI 参数与 URL userinfo;脱敏预览不具备完整参数审批资格 |
| BUG-08 | 重载把一次性认证链接重放 | 只重载 renderer,Main 的认证与订阅保持不变 |
| BUG-09 | 旧式问题被假确认 | 没有 durable callId 的问题保持只读、拒绝投递;void 不等于 answered |
| BUG-10 | 长驻 Map 只增不减 | 工具摘要每会话 256 项、已结束请求每类最多 100 条、删会话/断线即清理;用结构化比较替代整段 JSON 指纹 |
| BUG-11 | 半开 WebSocket 察觉不到 | 15 秒 Ping + 存活检查,流量/Pong 都算活;audit 子流结束后先撤请求再按列表恢复 |
| DOC-01 | 文档与实现漂移 | 更正尺寸、启动数据源、默认取样、插件启动器与测试数 |
| CODE-01 | 本机硬编码路径 | 改为环境变量、标准安装目录、已保存路径与用户选择的 exe |
另外:异步提问的回答在会话删除或连接更换后,迟到的 RPC 结果不会再被标成 answered;跨会话缓存用分层 Map,带冒号的 ID 不会误清别的会话。
性能与内存
- 增量投影:Main → preload 只发变化的会话,保留全量基线、周期全量刷新与 revision 衔接;缺帧时界面先标 stale、审批不可操作,Main 侧业务校验不变。
- 隐藏窗口不再推送业务投影,显示时发最新完整状态,Main 仍跟进请求生命周期。
- 过程行按实际显示字段 memo,Todo 跨 IPC 复用同一对象;长标题逐字动画上限 32 字符,完整文本仍保留;入场动画结束后不再保留 fill effect。
- 没有降低磨砂取样分辨率,也没有减少 RGB 通道或在展开期间停用折射。
测试
pnpm test:20 个文件 / 171 个用例(上一版 15 / 142)。新增 tests/host-transport.test.ts、tests/projection-channel.test.ts、tests/report-regressions.test.ts、tests/retention.test.ts、tests/window-controller.test.ts。npx eslint .、pnpm typecheck 干净。
仓库瘦身
只保留项目本体与读者需要的文档:删掉 reports/(270 个文件 / 13.5 MB 的历轮验收截图与 JSON)、docs/evidence/(2.5 MB 证据截图与上游摘录)、docs/references/、docs/superpowers/、TASKS.md、PROMPT_FOR_CODEX.md、docs/README_SPEC.md 以及旧版发布说明;README 用到的 6 张截图移到 docs/images/。
结果:498 个跟踪文件 / 18.6 MB → 189 个 / 2.68 MB。验收脚本仍会把新证据写到本机 reports/(已加入 .gitignore,不入库)。
安装
# npm:870 kB,首次启动自取 155 MB 运行时
dsh plugin --profile web add dsh-status-bar-plugin
# 自包含 tarball:155 MB,一次装完,运行期不再联网
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-status-bar.tgz行为与要求
- 胶囊 288×50 DIP,点开进入速览与详情;有待审批时打开审批面孔。
- 折射(约 13 物理像素偏折 + RGB 色散)默认关闭,在设置里打开;只读取窗后那一小条,不保存、不上传。
- 审批绝不自动放行:点击才发决定,卡片只在收到匹配的
approval/decided后确认。 - Windows 11 x64;桌面端是独立进程,需要 GPU 加速的 Electron 运行时(tarball 自带,npm 包首次启动下载)。
- MIT 许可;内置 Electron 运行时保留其自身许可证文件。
DSH Status Bar 0.2.4 - sampled-frame memory cuts
Memory optimisations for the sampling path, plus the rename to dsh-status-bar-plugin.
Install paths are unchanged.
Install
# npm: ~870 kB, fetches the runtime once on first launch
dsh plugin --profile web add dsh-status-bar-plugin
# release tarball: 155 MB, self-contained, nothing downloaded later
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-status-bar.tgzRunning an older install? dsh-glass-plugin is deprecated on the registry and
points here; the release keeps a dsh-glass-plugin.tgz asset so the old
latest/download URL keeps working.
What is new in the app
The sampling path stopped rebuilding what it already had:
- The native helper reuses one bitmap, RGBA buffer and previous frame buffer at
the current size, and releases them when the size changes or sampling stops. - A frame is only sent when the capture rect, window geometry and every RGBA byte
are identical — same schedule, same HWND/PID/display-affinity checks, no hashing
heuristics, no resolution or frame-rate cuts. - New subscribers, page reloads and appearance changes still coalesce into one
forced fresh frame, so a static background still paints on first show, on theme
changes and on restore. - The main process reuses an exact-size buffer and sends a view of the original
bytes instead of one whole-frame copy, and zeroes local pixels after the sync IPC. - The refraction morph reuses the same SVG nodes, updating texture, size and the
three coefficient paths, and drops the temporary canvas right after the
displacement map is computed.
Measured with pnpm test:memory / scripts/memory-audit.mjs on a production build,
same Electron 44.8.0, 150% scaling, WorkingSetPrivate summed over the process
group, five-second warm-up and four samples per scene:
| scene | before | after | change |
|---|---|---|---|
| capsule, not sampling | 288.6 MiB | 275.8 MiB | -4.5% |
| capsule, static background | 370.3 MiB | 248.5 MiB | -32.9% |
| expanded, static background | 397.8 MiB | 319.1 MiB | -19.8% |
| expanded, background changing every 180 ms | 383.7 MiB | 360.3 MiB | -6.1% |
| expanded after 18 morphs | 692.2 MiB | 627.0 MiB | -9.4% |
| capsule after the same sequence | 599.9 MiB | 623.2 MiB | +3.9% |
| after hiding | 522.8 MiB | 443.4 MiB | -15.2% |
The gain is real for static content and small for constantly changing video-like
backgrounds; the "expand then collapse" sample did not improve. GPU driver reserves
still dominate, so this is not a fixed memory ceiling. Full numbers and method:
reports/memory-upgrade/README.md.
The JavaScript and the native helper must ship together: the new optional
frame-force argument exists only in the rebuilt RegionCapture.exe, which this
tarball carries. Mixing an old helper with the new app silently loses the forced
re-sampling on reload.
Artifacts
| artifact | size | contents |
|---|---|---|
npm dsh-status-bar-plugin@0.2.4 |
870 kB packed | lib/, cordis.patch.yml, assets/, screenshots.json, README.md, LICENSE |
release dsh-status-bar.tgz |
155.3 MB | the same files plus app/ (411,307 B main bundle + rebuilt helper) and electron/dist/ (Electron 44.8.0) |
release dsh-glass-plugin.tgz |
155.3 MB | byte-identical compatibility copy for the pre-rename URL |
Verification
pnpm lint,pnpm typecheckclean;pnpm test15 files / 142 tests pass.pnpm test:memory: 8 groups (clear/frosted × capsule/peek/expanded/approval) —
input RGBA bytes, SDF textures, RGB coefficients and screenshot SHA-256 identical
before and after; source buffers zeroed after send.- The packaged
app/out/main/index.jsin this release is the build from
19087a0(411,307 B), not the 0.2.3 build (410,749 B).
Requirements
- Windows 11 x64. The refraction samples the screen behind the window, which is a
Windows-only path here. - The desktop app is a separate process; it needs a GPU-backed Electron runtime,
which the release tarball ships.
Notes
- The plugin bundle is
packages/dsh-status-bar;dsh.bundle.patchmounts one row
withautoLaunch: true. - Set
autoLaunch: falsein a profile patch to keep it installed but not
auto-started. - MIT licensed. The bundled Electron runtime keeps its own license files.
DSH Status Bar 0.2.3 - renamed to dsh-status-bar-plugin
Renames the plugin to match the repository and the product. Same app, same
behaviour — a new package id.
What changed
| before | after |
|---|---|
npm dsh-glass-plugin |
npm dsh-status-bar-plugin |
bundle row id dsh-glass-plugin |
dsh-status-bar-plugin |
package directory packages/dsh-plugin |
packages/dsh-status-bar |
release asset dsh-glass-plugin.tgz |
dsh-status-bar.tgz |
cache %LOCALAPPDATA%\dsh-glass-plugin |
%LOCALAPPDATA%\dsh-status-bar |
env DSH_GLASS_APP, DSH_GLASS_ELECTRON, DSH_GLASS_RUNTIME, DSH_GLASS_RUNTIME_URL |
DSH_STATUS_BAR_* (the old names still work as fallbacks) |
log prefix [dsh-glass-plugin] |
[dsh-status-bar] |
The app itself is the same build as 0.2.2 (streamed process updates, approval
face without the accent bar). The desktop window still shows DSH Status Bar.
Install
# npm: ~870 kB, fetches the runtime once on first launch
dsh plugin --profile web add dsh-status-bar-plugin
# release tarball: 155 MB, self-contained, nothing downloaded later
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-status-bar.tgzThe npm package no longer hardcodes the download URL in lib/: it reads
dsh.statusBar.runtime from its own manifest, so a version pins its own tarball.
Migrating from dsh-glass-plugin
dsh plugin --profile web remove dsh-glass-plugin
dsh plugin --profile web add dsh-status-bar-plugin-pluginThen drop the old row override (if any) from the profile patch and restart DSH.
The old package stays on the registry and is marked deprecated.
This release also carries a second copy of the tarball under the old asset name
(dsh-glass-plugin.tgz), so profiles still running 0.2.1/0.2.2 keep resolving
releases/latest/download/dsh-glass-plugin.tgz instead of getting a 404.
Artifacts
| artifact | size | contents |
|---|---|---|
npm dsh-status-bar-plugin@0.2.3 |
870 kB packed / 880 kB unpacked | lib/, cordis.patch.yml, assets/, screenshots.json, README.md, LICENSE |
release dsh-status-bar.tgz |
155.3 MB packed / 388.5 MB unpacked | the same files plus app/ and electron/dist/ (Electron 44.8.0) |
Verification
pnpm lint,pnpm typecheck: clean.pnpm test: 15 files, 142 tests.- Fresh npm install of the published package downloads the runtime, unpacks it to
runtime-0.2.3and launches the companion with the authenticated link. - MIT licensed. The bundled Electron runtime keeps its own license files.
DSH Status Bar 0.2.2 - streamed process updates, cleaner approval face
Rebuilds the companion against the current main branch. The install paths did not
change — the app inside the tarball is just newer.
Install
# npm: ~870 kB, fetches the runtime once on first launch
dsh plugin --profile web add dsh-glass-plugin
# release tarball: 155 MB, self-contained, nothing downloaded later
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-glass-plugin.tgzWhat is new in the app
- Process updates stream in. The DSH adapter used to wait for a completed
message before it published a task update; it now forwards assistant process
events as they arrive, so the capsule reflects what the session is doing
instead of jumping when the turn ends
(packages/adapters/dsh/src/assistant-preview.ts,+92lines, wired through
packages/adapters/dsh/src/index.tsandpackages/protocol/src/index.ts). - Approval face keeps the glass fill. The accent bar on the approval reason
is gone; the card keeps the translucent fill so long reasons read as part of the
same surface (apps/desktop/src/renderer/style.css). - 142 unit tests, type check and lint pass at this commit (15 files;
pnpm test,
pnpm typecheck,pnpm lint).
Artifacts
| artifact | size | contents |
|---|---|---|
npm dsh-glass-plugin@0.2.2 |
870 kB packed / 880 kB unpacked | lib/, cordis.patch.yml, assets/, screenshots.json, README.md, LICENSE |
release dsh-glass-plugin.tgz |
155.3 MB packed / 388.5 MB unpacked | the same files plus app/ (new build, 410,749 B main bundle) and electron/dist/ (Electron 44.8.0) |
The npm package downloads this release's tarball on first launch and caches it in
%LOCALAPPDATA%\dsh-glass-plugin\runtime-0.2.2 (~/.cache/dsh-glass-plugin/runtime-0.2.2
elsewhere), so the download happens once per version.
Behaviour
- Capsule 288×50 DIP, click to expand into the peek and detail views; pending
approvals open the approval face. - Glass refraction (≈13 physical px deflection with RGB dispersion) is off by
default; enable it in settings. It reads only the strip behind the window,
stores nothing and uploads nothing. - Approvals are never auto-accepted: a click sends the decision, and the card only
confirms after DSH returns the matchingapproval/decidedreceipt.
Requirements
- Windows 11 x64. The refraction samples the screen behind the window, which is a
Windows-only path here. - The desktop app is a separate process; it needs a GPU-backed Electron runtime,
which the release tarball ships.
Notes
- The plugin bundle is
packages/dsh-plugin;dsh.bundle.patchmounts one row
withautoLaunch: true. dsh-glass-plugin@0.2.0on the registry is the earlier self-contained build
(388 MB unpacked);0.2.1and later are the light build.- MIT licensed. The bundled Electron runtime keeps its own license files.
DSH Status Bar 0.2.1 - on npm, runtime fetched once
Adds an npm install path. The plugin is now on the registry, so the desktop
companion can be added with a package name instead of a 155 MB tarball URL.
Install
# npm: 870 kB, fetches the runtime once on first launch
dsh plugin --profile web add dsh-glass-plugin
# release tarball: 155 MB, self-contained, nothing downloaded later
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-glass-plugin.tgzRestart DSH afterwards. The plugin waits for the local web server, asks
connection for the authenticated URL and starts the desktop companion with
--dsh-link=<url> --launcher-pid=<pid>, so the link is handed over instead of
pasted. Glass exits when that DSH process goes away; disabling the bundle kills
the spawned window tree.
What changed in the launcher
- A third install shape: the npm package ships only
lib/,cordis.patch.yml,
assets/, docs andLICENSE. On first launch the plugin downloads this
release's tarball, unpacksapp/andelectron/dist/into a per-version cache
and starts the companion from there.- Cache:
%LOCALAPPDATA%\dsh-glass-plugin\runtime-<version>on Windows,
~/.cache/dsh-glass-plugin/runtime-<version>elsewhere. One download per
version; later launches reuse it. - Progress is logged (
[dsh-glass-plugin] downloading the Glass runtime: 40% of 155 MB). - Overrides:
runtimeDir,downloadUrlin the row config, orDSH_GLASS_RUNTIME
/DSH_GLASS_RUNTIME_URLin the environment.
- Cache:
- Waiting for the runtime no longer eats the 150 s web-server budget: the clock
only runs once both halves of the companion are on disk. - The tarball install and the checkout install resolve exactly as before.
What is in each artifact
| artifact | size | contents |
|---|---|---|
npm dsh-glass-plugin@0.2.1 |
870 kB packed / 880 kB unpacked | lib/, cordis.patch.yml, assets/, screenshots.json, README.md, LICENSE |
release dsh-glass-plugin.tgz |
155.3 MB packed / 388.5 MB unpacked | the same files plus app/ (1.3 MB) and electron/dist/ (Electron 44.8.0, 386 MB) |
The npm package downloads the release tarball, so both paths end up with the
identical app and runtime.
Requirements
- Windows 11 x64. The refraction samples the screen behind the window, which is a
Windows-only path here. - The desktop app is a separate process; it needs a GPU-backed Electron runtime,
which the release tarball ships.
Behaviour
- Capsule 288×50 DIP, click to expand into the peek and detail views; pending
approvals open the approval face. - Glass refraction (≈13 physical px deflection with RGB dispersion) is off by
default; enable it in settings. It reads only the strip behind the window,
stores nothing and uploads nothing. - Approvals are never auto-accepted: a click sends the decision, and the card only
confirms after DSH returns the matchingapproval/decidedreceipt. - 132 unit tests, type check and lint pass at this commit (
pnpm test,
pnpm typecheck,pnpm lint).
Notes
- The plugin bundle is
packages/dsh-plugin;dsh.bundle.patchmounts one row
withautoLaunch: true. - Set
autoLaunch: falsein a profile patch to keep it installed but not
auto-started. - MIT licensed. The bundled Electron runtime keeps its own license files.
DSH Status Bar 0.2.0 - installable DSH plugin
First release that can be installed as a DSH plugin, without building anything.
Install
dsh plugin --profile web add https://github.com/wfz2006/dsh-status-bar/releases/latest/download/dsh-glass-plugin.tgzRestart DSH afterwards. The plugin waits for the local web server, asks connection for the authenticated URL and starts the desktop companion with --dsh-link=<url> --launcher-pid=<pid>, so the link is handed over instead of pasted. Glass exits when that DSH process goes away; disabling the bundle kills the spawned window tree.
If you would rather build it yourself, pnpm install && pnpm build in a checkout still works — the launcher also resolves apps/desktop and the workspace electron package.
What is in the tarball
| part | size (unpacked) |
|---|---|
app/ — main bundle, renderer, preload, RegionCapture.exe |
1.3 MB |
electron/dist/ — Electron 44.8.0 runtime |
386 MB |
lib/, cordis.patch.yml, screenshots.json, assets/, LICENSE |
~750 KB |
Nothing is compiled or downloaded at install time.
Requirements
- Windows 11 x64. The refraction samples the screen behind the window, which is a Windows-only path here.
- The desktop app is a separate process; it needs a GPU-backed Electron runtime, which this tarball ships.
Behaviour
- Capsule 288×50 DIP, click to expand into the peek and detail views; pending approvals open the approval face.
- Glass refraction (≈13 physical px deflection with RGB dispersion) is off by default; enable it in settings. It reads only the strip behind the window, stores nothing and uploads nothing.
- Approvals are never auto-accepted: a click sends the decision, and the card only confirms after DSH returns the matching
approval/decidedreceipt. - 132 unit tests, type check and lint pass at this commit (
pnpm test,pnpm typecheck,pnpm lint).
Notes
- The plugin bundle is
packages/dsh-plugin;dsh.bundle.patchmounts one row withautoLaunch: true. - Set
autoLaunch: falsein a profile patch to keep it installed but not auto-started. - MIT licensed. The bundled Electron runtime keeps its own license files.