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,177 @@
1
+ /**
2
+ * Deterministic Flow State Machine
3
+ * Requirements: 1.1, 1.2, 1.3, 1.6, 1.7
4
+ */
5
+ /**
6
+ * Extract feature from phase if available
7
+ */
8
+ function getFeatureFromPhase(phase) {
9
+ if (phase.type === 'idle') {
10
+ return '';
11
+ }
12
+ return phase.feature;
13
+ }
14
+ /**
15
+ * Pure transition function - deterministic state transitions
16
+ * Requirements: 1.1 - Pure transition function with no side effects
17
+ * Requirements: 1.2 - Application owns all flow control logic
18
+ */
19
+ export function transition(phase, event) {
20
+ const feature = getFeatureFromPhase(phase);
21
+ // Global events that can occur from any phase
22
+ if (event.type === 'ABORT') {
23
+ return {
24
+ type: 'aborted',
25
+ feature: feature || 'unknown',
26
+ reason: event.reason
27
+ };
28
+ }
29
+ if (event.type === 'ERROR') {
30
+ return {
31
+ type: 'error',
32
+ feature: feature || 'unknown',
33
+ error: event.error
34
+ };
35
+ }
36
+ // Phase-specific transitions
37
+ switch (phase.type) {
38
+ case 'idle':
39
+ if (event.type === 'START') {
40
+ return {
41
+ type: 'initializing',
42
+ feature: event.feature,
43
+ description: event.description
44
+ };
45
+ }
46
+ if (event.type === 'RESUME') {
47
+ // RESUME from idle requires loading state from StateStore
48
+ // The actual resumed phase will be set externally after loading
49
+ return phase;
50
+ }
51
+ break;
52
+ case 'initializing':
53
+ if (event.type === 'PHASE_COMPLETE') {
54
+ return {
55
+ type: 'requirements-generating',
56
+ feature: phase.feature
57
+ };
58
+ }
59
+ break;
60
+ case 'requirements-generating':
61
+ if (event.type === 'PHASE_COMPLETE') {
62
+ return {
63
+ type: 'requirements-review',
64
+ feature: phase.feature
65
+ };
66
+ }
67
+ break;
68
+ case 'requirements-review':
69
+ if (event.type === 'APPROVE') {
70
+ return {
71
+ type: 'design-generating',
72
+ feature: phase.feature
73
+ };
74
+ }
75
+ if (event.type === 'REJECT') {
76
+ return {
77
+ type: 'requirements-generating',
78
+ feature: phase.feature
79
+ };
80
+ }
81
+ break;
82
+ case 'design-generating':
83
+ if (event.type === 'PHASE_COMPLETE') {
84
+ return {
85
+ type: 'design-review',
86
+ feature: phase.feature
87
+ };
88
+ }
89
+ break;
90
+ case 'design-review':
91
+ if (event.type === 'APPROVE') {
92
+ return {
93
+ type: 'tasks-generating',
94
+ feature: phase.feature
95
+ };
96
+ }
97
+ if (event.type === 'REJECT') {
98
+ return {
99
+ type: 'design-generating',
100
+ feature: phase.feature
101
+ };
102
+ }
103
+ break;
104
+ case 'tasks-generating':
105
+ if (event.type === 'PHASE_COMPLETE') {
106
+ return {
107
+ type: 'tasks-review',
108
+ feature: phase.feature
109
+ };
110
+ }
111
+ break;
112
+ case 'tasks-review':
113
+ if (event.type === 'APPROVE') {
114
+ return {
115
+ type: 'implementing',
116
+ feature: phase.feature,
117
+ currentTask: 1,
118
+ totalTasks: 0 // Will be set when tasks are counted
119
+ };
120
+ }
121
+ if (event.type === 'REJECT') {
122
+ return {
123
+ type: 'tasks-generating',
124
+ feature: phase.feature
125
+ };
126
+ }
127
+ break;
128
+ case 'implementing':
129
+ if (event.type === 'PHASE_COMPLETE') {
130
+ return {
131
+ type: 'complete',
132
+ feature: phase.feature
133
+ };
134
+ }
135
+ break;
136
+ case 'complete':
137
+ case 'aborted':
138
+ case 'error':
139
+ // Terminal states - no transitions except ABORT/ERROR handled above
140
+ break;
141
+ }
142
+ // Invalid transition - return current phase
143
+ return phase;
144
+ }
145
+ /**
146
+ * Check if a transition is valid from current phase
147
+ * Requirements: 1.6 - Validate transitions before attempting
148
+ */
149
+ function canTransitionFromPhase(phase, event) {
150
+ // ABORT and ERROR are always valid (except from terminal states)
151
+ if (event.type === 'ABORT' || event.type === 'ERROR') {
152
+ return phase.type !== 'complete' && phase.type !== 'aborted' && phase.type !== 'error';
153
+ }
154
+ // Check if transition would result in a different phase
155
+ const nextPhase = transition(phase, event);
156
+ return nextPhase !== phase || nextPhase.type !== phase.type;
157
+ }
158
+ /**
159
+ * Create flow machine service
160
+ * Requirements: 1.1 - Factory function for state machine
161
+ */
162
+ export function createFlowMachine(initialPhase) {
163
+ let currentPhase = initialPhase ?? { type: 'idle' };
164
+ return {
165
+ getPhase() {
166
+ return currentPhase;
167
+ },
168
+ send(event) {
169
+ currentPhase = transition(currentPhase, event);
170
+ return currentPhase;
171
+ },
172
+ canTransition(event) {
173
+ return canTransitionFromPhase(currentPhase, event);
174
+ }
175
+ };
176
+ }
177
+ //# sourceMappingURL=FlowStateMachine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowStateMachine.js","sourceRoot":"","sources":["../../src/services/FlowStateMachine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * GitHub service for tarball fetching
3
+ * Requirements: 6.1-6.4
4
+ */
5
+ import type { CacheService } from './CacheService.js';
6
+ /**
7
+ * GitHub service configuration
8
+ */
9
+ export interface GitHubServiceConfig {
10
+ readonly defaultRepo: string;
11
+ readonly defaultVersion: string;
12
+ readonly cacheService: CacheService;
13
+ }
14
+ /**
15
+ * Fetch options
16
+ */
17
+ export interface FetchOptions {
18
+ readonly repo?: string;
19
+ readonly version?: string;
20
+ readonly onProgress?: (progress: FetchProgress) => void;
21
+ readonly noCache?: boolean;
22
+ }
23
+ /**
24
+ * Fetch progress information
25
+ */
26
+ export interface FetchProgress {
27
+ readonly phase: 'connecting' | 'downloading' | 'caching';
28
+ readonly bytesReceived?: number;
29
+ readonly totalBytes?: number;
30
+ }
31
+ /**
32
+ * Fetch result
33
+ */
34
+ export interface FetchResult {
35
+ readonly tarballPath: string;
36
+ readonly version: string;
37
+ readonly repo: string;
38
+ readonly fromCache: boolean;
39
+ }
40
+ /**
41
+ * Error codes for GitHub fetch operations
42
+ */
43
+ export type GitHubErrorCode = 'NETWORK_ERROR' | 'RATE_LIMITED' | 'INVALID_REPO' | 'NOT_FOUND' | 'EXTRACTION_ERROR';
44
+ /**
45
+ * Custom error for GitHub fetch operations
46
+ */
47
+ export declare class GitHubFetchError extends Error {
48
+ readonly code: GitHubErrorCode;
49
+ constructor(message: string, code: GitHubErrorCode);
50
+ }
51
+ /**
52
+ * GitHub service interface
53
+ * Requirements: 6.1-6.4
54
+ */
55
+ export interface GitHubService {
56
+ /**
57
+ * Fetch framework tarball from GitHub
58
+ * @throws GitHubFetchError on network failure, invalid repo, or rate limiting
59
+ */
60
+ fetchTarball(options: FetchOptions): Promise<FetchResult>;
61
+ /**
62
+ * List available stacks from repository
63
+ * @throws GitHubFetchError on network failure
64
+ */
65
+ listAvailableStacks(options: Pick<FetchOptions, 'repo' | 'version'>): Promise<readonly string[]>;
66
+ }
67
+ /**
68
+ * Create GitHub service
69
+ * Task 2.1, 2.2, 2.3: GitHub service factory
70
+ */
71
+ export declare function createGitHubService(config: GitHubServiceConfig): GitHubService;
72
+ //# sourceMappingURL=GitHubService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubService.d.ts","sourceRoot":"","sources":["../../src/services/GitHubService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,cAAc,GACd,cAAc,GACd,WAAW,GACX,kBAAkB,CAAC;AAEvB;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe;CAKnD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1D;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CAClG;AAsBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAmJ9E"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * GitHub service for tarball fetching
3
+ * Requirements: 6.1-6.4
4
+ */
5
+ import { writeFile, mkdir } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ /**
8
+ * Custom error for GitHub fetch operations
9
+ */
10
+ export class GitHubFetchError extends Error {
11
+ code;
12
+ constructor(message, code) {
13
+ super(message);
14
+ this.name = 'GitHubFetchError';
15
+ this.code = code;
16
+ }
17
+ }
18
+ /**
19
+ * Validate repository format (owner/repo)
20
+ */
21
+ function validateRepoFormat(repo) {
22
+ const repoPattern = /^[\w-]+\/[\w-]+$/;
23
+ if (!repoPattern.test(repo)) {
24
+ throw new GitHubFetchError(`Invalid repository format: "${repo}". Expected format: owner/repo`, 'INVALID_REPO');
25
+ }
26
+ }
27
+ /**
28
+ * Build GitHub tarball URL
29
+ */
30
+ function buildTarballUrl(repo, version) {
31
+ return `https://api.github.com/repos/${repo}/tarball/${version}`;
32
+ }
33
+ /**
34
+ * Create GitHub service
35
+ * Task 2.1, 2.2, 2.3: GitHub service factory
36
+ */
37
+ export function createGitHubService(config) {
38
+ const { defaultRepo, defaultVersion, cacheService } = config;
39
+ // Validate default repo format
40
+ validateRepoFormat(defaultRepo);
41
+ return {
42
+ async fetchTarball(options) {
43
+ const repo = options.repo ?? defaultRepo;
44
+ const version = options.version ?? defaultVersion;
45
+ const noCache = options.noCache ?? false;
46
+ const onProgress = options.onProgress;
47
+ // Validate repo format if custom repo provided
48
+ if (options.repo) {
49
+ validateRepoFormat(options.repo);
50
+ }
51
+ // Check cache first (unless bypassed)
52
+ if (!noCache) {
53
+ const hasCache = await cacheService.has(repo, version);
54
+ if (hasCache) {
55
+ const entry = await cacheService.get(repo, version);
56
+ return {
57
+ tarballPath: entry.path,
58
+ version,
59
+ repo,
60
+ fromCache: true
61
+ };
62
+ }
63
+ }
64
+ // Report connecting phase
65
+ onProgress?.({ phase: 'connecting' });
66
+ // Build URL and fetch
67
+ const url = buildTarballUrl(repo, version);
68
+ try {
69
+ const response = await fetch(url, {
70
+ headers: {
71
+ 'Accept': 'application/vnd.github+json',
72
+ 'User-Agent': 'red64-cli'
73
+ },
74
+ redirect: 'follow'
75
+ });
76
+ // Handle error responses
77
+ if (!response.ok) {
78
+ if (response.status === 404) {
79
+ throw new GitHubFetchError(`Repository or version not found: ${repo}@${version}`, 'NOT_FOUND');
80
+ }
81
+ if (response.status === 403 || response.status === 429) {
82
+ throw new GitHubFetchError('GitHub API rate limit exceeded. Try again later or use cached version.', 'RATE_LIMITED');
83
+ }
84
+ throw new GitHubFetchError(`GitHub API error: ${response.status} ${response.statusText}`, 'NETWORK_ERROR');
85
+ }
86
+ // Get content length for progress
87
+ const contentLength = response.headers.get('content-length');
88
+ const totalBytes = contentLength ? parseInt(contentLength, 10) : undefined;
89
+ // Report downloading phase
90
+ onProgress?.({ phase: 'downloading', bytesReceived: 0, totalBytes });
91
+ // Read response body
92
+ const reader = response.body?.getReader();
93
+ if (!reader) {
94
+ throw new GitHubFetchError('Failed to read response body', 'NETWORK_ERROR');
95
+ }
96
+ const chunks = [];
97
+ let bytesReceived = 0;
98
+ while (true) {
99
+ const { done, value } = await reader.read();
100
+ if (done)
101
+ break;
102
+ chunks.push(value);
103
+ bytesReceived += value.length;
104
+ onProgress?.({
105
+ phase: 'downloading',
106
+ bytesReceived,
107
+ totalBytes
108
+ });
109
+ }
110
+ // Combine chunks
111
+ const tarball = new Uint8Array(bytesReceived);
112
+ let offset = 0;
113
+ for (const chunk of chunks) {
114
+ tarball.set(chunk, offset);
115
+ offset += chunk.length;
116
+ }
117
+ // Report caching phase
118
+ onProgress?.({ phase: 'caching' });
119
+ // Write to temp file
120
+ const tempDir = cacheService.getCacheDir();
121
+ await mkdir(tempDir, { recursive: true });
122
+ const tempPath = join(tempDir, `${repo.replace('/', '-')}-${version}.tar.gz`);
123
+ await writeFile(tempPath, tarball);
124
+ // Store in cache
125
+ const entry = await cacheService.set(repo, version, tempPath);
126
+ return {
127
+ tarballPath: entry.path,
128
+ version,
129
+ repo,
130
+ fromCache: false
131
+ };
132
+ }
133
+ catch (error) {
134
+ if (error instanceof GitHubFetchError) {
135
+ throw error;
136
+ }
137
+ // Handle network errors
138
+ const message = error instanceof Error ? error.message : 'Unknown error';
139
+ throw new GitHubFetchError(`Network error fetching tarball: ${message}`, 'NETWORK_ERROR');
140
+ }
141
+ },
142
+ async listAvailableStacks(_options) {
143
+ // This would require fetching and parsing the tarball
144
+ // For now, return empty array - full implementation requires tarball extraction
145
+ // The actual stack listing happens after extraction via TemplateService
146
+ return [];
147
+ }
148
+ };
149
+ }
150
+ //# sourceMappingURL=GitHubService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubService.js","sourceRoot":"","sources":["../../src/services/GitHubService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Git Status Checker Service
3
+ * Task 1.1: Implement git status checking service
4
+ * Requirements: 1.3, 5.1
5
+ */
6
+ /**
7
+ * Git status information
8
+ * Requirements: 1.3 - Detect uncommitted changes
9
+ */
10
+ export interface GitStatus {
11
+ readonly hasChanges: boolean;
12
+ readonly staged: number;
13
+ readonly unstaged: number;
14
+ readonly untracked: number;
15
+ }
16
+ /**
17
+ * Git status checker service interface
18
+ * Requirements: 1.3 - Check for uncommitted changes in worktree
19
+ */
20
+ export interface GitStatusCheckerService {
21
+ check(workingDir: string): Promise<GitStatus>;
22
+ hasUncommittedChanges(workingDir: string): Promise<boolean>;
23
+ }
24
+ /**
25
+ * Create git status checker service
26
+ * Requirements: 1.3 - Factory function for git status checking
27
+ */
28
+ export declare function createGitStatusChecker(): GitStatusCheckerService;
29
+ //# sourceMappingURL=GitStatusChecker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitStatusChecker.d.ts","sourceRoot":"","sources":["../../src/services/GitStatusChecker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AA2GD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,uBAAuB,CA+BhE"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Git Status Checker Service
3
+ * Task 1.1: Implement git status checking service
4
+ * Requirements: 1.3, 5.1
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ /**
8
+ * Execute git command and return result
9
+ */
10
+ function execGit(args, cwd) {
11
+ return new Promise((resolve) => {
12
+ const process = spawn('git', args, {
13
+ cwd,
14
+ stdio: ['pipe', 'pipe', 'pipe']
15
+ });
16
+ let stdout = '';
17
+ let stderr = '';
18
+ process.stdout?.on('data', (data) => {
19
+ stdout += data.toString();
20
+ });
21
+ process.stderr?.on('data', (data) => {
22
+ stderr += data.toString();
23
+ });
24
+ process.on('close', (code) => {
25
+ resolve({ stdout, stderr, exitCode: code ?? 0 });
26
+ });
27
+ process.on('error', (error) => {
28
+ resolve({
29
+ stdout,
30
+ stderr: stderr || `Git error: ${error.message}`,
31
+ exitCode: -1
32
+ });
33
+ });
34
+ });
35
+ }
36
+ /**
37
+ * Parse git status --porcelain output
38
+ *
39
+ * Status format: XY filename
40
+ * X = index status (staged)
41
+ * Y = work tree status (unstaged)
42
+ *
43
+ * Status codes:
44
+ * M = modified, A = added, D = deleted, R = renamed, C = copied
45
+ * U = updated but unmerged, ? = untracked, ! = ignored
46
+ */
47
+ function parseGitStatus(output) {
48
+ // Don't use trim() on the full output - it removes significant leading spaces
49
+ // from status lines like " M filename" (space = no staged, M = modified in worktree)
50
+ if (!output || output.trim() === '') {
51
+ return {
52
+ hasChanges: false,
53
+ staged: 0,
54
+ unstaged: 0,
55
+ untracked: 0
56
+ };
57
+ }
58
+ let staged = 0;
59
+ let unstaged = 0;
60
+ let untracked = 0;
61
+ // Split by newline but don't trim - preserve leading spaces
62
+ const lines = output.split('\n');
63
+ for (const line of lines) {
64
+ // Skip empty lines (but keep lines with content)
65
+ if (line.length < 2)
66
+ continue;
67
+ const x = line[0]; // Index status (staged)
68
+ const y = line[1]; // Work tree status (unstaged)
69
+ // Untracked files
70
+ if (x === '?' && y === '?') {
71
+ untracked++;
72
+ continue;
73
+ }
74
+ // Ignored files - skip
75
+ if (x === '!' && y === '!') {
76
+ continue;
77
+ }
78
+ // Check staged changes (index status)
79
+ if (x !== ' ' && x !== '?') {
80
+ staged++;
81
+ }
82
+ // Check unstaged changes (work tree status)
83
+ if (y !== ' ' && y !== '?') {
84
+ unstaged++;
85
+ }
86
+ }
87
+ return {
88
+ hasChanges: staged > 0 || unstaged > 0 || untracked > 0,
89
+ staged,
90
+ unstaged,
91
+ untracked
92
+ };
93
+ }
94
+ /**
95
+ * Create git status checker service
96
+ * Requirements: 1.3 - Factory function for git status checking
97
+ */
98
+ export function createGitStatusChecker() {
99
+ return {
100
+ /**
101
+ * Check git working directory for uncommitted changes
102
+ * Requirements: 1.3 - Detect staged, unstaged, and untracked changes
103
+ */
104
+ async check(workingDir) {
105
+ const result = await execGit(['status', '--porcelain'], workingDir);
106
+ if (result.exitCode !== 0) {
107
+ // Non-zero exit code - not a git repo or error
108
+ return {
109
+ hasChanges: false,
110
+ staged: 0,
111
+ unstaged: 0,
112
+ untracked: 0
113
+ };
114
+ }
115
+ return parseGitStatus(result.stdout);
116
+ },
117
+ /**
118
+ * Check if there are any uncommitted changes
119
+ * Requirements: 1.3 - Simple boolean check for changes
120
+ */
121
+ async hasUncommittedChanges(workingDir) {
122
+ const status = await this.check(workingDir);
123
+ return status.hasChanges;
124
+ }
125
+ };
126
+ }
127
+ //# sourceMappingURL=GitStatusChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitStatusChecker.js","sourceRoot":"","sources":["../../src/services/GitStatusChecker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAsB3C;;GAEG;AACH,SAAS,OAAO,CACd,IAAuB,EACvB,GAAW;IAEX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,IAAgB,EAAE;YAC7C,GAAG;YACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC1C,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC1C,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5B,OAAO,CAAC;gBACN,MAAM;gBACN,MAAM,EAAE,MAAM,IAAI,cAAc,KAAK,CAAC,OAAO,EAAE;gBAC/C,QAAQ,EAAE,CAAC,CAAC;aACb,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,8EAA8E;IAC9E,qFAAqF;IACrF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,4DAA4D;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,iDAAiD;QACjD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE9B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;QAEjD,kBAAkB;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,SAAS,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,EAAE,CAAC;QACX,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC;QACvD,MAAM;QACN,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL;;;WAGG;QACH,KAAK,CAAC,KAAK,CAAC,UAAkB;YAC5B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;YAEpE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,+CAA+C;gBAC/C,OAAO;oBACL,UAAU,EAAE,KAAK;oBACjB,MAAM,EAAE,CAAC;oBACT,QAAQ,EAAE,CAAC;oBACX,SAAS,EAAE,CAAC;iBACb,CAAC;YACJ,CAAC;YAED,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAED;;;WAGG;QACH,KAAK,CAAC,qBAAqB,CAAC,UAAkB;YAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,UAAU,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * PR Creator Service
3
+ * Task 5.1: Build PR creator service for GitHub CLI operations
4
+ * Requirements: 6.1, 6.2, 6.3, 6.4
5
+ */
6
+ import type { CommitResult } from './CommitService.js';
7
+ /**
8
+ * PR create options
9
+ * Requirements: 6.2, 6.3 - PR creation configuration
10
+ */
11
+ export interface PRCreateOptions {
12
+ readonly workingDir: string;
13
+ readonly feature: string;
14
+ readonly specDir: string;
15
+ readonly baseBranch: string;
16
+ }
17
+ /**
18
+ * PR create result
19
+ * Requirements: 6.3, 6.4 - PR URL and number
20
+ */
21
+ export interface PRCreateResult {
22
+ readonly success: boolean;
23
+ readonly prUrl: string | undefined;
24
+ readonly prNumber: number | undefined;
25
+ readonly error: string | undefined;
26
+ }
27
+ /**
28
+ * PR merge options
29
+ * Requirements: 6.5, 6.6 - Merge configuration
30
+ */
31
+ export interface PRMergeOptions {
32
+ readonly workingDir: string;
33
+ readonly prNumber: number;
34
+ readonly squash: boolean;
35
+ readonly deleteBranch: boolean;
36
+ }
37
+ /**
38
+ * PR merge result
39
+ */
40
+ export interface PRMergeResult {
41
+ readonly success: boolean;
42
+ readonly error: string | undefined;
43
+ }
44
+ /**
45
+ * PR creator service interface
46
+ * Requirements: 6.1, 6.2, 6.3, 6.4
47
+ */
48
+ export interface PRCreatorServiceInterface {
49
+ push(workingDir: string, remote?: string): Promise<CommitResult>;
50
+ createPR(options: PRCreateOptions): Promise<PRCreateResult>;
51
+ mergePR(options: PRMergeOptions): Promise<PRMergeResult>;
52
+ generatePRBody(specDir: string, feature: string): Promise<string>;
53
+ }
54
+ /**
55
+ * Create PR creator service
56
+ * Requirements: 6.1, 6.2, 6.3, 6.4 - Factory function for PR operations
57
+ */
58
+ export declare function createPRCreatorService(): PRCreatorServiceInterface;
59
+ //# sourceMappingURL=PRCreatorService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PRCreatorService.d.ts","sourceRoot":"","sources":["../../src/services/PRCreatorService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5D,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACzD,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE;AA4GD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,yBAAyB,CAwIlE"}