LyShell v1.0.7
The headline of this release is a rework of environment variable groups — a global group library, structured credentials, and a dedicated management panel. It also adds document tabs (read-only preview), Ctrl+click link opening in the terminal, a Lark light theme, and agent / harness hosts now prefer PowerShell 7.
✨ New Features
Environment variable groups (headline change)
- Global group library: the three per-kind variable group stores (dsh / codex / claude) merge into a single global library (
env-profiles.json); "enabled" becomes a per-kind pointer, so one group can be enabled for several kinds at once. Existing data migrates automatically on startup (idempotent; the old file is kept as.bak). - New "Environment Variables" entry in the left rail: all group CRUD is consolidated into one global panel. The dsh / codex / claude switches on each card are both indicator and control — click to point that kind's enabled pointer at this group, click again to fall back to the system environment; an "n references" count reads back explicit bindings from agents and workspaces, with the referencing parties listed on hover.
- Structured core — Base URL + API Key: credentials are injected via a per-consumer mapping — on the harness side dsh→
DEEPSEEK_*, codex→OPENAI_*, claude→ANTHROPIC_*; generic agents declare their own mapping viaenvKeyMap, and without one only the extra variables pass through. On key collisions the structured core wins. - Explicit group binding for generic agents: resolution chain is bound group → inline env → system environment; dangling bindings are rejected at save time.
- Hardening & normalization: agent env is sanitized on write (empty keys / non-string values dropped, so dirty data never reaches node-pty); the masked row editor is unified across agents and harness (sensitive keys masked, with an eye toggle for plaintext).
Document tabs
- New document tabs with read-only preview — multiple can be open and split. Four entry points: double-click in the file tree, drop onto the window,
Ctrl+Shift+Oto open the system file dialog, or Ctrl+click a path in the terminal. - Links inside documents resolve through a unified merge (including relative paths in the SSH docs).
Terminal
Ctrl+clickin the terminal: URLs open in a web tab, paths open in document preview — no more copying into a browser.
Agent / Harness host shell
- Agents and harness workspaces now prefer PowerShell 7 as the launch shell: the system PATH, WindowsApps aliases, and well-known install locations are probed, so a freshly installed pwsh is picked up without restarting the app. Without pwsh, behavior is unchanged — user-created local sessions are unaffected.
- The pwsh host adds
-NoProfile: an interactive profile'sSet-Locationno longer silently overrides the workspace / worktree cwd, keeping the host transparent.
Themes & UI
- New Lark light theme (Feishu-style: cool-gray chrome + pure-white canvas + ink-blue text + brand-blue focus).
- Web tabs show the site favicon and adapt to light / dark themes.
- Panel tabs and the rack layout language are unified; the MCP activity chip moves to the bottom of the left rail.
Misc
- Harness worktree and default names switch to timestamps: the worktree key becomes
<kind>-<workspace-name>-<seconds-level timestamp>(creation time is readable, replacing the random code), and empty names default toWorkspace-<minute-level timestamp>.
🐛 Fixes
- Shortcut conflict: opening a local document moves from
Ctrl+OtoCtrl+Shift+O, no longer stealing the terminal's^Ocontrol character — vim's jump-to-previous-position and bash's operate-and-get-next work again. - Panes: fixed drag-and-drop and overlay splitting on empty panes.
- Persistence robustness (variable group / agent / workspace repositories):
- unified atomic writes (temp file + rename), so a mid-write crash no longer leaves a truncated JSON behind;
- save and delete failures are no longer silent — the form stays open with the reason shown, and errors distinguish "record not found" from "write failed";
- the ENV panel warns when extra variables contain another protocol's credential keys, suggesting folding them into the core or splitting the group, to prevent credential cross-talk.
- Session dedup & cloning: the dedup key and same-config check now compare
shellArgs— the same shell with different arguments (e.g.pwsh -NoProfilevs interactive pwsh) is no longer misjudged as one session;cloneSessionnow deep-copies arrays, removing shared references across the disk boundary. LocalConfigis unified into a single definition in@shared/types; the connectors-side copy and its dead fields are gone.
🔄 Upgrade notes
- Existing variable groups migrate to the global library and are structured (Base URL / API Key) on first launch; the original file is kept as
.bak— nothing to do manually. - The MCP
lyshell_create_sessionlocalparameter deliberately does not exposeshellArgs(internal plumbing only); interactive terminals keep default-shell behavior — the external surface is unchanged.