@wrongstack/tui 1.0.26 → 1.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  /** Known reducer action types — exact, compile-time checked allow-list. */
2
- export declare const ALLOWED_ACTION_TYPES: readonly ["addEntry", "archiveLoaded", "startArchiveLoad", "authBusy", "authCatalog", "authClose", "authConfirmEnd", "authConfirmStart", "authFormCancel", "authFormChange", "authFormStart", "authFilter", "authFlowDone", "authFlowLog", "authFlowStart", "authHint", "authMove", "authOpen", "authPromptChange", "authPromptEnd", "authPromptStart", "authProviders", "authView", "autonomyPickerClose", "autonomyPickerHint", "autonomyPickerMove", "autonomyPickerOpen", "brainBusy", "brainClose", "brainHint", "brainMove", "brainOpen", "brainPromptClear", "brainPromptSet", "brainRiskChange", "brainRowMove", "brainSetLog", "brainSettingsLoaded", "brainStatus", "brainView", "checkpointReceived", "clearConfirmClose", "clearConfirmOpen", "clearConfirmSetValue", "clearHistory", "clearInput", "clearInputHistory", "closeAllPanels", "collabBugFound", "collabEvalComplete", "sidebarScroll", "sidebarScrollSet", "sidebarScrollReset", "toggleSidebarFocus", "skillMentionResults", "skillPickerClose", "skillPickerHint", "skillPickerMove", "skillPickerOpen", "resourceMenuClose", "resourceMenuConfirm", "resourceMenuFilter", "resourceMenuHint", "resourceMenuMove", "resourceMenuOpen", "collabPlanEmitted", "collabSessionDone", "collabSubagentSpawned", "compactHistory", "confirmClearAll", "confirmClose", "confirmResolved", "confirmOpen", "continueConfirmClose", "continueConfirmOpen", "bugHuntContinueClose", "bugHuntContinueOpen", "bugHuntRunningClose", "bugHuntRunningOpen", "copiedNotice", "coordinatorEvent", "countdownEnded", "countdownTick", "debugStreamStats", "debugStreamStatsClear", "dequeueFirst", "designPickerClose", "designPickerMove", "designPickerOpen", "designPickerStack", "enhanceBusy", "enhanceClose", "enhanceOpen", "enhanceSet", "enqueue", "escConfirmClose", "escConfirmOpen", "fallbackOverlayClose", "fallbackOverlayMove", "fallbackOverlayOpen", "chatSearchClose", "chatSearchOpen", "chatSearchSetQuery", "chatSearchStep", "messageJump", "messageJumpClear", "inspectOverlayClose", "inspectOverlayOpen", "inspectOverlayScroll", "eternalStage", "exitConfirmClose", "exitConfirmOpen", "fKeyPickerClose", "fKeyPickerMove", "fKeyPickerOpen", "fleetBatch", "fleetBudgetExtended", "fleetBudgetWarning", "fleetConcurrency", "fleetCost", "fleetCtxPct", "fleetDelta", "fleetDone", "fleetMessage", "fleetRemove", "fleetSeed", "fleetSpawn", "fleetStart", "fleetTool", "fleetToolEnd", "fleetToolStart", "fleetUsage", "goalRunElapsed", "goalRunInit", "goalRunMonitorToggle", "goalRunPhaseUpdate", "goalRunReset", "goalRunRunningPhases", "goalRunTaskActive", "goalRunTaskAgent", "goalRunTaskCompleted", "goalSummary", "helpClose", "helpFilter", "helpHint", "helpMove", "helpOpen", "helpScrollDetail", "hint", "historyDown", "historyPush", "historyUp", "interrupt", "leaderCtxPct", "leaderIterEnd", "leaderIterStart", "leaderToolEnd", "leaderToolStart", "mcpPickerBusy", "mcpPickerClose", "mcpPickerHint", "mcpPickerMove", "mcpPickerOpen", "mcpPickerSetItems", "modePickerClose", "modePickerHint", "modePickerMove", "modePickerOpen", "modelPickerBack", "modelPickerClose", "modelPickerEffort", "modelPickerHint", "modelPickerMove", "modelPickerOpen", "modelPickerPickProvider", "modelPickerSearch", "pickerClose", "pickerMove", "pickerOpen", "pickerSetMatches", "pluginPickerBusy", "pluginPickerClose", "pluginPickerHint", "pluginPickerMove", "pluginPickerOpen", "pluginPickerSetItems", "projectPickerClose", "projectPickerFilter", "projectPickerHint", "projectPickerMove", "projectPickerOpen", "promptPickerCategory", "promptPickerClose", "promptPickerMove", "promptPickerOpen", "queueClear", "queueDelete", "queueToggleRefine", "refineCountdownClose", "refineCountdownOpen", "refineFailureClose", "refineFailureOpen", "replaceHistory", "autoProceedRelease", "bashModeEnter", "bashModeExit", "resumeLoadStart", "resumeLoadTick", "resumeStreamChunk", "resumeLoadAbort", "resetContextChip", "resetInterrupts", "resumePickerBusy", "resumePickerClose", "resumePickerError", "resumePickerHint", "resumePickerMove", "resumePickerOpen", "rewindOverlayClose", "rewindOverlayMove", "rewindOverlayOpen", "checkpointFork", "forkRequestDone", "sddBoardSnapshot", "sddBoardFocusNext", "sddBoardFocusPrev", "sendModePickerClose", "sendModePickerMove", "sendModePickerOpen", "sessionResumeConfirmClear", "sessionResumeConfirmSet", "sessionRewound", "sessionsPanelBusy", "sessionsPanelMove", "sessionsPanelSet", "setBuffer", "setFleetChat", "setHistoryScrolled", "setInputHistory", "setViewportRows", "settingsClose", "settingsFieldMove", "settingsFieldSet", "settingsFilterSet", "settingsHint", "settingsOpen", "settingsThinkingEditCancel", "settingsThinkingEditChange", "settingsThinkingEditCommit", "settingsThinkingEditStart", "settingsWrongProxyUrlEditCancel", "settingsWrongProxyUrlEditChange", "settingsWrongProxyUrlEditCommit", "settingsWrongProxyUrlEditStart", "settingsValueChange", "settingsValueSet", "shadowClose", "shadowHint", "shadowOpen", "shadowUpdate", "shellCommandWarningClose", "shellCommandWarningOpen", "slashConfirmClose", "slashConfirmOpen", "slashPickerClose", "slashPickerMove", "slashPickerOpen", "status", "statuslineChipExpire", "statuslineChipShow", "statuslineClose", "statuslineFieldMove", "statuslineFieldSet", "statuslineFilter", "statuslineHint", "statuslineMoveLine", "statuslineMoveOrder", "statuslineOpen", "statuslineResetLayout", "statuslineSetDensity", "statuslineSetLine", "statuslineToggle", "statuslineToggleLine", "statuslineVisibleChipsSync", "subagentModelsClose", "subagentModelsHint", "subagentModelsMove", "subagentModelsOpen", "subagentModelsUpdate", "steerConsume", "steerStart", "streamDelta", "streamReset", "themePickerClose", "themePickerHint", "themePickerMove", "themePickerOpen", "toggleAgentsMonitor", "toggleAuditPanel", "toggleContextPanel", "toggleConnectionsPanel", "toggleCoordinatorMonitor", "toggleCronMonitor", "toggleGoalKanbanPanel", "toggleGoalPanel", "toggleHelp", "toggleKanbanPanel", "toggleMonitor", "togglePlanPanel", "toggleProcessList", "toggleQueuePanel", "toggleSddBoardMonitor", "toggleSessionsPanel", "toggleTodosMonitor", "toggleWorktreeMonitor", "toolEnded", "toolStarted", "toolStreamAppend", "toolStreamClear", "toolResultViewSet", "topicCheckBusy", "toolsPickerBusy", "toolsPickerClose", "toolsPickerFilter", "toolsPickerHint", "toolsPickerMove", "toolsPickerOpen", "toolsPickerSetItems", "toolsPickerToggle", "worktreeRemove", "worktreeUpsert"];
2
+ export declare const ALLOWED_ACTION_TYPES: readonly ["addEntry", "archiveLoaded", "startArchiveLoad", "authBusy", "authCatalog", "authClose", "authConfirmEnd", "authConfirmStart", "authFormCancel", "authFormChange", "authFormStart", "authFilter", "authFlowDone", "authFlowLog", "authFlowStart", "authHint", "authMove", "authOpen", "authPromptChange", "authPromptEnd", "authPromptStart", "authProviders", "authView", "autonomyPickerClose", "autonomyPickerHint", "autonomyPickerMove", "autonomyPickerOpen", "brainBusy", "brainClose", "brainHint", "brainMove", "brainOpen", "brainPromptClear", "brainPromptSet", "brainRiskChange", "brainRowMove", "brainSetLog", "brainSettingsLoaded", "brainStatus", "brainView", "checkpointReceived", "clearConfirmClose", "clearConfirmOpen", "clearConfirmSetValue", "clearHistory", "clearInput", "clearInputHistory", "closeAllPanels", "collabBugFound", "collabEvalComplete", "sidebarScroll", "sidebarScrollSet", "sidebarScrollReset", "toggleSidebarFocus", "skillMentionResults", "skillPickerClose", "skillPickerHint", "skillPickerMove", "skillPickerOpen", "resourceMenuClose", "resourceMenuConfirm", "resourceMenuFilter", "resourceMenuHint", "resourceMenuMove", "resourceMenuOpen", "collabPlanEmitted", "collabSessionDone", "collabSubagentSpawned", "compactHistory", "confirmClearAll", "confirmClose", "confirmResolved", "confirmOpen", "continueConfirmClose", "continueConfirmOpen", "bugHuntContinueClose", "bugHuntContinueOpen", "bugHuntRunningClose", "bugHuntRunningOpen", "copiedNotice", "coordinatorEvent", "countdownEnded", "countdownTick", "debugStreamStats", "debugStreamStatsClear", "dequeueFirst", "designPickerClose", "designPickerMove", "designPickerOpen", "designPickerStack", "enhanceBusy", "enhanceClose", "enhanceOpen", "enhanceSet", "enqueue", "escConfirmClose", "escConfirmOpen", "fallbackOverlayClose", "fallbackOverlayMove", "fallbackOverlayOpen", "chatSearchClose", "chatSearchOpen", "chatSearchSetQuery", "chatSearchStep", "messageJump", "messageJumpClear", "inspectOverlayClose", "inspectOverlayOpen", "inspectOverlayScroll", "eternalStage", "exitConfirmClose", "exitConfirmOpen", "fKeyPickerClose", "fKeyPickerMove", "fKeyPickerOpen", "fleetBatch", "fleetBudgetExtended", "fleetBudgetWarning", "fleetConcurrency", "fleetCost", "fleetCtxPct", "fleetDelta", "fleetDone", "fleetMessage", "fleetRemove", "fleetSeed", "fleetSpawn", "fleetStart", "fleetTool", "fleetToolEnd", "fleetToolStart", "fleetUsage", "goalRunElapsed", "goalRunInit", "goalRunMonitorToggle", "goalRunPhaseUpdate", "goalRunReset", "goalRunRunningPhases", "goalRunTaskActive", "goalRunTaskAgent", "goalRunTaskCompleted", "goalSummary", "helpClose", "helpFilter", "helpHint", "helpMove", "helpOpen", "helpScrollDetail", "hint", "historyDown", "historyPush", "historyUp", "interrupt", "leaderCtxPct", "leaderIterEnd", "leaderIterStart", "leaderToolEnd", "leaderToolStart", "mcpPickerBusy", "mcpPickerClose", "mcpPickerHint", "mcpPickerMove", "mcpPickerOpen", "mcpPickerSetItems", "modePickerClose", "modePickerHint", "modePickerMove", "modePickerOpen", "modelPickerBack", "modelPickerClose", "modelPickerEffort", "modelPickerHint", "modelPickerMove", "modelPickerOpen", "modelPickerPickProvider", "modelPickerSearch", "pickerClose", "pickerMove", "pickerOpen", "pickerSetMatches", "pluginPickerBusy", "pluginPickerClose", "pluginPickerHint", "pluginPickerMove", "pluginPickerOpen", "pluginPickerSetItems", "projectPickerClose", "projectPickerFilter", "projectPickerHint", "projectPickerMove", "projectPickerOpen", "promptPickerCategory", "promptPickerClose", "promptPickerMove", "promptPickerOpen", "queueClear", "queueDelete", "queueToggleRefine", "refineCountdownClose", "refineCountdownOpen", "refineFailureClose", "refineFailureOpen", "replaceHistory", "autoProceedRelease", "bashModeEnter", "bashModeExit", "resumeLoadStart", "resumeLoadTick", "resumeStreamChunk", "resumeLoadAbort", "resetContextChip", "resetInterrupts", "resumePickerBusy", "resumePickerClose", "resumePickerError", "resumePickerHint", "resumePickerMove", "resumePickerOpen", "rewindOverlayClose", "rewindOverlayMove", "rewindOverlayOpen", "checkpointFork", "forkRequestDone", "sddBoardSnapshot", "sddBoardFocusNext", "sddBoardFocusPrev", "sendModePickerClose", "sendModePickerMove", "sendModePickerOpen", "sessionResumeConfirmClear", "sessionResumeConfirmSet", "sessionRewound", "sessionsPanelBusy", "sessionsPanelMove", "sessionsPanelSet", "setBuffer", "setFleetChat", "setHistoryScrolled", "setInputHistory", "setViewportRows", "settingsClose", "settingsFieldMove", "settingsFieldSet", "settingsFilterSet", "settingsHint", "settingsOpen", "settingsThinkingEditCancel", "settingsThinkingEditChange", "settingsThinkingEditCommit", "settingsThinkingEditStart", "settingsWrongProxyUrlEditCancel", "settingsWrongProxyUrlEditChange", "settingsWrongProxyUrlEditCommit", "settingsWrongProxyUrlEditStart", "settingsValueChange", "settingsValueSet", "shadowClose", "shadowHint", "shadowOpen", "shadowUpdate", "shellCommandWarningClose", "shellCommandWarningOpen", "slashConfirmClose", "slashConfirmOpen", "slashPickerClose", "slashPickerMove", "slashPickerOpen", "status", "statuslineChipExpire", "statuslineChipShow", "statuslineClose", "statuslineFieldMove", "statuslineFieldSet", "statuslineFilter", "statuslineHint", "statuslineMoveLine", "statuslineMoveOrder", "statuslineOpen", "statuslineResetLayout", "statuslineSetDensity", "statuslineSetLine", "statuslineToggle", "statuslineToggleLine", "statuslineVisibleChipsSync", "subagentModelsClose", "subagentModelsHint", "subagentModelsMove", "subagentModelsOpen", "subagentModelsUpdate", "steerConsume", "steerStart", "streamDelta", "streamReset", "themePickerClose", "themePickerHint", "themePickerFilter", "themePickerFilterMode", "themePickerPreview", "themePickerMove", "themePickerOpen", "themePickerUndo", "themePickerSwapPrevious", "toggleAgentsMonitor", "toggleAuditPanel", "toggleContextPanel", "toggleConnectionsPanel", "toggleCoordinatorMonitor", "toggleCronMonitor", "toggleGoalKanbanPanel", "toggleGoalPanel", "toggleHelp", "toggleKanbanPanel", "toggleMonitor", "togglePlanPanel", "toggleProcessList", "toggleQueuePanel", "toggleSddBoardMonitor", "toggleSessionsPanel", "toggleTodosMonitor", "toggleWorktreeMonitor", "toolEnded", "toolStarted", "toolStreamAppend", "toolStreamClear", "toolResultViewSet", "topicCheckBusy", "toolsPickerBusy", "toolsPickerClose", "toolsPickerFilter", "toolsPickerHint", "toolsPickerMove", "toolsPickerOpen", "toolsPickerSetItems", "toolsPickerToggle", "worktreeRemove", "worktreeUpsert"];
3
3
  export type AllowedActionType = (typeof ALLOWED_ACTION_TYPES)[number];
