You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: DESIGN.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -134,7 +134,7 @@ This system has no "primary" accent in the brand sense. The closest analogue is
134
134
-**Terminal Background / Foreground** (`var(--vscode-terminal-background)` / `var(--vscode-terminal-foreground)`): the terminal content surface and xterm default text. Orthogonal to the chrome.
135
135
-**Error** (`var(--vscode-terminal-ansiRed)`): destructive actions and kill-confirm letter flash.
136
136
-**Success** (`var(--vscode-terminal-ansiGreen)`): TODO check, theme-store install confirm.
137
-
-**Alarm** (`var(--vscode-terminal-ansiYellow)`initial; runtime-rotated): bell-ringing alert tint. Per-surface OKLCH hue-rotation by `use-dynamic-palette.ts` from the bg the bell sits on, so the alert pops off any header.
137
+
-**Alarm** (`var(--vscode-terminal-ansiYellow)`baseline; runtime-overridden): bell-ringing alert tint. `computeDynamicPalette()` replaces each `--color-alarm-vs-*` token with plain white or black by the OKLab lightness of the bg the bell sits on (active header, inactive header, or door), so the ringing bell stays maximally legible on any surface.
138
138
139
139
### Fixed Exception
140
140
-**Window Close Hover** (`#b92a1b`): the only literal color in the whole system. Native OS close-button hover on Windows/Linux chrome buttons; matches the platform convention across themes.
Copy file name to clipboardExpand all lines: docs/specs/alert.md
+20-9Lines changed: 20 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -48,6 +48,8 @@ These do not count as attention: mere visibility, command-mode selection, hover,
48
48
49
49
Attention is lost when the attention timer expires, the app loses focus, the attended Session is minimized or destroyed, or another Session becomes attended. `T_USER_ATTENTION` also acts as the minimum runtime for command-exit alerts.
50
50
51
+
Source of truth: `cfg.alert` in `lib/src/cfg.ts` defines `T_USER_ATTENTION` and the other timer defaults and their purpose.
52
+
51
53
## WATCHING Track
52
54
53
55
WATCHING is the user-controlled output/silence monitor. It starts fresh when enabled and is disposed when disabled. Meaningful output excludes resize redraw noise during `T_RESIZE_DEBOUNCE`; theme changes, remounts, DOM reparenting, selection, and focus changes are not output.
@@ -61,8 +63,6 @@ WATCHING is the user-controlled output/silence monitor. It starts fresh when ena
61
63
|`MIGHT_NEED_ATTENTION`| A busy Session went quiet. Debounce state. |
62
64
|`ALERT_RINGING`| WATCHING observed likely completion while the Session lacked attention. |
63
65
64
-
Source of truth: `cfg.alert` in `lib/src/cfg.ts` defines timer defaults and their purpose.
65
-
66
66
Source of truth: `ActivityMonitor` in `lib/src/lib/activity-monitor.ts` implements the transitions. The invariants the implementation must honor:
67
67
68
68
- Output drives the monitor up the chain `NOTHING_TO_SHOW` -> `MIGHT_BE_BUSY` -> `BUSY`; silence drives it down `BUSY` -> `MIGHT_NEED_ATTENTION` -> `ALERT_RINGING`. The `MIGHT_*` states are debounce windows in both directions.
@@ -135,10 +135,10 @@ Supported keys:
135
135
136
136
`title` and `body` chunks append to the pending notification. Completion rings once if the sanitized title or body is nonempty. If `i` is omitted, only a complete single-sequence notification is meaningful.
137
137
138
-
Management payloads do not ring:
138
+
Management payloads contribute no notification content:
139
139
140
140
-`p=?` sends a support response advertising the support payload defined in `lib/src/lib/terminal-protocol.ts` (`OSC99_SUPPORT_PAYLOAD`).
141
-
-`p=close`, `p=alive`, `p=icon`, and `p=buttons` are consumed or ignored without creating notification UI.
141
+
-`p=close`, `p=alive`, `p=icon`, and `p=buttons` are consumed or ignored without creating notification UI of their own. Like any chunk, one carrying the (default) `d=1` done flag still completes a pending same-`i` notification, which may then ring on its previously accumulated title/body — kitty's done-flag semantics apply regardless of the final chunk's payload type.
142
142
143
143
Source of truth: `lib/src/lib/terminal-protocol.ts` defines the pending OSC 99 chunk TTL and max-pending-id cap.
144
144
@@ -177,7 +177,7 @@ Clearing behavior:
177
177
178
178
> See `docs/specs/glossary.md` for the Workspace / Window containers.
179
179
>
180
-
> **Partially implemented.**The union *projection* is a pure function — `computeWorkspaceUnion(surfaceIds, activitySnapshot)` in `lib/src/lib/workspace-union.ts` (stage 2b). **VS Code surfacing is implemented**: the editor-tab title and the bottom-panel view badge reflect the union (terminal ring/TODO only; `docs/specs/vscode.md`). Still not built: the **standalone strip indicators** (stage 3). A browser Surface's user-set `todo` round-trips to the activity store live and persists across restart (stage 2a), so it is counted by the projection and shows on the surface's door today.
180
+
> The union *projection* is a pure function — `computeWorkspaceUnion(surfaceIds, activitySnapshot)` in `lib/src/lib/workspace-union.ts`. **VS Code surfacing is implemented**: the editor-tab title and the bottom-panel view badge reflect the union (terminal ring/TODO only; `docs/specs/vscode.md`). A browser Surface's user-set `todo` round-trips to the activity store live and persists across restart, so it is counted by the projection and shows on the surface's door today. The **standalone strip indicators** are staged — see `docs/specs/layout.md``## Future` (workspaces-rollout).
181
181
182
182
A Workspace projects a **union status** over the attention state of the Surfaces it contains (terminal Sessions and browser Surfaces alike — see `docs/specs/glossary.md`):
183
183
@@ -193,10 +193,8 @@ Rules:
193
193
194
194
Where the union surfaces is host-specific:
195
195
196
-
-**Standalone:** each inactive Workspace's tab in the strip shows the union `ringing` bell and `todo` pill, reusing the Door indicator vocabulary (`bellIconClass`, the TODO pill). The **active** Workspace's tab shows no union indicator — its rings and TODOs are already visible on its own panes and doors. See `docs/specs/layout.md`.
197
-
-**VS Code:** the host reflects the **terminal** portion of each Workspace's union onto the webview's native chrome — an editor tab's icon (and optionally title) and the sidebar view's numeric badge. Browser-surface TODO stays webview-local and is not shown on native chrome until a future webview→host Surface-state channel exists. See `docs/specs/vscode.md`.
198
-
199
-
This spec fixes the projection and the surfacing rules; the exact visual treatment of the standalone strip is settled in the Storybook UI pass.
196
+
-**Standalone:** the workspace strip that will show per-tab union indicators is staged with the rest of the strip UI — the behavioral rules live in `docs/specs/layout.md``## Future` (workspaces-rollout). Today a browser Surface's `todo` shows on its own door, and terminal rings/TODOs show on their panes and doors as specified above.
197
+
-**VS Code:** the host reflects the **terminal** portion of each Workspace's union onto the webview's native chrome — an editor tab's icon (and optionally title) and the sidebar view's numeric badge. Browser-surface TODO stays webview-local; surfacing it on native chrome needs the webview→host Surface-state channel staged in `docs/specs/vscode.md``## Future`. See `docs/specs/vscode.md`.
200
198
201
199
## UI Contract
202
200
@@ -265,6 +263,19 @@ Security requirements:
265
263
- Bell, TODO, preview, and dialog controls must remain keyboard reachable; dialogs trap focus and support `Escape`.
266
264
- Tooltips, dialog copy, and future localized TODO labels must wrap in narrow layouts.
267
265
266
+
## Files
267
+
268
+
| File | Role |
269
+
|------|------|
270
+
|`lib/src/lib/activity-monitor.ts`| Per-Session WATCHING state machine (output/silence timers) |
271
+
|`lib/src/lib/alert-manager.ts`|`AlertManager`: protocol + command-exit tracks, attention, TODO, notification storage, status projection |
Copy file name to clipboardExpand all lines: docs/specs/auto-update.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,9 @@ app launch
9
9
│
10
10
├─ check for post-install markers in localStorage
11
11
│ ├─ success marker → show "Updated to vX.Y.Z" banner (auto-dismisses after 10s)
12
-
│ ├─ failure marker → show "Update failed." banner with debug action
12
+
│ ├─ failure marker → show "Update failed" banner with debug action, then STOP —
13
+
│ │ the update check is skipped this launch (re-prompting for the version that
14
+
│ │ just failed would unmount an open debug dialog)
13
15
│ └─ no marker → continue
14
16
│
15
17
├─ wait 5 seconds
@@ -61,7 +63,7 @@ When a notice has follow-up actions, it uses ` · ` as the separator between the
61
63
62
64
All states are dismissible via [×]. Dismissing an unapproved `available` notice means no update is downloaded or installed in that session. Dismissing a `downloading` or `downloaded` notice hides it for the session only — it does not cancel an already-approved download/install.
63
65
64
-
The notice matches the Baseboard's existing text style (9px mono, `text-muted`). It's pushed right via `ml-auto` so it doesn't compete with doors or the shortcut hint on the left.
66
+
The notice matches the Baseboard's existing text style (`text-sm font-monotext-muted` — 12px via the theme.css `text-sm` override). It's pushed right via `ml-auto` so it doesn't compete with doors or the shortcut hint on the left.
0 commit comments