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,20 @@
1
+ /**
2
+ * Help screen component
3
+ * Requirements: 4.7, 8.5
4
+ */
5
+ import React from 'react';
6
+ import type { ScreenProps } from './ScreenProps.js';
7
+ import type { Command } from '../../types/index.js';
8
+ /**
9
+ * Extended props for HelpScreen
10
+ */
11
+ interface HelpScreenProps extends ScreenProps {
12
+ readonly helpCommand?: Command;
13
+ }
14
+ /**
15
+ * Display comprehensive usage information for all commands
16
+ * Requirements: 4.7, 8.5 - Display detailed usage information with red64 branding
17
+ */
18
+ export declare const HelpScreen: React.FC<HelpScreenProps>;
19
+ export {};
20
+ //# sourceMappingURL=HelpScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpScreen.d.ts","sourceRoot":"","sources":["../../../src/components/screens/HelpScreen.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;GAEG;AACH,UAAU,eAAgB,SAAQ,WAAW;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAyDD;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAkDhD,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ /**
4
+ * Command-specific help content
5
+ */
6
+ const COMMAND_HELP = {
7
+ init: {
8
+ usage: 'red64 init [options]',
9
+ description: 'Initialize Red64 in your project. Creates .red64/ directory with configuration and steering documents.',
10
+ options: [
11
+ '-a, --agent <name> Coding agent: claude, gemini, codex (default: claude)',
12
+ '--repo <owner/repo> GitHub repository for framework templates',
13
+ '--stack <name> Tech stack template (react, node, python, etc.)',
14
+ '--skip-guided Skip interactive setup wizard',
15
+ '--no-steering Skip steering document generation',
16
+ '--no-cache Disable template caching',
17
+ '-h, --help Show this help'
18
+ ]
19
+ },
20
+ start: {
21
+ usage: 'red64 start <feature> "<description>" [options]',
22
+ description: 'Start a new feature development flow, or resume an existing one. Creates git worktree, generates specs, and implements tasks.',
23
+ options: [
24
+ '-m, --model <name> Model to use (e.g., claude-3-5-haiku-latest for dev)',
25
+ '-y, --yes Auto-approve all phases (skip review gates)',
26
+ '-b, --brownfield Enable gap analysis for existing codebases',
27
+ '-g, --greenfield New feature mode (default)',
28
+ '-s, --skip-permissions Pass --dangerously-skip-permissions to Claude CLI',
29
+ '-t, --tier <name> Use specific Claude config directory',
30
+ '--sandbox Run in Docker isolation',
31
+ '--verbose Show detailed execution logs',
32
+ '-h, --help Show this help'
33
+ ]
34
+ },
35
+ status: {
36
+ usage: 'red64 status [feature]',
37
+ description: 'Show the status of a flow. If no feature is specified, shows status of all flows.',
38
+ options: [
39
+ '-h, --help Show this help'
40
+ ]
41
+ },
42
+ list: {
43
+ usage: 'red64 list',
44
+ description: 'List all active flows in the repository.',
45
+ options: [
46
+ '-h, --help Show this help'
47
+ ]
48
+ },
49
+ abort: {
50
+ usage: 'red64 abort <feature>',
51
+ description: 'Abort a flow and clean up resources (worktree, branch, state).',
52
+ options: [
53
+ '-h, --help Show this help'
54
+ ]
55
+ }
56
+ };
57
+ /**
58
+ * Display comprehensive usage information for all commands
59
+ * Requirements: 4.7, 8.5 - Display detailed usage information with red64 branding
60
+ */
61
+ export const HelpScreen = ({ helpCommand }) => {
62
+ // Show command-specific help if requested
63
+ if (helpCommand && COMMAND_HELP[helpCommand]) {
64
+ const help = COMMAND_HELP[helpCommand];
65
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Text, { bold: true, color: "cyan", children: ["red64 ", helpCommand] }), _jsx(Text, {}), _jsx(Text, { bold: true, children: "Usage:" }), _jsxs(Text, { children: [" ", help.usage] }), _jsx(Text, {}), _jsx(Text, { bold: true, children: "Description:" }), _jsxs(Text, { children: [" ", help.description] }), _jsx(Text, {}), _jsx(Text, { bold: true, children: "Options:" }), help.options.map((opt, i) => (_jsxs(Text, { children: [" ", opt] }, i)))] }));
66
+ }
67
+ // Show general help
68
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Red64 Flow Orchestrator" }), _jsx(Text, {}), _jsx(Text, { bold: true, children: "Usage:" }), _jsx(Text, { children: " red64 init Bootstrap project for red64 flows" }), _jsxs(Text, { children: [" red64 start ", '<feature>', " ", "\"<desc>\"", " Start or resume feature flow"] }), _jsx(Text, { children: " red64 status [feature] Show flow status" }), _jsx(Text, { children: " red64 list List all active flows" }), _jsxs(Text, { children: [" red64 abort ", '<feature>', " Abort and cleanup flow"] }), _jsx(Text, { children: " red64 help Show this help" }), _jsx(Text, {}), _jsx(Text, { bold: true, children: "Global Options:" }), _jsxs(Text, { children: [" -m, --model ", '<name>', " Model to use (e.g., claude-3-5-haiku-latest)"] }), _jsx(Text, { children: " -s, --skip-permissions Pass skip-permissions to Claude CLI" }), _jsx(Text, { children: " -b, --brownfield Enable brownfield mode (gap analysis)" }), _jsx(Text, { children: " -g, --greenfield Greenfield mode (default)" }), _jsxs(Text, { children: [" -t, --tier ", '<name>', " Use specified Claude config directory"] }), _jsx(Text, { children: " --sandbox Run in Docker container for isolation" }), _jsx(Text, { children: " -h, --help Show help (use with command for details)" }), _jsx(Text, { children: " -v, --version Show version" }), _jsx(Text, {}), _jsxs(Text, { dimColor: true, children: ["Run 'red64 ", '<command>', " --help' for more information on a command."] })] }));
69
+ };
70
+ //# sourceMappingURL=HelpScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpScreen.js","sourceRoot":"","sources":["../../../src/components/screens/HelpScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * InitScreen - Init command wizard orchestrator
3
+ * Requirements: 1.1-1.7, 4.1-4.9, 5.1-5.7
4
+ * Tasks: 6.1, 6.2, 6.3
5
+ */
6
+ import React from 'react';
7
+ import type { ScreenProps } from './ScreenProps.js';
8
+ /**
9
+ * InitScreen - Orchestrates the init command multi-step wizard
10
+ * Task 6.1: State management
11
+ * Task 6.2: Service coordination
12
+ * Task 6.3: Step rendering
13
+ */
14
+ export declare const InitScreen: React.FC<ScreenProps>;
15
+ //# sourceMappingURL=InitScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InitScreen.d.ts","sourceRoot":"","sources":["../../../src/components/screens/InitScreen.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA6DpD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAqd5C,CAAC"}
@@ -0,0 +1,420 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * InitScreen - Init command wizard orchestrator
4
+ * Requirements: 1.1-1.7, 4.1-4.9, 5.1-5.7
5
+ * Tasks: 6.1, 6.2, 6.3
6
+ */
7
+ import { useState, useEffect, useCallback, useRef } from 'react';
8
+ import { Box, Text, useApp } from 'ink';
9
+ import { Spinner } from '@inkjs/ui';
10
+ import { WelcomeStep, FetchStep, SetupStep, SteeringStep, CompleteStep, ErrorStep } from '../init/index.js';
11
+ import { createCacheService, createGitHubService, createTemplateService, createConfigService, createCommitService, GitHubFetchError } from '../../services/index.js';
12
+ import { spawn } from 'node:child_process';
13
+ const DEFAULT_REPO = 'Red64llc/red64-cli';
14
+ const DEFAULT_VERSION = 'main';
15
+ // Skip fetch mode - use bundled framework templates for development
16
+ // Set to false to download from GitHub
17
+ const SKIP_FETCH_MODE = true;
18
+ // Get the bundled framework path (for SKIP_FETCH_MODE)
19
+ function getBundledFrameworkPath() {
20
+ // When running from source: /path/to/red64-cli/framework
21
+ // When running from installed package: /path/to/node_modules/red64-cli/framework
22
+ const modulePath = new URL(import.meta.url).pathname;
23
+ const rootDir = modulePath.includes('/dist/')
24
+ ? modulePath.split('/dist/')[0]
25
+ : modulePath.split('/src/')[0];
26
+ return `${rootDir}/framework`;
27
+ }
28
+ // Check if directory is a git repository
29
+ async function isGitRepo(dir) {
30
+ return new Promise((resolve) => {
31
+ const proc = spawn('git', ['rev-parse', '--git-dir'], { cwd: dir, stdio: ['pipe', 'pipe', 'pipe'] });
32
+ proc.on('close', (code) => resolve(code === 0));
33
+ proc.on('error', () => resolve(false));
34
+ });
35
+ }
36
+ // Initialize git repository
37
+ async function gitInit(dir) {
38
+ return new Promise((resolve) => {
39
+ const proc = spawn('git', ['init'], { cwd: dir, stdio: ['pipe', 'pipe', 'pipe'] });
40
+ proc.on('close', (code) => resolve(code === 0));
41
+ proc.on('error', () => resolve(false));
42
+ });
43
+ }
44
+ /**
45
+ * InitScreen - Orchestrates the init command multi-step wizard
46
+ * Task 6.1: State management
47
+ * Task 6.2: Service coordination
48
+ * Task 6.3: Step rendering
49
+ */
50
+ export const InitScreen = ({ flags }) => {
51
+ const { exit } = useApp();
52
+ const [step, setStep] = useState({ type: 'welcome' });
53
+ const [setupData, setSetupData] = useState({});
54
+ const [availableStacks, setAvailableStacks] = useState([]);
55
+ const [steeringFiles, setSteeringFiles] = useState([]);
56
+ const [directoryExists, setDirectoryExists] = useState(false);
57
+ const [gitInitialized, setGitInitialized] = useState(false);
58
+ const [gitCommitted, setGitCommitted] = useState(false);
59
+ const [conflictResolution, setConflictResolution] = useState(null);
60
+ // Extract init-specific flags
61
+ const initFlags = {
62
+ repo: flags.repo,
63
+ version: undefined, // Version flag conflicts with CLI --version
64
+ stack: flags.stack,
65
+ 'skip-guided': flags['skip-guided'],
66
+ 'no-steering': flags['no-steering'],
67
+ 'no-cache': flags['no-cache'],
68
+ agent: flags.agent
69
+ };
70
+ // Services (created once)
71
+ const [services] = useState(() => {
72
+ const cacheService = createCacheService();
73
+ const githubService = createGitHubService({
74
+ defaultRepo: initFlags.repo ?? DEFAULT_REPO,
75
+ defaultVersion: initFlags.version ?? DEFAULT_VERSION,
76
+ cacheService
77
+ });
78
+ const templateService = createTemplateService();
79
+ const configService = createConfigService();
80
+ const commitService = createCommitService();
81
+ return { cacheService, githubService, templateService, configService, commitService };
82
+ });
83
+ // Check for existing directory
84
+ useEffect(() => {
85
+ const checkExisting = async () => {
86
+ const isInitialized = await services.configService.isInitialized(process.cwd());
87
+ setDirectoryExists(isInitialized);
88
+ };
89
+ checkExisting();
90
+ }, [services.configService]);
91
+ // Handle step transitions
92
+ const handleNext = useCallback(() => {
93
+ switch (step.type) {
94
+ case 'welcome':
95
+ setStep({
96
+ type: 'fetching',
97
+ progress: { phase: 'connecting' }
98
+ });
99
+ break;
100
+ case 'fetching':
101
+ setStep({ type: 'extracting' });
102
+ break;
103
+ case 'extracting':
104
+ setStep({
105
+ type: 'guided-setup',
106
+ data: setupData
107
+ });
108
+ break;
109
+ case 'guided-setup':
110
+ setStep({ type: 'applying-templates' });
111
+ break;
112
+ case 'applying-templates':
113
+ if (initFlags['no-steering']) {
114
+ // Skip to complete
115
+ setStep({
116
+ type: 'complete',
117
+ summary: createSummary()
118
+ });
119
+ }
120
+ else {
121
+ setStep({ type: 'steering-prompt' });
122
+ }
123
+ break;
124
+ case 'steering-prompt':
125
+ setStep({
126
+ type: 'complete',
127
+ summary: createSummary()
128
+ });
129
+ break;
130
+ case 'complete':
131
+ exit();
132
+ break;
133
+ }
134
+ }, [step.type, setupData, initFlags, exit]);
135
+ const handleError = useCallback((error) => {
136
+ setStep({ type: 'error', error });
137
+ }, []);
138
+ const handleSetupComplete = useCallback((data) => {
139
+ setSetupData(data);
140
+ }, []);
141
+ const handleConflictResolution = useCallback((resolution) => {
142
+ if (resolution !== 'abort') {
143
+ setConflictResolution(resolution);
144
+ }
145
+ }, []);
146
+ // Create summary for complete step
147
+ const createSummary = useCallback(() => {
148
+ return {
149
+ createdDirs: [
150
+ '.claude',
151
+ '.red64',
152
+ '.red64/steering',
153
+ '.red64/specs',
154
+ '.red64/settings'
155
+ ],
156
+ appliedStack: setupData.stack ?? 'generic',
157
+ configPath: '.red64/config.json',
158
+ steeringFiles,
159
+ gitInitialized,
160
+ gitCommitted
161
+ };
162
+ }, [setupData.stack, steeringFiles, gitInitialized, gitCommitted]);
163
+ // Use refs to avoid callback dependency issues
164
+ const stepRef = useRef(step);
165
+ stepRef.current = step;
166
+ const setupDataRef = useRef(setupData);
167
+ setupDataRef.current = setupData;
168
+ // Track if fetch has been attempted to prevent re-runs
169
+ const fetchAttemptedRef = useRef(false);
170
+ const extractAttemptedRef = useRef(false);
171
+ const templateAttemptedRef = useRef(false);
172
+ // Fetch framework files when in fetching state
173
+ useEffect(() => {
174
+ if (step.type !== 'fetching')
175
+ return;
176
+ if (fetchAttemptedRef.current)
177
+ return;
178
+ fetchAttemptedRef.current = true;
179
+ const fetchFramework = async () => {
180
+ // Skip fetch mode - use bundled framework templates
181
+ if (SKIP_FETCH_MODE) {
182
+ const frameworkPath = getBundledFrameworkPath();
183
+ const stacks = await services.templateService.listStacks(frameworkPath);
184
+ setAvailableStacks(stacks.length > 0 ? stacks : ['generic', 'react', 'node', 'python']);
185
+ setStep({ type: 'extracting' });
186
+ return;
187
+ }
188
+ try {
189
+ const result = await services.githubService.fetchTarball({
190
+ repo: initFlags.repo,
191
+ version: initFlags.version,
192
+ noCache: initFlags['no-cache'],
193
+ onProgress: (progress) => {
194
+ setStep({ type: 'fetching', progress });
195
+ }
196
+ });
197
+ // List available stacks
198
+ const stacks = await services.templateService.listStacks(result.tarballPath);
199
+ setAvailableStacks(stacks);
200
+ // Transition to next step
201
+ setStep({ type: 'extracting' });
202
+ }
203
+ catch (error) {
204
+ if (error instanceof GitHubFetchError) {
205
+ setStep({
206
+ type: 'error',
207
+ error: {
208
+ code: 'NETWORK_ERROR',
209
+ message: error.message,
210
+ recoverable: true,
211
+ suggestion: 'Check your network connection or try using cached files.'
212
+ }
213
+ });
214
+ }
215
+ else {
216
+ setStep({
217
+ type: 'error',
218
+ error: {
219
+ code: 'NETWORK_ERROR',
220
+ message: error instanceof Error ? error.message : 'Unknown error',
221
+ recoverable: false
222
+ }
223
+ });
224
+ }
225
+ }
226
+ };
227
+ fetchFramework();
228
+ }, [step.type, services.githubService, services.templateService, initFlags]);
229
+ // Extract/install framework when in extracting state
230
+ useEffect(() => {
231
+ if (step.type !== 'extracting')
232
+ return;
233
+ if (extractAttemptedRef.current)
234
+ return;
235
+ extractAttemptedRef.current = true;
236
+ const installFramework = async () => {
237
+ try {
238
+ const cwd = process.cwd();
239
+ // If overwrite mode, remove existing directories first
240
+ if (conflictResolution === 'overwrite') {
241
+ const { rm } = await import('node:fs/promises');
242
+ try {
243
+ await rm(`${cwd}/.red64`, { recursive: true, force: true });
244
+ await rm(`${cwd}/.claude`, { recursive: true, force: true });
245
+ await rm(`${cwd}/CLAUDE.md`, { force: true });
246
+ }
247
+ catch {
248
+ // Ignore errors if files don't exist
249
+ }
250
+ }
251
+ // Use bundled framework path in SKIP_FETCH_MODE
252
+ const frameworkPath = SKIP_FETCH_MODE
253
+ ? getBundledFrameworkPath()
254
+ : ''; // TODO: Use extracted tarball location when implemented
255
+ await services.templateService.installFramework({
256
+ sourceDir: frameworkPath,
257
+ targetDir: cwd,
258
+ variables: {},
259
+ agent: initFlags.agent ?? 'claude'
260
+ });
261
+ setStep({
262
+ type: 'guided-setup',
263
+ data: setupDataRef.current
264
+ });
265
+ }
266
+ catch (error) {
267
+ setStep({
268
+ type: 'error',
269
+ error: {
270
+ code: 'EXTRACTION_ERROR',
271
+ message: error instanceof Error ? error.message : 'Failed to install framework',
272
+ recoverable: false
273
+ }
274
+ });
275
+ }
276
+ };
277
+ installFramework();
278
+ }, [step.type, services.templateService, conflictResolution]);
279
+ // Apply templates when in applying-templates state
280
+ useEffect(() => {
281
+ if (step.type !== 'applying-templates')
282
+ return;
283
+ if (templateAttemptedRef.current)
284
+ return;
285
+ templateAttemptedRef.current = true;
286
+ const applyTemplates = async () => {
287
+ try {
288
+ const currentSetupData = setupDataRef.current;
289
+ // Use bundled framework path in SKIP_FETCH_MODE, otherwise use extracted tarball
290
+ const sourceDir = SKIP_FETCH_MODE
291
+ ? getBundledFrameworkPath()
292
+ : ''; // TODO: Use extracted tarball location when implemented
293
+ const files = await services.templateService.applyStackTemplates({
294
+ sourceDir,
295
+ targetDir: process.cwd(),
296
+ stack: currentSetupData.stack ?? 'generic',
297
+ variables: {
298
+ projectName: currentSetupData.projectName ?? 'my-project',
299
+ description: currentSetupData.description ?? ''
300
+ }
301
+ });
302
+ setSteeringFiles(files);
303
+ // Save configuration
304
+ await services.configService.save(process.cwd(), {
305
+ version: initFlags.version ?? DEFAULT_VERSION,
306
+ repo: initFlags.repo ?? DEFAULT_REPO,
307
+ stack: currentSetupData.stack ?? 'generic',
308
+ projectType: currentSetupData.projectType ?? 'other',
309
+ projectName: currentSetupData.projectName ?? 'my-project',
310
+ description: currentSetupData.description ?? '',
311
+ initializedAt: new Date().toISOString(),
312
+ customValues: currentSetupData.customValues ?? {},
313
+ agent: initFlags.agent ?? 'claude'
314
+ });
315
+ // Transition to git setup
316
+ setStep({ type: 'git-setup' });
317
+ }
318
+ catch (error) {
319
+ setStep({
320
+ type: 'error',
321
+ error: {
322
+ code: 'EXTRACTION_ERROR',
323
+ message: error instanceof Error ? error.message : 'Failed to apply templates',
324
+ recoverable: false
325
+ }
326
+ });
327
+ }
328
+ };
329
+ applyTemplates();
330
+ }, [step.type, services, initFlags]);
331
+ // Git setup ref
332
+ const gitSetupAttemptedRef = useRef(false);
333
+ // Setup git when in git-setup state
334
+ useEffect(() => {
335
+ if (step.type !== 'git-setup')
336
+ return;
337
+ if (gitSetupAttemptedRef.current)
338
+ return;
339
+ gitSetupAttemptedRef.current = true;
340
+ const setupGit = async () => {
341
+ const cwd = process.cwd();
342
+ let initialized = false;
343
+ let committed = false;
344
+ try {
345
+ // Check if already a git repo
346
+ const isRepo = await isGitRepo(cwd);
347
+ if (!isRepo) {
348
+ // Initialize git repository
349
+ const initSuccess = await gitInit(cwd);
350
+ if (initSuccess) {
351
+ initialized = true;
352
+ setGitInitialized(true);
353
+ }
354
+ }
355
+ else {
356
+ initialized = true;
357
+ setGitInitialized(true);
358
+ }
359
+ // Stage and commit framework files
360
+ if (initialized) {
361
+ const result = await services.commitService.stageAndCommit(cwd, 'chore: initialize red64 framework\n\nAdded .claude/, .red64/, and CLAUDE.md for spec-driven development.');
362
+ if (result.success) {
363
+ committed = true;
364
+ setGitCommitted(true);
365
+ }
366
+ }
367
+ }
368
+ catch {
369
+ // Git errors are non-fatal, continue to next step
370
+ }
371
+ // Transition to next step
372
+ if (initFlags['no-steering']) {
373
+ setStep({
374
+ type: 'complete',
375
+ summary: {
376
+ createdDirs: ['.claude', '.red64', '.red64/steering', '.red64/specs', '.red64/settings'],
377
+ appliedStack: setupDataRef.current.stack ?? 'generic',
378
+ configPath: '.red64/config.json',
379
+ steeringFiles,
380
+ gitInitialized: initialized,
381
+ gitCommitted: committed
382
+ }
383
+ });
384
+ }
385
+ else {
386
+ setStep({ type: 'steering-prompt' });
387
+ }
388
+ };
389
+ setupGit();
390
+ }, [step.type, services.commitService, initFlags, steeringFiles]);
391
+ // Render current step
392
+ const renderStep = () => {
393
+ switch (step.type) {
394
+ case 'welcome':
395
+ return (_jsx(WelcomeStep, { directoryExists: directoryExists, onNext: handleNext, onError: handleError, onConflictResolution: handleConflictResolution }));
396
+ case 'checking-existing':
397
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Spinner, { label: "Checking for existing configuration..." }) }));
398
+ case 'fetching':
399
+ return (_jsx(FetchStep, { progress: step.progress, repo: initFlags.repo ?? DEFAULT_REPO, version: initFlags.version ?? DEFAULT_VERSION, onNext: handleNext, onError: handleError }));
400
+ case 'extracting':
401
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Spinner, { label: "Creating directory structure..." }) }));
402
+ case 'guided-setup':
403
+ return (_jsx(SetupStep, { availableStacks: availableStacks, defaultStack: initFlags.stack, skipGuided: initFlags['skip-guided'], onNext: handleNext, onError: handleError, onComplete: handleSetupComplete }));
404
+ case 'applying-templates':
405
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Spinner, { label: "Applying stack templates..." }) }));
406
+ case 'git-setup':
407
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Spinner, { label: "Setting up git repository..." }) }));
408
+ case 'steering-prompt':
409
+ return (_jsx(SteeringStep, { steeringFiles: steeringFiles, noSteering: initFlags['no-steering'], onNext: handleNext, onError: handleError }));
410
+ case 'complete':
411
+ return _jsx(CompleteStep, { summary: step.summary });
412
+ case 'error':
413
+ return (_jsx(ErrorStep, { error: step.error, onRetry: () => setStep({ type: 'fetching', progress: { phase: 'connecting' } }), onAbort: () => exit() }));
414
+ default:
415
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Text, { color: "red", children: "Unknown step state" }) }));
416
+ }
417
+ };
418
+ return (_jsx(Box, { flexDirection: "column", children: renderStep() }));
419
+ };
420
+ //# sourceMappingURL=InitScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InitScreen.js","sourceRoot":"","sources":["../../../src/components/screens/InitScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * List screen component
3
+ * Task 5: List Screen Implementation
4
+ * Requirements: 3.1, 3.2, 3.3, 3.4, 3.5
5
+ */
6
+ import React from 'react';
7
+ import type { ScreenProps } from './ScreenProps.js';
8
+ /**
9
+ * ListScreen Component
10
+ * Displays all active flows in a table
11
+ * Requirements: 3.1-3.5 - List command implementation
12
+ */
13
+ export declare const ListScreen: React.FC<ScreenProps>;
14
+ //# sourceMappingURL=ListScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListScreen.d.ts","sourceRoot":"","sources":["../../../src/components/screens/ListScreen.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAqBpD;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAkF5C,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * List screen component
4
+ * Task 5: List Screen Implementation
5
+ * Requirements: 3.1, 3.2, 3.3, 3.4, 3.5
6
+ */
7
+ import { useState, useEffect } from 'react';
8
+ import { Box, Text } from 'ink';
9
+ import { createStateStore } from '../../services/StateStore.js';
10
+ import { Spinner, FlowTable } from '../ui/index.js';
11
+ /**
12
+ * Get base directory from environment or default
13
+ */
14
+ function getBaseDir() {
15
+ return process.cwd();
16
+ }
17
+ /**
18
+ * ListScreen Component
19
+ * Displays all active flows in a table
20
+ * Requirements: 3.1-3.5 - List command implementation
21
+ */
22
+ export const ListScreen = () => {
23
+ const [state, setState] = useState({ step: 'loading' });
24
+ const [stateStore] = useState(() => createStateStore(getBaseDir()));
25
+ // Load all flows on mount
26
+ useEffect(() => {
27
+ const loadFlows = async () => {
28
+ try {
29
+ // Requirements 3.1, 3.2 - Scan and load all flow states
30
+ const flows = await stateStore.list();
31
+ setState({ step: 'loaded', flows });
32
+ }
33
+ catch (error) {
34
+ setState({
35
+ step: 'error',
36
+ error: error instanceof Error ? error.message : 'Failed to load flows'
37
+ });
38
+ }
39
+ };
40
+ loadFlows();
41
+ }, [stateStore]);
42
+ // Render based on state
43
+ switch (state.step) {
44
+ case 'loading':
45
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: "cyan", children: "list" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Spinner, { label: "Loading active flows..." }) })] }));
46
+ case 'loaded':
47
+ // Requirements 3.5 - Empty state message
48
+ if (state.flows.length === 0) {
49
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: "cyan", children: "list" }) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { children: "No active flows found." }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Start a new flow with: " }), _jsx(Text, { color: "yellow", children: 'red64 start <feature> "description"' })] })] })] }));
50
+ }
51
+ // Requirements 3.3, 3.4 - Display table with flows
52
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: "cyan", children: "list" }) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { children: ["Active flows (", state.flows.length, "):"] }) }), _jsx(Box, { marginTop: 1, children: _jsx(FlowTable, { flows: state.flows }) })] }));
53
+ case 'error':
54
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: "cyan", children: "list" }) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: ["Error: ", state.error] }) })] }));
55
+ }
56
+ };
57
+ //# sourceMappingURL=ListScreen.js.map