@wrongstack/tui 1.0.19 → 1.0.26

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.
Files changed (159) hide show
  1. package/dist/app-action-type.d.ts +85 -1
  2. package/dist/app-key-handler.d.ts +1 -1
  3. package/dist/app-panel-state.d.ts +561 -0
  4. package/dist/app-props.d.ts +21 -1
  5. package/dist/app-reducer.d.ts +1 -1
  6. package/dist/app-state-core-types.d.ts +13 -0
  7. package/dist/app-state.d.ts +8 -534
  8. package/dist/app-status-region.d.ts +2 -1
  9. package/dist/app-ui-state.d.ts +2 -0
  10. package/dist/app-view-contract.d.ts +1 -1
  11. package/dist/app-view-pickers.d.ts +2 -1
  12. package/dist/app-view-state.d.ts +2 -0
  13. package/dist/app.d.ts +2 -2
  14. package/dist/auth-panel-model.d.ts +1 -0
  15. package/dist/background-strip-model.d.ts +65 -0
  16. package/dist/brain-panel-model.d.ts +7 -7
  17. package/dist/chat-search-slash.d.ts +15 -0
  18. package/dist/clipboard.d.ts +14 -1
  19. package/dist/components/agent-monitor-presentation.d.ts +61 -0
  20. package/dist/components/agents-monitor.d.ts +3 -49
  21. package/dist/components/audit-panel.d.ts +2 -1
  22. package/dist/components/auth-panel.d.ts +3 -1
  23. package/dist/components/background-strip.d.ts +20 -0
  24. package/dist/components/brain-panel.d.ts +3 -1
  25. package/dist/components/chat-search-bar.d.ts +19 -0
  26. package/dist/components/checkpoint-timeline.d.ts +7 -3
  27. package/dist/components/confirm-prompt.d.ts +6 -7
  28. package/dist/components/connections-panel.d.ts +2 -1
  29. package/dist/components/context-panel-sections.d.ts +53 -0
  30. package/dist/components/context-panel-types.d.ts +66 -0
  31. package/dist/components/context-panel.d.ts +2 -66
  32. package/dist/components/exit-confirm-panel.d.ts +2 -0
  33. package/dist/components/file-picker.d.ts +2 -1
  34. package/dist/components/help-panel.d.ts +5 -3
  35. package/dist/components/history/code-block.d.ts +2 -136
  36. package/dist/components/history/diff-model.d.ts +143 -0
  37. package/dist/components/history/scroll-controller-types.d.ts +11 -0
  38. package/dist/components/history/scrollbar-rail.d.ts +14 -2
  39. package/dist/components/history/use-history-controller.d.ts +5 -0
  40. package/dist/components/history/utils.d.ts +3 -9
  41. package/dist/components/history/visual-tool-output.d.ts +8 -0
  42. package/dist/components/input.d.ts +1 -1
  43. package/dist/components/kanban-panel-presentation.d.ts +114 -0
  44. package/dist/components/kanban-panel.d.ts +2 -47
  45. package/dist/components/mailbox-panel.d.ts +2 -1
  46. package/dist/components/mcp-picker.d.ts +3 -1
  47. package/dist/components/mode-picker.d.ts +3 -1
  48. package/dist/components/model-picker.d.ts +1 -1
  49. package/dist/components/monitor-shell.d.ts +19 -4
  50. package/dist/components/phase-monitor.d.ts +3 -1
  51. package/dist/components/plugin-picker.d.ts +3 -1
  52. package/dist/components/powerline-rail.d.ts +6 -3
  53. package/dist/components/prompt-picker-model.d.ts +16 -0
  54. package/dist/components/prompt-picker.d.ts +2 -16
  55. package/dist/components/provider-colors.d.ts +2 -12
  56. package/dist/components/refine-countdown-panel.d.ts +4 -3
  57. package/dist/components/resource-menu-model.d.ts +3 -0
  58. package/dist/components/resource-menu.d.ts +3 -3
  59. package/dist/components/scrollable-history.d.ts +1 -1
  60. package/dist/components/send-mode-model.d.ts +44 -0
  61. package/dist/components/send-mode-picker.d.ts +2 -43
  62. package/dist/components/settings-picker-row-list.d.ts +2 -1
  63. package/dist/components/settings-picker.d.ts +3 -1
  64. package/dist/components/shadow-panel.d.ts +2 -1
  65. package/dist/components/sidebar-content.d.ts +1 -47
  66. package/dist/components/sidebar-ipc-icons.d.ts +9 -0
  67. package/dist/components/sidebar-panel-agents.d.ts +10 -0
  68. package/dist/components/sidebar-panel-connections.d.ts +11 -0
  69. package/dist/components/sidebar-panel-coordinator.d.ts +11 -0
  70. package/dist/components/sidebar-panel-fleet.d.ts +16 -0
  71. package/dist/components/sidebar-panel-project.d.ts +12 -0
  72. package/dist/components/sidebar-panel-worktree.d.ts +10 -0
  73. package/dist/components/sidebar-panel-wrong-proxy.d.ts +25 -0
  74. package/dist/components/sidebar-panels-workspace.d.ts +10 -79
  75. package/dist/components/sidebar-presentation.d.ts +98 -0
  76. package/dist/components/sidebar.d.ts +3 -1
  77. package/dist/components/skill-picker.d.ts +2 -1
  78. package/dist/components/slash-confirm-panel.d.ts +2 -0
  79. package/dist/components/slash-menu.d.ts +2 -1
  80. package/dist/components/slash-modal-frame.d.ts +9 -0
  81. package/dist/components/status-bar-rails-async.d.ts +2 -2
  82. package/dist/components/status-bar-types.d.ts +6 -0
  83. package/dist/components/status-bar.d.ts +1 -1
  84. package/dist/components/statusline-picker-model.d.ts +45 -0
  85. package/dist/components/statusline-picker.d.ts +2 -41
  86. package/dist/components/tools-picker.d.ts +3 -1
  87. package/dist/components/user-input-prompt.d.ts +4 -2
  88. package/dist/connection-actions.d.ts +20 -0
  89. package/dist/connections-health.d.ts +8 -1
  90. package/dist/esc-close-panels.d.ts +0 -1
  91. package/dist/f-key-panels.d.ts +4 -0
  92. package/dist/hooks/fork-at-checkpoint.d.ts +25 -0
  93. package/dist/hooks/use-active-theme.d.ts +2 -1
  94. package/dist/hooks/use-app-execution-pipeline.d.ts +1 -1
  95. package/dist/hooks/use-app-panels-state.d.ts +1 -1
  96. package/dist/hooks/use-app-picker-keys.d.ts +5 -2
  97. package/dist/hooks/use-chip-staleness-guard.d.ts +6 -0
  98. package/dist/hooks/use-core-tui-commands.d.ts +7 -2
  99. package/dist/hooks/use-file-search.d.ts +10 -0
  100. package/dist/hooks/use-fleet-generation-gate.d.ts +4 -3
  101. package/dist/hooks/use-panel-controllers.d.ts +1 -1
  102. package/dist/hooks/use-picker-keys-brain-statusline.d.ts +4 -0
  103. package/dist/hooks/use-picker-keys-types.d.ts +1 -0
  104. package/dist/hooks/use-provider-warmup.d.ts +9 -0
  105. package/dist/hooks/use-queue-manager.d.ts +11 -1
  106. package/dist/hooks/use-session-rewind.d.ts +8 -1
  107. package/dist/hooks/use-shadow-panel.d.ts +1 -1
  108. package/dist/hooks/use-sidebar-panel-data.d.ts +7 -5
  109. package/dist/hooks/use-skill-mention-picker.d.ts +6 -0
  110. package/dist/hooks/use-slash-picker.d.ts +1 -1
  111. package/dist/hooks/use-stable-key-handler.d.ts +8 -1
  112. package/dist/hooks/use-status-sync-interval.d.ts +3 -2
  113. package/dist/hooks/use-statusbar-view-model.d.ts +2 -2
  114. package/dist/hooks/use-tui-environment-state.d.ts +3 -0
  115. package/dist/hooks/use-tui-event-bridge.d.ts +12 -0
  116. package/dist/hooks/use-windowed-picker.d.ts +3 -4
  117. package/dist/index.js +29522 -25452
  118. package/dist/ink.d.ts +5 -5
  119. package/dist/input-graphemes.d.ts +4 -0
  120. package/dist/input-key-router.d.ts +2 -0
  121. package/dist/input-tokens.d.ts +10 -0
  122. package/dist/input-validation/action-types.d.ts +1 -1
  123. package/dist/input-validation/limits.d.ts +2 -0
  124. package/dist/input-validation-coordination.d.ts +9 -0
  125. package/dist/input-validation-display.d.ts +9 -0
  126. package/dist/input-validation.d.ts +0 -52
  127. package/dist/kanban-arguments.d.ts +48 -0
  128. package/dist/kanban-command-types.d.ts +53 -0
  129. package/dist/kanban-reports.d.ts +42 -0
  130. package/dist/kanban-slash.d.ts +4 -125
  131. package/dist/key-routes/key-route-background-strip.d.ts +14 -0
  132. package/dist/key-routes/key-route-chat-search.d.ts +24 -0
  133. package/dist/key-routes/key-route-overlay.d.ts +2 -2
  134. package/dist/layout-store.d.ts +2 -2
  135. package/dist/memory-slash-render.d.ts +1 -1
  136. package/dist/message-checkpoint.d.ts +19 -0
  137. package/dist/motion.d.ts +16 -0
  138. package/dist/on-panel-open.d.ts +1 -1
  139. package/dist/picker-text-input.d.ts +4 -0
  140. package/dist/reducers/chat-search.d.ts +11 -0
  141. package/dist/reducers/composer-action-types.d.ts +6 -0
  142. package/dist/reducers/composer-pickers.d.ts +4 -0
  143. package/dist/reducers/composer.d.ts +1 -5
  144. package/dist/reducers/message-jump.d.ts +16 -0
  145. package/dist/reducers/panel-pickers.d.ts +1 -1
  146. package/dist/reducers/workspace-panels.d.ts +1 -1
  147. package/dist/resume-session-tree.d.ts +8 -0
  148. package/dist/rewind-prompt.d.ts +24 -0
  149. package/dist/run-tui-options.d.ts +24 -5
  150. package/dist/scroll-anchor.d.ts +6 -0
  151. package/dist/statusline-palette.d.ts +4 -0
  152. package/dist/submit-controller.d.ts +1 -1
  153. package/dist/submit-slash-command.d.ts +67 -0
  154. package/dist/theme-utils.d.ts +1 -1
  155. package/dist/transcript-search.d.ts +38 -0
  156. package/dist/ui-contracts.d.ts +2 -1
  157. package/dist/use-app-controller.d.ts +157 -0
  158. package/dist/use-controller-key-pipeline.d.ts +217 -0
  159. package/package.json +7 -7
