Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,14 @@ Any actual image goes through the shared graphics service (`src/graphics/`, [gra
## UI consistency (permanent rule)
All new NMSh UI reuses the established components and interaction patterns before anything is drawn by hand: `framePanel`, the tab strip (`renderTabStrip`), the selected-row band (`selectedRowBand`), `renderControlRows`, `groupedList`, the Settings and row panels, the palette and glyph tables (`UI_COLORS`, `GLYPHS`, Safe Glyphs, NO_COLOR rules) and the shared panel keys (↑↓ select, ←→/Tab switch, Enter confirm, Esc back). Ad hoc bracketed menus (`[1 Option]`), one-off boxes and private color tables are not the default; a new surface that cannot reuse a component first extends the shared one. Menus, text, selection controls and chrome stay terminal text: graphics protocols and text sizing are for real images and document or celebration typography, never a replacement for ordinary menus. Reviews check this the same way they check input ownership. The multiline paste review (`src/input/BatchReview.ts`) is the reference: [multiline execution modes](docs/design/multiline-execution-modes.md).

Modern controls only (permanent rule): never hand-draw legacy widgets. No hard-coded `[x]` / `[ ]` checkboxes, `(*)` / `( )`
radios, `y/N` prompts or bracketed key hints in UI code. Use the shared pieces instead: `checkMark` (src/ui/glyphs.ts; it falls
back to `[x]`/`[ ]` only under Safe Glyphs), `renderToggle`, `renderSelect`, `renderMultiSelect`, `renderTextValue`,
`renderConfirm`/`renderConfirmButtons` (src/ui/formControls.ts), `renderValueControl` (src/ui/controls.ts), `selectedRowBand`,
`renderControlRows`, and for editors and reviews `renderStudioLayout`/`renderStudioReview` (src/ui/StudioLayout.ts). Before adding a
picker, menu or confirmation, find the existing one that does the job (Settings, /tools, /theme, the command palette, BatchReview)
and reuse or extend it. tests/uiConsistency.test.ts enforces the widget part of this rule.

## Input invariants
- `Shift+Enter`: newline (multiline)
- `Ctrl+J`: fallback newline
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

### Added

- **Logo animation for the native welcome.** Welcome Studio › Animation › **Logo animation** animates a still PNG, JPEG or WebP logo at startup from frames NMSh generates in memory (no GIF, no files written): **Assemble** (sparks gather and the logo forms out of their light), **Shine** (a specular band sweeps the logo's own pixels), **Glow pulse** (a halo in the logo's colors blooms and breathes), **Glitch** (RGB-split slices and flicker resolving to the clean logo) and **Embers** (glowing particles lift off the bright rims). **Play** is *Once at startup* (about two seconds, settling exactly on your image) or *Gentle loop* (repeats softly for up to 30 s, stops when you type and rests while the window is unfocused). Frames go through the same path as GIF/APNG welcome images (Kitty graphics, sixel, character art) within the animation budgets; Reduced Motion and Effects Off show the still image, and Off (the default) changes nothing.
- **Kitty shaders in `/appearance`** (Kitty 0.49 or newer; [#399](https://github.com/raiseCatError/notMyShell/issues/399)). In Kitty, `/appearance` › **Kitty shaders** offers the GPU effects Kitty itself ships — Default, Blaze, Lightning and Motion-blur cursor trails (one at a time), Northern Lights, Matrix, Fireworks, Pond Ripple, Spotlight, Focus highlight, Dim inactive windows, Tab change and CRT — read from the installed Kitty, with the settings each installed shader really declares (durations, colors, intensity, speed…) in safe ranges. Effects are off until you choose them; Enter toggles, ←→ adjusts, Shift+↑↓ orders, and **S** shows the exact files and the resulting `custom_shaders` list before anything is written. Your own `custom_shaders` are kept exactly as written and in order, with NMSh's pipeline after (or before) them; NMSh refuses instead of guessing when it cannot prove that (dynamic includes, Kitty launch overrides, unreadable pipelines, a shader of yours replacing a shipped one, shared textures, a second cursor trail, more than 16 shader groups). **R** removes NMSh's files and its one include line, restoring your file byte for byte. Reduced Motion, Decorative effects Off and a Portable cursor take NMSh's effects (or its trail) back out of Kitty's pipeline. Effects cover the whole Kitty window, not only NMSh; saving configuration is not proof of GPU output. In `/cursor`, Host native setup on Kitty opens this screen, and a Kitty trail shader means NMSh never draws a second trail.
- **Console for the browser preview** ([#466](https://github.com/raiseCatError/notMyShell/issues/466); [design](docs/design/document-workspace.md#console-runtime-diagnostics-of-the-browser-preview)). In the Chromium preview of a Markdown or HTML document, **`C`** lists what the page itself reported for the document now loaded: script exceptions, `console` errors, warnings and messages, failed loads and HTTP errors, Content Security Policy refusals and requests NMSh refused. It works like Problems — newest first, Tab filters by severity, typing searches, Shift+↑↓ marks, Del clears, Ctrl+C shows exactly what would be copied before copying — and Enter goes to the line in the file when that is certain (an HTML document unchanged since the page loaded); otherwise it says why. The Console only reads: it never turns scripts or the network on (with scripts off, only loading and policy messages appear), accepts no expressions, and ignores `/browser` pages and the Mermaid renderer. Entries stay in memory for the current load, bounded, with the preview's address, query values, tokens and likely secrets redacted before they are kept. The status line counts errors and warnings.
- **`/doctor` reports document rendering** ([#462](https://github.com/raiseCatError/notMyShell/issues/462)). A Documents section names the Chrome or Chromium the previews would use (its version once a browser surface has checked it this session, and whether it is running), the Mermaid it found (path, version, a warning for a major version other than the tested 12), the Mermaid setting and, when diagrams would not be drawn, why. Nothing is launched and the Mermaid bundle is not read, so it says what was found, not that drawing works.
Expand Down
2 changes: 1 addition & 1 deletion src/app/TerminalApp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9141,7 +9141,7 @@ export class TerminalApp {

private welcomeCapabilities() {
return {color: colorLevel() !== 'none', level: colorLevel(), home: homedir(), safeGlyphs: getCurrentGlyphMode() === 'safe', reducedMotion: this.promptConfiguration.presentation.reducedMotion || isReducedMotion(),
effectsOff: this.promptConfiguration.presentation.effectsOff, legacy: createWelcomeSnapshot(this.buildIdentity, this.shellCwd, this.shellId, this.welcomeUnderstanding()), accent: idleStops(this.promptConfiguration, 'theme')[0], chroma: idleStops(this.promptConfiguration, 'appearance')[0]};
effectsOff: this.promptConfiguration.presentation.effectsOff, hidden: this.terminalFocus === 'blurred', legacy: createWelcomeSnapshot(this.buildIdentity, this.shellCwd, this.shellId, this.welcomeUnderstanding()), accent: idleStops(this.promptConfiguration, 'theme')[0], chroma: idleStops(this.promptConfiguration, 'appearance')[0]};
}

private startProviderPanel(family: 'welcome' | 'suggestions' | 'history' | 'picker' | 'navigation' | 'editor'): void {
Expand Down
Loading
Loading