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,197 @@
1
+ /**
2
+ * Claude API Health Check Service
3
+ * Verifies API connectivity and account status before starting flows
4
+ */
5
+ import { spawn } from 'node:child_process';
6
+ import { readFileSync, existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { createClaudeErrorDetector } from './ClaudeErrorDetector.js';
9
+ const SANDBOX_IMAGE = 'red64-sandbox:latest';
10
+ /**
11
+ * Read API key from Claude config directory
12
+ */
13
+ function readApiKeyFromConfig(configDir) {
14
+ const credentialPaths = [
15
+ join(configDir, 'credentials.json'),
16
+ join(configDir, '.credentials.json'),
17
+ join(configDir, 'settings.json'),
18
+ join(configDir, 'config.json'),
19
+ ];
20
+ for (const credPath of credentialPaths) {
21
+ if (existsSync(credPath)) {
22
+ try {
23
+ const content = readFileSync(credPath, 'utf-8');
24
+ const data = JSON.parse(content);
25
+ const apiKey = data.apiKey || data.api_key || data.ANTHROPIC_API_KEY || data.anthropicApiKey;
26
+ if (apiKey && typeof apiKey === 'string' && apiKey.startsWith('sk-')) {
27
+ return apiKey;
28
+ }
29
+ }
30
+ catch {
31
+ // Continue to next file
32
+ }
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ /**
38
+ * Get API key from environment or config
39
+ */
40
+ function getApiKey(tier) {
41
+ if (process.env.ANTHROPIC_API_KEY) {
42
+ return process.env.ANTHROPIC_API_KEY;
43
+ }
44
+ const homeDir = process.env.HOME ?? process.env.USERPROFILE ?? '';
45
+ if (!homeDir)
46
+ return null;
47
+ if (tier) {
48
+ const tierConfig = join(homeDir, `.claude-${tier}`);
49
+ const key = readApiKeyFromConfig(tierConfig);
50
+ if (key)
51
+ return key;
52
+ }
53
+ const defaultConfig = join(homeDir, '.claude');
54
+ return readApiKeyFromConfig(defaultConfig);
55
+ }
56
+ /**
57
+ * Create Claude health check service
58
+ */
59
+ export function createClaudeHealthCheck() {
60
+ const errorDetector = createClaudeErrorDetector();
61
+ return {
62
+ async check(options) {
63
+ const startTime = Date.now();
64
+ const timeoutMs = options?.timeoutMs ?? 30000; // 30 second timeout for health check
65
+ // Build environment
66
+ const env = { ...process.env };
67
+ if (options?.tier) {
68
+ const homeDir = process.env.HOME ?? process.env.USERPROFILE ?? '~';
69
+ env.CLAUDE_CONFIG_DIR = `${homeDir}/.claude-${options.tier}`;
70
+ }
71
+ // Minimal prompt that should succeed quickly if API is healthy
72
+ const healthPrompt = 'Reply with exactly: OK';
73
+ return new Promise((resolve) => {
74
+ let proc;
75
+ let stdout = '';
76
+ let stderr = '';
77
+ // Use Docker sandbox if enabled
78
+ if (options?.sandbox) {
79
+ const apiKey = getApiKey(options?.tier);
80
+ const dockerArgs = [
81
+ 'run',
82
+ '--rm',
83
+ '-w', '/workspace',
84
+ '-v', `${process.cwd()}:/workspace`,
85
+ ];
86
+ if (apiKey) {
87
+ dockerArgs.push('-e', `ANTHROPIC_API_KEY=${apiKey}`);
88
+ }
89
+ dockerArgs.push(SANDBOX_IMAGE);
90
+ dockerArgs.push('claude', '-p', healthPrompt, '--dangerously-skip-permissions');
91
+ proc = spawn('docker', dockerArgs, { stdio: ['pipe', 'pipe', 'pipe'] });
92
+ }
93
+ else {
94
+ proc = spawn('claude', ['-p', healthPrompt], {
95
+ env,
96
+ stdio: ['pipe', 'pipe', 'pipe']
97
+ });
98
+ }
99
+ // Close stdin
100
+ proc.stdin?.end();
101
+ // Set timeout
102
+ const timeoutId = setTimeout(() => {
103
+ proc.kill('SIGTERM');
104
+ resolve({
105
+ healthy: false,
106
+ message: 'Health check timed out. Claude API may be slow or unreachable.',
107
+ error: {
108
+ code: 'NETWORK_ERROR',
109
+ message: 'Health check timed out',
110
+ recoverable: true,
111
+ suggestion: 'Check your internet connection and try again'
112
+ },
113
+ durationMs: Date.now() - startTime
114
+ });
115
+ }, timeoutMs);
116
+ // Capture output
117
+ proc.stdout?.on('data', (data) => {
118
+ stdout += data.toString();
119
+ });
120
+ proc.stderr?.on('data', (data) => {
121
+ stderr += data.toString();
122
+ });
123
+ // Handle completion
124
+ proc.on('close', (code) => {
125
+ clearTimeout(timeoutId);
126
+ const durationMs = Date.now() - startTime;
127
+ // Check for known errors
128
+ const claudeError = errorDetector.detect(stdout, stderr);
129
+ if (claudeError) {
130
+ resolve({
131
+ healthy: false,
132
+ error: claudeError,
133
+ message: errorDetector.formatErrorMessage(claudeError),
134
+ durationMs
135
+ });
136
+ return;
137
+ }
138
+ // Check exit code
139
+ if (code !== 0) {
140
+ // Generic failure - extract first line of stderr or stdout
141
+ const errorLine = (stderr || stdout).trim().split('\n')[0] || 'Unknown error';
142
+ resolve({
143
+ healthy: false,
144
+ error: {
145
+ code: 'UNKNOWN',
146
+ message: errorLine,
147
+ recoverable: false,
148
+ suggestion: 'Check Claude CLI configuration and try again'
149
+ },
150
+ message: errorLine,
151
+ durationMs
152
+ });
153
+ return;
154
+ }
155
+ // Success
156
+ resolve({
157
+ healthy: true,
158
+ message: 'API is ready',
159
+ durationMs
160
+ });
161
+ });
162
+ // Handle spawn errors
163
+ proc.on('error', (error) => {
164
+ clearTimeout(timeoutId);
165
+ const durationMs = Date.now() - startTime;
166
+ // Check if Claude CLI is not installed
167
+ if (error.message.includes('ENOENT')) {
168
+ resolve({
169
+ healthy: false,
170
+ error: {
171
+ code: 'AUTH_FAILED',
172
+ message: 'Claude CLI not found',
173
+ recoverable: false,
174
+ suggestion: 'Install Claude CLI: npm install -g @anthropic-ai/claude-cli'
175
+ },
176
+ message: 'Claude CLI is not installed',
177
+ durationMs
178
+ });
179
+ return;
180
+ }
181
+ resolve({
182
+ healthy: false,
183
+ error: {
184
+ code: 'NETWORK_ERROR',
185
+ message: error.message,
186
+ recoverable: true,
187
+ suggestion: 'Check your system configuration'
188
+ },
189
+ message: error.message,
190
+ durationMs
191
+ });
192
+ });
193
+ });
194
+ }
195
+ };
196
+ }
197
+ //# sourceMappingURL=ClaudeHealthCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeHealthCheck.js","sourceRoot":"","sources":["../../src/services/ClaudeHealthCheck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Commit Service
3
+ * Task 3.1: Create commit service with stage and commit capabilities
4
+ * Requirements: 1.6, 5.3, 5.7
5
+ */
6
+ /**
7
+ * Commit result interface
8
+ * Requirements: 5.3 - Return commit hash on success
9
+ */
10
+ export interface CommitResult {
11
+ readonly success: boolean;
12
+ readonly commitHash: string | undefined;
13
+ readonly error: string | undefined;
14
+ }
15
+ /**
16
+ * Commit service interface
17
+ * Requirements: 1.6, 5.3, 5.7
18
+ */
19
+ export interface CommitServiceInterface {
20
+ stageAll(workingDir: string): Promise<CommitResult>;
21
+ commit(workingDir: string, message: string): Promise<CommitResult>;
22
+ stageAndCommit(workingDir: string, message: string): Promise<CommitResult>;
23
+ formatTaskCommitMessage(feature: string, taskIndex: number, taskTitle: string): string;
24
+ formatPhaseCommitMessage(feature: string, phase: string): string;
25
+ /**
26
+ * Count commits on current branch since branching from base
27
+ * Returns 0 if unable to determine
28
+ */
29
+ countFeatureCommits(workingDir: string, baseBranch?: string): Promise<number>;
30
+ }
31
+ /**
32
+ * Create commit service
33
+ * Requirements: 1.6, 5.3, 5.7 - Factory function for git commit operations
34
+ */
35
+ export declare function createCommitService(): CommitServiceInterface;
36
+ //# sourceMappingURL=CommitService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommitService.d.ts","sourceRoot":"","sources":["../../src/services/CommitService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnE,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3E,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACvF,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACjE;;;OAGG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/E;AAyDD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,sBAAsB,CAqH5D"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Commit Service
3
+ * Task 3.1: Create commit service with stage and commit capabilities
4
+ * Requirements: 1.6, 5.3, 5.7
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ /**
8
+ * Execute git command and return result
9
+ */
10
+ function execGit(args, cwd) {
11
+ return new Promise((resolve) => {
12
+ const process = spawn('git', args, {
13
+ cwd,
14
+ stdio: ['pipe', 'pipe', 'pipe']
15
+ });
16
+ let stdout = '';
17
+ let stderr = '';
18
+ process.stdout?.on('data', (data) => {
19
+ stdout += data.toString();
20
+ });
21
+ process.stderr?.on('data', (data) => {
22
+ stderr += data.toString();
23
+ });
24
+ process.on('close', (code) => {
25
+ resolve({ stdout, stderr, exitCode: code ?? 0 });
26
+ });
27
+ process.on('error', (error) => {
28
+ resolve({
29
+ stdout,
30
+ stderr: stderr || `Git error: ${error.message}`,
31
+ exitCode: -1
32
+ });
33
+ });
34
+ });
35
+ }
36
+ /**
37
+ * Extract commit hash from git commit output
38
+ * Format: [branch hash] message
39
+ */
40
+ function extractCommitHash(output) {
41
+ // Match pattern like [main abc1234] or [feature/test deadbeef]
42
+ const match = output.match(/\[[\w\/-]+\s+([a-f0-9]+)\]/);
43
+ return match?.[1];
44
+ }
45
+ /**
46
+ * Check if output indicates no changes to commit
47
+ */
48
+ function isNothingToCommit(stderr) {
49
+ return stderr.includes('nothing to commit') || stderr.includes('working tree clean');
50
+ }
51
+ /**
52
+ * Create commit service
53
+ * Requirements: 1.6, 5.3, 5.7 - Factory function for git commit operations
54
+ */
55
+ export function createCommitService() {
56
+ return {
57
+ /**
58
+ * Stage all changes in working directory
59
+ * Requirements: 5.3 - Stage all changes using git add
60
+ */
61
+ async stageAll(workingDir) {
62
+ const result = await execGit(['add', '-A'], workingDir);
63
+ if (result.exitCode !== 0) {
64
+ return {
65
+ success: false,
66
+ commitHash: undefined,
67
+ error: result.stderr || 'Failed to stage changes'
68
+ };
69
+ }
70
+ return {
71
+ success: true,
72
+ commitHash: undefined,
73
+ error: undefined
74
+ };
75
+ },
76
+ /**
77
+ * Create commit with provided message
78
+ * Requirements: 5.3 - Create commit using git commit
79
+ * Requirements: 5.7 - Handle empty commits gracefully
80
+ */
81
+ async commit(workingDir, message) {
82
+ const result = await execGit(['commit', '-m', message], workingDir);
83
+ // Handle "nothing to commit" as success (no-op)
84
+ if (result.exitCode !== 0 && isNothingToCommit(result.stderr)) {
85
+ return {
86
+ success: true,
87
+ commitHash: undefined,
88
+ error: undefined
89
+ };
90
+ }
91
+ if (result.exitCode !== 0) {
92
+ return {
93
+ success: false,
94
+ commitHash: undefined,
95
+ error: result.stderr || 'Failed to commit changes'
96
+ };
97
+ }
98
+ const commitHash = extractCommitHash(result.stdout);
99
+ return {
100
+ success: true,
101
+ commitHash,
102
+ error: undefined
103
+ };
104
+ },
105
+ /**
106
+ * Stage and commit in single atomic operation
107
+ * Requirements: 5.3 - Combine stage and commit
108
+ */
109
+ async stageAndCommit(workingDir, message) {
110
+ // Stage all changes
111
+ const stageResult = await this.stageAll(workingDir);
112
+ if (!stageResult.success) {
113
+ return stageResult;
114
+ }
115
+ // Commit changes
116
+ return this.commit(workingDir, message);
117
+ },
118
+ /**
119
+ * Format commit message for task completion
120
+ * Requirements: 5.7 - Generate meaningful commit messages
121
+ */
122
+ formatTaskCommitMessage(feature, taskIndex, taskTitle) {
123
+ return `feat(${feature}): implement task ${taskIndex} - ${taskTitle}`;
124
+ },
125
+ /**
126
+ * Format commit message for phase completion
127
+ * Requirements: 1.6 - Commit changes at each phase
128
+ */
129
+ formatPhaseCommitMessage(feature, phase) {
130
+ return `feat(${feature}): complete ${phase} phase`;
131
+ },
132
+ /**
133
+ * Count commits on current branch since branching from base
134
+ * Uses git rev-list to count commits not in base branch
135
+ */
136
+ async countFeatureCommits(workingDir, baseBranch) {
137
+ // Try to determine base branch if not specified
138
+ const base = baseBranch ?? 'main';
139
+ // First check if base branch exists
140
+ const checkResult = await execGit(['rev-parse', '--verify', base], workingDir);
141
+ if (checkResult.exitCode !== 0) {
142
+ // Try 'master' as fallback
143
+ const masterCheck = await execGit(['rev-parse', '--verify', 'master'], workingDir);
144
+ if (masterCheck.exitCode !== 0) {
145
+ // Can't determine base, return total commits on current branch
146
+ const totalResult = await execGit(['rev-list', '--count', 'HEAD'], workingDir);
147
+ return totalResult.exitCode === 0 ? parseInt(totalResult.stdout.trim(), 10) || 0 : 0;
148
+ }
149
+ // Use master as base
150
+ const result = await execGit(['rev-list', '--count', 'HEAD', '^master'], workingDir);
151
+ return result.exitCode === 0 ? parseInt(result.stdout.trim(), 10) || 0 : 0;
152
+ }
153
+ // Count commits not in base branch
154
+ const result = await execGit(['rev-list', '--count', 'HEAD', `^${base}`], workingDir);
155
+ return result.exitCode === 0 ? parseInt(result.stdout.trim(), 10) || 0 : 0;
156
+ }
157
+ };
158
+ }
159
+ //# sourceMappingURL=CommitService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommitService.js","sourceRoot":"","sources":["../../src/services/CommitService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Config service for init configuration management
3
+ * Requirements: 2.7
4
+ */
5
+ import type { CodingAgent } from '../types/index.js';
6
+ /**
7
+ * Project type options
8
+ */
9
+ export type ProjectType = 'web-app' | 'cli-tool' | 'library' | 'api' | 'other';
10
+ /**
11
+ * Init configuration structure
12
+ * Task 4.1: Configuration read/write operations
13
+ */
14
+ export interface InitConfig {
15
+ readonly version: string;
16
+ readonly repo: string;
17
+ readonly stack: string;
18
+ readonly projectType: ProjectType;
19
+ readonly projectName: string;
20
+ readonly description: string;
21
+ readonly initializedAt: string;
22
+ readonly customValues: Record<string, string>;
23
+ readonly agent: CodingAgent;
24
+ }
25
+ /**
26
+ * Config service interface
27
+ * Requirements: 2.7
28
+ */
29
+ export interface ConfigService {
30
+ /**
31
+ * Load config from .red64/config.json
32
+ * @returns null if file does not exist
33
+ */
34
+ load(baseDir: string): Promise<InitConfig | null>;
35
+ /**
36
+ * Save config to .red64/config.json
37
+ */
38
+ save(baseDir: string, config: InitConfig): Promise<void>;
39
+ /**
40
+ * Check if project is initialized
41
+ */
42
+ isInitialized(baseDir: string): Promise<boolean>;
43
+ }
44
+ /**
45
+ * Create config service
46
+ * Task 4.1: Config service factory
47
+ */
48
+ export declare function createConfigService(): ConfigService;
49
+ //# sourceMappingURL=ConfigService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigService.d.ts","sourceRoot":"","sources":["../../src/services/ConfigService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AAE/E;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAElD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAqBD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CA+BnD"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Config service for init configuration management
3
+ * Requirements: 2.7
4
+ */
5
+ import { mkdir, readFile, writeFile, access } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ /**
8
+ * Get config file path
9
+ */
10
+ function getConfigPath(baseDir) {
11
+ return join(baseDir, '.red64', 'config.json');
12
+ }
13
+ /**
14
+ * Check if file exists
15
+ */
16
+ async function fileExists(path) {
17
+ try {
18
+ await access(path);
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ /**
26
+ * Create config service
27
+ * Task 4.1: Config service factory
28
+ */
29
+ export function createConfigService() {
30
+ return {
31
+ async load(baseDir) {
32
+ const configPath = getConfigPath(baseDir);
33
+ try {
34
+ const content = await readFile(configPath, 'utf-8');
35
+ const config = JSON.parse(content);
36
+ return config;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ },
42
+ async save(baseDir, config) {
43
+ const configPath = getConfigPath(baseDir);
44
+ const red64Dir = join(baseDir, '.red64');
45
+ // Ensure .red64 directory exists
46
+ await mkdir(red64Dir, { recursive: true });
47
+ // Write config with pretty formatting
48
+ const content = JSON.stringify(config, null, 2);
49
+ await writeFile(configPath, content, 'utf-8');
50
+ },
51
+ async isInitialized(baseDir) {
52
+ const configPath = getConfigPath(baseDir);
53
+ return fileExists(configPath);
54
+ }
55
+ };
56
+ }
57
+ //# sourceMappingURL=ConfigService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigService.js","sourceRoot":"","sources":["../../src/services/ConfigService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA8CjC;;GAEG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAAe;YACxB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAE1C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;gBACjD,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,MAAkB;YAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEzC,iCAAiC;YACjC,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE3C,sCAAsC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAChD,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,OAAe;YACjC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Docker Runner service for sandboxed command execution
3
+ * Runs Claude CLI commands inside a Docker container for isolation
4
+ */
5
+ /**
6
+ * Docker run options
7
+ */
8
+ export interface DockerRunOptions {
9
+ readonly image?: string;
10
+ readonly workingDirectory: string;
11
+ readonly command: string;
12
+ readonly args: readonly string[];
13
+ readonly env?: Record<string, string>;
14
+ readonly timeout?: number;
15
+ readonly onOutput?: (chunk: string) => void;
16
+ readonly onError?: (chunk: string) => void;
17
+ }
18
+ /**
19
+ * Docker run result
20
+ */
21
+ export interface DockerRunResult {
22
+ readonly success: boolean;
23
+ readonly exitCode: number;
24
+ readonly stdout: string;
25
+ readonly stderr: string;
26
+ readonly timedOut: boolean;
27
+ }
28
+ /**
29
+ * Docker runner service interface
30
+ */
31
+ export interface DockerRunnerService {
32
+ run(options: DockerRunOptions): Promise<DockerRunResult>;
33
+ isAvailable(): Promise<boolean>;
34
+ buildImage(dockerfilePath: string, imageName?: string): Promise<boolean>;
35
+ abort(): void;
36
+ }
37
+ /**
38
+ * Create Docker runner service
39
+ */
40
+ export declare function createDockerRunner(): DockerRunnerService;
41
+ /**
42
+ * Check if sandbox image is available, build if not
43
+ */
44
+ export declare function ensureSandboxImage(dockerfilePath?: string): Promise<boolean>;
45
+ //# sourceMappingURL=DockerRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerRunner.d.ts","sourceRoot":"","sources":["../../src/services/DockerRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACzD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,KAAK,IAAI,IAAI,CAAC;CACf;AA0BD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAgJxD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYlF"}