@navios/commander-tui 1.3.0 → 1.4.0

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 (240) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/{src/__tests__/mocks/scm-mock.ts → dist/base/src/__tests__/mocks/scm-mock.d.ts} +3 -1
  3. package/dist/base/src/__tests__/mocks/scm-mock.d.ts.map +1 -0
  4. package/dist/base/src/__tests__/setup.d.ts +2 -0
  5. package/dist/base/src/__tests__/setup.d.ts.map +1 -0
  6. package/dist/base/src/__tests__/utils/factories.d.ts +67 -0
  7. package/dist/base/src/__tests__/utils/factories.d.ts.map +1 -0
  8. package/dist/base/src/__tests__/utils/render-utils.d.ts +21 -0
  9. package/dist/base/src/__tests__/utils/render-utils.d.ts.map +1 -0
  10. package/dist/base/src/__tests__/utils/test-container.d.ts +20 -0
  11. package/dist/base/src/__tests__/utils/test-container.d.ts.map +1 -0
  12. package/dist/base/src/adapters/interface.d.ts +9 -2
  13. package/dist/base/src/adapters/interface.d.ts.map +1 -1
  14. package/dist/base/src/overrides/missing-adapter.override.d.ts +10 -0
  15. package/dist/base/src/overrides/missing-adapter.override.d.ts.map +1 -1
  16. package/dist/base/src/schemas/logger-options.d.ts +1 -1
  17. package/dist/base/src/services/index.d.ts +1 -0
  18. package/dist/base/src/services/index.d.ts.map +1 -1
  19. package/dist/base/src/services/logger.d.ts.map +1 -1
  20. package/dist/base/src/services/readline_prompt.d.ts +27 -0
  21. package/dist/base/src/services/readline_prompt.d.ts.map +1 -0
  22. package/dist/base/src/services/screen.d.ts +14 -8
  23. package/dist/base/src/services/screen.d.ts.map +1 -1
  24. package/dist/base/src/services/screen_manager.d.ts +62 -12
  25. package/dist/base/src/services/screen_manager.d.ts.map +1 -1
  26. package/dist/base/src/types/events.types.d.ts +40 -0
  27. package/dist/base/src/types/events.types.d.ts.map +1 -0
  28. package/dist/base/src/types/index.d.ts +1 -0
  29. package/dist/base/src/types/index.d.ts.map +1 -1
  30. package/dist/base/src/types/screen.types.d.ts +28 -0
  31. package/dist/base/src/types/screen.types.d.ts.map +1 -1
  32. package/dist/base/src/utils/colors/helpers.d.ts +0 -16
  33. package/dist/base/src/utils/colors/helpers.d.ts.map +1 -1
  34. package/dist/base/src/utils/index.d.ts +2 -0
  35. package/dist/base/src/utils/index.d.ts.map +1 -1
  36. package/dist/base/src/utils/prompt.d.ts +7 -0
  37. package/dist/base/src/utils/prompt.d.ts.map +1 -0
  38. package/dist/base/src/utils/runtime.d.ts +10 -0
  39. package/dist/base/src/utils/runtime.d.ts.map +1 -0
  40. package/dist/base/src/utils/stdout-printer.d.ts +5 -0
  41. package/dist/base/src/utils/stdout-printer.d.ts.map +1 -1
  42. package/dist/base/tsconfig.base.tsbuildinfo +1 -1
  43. package/dist/base/tsconfig.tsbuildinfo +1 -0
  44. package/dist/ink/src/adapters/ink/components/file/file_log.d.ts +28 -0
  45. package/dist/ink/src/adapters/ink/components/file/file_log.d.ts.map +1 -0
  46. package/dist/ink/src/adapters/ink/components/file/index.d.ts +2 -0
  47. package/dist/ink/src/adapters/ink/components/file/index.d.ts.map +1 -0
  48. package/dist/ink/src/adapters/ink/components/filter/filter_bar.d.ts +7 -0
  49. package/dist/ink/src/adapters/ink/components/filter/filter_bar.d.ts.map +1 -0
  50. package/dist/ink/src/adapters/ink/components/filter/index.d.ts +2 -0
  51. package/dist/ink/src/adapters/ink/components/filter/index.d.ts.map +1 -0
  52. package/dist/ink/src/adapters/ink/components/help/help_overlay.d.ts +6 -0
  53. package/dist/ink/src/adapters/ink/components/help/help_overlay.d.ts.map +1 -0
  54. package/dist/ink/src/adapters/ink/components/help/index.d.ts +2 -0
  55. package/dist/ink/src/adapters/ink/components/help/index.d.ts.map +1 -0
  56. package/dist/ink/src/adapters/ink/components/index.d.ts +9 -0
  57. package/dist/ink/src/adapters/ink/components/index.d.ts.map +1 -0
  58. package/dist/ink/src/adapters/ink/components/log/index.d.ts +2 -0
  59. package/dist/ink/src/adapters/ink/components/log/index.d.ts.map +1 -0
  60. package/dist/ink/src/adapters/ink/components/log/log_message.d.ts +15 -0
  61. package/dist/ink/src/adapters/ink/components/log/log_message.d.ts.map +1 -0
  62. package/dist/ink/src/adapters/ink/components/prompt/index.d.ts +2 -0
  63. package/dist/ink/src/adapters/ink/components/prompt/index.d.ts.map +1 -0
  64. package/dist/ink/src/adapters/ink/components/prompt/prompt_renderer.d.ts +6 -0
  65. package/dist/ink/src/adapters/ink/components/prompt/prompt_renderer.d.ts.map +1 -0
  66. package/dist/ink/src/adapters/ink/components/screen/group_renderer.d.ts +14 -0
  67. package/dist/ink/src/adapters/ink/components/screen/group_renderer.d.ts.map +1 -0
  68. package/dist/ink/src/adapters/ink/components/screen/index.d.ts +7 -0
  69. package/dist/ink/src/adapters/ink/components/screen/index.d.ts.map +1 -0
  70. package/dist/ink/src/adapters/ink/components/screen/loading_message.d.ts +6 -0
  71. package/dist/ink/src/adapters/ink/components/screen/loading_message.d.ts.map +1 -0
  72. package/dist/ink/src/adapters/ink/components/screen/message_renderer.d.ts +6 -0
  73. package/dist/ink/src/adapters/ink/components/screen/message_renderer.d.ts.map +1 -0
  74. package/dist/ink/src/adapters/ink/components/screen/progress_message.d.ts +6 -0
  75. package/dist/ink/src/adapters/ink/components/screen/progress_message.d.ts.map +1 -0
  76. package/dist/ink/src/adapters/ink/components/screen/screen_bridge.d.ts +14 -0
  77. package/dist/ink/src/adapters/ink/components/screen/screen_bridge.d.ts.map +1 -0
  78. package/dist/ink/src/adapters/ink/components/screen/table_message.d.ts +6 -0
  79. package/dist/ink/src/adapters/ink/components/screen/table_message.d.ts.map +1 -0
  80. package/dist/ink/src/adapters/ink/components/screen_manager_bridge.d.ts +8 -0
  81. package/dist/ink/src/adapters/ink/components/screen_manager_bridge.d.ts.map +1 -0
  82. package/dist/ink/src/adapters/ink/components/sidebar/index.d.ts +4 -0
  83. package/dist/ink/src/adapters/ink/components/sidebar/index.d.ts.map +1 -0
  84. package/dist/ink/src/adapters/ink/components/sidebar/sidebar.d.ts +11 -0
  85. package/dist/ink/src/adapters/ink/components/sidebar/sidebar.d.ts.map +1 -0
  86. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_item.d.ts +9 -0
  87. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_item.d.ts.map +1 -0
  88. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_separator.d.ts +2 -0
  89. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_separator.d.ts.map +1 -0
  90. package/dist/ink/src/adapters/ink/context/index.d.ts +2 -0
  91. package/dist/ink/src/adapters/ink/context/index.d.ts.map +1 -0
  92. package/dist/ink/src/adapters/ink/context/logger_context.d.ts +33 -0
  93. package/dist/ink/src/adapters/ink/context/logger_context.d.ts.map +1 -0
  94. package/dist/ink/src/adapters/ink/hooks/index.d.ts +2 -0
  95. package/dist/ink/src/adapters/ink/hooks/index.d.ts.map +1 -0
  96. package/dist/ink/src/adapters/ink/hooks/use_theme.d.ts +7 -0
  97. package/dist/ink/src/adapters/ink/hooks/use_theme.d.ts.map +1 -0
  98. package/dist/ink/src/adapters/ink/index.d.ts +18 -0
  99. package/dist/ink/src/adapters/ink/index.d.ts.map +1 -0
  100. package/dist/ink/src/adapters/react-shared/hooks/index.d.ts +4 -0
  101. package/dist/ink/src/adapters/react-shared/hooks/index.d.ts.map +1 -0
  102. package/dist/ink/src/adapters/react-shared/hooks/use_filter_state.d.ts +18 -0
  103. package/dist/ink/src/adapters/react-shared/hooks/use_filter_state.d.ts.map +1 -0
  104. package/dist/ink/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts +26 -0
  105. package/dist/ink/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts.map +1 -0
  106. package/dist/ink/src/adapters/react-shared/hooks/use_manager_subscription.d.ts +7 -0
  107. package/dist/ink/src/adapters/react-shared/hooks/use_manager_subscription.d.ts.map +1 -0
  108. package/dist/ink/src/adapters/react-shared/index.d.ts +2 -0
  109. package/dist/ink/src/adapters/react-shared/index.d.ts.map +1 -0
  110. package/dist/ink/tsconfig.ink.tsbuildinfo +1 -0
  111. package/dist/react/src/adapters/react-shared/hooks/index.d.ts +4 -0
  112. package/dist/react/src/adapters/react-shared/hooks/index.d.ts.map +1 -0
  113. package/dist/react/src/adapters/react-shared/hooks/use_filter_state.d.ts +18 -0
  114. package/dist/react/src/adapters/react-shared/hooks/use_filter_state.d.ts.map +1 -0
  115. package/dist/react/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts +26 -0
  116. package/dist/react/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts.map +1 -0
  117. package/dist/react/src/adapters/react-shared/hooks/use_manager_subscription.d.ts +7 -0
  118. package/dist/react/src/adapters/react-shared/hooks/use_manager_subscription.d.ts.map +1 -0
  119. package/dist/react/src/adapters/react-shared/index.d.ts +2 -0
  120. package/dist/react/src/adapters/react-shared/index.d.ts.map +1 -0
  121. package/dist/react/tsconfig.react.tsbuildinfo +1 -1
  122. package/dist/solid/tsconfig.solid.tsbuildinfo +1 -1
  123. package/lib/index.cjs +2177 -178
  124. package/lib/index.cjs.map +1 -1
  125. package/lib/index.d.cts +942 -78
  126. package/lib/index.d.cts.map +1 -0
  127. package/lib/index.d.mts +902 -38
  128. package/lib/index.d.mts.map +1 -0
  129. package/lib/index.mjs +2098 -135
  130. package/lib/index.mjs.map +1 -1
  131. package/package.json +1 -31
  132. package/src/__tests__/services/logger.spec.ts +32 -0
  133. package/src/__tests__/services/screen.spec.ts +106 -95
  134. package/src/__tests__/utils/factories.ts +2 -0
  135. package/src/adapters/interface.ts +10 -2
  136. package/src/overrides/missing-adapter.override.ts +16 -6
  137. package/src/services/index.ts +1 -0
  138. package/src/services/logger.ts +7 -1
  139. package/src/services/readline_prompt.ts +194 -0
  140. package/src/services/screen.ts +106 -54
  141. package/src/services/screen_manager.ts +282 -74
  142. package/src/types/events.types.ts +84 -0
  143. package/src/types/index.ts +3 -0
  144. package/src/types/screen.types.ts +34 -0
  145. package/src/utils/colors/helpers.ts +0 -25
  146. package/src/utils/index.ts +6 -0
  147. package/src/utils/prompt.ts +18 -0
  148. package/src/utils/runtime.ts +14 -0
  149. package/src/utils/stdout-printer.ts +16 -5
  150. package/tsconfig.base.json +1 -17
  151. package/tsconfig.json +1 -6
  152. package/tsdown.config.mts +13 -70
  153. package/lib/adapters/react/index.cjs +0 -1768
  154. package/lib/adapters/react/index.cjs.map +0 -1
  155. package/lib/adapters/react/index.d.cts +0 -80
  156. package/lib/adapters/react/index.d.mts +0 -80
  157. package/lib/adapters/react/index.mjs +0 -1760
  158. package/lib/adapters/react/index.mjs.map +0 -1
  159. package/lib/adapters/solid/index.cjs +0 -3855
  160. package/lib/adapters/solid/index.cjs.map +0 -1
  161. package/lib/adapters/solid/index.d.cts +0 -74
  162. package/lib/adapters/solid/index.d.mts +0 -74
  163. package/lib/adapters/solid/index.mjs +0 -3847
  164. package/lib/adapters/solid/index.mjs.map +0 -1
  165. package/lib/filter_engine-DXqu9Vaq.cjs +0 -1836
  166. package/lib/filter_engine-DXqu9Vaq.cjs.map +0 -1
  167. package/lib/filter_engine-DmqhEhpA.mjs +0 -1609
  168. package/lib/filter_engine-DmqhEhpA.mjs.map +0 -1
  169. package/lib/interface-CTHQ08aY.d.mts +0 -699
  170. package/lib/interface-DQEIz9Mb.d.cts +0 -699
  171. package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +0 -2293
  172. package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +0 -1414
  173. package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +0 -3245
  174. package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +0 -1783
  175. package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +0 -3203
  176. package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +0 -2857
  177. package/src/__tests__/components/filter_bar.spec.tsx +0 -190
  178. package/src/__tests__/components/loading_message.spec.tsx +0 -110
  179. package/src/__tests__/components/log_message.spec.tsx +0 -166
  180. package/src/__tests__/components/progress_message.spec.tsx +0 -147
  181. package/src/__tests__/components/prompt_renderer.spec.tsx +0 -274
  182. package/src/__tests__/components/sidebar.spec.tsx +0 -322
  183. package/src/__tests__/utils/render-utils.tsx +0 -39
  184. package/src/adapters/react/components/file/file_log.tsx +0 -241
  185. package/src/adapters/react/components/file/index.ts +0 -1
  186. package/src/adapters/react/components/filter/filter_bar.tsx +0 -79
  187. package/src/adapters/react/components/filter/index.ts +0 -1
  188. package/src/adapters/react/components/help/help_overlay.tsx +0 -100
  189. package/src/adapters/react/components/help/index.ts +0 -1
  190. package/src/adapters/react/components/log/index.ts +0 -1
  191. package/src/adapters/react/components/log/log_message.tsx +0 -102
  192. package/src/adapters/react/components/prompt/index.ts +0 -2
  193. package/src/adapters/react/components/prompt/prompt_renderer.tsx +0 -346
  194. package/src/adapters/react/components/screen/group_renderer.tsx +0 -64
  195. package/src/adapters/react/components/screen/index.ts +0 -6
  196. package/src/adapters/react/components/screen/loading_message.tsx +0 -43
  197. package/src/adapters/react/components/screen/message_renderer.tsx +0 -108
  198. package/src/adapters/react/components/screen/progress_message.tsx +0 -60
  199. package/src/adapters/react/components/screen/screen_bridge.tsx +0 -149
  200. package/src/adapters/react/components/screen/table_message.tsx +0 -57
  201. package/src/adapters/react/components/screen_manager_bridge.tsx +0 -245
  202. package/src/adapters/react/components/sidebar/index.ts +0 -3
  203. package/src/adapters/react/components/sidebar/sidebar.tsx +0 -102
  204. package/src/adapters/react/components/sidebar/sidebar_item.tsx +0 -50
  205. package/src/adapters/react/components/sidebar/sidebar_separator.tsx +0 -13
  206. package/src/adapters/react/context/index.ts +0 -1
  207. package/src/adapters/react/context/logger_context.tsx +0 -109
  208. package/src/adapters/react/hooks/index.ts +0 -1
  209. package/src/adapters/react/hooks/use_theme.ts +0 -12
  210. package/src/adapters/react/index.ts +0 -39
  211. package/src/adapters/solid/components/file/file_log.tsx +0 -221
  212. package/src/adapters/solid/components/file/index.ts +0 -1
  213. package/src/adapters/solid/components/filter/filter_bar.tsx +0 -84
  214. package/src/adapters/solid/components/filter/index.ts +0 -1
  215. package/src/adapters/solid/components/help/help_overlay.tsx +0 -106
  216. package/src/adapters/solid/components/help/index.ts +0 -1
  217. package/src/adapters/solid/components/log/index.ts +0 -1
  218. package/src/adapters/solid/components/log/log_message.tsx +0 -92
  219. package/src/adapters/solid/components/prompt/index.ts +0 -2
  220. package/src/adapters/solid/components/prompt/prompt_renderer.tsx +0 -350
  221. package/src/adapters/solid/components/screen/group_renderer.tsx +0 -61
  222. package/src/adapters/solid/components/screen/index.ts +0 -6
  223. package/src/adapters/solid/components/screen/loading_message.tsx +0 -39
  224. package/src/adapters/solid/components/screen/message_renderer.tsx +0 -122
  225. package/src/adapters/solid/components/screen/progress_message.tsx +0 -61
  226. package/src/adapters/solid/components/screen/screen_bridge.tsx +0 -155
  227. package/src/adapters/solid/components/screen/table_message.tsx +0 -58
  228. package/src/adapters/solid/components/screen_manager_bridge.tsx +0 -243
  229. package/src/adapters/solid/components/sidebar/index.ts +0 -3
  230. package/src/adapters/solid/components/sidebar/sidebar.tsx +0 -108
  231. package/src/adapters/solid/components/sidebar/sidebar_item.tsx +0 -55
  232. package/src/adapters/solid/components/sidebar/sidebar_separator.tsx +0 -13
  233. package/src/adapters/solid/context/index.ts +0 -2
  234. package/src/adapters/solid/context/logger_context.tsx +0 -95
  235. package/src/adapters/solid/hooks/index.ts +0 -1
  236. package/src/adapters/solid/hooks/use_theme.ts +0 -12
  237. package/src/adapters/solid/index.tsx +0 -43
  238. package/src/adapters/solid/jsx.d.ts +0 -98
  239. package/tsconfig.react.json +0 -16
  240. package/tsconfig.solid.json +0 -16
package/lib/index.d.mts CHANGED
@@ -1,10 +1,727 @@
1
- import { $ as FileLogBaseProps, A as ScreenDefinition, B as HelpTheme, C as InputPromptData, Ct as TableMessageData, D as BindOptions, E as PromptData, F as ErrorHighlightTheme, G as SemanticColors, H as PartialTheme, I as FileTheme, J as StatusIndicator, K as SeparatorTheme, L as FilterTheme, M as ScreenProps, N as ScreenStatus, O as FocusArea, P as DeepPartial, Q as ThemePreset, R as GroupTheme, S as InputOptions, St as PromiseOptions, T as MultiChoicePromptData, U as ProgressTheme, V as LogLevelTheme, W as PromptTheme, X as TableTheme, Y as StatusIndicatorsTheme, Z as Theme, _ as ChoiceOption, _t as LogMessageVariant, a as FilterState, at as LogLevelColorMap, b as ConfirmOptions, bt as ProgressHandle, c as hasActiveFilter, ct as VariantColorMap, d as KeyBindingCondition, dt as FileErrorMessageData, et as FileLogDiffProps, f as KeyBindingsConfig, ft as FileMessageData, g as BasePromptData, gt as LogMessageData, h as KeyboardContext, ht as LoadingMessageData, i as ALL_LOG_LEVELS, it as FileLogProps, j as ScreenManagerProps, k as LoggerContextValue, l as KeyBinding, lt as BaseMessage, m as KeyHandler, mt as LoadingHandle, n as AdapterRenderProps, nt as FileLogMode, o as LevelCounts, ot as LogLevelColors, p as KeyEvent, pt as GroupMessageData, q as SidebarTheme, r as AdapterRoot, rt as FileLogPartialProps, s as createDefaultFilterState, st as LogMessageProps, t as AdapterInterface, tt as FileLogFullProps, u as KeyBindingCategory, ut as DiffMessageData, v as ChoiceOptions, vt as MessageData, w as MultiChoiceOptions, x as ConfirmPromptData, xt as ProgressMessageData, y as ChoicePromptData, yt as MessageType, z as HeaderTheme } from "./interface-CTHQ08aY.mjs";
2
- import { RGBA } from "@opentui/core";
3
1
  import { ClassTypeWithInstance, FactoryContext, InjectionToken, LogLevel, LoggerInstance, LoggerService, OnServiceDestroy } from "@navios/core";
2
+ import { EventEmitter } from "node:events";
3
+ import { CliRenderer, RGBA, SyntaxStyle, TreeSitterClient } from "@opentui/core";
4
+ import { ReactNode } from "react";
4
5
  import * as zod_v40 from "zod/v4";
5
6
  import { z } from "zod/v4";
6
7
  import * as zod_v4_core0 from "zod/v4/core";
7
8
 
9
+ //#region src/types/message.types.d.ts
10
+ type MessageType = 'log' | 'file' | 'diff' | 'fileError' | 'loading' | 'progress' | 'group' | 'table';
11
+ interface BaseMessage {
12
+ id: string;
13
+ type: MessageType;
14
+ timestamp: Date;
15
+ }
16
+ /**
17
+ * Semantic variants for log messages that don't map directly to LogLevel.
18
+ * These affect styling but the underlying LogLevel is used for filtering.
19
+ */
20
+ type LogMessageVariant = 'success' | 'trace';
21
+ interface LogMessageData extends BaseMessage {
22
+ type: 'log';
23
+ level: LogLevel;
24
+ /** Content is always a string - objects are formatted before storage */
25
+ content: string;
26
+ label?: string;
27
+ trace?: string;
28
+ /** Optional semantic variant for styling (e.g., 'success' shows green even though level is 'log') */
29
+ variant?: LogMessageVariant;
30
+ }
31
+ interface FileMessageData extends BaseMessage {
32
+ type: 'file';
33
+ filePath: string;
34
+ content: string;
35
+ }
36
+ interface DiffMessageData extends BaseMessage {
37
+ type: 'diff';
38
+ filePath: string;
39
+ diff: string;
40
+ view?: 'unified' | 'split';
41
+ }
42
+ interface FileErrorMessageData extends BaseMessage {
43
+ type: 'fileError';
44
+ filePath: string;
45
+ content: string;
46
+ errorLines: number[];
47
+ startLine: number;
48
+ }
49
+ interface LoadingMessageData extends BaseMessage {
50
+ type: 'loading';
51
+ content: string;
52
+ status: 'loading' | 'success' | 'fail';
53
+ resolvedContent?: string;
54
+ }
55
+ interface ProgressMessageData extends BaseMessage {
56
+ type: 'progress';
57
+ label: string;
58
+ current: number;
59
+ total: number;
60
+ status: 'active' | 'complete' | 'failed';
61
+ resolvedContent?: string;
62
+ }
63
+ interface GroupMessageData extends BaseMessage {
64
+ type: 'group';
65
+ label: string;
66
+ collapsed: boolean;
67
+ isEnd: boolean;
68
+ }
69
+ interface TableMessageData extends BaseMessage {
70
+ type: 'table';
71
+ headers: string[];
72
+ rows: string[][];
73
+ title?: string;
74
+ }
75
+ type MessageData = LogMessageData | FileMessageData | DiffMessageData | FileErrorMessageData | LoadingMessageData | ProgressMessageData | GroupMessageData | TableMessageData;
76
+ interface PromiseOptions<T> {
77
+ loading: string;
78
+ success: string | ((data: T) => string);
79
+ error: string | ((error: Error) => string);
80
+ }
81
+ interface LoadingHandle {
82
+ success: (message: string) => void;
83
+ fail: (message: string) => void;
84
+ }
85
+ interface ProgressHandle {
86
+ update: (current: number, label?: string) => void;
87
+ complete: (message?: string) => void;
88
+ fail: (message?: string) => void;
89
+ }
90
+ //#endregion
91
+ //#region src/types/log.types.d.ts
92
+ interface LogLevelColors {
93
+ border: string;
94
+ background: string;
95
+ text?: string;
96
+ }
97
+ type LogLevelColorMap = Record<LogLevel, LogLevelColors>;
98
+ /**
99
+ * Color map for semantic variants (success, trace) that override level colors.
100
+ */
101
+ type VariantColorMap = Record<LogMessageVariant, LogLevelColors>;
102
+ interface LogMessageProps {
103
+ /** Log level determines the color scheme */
104
+ level: LogLevel;
105
+ /** Optional semantic variant for styling (e.g., 'success' shows green even though level is 'log') */
106
+ variant?: LogMessageVariant;
107
+ /** Message content - can be string or React nodes */
108
+ children: ReactNode;
109
+ /** Optional timestamp to display */
110
+ timestamp?: Date | string;
111
+ /** Optional label/prefix (e.g., "API", "Database") */
112
+ label?: string;
113
+ /** Optional stack trace to display (for trace level) */
114
+ trace?: string;
115
+ /** Optional custom border color (overrides level color) */
116
+ borderColor?: string | RGBA;
117
+ /** Optional custom background color (overrides level color) */
118
+ backgroundColor?: string | RGBA;
119
+ /** Border width style - 'thin' uses left border only, 'thick' uses left+top+bottom */
120
+ borderStyle?: 'thin' | 'thick';
121
+ /** Padding inside the message box */
122
+ padding?: number;
123
+ /** Margin around the message */
124
+ margin?: number;
125
+ }
126
+ //#endregion
127
+ //#region src/types/file.types.d.ts
128
+ type FileLogMode = 'full' | 'diff' | 'partial';
129
+ interface FileLogBaseProps {
130
+ /** File path or name to display in header */
131
+ filePath: string;
132
+ /** Override auto-detected filetype for syntax highlighting */
133
+ filetype?: string;
134
+ /** Show line numbers */
135
+ showLineNumbers?: boolean;
136
+ /** Show header with file path */
137
+ showHeader?: boolean;
138
+ /** Custom header background color */
139
+ headerBackgroundColor?: string | RGBA;
140
+ }
141
+ interface FileLogFullProps extends FileLogBaseProps {
142
+ mode: 'full';
143
+ /** The complete file content */
144
+ content: string;
145
+ }
146
+ interface FileLogDiffProps extends FileLogBaseProps {
147
+ mode: 'diff';
148
+ /** Unified diff string */
149
+ diff: string;
150
+ /** Diff view mode */
151
+ view?: 'unified' | 'split';
152
+ }
153
+ interface FileLogPartialProps extends FileLogBaseProps {
154
+ mode: 'partial';
155
+ /** File content (full or partial) */
156
+ content: string;
157
+ /** Starting line number of the content (1-indexed) */
158
+ startLine: number;
159
+ /** Lines to highlight as errors */
160
+ errorLines?: number[];
161
+ /** Error highlighting colors */
162
+ errorLineBackground?: string | RGBA;
163
+ errorLineBorderColor?: string | RGBA;
164
+ }
165
+ type FileLogProps = FileLogFullProps | FileLogDiffProps | FileLogPartialProps;
166
+ //#endregion
167
+ //#region src/types/theme.types.d.ts
168
+ /**
169
+ * Color scheme for a single log level.
170
+ */
171
+ interface LogLevelTheme {
172
+ border: string;
173
+ background: string;
174
+ text?: string;
175
+ }
176
+ /**
177
+ * Sidebar color scheme.
178
+ */
179
+ interface SidebarTheme {
180
+ background?: string;
181
+ selectedBackground: string;
182
+ hoverBackground: string;
183
+ text: string;
184
+ textDim: string;
185
+ border: string;
186
+ badge: string;
187
+ focusBorder: string;
188
+ }
189
+ /**
190
+ * Screen header color scheme.
191
+ */
192
+ interface HeaderTheme {
193
+ background?: string;
194
+ text: string;
195
+ border: string;
196
+ }
197
+ /**
198
+ * Status indicator with icon and color.
199
+ */
200
+ interface StatusIndicator {
201
+ icon: string;
202
+ color: string;
203
+ }
204
+ /**
205
+ * Status indicators for all screen states.
206
+ */
207
+ interface StatusIndicatorsTheme {
208
+ waiting: StatusIndicator;
209
+ pending: StatusIndicator;
210
+ success: StatusIndicator;
211
+ fail: StatusIndicator;
212
+ static: StatusIndicator;
213
+ }
214
+ /**
215
+ * Separator colors for sidebar sections.
216
+ */
217
+ interface SeparatorTheme {
218
+ line: string;
219
+ text: string;
220
+ }
221
+ /**
222
+ * Progress bar and loading indicator colors.
223
+ */
224
+ interface ProgressTheme {
225
+ border: string;
226
+ background: string;
227
+ barFilled: string;
228
+ barEmpty: string;
229
+ text: string;
230
+ textDim: string;
231
+ complete: string;
232
+ completeBackground: string;
233
+ failed: string;
234
+ failedBackground: string;
235
+ }
236
+ /**
237
+ * Collapsible group colors.
238
+ */
239
+ interface GroupTheme {
240
+ border: string;
241
+ background: string;
242
+ headerText: string;
243
+ icon: string;
244
+ }
245
+ /**
246
+ * Table display colors.
247
+ */
248
+ interface TableTheme {
249
+ border: string;
250
+ background: string;
251
+ headerText: string;
252
+ cellText: string;
253
+ title: string;
254
+ separator: string;
255
+ }
256
+ /**
257
+ * File display colors.
258
+ */
259
+ interface FileTheme {
260
+ border: string;
261
+ background: string;
262
+ headerText: string;
263
+ headerBackground: string;
264
+ }
265
+ /**
266
+ * Interactive prompt colors.
267
+ */
268
+ interface PromptTheme {
269
+ question: string;
270
+ optionText: string;
271
+ optionTextDim: string;
272
+ optionSelected: string;
273
+ optionSelectedBackground: string;
274
+ confirmButton: string;
275
+ cancelButton: string;
276
+ buttonBackground: string;
277
+ buttonSelectedBackground: string;
278
+ inputBorder: string;
279
+ inputBackground: string;
280
+ inputText: string;
281
+ inputPlaceholder: string;
282
+ inputCursor: string;
283
+ border: string;
284
+ focusBorder: string;
285
+ }
286
+ /**
287
+ * Error highlighting colors for file displays.
288
+ */
289
+ interface ErrorHighlightTheme {
290
+ background: string;
291
+ border: string;
292
+ gutterBackground: string;
293
+ }
294
+ /**
295
+ * Filter bar colors.
296
+ */
297
+ interface FilterTheme {
298
+ background: string;
299
+ border: string;
300
+ text: string;
301
+ textDim: string;
302
+ inputBackground: string;
303
+ inputText: string;
304
+ inputPlaceholder: string;
305
+ cursor: string;
306
+ activeLevel: string;
307
+ inactiveLevel: string;
308
+ }
309
+ /**
310
+ * Help overlay colors.
311
+ */
312
+ interface HelpTheme {
313
+ background: string;
314
+ border: string;
315
+ title: string;
316
+ category: string;
317
+ key: string;
318
+ description: string;
319
+ hint: string;
320
+ }
321
+ /**
322
+ * General semantic colors.
323
+ */
324
+ interface SemanticColors {
325
+ primary: string;
326
+ secondary: string;
327
+ success: string;
328
+ warning: string;
329
+ error: string;
330
+ muted: string;
331
+ background?: string;
332
+ foreground: string;
333
+ }
334
+ /**
335
+ * Complete theme definition.
336
+ */
337
+ interface Theme {
338
+ /** Theme identifier */
339
+ name: string;
340
+ /** Log level color schemes */
341
+ logLevels: Record<LogLevel, LogLevelTheme>;
342
+ /** Sidebar colors */
343
+ sidebar: SidebarTheme;
344
+ /** Screen header colors */
345
+ header: HeaderTheme;
346
+ /** Status indicator colors and icons */
347
+ statusIndicators: StatusIndicatorsTheme;
348
+ /** Separator colors */
349
+ separator: SeparatorTheme;
350
+ /** Progress bar colors */
351
+ progress: ProgressTheme;
352
+ /** Collapsible group colors */
353
+ group: GroupTheme;
354
+ /** Table display colors */
355
+ table: TableTheme;
356
+ /** File display colors */
357
+ file: FileTheme;
358
+ /** Prompt colors */
359
+ prompt: PromptTheme;
360
+ /** Error highlighting colors */
361
+ errorHighlight: ErrorHighlightTheme;
362
+ /** Filter bar colors */
363
+ filter: FilterTheme;
364
+ /** Help overlay colors */
365
+ help: HelpTheme;
366
+ /** General semantic colors */
367
+ colors: SemanticColors;
368
+ }
369
+ /**
370
+ * Theme preset names.
371
+ */
372
+ type ThemePreset = 'dark' | 'light' | 'high-contrast';
373
+ /**
374
+ * Deep partial type for theme overrides.
375
+ */
376
+ type DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] };
377
+ /**
378
+ * Partial theme for creating custom themes.
379
+ */
380
+ type PartialTheme = DeepPartial<Theme>;
381
+ //#endregion
382
+ //#region src/types/screen.types.d.ts
383
+ interface ScreenProps {
384
+ /** Screen title/name displayed in header */
385
+ name: string;
386
+ /** Child log messages/file logs */
387
+ children: ReactNode;
388
+ /** Enable auto-scroll to bottom on new content */
389
+ stickyScroll?: boolean;
390
+ /** Show scroll position indicator */
391
+ showScrollIndicator?: boolean;
392
+ /** Screen header background color */
393
+ headerBackgroundColor?: string | RGBA;
394
+ /** Screen header text color */
395
+ headerTextColor?: string | RGBA;
396
+ /** Whether this screen is currently focused */
397
+ focused?: boolean;
398
+ /** Callback when screen is scrolled */
399
+ onScroll?: (scrollTop: number, scrollHeight: number) => void;
400
+ }
401
+ interface ScreenDefinition {
402
+ /** Unique screen identifier */
403
+ id: string;
404
+ /** Display name for sidebar */
405
+ name: string;
406
+ /** Optional icon/badge character */
407
+ icon?: string;
408
+ /** Unread/notification count */
409
+ badgeCount?: number;
410
+ }
411
+ interface ScreenManagerProps {
412
+ /** Screen definitions for the sidebar */
413
+ screens: ScreenDefinition[];
414
+ /** Currently active screen ID */
415
+ activeScreenId: string;
416
+ /** Callback when screen selection changes */
417
+ onScreenChange?: (screenId: string) => void;
418
+ /** Screen content - should be conditionally rendered based on activeScreenId */
419
+ children: ReactNode;
420
+ /** Force show/hide sidebar (overrides auto behavior) */
421
+ sidebarVisible?: boolean;
422
+ /** Callback when sidebar visibility changes */
423
+ onSidebarVisibilityChange?: (visible: boolean) => void;
424
+ /** Sidebar width (columns) */
425
+ sidebarWidth?: number;
426
+ /** Sidebar position */
427
+ sidebarPosition?: 'left' | 'right';
428
+ /** Key to toggle sidebar visibility */
429
+ toggleSidebarKey?: string;
430
+ /** Sidebar header title */
431
+ sidebarTitle?: string;
432
+ }
433
+ type FocusArea = 'sidebar' | 'content';
434
+ interface LoggerContextValue {
435
+ /** Shared SyntaxStyle instance for code highlighting */
436
+ syntaxStyle?: SyntaxStyle;
437
+ /** Shared TreeSitterClient for parsing */
438
+ treeSitterClient?: TreeSitterClient;
439
+ /** Default colors for log levels (derived from theme for backwards compatibility) */
440
+ levelColors: LogLevelColorMap;
441
+ /** Current theme */
442
+ theme: Theme;
443
+ }
444
+ type ScreenStatus = 'waiting' | 'pending' | 'success' | 'fail' | 'static';
445
+ /**
446
+ * Render mode determines how the TUI operates.
447
+ * This is set during bind() and affects prompts, screen printing, and exit behavior.
448
+ */
449
+ declare enum RenderMode {
450
+ /** bind() never called - screens print on completion, prompts return defaults */
451
+ UNBOUND = "unbound",
452
+ /** bind() called with useOpenTUI: false - stdout mode with readline prompts */
453
+ STDOUT_INTERACTIVE = "stdout",
454
+ /** bind() called with useOpenTUI: true but adapter unavailable - fallback to stdout with warning */
455
+ STDOUT_FALLBACK = "fallback",
456
+ /** Full TUI rendering active with adapter */
457
+ TUI_ACTIVE = "tui",
458
+ }
459
+ interface BindOptions {
460
+ exitOnCtrlC?: boolean;
461
+ sidebarWidth?: number;
462
+ sidebarPosition?: 'left' | 'right';
463
+ sidebarTitle?: string;
464
+ /** Auto close after all screens complete successfully (delay in ms, default 5000) */
465
+ autoClose?: boolean | number;
466
+ /** Theme to use for the TUI (theme object or preset name) */
467
+ theme?: Theme | ThemePreset;
468
+ /** Enable mouse support (default: true) */
469
+ useMouse?: boolean;
470
+ /**
471
+ * Use OpenTUI for terminal rendering.
472
+ * When true: Full TUI with sidebar, scrolling, interactive prompts.
473
+ * When false: Stdout mode - static screens print immediately, others on completion.
474
+ * Default: true for Node.js, false for Bun (OpenTUI not supported).
475
+ */
476
+ useOpenTUI?: boolean;
477
+ }
478
+ interface SetupOptions {
479
+ /** Theme to use for the TUI (theme object or preset name) */
480
+ theme?: Theme | ThemePreset;
481
+ /** Global log levels filter - only these levels will be displayed across all loggers */
482
+ logLevels?: LogLevel[];
483
+ }
484
+ //#endregion
485
+ //#region src/types/prompt.types.d.ts
486
+ interface ChoiceOption {
487
+ label: string;
488
+ value: string;
489
+ /** If true, this option allows text input */
490
+ input?: boolean;
491
+ }
492
+ interface BasePromptData {
493
+ id: string;
494
+ timestamp: Date;
495
+ resolved: boolean;
496
+ /** Auto-resolve timeout in ms */
497
+ timeout?: number;
498
+ /** Timestamp when timeout started */
499
+ timeoutStarted?: number;
500
+ }
501
+ interface ChoicePromptData extends BasePromptData {
502
+ type: 'choice';
503
+ question: string;
504
+ choices: ChoiceOption[];
505
+ defaultChoice: string;
506
+ selectedIndex: number;
507
+ inputMode: boolean;
508
+ inputValue: string;
509
+ resolvedValue?: string;
510
+ }
511
+ interface ConfirmPromptData extends BasePromptData {
512
+ type: 'confirm';
513
+ question: string;
514
+ confirmText: string;
515
+ cancelText: string;
516
+ defaultValue: boolean;
517
+ selectedValue: boolean;
518
+ resolvedValue?: boolean;
519
+ }
520
+ interface InputPromptData extends BasePromptData {
521
+ type: 'input';
522
+ question: string;
523
+ placeholder: string;
524
+ defaultValue: string;
525
+ value: string;
526
+ resolvedValue?: string;
527
+ }
528
+ interface MultiChoicePromptData extends BasePromptData {
529
+ type: 'multiChoice';
530
+ question: string;
531
+ choices: ChoiceOption[];
532
+ selectedIndices: Set<number>;
533
+ focusedIndex: number;
534
+ minSelect: number;
535
+ maxSelect: number;
536
+ resolvedValues?: string[];
537
+ }
538
+ type PromptData = ChoicePromptData | ConfirmPromptData | InputPromptData | MultiChoicePromptData;
539
+ interface ChoiceOptions {
540
+ question: string;
541
+ choices: ChoiceOption[];
542
+ defaultChoice?: string;
543
+ /** Auto-resolve with default after timeout (ms) */
544
+ timeout?: number;
545
+ }
546
+ interface ConfirmOptions {
547
+ question: string;
548
+ confirmText?: string;
549
+ cancelText?: string;
550
+ defaultValue?: boolean;
551
+ /** Auto-resolve with default after timeout (ms) */
552
+ timeout?: number;
553
+ }
554
+ interface InputOptions {
555
+ question: string;
556
+ placeholder?: string;
557
+ defaultValue?: string;
558
+ /** Auto-resolve with default after timeout (ms) */
559
+ timeout?: number;
560
+ }
561
+ interface MultiChoiceOptions {
562
+ question: string;
563
+ choices: ChoiceOption[];
564
+ defaultChoices?: string[];
565
+ minSelect?: number;
566
+ maxSelect?: number;
567
+ /** Auto-resolve with default after timeout (ms) */
568
+ timeout?: number;
569
+ }
570
+ //#endregion
571
+ //#region src/types/keyboard.types.d.ts
572
+ /**
573
+ * Key event from the terminal.
574
+ */
575
+ interface KeyEvent {
576
+ name: string;
577
+ sequence?: string;
578
+ ctrl?: boolean;
579
+ meta?: boolean;
580
+ shift?: boolean;
581
+ }
582
+ /**
583
+ * Context available to keyboard handlers.
584
+ */
585
+ interface KeyboardContext {
586
+ /** Has multiple screens (sidebar visible) */
587
+ hasSidebar: boolean;
588
+ /** Currently focused area */
589
+ focusArea: FocusArea;
590
+ /** Whether a prompt is active */
591
+ hasPrompt: boolean;
592
+ /** Whether prompt is in text input mode */
593
+ inInputMode: boolean;
594
+ /** Whether filter bar is visible */
595
+ isFilterActive: boolean;
596
+ /** Whether help overlay is visible */
597
+ isHelpVisible: boolean;
598
+ }
599
+ /**
600
+ * Handler function for a key binding.
601
+ * Return true to prevent further processing, false/void to continue.
602
+ */
603
+ type KeyHandler = (key: KeyEvent, context: KeyboardContext) => boolean | void;
604
+ /**
605
+ * Category for organizing bindings in help overlay.
606
+ */
607
+ type KeyBindingCategory = 'general' | 'navigation' | 'screen' | 'prompt' | 'filter';
608
+ /**
609
+ * Condition for when a binding is active.
610
+ */
611
+ interface KeyBindingCondition {
612
+ hasPrompt?: boolean;
613
+ inInputMode?: boolean;
614
+ focusArea?: FocusArea;
615
+ isFilterActive?: boolean;
616
+ isHelpVisible?: boolean;
617
+ hasSidebar?: boolean;
618
+ }
619
+ /**
620
+ * A single key binding definition.
621
+ */
622
+ interface KeyBinding {
623
+ /** Key name(s) that trigger this binding */
624
+ key: string | string[];
625
+ /** Require Ctrl modifier */
626
+ ctrl?: boolean;
627
+ /** Require Meta/Cmd modifier */
628
+ meta?: boolean;
629
+ /** Require Shift modifier (for capital letters) */
630
+ shift?: boolean;
631
+ /** Handler function */
632
+ handler: KeyHandler;
633
+ /** Description for help overlay */
634
+ description: string;
635
+ /** Category for grouping in help */
636
+ category: KeyBindingCategory;
637
+ /** Condition when this binding is active */
638
+ when?: KeyBindingCondition;
639
+ /** Priority (higher = checked first, default 0) */
640
+ priority?: number;
641
+ }
642
+ /**
643
+ * Configuration for the keyboard manager.
644
+ */
645
+ interface KeyBindingsConfig {
646
+ /** Custom bindings (added to defaults) */
647
+ bindings?: KeyBinding[];
648
+ /** Override specific default bindings by key */
649
+ overrides?: Record<string, Partial<KeyBinding>>;
650
+ /** Disable specific keys */
651
+ disabled?: string[];
652
+ }
653
+ //#endregion
654
+ //#region src/types/filter.types.d.ts
655
+ /**
656
+ * Filter state for log filtering.
657
+ */
658
+ interface FilterState {
659
+ /** Which log levels are enabled (shown) */
660
+ enabledLevels: Set<LogLevel>;
661
+ /** Text search query */
662
+ searchQuery: string;
663
+ /** Whether the filter bar is visible */
664
+ isVisible: boolean;
665
+ /** Which filter field is focused */
666
+ focusedField: 'search' | 'levels';
667
+ }
668
+ /**
669
+ * All log levels in order.
670
+ */
671
+ declare const ALL_LOG_LEVELS: LogLevel[];
672
+ /**
673
+ * Create a default filter state.
674
+ */
675
+ declare function createDefaultFilterState(): FilterState;
676
+ /**
677
+ * Check if any filtering is active.
678
+ */
679
+ declare function hasActiveFilter(filter: FilterState): boolean;
680
+ /**
681
+ * Level counts for display.
682
+ */
683
+ type LevelCounts = Record<LogLevel, number>;
684
+ //#endregion
685
+ //#region src/types/events.types.d.ts
686
+ interface ScreenManagerEventMap {
687
+ 'screen:added': [screenId: string];
688
+ 'screen:removed': [screenId: string];
689
+ 'screen:reordered': [];
690
+ 'activeScreen:changed': [screenId: string | null];
691
+ 'focus:changed': [area: FocusArea];
692
+ 'sidebar:indexChanged': [index: number];
693
+ 'mode:changed': [mode: RenderMode];
694
+ }
695
+ type ScreenManagerEventType = keyof ScreenManagerEventMap;
696
+ /**
697
+ * All manager events that adapters typically subscribe to for re-renders.
698
+ */
699
+ declare const MANAGER_EVENTS: ScreenManagerEventType[];
700
+ interface ScreenEventMap {
701
+ 'message:added': [messageId: string];
702
+ 'message:updated': [messageId: string];
703
+ 'messages:cleared': [];
704
+ 'status:changed': [status: ScreenStatus];
705
+ 'visibility:changed': [hidden: boolean];
706
+ 'badge:changed': [count: number];
707
+ 'prompt:activated': [];
708
+ 'prompt:updated': [];
709
+ 'prompt:resolved': [];
710
+ }
711
+ type ScreenEventType = keyof ScreenEventMap;
712
+ /**
713
+ * All screen events that adapters typically subscribe to for re-renders.
714
+ */
715
+ declare const SCREEN_EVENTS: ScreenEventType[];
716
+ /**
717
+ * Sidebar-specific events that require re-render.
718
+ */
719
+ declare const SIDEBAR_EVENTS: ScreenManagerEventType[];
720
+ /**
721
+ * Content area events that affect active screen changes.
722
+ */
723
+ declare const CONTENT_MANAGER_EVENTS: ScreenManagerEventType[];
724
+ //#endregion
8
725
  //#region src/schemas/screen-options.d.ts
