ytui-ui-guardian
星标0
分支0
更新时间2026年6月10日 22:33
Validate core UX invariants across NORMAL, SEARCH, ZEN, and help modal
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
Validate core UX invariants across NORMAL, SEARCH, ZEN, and help modal
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Build terminal UIs with OpenTUI. Covers the core API, native audio, keymaps, React and Solid bindings, components, layout, keyboard input, plugins, and testing.
Enforce provider-capability architecture and provider manager usage
Validate dual-world agentic system consistency between .opencode/ and .claude/
Enforce folder conventions, boundaries, and no-barrel architecture rules
Ensure important code changes include matching docs and runtime definition updates
Build plugins that comply with manifest, namespace, and registry contracts
| name | ytui-ui-guardian |
| description | Validate core UX invariants across NORMAL, SEARCH, ZEN, and help modal |
| metadata | {"scope":"ui","priority":"medium"} |
OK:, ERR:, INFO: without duplicate prefixes.@opentui/react + react-redux state flow, not imperative render-loop syncing.Enter NORMAL play, Ctrl+P SEARCH play, Space in NORMAL/ZEN pause/resume, Space in SEARCH appends to query).[n]gg → first/nth track, [n]G → last/nth track, [n]dd → remove n tracks from cursor; count digits accumulate and reset on j/k or unrecognized key.Ctrl+A in SEARCH enqueues selected result without mode switch; bare a must still append to the search query.:queue clear empties the queue and resets cursor to 0.ytui-strict, ytui-best-effort, system) with correct warning/disable behavior.vol: reflects live mpv volume synced via the 750 ms telemetry tick and does not display a static initial value during active playback.isLoading is true.null now-playing after a failed play is expected behavior, not a regression.◆ in results-list and queue-list; marker absent when playback.nowPlaying is null; queue-list additionally requires the track at playingIndex to match playback.nowPlaying.id (isQueueTrackPlaying) so a stale playingIndex never shows a marker; ◆ clears after 3 consecutive unavailable sync ticks (~2.25 s).themePickerPreviousId and closes; Enter confirms without re-dispatching.Modal container (src/components/modal/modal.tsx); direct inline-chrome overlays are a regression.strategy: "centered" with content-fit sizing (width min 48 / max 82, height = content + chrome, capped to the screen) and ThemePicker uses strategy: "centered" with heightFraction=0.6.settings.statusTimeoutMs via the status-timeout listener middleware (src/state/status-timeout/status-timeout.ts); component-level status timers are a regression.commandActive block runs before the settings key handler in app-root.tsx).Ctrl+C quits through the full cleanup path (requestQuit → destroy); opentui exitOnCtrlC stays disabled and SIGINT/SIGTERM route to the same destroy.:normal, :search, :zen, :library, :logs, :settings.