@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
@@ -18,6 +18,7 @@ import type { CommandOption } from './types.js';
18
18
  export declare const DEFAULT_COMMANDS: CommandOption[];
19
19
  /**
20
20
  * Strip ANSI codes from string
21
+ * Uses unified line-utils for consistent behavior across components.
21
22
  */
22
23
  export declare function stripAnsi(str: string): string;
23
24
  export interface InputPromptEvents {
@@ -19,6 +19,8 @@ import { getStyles } from '../themes/index.js';
19
19
  import * as terminal from './terminal.js';
20
20
  import { getAutocompleteCommands } from '../commands.js';
21
21
  import { getFileMatches, extractAtMention, replaceAtMention, } from './file-autocomplete.js';
22
+ import { debugRender } from '../utils/debug-log.js';
23
+ import { stripAnsi as unifiedStripAnsi, getPhysicalLineCountWithOffset, } from './line-utils.js';
22
24
  // =============================================================================
23
25
  // Constants
24
26
  // =============================================================================
@@ -32,19 +34,17 @@ export const DEFAULT_COMMANDS = getAutocompleteCommands();
32
34
  // =============================================================================
33
35
  /**
34
36
  * Strip ANSI codes from string
37
+ * Uses unified line-utils for consistent behavior across components.
35
38
  */
36
39
  export function stripAnsi(str) {
37
- // eslint-disable-next-line no-control-regex
38
- return str.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, '');
40
+ return unifiedStripAnsi(str);
39
41
  }
40
42
  /**
41
43
  * Calculate physical lines for wrapped text
44
+ * Uses unified line-utils for consistent behavior across components.
42
45
  */
43
46
  function calcPhysicalLines(text, startCol, termWidth) {
44
- if (text.length === 0)
45
- return 1;
46
- const totalLen = startCol + text.length;
47
- return Math.ceil(totalLen / termWidth) || 1;
47
+ return getPhysicalLineCountWithOffset(text, startCol, termWidth);
48
48
  }
49
49
  /**
50
50
  * Calculate fuzzy match score for a query against a target string.
@@ -344,6 +344,8 @@ export class InputPrompt extends EventEmitter {
344
344
  }
345
345
  row += Math.floor(cursorAbsPos / termWidth);
346
346
  const col = cursorAbsPos % termWidth;
347
+ debugRender('InputPrompt:getCursorInfo', `termWidth=${termWidth} cursorPos=${this.state.cursorPos} currentLine=${this.state.currentLine} promptLen=${this.promptLen}`);
348
+ debugRender('InputPrompt:getCursorInfo', `cursorAbsPos=${cursorAbsPos} row=${row} col=${col}`);
347
349
  return { row, col };
348
350
  }
349
351
  /**
@@ -550,6 +552,7 @@ export class InputPrompt extends EventEmitter {
550
552
  const isTab = key === '\t';
551
553
  const isShiftTab = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x5a;
552
554
  const isCtrlC = key === '\x03';
555
+ const isCtrlO = key === '\x0f'; // Ctrl+O for toggle subagent expand
553
556
  const isUpArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x41;
554
557
  const isDownArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x42;
555
558
  const isLeftArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x44;
@@ -579,6 +582,11 @@ export class InputPrompt extends EventEmitter {
579
582
  this.emit('cancel');
580
583
  return;
581
584
  }
585
+ // Ctrl+O - toggle subagent expand (only when agent is running)
586
+ if (isCtrlO) {
587
+ this.emit('toggleSubagentExpand');
588
+ return;
589
+ }
582
590
  // Escape - close autocomplete, double Esc clears input, or emit escape for agent abort
583
591
  if (isEscape) {
584
592
  const now = Date.now();
@@ -1,56 +1,118 @@
1
1
  /**
2
- * Input Prompt
2
+ * Input Prompt v2 (Event-Driven)
3
3
  *
4
- * @deprecated This module is superseded by input-prompt-v2.ts which uses
5
- * event-driven architecture for non-blocking input with queue mode support.
6
- * This file is kept for reference and may be removed in a future cleanup.
4
+ * Refactored input handling with event-driven architecture.
5
+ * - Emits events instead of blocking with getInput()
6
+ * - Supports queue mode for capturing input during agent execution
7
+ * - Always captures keystrokes (no blocking)
7
8
  *
8
- * Self-contained input handling with multiline support, autocomplete,
9
- * history navigation, and proper visual line navigation.
9
+ * Events:
10
+ * - 'submit' - User pressed Enter with input
11
+ * - 'command' - User submitted a slash command
12
+ * - 'cancel' - User pressed Ctrl+C
13
+ * - 'escape' - User pressed Esc (for aborting agent)
14
+ * - 'change' - Input text changed
10
15
  */
11
- import type { CommandOption, InputResult, TodoItem } from './types.js';
16
+ import { EventEmitter } from 'events';
17
+ import type { CommandOption } from './types.js';
12
18
  export declare const DEFAULT_COMMANDS: CommandOption[];
13
19
  /**
14
20
  * Strip ANSI codes from string
21
+ * Uses unified line-utils for consistent behavior across components.
15
22
  */
16
23
  export declare function stripAnsi(str: string): string;
