Skip to content

Releases: wfz2006/dsh-status-bar

DSH Status Bar 0.2.9 - lighter bundles, incremental projection, faster process sync

Choose a tag to compare

@wfz2006 wfz2006 released this 25 Oct 04:32

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.tgz

What changed

  • Smaller bundles. Main, preload and renderer are minified in production. Renderer CSS stays unminified on
    purpose: the minifier folds scale into transform, which broke the native drag acceptance that reads the
    computed scale (it reported scale: none).
  • Cheaper startup. @glass/protocol/initial-projection exposes 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 reports document.hidden === false here.
  • Process sync latency. Four causes fixed: a cold session that was already running still waited for the
    10-second session/list (the native api-session/status signal now enables follow() immediately), stale list
    responses could overwrite newer live state (list rows now carry object identity plus a local revision), a late
    session/page from 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 real turn/end reason — 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 as constructor / 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 clears data-drag via 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 own dist is 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 surface transform: none, RGB filter URL preserved, sampled across 10 distinct positions.

Verification

  • npx eslint . clean, npx tsc --noEmit clean, vitest run --maxWorkers=1 23 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-ui and the native motion/experience
    suites pass.

Known limits

  • The legacy test:desktop script still fails: it looks for .todo on 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 in reports/optimization/legacy-smoke-before.txt (not committed).
  • drag-optics-acceptance.mjs still 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.json version 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

Choose a tag to compare

@wfz2006 wfz2006 released this 22 Oct 16:27

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.tgz

Why

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: stages app/ + electron/ + LICENSE as dsh-status-bar-runtime,
    packing from the same staging directory the self-contained bundle uses, so both artifacts always describe the
    same build. --publish uploads it.
  • dsh-status-bar-plugin now 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 configured downloadUrl / DSH_STATUS_BAR_RUNTIME_URL is 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 --noEmit clean, vitest run --maxWorkers=1 21 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.8 published: 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.json version 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

Choose a tag to compare

@wfz2006 wfz2006 released this 22 Oct 16:17

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.tgz

What 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 curl invocation 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-effort needs 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 .part file.
  • 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 --noEmit clean, vitest run --maxWorkers=1 21 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.part where 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

Choose a tag to compare

@wfz2006 wfz2006 released this 22 Oct 16:01

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.tgz

Why 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 curl is preferred, with bounded connect, idle and total time; Node is the fallback when curl
    is missing or unusable. Up to three automatic attempts.
  • .tgz.part plus its metadata live next to the version cache, so a partial transfer survives a restart.
  • Resume uses If-Range only when the URL fingerprint and a strong ETag/Last-Modified can 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: false keeps 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.json version 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, respects prefers-reduced-motion and 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 --noEmit clean, vitest run --maxWorkers=1 21 files / 189 tests pass.
  • tests/plugin-startup.test.ts adds 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 ignoring Range,
    Node resume and idle timeout, missing validators, missing curl, corrupt archive, leftover staging.
  • pnpm test:plugin-startup runs 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.patch mounts one row with autoLaunch: true.
    Set autoLaunch: false in 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

Choose a tag to compare

@wfz2006 wfz2006 released this 21 Oct 13:47

修复一轮外部核对报告确认的问题,把主进程到界面的投影改成增量传输,并把仓库收成「项目本体 + 读者需要的文档」。

修掉的问题

编号 问题 处理
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

Choose a tag to compare

@wfz2006 wfz2006 released this 21 Oct 00:42

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.tgz

Running 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 typecheck clean; pnpm test 15 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.js in 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.patch mounts one row
    with autoLaunch: true.
  • Set autoLaunch: false in 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

Choose a tag to compare

@wfz2006 wfz2006 released this 19 Oct 12:24

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.tgz

The 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-plugin

Then 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.3 and 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

Choose a tag to compare

@wfz2006 wfz2006 released this 18 Oct 08:15

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.tgz

What 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, +92 lines, wired through
    packages/adapters/dsh/src/index.ts and packages/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 matching approval/decided receipt.

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.patch mounts one row
    with autoLaunch: true.
  • dsh-glass-plugin@0.2.0 on the registry is the earlier self-contained build
    (388 MB unpacked); 0.2.1 and 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

Choose a tag to compare

@wfz2006 wfz2006 released this 18 Oct 07:35

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.tgz

Restart 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 and LICENSE. On first launch the plugin downloads this
    release's tarball, unpacks app/ and electron/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, downloadUrl in the row config, or DSH_GLASS_RUNTIME
      / DSH_GLASS_RUNTIME_URL in the environment.
  • 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 matching approval/decided receipt.
  • 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.patch mounts one row
    with autoLaunch: true.
  • Set autoLaunch: false in 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

Choose a tag to compare

@wfz2006 wfz2006 released this 18 Oct 07:04

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.tgz

Restart 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/decided receipt.
  • 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.patch mounts one row with autoLaunch: true.
  • Set autoLaunch: false in a profile patch to keep it installed but not auto-started.
  • MIT licensed. The bundled Electron runtime keeps its own license files.