Skip to content

Releases: Wintersta7e/agentdeck

v6.5.0 — Tech-debt closure + Electron 42 / dep refresh

13 May 15:51

Choose a tag to compare

[6.5.0] - 2026-05-13

Tech-debt audit closure plus a dependency-refresh pass. The user-visible
surface is unchanged; this release consolidates internal patterns
introduced over v6.3.0–v6.4.0 (CSS tokens, IPC channel names, versioned
disk caches, agent registry) and ships a major Electron jump.

Added

  • scripts/build-portable.sh + npm run release-portable — gated release build that runs lint, typecheck, tests, then electron-vite build + electron-builder --win portable and confirms the produced .exe.
  • src/shared/ipc-channels.ts with 84 named CH.* constants + 4 dynamic helpers; 26 production files swept off raw string channel names.
  • WorkflowRun.version: 1 field with forward-stamping in the persisted run JSON.
  • New spacing tokens --sp-half, --sp-0_75, --sp-1_5; new z-index tokens --z-* (4 levels); new overlay/surface tokens (--overlay-soft, --overlay-dim, --surface-tint-light).
  • 42 new tests across fs-atomic, wsl-exec, workflow-seed-blueprints, and workflow-seeds (top 4 of 8 priority files).
  • .nvmrc pinned to 22.22.1; engines.node raised to >=22.22.1 to match the lint-staged 17 requirement.
  • overrides.node-abi: ^4.30.0 in package.json to keep electron-rebuild's ABI lookup in sync with Electron majors.

Changed

  • Workflow seeds split: workflow-seeds.ts shrank from 922 → 103 LOC (orchestration only); blueprint data moved to a new 815 LOC workflow-seed-blueprints.ts.
  • Mascot character colors tokenized via local CSS vars instead of literal palette values.
  • 11 literal-rgba sites tokenized via overlay/surface tokens (4 xterm-theme entries kept as accepted exceptions).
  • 19 raw z-index values tokenized via --z-*.
  • 128 of 142 raw px spacing values tokenized via --sp-* (remaining 14 are documented exceptions).
  • as any removed from production code (MockChild.pid widening); production as unknown as cut 4 → 2.

Dependencies

  • electron 41.3.0 → 42.0.1 (Chromium 148, Node 24, V8 14.8)
  • react / react-dom 19.2.5 → 19.2.6
  • lint-staged 16.4.0 → 17.0.4 (requires Node ≥ 22.22.1, Git ≥ 2.32.0)
  • @types/node 25.6.0 → 25.7.0
  • typescript-eslint 8.59.1 → 8.59.3
  • zustand 5.0.12 → 5.0.13
  • vitest / @vitest/coverage-v8 4.1.5 → 4.1.6
  • yaml 2.8.4 → 2.9.0
  • npm audit fix patched fast-uri, postcss, and @xmldom/xmldom transitives; npm audit reports 0 vulnerabilities.

v6.3.0 — TerminalGridMirror tab-preservation infrastructure

02 May 18:40

Choose a tag to compare

What's new

A parallel cell-grid mirror that tracks where every \t byte landed, so copy can substitute literal tabs for the cell ranges that came from a tab character. Implemented as a self-contained ANSI parser (~700 LOC) covering CSI cursor positioning, erase ops, scroll regions, alt-buffer toggles, DECSC/RC, and string sequences (OSC / DCS / APC / PM). Backed by a wcwidth helper for CJK / emoji 2-cell width arithmetic. 35 mirror tests + 17 wcwidth tests + 9 copy-path tests added; total suite at 1181/1181 passing.

The mirror is fed unconditionally from pty.onData (regardless of pane visibility), resized in lockstep with xterm, and cached alongside the cached Terminal across tab switches. Copy substitution applies to spans that fit entirely inside the per-row selection; spans that cross either boundary stay as spaces (visual fidelity over imperfect substitution at boundaries).

Honest caveat — Windows + WSL via ConPTY

On Windows + WSL setups (which is AgentDeck's primary target), tabs are stripped upstream of our process by ConPTY (Windows Pseudo Console). ConPTY parses VT input into a cell grid, then re-serializes the grid as bytes for the host — tab characters that advanced the cursor over blank cells are re-emitted as spaces, not tabs. This is documented in microsoft/terminal #411 and affects every node-pty + ConPTY consumer (VS Code, Hyper, Windows Terminal). v6.3.0's tab preservation infrastructure is correct end-to-end but is currently a no-op under ConPTY because the input stream never contains \t bytes.

The mirror code remains useful for any future non-ConPTY path (winpty mode, native Linux/macOS PTY, custom pipelines) and lays groundwork for additional cell-tracking features down the line.

Other improvements

  • Alt-buffer save-cursor fixDECSC inside the alt buffer no longer clobbers main's saved cursor across DECRST 1049.
  • stripAnsi extracted to src/shared/ansi.ts — single source of truth for the ANSI escape regex consumed by main and renderer.
  • Hot-path optimizations — wcwidth ASCII fast-path + chunk-slice plain ASCII printable runs in mirror.ingest. Estimated 10-50× faster on plain text bursts.
  • getLogicalSelection signature switched to (term, options?) so future fields can land without churning call sites.