jumbo-cli 3.2.1 → 3.3.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 (423) hide show
  1. package/README.md +2 -2
  2. package/dist/application/context/goals/codify/CodifierProcessManager.d.ts.map +1 -1
  3. package/dist/application/context/goals/codify/CodifierProcessManager.js +9 -3
  4. package/dist/application/context/goals/codify/CodifierProcessManager.js.map +1 -1
  5. package/dist/application/context/goals/refine/RefinerProcessManager.d.ts.map +1 -1
  6. package/dist/application/context/goals/refine/RefinerProcessManager.js +19 -3
  7. package/dist/application/context/goals/refine/RefinerProcessManager.js.map +1 -1
  8. package/dist/application/context/goals/review/ReviewerProcessManager.d.ts.map +1 -1
  9. package/dist/application/context/goals/review/ReviewerProcessManager.js +16 -3
  10. package/dist/application/context/goals/review/ReviewerProcessManager.js.map +1 -1
  11. package/dist/domain/architecture/define/ArchitectureDefinedEvent.d.ts +2 -1
  12. package/dist/domain/architecture/define/ArchitectureDefinedEvent.d.ts.map +1 -1
  13. package/dist/domain/architecture/update/ArchitectureUpdatedEvent.d.ts +2 -1
  14. package/dist/domain/architecture/update/ArchitectureUpdatedEvent.d.ts.map +1 -1
  15. package/dist/domain/audience-pains/add/AudiencePainAddedEvent.d.ts +2 -1
  16. package/dist/domain/audience-pains/add/AudiencePainAddedEvent.d.ts.map +1 -1
  17. package/dist/domain/audience-pains/update/AudiencePainUpdatedEvent.d.ts +2 -1
  18. package/dist/domain/audience-pains/update/AudiencePainUpdatedEvent.d.ts.map +1 -1
  19. package/dist/domain/audiences/add/AudienceAddedEvent.d.ts +2 -2
  20. package/dist/domain/audiences/add/AudienceAddedEvent.d.ts.map +1 -1
  21. package/dist/domain/audiences/remove/AudienceRemovedEvent.d.ts +2 -1
  22. package/dist/domain/audiences/remove/AudienceRemovedEvent.d.ts.map +1 -1
  23. package/dist/domain/audiences/update/AudienceUpdatedEvent.d.ts +2 -2
  24. package/dist/domain/audiences/update/AudienceUpdatedEvent.d.ts.map +1 -1
  25. package/dist/domain/components/add/ComponentAddedEvent.d.ts +2 -2
  26. package/dist/domain/components/add/ComponentAddedEvent.d.ts.map +1 -1
  27. package/dist/domain/components/deprecate/ComponentDeprecatedEvent.d.ts +2 -2
  28. package/dist/domain/components/deprecate/ComponentDeprecatedEvent.d.ts.map +1 -1
  29. package/dist/domain/components/remove/ComponentRemovedEvent.d.ts +2 -2
  30. package/dist/domain/components/remove/ComponentRemovedEvent.d.ts.map +1 -1
  31. package/dist/domain/components/update/ComponentUpdatedEvent.d.ts +2 -2
  32. package/dist/domain/components/update/ComponentUpdatedEvent.d.ts.map +1 -1
  33. package/dist/domain/goals/unblock/GoalUnblockedEvent.d.ts +2 -2
  34. package/dist/domain/goals/unblock/GoalUnblockedEvent.d.ts.map +1 -1
  35. package/dist/domain/guidelines/add/GuidelineAddedEvent.d.ts +2 -2
  36. package/dist/domain/guidelines/add/GuidelineAddedEvent.d.ts.map +1 -1
  37. package/dist/domain/guidelines/remove/GuidelineRemovedEvent.d.ts +2 -1
  38. package/dist/domain/guidelines/remove/GuidelineRemovedEvent.d.ts.map +1 -1
  39. package/dist/domain/guidelines/update/GuidelineUpdatedEvent.d.ts +2 -2
  40. package/dist/domain/guidelines/update/GuidelineUpdatedEvent.d.ts.map +1 -1
  41. package/dist/domain/invariants/add/InvariantAddedEvent.d.ts +2 -1
  42. package/dist/domain/invariants/add/InvariantAddedEvent.d.ts.map +1 -1
  43. package/dist/domain/invariants/remove/InvariantRemovedEvent.d.ts +2 -1
  44. package/dist/domain/invariants/remove/InvariantRemovedEvent.d.ts.map +1 -1
  45. package/dist/domain/invariants/update/InvariantUpdatedEvent.d.ts +2 -1
  46. package/dist/domain/invariants/update/InvariantUpdatedEvent.d.ts.map +1 -1
  47. package/dist/domain/project/Constants.d.ts +7 -0
  48. package/dist/domain/project/Constants.d.ts.map +1 -1
  49. package/dist/domain/project/Constants.js +7 -0
  50. package/dist/domain/project/Constants.js.map +1 -1
  51. package/dist/domain/project/ProjectLifecyle.d.ts +7 -0
  52. package/dist/domain/project/ProjectLifecyle.d.ts.map +1 -0
  53. package/dist/domain/project/ProjectLifecyle.js +8 -0
  54. package/dist/domain/project/ProjectLifecyle.js.map +1 -0
  55. package/dist/domain/relations/Constants.d.ts +6 -0
  56. package/dist/domain/relations/Constants.d.ts.map +1 -1
  57. package/dist/domain/relations/Constants.js +6 -0
  58. package/dist/domain/relations/Constants.js.map +1 -1
  59. package/dist/domain/relations/Relation.d.ts +2 -2
  60. package/dist/domain/relations/Relation.d.ts.map +1 -1
  61. package/dist/domain/relations/Relation.js +10 -10
  62. package/dist/domain/relations/Relation.js.map +1 -1
  63. package/dist/domain/relations/add/RelationAddedEvent.d.ts +2 -2
  64. package/dist/domain/relations/add/RelationAddedEvent.d.ts.map +1 -1
  65. package/dist/domain/relations/remove/RelationRemovedEvent.d.ts +2 -2
  66. package/dist/domain/relations/remove/RelationRemovedEvent.d.ts.map +1 -1
  67. package/dist/domain/value-propositions/add/ValuePropositionAddedEvent.d.ts +2 -1
  68. package/dist/domain/value-propositions/add/ValuePropositionAddedEvent.d.ts.map +1 -1
  69. package/dist/domain/value-propositions/remove/ValuePropositionRemovedEvent.d.ts +2 -1
  70. package/dist/domain/value-propositions/remove/ValuePropositionRemovedEvent.d.ts.map +1 -1
  71. package/dist/domain/value-propositions/update/ValuePropositionUpdatedEvent.d.ts +2 -1
  72. package/dist/domain/value-propositions/update/ValuePropositionUpdatedEvent.d.ts.map +1 -1
  73. package/dist/infrastructure/agents/AgentCliGateway.d.ts.map +1 -1
  74. package/dist/infrastructure/agents/AgentCliGateway.js +30 -10
  75. package/dist/infrastructure/agents/AgentCliGateway.js.map +1 -1
  76. package/dist/infrastructure/context/project/init/CodexConfigurer.d.ts +19 -6
  77. package/dist/infrastructure/context/project/init/CodexConfigurer.d.ts.map +1 -1
  78. package/dist/infrastructure/context/project/init/CodexConfigurer.js +177 -9
  79. package/dist/infrastructure/context/project/init/CodexConfigurer.js.map +1 -1
  80. package/dist/presentation/tui/Constants.d.ts +18 -0
  81. package/dist/presentation/tui/Constants.d.ts.map +1 -0
  82. package/dist/presentation/tui/Constants.js +28 -0
  83. package/dist/presentation/tui/Constants.js.map +1 -0
  84. package/dist/presentation/tui/action-dispatch/TuiActionDispatcher.d.ts +4 -10
  85. package/dist/presentation/tui/action-dispatch/TuiActionDispatcher.d.ts.map +1 -1
  86. package/dist/presentation/tui/action-dispatch/TuiActionDispatcher.js +17 -20
  87. package/dist/presentation/tui/action-dispatch/TuiActionDispatcher.js.map +1 -1
  88. package/dist/presentation/tui/action-dispatch/TuiActionErrorNormalizer.d.ts +4 -0
  89. package/dist/presentation/tui/action-dispatch/TuiActionErrorNormalizer.d.ts.map +1 -0
  90. package/dist/presentation/tui/action-dispatch/TuiActionErrorNormalizer.js +9 -0
  91. package/dist/presentation/tui/action-dispatch/TuiActionErrorNormalizer.js.map +1 -0
  92. package/dist/presentation/tui/action-dispatch/TuiActionResult.d.ts +8 -0
  93. package/dist/presentation/tui/action-dispatch/TuiActionResult.d.ts.map +1 -0
  94. package/dist/presentation/tui/action-dispatch/TuiActionResult.js +2 -0
  95. package/dist/presentation/tui/action-dispatch/TuiActionResult.js.map +1 -0
  96. package/dist/presentation/tui/action-dispatch/TuiRequestController.d.ts +4 -0
  97. package/dist/presentation/tui/action-dispatch/TuiRequestController.d.ts.map +1 -0
  98. package/dist/presentation/tui/action-dispatch/TuiRequestController.js +2 -0
  99. package/dist/presentation/tui/action-dispatch/TuiRequestController.js.map +1 -0
  100. package/dist/presentation/tui/application-shell/Footer.d.ts +2 -6
  101. package/dist/presentation/tui/application-shell/Footer.d.ts.map +1 -1
  102. package/dist/presentation/tui/application-shell/Footer.js +16 -12
  103. package/dist/presentation/tui/application-shell/Footer.js.map +1 -1
  104. package/dist/presentation/tui/application-shell/FooterShortcutDescriptor.d.ts +16 -0
  105. package/dist/presentation/tui/application-shell/FooterShortcutDescriptor.d.ts.map +1 -0
  106. package/dist/presentation/tui/application-shell/FooterShortcutDescriptor.js +10 -0
  107. package/dist/presentation/tui/application-shell/FooterShortcutDescriptor.js.map +1 -0
  108. package/dist/presentation/tui/application-shell/FooterUnreadNotificationCounter.d.ts +3 -0
  109. package/dist/presentation/tui/application-shell/FooterUnreadNotificationCounter.d.ts.map +1 -0
  110. package/dist/presentation/tui/application-shell/FooterUnreadNotificationCounter.js +4 -0
  111. package/dist/presentation/tui/application-shell/FooterUnreadNotificationCounter.js.map +1 -0
  112. package/dist/presentation/tui/application-shell/Header.d.ts.map +1 -1
  113. package/dist/presentation/tui/application-shell/Header.js +4 -3
  114. package/dist/presentation/tui/application-shell/Header.js.map +1 -1
  115. package/dist/presentation/tui/application-shell/HeaderConstants.d.ts +6 -0
  116. package/dist/presentation/tui/application-shell/HeaderConstants.d.ts.map +1 -0
  117. package/dist/presentation/tui/application-shell/HeaderConstants.js +6 -0
  118. package/dist/presentation/tui/application-shell/HeaderConstants.js.map +1 -0
  119. package/dist/presentation/tui/application-shell/TuiApp.d.ts +1 -1
  120. package/dist/presentation/tui/application-shell/TuiApp.d.ts.map +1 -1
  121. package/dist/presentation/tui/application-shell/TuiApp.js +26 -23
  122. package/dist/presentation/tui/application-shell/TuiApp.js.map +1 -1
  123. package/dist/presentation/tui/application-shell/TuiAppConstants.d.ts +18 -0
  124. package/dist/presentation/tui/application-shell/TuiAppConstants.d.ts.map +1 -0
  125. package/dist/presentation/tui/application-shell/TuiAppConstants.js +18 -0
  126. package/dist/presentation/tui/application-shell/TuiAppConstants.js.map +1 -0
  127. package/dist/presentation/tui/application-shell/useFooterNotificationDismissal.d.ts +6 -0
  128. package/dist/presentation/tui/application-shell/useFooterNotificationDismissal.d.ts.map +1 -0
  129. package/dist/presentation/tui/application-shell/useFooterNotificationDismissal.js +9 -0
  130. package/dist/presentation/tui/application-shell/useFooterNotificationDismissal.js.map +1 -0
  131. package/dist/presentation/tui/billboard/AnimatedBillboard.d.ts.map +1 -1
  132. package/dist/presentation/tui/billboard/AnimatedBillboard.js +26 -100
  133. package/dist/presentation/tui/billboard/AnimatedBillboard.js.map +1 -1
  134. package/dist/presentation/tui/billboard/AnimatedBillboardPalette.d.ts +31 -0
  135. package/dist/presentation/tui/billboard/AnimatedBillboardPalette.d.ts.map +1 -0
  136. package/dist/presentation/tui/billboard/AnimatedBillboardPalette.js +54 -0
  137. package/dist/presentation/tui/billboard/AnimatedBillboardPalette.js.map +1 -0
  138. package/dist/presentation/tui/billboard/AnimatedBillboardPhase.d.ts +8 -0
  139. package/dist/presentation/tui/billboard/AnimatedBillboardPhase.d.ts.map +1 -0
  140. package/dist/presentation/tui/billboard/AnimatedBillboardPhase.js +7 -0
  141. package/dist/presentation/tui/billboard/AnimatedBillboardPhase.js.map +1 -0
  142. package/dist/presentation/tui/billboard/AnimatedBillboardStickerArt.d.ts +2 -0
  143. package/dist/presentation/tui/billboard/AnimatedBillboardStickerArt.d.ts.map +1 -0
  144. package/dist/presentation/tui/billboard/AnimatedBillboardStickerArt.js +17 -0
  145. package/dist/presentation/tui/billboard/AnimatedBillboardStickerArt.js.map +1 -0
  146. package/dist/presentation/tui/billboard/AnimatedBillboardWordmarkArt.d.ts +2 -0
  147. package/dist/presentation/tui/billboard/AnimatedBillboardWordmarkArt.d.ts.map +1 -0
  148. package/dist/presentation/tui/billboard/AnimatedBillboardWordmarkArt.js +10 -0
  149. package/dist/presentation/tui/billboard/AnimatedBillboardWordmarkArt.js.map +1 -0
  150. package/dist/presentation/tui/cockpit/CockpitDaemonConfiguration.d.ts +1 -2
  151. package/dist/presentation/tui/cockpit/CockpitDaemonConfiguration.d.ts.map +1 -1
  152. package/dist/presentation/tui/cockpit/CockpitDaemonConfiguration.js +4 -5
  153. package/dist/presentation/tui/cockpit/CockpitDaemonConfiguration.js.map +1 -1
  154. package/dist/presentation/tui/cockpit/CockpitDaemonEvents.d.ts.map +1 -1
  155. package/dist/presentation/tui/cockpit/CockpitDaemonEvents.js +23 -15
  156. package/dist/presentation/tui/cockpit/CockpitDaemonEvents.js.map +1 -1
  157. package/dist/presentation/tui/cockpit/CockpitDaemonFrames.d.ts +4 -4
  158. package/dist/presentation/tui/cockpit/CockpitDaemonFrames.d.ts.map +1 -1
  159. package/dist/presentation/tui/cockpit/CockpitDaemonFrames.js +5 -2
  160. package/dist/presentation/tui/cockpit/CockpitDaemonFrames.js.map +1 -1
  161. package/dist/presentation/tui/cockpit/CockpitDaemonPanel.d.ts +6 -17
  162. package/dist/presentation/tui/cockpit/CockpitDaemonPanel.d.ts.map +1 -1
  163. package/dist/presentation/tui/cockpit/CockpitDaemonPanel.js +20 -75
  164. package/dist/presentation/tui/cockpit/CockpitDaemonPanel.js.map +1 -1
  165. package/dist/presentation/tui/cockpit/CockpitDaemonPanelCopy.d.ts +12 -0
  166. package/dist/presentation/tui/cockpit/CockpitDaemonPanelCopy.d.ts.map +1 -0
  167. package/dist/presentation/tui/cockpit/CockpitDaemonPanelCopy.js +12 -0
  168. package/dist/presentation/tui/cockpit/CockpitDaemonPanelCopy.js.map +1 -0
  169. package/dist/presentation/tui/cockpit/CockpitDaemonSnapshot.d.ts +10 -0
  170. package/dist/presentation/tui/cockpit/CockpitDaemonSnapshot.d.ts.map +1 -0
  171. package/dist/presentation/tui/cockpit/CockpitDaemonSnapshot.js +2 -0
  172. package/dist/presentation/tui/cockpit/CockpitDaemonSnapshot.js.map +1 -0
  173. package/dist/presentation/tui/cockpit/CockpitGreeterCopy.d.ts +10 -0
  174. package/dist/presentation/tui/cockpit/CockpitGreeterCopy.d.ts.map +1 -0
  175. package/dist/presentation/tui/cockpit/CockpitGreeterCopy.js +14 -0
  176. package/dist/presentation/tui/cockpit/CockpitGreeterCopy.js.map +1 -0
  177. package/dist/presentation/tui/cockpit/CockpitGreeterView.d.ts.map +1 -1
  178. package/dist/presentation/tui/cockpit/CockpitGreeterView.js +3 -2
  179. package/dist/presentation/tui/cockpit/CockpitGreeterView.js.map +1 -1
  180. package/dist/presentation/tui/cockpit/CockpitLaunchpadCopy.d.ts +4 -0
  181. package/dist/presentation/tui/cockpit/CockpitLaunchpadCopy.d.ts.map +1 -0
  182. package/dist/presentation/tui/cockpit/CockpitLaunchpadCopy.js +4 -0
  183. package/dist/presentation/tui/cockpit/CockpitLaunchpadCopy.js.map +1 -0
  184. package/dist/presentation/tui/cockpit/CockpitLaunchpadView.d.ts.map +1 -1
  185. package/dist/presentation/tui/cockpit/CockpitLaunchpadView.js +45 -31
  186. package/dist/presentation/tui/cockpit/CockpitLaunchpadView.js.map +1 -1
  187. package/dist/presentation/tui/cockpit/CockpitLaunchpadWelcome.d.ts.map +1 -1
  188. package/dist/presentation/tui/cockpit/CockpitLaunchpadWelcome.js +5 -4
  189. package/dist/presentation/tui/cockpit/CockpitLaunchpadWelcome.js.map +1 -1
  190. package/dist/presentation/tui/cockpit/CockpitLaunchpadWelcomeCopy.d.ts +9 -0
  191. package/dist/presentation/tui/cockpit/CockpitLaunchpadWelcomeCopy.d.ts.map +1 -0
  192. package/dist/presentation/tui/cockpit/CockpitLaunchpadWelcomeCopy.js +12 -0
  193. package/dist/presentation/tui/cockpit/CockpitLaunchpadWelcomeCopy.js.map +1 -0
  194. package/dist/presentation/tui/cockpit/CockpitPrimedEmptyCopy.d.ts +12 -0
  195. package/dist/presentation/tui/cockpit/CockpitPrimedEmptyCopy.d.ts.map +1 -0
  196. package/dist/presentation/tui/cockpit/CockpitPrimedEmptyCopy.js +16 -0
  197. package/dist/presentation/tui/cockpit/CockpitPrimedEmptyCopy.js.map +1 -0
  198. package/dist/presentation/tui/cockpit/CockpitPrimedEmptyView.d.ts.map +1 -1
  199. package/dist/presentation/tui/cockpit/CockpitPrimedEmptyView.js +7 -6
  200. package/dist/presentation/tui/cockpit/CockpitPrimedEmptyView.js.map +1 -1
  201. package/dist/presentation/tui/cockpit/CockpitScreen.d.ts +2 -1
  202. package/dist/presentation/tui/cockpit/CockpitScreen.d.ts.map +1 -1
  203. package/dist/presentation/tui/cockpit/CockpitScreen.js +23 -19
  204. package/dist/presentation/tui/cockpit/CockpitScreen.js.map +1 -1
  205. package/dist/presentation/tui/cockpit/CockpitScreenCopy.d.ts +7 -0
  206. package/dist/presentation/tui/cockpit/CockpitScreenCopy.d.ts.map +1 -0
  207. package/dist/presentation/tui/cockpit/CockpitScreenCopy.js +7 -0
  208. package/dist/presentation/tui/cockpit/CockpitScreenCopy.js.map +1 -0
  209. package/dist/presentation/tui/cockpit/CockpitScreenDefaults.d.ts +6 -0
  210. package/dist/presentation/tui/cockpit/CockpitScreenDefaults.d.ts.map +1 -0
  211. package/dist/presentation/tui/cockpit/CockpitScreenDefaults.js +6 -0
  212. package/dist/presentation/tui/cockpit/CockpitScreenDefaults.js.map +1 -0
  213. package/dist/presentation/tui/cockpit/CockpitUnprimedCopy.d.ts +12 -0
  214. package/dist/presentation/tui/cockpit/CockpitUnprimedCopy.d.ts.map +1 -0
  215. package/dist/presentation/tui/cockpit/CockpitUnprimedCopy.js +16 -0
  216. package/dist/presentation/tui/cockpit/CockpitUnprimedCopy.js.map +1 -0
  217. package/dist/presentation/tui/cockpit/CockpitUnprimedView.d.ts.map +1 -1
  218. package/dist/presentation/tui/cockpit/CockpitUnprimedView.js +8 -7
  219. package/dist/presentation/tui/cockpit/CockpitUnprimedView.js.map +1 -1
  220. package/dist/presentation/tui/cockpit/DaemonFrameViews.d.ts +17 -0
  221. package/dist/presentation/tui/cockpit/DaemonFrameViews.d.ts.map +1 -0
  222. package/dist/presentation/tui/cockpit/DaemonFrameViews.js +20 -0
  223. package/dist/presentation/tui/cockpit/DaemonFrameViews.js.map +1 -0
  224. package/dist/presentation/tui/cockpit/DaemonPanelStatusLabel.d.ts +4 -0
  225. package/dist/presentation/tui/cockpit/DaemonPanelStatusLabel.d.ts.map +1 -0
  226. package/dist/presentation/tui/cockpit/DaemonPanelStatusLabel.js +14 -0
  227. package/dist/presentation/tui/cockpit/DaemonPanelStatusLabel.js.map +1 -0
  228. package/dist/presentation/tui/cockpit/daemons/CodifierDaemonConstants.d.ts +11 -0
  229. package/dist/presentation/tui/cockpit/daemons/CodifierDaemonConstants.d.ts.map +1 -0
  230. package/dist/presentation/tui/cockpit/daemons/CodifierDaemonConstants.js +15 -0
  231. package/dist/presentation/tui/cockpit/daemons/CodifierDaemonConstants.js.map +1 -0
  232. package/dist/presentation/tui/cockpit/daemons/CodifierDaemonFrame.d.ts +4 -0
  233. package/dist/presentation/tui/cockpit/daemons/CodifierDaemonFrame.d.ts.map +1 -0
  234. package/dist/presentation/tui/cockpit/daemons/CodifierDaemonFrame.js +7 -0
  235. package/dist/presentation/tui/cockpit/daemons/CodifierDaemonFrame.js.map +1 -0
  236. package/dist/presentation/tui/cockpit/daemons/IDaemonConstants.d.ts +11 -0
  237. package/dist/presentation/tui/cockpit/daemons/IDaemonConstants.d.ts.map +1 -0
  238. package/dist/presentation/tui/cockpit/daemons/IDaemonConstants.js +2 -0
  239. package/dist/presentation/tui/cockpit/daemons/IDaemonConstants.js.map +1 -0
  240. package/dist/presentation/tui/cockpit/daemons/IDaemonFrame.d.ts +11 -0
  241. package/dist/presentation/tui/cockpit/daemons/IDaemonFrame.d.ts.map +1 -0
  242. package/dist/presentation/tui/cockpit/daemons/IDaemonFrame.js +2 -0
  243. package/dist/presentation/tui/cockpit/daemons/IDaemonFrame.js.map +1 -0
  244. package/dist/presentation/tui/cockpit/daemons/IDaemonUiDefinition.d.ts +7 -0
  245. package/dist/presentation/tui/cockpit/daemons/IDaemonUiDefinition.d.ts.map +1 -0
  246. package/dist/presentation/tui/cockpit/daemons/IDaemonUiDefinition.js +2 -0
  247. package/dist/presentation/tui/cockpit/daemons/IDaemonUiDefinition.js.map +1 -0
  248. package/dist/presentation/tui/cockpit/daemons/RefinerDaemonConstants.d.ts +11 -0
  249. package/dist/presentation/tui/cockpit/daemons/RefinerDaemonConstants.d.ts.map +1 -0
  250. package/dist/presentation/tui/cockpit/daemons/RefinerDaemonConstants.js +15 -0
  251. package/dist/presentation/tui/cockpit/daemons/RefinerDaemonConstants.js.map +1 -0
  252. package/dist/presentation/tui/cockpit/daemons/RefinerDaemonFrame.d.ts +4 -0
  253. package/dist/presentation/tui/cockpit/daemons/RefinerDaemonFrame.d.ts.map +1 -0
  254. package/dist/presentation/tui/cockpit/daemons/RefinerDaemonFrame.js +7 -0
  255. package/dist/presentation/tui/cockpit/daemons/RefinerDaemonFrame.js.map +1 -0
  256. package/dist/presentation/tui/cockpit/daemons/ReviewerDaemonConstants.d.ts +11 -0
  257. package/dist/presentation/tui/cockpit/daemons/ReviewerDaemonConstants.d.ts.map +1 -0
  258. package/dist/presentation/tui/cockpit/daemons/ReviewerDaemonConstants.js +16 -0
  259. package/dist/presentation/tui/cockpit/daemons/ReviewerDaemonConstants.js.map +1 -0
  260. package/dist/presentation/tui/cockpit/daemons/ReviewerDaemonFrame.d.ts +4 -0
  261. package/dist/presentation/tui/cockpit/daemons/ReviewerDaemonFrame.d.ts.map +1 -0
  262. package/dist/presentation/tui/cockpit/daemons/ReviewerDaemonFrame.js +7 -0
  263. package/dist/presentation/tui/cockpit/daemons/ReviewerDaemonFrame.js.map +1 -0
  264. package/dist/presentation/tui/daemon-subprocesses/ISubprocessManager.d.ts +10 -34
  265. package/dist/presentation/tui/daemon-subprocesses/ISubprocessManager.d.ts.map +1 -1
  266. package/dist/presentation/tui/daemon-subprocesses/NoOpSubprocessManager.d.ts.map +1 -1
  267. package/dist/presentation/tui/daemon-subprocesses/NoOpSubprocessManager.js +2 -1
  268. package/dist/presentation/tui/daemon-subprocesses/NoOpSubprocessManager.js.map +1 -1
  269. package/dist/presentation/tui/daemon-subprocesses/SubprocessManagerContext.d.ts +2 -7
  270. package/dist/presentation/tui/daemon-subprocesses/SubprocessManagerContext.d.ts.map +1 -1
  271. package/dist/presentation/tui/daemon-subprocesses/SubprocessManagerContext.js +2 -8
  272. package/dist/presentation/tui/daemon-subprocesses/SubprocessManagerContext.js.map +1 -1
  273. package/dist/presentation/tui/daemon-subprocesses/SubprocessManagerProvider.d.ts +8 -0
  274. package/dist/presentation/tui/daemon-subprocesses/SubprocessManagerProvider.d.ts.map +1 -0
  275. package/dist/presentation/tui/daemon-subprocesses/SubprocessManagerProvider.js +6 -0
  276. package/dist/presentation/tui/daemon-subprocesses/SubprocessManagerProvider.js.map +1 -0
  277. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonConfig.d.ts +2 -0
  278. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonConfig.d.ts.map +1 -0
  279. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonConfig.js +2 -0
  280. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonConfig.js.map +1 -0
  281. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonCounts.d.ts +6 -0
  282. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonCounts.d.ts.map +1 -0
  283. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonCounts.js +2 -0
  284. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonCounts.js.map +1 -0
  285. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventCategory.d.ts +7 -0
  286. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventCategory.d.ts.map +1 -0
  287. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventCategory.js +8 -0
  288. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventCategory.js.map +1 -0
  289. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventSnapshot.d.ts +15 -0
  290. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventSnapshot.d.ts.map +1 -0
  291. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventSnapshot.js +2 -0
  292. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventSnapshot.js.map +1 -0
  293. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventStatus.d.ts +14 -0
  294. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventStatus.d.ts.map +1 -0
  295. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventStatus.js +13 -0
  296. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonEventStatus.js.map +1 -0
  297. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonName.d.ts +2 -0
  298. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonName.d.ts.map +1 -0
  299. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonName.js +2 -0
  300. package/dist/presentation/tui/daemon-subprocesses/TuiDaemonName.js.map +1 -0
  301. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessCopy.d.ts +16 -0
  302. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessCopy.d.ts.map +1 -0
  303. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessCopy.js +16 -0
  304. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessCopy.js.map +1 -0
  305. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessManager.d.ts.map +1 -1
  306. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessManager.js +84 -42
  307. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessManager.js.map +1 -1
  308. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessSnapshot.d.ts +17 -0
  309. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessSnapshot.d.ts.map +1 -0
  310. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessSnapshot.js +2 -0
  311. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessSnapshot.js.map +1 -0
  312. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessStatus.d.ts +7 -0
  313. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessStatus.d.ts.map +1 -0
  314. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessStatus.js +6 -0
  315. package/dist/presentation/tui/daemon-subprocesses/TuiSubprocessStatus.js.map +1 -0
  316. package/dist/presentation/tui/daemon-subprocesses/useSubprocessManager.d.ts +3 -0
  317. package/dist/presentation/tui/daemon-subprocesses/useSubprocessManager.d.ts.map +1 -0
  318. package/dist/presentation/tui/daemon-subprocesses/useSubprocessManager.js +6 -0
  319. package/dist/presentation/tui/daemon-subprocesses/useSubprocessManager.js.map +1 -0
  320. package/dist/presentation/tui/goals/Constants.d.ts +2 -0
  321. package/dist/presentation/tui/goals/Constants.d.ts.map +1 -0
  322. package/dist/presentation/tui/goals/Constants.js +2 -0
  323. package/dist/presentation/tui/goals/Constants.js.map +1 -0
  324. package/dist/presentation/tui/goals/GoalAuthoringFlow.d.ts.map +1 -1
  325. package/dist/presentation/tui/goals/GoalAuthoringFlow.js +80 -88
  326. package/dist/presentation/tui/goals/GoalAuthoringFlow.js.map +1 -1
  327. package/dist/presentation/tui/goals/GoalAuthoringFlowConstants.d.ts +79 -0
  328. package/dist/presentation/tui/goals/GoalAuthoringFlowConstants.d.ts.map +1 -0
  329. package/dist/presentation/tui/goals/GoalAuthoringFlowConstants.js +84 -0
  330. package/dist/presentation/tui/goals/GoalAuthoringFlowConstants.js.map +1 -0
  331. package/dist/presentation/tui/goals/GoalsScreen.d.ts.map +1 -1
  332. package/dist/presentation/tui/goals/GoalsScreen.js +49 -57
  333. package/dist/presentation/tui/goals/GoalsScreen.js.map +1 -1
  334. package/dist/presentation/tui/goals/GoalsScreenConstants.d.ts +33 -0
  335. package/dist/presentation/tui/goals/GoalsScreenConstants.d.ts.map +1 -0
  336. package/dist/presentation/tui/goals/GoalsScreenConstants.js +41 -0
  337. package/dist/presentation/tui/goals/GoalsScreenConstants.js.map +1 -0
  338. package/dist/presentation/tui/index.d.ts +4 -2
  339. package/dist/presentation/tui/index.d.ts.map +1 -1
  340. package/dist/presentation/tui/index.js +2 -1
  341. package/dist/presentation/tui/index.js.map +1 -1
  342. package/dist/presentation/tui/memory/MemoryScreen.d.ts.map +1 -1
  343. package/dist/presentation/tui/memory/MemoryScreen.js +10 -4
  344. package/dist/presentation/tui/memory/MemoryScreen.js.map +1 -1
  345. package/dist/presentation/tui/memory/components/ComponentsScreen.d.ts.map +1 -1
  346. package/dist/presentation/tui/memory/components/ComponentsScreen.js +5 -1
  347. package/dist/presentation/tui/memory/components/ComponentsScreen.js.map +1 -1
  348. package/dist/presentation/tui/memory/decisions/DecisionsScreen.d.ts.map +1 -1
  349. package/dist/presentation/tui/memory/decisions/DecisionsScreen.js +5 -1
  350. package/dist/presentation/tui/memory/decisions/DecisionsScreen.js.map +1 -1
  351. package/dist/presentation/tui/memory/dependencies/DependenciesScreen.d.ts.map +1 -1
  352. package/dist/presentation/tui/memory/dependencies/DependenciesScreen.js +5 -1
  353. package/dist/presentation/tui/memory/dependencies/DependenciesScreen.js.map +1 -1
  354. package/dist/presentation/tui/memory/entity-browser/EntityColumn.d.ts.map +1 -1
  355. package/dist/presentation/tui/memory/entity-browser/EntityColumn.js +4 -1
  356. package/dist/presentation/tui/memory/entity-browser/EntityColumn.js.map +1 -1
  357. package/dist/presentation/tui/memory/entity-browser/EntityDetailView.d.ts.map +1 -1
  358. package/dist/presentation/tui/memory/entity-browser/EntityDetailView.js +96 -40
  359. package/dist/presentation/tui/memory/entity-browser/EntityDetailView.js.map +1 -1
  360. package/dist/presentation/tui/memory/entity-browser/MemoryEntityScreen.d.ts.map +1 -1
  361. package/dist/presentation/tui/memory/entity-browser/MemoryEntityScreen.js +39 -12
  362. package/dist/presentation/tui/memory/entity-browser/MemoryEntityScreen.js.map +1 -1
  363. package/dist/presentation/tui/memory/guidelines/GuidelinesScreen.d.ts.map +1 -1
  364. package/dist/presentation/tui/memory/guidelines/GuidelinesScreen.js +5 -1
  365. package/dist/presentation/tui/memory/guidelines/GuidelinesScreen.js.map +1 -1
  366. package/dist/presentation/tui/memory/invariants/InvariantsScreen.d.ts.map +1 -1
  367. package/dist/presentation/tui/memory/invariants/InvariantsScreen.js +5 -1
  368. package/dist/presentation/tui/memory/invariants/InvariantsScreen.js.map +1 -1
  369. package/dist/presentation/tui/navigation/MegaMenu.d.ts.map +1 -1
  370. package/dist/presentation/tui/navigation/MegaMenu.js +19 -4
  371. package/dist/presentation/tui/navigation/MegaMenu.js.map +1 -1
  372. package/dist/presentation/tui/navigation/MegaMenuDefinitions.d.ts.map +1 -1
  373. package/dist/presentation/tui/navigation/MegaMenuDefinitions.js +101 -56
  374. package/dist/presentation/tui/navigation/MegaMenuDefinitions.js.map +1 -1
  375. package/dist/presentation/tui/navigation/ScreenRouter.d.ts.map +1 -1
  376. package/dist/presentation/tui/navigation/ScreenRouter.js +3 -2
  377. package/dist/presentation/tui/navigation/ScreenRouter.js.map +1 -1
  378. package/dist/presentation/tui/project-initialization/Constants.d.ts +140 -0
  379. package/dist/presentation/tui/project-initialization/Constants.d.ts.map +1 -0
  380. package/dist/presentation/tui/project-initialization/Constants.js +140 -0
  381. package/dist/presentation/tui/project-initialization/Constants.js.map +1 -0
  382. package/dist/presentation/tui/project-initialization/InitFlow.d.ts +1 -1
  383. package/dist/presentation/tui/project-initialization/InitFlow.d.ts.map +1 -1
  384. package/dist/presentation/tui/project-initialization/InitFlow.js +212 -191
  385. package/dist/presentation/tui/project-initialization/InitFlow.js.map +1 -1
  386. package/dist/presentation/tui/sessions/SessionScreen.d.ts.map +1 -1
  387. package/dist/presentation/tui/sessions/SessionScreen.js +53 -12
  388. package/dist/presentation/tui/sessions/SessionScreen.js.map +1 -1
  389. package/dist/presentation/tui/state-reading/TuiStateReader.d.ts.map +1 -1
  390. package/dist/presentation/tui/state-reading/TuiStateReader.js +4 -2
  391. package/dist/presentation/tui/state-reading/TuiStateReader.js.map +1 -1
  392. package/dist/presentation/tui/ui-primitives/ListPanel.d.ts.map +1 -1
  393. package/dist/presentation/tui/ui-primitives/ListPanel.js +2 -1
  394. package/dist/presentation/tui/ui-primitives/ListPanel.js.map +1 -1
  395. package/dist/presentation/tui/ui-primitives/ListPanelConstants.d.ts +4 -0
  396. package/dist/presentation/tui/ui-primitives/ListPanelConstants.d.ts.map +1 -0
  397. package/dist/presentation/tui/ui-primitives/ListPanelConstants.js +4 -0
  398. package/dist/presentation/tui/ui-primitives/ListPanelConstants.js.map +1 -0
  399. package/dist/presentation/tui/ui-primitives/Tumbler.d.ts.map +1 -1
  400. package/dist/presentation/tui/ui-primitives/Tumbler.js +2 -1
  401. package/dist/presentation/tui/ui-primitives/Tumbler.js.map +1 -1
  402. package/dist/presentation/tui/ui-primitives/TumblerConstants.d.ts +4 -0
  403. package/dist/presentation/tui/ui-primitives/TumblerConstants.d.ts.map +1 -0
  404. package/dist/presentation/tui/ui-primitives/TumblerConstants.js +4 -0
  405. package/dist/presentation/tui/ui-primitives/TumblerConstants.js.map +1 -0
  406. package/dist/presentation/tui/wizard/Wizard.d.ts +2 -1
  407. package/dist/presentation/tui/wizard/Wizard.d.ts.map +1 -1
  408. package/dist/presentation/tui/wizard/Wizard.js +47 -20
  409. package/dist/presentation/tui/wizard/Wizard.js.map +1 -1
  410. package/dist/presentation/tui/wizard/WizardConstants.d.ts +27 -0
  411. package/dist/presentation/tui/wizard/WizardConstants.d.ts.map +1 -0
  412. package/dist/presentation/tui/wizard/WizardConstants.js +26 -0
  413. package/dist/presentation/tui/wizard/WizardConstants.js.map +1 -0
  414. package/dist/presentation/work/codifier.daemon.d.ts.map +1 -1
  415. package/dist/presentation/work/codifier.daemon.js +20 -1
  416. package/dist/presentation/work/codifier.daemon.js.map +1 -1
  417. package/dist/presentation/work/refiner.daemon.d.ts.map +1 -1
  418. package/dist/presentation/work/refiner.daemon.js +20 -1
  419. package/dist/presentation/work/refiner.daemon.js.map +1 -1
  420. package/dist/presentation/work/reviewer.daemon.d.ts.map +1 -1
  421. package/dist/presentation/work/reviewer.daemon.js +20 -1
  422. package/dist/presentation/work/reviewer.daemon.js.map +1 -1
  423. package/package.json +1 -1
