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,212 @@
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 { spawn } from 'node:child_process';
7
+ import { readFile } from 'node:fs/promises';
8
+ import { join } from 'node:path';
9
+ /**
10
+ * Execute command and return result
11
+ */
12
+ function execCommand(command, args, cwd, stdin) {
13
+ return new Promise((resolve) => {
14
+ const process = spawn(command, args, {
15
+ cwd,
16
+ stdio: ['pipe', 'pipe', 'pipe']
17
+ });
18
+ let stdout = '';
19
+ let stderr = '';
20
+ process.stdout?.on('data', (data) => {
21
+ stdout += data.toString();
22
+ });
23
+ process.stderr?.on('data', (data) => {
24
+ stderr += data.toString();
25
+ });
26
+ process.on('close', (code) => {
27
+ resolve({ stdout: stdout.trim(), stderr: stderr.trim(), exitCode: code ?? 0 });
28
+ });
29
+ process.on('error', (error) => {
30
+ resolve({
31
+ stdout,
32
+ stderr: stderr || `Command error: ${error.message}`,
33
+ exitCode: -1
34
+ });
35
+ });
36
+ // Write to stdin if provided
37
+ if (stdin && process.stdin) {
38
+ process.stdin.write(stdin);
39
+ process.stdin.end();
40
+ }
41
+ });
42
+ }
43
+ /**
44
+ * Extract PR number from URL
45
+ */
46
+ function extractPRNumber(url) {
47
+ const match = url.match(/\/pull\/(\d+)/);
48
+ return match ? parseInt(match[1], 10) : undefined;
49
+ }
50
+ /**
51
+ * Read file safely, returning empty string on error
52
+ */
53
+ async function readFileSafe(path) {
54
+ try {
55
+ return await readFile(path, 'utf-8');
56
+ }
57
+ catch {
58
+ return '';
59
+ }
60
+ }
61
+ /**
62
+ * Extract summary from requirements.md
63
+ */
64
+ function extractRequirementsSummary(content) {
65
+ if (!content)
66
+ return 'No requirements available';
67
+ // Try to extract first paragraph after the title
68
+ const lines = content.split('\n').filter(l => l.trim() && !l.startsWith('#'));
69
+ return lines.slice(0, 3).join(' ').trim() || 'Requirements defined in spec';
70
+ }
71
+ /**
72
+ * Extract overview from design.md
73
+ */
74
+ function extractDesignOverview(content) {
75
+ if (!content)
76
+ return 'No design available';
77
+ // Try to extract overview section
78
+ const overviewMatch = content.match(/##\s*Overview\s*\n([\s\S]*?)(?=\n##|$)/i);
79
+ if (overviewMatch) {
80
+ return overviewMatch[1].trim().split('\n').slice(0, 3).join(' ').trim();
81
+ }
82
+ const lines = content.split('\n').filter(l => l.trim() && !l.startsWith('#'));
83
+ return lines.slice(0, 3).join(' ').trim() || 'Design defined in spec';
84
+ }
85
+ /**
86
+ * Extract task summary from tasks.md
87
+ */
88
+ function extractTasksSummary(content) {
89
+ if (!content)
90
+ return 'No tasks available';
91
+ // Count completed and total tasks
92
+ const taskLines = content.match(/- \[([ x])\]/g) || [];
93
+ const completed = taskLines.filter(l => l.includes('[x]')).length;
94
+ const total = taskLines.length;
95
+ return `${completed}/${total} tasks completed`;
96
+ }
97
+ /**
98
+ * Create PR creator service
99
+ * Requirements: 6.1, 6.2, 6.3, 6.4 - Factory function for PR operations
100
+ */
101
+ export function createPRCreatorService() {
102
+ return {
103
+ /**
104
+ * Push branch to remote
105
+ * Requirements: 6.1 - Push feature branch using git
106
+ */
107
+ async push(workingDir, remote = 'origin') {
108
+ const result = await execCommand('git', ['push', '-u', remote, 'HEAD'], workingDir);
109
+ if (result.exitCode !== 0) {
110
+ return {
111
+ success: false,
112
+ commitHash: undefined,
113
+ error: result.stderr || 'Failed to push branch'
114
+ };
115
+ }
116
+ return {
117
+ success: true,
118
+ commitHash: undefined,
119
+ error: undefined
120
+ };
121
+ },
122
+ /**
123
+ * Create pull request using GitHub CLI
124
+ * Requirements: 6.2, 6.3, 6.4 - Create PR with spec artifacts
125
+ */
126
+ async createPR(options) {
127
+ // Generate PR body from spec artifacts
128
+ const body = await this.generatePRBody(options.specDir, options.feature);
129
+ // Build title
130
+ const title = `feat: ${options.feature}`;
131
+ // Create PR using gh CLI
132
+ const result = await execCommand('gh', ['pr', 'create', '--title', title, '--body', body, '--base', options.baseBranch], options.workingDir);
133
+ if (result.exitCode !== 0) {
134
+ return {
135
+ success: false,
136
+ prUrl: undefined,
137
+ prNumber: undefined,
138
+ error: result.stderr || 'Failed to create PR'
139
+ };
140
+ }
141
+ const prUrl = result.stdout;
142
+ const prNumber = extractPRNumber(prUrl);
143
+ return {
144
+ success: true,
145
+ prUrl,
146
+ prNumber,
147
+ error: undefined
148
+ };
149
+ },
150
+ /**
151
+ * Merge pull request
152
+ * Requirements: 6.5, 6.6 - Squash merge and delete branch
153
+ */
154
+ async mergePR(options) {
155
+ const args = ['pr', 'merge', options.prNumber.toString()];
156
+ if (options.squash) {
157
+ args.push('--squash');
158
+ }
159
+ if (options.deleteBranch) {
160
+ args.push('--delete-branch');
161
+ }
162
+ const result = await execCommand('gh', args, options.workingDir);
163
+ if (result.exitCode !== 0) {
164
+ return {
165
+ success: false,
166
+ error: result.stderr || 'Failed to merge PR'
167
+ };
168
+ }
169
+ return {
170
+ success: true,
171
+ error: undefined
172
+ };
173
+ },
174
+ /**
175
+ * Generate PR body from spec artifacts
176
+ * Requirements: 6.2 - Read spec artifacts for PR body
177
+ * Requirements: 6.4 - Include links to spec artifacts
178
+ */
179
+ async generatePRBody(specDir, feature) {
180
+ // Read spec artifacts
181
+ const requirementsPath = join(specDir, 'requirements.md');
182
+ const designPath = join(specDir, 'design.md');
183
+ const tasksPath = join(specDir, 'tasks.md');
184
+ const [requirements, design, tasks] = await Promise.all([
185
+ readFileSafe(requirementsPath),
186
+ readFileSafe(designPath),
187
+ readFileSafe(tasksPath)
188
+ ]);
189
+ const requirementsSummary = extractRequirementsSummary(requirements);
190
+ const designOverview = extractDesignOverview(design);
191
+ const tasksSummary = extractTasksSummary(tasks);
192
+ return `## Feature: ${feature}
193
+
194
+ ### Summary
195
+ ${requirementsSummary}
196
+
197
+ ### Design
198
+ ${designOverview}
199
+
200
+ ### Tasks
201
+ ${tasksSummary}
202
+
203
+ ---
204
+ **Spec Artifacts**
205
+ - [Requirements](.red64/specs/${feature}/requirements.md)
206
+ - [Design](.red64/specs/${feature}/design.md)
207
+ - [Tasks](.red64/specs/${feature}/tasks.md)
208
+ `;
209
+ }
210
+ };
211
+ }
212
+ //# sourceMappingURL=PRCreatorService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PRCreatorService.js","sourceRoot":"","sources":["../../src/services/PRCreatorService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * PR Status Fetcher Service
3
+ * Task 1.2: Implement PR status fetching service
4
+ * Requirements: 2.4, 4.3
5
+ */
6
+ /**
7
+ * PR status information
8
+ * Requirements: 2.4 - Fetch PR status for display
9
+ */
10
+ export interface PRStatus {
11
+ readonly number: number;
12
+ readonly url: string;
13
+ readonly state: 'open' | 'closed' | 'merged';
14
+ readonly mergeable: boolean;
15
+ readonly reviewDecision: 'approved' | 'changes_requested' | 'review_required' | 'unknown';
16
+ readonly checksStatus: 'passing' | 'failing' | 'pending' | 'unknown';
17
+ }
18
+ /**
19
+ * PR close operation result
20
+ * Requirements: 4.3 - Close PR on abort
21
+ */
22
+ export interface PRCloseResult {
23
+ readonly success: boolean;
24
+ readonly error: string | undefined;
25
+ }
26
+ /**
27
+ * PR status fetcher service interface
28
+ * Requirements: 2.4, 4.3
29
+ */
30
+ export interface PRStatusFetcherService {
31
+ getStatus(prNumberOrUrl: string | number): Promise<PRStatus | undefined>;
32
+ close(prNumber: number): Promise<PRCloseResult>;
33
+ }
34
+ /**
35
+ * Create PR status fetcher service
36
+ * Requirements: 2.4, 4.3 - Factory function for PR operations
37
+ */
38
+ export declare function createPRStatusFetcher(): PRStatusFetcherService;
39
+ //# sourceMappingURL=PRStatusFetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PRStatusFetcher.d.ts","sourceRoot":"","sources":["../../src/services/PRStatusFetcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,UAAU,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC1F,QAAQ,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CACtE;AAED;;;GAGG;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,sBAAsB;IACrC,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IACzE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACjD;AAmHD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,sBAAsB,CAsD9D"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * PR Status Fetcher Service
3
+ * Task 1.2: Implement PR status fetching service
4
+ * Requirements: 2.4, 4.3
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ /**
8
+ * Execute gh command and return result
9
+ */
10
+ function execGh(args) {
11
+ return new Promise((resolve) => {
12
+ const process = spawn('gh', args, {
13
+ stdio: ['pipe', 'pipe', 'pipe']
14
+ });
15
+ let stdout = '';
16
+ let stderr = '';
17
+ process.stdout?.on('data', (data) => {
18
+ stdout += data.toString();
19
+ });
20
+ process.stderr?.on('data', (data) => {
21
+ stderr += data.toString();
22
+ });
23
+ process.on('close', (code) => {
24
+ resolve({ stdout, stderr, exitCode: code ?? 0 });
25
+ });
26
+ process.on('error', (error) => {
27
+ resolve({
28
+ stdout,
29
+ stderr: stderr || `gh error: ${error.message}`,
30
+ exitCode: -1
31
+ });
32
+ });
33
+ });
34
+ }
35
+ /**
36
+ * Map GitHub API state to our state type
37
+ */
38
+ function mapState(apiState) {
39
+ switch (apiState?.toUpperCase()) {
40
+ case 'OPEN':
41
+ return 'open';
42
+ case 'CLOSED':
43
+ return 'closed';
44
+ case 'MERGED':
45
+ return 'merged';
46
+ default:
47
+ return 'open';
48
+ }
49
+ }
50
+ /**
51
+ * Map GitHub API mergeable status to boolean
52
+ */
53
+ function mapMergeable(apiMergeable) {
54
+ return apiMergeable?.toUpperCase() === 'MERGEABLE';
55
+ }
56
+ /**
57
+ * Map GitHub API review decision to our type
58
+ */
59
+ function mapReviewDecision(apiDecision) {
60
+ switch (apiDecision?.toUpperCase()) {
61
+ case 'APPROVED':
62
+ return 'approved';
63
+ case 'CHANGES_REQUESTED':
64
+ return 'changes_requested';
65
+ case 'REVIEW_REQUIRED':
66
+ return 'review_required';
67
+ default:
68
+ return 'unknown';
69
+ }
70
+ }
71
+ /**
72
+ * Map GitHub API status check rollup to our type
73
+ */
74
+ function mapChecksStatus(rollup) {
75
+ if (!rollup || !rollup.state) {
76
+ return 'unknown';
77
+ }
78
+ switch (rollup.state.toUpperCase()) {
79
+ case 'SUCCESS':
80
+ return 'passing';
81
+ case 'FAILURE':
82
+ case 'ERROR':
83
+ return 'failing';
84
+ case 'PENDING':
85
+ case 'EXPECTED':
86
+ return 'pending';
87
+ default:
88
+ return 'unknown';
89
+ }
90
+ }
91
+ /**
92
+ * Create PR status fetcher service
93
+ * Requirements: 2.4, 4.3 - Factory function for PR operations
94
+ */
95
+ export function createPRStatusFetcher() {
96
+ return {
97
+ /**
98
+ * Get PR status by number or URL
99
+ * Requirements: 2.4 - Fetch PR status for display
100
+ */
101
+ async getStatus(prNumberOrUrl) {
102
+ const identifier = String(prNumberOrUrl);
103
+ const fields = 'number,url,state,mergeable,reviewDecision,statusCheckRollup';
104
+ const result = await execGh(['pr', 'view', identifier, '--json', fields]);
105
+ if (result.exitCode !== 0) {
106
+ // PR not found or gh not authenticated
107
+ return undefined;
108
+ }
109
+ try {
110
+ const data = JSON.parse(result.stdout);
111
+ return {
112
+ number: data.number ?? 0,
113
+ url: data.url ?? '',
114
+ state: mapState(data.state),
115
+ mergeable: mapMergeable(data.mergeable),
116
+ reviewDecision: mapReviewDecision(data.reviewDecision),
117
+ checksStatus: mapChecksStatus(data.statusCheckRollup)
118
+ };
119
+ }
120
+ catch {
121
+ // Invalid JSON response
122
+ return undefined;
123
+ }
124
+ },
125
+ /**
126
+ * Close a PR by number
127
+ * Requirements: 4.3 - Close PR on abort (never merge)
128
+ */
129
+ async close(prNumber) {
130
+ const result = await execGh(['pr', 'close', String(prNumber)]);
131
+ if (result.exitCode !== 0) {
132
+ return {
133
+ success: false,
134
+ error: result.stderr || 'Failed to close PR'
135
+ };
136
+ }
137
+ return {
138
+ success: true,
139
+ error: undefined
140
+ };
141
+ }
142
+ };
143
+ }
144
+ //# sourceMappingURL=PRStatusFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PRStatusFetcher.js","sourceRoot":"","sources":["../../src/services/PRStatusFetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Phase Executor service
3
+ * Requirements: 1.1, 2.1-2.6
4
+ */
5
+ import type { FlowPhase, GlobalFlags } from '../types/index.js';
6
+ import type { AgentInvokerService } from './AgentInvoker.js';
7
+ import type { StateStoreService } from './StateStore.js';
8
+ /**
9
+ * Phase execution result
10
+ * Requirements: 2.5 - Return success only when output is valid and complete
11
+ */
12
+ export interface PhaseExecutionResult {
13
+ readonly success: boolean;
14
+ readonly output: string | undefined;
15
+ readonly error: string | undefined;
16
+ }
17
+ /**
18
+ * Phase executor service interface
19
+ * Requirements: 2.1 - Execute phase-specific operations
20
+ */
21
+ export interface PhaseExecutorService {
22
+ execute(phase: FlowPhase, flags: GlobalFlags, workingDirectory: string): Promise<PhaseExecutionResult>;
23
+ }
24
+ /**
25
+ * Create phase executor service
26
+ * Requirements: 2.1 - Factory function for phase executor
27
+ */
28
+ export declare function createPhaseExecutor(agentInvoker: AgentInvokerService, _stateStore: StateStoreService): PhaseExecutorService;
29
+ //# sourceMappingURL=PhaseExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhaseExecutor.d.ts","sourceRoot":"","sources":["../../src/services/PhaseExecutor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,CACL,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,WAAW,EAClB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAmED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,mBAAmB,EACjC,WAAW,EAAE,iBAAiB,GAC7B,oBAAoB,CAqEtB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Phase Executor service
3
+ * Requirements: 1.1, 2.1-2.6
4
+ */
5
+ /**
6
+ * Prompt templates for each generation phase
7
+ * Requirements: 2.2 - Construct focused prompts for each generation task
8
+ * Requirements: 8.3 - Use red64: prefix for slash commands
9
+ */
10
+ const PHASE_PROMPTS = {
11
+ 'initializing': '/red64:spec-init "{feature}" "{description}"',
12
+ 'requirements-generating': '/red64:spec-requirements {feature}',
13
+ 'design-generating': '/red64:spec-design {feature}',
14
+ 'tasks-generating': '/red64:spec-tasks {feature}',
15
+ 'implementing': '/red64:spec-impl {feature}'
16
+ };
17
+ /**
18
+ * Default retry configuration
19
+ * Requirements: 2.6 - Configurable max retry count
20
+ */
21
+ const DEFAULT_MAX_RETRIES = 3;
22
+ const RETRY_DELAY_MS = 1000;
23
+ /**
24
+ * Check if phase requires agent invocation
25
+ */
26
+ function isGenerationPhase(phase) {
27
+ return [
28
+ 'initializing',
29
+ 'requirements-generating',
30
+ 'design-generating',
31
+ 'tasks-generating',
32
+ 'implementing'
33
+ ].includes(phase.type);
34
+ }
35
+ /**
36
+ * Build prompt for phase
37
+ * Requirements: 2.2, 2.3 - Focused prompt without workflow state
38
+ */
39
+ function buildPrompt(phase) {
40
+ const template = PHASE_PROMPTS[phase.type];
41
+ if (!template) {
42
+ return '';
43
+ }
44
+ let prompt = template;
45
+ // Replace feature placeholder
46
+ if ('feature' in phase) {
47
+ prompt = prompt.replace('{feature}', phase.feature);
48
+ }
49
+ // Replace description placeholder for initializing phase
50
+ if (phase.type === 'initializing') {
51
+ prompt = prompt.replace('{description}', phase.description);
52
+ }
53
+ return prompt;
54
+ }
55
+ /**
56
+ * Sleep for specified milliseconds
57
+ */
58
+ function sleep(ms) {
59
+ return new Promise(resolve => setTimeout(resolve, ms));
60
+ }
61
+ /**
62
+ * Create phase executor service
63
+ * Requirements: 2.1 - Factory function for phase executor
64
+ */
65
+ export function createPhaseExecutor(agentInvoker, _stateStore) {
66
+ return {
67
+ /**
68
+ * Execute phase-specific operations
69
+ * Requirements: 2.1-2.6 - Execute generation tasks with retry logic
70
+ */
71
+ async execute(phase, flags, workingDirectory) {
72
+ // Non-generation phases don't require agent invocation
73
+ if (!isGenerationPhase(phase)) {
74
+ return {
75
+ success: true,
76
+ output: undefined,
77
+ error: undefined
78
+ };
79
+ }
80
+ const prompt = buildPrompt(phase);
81
+ if (!prompt) {
82
+ return {
83
+ success: true,
84
+ output: undefined,
85
+ error: undefined
86
+ };
87
+ }
88
+ // Retry loop
89
+ // Requirements: 2.6 - Implement retry logic in TypeScript
90
+ for (let attempt = 1; attempt <= DEFAULT_MAX_RETRIES; attempt++) {
91
+ const result = await agentInvoker.invoke({
92
+ prompt,
93
+ workingDirectory,
94
+ skipPermissions: flags.skipPermissions,
95
+ tier: flags.tier
96
+ });
97
+ if (result.success) {
98
+ // Requirements: 2.5 - Parse agent output after completion
99
+ return {
100
+ success: true,
101
+ output: result.stdout,
102
+ error: undefined
103
+ };
104
+ }
105
+ // Last attempt failed
106
+ if (attempt === DEFAULT_MAX_RETRIES) {
107
+ return {
108
+ success: false,
109
+ output: result.stdout || undefined,
110
+ error: `Agent failed after ${DEFAULT_MAX_RETRIES} retries: ${result.stderr}`
111
+ };
112
+ }
113
+ // Wait before retry with exponential backoff
114
+ await sleep(RETRY_DELAY_MS * attempt);
115
+ }
116
+ // Should not reach here, but TypeScript needs this
117
+ return {
118
+ success: false,
119
+ output: undefined,
120
+ error: 'Unexpected error in phase execution'
121
+ };
122
+ }
123
+ };
124
+ }
125
+ //# sourceMappingURL=PhaseExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhaseExecutor.js","sourceRoot":"","sources":["../../src/services/PhaseExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Spec Initialization Service
3
+ * Creates the spec directory structure with templates
4
+ * Replaces the /red64:spec-init command for orchestrator use
5
+ */
6
+ /**
7
+ * Spec initialization result
8
+ */
9
+ export interface SpecInitResult {
10
+ readonly success: boolean;
11
+ readonly specDir: string;
12
+ readonly featureName: string;
13
+ readonly error?: string;
14
+ }
15
+ /**
16
+ * Spec update result
17
+ */
18
+ export interface SpecUpdateResult {
19
+ readonly success: boolean;
20
+ readonly error?: string;
21
+ }
22
+ /**
23
+ * Spec initialization service interface
24
+ */
25
+ export interface SpecInitService {
26
+ init(workDir: string, featureName: string, description: string): Promise<SpecInitResult>;
27
+ updateTaskApproval(workDir: string, featureName: string): Promise<SpecUpdateResult>;
28
+ }
29
+ /**
30
+ * Create spec init service
31
+ */
32
+ export declare function createSpecInitService(): SpecInitService;
33
+ //# sourceMappingURL=SpecInitService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpecInitService.d.ts","sourceRoot":"","sources":["../../src/services/SpecInitService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACzF,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrF;AAwFD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAqGvD"}