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,166 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { GREENFIELD_PHASES, BROWNFIELD_PHASES } from '../../types/index.js';
4
+ /**
5
+ * Agent icons and names
6
+ */
7
+ const AGENT_INFO = {
8
+ claude: { icon: '\uD83E\uDD16', name: 'Claude', color: '#D97706' }, // 🤖
9
+ gemini: { icon: '\u2728', name: 'Gemini', color: '#4285F4' }, // ✨
10
+ codex: { icon: '\uD83D\uDFE2', name: 'Codex', color: '#10A37F' }, // 🟢
11
+ };
12
+ /**
13
+ * Simplified phase display names (short for sidebar)
14
+ */
15
+ function getShortPhaseName(phase) {
16
+ const names = {
17
+ 'initializing': 'Init',
18
+ 'requirements-generating': 'Require',
19
+ 'requirements-approval': 'Review',
20
+ 'gap-analysis': 'Gap',
21
+ 'gap-review': 'Review',
22
+ 'design-generating': 'Design',
23
+ 'design-approval': 'Review',
24
+ 'tasks-generating': 'Tasks',
25
+ 'tasks-approval': 'Review',
26
+ 'implementing': 'Impl',
27
+ 'complete': 'Done',
28
+ };
29
+ return names[phase] ?? phase.slice(0, 8);
30
+ }
31
+ /**
32
+ * Get status indicator symbol
33
+ */
34
+ function getStatusIndicator(status) {
35
+ switch (status) {
36
+ case 'completed':
37
+ return '\u2713'; // checkmark ✓
38
+ case 'current':
39
+ return '\u25CF'; // filled circle ●
40
+ case 'pending':
41
+ return '\u25CB'; // empty circle ○
42
+ }
43
+ }
44
+ /**
45
+ * Get status color
46
+ */
47
+ function getStatusColor(status) {
48
+ switch (status) {
49
+ case 'completed':
50
+ return 'green';
51
+ case 'current':
52
+ return 'yellow';
53
+ case 'pending':
54
+ return 'gray';
55
+ }
56
+ }
57
+ /**
58
+ * Determine phase status relative to current phase
59
+ */
60
+ function getPhaseStatus(phase, currentPhase, phases) {
61
+ // Handle terminal phases
62
+ if (currentPhase === 'complete') {
63
+ return 'completed';
64
+ }
65
+ if (currentPhase === 'aborted' || currentPhase === 'error') {
66
+ if (phase === currentPhase)
67
+ return 'current';
68
+ const currentIndex = phases.indexOf(currentPhase);
69
+ const phaseIndex = phases.indexOf(phase);
70
+ return phaseIndex < currentIndex ? 'completed' : 'pending';
71
+ }
72
+ // Handle idle - nothing is completed yet
73
+ if (currentPhase === 'idle') {
74
+ return 'pending';
75
+ }
76
+ const currentIndex = phases.indexOf(currentPhase);
77
+ const phaseIndex = phases.indexOf(phase);
78
+ if (currentIndex === -1 || phaseIndex === -1) {
79
+ return 'pending';
80
+ }
81
+ if (phaseIndex < currentIndex) {
82
+ return 'completed';
83
+ }
84
+ else if (phaseIndex === currentIndex) {
85
+ return 'current';
86
+ }
87
+ else {
88
+ return 'pending';
89
+ }
90
+ }
91
+ /**
92
+ * Get display phases for sidebar (simplified list)
93
+ */
94
+ function getSidebarPhases(mode) {
95
+ const phases = mode === 'greenfield' ? GREENFIELD_PHASES : BROWNFIELD_PHASES;
96
+ // Show only main phases (not approval/review phases)
97
+ return phases.filter(phase => phase === 'initializing' ||
98
+ phase === 'requirements-generating' ||
99
+ phase === 'gap-analysis' ||
100
+ phase === 'design-generating' ||
101
+ phase === 'tasks-generating' ||
102
+ phase === 'implementing' ||
103
+ phase === 'complete');
104
+ }
105
+ /**
106
+ * Truncate string with ellipsis
107
+ */
108
+ function truncate(str, maxLen) {
109
+ if (str.length <= maxLen)
110
+ return str;
111
+ return str.slice(0, maxLen - 1) + '…';
112
+ }
113
+ /**
114
+ * Get short model name for display
115
+ */
116
+ function getShortModelName(model) {
117
+ // Extract key part of model name
118
+ if (model.includes('haiku'))
119
+ return 'haiku';
120
+ if (model.includes('sonnet'))
121
+ return 'sonnet';
122
+ if (model.includes('opus'))
123
+ return 'opus';
124
+ if (model.includes('flash-lite'))
125
+ return 'flash-lite';
126
+ if (model.includes('flash'))
127
+ return 'flash';
128
+ if (model.includes('pro'))
129
+ return 'pro';
130
+ if (model.includes('o3-mini'))
131
+ return 'o3-mini';
132
+ if (model.includes('o1-mini'))
133
+ return 'o1-mini';
134
+ if (model.includes('4o-mini'))
135
+ return '4o-mini';
136
+ if (model.includes('4o'))
137
+ return '4o';
138
+ if (model.includes('o1'))
139
+ return 'o1';
140
+ return truncate(model, 10);
141
+ }
142
+ /**
143
+ * FeatureSidebar Component
144
+ * Displays feature info in a compact right-side panel
145
+ */
146
+ export const FeatureSidebar = ({ featureName, sandboxMode, currentPhase, mode, currentTask, totalTasks, commitCount, agent = 'claude', model, }) => {
147
+ const displayName = truncate(featureName, 10);
148
+ const allPhases = mode === 'greenfield' ? GREENFIELD_PHASES : BROWNFIELD_PHASES;
149
+ const sidebarPhases = getSidebarPhases(mode);
150
+ const agentInfo = AGENT_INFO[agent];
151
+ // Extract short model name (e.g., "claude-3-5-haiku-latest" -> "haiku")
152
+ const shortModel = model ? getShortModelName(model) : undefined;
153
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, marginLeft: 1, width: 16, children: [_jsx(Text, { bold: true, color: "cyan", children: displayName }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [sandboxMode && (_jsxs(Text, { color: "blue", children: ['\uD83D\uDC33', " sandbox"] })), _jsxs(Text, { children: [agentInfo.icon, " ", agentInfo.name] }), shortModel && (_jsxs(Text, { dimColor: true, children: [" \u2514 ", shortModel] }))] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "\u2500 Phases \u2500" }), sidebarPhases.map((phase) => {
154
+ const status = getPhaseStatus(phase, currentPhase, allPhases);
155
+ const indicator = getStatusIndicator(status);
156
+ const color = getStatusColor(status);
157
+ const name = getShortPhaseName(phase);
158
+ // Show task progress for implementing phase
159
+ const isImplementing = phase === 'implementing';
160
+ const progress = isImplementing && totalTasks > 0
161
+ ? ` ${currentTask}/${totalTasks}`
162
+ : '';
163
+ return (_jsx(Box, { children: _jsxs(Text, { color: color, children: [indicator, " ", name, progress] }) }, phase));
164
+ })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "\u2500 Commits \u2500" }), _jsxs(Text, { children: [commitCount, " commit", commitCount !== 1 ? 's' : ''] })] })] }));
165
+ };
166
+ //# sourceMappingURL=FeatureSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureSidebar.js","sourceRoot":"","sources":["../../../src/components/ui/FeatureSidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * FlowTable Component
3
+ * Task 2.2: Create flow listing table component
4
+ * Requirements: 3.3, 3.4
5
+ */
6
+ import React from 'react';
7
+ import type { FlowState } from '../../types/index.js';
8
+ /**
9
+ * Props for FlowTable component
10
+ */
11
+ export interface FlowTableProps {
12
+ readonly flows: readonly FlowState[];
13
+ }
14
+ /**
15
+ * FlowTable Component
16
+ * Displays active flows in a table format
17
+ * Requirements: 3.3 - Display table with Feature, Phase, Branch, Updated columns
18
+ * Requirements: 3.4 - Display relative timestamps
19
+ */
20
+ export declare const FlowTable: React.FC<FlowTableProps>;
21
+ //# sourceMappingURL=FlowTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowTable.d.ts","sourceRoot":"","sources":["../../../src/components/ui/FlowTable.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAwID;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAgB9C,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { formatDistanceToNow } from 'date-fns';
4
+ /**
5
+ * Column widths (characters)
6
+ */
7
+ const COLUMN_WIDTHS = {
8
+ feature: 20,
9
+ phase: 18,
10
+ branch: 20,
11
+ updated: 15
12
+ };
13
+ /**
14
+ * Truncate string to max length with ellipsis
15
+ */
16
+ function truncate(str, maxLen) {
17
+ if (str.length <= maxLen) {
18
+ return str.padEnd(maxLen);
19
+ }
20
+ return str.slice(0, maxLen - 1) + '\u2026';
21
+ }
22
+ /**
23
+ * Get display name for a phase
24
+ */
25
+ function getPhaseDisplayName(phaseType) {
26
+ const names = {
27
+ 'idle': 'Ready',
28
+ 'initializing': 'Initializing',
29
+ 'requirements-generating': 'Requirements',
30
+ 'requirements-approval': 'Requirements Review',
31
+ 'gap-analysis': 'Gap Analysis',
32
+ 'gap-review': 'Gap Review',
33
+ 'design-generating': 'Design',
34
+ 'design-approval': 'Design Review',
35
+ 'design-validation': 'Design Validation',
36
+ 'design-validation-review': 'Validation Review',
37
+ 'tasks-generating': 'Tasks',
38
+ 'tasks-approval': 'Tasks Review',
39
+ 'implementing': 'Implementing',
40
+ 'paused': 'Paused',
41
+ 'validation': 'Validation',
42
+ 'pr': 'PR',
43
+ 'merge-decision': 'Merge Decision',
44
+ 'complete': 'Complete',
45
+ 'aborted': 'Aborted',
46
+ 'error': 'Error'
47
+ };
48
+ return names[phaseType] ?? phaseType;
49
+ }
50
+ /**
51
+ * Get branch name from flow state
52
+ * Extracts branch name from worktreePath or generates from feature
53
+ */
54
+ function getBranchName(flow) {
55
+ if (flow.metadata.worktreePath) {
56
+ // Extract feature from path like /repo/worktrees/my-feature
57
+ const parts = flow.metadata.worktreePath.split('/');
58
+ const feature = parts[parts.length - 1];
59
+ return `feature/${feature}`;
60
+ }
61
+ return `feature/${flow.feature}`;
62
+ }
63
+ /**
64
+ * Format relative time
65
+ */
66
+ function formatRelativeTime(dateStr) {
67
+ try {
68
+ return formatDistanceToNow(new Date(dateStr), { addSuffix: true });
69
+ }
70
+ catch {
71
+ return 'unknown';
72
+ }
73
+ }
74
+ /**
75
+ * Sort flows by updatedAt descending (most recent first)
76
+ */
77
+ function sortFlows(flows) {
78
+ return [...flows].sort((a, b) => {
79
+ const dateA = new Date(a.updatedAt).getTime();
80
+ const dateB = new Date(b.updatedAt).getTime();
81
+ return dateB - dateA;
82
+ });
83
+ }
84
+ /**
85
+ * Table header component
86
+ */
87
+ const TableHeader = () => (_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: truncate('Feature', COLUMN_WIDTHS.feature) }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "cyan", children: truncate('Phase', COLUMN_WIDTHS.phase) }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "cyan", children: truncate('Branch', COLUMN_WIDTHS.branch) }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "cyan", children: truncate('Updated', COLUMN_WIDTHS.updated) })] }));
88
+ const TableRow = ({ flow }) => {
89
+ const feature = truncate(flow.feature, COLUMN_WIDTHS.feature);
90
+ const phase = truncate(getPhaseDisplayName(flow.phase.type), COLUMN_WIDTHS.phase);
91
+ const branch = truncate(getBranchName(flow), COLUMN_WIDTHS.branch);
92
+ const updated = truncate(formatRelativeTime(flow.updatedAt), COLUMN_WIDTHS.updated);
93
+ return (_jsxs(Box, { children: [_jsx(Text, { children: feature }), _jsx(Text, { children: " " }), _jsx(Text, { color: "yellow", children: phase }), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, children: branch }), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, children: updated })] }));
94
+ };
95
+ /**
96
+ * FlowTable Component
97
+ * Displays active flows in a table format
98
+ * Requirements: 3.3 - Display table with Feature, Phase, Branch, Updated columns
99
+ * Requirements: 3.4 - Display relative timestamps
100
+ */
101
+ export const FlowTable = ({ flows }) => {
102
+ const sortedFlows = sortFlows(flows);
103
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(TableHeader, {}), _jsx(Box, { children: _jsx(Text, { dimColor: true, children: ''.padEnd(COLUMN_WIDTHS.feature + COLUMN_WIDTHS.phase + COLUMN_WIDTHS.branch + COLUMN_WIDTHS.updated + 3, '-') }) }), sortedFlows.map((flow) => (_jsx(TableRow, { flow: flow }, flow.feature)))] }));
104
+ };
105
+ //# sourceMappingURL=FlowTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowTable.js","sourceRoot":"","sources":["../../../src/components/ui/FlowTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Header component with box-drawing characters and branding
3
+ * Requirements: 6.3, 8.4
4
+ */
5
+ import React from 'react';
6
+ /**
7
+ * Props for Header component
8
+ */
9
+ interface HeaderProps {
10
+ readonly title: string;
11
+ readonly subtitle?: string;
12
+ }
13
+ /**
14
+ * Header with box-drawing border and branding
15
+ * Requirements: 6.3 - Use box-drawing characters for headers
16
+ * Requirements: 8.4 - Display "Red64 Flow Orchestrator" as title
17
+ */
18
+ export declare const Header: React.FC<HeaderProps>;
19
+ export {};
20
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Header.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,UAAU,WAAW;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAgBxC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ /**
4
+ * Header with box-drawing border and branding
5
+ * Requirements: 6.3 - Use box-drawing characters for headers
6
+ * Requirements: 8.4 - Display "Red64 Flow Orchestrator" as title
7
+ */
8
+ export const Header = ({ title, subtitle }) => {
9
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: title }), subtitle && (_jsx(Text, { dimColor: true, children: subtitle }))] }));
10
+ };
11
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/ui/Header.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAUhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnE,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,aAEX,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,YACpB,KAAK,GACD,EACN,QAAQ,IAAI,CACX,KAAC,IAAI,IAAC,QAAQ,kBAAE,QAAQ,GAAQ,CACjC,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * OutputRegion component for agent output display
3
+ * Requirements: 7.7
4
+ */
5
+ import React from 'react';
6
+ /**
7
+ * Props for OutputRegion component
8
+ */
9
+ interface OutputRegionProps {
10
+ readonly lines: readonly string[];
11
+ readonly maxHeight?: number;
12
+ readonly title?: string;
13
+ }
14
+ /**
15
+ * Scrollable text region for displaying agent output
16
+ * Requirements: 7.7 - Display agent output in a dedicated UI region
17
+ */
18
+ export declare const OutputRegion: React.FC<OutputRegionProps>;
19
+ export {};
20
+ //# sourceMappingURL=OutputRegion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputRegion.d.ts","sourceRoot":"","sources":["../../../src/components/ui/OutputRegion.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,UAAU,iBAAiB;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+BpD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ /**
4
+ * Scrollable text region for displaying agent output
5
+ * Requirements: 7.7 - Display agent output in a dedicated UI region
6
+ */
7
+ export const OutputRegion = ({ lines, maxHeight, title }) => {
8
+ // If maxHeight is set, only show the last N lines
9
+ const displayLines = maxHeight && lines.length > maxHeight
10
+ ? lines.slice(-maxHeight)
11
+ : lines;
12
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [title && (_jsx(Text, { bold: true, dimColor: true, children: title })), displayLines.length === 0 ? (_jsx(Text, { dimColor: true, children: "No output" })) : (displayLines.map((line, index) => (_jsx(Text, { children: line }, index))))] }));
13
+ };
14
+ //# sourceMappingURL=OutputRegion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputRegion.js","sourceRoot":"","sources":["../../../src/components/ui/OutputRegion.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,KAAK,EACL,SAAS,EACT,KAAK,EACN,EAAE,EAAE;IACH,kDAAkD;IAClD,MAAM,YAAY,GAAG,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS;QACxD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC;IAEV,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,aAEV,KAAK,IAAI,CACR,KAAC,IAAI,IAAC,IAAI,QAAC,QAAQ,kBAChB,KAAK,GACD,CACR,EACA,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC3B,KAAC,IAAI,IAAC,QAAQ,gCAAiB,CAChC,CAAC,CAAC,CAAC,CACF,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,KAAC,IAAI,cAAc,IAAI,IAAZ,KAAK,CAAe,CAChC,CAAC,CACH,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * PhaseProgressView Component
3
+ * Task 2.1: Create phase progress visualization component
4
+ * Requirements: 1.4, 2.1, 2.2
5
+ */
6
+ import React from 'react';
7
+ import type { ExtendedFlowPhase, WorkflowMode } from '../../types/index.js';
8
+ /**
9
+ * Props for PhaseProgressView
10
+ */
11
+ export interface PhaseProgressViewProps {
12
+ readonly phases: readonly ExtendedFlowPhase['type'][];
13
+ readonly currentPhase: ExtendedFlowPhase['type'];
14
+ readonly mode: WorkflowMode;
15
+ }
16
+ /**
17
+ * PhaseProgressView Component
18
+ * Displays workflow phases with visual status indicators
19
+ * Requirements: 1.4 - Display completed phases with checkmarks
20
+ * Requirements: 2.1, 2.2 - Visual status indicators for phase progress
21
+ */
22
+ export declare const PhaseProgressView: React.FC<PhaseProgressViewProps>;
23
+ //# sourceMappingURL=PhaseProgressView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhaseProgressView.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PhaseProgressView.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;IACtD,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAsHD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAyB9D,CAAC"}
@@ -0,0 +1,117 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ /**
4
+ * Get human-readable name for a phase
5
+ */
6
+ function getPhaseDisplayName(phase) {
7
+ const names = {
8
+ 'idle': 'Ready',
9
+ 'initializing': 'Initialize',
10
+ 'requirements-generating': 'Requirements',
11
+ 'requirements-approval': 'Review Requirements',
12
+ 'gap-analysis': 'Gap Analysis',
13
+ 'gap-review': 'Review Gaps',
14
+ 'design-generating': 'Design',
15
+ 'design-approval': 'Review Design',
16
+ 'design-validation': 'Validate Design',
17
+ 'design-validation-review': 'Review Validation',
18
+ 'tasks-generating': 'Tasks',
19
+ 'tasks-approval': 'Review Tasks',
20
+ 'implementing': 'Implementation',
21
+ 'paused': 'Paused',
22
+ 'validation': 'Validation',
23
+ 'pr': 'Pull Request',
24
+ 'merge-decision': 'Merge Decision',
25
+ 'complete': 'Complete',
26
+ 'aborted': 'Aborted',
27
+ 'error': 'Error'
28
+ };
29
+ return names[phase] ?? phase;
30
+ }
31
+ /**
32
+ * Get status indicator symbol
33
+ */
34
+ function getStatusIndicator(status) {
35
+ switch (status) {
36
+ case 'completed':
37
+ return '\u2713'; // checkmark
38
+ case 'current':
39
+ return '\u25CF'; // filled circle
40
+ case 'pending':
41
+ return '\u25CB'; // empty circle
42
+ }
43
+ }
44
+ /**
45
+ * Get status color
46
+ */
47
+ function getStatusColor(status) {
48
+ switch (status) {
49
+ case 'completed':
50
+ return 'green';
51
+ case 'current':
52
+ return 'yellow';
53
+ case 'pending':
54
+ return 'gray';
55
+ }
56
+ }
57
+ /**
58
+ * Determine phase status relative to current phase
59
+ */
60
+ function getPhaseStatus(phase, currentPhase, phases) {
61
+ // Handle terminal phases
62
+ if (currentPhase === 'complete' || currentPhase === 'aborted' || currentPhase === 'error') {
63
+ if (phase === currentPhase)
64
+ return 'current';
65
+ // All other phases are completed for complete, or we consider the path leading to abort/error
66
+ return 'completed';
67
+ }
68
+ // Handle idle - nothing is completed yet
69
+ if (currentPhase === 'idle') {
70
+ return 'pending';
71
+ }
72
+ const currentIndex = phases.indexOf(currentPhase);
73
+ const phaseIndex = phases.indexOf(phase);
74
+ // If current phase not in the list, treat as pending
75
+ if (currentIndex === -1) {
76
+ return 'pending';
77
+ }
78
+ // Phase not in list
79
+ if (phaseIndex === -1) {
80
+ return 'pending';
81
+ }
82
+ if (phaseIndex < currentIndex) {
83
+ return 'completed';
84
+ }
85
+ else if (phaseIndex === currentIndex) {
86
+ return 'current';
87
+ }
88
+ else {
89
+ return 'pending';
90
+ }
91
+ }
92
+ /**
93
+ * Filter phases for display (skip terminal and special phases)
94
+ */
95
+ function getDisplayPhases(phases) {
96
+ return phases.filter(phase => phase !== 'idle' &&
97
+ phase !== 'paused' &&
98
+ phase !== 'aborted' &&
99
+ phase !== 'error');
100
+ }
101
+ /**
102
+ * PhaseProgressView Component
103
+ * Displays workflow phases with visual status indicators
104
+ * Requirements: 1.4 - Display completed phases with checkmarks
105
+ * Requirements: 2.1, 2.2 - Visual status indicators for phase progress
106
+ */
107
+ export const PhaseProgressView = ({ phases, currentPhase, mode: _mode }) => {
108
+ const displayPhases = getDisplayPhases(phases);
109
+ return (_jsx(Box, { flexDirection: "column", children: displayPhases.map((phase) => {
110
+ const status = getPhaseStatus(phase, currentPhase, phases);
111
+ const indicator = getStatusIndicator(status);
112
+ const color = getStatusColor(status);
113
+ const name = getPhaseDisplayName(phase);
114
+ return (_jsx(Box, { children: _jsxs(Text, { color: color, children: [indicator, " ", name] }) }, phase));
115
+ }) }));
116
+ };
117
+ //# sourceMappingURL=PhaseProgressView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhaseProgressView.js","sourceRoot":"","sources":["../../../src/components/ui/PhaseProgressView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ProgressBar component wrapper
3
+ * Requirements: 6.4
4
+ */
5
+ import React from 'react';
6
+ /**
7
+ * Props for ProgressBar component
8
+ */
9
+ interface ProgressBarProps {
10
+ readonly current: number;
11
+ readonly total: number;
12
+ readonly label?: string;
13
+ }
14
+ /**
15
+ * Progress bar for task counts during implementation phase
16
+ * Requirements: 6.4 - Display progress bars or task counts
17
+ */
18
+ export declare const ProgressBar: React.FC<ProgressBarProps>;
19
+ export {};
20
+ //# sourceMappingURL=ProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/ProgressBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B;;GAEG;AACH,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAgBlD,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { ProgressBar as InkProgressBar } from '@inkjs/ui';
4
+ /**
5
+ * Progress bar for task counts during implementation phase
6
+ * Requirements: 6.4 - Display progress bars or task counts
7
+ */
8
+ export const ProgressBar = ({ current, total, label }) => {
9
+ const progress = total > 0 ? current / total : 0;
10
+ return (_jsxs(Box, { flexDirection: "column", children: [label && _jsx(Text, { children: label }), _jsxs(Box, { children: [_jsx(InkProgressBar, { value: progress }), _jsxs(Text, { children: [" ", current, "/", total] })] })] }));
11
+ };
12
+ //# sourceMappingURL=ProgressBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../src/components/ui/ProgressBar.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AAW1D;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACtD,OAAO,EACP,KAAK,EACL,KAAK,EACN,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,KAAK,IAAI,KAAC,IAAI,cAAE,KAAK,GAAQ,EAC9B,MAAC,GAAG,eACF,KAAC,cAAc,IAAC,KAAK,EAAE,QAAQ,GAAI,EACnC,MAAC,IAAI,oBAAG,OAAO,OAAG,KAAK,IAAQ,IAC3B,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * SelectMenu component for interactive selection
3
+ * Requirements: 6.5, 6.6
4
+ */
5
+ import React from 'react';
6
+ /**
7
+ * Menu item interface
8
+ */
9
+ export interface SelectMenuItem<T = string> {
10
+ readonly label: string;
11
+ readonly value: T;
12
+ }
13
+ /**
14
+ * Props for SelectMenu component
15
+ */
16
+ interface SelectMenuProps<T = string> {
17
+ readonly items: readonly SelectMenuItem<T>[];
18
+ readonly onSelect: (item: SelectMenuItem<T>) => void;
19
+ }
20
+ /**
21
+ * Interactive selection menu for approval gates
22
+ * Requirements: 6.5 - Support keyboard navigation
23
+ * Requirements: 6.6 - Render approval gates as interactive selection menus
24
+ */
25
+ export declare function SelectMenu<T = string>({ items, onSelect }: SelectMenuProps<T>): React.ReactElement;
26
+ export {};
27
+ //# sourceMappingURL=SelectMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/SelectMenu.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,MAAM;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED;;GAEG;AACH,UAAU,eAAe,CAAC,CAAC,GAAG,MAAM;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,MAAM,EAAE,EACrC,KAAK,EACL,QAAQ,EACT,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAmBzC"}