@@ -1,51 +1,48 @@
1
1
  import React, { useMemo, useState } from "react";
2
2
  import { Box, Text } from "ink";
3
3
  import { Wizard } from "../wizard/Wizard.js";
4
- import { dispatchTuiAction } from "../action-dispatch/TuiActionDispatcher.js";
4
+ import { TuiActionDispatcher } from "../action-dispatch/TuiActionDispatcher.js";
5
5
  import { SemanticColors } from "../../shared/DesignTokens.js";
6
- const YES_NO_MESSAGE = "Enter yes or no";
7
- const REQUIRED_PLAN_CONTROLLER_ERROR = "Project initialization planning is unavailable. Restart Jumbo and try again.";
8
- const REQUIRED_INIT_CONTROLLER_ERROR = "Project initialization is unavailable. Restart Jumbo and try again.";
9
- const REQUIRED_AUDIENCE_CONTROLLER_ERROR = "Audience registration is unavailable. Restart Jumbo and try again.";
10
- const REQUIRED_VALUE_PROPOSITION_CONTROLLER_ERROR = "Value proposition registration is unavailable. Restart Jumbo and try again.";
6
+ import { AudiencePriority } from "../../../domain/audiences/Constants.js";
7
+ import { InitFlowAudiencePriorityOption, InitFlowConfirmationCopy, InitFlowConfirmationGroupLabel, InitFlowControllerErrorCopy, InitFlowCopy, InitFlowFieldKey, InitFlowFieldKind, InitFlowRollback, InitFlowStage, InitFlowValidationCopy, InitFlowYesNoValue, } from "./Constants.js";
11
8
  const INIT_FLOW_STAGES_WITH_AGENT_SELECTION = [
12
- "project",
13
- "audience-gate",
14
- "audience",
15
- "value-gate",
16
- "value",
17
- "agent-selection",
18
- "confirmation",
9
+ InitFlowStage.project,
10
+ InitFlowStage.audienceGate,
11
+ InitFlowStage.audience,
12
+ InitFlowStage.valueGate,
13
+ InitFlowStage.value,
14
+ InitFlowStage.agentSelection,
15
+ InitFlowStage.confirmation,
19
16
  ];