4
4
  //# sourceMappingURL=action-types.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type { Action } from '../app-action-type.js';
2
- export declare const composerActionTypes: readonly ["brainPromptSet", "brainPromptClear", "pickerOpen", "pickerClose", "pickerSetMatches", "pickerMove", "toolStarted", "toolEnded", "toolStreamAppend", "toolStreamClear", "enqueue", "dequeueFirst", "queueClear", "queueDelete", "queueToggleRefine", "bashModeEnter", "bashModeExit", "slashPickerOpen", "slashPickerClose", "slashPickerMove", "historyPush", "historyUp", "historyDown", "setInputHistory", "clearInputHistory", "modelPickerOpen", "modelPickerClose", "modelPickerMove", "modelPickerPickProvider", "modelPickerBack", "modelPickerSearch", "modelPickerEffort", "modelPickerHint", "autonomyPickerOpen", "autonomyPickerClose", "autonomyPickerMove", "autonomyPickerHint", "themePickerOpen", "themePickerClose", "themePickerMove", "themePickerHint", "modePickerOpen", "modePickerClose", "modePickerMove", "modePickerHint", "skillPickerOpen", "skillMentionResults", "skillPickerClose", "skillPickerMove", "skillPickerHint", "resourceMenuOpen", "resourceMenuClose", "resourceMenuMove", "resourceMenuHint", "resourceMenuFilter", "resourceMenuConfirm", "designPickerOpen", "designPickerClose", "designPickerMove", "designPickerStack", "promptPickerOpen", "promptPickerClose", "promptPickerMove", "promptPickerCategory", "resumePickerOpen", "resumePickerClose", "resumePickerMove", "resumePickerBusy", "resumePickerHint", "resumePickerError", "replaceHistory", "resumeLoadStart", "resumeLoadTick", "resumeStreamChunk", "resumeLoadAbort"];
2
+ export declare const composerActionTypes: readonly ["brainPromptSet", "brainPromptClear", "pickerOpen", "pickerClose", "pickerSetMatches", "pickerMove", "toolStarted", "toolEnded", "toolStreamAppend", "toolStreamClear", "enqueue", "dequeueFirst", "queueClear", "queueDelete", "queueToggleRefine", "bashModeEnter", "bashModeExit", "slashPickerOpen", "slashPickerClose", "slashPickerMove", "historyPush", "historyUp", "historyDown", "setInputHistory", "clearInputHistory", "modelPickerOpen", "modelPickerClose", "modelPickerMove", "modelPickerPickProvider", "modelPickerBack", "modelPickerSearch", "modelPickerEffort", "modelPickerHint", "autonomyPickerOpen", "autonomyPickerClose", "autonomyPickerMove", "autonomyPickerHint", "themePickerOpen", "themePickerClose", "themePickerMove", "themePickerHint", "themePickerFilter", "themePickerFilterMode", "themePickerPreview", "themePickerUndo", "themePickerSwapPrevious", "modePickerOpen", "modePickerClose", "modePickerMove", "modePickerHint", "skillPickerOpen", "skillMentionResults", "skillPickerClose", "skillPickerMove", "skillPickerHint", "resourceMenuOpen", "resourceMenuClose", "resourceMenuMove", "resourceMenuHint", "resourceMenuFilter", "resourceMenuConfirm", "designPickerOpen", "designPickerClose", "designPickerMove", "designPickerStack", "promptPickerOpen", "promptPickerClose", "promptPickerMove", "promptPickerCategory", "resumePickerOpen", "resumePickerClose", "resumePickerMove", "resumePickerBusy", "resumePickerHint", "resumePickerError", "replaceHistory", "resumeLoadStart", "resumeLoadTick", "resumeStreamChunk", "resumeLoadAbort"];
3
3
  export type ComposerAction = Extract<Action, {
4
4
  type: (typeof composerActionTypes)[number];
5
5
  }>;
