erosolar-cli 2.1.248 → 2.1.252

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 (470) hide show
  1. package/agents/general.rules.json +10 -133
  2. package/agents/general.rules.json.bak +278 -0
  3. package/agents/general.rules.json.bak2 +306 -0
  4. package/dist/bin/erosolar.js +9 -5
  5. package/dist/bin/erosolar.js.map +1 -1
  6. package/dist/capabilities/bidirectionalAuditCapability.d.ts +26 -0
  7. package/dist/capabilities/bidirectionalAuditCapability.d.ts.map +1 -0
  8. package/dist/capabilities/bidirectionalAuditCapability.js +44 -0
  9. package/dist/capabilities/bidirectionalAuditCapability.js.map +1 -0
  10. package/dist/capabilities/globCapability.d.ts +3 -6
  11. package/dist/capabilities/globCapability.d.ts.map +1 -1
  12. package/dist/capabilities/globCapability.js +6 -10
  13. package/dist/capabilities/globCapability.js.map +1 -1
  14. package/dist/capabilities/index.d.ts +1 -18
  15. package/dist/capabilities/index.d.ts.map +1 -1
  16. package/dist/capabilities/index.js +1 -18
  17. package/dist/capabilities/index.js.map +1 -1
  18. package/dist/capabilities/orchestrationCapability.d.ts +177 -3
  19. package/dist/capabilities/orchestrationCapability.d.ts.map +1 -1
  20. package/dist/capabilities/orchestrationCapability.js +1592 -85
  21. package/dist/capabilities/orchestrationCapability.js.map +1 -1
  22. package/dist/capabilities/searchCapability.d.ts +8 -2
  23. package/dist/capabilities/searchCapability.d.ts.map +1 -1
  24. package/dist/capabilities/searchCapability.js +11 -6
  25. package/dist/capabilities/searchCapability.js.map +1 -1
  26. package/dist/contracts/tools.schema.json +9 -133
  27. package/dist/core/agentOrchestrator.d.ts.map +1 -1
  28. package/dist/core/agentOrchestrator.js +18 -1
  29. package/dist/core/agentOrchestrator.js.map +1 -1
  30. package/dist/core/aiErrorFixer.d.ts +1 -14
  31. package/dist/core/aiErrorFixer.d.ts.map +1 -1
  32. package/dist/core/aiErrorFixer.js +51 -239
  33. package/dist/core/aiErrorFixer.js.map +1 -1
  34. package/dist/core/alphaZeroEngine.d.ts +16 -256
  35. package/dist/core/alphaZeroEngine.d.ts.map +1 -1
  36. package/dist/core/alphaZeroEngine.js +22 -513
  37. package/dist/core/alphaZeroEngine.js.map +1 -1
  38. package/dist/core/completeAttackOrchestrator.d.ts +102 -0
  39. package/dist/core/completeAttackOrchestrator.d.ts.map +1 -0
  40. package/dist/core/completeAttackOrchestrator.js +293 -0
  41. package/dist/core/completeAttackOrchestrator.js.map +1 -0
  42. package/dist/core/defensiveSecurityToolkit.d.ts +373 -0
  43. package/dist/core/defensiveSecurityToolkit.d.ts.map +1 -0
  44. package/dist/core/defensiveSecurityToolkit.js +1304 -0
  45. package/dist/core/defensiveSecurityToolkit.js.map +1 -0
  46. package/dist/core/errors/errorTypes.d.ts +30 -57
  47. package/dist/core/errors/errorTypes.d.ts.map +1 -1
  48. package/dist/core/errors/errorTypes.js +51 -228
  49. package/dist/core/errors/errorTypes.js.map +1 -1
  50. package/dist/core/errors/safetyValidator.d.ts +19 -3
  51. package/dist/core/errors/safetyValidator.d.ts.map +1 -1
  52. package/dist/core/errors/safetyValidator.js +33 -71
  53. package/dist/core/errors/safetyValidator.js.map +1 -1
  54. package/dist/core/failureRecovery.d.ts +4 -100
  55. package/dist/core/failureRecovery.d.ts.map +1 -1
  56. package/dist/core/failureRecovery.js +16 -440
  57. package/dist/core/failureRecovery.js.map +1 -1
  58. package/dist/core/intelligentTargetResearcher.d.ts +142 -0
  59. package/dist/core/intelligentTargetResearcher.d.ts.map +1 -0
  60. package/dist/core/intelligentTargetResearcher.js +367 -0
  61. package/dist/core/intelligentTargetResearcher.js.map +1 -0
  62. package/dist/core/intelligentTestFlows.d.ts +26 -107
  63. package/dist/core/intelligentTestFlows.d.ts.map +1 -1
  64. package/dist/core/intelligentTestFlows.js +15 -659
  65. package/dist/core/intelligentTestFlows.js.map +1 -1
  66. package/dist/core/learningPersistence.d.ts +45 -132
  67. package/dist/core/learningPersistence.d.ts.map +1 -1
  68. package/dist/core/learningPersistence.js +32 -463
  69. package/dist/core/learningPersistence.js.map +1 -1
  70. package/dist/core/metricsTracker.d.ts +22 -139
  71. package/dist/core/metricsTracker.d.ts.map +1 -1
  72. package/dist/core/metricsTracker.js +51 -241
  73. package/dist/core/metricsTracker.js.map +1 -1
  74. package/dist/core/performanceMonitor.d.ts +15 -109
  75. package/dist/core/performanceMonitor.d.ts.map +1 -1
  76. package/dist/core/performanceMonitor.js +27 -184
  77. package/dist/core/performanceMonitor.js.map +1 -1
  78. package/dist/core/resultVerification.d.ts +6 -100
  79. package/dist/core/resultVerification.d.ts.map +1 -1
  80. package/dist/core/resultVerification.js +31 -400
  81. package/dist/core/resultVerification.js.map +1 -1
  82. package/dist/core/selfEvolution.d.ts +32 -126
  83. package/dist/core/selfEvolution.d.ts.map +1 -1
  84. package/dist/core/selfEvolution.js +24 -967
  85. package/dist/core/selfEvolution.js.map +1 -1
  86. package/dist/core/selfImprovement.d.ts +50 -109
  87. package/dist/core/selfImprovement.d.ts.map +1 -1
  88. package/dist/core/selfImprovement.js +14 -689
  89. package/dist/core/selfImprovement.js.map +1 -1
  90. package/dist/core/sourceCodeManager.d.ts +89 -0
  91. package/dist/core/sourceCodeManager.d.ts.map +1 -0
  92. package/dist/core/sourceCodeManager.js +332 -0
  93. package/dist/core/sourceCodeManager.js.map +1 -0
  94. package/dist/core/unifiedOrchestrator.d.ts +88 -0
  95. package/dist/core/unifiedOrchestrator.d.ts.map +1 -0
  96. package/dist/core/unifiedOrchestrator.js +284 -0
  97. package/dist/core/unifiedOrchestrator.js.map +1 -0
  98. package/dist/core/userDefenseOrchestrator.d.ts +202 -0
  99. package/dist/core/userDefenseOrchestrator.d.ts.map +1 -0
  100. package/dist/core/userDefenseOrchestrator.js +1006 -0
  101. package/dist/core/userDefenseOrchestrator.js.map +1 -0
  102. package/dist/plugins/index.d.ts +1 -1
  103. package/dist/plugins/index.d.ts.map +1 -1
  104. package/dist/plugins/index.js +36 -26
  105. package/dist/plugins/index.js.map +1 -1
  106. package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.d.ts +8 -0
  107. package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.d.ts.map +1 -0
  108. package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.js +17 -0
  109. package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.js.map +1 -0
  110. package/dist/plugins/tools/nodeDefaults.d.ts +14 -0
  111. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
  112. package/dist/plugins/tools/nodeDefaults.js +17 -54
  113. package/dist/plugins/tools/nodeDefaults.js.map +1 -1
  114. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +9 -0
  115. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +1 -0
  116. package/dist/plugins/tools/orchestration/orchestrationPlugin.js +18 -0
  117. package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +1 -0
  118. package/dist/shell/interactiveShell.d.ts +101 -2
  119. package/dist/shell/interactiveShell.d.ts.map +1 -1
  120. package/dist/shell/interactiveShell.js +1041 -25
  121. package/dist/shell/interactiveShell.js.map +1 -1
  122. package/dist/tools/appleExposureTools.d.ts +108 -0
  123. package/dist/tools/appleExposureTools.d.ts.map +1 -0
  124. package/dist/tools/appleExposureTools.js +850 -0
  125. package/dist/tools/appleExposureTools.js.map +1 -0
  126. package/dist/tools/bidirectionalAuditTools.d.ts +104 -0
  127. package/dist/tools/bidirectionalAuditTools.d.ts.map +1 -0
  128. package/dist/tools/bidirectionalAuditTools.js +1280 -0
  129. package/dist/tools/bidirectionalAuditTools.js.map +1 -0
  130. package/dist/tools/defensiveSecurityTools.d.ts +152 -0
  131. package/dist/tools/defensiveSecurityTools.d.ts.map +1 -0
  132. package/dist/tools/defensiveSecurityTools.js +576 -0
  133. package/dist/tools/defensiveSecurityTools.js.map +1 -0
  134. package/dist/tools/forwardAttackChainTracer.d.ts +73 -0
  135. package/dist/tools/forwardAttackChainTracer.d.ts.map +1 -0
  136. package/dist/tools/forwardAttackChainTracer.js +604 -0
  137. package/dist/tools/forwardAttackChainTracer.js.map +1 -0
  138. package/dist/tools/localExplore.d.ts +12 -199
  139. package/dist/tools/localExplore.d.ts.map +1 -1
  140. package/dist/tools/localExplore.js +18 -1352
  141. package/dist/tools/localExplore.js.map +1 -1
  142. package/dist/tools/offensiveTransparencyTools.d.ts +188 -0
  143. package/dist/tools/offensiveTransparencyTools.d.ts.map +1 -0
  144. package/dist/tools/offensiveTransparencyTools.js +890 -0
  145. package/dist/tools/offensiveTransparencyTools.js.map +1 -0
  146. package/dist/tools/planningTools.d.ts +8 -17
  147. package/dist/tools/planningTools.d.ts.map +1 -1
  148. package/dist/tools/planningTools.js +31 -141
  149. package/dist/tools/planningTools.js.map +1 -1
  150. package/dist/tools/searchTools.d.ts +9 -0
  151. package/dist/tools/searchTools.d.ts.map +1 -1
  152. package/dist/tools/searchTools.js +305 -189
  153. package/dist/tools/searchTools.js.map +1 -1
  154. package/dist/tools/skillTools.d.ts +7 -5
  155. package/dist/tools/skillTools.d.ts.map +1 -1
  156. package/dist/tools/skillTools.js +13 -155
  157. package/dist/tools/skillTools.js.map +1 -1
  158. package/dist/tools/threatIntelligenceTools.d.ts +128 -0
  159. package/dist/tools/threatIntelligenceTools.d.ts.map +1 -0
  160. package/dist/tools/threatIntelligenceTools.js +712 -0
  161. package/dist/tools/threatIntelligenceTools.js.map +1 -0
  162. package/dist/ui/PromptController.d.ts +4 -0
  163. package/dist/ui/PromptController.d.ts.map +1 -1
  164. package/dist/ui/PromptController.js +32 -11
  165. package/dist/ui/PromptController.js.map +1 -1
  166. package/dist/ui/UnifiedUIRenderer.d.ts +36 -0
  167. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  168. package/dist/ui/UnifiedUIRenderer.js +308 -43
  169. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  170. package/dist/ui/animatedStatus.d.ts +2 -0
  171. package/dist/ui/animatedStatus.d.ts.map +1 -1
  172. package/dist/ui/animatedStatus.js +36 -2
  173. package/dist/ui/animatedStatus.js.map +1 -1
  174. package/dist/ui/orchestration/StatusOrchestrator.d.ts +10 -0
  175. package/dist/ui/orchestration/StatusOrchestrator.d.ts.map +1 -1
  176. package/dist/ui/orchestration/StatusOrchestrator.js +36 -4
  177. package/dist/ui/orchestration/StatusOrchestrator.js.map +1 -1
  178. package/package.json +2 -2
  179. package/dist/capabilities/advancedTestGenerationCapability.d.ts +0 -17
  180. package/dist/capabilities/advancedTestGenerationCapability.d.ts.map +0 -1
  181. package/dist/capabilities/advancedTestGenerationCapability.js +0 -28
  182. package/dist/capabilities/advancedTestGenerationCapability.js.map +0 -1
  183. package/dist/capabilities/browserAutomationCapability.d.ts +0 -37
  184. package/dist/capabilities/browserAutomationCapability.d.ts.map +0 -1
  185. package/dist/capabilities/browserAutomationCapability.js +0 -49
  186. package/dist/capabilities/browserAutomationCapability.js.map +0 -1
  187. package/dist/capabilities/buildCapability.d.ts +0 -24
  188. package/dist/capabilities/buildCapability.d.ts.map +0 -1
  189. package/dist/capabilities/buildCapability.js +0 -25
  190. package/dist/capabilities/buildCapability.js.map +0 -1
  191. package/dist/capabilities/cloudCapability.d.ts +0 -13
  192. package/dist/capabilities/cloudCapability.d.ts.map +0 -1
  193. package/dist/capabilities/cloudCapability.js +0 -38
  194. package/dist/capabilities/cloudCapability.js.map +0 -1
  195. package/dist/capabilities/codeAnalysisCapability.d.ts +0 -13
  196. package/dist/capabilities/codeAnalysisCapability.d.ts.map +0 -1
  197. package/dist/capabilities/codeAnalysisCapability.js +0 -24
  198. package/dist/capabilities/codeAnalysisCapability.js.map +0 -1
  199. package/dist/capabilities/codeQualityCapability.d.ts +0 -13
  200. package/dist/capabilities/codeQualityCapability.d.ts.map +0 -1
  201. package/dist/capabilities/codeQualityCapability.js +0 -25
  202. package/dist/capabilities/codeQualityCapability.js.map +0 -1
  203. package/dist/capabilities/dependencySecurityCapability.d.ts +0 -13
  204. package/dist/capabilities/dependencySecurityCapability.d.ts.map +0 -1
  205. package/dist/capabilities/dependencySecurityCapability.js +0 -24
  206. package/dist/capabilities/dependencySecurityCapability.js.map +0 -1
  207. package/dist/capabilities/devCapability.d.ts +0 -13
  208. package/dist/capabilities/devCapability.d.ts.map +0 -1
  209. package/dist/capabilities/devCapability.js +0 -24
  210. package/dist/capabilities/devCapability.js.map +0 -1
  211. package/dist/capabilities/emailCapability.d.ts +0 -12
  212. package/dist/capabilities/emailCapability.d.ts.map +0 -1
  213. package/dist/capabilities/emailCapability.js +0 -22
  214. package/dist/capabilities/emailCapability.js.map +0 -1
  215. package/dist/capabilities/enhancedAnalysisCapability.d.ts +0 -13
  216. package/dist/capabilities/enhancedAnalysisCapability.d.ts.map +0 -1
  217. package/dist/capabilities/enhancedAnalysisCapability.js +0 -20
  218. package/dist/capabilities/enhancedAnalysisCapability.js.map +0 -1
  219. package/dist/capabilities/enhancedCodeIntelligenceCapability.d.ts +0 -17
  220. package/dist/capabilities/enhancedCodeIntelligenceCapability.d.ts.map +0 -1
  221. package/dist/capabilities/enhancedCodeIntelligenceCapability.js +0 -28
  222. package/dist/capabilities/enhancedCodeIntelligenceCapability.js.map +0 -1
  223. package/dist/capabilities/enhancedDevWorkflowCapability.d.ts +0 -17
  224. package/dist/capabilities/enhancedDevWorkflowCapability.d.ts.map +0 -1
  225. package/dist/capabilities/enhancedDevWorkflowCapability.js +0 -28
  226. package/dist/capabilities/enhancedDevWorkflowCapability.js.map +0 -1
  227. package/dist/capabilities/frontendTestingCapability.d.ts +0 -13
  228. package/dist/capabilities/frontendTestingCapability.d.ts.map +0 -1
  229. package/dist/capabilities/frontendTestingCapability.js +0 -28
  230. package/dist/capabilities/frontendTestingCapability.js.map +0 -1
  231. package/dist/capabilities/interactionCapability.d.ts +0 -12
  232. package/dist/capabilities/interactionCapability.d.ts.map +0 -1
  233. package/dist/capabilities/interactionCapability.js +0 -22
  234. package/dist/capabilities/interactionCapability.js.map +0 -1
  235. package/dist/capabilities/learnCapability.d.ts +0 -22
  236. package/dist/capabilities/learnCapability.d.ts.map +0 -1
  237. package/dist/capabilities/learnCapability.js +0 -37
  238. package/dist/capabilities/learnCapability.js.map +0 -1
  239. package/dist/capabilities/notebookCapability.d.ts +0 -17
  240. package/dist/capabilities/notebookCapability.d.ts.map +0 -1
  241. package/dist/capabilities/notebookCapability.js +0 -27
  242. package/dist/capabilities/notebookCapability.js.map +0 -1
  243. package/dist/capabilities/planningCapability.d.ts +0 -16
  244. package/dist/capabilities/planningCapability.d.ts.map +0 -1
  245. package/dist/capabilities/planningCapability.js +0 -26
  246. package/dist/capabilities/planningCapability.js.map +0 -1
  247. package/dist/capabilities/refactoringCapability.d.ts +0 -13
  248. package/dist/capabilities/refactoringCapability.d.ts.map +0 -1
  249. package/dist/capabilities/refactoringCapability.js +0 -25
  250. package/dist/capabilities/refactoringCapability.js.map +0 -1
  251. package/dist/capabilities/repoChecksCapability.d.ts +0 -10
  252. package/dist/capabilities/repoChecksCapability.d.ts.map +0 -1
  253. package/dist/capabilities/repoChecksCapability.js +0 -24
  254. package/dist/capabilities/repoChecksCapability.js.map +0 -1
  255. package/dist/capabilities/taskManagementCapability.d.ts +0 -12
  256. package/dist/capabilities/taskManagementCapability.d.ts.map +0 -1
  257. package/dist/capabilities/taskManagementCapability.js +0 -22
  258. package/dist/capabilities/taskManagementCapability.js.map +0 -1
  259. package/dist/capabilities/testingCapability.d.ts +0 -13
  260. package/dist/capabilities/testingCapability.d.ts.map +0 -1
  261. package/dist/capabilities/testingCapability.js +0 -25
  262. package/dist/capabilities/testingCapability.js.map +0 -1
  263. package/dist/capabilities/validationCapability.d.ts +0 -13
  264. package/dist/capabilities/validationCapability.d.ts.map +0 -1
  265. package/dist/capabilities/validationCapability.js +0 -24
  266. package/dist/capabilities/validationCapability.js.map +0 -1
  267. package/dist/capabilities/webCapability.d.ts +0 -12
  268. package/dist/capabilities/webCapability.d.ts.map +0 -1
  269. package/dist/capabilities/webCapability.js +0 -22
  270. package/dist/capabilities/webCapability.js.map +0 -1
  271. package/dist/core/deepBugAnalyzer.d.ts +0 -128
  272. package/dist/core/deepBugAnalyzer.d.ts.map +0 -1
  273. package/dist/core/deepBugAnalyzer.js +0 -406
  274. package/dist/core/deepBugAnalyzer.js.map +0 -1
  275. package/dist/core/hypothesisEngine.d.ts +0 -113
  276. package/dist/core/hypothesisEngine.d.ts.map +0 -1
  277. package/dist/core/hypothesisEngine.js +0 -264
  278. package/dist/core/hypothesisEngine.js.map +0 -1
  279. package/dist/core/productTestHarness.d.ts +0 -113
  280. package/dist/core/productTestHarness.d.ts.map +0 -1
  281. package/dist/core/productTestHarness.js +0 -351
  282. package/dist/core/productTestHarness.js.map +0 -1
  283. package/dist/core/validationRunner.d.ts +0 -106
  284. package/dist/core/validationRunner.d.ts.map +0 -1
  285. package/dist/core/validationRunner.js +0 -892
  286. package/dist/core/validationRunner.js.map +0 -1
  287. package/dist/plugins/tools/browser/browserAutomationPlugin.d.ts +0 -14
  288. package/dist/plugins/tools/browser/browserAutomationPlugin.d.ts.map +0 -1
  289. package/dist/plugins/tools/browser/browserAutomationPlugin.js +0 -26
  290. package/dist/plugins/tools/browser/browserAutomationPlugin.js.map +0 -1
  291. package/dist/plugins/tools/checks/localRepoChecksPlugin.d.ts +0 -3
  292. package/dist/plugins/tools/checks/localRepoChecksPlugin.d.ts.map +0 -1
  293. package/dist/plugins/tools/checks/localRepoChecksPlugin.js +0 -14
  294. package/dist/plugins/tools/checks/localRepoChecksPlugin.js.map +0 -1
  295. package/dist/plugins/tools/cloud/cloudPlugin.d.ts +0 -3
  296. package/dist/plugins/tools/cloud/cloudPlugin.d.ts.map +0 -1
  297. package/dist/plugins/tools/cloud/cloudPlugin.js +0 -14
  298. package/dist/plugins/tools/cloud/cloudPlugin.js.map +0 -1
  299. package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.d.ts +0 -3
  300. package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.d.ts.map +0 -1
  301. package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.js +0 -14
  302. package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.js.map +0 -1
  303. package/dist/plugins/tools/codeQuality/codeQualityPlugin.d.ts +0 -3
  304. package/dist/plugins/tools/codeQuality/codeQualityPlugin.d.ts.map +0 -1
  305. package/dist/plugins/tools/codeQuality/codeQualityPlugin.js +0 -14
  306. package/dist/plugins/tools/codeQuality/codeQualityPlugin.js.map +0 -1
  307. package/dist/plugins/tools/dependency/dependencyPlugin.d.ts +0 -3
  308. package/dist/plugins/tools/dependency/dependencyPlugin.d.ts.map +0 -1
  309. package/dist/plugins/tools/dependency/dependencyPlugin.js +0 -12
  310. package/dist/plugins/tools/dependency/dependencyPlugin.js.map +0 -1
  311. package/dist/plugins/tools/development/devPlugin.d.ts +0 -3
  312. package/dist/plugins/tools/development/devPlugin.d.ts.map +0 -1
  313. package/dist/plugins/tools/development/devPlugin.js +0 -14
  314. package/dist/plugins/tools/development/devPlugin.js.map +0 -1
  315. package/dist/plugins/tools/email/emailPlugin.d.ts +0 -3
  316. package/dist/plugins/tools/email/emailPlugin.d.ts.map +0 -1
  317. package/dist/plugins/tools/email/emailPlugin.js +0 -12
  318. package/dist/plugins/tools/email/emailPlugin.js.map +0 -1
  319. package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.d.ts +0 -3
  320. package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.d.ts.map +0 -1
  321. package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.js +0 -14
  322. package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.js.map +0 -1
  323. package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.d.ts +0 -3
  324. package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.d.ts.map +0 -1
  325. package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.js +0 -12
  326. package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.js.map +0 -1
  327. package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.d.ts +0 -3
  328. package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.d.ts.map +0 -1
  329. package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.js +0 -12
  330. package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.js.map +0 -1
  331. package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.d.ts +0 -3
  332. package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.d.ts.map +0 -1
  333. package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.js +0 -14
  334. package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.js.map +0 -1
  335. package/dist/plugins/tools/interaction/interactionPlugin.d.ts +0 -3
  336. package/dist/plugins/tools/interaction/interactionPlugin.d.ts.map +0 -1
  337. package/dist/plugins/tools/interaction/interactionPlugin.js +0 -12
  338. package/dist/plugins/tools/interaction/interactionPlugin.js.map +0 -1
  339. package/dist/plugins/tools/learn/learnPlugin.d.ts +0 -3
  340. package/dist/plugins/tools/learn/learnPlugin.d.ts.map +0 -1
  341. package/dist/plugins/tools/learn/learnPlugin.js +0 -14
  342. package/dist/plugins/tools/learn/learnPlugin.js.map +0 -1
  343. package/dist/plugins/tools/notebook/notebookPlugin.d.ts +0 -9
  344. package/dist/plugins/tools/notebook/notebookPlugin.d.ts.map +0 -1
  345. package/dist/plugins/tools/notebook/notebookPlugin.js +0 -15
  346. package/dist/plugins/tools/notebook/notebookPlugin.js.map +0 -1
  347. package/dist/plugins/tools/planning/planningPlugin.d.ts +0 -9
  348. package/dist/plugins/tools/planning/planningPlugin.d.ts.map +0 -1
  349. package/dist/plugins/tools/planning/planningPlugin.js +0 -15
  350. package/dist/plugins/tools/planning/planningPlugin.js.map +0 -1
  351. package/dist/plugins/tools/refactoring/refactoringPlugin.d.ts +0 -3
  352. package/dist/plugins/tools/refactoring/refactoringPlugin.d.ts.map +0 -1
  353. package/dist/plugins/tools/refactoring/refactoringPlugin.js +0 -12
  354. package/dist/plugins/tools/refactoring/refactoringPlugin.js.map +0 -1
  355. package/dist/plugins/tools/taskManagement/taskManagementPlugin.d.ts +0 -3
  356. package/dist/plugins/tools/taskManagement/taskManagementPlugin.d.ts.map +0 -1
  357. package/dist/plugins/tools/taskManagement/taskManagementPlugin.js +0 -12
  358. package/dist/plugins/tools/taskManagement/taskManagementPlugin.js.map +0 -1
  359. package/dist/plugins/tools/testing/testingPlugin.d.ts +0 -3
  360. package/dist/plugins/tools/testing/testingPlugin.d.ts.map +0 -1
  361. package/dist/plugins/tools/testing/testingPlugin.js +0 -12
  362. package/dist/plugins/tools/testing/testingPlugin.js.map +0 -1
  363. package/dist/plugins/tools/validation/validationPlugin.d.ts +0 -3
  364. package/dist/plugins/tools/validation/validationPlugin.d.ts.map +0 -1
  365. package/dist/plugins/tools/validation/validationPlugin.js +0 -14
  366. package/dist/plugins/tools/validation/validationPlugin.js.map +0 -1
  367. package/dist/plugins/tools/web/webPlugin.d.ts +0 -3
  368. package/dist/plugins/tools/web/webPlugin.d.ts.map +0 -1
  369. package/dist/plugins/tools/web/webPlugin.js +0 -12
  370. package/dist/plugins/tools/web/webPlugin.js.map +0 -1
  371. package/dist/tools/advancedTestGenerationTools.d.ts +0 -21
  372. package/dist/tools/advancedTestGenerationTools.d.ts.map +0 -1
  373. package/dist/tools/advancedTestGenerationTools.js +0 -304
  374. package/dist/tools/advancedTestGenerationTools.js.map +0 -1
  375. package/dist/tools/browserAutomationTools.d.ts +0 -23
  376. package/dist/tools/browserAutomationTools.d.ts.map +0 -1
  377. package/dist/tools/browserAutomationTools.js +0 -916
  378. package/dist/tools/browserAutomationTools.js.map +0 -1
  379. package/dist/tools/buildTools.d.ts +0 -9
  380. package/dist/tools/buildTools.d.ts.map +0 -1
  381. package/dist/tools/buildTools.js +0 -346
  382. package/dist/tools/buildTools.js.map +0 -1
  383. package/dist/tools/cloudTools.d.ts +0 -49
  384. package/dist/tools/cloudTools.d.ts.map +0 -1
  385. package/dist/tools/cloudTools.js +0 -1258
  386. package/dist/tools/cloudTools.js.map +0 -1
  387. package/dist/tools/codeAnalysisTools.d.ts +0 -74
  388. package/dist/tools/codeAnalysisTools.d.ts.map +0 -1
  389. package/dist/tools/codeAnalysisTools.js +0 -664
  390. package/dist/tools/codeAnalysisTools.js.map +0 -1
  391. package/dist/tools/codeGenerationTools.d.ts +0 -3
  392. package/dist/tools/codeGenerationTools.d.ts.map +0 -1
  393. package/dist/tools/codeGenerationTools.js +0 -439
  394. package/dist/tools/codeGenerationTools.js.map +0 -1
  395. package/dist/tools/codeQualityTools.d.ts +0 -3
  396. package/dist/tools/codeQualityTools.d.ts.map +0 -1
  397. package/dist/tools/codeQualityTools.js +0 -297
  398. package/dist/tools/codeQualityTools.js.map +0 -1
  399. package/dist/tools/dependencyTools.d.ts +0 -3
  400. package/dist/tools/dependencyTools.d.ts.map +0 -1
  401. package/dist/tools/dependencyTools.js +0 -284
  402. package/dist/tools/dependencyTools.js.map +0 -1
  403. package/dist/tools/devTools.d.ts +0 -10
  404. package/dist/tools/devTools.d.ts.map +0 -1
  405. package/dist/tools/devTools.js +0 -2126
  406. package/dist/tools/devTools.js.map +0 -1
  407. package/dist/tools/emailTools.d.ts +0 -21
  408. package/dist/tools/emailTools.d.ts.map +0 -1
  409. package/dist/tools/emailTools.js +0 -449
  410. package/dist/tools/emailTools.js.map +0 -1
  411. package/dist/tools/enhancedAnalysisTools.d.ts +0 -9
  412. package/dist/tools/enhancedAnalysisTools.d.ts.map +0 -1
  413. package/dist/tools/enhancedAnalysisTools.js +0 -370
  414. package/dist/tools/enhancedAnalysisTools.js.map +0 -1
  415. package/dist/tools/enhancedCodeIntelligenceTools.d.ts +0 -7
  416. package/dist/tools/enhancedCodeIntelligenceTools.d.ts.map +0 -1
  417. package/dist/tools/enhancedCodeIntelligenceTools.js +0 -540
  418. package/dist/tools/enhancedCodeIntelligenceTools.js.map +0 -1
  419. package/dist/tools/enhancedDevWorkflowTools.d.ts +0 -7
  420. package/dist/tools/enhancedDevWorkflowTools.d.ts.map +0 -1
  421. package/dist/tools/enhancedDevWorkflowTools.js +0 -432
  422. package/dist/tools/enhancedDevWorkflowTools.js.map +0 -1
  423. package/dist/tools/frontendTestingTools.d.ts +0 -35
  424. package/dist/tools/frontendTestingTools.d.ts.map +0 -1
  425. package/dist/tools/frontendTestingTools.js +0 -1258
  426. package/dist/tools/frontendTestingTools.js.map +0 -1
  427. package/dist/tools/globTools.d.ts +0 -15
  428. package/dist/tools/globTools.d.ts.map +0 -1
  429. package/dist/tools/globTools.js +0 -174
  430. package/dist/tools/globTools.js.map +0 -1
  431. package/dist/tools/grepTools.d.ts +0 -19
  432. package/dist/tools/grepTools.d.ts.map +0 -1
  433. package/dist/tools/grepTools.js +0 -411
  434. package/dist/tools/grepTools.js.map +0 -1
  435. package/dist/tools/interactionTools.d.ts +0 -6
  436. package/dist/tools/interactionTools.d.ts.map +0 -1
  437. package/dist/tools/interactionTools.js +0 -209
  438. package/dist/tools/interactionTools.js.map +0 -1
  439. package/dist/tools/learnTools.d.ts +0 -164
  440. package/dist/tools/learnTools.d.ts.map +0 -1
  441. package/dist/tools/learnTools.js +0 -2098
  442. package/dist/tools/learnTools.js.map +0 -1
  443. package/dist/tools/notebookEditTools.d.ts +0 -15
  444. package/dist/tools/notebookEditTools.d.ts.map +0 -1
  445. package/dist/tools/notebookEditTools.js +0 -197
  446. package/dist/tools/notebookEditTools.js.map +0 -1
  447. package/dist/tools/refactoringTools.d.ts +0 -3
  448. package/dist/tools/refactoringTools.d.ts.map +0 -1
  449. package/dist/tools/refactoringTools.js +0 -294
  450. package/dist/tools/refactoringTools.js.map +0 -1
  451. package/dist/tools/repoChecksTools.d.ts +0 -3
  452. package/dist/tools/repoChecksTools.d.ts.map +0 -1
  453. package/dist/tools/repoChecksTools.js +0 -276
  454. package/dist/tools/repoChecksTools.js.map +0 -1
  455. package/dist/tools/taskManagementTools.d.ts +0 -10
  456. package/dist/tools/taskManagementTools.d.ts.map +0 -1
  457. package/dist/tools/taskManagementTools.js +0 -133
  458. package/dist/tools/taskManagementTools.js.map +0 -1
  459. package/dist/tools/testingTools.d.ts +0 -3
  460. package/dist/tools/testingTools.d.ts.map +0 -1
  461. package/dist/tools/testingTools.js +0 -237
  462. package/dist/tools/testingTools.js.map +0 -1
  463. package/dist/tools/validationTools.d.ts +0 -7
  464. package/dist/tools/validationTools.d.ts.map +0 -1
  465. package/dist/tools/validationTools.js +0 -344
  466. package/dist/tools/validationTools.js.map +0 -1
  467. package/dist/tools/webTools.d.ts +0 -3
  468. package/dist/tools/webTools.d.ts.map +0 -1
  469. package/dist/tools/webTools.js +0 -502
  470. package/dist/tools/webTools.js.map +0 -1
