Skip to content

feat: desktop system events + settings toggle#1654

Merged
esengine merged 2 commits into
mainfrom
feat/desktop-system-events-and-toggle
May 24, 2026
Merged

feat: desktop system events + settings toggle#1654
esengine merged 2 commits into
mainfrom
feat/desktop-system-events-and-toggle

Conversation

@esengine

Copy link
Copy Markdown
Owner

Follow-up to #1650 (now merged). Closes the remaining two items I noted in #1650's PR body.

Summary

  1. Desktop bridge equivalent of feat(dashboard): surface system events as quiet inline dividers #1650's dashboard work — feature parity between Desktop and Dashboard for fold / abort / rate-limit / storm-stuck inline dividers.
  2. Settings toggle "Show system events in thread" — persisted, on by default, for users who want a fully clean conversation.

Commit 1 — desktop bridge

The kernel `WarningEvent` (added in #1650) already flows through eventize → desktop sidecar → webview as a Tauri event, but desktop's protocol type and App reducer didn't know about it — the event reached the renderer and was silently dropped.

  • Add `WarningEvent` to `desktop/src/protocol.ts` (matches dashboard shape exactly).
  • `ChatMessage` union grows a `warning` kind; reducer adds a case gated on `severity === "high"`.
  • Thread renderer adds the warning branch — same `.sys-event-row` inline divider styling as dashboard.

Commit 2 — settings toggle

  • New config field `thread.showSystemEvents` (default true) in `src/config.ts` with `load/saveShowSystemEvents` helpers.
  • Desktop sidecar (`src/cli/commands/desktop.ts`): include in `$settings` push, handle in `settings_save` command.
  • Both SPAs:
    • `Settings` / `SettingsEvent` / `SettingsPatch` grow the field.
    • Settings reducer stores it.
    • Warning render gates on `settings.showSystemEvents !== false`.
  • Settings panel UI on both surfaces: new seg-ctrl row "system events" with shown/hidden, slotted into the Behavior section right after edit-mode. i18n keys for en + zh-CN.

Default remains "shown" — the severity filter (high-only) already keeps the visible set to ~1-3 per session, so this is a preference, not a noise mitigation.

Test plan

reasonix added 2 commits May 23, 2026 22:05
Desktop equivalent of #1650. The kernel WarningEvent (added in #1650
for high-severity warnings) already flows through eventize → desktop
sidecar → webview as a Tauri event, but desktop's protocol type and
App reducer didn't know about it — the event reached the renderer and
was silently dropped.

- Add WarningEvent to desktop/src/protocol.ts (matches the dashboard
  shape exactly: type, id, ts, turn, text, severity).
- ChatMessage union grows a "warning" kind; reducer adds a case that
  gates on severity === "high" (low-severity already dropped at
  eventize; defense-in-depth here in case future emit sites use the
  field differently).
- Thread renderer adds the warning branch — same .sys-event-row inline
  divider styling as dashboard (single dim line, 11px, opacity 0.7,
  flanked by hairline rules). Visually weak so several through a long
  session don't crowd the conversation.

Stacked on top of #1650 — desktop and dashboard now have feature parity
for compaction / abort / rate-limit / storm-stuck visibility without
the alarmist red error cards.

Follow-up not in this PR:
- Settings toggle "Show system events in thread" with config persistence,
  for users who want to fully hide them. Severity filter (high-only)
  already keeps the visible set to ~1-3 per session, so this is a
  preference, not a noise mitigation.
Adds a persisted per-config toggle so users who want a fully clean
conversation can hide the quiet inline dividers entirely. Default
remains "shown" — the severity filter (high-only) already keeps the
visible set to ~1-3 per session, so this is a preference, not a noise
mitigation.

- New config field thread.showSystemEvents (default true) with
  load/save helpers in src/config.ts.
- Desktop sidecar (src/cli/commands/desktop.ts): include in $settings
  push, handle in settings_save command.
- Dashboard + Desktop SPAs:
  - Settings type and SettingsEvent/SettingsPatch grow the field.
  - Settings reducer stores it.
  - Warning render gates on settings.showSystemEvents !== false.
- Settings panel UI on both surfaces: new seg-ctrl row "system events"
  with shown / hidden options, slotted into the Behavior section right
  after edit-mode. i18n keys added for en + zh-CN.
@esengine esengine merged commit bac58ae into main May 24, 2026
4 checks passed
@esengine esengine deleted the feat/desktop-system-events-and-toggle branch May 24, 2026 05:14
esengine pushed a commit that referenced this pull request May 24, 2026
…moved, persisted usage stats, plan dispatch gate

Headline themes:
- Desktop: bundle the CLI-hosted React dashboard, retire Tauri+Preact duplicate (#1418)
- Config: drop preset abstraction; flash/pro are direct model selections (#1657, #1630)
- Stats: persist cumulative usage to session meta + auto-restore on startup (#1667, #1680, #1643, #1628)
- Plans: editMode="plan" enforced at the ToolRegistry dispatch gate (#1681); step advance fix (#1629)
- Context: fold once at turn start, drop pre-flight + byte-ceiling (#1642, #1646); collapsible compacted card (#1649)
- Subagents: per-skill flash/pro override + Settings UI (#1632)
- Desktop polish: sidebar drag-resize (#1688), responsive collapse (#1585), copy/edit overlay + msg-history nav (#1645), Esc closes modal not turn (#1685), QQ tab isolation (#1672), DiffCard for edits (#1662), theme-aware highlighting (#1655), system events toggle (#1654/#1650), macOS TCC inheritance (#1614), dashboard.enabled (#1612)
- Dashboard polish: persistent session URL (#1586, #1589, #1599), theme-aware highlighting (#1664), IME confirm-enter guard (#1689), code-fence lang fix (#1677), vendor chunk split (#1587), markdown table h-scroll (#1562)
- TUI: Alt+S input stash/recall; static history isolated from input rerenders (#1635); legacy mouse drop (#1637, #1648); multi-edit gated in review (#1647)
- Diff: SplitDiff column border holds under CJK (#1686)
- MCP: workspace roots passed to servers (#1625); codeCommand honors mcpServers (#1603)
- Config plumbing: (baseUrl, apiKey) resolved as a tuple (#1658); stale model id self-heal (#1663)

See CHANGELOG for the full list.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant