@compilr-dev/cli 0.4.0 → 0.5.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 (315) hide show
  1. package/README.md +30 -12
  2. package/dist/agent.d.ts +74 -1
  3. package/dist/agent.js +259 -76
  4. package/dist/anchors/index.d.ts +9 -0
  5. package/dist/anchors/index.js +9 -0
  6. package/dist/anchors/project-anchors.d.ts +79 -0
  7. package/dist/anchors/project-anchors.js +202 -0
  8. package/dist/commands/handler-types.d.ts +68 -0
  9. package/dist/commands/handler-types.js +8 -0
  10. package/dist/commands/handlers/agent-commands.d.ts +13 -0
  11. package/dist/commands/handlers/agent-commands.js +305 -0
  12. package/dist/commands/handlers/design-commands.d.ts +15 -0
  13. package/dist/commands/handlers/design-commands.js +334 -0
  14. package/dist/commands/handlers/index.d.ts +20 -0
  15. package/dist/commands/handlers/index.js +43 -0
  16. package/dist/commands/handlers/overlay-commands.d.ts +21 -0
  17. package/dist/commands/handlers/overlay-commands.js +287 -0
  18. package/dist/commands/handlers/project-commands.d.ts +11 -0
  19. package/dist/commands/handlers/project-commands.js +167 -0
  20. package/dist/commands/handlers/simple-commands.d.ts +19 -0
  21. package/dist/commands/handlers/simple-commands.js +144 -0
  22. package/dist/commands/index.d.ts +2 -1
  23. package/dist/commands/registry.d.ts +50 -0
  24. package/dist/commands/registry.js +75 -0
  25. package/dist/commands-v2/handlers/context.d.ts +13 -0
  26. package/dist/commands-v2/handlers/context.js +348 -0
  27. package/dist/commands-v2/handlers/core.d.ts +13 -0
  28. package/dist/commands-v2/handlers/core.js +165 -0
  29. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  30. package/dist/commands-v2/handlers/debug.js +159 -0
  31. package/dist/commands-v2/handlers/index.d.ts +12 -0
  32. package/dist/commands-v2/handlers/index.js +24 -0
  33. package/dist/commands-v2/handlers/project.d.ts +22 -0
  34. package/dist/commands-v2/handlers/project.js +814 -0
  35. package/dist/commands-v2/handlers/settings.d.ts +15 -0
  36. package/dist/commands-v2/handlers/settings.js +235 -0
  37. package/dist/commands-v2/index.d.ts +13 -0
  38. package/dist/commands-v2/index.js +15 -0
  39. package/dist/commands-v2/registry.d.ts +37 -0
  40. package/dist/commands-v2/registry.js +80 -0
  41. package/dist/commands-v2/types.d.ts +75 -0
  42. package/dist/commands-v2/types.js +7 -0
  43. package/dist/commands.js +110 -7
  44. package/dist/index.js +288 -29
  45. package/dist/input-handlers/index.d.ts +7 -0
  46. package/dist/input-handlers/index.js +7 -0
  47. package/dist/input-handlers/memory-handler.d.ts +26 -0
  48. package/dist/input-handlers/memory-handler.js +68 -0
  49. package/dist/repl-helpers.d.ts +63 -0
  50. package/dist/repl-helpers.js +318 -0
  51. package/dist/repl-v2.d.ts +155 -0
  52. package/dist/repl-v2.js +774 -0
  53. package/dist/repl.d.ts +32 -4
  54. package/dist/repl.js +250 -977
  55. package/dist/settings/index.d.ts +23 -0
  56. package/dist/settings/index.js +48 -0
  57. package/dist/settings/paths.d.ts +110 -0
  58. package/dist/settings/paths.js +264 -0
  59. package/dist/templates/compilr-md.js +7 -4
  60. package/dist/templates/index.js +3 -4
  61. package/dist/themes/colors.js +3 -1
  62. package/dist/themes/registry.d.ts +5 -36
  63. package/dist/themes/registry.js +11 -95
  64. package/dist/themes/types.d.ts +3 -38
  65. package/dist/themes/types.js +2 -2
  66. package/dist/tools/anchor-tools.d.ts +31 -0
  67. package/dist/tools/anchor-tools.js +255 -0
  68. package/dist/tools/backlog-wrappers.d.ts +54 -0
  69. package/dist/tools/backlog-wrappers.js +338 -0
  70. package/dist/tools/backlog.js +1 -1
  71. package/dist/tools/db-tools.d.ts +65 -0
  72. package/dist/tools/db-tools.js +19 -0
  73. package/dist/tools/document-db.d.ts +43 -0
  74. package/dist/tools/document-db.js +220 -0
  75. package/dist/tools/project-db.d.ts +102 -0
  76. package/dist/tools/project-db.js +370 -0
  77. package/dist/tools/workitem-db.d.ts +103 -0
  78. package/dist/tools/workitem-db.js +549 -0
  79. package/dist/tools.js +13 -3
  80. package/dist/ui/agents-overlay-v2.d.ts +43 -0
  81. package/dist/ui/agents-overlay-v2.js +809 -0
  82. package/dist/ui/agents-overlay.d.ts +5 -5
  83. package/dist/ui/agents-overlay.js +782 -420
  84. package/dist/ui/anchors-overlay.d.ts +12 -0
  85. package/dist/ui/anchors-overlay.js +775 -0
  86. package/dist/ui/arch-type-overlay.d.ts +1 -6
  87. package/dist/ui/arch-type-overlay.js +175 -203
  88. package/dist/ui/ask-user-overlay-v2.d.ts +26 -0
  89. package/dist/ui/ask-user-overlay-v2.js +555 -0
  90. package/dist/ui/ask-user-overlay.d.ts +2 -2
  91. package/dist/ui/ask-user-overlay.js +443 -535
  92. package/dist/ui/ask-user-simple-overlay-v2.d.ts +25 -0
  93. package/dist/ui/ask-user-simple-overlay-v2.js +215 -0
  94. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  95. package/dist/ui/ask-user-simple-overlay.js +182 -209
  96. package/dist/ui/backlog-overlay.d.ts +16 -1
  97. package/dist/ui/backlog-overlay.js +525 -659
  98. package/dist/ui/base/index.d.ts +26 -0
  99. package/dist/ui/base/index.js +33 -0
  100. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  101. package/dist/ui/base/inline-overlay-utils.js +320 -0
  102. package/dist/ui/base/inline-overlay.d.ts +159 -0
  103. package/dist/ui/base/inline-overlay.js +257 -0
  104. package/dist/ui/base/key-utils.d.ts +15 -0
  105. package/dist/ui/base/key-utils.js +30 -0
  106. package/dist/ui/base/overlay-base-v2.d.ts +193 -0
  107. package/dist/ui/base/overlay-base-v2.js +246 -0
  108. package/dist/ui/base/overlay-base.d.ts +156 -0
  109. package/dist/ui/base/overlay-base.js +238 -0
  110. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  111. package/dist/ui/base/overlay-lifecycle.js +159 -0
  112. package/dist/ui/base/overlay-types.d.ts +185 -0
  113. package/dist/ui/base/overlay-types.js +7 -0
  114. package/dist/ui/base/render-utils.d.ts +8 -0
  115. package/dist/ui/base/render-utils.js +11 -0
  116. package/dist/ui/base/screen-stack.d.ts +148 -0
  117. package/dist/ui/base/screen-stack.js +184 -0
  118. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +103 -0
  119. package/dist/ui/base/tabbed-list-overlay-v2.js +317 -0
  120. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  121. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  122. package/dist/ui/commands-overlay-v2.d.ts +33 -0
  123. package/dist/ui/commands-overlay-v2.js +441 -0
  124. package/dist/ui/commands-overlay.d.ts +7 -2
  125. package/dist/ui/commands-overlay.js +384 -355
  126. package/dist/ui/config-overlay.d.ts +5 -4
  127. package/dist/ui/config-overlay.js +243 -513
  128. package/dist/ui/conversation.d.ts +75 -4
  129. package/dist/ui/conversation.js +374 -161
  130. package/dist/ui/docs-overlay.d.ts +17 -0
  131. package/dist/ui/docs-overlay.js +303 -0
  132. package/dist/ui/ephemeral.d.ts +1 -1
  133. package/dist/ui/ephemeral.js +1 -1
  134. package/dist/ui/features/index.d.ts +34 -0
  135. package/dist/ui/features/index.js +34 -0
  136. package/dist/ui/features/input-feature.d.ts +85 -0
  137. package/dist/ui/features/input-feature.js +238 -0
  138. package/dist/ui/features/list-feature.d.ts +155 -0
  139. package/dist/ui/features/list-feature.js +244 -0
  140. package/dist/ui/features/pagination-feature.d.ts +154 -0
  141. package/dist/ui/features/pagination-feature.js +238 -0
  142. package/dist/ui/features/search-feature.d.ts +148 -0
  143. package/dist/ui/features/search-feature.js +185 -0
  144. package/dist/ui/features/tab-feature.d.ts +194 -0
  145. package/dist/ui/features/tab-feature.js +307 -0
  146. package/dist/ui/footer-v2.d.ts +222 -0
  147. package/dist/ui/footer-v2.js +1349 -0
  148. package/dist/ui/footer.d.ts +107 -0
  149. package/dist/ui/footer.js +359 -67
  150. package/dist/ui/guardrail-overlay.d.ts +29 -0
  151. package/dist/ui/guardrail-overlay.js +145 -0
  152. package/dist/ui/help-overlay-v2.d.ts +34 -0
  153. package/dist/ui/help-overlay-v2.js +309 -0
  154. package/dist/ui/help-overlay.d.ts +16 -0
  155. package/dist/ui/help-overlay.js +316 -0
  156. package/dist/ui/index.d.ts +1 -1
  157. package/dist/ui/index.js +1 -3
  158. package/dist/ui/init-overlay-v2.d.ts +34 -0
  159. package/dist/ui/init-overlay-v2.js +600 -0
  160. package/dist/ui/init-overlay.d.ts +12 -2
  161. package/dist/ui/init-overlay.js +349 -270
  162. package/dist/ui/input-prompt-v2.d.ts +1 -0
  163. package/dist/ui/input-prompt-v2.js +14 -6
  164. package/dist/ui/input-prompt.d.ts +116 -33
  165. package/dist/ui/input-prompt.js +536 -337
  166. package/dist/ui/iteration-limit-overlay-v2.d.ts +21 -0
  167. package/dist/ui/iteration-limit-overlay-v2.js +114 -0
  168. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  169. package/dist/ui/iteration-limit-overlay.js +92 -128
  170. package/dist/ui/keys-overlay-v2.d.ts +41 -0
  171. package/dist/ui/keys-overlay-v2.js +248 -0
  172. package/dist/ui/keys-overlay.d.ts +1 -0
  173. package/dist/ui/keys-overlay.js +203 -141
  174. package/dist/ui/line-utils.d.ts +88 -0
  175. package/dist/ui/line-utils.js +150 -0
  176. package/dist/ui/live-region.d.ts +161 -0
  177. package/dist/ui/live-region.js +387 -0
  178. package/dist/ui/mascot/expressions.d.ts +32 -0
  179. package/dist/ui/mascot/expressions.js +213 -0
  180. package/dist/ui/mascot/index.d.ts +8 -0
  181. package/dist/ui/mascot/index.js +8 -0
  182. package/dist/ui/mascot/renderer.d.ts +19 -0
  183. package/dist/ui/mascot/renderer.js +97 -0
  184. package/dist/ui/mascot-overlay-v2.d.ts +41 -0
  185. package/dist/ui/mascot-overlay-v2.js +138 -0
  186. package/dist/ui/mascot-overlay.d.ts +21 -0
  187. package/dist/ui/mascot-overlay.js +146 -0
  188. package/dist/ui/model-overlay-v2.d.ts +49 -0
  189. package/dist/ui/model-overlay-v2.js +118 -0
  190. package/dist/ui/model-overlay.d.ts +27 -0
  191. package/dist/ui/model-overlay.js +221 -0
  192. package/dist/ui/model-warning-overlay.js +3 -5
  193. package/dist/ui/new-overlay.d.ts +34 -0
  194. package/dist/ui/new-overlay.js +604 -0
  195. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  196. package/dist/ui/overlay/impl/agents-overlay-v2.js +825 -0
  197. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  198. package/dist/ui/overlay/impl/anchors-overlay-v2.js +783 -0
  199. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  200. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  201. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  202. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +584 -0
  203. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  204. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  205. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +49 -0
  206. package/dist/ui/overlay/impl/backlog-overlay-v2.js +642 -0
  207. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  208. package/dist/ui/overlay/impl/commands-overlay-v2.js +441 -0
  209. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +100 -0
  210. package/dist/ui/overlay/impl/config-overlay-v2.js +654 -0
  211. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +55 -0
  212. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +359 -0
  213. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  214. package/dist/ui/overlay/impl/docs-overlay-v2.js +114 -0
  215. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +77 -0
  216. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1071 -0
  217. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  218. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  219. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +34 -0
  220. package/dist/ui/overlay/impl/help-overlay-v2.js +309 -0
  221. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +77 -0
  222. package/dist/ui/overlay/impl/init-overlay-v2.js +593 -0
  223. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  224. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  225. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  226. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  227. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  228. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  229. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  230. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  231. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +49 -0
  232. package/dist/ui/overlay/impl/model-overlay-v2.js +118 -0
  233. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  234. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  235. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +77 -0
  236. package/dist/ui/overlay/impl/new-overlay-v2.js +593 -0
  237. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  238. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  239. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +36 -0
  240. package/dist/ui/overlay/impl/projects-overlay-v2.js +499 -0
  241. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  242. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  243. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  244. package/dist/ui/overlay/impl/tools-overlay-v2.js +218 -0
  245. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +31 -0
  246. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +1035 -0
  247. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  248. package/dist/ui/overlay/impl/workflow-overlay-v2.js +637 -0
  249. package/dist/ui/overlay/index.d.ts +33 -0
  250. package/dist/ui/overlay/index.js +35 -0
  251. package/dist/ui/overlay/key-utils.d.ts +6 -0
  252. package/dist/ui/overlay/key-utils.js +6 -0
  253. package/dist/ui/overlay/overlay-types.d.ts +128 -0
  254. package/dist/ui/overlay/overlay-types.js +22 -0
  255. package/dist/ui/overlay/types.d.ts +135 -0
  256. package/dist/ui/overlay/types.js +22 -0
  257. package/dist/ui/overlays/help-overlay-v2.d.ts +28 -0
  258. package/dist/ui/overlays/help-overlay-v2.js +198 -0
  259. package/dist/ui/overlays/index.d.ts +11 -0
  260. package/dist/ui/overlays/index.js +11 -0
  261. package/dist/ui/overlays.d.ts +0 -4
  262. package/dist/ui/overlays.js +0 -444
  263. package/dist/ui/permission-overlay-v2.d.ts +36 -0
  264. package/dist/ui/permission-overlay-v2.js +380 -0
  265. package/dist/ui/permission-overlay.d.ts +1 -1
  266. package/dist/ui/permission-overlay.js +186 -298
  267. package/dist/ui/projects-overlay.d.ts +19 -0
  268. package/dist/ui/projects-overlay.js +484 -0
  269. package/dist/ui/providers/types.d.ts +178 -0
  270. package/dist/ui/providers/types.js +9 -0
  271. package/dist/ui/render-modes.d.ts +36 -0
  272. package/dist/ui/render-modes.js +44 -0
  273. package/dist/ui/startup-menu.d.ts +36 -0
  274. package/dist/ui/startup-menu.js +236 -0
  275. package/dist/ui/subagent-renderer.d.ts +117 -0
  276. package/dist/ui/subagent-renderer.js +334 -0
  277. package/dist/ui/terminal-codes.d.ts +94 -0
  278. package/dist/ui/terminal-codes.js +124 -0
  279. package/dist/ui/terminal-renderer.d.ts +221 -0
  280. package/dist/ui/terminal-renderer.js +751 -0
  281. package/dist/ui/terminal-ui.d.ts +463 -0
  282. package/dist/ui/terminal-ui.js +2296 -0
  283. package/dist/ui/terminal.d.ts +20 -0
  284. package/dist/ui/terminal.js +72 -0
  285. package/dist/ui/theme-overlay-v2.d.ts +42 -0
  286. package/dist/ui/theme-overlay-v2.js +135 -0
  287. package/dist/ui/theme-overlay.d.ts +24 -0
  288. package/dist/ui/theme-overlay.js +127 -0
  289. package/dist/ui/todo-zone.js +53 -25
  290. package/dist/ui/tool-formatters.d.ts +16 -0
  291. package/dist/ui/tool-formatters.js +516 -0
  292. package/dist/ui/tools-overlay-v2.d.ts +47 -0
  293. package/dist/ui/tools-overlay-v2.js +218 -0
  294. package/dist/ui/tools-overlay.d.ts +10 -2
  295. package/dist/ui/tools-overlay.js +172 -220
  296. package/dist/ui/tutorial-overlay-v2.d.ts +31 -0
  297. package/dist/ui/tutorial-overlay-v2.js +1035 -0
  298. package/dist/ui/tutorial-overlay.d.ts +1 -0
  299. package/dist/ui/tutorial-overlay.js +400 -302
  300. package/dist/ui/workflow-overlay.d.ts +22 -0
  301. package/dist/ui/workflow-overlay.js +636 -0
  302. package/dist/utils/debug-log.d.ts +28 -0
  303. package/dist/utils/debug-log.js +57 -0
  304. package/dist/utils/model-tiers.js +1 -1
  305. package/dist/utils/path-safety.d.ts +56 -0
  306. package/dist/utils/path-safety.js +239 -0
  307. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  308. package/dist/workflow/guided-mode-injector.js +191 -0
  309. package/dist/workflow/index.d.ts +8 -0
  310. package/dist/workflow/index.js +8 -0
  311. package/dist/workflow/step-criteria.d.ts +62 -0
  312. package/dist/workflow/step-criteria.js +150 -0
  313. package/dist/workflow/step-tracker.d.ts +92 -0
  314. package/dist/workflow/step-tracker.js +141 -0
  315. package/package.json +12 -5
