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,135 @@
1
+ /**
2
+ * Task Runner Service
3
+ * Task 4.2: Implement task runner for incremental implementation execution
4
+ * Requirements: 5.2, 5.3, 5.4
5
+ */
6
+ /**
7
+ * Checkpoint interval - trigger checkpoint every N tasks
8
+ * Requirements: 5.5 - Checkpoint every 3 tasks
9
+ */
10
+ const CHECKPOINT_INTERVAL = 3;
11
+ /**
12
+ * Generate task prompt for agent invocation
13
+ */
14
+ function generateTaskPrompt(task, feature) {
15
+ return `Execute implementation task ${task.id} for feature "${feature}":
16
+
17
+ Task: ${task.title}
18
+
19
+ Description:
20
+ ${task.description}
21
+
22
+ Instructions:
23
+ 1. Implement the task as described
24
+ 2. Write tests before implementation (TDD)
25
+ 3. Ensure all existing tests pass
26
+ 4. Follow the project's coding standards
27
+ `;
28
+ }
29
+ /**
30
+ * Create task runner service
31
+ * Requirements: 5.2, 5.3, 5.4 - Factory function for task execution
32
+ */
33
+ export function createTaskRunner(agentInvoker, commitService, taskParser) {
34
+ let aborted = false;
35
+ return {
36
+ /**
37
+ * Execute tasks sequentially
38
+ * Requirements: 5.2 - Execute tasks in order via AgentInvoker
39
+ * Requirements: 5.3 - Commit after each successful task
40
+ * Requirements: 5.4 - Report progress to callback
41
+ */
42
+ async execute(options) {
43
+ aborted = false;
44
+ // Parse tasks from spec directory
45
+ const allTasks = await taskParser.parse(options.specDir);
46
+ const pendingTasks = taskParser.getPendingTasks(allTasks);
47
+ // Start from specified index
48
+ const tasksToExecute = pendingTasks.slice(options.startFromTask);
49
+ const totalTasks = pendingTasks.length;
50
+ if (tasksToExecute.length === 0) {
51
+ return {
52
+ success: true,
53
+ completedTasks: 0,
54
+ totalTasks,
55
+ pausedAt: undefined,
56
+ error: undefined
57
+ };
58
+ }
59
+ let completedCount = options.startFromTask;
60
+ for (const task of tasksToExecute) {
61
+ // Check for abort
62
+ if (aborted) {
63
+ return {
64
+ success: false,
65
+ completedTasks: completedCount,
66
+ totalTasks,
67
+ pausedAt: undefined,
68
+ error: 'Execution aborted'
69
+ };
70
+ }
71
+ // Invoke agent for task
72
+ const prompt = generateTaskPrompt(task, options.feature);
73
+ const result = await agentInvoker.invoke({
74
+ prompt,
75
+ workingDirectory: options.workingDir,
76
+ skipPermissions: options.flags.skipPermissions,
77
+ tier: options.flags.tier
78
+ });
79
+ if (!result.success) {
80
+ return {
81
+ success: false,
82
+ completedTasks: completedCount,
83
+ totalTasks,
84
+ pausedAt: undefined,
85
+ error: result.stderr || 'Agent execution failed'
86
+ };
87
+ }
88
+ // Commit changes after successful task
89
+ const commitMessage = commitService.formatTaskCommitMessage(options.feature, completedCount + 1, task.title);
90
+ await commitService.stageAndCommit(options.workingDir, commitMessage);
91
+ completedCount++;
92
+ // Report progress
93
+ options.onProgress(completedCount, totalTasks, task);
94
+ // Check for checkpoint (every 3 tasks)
95
+ if (completedCount % CHECKPOINT_INTERVAL === 0) {
96
+ const decision = await options.onCheckpoint(completedCount, totalTasks);
97
+ if (decision === 'pause') {
98
+ return {
99
+ success: true,
100
+ completedTasks: completedCount,
101
+ totalTasks,
102
+ pausedAt: completedCount,
103
+ error: undefined
104
+ };
105
+ }
106
+ if (decision === 'abort') {
107
+ return {
108
+ success: false,
109
+ completedTasks: completedCount,
110
+ totalTasks,
111
+ pausedAt: undefined,
112
+ error: 'Execution aborted by user'
113
+ };
114
+ }
115
+ }
116
+ }
117
+ return {
118
+ success: true,
119
+ completedTasks: completedCount,
120
+ totalTasks,
121
+ pausedAt: undefined,
122
+ error: undefined
123
+ };
124
+ },
125
+ /**
126
+ * Abort running task execution
127
+ * Requirements: 5.6 - Allow abort at any point
128
+ */
129
+ abort() {
130
+ aborted = true;
131
+ agentInvoker.abort();
132
+ }
133
+ };
134
+ }
135
+ //# sourceMappingURL=TaskRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../src/services/TaskRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Template service for file extraction and transformation
3
+ * Requirements: 1.3, 2.1-2.7, 3.1-3.6
4
+ */
5
+ import type { CodingAgent } from '../types/index.js';
6
+ /**
7
+ * Structure creation result
8
+ */
9
+ export interface StructureResult {
10
+ readonly createdDirs: readonly string[];
11
+ readonly createdFiles: readonly string[];
12
+ }
13
+ /**
14
+ * Stack template application options
15
+ */
16
+ export interface StackTemplateOptions {
17
+ readonly sourceDir: string;
18
+ readonly targetDir: string;
19
+ readonly stack: string;
20
+ readonly variables: Record<string, string>;
21
+ }
22
+ /**
23
+ * Tarball extraction options
24
+ */
25
+ export interface ExtractOptions {
26
+ readonly tarballPath: string;
27
+ readonly targetDir: string;
28
+ readonly onProgress?: (file: string) => void;
29
+ }
30
+ /**
31
+ * Framework installation options
32
+ */
33
+ export interface InstallFrameworkOptions {
34
+ readonly sourceDir: string;
35
+ readonly targetDir: string;
36
+ readonly variables?: Record<string, string>;
37
+ readonly agent?: CodingAgent;
38
+ }
39
+ /**
40
+ * Template service interface
41
+ * Requirements: 1.3, 2.1-2.7, 3.1-3.6
42
+ */
43
+ export interface TemplateService {
44
+ /**
45
+ * Extract tarball and transform contents
46
+ * - Extracts to targetDir/.red64/
47
+ * - Renames kiro references to red64
48
+ */
49
+ extract(options: ExtractOptions): Promise<StructureResult>;
50
+ /**
51
+ * Create unified directory structure
52
+ */
53
+ createStructure(targetDir: string): Promise<StructureResult>;
54
+ /**
55
+ * Install the full framework from source to target
56
+ * Copies framework/.red64/ to target/.red64/
57
+ */
58
+ installFramework(options: InstallFrameworkOptions): Promise<StructureResult>;
59
+ /**
60
+ * Apply stack-specific steering templates
61
+ */
62
+ applyStackTemplates(options: StackTemplateOptions): Promise<readonly string[]>;
63
+ /**
64
+ * List available stacks in extracted source
65
+ */
66
+ listStacks(sourceDir: string): Promise<readonly string[]>;
67
+ }
68
+ /**
69
+ * Create template service
70
+ * Task 2.3, 3.1, 3.2: Template service factory
71
+ */
72
+ export declare function createTemplateService(): TemplateService;
73
+ //# sourceMappingURL=TemplateService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateService.d.ts","sourceRoot":"","sources":["../../src/services/TemplateService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA4BrD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE3D;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE7D;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE7E;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAE/E;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CAC3D;AAgJD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAuIvD"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Template service for file extraction and transformation
3
+ * Requirements: 1.3, 2.1-2.7, 3.1-3.6
4
+ */
5
+ import { mkdir, readFile, writeFile, readdir, access, stat } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ /**
8
+ * Configuration for each supported coding agent
9
+ */
10
+ const AGENT_CONFIGS = {
11
+ claude: {
12
+ configDir: '.claude',
13
+ instructionFile: 'CLAUDE.md'
14
+ },
15
+ gemini: {
16
+ configDir: '', // Gemini doesn't use a hidden config directory
17
+ instructionFile: 'GEMINI.md'
18
+ },
19
+ codex: {
20
+ configDir: '.codex',
21
+ instructionFile: 'AGENTS.md'
22
+ }
23
+ };
24
+ /**
25
+ * The unified directory structure to create
26
+ * Requirements: 2.1-2.6
27
+ */
28
+ const STRUCTURE_DIRS = [
29
+ '.red64',
30
+ '.red64/steering',
31
+ '.red64/specs',
32
+ '.red64/templates',
33
+ '.red64/settings',
34
+ '.red64/settings/rules',
35
+ '.red64/settings/templates'
36
+ ];
37
+ /**
38
+ * Perform kiro-to-red64 renaming in content
39
+ * Task 3.1: Case-aware string replacement
40
+ */
41
+ function transformContent(content) {
42
+ return content
43
+ // Directory references
44
+ .replace(/\.kiro\//g, '.red64/')
45
+ .replace(/\.kiro(?=[^/a-z]|$)/g, '.red64')
46
+ // Slash command references
47
+ .replace(/\/kiro:/g, '/red64:')
48
+ // Hyphenated references (kiro-cli, kiro-spec, etc.)
49
+ .replace(/kiro-/g, 'red64-')
50
+ // Capitalized references
51
+ .replace(/Kiro/g, 'Red64')
52
+ // All caps references
53
+ .replace(/KIRO/g, 'RED64')
54
+ // Standalone lowercase
55
+ .replace(/\bkiro\b/g, 'red64');
56
+ }
57
+ /**
58
+ * Replace template variables in content
59
+ * Variables are in format {{variableName}}
60
+ */
61
+ function replaceVariables(content, variables) {
62
+ let result = content;
63
+ for (const [key, value] of Object.entries(variables)) {
64
+ const pattern = new RegExp(`\\{\\{${key}\\}\\}`, 'g');
65
+ result = result.replace(pattern, value);
66
+ }
67
+ return result;
68
+ }
69
+ /**
70
+ * Check if path exists
71
+ */
72
+ async function pathExists(path) {
73
+ try {
74
+ await access(path);
75
+ return true;
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ }
81
+ /**
82
+ * Check if path is a directory
83
+ */
84
+ async function isDirectory(path) {
85
+ try {
86
+ const stats = await stat(path);
87
+ return stats.isDirectory();
88
+ }
89
+ catch {
90
+ return false;
91
+ }
92
+ }
93
+ /**
94
+ * Copy framework directory recursively, tracking created dirs and files
95
+ */
96
+ async function copyFrameworkDir(srcDir, destDir, variables, createdDirs, createdFiles, relativePath = '') {
97
+ await mkdir(destDir, { recursive: true });
98
+ if (relativePath) {
99
+ createdDirs.push(relativePath);
100
+ }
101
+ const entries = await readdir(srcDir, { withFileTypes: true });
102
+ for (const entry of entries) {
103
+ const srcPath = join(srcDir, entry.name);
104
+ const destPath = join(destDir, entry.name);
105
+ const entryRelPath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
106
+ if (entry.isDirectory()) {
107
+ await copyFrameworkDir(srcPath, destPath, variables, createdDirs, createdFiles, entryRelPath);
108
+ }
109
+ else if (entry.isFile()) {
110
+ let content = await readFile(srcPath, 'utf-8');
111
+ content = replaceVariables(content, variables);
112
+ await writeFile(destPath, content, 'utf-8');
113
+ createdFiles.push(entryRelPath);
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Copy directory recursively with transformations
119
+ */
120
+ async function copyDirWithTransform(srcDir, destDir, variables) {
121
+ const copiedFiles = [];
122
+ // Ensure destination exists
123
+ await mkdir(destDir, { recursive: true });
124
+ const entries = await readdir(srcDir, { withFileTypes: true });
125
+ for (const entry of entries) {
126
+ const srcPath = join(srcDir, entry.name);
127
+ const destPath = join(destDir, entry.name);
128
+ if (entry.isDirectory()) {
129
+ // Recursively copy subdirectories
130
+ const subFiles = await copyDirWithTransform(srcPath, destPath, variables);
131
+ copiedFiles.push(...subFiles);
132
+ }
133
+ else if (entry.isFile()) {
134
+ // Read, transform, and write file
135
+ let content = await readFile(srcPath, 'utf-8');
136
+ content = transformContent(content);
137
+ content = replaceVariables(content, variables);
138
+ await writeFile(destPath, content, 'utf-8');
139
+ copiedFiles.push(entry.name);
140
+ }
141
+ }
142
+ return copiedFiles;
143
+ }
144
+ /**
145
+ * Create template service
146
+ * Task 2.3, 3.1, 3.2: Template service factory
147
+ */
148
+ export function createTemplateService() {
149
+ return {
150
+ async extract(_options) {
151
+ // Note: Full tarball extraction will be implemented separately
152
+ // This placeholder allows testing the interface
153
+ const createdDirs = [];
154
+ const createdFiles = [];
155
+ return { createdDirs, createdFiles };
156
+ },
157
+ async createStructure(targetDir) {
158
+ const createdDirs = [];
159
+ const createdFiles = [];
160
+ // Create all required directories
161
+ for (const dir of STRUCTURE_DIRS) {
162
+ const fullPath = join(targetDir, dir);
163
+ await mkdir(fullPath, { recursive: true });
164
+ createdDirs.push(dir);
165
+ }
166
+ return { createdDirs, createdFiles };
167
+ },
168
+ async installFramework(options) {
169
+ const { sourceDir, targetDir, variables = {}, agent = 'claude' } = options;
170
+ const createdDirs = [];
171
+ const createdFiles = [];
172
+ const agentConfig = AGENT_CONFIGS[agent];
173
+ const agentSourceDir = join(sourceDir, 'agents', agent);
174
+ // 1. Copy agent-specific config directory (e.g., .claude/, .codex/)
175
+ if (agentConfig.configDir) {
176
+ const configSrc = join(agentSourceDir, agentConfig.configDir);
177
+ const configDest = join(targetDir, agentConfig.configDir);
178
+ if (await pathExists(configSrc)) {
179
+ await copyFrameworkDir(configSrc, configDest, variables, createdDirs, createdFiles);
180
+ }
181
+ }
182
+ // 2. Copy shared .red64/ directory (settings, templates)
183
+ const red64Src = join(sourceDir, '.red64');
184
+ const red64Dest = join(targetDir, '.red64');
185
+ if (await pathExists(red64Src)) {
186
+ await copyFrameworkDir(red64Src, red64Dest, variables, createdDirs, createdFiles);
187
+ }
188
+ else {
189
+ // Fall back to creating empty structure if framework not found
190
+ return this.createStructure(targetDir);
191
+ }
192
+ // 3. Copy agent-specific instruction file (e.g., CLAUDE.md, GEMINI.md, AGENTS.md)
193
+ const instructionSrc = join(agentSourceDir, 'docs', agentConfig.instructionFile);
194
+ const instructionDest = join(targetDir, agentConfig.instructionFile);
195
+ if (await pathExists(instructionSrc)) {
196
+ let content = await readFile(instructionSrc, 'utf-8');
197
+ content = replaceVariables(content, variables);
198
+ await writeFile(instructionDest, content, 'utf-8');
199
+ createdFiles.push(agentConfig.instructionFile);
200
+ }
201
+ // 4. For Gemini: Copy commands.toml if present
202
+ if (agent === 'gemini') {
203
+ const tomlSrc = join(agentSourceDir, 'commands.toml');
204
+ const tomlDest = join(targetDir, 'commands.toml');
205
+ if (await pathExists(tomlSrc)) {
206
+ let content = await readFile(tomlSrc, 'utf-8');
207
+ content = replaceVariables(content, variables);
208
+ await writeFile(tomlDest, content, 'utf-8');
209
+ createdFiles.push('commands.toml');
210
+ }
211
+ }
212
+ // 5. Ensure additional directories exist (specs, steering)
213
+ const additionalDirs = ['.red64/specs', '.red64/steering'];
214
+ for (const dir of additionalDirs) {
215
+ const fullPath = join(targetDir, dir);
216
+ if (!(await pathExists(fullPath))) {
217
+ await mkdir(fullPath, { recursive: true });
218
+ createdDirs.push(dir);
219
+ }
220
+ }
221
+ return { createdDirs, createdFiles };
222
+ },
223
+ async applyStackTemplates(options) {
224
+ const { sourceDir, targetDir, stack, variables } = options;
225
+ const stacksDir = join(sourceDir, 'stacks');
226
+ // Ensure steering directory exists
227
+ const steeringDir = join(targetDir, '.red64', 'steering');
228
+ await mkdir(steeringDir, { recursive: true });
229
+ // Try to find the stack directory
230
+ let stackDir = join(stacksDir, stack);
231
+ let stackExists = await isDirectory(stackDir);
232
+ // Fall back to generic if stack not found
233
+ if (!stackExists) {
234
+ stackDir = join(stacksDir, 'generic');
235
+ stackExists = await isDirectory(stackDir);
236
+ }
237
+ if (!stackExists) {
238
+ return [];
239
+ }
240
+ // Copy and transform files
241
+ const copiedFiles = await copyDirWithTransform(stackDir, steeringDir, variables);
242
+ return copiedFiles;
243
+ },
244
+ async listStacks(sourceDir) {
245
+ const stacksDir = join(sourceDir, 'stacks');
246
+ if (!(await pathExists(stacksDir))) {
247
+ return [];
248
+ }
249
+ try {
250
+ const entries = await readdir(stacksDir, { withFileTypes: true });
251
+ const stacks = entries
252
+ .filter(entry => entry.isDirectory())
253
+ .map(entry => entry.name)
254
+ .sort();
255
+ return stacks;
256
+ }
257
+ catch {
258
+ return [];
259
+ }
260
+ }
261
+ };
262
+ }
263
+ //# sourceMappingURL=TemplateService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateService.js","sourceRoot":"","sources":["../../src/services/TemplateService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Worktree Service
3
+ * Task 1.2: Build worktree service for git worktree operations
4
+ * Requirements: 1.3, 1.4
5
+ */
6
+ /**
7
+ * Worktree information
8
+ * Requirements: 1.3 - Check for existing worktree
9
+ */
10
+ export interface WorktreeInfo {
11
+ readonly path: string;
12
+ readonly branch: string;
13
+ readonly exists: boolean;
14
+ }
15
+ /**
16
+ * Worktree operation result
17
+ * Requirements: 1.4 - Create worktree with branch
18
+ */
19
+ export interface WorktreeResult {
20
+ readonly success: boolean;
21
+ readonly path: string | undefined;
22
+ readonly error: string | undefined;
23
+ }
24
+ /**
25
+ * Worktree service interface
26
+ * Requirements: 1.3, 1.4
27
+ */
28
+ export interface WorktreeServiceInterface {
29
+ check(repoPath: string, feature: string): Promise<WorktreeInfo>;
30
+ create(repoPath: string, feature: string): Promise<WorktreeResult>;
31
+ remove(repoPath: string, feature: string, force?: boolean): Promise<WorktreeResult>;
32
+ list(repoPath: string): Promise<readonly WorktreeInfo[]>;
33
+ }
34
+ /**
35
+ * Sanitize feature name for use in git branch names and paths
36
+ * - Replace spaces with hyphens
37
+ * - Remove invalid characters
38
+ * - Convert to lowercase
39
+ */
40
+ export declare function sanitizeFeatureName(feature: string): string;
41
+ /**
42
+ * Get the worktrees root directory (sibling to repo)
43
+ * Following GitLens/VSCode convention: ../repo-name.worktrees/
44
+ */
45
+ export declare function getWorktreesRoot(repoPath: string): string;
46
+ /**
47
+ * Create worktree service
48
+ * Requirements: 1.3, 1.4 - Factory function for git worktree operations
49
+ */
50
+ export declare function createWorktreeService(): WorktreeServiceInterface;
51
+ //# sourceMappingURL=WorktreeService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeService.d.ts","sourceRoot":"","sources":["../../src/services/WorktreeService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACnE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACpF,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;CAC1D;AAiFD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIzD;AAiBD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,wBAAwB,CAiHhE"}