@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,637 @@
1
+ /**
2
+ * Workflow Overlay V2
3
+ *
4
+ * Unified project dashboard with tabbed interface:
5
+ * [Actions] - Quick actions based on workflow state
6
+ * [Details] - Project metadata (read-only)
7
+ * [Dashboard] - Overview of project status (placeholder)
8
+ * [Manage] - Project management actions
9
+ *
10
+ * Access paths:
11
+ * /workflow - Opens workflow for active project
12
+ * /projects → Enter - Opens workflow for selected project
13
+ *
14
+ * Workflow phases:
15
+ * /new → /design|/sketch → /backlog → /build → /scaffold → done
16
+ */
17
+ import { BaseOverlayV2 } from '../../base/overlay-base-v2.js';
18
+ import { getCurrentProject, setCurrentProject, clearCurrentProject } from '../../../tools/project-db.js';
19
+ import { projectRepository, workItemRepository, documentRepository } from '../../../db/repositories/index.js';
20
+ import { BacklogOverlayV2 } from './backlog-overlay-v2.js';
21
+ import { DocsOverlayV2 } from './docs-overlay-v2.js';
22
+ import { AnchorsOverlayV2 } from './anchors-overlay-v2.js';
23
+ // =============================================================================
24
+ // Constants
25
+ // =============================================================================
26
+ const PHASES = [
27
+ {
28
+ id: 'init',
29
+ name: 'Initialize',
30
+ command: '/new',
31
+ description: 'Create project structure',
32
+ isComplete: (project) => !!project,
33
+ isActive: (project) => !project,
34
+ },
35
+ {
36
+ id: 'design',
37
+ name: 'Design',
38
+ command: '/design',
39
+ description: 'Define requirements and PRD',
40
+ isComplete: (_project, stats) => stats.hasPrd,
41
+ isActive: (_project, stats) => !stats.hasPrd && stats.totalItems === 0,
42
+ },
43
+ {
44
+ id: 'backlog',
45
+ name: 'Backlog',
46
+ command: '/backlog',
47
+ description: 'Plan and prioritize work items',
48
+ isComplete: (_project, stats) => stats.totalItems >= 3,
49
+ isActive: (_project, stats) => stats.hasPrd && stats.totalItems < 3,
50
+ },
51
+ {
52
+ id: 'scaffold',
53
+ name: 'Scaffold',
54
+ command: '/scaffold',
55
+ description: 'Create project foundation',
56
+ isComplete: (_project, stats) => stats.hasScaffold,
57
+ isActive: (_project, stats) => stats.totalItems >= 3 && !stats.hasScaffold,
58
+ },
59
+ {
60
+ id: 'build',
61
+ name: 'Build',
62
+ command: '/build',
63
+ description: 'Implement backlog items',
64
+ isComplete: (_project, stats) => stats.completedItems >= stats.totalItems && stats.totalItems > 0,
65
+ isActive: (_project, stats) => stats.hasScaffold && stats.completedItems < stats.totalItems,
66
+ },
67
+ ];
68
+ const TABS = ['Actions', 'Details', 'Dashboard', 'Manage'];
69
+ const MAX_ACTIONS = 6;
70
+ // =============================================================================
71
+ // Helper Functions
72
+ // =============================================================================
73
+ function getProjectStats(project) {
74
+ const itemsResult = workItemRepository.query({
75
+ project_id: project.id,
76
+ limit: 1000,
77
+ });
78
+ const items = itemsResult.items;
79
+ const completedItems = items.filter(i => i.status === 'completed').length;
80
+ const inProgressItems = items.filter(i => i.status === 'in_progress').length;
81
+ const docs = documentRepository.listByProject(project.id);
82
+ const hasPrd = docs.some(d => d.docType === 'prd');
83
+ const hasArchDocs = docs.some(d => d.docType === 'architecture');
84
+ const hasScaffold = items.some(i => i.title.toLowerCase().includes('scaffold') && i.status === 'completed') || project.metadata?.scaffolded === true;
85
+ return {
86
+ totalItems: items.length,
87
+ completedItems,
88
+ inProgressItems,
89
+ hasPrd,
90
+ hasArchDocs,
91
+ hasScaffold,
92
+ };
93
+ }
94
+ function buildActionsItems(project, stats) {
95
+ const actions = [];
96
+ if (!project) {
97
+ actions.push({
98
+ label: 'Initialize Project',
99
+ command: '/new',
100
+ description: 'Create a new project',
101
+ enabled: true,
102
+ });
103
+ return actions;
104
+ }
105
+ if (!stats) {
106
+ return actions;
107
+ }
108
+ if (!stats.hasPrd) {
109
+ actions.push({
110
+ label: 'Design Project',
111
+ command: '/design',
112
+ description: 'Create PRD and requirements',
113
+ enabled: true,
114
+ });
115
+ actions.push({
116
+ label: 'Quick Sketch',
117
+ command: '/sketch',
118
+ description: 'Lightweight project outline',
119
+ enabled: true,
120
+ });
121
+ }
122
+ if (stats.hasPrd || stats.totalItems > 0) {
123
+ actions.push({
124
+ label: 'View Backlog',
125
+ command: '/backlog',
126
+ description: `${String(stats.totalItems)} items, ${String(stats.completedItems)} done`,
127
+ enabled: true,
128
+ });
129
+ }
130
+ if (stats.totalItems > 0 && !stats.hasScaffold) {
131
+ actions.push({
132
+ label: 'Scaffold Project',
133
+ command: '/scaffold',
134
+ description: 'Create project foundation',
135
+ enabled: true,
136
+ });
137
+ }
138
+ if (stats.hasScaffold && stats.totalItems > stats.completedItems) {
139
+ actions.push({
140
+ label: 'Build Next Item',
141
+ command: '/build',
142
+ description: `${String(stats.totalItems - stats.completedItems)} items remaining`,
143
+ enabled: true,
144
+ });
145
+ }
146
+ actions.push({
147
+ label: 'View Documents',
148
+ command: '/docs',
149
+ description: 'Browse project documents',
150
+ enabled: stats.hasPrd || stats.hasArchDocs,
151
+ });
152
+ actions.push({
153
+ label: 'View Anchors',
154
+ command: '/anchors',
155
+ description: 'Manage persistent context',
156
+ enabled: true,
157
+ });
158
+ return actions;
159
+ }
160
+ function buildManageActions(project) {
161
+ const actions = [];
162
+ if (!project) {
163
+ return actions;
164
+ }
165
+ actions.push({
166
+ id: 'edit',
167
+ label: 'Edit Project',
168
+ command: '',
169
+ description: 'Change name, description',
170
+ enabled: true,
171
+ style: 'normal',
172
+ });
173
+ const currentProject = getCurrentProject();
174
+ const isCurrentProject = currentProject?.id === project.id;
175
+ actions.push({
176
+ id: 'set-active',
177
+ label: 'Set as Current',
178
+ command: '',
179
+ description: isCurrentProject ? 'Already the current project' : 'Make this the current working project',
180
+ enabled: !isCurrentProject,
181
+ style: 'normal',
182
+ });
183
+ if (project.status === 'archived') {
184
+ actions.push({
185
+ id: 'restore',
186
+ label: 'Restore Project',
187
+ command: '',
188
+ description: 'Restore from archive',
189
+ enabled: true,
190
+ style: 'normal',
191
+ });
192
+ }
193
+ else {
194
+ actions.push({
195
+ id: 'archive',
196
+ label: 'Archive Project',
197
+ command: '',
198
+ description: 'Hide from active list',
199
+ enabled: true,
200
+ style: 'warning',
201
+ });
202
+ }
203
+ actions.push({
204
+ id: 'delete',
205
+ label: 'Delete Project',
206
+ command: '',
207
+ description: 'Permanently remove',
208
+ enabled: true,
209
+ style: 'danger',
210
+ });
211
+ return actions;
212
+ }
213
+ function formatRelativeTime(date) {
214
+ if (!date)
215
+ return 'never';
216
+ const now = new Date();
217
+ const diffMs = now.getTime() - date.getTime();
218
+ const diffMins = Math.floor(diffMs / 60000);
219
+ const diffHours = Math.floor(diffMs / 3600000);
220
+ const diffDays = Math.floor(diffMs / 86400000);
221
+ if (diffMins < 1)
222
+ return 'just now';
223
+ if (diffMins < 60)
224
+ return `${String(diffMins)}m ago`;
225
+ if (diffHours < 24)
226
+ return `${String(diffHours)}h ago`;
227
+ if (diffDays < 7)
228
+ return `${String(diffDays)}d ago`;
229
+ return date.toLocaleDateString();
230
+ }
231
+ function formatStatus(status, s) {
232
+ switch (status) {
233
+ case 'active':
234
+ return s.success('active');
235
+ case 'paused':
236
+ return s.warning('paused');
237
+ case 'completed':
238
+ return s.info('completed');
239
+ case 'archived':
240
+ return s.muted('archived');
241
+ default:
242
+ return s.muted(status);
243
+ }
244
+ }
245
+ // =============================================================================
246
+ // Workflow Overlay V2 Class
247
+ // =============================================================================
248
+ export class WorkflowOverlayV2 extends BaseOverlayV2 {
249
+ type = 'inline';
250
+ id = 'workflow-overlay-v2';
251
+ constructor(projectId) {
252
+ // Load project data
253
+ let project = null;
254
+ let stats = null;
255
+ if (projectId) {
256
+ try {
257
+ project = projectRepository.getById(projectId);
258
+ if (project) {
259
+ stats = getProjectStats(project);
260
+ }
261
+ }
262
+ catch {
263
+ // Project not found
264
+ }
265
+ }
266
+ else {
267
+ const activeProject = getCurrentProject();
268
+ if (activeProject) {
269
+ try {
270
+ project = projectRepository.getById(activeProject.id);
271
+ if (project) {
272
+ stats = getProjectStats(project);
273
+ }
274
+ }
275
+ catch {
276
+ // Project not found
277
+ }
278
+ }
279
+ }
280
+ super({
281
+ currentTab: 0,
282
+ project,
283
+ stats,
284
+ actionsIndex: 0,
285
+ manageActionIndex: 0,
286
+ actionsItems: buildActionsItems(project, stats),
287
+ manageActions: buildManageActions(project),
288
+ });
289
+ this.minHeight = 22;
290
+ }
291
+ renderContent(_context) {
292
+ const s = this.getStyles();
293
+ const lines = [];
294
+ // Header with project name
295
+ const projectName = this.state.project ? this.state.project.displayName : 'No Project';
296
+ lines.push(...this.renderHeader('Workflow', projectName));
297
+ // Tab bar
298
+ const tabBar = this.renderTabs(s);
299
+ const tabHint = s.muted('(Tab/←→ · 1-4)');
300
+ lines.push(` ${tabBar} ${tabHint}`);
301
+ lines.push('');
302
+ // Project info + Progress row
303
+ if (this.state.project && this.state.stats) {
304
+ const progress = this.state.stats.totalItems > 0
305
+ ? Math.round((this.state.stats.completedItems / this.state.stats.totalItems) * 100)
306
+ : 0;
307
+ const barWidth = 20;
308
+ const filledWidth = Math.round((progress / 100) * barWidth);
309
+ const bar = '█'.repeat(filledWidth) + '░'.repeat(barWidth - filledWidth);
310
+ const currentProject = getCurrentProject();
311
+ const isCurrentProject = currentProject?.id === this.state.project.id;
312
+ const currentIndicator = isCurrentProject ? ` ${s.success('★ Current')}` : '';
313
+ lines.push(` ${s.muted('Status:')} ${formatStatus(this.state.project.status, s)} ${s.muted('Mode:')} ${this.state.project.workflowMode}${currentIndicator}`);
314
+ lines.push(` ${s.muted('Progress:')} ${String(this.state.stats.completedItems)}/${String(this.state.stats.totalItems)} [${s.primary(bar)}] ${String(progress)}%`);
315
+ }
316
+ else {
317
+ lines.push(` ${s.warning('No current project')} ${s.muted('Run /new to create')}`);
318
+ lines.push('');
319
+ }
320
+ lines.push('');
321
+ // Workflow phases (horizontal)
322
+ lines.push(this.renderPhases(s));
323
+ lines.push('');
324
+ lines.push(this.renderBorder());
325
+ // Tab content
326
+ const tabId = TABS[this.state.currentTab];
327
+ switch (tabId) {
328
+ case 'Actions':
329
+ this.renderActionsTab(lines, s);
330
+ break;
331
+ case 'Details':
332
+ this.renderDetailsTab(lines, s);
333
+ break;
334
+ case 'Dashboard':
335
+ this.renderDashboardTab(lines, s);
336
+ break;
337
+ case 'Manage':
338
+ this.renderManageTab(lines, s);
339
+ break;
340
+ }
341
+ // Footer
342
+ lines.push(...this.renderFooter('↑↓/jk Navigate · ←→/hl Tabs · Enter Action · q/Esc Close'));
343
+ return lines;
344
+ }
345
+ renderTabs(s) {
346
+ return TABS.map((tab, i) => {
347
+ if (i === this.state.currentTab) {
348
+ return s.primaryBold(`[${tab}]`);
349
+ }
350
+ return s.muted(`[${tab}]`);
351
+ }).join(' ');
352
+ }
353
+ renderPhases(s) {
354
+ if (this.state.project && this.state.stats) {
355
+ let phaseLine = ' ';
356
+ for (const phase of PHASES) {
357
+ const isComplete = phase.isComplete(this.state.project, this.state.stats);
358
+ const isActive = phase.isActive(this.state.project, this.state.stats);
359
+ let icon;
360
+ let label;
361
+ if (isComplete) {
362
+ icon = s.success('✓');
363
+ label = s.muted(phase.name);
364
+ }
365
+ else if (isActive) {
366
+ icon = s.primary('►');
367
+ label = s.primary(phase.name);
368
+ }
369
+ else {
370
+ icon = s.muted('○');
371
+ label = s.muted(phase.name);
372
+ }
373
+ phaseLine += `${icon} ${label} `;
374
+ }
375
+ return phaseLine;
376
+ }
377
+ return ` ${s.muted('○ Init ○ Design ○ Backlog ○ Scaffold ○ Build')}`;
378
+ }
379
+ renderActionsTab(lines, s) {
380
+ lines.push(` ${s.muted('Quick Actions:')}`);
381
+ lines.push('');
382
+ if (this.state.actionsItems.length > 0) {
383
+ const displayActions = this.state.actionsItems.slice(0, MAX_ACTIONS);
384
+ for (let i = 0; i < displayActions.length; i++) {
385
+ const action = displayActions[i];
386
+ const isSelected = i === this.state.actionsIndex;
387
+ const prefix = isSelected ? s.primary('❯ ') : ' ';
388
+ const labelWidth = 20;
389
+ const paddedLabel = action.label.padEnd(labelWidth);
390
+ if (action.enabled) {
391
+ const label = isSelected ? s.primary(paddedLabel) : paddedLabel;
392
+ const desc = s.muted(action.description);
393
+ lines.push(` ${prefix}${label} ${desc}`);
394
+ }
395
+ else {
396
+ lines.push(` ${prefix}${s.muted(paddedLabel)} ${s.muted(action.description)}`);
397
+ }
398
+ }
399
+ }
400
+ else {
401
+ lines.push(` ${s.muted(' No actions available')}`);
402
+ }
403
+ }
404
+ renderDetailsTab(lines, s) {
405
+ if (!this.state.project) {
406
+ lines.push(` ${s.muted('No project selected')}`);
407
+ return;
408
+ }
409
+ const project = this.state.project;
410
+ lines.push(` ${s.muted('Project Details:')}`);
411
+ lines.push('');
412
+ const infoRows = [
413
+ ['Name', project.name],
414
+ ['Display Name', project.displayName],
415
+ ['Type', project.type],
416
+ ['Path', project.path],
417
+ ['Created', project.createdAt.toLocaleDateString()],
418
+ ['Last Activity', formatRelativeTime(project.lastActivityAt)],
419
+ ['Lifecycle', project.lifecycleState],
420
+ ];
421
+ for (const [label, value] of infoRows) {
422
+ lines.push(` ${s.muted(label.padEnd(15))} ${value}`);
423
+ }
424
+ if (project.description) {
425
+ lines.push('');
426
+ lines.push(` ${s.muted('Description:')}`);
427
+ lines.push(` ${project.description}`);
428
+ }
429
+ }
430
+ renderDashboardTab(lines, s) {
431
+ if (!this.state.project) {
432
+ lines.push(` ${s.muted('No project selected')}`);
433
+ return;
434
+ }
435
+ lines.push(` ${s.muted('Dashboard:')}`);
436
+ lines.push('');
437
+ lines.push(` ${s.warning('Coming soon...')}`);
438
+ lines.push('');
439
+ lines.push(` ${s.muted('This tab will show:')}`);
440
+ lines.push(` ${s.muted('• Current in-progress work item')}`);
441
+ lines.push(` ${s.muted('• Recent activity')}`);
442
+ lines.push(` ${s.muted('• Project health indicators')}`);
443
+ }
444
+ renderManageTab(lines, s) {
445
+ if (!this.state.project) {
446
+ lines.push(` ${s.muted('No project selected')}`);
447
+ return;
448
+ }
449
+ lines.push(` ${s.muted('Management Actions:')}`);
450
+ lines.push('');
451
+ const actions = this.state.manageActions;
452
+ if (actions.length > 0) {
453
+ for (let i = 0; i < actions.length; i++) {
454
+ const action = actions[i];
455
+ const isSelected = i === this.state.manageActionIndex;
456
+ const prefix = isSelected ? s.primary('❯ ') : ' ';
457
+ const labelWidth = 20;
458
+ const paddedLabel = action.label.padEnd(labelWidth);
459
+ let labelStyle;
460
+ if (!action.enabled) {
461
+ // Disabled actions are always muted
462
+ labelStyle = s.muted;
463
+ }
464
+ else if (isSelected) {
465
+ labelStyle = action.style === 'danger' ? s.error :
466
+ action.style === 'warning' ? s.warning : s.primary;
467
+ }
468
+ else {
469
+ labelStyle = action.style === 'danger' ? s.error :
470
+ action.style === 'warning' ? s.warning : (text) => text;
471
+ }
472
+ lines.push(` ${prefix}${labelStyle(paddedLabel)} ${s.muted(action.description)}`);
473
+ }
474
+ }
475
+ }
476
+ handleKey(key) {
477
+ // Ctrl+C always closes
478
+ if (this.isInterruptKey(key)) {
479
+ return this.close({ command: null });
480
+ }
481
+ // q or Esc closes
482
+ if (this.isCloseKey(key)) {
483
+ return this.close({ command: null });
484
+ }
485
+ // Tab switching: Tab/→ for next, Shift+Tab/← for previous
486
+ if (this.isTabKey(key) || this.isRightKey(key)) {
487
+ this.state.currentTab = (this.state.currentTab + 1) % TABS.length;
488
+ return this.rerender();
489
+ }
490
+ if (this.isShiftTabKey(key) || this.isLeftKey(key)) {
491
+ this.state.currentTab = (this.state.currentTab - 1 + TABS.length) % TABS.length;
492
+ return this.rerender();
493
+ }
494
+ // Number keys to jump to tab (1-4)
495
+ const num = this.getNumberKey(key);
496
+ if (num && num <= TABS.length) {
497
+ this.state.currentTab = num - 1;
498
+ return this.rerender();
499
+ }
500
+ // Tab-specific key handling
501
+ const tabId = TABS[this.state.currentTab];
502
+ if (tabId === 'Actions') {
503
+ return this.handleActionsTabKey(key);
504
+ }
505
+ else if (tabId === 'Manage') {
506
+ return this.handleManageTabKey(key);
507
+ }
508
+ // Details and Dashboard tabs are read-only
509
+ return this.noAction();
510
+ }
511
+ handleActionsTabKey(key) {
512
+ if (this.isUpKey(key)) {
513
+ if (this.state.actionsItems.length > 0) {
514
+ this.state.actionsIndex = (this.state.actionsIndex - 1 + this.state.actionsItems.length) % this.state.actionsItems.length;
515
+ return this.rerender();
516
+ }
517
+ return this.noAction();
518
+ }
519
+ if (this.isDownKey(key)) {
520
+ if (this.state.actionsItems.length > 0) {
521
+ this.state.actionsIndex = (this.state.actionsIndex + 1) % this.state.actionsItems.length;
522
+ return this.rerender();
523
+ }
524
+ return this.noAction();
525
+ }
526
+ if (this.isEnterKey(key)) {
527
+ if (this.state.actionsItems.length > 0) {
528
+ const action = this.state.actionsItems[this.state.actionsIndex];
529
+ if (action.enabled) {
530
+ // Try to push overlay for known commands (enables parent navigation on Escape)
531
+ const overlay = this.createOverlayForCommand(action.command);
532
+ if (overlay) {
533
+ return this.push(overlay);
534
+ }
535
+ // Fall back to closing with command for commands without V2 overlays
536
+ return this.close({ command: action.command });
537
+ }
538
+ }
539
+ return this.noAction();
540
+ }
541
+ return this.noAction();
542
+ }
543
+ /**
544
+ * Create an overlay instance for a command.
545
+ * Returns null for commands that don't have V2 overlay implementations.
546
+ * Passes the current project ID to child overlays so they show data for this project,
547
+ * not the globally active project.
548
+ */
549
+ createOverlayForCommand(command) {
550
+ const projectId = this.state.project?.id;
551
+ switch (command) {
552
+ case '/backlog':
553
+ return new BacklogOverlayV2(projectId);
554
+ case '/docs':
555
+ return new DocsOverlayV2(projectId);
556
+ case '/anchors':
557
+ return new AnchorsOverlayV2(projectId);
558
+ default:
559
+ return null;
560
+ }
561
+ }
562
+ handleManageTabKey(key) {
563
+ if (this.isUpKey(key)) {
564
+ if (this.state.manageActions.length > 0) {
565
+ this.state.manageActionIndex = (this.state.manageActionIndex - 1 + this.state.manageActions.length) % this.state.manageActions.length;
566
+ return this.rerender();
567
+ }
568
+ return this.noAction();
569
+ }
570
+ if (this.isDownKey(key)) {
571
+ if (this.state.manageActions.length > 0) {
572
+ this.state.manageActionIndex = (this.state.manageActionIndex + 1) % this.state.manageActions.length;
573
+ return this.rerender();
574
+ }
575
+ return this.noAction();
576
+ }
577
+ if (this.isEnterKey(key)) {
578
+ if (this.state.manageActions.length > 0 && this.state.project) {
579
+ const action = this.state.manageActions[this.state.manageActionIndex];
580
+ // Don't execute disabled actions
581
+ if (!action.enabled) {
582
+ return this.noAction();
583
+ }
584
+ return this.executeManageAction(action);
585
+ }
586
+ return this.noAction();
587
+ }
588
+ return this.noAction();
589
+ }
590
+ executeManageAction(action) {
591
+ if (!this.state.project)
592
+ return this.noAction();
593
+ switch (action.id) {
594
+ case 'set-active':
595
+ setCurrentProject({
596
+ id: this.state.project.id,
597
+ name: this.state.project.name,
598
+ displayName: this.state.project.displayName,
599
+ path: this.state.project.path,
600
+ });
601
+ projectRepository.touch(this.state.project.id);
602
+ this.state.manageActions = buildManageActions(this.state.project);
603
+ return this.rerender();
604
+ case 'archive': {
605
+ projectRepository.update(this.state.project.id, { status: 'archived' });
606
+ const activeProject = getCurrentProject();
607
+ if (activeProject?.id === this.state.project.id) {
608
+ clearCurrentProject();
609
+ }
610
+ this.refreshProject();
611
+ return this.rerender();
612
+ }
613
+ case 'restore':
614
+ projectRepository.update(this.state.project.id, { status: 'active' });
615
+ this.refreshProject();
616
+ return this.rerender();
617
+ case 'edit':
618
+ case 'delete':
619
+ return this.close({
620
+ command: null,
621
+ action: action.id,
622
+ projectId: this.state.project.id,
623
+ });
624
+ }
625
+ return this.noAction();
626
+ }
627
+ refreshProject() {
628
+ if (!this.state.project)
629
+ return;
630
+ this.state.project = projectRepository.getById(this.state.project.id);
631
+ if (this.state.project) {
632
+ this.state.stats = getProjectStats(this.state.project);
633
+ this.state.actionsItems = buildActionsItems(this.state.project, this.state.stats);
634
+ this.state.manageActions = buildManageActions(this.state.project);
635
+ }
636
+ }
637
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Overlay System
3
+ *
4
+ * Exports all overlay-related types, utilities, and V2 implementations.
5
+ */
6
+ export type { Overlay, RenderContext, OverlayContent, OverlayAction, KeyEvent, OverlayResolver, OverlayRenderState, } from './types.js';
7
+ export { isCloseWithResult, isCloseCancelled } from './types.js';
8
+ export { parseKeyEvent, matchesKey } from './key-utils.js';
9
+ export { HelpOverlayV2 } from './impl/help-overlay-v2.js';
10
+ export { ThemeOverlayV2, type ThemeOverlayOptions, type ThemeOverlayResult } from './impl/theme-overlay-v2.js';
11
+ export { ModelOverlayV2, type ModelOverlayV2Options, type ModelOverlayV2Result } from './impl/model-overlay-v2.js';
12
+ export { ToolsOverlayV2, type ToolsOverlayV2Options, type ToolsOverlayV2Result, type ToolInfo, type ToolParameter, type ToolPermissionInfo } from './impl/tools-overlay-v2.js';
13
+ export { KeysOverlayV2, type KeysOverlayV2Result } from './impl/keys-overlay-v2.js';
14
+ export { MascotOverlayV2, type MascotOverlayV2Options, type MascotOverlayV2Result } from './impl/mascot-overlay-v2.js';
15
+ export { TutorialOverlayV2, type TutorialOverlayV2Result } from './impl/tutorial-overlay-v2.js';
16
+ export { CommandsOverlayV2, type CommandsOverlayV2Result } from './impl/commands-overlay-v2.js';
17
+ export { AgentsOverlayV2, type AgentsOverlayV2Result } from './impl/agents-overlay-v2.js';
18
+ export { BacklogOverlayV2, type BacklogOverlayV2Result, type BacklogItem, type BacklogType, type BacklogPriority, type BacklogStatus } from './impl/backlog-overlay-v2.js';
19
+ export { WorkflowOverlayV2, type WorkflowOverlayV2Result } from './impl/workflow-overlay-v2.js';
20
+ export { DocsOverlayV2, type DocsOverlayV2Result } from './impl/docs-overlay-v2.js';
21
+ export { DocumentDetailOverlayV2, type DocumentDetailResult } from './impl/document-detail-overlay-v2.js';
22
+ export { AnchorsOverlayV2, type AnchorsOverlayV2Result } from './impl/anchors-overlay-v2.js';
23
+ export { ProjectsOverlayV2, type ProjectsOverlayV2Result } from './impl/projects-overlay-v2.js';
24
+ export { ConfigOverlayV2, type ConfigOverlayV2Options, type ConfigOverlayV2Result } from './impl/config-overlay-v2.js';
25
+ export { AskUserSimpleOverlayV2, type AskUserSimpleOptionsV2, type AskUserSimpleResultV2 } from './impl/ask-user-simple-overlay-v2.js';
26
+ export { GuardrailOverlayV2, type GuardrailConfirmOptionsV2, type GuardrailConfirmResultV2 } from './impl/guardrail-overlay-v2.js';
27
+ export { AskUserOverlayV2, type AskUserOptionsV2, type AskUserResultV2 } from './impl/ask-user-overlay-v2.js';
28
+ export { IterationLimitOverlayV2, type IterationLimitOptionsV2, type IterationLimitResultV2 } from './impl/iteration-limit-overlay-v2.js';
29
+ export { ModelWarningOverlayV2, type ModelWarningOptionsV2, type ModelWarningChoiceV2 } from './impl/model-warning-overlay-v2.js';
30
+ export { NewProjectOverlayV2, type NewProjectResultV2 } from './impl/new-overlay-v2.js';
31
+ export { InitSetupOverlayV2, type InitSetupResultV2 } from './impl/init-setup-overlay-v2.js';
32
+ export { ArchTypeOverlayV2, type ArchTypeChoiceV2, type ArchDocType } from './impl/arch-type-overlay-v2.js';
33
+ export { DashboardOverlayV2, type DashboardOverlayV2Result } from './impl/dashboard-overlay-v2.js';