@@ -1,1258 +0,0 @@
1
- /**
2
- * Cloud Deployment Tools - Unified cloud CLI capabilities with auto-detection and auto-fix
3
- *
4
- * Supports:
5
- * - Firebase (Hosting, Functions, Firestore, Storage, Auth)
6
- * - Aliyun/Alibaba Cloud (OSS, FC, ACR, etc.)
7
- * - AWS (S3, Lambda, CloudFront, etc.)
8
- * - GCP (Cloud Run, Storage, Functions)
9
- * - Azure (Static Web Apps, Functions, Blob Storage)
10
- * - Vercel, Netlify, Cloudflare Pages
11
- *
12
- * Features:
13
- * - Automatic CLI detection and installation checking
14
- * - Authentication status verification
15
- * - Auto-fix for common issues
16
- * - AI-driven error resolution
17
- *
18
- * @license MIT
19
- * @author Bo Shang
20
- */
21
- import { spawn } from 'child_process';
22
- import * as fs from 'fs';
23
- import * as path from 'path';
24
- import { verifiedSuccess, verifiedFailure, unverifiedResult, requiresUserAction, partialSuccess, analyzeOutput, OutputPatterns, verifyUrlAccessible, } from '../core/resultVerification.js';
25
- const CLOUD_PROVIDERS = {
26
- firebase: {
27
- id: 'firebase',
28
- name: 'Firebase',
29
- cliCommand: 'firebase',
30
- versionFlag: '--version',
31
- installCommand: 'npm install -g firebase-tools',
32
- installUrl: 'https://firebase.google.com/docs/cli',
33
- loginCommand: 'firebase login',
34
- checkAuthCommand: 'firebase projects:list',
35
- configFile: 'firebase.json',
36
- envVars: ['FIREBASE_TOKEN', 'GOOGLE_APPLICATION_CREDENTIALS'],
37
- },
38
- aliyun: {
39
- id: 'aliyun',
40
- name: 'Alibaba Cloud (Aliyun)',
41
- cliCommand: 'aliyun',
42
- versionFlag: 'version',
43
- installCommand: 'brew install aliyun-cli || curl -O https://aliyuncli.alicdn.com/aliyun-cli-linux-amd64-*.tgz',
44
- installUrl: 'https://www.alibabacloud.com/help/doc-detail/139508.htm',
45
- loginCommand: 'aliyun configure',
46
- checkAuthCommand: 'aliyun ecs DescribeRegions',
47
- configFile: '~/.aliyun/config.json',
48
- envVars: ['ALIBABA_CLOUD_ACCESS_KEY_ID', 'ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
49
- },
50
- aws: {
51
- id: 'aws',
52
- name: 'Amazon Web Services',
53
- cliCommand: 'aws',
54
- versionFlag: '--version',
55
- installCommand: 'brew install awscli || pip install awscli',
56
- installUrl: 'https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html',
57
- loginCommand: 'aws configure',
58
- checkAuthCommand: 'aws sts get-caller-identity',
59
- configFile: '~/.aws/credentials',
60
- envVars: ['AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_SESSION_TOKEN'],
61
- },
62
- gcloud: {
63
- id: 'gcloud',
64
- name: 'Google Cloud Platform',
65
- cliCommand: 'gcloud',
66
- versionFlag: '--version',
67
- installCommand: 'brew install --cask google-cloud-sdk',
68
- installUrl: 'https://cloud.google.com/sdk/docs/install',
69
- loginCommand: 'gcloud auth login',
70
- checkAuthCommand: 'gcloud auth list',
71
- configFile: '~/.config/gcloud/credentials.db',
72
- envVars: ['GOOGLE_APPLICATION_CREDENTIALS', 'CLOUDSDK_CORE_PROJECT'],
73
- },
74
- azure: {
75
- id: 'azure',
76
- name: 'Microsoft Azure',
77
- cliCommand: 'az',
78
- versionFlag: '--version',
79
- installCommand: 'brew install azure-cli || curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash',
80
- installUrl: 'https://docs.microsoft.com/en-us/cli/azure/install-azure-cli',
81
- loginCommand: 'az login',
82
- checkAuthCommand: 'az account show',
83
- configFile: '~/.azure/accessTokens.json',
84
- envVars: ['AZURE_CLIENT_ID', 'AZURE_CLIENT_SECRET', 'AZURE_TENANT_ID'],
85
- },
86
- vercel: {
87
- id: 'vercel',
88
- name: 'Vercel',
89
- cliCommand: 'vercel',
90
- versionFlag: '--version',
91
- installCommand: 'npm install -g vercel',
92
- installUrl: 'https://vercel.com/docs/cli',
93
- loginCommand: 'vercel login',
94
- checkAuthCommand: 'vercel whoami',
95
- envVars: ['VERCEL_TOKEN'],
96
- },
97
- netlify: {
98
- id: 'netlify',
99
- name: 'Netlify',
100
- cliCommand: 'netlify',
101
- versionFlag: '--version',
102
- installCommand: 'npm install -g netlify-cli',
103
- installUrl: 'https://docs.netlify.com/cli/get-started/',
104
- loginCommand: 'netlify login',
105
- checkAuthCommand: 'netlify status',
106
- envVars: ['NETLIFY_AUTH_TOKEN'],
107
- },
108
- cloudflare: {
109
- id: 'cloudflare',
110
- name: 'Cloudflare',
111
- cliCommand: 'wrangler',
112
- versionFlag: '--version',
113
- installCommand: 'npm install -g wrangler',
114
- installUrl: 'https://developers.cloudflare.com/workers/wrangler/install-and-update/',
115
- loginCommand: 'wrangler login',
116
- checkAuthCommand: 'wrangler whoami',
117
- envVars: ['CLOUDFLARE_API_TOKEN', 'CLOUDFLARE_ACCOUNT_ID'],
118
- },
119
- fly: {
120
- id: 'fly',
121
- name: 'Fly.io',
122
- cliCommand: 'flyctl',
123
- versionFlag: 'version',
124
- installCommand: 'brew install flyctl || curl -L https://fly.io/install.sh | sh',
125
- installUrl: 'https://fly.io/docs/hands-on/install-flyctl/',
126
- loginCommand: 'flyctl auth login',
127
- checkAuthCommand: 'flyctl auth whoami',
128
- envVars: ['FLY_API_TOKEN'],
129
- },
130
- railway: {
131
- id: 'railway',
132
- name: 'Railway',
133
- cliCommand: 'railway',
134
- versionFlag: '--version',
135
- installCommand: 'npm install -g @railway/cli',
136
- installUrl: 'https://docs.railway.app/develop/cli',
137
- loginCommand: 'railway login',
138
- checkAuthCommand: 'railway whoami',
139
- envVars: ['RAILWAY_TOKEN'],
140
- },
141
- supabase: {
142
- id: 'supabase',
143
- name: 'Supabase',
144
- cliCommand: 'supabase',
145
- versionFlag: '--version',
146
- installCommand: 'npm install -g supabase',
147
- installUrl: 'https://supabase.com/docs/guides/cli',
148
- loginCommand: 'supabase login',
149
- checkAuthCommand: 'supabase projects list',
150
- envVars: ['SUPABASE_ACCESS_TOKEN'],
151
- },
152
- };
153
- async function runCommand(command, timeout = 30000) {
154
- return new Promise((resolve) => {
155
- const child = spawn('sh', ['-c', command], {
156
- timeout,
157
- env: { ...process.env },
158
- });
159
- let stdout = '';
160
- let stderr = '';
161
- child.stdout?.on('data', (data) => {
162
- stdout += data.toString();
163
- });
164
- child.stderr?.on('data', (data) => {
165
- stderr += data.toString();
166
- });
167
- child.on('close', (code) => {
168
- resolve({ stdout: stdout.trim(), stderr: stderr.trim(), exitCode: code ?? 1 });
169
- });
170
- child.on('error', (err) => {
171
- resolve({ stdout: '', stderr: err.message, exitCode: 1 });
172
- });
173
- });
174
- }
175
- async function checkCLIInstalled(provider) {
176
- try {
177
- const result = await runCommand(`which ${provider.cliCommand} && ${provider.cliCommand} ${provider.versionFlag} 2>&1 | head -5`);
178
- if (result.exitCode === 0 && result.stdout) {
179
- // Extract version from output
180
- const versionMatch = result.stdout.match(/(\d+\.\d+\.\d+[\w.-]*)/);
181
- return {
182
- installed: true,
183
- version: versionMatch?.[1] || result.stdout.split('\n')[1] || 'unknown',
184
- };
185
- }
186
- return { installed: false, error: result.stderr || 'CLI not found in PATH' };
187
- }
188
- catch (error) {
189
- return { installed: false, error: error instanceof Error ? error.message : String(error) };
190
- }
191
- }
192
- async function checkAuthentication(provider) {
193
- try {
194
- const result = await runCommand(provider.checkAuthCommand, 15000);
195
- if (result.exitCode === 0) {
196
- return {
197
- authenticated: true,
198
- details: result.stdout.slice(0, 500),
199
- };
200
- }
201
- // Check for specific auth errors
202
- const errorLower = (result.stderr + result.stdout).toLowerCase();
203
- if (errorLower.includes('not logged in') ||
204
- errorLower.includes('authentication') ||
205
- errorLower.includes('credentials') ||
206
- errorLower.includes('login') ||
207
- errorLower.includes('token') ||
208
- errorLower.includes('unauthorized')) {
209
- return {
210
- authenticated: false,
211
- error: `Not authenticated. Run: ${provider.loginCommand}`,
212
- };
213
- }
214
- return { authenticated: false, error: result.stderr || result.stdout };
215
- }
216
- catch (error) {
217
- return { authenticated: false, error: error instanceof Error ? error.message : String(error) };
218
- }
219
- }
220
- async function checkConfigFile(provider, workingDir) {
221
- if (!provider.configFile) {
222
- return true;
223
- }
224
- // Check for project-level config
225
- const projectConfig = path.join(workingDir, provider.configFile);
226
- if (fs.existsSync(projectConfig)) {
227
- return true;
228
- }
229
- // Check for user-level config (expand ~)
230
- if (provider.configFile.startsWith('~')) {
231
- const homeConfig = provider.configFile.replace('~', process.env['HOME'] || '');
232
- if (fs.existsSync(homeConfig)) {
233
- return true;
234
- }
235
- }
236
- return false;
237
- }
238
- async function getFullCLIStatus(providerId, workingDir) {
239
- const provider = CLOUD_PROVIDERS[providerId];
240
- if (!provider) {
241
- return {
242
- installed: false,
243
- authenticated: false,
244
- configExists: false,
245
- errors: [`Unknown provider: ${providerId}`],
246
- suggestions: [`Available providers: ${Object.keys(CLOUD_PROVIDERS).join(', ')}`],
247
- };
248
- }
249
- const status = {
250
- installed: false,
251
- authenticated: false,
252
- configExists: false,
253
- errors: [],
254
- suggestions: [],
255
- };
256
- // Check installation
257
- const installCheck = await checkCLIInstalled(provider);
258
- status.installed = installCheck.installed;
259
- status.version = installCheck.version;
260
- if (!installCheck.installed) {
261
- status.errors.push(`${provider.name} CLI not installed`);
262
- status.suggestions.push(`Install with: ${provider.installCommand}`);
263
- status.suggestions.push(`Documentation: ${provider.installUrl}`);
264
- return status;
265
- }
266
- // Check authentication
267
- const authCheck = await checkAuthentication(provider);
268
- status.authenticated = authCheck.authenticated;
269
- status.authDetails = authCheck.details;
270
- if (!authCheck.authenticated) {
271
- status.errors.push(authCheck.error || 'Not authenticated');
272
- status.suggestions.push(`Authenticate with: ${provider.loginCommand}`);
273
- if (provider.envVars?.length) {
274
- status.suggestions.push(`Or set environment variables: ${provider.envVars.join(', ')}`);
275
- }
276
- }
277
- // Check config file
278
- status.configExists = await checkConfigFile(provider, workingDir);
279
- if (!status.configExists && provider.configFile) {
280
- status.errors.push(`Config file not found: ${provider.configFile}`);
281
- if (provider.configFile.includes('firebase.json')) {
282
- status.suggestions.push('Initialize project with: firebase init');
283
- }
284
- else if (provider.configFile.includes('aliyun')) {
285
- status.suggestions.push('Configure with: aliyun configure');
286
- }
287
- }
288
- return status;
289
- }
290
- async function autoFixIssues(providerId, workingDir) {
291
- const fixes = [];
292
- const provider = CLOUD_PROVIDERS[providerId];
293
- if (!provider) {
294
- return ['Unknown provider'];
295
- }
296
- const status = await getFullCLIStatus(providerId, workingDir);
297
- // Try to install if not present
298
- if (!status.installed) {
299
- fixes.push(`Attempting to install ${provider.name} CLI...`);
300
- // Try npm install first for npm-based CLIs
301
- if (provider.installCommand.includes('npm install')) {
302
- const result = await runCommand(provider.installCommand, 120000);
303
- if (result.exitCode === 0) {
304
- fixes.push(`✅ Successfully installed ${provider.name} CLI`);
305
- }
306
- else {
307
- fixes.push(`❌ Failed to install: ${result.stderr}`);
308
- fixes.push(`Manual install: ${provider.installCommand}`);
309
- }
310
- }
311
- else {
312
- fixes.push(`Manual installation required: ${provider.installCommand}`);
313
- fixes.push(`Visit: ${provider.installUrl}`);
314
- }
315
- }
316
- // Check for CI environment variables if not authenticated
317
- if (!status.authenticated && provider.envVars) {
318
- const hasEnvAuth = provider.envVars.some((v) => process.env[v]);
319
- if (hasEnvAuth) {
320
- fixes.push(`Environment credentials detected for ${provider.name}`);
321
- }
322
- else {
323
- fixes.push(`Authentication required. Run: ${provider.loginCommand}`);
324
- // For headless/CI environments
325
- if (process.env['CI'] || !process.stdin.isTTY) {
326
- fixes.push(`For CI/headless environments, set: ${provider.envVars.join(' or ')}`);
327
- }
328
- }
329
- }
330
- return fixes;
331
- }
332
- export function createCloudTools(workingDir = process.cwd()) {
333
- return [
334
- {
335
- name: 'cloud_status',
336
- description: `Check the status of cloud CLIs on this system.
337
-
338
- Detects and reports on:
339
- - CLI installation status and versions
340
- - Authentication status
341
- - Project configuration
342
- - Required environment variables
343
-
344
- Supports: Firebase, Aliyun, AWS, GCP, Azure, Vercel, Netlify, Cloudflare, Fly.io, Railway, Supabase
345
-
346
- Use this before attempting any cloud deployment to ensure everything is properly configured.`,
347
- parameters: {
348
- type: 'object',
349
- properties: {
350
- providers: {
351
- type: 'array',
352
- items: { type: 'string' },
353
- description: 'Specific providers to check (default: all). Options: firebase, aliyun, aws, gcloud, azure, vercel, netlify, cloudflare, fly, railway, supabase',
354
- },
355
- },
356
- },
357
- handler: async (args) => {
358
- const providersToCheck = args['providers'] || Object.keys(CLOUD_PROVIDERS);
359
- const results = ['☁️ Cloud CLI Status Report\n'];
360
- for (const providerId of providersToCheck) {
361
- const provider = CLOUD_PROVIDERS[providerId];
362
- if (!provider) {
363
- results.push(`❓ Unknown provider: ${providerId}`);
364
- continue;
365
- }
366
- results.push(`\n--- ${provider.name} (${provider.cliCommand}) ---`);
367
- const status = await getFullCLIStatus(providerId, workingDir);
368
- if (status.installed) {
369
- results.push(`✅ Installed: v${status.version}`);
370
- }
371
- else {
372
- results.push(`❌ Not installed`);
373
- }
374
- if (status.installed) {
375
- if (status.authenticated) {
376
- results.push(`✅ Authenticated`);
377
- if (status.authDetails) {
378
- results.push(` ${status.authDetails.split('\n')[0]}`);
379
- }
380
- }
381
- else {
382
- results.push(`❌ Not authenticated`);
383
- }
384
- if (status.configExists) {
385
- results.push(`✅ Project config found`);
386
- }
387
- else if (provider.configFile) {
388
- results.push(`⚠️ No project config (${provider.configFile})`);
389
- }
390
- }
391
- if (status.errors.length > 0) {
392
- results.push(`\nIssues:`);
393
- for (const err of status.errors) {
394
- results.push(` ⚠️ ${err}`);
395
- }
396
- }
397
- if (status.suggestions.length > 0) {
398
- results.push(`\nSuggestions:`);
399
- for (const sug of status.suggestions) {
400
- results.push(` 💡 ${sug}`);
401
- }
402
- }
403
- }
404
- return results.join('\n');
405
- },
406
- },
407
- {
408
- name: 'cloud_fix',
409
- description: `Automatically fix cloud CLI issues.
410
-
411
- Attempts to:
412
- - Install missing CLIs (via npm/brew where possible)
413
- - Detect environment credentials
414
- - Provide step-by-step fix instructions for issues that can't be auto-fixed
415
-
416
- Use this when cloud_status reports issues.`,
417
- parameters: {
418
- type: 'object',
419
- properties: {
420
- provider: {
421
- type: 'string',
422
- description: 'The cloud provider to fix. Options: firebase, aliyun, aws, gcloud, azure, vercel, netlify, cloudflare, fly, railway, supabase',
423
- },
424
- },
425
- required: ['provider'],
426
- },
427
- handler: async (args) => {
428
- const providerId = args['provider']?.toLowerCase();
429
- if (!CLOUD_PROVIDERS[providerId]) {
430
- return `Unknown provider: ${providerId}\n\nAvailable: ${Object.keys(CLOUD_PROVIDERS).join(', ')}`;
431
- }
432
- const fixes = await autoFixIssues(providerId, workingDir);
433
- return `🔧 Auto-Fix Results for ${CLOUD_PROVIDERS[providerId]?.name}\n\n${fixes.join('\n')}`;
434
- },
435
- },
436
- {
437
- name: 'firebase_deploy',
438
- description: `Deploy to Firebase (Hosting, Functions, Firestore rules, Storage rules).
439
-
440
- Automatically:
441
- - Checks Firebase CLI status
442
- - Validates firebase.json configuration
443
- - Handles authentication issues
444
- - Provides detailed deployment logs
445
-
446
- Supports:
447
- - firebase deploy --only hosting
448
- - firebase deploy --only functions
449
- - firebase deploy --only firestore
450
- - firebase deploy --only storage
451
- - firebase deploy (all)`,
452
- parameters: {
453
- type: 'object',
454
- properties: {
455
- target: {
456
- type: 'string',
457
- description: 'Deployment target: "hosting", "functions", "firestore", "storage", "all" (default: all)',
458
- },
459
- project: {
460
- type: 'string',
461
- description: 'Firebase project ID (uses default if not specified)',
462
- },
463
- dry_run: {
464
- type: 'boolean',
465
- description: 'Preview deployment without actually deploying (default: false)',
466
- },
467
- },
468
- },
469
- handler: async (args) => {
470
- const target = args['target'] || 'all';
471
- const project = args['project'];
472
- const dryRun = args['dry_run'] === true;
473
- const startTime = Date.now();
474
- const checks = [];
475
- // First check status
476
- const status = await getFullCLIStatus('firebase', workingDir);
477
- checks.push({
478
- check: 'Firebase CLI installed',
479
- passed: status.installed,
480
- details: status.installed ? `v${status.version}` : 'Not found',
481
- });
482
- if (!status.installed) {
483
- return requiresUserAction('Firebase CLI not installed', 'The Firebase CLI (firebase-tools) must be installed before deployment.', [
484
- 'Run: npm install -g firebase-tools',
485
- 'Or use cloud_fix tool with provider="firebase"',
486
- 'Documentation: https://firebase.google.com/docs/cli',
487
- ], Date.now() - startTime);
488
- }
489
- checks.push({
490
- check: 'Firebase authenticated',
491
- passed: status.authenticated,
492
- details: status.authenticated ? 'Credentials valid' : 'Not logged in',
493
- });
494
- if (!status.authenticated) {
495
- return requiresUserAction('Firebase authentication required', 'You must authenticate with Firebase before deploying.\nThe CLI is not currently logged in.', [
496
- 'Interactive login: firebase login',
497
- 'CI/Headless: firebase login:ci and set FIREBASE_TOKEN',
498
- 'Service account: Set GOOGLE_APPLICATION_CREDENTIALS environment variable',
499
- ], Date.now() - startTime);
500
- }
501
- checks.push({
502
- check: 'firebase.json exists',
503
- passed: status.configExists,
504
- details: status.configExists ? 'Found' : 'Not found',
505
- });
506
- if (!status.configExists) {
507
- return requiresUserAction('Firebase configuration missing', `No firebase.json found in ${workingDir}.\nThis file is required to deploy to Firebase.`, [
508
- 'Initialize Firebase: firebase init',
509
- 'Select the services you want to deploy (Hosting, Functions, etc.)',
510
- ], Date.now() - startTime);
511
- }
512
- // Build deploy command
513
- let cmd = 'firebase deploy';
514
- if (target !== 'all') {
515
- cmd += ` --only ${target}`;
516
- }
517
- if (project) {
518
- cmd += ` --project ${project}`;
519
- }
520
- if (dryRun) {
521
- cmd += ' --dry-run';
522
- }
523
- cmd += ' 2>&1';
524
- const result = await runCommand(`cd "${workingDir}" && ${cmd}`, 300000); // 5 min timeout
525
- const durationMs = Date.now() - startTime;
526
- const output = result.stdout + result.stderr;
527
- // Analyze output with Firebase-specific patterns
528
- const analysis = analyzeOutput(output, OutputPatterns.firebase, result.exitCode);
529
- checks.push({
530
- check: 'Deployment command',
531
- passed: result.exitCode === 0,
532
- details: `Exit code: ${result.exitCode}`,
533
- });
534
- // Check for hosting URL in output (indicates actual successful deployment)
535
- const hostingUrlMatch = output.match(/Hosting URL:\s*(https?:\/\/[^\s]+)/i);
536
- const functionUrlMatch = output.match(/Function URL[^:]*:\s*(https?:\/\/[^\s]+)/i);
537
- if (hostingUrlMatch && hostingUrlMatch[1]) {
538
- // Verify the deployed URL is actually accessible
539
- const urlCheck = await verifyUrlAccessible(hostingUrlMatch[1], 200, 15000);
540
- checks.push(urlCheck);
541
- if (urlCheck.passed && result.exitCode === 0) {
542
- return verifiedSuccess('Firebase deployment completed and verified', `Target: ${target}\n${project ? `Project: ${project}\n` : ''}${dryRun ? '(Dry run)\n' : ''}\nHosting URL: ${hostingUrlMatch[1]}\n\nDeployment Output:\n${output}`, checks, durationMs);
543
- }
544
- else if (result.exitCode === 0) {
545
- // Deployment said success but URL not accessible
546
- return partialSuccess('Firebase deployment completed but URL verification failed', `The deployment command succeeded but the hosting URL is not yet accessible.\nThis may be due to propagation delay.\n\nHosting URL: ${hostingUrlMatch[1]}\n\nDeployment Output:\n${output}`, checks, ['Wait 1-2 minutes for deployment to propagate', `Then verify: ${hostingUrlMatch[1]}`], durationMs);
547
- }
548
- }
549
- if (functionUrlMatch && result.exitCode === 0) {
550
- checks.push({
551
- check: 'Function deployment',
552
- passed: true,
553
- details: functionUrlMatch[1],
554
- });
555
- return verifiedSuccess('Firebase Functions deployment completed', `Target: ${target}\n${project ? `Project: ${project}\n` : ''}\nFunction URL: ${functionUrlMatch[1]}\n\nDeployment Output:\n${output}`, checks, durationMs);
556
- }
557
- // Exit code 0 but no URL found - might be config-only deployment
558
- if (result.exitCode === 0 && analysis.isSuccess) {
559
- checks.push({
560
- check: 'Output analysis',
561
- passed: true,
562
- details: 'Success pattern detected',
563
- });
564
- return verifiedSuccess('Firebase deployment completed', `Target: ${target}\n${project ? `Project: ${project}\n` : ''}${dryRun ? '(Dry run)\n' : ''}\nDeployment Output:\n${output}`, checks, durationMs);
565
- }
566
- // Exit code 0 but output suggests problems
567
- if (result.exitCode === 0 && analysis.isFailure) {
568
- const firebaseProvider = CLOUD_PROVIDERS['firebase'];
569
- const errorSuggestions = firebaseProvider
570
- ? analyzeDeploymentError(output, firebaseProvider).split('\n').slice(1).map(s => s.replace(/^[•]\s*/, ''))
571
- : [];
572
- return verifiedFailure('Firebase deployment command succeeded but output indicates errors', `The command exited with code 0 but the output contains error indicators.\n\nOutput:\n${output}`, errorSuggestions, checks, durationMs);
573
- }
574
- // Exit code 0 but can't verify
575
- if (result.exitCode === 0) {
576
- return unverifiedResult('Firebase deployment may have completed', `The command exited with code 0 but we cannot verify the deployment succeeded.\nNo hosting URL or success patterns found in output.\n\nOutput:\n${output}`, ['Manually check Firebase Console: https://console.firebase.google.com', 'Verify your deployment target is configured in firebase.json'], durationMs);
577
- }
578
- // Deployment failed - analyze the error
579
- const firebaseProviderForError = CLOUD_PROVIDERS['firebase'];
580
- const errorAnalysis = analyzeDeploymentError(output, firebaseProviderForError);
581
- const suggestedFixes = [];
582
- if (output.includes('authentication') || output.includes('login') || output.includes('not logged in')) {
583
- suggestedFixes.push('Run: firebase login --reauth');
584
- }
585
- if (output.includes('permission') || output.includes('denied') || output.includes('PERMISSION_DENIED')) {
586
- suggestedFixes.push('Check Firebase project permissions at https://console.firebase.google.com');
587
- }
588
- if (output.includes('quota') || output.includes('limit')) {
589
- suggestedFixes.push('Check billing/quota at https://console.firebase.google.com/billing');
590
- }
591
- if (output.includes('build') || output.includes('compile')) {
592
- suggestedFixes.push('Fix build errors first: npm run build');
593
- }
594
- return verifiedFailure(`Firebase deployment failed with exit code ${result.exitCode}`, `Target: ${target}\n${project ? `Project: ${project}\n` : ''}\n${errorAnalysis}\n\nFull Output:\n${output}`, suggestedFixes.length > 0 ? suggestedFixes : ['Review the error output above', 'Check Firebase documentation for the specific error'], checks, durationMs);
595
- },
596
- },
597
- {
598
- name: 'aliyun_deploy',
599
- description: `Deploy to Alibaba Cloud (Aliyun).
600
-
601
- Supports:
602
- - OSS (Object Storage Service) - static file hosting
603
- - FC (Function Compute) - serverless functions
604
- - ACR (Container Registry) - Docker images
605
- - ECS (Elastic Compute Service) - VM management
606
-
607
- Automatically handles authentication and common issues.`,
608
- parameters: {
609
- type: 'object',
610
- properties: {
611
- service: {
612
- type: 'string',
613
- description: 'Service to deploy: "oss", "fc", "acr", "ecs"',
614
- },
615
- action: {
616
- type: 'string',
617
- description: 'Action to perform (service-specific)',
618
- },
619
- region: {
620
- type: 'string',
621
- description: 'Aliyun region (e.g., cn-hangzhou, cn-shanghai)',
622
- },
623
- args: {
624
- type: 'string',
625
- description: 'Additional CLI arguments',
626
- },
627
- },
628
- required: ['service', 'action'],
629
- },
630
- handler: async (args) => {
631
- const service = args['service'];
632
- const action = args['action'];
633
- const region = args['region'];
634
- const extraArgs = args['args'];
635
- const startTime = Date.now();
636
- const checks = [];
637
- // Check status
638
- const status = await getFullCLIStatus('aliyun', workingDir);
639
- checks.push({
640
- check: 'Aliyun CLI installed',
641
- passed: status.installed,
642
- details: status.installed ? `v${status.version}` : 'Not found',
643
- });
644
- if (!status.installed) {
645
- return requiresUserAction('Aliyun CLI not installed', 'The Aliyun CLI must be installed before running commands.', [
646
- 'macOS: brew install aliyun-cli',
647
- 'Linux: curl -O https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz',
648
- 'Docs: https://www.alibabacloud.com/help/doc-detail/139508.htm',
649
- ], Date.now() - startTime);
650
- }
651
- checks.push({
652
- check: 'Aliyun authenticated',
653
- passed: status.authenticated,
654
- details: status.authenticated ? 'Credentials valid' : 'Not configured',
655
- });
656
- if (!status.authenticated) {
657
- return requiresUserAction('Aliyun not configured', 'You must configure Aliyun credentials before running commands.', [
658
- 'Run: aliyun configure',
659
- 'Enter your AccessKey ID and Secret',
660
- 'Get keys at: https://ram.console.aliyun.com/manage/ak',
661
- 'Or set: ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET',
662
- ], Date.now() - startTime);
663
- }
664
- // Build command
665
- let cmd = `aliyun ${service} ${action}`;
666
- if (region) {
667
- cmd += ` --region ${region}`;
668
- }
669
- if (extraArgs) {
670
- cmd += ` ${extraArgs}`;
671
- }
672
- cmd += ' 2>&1';
673
- const result = await runCommand(cmd, 120000);
674
- const durationMs = Date.now() - startTime;
675
- const output = result.stdout + result.stderr;
676
- checks.push({
677
- check: 'Command execution',
678
- passed: result.exitCode === 0,
679
- details: `Exit code: ${result.exitCode}`,
680
- });
681
- // Analyze output for success/failure patterns
682
- const analysis = analyzeOutput(output, OutputPatterns.command, result.exitCode);
683
- if (result.exitCode === 0 && analysis.confidence !== 'low') {
684
- // Try to parse JSON response for additional verification
685
- try {
686
- const jsonResponse = JSON.parse(output.trim());
687
- if (jsonResponse.RequestId) {
688
- checks.push({
689
- check: 'API response received',
690
- passed: true,
691
- details: `RequestId: ${jsonResponse.RequestId}`,
692
- });
693
- }
694
- }
695
- catch {
696
- // Not JSON, but command succeeded
697
- }
698
- return verifiedSuccess(`Aliyun ${service} ${action} completed`, `Service: ${service}\nAction: ${action}${region ? `\nRegion: ${region}` : ''}\n\nOutput:\n${output}`, checks, durationMs);
699
- }
700
- if (result.exitCode === 0 && analysis.confidence === 'low') {
701
- return unverifiedResult(`Aliyun ${service} ${action} may have completed`, `The command exited with code 0 but we cannot confirm success.\n\nOutput:\n${output}`, ['Manually verify the operation in Aliyun Console'], durationMs);
702
- }
703
- // Error analysis
704
- const suggestedFixes = [];
705
- if (output.includes('InvalidAccessKeyId') || output.includes('SignatureDoesNotMatch')) {
706
- suggestedFixes.push('Invalid credentials. Run `aliyun configure` with correct AccessKey');
707
- }
708
- if (output.includes('Forbidden')) {
709
- suggestedFixes.push('Permission denied. Check RAM policies at https://ram.console.aliyun.com');
710
- }
711
- if (output.includes('InvalidRegionId')) {
712
- suggestedFixes.push('Invalid region. Check available regions with: aliyun ecs DescribeRegions');
713
- }
714
- return verifiedFailure(`Aliyun ${service} ${action} failed with exit code ${result.exitCode}`, `Service: ${service}\nAction: ${action}${region ? `\nRegion: ${region}` : ''}\n\nOutput:\n${output}`, suggestedFixes.length > 0 ? suggestedFixes : ['Review the error message above'], checks, durationMs);
715
- },
716
- },
717
- {
718
- name: 'cloud_deploy',
719
- description: `Universal cloud deployment command that works across providers.
720
-
721
- Automatically:
722
- - Detects project type and configuration
723
- - Selects appropriate deployment target
724
- - Handles provider-specific requirements
725
- - Auto-fixes common issues
726
-
727
- Supports deployment to:
728
- - Firebase, Vercel, Netlify for web apps
729
- - AWS Lambda, GCP Functions, Azure Functions for serverless
730
- - Cloudflare Workers/Pages for edge deployments
731
- - Fly.io, Railway for containers`,
732
- parameters: {
733
- type: 'object',
734
- properties: {
735
- provider: {
736
- type: 'string',
737
- description: 'Cloud provider: firebase, vercel, netlify, cloudflare, fly, railway, aws, gcloud, azure',
738
- },
739
- command: {
740
- type: 'string',
741
- description: 'Deployment command (e.g., "deploy", "deploy --prod")',
742
- },
743
- auto_fix: {
744
- type: 'boolean',
745
- description: 'Automatically attempt to fix issues (default: true)',
746
- },
747
- },
748
- required: ['provider'],
749
- },
750
- handler: async (args) => {
751
- const providerId = args['provider']?.toLowerCase();
752
- const command = args['command'] || 'deploy';
753
- const autoFix = args['auto_fix'] !== false;
754
- const startTime = Date.now();
755
- const checks = [];
756
- const provider = CLOUD_PROVIDERS[providerId];
757
- if (!provider) {
758
- return verifiedFailure(`Unknown cloud provider: ${providerId}`, `The provider "${providerId}" is not recognized.`, [`Available providers: ${Object.keys(CLOUD_PROVIDERS).join(', ')}`], [], Date.now() - startTime);
759
- }
760
- // Check and potentially fix status
761
- let status = await getFullCLIStatus(providerId, workingDir);
762
- checks.push({
763
- check: `${provider.name} CLI installed`,
764
- passed: status.installed,
765
- details: status.installed ? `v${status.version}` : 'Not found',
766
- });
767
- if (!status.installed && autoFix) {
768
- const fixes = await autoFixIssues(providerId, workingDir);
769
- // Re-check after fix attempt
770
- status = await getFullCLIStatus(providerId, workingDir);
771
- if (!status.installed) {
772
- return requiresUserAction(`${provider.name} CLI could not be auto-installed`, `Automatic installation failed. Manual installation required.\n\nAuto-fix attempts:\n${fixes.join('\n')}`, [
773
- `Install manually: ${provider.installCommand}`,
774
- `Documentation: ${provider.installUrl}`,
775
- ], Date.now() - startTime);
776
- }
777
- }
778
- if (!status.installed) {
779
- return requiresUserAction(`${provider.name} CLI not installed`, `The ${provider.name} CLI must be installed before deployment.`, [
780
- `Install: ${provider.installCommand}`,
781
- `Docs: ${provider.installUrl}`,
782
- ], Date.now() - startTime);
783
- }
784
- checks.push({
785
- check: `${provider.name} authenticated`,
786
- passed: status.authenticated,
787
- details: status.authenticated ? 'Credentials valid' : 'Not logged in',
788
- });
789
- if (!status.authenticated) {
790
- return requiresUserAction(`${provider.name} authentication required`, `You must authenticate with ${provider.name} before deploying.`, [
791
- `Login: ${provider.loginCommand}`,
792
- `For CI, set: ${provider.envVars?.join(' or ') || 'appropriate credentials'}`,
793
- ], Date.now() - startTime);
794
- }
795
- // Execute deployment
796
- const cmd = `${provider.cliCommand} ${command} 2>&1`;
797
- const result = await runCommand(`cd "${workingDir}" && ${cmd}`, 300000);
798
- const durationMs = Date.now() - startTime;
799
- const output = result.stdout + result.stderr;
800
- checks.push({
801
- check: 'Deployment command',
802
- passed: result.exitCode === 0,
803
- details: `Exit code: ${result.exitCode}`,
804
- });
805
- // Analyze output
806
- const analysis = analyzeOutput(output, OutputPatterns.command, result.exitCode);
807
- if (result.exitCode === 0 && analysis.isSuccess) {
808
- return verifiedSuccess(`${provider.name} deployment completed`, `Command: ${provider.cliCommand} ${command}\n\nOutput:\n${output}`, checks, durationMs);
809
- }
810
- if (result.exitCode === 0 && analysis.isFailure) {
811
- return verifiedFailure(`${provider.name} deployment command succeeded but output indicates errors`, `The command exited with code 0 but the output contains error indicators.\n\nOutput:\n${output}`, [], checks, durationMs);
812
- }
813
- if (result.exitCode === 0) {
814
- // Can't determine success - mark as unverified
815
- return unverifiedResult(`${provider.name} deployment may have completed`, `The command exited with code 0 but we cannot confirm success.\n\nOutput:\n${output}`, [`Manually verify deployment at ${provider.name} console`], durationMs);
816
- }
817
- // Deployment failed
818
- const errorAnalysis = analyzeDeploymentError(output, provider);
819
- const suggestedActions = errorAnalysis
820
- .split('\n')
821
- .filter(line => line.includes('•') || line.includes('Fix:'))
822
- .map(line => line.replace(/^[•\s]+/, '').replace(/^\s*Fix:\s*/i, ''));
823
- return verifiedFailure(`${provider.name} deployment failed with exit code ${result.exitCode}`, `Command: ${provider.cliCommand} ${command}\n\n${errorAnalysis}\n\nFull Output:\n${output}`, suggestedActions.length > 0 ? suggestedActions : ['Review the error output', 'Check provider documentation'], checks, durationMs);
824
- },
825
- },
826
- {
827
- name: 'cloud_init',
828
- description: `Initialize a cloud project configuration.
829
-
830
- Creates configuration files and sets up project structure for:
831
- - Firebase (firebase.json, .firebaserc)
832
- - Vercel (vercel.json)
833
- - Netlify (netlify.toml)
834
- - Cloudflare (wrangler.toml)
835
-
836
- Auto-detects project type (React, Vue, Angular, Next.js, etc.) and configures appropriately.`,
837
- parameters: {
838
- type: 'object',
839
- properties: {
840
- provider: {
841
- type: 'string',
842
- description: 'Cloud provider to initialize: firebase, vercel, netlify, cloudflare',
843
- },
844
- project_type: {
845
- type: 'string',
846
- description: 'Project type: react, vue, angular, nextjs, static, node (auto-detected if not specified)',
847
- },
848
- },
849
- required: ['provider'],
850
- },
851
- handler: async (args) => {
852
- const providerId = args['provider']?.toLowerCase();
853
- const projectType = args['project_type'];
854
- // Detect project type if not specified
855
- const detectedType = projectType || detectProjectType(workingDir);
856
- const configs = {
857
- firebase: () => generateFirebaseConfig(detectedType, workingDir),
858
- vercel: () => generateVercelConfig(detectedType),
859
- netlify: () => generateNetlifyConfig(detectedType),
860
- cloudflare: () => generateCloudflareConfig(detectedType),
861
- };
862
- if (!configs[providerId]) {
863
- return `Initialization not supported for: ${providerId}\n\nSupported: firebase, vercel, netlify, cloudflare`;
864
- }
865
- const config = configs[providerId]();
866
- return `📝 ${CLOUD_PROVIDERS[providerId]?.name || providerId} Configuration\n\nProject type: ${detectedType}\n\n${config}`;
867
- },
868
- },
869
- {
870
- name: 'cloud_login',
871
- description: `Interactive login for cloud providers.
872
-
873
- Supports browser-based OAuth login for:
874
- - Firebase (firebase login)
875
- - Google Cloud (gcloud auth login)
876
- - AWS (aws configure)
877
- - Azure (az login)
878
- - Vercel (vercel login)
879
- - Netlify (netlify login)
880
- - Cloudflare (wrangler login)
881
- - Aliyun (aliyun configure)
882
- - Fly.io (flyctl auth login)
883
- - Railway (railway login)
884
- - Supabase (supabase login)
885
-
886
- Options:
887
- - reauth: Force re-authentication even if already logged in
888
- - no_localhost: Use device code flow (for remote/headless machines with browser access elsewhere)
889
- - ci_mode: Get instructions for CI/CD environment setup
890
-
891
- Use this when cloud_status shows authentication issues.`,
892
- parameters: {
893
- type: 'object',
894
- properties: {
895
- provider: {
896
- type: 'string',
897
- description: 'Cloud provider to login: firebase, gcloud, aws, azure, vercel, netlify, cloudflare, aliyun, fly, railway, supabase',
898
- },
899
- reauth: {
900
- type: 'boolean',
901
- description: 'Force re-authentication (default: false)',
902
- },
903
- no_localhost: {
904
- type: 'boolean',
905
- description: 'Use device code flow instead of localhost redirect (default: false)',
906
- },
907
- ci_mode: {
908
- type: 'boolean',
909
- description: 'Show CI/CD setup instructions instead of interactive login (default: false)',
910
- },
911
- },
912
- required: ['provider'],
913
- },
914
- handler: async (args) => {
915
- const providerId = args['provider']?.toLowerCase();
916
- const reauth = args['reauth'] === true;
917
- const noLocalhost = args['no_localhost'] === true;
918
- const ciMode = args['ci_mode'] === true;
919
- const provider = CLOUD_PROVIDERS[providerId];
920
- if (!provider) {
921
- return `Unknown provider: ${providerId}\n\nAvailable: ${Object.keys(CLOUD_PROVIDERS).join(', ')}`;
922
- }
923
- // Check if CLI is installed
924
- const installCheck = await checkCLIInstalled(provider);
925
- if (!installCheck.installed) {
926
- return `${provider.name} CLI not installed.\n\nInstall with: ${provider.installCommand}\nDocs: ${provider.installUrl}`;
927
- }
928
- // Build login command based on provider and options
929
- const loginCommands = {
930
- firebase: {
931
- standard: 'firebase login',
932
- reauth: 'firebase login --reauth',
933
- no_localhost: 'firebase login --no-localhost',
934
- ci: 'firebase login:ci',
935
- },
936
- gcloud: {
937
- standard: 'gcloud auth login',
938
- reauth: 'gcloud auth login --force',
939
- no_localhost: 'gcloud auth login --no-browser',
940
- ci: 'gcloud auth activate-service-account --key-file=',
941
- },
942
- aws: {
943
- standard: 'aws configure',
944
- reauth: 'aws configure',
945
- no_localhost: 'aws configure',
946
- ci: 'aws configure set',
947
- },
948
- azure: {
949
- standard: 'az login',
950
- reauth: 'az login',
951
- no_localhost: 'az login --use-device-code',
952
- ci: 'az login --service-principal',
953
- },
954
- vercel: {
955
- standard: 'vercel login',
956
- reauth: 'vercel login',
957
- no_localhost: 'vercel login',
958
- ci: 'vercel login --token',
959
- },
960
- netlify: {
961
- standard: 'netlify login',
962
- reauth: 'netlify login',
963
- no_localhost: 'netlify login',
964
- ci: 'netlify login --new',
965
- },
966
- cloudflare: {
967
- standard: 'wrangler login',
968
- reauth: 'wrangler login',
969
- no_localhost: 'wrangler login',
970
- ci: 'wrangler login',
971
- },
972
- aliyun: {
973
- standard: 'aliyun configure',
974
- reauth: 'aliyun configure',
975
- no_localhost: 'aliyun configure',
976
- ci: 'aliyun configure set',
977
- },
978
- fly: {
979
- standard: 'flyctl auth login',
980
- reauth: 'flyctl auth login',
981
- no_localhost: 'flyctl auth login',
982
- ci: 'flyctl auth token',
983
- },
984
- railway: {
985
- standard: 'railway login',
986
- reauth: 'railway login',
987
- no_localhost: 'railway login',
988
- ci: 'railway login --browserless',
989
- },
990
- supabase: {
991
- standard: 'supabase login',
992
- reauth: 'supabase login',
993
- no_localhost: 'supabase login',
994
- ci: 'supabase login',
995
- },
996
- };
997
- const providerCommands = loginCommands[providerId] || {
998
- standard: provider.loginCommand,
999
- reauth: provider.loginCommand,
1000
- no_localhost: provider.loginCommand,
1001
- ci: provider.loginCommand,
1002
- };
1003
- // Select the appropriate command
1004
- if (ciMode) {
1005
- const cmd = providerCommands['ci'] || provider.loginCommand;
1006
- return `CI/Headless Authentication for ${provider.name}
1007
-
1008
- For CI/CD environments, you need to set environment variables instead of interactive login.
1009
-
1010
- Command (for generating token): ${cmd}
1011
-
1012
- Environment variables to set:
1013
- ${provider.envVars?.map(v => ` - ${v}`).join('\n') || ' (none defined)'}
1014
-
1015
- For Firebase specifically:
1016
- 1. Run locally: firebase login:ci
1017
- 2. Copy the token
1018
- 3. Set FIREBASE_TOKEN in your CI environment
1019
-
1020
- For service accounts (Firebase/GCP):
1021
- 1. Create a service account in Google Cloud Console
1022
- 2. Download the JSON key file
1023
- 3. Set GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json`;
1024
- }
1025
- let cmd;
1026
- if (reauth) {
1027
- cmd = providerCommands['reauth'] || provider.loginCommand;
1028
- }
1029
- else if (noLocalhost) {
1030
- cmd = providerCommands['no_localhost'] || provider.loginCommand;
1031
- }
1032
- else {
1033
- cmd = providerCommands['standard'] || provider.loginCommand;
1034
- }
1035
- // Use 'script' command to provide pseudo-TTY for the login command
1036
- // This enables browser-based OAuth even in non-interactive shells
1037
- const platform = process.platform;
1038
- let wrappedCmd;
1039
- if (platform === 'darwin') {
1040
- // macOS: script -q /dev/null <command>
1041
- wrappedCmd = `script -q /dev/null ${cmd}`;
1042
- }
1043
- else if (platform === 'linux') {
1044
- // Linux: script -q -c "<command>" /dev/null
1045
- wrappedCmd = `script -q -c "${cmd}" /dev/null`;
1046
- }
1047
- else {
1048
- // Windows or other: try direct execution
1049
- wrappedCmd = cmd;
1050
- }
1051
- try {
1052
- const loginStartTime = Date.now();
1053
- // Run with longer timeout for OAuth flow (user needs to complete in browser)
1054
- const result = await runCommand(wrappedCmd, 180000);
1055
- const loginDurationMs = Date.now() - loginStartTime;
1056
- const loginChecks = [];
1057
- loginChecks.push({
1058
- check: 'Login command executed',
1059
- passed: result.exitCode === 0,
1060
- details: `Exit code: ${result.exitCode}`,
1061
- });
1062
- // CRITICAL: Don't trust string matching for "success" - actually verify authentication
1063
- // The word "success" can appear in error messages like "Failed to verify success"
1064
- // Always verify by actually checking authentication state
1065
- const authCheck = await checkAuthentication(provider);
1066
- loginChecks.push({
1067
- check: 'Authentication verification',
1068
- passed: authCheck.authenticated,
1069
- details: authCheck.authenticated ? 'Credentials valid' : (authCheck.error || 'Not authenticated'),
1070
- });
1071
- if (authCheck.authenticated) {
1072
- return verifiedSuccess(`${provider.name} login completed and verified`, `Provider: ${provider.name}\nCommand: ${cmd}\n\n${authCheck.details || 'Authentication verified.'}`, loginChecks, loginDurationMs);
1073
- }
1074
- else if (result.exitCode === 0) {
1075
- // Command succeeded but auth verification failed
1076
- // This can happen with race conditions or when auth takes time to propagate
1077
- return unverifiedResult(`${provider.name} login command completed but verification failed`, `The login command exited successfully but we could not verify authentication.\n\nCommand output:\n${result.stdout}\n\nThis may be a temporary issue or the authentication may not have propagated yet.`, [
1078
- `Wait a moment and try: ${provider.checkAuthCommand}`,
1079
- `Re-run login: ${cmd}`,
1080
- `Check credentials manually`,
1081
- ], loginDurationMs);
1082
- }
1083
- else {
1084
- // Command failed
1085
- const combined = result.stdout + result.stderr;
1086
- return verifiedFailure(`${provider.name} login failed`, `Exit code: ${result.exitCode}\n\nOutput:\n${combined || '(no output)'}`, [
1087
- `Try again: ${cmd}`,
1088
- `For browser issues: ${providerCommands['no_localhost'] || cmd}`,
1089
- `Check network connection`,
1090
- `Documentation: ${provider.installUrl}`,
1091
- ], loginChecks, loginDurationMs);
1092
- }
1093
- }
1094
- catch (error) {
1095
- return verifiedFailure(`Error during ${provider.name} login`, error instanceof Error ? error.message : String(error), [
1096
- `Run manually: ${cmd}`,
1097
- `For headless environments, set: ${provider.envVars?.join(', ') || 'appropriate credentials'}`,
1098
- ]);
1099
- }
1100
- },
1101
- },
1102
- ];
1103
- }
1104
- // Helper functions
1105
- function analyzeDeploymentError(output, provider) {
1106
- const suggestions = ['🔍 Error Analysis:'];
1107
- const lower = output.toLowerCase();
1108
- // Authentication issues
1109
- if (lower.includes('auth') || lower.includes('login') || lower.includes('token') || lower.includes('credential')) {
1110
- suggestions.push(`• Authentication issue detected`);
1111
- suggestions.push(` Fix: ${provider.loginCommand}`);
1112
- if (provider.envVars?.length) {
1113
- suggestions.push(` CI: Set ${provider.envVars[0]}`);
1114
- }
1115
- }
1116
- // Permission issues
1117
- if (lower.includes('permission') || lower.includes('denied') || lower.includes('forbidden') || lower.includes('access')) {
1118
- suggestions.push(`• Permission issue detected`);
1119
- suggestions.push(` Check your account permissions/roles`);
1120
- }
1121
- // Build issues
1122
- if (lower.includes('build') || lower.includes('compile') || lower.includes('error') || lower.includes('failed')) {
1123
- suggestions.push(`• Build/compile error detected`);
1124
- suggestions.push(` Run your build command locally first`);
1125
- }
1126
- // Network issues
1127
- if (lower.includes('network') || lower.includes('timeout') || lower.includes('econnrefused') || lower.includes('dns')) {
1128
- suggestions.push(`• Network connectivity issue`);
1129
- suggestions.push(` Check your internet connection`);
1130
- }
1131
- // Quota/limits
1132
- if (lower.includes('quota') || lower.includes('limit') || lower.includes('exceeded') || lower.includes('billing')) {
1133
- suggestions.push(`• Quota/billing issue detected`);
1134
- suggestions.push(` Check your account billing status`);
1135
- }
1136
- // Config issues
1137
- if (lower.includes('config') || lower.includes('not found') || lower.includes('missing')) {
1138
- suggestions.push(`• Configuration issue detected`);
1139
- suggestions.push(` Use cloud_init to create configuration`);
1140
- }
1141
- if (suggestions.length === 1) {
1142
- suggestions.push(`• Unable to determine specific cause`);
1143
- suggestions.push(` Try running the command directly for more details`);
1144
- }
1145
- return suggestions.join('\n');
1146
- }
1147
- function detectProjectType(dir) {
1148
- // Check for common framework indicators
1149
- const packageJsonPath = path.join(dir, 'package.json');
1150
- if (fs.existsSync(packageJsonPath)) {
1151
- try {
1152
- const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
1153
- const deps = { ...pkg.dependencies, ...pkg.devDependencies };
1154
- if (deps['next'])
1155
- return 'nextjs';
1156
- if (deps['@angular/core'])
1157
- return 'angular';
1158
- if (deps['vue'])
1159
- return 'vue';
1160
- if (deps['react'])
1161
- return 'react';
1162
- if (deps['svelte'])
1163
- return 'svelte';
1164
- if (deps['express'] || deps['fastify'] || deps['koa'])
1165
- return 'node';
1166
- }
1167
- catch {
1168
- // Ignore parse errors
1169
- }
1170
- }
1171
- // Check for index.html (static site)
1172
- if (fs.existsSync(path.join(dir, 'index.html')) || fs.existsSync(path.join(dir, 'public', 'index.html'))) {
1173
- return 'static';
1174
- }
1175
- return 'unknown';
1176
- }
1177
- function generateFirebaseConfig(projectType, _dir) {
1178
- const buildDirs = {
1179
- react: 'build',
1180
- nextjs: 'out',
1181
- angular: 'dist',
1182
- vue: 'dist',
1183
- svelte: 'public',
1184
- static: 'public',
1185
- unknown: 'public',
1186
- };
1187
- const buildDir = buildDirs[projectType] || 'public';
1188
- const config = {
1189
- hosting: {
1190
- public: buildDir,
1191
- ignore: ['firebase.json', '**/.*', '**/node_modules/**'],
1192
- rewrites: [{ source: '**', destination: '/index.html' }],
1193
- },
1194
- };
1195
- return `Create firebase.json:
1196
- \`\`\`json
1197
- ${JSON.stringify(config, null, 2)}
1198
- \`\`\`
1199
-
1200
- Then run: firebase init
1201
- Select Hosting and follow the prompts.`;
1202
- }
1203
- function generateVercelConfig(projectType) {
1204
- const configs = {
1205
- nextjs: {}, // Vercel auto-detects Next.js
1206
- react: { buildCommand: 'npm run build', outputDirectory: 'build' },
1207
- vue: { buildCommand: 'npm run build', outputDirectory: 'dist' },
1208
- angular: { buildCommand: 'npm run build', outputDirectory: 'dist' },
1209
- static: { buildCommand: null, outputDirectory: '.' },
1210
- unknown: {},
1211
- };
1212
- const config = configs[projectType] || configs['unknown'];
1213
- return `Create vercel.json:
1214
- \`\`\`json
1215
- ${JSON.stringify(config, null, 2)}
1216
- \`\`\`
1217
-
1218
- Then run: vercel`;
1219
- }
1220
- function generateNetlifyConfig(projectType) {
1221
- const configs = {
1222
- react: { command: 'npm run build', publish: 'build' },
1223
- nextjs: { command: 'npm run build', publish: '.next' },
1224
- vue: { command: 'npm run build', publish: 'dist' },
1225
- angular: { command: 'npm run build', publish: 'dist' },
1226
- static: { command: '', publish: '.' },
1227
- unknown: { command: 'npm run build', publish: 'public' },
1228
- };
1229
- const config = configs[projectType] || configs['unknown'] || { command: 'npm run build', publish: 'public' };
1230
- return `Create netlify.toml:
1231
- \`\`\`toml
1232
- [build]
1233
- command = "${config.command}"
1234
- publish = "${config.publish}"
1235
-
1236
- [[redirects]]
1237
- from = "/*"
1238
- to = "/index.html"
1239
- status = 200
1240
- \`\`\`
1241
-
1242
- Then run: netlify deploy`;
1243
- }
1244
- function generateCloudflareConfig(projectType) {
1245
- return `Create wrangler.toml:
1246
- \`\`\`toml
1247
- name = "my-${projectType}-app"
1248
- main = "src/index.js"
1249
- compatibility_date = "${new Date().toISOString().split('T')[0]}"
1250
-
1251
- [site]
1252
- bucket = "./dist"
1253
- \`\`\`
1254
-
1255
- For Pages, run: npx wrangler pages project create`;
1256
- }
1257
- export { CLOUD_PROVIDERS, getFullCLIStatus, autoFixIssues };
1258
- //# sourceMappingURL=cloudTools.js.map