@@ -38,6 +38,7 @@ export type SettingsPickerPatch = Partial<{
38
38
  featureMemory: boolean;
39
39
  featureSkills: boolean;
40
40
  featureModelsRegistry: boolean;
41
+ featureToolCoach: boolean;
41
42
  tokenSavingTier: TokenSavingTierTui;
42
43
  allowOutsideProjectRoot: boolean;
43
44
  contextAutoCompact: boolean;
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Pure selection/windowing logic behind the `/theme` picker.
3
+ *
4
+ * The picker used to window a flat list of 64 rows. Three additions made that
5
+ * arithmetic wrong on its own:
6
+ *
7
+ * - **Filtering.** Type-to-filter narrows the list, so the focused index is
8
+ * an index into the FILTERED list, not the full catalogue.
9
+ * - **Family grouping.** Headers are real rows now, and they differ in cost
10
+ * from option rows — a uniform `rowSpan` can no longer describe the list.
11
+ * - **The row budget.** `maxRows` is a hard contract the existing tests
12
+ * assert; adding header rows must not silently overflow it.
13
+ *
14
+ * So the picker now operates on a *row model* (headers + options interleaved)
15
+ * and windows over rows rather than over option indices. Everything here is a
16
+ * pure function of its arguments — no React, no Ink, no `useTerminalSize` — so
17
+ * the budget and windowing rules are unit-testable without rendering a frame.
18
+ */
19
+ import type { ThemePickerOption } from './theme-types.js';
20
+ /** One rendered line: either a family header or a selectable preset row. */
21
+ export type ThemeRow = {
22
+ kind: 'header';
23
+ family: string;
24
+ } | {
25
+ kind: 'option';
26
+ option: ThemePickerOption;
27
+ index: number;
28
+ };
29
+ /**
30
+ * Narrow presets by a free-text query, matching name, id, and description.
31
+ *
32
+ * An empty or whitespace-only query returns the input unchanged so the common
33
+ * "filter cleared" case is free and the caller keeps a stable array identity.
34
+ * Matching is case-insensitive and substring-based; every whitespace-separated
35
+ * term must match somewhere (AND), so `tokyo storm` narrows to the Storm
36
+ * variant rather than the union of both words.
37
+ */
38
+ export declare function filterThemeOptions(options: readonly ThemePickerOption[], query: string): readonly ThemePickerOption[];
39
+ /**
40
+ * Interleave family headers with option rows.
41
+ *
42
+ * A header is emitted before the first row of each family, so contiguous
43
+ * same-family presets share one header. `index` is each option's position in
44
+ * the *filtered* list, which is what `selected` refers to.
45
+ */
46
+ export declare function buildThemeRows(options: readonly ThemePickerOption[]): ThemeRow[];
47
+ export interface ThemeWindow {
48
+ /** Rows to render, header rows included. */
49
+ rows: ThemeRow[];
50
+ hasAbove: boolean;
51
+ hasBelow: boolean;
52
+ }
53
+ /**
54
+ * Window the row model so it fits `budget` terminal rows.
55
+ *
56
+ * `budget` is the number of rows available for headers + options combined
57
+ * (the caller subtracts its own chrome). Two rules the flat list did not need:
58
+ *
59
+ * - A family header is pulled in whenever its first option is in the window,
60
+ * even if that header sits above the window's nominal start — otherwise the
61
+ * top visible option would appear to belong to the family above it.
62
+ * - Expansion alternates downward first, then upward, so a long family does
63
+ * not push every visible row below the focused one off the screen.
64
+ *
65
+ * The focused row is always included, even when `budget` is smaller than the
66
+ * two rows a focused option plus its header need — the caller's own
67
+ * lower-bound guarantee wins over a strict budget.
68
+ */
69
+ export declare function windowThemeRows(rows: readonly ThemeRow[], selected: number, budget: number): ThemeWindow;
70
+ //# sourceMappingURL=theme-picker-rows.d.ts.map
@@ -1,4 +1,16 @@
1
1
  import type { ThemePickerOption } from '../theme-types.js';
2
- /** Picker rows in canonical THEME_PRESET_IDS order. */
2
+ /**
3
+ * Picker rows in canonical {@link THEME_PRESET_IDS} order.
4
+ *
5
+ * Name/description/family are NOT written here: they come from
6
+ * `THEME_PRESET_META` in `@wrongstack/core/types`, the single table the CLI
7
+ * `/theme` command reads too. This file used to hand-write a 64-row literal
8
+ * that duplicated the CLI's own table, so a reworded or renamed preset could
9
+ * drift between the two pickers with nothing failing to compile — only the
10
+ * id set was ever linked.
11
+ *
12
+ * Deriving from the shared record also means the family grouping the picker
13
+ * renders and the CLI's list are guaranteed to describe the same presets.
14
+ */
3
15
  export declare const THEME_OPTIONS: readonly ThemePickerOption[];
4
16
  //# sourceMappingURL=options.d.ts.map
@@ -15,7 +15,7 @@ export declare const rosePinePresets: {
15
15
  user: "#f6c177";
16
16
  assistant: "#c4a7e7";
17
17
  tool: "#9ccfd8";
18
- success: "#31748f";
18
+ success: "#3e8fb0";
19
19
  warn: "#f6c177";
20
20
  error: "#eb6f92";
21
21
  borderDefault: "#524f67";
@@ -6,6 +6,12 @@ export interface ThemePickerOption {
6
6
  id: ThemeName;
7
7
  name: string;
8
8
  description: string;
9
+ /**
10
+ * Palette family (Catppuccin, Tokyo Night, Gruvbox, …) used to group
11
+ * related rows in the picker. Sourced from `THEME_PRESET_META` in
12
+ * `@wrongstack/core/types`, the same table the CLI reads.
13
+ */
14
+ family: string;
9
15
  }
10
16
  export interface Theme {
11
17
  textPrimary: string;
@@ -67,5 +67,16 @@ export declare function softColorWithTheme(color: string | undefined, currentThe
67
67
  * without bloating the theme with extra named tokens.
68
68
  */
69
69
  export declare function mixHexColors(colorA: string, colorB: string, weight: number): string;
70
+ /** WCAG 2.x relative luminance of a hex colour, or `null` if unparseable. */
71
+ export declare function relativeLuminance(hex: string): number | null;
72
+ /**
73
+ * WCAG 2.x contrast ratio between two hex colours, rounded to one decimal.
74
+ *
75
+ * Returns 1 (the ratio of a colour with itself) when either colour cannot be
76
+ * parsed, so an unparseable token reads as "no measurable separation" rather
77
+ * than as a passing score. Callers that need to distinguish "bad colour" from
78
+ * "bad contrast" should use {@link relativeLuminance} directly.
79
+ */
80
+ export declare function contrastRatio(foreground: string, background: string): number;
70
81
  export declare function detectSupportsBackground(env?: NodeJS.ProcessEnv, isTTY?: boolean): boolean;
71
82
  //# sourceMappingURL=theme-utils.d.ts.map
@@ -1,4 +1,4 @@
1
- export declare function useControllerKeyPipeline({ sessionGenerationRef, switchQueueSession, props, state, dispatch, environment, statusbar, panelControllers, authPanelController, brainCtl, lastEnterAtRef, inputGateRef, submitRef, promptUsageRef, setDraft, acceptSlashPickerSelection, changeBrainRisk, handleModelPicked, handleShadowStart, handleShadowStop, subagentModelsCtl, statuslineHiddenForPicker, onPickerEnter, onThemePickerEnter, setPromptFavorite, stateRef, exitRequestedRef, agent, liveDirector, onExit, exit, activeCtrlRef, clearPendingConfirms, getEternalEngine, getParallelEngine, eternalLoopRunningRef, parallelLoopRunningRef, switchAutonomy, getSddRun, confirmExitRef, historyScrollRef, onHistoryScrollActivity, enhanceCancelledRef, enhanceAbortRef, enhanceOriginalRef, enhanceEnabledRef, lastEscAtRef, dismissedEscAtRef, streamingTextRef, streamSegmentsRef, pendingDeltaRef, flushTimerRef, activeRunGenerationRef, activeRunSettledRef, assistantCommittedThisRunRef, chimeRef, openProjectPicker, loadLiveSessions, openStatuslinePicker, statuslineHiddenItems, draftRef, clearDraft, mouseMode, nativeMouse, termRows, stdout, sidebarLayout, statusBarWrapRef, belowStatusBarRef, statusBarClickMapRef, inspectOverlayHeaderRef, openModelPicker, nextStepsAutoSubmitTimerRef, nextStepsAutoSubmitSuggestionRef, nextStepsAutoSubmitLabel, setNextStepsAutoSubmitCountdown, setNextStepsAutoSubmitLabel, cancelNextStepsCountdown, pasteClipboardText, pasteClipboardImage, onHistoryCopy, pasteAccumRef, pasteFlushTimerRef, commitPaste, builderRef, tokenPreviewsRef, runBlocksRef, liveModel, liveProvider, activeMaxContext, yoloLive, autonomyLive, liveModeLabel, setMouseMode, setNativeMouse, setLiveModel, setLiveProvider, setActiveMaxContext, setYoloLive, setAutonomyLive, setLiveModeLabel, setLiveToolCount, autoSubmitStreakRef, autoSubmitCapWarnedRef, autoSubmitLoopGuardRef, runEternalLoopRef, runParallelLoopRef, midRunSendPickerRef, openPromptPicker, refreshGoalSummary, setMemoryContextMonitor, runSteerSequence, setEnhanceStartedAt, setEnhanceDurationMs, setRefineProviderId, setRefineModel, bugHuntLoop, }: {
1
+ export declare function useControllerKeyPipeline({ sessionGenerationRef, switchQueueSession, props, state, dispatch, environment, statusbar, panelControllers, authPanelController, brainCtl, lastEnterAtRef, inputGateRef, submitRef, promptUsageRef, setDraft, acceptSlashPickerSelection, changeBrainRisk, handleModelPicked, handleShadowStart, handleShadowStop, subagentModelsCtl, statuslineHiddenForPicker, onPickerEnter, onThemePickerEnter, onThemePickerUndo, setPromptFavorite, stateRef, exitRequestedRef, agent, liveDirector, onExit, exit, activeCtrlRef, clearPendingConfirms, getEternalEngine, getParallelEngine, eternalLoopRunningRef, parallelLoopRunningRef, switchAutonomy, getSddRun, confirmExitRef, historyScrollRef, onHistoryScrollActivity, enhanceCancelledRef, enhanceAbortRef, enhanceOriginalRef, enhanceEnabledRef, lastEscAtRef, dismissedEscAtRef, streamingTextRef, streamSegmentsRef, pendingDeltaRef, flushTimerRef, activeRunGenerationRef, activeRunSettledRef, assistantCommittedThisRunRef, chimeRef, openProjectPicker, loadLiveSessions, openStatuslinePicker, statuslineHiddenItems, draftRef, clearDraft, mouseMode, nativeMouse, termRows, stdout, sidebarLayout, statusBarWrapRef, belowStatusBarRef, statusBarClickMapRef, inspectOverlayHeaderRef, openModelPicker, nextStepsAutoSubmitTimerRef, nextStepsAutoSubmitSuggestionRef, nextStepsAutoSubmitLabel, setNextStepsAutoSubmitCountdown, setNextStepsAutoSubmitLabel, cancelNextStepsCountdown, pasteClipboardText, pasteClipboardImage, onHistoryCopy, pasteAccumRef, pasteFlushTimerRef, commitPaste, builderRef, tokenPreviewsRef, runBlocksRef, liveModel, liveProvider, activeMaxContext, yoloLive, autonomyLive, liveModeLabel, setMouseMode, setNativeMouse, setLiveModel, setLiveProvider, setActiveMaxContext, setYoloLive, setAutonomyLive, setLiveModeLabel, setLiveToolCount, autoSubmitStreakRef, autoSubmitCapWarnedRef, autoSubmitLoopGuardRef, runEternalLoopRef, runParallelLoopRef, midRunSendPickerRef, openPromptPicker, refreshGoalSummary, setMemoryContextMonitor, runSteerSequence, setEnhanceStartedAt, setEnhanceDurationMs, setRefineProviderId, setRefineModel, bugHuntLoop, }: {
2
2
  sessionGenerationRef: React.RefObject<number>;
3
3
  /** Move the input queue to a resumed session. */
4
4
  switchQueueSession?: ((sessionId: string) => void) | undefined;
@@ -102,6 +102,7 @@ export declare function useControllerKeyPipeline({ sessionGenerationRef, switchQ
102
102
  statuslineHiddenForPicker: () => import('@wrongstack/core/statusline').StatuslineItem[];
103
103
  onPickerEnter: () => Promise<void>;
104
104
  onThemePickerEnter: () => void;
105
+ onThemePickerUndo: () => void;
105
106
  setPromptFavorite: (slug: string, favorite: boolean) => Promise<void>;
106
107
  stateRef: React.RefObject<import('./app-state.js').State>;
107
108
  exitRequestedRef: React.RefObject<boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/tui",
3
- "version": "1.0.26",
3
+ "version": "1.0.27",
4
4
  "license": "MIT",
5
5
  "description": "WrongStack terminal UI: Ink-based interactive renderer with history, pickers, and slash menus.",
6
6
  "repository": {
@@ -26,12 +26,12 @@
26
26
  "!dist/**/*.map"
27
27
  ],
28
28
  "dependencies": {
29
- "@wrongstack/core": "1.0.26",
30
- "@wrongstack/kanban": "1.0.26",
31
- "@wrongstack/runtime": "1.0.26",
32
- "@wrongstack/sage": "1.0.26",
33
- "@wrongstack/sdd": "1.0.26",
34
- "@wrongstack/tools": "1.0.26",
29
+ "@wrongstack/core": "1.0.27",
30
+ "@wrongstack/kanban": "1.0.27",
31
+ "@wrongstack/runtime": "1.0.27",
32
+ "@wrongstack/sage": "1.0.27",
33
+ "@wrongstack/sdd": "1.0.27",
34
+ "@wrongstack/tools": "1.0.27",
35
35
  "string-width": "8.2.2",
36
36
  "wrap-ansi": "^10.0.1"
37
37
  },