24
+ export interface InputPromptEvents {
25
+ submit: (input: string) => void;
26
+ command: (command: string, args: string) => void;
27
+ cancel: () => void;
28
+ escape: () => void;
29
+ change: (input: string) => void;
30
+ modeChange: () => void;
31
+ }
17
32
  export interface InputPromptOptions {
18
33
  prompt?: string;
19
34
  showSeparators?: boolean;
20
35
  commands?: CommandOption[];
21
- getTodos?: () => TodoItem[];
22
36
  }
23
- export declare class InputPrompt {
24
- private readonly prompt;
25
- private readonly promptLen;
37
+ export declare class InputPrompt extends EventEmitter {
38
+ private prompt;
39
+ private promptLen;
26
40
  private readonly showSeparators;
27
41
  private readonly commands;
28
- private readonly getTodos?;
29
42
  private state;
30
43
  private autocomplete;
44
+ private fileAutocomplete;
31
45
  private readonly history;
32
46
  private historyIndex;
33
47
  private savedInput;
48
+ private queueMode;
49
+ private queuedInputs;
34
50
  private renderedLines;
35
51
  private dropdownLines;
36
52
  private linesAboveCursor;
37
53
  private hasSeparators;
38
54
  private isRunning;
39
- private resolveInput;
55
+ private lastEscTime;
56
+ private readonly DOUBLE_ESC_THRESHOLD_MS;
57
+ private suggestion;
40
58
  constructor(options?: InputPromptOptions);
41
59
  /**
42
- * Get input from user (async)
43
- * Returns when user submits or cancels
60
+ * Update the prompt string (for dynamic theme changes)
61
+ */
62
+ setPrompt(prompt: string): void;
63
+ /**
64
+ * Set a suggestion for the next action (ghost text)
65
+ */
66
+ setSuggestion(action: string | null): void;
67
+ /**
68
+ * Get the current suggestion
44
69
  */
45
- getInput(): Promise<InputResult>;
70
+ getSuggestion(): string | null;
46
71
  /**
47
- * Start input mode
72
+ * Clear the current suggestion
73
+ */
74
+ clearSuggestion(): void;
75
+ /**
76
+ * Start input capture (non-blocking, event-driven)
48
77
  */
49
78
  start(): void;
50
79
  /**
51
- * Stop input mode
80
+ * Stop input capture
52
81
  */
53
82
  stop(): void;
83
+ /**
84
+ * Check if running
85
+ */
86
+ isActive(): boolean;
87
+ /**
88
+ * Enable/disable queue mode
89
+ * In queue mode, Enter adds to queue instead of emitting 'submit'
90
+ */
91
+ setQueueMode(enabled: boolean): void;
92
+ /**
93
+ * Check if in queue mode
94
+ */
95
+ isQueueMode(): boolean;
96
+ /**
97
+ * Get all queued inputs (FIFO order)
98
+ */
99
+ getQueuedInputs(): string[];
100
+ /**
101
+ * Pop the first queued input
102
+ */
103
+ popQueuedInput(): string | null;
104
+ /**
105
+ * Check if there are queued inputs
106
+ */
107
+ hasQueuedInput(): boolean;
108
+ /**
109
+ * Get number of queued inputs
110
+ */
111
+ getQueueLength(): number;
112
+ /**
113
+ * Clear the queue
114
+ */
115
+ clearQueue(): void;
54
116
  /**
55
117
  * Get current buffer value
56
118
  */
@@ -60,28 +122,50 @@ export declare class InputPrompt {
60
122
  */
61
123
  setValue(value: string): void;
62
124
  /**
63
- * Clear the rendered area
64
- */
65
- clear(): void;
66
- /**
67
- * Get number of rendered lines
125
+ * Clear input buffer
68
126
  */
69
- getRenderedLines(): number;
127
+ clearInput(): void;
70
128
  /**
71
129
  * Add command to history
72
130
  */
73
131
  addToHistory(input: string): void;
74
- private resetState;
75
- private updateAutocomplete;
76
132
  /**
77
- * Get physical layout of current buffer
133
+ * Render the input prompt - returns array of lines
134
+ * Does NOT write to terminal (Footer handles that)
78
135
  */
79
- private getPhysicalLayout;
136
+ render(): string[];
137
+ /**
138
+ * Get the cursor position info for rendering
139
+ */
140
+ getCursorInfo(): {
141
+ row: number;
142
+ col: number;
143
+ };
144
+ /**
145
+ * Get autocomplete dropdown lines (if active)
146
+ */
147
+ getAutocompleteLines(): string[];
148
+ /**
149
+ * Check if autocomplete is showing
150
+ */
151
+ isAutocompleteActive(): boolean;
152
+ /**
153
+ * Get height of rendered content
154
+ */
155
+ getHeight(): number;
156
+ /**
157
+ * @deprecated Use event-driven start() instead
158
+ * Kept for backwards compatibility during migration
159
+ */
160
+ getInput(): Promise<{
161
+ action: string;
162
+ value?: string;
163
+ command?: string;
164
+ args?: string;
165
+ }>;
166
+ private resetState;
167
+ private updateAutocomplete;
80
168
  private getSeparatorLine;
81
- private renderTodos;
82
- private render;
83
- private renderDropdown;
84
- private clearDropdown;
85
169
  private readonly handleData;
86
170
  private handleKey;
87
171
  private handleEnter;
@@ -93,5 +177,4 @@ export declare class InputPrompt {
93
177
  private handleWordLeft;
94
178
  private handleWordRight;
95
179
  private handleBackspace;
96
- private finishInput;
97
180
  }