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,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Select } from '@inkjs/ui';
3
+ /**
4
+ * Interactive selection menu for approval gates
5
+ * Requirements: 6.5 - Support keyboard navigation
6
+ * Requirements: 6.6 - Render approval gates as interactive selection menus
7
+ */
8
+ export function SelectMenu({ items, onSelect }) {
9
+ const options = items.map(item => ({
10
+ label: item.label,
11
+ value: item.value
12
+ }));
13
+ const handleSelect = (value) => {
14
+ const selectedItem = items.find(item => item.value === value);
15
+ if (selectedItem) {
16
+ onSelect(selectedItem);
17
+ }
18
+ };
19
+ return (_jsx(Select, { options: options, onChange: handleSelect }));
20
+ }
21
+ //# sourceMappingURL=SelectMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectMenu.js","sourceRoot":"","sources":["../../../src/components/ui/SelectMenu.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAkBnC;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAa,EACrC,KAAK,EACL,QAAQ,EACW;IACnB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAe;KAC5B,CAAC,CAAC,CAAC;IAEJ,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAC9D,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,YAAY,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,MAAM,IACL,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,GACtB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Spinner component wrapper
3
+ * Requirements: 6.2
4
+ */
5
+ import React from 'react';
6
+ /**
7
+ * Props for Spinner component
8
+ */
9
+ interface SpinnerProps {
10
+ readonly label?: string;
11
+ }
12
+ /**
13
+ * Loading indicator using @inkjs/ui Spinner
14
+ * Requirements: 6.2 - Display spinners during async operations
15
+ */
16
+ export declare const Spinner: React.FC<SpinnerProps>;
17
+ export {};
18
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Spinner.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,UAAU,YAAY;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAE1C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Spinner as InkSpinner } from '@inkjs/ui';
3
+ /**
4
+ * Loading indicator using @inkjs/ui Spinner
5
+ * Requirements: 6.2 - Display spinners during async operations
6
+ */
7
+ export const Spinner = ({ label }) => {
8
+ return _jsx(InkSpinner, { label: label });
9
+ };
10
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../src/components/ui/Spinner.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AASlD;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAA2B,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC3D,OAAO,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;AACtC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * StatusLine component with color coding
3
+ * Requirements: 6.1
4
+ */
5
+ import React from 'react';
6
+ import type { Status } from '../../types/index.js';
7
+ /**
8
+ * Props for StatusLine component
9
+ */
10
+ interface StatusLineProps {
11
+ readonly label: string;
12
+ readonly status: Status;
13
+ readonly message?: string;
14
+ }
15
+ /**
16
+ * Status display with color coding
17
+ * Requirements: 6.1 - Use color coding for status display
18
+ */
19
+ export declare const StatusLine: React.FC<StatusLineProps>;
20
+ export {};
21
+ //# sourceMappingURL=StatusLine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusLine.d.ts","sourceRoot":"","sources":["../../../src/components/ui/StatusLine.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD;;GAEG;AACH,UAAU,eAAe;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAsBD;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAchD,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ /**
4
+ * Map status to color
5
+ * Requirements: 6.1 - green (success), red (errors), yellow (warnings/pending)
6
+ */
7
+ function getStatusColor(status) {
8
+ switch (status) {
9
+ case 'success':
10
+ return 'green';
11
+ case 'error':
12
+ return 'red';
13
+ case 'warning':
14
+ case 'pending':
15
+ return 'yellow';
16
+ case 'running':
17
+ return 'cyan';
18
+ default:
19
+ return 'white';
20
+ }
21
+ }
22
+ /**
23
+ * Status display with color coding
24
+ * Requirements: 6.1 - Use color coding for status display
25
+ */
26
+ export const StatusLine = ({ label, status, message }) => {
27
+ const color = getStatusColor(status);
28
+ return (_jsxs(Box, { children: [_jsxs(Text, { children: [label, ": "] }), _jsx(Text, { color: color, children: status }), message && _jsxs(Text, { dimColor: true, children: [" - ", message] })] }));
29
+ };
30
+ //# sourceMappingURL=StatusLine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusLine.js","sourceRoot":"","sources":["../../../src/components/ui/StatusLine.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC;;;GAGG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EACpD,KAAK,EACL,MAAM,EACN,OAAO,EACR,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAErC,OAAO,CACL,MAAC,GAAG,eACF,MAAC,IAAI,eAAE,KAAK,UAAU,EACtB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,MAAM,GAAQ,EAClC,OAAO,IAAI,MAAC,IAAI,IAAC,QAAQ,0BAAK,OAAO,IAAQ,IAC1C,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * UI components index
3
+ */
4
+ export { StatusLine } from './StatusLine.js';
5
+ export { Header } from './Header.js';
6
+ export { OutputRegion } from './OutputRegion.js';
7
+ export { Spinner } from './Spinner.js';
8
+ export { ProgressBar } from './ProgressBar.js';
9
+ export { SelectMenu, type SelectMenuItem } from './SelectMenu.js';
10
+ export { PhaseProgressView, type PhaseProgressViewProps } from './PhaseProgressView.js';
11
+ export { FeatureSidebar, type FeatureSidebarProps, type CodingAgent } from './FeatureSidebar.js';
12
+ export { FlowTable, type FlowTableProps } from './FlowTable.js';
13
+ export { ErrorDisplay, type ErrorDisplayProps } from './ErrorDisplay.js';
14
+ export { ErrorRecoveryPrompt, type ErrorRecoveryPromptProps, type RecoveryOption, type ErrorType } from './ErrorRecoveryPrompt.js';
15
+ export { ErrorBoundary, type ErrorBoundaryProps } from './ErrorBoundary.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * UI components index
3
+ */
4
+ export { StatusLine } from './StatusLine.js';
5
+ export { Header } from './Header.js';
6
+ export { OutputRegion } from './OutputRegion.js';
7
+ export { Spinner } from './Spinner.js';
8
+ export { ProgressBar } from './ProgressBar.js';
9
+ export { SelectMenu } from './SelectMenu.js';
10
+ export { PhaseProgressView } from './PhaseProgressView.js';
11
+ export { FeatureSidebar } from './FeatureSidebar.js';
12
+ export { FlowTable } from './FlowTable.js';
13
+ export { ErrorDisplay } from './ErrorDisplay.js';
14
+ export { ErrorRecoveryPrompt } from './ErrorRecoveryPrompt.js';
15
+ export { ErrorBoundary } from './ErrorBoundary.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,cAAc,EAA8C,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,mBAAmB,EAIpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Agent Invoker service for Claude CLI execution
3
+ * Requirements: 7.1-7.7, 2.1-2.6
4
+ * Supports both direct execution and Docker sandbox mode
5
+ */
6
+ import type { AgentInvokeOptions, AgentResult } from '../types/index.js';
7
+ /**
8
+ * Agent invoker service interface
9
+ * Requirements: 7.1 - Wrap Claude CLI execution as typed TypeScript interface
10
+ */
11
+ export interface AgentInvokerService {
12
+ invoke(options: AgentInvokeOptions): Promise<AgentResult>;
13
+ abort(): void;
14
+ }
15
+ /**
16
+ * Create agent invoker service
17
+ * Requirements: 7.1 - Factory function for agent invocation
18
+ */
19
+ export declare function createAgentInvoker(): AgentInvokerService;
20
+ //# sourceMappingURL=AgentInvoker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentInvoker.d.ts","sourceRoot":"","sources":["../../src/services/AgentInvoker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA6DzE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAgJxD"}
@@ -0,0 +1,282 @@
1
+ /**
2
+ * Agent Invoker service for Claude CLI execution
3
+ * Requirements: 7.1-7.7, 2.1-2.6
4
+ * Supports both direct execution and Docker sandbox mode
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ import { readFileSync, existsSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { createClaudeErrorDetector } from './ClaudeErrorDetector.js';
10
+ const SANDBOX_IMAGE = 'red64-sandbox:latest';
11
+ /**
12
+ * Try to read API key from Claude config directory
13
+ * Claude stores credentials in various files within the config dir
14
+ */
15
+ function readApiKeyFromConfig(configDir) {
16
+ // Try common credential file locations
17
+ const credentialPaths = [
18
+ join(configDir, 'credentials.json'),
19
+ join(configDir, '.credentials.json'),
20
+ join(configDir, 'settings.json'),
21
+ join(configDir, 'config.json'),
22
+ ];
23
+ for (const credPath of credentialPaths) {
24
+ if (existsSync(credPath)) {
25
+ try {
26
+ const content = readFileSync(credPath, 'utf-8');
27
+ const data = JSON.parse(content);
28
+ // Check various possible key names
29
+ const apiKey = data.apiKey || data.api_key || data.ANTHROPIC_API_KEY || data.anthropicApiKey;
30
+ if (apiKey && typeof apiKey === 'string' && apiKey.startsWith('sk-')) {
31
+ return apiKey;
32
+ }
33
+ }
34
+ catch {
35
+ // Continue to next file
36
+ }
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ /**
42
+ * Get API key from environment or Claude config
43
+ */
44
+ function getApiKey(tier) {
45
+ // First check environment variable
46
+ if (process.env.ANTHROPIC_API_KEY) {
47
+ return process.env.ANTHROPIC_API_KEY;
48
+ }
49
+ const homeDir = process.env.HOME ?? process.env.USERPROFILE ?? '';
50
+ if (!homeDir)
51
+ return null;
52
+ // Try tier-specific config first
53
+ if (tier) {
54
+ const tierConfig = join(homeDir, `.claude-${tier}`);
55
+ const key = readApiKeyFromConfig(tierConfig);
56
+ if (key)
57
+ return key;
58
+ }
59
+ // Try default Claude config
60
+ const defaultConfig = join(homeDir, '.claude');
61
+ return readApiKeyFromConfig(defaultConfig);
62
+ }
63
+ /**
64
+ * Create agent invoker service
65
+ * Requirements: 7.1 - Factory function for agent invocation
66
+ */
67
+ export function createAgentInvoker() {
68
+ let currentProcess = null;
69
+ let aborted = false;
70
+ const errorDetector = createClaudeErrorDetector();
71
+ return {
72
+ /**
73
+ * Invoke Claude CLI with options
74
+ * Requirements: 7.2 - Spawn Claude CLI as child process
75
+ * Requirements: 7.3, 7.4 - Pass skip-permissions and tier configuration
76
+ */
77
+ async invoke(options) {
78
+ aborted = false;
79
+ // Use Docker sandbox if enabled
80
+ if (options.sandbox) {
81
+ return invokeInDocker(options, () => currentProcess, (p) => { currentProcess = p; }, () => aborted, errorDetector);
82
+ }
83
+ return new Promise((resolve) => {
84
+ // Build command arguments
85
+ const args = ['-p', options.prompt];
86
+ // Add model flag if specified
87
+ if (options.model) {
88
+ args.push('--model', options.model);
89
+ }
90
+ // Add skip-permissions flag if configured
91
+ // Requirements: 7.3 - Pass --skip-permissions flag to Claude CLI when configured
92
+ if (options.skipPermissions) {
93
+ args.push('--dangerously-skip-permissions');
94
+ }
95
+ // Build environment
96
+ const env = { ...process.env };
97
+ // Set CLAUDE_CONFIG_DIR if tier is specified
98
+ // Requirements: 7.4 - Set CLAUDE_CONFIG_DIR environment variable when tier is specified
99
+ // Format: --tier=red64 -> CLAUDE_CONFIG_DIR=~/.claude-red64
100
+ if (options.tier) {
101
+ const homeDir = process.env.HOME ?? process.env.USERPROFILE ?? '~';
102
+ env.CLAUDE_CONFIG_DIR = `${homeDir}/.claude-${options.tier}`;
103
+ }
104
+ // Spawn Claude CLI
105
+ // Requirements: 7.2 - Use spawn() for streaming output
106
+ currentProcess = spawn('claude', args, {
107
+ cwd: options.workingDirectory,
108
+ env,
109
+ stdio: ['pipe', 'pipe', 'pipe']
110
+ });
111
+ // Close stdin immediately - Claude CLI doesn't need input
112
+ currentProcess.stdin?.end();
113
+ let stdout = '';
114
+ let stderr = '';
115
+ let timedOut = false;
116
+ // Handle timeout (default 10 minutes for long-running tasks)
117
+ const timeoutMs = options.timeout ?? 600000;
118
+ const timeoutId = setTimeout(() => {
119
+ timedOut = true;
120
+ if (currentProcess) {
121
+ currentProcess.kill('SIGTERM');
122
+ }
123
+ }, timeoutMs);
124
+ // Capture stdout
125
+ // Requirements: 7.5 - Capture stdout/stderr and return them to calling code
126
+ currentProcess.stdout?.on('data', (data) => {
127
+ const chunk = data.toString();
128
+ stdout += chunk;
129
+ // Stream output to callback
130
+ // Requirements: 7.7 - Enable UI to display agent output as it streams
131
+ if (options.onOutput) {
132
+ options.onOutput(chunk);
133
+ }
134
+ });
135
+ // Capture stderr
136
+ currentProcess.stderr?.on('data', (data) => {
137
+ const chunk = data.toString();
138
+ stderr += chunk;
139
+ // Stream errors to callback
140
+ if (options.onError) {
141
+ options.onError(chunk);
142
+ }
143
+ });
144
+ // Handle process close
145
+ currentProcess.on('close', (code) => {
146
+ clearTimeout(timeoutId);
147
+ const exitCode = code ?? -1;
148
+ const success = exitCode === 0 && !timedOut && !aborted;
149
+ // Detect Claude-specific errors
150
+ const claudeError = !success ? errorDetector.detect(stdout, stderr) : undefined;
151
+ // Requirements: 7.6 - Return typed result indicating success/failure
152
+ resolve({
153
+ success,
154
+ exitCode,
155
+ stdout,
156
+ stderr,
157
+ timedOut,
158
+ claudeError: claudeError ?? undefined
159
+ });
160
+ currentProcess = null;
161
+ });
162
+ // Handle spawn errors
163
+ currentProcess.on('error', (error) => {
164
+ clearTimeout(timeoutId);
165
+ resolve({
166
+ success: false,
167
+ exitCode: -1,
168
+ stdout,
169
+ stderr: stderr || error.message,
170
+ timedOut: false
171
+ });
172
+ currentProcess = null;
173
+ });
174
+ });
175
+ },
176
+ /**
177
+ * Abort running agent process
178
+ * Requirements: 2.4, 2.6 - Terminate running agent process
179
+ */
180
+ abort() {
181
+ aborted = true;
182
+ if (currentProcess) {
183
+ currentProcess.kill('SIGTERM');
184
+ }
185
+ }
186
+ };
187
+ }
188
+ /**
189
+ * Invoke Claude CLI inside Docker sandbox
190
+ * Provides isolation for running with --dangerously-skip-permissions
191
+ */
192
+ function invokeInDocker(options, getProcess, setProcess, isAborted, errorDetector) {
193
+ return new Promise((resolve) => {
194
+ // Build docker run command
195
+ const dockerArgs = [
196
+ 'run',
197
+ '--rm', // Remove container after exit
198
+ '-w', '/workspace', // Working directory inside container
199
+ '-v', `${options.workingDirectory}:/workspace`, // Mount workspace
200
+ ];
201
+ // Get API key from env or Claude config files
202
+ const apiKey = getApiKey(options.tier);
203
+ if (apiKey) {
204
+ dockerArgs.push('-e', `ANTHROPIC_API_KEY=${apiKey}`);
205
+ }
206
+ // Don't mount the Claude config - let Claude create a fresh one inside container
207
+ // The API key is passed via env var, which is all that's needed
208
+ // Add image
209
+ dockerArgs.push(SANDBOX_IMAGE);
210
+ // Add claude command with args
211
+ // In sandbox, always use --dangerously-skip-permissions since it's isolated
212
+ dockerArgs.push('claude', '-p', options.prompt, '--dangerously-skip-permissions');
213
+ // Add model flag if specified
214
+ if (options.model) {
215
+ dockerArgs.push('--model', options.model);
216
+ }
217
+ const proc = spawn('docker', dockerArgs, {
218
+ stdio: ['pipe', 'pipe', 'pipe']
219
+ });
220
+ setProcess(proc);
221
+ // Close stdin immediately
222
+ proc.stdin?.end();
223
+ let stdout = '';
224
+ let stderr = '';
225
+ let timedOut = false;
226
+ // Handle timeout (default 10 minutes)
227
+ const timeoutMs = options.timeout ?? 600000;
228
+ const timeoutId = setTimeout(() => {
229
+ timedOut = true;
230
+ const p = getProcess();
231
+ if (p) {
232
+ p.kill('SIGTERM');
233
+ }
234
+ }, timeoutMs);
235
+ // Capture stdout
236
+ proc.stdout?.on('data', (data) => {
237
+ const chunk = data.toString();
238
+ stdout += chunk;
239
+ if (options.onOutput) {
240
+ options.onOutput(chunk);
241
+ }
242
+ });
243
+ // Capture stderr
244
+ proc.stderr?.on('data', (data) => {
245
+ const chunk = data.toString();
246
+ stderr += chunk;
247
+ if (options.onError) {
248
+ options.onError(chunk);
249
+ }
250
+ });
251
+ // Handle process close
252
+ proc.on('close', (code) => {
253
+ clearTimeout(timeoutId);
254
+ const exitCode = code ?? -1;
255
+ const success = exitCode === 0 && !timedOut && !isAborted();
256
+ // Detect Claude-specific errors
257
+ const claudeError = !success ? errorDetector.detect(stdout, stderr) : undefined;
258
+ resolve({
259
+ success,
260
+ exitCode,
261
+ stdout,
262
+ stderr,
263
+ timedOut,
264
+ claudeError: claudeError ?? undefined
265
+ });
266
+ setProcess(null);
267
+ });
268
+ // Handle spawn errors
269
+ proc.on('error', (error) => {
270
+ clearTimeout(timeoutId);
271
+ resolve({
272
+ success: false,
273
+ exitCode: -1,
274
+ stdout,
275
+ stderr: stderr || `Docker error: ${error.message}`,
276
+ timedOut: false
277
+ });
278
+ setProcess(null);
279
+ });
280
+ });
281
+ }
282
+ //# sourceMappingURL=AgentInvoker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentInvoker.js","sourceRoot":"","sources":["../../src/services/AgentInvoker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Branch Service
3
+ * Task 1.3: Implement branch management service
4
+ * Requirements: 4.2
5
+ */
6
+ /**
7
+ * Result of branch deletion operation
8
+ * Requirements: 4.2 - Report success/failure for branch operations
9
+ */
10
+ export interface BranchDeleteResult {
11
+ readonly success: boolean;
12
+ readonly error: string | undefined;
13
+ }
14
+ /**
15
+ * Branch service interface
16
+ * Requirements: 4.2 - Delete feature branches on abort
17
+ */
18
+ export interface BranchServiceInterface {
19
+ deleteLocal(branchName: string, force?: boolean): Promise<BranchDeleteResult>;
20
+ deleteRemote(branchName: string): Promise<BranchDeleteResult>;
21
+ exists(branchName: string): Promise<boolean>;
22
+ }
23
+ /**
24
+ * Create branch service
25
+ * Requirements: 4.2 - Factory function for branch operations
26
+ */
27
+ export declare function createBranchService(): BranchServiceInterface;
28
+ //# sourceMappingURL=BranchService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BranchService.d.ts","sourceRoot":"","sources":["../../src/services/BranchService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9E,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9D,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C;AAkDD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,sBAAsB,CAyE5D"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Branch Service
3
+ * Task 1.3: Implement branch management service
4
+ * Requirements: 4.2
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ /**
8
+ * Protected branch names that should never be deleted
9
+ */
10
+ const PROTECTED_BRANCHES = new Set(['main', 'master', 'develop', 'development', 'release']);
11
+ /**
12
+ * Check if a branch name is protected
13
+ */
14
+ function isProtectedBranch(branchName) {
15
+ return PROTECTED_BRANCHES.has(branchName.toLowerCase());
16
+ }
17
+ /**
18
+ * Execute git command and return result
19
+ */
20
+ function execGit(args) {
21
+ return new Promise((resolve) => {
22
+ const process = spawn('git', args, {
23
+ stdio: ['pipe', 'pipe', 'pipe']
24
+ });
25
+ let stdout = '';
26
+ let stderr = '';
27
+ process.stdout?.on('data', (data) => {
28
+ stdout += data.toString();
29
+ });
30
+ process.stderr?.on('data', (data) => {
31
+ stderr += data.toString();
32
+ });
33
+ process.on('close', (code) => {
34
+ resolve({ stdout, stderr, exitCode: code ?? 0 });
35
+ });
36
+ process.on('error', (error) => {
37
+ resolve({
38
+ stdout,
39
+ stderr: stderr || `git error: ${error.message}`,
40
+ exitCode: -1
41
+ });
42
+ });
43
+ });
44
+ }
45
+ /**
46
+ * Create branch service
47
+ * Requirements: 4.2 - Factory function for branch operations
48
+ */
49
+ export function createBranchService() {
50
+ return {
51
+ /**
52
+ * Delete a local branch
53
+ * Requirements: 4.2 - Delete local branch with optional force flag
54
+ */
55
+ async deleteLocal(branchName, force) {
56
+ // Never delete protected branches
57
+ if (isProtectedBranch(branchName)) {
58
+ return {
59
+ success: false,
60
+ error: `Cannot delete protected branch: ${branchName}`
61
+ };
62
+ }
63
+ const flag = force ? '-D' : '-d';
64
+ const result = await execGit(['branch', flag, branchName]);
65
+ if (result.exitCode !== 0) {
66
+ return {
67
+ success: false,
68
+ error: result.stderr || 'Failed to delete branch'
69
+ };
70
+ }
71
+ return {
72
+ success: true,
73
+ error: undefined
74
+ };
75
+ },
76
+ /**
77
+ * Delete a remote branch
78
+ * Requirements: 4.2 - Delete remote branch via git push
79
+ */
80
+ async deleteRemote(branchName) {
81
+ // Never delete protected branches
82
+ if (isProtectedBranch(branchName)) {
83
+ return {
84
+ success: false,
85
+ error: `Cannot delete protected branch: ${branchName}`
86
+ };
87
+ }
88
+ const result = await execGit(['push', 'origin', '--delete', branchName]);
89
+ if (result.exitCode !== 0) {
90
+ return {
91
+ success: false,
92
+ error: result.stderr || 'Failed to delete remote branch'
93
+ };
94
+ }
95
+ return {
96
+ success: true,
97
+ error: undefined
98
+ };
99
+ },
100
+ /**
101
+ * Check if a branch exists
102
+ * Requirements: 4.2 - Branch existence check before operations
103
+ */
104
+ async exists(branchName) {
105
+ const result = await execGit([
106
+ 'rev-parse',
107
+ '--verify',
108
+ `refs/heads/${branchName}`
109
+ ]);
110
+ return result.exitCode === 0;
111
+ }
112
+ };
113
+ }
114
+ //# sourceMappingURL=BranchService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BranchService.js","sourceRoot":"","sources":["../../src/services/BranchService.ts"],"names":[],"mappings":"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"}