@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,316 @@
1
+ /**
2
+ * Help Overlay
3
+ *
4
+ * Displays available commands in a searchable, categorized list.
5
+ * Uses TabbedListOverlay for consistent UX patterns.
6
+ *
7
+ * Features:
8
+ * - Tabs: All, Built-in, Custom
9
+ * - Search with / toggle
10
+ * - Detail view for full command information
11
+ * - Info header with shortcuts
12
+ */
13
+ import chalk from 'chalk';
14
+ import * as terminal from './terminal.js';
15
+ import { getHelpCommands, getCommandByIndex } from '../commands.js';
16
+ import { getCustomCommandRegistry } from '../commands/index.js';
17
+ import { TabbedListOverlay, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isClose, renderBorder, } from './base/index.js';
18
+ // =============================================================================
19
+ // Constants
20
+ // =============================================================================
21
+ const VERSION = 'compilr.dev/agent';
22
+ const PAGE_SIZE = 10;
23
+ const TABS = [
24
+ { id: 'all', label: 'All' },
25
+ { id: 'builtin', label: 'Built-in' },
26
+ { id: 'custom', label: 'Custom' },
27
+ ];
28
+ // =============================================================================
29
+ // Detail Screens
30
+ // =============================================================================
31
+ /**
32
+ * Built-in command detail screen
33
+ */
34
+ class CommandDetailScreen extends BaseScreen {
35
+ item;
36
+ styles;
37
+ constructor(item, styles) {
38
+ super();
39
+ this.item = item;
40
+ this.styles = styles;
41
+ }
42
+ render() {
43
+ const s = this.styles;
44
+ const cols = terminal.getTerminalWidth();
45
+ const maxLineWidth = cols - 2;
46
+ const border = renderBorder(cols, s);
47
+ const cmd = this.item.commandIndex !== undefined
48
+ ? getCommandByIndex(this.item.commandIndex)
49
+ : null;
50
+ const lines = [];
51
+ lines.push(border);
52
+ lines.push(' ' + s.primaryBold('Command Reference'));
53
+ lines.push('');
54
+ if (!cmd) {
55
+ lines.push(s.error(' Command not found'));
56
+ lines.push(border);
57
+ lines.push(` ${s.muted('q/Esc Back')}`);
58
+ lines.push(border);
59
+ return lines;
60
+ }
61
+ // Helper to truncate
62
+ const truncate = (line, max = maxLineWidth) => {
63
+ // eslint-disable-next-line no-control-regex
64
+ const stripped = line.replace(/\x1b\[[0-9;]*m/g, '');
65
+ if (stripped.length <= max)
66
+ return line;
67
+ let visibleLen = 0;
68
+ let cutIndex = 0;
69
+ for (let i = 0; i < line.length; i++) {
70
+ if (line[i] === '\x1b') {
71
+ const end = line.indexOf('m', i);
72
+ if (end !== -1) {
73
+ i = end;
74
+ continue;
75
+ }
76
+ }
77
+ visibleLen++;
78
+ if (visibleLen >= max - 3) {
79
+ cutIndex = i + 1;
80
+ break;
81
+ }
82
+ }
83
+ return line.slice(0, cutIndex) + '...';
84
+ };
85
+ // Command name
86
+ lines.push(chalk.bold(` /${cmd.name}`));
87
+ lines.push('');
88
+ // Description
89
+ lines.push(' ' + s.primary('DESCRIPTION'));
90
+ lines.push(truncate(' ' + cmd.description));
91
+ lines.push('');
92
+ // Details
93
+ if (cmd.details) {
94
+ lines.push(' ' + s.primary('ABOUT'));
95
+ const maxWidth = Math.min(cols - 6, 70);
96
+ const words = cmd.details.split(' ');
97
+ let currentLine = ' ';
98
+ for (const word of words) {
99
+ if (currentLine.length + word.length + 1 > maxWidth) {
100
+ lines.push(truncate(currentLine));
101
+ currentLine = ' ' + word;
102
+ }
103
+ else {
104
+ currentLine += (currentLine.length > 3 ? ' ' : '') + word;
105
+ }
106
+ }
107
+ if (currentLine.length > 3) {
108
+ lines.push(truncate(currentLine));
109
+ }
110
+ lines.push('');
111
+ }
112
+ // Aliases
113
+ if (cmd.aliases && cmd.aliases.length > 0) {
114
+ lines.push(' ' + s.primary('ALIASES'));
115
+ lines.push(truncate(' ' + cmd.aliases.map((a) => `/${a}`).join(', ')));
116
+ lines.push('');
117
+ }
118
+ // Examples
119
+ if (cmd.examples && cmd.examples.length > 0) {
120
+ lines.push(' ' + s.primary('EXAMPLES'));
121
+ for (const example of cmd.examples) {
122
+ if (example.description) {
123
+ const paddedCode = example.code.padEnd(22);
124
+ const exLine = ` ${s.muted(paddedCode)}${s.muted('·')} ${example.description}`;
125
+ lines.push(truncate(exLine));
126
+ }
127
+ else {
128
+ lines.push(truncate(' ' + s.muted(example.code)));
129
+ }
130
+ }
131
+ lines.push('');
132
+ }
133
+ // Interactions
134
+ if (cmd.interactions && cmd.interactions.length > 0) {
135
+ lines.push(' ' + s.primary('INTERACTIONS'));
136
+ for (const hint of cmd.interactions) {
137
+ lines.push(truncate(' ' + s.muted('• ' + hint)));
138
+ }
139
+ lines.push('');
140
+ }
141
+ // Footer
142
+ lines.push(border);
143
+ lines.push(` ${s.muted('q/Esc Back')}`);
144
+ lines.push(border);
145
+ return lines;
146
+ }
147
+ handleKey(data) {
148
+ if (isCtrlC(data)) {
149
+ return closeOverlay(undefined);
150
+ }
151
+ if (isEscape(data) || isClose(data)) {
152
+ return popScreen();
153
+ }
154
+ return stay(false);
155
+ }
156
+ }
157
+ /**
158
+ * Custom command detail screen
159
+ */
160
+ class CustomCommandDetailScreen extends BaseScreen {
161
+ item;
162
+ styles;
163
+ constructor(item, styles) {
164
+ super();
165
+ this.item = item;
166
+ this.styles = styles;
167
+ }
168
+ render() {
169
+ const s = this.styles;
170
+ const cols = terminal.getTerminalWidth();
171
+ const border = renderBorder(cols, s);
172
+ const registry = getCustomCommandRegistry();
173
+ const lines = [];
174
+ lines.push(border);
175
+ lines.push(' ' + s.primaryBold('Custom Command Details'));
176
+ lines.push('');
177
+ // Command name
178
+ lines.push(chalk.bold(` /${this.item.name}`));
179
+ lines.push('');
180
+ // Location
181
+ lines.push(' ' + s.primary('LOCATION'));
182
+ const loc = this.item.location ?? 'personal';
183
+ lines.push(` ${loc === 'project' ? 'Project' : 'Personal'} (${loc})`);
184
+ lines.push('');
185
+ // File path
186
+ lines.push(' ' + s.primary('FILE'));
187
+ const basePath = loc === 'project'
188
+ ? registry.getProjectDir()
189
+ : registry.getUserDir();
190
+ lines.push(s.muted(` ${basePath}/${this.item.name}.md`));
191
+ lines.push('');
192
+ // Description
193
+ lines.push(' ' + s.primary('DESCRIPTION'));
194
+ lines.push(...this.wrapText(this.item.description, cols - 6, ' '));
195
+ lines.push('');
196
+ // Prompt
197
+ if (this.item.prompt) {
198
+ lines.push(' ' + s.primary('PROMPT TEMPLATE'));
199
+ lines.push(...this.wrapText(this.item.prompt, cols - 6, ' '));
200
+ lines.push('');
201
+ }
202
+ // Footer
203
+ lines.push(border);
204
+ lines.push(` ${s.muted('q/Esc Back')}`);
205
+ lines.push(border);
206
+ return lines;
207
+ }
208
+ handleKey(data) {
209
+ if (isCtrlC(data)) {
210
+ return closeOverlay(undefined);
211
+ }
212
+ if (isEscape(data) || isClose(data)) {
213
+ return popScreen();
214
+ }
215
+ return stay(false);
216
+ }
217
+ wrapText(text, maxWidth, indent) {
218
+ const words = text.split(' ');
219
+ const resultLines = [];
220
+ let currentLine = indent;
221
+ for (const word of words) {
222
+ if (currentLine.length + word.length + 1 > maxWidth) {
223
+ resultLines.push(currentLine);
224
+ currentLine = indent + word;
225
+ }
226
+ else {
227
+ currentLine += (currentLine.length > indent.length ? ' ' : '') + word;
228
+ }
229
+ }
230
+ if (currentLine.length > indent.length) {
231
+ resultLines.push(currentLine);
232
+ }
233
+ return resultLines;
234
+ }
235
+ }
236
+ // =============================================================================
237
+ // Help Overlay Class
238
+ // =============================================================================
239
+ class HelpOverlay extends TabbedListOverlay {
240
+ constructor() {
241
+ // Build unified items list
242
+ const items = [];
243
+ // Add built-in commands
244
+ const helpCommands = getHelpCommands();
245
+ for (let i = 0; i < helpCommands.length; i++) {
246
+ const cmd = helpCommands[i];
247
+ items.push({
248
+ name: cmd.name,
249
+ description: cmd.description,
250
+ type: 'builtin',
251
+ commandIndex: i,
252
+ });
253
+ }
254
+ // Add custom commands
255
+ const registry = getCustomCommandRegistry();
256
+ const customCommands = registry.getAll();
257
+ for (const cmd of customCommands) {
258
+ items.push({
259
+ name: `/${cmd.name}`,
260
+ description: cmd.description,
261
+ type: 'custom',
262
+ prompt: cmd.prompt,
263
+ location: cmd.location,
264
+ });
265
+ }
266
+ super({
267
+ title: VERSION,
268
+ tabs: TABS,
269
+ items,
270
+ pageSize: PAGE_SIZE,
271
+ filterByTab: (item, tabId) => {
272
+ if (tabId === 'all')
273
+ return true;
274
+ if (tabId === 'builtin')
275
+ return item.type === 'builtin';
276
+ if (tabId === 'custom')
277
+ return item.type === 'custom';
278
+ return true;
279
+ },
280
+ getSearchText: (item) => `${item.name} ${item.description}`,
281
+ renderItem: (item, isSelected, styles) => {
282
+ const prefix = isSelected ? styles.primary(' ❯ ') : ' ';
283
+ const name = isSelected
284
+ ? styles.primary(item.name.padEnd(20))
285
+ : styles.muted(item.name.padEnd(20));
286
+ const desc = styles.muted(item.description);
287
+ const badge = item.type === 'custom' ? styles.muted(' (custom)') : '';
288
+ return prefix + name + desc + badge;
289
+ },
290
+ footerHints: (searchMode) => {
291
+ if (searchMode) {
292
+ return 'Type to filter · ↑↓/jk Navigate · Enter Details · Esc Exit search';
293
+ }
294
+ return 'Tab Filter · ↑↓/jk · ←→/hl Pages · / Search · Enter Details · q/Esc Close';
295
+ },
296
+ emptyMessage: 'No commands available.',
297
+ noResultsMessage: 'No commands match the search.',
298
+ detailScreensFullScreen: false,
299
+ });
300
+ }
301
+ createDetailScreen(item) {
302
+ if (item.type === 'builtin') {
303
+ return new CommandDetailScreen(item, this.styles);
304
+ }
305
+ return new CustomCommandDetailScreen(item, this.styles);
306
+ }
307
+ }
308
+ // =============================================================================
309
+ // Export Function
310
+ // =============================================================================
311
+ /**
312
+ * Show the help overlay
313
+ */
314
+ export async function showHelp() {
315
+ return new HelpOverlay().show();
316
+ }
@@ -8,5 +8,5 @@ export * from './terminal.js';
8
8
  export * from './conversation.js';
9
9
  export * from './overlays.js';
10
10
  export * from './todo-zone.js';
11
- export * from './input-prompt-v2.js';
11
+ export * from './input-prompt.js';
12
12
  export * from './footer.js';
package/dist/ui/index.js CHANGED
@@ -9,7 +9,5 @@ export * from './conversation.js';
9
9
  export * from './overlays.js';
10
10
  // Refactored components (event-driven, persistent footer)
11
11
  export * from './todo-zone.js';
12
- export * from './input-prompt-v2.js';
12
+ export * from './input-prompt.js';
13
13
  export * from './footer.js';
14
- // Note: ephemeral.js and input-prompt.js are legacy and not re-exported
15
- // to avoid naming conflicts. Import directly if needed.
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Init Overlay (Refactored)
3
+ *
4
+ * Modal overlay for the /init wizard - creates new projects with structured workflow.
5
+ * Uses InlineOverlay base class for consistent lifecycle management.
6
+ *
7
+ * Steps:
8
+ * 0. Project type (new vs existing)
9
+ * 1. Project name
10
+ * 2. Description
11
+ * 3. Repo pattern (single vs two-repo)
12
+ * 4. Tech stack
13
+ * 5. Coding standards
14
+ * 6. Initialize git?
15
+ * 7. Track with project database?
16
+ * 8. Workflow mode (if tracking enabled)
17
+ * 9. Confirmation
18
+ */
19
+ type WorkflowMode = 'flexible' | 'guided';
20
+ export interface InitResult {
21
+ created: boolean;
22
+ projectPath?: string;
23
+ docsPath?: string;
24
+ filesCreated?: string[];
25
+ trackInDatabase?: boolean;
26
+ workflowMode?: WorkflowMode;
27
+ projectName?: string;
28
+ description?: string;
29
+ }
30
+ /**
31
+ * Show the init wizard overlay
32
+ */
33
+ export declare function showInitOverlay(): Promise<InitResult>;
34
+ export {};