@@ -1,5 +1,4 @@
1
1
  import type { Context } from '@wrongstack/core/agent';
2
- import { type KanbanBoard, type KanbanLifecycleStage, type KanbanTask } from '@wrongstack/kanban';
3
2
  import type React from 'react';
4
3
  interface KanbanPanelProps {
5
4
  projectRoot: string;
@@ -23,50 +22,6 @@ interface KanbanPanelProps {
23
22
  */
24
23
  initialBoardId?: string | undefined;
25
24
  }
26
- export declare function KanbanPanel({ projectRoot, sessionId, sessionContext, onClose, terminalWidth, initialBoardId, }: KanbanPanelProps): React.ReactElement;
27
- /**
28
- * Pure, deterministic layout math for the kanban board's column view.
29
- *
30
- * Reserves horizontal space for the chrome that surrounds the columns
31
- * (board list panel + task detail panel + gaps + outer border), then
32
- * picks the largest column count that still keeps every column at least
33
- * `minColumnWidth` cols wide, and finally shrinks each column's width to
34
- * match the available budget (never below `minColumnWidth`).
35
- *
36
- * Exported so Sprint 2's regression tests can pin the math down without
37
- * mounting Ink.
38
- */
39
- export declare function computeBoardColumnLayout(totalColumns: number, terminalWidth: number): {
40
- visibleColumnCount: number;
41
- columnWidth: number;
42
- overflow: number;
43
- };
44
- /**
45
- * The next stage a managed card may advance to, or null when the card is
46
- * already at the terminal `done` stage (or the current stage is unknown).
47
- * The domain only allows one-step forward transitions; callers must keep
48
- * this in lockstep with `KANBAN_AGENT_STAGES` in `@wrongstack/kanban`.
49
- *
50
- * Exported so unit tests can pin the stage order without rendering the panel.
51
- */
52
- export declare function nextManagedStage(current: KanbanLifecycleStage): KanbanLifecycleStage | null;
53
- /**
54
- * Look up the lifecycle stage that owns the given column under a managed
55
- * Kanban Agent board. Returns null when the board is not managed, or when
56
- * the column is not mapped to any of the five canonical stages (treated
57
- * as a legacy/custom column by the renderer).
58
- */
59
- export declare function stageForColumn(board: Pick<KanbanBoard, 'lifecycle'>, columnId: string): KanbanLifecycleStage | null;
60
- /**
61
- * Pure success-criteria summary string. Returns null when there are no
62
- * checks. Format: "Criteria N/M passed".
63
- */
64
- export declare function summarizeSuccessCriteria(task: KanbanTask): string | null;
65
- /**
66
- * Pure goal-metrics rollup string. Returns null when there are no metrics.
67
- * Format: "Metrics 2 met · 1 missed · 0 waived · 0 pending" (zero counts
68
- * are skipped to keep the line short).
69
- */
70
- export declare function summarizeGoalMetrics(task: KanbanTask): string | null;
71
- export {};
25
+ export declare function KanbanPanel({ projectRoot, sessionId, sessionContext, onClose, terminalWidth: widthOverride, initialBoardId, }: KanbanPanelProps): React.ReactElement;
26
+ export { computeBoardColumnLayout, nextManagedStage, stageForColumn, summarizeGoalMetrics, summarizeSuccessCriteria, } from './kanban-panel-presentation.js';
72
27
  //# sourceMappingURL=kanban-panel.d.ts.map
@@ -36,7 +36,8 @@ interface MailboxPanelProps {
36
36
  unreadCount: number;
37
37
  /** Whether the panel is visible. When false, returns null. */
38
38
  open: boolean;
39
+ maxRows?: number | undefined;
39
40
  }
40
- export declare function MailboxPanel({ messages, agents, unreadCount, open, }: MailboxPanelProps): React.ReactElement | null;
41
+ export declare function MailboxPanel({ messages, agents, unreadCount, open, maxRows, }: MailboxPanelProps): React.ReactElement | null;
41
42
  export {};
42
43
  //# sourceMappingURL=mailbox-panel.d.ts.map
@@ -9,11 +9,13 @@ export interface McpPickerItem {
9
9
  lazy?: boolean | undefined;
10
10
  }
11
11
  interface McpPickerProps {
12
+ maxRows?: number | undefined;
13
+ columns?: number | undefined;
12
14
  items: McpPickerItem[];
13
15
  selected: number;
14
16
  busy?: boolean | undefined;
15
17
  hint?: string | undefined;
16
18
  }
17
- export declare function McpPicker({ items, selected, busy, hint, }: McpPickerProps): React.ReactElement;
19
+ export declare function McpPicker({ items, selected, busy, hint, maxRows, columns, }: McpPickerProps): React.ReactElement;
18
20
  export {};
19
21
  //# sourceMappingURL=mcp-picker.d.ts.map
@@ -8,11 +8,13 @@ export interface ModeOption {
8
8
  isActive: boolean;
9
9
  }
10
10
  interface ModePickerProps {
11
+ maxRows?: number | undefined;
12
+ columns?: number | undefined;
11
13
  modes: ModeOption[];
12
14
  selected: number;
13
15
  hint?: string | undefined;
14
16
  }
15
17
  export declare function toModeOptions(modes: Mode[], activeId: string | null): ModeOption[];
16
- export declare function ModePicker({ modes, selected, hint }: ModePickerProps): React.ReactElement;
18
+ export declare function ModePicker({ modes, selected, hint, maxRows, columns, }: ModePickerProps): React.ReactElement;
17
19
  export {};
18
20
  //# sourceMappingURL=mode-picker.d.ts.map
@@ -65,6 +65,6 @@ interface ModelPickerProps {
65
65
  *
66
66
  * Driven entirely by props — App owns cursor state, key events, and search.
67
67
  */
68
- export declare function ModelPicker({ step, providerOptions, filteredOptions, selected, pickedProviderId, searchQuery, hint, titleLabel, columns, maxRows, effortOptions, effortChoice, }: ModelPickerProps): React.ReactElement;
68
+ export declare function ModelPicker({ step, providerOptions, filteredOptions, selected, pickedProviderId, searchQuery, hint, titleLabel, columns: columnsOverride, maxRows, effortOptions, effortChoice, }: ModelPickerProps): React.ReactElement;
69
69
  export {};
70
70
  //# sourceMappingURL=model-picker.d.ts.map
@@ -1,6 +1,14 @@
1
1
  import type { ReactNode } from 'react';
2
+ import { useInput } from '../ink.js';
3
+ export declare const PanelInputProvider: import("react").Provider<boolean>;
4
+ /** A foreground prompt temporarily owns all keyboard input over a monitor. */
5
+ export declare function usePanelInput(handler: Parameters<typeof useInput>[0]): void;
6
+ export declare const MonitorViewportProvider: import("react").Provider<{
7
+ columns: number;
8
+ rows: number;
9
+ } | null>;
2
10
  export declare const PanelShortcutsProvider: import("react").Provider<boolean>;
3
- /** True when panel letter shortcuts may fire (empty composer draft). */
11
+ /** True when this surface may handle panel letter shortcuts. */
4
12
  export declare function usePanelShortcutsEnabled(): boolean;
5
13
  interface MonitorSize {
6
14
  columns: number;
@@ -22,7 +30,11 @@ interface MonitorShellProps {
22
30
  accent: string;
23
31
  icon: string;
24
32
  title: string;
25
- /** Quiet context beside the title, hidden by callers on narrow terminals. */
33
+ /**
34
+ * Quiet context beside the title. Shown only when title, kicker and the
35
+ * right-hand content all fit on the header row; callers pass it
36
+ * unconditionally.
37
+ */
26
38
  kicker?: string | undefined;
27
39
  right?: ReactNode | undefined;
28
40
  footer?: ReactNode | undefined;
@@ -30,17 +42,20 @@ interface MonitorShellProps {
30
42
  grow?: boolean | undefined;
31
43
  /** Clamp the shell's total height (including borders) to prevent overflow. */
32
44
  maxHeight?: number | undefined;
45
+ /** Pickers already own wheel navigation; disable shell wheel scrolling there. */
46
+ wheelScroll?: boolean | undefined;
33
47
  }
34
48
  /** Shared chrome for F-key monitors: one visual hierarchy and one geometry contract. */
35
- export declare function MonitorShell({ accent, icon, title, kicker, right, footer, children, grow, maxHeight, }: MonitorShellProps): import("react").JSX.Element;
49
+ export declare function MonitorShell({ accent, icon, title, kicker, right, footer, children, grow, maxHeight, wheelScroll, }: MonitorShellProps): import("react").JSX.Element;
36
50
  export declare function SectionLabel({ children, color, }: {
37
51
  children: ReactNode;
38
52
  color?: string | undefined;
39
53
  }): import("react").JSX.Element;
40
- export declare function KeyCap({ keyName, label, color, }: {
54
+ export declare function KeyCap({ keyName, label, color, keepTogether, }: {
41
55
  keyName: string;
42
56
  label: string;
43
57
  color?: string | undefined;
58
+ keepTogether?: boolean | undefined;
44
59
  }): import("react").JSX.Element;
45
60
  export declare function EmptyPanelState({ icon, title, detail, accent, }: {
46
61
  icon: string;
@@ -1,5 +1,7 @@
1
1
  import type React from 'react';
2
2
  interface PhaseMonitorProps {
3
+ /** Human-readable Goal run title. */
4
+ title?: string | undefined;
3
5
  /** Per-phase state from the App reducer. */
4
6
  phases: Record<string, {
5
7
  name: string;
@@ -29,6 +31,6 @@ interface PhaseMonitorProps {
29
31
  * · icon · name · status · (task progress) · started/elapsed
30
32
  * Bottom: keyboard hint
31
33
  */
32
- export declare function PhaseMonitor({ phases, runningPhaseIds, elapsedMs, nowTick, }: PhaseMonitorProps): React.ReactElement;
34
+ export declare function PhaseMonitor({ title, phases, runningPhaseIds, elapsedMs, nowTick, }: PhaseMonitorProps): React.ReactElement;
33
35
  export {};
34
36
  //# sourceMappingURL=phase-monitor.d.ts.map
@@ -13,11 +13,13 @@ export interface PluginPickerItem {
13
13
  lockable?: boolean | undefined;
14
14
  }
15
15
  interface PluginPickerProps {
16
+ maxRows?: number | undefined;
17
+ columns?: number | undefined;
16
18
  items: PluginPickerItem[];
17
19
  selected: number;
18
20
  busy?: boolean | undefined;
19
21
  hint?: string | undefined;
20
22
  }
21
- export declare function PluginPicker({ items, selected, busy, hint, }: PluginPickerProps): React.ReactElement;
23
+ export declare function PluginPicker({ items, selected, busy, hint, maxRows, columns, }: PluginPickerProps): React.ReactElement;
22
24
  export {};
23
25
  //# sourceMappingURL=plugin-picker.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import type React from 'react';
2
+ import { type Theme } from '../theme.js';
2
3
  export declare function visibleNodeText(node: React.ReactNode): string;
3
4
  /**
4
5
  * Columns between adjacent chip payloads: one transition glyph plus one
@@ -72,14 +73,16 @@ interface PowerlineRailProps {
72
73
  rightAnchor?: React.ReactElement | null | undefined;
73
74
  /** Keep the segmented silhouette but emit no foreground/background colors. */
74
75
  monochrome?: boolean | undefined;
76
+ /** Explicit candidate palette for the theme picker; never changes the active theme. */
77
+ palette?: Theme | undefined;
75
78
  }
76
79
  /**
77
- * Theme-aware, Powerline-style status capsules. Chip payloads keep their
78
- * semantic foreground colors while low-contrast surface tones provide the
80
+ * Theme-aware, Powerline-style status capsules. Chip payloads share a readable
81
+ * foreground while five theme-derived surface tones provide the
79
82
  * connected silhouette. The renderer and layout fitter share the exact cap,
80
83
  * transition, padding and anchor costs, keeping overflow and pointer spans
81
84
  * aligned with the cells on screen.
82
85
  */
83
- export declare function PowerlineRail({ segments, budget, rightAnchor, monochrome, }: PowerlineRailProps): React.ReactElement;
86
+ export declare function PowerlineRail({ segments, budget, rightAnchor, monochrome, palette, }: PowerlineRailProps): React.ReactElement;
84
87
  export {};
85
88
  //# sourceMappingURL=powerline-rail.d.ts.map
@@ -0,0 +1,16 @@
1
+ export interface PromptPickEntry {
2
+ slug: string;
3
+ title: string;
4
+ description: string;
5
+ category: string;
6
+ source: string;
7
+ content: string;
8
+ favorite: boolean;
9
+ }
10
+ /**
11
+ * Apply the picker's category filter. catIndex 0 (= "all") returns everything;
12
+ * "★ favorites" filters by the favorite flag; "🕘 recent" orders by the
13
+ * recently-used slug list (most-recent first).
14
+ */
15
+ export declare function filterPromptPicker(all: PromptPickEntry[], categories: string[], catIndex: number, recentSlugs?: string[]): PromptPickEntry[];
16
+ //# sourceMappingURL=prompt-picker-model.d.ts.map
@@ -1,19 +1,6 @@
1
1
  import type React from 'react';
2
- export interface PromptPickEntry {
3
- slug: string;
4
- title: string;
5
- description: string;
6
- category: string;
7
- source: string;
8
- content: string;
9
- favorite: boolean;
10
- }
11
- /**
12
- * Apply the picker's category filter. catIndex 0 (= "all") returns everything;
13
- * "★ favorites" filters by the favorite flag; "🕘 recent" orders by the
14
- * recently-used slug list (most-recent first).
15
- */
16
- export declare function filterPromptPicker(all: PromptPickEntry[], categories: string[], catIndex: number, recentSlugs?: string[]): PromptPickEntry[];
2
+ import type { PromptPickEntry } from './prompt-picker-model.js';
3
+ export * from './prompt-picker-model.js';
17
4
  interface PromptPickerProps {
18
5
  /** Already-filtered entries for the active category. */
19
6
  entries: PromptPickEntry[];
@@ -30,5 +17,4 @@ interface PromptPickerProps {
30
17
  * any `{{variables}}` left in place for the user to fill inline).
31
18
  */
32
19
  export declare function PromptPicker({ entries, selected, category, total, columns, maxRows, }: PromptPickerProps): React.ReactElement;
33
- export {};
34
20
  //# sourceMappingURL=prompt-picker.d.ts.map
@@ -17,18 +17,8 @@ export declare function badgeForKind(kind: 'oauth' | 'api_key' | 'session_token'
17
17
  } | undefined;
18
18
  /** Brand colors for known OAuth strategies; unknown plugin strategies use the fallback. */
19
19
  export declare const OAUTH_KIND_COLORS: Record<string, string>;
20
- /** Semantic UI colors used across auth / model panels. */
21
- export declare const UI_COLORS: {
22
- readonly focused: '#89b4fa';
23
- readonly active: '#a6e3a1';
24
- readonly inactive: '#585b70';
25
- readonly warning: '#f9e2af';
26
- readonly error: '#f38ba8';
27
- readonly hint: '#f9e2af';
28
- readonly border: '#89b4fa';
29
- readonly title: '#89b4fa';
30
- readonly selectedModel: '#89b4fa';
31
- readonly dimmed: string | undefined;
20
+ export declare const UI_COLORS: Record<"active" | "border" | "error" | "focused" | "hint" | "inactive" | "selectedModel" | "title" | "warning", string> & {
21
+ dimmed: string | undefined;
32
22
  };
33
23
  /**
34
24
  * Statusline item category colors — imported by status-bar.tsx and
@@ -16,9 +16,10 @@ interface RefineCountdownPanelProps {
16
16
  * Pre-refine grace countdown ("about to refine — last chance to bail").
17
17
  *
18
18
  * Shown for the window between submit and the refiner's first LLM call:
19
- * Enter starts refining immediately, any other key sends the message
20
- * unchanged (skip), Esc cancels back to the composer, and expiry
21
- * proceeds into the normal refine flow. Mirrors the
19
+ * Enter starts refining immediately, Backspace/Delete or Esc cancels back
20
+ * to the composer (the submitted text is restored as the draft), any other
21
+ * key sends the message unchanged (skip), and expiry proceeds into the
22
+ * normal refine flow. Mirrors the
22
23
  * WebUI/SimpleUI RefinePanel's 'countdown' face.
23
24
  */
24
25
  export declare function RefineCountdownPanel({ original, seconds, onDecision, providerId, model, }: RefineCountdownPanelProps): React.ReactElement;
@@ -0,0 +1,3 @@
1
+ import type { ResourceMenuItem, ResourceMenuSnapshot } from '../ui-contracts.js';
2
+ export declare function filterResourceMenuItems(snapshot: ResourceMenuSnapshot, filter: string): ResourceMenuItem[];
3
+ //# sourceMappingURL=resource-menu-model.d.ts.map
@@ -1,5 +1,7 @@
1
1
  import type React from 'react';
2
- import type { ResourceMenuItem, ResourceMenuSnapshot } from '../ui-contracts.js';
2
+ import type { ResourceMenuSnapshot } from '../ui-contracts.js';
3
+ import { filterResourceMenuItems } from './resource-menu-model.js';
4
+ export { filterResourceMenuItems };
3
5
  interface ResourceMenuProps {
4
6
  snapshot: ResourceMenuSnapshot;
5
7
  selected: number;
@@ -12,6 +14,4 @@ interface ResourceMenuProps {
12
14
  }
13
15
  /** Reusable two-pane browser for operational state exposed by slash commands. */
14
16
  export declare function ResourceMenu({ snapshot, selected, hint, confirming, filter, filtering, columns, maxRows, }: ResourceMenuProps): React.ReactElement;
15
- export declare function filterResourceMenuItems(snapshot: ResourceMenuSnapshot, filter: string): ResourceMenuItem[];
16
- export {};
17
17
  //# sourceMappingURL=resource-menu.d.ts.map
@@ -9,6 +9,6 @@ import type { ScrollableHistoryProps } from './history/scroll-controller-types.j
9
9
  /**
10
10
  * Bounded history viewport with stable-anchor virtual scrolling.
11
11
  */
12
- export declare const ScrollableHistory: React.MemoExoticComponent<({ entries, toolStream, streamingText, viewportRows, controllerRef, onScrollInfo, maxWidth, setSuggestions, autonomyMode, nextStepsAutoSubmitLabel, nextStepsAutoSubmitDeadlineMs, multiDiffSummaryThreshold, todos, showModelReasoning, showSageMemoryInject, layoutStore, copiedEntryId, onRequestOlderEntries, toolResultViewMode, toolResultViewOverrides, onToolResultViewChange, }: ScrollableHistoryProps) => React.ReactElement>;
12
+ export declare const ScrollableHistory: React.MemoExoticComponent<({ entries, toolStream, streamingText, viewportRows, controllerRef, onScrollInfo, maxWidth, setSuggestions, autonomyMode, nextStepsAutoSubmitLabel, nextStepsAutoSubmitDeadlineMs, multiDiffSummaryThreshold, todos, showModelReasoning, showSageMemoryInject, layoutStore, copiedEntryId, markedEntryId, onRequestOlderEntries, toolResultViewMode, toolResultViewOverrides, onToolResultViewChange, }: ScrollableHistoryProps) => React.ReactElement>;
13
13
  export type { HistoryEntry };
14
14
  //# sourceMappingURL=scrollable-history.d.ts.map
@@ -0,0 +1,44 @@
1
+ /**
2
+ * How a plain message typed mid-run should be delivered to the agent.
3
+ * Mirrors the WebUI's `QueueMode` vocabulary (ChatInput.tsx).
4
+ */
5
+ export type SendMode = 'queue' | 'btw' | 'steer';
6
+ interface SendModeOption {
7
+ mode: SendMode;
8
+ /** Quick-select key (lower-case). */
9
+ key: string;
10
+ label: string;
11
+ description: string;
12
+ color: string;
13
+ }
14
+ /**
15
+ * The three delivery modes, Queue first so it is the default highlight and
16
+ * the safest no-op-to-in-flight-work choice. Order is load-bearing: the
17
+ * reducer indexes selection into this array.
18
+ */
19
+ export declare const SEND_MODE_OPTIONS: SendModeOption[];
20
+ /**
21
+ * Clamp-free wrap-around index move. `delta` is +1 (down) / -1 (up).
22
+ * Pure — unit-tested independently of Ink.
23
+ */
24
+ export declare function nextSendModeIndex(selected: number, delta: number, len: number): number;
25
+ /** A minimal structural view of the key event — keeps the helper pure/testable. */
26
+ export interface SendModeKey {
27
+ upArrow?: boolean | undefined;
28
+ downArrow?: boolean | undefined;
29
+ return?: boolean | undefined;
30
+ escape?: boolean | undefined;
31
+ }
32
+ /**
33
+ * Map a keypress to a picker decision. Returns:
34
+ * - a `SendMode` when the user committed a choice (quick-key or Enter),
35
+ * - `'cancel'` on Esc,
36
+ * - `null` when the key only moves the selection / is irrelevant
37
+ * (the caller handles `↑/↓` movement separately).
38
+ *
39
+ * Pure: no Ink, no React. The single source of truth for key semantics.
40
+ */
41
+ export declare function sendModeFromKey(input: string, key: SendModeKey, selected: number): SendMode | 'cancel' | null;
42
+ export declare function formatSendModeMessagePreview(text: string, maxChars?: number): string;
43
+ export {};
44
+ //# sourceMappingURL=send-mode-model.d.ts.map
@@ -1,46 +1,6 @@
1
1
  import type React from 'react';
2
- /**
3
- * How a plain message typed mid-run should be delivered to the agent.
4
- * Mirrors the WebUI's `QueueMode` vocabulary (ChatInput.tsx).
5
- */
6
- export type SendMode = 'queue' | 'btw' | 'steer';
7
- interface SendModeOption {
8
- mode: SendMode;
9
- /** Quick-select key (lower-case). */
10
- key: string;
11
- label: string;
12
- description: string;
13
- color: string;
14
- }
15
- /**
16
- * The three delivery modes, Queue first so it is the default highlight and
17
- * the safest no-op-to-in-flight-work choice. Order is load-bearing: the
18
- * reducer indexes selection into this array.
19
- */
20
- export declare const SEND_MODE_OPTIONS: SendModeOption[];
21
- /**
22
- * Clamp-free wrap-around index move. `delta` is +1 (down) / -1 (up).
23
- * Pure — unit-tested independently of Ink.
24
- */
25
- export declare function nextSendModeIndex(selected: number, delta: number, len: number): number;
26
- /** A minimal structural view of the key event — keeps the helper pure/testable. */
27
- export interface SendModeKey {
28
- upArrow?: boolean | undefined;
29
- downArrow?: boolean | undefined;
30
- return?: boolean | undefined;
31
- escape?: boolean | undefined;
32
- }
33
- /**
34
- * Map a keypress to a picker decision. Returns:
35
- * - a `SendMode` when the user committed a choice (quick-key or Enter),
36
- * - `'cancel'` on Esc,
37
- * - `null` when the key only moves the selection / is irrelevant
38
- * (the caller handles `↑/↓` movement separately).
39
- *
40
- * Pure: no Ink, no React. The single source of truth for key semantics.
41
- */
42
- export declare function sendModeFromKey(input: string, key: SendModeKey, selected: number): SendMode | 'cancel' | null;
43
- export declare function formatSendModeMessagePreview(text: string, maxChars?: number): string;
2
+ import { type SendMode } from './send-mode-model.js';
3
+ export * from './send-mode-model.js';
44
4
  interface SendModePickerProps {
45
5
  selected: number;
46
6
  /** The message being routed, shown so the modal question has context. */
@@ -61,5 +21,4 @@ interface SendModePickerProps {
61
21
  * - Esc → cancel (caller restores the draft to the composer)
62
22
  */
63
23
  export declare function SendModePicker({ selected, messagePreview, onMove, onSelect, }: SendModePickerProps): React.ReactElement;
64
- export {};
65
24
  //# sourceMappingURL=send-mode-picker.d.ts.map
@@ -7,6 +7,7 @@ export interface SettingsPickerRowData {
7
7
  detail?: string | undefined;
8
8
  }
9
9
  interface SettingsPickerRowListProps {
10
+ compactWidth?: number | undefined;
10
11
  rows: readonly SettingsPickerRowData[];
11
12
  field: number;
12
13
  fieldRowIndex: readonly number[];
@@ -20,6 +21,6 @@ interface SettingsPickerRowListProps {
20
21
  }
21
22
  export declare function deriveSettingsSectionFieldStarts(fieldRowIndex: readonly number[]): readonly number[];
22
23
  export declare function buildVisibleSectionHeaders(rows: readonly SettingsPickerRowData[], fieldRowIndex: readonly number[], windowStart: number, windowEnd: number): Set<number>;
23
- export declare function SettingsPickerRowList({ rows, field, fieldRowIndex, filterActive, rankedResults, highlightSegments, windowStart, windowEnd, filterWindowStart, filterWindowEnd, }: SettingsPickerRowListProps): React.ReactElement;
24
+ export declare function SettingsPickerRowList({ compactWidth, rows, field, fieldRowIndex, filterActive, rankedResults, highlightSegments, windowStart, windowEnd, filterWindowStart, filterWindowEnd, }: SettingsPickerRowListProps): React.ReactElement;
24
25
  export {};
25
26
  //# sourceMappingURL=settings-picker-row-list.d.ts.map
@@ -127,6 +127,8 @@ export interface SettingsPickerProps {
127
127
  * for multi-line input buffers instead of assuming a constant.
128
128
  */
129
129
  inputHeight?: number | undefined;
130
+ maxRows?: number | undefined;
131
+ columns?: number | undefined;
130
132
  hint?: string | undefined;
131
133
  /** @internal Test seam for asserting the production row/header layout contract. */
132
134
  onLayoutComputed?: ((layout: {
@@ -134,5 +136,5 @@ export interface SettingsPickerProps {
134
136
  fieldRowIndex: readonly number[];
135
137
  }) => void) | undefined;
136
138
  }
137
- export declare function SettingsPicker({ field, filter, mode, delayMs, titleAnimation, yolo, fleetChat, chime, confirmExit, nextPrediction, featureMcp, featurePlugins, featureMemory, featureSkills, featureModelsRegistry, tokenSavingTier, allowOutsideProjectRoot, maxIterations, autoProceedMaxIterations, enhanceDelayMs, enhanceEnabled, enhanceLanguage, preRefineSeconds, indexOnStart, multiDiffSummaryThreshold, thinkingWord, thinkingWordEditing, thinkingWordDraft, wrongProxyUrlEditing, wrongProxyUrlDraft, reasoningMode, reasoningEffort, reasoningEffortLevels, reasoningPreserve, cacheTtl, contextAutoCompact, contextStrategy, contextMode, maxConcurrent, logLevel, auditLevel, debugStream, statuslineMode, configScope, profileConfigPath, animationStyle, breakerEnabled, breakerAutoKillResetMs, showModelReasoning, toolResultViewMode, showAgentSwarmPanel, showSidebar, showSageMemoryInject, sageMemoryInjectThreshold, nextStepsTool, readSymbols, panelPositions, wrongProxyEnabled, wrongProxyUrl, inputHeight, hint, onLayoutComputed, }: SettingsPickerProps): React.ReactElement;
139
+ export declare function SettingsPicker({ field, filter, mode, delayMs, titleAnimation, yolo, fleetChat, chime, confirmExit, nextPrediction, featureMcp, featurePlugins, featureMemory, featureSkills, featureModelsRegistry, tokenSavingTier, allowOutsideProjectRoot, maxIterations, autoProceedMaxIterations, enhanceDelayMs, enhanceEnabled, enhanceLanguage, preRefineSeconds, indexOnStart, multiDiffSummaryThreshold, thinkingWord, thinkingWordEditing, thinkingWordDraft, wrongProxyUrlEditing, wrongProxyUrlDraft, reasoningMode, reasoningEffort, reasoningEffortLevels, reasoningPreserve, cacheTtl, contextAutoCompact, contextStrategy, contextMode, maxConcurrent, logLevel, auditLevel, debugStream, statuslineMode, configScope, profileConfigPath, animationStyle, breakerEnabled, breakerAutoKillResetMs, showModelReasoning, toolResultViewMode, showAgentSwarmPanel, showSidebar, showSageMemoryInject, sageMemoryInjectThreshold, nextStepsTool, readSymbols, panelPositions, wrongProxyEnabled, wrongProxyUrl, inputHeight, maxRows, columns, hint, onLayoutComputed, }: SettingsPickerProps): React.ReactElement;
138
140
  //# sourceMappingURL=settings-picker.d.ts.map
@@ -6,9 +6,10 @@ export interface ShadowState {
6
6
  intervalMs: number;
7
7
  }
8
8
  interface ShadowPanelProps {
9
+ maxRows?: number | undefined;
9
10
  shadow: ShadowState;
10
11
  hint?: string | undefined;
11
12
  }
12
- export declare function ShadowPanel({ shadow, hint }: ShadowPanelProps): React.ReactElement;
13
+ export declare function ShadowPanel({ shadow, hint, maxRows }: ShadowPanelProps): React.ReactElement;
13
14
  export {};
14
15
  //# sourceMappingURL=shadow-panel.d.ts.map
@@ -80,52 +80,6 @@ interface SidebarContentProps {
80
80
  */
81
81
  effectiveSidebarRoutes?: ReadonlySet<PanelId> | undefined;
82
82
  }
83
- /**
84
- * Normalized "is this session row the current session?" predicate used by
85
- * both the `SidebarContent` SESSIONS card (live + resume rows) and the
86
- * `SessionsPanelSidebar` (sidebar twin). The runtime `currentSessionId`
87
- * is the authoritative source — when defined, the row whose id matches
88
- * is the current row. When undefined (e.g. before the host registers a
89
- * session), the per-row `isCurrent` flag is the fallback (carried over
90
- * from the resume-picker domain for the case where the picker marks
91
- * the current session as non-resumable but the host hasn't published
92
- * the runtime id yet). A row without an id can never be the current
93
- * row, regardless of what its fallback flag says. The two SESSIONS
94
- * rows used to disagree on which key to read (live used strict id
95
- * compare, resume used `rs.isCurrent` first); this helper is the
96
- * single source of truth.
97
- */
98
- export declare function isCurrentSession(rowId: string | undefined, currentSessionId: string | undefined, fallbackIsCurrent?: boolean | undefined): boolean;
99
- /**
100
- * (Replaced by `SidebarSectionHeader` in `./sidebar-panel-frame.tsx`.)
101
- * Kept here as a doc-comment so anyone hunting for "the sidebar's section
102
- * header" lands on the right file. The local `SectionHeader` symbol was
103
- * promoted to the shared `sidebar-panel-frame.tsx` so routed panels and
104
- * persistent content cards use the same capsuled-pill component.
105
- */
106
- /**
107
- * The `Card` component now lives in `./sidebar-card.tsx` as the shared
108
- * raised-surface iskelet used by both the persistent cards (this file) and
109
- * the routed F-key panel twins (`sidebar-panel-frame.tsx` +
110
- * `sidebar-panels-{workspace,task}.tsx`). Imported at the top of this file
111
- * for the `MODEL CORE`, `PROMPT CACHE`, `SYSTEM`, `AGENT SWARM`, `MISSIONS`,
112
- * and `SESSIONS` cards — the migration keeps the persistent
113
- * call sites identical because the shared component preserves the same
114
- * `innerWidth` / `marginBottom` / `accent` / `children` contract.
115
- */
116
- interface ContextSegment {
117
- label: string;
118
- shortLabel: string;
119
- tokens: number;
120
- color: string;
121
- glyph: string;
122
- }
123
- export declare function contextSpectrum(breakdown: ContextBreakdown | undefined, contextWindow: {
124
- used: number;
125
- max: number;
126
- } | undefined, width: number): Array<ContextSegment & {
127
- cells: number;
128
- }>;
129
83
  export declare function SidebarContent({ contextWindow, contextBreakdown, cacheStats, entries, fleetCounts, provider, model, themeName, width, scrollOffset, focused, todos, showSwarmSection, liveSessions, resumeSessions, currentSessionId, processMemory, cpuPercent, cpuHistory, rssHistory, heapHistory, totalMem, effectiveSidebarRoutes, }: SidebarContentProps): React.ReactElement;
130
- export {};
84
+ export { contextSpectrum, isCurrentSession } from './sidebar-presentation.js';
131
85
  //# sourceMappingURL=sidebar-content.d.ts.map
@@ -0,0 +1,9 @@
1
+ import type { ConnectionHealthStatus } from '../connections-health.js';
2
+ import type { SidebarConnection } from '../hooks/use-sidebar-panel-data.js';
3
+ export declare function ipcStatusColor(status: ConnectionHealthStatus | undefined): string;
4
+ /** Stable service order, icon-only, using the same health readings as Connections. */
5
+ export declare function SidebarIpcIcons({ connections, width, }: {
6
+ connections: readonly SidebarConnection[];
7
+ width: number;
8
+ }): React.ReactElement;
9
+ //# sourceMappingURL=sidebar-ipc-icons.d.ts.map
@@ -0,0 +1,10 @@
1
+ import type React from 'react';
2
+ import type { FleetEntry } from '../app-state.js';
3
+ export interface AgentsPanelSidebarProps {
4
+ entries: Record<string, FleetEntry>;
5
+ totalCost: number;
6
+ nowTick: number;
7
+ width: number;
8
+ }
9
+ export declare function AgentsPanelSidebar({ entries, totalCost, nowTick, width, }: AgentsPanelSidebarProps): React.ReactElement;
10
+ //# sourceMappingURL=sidebar-panel-agents.d.ts.map
@@ -0,0 +1,11 @@
1
+ import type React from 'react';
2
+ export interface ConnectionsPanelSidebarProps {
3
+ connections: readonly {
4
+ name: string;
5
+ status: 'ok' | 'warn' | 'down' | 'unknown';
6
+ latencyMs?: number | undefined;
7
+ }[];
8
+ width: number;
9
+ }
10
+ export declare function ConnectionsPanelSidebar({ connections, width, }: ConnectionsPanelSidebarProps): React.ReactElement;
11
+ //# sourceMappingURL=sidebar-panel-connections.d.ts.map
@@ -0,0 +1,11 @@
1
+ import type React from 'react';
2
+ export interface CoordinatorPanelSidebarProps {
3
+ running: boolean;
4
+ activePhases: number;
5
+ completedPhases: number;
6
+ phaseNames: readonly string[];
7
+ elapsedMs: number;
8
+ width: number;
9
+ }
10
+ export declare function CoordinatorPanelSidebar({ running, activePhases, completedPhases, phaseNames, elapsedMs, width, }: CoordinatorPanelSidebarProps): React.ReactElement;
11
+ //# sourceMappingURL=sidebar-panel-coordinator.d.ts.map
@@ -0,0 +1,16 @@
1
+ import type React from 'react';
2
+ import type { FleetEntry } from '../app-state.js';
3
+ export interface FleetPanelSidebarProps {
4
+ entries: Record<string, FleetEntry>;
5
+ /**
6
+ * Pre-computed running count from the caller. Retained for interface
7
+ * compatibility; the panel derives every displayed count (pill + chips)
8
+ * from `entries` so leader and subagents can never diverge.
9
+ */
10
+ runningCount: number;
11
+ /** Live tick (ms) — drives per-agent elapsed labels. Defaults to Date.now(). */
12
+ nowTick?: number | undefined;
13
+ width: number;
14
+ }
15
+ export declare function FleetPanelSidebar({ entries, nowTick, width, }: FleetPanelSidebarProps): React.ReactElement;
16
+ //# sourceMappingURL=sidebar-panel-fleet.d.ts.map
@@ -0,0 +1,12 @@
1
+ import type React from 'react';
2
+ import type { ProjectPickerItem } from './project-picker.js';
3
+ export interface ProjectPickerSidebarProps {
4
+ items: readonly ProjectPickerItem[];
5
+ selected: number;
6
+ filter: string;
7
+ hint?: string | undefined;
8
+ currentProject?: string | undefined;
9
+ width: number;
10
+ }
11
+ export declare function ProjectPickerSidebar({ items, selected, filter, hint, currentProject, width, }: ProjectPickerSidebarProps): React.ReactElement;
12
+ //# sourceMappingURL=sidebar-panel-project.d.ts.map
@@ -0,0 +1,10 @@
1
+ import type React from 'react';
2
+ import { type WorktreeRow } from '../ui-contracts.js';
3
+ export interface WorktreePanelSidebarProps {
4
+ worktrees: Record<string, WorktreeRow>;
5
+ /** Live tick (ms) — drives per-worktree age labels. Defaults to Date.now(). */
6
+ nowTick?: number | undefined;
7
+ width: number;
8
+ }
9
+ export declare function WorktreePanelSidebar({ worktrees, nowTick, width, }: WorktreePanelSidebarProps): React.ReactElement;
10
+ //# sourceMappingURL=sidebar-panel-worktree.d.ts.map