@@ -0,0 +1,463 @@
1
+ /**
2
+ * TerminalUI - Single Renderer for Terminal Applications
3
+ *
4
+ * Single point of control for all terminal UI:
5
+ * - Owns all rendering decisions (when to clear, when to render)
6
+ * - Owns all UI state (agentRunning, todos, currentTool, etc.)
7
+ * - Provides output methods that handle clear/render automatically
8
+ * - Manages overlays (render, input routing)
9
+ * - REPL emits events, doesn't manage rendering timing
10
+ *
11
+ * Key principles:
12
+ * - NO scroll regions (preserves terminal scrollback)
13
+ * - Deterministic render cycle
14
+ * - All output goes through TerminalUI (no external console.log)
15
+ */
16
+ import { EventEmitter } from 'events';
17
+ import type { TodoItem, AgentMode } from './types.js';
18
+ import type { Overlay } from './overlay/index.js';
19
+ import { LiveRegion, type LiveItem, type SubagentLiveItem } from './live-region.js';
20
+ /**
21
+ * Message to be sent to the agent from a command.
22
+ * Allows commands to invoke the agent with a detailed prompt while
23
+ * showing a simpler message to the user.
24
+ */
25
+ export interface AgentMessage {
26
+ /** Full message to send to the agent */
27
+ message: string;
28
+ /** Optional: Simpler message to display to user (defaults to message) */
29
+ displayMessage?: string;
30
+ }
31
+ export interface TerminalUIEvents {
32
+ submit: (input: string) => void;
33
+ command: (command: string, args: string) => void;
34
+ cancel: () => void;
35
+ escape: () => void;
36
+ interrupt: () => void;
37
+ modeChange: () => void;
38
+ }
39
+ /**
40
+ * Configuration for TerminalUI rendering behavior.
41
+ * Can be changed at runtime via setConfig().
42
+ */
43
+ export interface TerminalUIConfig {
44
+ verbose: boolean;
45
+ theme: string;
46
+ showMascot: boolean;
47
+ }
48
+ export declare const DEFAULT_TERMINAL_UI_CONFIG: TerminalUIConfig;
49
+ export interface TerminalUIOptions {
50
+ prompt?: string;
51
+ initialMode?: AgentMode;
52
+ config?: Partial<TerminalUIConfig>;
53
+ }
54
+ /**
55
+ * Represents a semantic item that can be printed to the scrolling zone.
56
+ * TerminalUI handles all formatting based on the item type and config.
57
+ *
58
+ * Items are stored in conversation history for re-rendering when config changes.
59
+ */
60
+ export type PrintableItem = {
61
+ type: 'user-message';
62
+ text: string;
63
+ } | {
64
+ type: 'agent-text';
65
+ text: string;
66
+ expression?: MascotExpression;
67
+ } | {
68
+ type: 'thinking';
69
+ text: string;
70
+ } | {
71
+ type: 'tool-start';
72
+ name: string;
73
+ params: string;
74
+ } | {
75
+ type: 'tool-result';
76
+ name: string;
77
+ params: string;
78
+ summary: string;
79
+ content?: string;
80
+ success?: boolean;
81
+ } | {
82
+ type: 'tool-error';
83
+ name: string;
84
+ params: string;
85
+ error: string;
86
+ } | {
87
+ type: 'interrupted';
88
+ action?: string;
89
+ suggestion?: string;
90
+ } | {
91
+ type: 'error';
92
+ message: string;
93
+ } | {
94
+ type: 'success';
95
+ message: string;
96
+ } | {
97
+ type: 'info';
98
+ message: string;
99
+ } | {
100
+ type: 'warning';
101
+ message: string;
102
+ } | {
103
+ type: 'raw';
104
+ text: string;
105
+ } | {
106
+ type: 'raw-lines';
107
+ lines: string[];
108
+ };
109
+ /**
110
+ * Inline mascot expressions for agent identity and state feedback.
111
+ * Used to prefix agent messages and in spinner animations.
112
+ */
113
+ export declare const MASCOT: {
114
+ readonly neutral: "[•_•]";
115
+ readonly thinking: "[°_°]";
116
+ readonly searching: "[◐_◐]";
117
+ readonly success: "[^_^]";
118
+ readonly error: "[×_×]";
119
+ readonly confused: "[?_?]";
120
+ readonly working: "[•̀_•́]";
121
+ readonly crt: readonly ["[░░░]", "[▒░░]", "[░▒░]", "[░░▒]", "[░▒░]", "[▒░░]"];
122
+ };
123
+ export type MascotExpression = 'neutral' | 'thinking' | 'searching' | 'success' | 'error' | 'confused' | 'working';
124
+ export declare class TerminalUI extends EventEmitter {
125
+ private promptPrefix;
126
+ private promptPrefixLen;
127
+ private config;
128
+ private conversationHistory;
129
+ private lines;
130
+ private currentLine;
131
+ private cursorPos;
132
+ private mode;
133
+ private projectName;
134
+ private todos;
135
+ private spinnerText;
136
+ private spinnerFrame;
137
+ private agentRunning;
138
+ private queuedInputs;
139
+ private agentMessageQueue;
140
+ private currentTool;
141
+ private readonly liveRegion;
142
+ private readonly autocomplete;
143
+ private readonly fileAutocomplete;
144
+ private readonly history;
145
+ private historyIndex;
146
+ private savedInput;
147
+ private lastRenderHeight;
148
+ private cursorLineFromBottom;
149
+ private isRunning;
150
+ private isPaused;
151
+ private renderTimer;
152
+ private needsRender;
153
+ private lastEscapeTime;
154
+ private suggestion;
155
+ private showTodos;
156
+ private viewMode;
157
+ private readonly spinnerFrames;
158
+ private spinnerTimer;
159
+ private readonly overlayStack;
160
+ private readonly overlayResolvers;
161
+ private overlayRenderState;
162
+ private overlayPrintBuffer;
163
+ constructor(options?: TerminalUIOptions);
164
+ /** Get the full input value (all lines joined with newlines) */
165
+ private getInputValue;
166
+ /** Get the current line content */
167
+ private getCurrentLineContent;
168
+ /** Clear input and reset to single empty line */
169
+ private clearInput;
170
+ start(): void;
171
+ stop(): void;
172
+ /**
173
+ * Print a semantic item to the scrolling zone.
174
+ * Items are stored in conversation history for re-rendering when config changes.
175
+ *
176
+ * IMPORTANT: When an overlay is active, items are buffered and rendered after
177
+ * the overlay closes. This prevents cursor position corruption that causes
178
+ * ghost lines and visual artifacts.
179
+ */
180
+ print(item: PrintableItem): void;
181
+ /**
182
+ * Render a single item to the console.
183
+ * Config-aware: respects verbose, showMascot settings.
184
+ */
185
+ private renderItem;
186
+ /**
187
+ * Execute a callback that outputs to terminal.
188
+ * Handles clear → callback → render automatically.
189
+ * Use this for complex output that needs multiple console.log calls.
190
+ * @deprecated Prefer using print() with PrintableItem
191
+ */
192
+ output(callback: () => void): void;
193
+ setAgentRunning(running: boolean): void;
194
+ isAgentRunning(): boolean;
195
+ setTodos(todos: TodoItem[]): void;
196
+ getTodos(): TodoItem[];
197
+ setSpinnerText(text: string | null): void;
198
+ setCurrentTool(tool: string | null): void;
199
+ setMode(mode: AgentMode): void;
200
+ getMode(): AgentMode;
201
+ setProjectName(name: string | null): void;
202
+ getProjectName(): string | null;
203
+ /**
204
+ * Set ghost text suggestion (shown when input is empty)
205
+ */
206
+ setSuggestion(text: string | null): void;
207
+ getSuggestion(): string | null;
208
+ clearSuggestion(): void;
209
+ /**
210
+ * Add a subagent to the live region.
211
+ */
212
+ addSubagent(id: string, agentType: string, description: string): void;
213
+ /**
214
+ * Update a subagent's tool usage.
215
+ */
216
+ updateSubagentTool(id: string, toolName: string, summary: string): void;
217
+ /**
218
+ * Mark a subagent as completed.
219
+ */
220
+ completeSubagent(id: string, success: boolean, tokenCount?: number, _error?: string): void;
221
+ /**
222
+ * Remove a subagent and return it for committing to scrolling zone.
223
+ */
224
+ removeSubagent(id: string): LiveItem | undefined;
225
+ /**
226
+ * Clear all subagents from live region.
227
+ */
228
+ clearLiveRegion(): void;
229
+ /**
230
+ * Toggle expanded view in live region (Ctrl+O).
231
+ */
232
+ toggleLiveRegionExpanded(): void;
233
+ /**
234
+ * Check if live region has items.
235
+ */
236
+ hasLiveItems(): boolean;
237
+ /**
238
+ * Get live region for direct access if needed.
239
+ */
240
+ getLiveRegion(): LiveRegion;
241
+ /**
242
+ * Add a bash command to the live region.
243
+ */
244
+ addBashCommand(id: string, command: string): void;
245
+ /**
246
+ * Add output line to a bash command.
247
+ */
248
+ updateBashOutput(id: string, line: string): void;
249
+ /**
250
+ * Mark a bash command as completed.
251
+ */
252
+ completeBashCommand(id: string, exitCode: number): void;
253
+ /**
254
+ * Remove a bash command and commit it to the scrolling zone.
255
+ */
256
+ commitBashCommand(id: string): void;
257
+ /**
258
+ * Remove a subagent and commit it to the scrolling zone.
259
+ * This is the atomic equivalent of commitBashCommand for subagents.
260
+ * The result content comes from tool_end, not from the LiveRegion item.
261
+ */
262
+ commitSubagent(id: string, resultContent: string, success: boolean): SubagentLiveItem | undefined;
263
+ /**
264
+ * Format token count (e.g., 5000 -> "5.0k")
265
+ */
266
+ private formatTokens;
267
+ /**
268
+ * Toggle todo list visibility (Ctrl+T)
269
+ */
270
+ toggleTodos(): void;
271
+ /**
272
+ * Set todo list visibility
273
+ */
274
+ setShowTodos(show: boolean): void;
275
+ /**
276
+ * Get todo list visibility
277
+ */
278
+ getShowTodos(): boolean;
279
+ /**
280
+ * Toggle verbose view mode (Ctrl+O)
281
+ * Shows conversation in verbose mode temporarily.
282
+ * Any key returns to normal view.
283
+ */
284
+ toggleVerboseView(): void;
285
+ /**
286
+ * Re-render conversation with temporary verbose setting.
287
+ */
288
+ private reRenderConversationVerbose;
289
+ /**
290
+ * Update configuration at runtime.
291
+ * If verbose changes, re-renders the entire conversation.
292
+ */
293
+ setConfig(newConfig: Partial<TerminalUIConfig>): void;
294
+ /**
295
+ * Get current configuration.
296
+ */
297
+ getConfig(): TerminalUIConfig;
298
+ /**
299
+ * Re-render entire conversation with current config.
300
+ * Called when verbose mode changes.
301
+ */
302
+ private reRenderConversation;
303
+ /**
304
+ * Clear conversation history.
305
+ * Called by /clear command.
306
+ */
307
+ clearConversationHistory(): void;
308
+ /**
309
+ * Get conversation history (copy).
310
+ */
311
+ getConversationHistory(): PrintableItem[];
312
+ /**
313
+ * Check if an overlay is currently active.
314
+ */
315
+ hasActiveOverlay(): boolean;
316
+ /**
317
+ * Get the currently active overlay (if any).
318
+ */
319
+ getActiveOverlay(): Overlay | null;
320
+ /**
321
+ * Show an overlay and wait for result.
322
+ * Returns promise that resolves when overlay closes.
323
+ */
324
+ showOverlay<TResult>(overlay: Overlay<unknown, TResult>): Promise<TResult | null>;
325
+ /**
326
+ * Close current overlay with result.
327
+ * Called internally when overlay returns close action.
328
+ */
329
+ private closeCurrentOverlay;
330
+ /**
331
+ * Enter fullscreen overlay mode.
332
+ * Clears screen and prepares for overlay rendering.
333
+ */
334
+ private enterFullscreenOverlayMode;
335
+ /**
336
+ * Enter inline overlay mode.
337
+ * Clears footer but keeps conversation visible.
338
+ */
339
+ private enterInlineOverlayMode;
340
+ /**
341
+ * Exit overlay mode and restore normal rendering.
342
+ */
343
+ private exitOverlayMode;
344
+ /**
345
+ * Flush items that were buffered while an overlay was active.
346
+ * Called after overlay closes to render any pending output.
347
+ */
348
+ private flushOverlayPrintBuffer;
349
+ /**
350
+ * Clear previous overlay render.
351
+ * Uses maxLineCount to ensure all lines are cleared even if content shrank between renders.
352
+ */
353
+ private clearOverlayRender;
354
+ /**
355
+ * Render the active overlay.
356
+ */
357
+ private renderOverlay;
358
+ /**
359
+ * Render fullscreen overlay.
360
+ *
361
+ * CRITICAL: Cursor positioning must be consistent between renders.
362
+ * Same logic as renderInlineOverlay - pad to maxLineCount for consistency.
363
+ */
364
+ private renderFullscreenOverlay;
365
+ /**
366
+ * Render inline overlay (above footer).
367
+ *
368
+ * CRITICAL: Cursor positioning must be consistent between renders.
369
+ * After rendering, cursor MUST be at maxLineCount position, not at
370
+ * actual content height. Otherwise, the next clear will move cursor
371
+ * up by maxLineCount from the wrong position, causing "ghost lines".
372
+ */
373
+ private renderInlineOverlay;
374
+ /**
375
+ * Process overlay action returned by handleKey.
376
+ */
377
+ private processOverlayAction;
378
+ getQueuedInputs(): string[];
379
+ popQueuedInput(): string | null;
380
+ hasQueuedInput(): boolean;
381
+ clearQueue(): void;
382
+ /**
383
+ * Queue a message to be sent to the agent.
384
+ * Used by commands that need to invoke the agent programmatically.
385
+ */
386
+ queueAgentMessage(options: AgentMessage): void;
387
+ /**
388
+ * Pop the next agent message from the queue.
389
+ */
390
+ popAgentMessage(): AgentMessage | null;
391
+ /**
392
+ * Check if there are queued agent messages.
393
+ */
394
+ hasAgentMessage(): boolean;
395
+ /**
396
+ * Clear all queued agent messages.
397
+ */
398
+ clearAgentMessageQueue(): void;
399
+ /**
400
+ * Pause footer completely (for overlays)
401
+ */
402
+ pauseAnimation(): void;
403
+ /**
404
+ * Resume footer after pause
405
+ */
406
+ resumeAnimation(): void;
407
+ /**
408
+ * Restart input after command
409
+ */
410
+ restartInput(): void;
411
+ /**
412
+ * Refresh prompt with theme colors
413
+ */
414
+ refreshPrompt(): void;
415
+ /**
416
+ * @deprecated Use print() or output() instead
417
+ */
418
+ clearForOutput(): void;
419
+ /**
420
+ * @deprecated Use print() or output() instead
421
+ */
422
+ forceRender(): void;
423
+ private clear;
424
+ private render;
425
+ private buildSpinnerLine;
426
+ private buildTodoLine;
427
+ private buildModeLine;
428
+ private buildAutocompleteLines;
429
+ private buildFileAutocompleteLines;
430
+ private updateAutocomplete;
431
+ private acceptAutocomplete;
432
+ private closeAutocomplete;
433
+ private navigateAutocompleteUp;
434
+ private navigateAutocompleteDown;
435
+ private addToHistory;
436
+ private navigateHistoryUp;
437
+ private navigateHistoryDown;
438
+ private resetHistoryNavigation;
439
+ private startSpinnerAnimation;
440
+ private stopSpinnerAnimation;
441
+ private keyHandler;
442
+ private dataHandler;
443
+ private startKeyboardCapture;
444
+ private stopKeyboardCapture;
445
+ /**
446
+ * Handle word left (Option+Left) - move cursor to previous word boundary
447
+ */
448
+ private handleWordLeft;
449
+ /**
450
+ * Handle word right (Option+Right) - move cursor to next word boundary
451
+ */
452
+ private handleWordRight;
453
+ /**
454
+ * Handle Escape key - called from raw data handler for reliable detection
455
+ */
456
+ private handleEscape;
457
+ /**
458
+ * Handle keypress when overlay is active.
459
+ * Converts keyboard event to KeyEvent and routes to overlay.
460
+ */
461
+ private handleOverlayKeypress;
462
+ private handleKeypress;
463
+ }