9
726
  declare const ScreenOptionsSchema: z.ZodObject<{
10
727
  name: z.ZodString;
@@ -248,21 +965,6 @@ declare const PROMPT_COLORS: {
248
965
  };
249
966
  //#endregion
250
967
  //#region src/utils/colors/helpers.d.ts
251
- /**
252
- * Creates a tinted (subtle) version of a color by setting alpha.
253
- *
254
- * @param color - The base color (hex string or RGBA)
255
- * @param alpha - Target alpha value (0-1), default 0.08 for subtle tinting
256
- * @returns New RGBA with adjusted alpha
257
- */
258
- declare function createTintedColor(color: string | RGBA, alpha?: number): RGBA;
259
- /**
260
- * Creates a more prominent version of a color for borders.
261
- *
262
- * @param color - The base color
263
- * @param alpha - Target alpha, default 1.0 for solid borders
264
- */
265
- declare function createBorderColor(color: string | RGBA, alpha?: number): RGBA;
266
968
  /**
267
969
  * Gets colors for a specific log level.
268
970
  *
@@ -292,6 +994,11 @@ declare function resolveFiletype(filePath: string): string | undefined;
292
994
  declare function getFileName(filePath: string): string;
293
995
  //#endregion
294
996
  //#region src/utils/stdout-printer.d.ts
997
+ /**
998
+ * Print a single message to stdout with optional screen name prefix.
999
+ * Used for immediate output in stdout mode (when OpenTUI is not active).
1000
+ */
1001
+ declare function printSingleMessage(message: MessageData, screenName?: string, isError?: boolean): void;
295
1002
  /**
296
1003
  * Print all messages to stdout (or stderr if isError)
297
1004
  */
@@ -307,8 +1014,26 @@ declare function formatObject(obj: unknown, depth?: number, currentDepth?: numbe
307
1014
  */
308
1015
  declare function captureTrace(offset?: number): string;
309
1016
  //#endregion
1017
+ //#region src/utils/runtime.d.ts
1018
+ /**
1019
+ * Detect if running in Bun environment (OpenTUI is not supported in Bun)
1020
+ */
1021
+ declare function isBunRuntime(): boolean;
1022
+ /**
1023
+ * Dynamic import that bypasses bundler static analysis.
1024
+ * Uses Function constructor to prevent bundlers from resolving the import at build time.
1025
+ */
1026
+ declare function dynamicImport<T = unknown>(modulePath: string): Promise<T>;
1027
+ //#endregion
1028
+ //#region src/utils/prompt.d.ts
1029
+ /**
1030
+ * Get the default value for a prompt based on its type.
1031
+ * Used for resolving prompts when no interaction is possible.
1032
+ */
1033
+ declare function getPromptDefaultValue(prompt: PromptData): string | boolean | string[];
1034
+ //#endregion
310
1035
  //#region src/services/screen.d.ts
311
- declare class ScreenInstance {
1036
+ declare class ScreenInstance extends EventEmitter<ScreenEventMap> {
312
1037
  private id;
313
1038
  private name;
314
1039
  private icon?;
@@ -317,7 +1042,6 @@ declare class ScreenInstance {
317
1042
  private hidden;
318
1043
  private messages;
319
1044
  private manager;
320
- private changeListeners;
321
1045
  private printFn;
322
1046
  private hasPrinted;
323
1047
  private version;
@@ -345,7 +1069,12 @@ declare class ScreenInstance {
345
1069
  hide(): this;
346
1070
  getStatus(): ScreenStatus;
347
1071
  /**
348
- * Set screen status. When success/fail and TUI is not bound, prints to stdout/stderr
1072
+ * Check if a log level is enabled globally via the ScreenManager.
1073
+ * Returns true if no manager is set or if the level is allowed.
1074
+ */
1075
+ isLogLevelEnabled(level: LogLevel): boolean;
1076
+ /**
1077
+ * Set screen status. When success/fail and not in TUI mode, prints to stdout/stderr
349
1078
  */
350
1079
  setStatus(status: ScreenStatus): this;
351
1080
  /**
@@ -353,7 +1082,8 @@ declare class ScreenInstance {
353
1082
  */
354
1083
  isComplete(): boolean;
355
1084
  /**
356
- * Check if this screen has been printed to console
1085
+ * Check if this screen has been printed to console.
1086
+ * Static screens in non-TUI modes are considered printed as they print incrementally.
357
1087
  */
358
1088
  hasPrintedToConsole(): boolean;
359
1089
  /**
@@ -456,10 +1186,9 @@ declare class ScreenInstance {
456
1186
  */
457
1187
  private activateNextPrompt;
458
1188
  /**
459
- * Register a change listener for re-renders
1189
+ * Print a single message immediately to stdout (for static screens in stdout mode)
460
1190
  */
461
- onChange(listener: () => void): () => void;
462
- private notifyChange;
1191
+ private printSingleMessageToConsole;
463
1192
  /**
464
1193
  * Print all messages to stdout/stderr with ANSI colors
465
1194
  */
@@ -467,20 +1196,23 @@ declare class ScreenInstance {
467
1196
  }
468
1197
  //#endregion
469
1198
  //#region src/services/screen_manager.d.ts
470
- declare class ScreenManagerInstance implements OnServiceDestroy {
1199
+ declare class ScreenManagerInstance extends EventEmitter<ScreenManagerEventMap> implements OnServiceDestroy {
471
1200
  private screens;
472
1201
  private screenOrder;
473
1202
  private activeScreenId;
474
1203
  private renderer;
475
1204
  private root;
476
1205
  private adapter;
477
- private isBound;
478
- private changeListeners;
1206
+ private container;
1207
+ private mode;
1208
+ private readlinePromptService;
479
1209
  private bindOptions;
480
1210
  private autoCloseTimer;
481
1211
  private theme;
1212
+ private globalLogLevels;
482
1213
  focusArea: FocusArea;
483
1214
  selectedIndex: number;
1215
+ constructor();
484
1216
  /**
485
1217
  * Create a new screen and return it
486
1218
  */
@@ -494,24 +1226,73 @@ declare class ScreenManagerInstance implements OnServiceDestroy {
494
1226
  * Non-blocking bind - starts TUI rendering in background
495
1227
  */
496
1228
  bind(options?: BindOptions): Promise<void>;
1229
+ /**
1230
+ * Get the current render mode
1231
+ */
1232
+ getRenderMode(): RenderMode;
1233
+ /**
1234
+ * Check if TUI is interactive (any mode except UNBOUND).
1235
+ * In interactive modes, prompts can be handled via readline or TUI.
1236
+ */
1237
+ isInteractive(): boolean;
1238
+ /**
1239
+ * Check if TUI rendering is active (TUI_ACTIVE mode).
1240
+ * When true, screens are rendered in the TUI and not printed to stdout.
1241
+ */
1242
+ hasTuiRenderer(): boolean;
1243
+ /**
1244
+ * Handle a prompt via readline (for stdout modes)
1245
+ */
1246
+ handleReadlinePrompt(prompt: PromptData): Promise<string | boolean | string[]>;
497
1247
  /**
498
1248
  * Get the configured theme
499
1249
  */
500
1250
  getTheme(): Theme | undefined;
1251
+ /**
1252
+ * Setup global configuration for the screen manager.
1253
+ * Can be called before or after bind() to configure theme and log levels.
1254
+ */
1255
+ setup(options: SetupOptions): void;
1256
+ /**
1257
+ * Check if a log level is enabled globally.
1258
+ * Returns true if no global filter is set, or if the level is in the allowed set.
1259
+ */
1260
+ isLogLevelEnabled(level: LogLevel): boolean;
1261
+ /**
1262
+ * Get the current global log levels filter.
1263
+ * Returns null if no filter is set (all levels allowed).
1264
+ */
1265
+ getGlobalLogLevels(): LogLevel[] | null;
501
1266
  onServiceDestroy(): void;
502
1267
  /**
503
1268
  * Stop TUI rendering and cleanup
504
- * Flushes all completed screens to stdout/stderr
1269
+ * Flushes screens to stdout/stderr based on mode
505
1270
  */
506
1271
  unbind(): void;
507
1272
  /**
508
- * Print all completed screens that haven't been printed yet
1273
+ * Flush screens on exit based on the mode we're exiting from
1274
+ */
1275
+ private flushScreensOnExit;
1276
+ /**
1277
+ * Flush any remaining non-hidden screens that haven't been printed.
1278
+ * Called on destroy even in UNBOUND mode to handle forgotten completions.
509
1279
  */
510
- private flushCompletedScreens;
1280
+ private flushRemainingScreens;
511
1281
  /**
512
1282
  * Check if TUI is currently bound
1283
+ * @deprecated Use isInteractive() instead
513
1284
  */
514
1285
  isTuiBound(): boolean;
1286
+ /**
1287
+ * Check if TUI rendering is active (has renderer or self-rendering adapter).
1288
+ * @deprecated Use hasTuiRenderer() instead
1289
+ */
1290
+ isTuiRendererActive(): boolean;
1291
+ /**
1292
+ * Check if OpenTUI rendering is active (has renderer).
1293
+ * @deprecated Use hasTuiRenderer() instead
1294
+ */
1295
+ isOpenTUIActive(): boolean;
515
1296
  /**
516
1297
  * Called by Screen when a prompt becomes active
517
1298
  * Focuses the screen and switches to content area
@@ -585,11 +1366,6 @@ declare class ScreenManagerInstance implements OnServiceDestroy {
585
1366
  * Toggle focus between sidebar and content
586
1367
  */
587
1368
  toggleFocus(): void;
588
- /**
589
- * Register a change listener for re-renders
590
- */
591
- onChange(listener: () => void): () => void;
592
- private notifyChange;
593
1369
  private render;
594
1370
  }
595
1371
  //#endregion
@@ -623,6 +1399,33 @@ declare class PromptInstance {
623
1399
  multiChoice(options: MultiChoiceOptions): Promise<string[]>;
624
1400
  }
625
1401
  //#endregion
1402
+ //#region src/services/readline_prompt.d.ts
1403
+ /**
1404
+ * Readline-based prompt service for stdout mode.
1405
+ * Provides basic interactive prompts when TUI adapter is not available.
1406
+ */
1407
+ declare class ReadlinePromptService {
1408
+ private rl;
1409
+ private promptQueue;
1410
+ private isProcessing;
1411
+ private ensureInterface;
1412
+ /**
1413
+ * Handle a prompt interactively via readline.
1414
+ * Prompts are queued and processed sequentially.
1415
+ */
1416
+ handlePrompt(prompt: PromptData): Promise<string | boolean | string[]>;
1417
+ private processQueue;
1418
+ private processPrompt;
1419
+ private handleChoice;
1420
+ private handleConfirm;
1421
+ private handleInput;
1422
+ private handleMultiChoice;
1423
+ /**
1424
+ * Cleanup readline interface
1425
+ */
1426
+ destroy(): void;
1427
+ }
1428
+ //#endregion
626
1429
  //#region src/tokens/screen.d.ts
627
1430
  declare const Screen: InjectionToken<ScreenInstance, zod_v40.ZodObject<{
628
1431
  name: zod_v40.ZodString;
@@ -643,9 +1446,9 @@ declare const ScreenLogger: InjectionToken<ScreenLoggerInstance, zod_v40.ZodObje
643
1446
  }, zod_v4_core0.$strip>, zod_v40.ZodString]>>>;
644
1447
  context: zod_v40.ZodOptional<zod_v40.ZodString>;
645
1448
  enabledLevels: zod_v40.ZodDefault<zod_v40.ZodArray<zod_v40.ZodEnum<{
646
- log: "log";
647
1449
  verbose: "verbose";
648
1450
  debug: "debug";
1451
+ log: "log";
649
1452
  warn: "warn";
650
1453
  error: "error";
651
1454
  fatal: "fatal";
@@ -665,9 +1468,9 @@ declare const IsomorphicLogger: InjectionToken<IsomorphicLoggerInterface, zod_v4
665
1468
  }, zod_v4_core0.$strip>, zod_v40.ZodString]>>>;
666
1469
  context: zod_v40.ZodOptional<zod_v40.ZodString>;
667
1470
  enabledLevels: zod_v40.ZodDefault<zod_v40.ZodArray<zod_v40.ZodEnum<{
668
- log: "log";
669
1471
  verbose: "verbose";
670
1472
  debug: "debug";
1473
+ log: "log";
671
1474
  warn: "warn";
672
1475
  error: "error";
673
1476
  fatal: "fatal";
@@ -685,6 +1488,57 @@ declare const Prompt: InjectionToken<PromptInstance, zod_v40.ZodObject<{
685
1488
  }, zod_v4_core0.$strip>, zod_v40.ZodString]>>>;
686
1489
  }, zod_v4_core0.$strip>, true>;
687
1490
  //#endregion
1491
+ //#region src/adapters/interface.d.ts
1492
+ /**
1493
+ * Root instance returned by adapter's createRoot method.
1494
+ * Abstracts the framework-specific root implementation.
1495
+ */
1496
+ interface AdapterRoot {
1497
+ /**
1498
+ * Render an element to the root.
1499
+ * @param element - Framework-specific element to render
1500
+ */
1501
+ render(element: unknown): void;
1502
+ /**
1503
+ * Unmount and cleanup the root.
1504
+ */
1505
+ unmount(): void;
1506
+ }
1507
+ /**
1508
+ * Props passed to the adapter's internal bridge component.
1509
+ * The manager type is kept generic to avoid circular imports.
1510
+ */
1511
+ interface AdapterRenderProps {
1512
+ manager: unknown;
1513
+ theme?: Theme;
1514
+ }
1515
+ /**
1516
+ * Abstract interface for rendering adapters.
1517
+ * Implementations provide framework-specific rendering capabilities.
1518
+ */
1519
+ interface AdapterInterface {
1520
+ /**
1521
+ * Whether this adapter handles its own rendering without requiring
1522
+ * the ScreenManager to create an OpenTUI CliRenderer.
1523
+ * When true, createRoot() will be called without a renderer argument.
1524
+ * @default false
1525
+ */
1526
+ readonly handlesOwnRenderer?: boolean;
1527
+ /**
1528
+ * Create a root instance for rendering.
1529
+ * @param renderer - CLI renderer from @opentui/core (undefined if handlesOwnRenderer is true)
1530
+ * @returns Root instance with render/unmount methods, or a Promise that resolves to one
1531
+ */
1532
+ createRoot(renderer?: CliRenderer): AdapterRoot | Promise<AdapterRoot>;
1533
+ /**
1534
+ * Render the adapter's internal bridge component to the root.
1535
+ * The adapter owns its bridge component - no component is passed in.
1536
+ * @param root - Root instance created by createRoot
1537
+ * @param props - Props to pass to the bridge component
1538
+ */
1539
+ renderToRoot(root: AdapterRoot, props: AdapterRenderProps): void;
1540
+ }
1541
+ //#endregion
688
1542
  //#region src/tokens/adapter.d.ts
689
1543
  /**
690
1544
  * Injection token for the TUI rendering adapter.
@@ -716,7 +1570,17 @@ declare class ScreenFactory {
716
1570
  declare function overrideConsoleLogger(hidden?: boolean): ClassTypeWithInstance<LoggerService>;
717
1571
  //#endregion
718
1572
  //#region src/overrides/missing-adapter.override.d.ts
1573
+ /**
1574
+ * Fallback adapter that is used when no TUI adapter is registered.
1575
+ * The `isMissingAdapter` marker allows ScreenManager to detect this
1576
+ * and gracefully fall back to stdout mode instead of throwing.
1577
+ */
719
1578
  declare class MissingAdapterOverride implements AdapterInterface {
1579
+ /**
1580
+ * Marker property to identify this as the missing adapter fallback.
1581
+ * Used by ScreenManager.bind() to detect and handle graceful fallback.
1582
+ */
1583
+ readonly isMissingAdapter = true;
720
1584
  createRoot(): AdapterRoot;
721
1585
  renderToRoot(): void;
722
1586
  }
@@ -870,5 +1734,5 @@ declare class FilterEngine {
870
1734
  static countByLevel(messages: MessageData[]): LevelCounts;
871
1735
  }
872
1736
  //#endregion
873
- export { ALL_LOG_LEVELS, Adapter, AdapterInterface, AdapterRenderProps, AdapterRoot, BaseMessage, BasePromptData, BindOptions, BindingHandlers, COMMON_FILETYPES, ChoiceOption, ChoiceOptions, ChoicePromptData, ConfirmOptions, ConfirmPromptData, DEFAULT_LOG_LEVEL_COLORS, DeepPartial, DiffMessageData, ERROR_HIGHLIGHT_COLORS, ErrorHighlightTheme, FILE_COLORS, FileErrorMessageData, FileLogBaseProps, FileLogDiffProps, FileLogFullProps, FileLogMode, FileLogPartialProps, FileLogProps, FileMessageData, FileTheme, FilterEngine, FilterState, FilterTheme, FocusArea, GROUP_COLORS, GroupMessageData, GroupTheme, HEADER_COLORS, HeaderTheme, HelpTheme, InputOptions, InputPromptData, IsomorphicLogger, IsomorphicLoggerFactory, IsomorphicLoggerInterface, KeyBinding, KeyBindingCategory, KeyBindingCondition, KeyBindingsConfig, KeyEvent, KeyHandler, KeyboardContext, KeyboardManager, LevelCounts, LoadingHandle, LoadingMessageData, LogLevelColorMap, LogLevelColors, LogLevelTheme, LogMessageData, LogMessageProps, LogMessageVariant, LoggerContextValue, LoggerOptions, LoggerOptionsSchema, MessageData, MessageType, MissingAdapterOverride, MultiChoiceOptions, MultiChoicePromptData, PROGRESS_COLORS, PROMPT_COLORS, PartialTheme, ProgressHandle, ProgressMessageData, ProgressTheme, PromiseOptions, Prompt, PromptData, PromptInstance, PromptOptions, PromptOptionsSchema, PromptTheme, SEPARATOR_COLORS, SIDEBAR_COLORS, STATUS_INDICATORS, Screen, ScreenDefinition, ScreenFactory, ScreenInstance, ScreenLogger, ScreenLoggerInstance, ScreenManager, ScreenManagerInstance, ScreenManagerProps, ScreenOptions, ScreenOptionsSchema, ScreenProps, ScreenStatus, SemanticColors, SeparatorTheme, SidebarTheme, StatusIndicator, StatusIndicatorsTheme, TABLE_COLORS, TableMessageData, TableTheme, Theme, ThemePreset, VARIANT_COLORS, VariantColorMap, captureTrace, createBorderColor, createDefaultBindings, createDefaultFilterState, createTheme, createThemeFrom, createTintedColor, darkTheme, formatKeyBinding, formatObject, getFileName, getLogLevelColors, getThemePreset, handlePrintableInput, hasActiveFilter, highContrastTheme, lightTheme, mergeThemes, overrideConsoleLogger, printMessagesToStdout, resolveFiletype, resolveTheme };
1737
+ export { ALL_LOG_LEVELS, Adapter, AdapterInterface, AdapterRenderProps, AdapterRoot, BaseMessage, BasePromptData, BindOptions, BindingHandlers, COMMON_FILETYPES, CONTENT_MANAGER_EVENTS, ChoiceOption, ChoiceOptions, ChoicePromptData, ConfirmOptions, ConfirmPromptData, DEFAULT_LOG_LEVEL_COLORS, DeepPartial, DiffMessageData, ERROR_HIGHLIGHT_COLORS, ErrorHighlightTheme, FILE_COLORS, FileErrorMessageData, FileLogBaseProps, FileLogDiffProps, FileLogFullProps, FileLogMode, FileLogPartialProps, FileLogProps, FileMessageData, FileTheme, FilterEngine, FilterState, FilterTheme, FocusArea, GROUP_COLORS, GroupMessageData, GroupTheme, HEADER_COLORS, HeaderTheme, HelpTheme, InputOptions, InputPromptData, IsomorphicLogger, IsomorphicLoggerFactory, IsomorphicLoggerInterface, KeyBinding, KeyBindingCategory, KeyBindingCondition, KeyBindingsConfig, KeyEvent, KeyHandler, KeyboardContext, KeyboardManager, LevelCounts, LoadingHandle, LoadingMessageData, LogLevelColorMap, LogLevelColors, LogLevelTheme, LogMessageData, LogMessageProps, LogMessageVariant, LoggerContextValue, LoggerOptions, LoggerOptionsSchema, MANAGER_EVENTS, MessageData, MessageType, MissingAdapterOverride, MultiChoiceOptions, MultiChoicePromptData, PROGRESS_COLORS, PROMPT_COLORS, PartialTheme, ProgressHandle, ProgressMessageData, ProgressTheme, PromiseOptions, Prompt, PromptData, PromptInstance, PromptOptions, PromptOptionsSchema, PromptTheme, ReadlinePromptService, RenderMode, SCREEN_EVENTS, SEPARATOR_COLORS, SIDEBAR_COLORS, SIDEBAR_EVENTS, STATUS_INDICATORS, Screen, ScreenDefinition, ScreenEventMap, ScreenEventType, ScreenFactory, ScreenInstance, ScreenLogger, ScreenLoggerInstance, ScreenManager, ScreenManagerEventMap, ScreenManagerEventType, ScreenManagerInstance, ScreenManagerProps, ScreenOptions, ScreenOptionsSchema, ScreenProps, ScreenStatus, SemanticColors, SeparatorTheme, SetupOptions, SidebarTheme, StatusIndicator, StatusIndicatorsTheme, TABLE_COLORS, TableMessageData, TableTheme, Theme, ThemePreset, VARIANT_COLORS, VariantColorMap, captureTrace, createDefaultBindings, createDefaultFilterState, createTheme, createThemeFrom, darkTheme, dynamicImport, formatKeyBinding, formatObject, getFileName, getLogLevelColors, getPromptDefaultValue, getThemePreset, handlePrintableInput, hasActiveFilter, highContrastTheme, isBunRuntime, lightTheme, mergeThemes, overrideConsoleLogger, printMessagesToStdout, printSingleMessage, resolveFiletype, resolveTheme };
874
1738
  //# sourceMappingURL=index.d.mts.map