red64-cli 0.1.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 (354) hide show
  1. package/README.md +454 -0
  2. package/dist/cli/parseArgs.d.ts +16 -0
  3. package/dist/cli/parseArgs.d.ts.map +1 -0
  4. package/dist/cli/parseArgs.js +172 -0
  5. package/dist/cli/parseArgs.js.map +1 -0
  6. package/dist/cli/validateFlags.d.ts +22 -0
  7. package/dist/cli/validateFlags.d.ts.map +1 -0
  8. package/dist/cli/validateFlags.js +24 -0
  9. package/dist/cli/validateFlags.js.map +1 -0
  10. package/dist/cli.d.ts +7 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +90 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/components/App.d.ts +20 -0
  15. package/dist/components/App.d.ts.map +1 -0
  16. package/dist/components/App.js +35 -0
  17. package/dist/components/App.js.map +1 -0
  18. package/dist/components/CommandRouter.d.ts +21 -0
  19. package/dist/components/CommandRouter.d.ts.map +1 -0
  20. package/dist/components/CommandRouter.js +30 -0
  21. package/dist/components/CommandRouter.js.map +1 -0
  22. package/dist/components/GlobalConfig.d.ts +26 -0
  23. package/dist/components/GlobalConfig.d.ts.map +1 -0
  24. package/dist/components/GlobalConfig.js +30 -0
  25. package/dist/components/GlobalConfig.js.map +1 -0
  26. package/dist/components/index.d.ts +9 -0
  27. package/dist/components/index.d.ts.map +1 -0
  28. package/dist/components/index.js +9 -0
  29. package/dist/components/index.js.map +1 -0
  30. package/dist/components/init/CompleteStep.d.ts +11 -0
  31. package/dist/components/init/CompleteStep.d.ts.map +1 -0
  32. package/dist/components/init/CompleteStep.js +15 -0
  33. package/dist/components/init/CompleteStep.js.map +1 -0
  34. package/dist/components/init/ErrorStep.d.ts +14 -0
  35. package/dist/components/init/ErrorStep.d.ts.map +1 -0
  36. package/dist/components/init/ErrorStep.js +36 -0
  37. package/dist/components/init/ErrorStep.js.map +1 -0
  38. package/dist/components/init/FetchStep.d.ts +15 -0
  39. package/dist/components/init/FetchStep.d.ts.map +1 -0
  40. package/dist/components/init/FetchStep.js +33 -0
  41. package/dist/components/init/FetchStep.js.map +1 -0
  42. package/dist/components/init/SetupStep.d.ts +14 -0
  43. package/dist/components/init/SetupStep.d.ts.map +1 -0
  44. package/dist/components/init/SetupStep.js +78 -0
  45. package/dist/components/init/SetupStep.js.map +1 -0
  46. package/dist/components/init/SteeringStep.d.ts +12 -0
  47. package/dist/components/init/SteeringStep.d.ts.map +1 -0
  48. package/dist/components/init/SteeringStep.js +43 -0
  49. package/dist/components/init/SteeringStep.js.map +1 -0
  50. package/dist/components/init/WelcomeStep.d.ts +12 -0
  51. package/dist/components/init/WelcomeStep.d.ts.map +1 -0
  52. package/dist/components/init/WelcomeStep.js +52 -0
  53. package/dist/components/init/WelcomeStep.js.map +1 -0
  54. package/dist/components/init/index.d.ts +11 -0
  55. package/dist/components/init/index.d.ts.map +1 -0
  56. package/dist/components/init/index.js +10 -0
  57. package/dist/components/init/index.js.map +1 -0
  58. package/dist/components/init/types.d.ts +98 -0
  59. package/dist/components/init/types.d.ts.map +1 -0
  60. package/dist/components/init/types.js +6 -0
  61. package/dist/components/init/types.js.map +1 -0
  62. package/dist/components/screens/AbortScreen.d.ts +14 -0
  63. package/dist/components/screens/AbortScreen.d.ts.map +1 -0
  64. package/dist/components/screens/AbortScreen.js +181 -0
  65. package/dist/components/screens/AbortScreen.js.map +1 -0
  66. package/dist/components/screens/ApprovalScreen.d.ts +24 -0
  67. package/dist/components/screens/ApprovalScreen.d.ts.map +1 -0
  68. package/dist/components/screens/ApprovalScreen.js +82 -0
  69. package/dist/components/screens/ApprovalScreen.js.map +1 -0
  70. package/dist/components/screens/HelpScreen.d.ts +20 -0
  71. package/dist/components/screens/HelpScreen.d.ts.map +1 -0
  72. package/dist/components/screens/HelpScreen.js +70 -0
  73. package/dist/components/screens/HelpScreen.js.map +1 -0
  74. package/dist/components/screens/InitScreen.d.ts +15 -0
  75. package/dist/components/screens/InitScreen.d.ts.map +1 -0
  76. package/dist/components/screens/InitScreen.js +420 -0
  77. package/dist/components/screens/InitScreen.js.map +1 -0
  78. package/dist/components/screens/ListScreen.d.ts +14 -0
  79. package/dist/components/screens/ListScreen.d.ts.map +1 -0
  80. package/dist/components/screens/ListScreen.js +57 -0
  81. package/dist/components/screens/ListScreen.js.map +1 -0
  82. package/dist/components/screens/ProgressScreen.d.ts +26 -0
  83. package/dist/components/screens/ProgressScreen.d.ts.map +1 -0
  84. package/dist/components/screens/ProgressScreen.js +64 -0
  85. package/dist/components/screens/ProgressScreen.js.map +1 -0
  86. package/dist/components/screens/ResumeScreen.d.ts +14 -0
  87. package/dist/components/screens/ResumeScreen.d.ts.map +1 -0
  88. package/dist/components/screens/ResumeScreen.js +108 -0
  89. package/dist/components/screens/ResumeScreen.js.map +1 -0
  90. package/dist/components/screens/ScreenProps.d.ts +12 -0
  91. package/dist/components/screens/ScreenProps.d.ts.map +1 -0
  92. package/dist/components/screens/ScreenProps.js +5 -0
  93. package/dist/components/screens/ScreenProps.js.map +1 -0
  94. package/dist/components/screens/StartScreen.d.ts +26 -0
  95. package/dist/components/screens/StartScreen.d.ts.map +1 -0
  96. package/dist/components/screens/StartScreen.js +1021 -0
  97. package/dist/components/screens/StartScreen.js.map +1 -0
  98. package/dist/components/screens/StatusScreen.d.ts +14 -0
  99. package/dist/components/screens/StatusScreen.d.ts.map +1 -0
  100. package/dist/components/screens/StatusScreen.js +115 -0
  101. package/dist/components/screens/StatusScreen.js.map +1 -0
  102. package/dist/components/screens/index.d.ts +15 -0
  103. package/dist/components/screens/index.d.ts.map +1 -0
  104. package/dist/components/screens/index.js +12 -0
  105. package/dist/components/screens/index.js.map +1 -0
  106. package/dist/components/ui/ErrorBoundary.d.ts +34 -0
  107. package/dist/components/ui/ErrorBoundary.d.ts.map +1 -0
  108. package/dist/components/ui/ErrorBoundary.js +37 -0
  109. package/dist/components/ui/ErrorBoundary.js.map +1 -0
  110. package/dist/components/ui/ErrorDisplay.d.ts +20 -0
  111. package/dist/components/ui/ErrorDisplay.d.ts.map +1 -0
  112. package/dist/components/ui/ErrorDisplay.js +12 -0
  113. package/dist/components/ui/ErrorDisplay.js.map +1 -0
  114. package/dist/components/ui/ErrorRecoveryPrompt.d.ts +30 -0
  115. package/dist/components/ui/ErrorRecoveryPrompt.d.ts.map +1 -0
  116. package/dist/components/ui/ErrorRecoveryPrompt.js +66 -0
  117. package/dist/components/ui/ErrorRecoveryPrompt.js.map +1 -0
  118. package/dist/components/ui/FeatureSidebar.d.ts +27 -0
  119. package/dist/components/ui/FeatureSidebar.d.ts.map +1 -0
  120. package/dist/components/ui/FeatureSidebar.js +166 -0
  121. package/dist/components/ui/FeatureSidebar.js.map +1 -0
  122. package/dist/components/ui/FlowTable.d.ts +21 -0
  123. package/dist/components/ui/FlowTable.d.ts.map +1 -0
  124. package/dist/components/ui/FlowTable.js +105 -0
  125. package/dist/components/ui/FlowTable.js.map +1 -0
  126. package/dist/components/ui/Header.d.ts +20 -0
  127. package/dist/components/ui/Header.d.ts.map +1 -0
  128. package/dist/components/ui/Header.js +11 -0
  129. package/dist/components/ui/Header.js.map +1 -0
  130. package/dist/components/ui/OutputRegion.d.ts +20 -0
  131. package/dist/components/ui/OutputRegion.d.ts.map +1 -0
  132. package/dist/components/ui/OutputRegion.js +14 -0
  133. package/dist/components/ui/OutputRegion.js.map +1 -0
  134. package/dist/components/ui/PhaseProgressView.d.ts +23 -0
  135. package/dist/components/ui/PhaseProgressView.d.ts.map +1 -0
  136. package/dist/components/ui/PhaseProgressView.js +117 -0
  137. package/dist/components/ui/PhaseProgressView.js.map +1 -0
  138. package/dist/components/ui/ProgressBar.d.ts +20 -0
  139. package/dist/components/ui/ProgressBar.d.ts.map +1 -0
  140. package/dist/components/ui/ProgressBar.js +12 -0
  141. package/dist/components/ui/ProgressBar.js.map +1 -0
  142. package/dist/components/ui/SelectMenu.d.ts +27 -0
  143. package/dist/components/ui/SelectMenu.d.ts.map +1 -0
  144. package/dist/components/ui/SelectMenu.js +21 -0
  145. package/dist/components/ui/SelectMenu.js.map +1 -0
  146. package/dist/components/ui/Spinner.d.ts +18 -0
  147. package/dist/components/ui/Spinner.d.ts.map +1 -0
  148. package/dist/components/ui/Spinner.js +10 -0
  149. package/dist/components/ui/Spinner.js.map +1 -0
  150. package/dist/components/ui/StatusLine.d.ts +21 -0
  151. package/dist/components/ui/StatusLine.d.ts.map +1 -0
  152. package/dist/components/ui/StatusLine.js +30 -0
  153. package/dist/components/ui/StatusLine.js.map +1 -0
  154. package/dist/components/ui/index.d.ts +16 -0
  155. package/dist/components/ui/index.d.ts.map +1 -0
  156. package/dist/components/ui/index.js +16 -0
  157. package/dist/components/ui/index.js.map +1 -0
  158. package/dist/services/AgentInvoker.d.ts +20 -0
  159. package/dist/services/AgentInvoker.d.ts.map +1 -0
  160. package/dist/services/AgentInvoker.js +282 -0
  161. package/dist/services/AgentInvoker.js.map +1 -0
  162. package/dist/services/BranchService.d.ts +28 -0
  163. package/dist/services/BranchService.d.ts.map +1 -0
  164. package/dist/services/BranchService.js +114 -0
  165. package/dist/services/BranchService.js.map +1 -0
  166. package/dist/services/CacheService.d.ts +57 -0
  167. package/dist/services/CacheService.d.ts.map +1 -0
  168. package/dist/services/CacheService.js +208 -0
  169. package/dist/services/CacheService.js.map +1 -0
  170. package/dist/services/ClaudeErrorDetector.d.ts +45 -0
  171. package/dist/services/ClaudeErrorDetector.d.ts.map +1 -0
  172. package/dist/services/ClaudeErrorDetector.js +207 -0
  173. package/dist/services/ClaudeErrorDetector.js.map +1 -0
  174. package/dist/services/ClaudeHealthCheck.d.ts +37 -0
  175. package/dist/services/ClaudeHealthCheck.d.ts.map +1 -0
  176. package/dist/services/ClaudeHealthCheck.js +197 -0
  177. package/dist/services/ClaudeHealthCheck.js.map +1 -0
  178. package/dist/services/CommitService.d.ts +36 -0
  179. package/dist/services/CommitService.d.ts.map +1 -0
  180. package/dist/services/CommitService.js +159 -0
  181. package/dist/services/CommitService.js.map +1 -0
  182. package/dist/services/ConfigService.d.ts +49 -0
  183. package/dist/services/ConfigService.d.ts.map +1 -0
  184. package/dist/services/ConfigService.js +57 -0
  185. package/dist/services/ConfigService.js.map +1 -0
  186. package/dist/services/DockerRunner.d.ts +45 -0
  187. package/dist/services/DockerRunner.d.ts.map +1 -0
  188. package/dist/services/DockerRunner.js +170 -0
  189. package/dist/services/DockerRunner.js.map +1 -0
  190. package/dist/services/ExtendedFlowStateMachine.d.ts +31 -0
  191. package/dist/services/ExtendedFlowStateMachine.d.ts.map +1 -0
  192. package/dist/services/ExtendedFlowStateMachine.js +302 -0
  193. package/dist/services/ExtendedFlowStateMachine.js.map +1 -0
  194. package/dist/services/FeatureValidator.d.ts +26 -0
  195. package/dist/services/FeatureValidator.d.ts.map +1 -0
  196. package/dist/services/FeatureValidator.js +48 -0
  197. package/dist/services/FeatureValidator.js.map +1 -0
  198. package/dist/services/FlowStateMachine.d.ts +26 -0
  199. package/dist/services/FlowStateMachine.d.ts.map +1 -0
  200. package/dist/services/FlowStateMachine.js +177 -0
  201. package/dist/services/FlowStateMachine.js.map +1 -0
  202. package/dist/services/GitHubService.d.ts +72 -0
  203. package/dist/services/GitHubService.d.ts.map +1 -0
  204. package/dist/services/GitHubService.js +150 -0
  205. package/dist/services/GitHubService.js.map +1 -0
  206. package/dist/services/GitStatusChecker.d.ts +29 -0
  207. package/dist/services/GitStatusChecker.d.ts.map +1 -0
  208. package/dist/services/GitStatusChecker.js +127 -0
  209. package/dist/services/GitStatusChecker.js.map +1 -0
  210. package/dist/services/PRCreatorService.d.ts +59 -0
  211. package/dist/services/PRCreatorService.d.ts.map +1 -0
  212. package/dist/services/PRCreatorService.js +212 -0
  213. package/dist/services/PRCreatorService.js.map +1 -0
  214. package/dist/services/PRStatusFetcher.d.ts +39 -0
  215. package/dist/services/PRStatusFetcher.d.ts.map +1 -0
  216. package/dist/services/PRStatusFetcher.js +144 -0
  217. package/dist/services/PRStatusFetcher.js.map +1 -0
  218. package/dist/services/PhaseExecutor.d.ts +29 -0
  219. package/dist/services/PhaseExecutor.d.ts.map +1 -0
  220. package/dist/services/PhaseExecutor.js +125 -0
  221. package/dist/services/PhaseExecutor.js.map +1 -0
  222. package/dist/services/SpecInitService.d.ts +33 -0
  223. package/dist/services/SpecInitService.d.ts.map +1 -0
  224. package/dist/services/SpecInitService.js +168 -0
  225. package/dist/services/SpecInitService.js.map +1 -0
  226. package/dist/services/StateStore.d.ts +24 -0
  227. package/dist/services/StateStore.d.ts.map +1 -0
  228. package/dist/services/StateStore.js +171 -0
  229. package/dist/services/StateStore.js.map +1 -0
  230. package/dist/services/TaskParser.d.ts +44 -0
  231. package/dist/services/TaskParser.d.ts.map +1 -0
  232. package/dist/services/TaskParser.js +167 -0
  233. package/dist/services/TaskParser.js.map +1 -0
  234. package/dist/services/TaskRunner.d.ts +52 -0
  235. package/dist/services/TaskRunner.d.ts.map +1 -0
  236. package/dist/services/TaskRunner.js +135 -0
  237. package/dist/services/TaskRunner.js.map +1 -0
  238. package/dist/services/TemplateService.d.ts +73 -0
  239. package/dist/services/TemplateService.d.ts.map +1 -0
  240. package/dist/services/TemplateService.js +263 -0
  241. package/dist/services/TemplateService.js.map +1 -0
  242. package/dist/services/WorktreeService.d.ts +51 -0
  243. package/dist/services/WorktreeService.d.ts.map +1 -0
  244. package/dist/services/WorktreeService.js +204 -0
  245. package/dist/services/WorktreeService.js.map +1 -0
  246. package/dist/services/index.d.ts +25 -0
  247. package/dist/services/index.d.ts.map +1 -0
  248. package/dist/services/index.js +25 -0
  249. package/dist/services/index.js.map +1 -0
  250. package/dist/types/extended-flow.d.ts +167 -0
  251. package/dist/types/extended-flow.d.ts.map +1 -0
  252. package/dist/types/extended-flow.js +103 -0
  253. package/dist/types/extended-flow.js.map +1 -0
  254. package/dist/types/index.d.ts +210 -0
  255. package/dist/types/index.d.ts.map +1 -0
  256. package/dist/types/index.js +28 -0
  257. package/dist/types/index.js.map +1 -0
  258. package/dist/utils/git.d.ts +41 -0
  259. package/dist/utils/git.d.ts.map +1 -0
  260. package/dist/utils/git.js +68 -0
  261. package/dist/utils/git.js.map +1 -0
  262. package/dist/utils/index.d.ts +6 -0
  263. package/dist/utils/index.d.ts.map +1 -0
  264. package/dist/utils/index.js +6 -0
  265. package/dist/utils/index.js.map +1 -0
  266. package/dist/utils/paths.d.ts +30 -0
  267. package/dist/utils/paths.d.ts.map +1 -0
  268. package/dist/utils/paths.js +43 -0
  269. package/dist/utils/paths.js.map +1 -0
  270. package/framework/.red64/settings/rules/design-discovery-full.md +93 -0
  271. package/framework/.red64/settings/rules/design-discovery-light.md +49 -0
  272. package/framework/.red64/settings/rules/design-principles.md +182 -0
  273. package/framework/.red64/settings/rules/design-review.md +110 -0
  274. package/framework/.red64/settings/rules/ears-format.md +49 -0
  275. package/framework/.red64/settings/rules/gap-analysis.md +144 -0
  276. package/framework/.red64/settings/rules/steering-principles.md +90 -0
  277. package/framework/.red64/settings/rules/tasks-generation.md +131 -0
  278. package/framework/.red64/settings/rules/tasks-parallel-analysis.md +34 -0
  279. package/framework/.red64/settings/templates/flow-state.json +48 -0
  280. package/framework/.red64/settings/templates/specs/design.md +276 -0
  281. package/framework/.red64/settings/templates/specs/init.json +24 -0
  282. package/framework/.red64/settings/templates/specs/requirements-init.md +9 -0
  283. package/framework/.red64/settings/templates/specs/requirements.md +26 -0
  284. package/framework/.red64/settings/templates/specs/research.md +61 -0
  285. package/framework/.red64/settings/templates/specs/tasks.md +21 -0
  286. package/framework/.red64/settings/templates/steering/product.md +18 -0
  287. package/framework/.red64/settings/templates/steering/structure.md +41 -0
  288. package/framework/.red64/settings/templates/steering/tech.md +45 -0
  289. package/framework/.red64/settings/templates/steering-custom/api-standards.md +69 -0
  290. package/framework/.red64/settings/templates/steering-custom/authentication.md +67 -0
  291. package/framework/.red64/settings/templates/steering-custom/database.md +46 -0
  292. package/framework/.red64/settings/templates/steering-custom/deployment.md +54 -0
  293. package/framework/.red64/settings/templates/steering-custom/error-handling.md +59 -0
  294. package/framework/.red64/settings/templates/steering-custom/security.md +55 -0
  295. package/framework/.red64/settings/templates/steering-custom/testing.md +47 -0
  296. package/framework/agents/claude/.claude/agents/red64/spec-design.md +174 -0
  297. package/framework/agents/claude/.claude/agents/red64/spec-impl.md +120 -0
  298. package/framework/agents/claude/.claude/agents/red64/spec-requirements.md +102 -0
  299. package/framework/agents/claude/.claude/agents/red64/spec-tasks.md +141 -0
  300. package/framework/agents/claude/.claude/agents/red64/steering-custom.md +147 -0
  301. package/framework/agents/claude/.claude/agents/red64/steering.md +163 -0
  302. package/framework/agents/claude/.claude/agents/red64/validate-design.md +98 -0
  303. package/framework/agents/claude/.claude/agents/red64/validate-gap.md +99 -0
  304. package/framework/agents/claude/.claude/agents/red64/validate-impl.md +146 -0
  305. package/framework/agents/claude/.claude/commands/red64/spec-design.md +64 -0
  306. package/framework/agents/claude/.claude/commands/red64/spec-impl.md +68 -0
  307. package/framework/agents/claude/.claude/commands/red64/spec-init.md +65 -0
  308. package/framework/agents/claude/.claude/commands/red64/spec-quick.md +360 -0
  309. package/framework/agents/claude/.claude/commands/red64/spec-requirements.md +62 -0
  310. package/framework/agents/claude/.claude/commands/red64/spec-status.md +87 -0
  311. package/framework/agents/claude/.claude/commands/red64/spec-tasks.md +75 -0
  312. package/framework/agents/claude/.claude/commands/red64/steering-custom.md +59 -0
  313. package/framework/agents/claude/.claude/commands/red64/steering.md +62 -0
  314. package/framework/agents/claude/.claude/commands/red64/validate-design.md +59 -0
  315. package/framework/agents/claude/.claude/commands/red64/validate-gap.md +53 -0
  316. package/framework/agents/claude/.claude/commands/red64/validate-impl.md +68 -0
  317. package/framework/agents/claude/docs/CLAUDE.md +45 -0
  318. package/framework/agents/codex/.codex/agents/red64/spec-design.md +174 -0
  319. package/framework/agents/codex/.codex/agents/red64/spec-impl.md +120 -0
  320. package/framework/agents/codex/.codex/agents/red64/spec-requirements.md +102 -0
  321. package/framework/agents/codex/.codex/agents/red64/spec-tasks.md +141 -0
  322. package/framework/agents/codex/.codex/agents/red64/steering-custom.md +147 -0
  323. package/framework/agents/codex/.codex/agents/red64/steering.md +163 -0
  324. package/framework/agents/codex/.codex/agents/red64/validate-design.md +98 -0
  325. package/framework/agents/codex/.codex/agents/red64/validate-gap.md +99 -0
  326. package/framework/agents/codex/.codex/agents/red64/validate-impl.md +146 -0
  327. package/framework/agents/codex/.codex/commands/red64/spec-design.md +64 -0
  328. package/framework/agents/codex/.codex/commands/red64/spec-impl.md +68 -0
  329. package/framework/agents/codex/.codex/commands/red64/spec-init.md +65 -0
  330. package/framework/agents/codex/.codex/commands/red64/spec-quick.md +360 -0
  331. package/framework/agents/codex/.codex/commands/red64/spec-requirements.md +62 -0
  332. package/framework/agents/codex/.codex/commands/red64/spec-status.md +87 -0
  333. package/framework/agents/codex/.codex/commands/red64/spec-tasks.md +75 -0
  334. package/framework/agents/codex/.codex/commands/red64/steering-custom.md +59 -0
  335. package/framework/agents/codex/.codex/commands/red64/steering.md +62 -0
  336. package/framework/agents/codex/.codex/commands/red64/validate-design.md +59 -0
  337. package/framework/agents/codex/.codex/commands/red64/validate-gap.md +53 -0
  338. package/framework/agents/codex/.codex/commands/red64/validate-impl.md +68 -0
  339. package/framework/agents/codex/docs/AGENTS.md +68 -0
  340. package/framework/agents/gemini/commands.toml +607 -0
  341. package/framework/agents/gemini/docs/GEMINI.md +45 -0
  342. package/framework/stacks/generic/product.md +27 -0
  343. package/framework/stacks/generic/structure.md +46 -0
  344. package/framework/stacks/generic/tech.md +47 -0
  345. package/framework/stacks/node/product.md +27 -0
  346. package/framework/stacks/node/structure.md +82 -0
  347. package/framework/stacks/node/tech.md +63 -0
  348. package/framework/stacks/python/product.md +27 -0
  349. package/framework/stacks/python/structure.md +78 -0
  350. package/framework/stacks/python/tech.md +64 -0
  351. package/framework/stacks/react/product.md +27 -0
  352. package/framework/stacks/react/structure.md +76 -0
  353. package/framework/stacks/react/tech.md +65 -0
  354. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SteeringStep.d.ts","sourceRoot":"","sources":["../../../src/components/init/SteeringStep.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAUD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAwEpD,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SteeringStep component
