@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,37 @@
1
+ /**
2
+ * Architecture Type Selection Overlay V2
3
+ *
4
+ * Shows options for what type of architecture documentation to create.
5
+ * Uses BaseOverlayV2 for TerminalUI integration.
6
+ *
7
+ * Has two "screens":
8
+ * - Select: Choose from predefined doc types
9
+ * - Custom input: Enter a custom topic
10
+ */
11
+ import { BaseOverlayV2 } from '../../base/index.js';
12
+ import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
13
+ export type ArchDocType = 'adr' | 'diagram' | 'data-model' | 'api' | 'custom';
14
+ export interface ArchTypeChoiceV2 {
15
+ type: ArchDocType;
16
+ customTopic?: string;
17
+ }
18
+ type ScreenMode = 'select' | 'custom-input';
19
+ interface ArchTypeState {
20
+ mode: ScreenMode;
21
+ selectedIndex: number;
22
+ inputBuffer: string;
23
+ inputCursorPos: number;
24
+ }
25
+ export declare class ArchTypeOverlayV2 extends BaseOverlayV2<ArchTypeState, ArchTypeChoiceV2 | null> {
26
+ readonly type: "inline";
27
+ readonly id = "arch-type-overlay-v2";
28
+ constructor();
29
+ protected renderContent(context: RenderContext): string[];
30
+ private renderSelectScreen;
31
+ private renderCustomInputScreen;
32
+ handleKey(key: KeyEvent): OverlayAction<ArchTypeChoiceV2 | null>;
33
+ private handleSelectKey;
34
+ private handleCustomInputKey;
35
+ getCloseSummary(result: ArchTypeChoiceV2 | null): string | null;
36
+ }
37
+ export {};
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Architecture Type Selection Overlay V2
3
+ *
4
+ * Shows options for what type of architecture documentation to create.
5
+ * Uses BaseOverlayV2 for TerminalUI integration.
6
+ *
7
+ * Has two "screens":
8
+ * - Select: Choose from predefined doc types
9
+ * - Custom input: Enter a custom topic
10
+ */
11
+ import { BaseOverlayV2, renderBorder } from '../../base/index.js';
12
+ const ARCH_OPTIONS = [
13
+ { type: 'adr', label: 'Decision Record (ADR)', description: '"Why we chose X over Y"' },
14
+ { type: 'diagram', label: 'System Diagram', description: 'Mermaid component diagram' },
15
+ { type: 'data-model', label: 'Data Model', description: 'Entities and relationships' },
16
+ { type: 'api', label: 'API Design', description: 'Endpoints and contracts' },
17
+ { type: 'custom', label: 'Custom topic...', description: 'Specify your own' },
18
+ ];
19
+ // =============================================================================
20
+ // Overlay Implementation
21
+ // =============================================================================
22
+ export class ArchTypeOverlayV2 extends BaseOverlayV2 {
23
+ type = 'inline';
24
+ id = 'arch-type-overlay-v2';
25
+ constructor() {
26
+ super({
27
+ mode: 'select',
28
+ selectedIndex: 0,
29
+ inputBuffer: '',
30
+ inputCursorPos: 0,
31
+ });
32
+ this.minHeight = 14; // Prevent jitter between screens
33
+ }
34
+ // ===========================================================================
35
+ // Rendering
36
+ // ===========================================================================
37
+ renderContent(context) {
38
+ if (this.state.mode === 'select') {
39
+ return this.renderSelectScreen(context);
40
+ }
41
+ else {
42
+ return this.renderCustomInputScreen(context);
43
+ }
44
+ }
45
+ renderSelectScreen(context) {
46
+ const s = context.styles;
47
+ const lines = [];
48
+ const border = renderBorder(context.width, s);
49
+ // Header
50
+ lines.push(border);
51
+ lines.push(' ' + s.primary('Architecture Documentation'));
52
+ lines.push('');
53
+ // Question
54
+ lines.push(' What would you like to document?');
55
+ lines.push('');
56
+ // Options
57
+ const maxLabelLen = Math.max(...ARCH_OPTIONS.map((o) => o.label.length));
58
+ for (let i = 0; i < ARCH_OPTIONS.length; i++) {
59
+ const opt = ARCH_OPTIONS[i];
60
+ const isCursor = this.state.selectedIndex === i;
61
+ const prefix = isCursor ? ' > ' : ' ';
62
+ const paddedLabel = opt.label.padEnd(maxLabelLen + 2);
63
+ if (isCursor) {
64
+ lines.push(s.primary(`${prefix}${paddedLabel}`) + s.muted(opt.description));
65
+ }
66
+ else {
67
+ lines.push(s.muted(`${prefix}${paddedLabel}${opt.description}`));
68
+ }
69
+ }
70
+ // Footer
71
+ lines.push('');
72
+ lines.push(s.muted(' Up/Down Navigate | Enter Select | q/Esc Cancel'));
73
+ lines.push(border);
74
+ return lines;
75
+ }
76
+ renderCustomInputScreen(context) {
77
+ const s = context.styles;
78
+ const lines = [];
79
+ const border = renderBorder(context.width, s);
80
+ // Header
81
+ lines.push(border);
82
+ lines.push(' ' + s.primary('Custom Architecture Topic'));
83
+ lines.push('');
84
+ // Input field
85
+ lines.push(' Enter the topic you want to document:');
86
+ lines.push('');
87
+ // Render input with cursor
88
+ const displayValue = this.state.inputBuffer || s.muted('e.g., Security Architecture');
89
+ if (this.state.inputBuffer) {
90
+ // Show cursor position
91
+ const before = this.state.inputBuffer.slice(0, this.state.inputCursorPos);
92
+ const after = this.state.inputBuffer.slice(this.state.inputCursorPos);
93
+ lines.push(` > ${before}|${after}`);
94
+ }
95
+ else {
96
+ lines.push(` > |${displayValue}`);
97
+ }
98
+ lines.push('');
99
+ // Footer
100
+ lines.push(s.muted(' Enter Confirm | Esc Back | Left/Right Move cursor'));
101
+ lines.push(border);
102
+ return lines;
103
+ }
104
+ // ===========================================================================
105
+ // Key Handling
106
+ // ===========================================================================
107
+ handleKey(key) {
108
+ // Ctrl+C always cancels
109
+ if (this.isInterruptKey(key)) {
110
+ return this.close(null);
111
+ }
112
+ if (this.state.mode === 'select') {
113
+ return this.handleSelectKey(key);
114
+ }
115
+ else {
116
+ return this.handleCustomInputKey(key);
117
+ }
118
+ }
119
+ handleSelectKey(key) {
120
+ // Close keys (q or Escape)
121
+ if (this.isCloseKey(key)) {
122
+ return this.close(null);
123
+ }
124
+ // Navigation up
125
+ if (this.isUpKey(key)) {
126
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
127
+ return this.rerender();
128
+ }
129
+ // Navigation down
130
+ if (this.isDownKey(key)) {
131
+ this.state.selectedIndex = Math.min(ARCH_OPTIONS.length - 1, this.state.selectedIndex + 1);
132
+ return this.rerender();
133
+ }
134
+ // Enter - select option
135
+ if (this.isEnterKey(key)) {
136
+ const selected = ARCH_OPTIONS[this.state.selectedIndex];
137
+ if (selected.type === 'custom') {
138
+ // Switch to custom input screen
139
+ this.state.mode = 'custom-input';
140
+ this.state.inputBuffer = '';
141
+ this.state.inputCursorPos = 0;
142
+ return this.rerender();
143
+ }
144
+ return this.close({ type: selected.type });
145
+ }
146
+ return this.noAction();
147
+ }
148
+ handleCustomInputKey(key) {
149
+ // Escape goes back to select screen
150
+ if (key.name === 'escape') {
151
+ this.state.mode = 'select';
152
+ return this.rerender();
153
+ }
154
+ // Enter confirms input
155
+ if (this.isEnterKey(key)) {
156
+ const value = this.state.inputBuffer.trim();
157
+ if (value) {
158
+ return this.close({ type: 'custom', customTopic: value });
159
+ }
160
+ // Don't allow empty - just ignore enter
161
+ return this.noAction();
162
+ }
163
+ // Backspace
164
+ if (key.name === 'backspace') {
165
+ if (this.state.inputCursorPos > 0) {
166
+ const before = this.state.inputBuffer.slice(0, this.state.inputCursorPos - 1);
167
+ const after = this.state.inputBuffer.slice(this.state.inputCursorPos);
168
+ this.state.inputBuffer = before + after;
169
+ this.state.inputCursorPos--;
170
+ return this.rerender();
171
+ }
172
+ return this.noAction();
173
+ }
174
+ // Delete
175
+ if (key.name === 'delete') {
176
+ if (this.state.inputCursorPos < this.state.inputBuffer.length) {
177
+ const before = this.state.inputBuffer.slice(0, this.state.inputCursorPos);
178
+ const after = this.state.inputBuffer.slice(this.state.inputCursorPos + 1);
179
+ this.state.inputBuffer = before + after;
180
+ return this.rerender();
181
+ }
182
+ return this.noAction();
183
+ }
184
+ // Left arrow - move cursor
185
+ if (key.name === 'left') {
186
+ if (this.state.inputCursorPos > 0) {
187
+ this.state.inputCursorPos--;
188
+ return this.rerender();
189
+ }
190
+ return this.noAction();
191
+ }
192
+ // Right arrow - move cursor
193
+ if (key.name === 'right') {
194
+ if (this.state.inputCursorPos < this.state.inputBuffer.length) {
195
+ this.state.inputCursorPos++;
196
+ return this.rerender();
197
+ }
198
+ return this.noAction();
199
+ }
200
+ // Home - move to start
201
+ if (key.name === 'home') {
202
+ this.state.inputCursorPos = 0;
203
+ return this.rerender();
204
+ }
205
+ // End - move to end
206
+ if (key.name === 'end') {
207
+ this.state.inputCursorPos = this.state.inputBuffer.length;
208
+ return this.rerender();
209
+ }
210
+ // Regular character input
211
+ if (key.char && key.char.length === 1 && key.char >= ' ' && key.char <= '~') {
212
+ const before = this.state.inputBuffer.slice(0, this.state.inputCursorPos);
213
+ const after = this.state.inputBuffer.slice(this.state.inputCursorPos);
214
+ this.state.inputBuffer = before + key.char + after;
215
+ this.state.inputCursorPos++;
216
+ return this.rerender();
217
+ }
218
+ return this.noAction();
219
+ }
220
+ // ===========================================================================
221
+ // Close Summary
222
+ // ===========================================================================
223
+ getCloseSummary(result) {
224
+ const s = this.getStyles();
225
+ if (!result) {
226
+ return s.muted('Arch: ') + s.warning('Cancelled');
227
+ }
228
+ if (result.customTopic) {
229
+ return s.muted('Arch: ') + s.primary(`Custom: ${result.customTopic}`);
230
+ }
231
+ const labels = {
232
+ 'adr': 'ADR',
233
+ 'diagram': 'Diagram',
234
+ 'data-model': 'Data Model',
235
+ 'api': 'API Design',
236
+ 'custom': 'Custom',
237
+ };
238
+ return s.muted('Arch: ') + s.primary(labels[result.type]);
239
+ }
240
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Ask User Overlay V2
3
+ *
4
+ * Modal overlay for presenting multi-question forms to the user.
5
+ * Uses BaseOverlayV2 for TerminalUI integration.
6
+ *
7
+ * Features:
8
+ * - Multiple questions with navigation (Left/Right or Tab)
9
+ * - Options to select from with arrow keys
10
+ * - Custom text input option
11
+ * - Multi-select support
12
+ * - Progress indicator showing answered questions
13
+ * - Submit tab at the end
14
+ */
15
+ import { BaseOverlayV2 } from '../../base/index.js';
16
+ import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
17
+ import type { AskUserQuestion } from '../../../shared-handlers.js';
18
+ interface AskUserState {
19
+ /** Current question index */
20
+ currentQuestion: number;
21
+ /** Selected option index for current question */
22
+ selectedIndex: number;
23
+ /** Custom input buffer for free-text */
24
+ inputBuffer: string;
25
+ /** Whether currently typing custom input */
26
+ isTypingCustom: boolean;
27
+ /** Collected answers */
28
+ answers: Record<string, string | string[]>;
29
+ /** Multi-select selections for current question */
30
+ multiSelections: Set<number>;
31
+ /** Warning message to display (e.g., incomplete questions) */
32
+ warningMessage: string;
33
+ /** Whether currently on the Submit tab */
34
+ isOnSubmitTab: boolean;
35
+ }
36
+ export interface AskUserOptionsV2 {
37
+ questions: AskUserQuestion[];
38
+ context?: string;
39
+ }
40
+ export interface AskUserResultV2 {
41
+ answers: Record<string, string | string[]>;
42
+ skipped: string[];
43
+ }
44
+ export declare class AskUserOverlayV2 extends BaseOverlayV2<AskUserState, AskUserResultV2> {
45
+ readonly type: "inline";
46
+ readonly id = "ask-user-overlay-v2";
47
+ private readonly questions;
48
+ private readonly context?;
49
+ constructor(options: AskUserOptionsV2);
50
+ protected renderContent(context: RenderContext): string[];
51
+ handleKey(key: KeyEvent): OverlayAction<AskUserResultV2>;
52
+ /**
53
+ * Summary shown after overlay closes.
54
+ */
55
+ getCloseSummary(result: AskUserResultV2): string | null;
56
+ private renderTabBar;
57
+ private renderQuestion;
58
+ private renderSubmitTab;
59
+ private renderInstructions;
60
+ private handleSubmitTabKey;
61
+ private handleTypingKey;
62
+ private handleNavigationKey;
63
+ private getResult;
64
+ private getOptionCount;
65
+ private getAnswerInfo;
66
+ private restoreFromAnswer;
67
+ private nextQuestion;
68
+ private prevQuestion;
69
+ private tryComplete;
70
+ private submitAnswer;
71
+ }
72
+ export {};