20
17
  const INIT_FLOW_STAGES_WITHOUT_AGENT_SELECTION = [
21
- "project",
22
- "audience-gate",
23
- "audience",
24
- "value-gate",
25
- "value",
26
- "confirmation",
18
+ InitFlowStage.project,
19
+ InitFlowStage.audienceGate,
20
+ InitFlowStage.audience,
21
+ InitFlowStage.valueGate,
22
+ InitFlowStage.value,
23
+ InitFlowStage.confirmation,
27
24
  ];
28
25
  const CONFIRMATION_FILE_REVIEW_PAGE_SIZE = 10;
29
26
  const PROJECT_STEPS = [
30
27
  {
31
- title: "Project Name",
32
- description: "What is your project called? This name will appear in context packets served to coding agents.",
28
+ title: InitFlowCopy.projectNameTitle,
29
+ description: InitFlowCopy.projectNameDescription,
33
30
  fields: [
34
31
  {
35
- key: "projectName",
36
- label: "Project name",
37
- placeholder: "e.g. Jumbo",
32
+ key: InitFlowFieldKey.projectName,
33
+ label: InitFlowCopy.projectNameLabel,
34
+ placeholder: InitFlowCopy.projectNamePlaceholder,
38
35
  },
39
36
  ],
40
37
  },
41
38
  {
42
- title: "Purpose",
43
- description: "Describe the purpose of your project. What problem does it solve? This helps agents understand the north-star.",
39
+ title: InitFlowCopy.purposeTitle,
40
+ description: InitFlowCopy.purposeDescription,
44
41
  fields: [
45
42
  {
46
- key: "purpose",
47
- label: "Project purpose",
48
- placeholder: "e.g. Context management for LLM coding agents",
43
+ key: InitFlowFieldKey.purpose,
44
+ label: InitFlowCopy.purposeLabel,
45
+ placeholder: InitFlowCopy.purposePlaceholder,
49
46
  required: false,
50
47
  },
51
48
  ],
@@ -53,14 +50,14 @@ const PROJECT_STEPS = [
53
50
  ];
54
51
  const AUDIENCE_GATE_STEPS = [
55
52
  {
56
- title: "Audiences",
57
- description: "Who are the primary audiences for your project? Understanding your users helps agents make better decisions.",
53
+ title: InitFlowCopy.audiencesTitle,
54
+ description: InitFlowCopy.audiencesDescription,
58
55
  fields: [
59
56
  {
60
- key: "addAudience",
61
- label: "Add an audience?",
62
- kind: "yes-no",
63
- defaultValue: "no",
57
+ key: InitFlowFieldKey.addAudience,
58
+ label: InitFlowCopy.addAudienceLabel,
59
+ kind: InitFlowFieldKind.yesNo,
60
+ defaultValue: InitFlowYesNoValue.no,
64
61
  required: false,
65
62
  validate: validateOptionalYesNo,
66
63
  },
@@ -69,36 +66,36 @@ const AUDIENCE_GATE_STEPS = [
69
66
  ];
70
67
  const AUDIENCE_STEPS = [
71
68
  {
72
- title: "Audiences",
73
- description: "Who are the primary audiences for your project? Understanding your users helps agents make better decisions.",
69
+ title: InitFlowCopy.audiencesTitle,
70
+ description: InitFlowCopy.audiencesDescription,
74
71
  fields: [
75
72
  {
76
- key: "audienceName",
77
- label: "Audience name",
78
- placeholder: "e.g. Software Developers",
73
+ key: InitFlowFieldKey.audienceName,
74
+ label: InitFlowCopy.audienceNameLabel,
75
+ placeholder: InitFlowCopy.audienceNamePlaceholder,
79
76
  },
80
77
  {
81
- key: "audienceDescription",
82
- label: "Audience description",
83
- placeholder: "e.g. Developers collaborating with LLM coding agents",
78
+ key: InitFlowFieldKey.audienceDescription,
79
+ label: InitFlowCopy.audienceDescriptionLabel,
80
+ placeholder: InitFlowCopy.audienceDescriptionPlaceholder,
84
81
  },
85
82
  {
86
- key: "audiencePriority",
87
- label: "Audience priority",
88
- kind: "single-select",
83
+ key: InitFlowFieldKey.audiencePriority,
84
+ label: InitFlowCopy.audiencePriorityLabel,
85
+ kind: InitFlowFieldKind.singleSelect,
89
86
  options: [
90
- { value: "primary", label: "Primary" },
91
- { value: "secondary", label: "Secondary" },
92
- { value: "tertiary", label: "Tertiary" },
87
+ InitFlowAudiencePriorityOption.primary,
88
+ InitFlowAudiencePriorityOption.secondary,
89
+ InitFlowAudiencePriorityOption.tertiary,
93
90
  ],
94
- defaultValue: "primary",
91
+ defaultValue: AudiencePriority.PRIMARY,
95
92
  validate: validateAudiencePriority,
96
93
  },
97
94
  {
98
- key: "addAnotherAudience",
99
- label: "Add another audience?",
100
- kind: "yes-no",
101
- defaultValue: "no",
95
+ key: InitFlowFieldKey.addAnotherAudience,
96
+ label: InitFlowCopy.addAnotherAudienceLabel,
97
+ kind: InitFlowFieldKind.yesNo,
98
+ defaultValue: InitFlowYesNoValue.no,
102
99
  required: false,
103
100
  validate: validateOptionalYesNo,
104
101
  },
@@ -107,14 +104,14 @@ const AUDIENCE_STEPS = [
107
104
  ];
108
105
  const VALUE_GATE_STEPS = [
109
106
  {
110
- title: "Value Propositions",
111
- description: "What value does your project deliver? These propositions guide what capabilities matter most.",
107
+ title: InitFlowCopy.valuePropositionsTitle,
108
+ description: InitFlowCopy.valuePropositionsDescription,
112
109
  fields: [
113
110
  {
114
- key: "addValueProposition",
115
- label: "Add a value proposition?",
116
- kind: "yes-no",
117
- defaultValue: "no",
111
+ key: InitFlowFieldKey.addValueProposition,
112
+ label: InitFlowCopy.addValuePropositionLabel,
113
+ kind: InitFlowFieldKind.yesNo,
114
+ defaultValue: InitFlowYesNoValue.no,
118
115
  required: false,
119
116
  validate: validateOptionalYesNo,
120
117
  },
@@ -123,35 +120,35 @@ const VALUE_GATE_STEPS = [
123
120
  ];
124
121
  const VALUE_STEPS = [
125
122
  {
126
- title: "Value Propositions",
127
- description: "What value does your project deliver? These propositions guide what capabilities matter most.",
123
+ title: InitFlowCopy.valuePropositionsTitle,
124
+ description: InitFlowCopy.valuePropositionsDescription,
128
125
  fields: [
129
126
  {
130
- key: "valueTitle",
131
- label: "Value proposition title",
132
- placeholder: "e.g. Persistent context across sessions",
127
+ key: InitFlowFieldKey.valueTitle,
128
+ label: InitFlowCopy.valueTitleLabel,
129
+ placeholder: InitFlowCopy.valueTitlePlaceholder,
133
130
  },
134
131
  {
135
- key: "valueDescription",
136
- label: "Description",
137
- placeholder: "e.g. Detailed explanation of the value",
132
+ key: InitFlowFieldKey.valueDescription,
133
+ label: InitFlowCopy.valueDescriptionLabel,
134
+ placeholder: InitFlowCopy.valueDescriptionPlaceholder,
138
135
  },
139
136
  {
140
- key: "valueBenefit",
141
- label: "Benefit",
142
- placeholder: "e.g. Agents never lose important project context",
137
+ key: InitFlowFieldKey.valueBenefit,
138
+ label: InitFlowCopy.valueBenefitLabel,
139
+ placeholder: InitFlowCopy.valueBenefitPlaceholder,
143
140
  },
144
141
  {
145
- key: "valueMeasurableOutcome",
146
- label: "Measurable outcome",
147
- placeholder: "optional",
142
+ key: InitFlowFieldKey.valueMeasurableOutcome,
143
+ label: InitFlowCopy.valueMeasurableOutcomeLabel,
144
+ placeholder: InitFlowCopy.valueMeasurableOutcomePlaceholder,
148
145
  required: false,
149
146
  },
150
147
  {
151
- key: "addAnotherValueProposition",
152
- label: "Add another value proposition?",
153
- kind: "yes-no",
154
- defaultValue: "no",
148
+ key: InitFlowFieldKey.addAnotherValueProposition,
149
+ label: InitFlowCopy.addAnotherValuePropositionLabel,
150
+ kind: InitFlowFieldKind.yesNo,
151
+ defaultValue: InitFlowYesNoValue.no,
155
152
  required: false,
156
153
  validate: validateOptionalYesNo,
157
154
  },
@@ -159,17 +156,17 @@ const VALUE_STEPS = [
159
156
  },
160
157
  ];
161
158
  const INIT_FLOW_STAGE_STEP_COUNTS = {
162
- project: PROJECT_STEPS.length,
163
- "audience-gate": AUDIENCE_GATE_STEPS.length,
164
- audience: AUDIENCE_STEPS.length,
165
- "value-gate": VALUE_GATE_STEPS.length,
166
- value: VALUE_STEPS.length,
167
- "agent-selection": 1,
168
- confirmation: 1,
169
- success: 0,
159
+ [InitFlowStage.project]: PROJECT_STEPS.length,
160
+ [InitFlowStage.audienceGate]: AUDIENCE_GATE_STEPS.length,
161
+ [InitFlowStage.audience]: AUDIENCE_STEPS.length,
162
+ [InitFlowStage.valueGate]: VALUE_GATE_STEPS.length,
163
+ [InitFlowStage.value]: VALUE_STEPS.length,
164
+ [InitFlowStage.agentSelection]: 1,
165
+ [InitFlowStage.confirmation]: 1,
166
+ [InitFlowStage.success]: 0,
170
167
  };
171
168
  export function InitFlow({ actionControllers = {}, onComplete, onCancel, }) {
172
- const [stage, setStage] = useState("project");
169
+ const [stage, setStage] = useState(InitFlowStage.project);
173
170
  const [stageHistory, setStageHistory] = useState([]);
174
171
  const [projectDetails, setProjectDetails] = useState(null);
175
172
  const [audiences, setAudiences] = useState([]);
@@ -206,15 +203,15 @@ export function InitFlow({ actionControllers = {}, onComplete, onCancel, }) {
206
203
  setRestoreStepIndex(previousEntry.restoreStepIndex);
207
204
  };
208
205
  const applyRollback = (rollback) => {
209
- if (rollback === "audience") {
206
+ if (rollback === InitFlowRollback.audience) {
210
207
  setAudiences((current) => current.slice(0, -1));
211
208
  return;
212
209
  }
213
- if (rollback === "value-proposition") {
210
+ if (rollback === InitFlowRollback.valueProposition) {
214
211
  setValuePropositions((current) => current.slice(0, -1));
215
212
  return;
216
213
  }
217
- if (rollback === "plan") {
214
+ if (rollback === InitFlowRollback.plan) {
218
215
  setPlanResponse(null);
219
216
  setSelectedAgentIds(undefined);
220
217
  setConfirmationReviewOpen(false);
@@ -223,63 +220,67 @@ export function InitFlow({ actionControllers = {}, onComplete, onCancel, }) {
223
220
  };
224
221
  const handleProjectConfirm = async (values) => {
225
222
  const nextProjectDetails = {
226
- name: values.projectName.trim(),
227
- purpose: (values.purpose ?? "").trim() || undefined,
223
+ name: values[InitFlowFieldKey.projectName].trim(),
224
+ purpose: (values[InitFlowFieldKey.purpose] ?? "").trim() || undefined,
228
225
  };
229
226
  setProjectDetails(nextProjectDetails);
230
- navigateToStage("audience-gate");
227
+ navigateToStage(InitFlowStage.audienceGate);
231
228
  };
232
229
  const handleAudienceGateConfirm = (values) => {
233
- navigateToStage(isYes(values.addAudience ?? "") ? "audience" : "value-gate");
230
+ navigateToStage(isYes(values[InitFlowFieldKey.addAudience] ?? "")
231
+ ? InitFlowStage.audience
232
+ : InitFlowStage.valueGate);
234
233
  };
235
234
  const handleAudienceConfirm = (values) => {
236
235
  setAudiences((current) => [
237
236
  ...current,
238
237
  {
239
- name: values.audienceName.trim(),
240
- description: values.audienceDescription.trim(),
241
- priority: toAudiencePriority(values.audiencePriority),
238
+ name: values[InitFlowFieldKey.audienceName].trim(),
239
+ description: values[InitFlowFieldKey.audienceDescription].trim(),
240
+ priority: toAudiencePriority(values[InitFlowFieldKey.audiencePriority]),
242
241
  },
243
242
  ]);
244
- navigateToStage(isYes(values.addAnotherAudience ?? "") ? "audience" : "value-gate", "audience");
243
+ navigateToStage(isYes(values[InitFlowFieldKey.addAnotherAudience] ?? "")
244
+ ? InitFlowStage.audience
245
+ : InitFlowStage.valueGate, InitFlowRollback.audience);
245
246
  };
246
247
  const handleValueGateConfirm = async (values) => {
247
- if (isYes(values.addValueProposition ?? "")) {
248
- navigateToStage("value");
248
+ if (isYes(values[InitFlowFieldKey.addValueProposition] ?? "")) {
249
+ navigateToStage(InitFlowStage.value);
249
250
  return;
250
251
  }
251
- await planProjectInit(undefined, "plan");
252
+ await planProjectInit(undefined, InitFlowRollback.plan);
252
253
  };
253
254
  const handleValueConfirm = async (values) => {
254
255
  const nextValuePropositions = [
255
256
  ...valuePropositions,
256
257
  {
257
- title: values.valueTitle.trim(),
258
- description: values.valueDescription.trim(),
259
- benefit: values.valueBenefit.trim(),
260
- measurableOutcome: (values.valueMeasurableOutcome ?? "").trim().length === 0
258
+ title: values[InitFlowFieldKey.valueTitle].trim(),
259
+ description: values[InitFlowFieldKey.valueDescription].trim(),
260
+ benefit: values[InitFlowFieldKey.valueBenefit].trim(),
261
+ measurableOutcome: (values[InitFlowFieldKey.valueMeasurableOutcome] ?? "").trim().length === 0
261
262
  ? undefined
262
- : values.valueMeasurableOutcome.trim(),
263
+ : values[InitFlowFieldKey.valueMeasurableOutcome].trim(),
263
264
  },
264
265
  ];
265
266
  setValuePropositions(nextValuePropositions);
266
- if (isYes(values.addAnotherValueProposition ?? "")) {
267
- navigateToStage("value", "value-proposition");
267
+ if (isYes(values[InitFlowFieldKey.addAnotherValueProposition] ?? "")) {
268
+ navigateToStage(InitFlowStage.value, InitFlowRollback.valueProposition);
268
269
  return;
269
270
  }
270
- await planProjectInit(undefined, "value-proposition");
271
+ await planProjectInit(undefined, InitFlowRollback.valueProposition);
271
272
  };
272
273
  const handleAgentSelectionConfirm = async (values) => {
273
- const parsedAgentIds = parseAgentSelection(values.selectedAgentIds ?? "");
274
+ const parsedAgentIds = parseAgentSelection(values[InitFlowFieldKey.selectedAgentIds] ?? "");
274
275
  setSelectedAgentIds(parsedAgentIds);
275
276
  await planProjectInit(parsedAgentIds);
276
277
  };
277
278
  const handleWizardInput = (input, key) => {
278
- if (stage !== "confirmation") {
279
+ if (stage !== InitFlowStage.confirmation) {
279
280
  return false;
280
281
  }
281
282
  const plannedChanges = planResponse?.plannedChanges ?? [];
282
- if (input === "v" || input === "V") {
283
+ if (input.toLowerCase() === InitFlowConfirmationCopy.reviewHintKey) {
283
284
  setConfirmationReviewOpen((isOpen) => !isOpen);
284
285
  setConfirmationReviewOffset(0);
285
286
  return true;
@@ -298,7 +299,7 @@ export function InitFlow({ actionControllers = {}, onComplete, onCancel, }) {
298
299
  return false;
299
300
  };
300
301
  const handleConfirmationConfirm = async (values) => {
301
- if (isExplicitNo(values.confirmInitialization ?? "")) {
302
+ if (isExplicitNo(values[InitFlowFieldKey.confirmInitialization] ?? "")) {
302
303
  onCancel();
303
304
  return;
304
305
  }
@@ -307,12 +308,12 @@ export function InitFlow({ actionControllers = {}, onComplete, onCancel, }) {
307
308
  const planProjectInit = async (nextSelectedAgentIds, rollback) => {
308
309
  const controller = actionControllers.planProjectInitController;
309
310
  if (controller === undefined) {
310
- setDispatchError(REQUIRED_PLAN_CONTROLLER_ERROR);
311
+ setDispatchError(InitFlowControllerErrorCopy.requiredPlan);
311
312
  return;
312
313
  }
313
314
  setWorking(true);
314
315
  setDispatchError(null);
315
- const result = await dispatchTuiAction(controller, {
316
+ const result = await TuiActionDispatcher.dispatch(controller, {
316
317
  projectRoot: process.cwd(),
317
318
  selectedAgentIds: nextSelectedAgentIds,
318
319
  });
@@ -324,25 +325,25 @@ export function InitFlow({ actionControllers = {}, onComplete, onCancel, }) {
324
325
  setPlanResponse(result.response);
325
326
  if (nextSelectedAgentIds === undefined &&
326
327
  result.response.availableAgents.length > 0) {
327
- navigateToStage("agent-selection", rollback);
328
+ navigateToStage(InitFlowStage.agentSelection, rollback);
328
329
  }
329
330
  else {
330
- navigateToStage("confirmation", rollback);
331
+ navigateToStage(InitFlowStage.confirmation, rollback);
331
332
  }
332
333
  };
333
334
  const initializeProject = async () => {
334
335
  if (projectDetails === null) {
335
- setDispatchError("Project details are required before initialization.");
336
+ setDispatchError(InitFlowControllerErrorCopy.requiredProjectDetails);
336
337
  return;
337
338
  }
338
339
  const initializeController = actionControllers.initializeProjectController;
339
340
  if (initializeController === undefined) {
340
- setDispatchError(REQUIRED_INIT_CONTROLLER_ERROR);
341
+ setDispatchError(InitFlowControllerErrorCopy.requiredInit);
341
342
  return;
342
343
  }
343
344
  setWorking(true);
344
345
  setDispatchError(null);
345
- const initResult = await dispatchTuiAction(initializeController, {
346
+ const initResult = await TuiActionDispatcher.dispatch(initializeController, {
346
347
  name: projectDetails.name,
347
348
  purpose: projectDetails.purpose,
348
349
  projectRoot: process.cwd(),
@@ -359,17 +360,17 @@ export function InitFlow({ actionControllers = {}, onComplete, onCancel, }) {
359
360
  setDispatchError(primitiveResult.error.message);
360
361
  return;
361
362
  }
362
- setStage("success");
363
+ setStage(InitFlowStage.success);
363
364
  await onComplete({
364
365
  ...flattenCollectedValues(projectDetails, audiences, valuePropositions),
365
366
  projectId: initResult.response.projectId,
366
367
  });
367
368
  };
368
- if (stage === "success") {
369
+ if (stage === InitFlowStage.success) {
369
370
  return (React.createElement(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1 },
370
- React.createElement(Text, { color: SemanticColors.success, bold: true }, "Project initialized successfully.")));
371
+ React.createElement(Text, { color: SemanticColors.success, bold: true }, InitFlowCopy.success)));
371
372
  }
372
- return (React.createElement(Wizard, { title: "Initialize Project", steps: resolveSteps(stage, agentSelectionSteps, confirmationSteps), onConfirm: resolveConfirmHandler(stage, {
373
+ return (React.createElement(Wizard, { title: InitFlowCopy.title, steps: resolveSteps(stage, agentSelectionSteps, confirmationSteps), onConfirm: resolveConfirmHandler(stage, {
373
374
  handleProjectConfirm,
374
375
  handleAudienceGateConfirm,
375
376
  handleAudienceConfirm,
@@ -377,65 +378,69 @@ export function InitFlow({ actionControllers = {}, onComplete, onCancel, }) {
377
378
  handleValueConfirm,
378
379
  handleAgentSelectionConfirm,
379
380
  handleConfirmationConfirm,
380
- }), onCancel: onCancel, onBack: stageHistory.length > 0 ? handleWizardBack : undefined, initialStepIndex: restoreStepIndex, initialValues: resolveInitialValues(stage, projectDetails), dispatchError: dispatchError, disabled: working, progressLabel: (currentStepIndex) => resolveProgressLabel(stage, planResponse, currentStepIndex), extraHints: stage === "confirmation"
381
+ }), onCancel: onCancel, onBack: stageHistory.length > 0 ? handleWizardBack : undefined, initialStepIndex: restoreStepIndex, initialValues: resolveInitialValues(stage, projectDetails), dispatchError: dispatchError, disabled: working, progressLabel: (currentStepIndex) => resolveProgressLabel(stage, planResponse, currentStepIndex), extraHints: stage === InitFlowStage.confirmation
381
382
  ? [
382
383
  {
383
- char: "v",
384
- label: confirmationReviewOpen ? "Summary" : "View files",
384
+ char: InitFlowConfirmationCopy.reviewHintKey,
385
+ label: confirmationReviewOpen
386
+ ? InitFlowConfirmationCopy.reviewHintOpenLabel
387
+ : InitFlowConfirmationCopy.reviewHintClosedLabel,
385
388
  },
386
389
  ]
387
390
  : [], onInput: handleWizardInput }));
388
391
  }
389
392
  function resolveSteps(stage, agentSelectionSteps, confirmationSteps) {
390
- if (stage === "project")
393
+ if (stage === InitFlowStage.project)
391
394
  return PROJECT_STEPS;
392
- if (stage === "audience-gate")
395
+ if (stage === InitFlowStage.audienceGate)
393
396
  return AUDIENCE_GATE_STEPS;
394
- if (stage === "audience")
397
+ if (stage === InitFlowStage.audience)
395
398
  return AUDIENCE_STEPS;
396
- if (stage === "value-gate")
399
+ if (stage === InitFlowStage.valueGate)
397
400
  return VALUE_GATE_STEPS;
398
- if (stage === "value")
401
+ if (stage === InitFlowStage.value)
399
402
  return VALUE_STEPS;
400
- if (stage === "agent-selection")
403
+ if (stage === InitFlowStage.agentSelection)
401
404
  return agentSelectionSteps;
402
405
  return confirmationSteps;
403
406
  }
404
407
  function resolveConfirmHandler(stage, handlers) {
405
- if (stage === "project")
408
+ if (stage === InitFlowStage.project)
406
409
  return handlers.handleProjectConfirm;
407
- if (stage === "audience-gate")
410
+ if (stage === InitFlowStage.audienceGate) {
408
411
  return handlers.handleAudienceGateConfirm;
409
- if (stage === "audience")
412
+ }
413
+ if (stage === InitFlowStage.audience)
410
414
  return handlers.handleAudienceConfirm;
411
- if (stage === "value-gate")
415
+ if (stage === InitFlowStage.valueGate)
412
416
  return handlers.handleValueGateConfirm;
413
- if (stage === "value")
417
+ if (stage === InitFlowStage.value)
414
418
  return handlers.handleValueConfirm;
415
- if (stage === "agent-selection")
419
+ if (stage === InitFlowStage.agentSelection) {
416
420
  return handlers.handleAgentSelectionConfirm;
421
+ }
417
422
  return handlers.handleConfirmationConfirm;
418
423
  }
419
424
  function resolveInitialValues(stage, projectDetails) {
420
- if (stage !== "project" || projectDetails === null) {
425
+ if (stage !== InitFlowStage.project || projectDetails === null) {
421
426
  return {};
422
427
  }
423
428
  return {
424
- projectName: projectDetails.name,
425
- purpose: projectDetails.purpose ?? "",
429
+ [InitFlowFieldKey.projectName]: projectDetails.name,
430
+ [InitFlowFieldKey.purpose]: projectDetails.purpose ?? "",
426
431
  };
427
432
  }
428
433
  function buildAgentSelectionSteps(planResponse) {
429
434
  const availableAgents = planResponse?.availableAgents ?? [];
430
435
  return [
431
436
  {
432
- title: "Agent Selection",
433
- description: "Select agents to configure.",
437
+ title: InitFlowCopy.agentSelectionTitle,
438
+ description: InitFlowCopy.agentSelectionDescription,
434
439
  fields: [
435
440
  {
436
- key: "selectedAgentIds",
437
- label: "Agents",
438
- kind: "multi-select",
441
+ key: InitFlowFieldKey.selectedAgentIds,
442
+ label: InitFlowCopy.agentsLabel,
443
+ kind: InitFlowFieldKind.multiSelect,
439
444
  options: availableAgents.map((agent) => ({
440
445
  value: agent.id,
441
446
  label: `${agent.name} (${agent.id})`,
@@ -451,16 +456,16 @@ function buildAgentSelectionSteps(planResponse) {
451
456
  function buildConfirmationSteps(plannedChanges, reviewOpen, reviewOffset) {
452
457
  return [
453
458
  {
454
- title: "Confirmation",
459
+ title: InitFlowCopy.confirmationTitle,
455
460
  description: reviewOpen
456
461
  ? formatPlannedChangeReview(plannedChanges, reviewOffset)
457
462
  : formatPlannedChangeSummary(plannedChanges),
458
463
  fields: [
459
464
  {
460
- key: "confirmInitialization",
461
- label: "Proceed with initialization?",
462
- kind: "yes-no",
463
- defaultValue: "yes",
465
+ key: InitFlowFieldKey.confirmInitialization,
466
+ label: InitFlowCopy.confirmInitializationLabel,
467
+ kind: InitFlowFieldKind.yesNo,
468
+ defaultValue: InitFlowYesNoValue.yes,
464
469
  required: false,
465
470
  validate: validateOptionalYesNo,
466
471
  },
@@ -484,36 +489,36 @@ function resolveProgressLabel(stage, planResponse, currentStepIndex) {
484
489
  }
485
490
  function formatPlannedChangeSummary(plannedChanges) {
486
491
  if (plannedChanges.length === 0) {
487
- return "No file changes are required. Confirm to initialize project state.";
492
+ return InitFlowConfirmationCopy.noChangesSummary;
488
493
  }
489
494
  const createCount = plannedChanges.filter((change) => change.action === "create").length;
490
495
  const modifyCount = plannedChanges.filter((change) => change.action === "modify").length;
491
496
  const groupCounts = summarizePlannedChangeGroups(plannedChanges);
492
497
  return [
493
- "Jumbo will create project memory and configure selected agents.",
498
+ InitFlowConfirmationCopy.summaryLead,
494
499
  "",
495
- "Planned changes",
496
- `Create: ${createCount} files`,
497
- `Modify: ${modifyCount} files`,
500
+ InitFlowConfirmationCopy.plannedChangesLabel,
501
+ `${InitFlowConfirmationCopy.createLabel}: ${createCount} ${InitFlowConfirmationCopy.filesLabel}`,
502
+ `${InitFlowConfirmationCopy.modifyLabel}: ${modifyCount} ${InitFlowConfirmationCopy.filesLabel}`,
498
503
  "",
499
- "Existing content is preserved.",
500
- "Jumbo only creates missing files and appends or updates managed configuration where needed.",
504
+ InitFlowConfirmationCopy.existingContentPreserved,
505
+ InitFlowConfirmationCopy.managedConfigurationOnly,
501
506
  "",
502
- "Agent configuration",
503
- ...groupCounts.map((group) => `${group.label}: ${group.count} files`),
507
+ InitFlowConfirmationCopy.agentConfigurationLabel,
508
+ ...groupCounts.map((group) => `${group.label}: ${group.count} ${InitFlowConfirmationCopy.filesLabel}`),
504
509
  ].join("\n");
505
510
  }
506
511
  function formatPlannedChangeReview(plannedChanges, reviewOffset) {
507
512
  if (plannedChanges.length === 0) {
508
- return "No file changes are required.";
513
+ return InitFlowConfirmationCopy.noChangesReview;
509
514
  }
510
515
  const visibleChanges = plannedChanges.slice(reviewOffset, reviewOffset + CONFIRMATION_FILE_REVIEW_PAGE_SIZE);
511
516
  const from = reviewOffset + 1;
512
517
  const to = reviewOffset + visibleChanges.length;
513
518
  return [
514
- `Files ${from}-${to} of ${plannedChanges.length}`,
519
+ `${InitFlowConfirmationCopy.reviewFilesLabel} ${from}-${to} of ${plannedChanges.length}`,
515
520
  "",
516
- ...visibleChanges.map((change) => `${change.action}: ${change.path} - ${change.description}`),
521
+ ...visibleChanges.map((change) => `${change.action}: ${change.path}${InitFlowConfirmationCopy.changeSeparator}${change.description}`),
517
522
  ].join("\n");
518
523
  }
519
524
  function summarizePlannedChangeGroups(plannedChanges) {
@@ -522,31 +527,45 @@ function summarizePlannedChangeGroups(plannedChanges) {
522
527
  const group = classifyPlannedChangeGroup(change.path);
523
528
  counts.set(group, (counts.get(group) ?? 0) + 1);
524
529
  }
525
- return ["Shared", "Claude", "Codex", "Gemini", "Copilot", "Cursor", "Vibe"]
530
+ return [
531
+ InitFlowConfirmationGroupLabel.shared,
532
+ InitFlowConfirmationGroupLabel.claude,
533
+ InitFlowConfirmationGroupLabel.codex,
534
+ InitFlowConfirmationGroupLabel.gemini,
535
+ InitFlowConfirmationGroupLabel.copilot,
536
+ InitFlowConfirmationGroupLabel.cursor,
537
+ InitFlowConfirmationGroupLabel.vibe,
538
+ ]
526
539
  .map((label) => ({ label, count: counts.get(label) ?? 0 }))
527
540
  .filter((group) => group.count > 0);
528
541
  }
529
542
  function classifyPlannedChangeGroup(path) {
530
- if (path === "CLAUDE.md" || path.startsWith(".claude/"))
531
- return "Claude";
543
+ if (path === "CLAUDE.md" || path.startsWith(".claude/")) {
544
+ return InitFlowConfirmationGroupLabel.claude;
545
+ }
532
546
  if (path.startsWith(".codex/"))
533
- return "Codex";
534
- if (path === "GEMINI.md" || path.startsWith(".gemini/"))
535
- return "Gemini";
536
- if (path.startsWith(".github/"))
537
- return "Copilot";
547
+ return InitFlowConfirmationGroupLabel.codex;
548
+ if (path === "GEMINI.md" || path.startsWith(".gemini/")) {
549
+ return InitFlowConfirmationGroupLabel.gemini;
550
+ }
551
+ if (path.startsWith(".github/")) {
552
+ return InitFlowConfirmationGroupLabel.copilot;
553
+ }
538
554
  if (path.startsWith(".cursor/"))
539
- return "Cursor";
555
+ return InitFlowConfirmationGroupLabel.cursor;
540
556
  if (path.startsWith(".vibe/"))
541
- return "Vibe";
542
- return "Shared";
557
+ return InitFlowConfirmationGroupLabel.vibe;
558
+ return InitFlowConfirmationGroupLabel.shared;
543
559
  }
544
560
  function validateYesNo(value) {
545
561
  const normalized = value.trim().toLowerCase();
546
- if (normalized === "yes" || normalized === "y" || normalized === "no" || normalized === "n") {
562
+ if (normalized === InitFlowYesNoValue.yes ||
563
+ normalized === InitFlowYesNoValue.yesShort ||
564
+ normalized === InitFlowYesNoValue.no ||
565
+ normalized === InitFlowYesNoValue.noShort) {
547
566
  return null;
548
567
  }
549
- return YES_NO_MESSAGE;
568
+ return InitFlowValidationCopy.yesNo;
550
569
  }
551
570
  function validateOptionalYesNo(value) {
552
571
  if (value.trim().length === 0) {
@@ -556,21 +575,21 @@ function validateOptionalYesNo(value) {
556
575
  }
557
576
  function validateAudiencePriority(value) {
558
577
  const normalized = value.trim().toLowerCase();
559
- if (normalized === "primary" ||
560
- normalized === "secondary" ||
561
- normalized === "tertiary") {
578
+ if (normalized === AudiencePriority.PRIMARY ||
579
+ normalized === AudiencePriority.SECONDARY ||
580
+ normalized === AudiencePriority.TERTIARY) {
562
581
  return null;
563
582
  }
564
- return "Enter primary, secondary, or tertiary";
583
+ return InitFlowValidationCopy.audiencePriority;
565
584
  }
566
585
  function validateAgentSelection(value, availableAgentIds) {
567
586
  const selectedAgentIds = parseAgentSelection(value);
568
587
  if (selectedAgentIds.length === 0) {
569
- return "Select at least one agent";
588
+ return InitFlowValidationCopy.agentSelectionRequired;
570
589
  }
571
590
  const unknownAgentIds = selectedAgentIds.filter((agentId) => !availableAgentIds.includes(agentId));
572
591
  if (unknownAgentIds.length > 0) {
573
- return `Unknown agent id: ${unknownAgentIds.join(", ")}`;
592
+ return `${InitFlowValidationCopy.unknownAgentId}: ${unknownAgentIds.join(", ")}`;
574
593
  }
575
594
  return null;
576
595
  }
@@ -582,11 +601,13 @@ function parseAgentSelection(value) {
582
601
  }
583
602
  function isYes(value) {
584
603
  const normalized = value.trim().toLowerCase();
585
- return normalized === "yes" || normalized === "y";
604
+ return (normalized === InitFlowYesNoValue.yes ||
605
+ normalized === InitFlowYesNoValue.yesShort);
586
606
  }
587
607
  function isExplicitNo(value) {
588
608
  const normalized = value.trim().toLowerCase();
589
- return normalized === "no" || normalized === "n";
609
+ return (normalized === InitFlowYesNoValue.no ||
610
+ normalized === InitFlowYesNoValue.noShort);
590
611
  }
591
612
  function toAudiencePriority(value) {
592
613
  return value.trim().toLowerCase();
@@ -596,10 +617,10 @@ async function persistCollectedPrimitives(controllers, audiences, valuePropositi
596
617
  if (controllers.addAudienceController === undefined) {
597
618
  return {
598
619
  ok: false,
599
- error: new Error(REQUIRED_AUDIENCE_CONTROLLER_ERROR),
620
+ error: new Error(InitFlowControllerErrorCopy.requiredAudience),
600
621
  };
601
622
  }
602
- const result = await dispatchTuiAction(controllers.addAudienceController, audience);
623
+ const result = await TuiActionDispatcher.dispatch(controllers.addAudienceController, audience);
603
624
  if (!result.ok) {
604
625
  return result;
605
626
  }
@@ -608,10 +629,10 @@ async function persistCollectedPrimitives(controllers, audiences, valuePropositi
608
629
  if (controllers.addValuePropositionController === undefined) {
609
630
  return {
610
631
  ok: false,
611
- error: new Error(REQUIRED_VALUE_PROPOSITION_CONTROLLER_ERROR),
632
+ error: new Error(InitFlowControllerErrorCopy.requiredValueProposition),
612
633
  };
613
634
  }
614
- const result = await dispatchTuiAction(controllers.addValuePropositionController, valueProposition);
635
+ const result = await TuiActionDispatcher.dispatch(controllers.addValuePropositionController, valueProposition);
615
636
  if (!result.ok) {
616
637
  return result;
617
638
  }
@@ -620,8 +641,8 @@ async function persistCollectedPrimitives(controllers, audiences, valuePropositi
620
641
  }
621
642
  function flattenCollectedValues(projectDetails, audiences, valuePropositions) {
622
643
  return {
623
- projectName: projectDetails?.name ?? "",
624
- purpose: projectDetails?.purpose ?? "",
644
+ [InitFlowFieldKey.projectName]: projectDetails?.name ?? "",
645
+ [InitFlowFieldKey.purpose]: projectDetails?.purpose ?? "",
625
646
  audienceCount: String(audiences.length),
626
647
  valuePropositionCount: String(valuePropositions.length),
627
648
  };