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,170 @@
1
+ /**
2
+ * Docker Runner service for sandboxed command execution
3
+ * Runs Claude CLI commands inside a Docker container for isolation
4
+ */
5
+ import { spawn } from 'node:child_process';
6
+ const DEFAULT_IMAGE = 'red64-sandbox:latest';
7
+ /**
8
+ * Check if Docker is available
9
+ */
10
+ async function checkDocker() {
11
+ return new Promise((resolve) => {
12
+ const proc = spawn('docker', ['version'], { stdio: ['pipe', 'pipe', 'pipe'] });
13
+ proc.on('close', (code) => resolve(code === 0));
14
+ proc.on('error', () => resolve(false));
15
+ });
16
+ }
17
+ /**
18
+ * Check if image exists locally
19
+ */
20
+ async function imageExists(imageName) {
21
+ return new Promise((resolve) => {
22
+ const proc = spawn('docker', ['image', 'inspect', imageName], {
23
+ stdio: ['pipe', 'pipe', 'pipe']
24
+ });
25
+ proc.on('close', (code) => resolve(code === 0));
26
+ proc.on('error', () => resolve(false));
27
+ });
28
+ }
29
+ /**
30
+ * Create Docker runner service
31
+ */
32
+ export function createDockerRunner() {
33
+ let currentProcess = null;
34
+ let aborted = false;
35
+ return {
36
+ /**
37
+ * Run command inside Docker container
38
+ */
39
+ async run(options) {
40
+ aborted = false;
41
+ const image = options.image ?? DEFAULT_IMAGE;
42
+ // Build docker run args
43
+ const dockerArgs = [
44
+ 'run',
45
+ '--rm', // Remove container after exit
46
+ '-w', '/workspace', // Working directory inside container
47
+ '-v', `${options.workingDirectory}:/workspace`, // Mount workspace
48
+ ];
49
+ // Add environment variables
50
+ if (options.env) {
51
+ for (const [key, value] of Object.entries(options.env)) {
52
+ dockerArgs.push('-e', `${key}=${value}`);
53
+ }
54
+ }
55
+ // Add image and command
56
+ dockerArgs.push(image);
57
+ dockerArgs.push(options.command);
58
+ dockerArgs.push(...options.args);
59
+ return new Promise((resolve) => {
60
+ currentProcess = spawn('docker', dockerArgs, {
61
+ stdio: ['pipe', 'pipe', 'pipe']
62
+ });
63
+ // Close stdin immediately
64
+ currentProcess.stdin?.end();
65
+ let stdout = '';
66
+ let stderr = '';
67
+ let timedOut = false;
68
+ // Handle timeout (default 10 minutes)
69
+ const timeoutMs = options.timeout ?? 600000;
70
+ const timeoutId = setTimeout(() => {
71
+ timedOut = true;
72
+ if (currentProcess) {
73
+ currentProcess.kill('SIGTERM');
74
+ }
75
+ }, timeoutMs);
76
+ // Capture stdout
77
+ currentProcess.stdout?.on('data', (data) => {
78
+ const chunk = data.toString();
79
+ stdout += chunk;
80
+ if (options.onOutput) {
81
+ options.onOutput(chunk);
82
+ }
83
+ });
84
+ // Capture stderr
85
+ currentProcess.stderr?.on('data', (data) => {
86
+ const chunk = data.toString();
87
+ stderr += chunk;
88
+ if (options.onError) {
89
+ options.onError(chunk);
90
+ }
91
+ });
92
+ // Handle process close
93
+ currentProcess.on('close', (code) => {
94
+ clearTimeout(timeoutId);
95
+ const exitCode = code ?? -1;
96
+ const success = exitCode === 0 && !timedOut && !aborted;
97
+ resolve({
98
+ success,
99
+ exitCode,
100
+ stdout,
101
+ stderr,
102
+ timedOut
103
+ });
104
+ currentProcess = null;
105
+ });
106
+ // Handle spawn errors
107
+ currentProcess.on('error', (error) => {
108
+ clearTimeout(timeoutId);
109
+ resolve({
110
+ success: false,
111
+ exitCode: -1,
112
+ stdout,
113
+ stderr: stderr || `Docker error: ${error.message}`,
114
+ timedOut: false
115
+ });
116
+ currentProcess = null;
117
+ });
118
+ });
119
+ },
120
+ /**
121
+ * Check if Docker is available
122
+ */
123
+ async isAvailable() {
124
+ return checkDocker();
125
+ },
126
+ /**
127
+ * Build the sandbox image
128
+ */
129
+ async buildImage(dockerfilePath, imageName) {
130
+ const image = imageName ?? DEFAULT_IMAGE;
131
+ return new Promise((resolve) => {
132
+ const proc = spawn('docker', [
133
+ 'build',
134
+ '-f', dockerfilePath,
135
+ '-t', image,
136
+ '.'
137
+ ], {
138
+ cwd: dockerfilePath.substring(0, dockerfilePath.lastIndexOf('/')),
139
+ stdio: ['pipe', 'pipe', 'pipe']
140
+ });
141
+ proc.on('close', (code) => resolve(code === 0));
142
+ proc.on('error', () => resolve(false));
143
+ });
144
+ },
145
+ /**
146
+ * Abort running container
147
+ */
148
+ abort() {
149
+ aborted = true;
150
+ if (currentProcess) {
151
+ currentProcess.kill('SIGTERM');
152
+ }
153
+ }
154
+ };
155
+ }
156
+ /**
157
+ * Check if sandbox image is available, build if not
158
+ */
159
+ export async function ensureSandboxImage(dockerfilePath) {
160
+ const exists = await imageExists(DEFAULT_IMAGE);
161
+ if (exists) {
162
+ return true;
163
+ }
164
+ if (!dockerfilePath) {
165
+ return false;
166
+ }
167
+ const runner = createDockerRunner();
168
+ return runner.buildImage(dockerfilePath, DEFAULT_IMAGE);
169
+ }
170
+ //# sourceMappingURL=DockerRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerRunner.js","sourceRoot":"","sources":["../../src/services/DockerRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Extended Flow State Machine
3
+ * Task 2.2: Implement mode-aware state transition function
4
+ * Requirements: 2.2, 2.4, 2.5
5
+ */
6
+ import type { ExtendedFlowPhase, ExtendedFlowEvent, WorkflowMode } from '../types/extended-flow.js';
7
+ /**
8
+ * Extended flow machine service interface
9
+ * Requirements: 2.2 - Mode-aware state machine
10
+ */
11
+ export interface ExtendedFlowMachineService {
12
+ getPhase(): ExtendedFlowPhase;
13
+ getMode(): WorkflowMode;
14
+ send(event: ExtendedFlowEvent): ExtendedFlowPhase;
15
+ canTransition(event: ExtendedFlowEvent): boolean;
16
+ subscribe(listener: (phase: ExtendedFlowPhase) => void): () => void;
17
+ }
18
+ /**
19
+ * Pure transition function - mode-aware state transitions
20
+ * Requirements: 2.2 - Extend existing transition function to handle new phases
21
+ * Requirements: 2.4 - Return error state for invalid transitions
22
+ * Requirements: 2.5 - Use workflow mode to determine valid phase sequences
23
+ */
24
+ export declare function extendedTransition(phase: ExtendedFlowPhase, event: ExtendedFlowEvent, mode: WorkflowMode): ExtendedFlowPhase;
25
+ /**
26
+ * Create extended flow machine service
27
+ * Requirements: 2.2 - Factory function for mode-aware state machine
28
+ * Requirements: 2.5 - Lock mode at START
29
+ */
30
+ export declare function createExtendedFlowMachine(initialPhase?: ExtendedFlowPhase, initialMode?: WorkflowMode): ExtendedFlowMachineService;
31
+ //# sourceMappingURL=ExtendedFlowStateMachine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtendedFlowStateMachine.d.ts","sourceRoot":"","sources":["../../src/services/ExtendedFlowStateMachine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACb,MAAM,2BAA2B,CAAC;AAEnC;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,IAAI,iBAAiB,CAAC;IAC9B,OAAO,IAAI,YAAY,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAAC;IAClD,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IACjD,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACrE;AAYD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,YAAY,GACjB,iBAAiB,CA8PnB;AAoBD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,CAAC,EAAE,iBAAiB,EAChC,WAAW,CAAC,EAAE,YAAY,GACzB,0BAA0B,CAqC5B"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Extended Flow State Machine
3
+ * Task 2.2: Implement mode-aware state transition function
4
+ * Requirements: 2.2, 2.4, 2.5
5
+ */
6
+ /**
7
+ * Extract feature from phase if available
8
+ */
9
+ function getFeatureFromPhase(phase) {
10
+ if (phase.type === 'idle') {
11
+ return '';
12
+ }
13
+ return phase.feature;
14
+ }
15
+ /**
16
+ * Pure transition function - mode-aware state transitions
17
+ * Requirements: 2.2 - Extend existing transition function to handle new phases
18
+ * Requirements: 2.4 - Return error state for invalid transitions
19
+ * Requirements: 2.5 - Use workflow mode to determine valid phase sequences
20
+ */
21
+ export function extendedTransition(phase, event, mode) {
22
+ const feature = getFeatureFromPhase(phase);
23
+ // Global events that can occur from any phase
24
+ if (event.type === 'ABORT') {
25
+ return {
26
+ type: 'aborted',
27
+ feature: feature || 'unknown',
28
+ reason: event.reason
29
+ };
30
+ }
31
+ if (event.type === 'ERROR') {
32
+ return {
33
+ type: 'error',
34
+ feature: feature || 'unknown',
35
+ error: event.error
36
+ };
37
+ }
38
+ // Phase-specific transitions
39
+ switch (phase.type) {
40
+ case 'idle':
41
+ if (event.type === 'START') {
42
+ return {
43
+ type: 'initializing',
44
+ feature: event.feature,
45
+ description: event.description
46
+ };
47
+ }
48
+ break;
49
+ case 'initializing':
50
+ if (event.type === 'PHASE_COMPLETE') {
51
+ return {
52
+ type: 'requirements-generating',
53
+ feature: phase.feature
54
+ };
55
+ }
56
+ break;
57
+ case 'requirements-generating':
58
+ if (event.type === 'PHASE_COMPLETE') {
59
+ return {
60
+ type: 'requirements-approval',
61
+ feature: phase.feature
62
+ };
63
+ }
64
+ break;
65
+ case 'requirements-approval':
66
+ if (event.type === 'APPROVE') {
67
+ // Mode-aware: brownfield goes to gap-analysis
68
+ if (mode === 'brownfield') {
69
+ return {
70
+ type: 'gap-analysis',
71
+ feature: phase.feature
72
+ };
73
+ }
74
+ // Greenfield skips gap-analysis
75
+ return {
76
+ type: 'design-generating',
77
+ feature: phase.feature
78
+ };
79
+ }
80
+ if (event.type === 'REJECT') {
81
+ return {
82
+ type: 'requirements-generating',
83
+ feature: phase.feature
84
+ };
85
+ }
86
+ break;
87
+ // Brownfield: Gap analysis phases
88
+ case 'gap-analysis':
89
+ if (event.type === 'PHASE_COMPLETE') {
90
+ return {
91
+ type: 'gap-review',
92
+ feature: phase.feature
93
+ };
94
+ }
95
+ break;
96
+ case 'gap-review':
97
+ if (event.type === 'APPROVE') {
98
+ return {
99
+ type: 'design-generating',
100
+ feature: phase.feature
101
+ };
102
+ }
103
+ if (event.type === 'REJECT') {
104
+ return {
105
+ type: 'requirements-generating',
106
+ feature: phase.feature
107
+ };
108
+ }
109
+ break;
110
+ case 'design-generating':
111
+ if (event.type === 'PHASE_COMPLETE') {
112
+ return {
113
+ type: 'design-approval',
114
+ feature: phase.feature
115
+ };
116
+ }
117
+ break;
118
+ case 'design-approval':
119
+ if (event.type === 'APPROVE') {
120
+ // Mode-aware: brownfield goes to design-validation
121
+ if (mode === 'brownfield') {
122
+ return {
123
+ type: 'design-validation',
124
+ feature: phase.feature
125
+ };
126
+ }
127
+ // Greenfield skips design-validation
128
+ return {
129
+ type: 'tasks-generating',
130
+ feature: phase.feature
131
+ };
132
+ }
133
+ if (event.type === 'REJECT') {
134
+ return {
135
+ type: 'design-generating',
136
+ feature: phase.feature
137
+ };
138
+ }
139
+ break;
140
+ // Brownfield: Design validation phases
141
+ case 'design-validation':
142
+ if (event.type === 'PHASE_COMPLETE') {
143
+ return {
144
+ type: 'design-validation-review',
145
+ feature: phase.feature
146
+ };
147
+ }
148
+ break;
149
+ case 'design-validation-review':
150
+ if (event.type === 'APPROVE') {
151
+ return {
152
+ type: 'tasks-generating',
153
+ feature: phase.feature
154
+ };
155
+ }
156
+ if (event.type === 'REJECT') {
157
+ return {
158
+ type: 'design-generating',
159
+ feature: phase.feature
160
+ };
161
+ }
162
+ break;
163
+ case 'tasks-generating':
164
+ if (event.type === 'PHASE_COMPLETE') {
165
+ return {
166
+ type: 'tasks-approval',
167
+ feature: phase.feature
168
+ };
169
+ }
170
+ break;
171
+ case 'tasks-approval':
172
+ if (event.type === 'APPROVE') {
173
+ return {
174
+ type: 'implementing',
175
+ feature: phase.feature,
176
+ currentTask: 1,
177
+ totalTasks: 0 // Will be set when tasks are counted
178
+ };
179
+ }
180
+ if (event.type === 'REJECT') {
181
+ return {
182
+ type: 'tasks-generating',
183
+ feature: phase.feature
184
+ };
185
+ }
186
+ break;
187
+ case 'implementing':
188
+ if (event.type === 'PHASE_COMPLETE') {
189
+ return {
190
+ type: 'validation',
191
+ feature: phase.feature
192
+ };
193
+ }
194
+ if (event.type === 'PAUSE') {
195
+ return {
196
+ type: 'paused',
197
+ feature: phase.feature,
198
+ pausedAt: phase.currentTask,
199
+ totalTasks: phase.totalTasks
200
+ };
201
+ }
202
+ if (event.type === 'TASK_COMPLETE') {
203
+ return {
204
+ type: 'implementing',
205
+ feature: phase.feature,
206
+ currentTask: event.taskIndex,
207
+ totalTasks: phase.totalTasks
208
+ };
209
+ }
210
+ break;
211
+ case 'paused':
212
+ if (event.type === 'RESUME') {
213
+ return {
214
+ type: 'implementing',
215
+ feature: phase.feature,
216
+ currentTask: phase.pausedAt,
217
+ totalTasks: phase.totalTasks
218
+ };
219
+ }
220
+ break;
221
+ case 'validation':
222
+ if (event.type === 'PHASE_COMPLETE') {
223
+ return {
224
+ type: 'pr',
225
+ feature: phase.feature
226
+ };
227
+ }
228
+ break;
229
+ case 'pr':
230
+ if (event.type === 'PR_CREATED') {
231
+ return {
232
+ type: 'merge-decision',
233
+ feature: phase.feature,
234
+ prUrl: event.prUrl
235
+ };
236
+ }
237
+ break;
238
+ case 'merge-decision':
239
+ if (event.type === 'MERGE' || event.type === 'SKIP_MERGE') {
240
+ return {
241
+ type: 'complete',
242
+ feature: phase.feature
243
+ };
244
+ }
245
+ break;
246
+ case 'complete':
247
+ case 'aborted':
248
+ case 'error':
249
+ // Terminal states - no transitions except ABORT/ERROR handled above
250
+ break;
251
+ }
252
+ // Invalid transition - return current phase
253
+ return phase;
254
+ }
255
+ /**
256
+ * Check if a transition is valid from current phase
257
+ */
258
+ function canTransitionFromPhase(phase, event, mode) {
259
+ // ABORT and ERROR are always valid (except from terminal states)
260
+ if (event.type === 'ABORT' || event.type === 'ERROR') {
261
+ return phase.type !== 'complete' && phase.type !== 'aborted' && phase.type !== 'error';
262
+ }
263
+ // Check if transition would result in a different phase
264
+ const nextPhase = extendedTransition(phase, event, mode);
265
+ return nextPhase !== phase && nextPhase.type !== phase.type;
266
+ }
267
+ /**
268
+ * Create extended flow machine service
269
+ * Requirements: 2.2 - Factory function for mode-aware state machine
270
+ * Requirements: 2.5 - Lock mode at START
271
+ */
272
+ export function createExtendedFlowMachine(initialPhase, initialMode) {
273
+ let currentPhase = initialPhase ?? { type: 'idle' };
274
+ let mode = initialMode ?? 'greenfield';
275
+ const listeners = new Set();
276
+ return {
277
+ getPhase() {
278
+ return currentPhase;
279
+ },
280
+ getMode() {
281
+ return mode;
282
+ },
283
+ send(event) {
284
+ // Lock mode at START event
285
+ if (event.type === 'START') {
286
+ mode = event.mode;
287
+ }
288
+ currentPhase = extendedTransition(currentPhase, event, mode);
289
+ // Notify subscribers
290
+ listeners.forEach(listener => listener(currentPhase));
291
+ return currentPhase;
292
+ },
293
+ canTransition(event) {
294
+ return canTransitionFromPhase(currentPhase, event, mode);
295
+ },
296
+ subscribe(listener) {
297
+ listeners.add(listener);
298
+ return () => listeners.delete(listener);
299
+ }
300
+ };
301
+ }
302
+ //# sourceMappingURL=ExtendedFlowStateMachine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtendedFlowStateMachine.js","sourceRoot":"","sources":["../../src/services/ExtendedFlowStateMachine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Feature Validator Service
3
+ * Task 1.1: Create feature name validator service
4
+ * Requirements: 1.1, 1.2
5
+ */
6
+ /**
7
+ * Validation result interface
8
+ * Requirements: 1.1 - Return structured validation result
9
+ */
10
+ export interface ValidationResult {
11
+ readonly valid: boolean;
12
+ readonly error: string | undefined;
13
+ }
14
+ /**
15
+ * Feature validator service interface
16
+ * Requirements: 1.1, 1.2
17
+ */
18
+ export interface FeatureValidatorService {
19
+ validate(featureName: string): ValidationResult;
20
+ }
21
+ /**
22
+ * Create feature validator service
23
+ * Requirements: 1.1, 1.2 - Factory function for feature name validation
24
+ */
25
+ export declare function createFeatureValidator(): FeatureValidatorService;
26
+ //# sourceMappingURL=FeatureValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureValidator.d.ts","sourceRoot":"","sources":["../../src/services/FeatureValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACjD;AAWD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,uBAAuB,CA+BhE"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Feature Validator Service
3
+ * Task 1.1: Create feature name validator service
4
+ * Requirements: 1.1, 1.2
5
+ */
6
+ /**
7
+ * Feature name validation pattern
8
+ * - Must start with lowercase letter
9
+ * - Can contain lowercase letters, numbers, and hyphens
10
+ * - Cannot end with hyphen
11
+ * - Cannot have consecutive hyphens
12
+ */
13
+ const FEATURE_NAME_PATTERN = /^[a-z]([a-z0-9]|-(?=[a-z0-9]))*$/;
14
+ /**
15
+ * Create feature validator service
16
+ * Requirements: 1.1, 1.2 - Factory function for feature name validation
17
+ */
18
+ export function createFeatureValidator() {
19
+ return {
20
+ /**
21
+ * Validate feature name format
22
+ * Requirements: 1.1 - Validate that feature name starts with lowercase letter
23
+ * and contains only lowercase letters, numbers, and hyphens
24
+ * Requirements: 1.2 - Return error message with format examples when invalid
25
+ */
26
+ validate(featureName) {
27
+ // Check empty string
28
+ if (!featureName || featureName.length === 0) {
29
+ return {
30
+ valid: false,
31
+ error: 'Feature name cannot be empty. Use lowercase letters, numbers, and hyphens (e.g., "my-feature", "auth2").'
32
+ };
33
+ }
34
+ // Check pattern
35
+ if (!FEATURE_NAME_PATTERN.test(featureName)) {
36
+ return {
37
+ valid: false,
38
+ error: 'Feature name must start with a lowercase letter and contain only lowercase letters, numbers, and hyphens (e.g., "my-feature", "auth2").'
39
+ };
40
+ }
41
+ return {
42
+ valid: true,
43
+ error: undefined
44
+ };
45
+ }
46
+ };
47
+ }
48
+ //# sourceMappingURL=FeatureValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureValidator.js","sourceRoot":"","sources":["../../src/services/FeatureValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG,kCAAkC,CAAC;AAEhE;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL;;;;;WAKG;QACH,QAAQ,CAAC,WAAmB;YAC1B,qBAAqB;YACrB,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,0GAA0G;iBAClH,CAAC;YACJ,CAAC;YAED,gBAAgB;YAChB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5C,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,yIAAyI;iBACjJ,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,SAAS;aACjB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Deterministic Flow State Machine
3
+ * Requirements: 1.1, 1.2, 1.3, 1.6, 1.7
4
+ */
5
+ import type { FlowPhase, FlowEvent } from '../types/index.js';
6
+ /**
7
+ * Flow machine service interface
8
+ * Requirements: 1.1 - Deterministic TypeScript state machine
9
+ */
10
+ export interface FlowMachineService {
11
+ getPhase(): FlowPhase;
12
+ send(event: FlowEvent): FlowPhase;
13
+ canTransition(event: FlowEvent): boolean;
14
+ }
15
+ /**
16
+ * Pure transition function - deterministic state transitions
17
+ * Requirements: 1.1 - Pure transition function with no side effects
18
+ * Requirements: 1.2 - Application owns all flow control logic
19
+ */
20
+ export declare function transition(phase: FlowPhase, event: FlowEvent): FlowPhase;
21
+ /**
22
+ * Create flow machine service
23
+ * Requirements: 1.1 - Factory function for state machine
24
+ */
25
+ export declare function createFlowMachine(initialPhase?: FlowPhase): FlowMachineService;
26
+ //# sourceMappingURL=FlowStateMachine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowStateMachine.d.ts","sourceRoot":"","sources":["../../src/services/FlowStateMachine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,IAAI,SAAS,CAAC;IACtB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;CAC1C;AAYD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,CA0IxE;AAiBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAiB9E"}