4
+ * Task 5.4: Offer steering enhancement options
5
+ */
6
+ import { useState, useRef, useEffect } from 'react';
7
+ import { Box, Text } from 'ink';
8
+ import { Select } from '@inkjs/ui';
9
+ const STEERING_OPTIONS = [
10
+ { value: 'enhance', label: 'Enhance steering docs with AI (/red64:steering)' },
11
+ { value: 'custom', label: 'Generate custom steering docs (/red64:steering-custom)' },
12
+ { value: 'done', label: 'Continue without enhancement' }
13
+ ];
14
+ export const SteeringStep = ({ steeringFiles, noSteering, onNext }) => {
15
+ const [showingOptions, setShowingOptions] = useState(true);
16
+ // Use ref to stabilize callback
17
+ const onNextRef = useRef(onNext);
18
+ onNextRef.current = onNext;
19
+ const skipHandledRef = useRef(false);
20
+ // Skip steering step if --no-steering flag is set
21
+ useEffect(() => {
22
+ if (noSteering && !skipHandledRef.current) {
23
+ skipHandledRef.current = true;
24
+ onNextRef.current();
25
+ }
26
+ }, [noSteering]);
27
+ const handleAction = (value) => {
28
+ const action = value;
29
+ if (action === 'done') {
30
+ onNext();
31
+ }
32
+ else {
33
+ // For enhance/custom, show message and return to options
34
+ // In real implementation, this would trigger Claude commands
35
+ setShowingOptions(true);
36
+ }
37
+ };
38
+ if (noSteering) {
39
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Text, { dimColor: true, children: "Skipping steering enhancement..." }) }));
40
+ }
41
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "Steering Enhancement" }) }), _jsxs(Box, { marginBottom: 1, flexDirection: "column", children: [_jsx(Text, { children: "Applied steering templates:" }), steeringFiles.map((file, index) => (_jsxs(Text, { dimColor: true, children: [" - ", file] }, index)))] }), showingOptions && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Would you like to enhance your steering documents?" }) }), _jsx(Select, { options: STEERING_OPTIONS, onChange: handleAction })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Tip: You can run steering commands later with /red64:steering" }) })] }));
42
+ };
43
+ //# sourceMappingURL=SteeringStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SteeringStep.js","sourceRoot":"","sources":["../../../src/components/init/SteeringStep.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,OAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAUnC,MAAM,gBAAgB,GAA+C;IACnE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,iDAAiD,EAAE;IAC9E,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,wDAAwD,EAAE;IACpF,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,8BAA8B,EAAE;CACzD,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,aAAa,EACb,UAAU,EACV,MAAM,EACP,EAAE,EAAE;IACH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE3D,gCAAgC;IAChC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAE3B,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,kDAAkD;IAClD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1C,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,KAAuB,CAAC;QACvC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,yDAAyD;YACzD,6DAA6D;YAC7D,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,YACpC,KAAC,IAAI,IAAC,QAAQ,uDAAwC,GAClD,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,qCAA4B,GAC/C,EAEN,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aAC1C,KAAC,IAAI,8CAAmC,EACvC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAClC,MAAC,IAAI,IAAa,QAAQ,2BAAM,IAAI,KAAzB,KAAK,CAA4B,CAC7C,CAAC,IACE,EAEL,cAAc,IAAI,CACjB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,qEAA0D,GAC3D,EACN,KAAC,MAAM,IACL,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,YAAY,GACtB,IACE,CACP,EAED,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,oFAEP,GACH,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * WelcomeStep component
3
+ * Task 5.1: Display welcome message and check for existing directory
4
+ */
5
+ import React from 'react';
6
+ import type { BaseStepProps, ConflictResolution } from './types.js';
7
+ export interface WelcomeStepProps extends BaseStepProps {
8
+ readonly directoryExists: boolean;
9
+ readonly onConflictResolution?: (resolution: ConflictResolution) => void;
10
+ }
11
+ export declare const WelcomeStep: React.FC<WelcomeStepProps>;
12
+ //# sourceMappingURL=WelcomeStep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WelcomeStep.d.ts","sourceRoot":"","sources":["../../../src/components/init/WelcomeStep.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC1E;AAQD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAmFlD,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * WelcomeStep component
4
+ * Task 5.1: Display welcome message and check for existing directory
5
+ */
6
+ import { useEffect, useState, useRef } from 'react';
7
+ import { Box, Text, useApp } from 'ink';
8
+ import { Spinner, Select } from '@inkjs/ui';
9
+ const CONFLICT_OPTIONS = [
10
+ { value: 'overwrite', label: 'Overwrite - Replace existing configuration' },
11
+ { value: 'merge', label: 'Merge - Keep existing files, add missing ones' },
12
+ { value: 'abort', label: 'Abort - Cancel initialization' }
13
+ ];
14
+ export const WelcomeStep = ({ directoryExists, onNext, onError: _onError, onConflictResolution }) => {
15
+ const { exit } = useApp();
16
+ const [checking, setChecking] = useState(true);
17
+ // Use ref to stabilize callback
18
+ const onNextRef = useRef(onNext);
19
+ onNextRef.current = onNext;
20
+ const onConflictResolutionRef = useRef(onConflictResolution);
21
+ onConflictResolutionRef.current = onConflictResolution;
22
+ const hasTransitionedRef = useRef(false);
23
+ useEffect(() => {
24
+ // Simulate a brief check delay for UX
25
+ const timer = setTimeout(() => {
26
+ setChecking(false);
27
+ if (!directoryExists && !hasTransitionedRef.current) {
28
+ hasTransitionedRef.current = true;
29
+ onNextRef.current();
30
+ }
31
+ }, 500);
32
+ return () => clearTimeout(timer);
33
+ }, [directoryExists]);
34
+ const handleConflictSelect = (value) => {
35
+ const resolution = value;
36
+ if (resolution === 'abort') {
37
+ exit();
38
+ return;
39
+ }
40
+ // Call resolution handler and proceed
41
+ onConflictResolutionRef.current?.(resolution);
42
+ onNextRef.current();
43
+ };
44
+ if (checking) {
45
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "Welcome to red64 init" }) }), _jsx(Box, { children: _jsx(Spinner, { label: "Checking project directory..." }) })] }));
46
+ }
47
+ if (directoryExists) {
48
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "yellow", children: "Existing .red64/ directory found" }) }), _jsx(Text, { children: "A red64 configuration already exists in this project." }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Select an action:" }), _jsx(Box, { marginTop: 1, children: _jsx(Select, { options: CONFLICT_OPTIONS, onChange: handleConflictSelect }) })] })] }));
49
+ }
50
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "Welcome to red64 init" }) }), _jsx(Text, { children: "Preparing to initialize your project for red64 flows..." })] }));
51
+ };
52
+ //# sourceMappingURL=WelcomeStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WelcomeStep.js","sourceRoot":"","sources":["../../../src/components/init/WelcomeStep.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Init wizard components
3
+ */
4
+ export { WelcomeStep, type WelcomeStepProps } from './WelcomeStep.js';
5
+ export { FetchStep, type FetchStepProps } from './FetchStep.js';
6
+ export { SetupStep, type SetupStepProps } from './SetupStep.js';
7
+ export { SteeringStep, type SteeringStepProps } from './SteeringStep.js';
8
+ export { CompleteStep, type CompleteStepProps } from './CompleteStep.js';
9
+ export { ErrorStep, type ErrorStepProps } from './ErrorStep.js';
10
+ export type { BaseStepProps, InitStep, SetupData, InitSummary, InitError, InitErrorCode, ConflictResolution, InitFlags } from './types.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/init/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhE,YAAY,EACV,aAAa,EACb,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,SAAS,EACV,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Init wizard components
3
+ */
4
+ export { WelcomeStep } from './WelcomeStep.js';
5
+ export { FetchStep } from './FetchStep.js';
6
+ export { SetupStep } from './SetupStep.js';
7
+ export { SteeringStep } from './SteeringStep.js';
8
+ export { CompleteStep } from './CompleteStep.js';
9
+ export { ErrorStep } from './ErrorStep.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/init/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Init wizard types
3
+ * Requirements: 1.1-1.7, 4.1-4.9, 5.1-5.7
4
+ */
5
+ import type { ProjectType } from '../../services/ConfigService.js';
6
+ import type { FetchProgress } from '../../services/GitHubService.js';
7
+ import type { CodingAgent } from '../../types/index.js';
8
+ /**
9
+ * Base step props interface
10
+ */
11
+ export interface BaseStepProps {
12
+ readonly onNext: () => void;
13
+ readonly onError: (error: InitError) => void;
14
+ }
15
+ /**
16
+ * Init wizard step discriminated union
17
+ * Task 6.1: Step state management
18
+ */
19
+ export type InitStep = {
20
+ type: 'welcome';
21
+ } | {
22
+ type: 'checking-existing';
23
+ path: string;
24
+ } | {
25
+ type: 'conflict-prompt';
26
+ existingPath: string;
27
+ } | {
28
+ type: 'fetching';
29
+ progress: FetchProgress;
30
+ } | {
31
+ type: 'extracting';
32
+ } | {
33
+ type: 'guided-setup';
34
+ data: Partial<SetupData>;
35
+ } | {
36
+ type: 'applying-templates';
37
+ } | {
38
+ type: 'git-setup';
39
+ } | {
40
+ type: 'steering-prompt';
41
+ } | {
42
+ type: 'complete';
43
+ summary: InitSummary;
44
+ } | {
45
+ type: 'error';
46
+ error: InitError;
47
+ };
48
+ /**
49
+ * Setup data collected during guided setup
50
+ */
51
+ export interface SetupData {
52
+ readonly projectType: ProjectType;
53
+ readonly stack: string;
54
+ readonly projectName: string;
55
+ readonly description: string;
56
+ readonly customValues: Record<string, string>;
57
+ }
58
+ /**
59
+ * Summary displayed at completion
60
+ */
61
+ export interface InitSummary {
62
+ readonly createdDirs: readonly string[];
63
+ readonly appliedStack: string;
64
+ readonly configPath: string;
65
+ readonly steeringFiles: readonly string[];
66
+ readonly gitInitialized?: boolean;
67
+ readonly gitCommitted?: boolean;
68
+ }
69
+ /**
70
+ * Error codes
71
+ */
72
+ export type InitErrorCode = 'NETWORK_ERROR' | 'PERMISSION_ERROR' | 'EXTRACTION_ERROR' | 'INVALID_REPO';
73
+ /**
74
+ * Init error with recovery information
75
+ */
76
+ export interface InitError {
77
+ readonly code: InitErrorCode;
78
+ readonly message: string;
79
+ readonly recoverable: boolean;
80
+ readonly suggestion?: string;
81
+ }
82
+ /**
83
+ * Conflict resolution options
84
+ */
85
+ export type ConflictResolution = 'overwrite' | 'merge' | 'abort';
86
+ /**
87
+ * Init command flags
88
+ */
89
+ export interface InitFlags {
90
+ readonly repo?: string;
91
+ readonly version?: string;
92
+ readonly stack?: string;
93
+ readonly 'skip-guided'?: boolean;
94
+ readonly 'no-steering'?: boolean;
95
+ readonly 'no-cache'?: boolean;
96
+ readonly agent?: CodingAgent;
97
+ }
98
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/init/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Init wizard types
3
+ * Requirements: 1.1-1.7, 4.1-4.9, 5.1-5.7
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/init/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Abort screen component
3
+ * Task 6: Abort Screen Implementation
4
+ * Requirements: 4.1, 4.2, 4.3, 4.4, 4.5, 4.6
5
+ */
6
+ import React from 'react';
7
+ import type { ScreenProps } from './ScreenProps.js';
8
+ /**
9
+ * AbortScreen Component
10
+ * Aborts a flow with confirmation and cleanup
11
+ * Requirements: 4.1-4.6 - Abort command implementation
12
+ */
13
+ export declare const AbortScreen: React.FC<ScreenProps>;
14
+ //# sourceMappingURL=AbortScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbortScreen.d.ts","sourceRoot":"","sources":["../../../src/components/screens/AbortScreen.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA2DpD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAwS7C,CAAC"}
@@ -0,0 +1,181 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Abort screen component
4
+ * Task 6: Abort Screen Implementation
5
+ * Requirements: 4.1, 4.2, 4.3, 4.4, 4.5, 4.6
6
+ */
7
+ import { useState, useEffect } from 'react';
8
+ import { Box, Text, useApp } from 'ink';
9
+ import { createStateStore } from '../../services/StateStore.js';
10
+ import { createWorktreeService } from '../../services/WorktreeService.js';
11
+ import { createBranchService } from '../../services/BranchService.js';
12
+ import { createPRStatusFetcher } from '../../services/PRStatusFetcher.js';
13
+ import { Spinner, ErrorDisplay, SelectMenu } from '../ui/index.js';
14
+ const confirmOptions = [
15
+ { label: 'Yes, abort this flow', value: 'yes' },
16
+ { label: 'No, cancel', value: 'no' }
17
+ ];
18
+ const branchOptions = [
19
+ { label: 'Delete branch', value: 'delete' },
20
+ { label: 'Keep branch', value: 'keep' }
21
+ ];
22
+ /**
23
+ * Get base directory from environment or default
24
+ */
25
+ function getBaseDir() {
26
+ return process.cwd();
27
+ }
28
+ /**
29
+ * AbortScreen Component
30
+ * Aborts a flow with confirmation and cleanup
31
+ * Requirements: 4.1-4.6 - Abort command implementation
32
+ */
33
+ export const AbortScreen = ({ args }) => {
34
+ const { exit } = useApp();
35
+ const featureName = args[0];
36
+ const [state, setState] = useState({ step: 'loading' });
37
+ const [stateStore] = useState(() => createStateStore(getBaseDir()));
38
+ const [worktreeService] = useState(() => createWorktreeService());
39
+ const [branchService] = useState(() => createBranchService());
40
+ const [prFetcher] = useState(() => createPRStatusFetcher());
41
+ // Load flow state on mount
42
+ useEffect(() => {
43
+ if (!featureName) {
44
+ setState({ step: 'error', error: 'Feature name is required. Usage: red64 abort <feature>' });
45
+ return;
46
+ }
47
+ const loadState = async () => {
48
+ try {
49
+ const flowState = await stateStore.load(featureName);
50
+ if (!flowState) {
51
+ setState({ step: 'not-found', feature: featureName });
52
+ return;
53
+ }
54
+ // Requirements 4.1 - Show confirmation prompt
55
+ setState({ step: 'confirm', flowState });
56
+ }
57
+ catch (error) {
58
+ setState({
59
+ step: 'error',
60
+ error: error instanceof Error ? error.message : 'Failed to load flow state'
61
+ });
62
+ }
63
+ };
64
+ loadState();
65
+ }, [featureName, stateStore]);
66
+ // Handle confirmation
67
+ const handleConfirm = (item) => {
68
+ if (state.step !== 'confirm')
69
+ return;
70
+ if (item.value === 'no') {
71
+ setState({ step: 'cancelled' });
72
+ setTimeout(() => exit(), 1000);
73
+ return;
74
+ }
75
+ // Requirements 4.2 - Show branch options
76
+ setState({ step: 'branch-options', flowState: state.flowState });
77
+ };
78
+ // Handle branch decision
79
+ const handleBranchDecision = async (item) => {
80
+ if (state.step !== 'branch-options')
81
+ return;
82
+ setState({ step: 'cleaning', flowState: state.flowState, results: [] });
83
+ // Start cleanup
84
+ await performCleanup(state.flowState, item.value === 'delete');
85
+ };
86
+ // Perform cleanup operations
87
+ const performCleanup = async (flowState, deleteBranchFlag) => {
88
+ const results = [];
89
+ // Requirements 4.3 - Close PR if exists
90
+ if (flowState.metadata.prNumber) {
91
+ try {
92
+ const prResult = await prFetcher.close(flowState.metadata.prNumber);
93
+ results.push({
94
+ action: 'Close PR',
95
+ success: prResult.success,
96
+ error: prResult.error
97
+ });
98
+ }
99
+ catch (error) {
100
+ results.push({
101
+ action: 'Close PR',
102
+ success: false,
103
+ error: error instanceof Error ? error.message : 'Unknown error'
104
+ });
105
+ }
106
+ }
107
+ // Requirements 4.4 - Remove worktree
108
+ const repoPath = getBaseDir();
109
+ try {
110
+ const worktreeResult = await worktreeService.remove(repoPath, flowState.feature, true);
111
+ results.push({
112
+ action: 'Remove worktree',
113
+ success: worktreeResult.success,
114
+ error: worktreeResult.error
115
+ });
116
+ }
117
+ catch (error) {
118
+ results.push({
119
+ action: 'Remove worktree',
120
+ success: false,
121
+ error: error instanceof Error ? error.message : 'Unknown error'
122
+ });
123
+ }
124
+ // Delete branch if requested
125
+ if (deleteBranchFlag) {
126
+ const branchName = `feature/${flowState.feature}`;
127
+ try {
128
+ const branchResult = await branchService.deleteLocal(branchName, true);
129
+ results.push({
130
+ action: 'Delete branch',
131
+ success: branchResult.success,
132
+ error: branchResult.error
133
+ });
134
+ }
135
+ catch (error) {
136
+ results.push({
137
+ action: 'Delete branch',
138
+ success: false,
139
+ error: error instanceof Error ? error.message : 'Unknown error'
140
+ });
141
+ }
142
+ }
143
+ // Requirements 4.5 - Archive flow state
144
+ try {
145
+ await stateStore.archive(flowState.feature);
146
+ results.push({
147
+ action: 'Archive state',
148
+ success: true,
149
+ error: undefined
150
+ });
151
+ }
152
+ catch (error) {
153
+ results.push({
154
+ action: 'Archive state',
155
+ success: false,
156
+ error: error instanceof Error ? error.message : 'Unknown error'
157
+ });
158
+ }
159
+ setState({ step: 'complete', results });
160
+ };
161
+ // Render based on state
162
+ switch (state.step) {
163
+ case 'loading':
164
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: "cyan", children: "abort" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Spinner, { label: `Loading flow state for ${featureName ?? 'feature'}...` }) })] }));
165
+ case 'not-found':
166
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: "cyan", children: "abort" }) }), _jsx(Box, { marginTop: 1, children: _jsx(ErrorDisplay, { error: new Error(`No flow found for feature: ${state.feature}`), suggestion: "Use 'red64 list' to see active flows." }) })] }));
167
+ case 'confirm':
168
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: "abort" }), _jsxs(Text, { children: [" - ", featureName] })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "yellow", bold: true, children: "Are you sure you want to abort this flow?" }), _jsx(Text, { dimColor: true, children: "This will cleanup the worktree and optionally delete the branch." })] }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsxs(Text, { children: ["Current phase: ", state.flowState.phase.type] }) }), _jsx(Box, { marginTop: 1, children: _jsx(SelectMenu, { items: confirmOptions, onSelect: handleConfirm }) })] }));
169
+ case 'branch-options':
170
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: "abort" }), _jsxs(Text, { children: [" - ", featureName] })] }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsx(Text, { children: "What would you like to do with the branch?" }) }), _jsx(Box, { marginTop: 1, children: _jsx(SelectMenu, { items: branchOptions, onSelect: handleBranchDecision }) })] }));
171
+ case 'cleaning':
172
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: "abort" }), _jsxs(Text, { children: [" - ", featureName] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Spinner, { label: "Cleaning up..." }) }), state.results.map((result, index) => (_jsx(Box, { children: _jsxs(Text, { color: result.success ? 'green' : 'red', children: [result.success ? '\u2713' : '\u2717', " ", result.action, result.error && ` - ${result.error}`] }) }, index)))] }));
173
+ case 'complete':
174
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: "abort" }), _jsxs(Text, { children: [" - ", featureName] })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Cleanup complete:" }), state.results.map((result, index) => (_jsxs(Box, { marginLeft: 1, children: [_jsxs(Text, { color: result.success ? 'green' : 'red', children: [result.success ? '\u2713' : '\u2717', " ", result.action] }), result.error && (_jsxs(Text, { dimColor: true, children: [" - ", result.error] }))] }, index)))] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", children: "Flow aborted successfully." }) })] }));
175
+ case 'cancelled':
176
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: "cyan", children: "abort" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Abort cancelled." }) })] }));
177
+ case 'error':
178
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: "cyan", children: "abort" }) }), _jsx(Box, { marginTop: 1, children: _jsx(ErrorDisplay, { error: new Error(state.error), suggestion: "Check the feature name and try again." }) })] }));
179
+ }
180
+ };
181
+ //# sourceMappingURL=AbortScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbortScreen.js","sourceRoot":"","sources":["../../../src/components/screens/AbortScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Approval Screen Component
3
+ * Task 7.1: Create approval screen component for phase gates
4
+ * Requirements: 3.2, 3.3, 3.4, 3.5, 3.6, 3.7
5
+ */
6
+ import React from 'react';
7
+ import type { ExtendedFlowPhase } from '../../types/extended-flow.js';
8
+ /**
9
+ * Approval screen props
10
+ * Requirements: 3.2 - Render approval UI
11
+ */
12
+ export interface ApprovalScreenProps {
13
+ readonly phase: ExtendedFlowPhase;
14
+ readonly artifactPath: string;
15
+ readonly onApprove: () => void;
16
+ readonly onReject: () => void;
17
+ readonly onAbort: () => void;
18
+ }
19
+ /**
20
+ * Approval screen component
21
+ * Requirements: 3.2, 3.3, 3.4, 3.5, 3.6, 3.7
22
+ */
23
+ export declare const ApprovalScreen: React.FC<ApprovalScreenProps>;
24
+ //# sourceMappingURL=ApprovalScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApprovalScreen.d.ts","sourceRoot":"","sources":["../../../src/components/screens/ApprovalScreen.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAgCD;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA6FxD,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Approval Screen Component
4
+ * Task 7.1: Create approval screen component for phase gates
5
+ * Requirements: 3.2, 3.3, 3.4, 3.5, 3.6, 3.7
6
+ */
7
+ import React from 'react';
8
+ import { Box, Text, useInput } from 'ink';
9
+ import { basename } from 'node:path';
10
+ /**
11
+ * Get phase display name
12
+ */
13
+ function getPhaseDisplayName(phase) {
14
+ switch (phase.type) {
15
+ case 'requirements-approval':
16
+ return 'requirements';
17
+ case 'design-approval':
18
+ return 'design';
19
+ case 'tasks-approval':
20
+ return 'tasks';
21
+ case 'gap-review':
22
+ return 'gap analysis';
23
+ case 'design-validation-review':
24
+ return 'design validation';
25
+ default:
26
+ return phase.type;
27
+ }
28
+ }
29
+ /**
30
+ * Get feature from phase
31
+ */
32
+ function getFeature(phase) {
33
+ if (phase.type === 'idle') {
34
+ return '';
35
+ }
36
+ return phase.feature;
37
+ }
38
+ /**
39
+ * Approval screen component
40
+ * Requirements: 3.2, 3.3, 3.4, 3.5, 3.6, 3.7
41
+ */
42
+ export const ApprovalScreen = ({ phase, artifactPath, onApprove, onReject, onAbort }) => {
43
+ const [selectedOption, setSelectedOption] = React.useState(0);
44
+ const options = ['Approve', 'Request Changes', 'Abort'];
45
+ const phaseName = getPhaseDisplayName(phase);
46
+ const feature = getFeature(phase);
47
+ const artifactName = basename(artifactPath);
48
+ // Handle keyboard input
49
+ useInput((input, key) => {
50
+ if (key.upArrow) {
51
+ setSelectedOption(prev => (prev > 0 ? prev - 1 : options.length - 1));
52
+ }
53
+ if (key.downArrow) {
54
+ setSelectedOption(prev => (prev < options.length - 1 ? prev + 1 : 0));
55
+ }
56
+ if (key.return) {
57
+ switch (selectedOption) {
58
+ case 0:
59
+ onApprove();
60
+ break;
61
+ case 1:
62
+ onReject();
63
+ break;
64
+ case 2:
65
+ onAbort();
66
+ break;
67
+ }
68
+ }
69
+ // Keyboard shortcuts
70
+ if (input === 'a') {
71
+ onApprove();
72
+ }
73
+ if (input === 'r') {
74
+ onReject();
75
+ }
76
+ if (input === 'q') {
77
+ onAbort();
78
+ }
79
+ });
80
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: "cyan", children: ["Approval Gate: ", phaseName] }) }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { children: "Feature: " }), _jsx(Text, { color: "yellow", children: feature })] }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["Artifact: ", artifactName] }) }), _jsx(Box, { marginBottom: 1, borderStyle: "single", paddingX: 1, children: _jsxs(Text, { children: ["Review the generated ", phaseName, " and choose an action:"] }) }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: options.map((option, index) => (_jsxs(Box, { children: [_jsxs(Text, { color: selectedOption === index ? 'green' : undefined, bold: selectedOption === index, children: [selectedOption === index ? '> ' : ' ', option] }), _jsxs(Text, { dimColor: true, children: [' ', index === 0 && '(a)', index === 1 && '(r)', index === 2 && '(q)'] })] }, option))) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Use arrows to navigate, Enter to select, or press shortcut key" }) })] }));
81
+ };
82
+ //# sourceMappingURL=ApprovalScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApprovalScreen.js","sourceRoot":"","sources":["../../../src/components/screens/ApprovalScreen.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAcrC;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAwB;IACnD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,uBAAuB;YAC1B,OAAO,cAAc,CAAC;QACxB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,cAAc,CAAC;QACxB,KAAK,0BAA0B;YAC7B,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,KAAK,CAAC,IAAI,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,KAAwB;IAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,KAAK,EACL,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,OAAO,EACR,EAAE,EAAE;IACH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE5C,wBAAwB;IACxB,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,QAAQ,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC;oBACJ,SAAS,EAAE,CAAC;oBACZ,MAAM;gBACR,KAAK,CAAC;oBACJ,QAAQ,EAAE,CAAC;oBACX,MAAM;gBACR,KAAK,CAAC;oBACJ,OAAO,EAAE,CAAC;oBACV,MAAM;YACV,CAAC;QACH,CAAC;QACD,qBAAqB;QACrB,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,SAAS,EAAE,CAAC;QACd,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,gCACL,SAAS,IACpB,GACH,EAEN,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,4BAAiB,EACtB,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,OAAO,GAAQ,IACjC,EAEN,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,MAAC,IAAI,IAAC,QAAQ,iCAAY,YAAY,IAAQ,GAC1C,EAEN,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,EAAE,WAAW,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,YACpD,MAAC,IAAI,wCAAuB,SAAS,8BAA8B,GAC/D,EAEN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,YACrC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,MAAC,GAAG,eACF,MAAC,IAAI,IACH,KAAK,EAAE,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACrD,IAAI,EAAE,cAAc,KAAK,KAAK,aAE7B,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EACtC,MAAM,IACF,EACP,MAAC,IAAI,IAAC,QAAQ,mBACX,GAAG,EACH,KAAK,KAAK,CAAC,IAAI,KAAK,EACpB,KAAK,KAAK,CAAC,IAAI,KAAK,EACpB,KAAK,KAAK,CAAC,IAAI,KAAK,IAChB,KAbC,MAAM,CAcV,CACP,CAAC,GACE,EAEN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,qFAAsE,GAChF,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}